From f2961228a94d621d6ce187584f8e73809960681c Mon Sep 17 00:00:00 2001 From: ncnynl Date: Sun, 23 Jun 2024 17:02:56 +0800 Subject: [PATCH 01/54] Update zh.json Full translation of all variables --- public/app-resources/languages/zh.json | 4343 ++++++++++++------------ 1 file changed, 2172 insertions(+), 2171 deletions(-) diff --git a/public/app-resources/languages/zh.json b/public/app-resources/languages/zh.json index 454f6a477d..bd419de38c 100644 --- a/public/app-resources/languages/zh.json +++ b/public/app-resources/languages/zh.json @@ -2,11 +2,11 @@ "translated": { "Account Settings": "帐户设置", "Age": "年龄", - "Agree to Terms of Service": "同意条款服务", - "BACK": "后", + "Agree to Terms of Service": "同意服务条款", + "BACK": "后退", "Camera": "照相机", "Create Account": "创建帐户", - "Create An Account": "申请一个新帐号", + "Create An Account": "申请新帐号", "Data Label": "数据记录单", "Day {{day}}": "时期 {{day}}", "days old": "21日龄", @@ -20,22 +20,22 @@ "Execute Sequence": "执行序列", "FIRMWARE": "固件", "GO": "走", - "I Agree to the Terms of Service": "我同一服务条款", + "I Agree to the Terms of Service": "我同意服务条款", "Location": "位置", "Login": "登录", "Logout": "注销", "Message": "消息", - "MOVE AMOUNT (mm)": "移动量 (mm)", + "MOVE AMOUNT (mm)": "移动距离 (mm)", "Move Relative": "相对移动", "New Password": "新口令", - "no": "不", + "no": "否", "Old Password": "原口令", "Operator": "操作员", "Package Name": "类名", "Parameters": "参数", "Password": "口令", "Plants": "植物", - "Problem Loading Terms of Service": "服务的问题加载条款", + "Problem Loading Terms of Service": "加载服务条款时出现的问题", "Regimens": "方案", "Request sent": "发送请求", "Reset": "重新设定", @@ -53,7 +53,7 @@ "Speed": "速度", "Started": "启动", "Starts": "开始", - "Steps per MM": "步/MM", + "Steps per MM": "步距/MM", "Take a Photo": "拍照", "Take Photo": "拍照", "Time": "时间", @@ -74,2200 +74,2201 @@ }, "untranslated": { "": "", - " copy ": " copy ", - " Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:": " Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:", - " request sent to device.": " request sent to device.", - " The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.": " The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.", - " THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.": " THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "? items": "? items", - "'Find Axis Length' command": "'Find Axis Length' command", - "'Find Home' command": "'Find Home' command", - "'Move To Home' command": "'Move To Home' command", - "'Set Home' command": "'Set Home' command", - "\"Break in\" the cable carrier, double check belt tension, and double check the eccentric spacers (Genesis kits only).": "\"Break in\" the cable carrier, double check belt tension, and double check the eccentric spacers (Genesis kits only).", - "\"Break in\" the cable carrier, double check belt tension, and double check the eccentric spacers.": "\"Break in\" the cable carrier, double check belt tension, and double check the eccentric spacers.", - "(No selection)": "(No selection)", - "(resets upon refresh)": "(resets upon refresh)", - "(unknown)": "(unknown)", + " copy ": " 复制 ", + " Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:": " 特此授予获得此软件和相关文档文件(“软件”)副本的任何人免费许可,以无限制方式处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再授权和/或销售软件副本的权利,并允许向其提供软件的人员这样做,但须遵守以下条件:", + " request sent to device.": " 请求已发送至设备。", + " The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.": " 上述版权声明和本许可声明均应包含在软件的所有副本或重要部分中。", + " THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.": "软件按“原样”提供,不作任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权性的保证。在任何情况下,作者或版权持有者均不对因软件或使用或其他处理软件而引起的或与之相关的任何索赔、损害或其他责任承担责任,无论是合同行为、侵权行为还是其他行为。", + "? items": "? 项目", + "'Find Axis Length' command": "'查找Axis长度'命令", + "'Find Home' command": "'查找Home'命令", + "'Move To Home' command": "'移至Home'命令", + "'Set Home' command": "'设置Home'命令", + "\"Break in\" the cable carrier, double check belt tension, and double check the eccentric spacers (Genesis kits only).": "'压入'电缆托架,仔细检查皮带张力,仔细检查偏心垫片(仅限 Genesis 套件)。", + "\"Break in\" the cable carrier, double check belt tension, and double check the eccentric spacers.": "'压入'电缆托架,仔细检查皮带张力,并仔细检查偏心垫片。”", + "(No selection)": "(不选择)", + "(resets upon refresh)": "(刷新后重置)", + "(unknown)": "(未知)", "(x, y, z)": "(x, y, z)", - "{{ amount }}mm": "{{ amount }}mm", - "{{ axis }}-axis profile": "{{ axis }}-axis profile", + "{{ amount }}mm": "{{ amount }}毫米", + "{{ axis }}-axis profile": "{{ axis }}-轴 配置", "{{ name }} Grid": "{{ name }} Grid", - "{{ resetMethod }} resetting your FarmBot will not affect any of your data or settings from your web app account, allowing you to do a complete restore to your device once it is back online and paired with your web app account.": "{{ resetMethod }} resetting your FarmBot will not affect any of your data or settings from your web app account, allowing you to do a complete restore to your device once it is back online and paired with your web app account.", - "{{axis}} (mm)": "{{axis}} (mm)", - "{{axis}}-Offset": "{{axis}}-Offset", - "{{count}} items": "{{count}} items", - "{{length}} {{name}} selected": "{{length}} {{name}} selected", - "{{seconds}} seconds!": "{{seconds}} seconds!", - "# of plants": "# of plants", + "{{ resetMethod }} resetting your FarmBot will not affect any of your data or settings from your web app account, allowing you to do a complete restore to your device once it is back online and paired with your web app account.": "{{ resetMethod }} 重置您的 FarmBot 不会影响您的 Web 应用程序帐户中的任何数据或设置,一旦设备重新上线并与 Web 应用程序帐户配对,您就可以对其进行完全恢复。", + "{{axis}} (mm)": "{{axis}} (毫米)", + "{{axis}}-Offset": "{{axis}}-偏移", + "{{count}} items": "{{count}} 条", + "{{length}} {{name}} selected": "{{length}} {{name}} 被选择", + "{{seconds}} seconds!": "{{seconds}} 秒!", + "# of plants": "# 植物", "1280 x 960 (1.3MP)": "1280 x 960 (1.3MP)", "1600 x 1200 (2MP)": "1600 x 1200 (2MP)", - "24 hour response time": "24 hour response time", + "24 hour response time": "24 小时响应", "2592 x 1944 (5MP)": "2592 x 1944 (5MP)", "320 x 240 (0.08MP)": "320 x 240 (0.08MP)", "3280 x 2464 (8MP)": "3280 x 2464 (8MP)", "4056 x 3040 (12.3MP)": "4056 x 3040 (12.3MP)", "640 x 480 (0.3MP)": "640 x 480 (0.3MP)", - "72 hour response time": "72 hour response time", + "72 hour response time": "72小时响应", "800 x 600 (0.5MP)": "800 x 600 (0.5MP)", - "A different axis moved": "A different axis moved", - "A microstep value of 1 is recommended for best performance when quiet motor mode is enabled.": "A microstep value of 1 is recommended for best performance when quiet motor mode is enabled.", - "A new version of the FarmBot web app has been released. Refresh page?": "A new version of the FarmBot web app has been released. Refresh page?", - "Abort": "Abort", - "Abort and recover": "Abort and recover", - "Absolute movement": "Absolute movement", - "Accelerate for (mm)": "Accelerate for (mm)", - "Accelerate for toward home (mm)": "Accelerate for toward home (mm)", - "Account": "Account", - "Account has been reset.": "Account has been reset.", - "Account Menu": "Account Menu", - "Account Not Verified": "Account Not Verified", - "Action": "Action", - "Actions": "Actions", - "active": "active", - "Active": "Active", - "add": "add", - "Add a seed container": "Add a seed container", - "Add a tool or seed container": "Add a tool or seed container", - "Add Command": "Add Command", - "Add event": "Add event", - "Add Event": "Add Event", - "add filter": "add filter", - "Add garden": "Add garden", - "Add group": "Add group", - "Add more groups": "Add more groups", - "Add more plants": "Add more plants", - "Add new": "Add new", - "Add new garden": "Add new garden", - "add new group": "add new group", - "Add new pin binding": "Add new pin binding", - "add new regimen": "add new regimen", - "add new saved garden": "add new saved garden", - "add new sequence": "add new sequence", - "Add new slot": "Add new slot", - "Add new zone": "Add new zone", - "add number filter": "add number filter", - "add peripheral": "add peripheral", - "add plant": "add plant", - "Add Plant": "Add Plant", - "Add plant at current FarmBot location {{coordinate}}": "Add plant at current FarmBot location {{coordinate}}", - "Add plant at current location": "Add plant at current location", - "Add plants to map": "Add plants to map", - "add point": "add point", - "Add point at this location": "Add point at this location", - "Add pre-made resources upon selection": "Add pre-made resources upon selection", - "Add selected": "Add selected", - "add sensor reading": "add sensor reading", - "add sensors": "add sensors", - "Add sensors here to monitor FarmBot's sensors. To edit and create new sensors, press the EDIT button.": "Add sensors here to monitor FarmBot's sensors. To edit and create new sensors, press the EDIT button.", - "add sequence step": "add sequence step", - "Add slot": "Add slot", - "add stock peripherals": "add stock peripherals", - "add stock pin bindings": "add stock pin bindings", - "add stock sensors": "add stock sensors", - "add this crop on OpenFarm?": "add this crop on OpenFarm?", - "Add variable": "Add variable", - "Add webcam": "Add webcam", - "add weed": "add weed", - "Add weed": "Add weed", - "add week": "add week", - "Add zone": "Add zone", - "Adjust one or both camera offset values and check again.": "Adjust one or both camera offset values and check again.", - "advance": "advance", - "Advanced": "Advanced", - "advanced mode": "advanced mode", - "age": "age", - "age selection empty": "age selection empty", - "agree": "agree", - "all": "all", - "All": "All", - "All items scheduled before the start time. Nothing to run.": "All items scheduled before the start time. Nothing to run.", - "All of the plants you added to your garden are listed here in the plants panel. Mousing over a plant will highlight it in the map and vice versa. Go ahead and click a plant and then advance the tour.": "All of the plants you added to your garden are listed here in the plants panel. Mousing over a plant will highlight it in the map and vice versa. Go ahead and click a plant and then advance the tour.", - "All Soil Height": "All Soil Height", - "All systems nominal.": "All systems nominal.", + "A different axis moved": "移动的轴", + "A microstep value of 1 is recommended for best performance when quiet motor mode is enabled.": "当启用静音电机模式时,建议使用微步值 1 以获得最佳性能。", + "A new version of the FarmBot web app has been released. Refresh page?": "FarmBot 网络应用程序的新版本已发布。刷新页面?", + "Abort": "中止", + "Abort and recover": "中止并恢复", + "Absolute movement": "绝对移动", + "Accelerate for (mm)": "加速 (毫米)", + "Accelerate for toward home (mm)": "朝Home位置加速 (毫米)", + "Account": "账号", + "Account has been reset.": "账号已重置", + "Account Menu": "账号菜单", + "Account Not Verified": "账号未认证", + "Action": "执行", + "Actions": "动作", + "active": "活动", + "Active": "活动", + "add": "添加", + "Add a seed container": "添加一个种子容器", + "Add a tool or seed container": "添加一个工具或种子容器", + "Add Command": "添加命令", + "Add event": "添加事件", + "Add Event": "添加事件", + "add filter": "添加过滤", + "Add garden": "添加花园", + "Add group": "添加分组", + "Add more groups": "添加更多分组", + "Add more plants": "添加更多植物", + "Add new": "添加", + "Add new garden": "添加新花园", + "add new group": "添加新分组", + "Add new pin binding": "添加新引脚绑定", + "add new regimen": "添加新方案", + "add new saved garden": "添加新的已保存的花园", + "add new sequence": "添加序列", + "Add new slot": "添加新槽", + "Add new zone": "添加新区", + "add number filter": "添加号码过滤器", + "add peripheral": "添加外围设备", + "add plant": "添加植物", + "Add Plant": "添加植物", + "Add plant at current FarmBot location {{coordinate}}": "在当前 FarmBot 位置添加植物 {{coordinate}}", + "Add plant at current location": "在当前位置添加植物", + "Add plants to map": "添加植物到地图", + "add point": "添加点", + "Add point at this location": "添加点在此位置", + "Add pre-made resources upon selection": "根据选择添加预制资源", + "Add selected": "添加选定", + "add sensor reading": "添加传感器读数", + "add sensors": "添加传感器", + "Add sensors here to monitor FarmBot's sensors. To edit and create new sensors, press the EDIT button.": "在此处添加传感器以监控 FarmBot 的传感器。要编辑和创建新的传感器,请按“编辑”按钮。", + "add sequence step": "添加序列步骤", + "Add slot": "添加槽", + "add stock peripherals": "添加stock外设", + "add stock pin bindings": "添加stock引脚绑定", + "add stock sensors": "添加stock传感器", + "add this crop on OpenFarm?": "在 OpenFarm 上添加这种作物?", + "Add variable": "添加变量", + "Add webcam": "添加网络摄像头", + "add weed": "添加杂草", + "Add weed": "添加杂草", + "add week": "添加周数", + "Add zone": "添加区域", + "Adjust one or both camera offset values and check again.": "调整一个或两个相机偏移值,然后再次检查。", + "advance": "高级", + "Advanced": "高级", + "advanced mode": "高级模式", + "age": "年龄", + "age selection empty": "年龄选择为空", + "agree": "同意", + "all": "所有", + "All": "所有", + "All items scheduled before the start time. Nothing to run.": "所有项目均在开始时间之前安排好。没有要运行的项目。", + "All of the plants you added to your garden are listed here in the plants panel. Mousing over a plant will highlight it in the map and vice versa. Go ahead and click a plant and then advance the tour.": "您添加到花园的所有植物都列在植物面板中。将鼠标悬停在植物上会在地图上突出显示该植物,反之亦然。继续单击植物,然后继续游览。", + "All Soil Height": "所有土壤高度", + "All systems nominal.": "所有系统均正常。", "alpha": "alpha", - "Already added.": "Already added.", - "Always": "Always", - "always highlight current photo in map": "always highlight current photo in map", - "Always Power Motors": "Always Power Motors", - "Amount of time to wait for a command to execute before stopping. (default: x: {{ x }}, y: {{ y }}, z: {{ z }} seconds)": "Amount of time to wait for a command to execute before stopping. (default: x: {{ x }}, y: {{ y }}, z: {{ z }} seconds)", - "analog": "analog", - "Analog": "Analog", - "and": "and", - "Angle (0-180)": "Angle (0-180)", - "any": "any", - "App could not be fully loaded, we recommend you try refreshing the page.": "App could not be fully loaded, we recommend you try refreshing the page.", - "APP VERSION": "APP VERSION", - "apply": "apply", - "apply garden": "apply garden", + "Already added.": "已经添加", + "Always": "总是", + "always highlight current photo in map": "始终在地图上突出显示当前照片", + "Always Power Motors": "总是使能电机", + "Amount of time to wait for a command to execute before stopping. (default: x: {{ x }}, y: {{ y }}, z: {{ z }} seconds)": "停止之前等待命令执行的时间。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }} 秒)", + "analog": "模拟", + "Analog": "模拟", + "and": "和", + "Angle (0-180)": "角度 (0-180)", + "any": "任意", + "App could not be fully loaded, we recommend you try refreshing the page.": "应用程序无法完全加载,我们建议您尝试刷新页面。", + "APP VERSION": "应用程序版本", + "apply": "申请", + "apply garden": "申请花园", "Arduino/Farmduino": "Arduino/Farmduino", - "Are all configurator steps complete?": "Are all configurator steps complete?", - "Are FarmBot's motors unpowered? (Try moving the Y-axis by hand)": "Are FarmBot's motors unpowered? (Try moving the Y-axis by hand)", - "Are they in use by sequences?": "Are they in use by sequences?", - "Are you finished customizing the buttons?": "Are you finished customizing the buttons?", - "Are you planning on using WiFi or have you connected the ethernet cable?": "Are you planning on using WiFi or have you connected the ethernet cable?", - "Are you sure you want to delete {{length}} plants?": "Are you sure you want to delete {{length}} plants?", - "Are you sure you want to delete all items?": "Are you sure you want to delete all items?", - "Are you sure you want to delete all logs? A page refresh will be required.": "Are you sure you want to delete all logs? A page refresh will be required.", - "Are you sure you want to delete all setup progress?": "Are you sure you want to delete all setup progress?", - "Are you sure you want to delete this first party farmware? Doing so will limit the functionality of your FarmBot and may cause unexpected behavior.": "Are you sure you want to delete this first party farmware? Doing so will limit the functionality of your FarmBot and may cause unexpected behavior.", - "Are you sure you want to delete this item?": "Are you sure you want to delete this item?", - "Are you sure you want to delete this step?": "Are you sure you want to delete this step?", - "Are you sure you want to unlock the device?": "Are you sure you want to unlock the device?", - "Areas": "Areas", - "as": "as", - "as described in the software documentation.": "as described in the software documentation.", - "As soon as possible": "As soon as possible", - "Assemble your FarmBot.": "Assemble your FarmBot.", - "Assembly": "Assembly", - "Assembly documentation": "Assembly documentation", + "Are all configurator steps complete?": "所有配置器步骤是否完成?", + "Are FarmBot's motors unpowered? (Try moving the Y-axis by hand)": "FarmBot 的电机是否没有动力?(尝试手动移动 Y 轴)", + "Are they in use by sequences?": "它们是否被序列使用?", + "Are you finished customizing the buttons?": "按钮自定义完成了吗?", + "Are you planning on using WiFi or have you connected the ethernet cable?": "您打算使用 WiFi 还是已连接以太网电缆?", + "Are you sure you want to delete {{length}} plants?": "您确定要删除 {{length}} 株植物吗?", + "Are you sure you want to delete all items?": "您确实要删除所有项目吗?", + "Are you sure you want to delete all logs? A page refresh will be required.": "您确定要删除所有日志吗?需要刷新页面。", + "Are you sure you want to delete all setup progress?": "您确实要删除所有安装进度吗?", + "Are you sure you want to delete this first party farmware? Doing so will limit the functionality of your FarmBot and may cause unexpected behavior.": "您确定要删除此第一方农场软件吗?这样做会限制 FarmBot 的功能,并可能导致意外行为。", + "Are you sure you want to delete this item?": "你确定要删除这个项目吗?", + "Are you sure you want to delete this step?": "您确实要删除此步骤吗?", + "Are you sure you want to unlock the device?": "您确定要解锁该设备吗?", + "Areas": "区域", + "as": "如", + "as described in the software documentation.": "如软件文档中所述。", + "As soon as possible": "尽快地", + "Assemble your FarmBot.": "组装你的 FarmBot。", + "Assembly": "组装", + "Assembly documentation": "组装文档", "Assertion": "Assertion", - "Assign an action or sequence to execute when a Raspberry Pi GPIO pin is activated.": "Assign an action or sequence to execute when a Raspberry Pi GPIO pin is activated.", + "Assign an action or sequence to execute when a Raspberry Pi GPIO pin is activated.": "分配在 Raspberry Pi GPIO 引脚激活时执行的操作或序列", "at soil level": "at soil level", - "Attach the rotary tool to the UTM and press VERIFY.": "Attach the rotary tool to the UTM and press VERIFY.", - "Attach the seeder tool to the UTM and press VERIFY.": "Attach the seeder tool to the UTM and press VERIFY.", - "Attach the soil sensor tool to the UTM and press the READ SENSOR for the SOIL MOISTURE sensor.": "Attach the soil sensor tool to the UTM and press the READ SENSOR for the SOIL MOISTURE sensor.", - "Attach the soil sensor tool to the UTM and press VERIFY.": "Attach the soil sensor tool to the UTM and press VERIFY.", - "Attach the watering nozzle tool to the UTM and press VERIFY.": "Attach the watering nozzle tool to the UTM and press VERIFY.", - "Attach the weeder tool to the UTM and press VERIFY.": "Attach the weeder tool to the UTM and press VERIFY.", - "Attempting to reconnect to the message broker": "Attempting to reconnect to the message broker", - "Author": "Author", - "auto update": "auto update", - "Automatic": "Automatic", - "Average": "Average", - "Average time": "Average time", - "away": "away", - "Axes": "Axes", - "axis": "axis", - "Axis is already at maximum position": "Axis is already at maximum position", - "Axis is already at minimum position": "Axis is already at minimum position", - "AXIS LENGTH": "AXIS LENGTH", - "Axis Length (mm)": "Axis Length (mm)", - "back": "back", - "Back": "Back", - "Back to plant overview": "Back to plant overview", - "back to sequence": "back to sequence", - "back to sequences": "back to sequences", - "Bad username or password": "Bad username or password", - "Before attaching the rotary tool or turning it on, ensure that all hands, feet, hair, and other body parts will be kept away from the tool and a safe distance will be maintained while the rotary tool is attached. Be mindful of debris that may be projected and use appropriate protective equipment. Disconnect the rotary tool when not in use.": "Before attaching the rotary tool or turning it on, ensure that all hands, feet, hair, and other body parts will be kept away from the tool and a safe distance will be maintained while the rotary tool is attached. Be mindful of debris that may be projected and use appropriate protective equipment. Disconnect the rotary tool when not in use.", - "before troubleshooting.": "before troubleshooting.", - "Begin": "Begin", - "Begin?": "Begin?", - "Best time": "Best time", - "beta": "beta", + "Attach the rotary tool to the UTM and press VERIFY.": "将旋转工具连接到 UTM 并按 VERIFY(验证)。", + "Attach the seeder tool to the UTM and press VERIFY.": "将播种机工具连接到 UTM 并按 VERIFY。", + "Attach the soil sensor tool to the UTM and press the READ SENSOR for the SOIL MOISTURE sensor.": "将土壤传感器工具连接到 UTM,然后按下土壤湿度传感器的读取传感器。", + "Attach the soil sensor tool to the UTM and press VERIFY.": "将土壤传感器工具连接到 UTM 并按 VERIFY。", + "Attach the watering nozzle tool to the UTM and press VERIFY.": "将浇水喷嘴工具安装到 UTM 上并按 VERIFY(验证)。", + "Attach the weeder tool to the UTM and press VERIFY.": "将除草工具安装到 UTM 并按 VERIFY(验证)。", + "Attempting to reconnect to the message broker": "尝试重新连接消息代理", + "Author": "作者", + "auto update": "自动更新", + "Automatic": "自动的", + "Average": "平均的", + "Average time": "平均时间", + "away": "离开", + "Axes": "轴", + "axis": "轴", + "Axis is already at maximum position": "轴已处于最大位置", + "Axis is already at minimum position": "轴已处于最小位置", + "AXIS LENGTH": "轴长", + "Axis Length (mm)": "轴长 (mm)", + "back": "后退", + "Back": "后退", + "Back to plant overview": "返回工厂概览", + "back to sequence": "返回序列", + "back to sequences": "返回序列", + "Bad username or password": "用户名或密码错误", + "Before attaching the rotary tool or turning it on, ensure that all hands, feet, hair, and other body parts will be kept away from the tool and a safe distance will be maintained while the rotary tool is attached. Be mindful of debris that may be projected and use appropriate protective equipment. Disconnect the rotary tool when not in use.": "在安装或打开旋转工具之前,请确保所有手、脚、头发和其他身体部位都远离工具,并在安装旋转工具时保持安全距离。注意可能抛出的碎屑并使用适当的防护设备。不使用时请断开旋转工具的连接。", + "before troubleshooting.": "进行故障排除之前。", + "Begin": "开始", + "Begin?": "开始?", + "Best time": "最好的时间", + "beta": "测试版", "BIND": "BIND", "Binomial Name": "Binomial Name", - "Black": "Black", - "Blue": "Blue", - "BLUR": "BLUR", - "Boot sequence": "Boot sequence", - "Boot Sequence": "Boot Sequence", - "BOOT SEQUENCE": "BOOT SEQUENCE", - "bot is online": "bot is online", - "Bottom Left": "Bottom Left", - "Bottom Right": "Bottom Right", - "Box LED 3": "Box LED 3", - "Box LED 4": "Box LED 4", - "Box LEDs": "Box LEDs", - "Browser FarmBot activity beep": "Browser FarmBot activity beep", - "Business Documentation": "Business Documentation", - "Busy": "Busy", - "Button {{ num }}": "Button {{ num }}", - "Button {{ num }}: E-STOP": "Button {{ num }}: E-STOP", - "Button {{ num }}: UNLOCK": "Button {{ num }}: UNLOCK", - "Button 1": "Button 1", - "Button 2": "Button 2", - "Button 3": "Button 3", - "Button 4": "Button 4", - "Button 5": "Button 5", - "Calibrate": "Calibrate", - "Calibrate camera first": "Calibrate camera first", - "Calibrate FarmBot's camera for use in the weed detection software.": "Calibrate FarmBot's camera for use in the weed detection software.", - "Calibrate your camera in the Photos panel before detecting weeds.": "Calibrate your camera in the Photos panel before detecting weeds.", - "Calibration": "Calibration", - "calibration blur": "calibration blur", - "Calibration card": "Calibration card", - "calibration hue": "calibration hue", - "calibration iterations": "calibration iterations", - "calibration morph": "calibration morph", - "calibration object separation": "calibration object separation", - "calibration object separation along axis": "calibration object separation along axis", - "Calibration preparation": "Calibration preparation", - "Calibration retries": "Calibration retries", - "Calibration retry reset distance (mm)": "Calibration retry reset distance (mm)", - "calibration saturation": "calibration saturation", - "Calibration total retries": "Calibration total retries", - "calibration value": "calibration value", - "camera": "camera", - "CAMERA": "CAMERA", - "Camera calibrated at z-axis height": "Camera calibrated at z-axis height", - "Camera calibration": "Camera calibration", - "Camera Calibration": "Camera Calibration", - "Camera calibration allows correct photo rotation and placement in the Farm Designer map. Place the camera calibration card on the soil underneath the camera with the side shown below face up. The card must be fully visible to the camera.": "Camera calibration allows correct photo rotation and placement in the Farm Designer map. Place the camera calibration card on the soil underneath the camera with the side shown below face up. The card must be fully visible to the camera.", - "Camera calibration cards are available in the shop and can be used with any FarmBot version.": "Camera calibration cards are available in the shop and can be used with any FarmBot version.", - "Camera calibration required": "Camera calibration required", - "Camera not yet calibrated.": "Camera not yet calibrated.", - "Camera offset from the UTM position in millimeters. Once calibrated, use these values to align photos to the Farm Designer grid by matching the grid and locations in photos to the grid and locations in the Farm Designer. (default: (x: {{ defaultX }}, y: {{ defaultY }}))": "Camera offset from the UTM position in millimeters. Once calibrated, use these values to align photos to the Farm Designer grid by matching the grid and locations in photos to the grid and locations in the Farm Designer. (default: (x: {{ defaultX }}, y: {{ defaultY }}))", - "camera offset x": "camera offset x", - "camera offset y": "camera offset y", - "camera rotation": "camera rotation", - "Camera rotation in degrees. This value should be minimized (to near zero) by rotating the camera in its mount until it is aligned with FarmBot's axes. (default: {{ defaultAngle }})": "Camera rotation in degrees. This value should be minimized (to near zero) by rotating the camera in its mount until it is aligned with FarmBot's axes. (default: {{ defaultAngle }})", - "Camera settings": "Camera settings", - "Camera view": "Camera view", - "camera view area": "camera view area", - "Camera voltage is low": "Camera voltage is low", - "Camera voltage may be low. Try a different Raspberry Pi USB power cable.": "Camera voltage may be low. Try a different Raspberry Pi USB power cable.", - "Cameras": "Cameras", - "Can't connect to bot": "Can't connect to bot", - "Can't edit variable name while in use.": "Can't edit variable name while in use.", - "Can't execute unsaved sequences": "Can't execute unsaved sequences", - "cancel": "cancel", - "Cancel": "Cancel", - "Cannot change between Sequences and Regimens.": "Cannot change between Sequences and Regimens.", - "Cannot create a group with these plants. Try leaving the saved garden first.": "Cannot create a group with these plants. Try leaving the saved garden first.", - "Cannot delete built-in pin binding.": "Cannot delete built-in pin binding.", - "Cannot delete while in a slot.": "Cannot delete while in a slot.", - "Cannot delete while mounted.": "Cannot delete while mounted.", - "Cannot remove points selected by filters.": "Cannot remove points selected by filters.", - "Caution: Changing these settings to extreme values can cause hardware malfunction. Make sure to test any new settings to verify that everything works as expected before letting your FarmBot use them unsupervised.": "Caution: Changing these settings to extreme values can cause hardware malfunction. Make sure to test any new settings to verify that everything works as expected before letting your FarmBot use them unsupervised.", - "Change color to {{ color }} for {{ num }} items?": "Change color to {{ color }} for {{ num }} items?", - "Change depth to {{ depth }}mm for {{ num }} items?": "Change depth to {{ depth }}mm for {{ num }} items?", - "Change firmware path to...": "Change firmware path to...", - "Change Ownership": "Change Ownership", - "Change password": "Change password", - "Change radius to {{ radius }}mm for {{ num }} items?": "Change radius to {{ radius }}mm for {{ num }} items?", - "Change status to '{{ status }}' for {{ num }} items?": "Change status to '{{ status }}' for {{ num }} items?", - "Change the account FarmBot is connected to.": "Change the account FarmBot is connected to.", - "Change the garden map size based on axis length. A value must be input in AXIS LENGTH and STOP AT MAX must be enabled in the HARDWARE widget. Overrides MAP SIZE values.": "Change the garden map size based on axis length. A value must be input in AXIS LENGTH and STOP AT MAX must be enabled in the HARDWARE widget. Overrides MAP SIZE values.", - "Change the image origin and check again.": "Change the image origin and check again.", - "Check for the FarmBot WiFi network. If it is present,": "Check for the FarmBot WiFi network. If it is present,", - "Check for Updates": "Check for Updates", - "Check hardware for resistance.": "Check hardware for resistance.", - "Check motor cable connections. Try again while observing electronics box LED activity.": "Check motor cable connections. Try again while observing electronics box LED activity.", - "Check power cable connections.": "Check power cable connections.", - "Check that the camera is plugged in correctly to either a Raspberry Pi USB port (Express v1.0 kits and all Genesis kits) or into one of the vertically oriented USB ports on the Farmduino (Express v1.1 kits). For cameras with a 90 degree intermediary connector at the cross-slide, ensure the connectors are fully connected.": "Check that the camera is plugged in correctly to either a Raspberry Pi USB port (Express v1.0 kits and all Genesis kits) or into one of the vertically oriented USB ports on the Farmduino (Express v1.1 kits). For cameras with a 90 degree intermediary connector at the cross-slide, ensure the connectors are fully connected.", - "Check the E-STOP button wiring.": "Check the E-STOP button wiring.", - "Check the LED light strip power cable connections.": "Check the LED light strip power cable connections.", - "Check the side of the box your FarmBot came in. What is the labeled version?": "Check the side of the box your FarmBot came in. What is the labeled version?", - "Check the solenoid valve power cable connections.": "Check the solenoid valve power cable connections.", - "Check the tube connections.": "Check the tube connections.", - "Check the UNLOCK button wiring.": "Check the UNLOCK button wiring.", - "Check the UTM to tool electrical connections. Ensure pin jumpers are installed across the Farmduino UTM pins. Brush the top of the tool electrical connection screws and UTM pogo pins with a cloth to clean the surface and ensure good electrical conductivity. If a connection still cannot be made, try loosening and tightening the tool electrical connection M3 screws.": "Check the UTM to tool electrical connections. Ensure pin jumpers are installed across the Farmduino UTM pins. Brush the top of the tool electrical connection screws and UTM pogo pins with a cloth to clean the surface and ensure good electrical conductivity. If a connection still cannot be made, try loosening and tightening the tool electrical connection M3 screws.", - "Check the UTM top and Farmduino connections.": "Check the UTM top and Farmduino connections.", - "Check the vacuum pump power cable connections.": "Check the vacuum pump power cable connections.", - "Check your garden hose connection and try again.": "Check your garden hose connection and try again.", - "Check your purchase confirmation email.": "Check your purchase confirmation email.", - "Choose a crop": "Choose a crop", - "Choose Firmware": "Choose Firmware", - "Choose location": "Choose location", - "Choose the starting page that loads after logging in.": "Choose the starting page that loads after logging in.", - "Choose whether advanced step options are open or closed by default.": "Choose whether advanced step options are open or closed by default.", - "Choose your FarmBot": "Choose your FarmBot", - "clear": "clear", - "clear age selection": "clear age selection", - "clear all config data": "clear all config data", - "clear all filters": "clear all filters", - "Clear all group filters?": "Clear all group filters?", - "clear filters": "clear filters", - "clear manual selections": "clear manual selections", - "clear selections": "clear selections", - "clear weeds": "clear weeds", - "CLEAR WEEDS": "CLEAR WEEDS", - "Click": "Click", - "Click \"+\" to create a new regimen.": "Click \"+\" to create a new regimen.", - "Click \"+\" to create a new sequence.": "Click \"+\" to create a new sequence.", - "Click and drag or use the inputs to draw a point.": "Click and drag or use the inputs to draw a point.", - "Click and drag or use the inputs to draw a weed.": "Click and drag or use the inputs to draw a weed.", - "Click any location in the map to choose a profile.": "Click any location in the map to choose a profile.", - "Click anywhere in the map to add an individual plant. If you are on a desktop or laptop computer, you may also drag and drop the crop icon into the map. If you want to make any location adjustments or delete plants, you can do that in a few steps from now. Ready to add a lot of plants at once? Go to the next step of the tour!": "Click anywhere in the map to add an individual plant. If you are on a desktop or laptop computer, you may also drag and drop the crop icon into the map. If you want to make any location adjustments or delete plants, you can do that in a few steps from now. Ready to add a lot of plants at once? Go to the next step of the tour!", - "CLICK anywhere within the grid": "CLICK anywhere within the grid", - "Click here for document to show to your IT department.": "Click here for document to show to your IT department.", - "Click here to learn more about connectivity codes.": "Click here to learn more about connectivity codes.", - "Click one in the Regimens panel to edit, or click \"+\" to create a new one.": "Click one in the Regimens panel to edit, or click \"+\" to create a new one.", - "Click one in the Sequences panel to edit, or click \"+\" to create a new one.": "Click one in the Sequences panel to edit, or click \"+\" to create a new one.", - "Click the button below to start the tour": "Click the button below to start the tour", - "Click the edit button to add or edit a feed URL.": "Click the edit button to add or edit a feed URL.", - "Click to add": "Click to add", - "click to edit": "click to edit", - "click to open power and reset menu": "click to open power and reset menu", - "Clip photos out of bounds": "Clip photos out of bounds", - "Close": "Close", - "close profile viewer": "close profile viewer", - "close saved garden": "close saved garden", + "Black": "黑色的", + "Blue": "蓝色的", + "BLUR": "模糊", + "Boot sequence": "启动顺序", + "Boot Sequence": "启动顺序e", + "BOOT SEQUENCE": "启动顺序", + "bot is online": "机器人在线", + "Bottom Left": "左下方", + "Bottom Right": "右下角", + "Box LED 3": "盒子3号灯", + "Box LED 4": "盒子4号灯", + "Box LEDs": "盒子灯", + "Browser FarmBot activity beep": "浏览器 FarmBot 活动蜂鸣", + "Business Documentation": "商业文件", + "Busy": "忙碌的", + "Button {{ num }}": "按钮 {{ num }}", + "Button {{ num }}: E-STOP": "按钮 {{ num }}: E-STOP", + "Button {{ num }}: UNLOCK": "按钮 {{ num }}: UNLOCK", + "Button 1": "按钮 1", + "Button 2": "按钮 2", + "Button 3": "按钮 3", + "Button 4": "按钮 4", + "Button 5": "按钮 5", + "Calibrate": "校准", + "Calibrate camera first": "首先校准相机", + "Calibrate FarmBot's camera for use in the weed detection software.": "校准 FarmBot 的相机以用于杂草检测软件。", + "Calibrate your camera in the Photos panel before detecting weeds.": "在检测杂草之前,请在照片面板中校准相机。", + "Calibration": "校准", + "calibration blur": "校准模糊", + "Calibration card": "校准卡", + "calibration hue": "校准色调", + "calibration iterations": "校准迭代", + "calibration morph": "校准形态", + "calibration object separation": "校准物体分离", + "calibration object separation along axis": "校准物体沿轴线分离", + "Calibration preparation": "校准准备", + "Calibration retries": "校准重试次数", + "Calibration retry reset distance (mm)": "校准重试重置距离 (mm)", + "calibration saturation": "校准饱和度", + "Calibration total retries": "校准总重试次数", + "calibration value": "校准值", + "camera": "相机", + "CAMERA": "相机", + "Camera calibrated at z-axis height": "在 z 轴高度校准的相机", + "Camera calibration": "相机校准", + "Camera Calibration": "相机校准", + "Camera calibration allows correct photo rotation and placement in the Farm Designer map. Place the camera calibration card on the soil underneath the camera with the side shown below face up. The card must be fully visible to the camera.": "相机校准可确保照片在 Farm Designer 地图中正确旋转和放置。将相机校准卡放在相机下方的土壤上,下图所示的一面朝上。该卡必须完全在相机中可见。", + "Camera calibration cards are available in the shop and can be used with any FarmBot version.": "商店有售相机校准卡,可以与任何 FarmBot 版本一起使用。", + "Camera calibration required": "需要校准相机", + "Camera not yet calibrated.": "相机尚未校准。", + "Camera offset from the UTM position in millimeters. Once calibrated, use these values to align photos to the Farm Designer grid by matching the grid and locations in photos to the grid and locations in the Farm Designer. (default: (x: {{ defaultX }}, y: {{ defaultY }}))": "相机与 UTM 位置的偏移量(以毫米为单位)。校准后,使用这些值将照片与 Farm Designer 网格对齐,方法是将照片中的网格和位置与 Farm Designer 中的网格和位置进行匹配。 (default: (x: {{ defaultX }}, y: {{ defaultY }}))", + "camera offset x": "相机x偏移 ", + "camera offset y": "相机y偏移 ", + "camera rotation": "相机旋转", + "Camera rotation in degrees. This value should be minimized (to near zero) by rotating the camera in its mount until it is aligned with FarmBot's axes. (default: {{ defaultAngle }})": "相机旋转度数。应通过旋转支架上的相机直到其与 FarmBot 的轴对齐来最小化此值(接近零)。 (default: {{ defaultAngle }})", + "Camera settings": "相机设置", + "Camera view": "相机视图", + "camera view area": "相机视野区域", + "Camera voltage is low": "摄像头电压低", + "Camera voltage may be low. Try a different Raspberry Pi USB power cable.": "相机电压可能较低。请尝试使用其他 Raspberry Pi USB 电源线。", + "Cameras": "相机", + "Can't connect to bot": "无法连接到机器人", + "Can't edit variable name while in use.": "使用时无法编辑变量名称。", + "Can't execute unsaved sequences": "无法执行未保存的序列", + "cancel": "取消", + "Cancel": "取消", + "Cannot change between Sequences and Regimens.": "无法在序列和方案之间切换。", + "Cannot create a group with these plants. Try leaving the saved garden first.": "无法使用这些植物创建组。请先尝试离开已保存的花园。", + "Cannot delete built-in pin binding.": "无法删除内置密码绑定。", + "Cannot delete while in a slot.": "在插槽中时无法删除。", + "Cannot delete while mounted.": "安装时无法删除。", + "Cannot remove points selected by filters.": "无法删除通过过滤器选择的点。", + "Caution: Changing these settings to extreme values can cause hardware malfunction. Make sure to test any new settings to verify that everything works as expected before letting your FarmBot use them unsupervised.": "警告:将这些设置更改为极端值可能会导致硬件故障。在让 FarmBot 无人监督地使用任何新设置之前,请务必测试它们以验证一切是否按预期运行。", + "Change color to {{ color }} for {{ num }} items?": "将 {{ num }} 个项目的颜色更改为 {{ color }} ?", + "Change depth to {{ depth }}mm for {{ num }} items?": "将 {{ num }} 个项目的深度更改为 {{depth }}mm?", + "Change firmware path to...": "将固件路径更改为...", + "Change Ownership": "更改所有权", + "Change password": "更改密码", + "Change radius to {{ radius }}mm for {{ num }} items?": "将 {{ num }} 个项目的半径更改为 {{ radius }}mm?", + "Change status to '{{ status }}' for {{ num }} items?": "将 {{ num }} 个项目的状态更改为“{{ status }}”?", + "Change the account FarmBot is connected to.": "更改 FarmBot 所连接的帐户。", + "Change the garden map size based on axis length. A value must be input in AXIS LENGTH and STOP AT MAX must be enabled in the HARDWARE widget. Overrides MAP SIZE values.": "根据轴长更改花园地图大小。必须在轴长中输入一个值,并且必须在硬件小部件中启用“在最大时停止”。覆盖地图大小值。", + "Change the image origin and check again.": "更改图像来源并再次检查。", + "Check for the FarmBot WiFi network. If it is present,": "检查 FarmBot WiFi 网络。如果存在,", + "Check for Updates": "检查更新", + "Check hardware for resistance.": "检查硬件的阻力。", + "Check motor cable connections. Try again while observing electronics box LED activity.": "检查电机电缆连接。观察电子箱 LED 活动,然后重试。", + "Check power cable connections.": "检查电源线连接。", + "Check that the camera is plugged in correctly to either a Raspberry Pi USB port (Express v1.0 kits and all Genesis kits) or into one of the vertically oriented USB ports on the Farmduino (Express v1.1 kits). For cameras with a 90 degree intermediary connector at the cross-slide, ensure the connectors are fully connected.": "检查相机是否正确插入 Raspberry Pi USB 端口(Express v1.0 套件和所有 Genesis 套件)或 Farmduino 上的垂直 USB 端口之一(Express v1.1 套件)。对于在横向滑动处具有 90 度中间连接器的相机,请确保连接器已完全连接。", + "Check the E-STOP button wiring.": "检查紧急停止按钮接线。", + "Check the LED light strip power cable connections.": "检查LED灯带电源线连接。", + "Check the side of the box your FarmBot came in. What is the labeled version?": "检查 FarmBot 所装盒子的侧面。标签上的版本是什么?", + "Check the solenoid valve power cable connections.": "检查电磁阀电源线连接。", + "Check the tube connections.": "检查管道连接。", + "Check the UNLOCK button wiring.": "检查 UNLOCK 按钮接线。", + "Check the UTM to tool electrical connections. Ensure pin jumpers are installed across the Farmduino UTM pins. Brush the top of the tool electrical connection screws and UTM pogo pins with a cloth to clean the surface and ensure good electrical conductivity. If a connection still cannot be made, try loosening and tightening the tool electrical connection M3 screws.": "检查 UTM 到工具的电气连接。确保跨 Farmduino UTM 引脚安装了引脚跳线。用布擦拭工具电气连接螺钉和 UTM 弹簧针的顶部,以清洁表面并确保良好的导电性。如果仍然无法连接,请尝试松开并拧紧工具电气连接 M3 螺钉。", + "Check the UTM top and Farmduino connections.": "检查 UTM 顶部和 Farmduino 连接。", + "Check the vacuum pump power cable connections.": "检查真空泵电源线连接。", + "Check your garden hose connection and try again.": "检查您的花园软管连接并重试。", + "Check your purchase confirmation email.": "检查您的购买确认电子邮件。", + "Choose a crop": "选择作物", + "Choose Firmware": "选择固件", + "Choose location": "选择位置", + "Choose the starting page that loads after logging in.": "选择登录后加载的起始页面。", + "Choose whether advanced step options are open or closed by default.": "选择高级步骤选项默认打开还是关闭。", + "Choose your FarmBot": "选择你的 FarmBot", + "clear": "清除", + "clear age selection": "清除年龄选择", + "clear all config data": "清除所有配置数据", + "clear all filters": "清除所有筛选条件", + "Clear all group filters?": "清除所有群组过滤器?", + "clear filters": "清除筛选条件", + "clear manual selections": "清除手动选择", + "clear selections": "清除选择", + "clear weeds": "清除杂草", + "CLEAR WEEDS": "清除杂草", + "Click": "点击", + "Click \"+\" to create a new regimen.": "单击“+”可创建新的方案。", + "Click \"+\" to create a new sequence.": "单击“+”创建一个新的序列。", + "Click and drag or use the inputs to draw a point.": "单击并拖动或使用输入来绘制一个点。", + "Click and drag or use the inputs to draw a weed.": "单击并拖动或使用输入来绘制杂草。", + "Click any location in the map to choose a profile.": "单击地图中的任意位置即可选择配置文件。", + "Click anywhere in the map to add an individual plant. If you are on a desktop or laptop computer, you may also drag and drop the crop icon into the map. If you want to make any location adjustments or delete plants, you can do that in a few steps from now. Ready to add a lot of plants at once? Go to the next step of the tour!": "单击地图上的任意位置即可添加单个植物。如果您使用的是台式机或笔记本电脑,您也可以将裁剪图标拖放到地图中。如果您想进行任何位置调整或删除植物,只需几个步骤即可完成。准备好一次添加大量植物了吗?进入游览的下一步!", + "CLICK anywhere within the grid": "点击网格内的任意位置", + "Click here for document to show to your IT department.": "单击此处获取可向 IT 部门展示的文档。", + "Click here to learn more about connectivity codes.": "单击此处了解有关连接代码的更多信息。", + "Click one in the Regimens panel to edit, or click \"+\" to create a new one.": "单击方案面板中的一个方案进行编辑,或单击“+”创建一个新的方案。", + "Click one in the Sequences panel to edit, or click \"+\" to create a new one.": "单击“序列”面板中的一个序列进行编辑,或单击“+”创建一个新的序列。", + "Click the button below to start the tour": "点击下面的按钮开始游览", + "Click the edit button to add or edit a feed URL.": "单击编辑按钮可以添加或编辑来源URL。", + "Click to add": "点击添加", + "click to edit": "点击编辑", + "click to open power and reset menu": "单击打开电源和重置菜单", + "Clip photos out of bounds": "剪辑超出范围的照片", + "Close": "关闭", + "close profile viewer": "关闭个人资料查看器", + "close saved garden": "关闭已保存的花园", "collage": "collage", "collapse": "collapse", - "Color": "Color", - "Color Range": "Color Range", - "Color range. (default: {{ defaultLow }} - {{ defaultHigh }} ({{ defaultColor }}))": "Color range. (default: {{ defaultLow }} - {{ defaultHigh }} ({{ defaultColor }}))", - "Color saturation, 0 (white) to 255 (color). (default: {{ defaultLow }} - {{ defaultHigh }})": "Color saturation, 0 (white) to 255 (color). (default: {{ defaultLow }} - {{ defaultHigh }})", - "Color value, 0 (black) to 255 (color) (default: {{ defaultLow }} - {{ defaultHigh }})": "Color value, 0 (black) to 255 (color) (default: {{ defaultLow }} - {{ defaultHigh }})", - "colorized depth": "colorized depth", - "Command not available while locked.": "Command not available while locked.", - "Commands": "Commands", - "Commit": "Commit", - "Common Names": "Common Names", - "Community help": "Community help", - "Companions": "Companions", - "complete": "complete", - "Complete": "Complete", - "Complete setup wizard": "Complete setup wizard", - "Complete the configurator steps.": "Complete the configurator steps.", - "Completed": "Completed", - "Completed jobs older than five minutes may be cleared upon refresh": "Completed jobs older than five minutes may be cleared upon refresh", - "computer": "computer", - "Config data successfully deleted.": "Config data successfully deleted.", - "Config editor": "Config editor", - "Configurator": "Configurator", - "Configurator network": "Configurator network", - "Configurator steps": "Configurator steps", - "Confirm emergency unlock": "Confirm emergency unlock", - "Confirm New Password": "Confirm New Password", - "Confirm plant deletion": "Confirm plant deletion", - "Confirm sequence deletion": "Confirm sequence deletion", - "Confirm step deletion": "Confirm step deletion", - "Confirm when unlocking FarmBot after an emergency stop.": "Confirm when unlocking FarmBot after an emergency stop.", - "Connect the UTM cable.": "Connect the UTM cable.", - "connect to Configurator": "connect to Configurator", - "connected": "connected", - "Connected.": "Connected.", - "Connecting FarmBot to the Internet": "Connecting FarmBot to the Internet", - "Connection": "Connection", - "Connectivity": "Connectivity", - "CONNECTIVITY": "CONNECTIVITY", - "Connectivity code": "Connectivity code", - "Continue": "Continue", - "Continue setup": "Continue setup", - "Continue?": "Continue?", - "Control peripheral": "Control peripheral", - "Control Peripheral": "Control Peripheral", - "Control servo": "Control servo", - "Control Servo": "Control Servo", - "Controls": "Controls", - "Coordinate": "Coordinate", - "copy": "copy", - "copy sequence": "copy sequence", - "copyright holders": "copyright holders", - "Could not delete image.": "Could not delete image.", - "Could not download FarmBot OS update information.": "Could not download FarmBot OS update information.", - "Could not fetch package name": "Could not fetch package name", - "Could not get release notes.": "Could not get release notes.", + "Color": "颜色", + "Color Range": "颜色范围", + "Color range. (default: {{ defaultLow }} - {{ defaultHigh }} ({{ defaultColor }}))": "颜色范围 (默认值: {{ defaultLow }} - {{ defaultHigh }} ({{ defaultColor }}))", + "Color saturation, 0 (white) to 255 (color). (default: {{ defaultLow }} - {{ defaultHigh }})": "色彩饱和度,0(白色)至 255(彩色)。 (默认值: {{ defaultLow }} - {{ defaultHigh }})", + "Color value, 0 (black) to 255 (color) (default: {{ defaultLow }} - {{ defaultHigh }})": "颜色值,0(黑色)至 255(彩色)(默认值: {{ defaultLow }} - {{ defaultHigh }})", + "colorized depth": "彩色深度", + "Command not available while locked.": "锁定时命令不可用。", + "Commands": "命令", + "Commit": "提交", + "Common Names": "常用名称", + "Community help": "社区帮助", + "Companions": "公司", + "complete": "完成", + "Complete": "完成", + "Complete setup wizard": "完成安装向导", + "Complete the configurator steps.": "完成配置器步骤。", + "Completed": "完成的", + "Completed jobs older than five minutes may be cleared upon refresh": "超过五分钟的已完成作业可能会在刷新时被清除", + "computer": "电脑", + "Config data successfully deleted.": "配置数据已成功删除。", + "Config editor": "配置编辑器", + "Configurator": "配置器", + "Configurator network": "配置器网络", + "Configurator steps": "配置器步骤", + "Confirm emergency unlock": "确认紧急解锁", + "Confirm New Password": "确认新密码", + "Confirm plant deletion": "确认植物删除", + "Confirm sequence deletion": "确认序列删除", + "Confirm step deletion": "确认步骤删除", + "Confirm when unlocking FarmBot after an emergency stop.": "紧急停止后解锁 FarmBot 时确认。", + "Connect the UTM cable.": "连接UTM电缆。", + "connect to Configurator": "连接到配置器", + "connected": "已连接", + "Connected.": "已连接.", + "Connecting FarmBot to the Internet": "将 FarmBot 连接到互联网", + "Connection": "连接", + "Connectivity": "连接", + "CONNECTIVITY": "连接", + "Connectivity code": "连接代码", + "Continue": "继续", + "Continue setup": "继续安装", + "Continue?": "是否继续?", + "Control peripheral": "控制外设", + "Control Peripheral": "控制外设", + "Control servo": "控制伺服", + "Control Servo": "控制伺服", + "Controls": "控制", + "Coordinate": "坐标", + "copy": "复制", + "copy sequence": "复制序列", + "copyright holders": "版权所有者", + "Could not delete image.": "无法删除图像", + "Could not download FarmBot OS update information.": "无法下载 FarmBot OS 更新信息。", + "Could not fetch package name": "无法获取包名称", + "Could not get release notes.": "无法获取发行说明。", "CPU": "CPU", - "CPU temperature": "CPU temperature", - "CPU usage": "CPU usage", - "Create a new garden from scratch or by copying plants from the current garden.": "Create a new garden from scratch or by copying plants from the current garden.", - "Create a new sequence and add the FIND HOME command.": "Create a new sequence and add the FIND HOME command.", - "Create group": "Create group", - "create subfolder": "create subfolder", - "Create subfolder": "Create subfolder", - "Created Point": "Created Point", - "Created Weed": "Created Weed", - "Crop images displayed in the garden map to remove black borders from image rotation. Crop amount determined by CAMERA ROTATION value.": "Crop images displayed in the garden map to remove black borders from image rotation. Crop amount determined by CAMERA ROTATION value.", - "Crop map images": "Crop map images", - "Crop search": "Crop search", - "Current position": "Current position", - "Current position (mm)": "Current position (mm)", - "Current version only": "Current version only", - "Custom": "Custom", - "Custom buttons": "Custom buttons", - "Custom coordinate": "Custom coordinate", - "Custom coordinates": "Custom coordinates", - "Custom field": "Custom field", - "Custom number": "Custom number", - "Custom Settings": "Custom Settings", - "Custom settings can be added here and accessed via the Lua env() function.": "Custom settings can be added here and accessed via the Lua env() function.", - "Custom text": "Custom text", - "custom tool graphics": "custom tool graphics", - "Custom tools": "Custom tools", - "Customize which Action or Sequence you want FarmBot to execute when you press Button 3, 4, or 5 on the electronics box. To start, we recommend setting Button 5 to the 'Find Home' sequence. You can change this later from the controls panel.": "Customize which Action or Sequence you want FarmBot to execute when you press Button 3, 4, or 5 on the electronics box. To start, we recommend setting Button 5 to the 'Find Home' sequence. You can change this later from the controls panel.", - "Date": "Date", - "Date Planted": "Date Planted", - "Day": "Day", - "day old": "day old", - "days": "days", - "Days": "Days", - "debug log stream": "debug log stream", - "debug logs": "debug logs", - "default": "default", - "Default plant depth": "Default plant depth", - "Default value": "Default value", - "Default Value": "Default Value", - "delete": "delete", - "Delete account": "Delete account", - "delete all": "delete all", - "Delete all {{ count }} plants in your main garden?": "Delete all {{ count }} plants in your main garden?", - "Delete all {{ count }} points in section?": "Delete all {{ count }} points in section?", - "Delete all created points": "Delete all created points", - "Delete all created weeds": "Delete all created weeds", - "delete all data": "delete all data", - "Delete all logs": "Delete all logs", - "Delete all of the points created through this panel.": "Delete all of the points created through this panel.", - "Delete all of the weeds created through this panel.": "Delete all of the weeds created through this panel.", - "delete all plants in garden": "delete all plants in garden", - "Delete all the points you have created?": "Delete all the points you have created?", - "Delete all the weeds you have created?": "Delete all the weeds you have created?", - "delete folder": "delete folder", - "delete garden": "delete garden", - "Delete group": "Delete group", - "delete log": "delete log", - "Delete multiple": "Delete multiple", - "Delete Photo": "Delete Photo", - "delete regimen": "delete regimen", - "delete sequence": "delete sequence", - "delete step": "delete step", - "Deleted event.": "Deleted event.", - "Deleting...": "Deleting...", - "demo the app": "demo the app", - "DEMO THE APP": "DEMO THE APP", - "Deprecated Mark As": "Deprecated Mark As", - "depth (mm)": "depth (mm)", - "Description": "Description", - "Deselect all": "Deselect all", - "deselect all days": "deselect all days", - "Detect soil height using FarmBot's camera and display the results on the Farm Designer map.": "Detect soil height using FarmBot's camera and display the results on the Farm Designer map.", - "detect weeds": "detect weeds", - "Detect weeds": "Detect weeds", - "DETECT WEEDS": "DETECT WEEDS", - "Detect weeds using FarmBot's camera and display them on the Farm Designer map.": "Detect weeds using FarmBot's camera and display them on the Farm Designer map.", - "detection blur": "detection blur", - "detection hue": "detection hue", - "detection iterations": "detection iterations", - "detection morph": "detection morph", - "detection saturation": "detection saturation", - "detection value": "detection value", - "developer documentation": "developer documentation", - "Developer Documentation": "Developer Documentation", - "Deviation": "Deviation", - "Device": "Device", - "Device ID": "Device ID", - "Diagnosis": "Diagnosis", - "Did any lights in the electronics box light up?": "Did any lights in the electronics box light up?", - "Did calibration complete without error logs?": "Did calibration complete without error logs?", - "Did FarmBot move to the end of the axis and then move back to the home position for this axis?": "Did FarmBot move to the end of the axis and then move back to the home position for this axis?", - "Did FarmBot reach the home position (touching the hardstop) for this axis and set the coordinate to 0? Note: sometimes after a movement, FarmBot will settle into place and coordinates may change by +/-0.5mm from the desired value. If the coordinates are within 1mm of 0, that is acceptable.": "Did FarmBot reach the home position (touching the hardstop) for this axis and set the coordinate to 0? Note: sometimes after a movement, FarmBot will settle into place and coordinates may change by +/-0.5mm from the desired value. If the coordinates are within 1mm of 0, that is acceptable.", - "Did FarmBot's {{ axis }}-axis move? (Don't worry about the direction right now)": "Did FarmBot's {{ axis }}-axis move? (Don't worry about the direction right now)", - "Did FarmBot's motors power back on? (Try moving the Y-axis by hand)": "Did FarmBot's motors power back on? (Try moving the Y-axis by hand)", - "Did the lights turn on?": "Did the lights turn on?", - "Did the rotary tool rotate?": "Did the rotary tool rotate?", - "Did the sensor return a value?": "Did the sensor return a value?", - "Did the vacuum pump run?": "Did the vacuum pump run?", - "Did water flow?": "Did water flow?", - "Did you finish the tour?": "Did you finish the tour?", - "Did you know?": "Did you know?", - "Did you mean meta.{{field}}?": "Did you mean meta.{{field}}?", - "Did you watch the video?": "Did you watch the video?", - "digital": "digital", - "Digital": "Digital", - "Direction": "Direction", - "Disable axis": "Disable axis", - "disabled": "disabled", - "Disallow account data changes. This does not prevent Farmwares or FarmBot OS from changing settings.": "Disallow account data changes. This does not prevent Farmwares or FarmBot OS from changing settings.", - "Discard Unsaved Changes": "Discard Unsaved Changes", - "Discard unsaved sequence changes": "Discard unsaved sequence changes", - "disconnected": "disconnected", - "Disconnected": "Disconnected", - "Disk": "Disk", - "Disk usage": "Disk usage", - "Display a virtual trail for FarmBot in the garden map to show movement and watering history while the map is open. Toggling this setting will clear data for the current trail.": "Display a virtual trail for FarmBot in the garden map to show movement and watering history while the map is open. Toggling this setting will clear data for the current trail.", - "Display Encoder Data": "Display Encoder Data", - "Display high motor load warning indicators in map. Requires TRAIL and stall detection to be enabled.": "Display high motor load warning indicators in map. Requires TRAIL and stall detection to be enabled.", - "Display raw": "Display raw", - "Display seconds in time, i.e., 10:00:00am instead of 10:00am": "Display seconds in time, i.e., 10:00:00am instead of 10:00am", - "Display time using the 24-hour notation, i.e., 23:00 instead of 11:00pm": "Display time using the 24-hour notation, i.e., 23:00 instead of 11:00pm", - "Distance": "Distance", - "Distance between calibration objects in millimeters. The distance between the objects on the camera calibration card is 100mm. (default: {{ defaultSeparation }})": "Distance between calibration objects in millimeters. The distance between the objects on the camera calibration card is 100mm. (default: {{ defaultSeparation }})", - "Distance in millimeters to group calibration retries. If the distance traveled while detecting the axis end location exceeds this value, the calibration retry counter is reset. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Distance in millimeters to group calibration retries. If the distance traveled while detecting the axis end location exceeds this value, the calibration retry counter is reset. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Do you want to": "Do you want to", - "Documentation": "Documentation", - "documentation page for adjustment suggestions.": "documentation page for adjustment suggestions.", - "Does the image include red and green highlighted regions?": "Does the image include red and green highlighted regions?", - "Does the image look OK?": "Does the image look OK?", - "Does the toggle indicate ON?": "Does the toggle indicate ON?", - "Does the virtual FarmBot match your real life FarmBot?": "Does the virtual FarmBot match your real life FarmBot?", - "Don't allow movement past the maximum value provided in AXIS LENGTH (for AXIS LENGTH values other than '0'). (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Don't allow movement past the maximum value provided in AXIS LENGTH (for AXIS LENGTH values other than '0'). (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Don't ask about saving sequence work before closing browser tab. Warning: may cause loss of data.": "Don't ask about saving sequence work before closing browser tab. Warning: may cause loss of data.", - "Don't ask about saving work before closing browser tab. Warning: may cause loss of data.": "Don't ask about saving work before closing browser tab. Warning: may cause loss of data.", - "Don't save weeds detected outside of garden bed. (default: {{ defaultUseBounds }})": "Don't save weeds detected outside of garden bed. (default: {{ defaultUseBounds }})", - "DOWNGRADE TO": "DOWNGRADE TO", - "DOWNLOAD": "DOWNLOAD", - "Download FarmBot OS": "Download FarmBot OS", - "Download Link": "Download Link", - "Download Photo": "Download Photo", - "Download the version of FarmBot OS that corresponds to your FarmBot kit and its internal computer.": "Download the version of FarmBot OS that corresponds to your FarmBot kit and its internal computer.", - "Drag a box around the items you would like to select.": "Drag a box around the items you would like to select.", - "Drag and drop": "Drag and drop", - "DRAG COMMAND HERE": "DRAG COMMAND HERE", - "duplicate step": "duplicate step", - "Duration": "Duration", - "Dynamic map size": "Dynamic map size", - "E-STOP": "E-STOP", - "E-stop button": "E-stop button", - "E-STOP Button": "E-STOP Button", - "E-Stop on Movement Error": "E-Stop on Movement Error", - "Edit event": "Edit event", - "edit filter settings": "edit filter settings", - "edit folder": "edit folder", - "Edit garden": "Edit garden", - "Edit group": "Edit group", - "edit in map": "edit in map", - "Edit on": "Edit on", - "Edit plant group": "Edit plant group", - "Edit point group": "Edit point group", - "Edit Sequence": "Edit Sequence", - "Edit slot": "Edit slot", - "Edit slot coordinates": "Edit slot coordinates", - "Edit slot coordinates setup": "Edit slot coordinates setup", - "Edit slot group": "Edit slot group", - "Edit slot panel": "Edit slot panel", - "Edit tool": "Edit tool", - "Edit weed": "Edit weed", - "Edit weed group": "Edit weed group", - "Education Documentation": "Education Documentation", - "Electronics Board": "Electronics Board", - "Else Execute": "Else Execute", - "email": "email", - "Email has been sent.": "Email has been sent.", - "emergency stop": "emergency stop", - "Emergency stop": "Emergency stop", - "Emergency stop active": "Emergency stop active", - "Emergency stop if movement is not complete after the maximum number of retries. (default: {{ eStopOnError }})": "Emergency stop if movement is not complete after the maximum number of retries. (default: {{ eStopOnError }})", - "Emergency unlock": "Emergency unlock", - "Empty": "Empty", - "Enable 2nd X Motor": "Enable 2nd X Motor", - "Enable Encoders": "Enable Encoders", - "Enable limit switches": "Enable limit switches", - "Enable plant animations in the garden map.": "Enable plant animations in the garden map.", - "Enable quiet motors. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Enable quiet motors. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Enable sequence begin logs": "Enable sequence begin logs", - "Enable sequence complete logs": "Enable sequence complete logs", - "Enable sequence step logs": "Enable sequence step logs", - "Enable Stall Detection": "Enable Stall Detection", - "Enable use of a second x-axis motor. Connects to E0 on RAMPS. (default: {{ x2Motor }})": "Enable use of a second x-axis motor. Connects to E0 on RAMPS. (default: {{ x2Motor }})", - "Enable use of electronic limit switches for end detection, finding axis length, and homing. Limit switches are contact switches or momentary push buttons that can be added to the end of each axis to be engaged when an axis reaches the end. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Enable use of electronic limit switches for end detection, finding axis length, and homing. Limit switches are contact switches or momentary push buttons that can be added to the end of each axis to be engaged when an axis reaches the end. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Enable use of motor stall detection for detecting missed steps, finding axis length, and homing. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Enable use of motor stall detection for detecting missed steps, finding axis length, and homing. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Enable use of rotary encoders for stall detection, finding axis length, and homing. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Enable use of rotary encoders for stall detection, finding axis length, and homing. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "enabled": "enabled", - "Encoder Scaling": "Encoder Scaling", - "encoder scaling factor = 10000 * (motor resolution) / (encoder resolution). (default: x: {{ x }}, y: {{ y }}, z: {{ z }} (10000*200/360))": "encoder scaling factor = 10000 * (motor resolution) / (encoder resolution). (default: x: {{ x }}, y: {{ y }}, z: {{ z }} (10000*200/360))", - "ENCODER TYPE": "ENCODER TYPE", - "Encoders": "Encoders", - "End date must not be before start date.": "End date must not be before start date.", - "End time must be after start time.": "End time must be after start time.", - "Ensure that the camera lens is not covered and there is adequate lighting. Try unplugging the camera and plugging it back in.": "Ensure that the camera lens is not covered and there is adequate lighting. Try unplugging the camera and plugging it back in.", - "Entire system": "Entire system", - "ENV Editor": "ENV Editor", - "Environment": "Environment", - "Environment variables added here can be accessed via the LUA sequence step 'env()' function.": "Environment variables added here can be accessed via the LUA sequence step 'env()' function.", - "error": "error", - "Error": "Error", - "Error deleting config data": "Error deleting config data", - "Error Handling": "Error Handling", - "Error taking photo": "Error taking photo", - "Error: tour step does not exist": "Error: tour step does not exist", - "Ethernet connection (optional)": "Ethernet connection (optional)", - "Evaluate Lua commands. For power users and software developers.": "Evaluate Lua commands. For power users and software developers.", - "Event start time needs to be in the future, not the past.": "Event start time needs to be in the future, not the past.", - "Events": "Events", - "Every": "Every", - "Execute a sequence if a condition is satisfied. If the condition is not satisfied, chose to do nothing or execute a different sequence.": "Execute a sequence if a condition is satisfied. If the condition is not satisfied, chose to do nothing or execute a different sequence.", - "Execute Lua commands. For power users and software developers.": "Execute Lua commands. For power users and software developers.", - "Execute sequence": "Execute sequence", - "exit": "exit", - "Exit": "Exit", - "Export": "Export", - "Export all data related to this device. Exports are delivered via email as JSON file attachments.": "Export all data related to this device. Exports are delivered via email as JSON file attachments.", - "Export data": "Export data", - "Export parameters": "Export parameters", - "Export request received. Please allow up to 10 minutes for delivery.": "Export request received. Please allow up to 10 minutes for delivery.", - "Express Documentation": "Express Documentation", - "ext": "ext", - "Externally defined": "Externally defined", - "extras": "extras", - "Factory reset": "Factory reset", - "Fallback Soil Height": "Fallback Soil Height", - "false": "false", - "Farm Designer": "Farm Designer", - "FarmBot": "FarmBot", - "FarmBot and the browser are both connected to the internet (or have been recently). Try rebooting FarmBot and refreshing the browser. If the issue persists, something may be preventing FarmBot from accessing the message broker (used to communicate with your web browser in real-time). If you are on a company or school network, a firewall may be blocking port 5672 or port 8883. Ensure that the blue LED communications light on the FarmBot electronics box is illuminated.": "FarmBot and the browser are both connected to the internet (or have been recently). Try rebooting FarmBot and refreshing the browser. If the issue persists, something may be preventing FarmBot from accessing the message broker (used to communicate with your web browser in real-time). If you are on a company or school network, a firewall may be blocking port 5672 or port 8883. Ensure that the blue LED communications light on the FarmBot electronics box is illuminated.", - "FarmBot and the browser both have internet connectivity, but we haven't seen any activity from FarmBot on the Web App in a while. This could mean that FarmBot has not synced in a while, which might not be a problem. If you are experiencing usability issues, however, it could be a sign of HTTP blockage on FarmBot's local internet connection.": "FarmBot and the browser both have internet connectivity, but we haven't seen any activity from FarmBot on the Web App in a while. This could mean that FarmBot has not synced in a while, which might not be a problem. If you are experiencing usability issues, however, it could be a sign of HTTP blockage on FarmBot's local internet connection.", - "FarmBot forum": "FarmBot forum", - "FarmBot forum.": "FarmBot forum.", - "FarmBot Info": "FarmBot Info", - "FarmBot is already at the home position": "FarmBot is already at the home position", - "FarmBot is at position ": "FarmBot is at position ", - "FarmBot is busy": "FarmBot is busy", - "FarmBot is locked": "FarmBot is locked", - "FarmBot is not connected.": "FarmBot is not connected.", - "FarmBot is offline": "FarmBot is offline", - "FarmBot Kit": "FarmBot Kit", - "FarmBot model": "FarmBot model", - "FarmBot motor load": "FarmBot motor load", - "FarmBot Network Requirements": "FarmBot Network Requirements", - "FarmBot origin (home) location in images. If the origin does not correspond to an image corner, rotate the camera until one does. (default: {{ defaultOrigin }})": "FarmBot origin (home) location in images. If the origin does not correspond to an image corner, rotate the camera until one does. (default: {{ defaultOrigin }})", - "Farmbot OS": "Farmbot OS", - "FarmBot OS": "FarmBot OS", - "FarmBot OS action.": "FarmBot OS action.", - "FarmBot OS or micro-controller firmware action.": "FarmBot OS or micro-controller firmware action.", - "FarmBot OS update": "FarmBot OS update", - "FarmBot OS will automatically download and install software updates at the chosen time.": "FarmBot OS will automatically download and install software updates at the chosen time.", - "FarmBot position (X, Y, Z)": "FarmBot position (X, Y, Z)", - "FarmBot position unknown.": "FarmBot position unknown.", - "FarmBot sent a malformed message. You may need to upgrade FarmBot OS. Please upgrade FarmBot OS and log back in.": "FarmBot sent a malformed message. You may need to upgrade FarmBot OS. Please upgrade FarmBot OS and log back in.", - "FarmBot soil z": "FarmBot soil z", - "FarmBot Version": "FarmBot Version", - "FarmBot Web App": "FarmBot Web App", - "FarmBot's current position": "FarmBot's current position", - "FarmBot's motors are still powered": "FarmBot's motors are still powered", - "FarmBot's motors are still unpowered": "FarmBot's motors are still unpowered", - "Farmduino firmware is missing. Press the yellow FLASH FIRMWARE button to flash the firmware to your FarmBot. Verify FIRMWARE selection matches FarmBot kit version and check the USB cable between the Raspberry Pi and the Farmduino. Reboot FarmBot after a reconnection. If the issue persists, reconfiguration of FarmBot OS may be necessary.": "Farmduino firmware is missing. Press the yellow FLASH FIRMWARE button to flash the firmware to your FarmBot. Verify FIRMWARE selection matches FarmBot kit version and check the USB cable between the Raspberry Pi and the Farmduino. Reboot FarmBot after a reconnection. If the issue persists, reconfiguration of FarmBot OS may be necessary.", + "CPU temperature": "CPU 温度", + "CPU usage": "CPU使用率", + "Create a new garden from scratch or by copying plants from the current garden.": "从头开始创建一个新花园或从现有花园复制植物。", + "Create a new sequence and add the FIND HOME command.": "创建一个新序列并添加 FIND HOME 命令。", + "Create group": "创建组", + "create subfolder": "创建子文件夹", + "Create subfolder": "创建子文件夹", + "Created Point": "创建点", + "Created Weed": "创造杂草", + "Crop images displayed in the garden map to remove black borders from image rotation. Crop amount determined by CAMERA ROTATION value.": "裁剪花园地图中显示的图像,以消除图像旋转产生的黑色边框。裁剪量由相机旋转值决定。", + "Crop map images": "裁剪地图图像", + "Crop search": "作物搜索", + "Current position": "当前位置", + "Current position (mm)": "当前位置 (mm)", + "Current version only": "仅限当前版本", + "Custom": "自定义", + "Custom buttons": "自定义按钮", + "Custom coordinate": "自定义坐标", + "Custom coordinates": "自定义坐标", + "Custom field": "自定义字段", + "Custom number": "自定义数量", + "Custom Settings": "自定义设置", + "Custom settings can be added here and accessed via the Lua env() function.": "可以在这里添加自定义设置并通过 Lua env() 函数访问。", + "Custom text": "自定义文本", + "custom tool graphics": "自定义工具图形", + "Custom tools": "自定义工具", + "Customize which Action or Sequence you want FarmBot to execute when you press Button 3, 4, or 5 on the electronics box. To start, we recommend setting Button 5 to the 'Find Home' sequence. You can change this later from the controls panel.": "自定义当您按下电子盒上的按钮 3、4 或 5 时 FarmBot 执行的操作或序列。首先,我们建议将按钮 5 设置为“查找主页”序列。您可以稍后从控制面板更改此设置。", + "Date": "日期", + "Date Planted": "种植日期", + "Day": "天", + "day old": "日龄", + "days": "天", + "Days": "天", + "debug log stream": "调试日志流", + "debug logs": "调试日志", + "default": "默认", + "Default plant depth": "默认植物深度", + "Default value": "默认值", + "Default Value": "默认值", + "delete": "删除", + "Delete account": "删除帐户", + "delete all": "删除所有", + "Delete all {{ count }} plants in your main garden?": "删除主花园里的所有 {{ count }} 株植物?", + "Delete all {{ count }} points in section?": "删除部分中的所有 {{ count }} 点?", + "Delete all created points": "删除所有已创建的点", + "Delete all created weeds": "删除所有已创建的杂草", + "delete all data": "删除所有数据", + "Delete all logs": "删除所有日志", + "Delete all of the points created through this panel.": "删除通过此面板创建的所有点。", + "Delete all of the weeds created through this panel.": "删除通过此面板创建的所有杂草。", + "delete all plants in garden": "删除花园中的所有植物", + "Delete all the points you have created?": "删除您创建的所有点?", + "Delete all the weeds you have created?": "删除您创建的所有杂草?", + "delete folder": "删除文件夹", + "delete garden": "删除花园", + "Delete group": "删除组", + "delete log": "删除日志", + "Delete multiple": "删除多个", + "Delete Photo": "删除照片", + "delete regimen": "删除方案", + "delete sequence": "删除序列", + "delete step": "删除步骤", + "Deleted event.": "事件已删除。", + "Deleting...": "正在删除...", + "demo the app": "演示应用程序", + "DEMO THE APP": "演示应用程序", + "Deprecated Mark As": "弃用标记为", + "depth (mm)": "深度(毫米)", + "Description": "描述", + "Deselect all": "取消全选", + "deselect all days": "取消选择所有天", + "Detect soil height using FarmBot's camera and display the results on the Farm Designer map.": "使用 FarmBot 的相机检测土壤高度,并在 Farm Designer 地图上显示结果。", + "detect weeds": "检测杂草", + "Detect weeds": "检测杂草", + "DETECT WEEDS": "检测杂草", + "Detect weeds using FarmBot's camera and display them on the Farm Designer map.": "使用 FarmBot 的相机检测杂草,并在 Farm Designer 地图上显示。", + "detection blur": "检测模糊", + "detection hue": "检测色调", + "detection iterations": "检测迭代", + "detection morph": "检测形态", + "detection saturation": "检测饱和度", + "detection value": "检测值", + "developer documentation": "开发者文档", + "Developer Documentation": "开发者文档", + "Deviation": "偏差", + "Device": "设备", + "Device ID": "设备 ID", + "Diagnosis": "诊断", + "Did any lights in the electronics box light up?": "电子盒中的任何灯亮了吗?", + "Did calibration complete without error logs?": "校准是否在没有错误日志的情况下完成?", + "Did FarmBot move to the end of the axis and then move back to the home position for this axis?": "FarmBot 是否移动到轴的末端,然后移动回该轴的原点位置?", + "Did FarmBot reach the home position (touching the hardstop) for this axis and set the coordinate to 0? Note: sometimes after a movement, FarmBot will settle into place and coordinates may change by +/-0.5mm from the desired value. If the coordinates are within 1mm of 0, that is acceptable.": "FarmBot 是否到达该轴的原点位置(触碰硬停止),并将坐标设置为 0?注意:有时在移动后,FarmBot 会就位,坐标可能会从所需值改变 +/-0.5mm。如果坐标在 0 的 1mm 以内,那是可以接受的。", + "Did FarmBot's {{ axis }}-axis move? (Don't worry about the direction right now)": "FarmBot 的 {{ axis }} 轴是否移动?(暂时不用担心方向)", + "Did FarmBot's motors power back on? (Try moving the Y-axis by hand)": "FarmBot 的电机是否重新启动?(尝试手动移动 Y 轴)", + "Did the lights turn on?": "灯是否亮了?", + "Did the rotary tool rotate?": "旋转工具是否旋转了?", + "Did the sensor return a value?": "传感器是否返回了一个值?", + "Did the vacuum pump run?": "真空泵是否运行了?", + "Did water flow?": "水是否流动了?", + "Did you finish the tour?": "您完成导览了吗?", + "Did you know?": "您知道吗?", + "Did you mean meta.{{field}}?": "您的意思是 meta.{{field}} 吗?", + "Did you watch the video?": "您看了视频吗?", + "digital": "数字", + "Digital": "数字", + "Direction": "方向", + "Disable axis": "禁用轴", + "disabled": "禁用", + "Disallow account data changes. This does not prevent Farmwares or FarmBot OS from changing settings.": "不允许更改帐户数据。这不会阻止 Farmwares 或 FarmBot OS 更改设置。", + "Discard Unsaved Changes": "放弃未保存的更改", + "Discard unsaved sequence changes": "放弃未保存的序列更改", + "disconnected": "断开连接", + "Disconnected": "已断开连接", + "Disk": "磁盘", + "Disk usage": "磁盘使用情况", + "Display a virtual trail for FarmBot in the garden map to show movement and watering history while the map is open. Toggling this setting will clear data for the current trail.": "在花园地图上显示 FarmBot 的虚拟轨迹,以显示在地图打开时的移动和浇水历史。切换此设置将清除当前轨迹的数据。", + "Display Encoder Data": "显示编码器数据", + "Display high motor load warning indicators in map. Requires TRAIL and stall detection to be enabled.": "在地图上显示高电机负载警告指示器。需要启用 TRAIL 和停滞检测。", + "Display raw": "显示原始数据", + "Display seconds in time, i.e., 10:00:00am instead of 10:00am": "显示时间中的秒,例如,10:00:00 而不是 10:00", + "Display time using the 24-hour notation, i.e., 23:00 instead of 11:00pm": "使用 24 小时计时法显示时间,例如,23:00 而不是 11:00pm", + "Distance": "距离", + "Distance between calibration objects in millimeters. The distance between the objects on the camera calibration card is 100mm. (default: {{ defaultSeparation }})": "校准对象之间的距离,以毫米为单位。相机校准卡上的对象之间的距离为 100 毫米。(默认:{{ defaultSeparation }})", + "Distance in millimeters to group calibration retries. If the distance traveled while detecting the axis end location exceeds this value, the calibration retry counter is reset. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "按组校准重试的距离(毫米)。如果在检测轴端位置时行进的距离超过此值,则校准重试计数器将重置。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Do you want to": "您想要", + "Documentation": "文档", + "documentation page for adjustment suggestions.": "调整建议的文档页面。", + "Does the image include red and green highlighted regions?": "图像是否包含红色和绿色高亮区域?", + "Does the image look OK?": "图像看起来正常吗?", + "Does the toggle indicate ON?": "开关是否显示为开启?", + "Does the virtual FarmBot match your real life FarmBot?": "虚拟 FarmBot 是否与您现实中的 FarmBot 匹配?", + "Don't allow movement past the maximum value provided in AXIS LENGTH (for AXIS LENGTH values other than '0'). (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "不允许超过 AXIS LENGTH 提供的最大值(对于 AXIS LENGTH 值不为 '0' 的情况)。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Don't ask about saving sequence work before closing browser tab. Warning: may cause loss of data.": "在关闭浏览器标签之前不要询问是否保存序列工作。警告:可能导致数据丢失。", + "Don't ask about saving work before closing browser tab. Warning: may cause loss of data.": "在关闭浏览器标签之前不要询问是否保存工作。警告:可能导致数据丢失。", + "Don't save weeds detected outside of garden bed. (default: {{ defaultUseBounds }})": "不要保存花坛外检测到的杂草。(默认:{{ defaultUseBounds }})", + "DOWNGRADE TO": "降级到", + "DOWNLOAD": "下载", + "Download FarmBot OS": "下载 FarmBot OS", + "Download Link": "下载链接", + "Download Photo": "下载照片", + "Download the version of FarmBot OS that corresponds to your FarmBot kit and its internal computer.": "下载与您的 FarmBot 套件及其内部计算机相对应的 FarmBot OS 版本。", + "Drag a box around the items you would like to select.": "拖动一个框选择你想要的项目。", + "Drag and drop": "拖放", + "DRAG COMMAND HERE": "在此拖动命令", + "duplicate step": "重复步骤", + "Duration": "持续时间", + "Dynamic map size": "动态地图大小", + "E-STOP": "紧急停止", + "E-stop button": "紧急停止按钮", + "E-STOP Button": "紧急停止按钮", + "E-Stop on Movement Error": "运动错误时紧急停止", + "Edit event": "编辑事件", + "edit filter settings": "编辑过滤设置", + "edit folder": "编辑文件夹", + "Edit garden": "编辑花园", + "Edit group": "编辑组", + "edit in map": "在地图中编辑", + "Edit on": "编辑开启", + "Edit plant group": "编辑植物组", + "Edit point group": "编辑点组", + "Edit Sequence": "编辑序列", + "Edit slot": "编辑插槽", + "Edit slot coordinates": "编辑插槽坐标", + "Edit slot coordinates setup": "编辑插槽坐标设置", + "Edit slot group": "编辑插槽组", + "Edit slot panel": "编辑插槽面板", + "Edit tool": "编辑工具", + "Edit weed": "编辑杂草", + "Edit weed group": "编辑杂草组", + "Education Documentation": "教育文档", + "Electronics Board": "电子板", + "Else Execute": "否则执行", + "email": "电子邮件", + "Email has been sent.": "电子邮件已发送。", + "emergency stop": "紧急停止", + "Emergency stop": "紧急停止", + "Emergency stop active": "紧急停止激活", + "Emergency stop if movement is not complete after the maximum number of retries. (default: {{ eStopOnError }})": "如果运动在最大重试次数后未完成,则紧急停止。 (默认: {{ eStopOnError }})", + "Emergency unlock": "紧急解锁", + "Empty": "空", + "Enable 2nd X Motor": "启用第二个X电机", + "Enable Encoders": "启用编码器", + "Enable limit switches": "启用限位开关", + "Enable plant animations in the garden map.": "在花园地图中启用植物动画。", + "Enable quiet motors. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "启用安静电机。 (默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Enable sequence begin logs": "启用序列开始日志", + "Enable sequence complete logs": "启用序列完成日志", + "Enable sequence step logs": "启用序列步骤日志", + "Enable Stall Detection": "启用卡住检测", + "Enable use of a second x-axis motor. Connects to E0 on RAMPS. (default: {{ x2Motor }})": "启用使用第二个X轴电机。连接到RAMPS上的E0。 (默认: {{ x2Motor }})", + "Enable use of electronic limit switches for end detection, finding axis length, and homing. Limit switches are contact switches or momentary push buttons that can be added to the end of each axis to be engaged when an axis reaches the end. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "启用使用电子限位开关进行末端检测、轴长度测量和归位。限位开关是接触开关或瞬时按钮,可添加到每个轴的末端,当轴到达末端时触发。 (默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Enable use of motor stall detection for detecting missed steps, finding axis length, and homing. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "启用电机卡住检测,用于检测错过的步骤、轴长度测量和归位。 (默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Enable use of rotary encoders for stall detection, finding axis length, and homing. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "启用使用旋转编码器进行卡住检测、轴长度测量和归位。 (默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", + "enabled": "已启用", + "Encoder Scaling": "编码器缩放", + "encoder scaling factor = 10000 * (motor resolution) / (encoder resolution). (default: x: {{ x }}, y: {{ y }}, z: {{ z }} (10000*200/360))": "编码器缩放因子 = 10000 * (电机分辨率) / (编码器分辨率)。 (默认: x: {{ x }}, y: {{ y }}, z: {{ z }} (10000*200/360))", + "ENCODER TYPE": "编码器类型", + "Encoders": "编码器", + "End date must not be before start date.": "结束日期不得早于开始日期。", + "End time must be after start time.": "结束时间必须在开始时间之后。", + "Ensure that the camera lens is not covered and there is adequate lighting. Try unplugging the camera and plugging it back in.": "确保摄像头镜头没有被遮盖并且有足够的光线。尝试拔下摄像头然后重新插入。", + "Entire system": "整个系统", + "ENV Editor": "环境变量编辑器", + "Environment": "环境", + "Environment variables added here can be accessed via the LUA sequence step 'env()' function.": "在此添加的环境变量可以通过LUA序列步骤 'env()' 函数访问。", + "error": "错误", + "Error": "错误", + "Error deleting config data": "删除配置数据时出错", + "Error Handling": "错误处理", + "Error taking photo": "拍照错误", + "Error: tour step does not exist": "错误:导览步骤不存在", + "Ethernet connection (optional)": "以太网连接(可选)", + "Evaluate Lua commands. For power users and software developers.": "评估Lua命令。适用于高级用户和软件开发人员。", + "Event start time needs to be in the future, not the past.": "事件开始时间需要是将来,而不是过去。", + "Events": "事件", + "Every": "每", + "Execute a sequence if a condition is satisfied. If the condition is not satisfied, chose to do nothing or execute a different sequence.": "如果满足条件则执行序列。如果不满足条件,可以选择不执行或执行不同的序列。", + "Execute Lua commands. For power users and software developers.": "执行Lua命令。适用于高级用户和软件开发人员。", + "Execute sequence": "执行序列", + "exit": "退出", + "Exit": "退出", + "Export": "导出", + "Export all data related to this device. Exports are delivered via email as JSON file attachments.": "导出与此设备相关的所有数据。导出内容通过电子邮件作为JSON文件附件发送。", + "Export data": "导出数据", + "Export parameters": "导出参数", + "Export request received. Please allow up to 10 minutes for delivery.": "已收到导出请求。请等待最多10分钟以完成交付。", + "Express Documentation": "快速文档", + "ext": "扩展名", + "Externally defined": "外部定义", + "extras": "额外", + "Factory reset": "恢复出厂设置", + "Fallback Soil Height": "备用土壤高度", + "false": "假", + "Farm Designer": "农场设计器", + "FarmBot": "农场机器人", + "FarmBot and the browser are both connected to the internet (or have been recently). Try rebooting FarmBot and refreshing the browser. If the issue persists, something may be preventing FarmBot from accessing the message broker (used to communicate with your web browser in real-time). If you are on a company or school network, a firewall may be blocking port 5672 or port 8883. Ensure that the blue LED communications light on the FarmBot electronics box is illuminated.": "FarmBot和浏览器都连接到互联网(或最近连接过)。尝试重启FarmBot并刷新浏览器。如果问题仍然存在,可能是FarmBot无法访问消息代理(用于与您的网络浏览器实时通信)。如果您在公司或学校网络上,防火墙可能会阻止端口5672或端口8883。确保FarmBot电子箱上的蓝色LED通信灯亮着。", + "FarmBot and the browser both have internet connectivity, but we haven't seen any activity from FarmBot on the Web App in a while. This could mean that FarmBot has not synced in a while, which might not be a problem. If you are experiencing usability issues, however, it could be a sign of HTTP blockage on FarmBot's local internet connection.": "FarmBot和浏览器都连接到互联网,但我们已经有一段时间没有在Web应用程序上看到FarmBot的任何活动了。这可能意味着FarmBot有一段时间没有同步了,这可能不是问题。但是,如果您遇到可用性问题,这可能是FarmBot本地互联网连接上的HTTP阻塞的迹象。", + "FarmBot forum": "FarmBot论坛", + "FarmBot forum.": "FarmBot论坛。", + "FarmBot Info": "FarmBot信息", + "FarmBot is already at the home position": "FarmBot已经在原位", + "FarmBot is at position ": "FarmBot当前位置为", + "FarmBot is busy": "FarmBot正在忙碌", + "FarmBot is locked": "FarmBot已锁定", + "FarmBot is not connected.": "FarmBot未连接", + "FarmBot is offline": "FarmBot离线", + "FarmBot Kit": "FarmBot套件", + "FarmBot model": "FarmBot型号", + "FarmBot motor load": "FarmBot电机负载", + "FarmBot Network Requirements": "FarmBot网络要求", + "FarmBot origin (home) location in images. If the origin does not correspond to an image corner, rotate the camera until one does. (default: {{ defaultOrigin }})": "FarmBot在图像中的原点(原位)位置。如果原点不对应图像的一个角落,请旋转相机直到原点对应。(默认值:{{ defaultOrigin }})", + "Farmbot OS": "Farmbot操作系统", + "FarmBot OS": "FarmBot操作系统", + "FarmBot OS action.": "FarmBot操作系统操作。", + "FarmBot OS or micro-controller firmware action.": "FarmBot操作系统或微控制器固件操作。", + "FarmBot OS update": "FarmBot操作系统更新", + "FarmBot OS will automatically download and install software updates at the chosen time.": "FarmBot操作系统将在选定的时间自动下载并安装软件更新。", + "FarmBot position (X, Y, Z)": "FarmBot位置(X, Y, Z)", + "FarmBot position unknown.": "FarmBot位置未知。", + "FarmBot sent a malformed message. You may need to upgrade FarmBot OS. Please upgrade FarmBot OS and log back in.": "FarmBot发送了格式错误的消息。您可能需要升级FarmBot操作系统。请升级FarmBot操作系统并重新登录。", + "FarmBot soil z": "FarmBot土壤z", + "FarmBot Version": "FarmBot版本", + "FarmBot Web App": "FarmBot Web应用程序", + "FarmBot's current position": "FarmBot的当前位置", + "FarmBot's motors are still powered": "FarmBot的电机仍然通电", + "FarmBot's motors are still unpowered": "FarmBot的电机仍然未通电", + "Farmduino firmware is missing. Press the yellow FLASH FIRMWARE button to flash the firmware to your FarmBot. Verify FIRMWARE selection matches FarmBot kit version and check the USB cable between the Raspberry Pi and the Farmduino. Reboot FarmBot after a reconnection. If the issue persists, reconfiguration of FarmBot OS may be necessary.": "Farmduino固件丢失。按下黄色的闪存固件按钮将固件刷新到您的FarmBot上。确认固件选择与FarmBot套件版本匹配,并检查Raspberry Pi和Farmduino之间的USB电缆。重新连接后重启FarmBot。如果问题仍然存在,可能需要重新配置FarmBot操作系统。", "Farmware": "Farmware", - "Farmware execution": "Farmware execution", - "Farmware manifest URL": "Farmware manifest URL", - "Farmware not found.": "Farmware not found.", - "Farmware Tools version": "Farmware Tools version", - "Featured Sequences": "Featured Sequences", - "Featured Shared Sequences": "Featured Shared Sequences", - "Featured shared sequences published by FarmBot Inc.": "Featured shared sequences published by FarmBot Inc.", - "Feed Name": "Feed Name", - "Feedback already sent.": "Feedback already sent.", - "Feedback sent.": "Feedback sent.", - "Feedback submitted through this form will be linked to your user account and email so that we may follow up when necessary. If your account email is not the best way for us to reach you, please include your phone number or preferred means of contact.": "Feedback submitted through this form will be linked to your user account and email so that we may follow up when necessary. If your account email is not the best way for us to reach you, please include your phone number or preferred means of contact.", - "field": "field", - "filter": "filter", - "Filter map photos": "Filter map photos", - "filters": "filters", - "Filters active": "Filters active", - "Find a detail in the image at the soil level where the coordinates are known (for example, a spot watered by FarmBot), and compare the known coordinates against the location for the detail shown in the map.": "Find a detail in the image at the soil level where the coordinates are known (for example, a spot watered by FarmBot), and compare the known coordinates against the location for the detail shown in the map.", - "Find axis length": "Find axis length", - "find home": "find home", - "Find home": "Find home", - "Find Home": "Find Home", - "FIND HOME": "FIND HOME", - "FIND HOME {{ axis }}": "FIND HOME {{ axis }}", - "Find Home on Boot": "Find Home on Boot", - "FIND LENGTH": "FIND LENGTH", - "Find out more": "Find out more", - "Finish creating the group": "Finish creating the group", - "Finish setting up your account and FarmBot using our setup wizard. To open the setup wizard, click the **Setup: {{ percentComplete }}** button in the main navigation bar.": "Finish setting up your account and FarmBot using our setup wizard. To open the setup wizard, click the **Setup: {{ percentComplete }}** button in the main navigation bar.", - "Finish setup": "Finish setup", - "Firmware": "Firmware", - "Firmware code": "Firmware code", - "Firmware commit": "Firmware commit", - "Firmware Name": "Firmware Name", - "Firmware path": "Firmware path", - "Firmware value from your choice in the dropdown to the left, as understood by the Web App.": "Firmware value from your choice in the dropdown to the left, as understood by the Web App.", - "Firmware value reported from the firmware, as understood by FarmBot OS.": "Firmware value reported from the firmware, as understood by FarmBot OS.", - "Firmware value reported from the firmware.": "Firmware value reported from the firmware.", - "Fix issues above to continue.": "Fix issues above to continue.", - "flash": "flash", - "Flash FarmBot's SD card with FarmBot OS and re-insert it.": "Flash FarmBot's SD card with FarmBot OS and re-insert it.", - "flash firmware": "flash firmware", - "Flash firmware": "Flash firmware", - "Flash Firmware": "Flash Firmware", - "follow": "follow", - "for help, please provide a detailed description of what you need help with and we'll get in touch.": "for help, please provide a detailed description of what you need help with and we'll get in touch.", - "For IT Security Professionals": "For IT Security Professionals", - "for more information.": "for more information.", - "Forgot password?": "Forgot password?", - "Formula": "Formula", - "from": "from", - "front": "front", - "Fun": "Fun", - "FYI": "FYI", - "Gantry": "Gantry", - "Gantry Height": "Gantry Height", - "Gantry-mounted": "Gantry-mounted", - "Garden": "Garden", - "Garden not found.": "Garden not found.", - "Garden Saved.": "Garden Saved.", - "Gardens": "Gardens", - "Genesis Documentation": "Genesis Documentation", - "Genesis v1.2 through v1.4 bots did not include the camera calibration card. Instead, these kits included red calibration objects and must be calibrated using an alternative method": "Genesis v1.2 through v1.4 bots did not include the camera calibration card. Instead, these kits included red calibration objects and must be calibrated using an alternative method", - "Get growing!": "Get growing!", - "Get Help": "Get Help", - "Get in touch with our support staff. Only available to customers who have purchased a full FarmBot kit from FarmBot Inc.": "Get in touch with our support staff. Only available to customers who have purchased a full FarmBot kit from FarmBot Inc.", - "Get in touch with our support staff. Only available to customers with a": "Get in touch with our support staff. Only available to customers with a", - "Get Started": "Get Started", - "Getting started": "Getting started", - "Getting Started": "Getting Started", - "Give your group a descriptive name such as \"All Spinach Plants\". When you are finished editing your group press the back button and advance the tour.": "Give your group a descriptive name such as \"All Spinach Plants\". When you are finished editing your group press the back button and advance the tour.", - "Go ahead and add more groups. It is best to have a group for every set of plants where you wish to perform the same operation (such as watering) on each member of the group. Once you have added additional groups, you are finished with this tour!": "Go ahead and add more groups. It is best to have a group for every set of plants where you wish to perform the same operation (such as watering) on each member of the group. Once you have added additional groups, you are finished with this tour!", - "Go ahead and add more plants to your garden. Once you have added at least two crop types, advance the tour.": "Go ahead and add more plants to your garden. Once you have added at least two crop types, advance the tour.", - "go back": "go back", - "good": "good", - "Grace Period": "Grace Period", - "Gray": "Gray", - "grayscale depth": "grayscale depth", - "Greater than": "Greater than", - "Green": "Green", - "Grid and row planting": "Grid and row planting", - "Grid and Row Planting": "Grid and Row Planting", - "Grid point": "Grid point", - "Group": "Group", - "Group Filters": "Group Filters", - "GROUP MEMBERS ({{count}})": "GROUP MEMBERS ({{count}})", - "Groups": "Groups", - "Groups of plants are listed in the groups section. Once you create some groups, they will be listed here for you to view and manage. To make your first group, press the group + button and then advance the tour.": "Groups of plants are listed in the groups section. Once you create some groups, they will be listed here for you to view and manage. To make your first group, press the group + button and then advance the tour.", - "Growing Degree Days": "Growing Degree Days", - "Hard": "Hard", - "Hard Reset": "Hard Reset", - "HARD RESET": "HARD RESET", - "Hard reset your FarmBot by reflashing the latest version of FarmBot OS onto the microSD card. This will erase all data from the device and allow you to start from a clean slate. This is recommended if you are experiencing problems with your setup. Upon hard resetting, your device will go into Configurator mode.": "Hard reset your FarmBot by reflashing the latest version of FarmBot OS onto the microSD card. This will erase all data from the device and allow you to start from a clean slate. This is recommended if you are experiencing problems with your setup. Upon hard resetting, your device will go into Configurator mode.", - "hardware and software documentation hubs": "hardware and software documentation hubs", - "Hardware parameter import error.": "Hardware parameter import error.", - "Hardware setting conflict": "Hardware setting conflict", - "Harvested": "Harvested", - "Has the value been entered?": "Has the value been entered?", - "Has your IT department confirmed that the necessary ports are opened or are you installing FarmBot at home?": "Has your IT department confirmed that the necessary ports are opened or are you installing FarmBot at home?", - "Have a question for the greater FarmBot community? Get help by asking our global community of users on the": "Have a question for the greater FarmBot community? Get help by asking our global community of users on the", - "Have the browser also read aloud log messages on the \"Speak\" channel that are spoken by FarmBot.": "Have the browser also read aloud log messages on the \"Speak\" channel that are spoken by FarmBot.", - "Have you selected your FarmBot model?": "Have you selected your FarmBot model?", - "Head over to": "Head over to", - "height": "height", - "Height": "Height", - "help": "help", - "Help": "Help", - "here": "here", - "Here you'll find important information about your account, your FarmBot, and news such as new feature announcements. Look for the blue badge in the main menu to see when new messages are available.": "Here you'll find important information about your account, your FarmBot, and news such as new feature announcements. Look for the blue badge in the main menu to see when new messages are available.", - "hexagonal packing": "hexagonal packing", - "hide": "hide", - "hide icons": "hide icons", - "Hide Sensors panel": "Hide Sensors panel", - "Hide Webcam widget": "Hide Webcam widget", - "hide z display": "hide z display", - "Highlight modified settings": "Highlight modified settings", - "history": "history", - "HOME POSITION": "HOME POSITION", - "Home position adjustment travel speed (homing and finding axis length) in millimeters per second. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)": "Home position adjustment travel speed (homing and finding axis length) in millimeters per second. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)", - "Home X": "Home X", - "Home Y": "Home Y", - "Home Z": "Home Z", - "Homing Speed (mm/s)": "Homing Speed (mm/s)", - "Hotkeys": "Hotkeys", - "hours": "hours", - "Hours": "Hours", - "hours prior to most recent record": "hours prior to most recent record", - "HUE": "HUE", - "I agree to the": "I agree to the", - "I can see the farmbot-xxxx network but my device will not connect": "I can see the farmbot-xxxx network but my device will not connect", - "I can't find the calibration card": "I can't find the calibration card", - "I do not know my FarmBot model": "I do not know my FarmBot model", - "I do not know my order number": "I do not know my order number", - "I do not know where to connect the ethernet cable": "I do not know where to connect the ethernet cable", - "I do not know where to get FarmBot OS": "I do not know where to get FarmBot OS", - "I do not wish to continue yet": "I do not wish to continue yet", - "I pressed the wrong button": "I pressed the wrong button", - "I still need to assemble FarmBot": "I still need to assemble FarmBot", - "I was redirected to a farm.bot page": "I was redirected to a farm.bot page", - "I'm not sure": "I'm not sure", - "icon in the main navigation bar to open up the documentation in-app": "icon in the main navigation bar to open up the documentation in-app", - "If ...": "If ...", - "If enabled, FarmBot will: (1) Move Z to the Safe Z height, (2) Move X and Y to the new location, and (3) Move Z to the new location": "If enabled, FarmBot will: (1) Move Z to the Safe Z height, (2) Move X and Y to the new location, and (3) Move Z to the new location", - "If encoders or limit switches are enabled, find home for an axis (set zero position).": "If encoders or limit switches are enabled, find home for an axis (set zero position).", - "If encoders or limit switches are enabled, find the home position when the device powers on. Warning! This will perform homing on all axes when the device powers on. Encoders or limit switches must be enabled. It is recommended to make sure homing works properly before enabling this feature. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "If encoders or limit switches are enabled, find the home position when the device powers on. Warning! This will perform homing on all axes when the device powers on. Encoders or limit switches must be enabled. It is recommended to make sure homing works properly before enabling this feature. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "If encoders or limit switches are enabled, home axis and determine maximum. Will set axis length value.": "If encoders or limit switches are enabled, home axis and determine maximum. Will set axis length value.", - "If encoders, stall detection, or limit switches are enabled, home axis and determine maximum. Will set axis length value.": "If encoders, stall detection, or limit switches are enabled, home axis and determine maximum. Will set axis length value.", - "If not using a webcam, use this setting to remove the widget from the Controls panel.": "If not using a webcam, use this setting to remove the widget from the Controls panel.", - "If not using sensors, use this setting to remove the panel from the Farm Designer.": "If not using sensors, use this setting to remove the panel from the Farm Designer.", - "If stall detection or limit switches are enabled, find home for an axis (set zero position).": "If stall detection or limit switches are enabled, find home for an axis (set zero position).", - "If stall detection or limit switches are enabled, find the home position when the device powers on. Warning! This will perform homing on all axes when the device powers on. Stall detection or limit switches must be enabled. It is recommended to make sure homing works properly before enabling this feature. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "If stall detection or limit switches are enabled, find the home position when the device powers on. Warning! This will perform homing on all axes when the device powers on. Stall detection or limit switches must be enabled. It is recommended to make sure homing works properly before enabling this feature. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "If stall detection or limit switches are enabled, home axis and determine maximum. Will set axis length value.": "If stall detection or limit switches are enabled, home axis and determine maximum. Will set axis length value.", - "If statement": "If statement", - "If Test Fails": "If Test Fails", - "If the problem persists after performing the recommendations above, you may have a defective camera. You can request a free replacement": "If the problem persists after performing the recommendations above, you may have a defective camera. You can request a free replacement", - "If using a phone, disable cellular data and try again.": "If using a phone, disable cellular data and try again.", - "If you already tried the troubleshooting tips above and looked through the": "If you already tried the troubleshooting tips above and looked through the", - "If you are installing FarmBot at a school or enterprise where the internet network is managed by an IT department, you must ensure that certain ports are opened to allow FarmBot to fully connect to the web app. If you are installing FarmBot in one of these locations, have your IT department review the following help page to ensure FarmBot will be able to fully connect once configured.": "If you are installing FarmBot at a school or enterprise where the internet network is managed by an IT department, you must ensure that certain ports are opened to allow FarmBot to fully connect to the web app. If you are installing FarmBot in one of these locations, have your IT department review the following help page to ensure FarmBot will be able to fully connect once configured.", - "If you are sure you want to delete your account, type in your password below to continue.": "If you are sure you want to delete your account, type in your password below to continue.", - "If you are sure you want to reset your account, type in your password below to continue.": "If you are sure you want to reset your account, type in your password below to continue.", - "If you ever purchase new tools or make your own, add them to the app by clicking the + tool button. Once the tool has been added, load it into an available slot to begin using it in your sequences!": "If you ever purchase new tools or make your own, add them to the app by clicking the + tool button. Once the tool has been added, load it into an available slot to begin using it in your sequences!", - "If you have a webcam, you can view the video stream in this widget. Press the edit button to update and save your webcam URL. Note: Some webcam services do not allow webcam feeds to be embedded in other sites. If you see a web browser error after adding a webcam feed, there is unfortunately nothing FarmBot can do to fix the problem. Please contact your webcam's customer support to see if the security policy for embedding feeds into other sites can be changed.": "If you have a webcam, you can view the video stream in this widget. Press the edit button to update and save your webcam URL. Note: Some webcam services do not allow webcam feeds to be embedded in other sites. If you see a web browser error after adding a webcam feed, there is unfortunately nothing FarmBot can do to fix the problem. Please contact your webcam's customer support to see if the security policy for embedding feeds into other sites can be changed.", - "If you want to play around and keep your data, feel free to make a real account at": "If you want to play around and keep your data, feel free to make a real account at", - "ignore detections out of bounds": "ignore detections out of bounds", - "Image blur kernel size. Must be an odd number greater than 1. (default: {{ defaultBlur }})": "Image blur kernel size. Must be an odd number greater than 1. (default: {{ defaultBlur }})", - "Image Deleted.": "Image Deleted.", - "Image pixel to FarmBot coordinate scale. Typically between 0.1 and 2, this value matches image scale with the FarmBot coordinate system. (default: {{ defaultScale }} (uncalibrated))": "Image pixel to FarmBot coordinate scale. Typically between 0.1 and 2, this value matches image scale with the FarmBot coordinate system. (default: {{ defaultScale }} (uncalibrated))", - "image resolution": "image resolution", - "Images": "Images", - "Images may take up to 3 minutes to appear.": "Images may take up to 3 minutes to appear.", - "Images may take up to 30 seconds to appear.": "Images may take up to 30 seconds to appear.", - "IMPORT": "IMPORT", - "Import parameters": "Import parameters", - "import this sequence": "import this sequence", - "Imported and edited publicly shared sequence.": "Imported and edited publicly shared sequence.", - "Imported publicly shared sequence.": "Imported publicly shared sequence.", - "importing": "importing", - "Importing the sequence into their FarmBot account to view and use it as they deem fit": "Importing the sequence into their FarmBot account to view and use it as they deem fit", - "Importing this sequence will allow you to use it with your FarmBot and make changes. If the original author of the sequence publishes a new version, you will have the option to upgrade your copy.": "Importing this sequence will allow you to use it with your FarmBot and make changes. If the original author of the sequence publishes a new version, you will have the option to upgrade your copy.", - "in map": "in map", - "In real life, load one of FarmBot's tools (such as the watering nozzle) into a toolbay slot. Then, using the controls popup, instruct FarmBot to find the home position.": "In real life, load one of FarmBot's tools (such as the watering nozzle) into a toolbay slot. Then, using the controls popup, instruct FarmBot to find the home position.", - "in slot": "in slot", - "In this tour you'll learn how to add plants to your garden, create filter-based groups of those plants, and snapshot your garden layout for future growing seasons. Let's get started!": "In this tour you'll learn how to add plants to your garden, create filter-based groups of those plants, and snapshot your garden layout for future growing seasons. Let's get started!", - "IN USE": "IN USE", - "inactive": "inactive", - "incompatible": "incompatible", - "indoor": "indoor", - "Info": "Info", - "Input is not needed for this Farmware.": "Input is not needed for this Farmware.", - "Input required": "Input required", - "Insert a luer lock needle into the 3-in-1 tool head and place a seed trough into the gantry-mounted seed trough holder. Then, using the controls popup, instruct FarmBot to find the home position.": "Insert a luer lock needle into the 3-in-1 tool head and place a seed trough into the gantry-mounted seed trough holder. Then, using the controls popup, instruct FarmBot to find the home position.", - "Inspect the wood raised bed (Express kits) or track extrusions (Genesis kits) for bumps. Use sand paper to smooth out imperfections.": "Inspect the wood raised bed (Express kits) or track extrusions (Genesis kits) for bumps. Use sand paper to smooth out imperfections.", - "Install": "Install", - "Install error": "Install error", - "install Farmware": "install Farmware", - "Install Farmware": "Install Farmware", - "Install first-party Farmware": "Install first-party Farmware", - "Install new Farmware": "Install new Farmware", - "installation pending": "installation pending", - "Installing FarmBot OS": "Installing FarmBot OS", - "Installing FarmBot OS documentation": "Installing FarmBot OS documentation", - "Internal Computer": "Internal Computer", - "internal envs": "internal envs", - "Internationalize Web App": "Internationalize Web App", - "Internet": "Internet", - "Interpolated Soil Z at": "Interpolated Soil Z at", - "Interpolation step size": "Interpolation step size", - "Interpolation use nearest": "Interpolation use nearest", - "Interpolation weight": "Interpolation weight", - "INTRO": "INTRO", - "Introduction": "Introduction", - "Invalid date": "Invalid date", - "Invalid property for resource.": "Invalid property for resource.", - "Invalid Raspberry Pi GPIO pin number.": "Invalid Raspberry Pi GPIO pin number.", - "Invalid selection.": "Invalid selection.", - "Invert {{ axis }}-axis Jog Buttons": "Invert {{ axis }}-axis Jog Buttons", - "Invert 2nd X Motor": "Invert 2nd X Motor", - "Invert axis limit switches. Enable for normally closed (NC), disable for normally open (NO). (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Invert axis limit switches. Enable for normally closed (NC), disable for normally open (NO). (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Invert direction of motor while finding axis length. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Invert direction of motor while finding axis length. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Invert direction of motor. (default: {{ x }})": "Invert direction of motor. (default: {{ x }})", - "Invert Encoders": "Invert Encoders", - "invert hue range selection": "invert hue range selection", - "Invert Jog Buttons": "Invert Jog Buttons", - "Invert limit switches": "Invert limit switches", - "Invert Motors": "Invert Motors", - "Invert the range of hues selected. Typically used to select the full range of reds. (default: {{ defaultInvertState }})": "Invert the range of hues selected. Typically used to select the full range of reds. (default: {{ defaultInvertState }})", - "Invert X Axis Jog Button": "Invert X Axis Jog Button", - "Invert Y Axis Jog Button": "Invert Y Axis Jog Button", - "Invert Z Axis Jog Button": "Invert Z Axis Jog Button", - "is": "is", - "is equal to": "is equal to", - "Is FarmBot assembled and ready to power on?": "Is FarmBot assembled and ready to power on?", - "Is FarmBot online?": "Is FarmBot online?", - "Is FarmBot positioned away from the hardstops?": "Is FarmBot positioned away from the hardstops?", - "is greater than": "is greater than", - "is less than": "is less than", - "is not": "is not", - "is not equal to": "is not equal to", - "Is the 'Find Home' sequence selected?": "Is the 'Find Home' sequence selected?", - "Is the calibration card on the soil underneath the camera?": "Is the calibration card on the soil underneath the camera?", - "Is the configurator loaded?": "Is the configurator loaded?", - "Is the FarmBot able to move reliably along the full length of the X-axis in both directions?": "Is the FarmBot able to move reliably along the full length of the X-axis in both directions?", - "Is the FarmBot able to move reliably along the full length of the Y-axis in both directions?": "Is the FarmBot able to move reliably along the full length of the Y-axis in both directions?", - "Is the FarmBot able to move reliably along the full length of the Z-axis in both directions?": "Is the FarmBot able to move reliably along the full length of the Z-axis in both directions?", - "Is the location in the image aligned with the map location?": "Is the location in the image aligned with the map location?", - "Is the SD card with FarmBot OS installed?": "Is the SD card with FarmBot OS installed?", - "Is the status 'connected'?": "Is the status 'connected'?", - "Is the UTM cable plugged in?": "Is the UTM cable plugged in?", - "Is the z-axis as high as it will go?": "Is the z-axis as high as it will go?", - "is unknown": "is unknown", - "Is your phone or computer connected to the FarmBot WiFi network?": "Is your phone or computer connected to the FarmBot WiFi network?", - "It does not line up": "It does not line up", - "It made sounds like it was trying to move, but didn't move": "It made sounds like it was trying to move, but didn't move", - "It moved in a different direction": "It moved in a different direction", - "It moved the opposite direction": "It moved the opposite direction", - "It moved up": "It moved up", - "It seems like it is trying to move too fast, or doesn't have enough torque": "It seems like it is trying to move too fast, or doesn't have enough torque", - "It stalls or has trouble at certain locations": "It stalls or has trouble at certain locations", - "It started to move, but stopped early": "It started to move, but stopped early", - "It stopped before reaching the axis end": "It stopped before reaching the axis end", - "It struggles to move along the whole length of the axis": "It struggles to move along the whole length of the axis", - "item": "item", - "Item(s) added.": "Item(s) added.", - "ITERATIONS": "ITERATIONS", - "Job": "Job", - "Job count": "Job count", - "Just the Arduino": "Just the Arduino", - "Keep power applied to motors. Prevents slipping from gravity in certain situations. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Keep power applied to motors. Prevents slipping from gravity in certain situations. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Key cannot be blank.": "Key cannot be blank.", - "Key has already been taken.": "Key has already been taken.", - "Landing page": "Landing page", - "Language": "Language", - "last message seen ": "last message seen ", - "Last seen": "Last seen", - "Last updated": "Last updated", - "Latest": "Latest", - "latitude": "latitude", - "Learn more": "Learn more", - "Learn more about the app": "Learn more about the app", + "Farmware execution": "Farmware执行", + "Farmware manifest URL": "Farmware清单URL", + "Farmware not found.": "找不到Farmware。", + "Farmware Tools version": "Farmware工具版本", + "Featured Sequences": "特色序列", + "Featured Shared Sequences": "特色共享序列", + "Featured shared sequences published by FarmBot Inc.": "由FarmBot公司发布的特色共享序列。", + "Feed Name": "Feed名称", + "Feedback already sent.": "反馈已发送。", + "Feedback sent.": "反馈已发送。", + "Feedback submitted through this form will be linked to your user account and email so that we may follow up when necessary. If your account email is not the best way for us to reach you, please include your phone number or preferred means of contact.": "通过此表单提交的反馈将链接到您的用户账户和电子邮件,以便我们在必要时跟进。如果您的账户电子邮件不是我们联系您的最佳方式,请包括您的电话号码或首选联系方式。", + "field": "字段", + "filter": "过滤器", + "Filter map photos": "过滤地图照片", + "filters": "过滤器", + "Filters active": "过滤器已激活", + "Find a detail in the image at the soil level where the coordinates are known (for example, a spot watered by FarmBot), and compare the known coordinates against the location for the detail shown in the map.": "在图像中找到土壤水平上坐标已知的细节(例如,FarmBot浇水的地点),并将已知坐标与地图中显示的细节位置进行比较。", + "Find axis length": "查找轴长度", + "find home": "查找原点", + "Find home": "查找原点", + "Find Home": "查找原点", + "FIND HOME": "查找原点", + "FIND HOME {{ axis }}": "查找原点 {{ axis }}", + "Find Home on Boot": "在启动时查找原点", + "FIND LENGTH": "查找长度", + "Find out more": "了解更多", + "Finish creating the group": "完成创建组", + "Finish setting up your account and FarmBot using our setup wizard. To open the setup wizard, click the **Setup: {{ percentComplete }}** button in the main navigation bar.": "使用我们的设置向导完成账户和FarmBot的设置。要打开设置向导,请点击主导航栏中的**设置: {{ percentComplete }}**按钮。", + "Finish setup": "完成设置", + "Firmware": "固件", + "Firmware code": "固件代码", + "Firmware commit": "固件提交", + "Firmware Name": "固件名称", + "Firmware path": "固件路径", + "Firmware value from your choice in the dropdown to the left, as understood by the Web App.": "Web应用程序理解的下拉菜单中选择的固件值。", + "Firmware value reported from the firmware, as understood by FarmBot OS.": "FarmBot操作系统理解的由固件报告的固件值。", + "Firmware value reported from the firmware.": "固件报告的固件值。", + "Fix issues above to continue.": "修复上述问题以继续。", + "flash": "闪存", + "Flash FarmBot's SD card with FarmBot OS and re-insert it.": "使用FarmBot操作系统刷新FarmBot的SD卡并重新插入。", + "flash firmware": "刷新固件", + "Flash firmware": "刷新固件", + "Flash Firmware": "刷新固件", + "follow": "跟随", + "for help, please provide a detailed description of what you need help with and we'll get in touch.": "如需帮助,请提供详细描述我们需要帮助的内容,我们将与您联系。", + "For IT Security Professionals": "为IT安全专业人士提供", + "for more information.": "了解更多信息。", + "Forgot password?": "忘记密码?", + "Formula": "公式", + "from": "来自", + "front": "前方", + "Fun": "乐趣", + "FYI": "供参考", + "Gantry": "龙门架", + "Gantry Height": "龙门架高度", + "Gantry-mounted": "龙门架安装", + "Garden": "花园", + "Garden not found.": "未找到花园。", + "Garden Saved.": "花园已保存。", + "Gardens": "花园", + "Genesis Documentation": "Genesis文档", + "Genesis v1.2 through v1.4 bots did not include the camera calibration card. Instead, these kits included red calibration objects and must be calibrated using an alternative method": "Genesis v1.2至v1.4的机器人未包含相机校准卡。相反,这些套件包含红色校准物体,必须使用其他方法进行校准", + "Get growing!": "开始种植!", + "Get Help": "获取帮助", + "Get in touch with our support staff. Only available to customers who have purchased a full FarmBot kit from FarmBot Inc.": "与我们的支持人员联系。仅适用于从FarmBot公司购买了完整FarmBot套件的客户。", + "Get in touch with our support staff. Only available to customers with a": "与我们的支持人员联系。仅适用于拥有", + "Get Started": "开始", + "Getting started": "入门", + "Getting Started": "入门", + "Give your group a descriptive name such as \"All Spinach Plants\". When you are finished editing your group press the back button and advance the tour.": "为您的组提供一个描述性名称,例如“所有菠菜植物”。完成编辑组后,按返回按钮继续导览。", + "Go ahead and add more groups. It is best to have a group for every set of plants where you wish to perform the same operation (such as watering) on each member of the group. Once you have added additional groups, you are finished with this tour!": "继续添加更多组。最好为每组植物分配一个组,您希望对组中的每个成员执行相同的操作(例如浇水)。添加更多组后,您就完成了这次导览!", + "Go ahead and add more plants to your garden. Once you have added at least two crop types, advance the tour.": "继续在您的花园中添加更多植物。一旦您添加了至少两种作物类型,请继续导览。", + "go back": "返回", + "good": "好", + "Grace Period": "宽限期", + "Gray": "灰色", + "grayscale depth": "灰度深度", + "Greater than": "大于", + "Green": "绿色", + "Grid and row planting": "网格和行种植", + "Grid and Row Planting": "网格和行种植", + "Grid point": "网格点", + "Group": "组", + "Group Filters": "组过滤器", + "GROUP MEMBERS ({{count}})": "组成员 ({{count}})", + "Groups": "组", + "Groups of plants are listed in the groups section. Once you create some groups, they will be listed here for you to view and manage. To make your first group, press the group + button and then advance the tour.": "植物组列在组部分。一旦您创建了一些组,它们将列在这里供您查看和管理。要创建您的第一个组,请按组 + 按钮,然后继续导览。", + "Growing Degree Days": "生长度日", + "Hard": "硬", + "Hard Reset": "硬重置", + "HARD RESET": "硬重置", + "Hard reset your FarmBot by reflashing the latest version of FarmBot OS onto the microSD card. This will erase all data from the device and allow you to start from a clean slate. This is recommended if you are experiencing problems with your setup. Upon hard resetting, your device will go into Configurator mode.": "通过将FarmBot操作系统的最新版本刷新到microSD卡来硬重置您的FarmBot。这将擦除设备上的所有数据,并允许您从头开始。如果您在设置中遇到问题,建议这样做。硬重置后,您的设备将进入配置模式。", + "hardware and software documentation hubs": "硬件和软件文档中心", + "Hardware parameter import error.": "硬件参数导入错误。", + "Hardware setting conflict": "硬件设置冲突", + "Harvested": "已收获", + "Has the value been entered?": "值是否已输入?", + "Has your IT department confirmed that the necessary ports are opened or are you installing FarmBot at home?": "您的IT部门是否确认已打开必要的端口,或者您是在家里安装FarmBot?", + "Have a question for the greater FarmBot community? Get help by asking our global community of users on the": "对更大的FarmBot社区有疑问吗?通过向我们的全球用户社区提问来获得帮助", + "Have the browser also read aloud log messages on the \"Speak\" channel that are spoken by FarmBot.": "让浏览器在“Speak”频道上大声朗读由FarmBot发出的日志消息。", + "Have you selected your FarmBot model?": "您选择了您的FarmBot型号吗?", + "Head over to": "前往", + "height": "高度", + "Height": "高度", + "help": "帮助", + "Help": "帮助", + "here": "这里", + "Here you'll find important information about your account, your FarmBot, and news such as new feature announcements. Look for the blue badge in the main menu to see when new messages are available.": "在这里您会找到有关您的帐户、您的FarmBot的重要信息以及新功能公告等新闻。查看主菜单中的蓝色徽章,查看新消息何时可用。", + "hexagonal packing": "六角形包装", + "hide": "隐藏", + "hide icons": "隐藏图标", + "Hide Sensors panel": "隐藏传感器面板", + "Hide Webcam widget": "隐藏摄像头小部件", + "hide z display": "隐藏z显示", + "Highlight modified settings": "突出显示修改的设置", + "history": "历史", + "HOME POSITION": "原位", + "Home position adjustment travel speed (homing and finding axis length) in millimeters per second. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)": "原位调整行进速度(归位和查找轴长度)以毫米每秒为单位。(默认:x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)", + "Home X": "归位X", + "Home Y": "归位Y", + "Home Z": "归位Z", + "Homing Speed (mm/s)": "归位速度 (mm/s)", + "Hotkeys": "快捷键", + "hours": "小时", + "Hours": "小时", + "hours prior to most recent record": "最近记录前的小时数", + "HUE": "色调", + "I agree to the": "我同意", + "I can see the farmbot-xxxx network but my device will not connect": "我可以看到farmbot-xxxx网络,但我的设备无法连接", + "I can't find the calibration card": "我找不到校准卡", + "I do not know my FarmBot model": "我不知道我的FarmBot型号", + "I do not know my order number": "我不知道我的订单号", + "I do not know where to connect the ethernet cable": "我不知道在哪里连接以太网电缆", + "I do not know where to get FarmBot OS": "我不知道在哪里获取FarmBot操作系统", + "I do not wish to continue yet": "我还不想继续", + "I pressed the wrong button": "我按错了按钮", + "I still need to assemble FarmBot": "我还需要组装FarmBot", + "I was redirected to a farm.bot page": "我被重定向到一个farm.bot页面", + "I'm not sure": "我不确定", + "icon in the main navigation bar to open up the documentation in-app": "主导航栏中的图标打开应用内文档", + "If ...": "如果 ...", + "If enabled, FarmBot will: (1) Move Z to the Safe Z height, (2) Move X and Y to the new location, and (3) Move Z to the new location": "如果启用,FarmBot将:(1)将Z移动到安全Z高度,(2)将X和Y移动到新位置,并(3)将Z移动到新位置", + "If encoders or limit switches are enabled, find home for an axis (set zero position).": "如果编码器或限位开关已启用,查找轴的原位(设置零点位置)。", + "If encoders or limit switches are enabled, find the home position when the device powers on. Warning! This will perform homing on all axes when the device powers on. Encoders or limit switches must be enabled. It is recommended to make sure homing works properly before enabling this feature. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "如果编码器或限位开关已启用,在设备开机时查找原位。警告!这将在设备开机时对所有轴执行归位。必须启用编码器或限位开关。建议在启用此功能之前确保归位正常工作。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "If encoders or limit switches are enabled, home axis and determine maximum. Will set axis length value.": "如果编码器或限位开关已启用,归位轴并确定最大值。将设置轴长度值。", + "If encoders, stall detection, or limit switches are enabled, home axis and determine maximum. Will set axis length value.": "如果编码器、堵转检测或限位开关已启用,归位轴并确定最大值。将设置轴长度值。", + "If not using a webcam, use this setting to remove the widget from the Controls panel.": "如果不使用摄像头,请使用此设置从控制面板中移除小部件。", + "If not using sensors, use this setting to remove the panel from the Farm Designer.": "如果不使用传感器,请使用此设置从农场设计师中移除面板。", + "If stall detection or limit switches are enabled, find home for an axis (set zero position).": "如果启用了堵转检测或限位开关,请为轴查找原位(设置零点位置)。", + "If stall detection or limit switches are enabled, find the home position when the device powers on. Warning! This will perform homing on all axes when the device powers on. Stall detection or limit switches must be enabled. It is recommended to make sure homing works properly before enabling this feature. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "如果启用了堵转检测或限位开关,在设备开机时查找原位。警告!这将在设备开机时对所有轴执行归位。必须启用堵转检测或限位开关。建议在启用此功能之前确保归位正常工作。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "If stall detection or limit switches are enabled, home axis and determine maximum. Will set axis length value.": "如果启用了堵转检测或限位开关,归位轴并确定最大值。将设置轴长度值。", + "If statement": "如果语句", + "If Test Fails": "如果测试失败", + "If the problem persists after performing the recommendations above, you may have a defective camera. You can request a free replacement": "如果在执行上述建议后问题仍然存在,您可能有一个有缺陷的摄像头。您可以请求免费更换", + "If using a phone, disable cellular data and try again.": "如果使用手机,禁用蜂窝数据并重试。", + "If you already tried the troubleshooting tips above and looked through the": "如果您已经尝试了上述故障排除提示并查看了", + "If you are installing FarmBot at a school or enterprise where the internet network is managed by an IT department, you must ensure that certain ports are opened to allow FarmBot to fully connect to the web app. If you are installing FarmBot in one of these locations, have your IT department review the following help page to ensure FarmBot will be able to fully connect once configured.": "如果您在学校或企业安装FarmBot,且互联网网络由IT部门管理,则必须确保打开某些端口以允许FarmBot完全连接到Web应用程序。如果您在这些位置之一安装FarmBot,请让您的IT部门查看以下帮助页面,以确保FarmBot配置后能够完全连接。", + "If you are sure you want to delete your account, type in your password below to continue.": "如果您确定要删除您的帐户,请在下方输入您的密码以继续。", + "If you are sure you want to reset your account, type in your password below to continue.": "如果您确定要重置您的帐户,请在下方输入您的密码以继续。", + "If you ever purchase new tools or make your own, add them to the app by clicking the + tool button. Once the tool has been added, load it into an available slot to begin using it in your sequences!": "如果您购买了新工具或自己制作了工具,请点击+工具按钮将其添加到应用程序中。一旦工具被添加,将其装入可用的插槽中,以便在您的序列中使用!", + "If you have a webcam, you can view the video stream in this widget. Press the edit button to update and save your webcam URL. Note: Some webcam services do not allow webcam feeds to be embedded in other sites. If you see a web browser error after adding a webcam feed, there is unfortunately nothing FarmBot can do to fix the problem. Please contact your webcam's customer support to see if the security policy for embedding feeds into other sites can be changed.": "如果您有摄像头,您可以在此小部件中查看视频流。按下编辑按钮更新并保存您的摄像头URL。注意:某些摄像头服务不允许将摄像头反馈嵌入其他站点。如果在添加摄像头反馈后看到网页浏览器错误,遗憾的是FarmBot无法解决此问题。请联系您的摄像头客户支持,查看嵌入其他站点的反馈的安全策略是否可以更改。", + "If you want to play around and keep your data, feel free to make a real account at": "如果您想随便玩玩并保留数据,请随时在以下网站创建一个真实帐户", + "ignore detections out of bounds": "忽略超出范围的检测", + "Image blur kernel size. Must be an odd number greater than 1. (default: {{ defaultBlur }})": "图像模糊核大小。必须是大于1的奇数。(默认:{{ defaultBlur }})", + "Image Deleted.": "图像已删除。", + "Image pixel to FarmBot coordinate scale. Typically between 0.1 and 2, this value matches image scale with the FarmBot coordinate system. (default: {{ defaultScale }} (uncalibrated))": "图像像素到FarmBot坐标的比例。通常在0.1到2之间,此值将图像比例与FarmBot坐标系匹配。(默认:{{ defaultScale }}(未校准))", + "image resolution": "图像分辨率", + "Images": "图像", + "Images may take up to 3 minutes to appear.": "图像可能需要最多3分钟才能显示。", + "Images may take up to 30 seconds to appear.": "图像可能需要最多30秒才能显示。", + "IMPORT": "导入", + "Import parameters": "导入参数", + "import this sequence": "导入此序列", + "Imported and edited publicly shared sequence.": "导入并编辑了公开共享的序列。", + "Imported publicly shared sequence.": "导入了公开共享的序列。", + "importing": "正在导入", + "Importing the sequence into their FarmBot account to view and use it as they deem fit": "将序列导入到他们的FarmBot帐户中,以便查看和使用他们认为合适的内容", + "Importing this sequence will allow you to use it with your FarmBot and make changes. If the original author of the sequence publishes a new version, you will have the option to upgrade your copy.": "导入此序列将允许您与您的FarmBot一起使用并进行更改。如果序列的原作者发布了新版本,您将可以选择升级您的副本。", + "in map": "在地图中", + "In real life, load one of FarmBot's tools (such as the watering nozzle) into a toolbay slot. Then, using the controls popup, instruct FarmBot to find the home position.": "在现实生活中,将FarmBot的工具之一(例如浇水喷嘴)加载到工具库插槽中。然后,使用控制弹出窗口,指示FarmBot找到原位。", + "in slot": "在插槽中", + "In this tour you'll learn how to add plants to your garden, create filter-based groups of those plants, and snapshot your garden layout for future growing seasons. Let's get started!": "在此导览中,您将学习如何将植物添加到您的花园,创建基于过滤器的植物组,并为未来的生长季节快照您的花园布局。让我们开始吧!", + "IN USE": "正在使用", + "inactive": "不活跃", + "incompatible": "不兼容", + "indoor": "室内", + "Info": "信息", + "Input is not needed for this Farmware.": "此Farmware不需要输入。", + "Input required": "需要输入", + "Insert a luer lock needle into the 3-in-1 tool head and place a seed trough into the gantry-mounted seed trough holder. Then, using the controls popup, instruct FarmBot to find the home position.": "将路尔锁针插入3合1工具头中,并将种子槽放入龙门安装的种子槽托架中。然后,使用控制弹出窗口,指示FarmBot找到原位。", + "Inspect the wood raised bed (Express kits) or track extrusions (Genesis kits) for bumps. Use sand paper to smooth out imperfections.": "检查木制高床(Express套件)或轨道挤压件(Genesis套件)是否有凹凸。使用砂纸平滑不完美的地方。", + "Install": "安装", + "Install error": "安装错误", + "install Farmware": "安装Farmware", + "Install Farmware": "安装Farmware", + "Install first-party Farmware": "安装第一方Farmware", + "Install new Farmware": "安装新Farmware", + "installation pending": "正在安装", + "Installing FarmBot OS": "安装FarmBot操作系统", + "Installing FarmBot OS documentation": "安装FarmBot操作系统文档", + "Internal Computer": "内部计算机", + "internal envs": "内部环境", + "Internationalize Web App": "国际化Web应用程序", + "Internet": "互联网", + "Interpolated Soil Z at": "插值土壤Z在", + "Interpolation step size": "插值步长", + "Interpolation use nearest": "插值使用最近", + "Interpolation weight": "插值权重", + "INTRO": "简介", + "Introduction": "介绍", + "Invalid date": "无效日期", + "Invalid property for resource.": "资源属性无效。", + "Invalid Raspberry Pi GPIO pin number.": "无效的Raspberry Pi GPIO针脚编号。", + "Invalid selection.": "无效选择。", + "Invert {{ axis }}-axis Jog Buttons": "反转{{ axis }}轴操作按钮", + "Invert 2nd X Motor": "反转第二个X电机", + "Invert axis limit switches. Enable for normally closed (NC), disable for normally open (NO). (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "反转轴限位开关。正常闭合(NC)启用,正常打开(NO)禁用。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Invert direction of motor while finding axis length. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "在查找轴长度时反转电机方向。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Invert direction of motor. (default: {{ x }})": "反转电机方向。(默认:{{ x }})", + "Invert Encoders": "反转编码器", + "invert hue range selection": "反转色调范围选择", + "Invert Jog Buttons": "反转操作按钮", + "Invert limit switches": "反转限位开关", + "Invert Motors": "反转电机", + "Invert the range of hues selected. Typically used to select the full range of reds. (default: {{ defaultInvertState }})": "反转所选色调范围。通常用于选择全部红色范围。(默认:{{ defaultInvertState }})", + "Invert X Axis Jog Button": "反转X轴操作按钮", + "Invert Y Axis Jog Button": "反转Y轴操作按钮", + "Invert Z Axis Jog Button": "反转Z轴操作按钮", + "is": "是", + "is equal to": "等于", + "Is FarmBot assembled and ready to power on?": "FarmBot是否已组装并准备开机?", + "Is FarmBot online?": "FarmBot是否在线?", + "Is FarmBot positioned away from the hardstops?": "FarmBot是否远离限位器?", + "is greater than": "大于", + "is less than": "小于", + "is not": "不是", + "is not equal to": "不等于", + "Is the 'Find Home' sequence selected?": "是否选择了“查找原位”序列?", + "Is the calibration card on the soil underneath the camera?": "校准卡是否在摄像头下方的土壤上?", + "Is the configurator loaded?": "配置器是否已加载?", + "Is the FarmBot able to move reliably along the full length of the X-axis in both directions?": "FarmBot是否能够可靠地沿X轴的全长双向移动?", + "Is the FarmBot able to move reliably along the full length of the Y-axis in both directions?": "FarmBot是否能够可靠地沿Y轴的全长双向移动?", + "Is the FarmBot able to move reliably along the full length of the Z-axis in both directions?": "FarmBot是否能够可靠地沿Z轴的全长双向移动?", + "Is the location in the image aligned with the map location?": "图像中的位置是否与地图位置对齐?", + "Is the SD card with FarmBot OS installed?": "是否已安装FarmBot操作系统的SD卡?", + "Is the status 'connected'?": "状态是否为“已连接”?", + "Is the UTM cable plugged in?": "UTM电缆是否已插入?", + "Is the z-axis as high as it will go?": "Z轴是否达到最高点?", + "is unknown": "未知", + "Is your phone or computer connected to the FarmBot WiFi network?": "您的手机或电脑是否连接到FarmBot WiFi网络?", + "It does not line up": "它没有对齐", + "It made sounds like it was trying to move, but didn't move": "它发出尝试移动的声音,但没有移动", + "It moved in a different direction": "它移动到了不同的方向", + "It moved the opposite direction": "它移动到了相反的方向", + "It moved up": "它向上移动了", + "It seems like it is trying to move too fast, or doesn't have enough torque": "它似乎移动得太快,或没有足够的扭矩", + "It stalls or has trouble at certain locations": "它在某些位置停滞或有问题", + "It started to move, but stopped early": "它开始移动,但很快停止", + "It stopped before reaching the axis end": "它在到达轴端之前停止", + "It struggles to move along the whole length of the axis": "它在沿轴全长移动时困难重重", + "item": "项目", + "Item(s) added.": "项目已添加。", + "ITERATIONS": "迭代", + "Job": "工作", + "Job count": "工作计数", + "Just the Arduino": "仅Arduino", + "Keep power applied to motors. Prevents slipping from gravity in certain situations. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "保持电机通电。在某些情况下防止重力导致的滑动。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Key cannot be blank.": "键不能为空。", + "Key has already been taken.": "该键已被使用。", + "Landing page": "着陆页面", + "Language": "语言", + "last message seen ": "上次看到的消息", + "Last seen": "上次查看", + "Last updated": "上次更新", + "Latest": "最新的", + "latitude": "纬度", + "Learn more": "了解更多", + "Learn more about the app": "了解更多关于应用的信息", "LED 3": "LED 3", "LED 4": "LED 4", - "LED light strip": "LED light strip", - "Less": "Less", - "Less than": "Less than", - "Let's get you familiar with the app and finish setting everything up.": "Let's get you familiar with the app and finish setting everything up.", - "License": "License", - "Lighting": "Lighting", - "LIGHTING": "LIGHTING", - "Limit Switches": "Limit Switches", - "Limit switches warning": "Limit switches warning", - "Link": "Link", - "live chat": "live chat", - "Loading": "Loading", - "Loading slots": "Loading slots", - "Loading...": "Loading...", - "Local IP": "Local IP", - "location": "location", - "Location {{ num }}": "Location {{ num }}", - "Location info": "Location info", - "Log not sent by current version of FarmBot OS.": "Log not sent by current version of FarmBot OS.", - "logout": "logout", - "Logout and destroy token": "Logout and destroy token", - "Logs": "Logs", - "longitude": "longitude", - "Look for the 'Available UART devices' log message.": "Look for the 'Available UART devices' log message.", - "Look inside the electronics box. What color cable is plugged into the top of the Raspberry Pi (the green circuit board)?": "Look inside the electronics box. What color cable is plugged into the top of the Raspberry Pi (the green circuit board)?", - "low": "low", + "LED light strip": "LED灯带", + "Less": "更少", + "Less than": "小于", + "Let's get you familiar with the app and finish setting everything up.": "让我们让您熟悉应用程序并完成所有设置。", + "License": "许可证", + "Lighting": "照明", + "LIGHTING": "照明", + "Limit Switches": "限位开关", + "Limit switches warning": "限位开关警告", + "Link": "链接", + "live chat": "在线聊天", + "Loading": "加载中", + "Loading slots": "加载插槽", + "Loading...": "加载中...", + "Local IP": "本地IP", + "location": "位置", + "Location {{ num }}": "位置 {{ num }}", + "Location info": "位置信息", + "Log not sent by current version of FarmBot OS.": "日志未由当前版本的FarmBot OS发送。", + "logout": "登出", + "Logout and destroy token": "登出并销毁令牌", + "Logs": "日志", + "longitude": "经度", + "Look for the 'Available UART devices' log message.": "查找“可用UART设备”的日志消息。", + "Look inside the electronics box. What color cable is plugged into the top of the Raspberry Pi (the green circuit board)?": "查看电子盒内部。哪种颜色的电缆插入了树莓派的顶部(绿色电路板)?", + "low": "低", "Lua": "Lua", - "M-F 9-5 PST": "M-F 9-5 PST", - "MAC address": "MAC address", - "Make a real account": "Make a real account", - "Make sure the calibration card has been placed flat on the soil surface and is fully and clearly visible to the camera. The card must not be warped, bent, overexposed, or obscured in the above image. Lighting may be improved by shading the card from direct sunlight, trying a different time of day, or using FarmBot's lights in the evening or at night. There must be good contrast between the white dots and black calibration card background for calibration to complete successfully. Trying calibration in a different location with fewer distractions in the area surrounding the card may also help.": "Make sure the calibration card has been placed flat on the soil surface and is fully and clearly visible to the camera. The card must not be warped, bent, overexposed, or obscured in the above image. Lighting may be improved by shading the card from direct sunlight, trying a different time of day, or using FarmBot's lights in the evening or at night. There must be good contrast between the white dots and black calibration card background for calibration to complete successfully. Trying calibration in a different location with fewer distractions in the area surrounding the card may also help.", - "Make sure the motors are working properly. Return to the": "Make sure the motors are working properly. Return to the", - "Making changes to their copy": "Making changes to their copy", - "Manage": "Manage", - "Manage data": "Manage data", - "Manual": "Manual", - "MANUAL CONTROLS": "MANUAL CONTROLS", - "Manual controls video": "Manual controls video", - "Manual input": "Manual input", - "Manual Input": "Manual Input", - "Manually add group members by clicking in the map. Group members selected by filters can only be removed by changing the filters. Filters will be applied at the time of sequence execution. Group members at that time may differ from those currently displayed.": "Manually add group members by clicking in the map. Group members selected by filters can only be removed by changing the filters. Filters will be applied at the time of sequence execution. Group members at that time may differ from those currently displayed.", - "Manually enter a value by measuring the usable distance FarmBot can travel along the axis.": "Manually enter a value by measuring the usable distance FarmBot can travel along the axis.", - "manually selected": "manually selected", - "Map": "Map", - "MAP": "MAP", - "map boxes will change location filter": "map boxes will change location filter", - "map boxes will manually add plants": "map boxes will manually add plants", - "Map filters enabled.": "Map filters enabled.", - "Map orientation": "Map orientation", - "Map origin": "Map origin", - "Map photo layer off": "Map photo layer off", - "Map photo layer on": "Map photo layer on", - "Map Points": "Map Points", - "map settings": "map settings", - "Map size": "Map size", - "Mark": "Mark", - "Mark As": "Mark As", - "Mark as...": "Mark as...", - "max": "max", - "Max": "Max", - "Max Missed Steps": "Max Missed Steps", - "Max Motor Load": "Max Motor Load", - "Max Retries": "Max Retries", - "Max Speed (mm/s)": "Max Speed (mm/s)", - "Max Speed toward home (mm/s)": "Max Speed toward home (mm/s)", - "Maximum": "Maximum", - "Maximum motor load (determined by stepper driver) before motor is considered to have stalled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Maximum motor load (determined by stepper driver) before motor is considered to have stalled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Maximum travel speed after acceleration in millimeters per second. (default: {{ z }}mm/s)": "Maximum travel speed after acceleration in millimeters per second. (default: {{ z }}mm/s)", - "Maximum travel speed after acceleration in millimeters per second. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)": "Maximum travel speed after acceleration in millimeters per second. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)", - "maximum weed size": "maximum weed size", - "Maximum weed size (diameter) in millimeters. Set to 0 to disable limit. (default: {{ defaultMaxDiameter }})": "Maximum weed size (diameter) in millimeters. Set to 0 to disable limit. (default: {{ defaultMaxDiameter }})", - "measure": "measure", - "Measure": "Measure", - "Measure soil height": "Measure soil height", - "MEASURE SOIL HEIGHT": "MEASURE SOIL HEIGHT", - "Memory": "Memory", - "Memory usage": "Memory usage", - "Menu": "Menu", - "Message Broker": "Message Broker", - "Messages": "Messages", - "Microsteps per step": "Microsteps per step", - "min": "min", - "Min OS version required": "Min OS version required", - "Minimum movement speed in millimeters per second. Also used for homing and finding axis length. (default: {{ z }}mm/s)": "Minimum movement speed in millimeters per second. Also used for homing and finding axis length. (default: {{ z }}mm/s)", - "Minimum movement speed in millimeters per second. Also used for homing and finding axis length. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)": "Minimum movement speed in millimeters per second. Also used for homing and finding axis length. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)", - "Minimum Speed (mm/s)": "Minimum Speed (mm/s)", - "Minimum Speed toward home (mm/s)": "Minimum Speed toward home (mm/s)", - "minimum weed size": "minimum weed size", - "Minimum weed size (diameter) in millimeters. Set to 0 to disable limit. (default: {{ defaultMinDiameter }})": "Minimum weed size (diameter) in millimeters. Set to 0 to disable limit. (default: {{ defaultMinDiameter }})", - "Minor adjustments": "Minor adjustments", - "Minutes": "Minutes", - "minutes of": "minutes of", - "Missed Step Decay": "Missed Step Decay", - "Missing dependency": "Missing dependency", - "MIT License": "MIT License", - "mm": "mm", - "Mode": "Mode", - "Model": "Model", - "Moisture": "Moisture", - "Month": "Month", - "Months": "Months", - "more": "more", - "More": "More", - "more bugs!": "more bugs!", - "More options": "More options", - "MORPH": "MORPH", - "Most people connect their FarmBot to the internet over WiFi, though you may optionally use a hardwired ethernet connection. If you would like to use an ethernet connection, simply connect an ethernet cable between your WiFi router and the Raspberry Pi.": "Most people connect their FarmBot to the internet over WiFi, though you may optionally use a hardwired ethernet connection. If you would like to use an ethernet connection, simply connect an ethernet cable between your WiFi router and the Raspberry Pi.", - "Motor Current": "Motor Current", - "Motor current in milliamps. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Motor current in milliamps. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Motor Load": "Motor Load", - "Motor position plot": "Motor position plot", - "Motor stall sensitivity. Most sensitive: -63. Least sensitive: +63. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Motor stall sensitivity. Most sensitive: -63. Least sensitive: +63. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Motors": "Motors", - "MOTORS": "MOTORS", - "mounted": "mounted", - "mounted tool": "mounted tool", - "Mounted Tool": "Mounted Tool", - "Move": "Move", - "move {{axis}} axis": "move {{axis}} axis", - "Move a servo to the provided angle. An angle of 90 degrees corresponds to the servo midpoint (or, for a continuous rotation servo, no movement). Tip: follow with a WAIT command to allow the servo to reach the target position.": "Move a servo to the provided angle. An angle of 90 degrees corresponds to the servo midpoint (or, for a continuous rotation servo, no movement). Tip: follow with a WAIT command to allow the servo to reach the target position.", - "Move FarmBot away from the hardstops": "Move FarmBot away from the hardstops", - "Move FarmBot to a different location and try again.": "Move FarmBot to a different location and try again.", - "Move FarmBot to home for the provided axis.": "Move FarmBot to home for the provided axis.", - "Move into": "Move into", - "move mode": "move mode", - "Move out of folders": "Move out of folders", - "move sequence": "move sequence", - "move step": "move step", - "Move To": "Move To", - "Move to chosen location": "Move to chosen location", - "move to home": "move to home", - "Move to Home": "Move to Home", - "MOVE TO HOME": "MOVE TO HOME", - "Move to this coordinate": "Move to this coordinate", - "Movement": "Movement", - "Movement out of bounds for: ": "Movement out of bounds for: ", - "MOVEMENTS": "MOVEMENTS", - "Movements video": "Movements video", - "My Sequences": "My Sequences", - "name": "name", - "Name": "Name", - "Name already taken.": "Name already taken.", - "Navigate Left": "Navigate Left", - "Navigate Right": "Navigate Right", - "Nearby": "Nearby", - "Negative Coordinates Only": "Negative Coordinates Only", - "Negative X": "Negative X", - "Negative Y": "Negative Y", - "Network Quality": "Network Quality", - "Never": "Never", - "New Folder": "New Folder", - "New message from bot": "New message from bot", - "New password and confirmation do not match.": "New password and confirmation do not match.", - "New password must be at least 8 characters.": "New password must be at least 8 characters.", - "New Peripheral": "New Peripheral", - "New regimen ": "New regimen ", - "New Sensor": "New Sensor", - "new sequence {{ num }}": "new sequence {{ num }}", - "New Terms of Service": "New Terms of Service", - "newer": "newer", - "Newer than": "Newer than", - "newest": "newest", - "Next": "Next", - "next image": "next image", - "Next image": "Next image", - "no active jobs": "no active jobs", - "No active weeds.": "No active weeds.", - "No camera selected": "No camera selected", - "No day(s) selected.": "No day(s) selected.", - "No description provided for this subsequence.": "No description provided for this subsequence.", - "No events scheduled.": "No events scheduled.", - "No Farmware selected": "No Farmware selected", - "No Farmware yet.": "No Farmware yet.", - "No Group selected": "No Group selected", - "No groups yet.": "No groups yet.", - "No inputs provided.": "No inputs provided.", - "No location chosen.": "No location chosen.", - "No location selected. Using default value.": "No location selected. Using default value.", - "No logs to display. Visit Logs page to view filters.": "No logs to display. Visit Logs page to view filters.", - "No logs yet.": "No logs yet.", - "No messages seen yet.": "No messages seen yet.", - "No messages.": "No messages.", - "No more messages.": "No more messages.", - "No pending weeds.": "No pending weeds.", - "No Peripherals yet.": "No Peripherals yet.", - "No points yet.": "No points yet.", - "No recent messages.": "No recent messages.", - "No Regimen selected": "No Regimen selected", - "No Regimen selected.": "No Regimen selected.", - "No Regimens.": "No Regimens.", - "No removed weeds.": "No removed weeds.", - "No results in your garden": "No results in your garden", - "No results.": "No results.", - "No saved gardens yet.": "No saved gardens yet.", - "No search results": "No search results", - "No Sensors yet.": "No Sensors yet.", - "No Sequence selected": "No Sequence selected", - "No Sequence selected.": "No Sequence selected.", - "No Sequences.": "No Sequences.", - "NO TOOL": "NO TOOL", - "No webcams yet. Click the edit button to add a feed URL.": "No webcams yet. Click the edit button to add a feed URL.", - "No weeds yet.": "No weeds yet.", - "No zones yet.": "No zones yet.", - "Node name": "Node name", - "none": "none", - "None": "None", - "normal": "normal", - "not all features of the app will work because there is not a real FarmBot connected to this account. Additionally, keep in mind that when you leave this web page, the demo account and all data will be deleted.": "not all features of the app will work because there is not a real FarmBot connected to this account. Additionally, keep in mind that when you leave this web page, the demo account and all data will be deleted.", - "Not available": "Not available", - "Not available when device is offline.": "Not available when device is offline.", - "Not found": "Not found", - "Not hidden": "Not hidden", - "not mirrored": "not mirrored", - "not set": "not set", - "not shown in map": "not shown in map", - "Note: The selected timezone for your FarmBot is different than your local browser time.": "Note: The selected timezone for your FarmBot is different than your local browser time.", - "Note: Times displayed according to FarmBot's local time, which is currently different from your browser's time. Timezone data is configurable in the Settings panel).": "Note: Times displayed according to FarmBot's local time, which is currently different from your browser's time. Timezone data is configurable in the Settings panel).", - "notes": "notes", - "Nothing happened": "Nothing happened", - "Now": "Now", - "Now that you have a garden with a few crops in it. Let's create groups of plants, where each group contains all of the plants of one crop type. Advance the tour when you're ready.": "Now that you have a garden with a few crops in it. Let's create groups of plants, where each group contains all of the plants of one crop type. Advance the tour when you're ready.", - "number": "number", - "Number": "Number", - "Number {{ num }}": "Number {{ num }}", - "Number of erosion and dilation morphological transformation cycles. (default: {{ defaultIteration }})": "Number of erosion and dilation morphological transformation cycles. (default: {{ defaultIteration }})", - "Number of millimeters used for acceleration and deceleration. (default: {{ z }}mm)": "Number of millimeters used for acceleration and deceleration. (default: {{ z }}mm)", - "Number of millimeters used for acceleration and deceleration. (default: x: {{ x }}mm, y: {{ y }}mm, z: {{ z }}mm)": "Number of millimeters used for acceleration and deceleration. (default: x: {{ x }}mm, y: {{ y }}mm, z: {{ z }}mm)", - "Number of steps missed (determined by encoder) before motor is considered to have stalled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Number of steps missed (determined by encoder) before motor is considered to have stalled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Number of times to retry a movement before stopping. (default: {{ retries }})": "Number of times to retry a movement before stopping. (default: {{ retries }})", - "Number of times to retry calibration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Number of times to retry calibration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "numbers": "numbers", - "occurred": "occurred", - "off": "off", - "OFF": "OFF", - "offline": "offline", - "Offline": "Offline", - "offset": "offset", - "Offset adjustment": "Offset adjustment", - "Offset from current location": "Offset from current location", - "ok": "ok", - "Ok": "Ok", - "older": "older", - "Older than": "Older than", - "oldest": "oldest", - "on": "on", - "ON": "ON", - "Once published, anyone may find and use the sequence free of charge for tasks including but not limited to:": "Once published, anyone may find and use the sequence free of charge for tasks including but not limited to:", - "Once you have input the coordinate locations for every slot, choose which tool or seed container is loaded into each slot. Remember: the virtual configuration must always match your real-life configuration.": "Once you have input the coordinate locations for every slot, choose which tool or seed container is loaded into each slot. Remember: the virtual configuration must always match your real-life configuration.", - "Once you make a selection, we'll automatically add some tools, sensors, peripherals, sequences, and more to get you up and running faster.": "Once you make a selection, we'll automatically add some tools, sensors, peripherals, sequences, and more to get you up and running faster.", - "Online": "Online", - "only show current photo in map": "only show current photo in map", - "Only show logs sent from current FarmBot OS version.": "Only show logs sent from current FarmBot OS version.", - "Open a browser and navigate to ": "Open a browser and navigate to ", - "Open documentation in a new tab": "Open documentation in a new tab", - "open full-page editor": "open full-page editor", - "Open Guide": "Open Guide", - "Open link in a new tab": "Open link in a new tab", - "open linked sequence": "open linked sequence", - "open map settings menu": "open map settings menu", - "open move mode panel": "open move mode panel", - "Open network ports": "Open network ports", - "Open OpenFarm.cc in a new tab": "Open OpenFarm.cc in a new tab", - "Open options by default": "Open options by default", - "open plants panel": "open plants panel", - "open point select panel": "open point select panel", - "open regimen": "open regimen", - "open scheduler panel": "open scheduler panel", - "Open the ... menu for the {{ axis }} axis and click **FIND HOME**.": "Open the ... menu for the {{ axis }} axis and click **FIND HOME**.", - "Open the ... menu for the {{ axis }} axis and click **FIND LENGTH**.": "Open the ... menu for the {{ axis }} axis and click **FIND LENGTH**.", - "Optimized": "Optimized", - "options": "options", - "Options": "Options", - "or": "or", - "Or view FarmBot's current location in the virtual garden.": "Or view FarmBot's current location in the virtual garden.", - "Orange": "Orange", - "Order info": "Order info", - "Order number": "Order number", - "Order Number": "Order Number", - "Origin": "Origin", - "origin location in image": "origin location in image", - "OS release channel": "OS release channel", - "Other": "Other", - "Outside of filter range": "Outside of filter range", - "Outside of planting area. Plants must be placed within the grid.": "Outside of planting area. Plants must be placed within the grid.", - "Over time you may need to make minor adjustments to the coordinates of your slots. At any time you can come back to the edit slot panel and manually adjust the X, Y, and Z input fields.": "Over time you may need to make minor adjustments to the coordinates of your slots. At any time you can come back to the edit slot panel and manually adjust the X, Y, and Z input fields.", - "override": "override", - "Page Not Found.": "Page Not Found.", - "Parameter load progress": "Parameter load progress", - "Parameter Management": "Parameter Management", - "Password must be 8 or more characters.": "Password must be 8 or more characters.", - "Paste the output from EXPORT PARAMETERS into the text field and press IMPORT to import new hardware parameters to your FarmBot.": "Paste the output from EXPORT PARAMETERS into the text field and press IMPORT to import new hardware parameters to your FarmBot.", - "Pending": "Pending", - "pending install": "pending install", - "Pending installation.": "Pending installation.", - "Percent OK": "Percent OK", - "Perform camera rotation compensation when image is captured instead of in garden map. If enabled, image files will include adjustment for camera rotation (black angled borders may show in viewer). Enabling this setting will slow down photo capture.": "Perform camera rotation compensation when image is captured instead of in garden map. If enabled, image files will include adjustment for camera rotation (black angled borders may show in viewer). Enabling this setting will slow down photo capture.", - "Period End Date": "Period End Date", - "Peripheral": "Peripheral", - "Peripheral ": "Peripheral ", - "Peripherals": "Peripherals", - "PERIPHERALS": "PERIPHERALS", - "phone": "phone", - "Photo": "Photo", - "photo step": "photo step", - "Photo upload": "Photo upload", - "Photos": "Photos", - "Photos are viewable from the": "Photos are viewable from the", - "photos in map": "photos in map", - "photos panel": "photos panel", - "pin": "pin", - "Pin": "Pin", - "Pin ": "Pin ", - "Pin a sequence in the sequence editor to add it to this list.": "Pin a sequence in the sequence editor to add it to this list.", - "Pin Bindings": "Pin Bindings", - "Pin Guard": "Pin Guard", - "Pin Guard 1": "Pin Guard 1", - "Pin Guard 2": "Pin Guard 2", - "Pin Guard 3": "Pin Guard 3", - "Pin Guard 4": "Pin Guard 4", - "Pin Guard 5": "Pin Guard 5", - "Pin number cannot be blank.": "Pin number cannot be blank.", - "Pin numbers must be unique.": "Pin numbers must be unique.", - "Pin Reporting": "Pin Reporting", - "Pin Reporting 1": "Pin Reporting 1", - "Pin Reporting 2": "Pin Reporting 2", - "pin timeout (sec) to state": "pin timeout (sec) to state", - "Pings received": "Pings received", - "Pings sent": "Pings sent", - "Pink": "Pink", - "pinned sequences": "pinned sequences", - "Pinned Sequences": "Pinned Sequences", - "Pins": "Pins", - "pixel coordinate scale": "pixel coordinate scale", - "Place the camera calibration card face down on the soil underneath the camera, with the grid of white circles facing up. Can be in any orientation but must be fully visible to the camera. Caution: FarmBot will make three small x-axis and y-axis movements during calibration.": "Place the camera calibration card face down on the soil underneath the camera, with the grid of white circles facing up. Can be in any orientation but must be fully visible to the camera. Caution: FarmBot will make three small x-axis and y-axis movements during calibration.", - "Place the two red calibration objects 100mm apart and aligned with FarmBot's axes on the soil underneath the camera.": "Place the two red calibration objects 100mm apart and aligned with FarmBot's axes on the soil underneath the camera.", - "Planned": "Planned", - "plant": "plant", - "Plant animations": "Plant animations", - "Plant Details": "Plant Details", - "Plant groups": "Plant groups", - "Plant Groups": "Plant Groups", - "plant icon": "plant icon", - "Plant inventory": "Plant inventory", - "Plant stage": "Plant stage", - "Plant Type": "Plant Type", - "Planted": "Planted", - "Planting a garden": "Planting a garden", - "plants": "plants", - "Please agree to the terms.": "Please agree to the terms.", - "Please check your email for the verification link.": "Please check your email for the verification link.", - "Please check your email to confirm email address changes.": "Please check your email to confirm email address changes.", - "Please choose a firmware version to install. Your choice should be based on the type of electronics in your FarmBot according to the reference table below.": "Please choose a firmware version to install. Your choice should be based on the type of electronics in your FarmBot according to the reference table below.", - "Please clear current garden first.": "Please clear current garden first.", - "Please contact the system(s) administrator(s) and ask them to enable HTTPS://": "Please contact the system(s) administrator(s) and ask them to enable HTTPS://", - "Please enter a number.": "Please enter a number.", - "Please enter a URL": "Please enter a URL", - "Please enter a URL.": "Please enter a URL.", - "Please enter a value between 0 and {{ max }}": "Please enter a value between 0 and {{ max }}", - "Please enter a value.": "Please enter a value.", - "Please enter your FarmBot order number.": "Please enter your FarmBot order number.", - "Please make a grid with less than 100 {{ itemType }}": "Please make a grid with less than 100 {{ itemType }}", - "Please note:": "Please note:", - "Please re-flash your FarmBot's SD card.": "Please re-flash your FarmBot's SD card.", - "Please select a pin.": "Please select a pin.", - "Please select a sensor with a valid pin number.": "Please select a sensor with a valid pin number.", - "Please select a sequence or action.": "Please select a sequence or action.", - "Please select a sequence or regimen.": "Please select a sequence or regimen.", - "Please Update": "Please Update", - "Please upgrade": "Please upgrade", - "Please wait": "Please wait", - "Plug in FarmBot's power.": "Plug in FarmBot's power.", - "point": "point", - "Point created.": "Point created.", - "Point Groups": "Point Groups", - "Point status": "Point status", - "Points": "Points", - "points panel": "points panel", - "Position (mm)": "Position (mm)", - "Positions": "Positions", - "Positive X": "Positive X", - "Positive Y": "Positive Y", - "Power and Reset": "Power and Reset", - "Power cycle FarmBot's onboard computer.": "Power cycle FarmBot's onboard computer.", - "Power down FarmBot's onboard computer.": "Power down FarmBot's onboard computer.", - "Power Off Bot": "Power Off Bot", - "Power up": "Power up", - "Presets": "Presets", - "Press \"+\" to add a Farmware.": "Press \"+\" to add a Farmware.", - "Press \"+\" to add a garden.": "Press \"+\" to add a garden.", - "Press \"+\" to add a group.": "Press \"+\" to add a group.", - "Press \"+\" to add a new tool or seed container.": "Press \"+\" to add a new tool or seed container.", - "Press \"+\" to add a plant to your garden.": "Press \"+\" to add a plant to your garden.", - "Press \"+\" to add a point to your garden.": "Press \"+\" to add a point to your garden.", - "Press \"+\" to add a seed container.": "Press \"+\" to add a seed container.", - "Press \"+\" to add a weed.": "Press \"+\" to add a weed.", - "Press \"+\" to add a zone.": "Press \"+\" to add a zone.", - "Press \"+\" to schedule an event.": "Press \"+\" to schedule an event.", - "Press \"edit\" to add a peripheral.": "Press \"edit\" to add a peripheral.", - "Press \"edit\" to add a sensor.": "Press \"edit\" to add a sensor.", - "Press the **{{ toggle }}** toggle, wait a few seconds, and then press the toggle again.": "Press the **{{ toggle }}** toggle, wait a few seconds, and then press the toggle again.", - "Press the button below to calibrate the camera.": "Press the button below to calibrate the camera.", - "Press the button below to take a photo.": "Press the button below to take a photo.", - "Press the button to install your device's firmware.": "Press the button to install your device's firmware.", - "Press the down arrow.": "Press the down arrow.", - "Press the physical E-Stop button on top of the electronics box.": "Press the physical E-Stop button on top of the electronics box.", - "Press the physical Unlock button on top of the electronics box.": "Press the physical Unlock button on top of the electronics box.", - "Press the right arrow.": "Press the right arrow.", - "Press the toggle button to enable dynamic map size.": "Press the toggle button to enable dynamic map size.", - "Press the UNLOCK button below.": "Press the UNLOCK button below.", - "Press the up arrow.": "Press the up arrow.", - "Press YES to proceed to camera calibration.": "Press YES to proceed to camera calibration.", - "Press YES when ready.": "Press YES when ready.", - "Press YES.": "Press YES.", - "Prev": "Prev", - "Preview": "Preview", - "previous image": "previous image", - "Previous image": "Previous image", - "Priority support": "Priority support", - "priority support subscription": "priority support subscription", - "Privacy Policy": "Privacy Policy", - "Processing now. Results usually available in one minute. Check log messages for result status.": "Processing now. Results usually available in one minute. Check log messages for result status.", - "Processing Parameters": "Processing Parameters", - "Progress": "Progress", - "property": "property", - "Provide feedback": "Provide feedback", - "Provided new and old passwords match. Password not changed.": "Provided new and old passwords match. Password not changed.", - "public copy": "public copy", - "public version": "public version", - "Publish error": "Publish error", - "Published as a publicly shared sequence.": "Published as a publicly shared sequence.", - "publishing": "publishing", - "Publishing this sequence will create a": "Publishing this sequence will create a", - "Publishing, distributing, and even selling their copy": "Publishing, distributing, and even selling their copy", - "Purple": "Purple", - "Quiet Mode": "Quiet Mode", - "quit": "quit", - "Radius": "Radius", - "radius (mm)": "radius (mm)", - "Random Order": "Random Order", + "M-F 9-5 PST": "周一至周五 上午9点至下午5点 太平洋标准时间", + "MAC address": "MAC地址", + "Make a real account": "创建一个真实的账户", + "Make sure the calibration card has been placed flat on the soil surface and is fully and clearly visible to the camera. The card must not be warped, bent, overexposed, or obscured in the above image. Lighting may be improved by shading the card from direct sunlight, trying a different time of day, or using FarmBot's lights in the evening or at night. There must be good contrast between the white dots and black calibration card background for calibration to complete successfully. Trying calibration in a different location with fewer distractions in the area surrounding the card may also help.": "确保校准卡平放在土壤表面,并且对摄像头完全清晰可见。卡片不能翘曲、弯曲、过度曝光或在上述图像中遮挡。可以通过遮蔽阳光、尝试不同的时间、或在晚上或夜间使用FarmBot的灯光来改善照明。白点与黑色校准卡背景之间必须有良好的对比度,以便成功完成校准。尝试在周围环境干扰较少的不同位置进行校准可能也会有所帮助。", + "Make sure the motors are working properly. Return to the": "确保电机工作正常。返回到", + "Making changes to their copy": "对副本进行更改", + "Manage": "管理", + "Manage data": "管理数据", + "Manual": "手动", + "MANUAL CONTROLS": "手动控制", + "Manual controls video": "手动控制视频", + "Manual input": "手动输入", + "Manual Input": "手动输入", + "Manually add group members by clicking in the map. Group members selected by filters can only be removed by changing the filters. Filters will be applied at the time of sequence execution. Group members at that time may differ from those currently displayed.": "通过在地图中单击来手动添加组成员。通过筛选器选择的组成员只能通过更改筛选器来移除。筛选器将在序列执行时应用。那时的组成员可能与当前显示的组成员不同。", + "Manually enter a value by measuring the usable distance FarmBot can travel along the axis.": "通过测量FarmBot沿轴行进的可用距离,手动输入一个值。", + "manually selected": "手动选择", + "Map": "地图", + "MAP": "地图", + "map boxes will change location filter": "地图框将更改位置筛选器", + "map boxes will manually add plants": "地图框将手动添加植物", + "Map filters enabled.": "启用地图筛选器。", + "Map orientation": "地图方向", + "Map origin": "地图原点", + "Map photo layer off": "关闭地图照片图层", + "Map photo layer on": "打开地图照片图层", + "Map Points": "地图点", + "map settings": "地图设置", + "Map size": "地图大小", + "Mark": "标记", + "Mark As": "标记为", + "Mark as...": "标记为...", + "max": "最大", + "Max": "最大", + "Max Missed Steps": "最大错过的步数", + "Max Motor Load": "最大电机负载", + "Max Retries": "最大重试次数", + "Max Speed (mm/s)": "最大速度(毫米/秒)", + "Max Speed toward home (mm/s)": "最大速度朝向家(毫米/秒)", + "Maximum": "最大", + "Maximum motor load (determined by stepper driver) before motor is considered to have stalled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "电机被认为已停滞之前的最大电机负载(由步进电机驱动器确定)。 (默认值:x:{{ x }}, y:{{ y }}, z:{{ z }})", + "Maximum travel speed after acceleration in millimeters per second. (default: {{ z }}mm/s)": "加速后的最大行进速度,以毫米/秒为单位。 (默认值:{{ z }}mm/s)", + "Maximum travel speed after acceleration in millimeters per second. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)": "加速后的最大行进速度,以毫米/秒为单位。 (默认值:x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)", + "maximum weed size": "最大杂草尺寸", + "Maximum weed size (diameter) in millimeters. Set to 0 to disable limit. (default: {{ defaultMaxDiameter }})": "最大杂草尺寸(直径),以毫米为单位。 设置为0以禁用限制。 (默认值:{{ defaultMaxDiameter }})", + "measure": "测量", + "Measure": "测量", + "Measure soil height": "测量土壤高度", + "MEASURE SOIL HEIGHT": "测量土壤高度", + "Memory": "内存", + "Memory usage": "内存使用情况", + "Menu": "菜单", + "Message Broker": "消息代理", + "Messages": "消息", + "Microsteps per step": "每步微步", + "min": "最小", + "Min OS version required": "所需的最低OS版本", + "Minimum movement speed in millimeters per second. Also used for homing and finding axis length. (default: {{ z }}mm/s)": "每秒的最小运动速度,以毫米为单位。 也用于归位和查找轴长度。 (默认值:{{ z }}mm/s)", + "Minimum movement speed in millimeters per second. Also used for homing and finding axis length. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)": "每秒的最小运动速度,以毫米为单位。 也用于归位和查找轴长度。 (默认值:x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)", + "Minimum Speed (mm/s)": "最小速度(毫米/秒)", + "Minimum Speed toward home (mm/s)": "最小速度朝向家(毫米/秒)", + "minimum weed size": "最小杂草尺寸", + "Minimum weed size (diameter) in millimeters. Set to 0 to disable limit. (default: {{ defaultMinDiameter }})": "最小杂草尺寸(直径),以毫米为单位。 设置为0以禁用限制。 (默认值:{{ defaultMinDiameter }})", + "Minor adjustments": "微调", + "Minutes": "分钟", + "minutes of": "分钟的", + "Missed Step Decay": "丢步衰减", + "Missing dependency": "缺少依赖", + "MIT License": "MIT许可证", + "mm": "毫米", + "Mode": "模式", + "Model": "型号", + "Moisture": "湿度", + "Month": "月", + "Months": "月", + "more": "更多", + "More": "更多", + "more bugs!": "更多错误!", + "More options": "更多选项", + "MORPH": "形态", + "Most people connect their FarmBot to the internet over WiFi, though you may optionally use a hardwired ethernet connection. If you would like to use an ethernet connection, simply connect an ethernet cable between your WiFi router and the Raspberry Pi.": "大多数人将其FarmBot连接到WiFi上的互联网,尽管您可以选择使用有线以太网连接。如果您想要使用以太网连接,只需在WiFi路由器和树莓派之间连接以太网电缆即可。", + "Motor Current": "电机电流", + "Motor current in milliamps. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "电机电流(毫安)。 (默认值:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Motor Load": "电机负载", + "Motor position plot": "电机位置图", + "Motor stall sensitivity. Most sensitive: -63. Least sensitive: +63. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "电机堵转灵敏度。 最敏感:-63。 最不敏感:+63。 (默认值:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Motors": "电机", + "MOTORS": "电机", + "mounted": "已安装", + "mounted tool": "已安装工具", + "Mounted Tool": "已安装工具", + "Move": "移动", + "move {{axis}} axis": "移动 {{axis}} 轴", + "Move a servo to the provided angle. An angle of 90 degrees corresponds to the servo midpoint (or, for a continuous rotation servo, no movement). Tip: follow with a WAIT command to allow the servo to reach the target position.": "将舵机移动到提供的角度。 90度的角度对应于舵机的中间位置(或者,对于连续旋转舵机,不移动)。 提示:跟随WAIT命令以使舵机达到目标位置。", + "Move FarmBot away from the hardstops": "将FarmBot移出硬停止位置", + "Move FarmBot to a different location and try again.": "将FarmBot移动到其他位置,然后重试。", + "Move FarmBot to home for the provided axis.": "将FarmBot移动到所提供的轴的原点。", + "Move into": "移动到", + "move mode": "移动模式", + "Move out of folders": "移出文件夹", + "move sequence": "移动序列", + "move step": "移动步骤", + "Move To": "移动到", + "Move to chosen location": "移动到选择的位置", + "move to home": "移动到原点", + "Move to Home": "移动到原点", + "MOVE TO HOME": "移动到原点", + "Move to this coordinate": "移动到这个坐标", + "Movement": "移动", + "Movement out of bounds for: ": "移动超出边界:", + "MOVEMENTS": "移动", + "Movements video": "移动视频", + "My Sequences": "我的序列", + "name": "名称", + "Name": "名称", + "Name already taken.": "名称已被使用。", + "Navigate Left": "向左导航", + "Navigate Right": "向右导航", + "Nearby": "附近", + "Negative Coordinates Only": "仅负坐标", + "Negative X": "负X", + "Negative Y": "负Y", + "Network Quality": "网络质量", + "Never": "从不", + "New Folder": "新文件夹", + "New message from bot": "来自机器人的新消息", + "New password and confirmation do not match.": "新密码与确认密码不匹配。", + "New password must be at least 8 characters.": "新密码必须至少8个字符。", + "New Peripheral": "新外设", + "New regimen ": "新日程", + "New Sensor": "新传感器", + "new sequence {{ num }}": "新序列 {{ num }}", + "New Terms of Service": "新服务条款", + "newer": "更新", + "Newer than": "更新于", + "newest": "最新", + "Next": "下一个", + "next image": "下一张图片", + "Next image": "下一张图片", + "no active jobs": "没有活动任务", + "No active weeds.": "没有活动杂草。", + "No camera selected": "未选择摄像头", + "No day(s) selected.": "未选择日期。", + "No description provided for this subsequence.": "未提供此子序列的描述。", + "No events scheduled.": "没有计划的事件。", + "No Farmware selected": "未选择Farmware", + "No Farmware yet.": "尚无Farmware。", + "No Group selected": "未选择群组", + "No groups yet.": "尚无群组。", + "No inputs provided.": "未提供输入。", + "No location chosen.": "未选择位置。", + "No location selected. Using default value.": "未选择位置。使用默认值。", + "No logs to display. Visit Logs page to view filters.": "没有日志可显示。访问日志页面以查看筛选器。", + "No logs yet.": "尚无日志。", + "No messages seen yet.": "尚未看到消息。", + "No messages.": "没有消息。", + "No more messages.": "没有更多消息。", + "No pending weeds.": "没有待处理的杂草。", + "No Peripherals yet.": "尚无外设。", + "No points yet.": "尚无点。", + "No recent messages.": "没有最近的消息。", + "No Regimen selected": "未选择日程", + "No Regimen selected.": "未选择日程。", + "No Regimens.": "无日程。", + "No removed weeds.": "没有已移除的杂草。", + "No results in your garden": "您的花园中没有结果", + "No results.": "没有结果。", + "No saved gardens yet.": "尚未保存花园。", + "No search results": "没有搜索结果", + "No Sensors yet.": "尚无传感器。", + "No Sequence selected": "未选择序列", + "No Sequence selected.": "未选择序列。", + "No Sequences.": "没有序列。", + "NO TOOL": "无工具", + "No webcams yet. Click the edit button to add a feed URL.": "尚无网络摄像头。单击编辑按钮以添加一个馈送URL。", + "No weeds yet.": "尚无杂草。", + "No zones yet.": "尚无区域。", + "Node name": "节点名称", + "none": "无", + "None": "无", + "normal": "正常", + "not all features of the app will work because there is not a real FarmBot connected to this account. Additionally, keep in mind that when you leave this web page, the demo account and all data will be deleted.": "应用程序的所有功能都无法使用,因为此账户未连接实际的FarmBot。另外,请注意,当您离开此网页时,演示账户和所有数据将被删除。", + "Not available": "不可用", + "Not available when device is offline.": "设备离线时不可用。", + "Not found": "未找到", + "Not hidden": "未隐藏", + "not mirrored": "未镜像", + "not set": "未设置", + "not shown in map": "不在地图中显示", + "Note: The selected timezone for your FarmBot is different than your local browser time.": "注意:您FarmBot选择的时区与您本地浏览器的时间不同。", + "Note: Times displayed according to FarmBot's local time, which is currently different from your browser's time. Timezone data is configurable in the Settings panel).": "注意:显示的时间根据FarmBot的本地时间,目前与您浏览器的时间不同。时区数据可在设置面板中配置。", + "notes": "笔记", + "Nothing happened": "没有发生任何事情", + "Now": "现在", + "Now that you have a garden with a few crops in it. Let's create groups of plants, where each group contains all of the plants of one crop type. Advance the tour when you're ready.": "现在您有了一个种植了一些作物的花园。让我们创建植物组,每个组包含一种作物类型的所有植物。准备好后继续导览。", + "number": "数字", + "Number": "数字", + "Number {{ num }}": "数字 {{ num }}", + "Number of erosion and dilation morphological transformation cycles. (default: {{ defaultIteration }})": "侵蚀和膨胀形态变换周期的次数。(默认值:{{ defaultIteration }})", + "Number of millimeters used for acceleration and deceleration. (default: {{ z }}mm)": "用于加速和减速的毫米数。(默认值:{{ z }}毫米)", + "Number of millimeters used for acceleration and deceleration. (default: x: {{ x }}mm, y: {{ y }}mm, z: {{ z }}mm)": "用于加速和减速的毫米数。(默认值:x: {{ x }}毫米, y: {{ y }}毫米, z: {{ z }}毫米)", + "Number of steps missed (determined by encoder) before motor is considered to have stalled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "在电机被认为堵转之前(由编码器确定)漏过的步数。(默认值:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Number of times to retry a movement before stopping. (default: {{ retries }})": "在停止之前重试移动的次数。(默认值:{{ retries }})", + "Number of times to retry calibration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "重试校准的次数。(默认值:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "numbers": "数字", + "occurred": "发生", + "off": "关闭", + "OFF": "关闭", + "offline": "离线", + "Offline": "离线", + "offset": "偏移", + "Offset adjustment": "偏移调整", + "Offset from current location": "从当前位置偏移", + "ok": "好", + "Ok": "好", + "older": "更旧", + "Older than": "早于", + "oldest": "最旧", + "on": "打开", + "ON": "打开", + "Once published, anyone may find and use the sequence free of charge for tasks including but not limited to:": "一旦发布,任何人都可以免费找到并使用该序列,用于包括但不限于以下任务:", + "Once you have input the coordinate locations for every slot, choose which tool or seed container is loaded into each slot. Remember: the virtual configuration must always match your real-life configuration.": "一旦输入每个插槽的坐标位置,选择每个插槽中加载的工具或种子容器。请记住:虚拟配置必须始终与实际配置匹配。", + "Once you make a selection, we'll automatically add some tools, sensors, peripherals, sequences, and more to get you up and running faster.": "一旦您做出选择,我们将自动添加一些工具、传感器、外设、序列等,以便您更快地启动和运行。", + "Online": "在线", + "only show current photo in map": "仅在地图中显示当前照片", + "Only show logs sent from current FarmBot OS version.": "仅显示当前FarmBot OS版本发送的日志。", + "Open a browser and navigate to ": "打开浏览器并导航到 ", + "Open documentation in a new tab": "在新标签页中打开文档", + "open full-page editor": "打开全页编辑器", + "Open Guide": "打开指南", + "Open link in a new tab": "在新标签页中打开链接", + "open linked sequence": "打开链接的序列", + "open map settings menu": "打开地图设置菜单", + "open move mode panel": "打开移动模式面板", + "Open network ports": "打开网络端口", + "Open OpenFarm.cc in a new tab": "在新标签页中打开 OpenFarm.cc", + "Open options by default": "默认打开选项", + "open plants panel": "打开植物面板", + "open point select panel": "打开点选择面板", + "open regimen": "打开日程", + "open scheduler panel": "打开调度器面板", + "Open the ... menu for the {{ axis }} axis and click **FIND HOME**.": "打开 {{ axis }} 轴的 ... 菜单并单击 **查找原点**。", + "Open the ... menu for the {{ axis }} axis and click **FIND LENGTH**.": "打开 {{ axis }} 轴的 ... 菜单并单击 **查找长度**。", + "Optimized": "优化", + "options": "选项", + "Options": "选项", + "or": "或", + "Or view FarmBot's current location in the virtual garden.": "或在虚拟花园中查看FarmBot的当前位置。", + "Orange": "橙色", + "Order info": "订单信息", + "Order number": "订单号", + "Order Number": "订单号", + "Origin": "起点", + "origin location in image": "图像中的起点位置", + "OS release channel": "OS 发布渠道", + "Other": "其他", + "Outside of filter range": "超出筛选范围", + "Outside of planting area. Plants must be placed within the grid.": "在种植区外。植物必须放置在网格内。", + "Over time you may need to make minor adjustments to the coordinates of your slots. At any time you can come back to the edit slot panel and manually adjust the X, Y, and Z input fields.": "随着时间的推移,您可能需要对插槽的坐标进行小幅调整。随时可以返回编辑插槽面板,手动调整X、Y和Z输入字段。", + "override": "覆盖", + "Page Not Found.": "页面未找到。", + "Parameter load progress": "参数加载进度", + "Parameter Management": "参数管理", + "Password must be 8 or more characters.": "密码必须为8个或更多字符。", + "Paste the output from EXPORT PARAMETERS into the text field and press IMPORT to import new hardware parameters to your FarmBot.": "将导出参数的输出粘贴到文本字段中,然后按导入以将新的硬件参数导入到您的FarmBot。", + "Pending": "待定", + "pending install": "待安装", + "Pending installation.": "待安装。", + "Percent OK": "百分比正常", + "Perform camera rotation compensation when image is captured instead of in garden map. If enabled, image files will include adjustment for camera rotation (black angled borders may show in viewer). Enabling this setting will slow down photo capture.": "在捕获图像时执行相机旋转补偿,而不是在花园地图中。如果启用,图像文件将包含相机旋转的调整(查看器中可能会显示黑色角边)。启用此设置会减慢照片捕捉速度。", + "Period End Date": "期间结束日期", + "Peripheral": "外设", + "Peripheral ": "外设 ", + "Peripherals": "外设", + "PERIPHERALS": "外设", + "phone": "电话", + "Photo": "照片", + "photo step": "照片步骤", + "Photo upload": "照片上传", + "Photos": "照片", + "Photos are viewable from the": "照片可从以下查看", + "photos in map": "地图中的照片", + "photos panel": "照片面板", + "pin": "引脚", + "Pin": "引脚", + "Pin ": "引脚 ", + "Pin a sequence in the sequence editor to add it to this list.": "在序列编辑器中固定一个序列以将其添加到此列表中。", + "Pin Bindings": "引脚绑定", + "Pin Guard": "引脚保护", + "Pin Guard 1": "引脚保护 1", + "Pin Guard 2": "引脚保护 2", + "Pin Guard 3": "引脚保护 3", + "Pin Guard 4": "引脚保护 4", + "Pin Guard 5": "引脚保护 5", + "Pin number cannot be blank.": "引脚编号不能为空。", + "Pin numbers must be unique.": "引脚编号必须唯一。", + "Pin Reporting": "引脚报告", + "Pin Reporting 1": "引脚报告 1", + "Pin Reporting 2": "引脚报告 2", + "pin timeout (sec) to state": "引脚超时(秒)到状态", + "Pings received": "收到的Ping", + "Pings sent": "发送的Ping", + "Pink": "粉色", + "pinned sequences": "固定的序列", + "Pinned Sequences": "固定的序列", + "Pins": "引脚", + "pixel coordinate scale": "像素坐标比例", + "Place the camera calibration card face down on the soil underneath the camera, with the grid of white circles facing up. Can be in any orientation but must be fully visible to the camera. Caution: FarmBot will make three small x-axis and y-axis movements during calibration.": "将相机校准卡正面朝下放在相机下方的土壤上,白色圆圈的网格朝上。可以是任何方向,但必须完全可见。注意:FarmBot在校准期间将进行三次小的X轴和Y轴移动。", + "Place the two red calibration objects 100mm apart and aligned with FarmBot's axes on the soil underneath the camera.": "将两个红色校准物体间隔100毫米,并与FarmBot的轴对齐,放在相机下方的土壤上。", + "Planned": "计划", + "plant": "植物", + "Plant animations": "植物动画", + "Plant Details": "植物详细信息", + "Plant groups": "植物组", + "Plant Groups": "植物组", + "plant icon": "植物图标", + "Plant inventory": "植物库存", + "Plant stage": "植物阶段", + "Plant Type": "植物类型", + "Planted": "已种植", + "Planting a garden": "种植花园", + "plants": "植物", + "Please agree to the terms.": "请同意条款。", + "Please check your email for the verification link.": "请检查您的电子邮件以获取验证链接。", + "Please check your email to confirm email address changes.": "请检查您的电子邮件以确认电子邮件地址的更改。", + "Please choose a firmware version to install. Your choice should be based on the type of electronics in your FarmBot according to the reference table below.": "请选择要安装的固件版本。您的选择应基于下表中FarmBot的电子类型。", + "Please clear current garden first.": "请先清除当前花园。", + "Please contact the system(s) administrator(s) and ask them to enable HTTPS://": "请联系系统管理员并要求他们启用HTTPS://", + "Please enter a number.": "请输入一个数字。", + "Please enter a URL": "请输入一个URL", + "Please enter a URL.": "请输入一个URL。", + "Please enter a value between 0 and {{ max }}": "请输入0和{{ max }}之间的值", + "Please enter a value.": "请输入一个值。", + "Please enter your FarmBot order number.": "请输入您的FarmBot订单号。", + "Please make a grid with less than 100 {{ itemType }}": "请制作一个少于100 {{ itemType }} 的网格", + "Please note:": "请注意:", + "Please re-flash your FarmBot's SD card.": "请重新刷新您的FarmBot的SD卡。", + "Please select a pin.": "请选择一个引脚。", + "Please select a sensor with a valid pin number.": "请选择一个带有效引脚编号的传感器。", + "Please select a sequence or action.": "请选择一个序列或操作。", + "Please select a sequence or regimen.": "请选择一个序列或日程。", + "Please Update": "请更新", + "Please upgrade": "请升级", + "Please wait": "请等待", + "Plug in FarmBot's power.": "插入FarmBot的电源。", + "point": "点", + "Point created.": "点已创建。", + "Point Groups": "点组", + "Point status": "点状态", + "Points": "点", + "points panel": "点面板", + "Position (mm)": "位置(毫米)", + "Positions": "位置", + "Positive X": "正X", + "Positive Y": "正Y", + "Power and Reset": "电源和重置", + "Power cycle FarmBot's onboard computer.": "重启FarmBot的板载计算机。", + "Power down FarmBot's onboard computer.": "关闭FarmBot的板载计算机。", + "Power Off Bot": "关闭机器人", + "Power up": "启动", + "Presets": "预设", + "Press \"+\" to add a Farmware.": "按 \"+\" 添加一个Farmware。", + "Press \"+\" to add a garden.": "按 \"+\" 添加一个花园。", + "Press \"+\" to add a group.": "按 \"+\" 添加一个组。", + "Press \"+\" to add a new tool or seed container.": "按 \"+\" 添加一个新工具或种子容器。", + "Press \"+\" to add a plant to your garden.": "按 \"+\" 添加植物到您的花园。", + "Press \"+\" to add a point to your garden.": "按 \"+\" 添加一个点到您的花园。", + "Press \"+\" to add a seed container.": "按 \"+\" 添加一个种子容器。", + "Press \"+\" to add a weed.": "按 \"+\" 添加一个杂草。", + "Press \"+\" to add a zone.": "按 \"+\" 添加一个区域。", + "Press \"+\" to schedule an event.": "按 \"+\" 安排一个事件。", + "Press \"edit\" to add a peripheral.": "按 \"编辑\" 添加一个外设。", + "Press \"edit\" to add a sensor.": "按 \"编辑\" 添加一个传感器。", + "Press the **{{ toggle }}** toggle, wait a few seconds, and then press the toggle again.": "按 **{{ toggle }}** 开关,等待几秒钟,然后再次按开关。", + "Press the button below to calibrate the camera.": "按下面的按钮校准相机。", + "Press the button below to take a photo.": "按下面的按钮拍照。", + "Press the button to install your device's firmware.": "按按钮安装设备的固件。", + "Press the down arrow.": "按下箭头。", + "Press the physical E-Stop button on top of the electronics box.": "按电子盒顶部的物理急停按钮。", + "Press the physical Unlock button on top of the electronics box.": "按电子盒顶部的物理解锁按钮。", + "Press the right arrow.": "按右箭头。", + "Press the toggle button to enable dynamic map size.": "按切换按钮启用动态地图大小。", + "Press the UNLOCK button below.": "按下面的解锁按钮。", + "Press the up arrow.": "按上箭头。", + "Press YES to proceed to camera calibration.": "按 YES 进行相机校准。", + "Press YES when ready.": "准备好时按 YES。", + "Press YES.": "按 YES。", + "Prev": "上一个", + "Preview": "预览", + "previous image": "上一张图片", + "Previous image": "上一张图片", + "Priority support": "优先支持", + "priority support subscription": "优先支持订阅", + "Privacy Policy": "隐私政策", + "Processing now. Results usually available in one minute. Check log messages for result status.": "正在处理。结果通常在一分钟内可用。检查日志消息以获取结果状态。", + "Processing Parameters": "处理参数", + "Progress": "进展", + "property": "属性", + "Provide feedback": "提供反馈", + "Provided new and old passwords match. Password not changed.": "提供的新旧密码匹配。密码未更改。", + "public copy": "公开副本", + "public version": "公开版本", + "Publish error": "发布错误", + "Published as a publicly shared sequence.": "发布为公开共享的序列。", + "publishing": "正在发布", + "Publishing this sequence will create a": "发布此序列将创建一个", + "Publishing, distributing, and even selling their copy": "发布、分发,甚至销售他们的副本", + "Purple": "紫色", + "Quiet Mode": "安静模式", + "quit": "退出", + "Radius": "半径", + "radius (mm)": "半径(毫米)", + "Random Order": "随机顺序", "Raspberry Pi": "Raspberry Pi", - "Raspberry Pi Camera": "Raspberry Pi Camera", - "Raspberry Pi GPIO pin already bound or in use.": "Raspberry Pi GPIO pin already bound or in use.", - "Raspberry Pi power status since last reboot. If supply voltage drops below the standard operational threshold the indicator will turn red. Once the voltage level recovers the status will turn yellow, indicating that a low voltage event has occurred. Low voltage may adversely affect WiFi and camera functionality.": "Raspberry Pi power status since last reboot. If supply voltage drops below the standard operational threshold the indicator will turn red. Once the voltage level recovers the status will turn yellow, indicating that a low voltage event has occurred. Low voltage may adversely affect WiFi and camera functionality.", - "Raw Encoder data": "Raw Encoder data", - "Raw encoder position": "Raw encoder position", - "re-seed account": "re-seed account", - "Read pin": "Read pin", - "read sensor": "read sensor", - "Read sensor": "Read sensor", - "Read Sensor": "Read Sensor", - "Read speak logs in browser": "Read speak logs in browser", - "Read status": "Read status", - "Read Status": "Read Status", - "Read the docs": "Read the docs", - "Readings": "Readings", - "realtime": "realtime", - "Reboot": "Reboot", - "Reboot Bot": "Reboot Bot", - "Received change of ownership.": "Received change of ownership.", - "Reconnected to the message broker.": "Reconnected to the message broker.", - "Recover and continue": "Recover and continue", - "Recovery Sequence": "Recovery Sequence", - "Recursive condition.": "Recursive condition.", - "red": "red", - "Red": "Red", - "Redirecting": "Redirecting", - "Reduction to missed step total for every good step. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Reduction to missed step total for every good step. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Refer to the": "Refer to the", - "Refusing to modify data in read-only mode": "Refusing to modify data in read-only mode", - "Register your ORDER NUMBER": "Register your ORDER NUMBER", - "Release Notes": "Release Notes", - "released under the": "released under the", - "Removal method": "Removal method", - "Removal Method": "Removal Method", - "Remove": "Remove", - "Remove all manual selections?": "Remove all manual selections?", - "remove Farmware": "remove Farmware", - "Remove Farmware": "Remove Farmware", - "remove filter": "remove filter", - "remove number criteria": "remove number criteria", - "Remove portions of images that extend beyond the garden map boundaries.": "Remove portions of images that extend beyond the garden map boundaries.", - "remove week": "remove week", - "Removed": "Removed", - "Repeats?": "Repeats?", - "Republishing this sequence will prevent you from viewing public copies and upgrading to versions from the current import source.": "Republishing this sequence will prevent you from viewing public copies and upgrading to versions from the current import source.", - "Requires": "Requires", - "RESEND": "RESEND", - "Resend parameters": "Resend parameters", - "Resend Verification Email": "Resend Verification Email", - "Reserved Raspberry Pi pin may not work as expected.": "Reserved Raspberry Pi pin may not work as expected.", - "reset": "reset", - "Reset {{ count }} values?": "Reset {{ count }} values?", - "Reset account": "Reset account", - "Reset all values": "Reset all values", - "Reset calibration values": "Reset calibration values", - "Reset Farmware config values": "Reset Farmware config values", - "Reset filters": "Reset filters", - "Reset hardware parameters": "Reset hardware parameters", - "Reset password": "Reset password", - "reset to default": "reset to default", - "resolution": "resolution", - "resource": "resource", - "Resource": "Resource", - "Resource {{ num }}": "Resource {{ num }}", - "Resources added!": "Resources added!", - "restart": "restart", - "Restart Farmbot": "Restart Farmbot", - "restart firmware": "restart firmware", - "Restart Firmware": "Restart Firmware", - "Restart setup wizard": "Restart setup wizard", - "Restart the Farmduino or Arduino firmware.": "Restart the Farmduino or Arduino firmware.", - "Restoring hardware parameter defaults will destroy the current settings, resetting them to default values.": "Restoring hardware parameter defaults will destroy the current settings, resetting them to default values.", - "Restrict travel to negative coordinate locations. Overridden by disabling STOP AT HOME. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Restrict travel to negative coordinate locations. Overridden by disabling STOP AT HOME. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "result toast": "result toast", - "Results are viewable from the": "Results are viewable from the", - "Results are viewable in the": "Results are viewable in the", - "Retry": "Retry", - "retry fetch package name": "retry fetch package name", - "Return to the": "Return to the", - "Return to the wizard": "Return to the wizard", - "Reverse the direction of encoder position reading. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Reverse the direction of encoder position reading. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "revert changes": "revert changes", - "Rotary tool": "Rotary tool", - "Rotary Tool": "Rotary Tool", - "ROTARY TOOL": "ROTARY TOOL", - "Rotary tool forward": "Rotary tool forward", - "Rotary tool reverse": "Rotary tool reverse", - "Rotary Tool Reverse": "Rotary Tool Reverse", - "ROTARY TOOL REVERSE": "ROTARY TOOL REVERSE", - "rotate during capture": "rotate during capture", - "Rotate during capture": "Rotate during capture", - "Rotate map": "Rotate map", - "rotate tool 180 degrees": "rotate tool 180 degrees", - "Row Spacing": "Row Spacing", - "Run": "Run", - "Run Farmware": "Run Farmware", - "run water for 5 seconds": "run water for 5 seconds", - "safe": "safe", - "Safe height": "Safe height", - "Safe Height": "Safe Height", - "Safe Z": "Safe Z", - "same as front": "same as front", - "SATURATION": "SATURATION", - "save": "save", - "save as default": "save as default", - "Save as default": "Save as default", - "save detected plants": "save detected plants", - "Save detected plants as map points. (default: {{ defaultSavePlants }})": "Save detected plants as map points. (default: {{ defaultSavePlants }})", - "Save error. Click to retry.": "Save error. Click to retry.", - "save folder name": "save folder name", - "Save new slot?": "Save new slot?", - "Save sequence and sync device before running.": "Save sequence and sync device before running.", - "Save sequence first.": "Save sequence first.", - "Saved": "Saved", - "saved garden": "saved garden", - "Saved pin bindings": "Saved pin bindings", - "Saving": "Saving", - "saving...": "saving...", - "Scaled Encoder (mm)": "Scaled Encoder (mm)", - "Scaled encoder position": "Scaled encoder position", - "Scan current image": "Scan current image", - "Scan this image": "Scan this image", - "Schedule item": "Schedule item", - "Scheduler": "Scheduler", - "SD card": "SD card", - "search all crops?": "search all crops?", - "Search commands and sequences...": "Search commands and sequences...", - "Search for a crop to add to your garden.": "Search for a crop to add to your garden.", - "Search logs...": "Search logs...", - "Search OpenFarm...": "Search OpenFarm...", - "Search sequences...": "Search sequences...", - "Search settings...": "Search settings...", - "Search term too short": "Search term too short", - "Search your events...": "Search your events...", - "Search your Farmware...": "Search your Farmware...", - "Search your gardens...": "Search your gardens...", - "Search your groups...": "Search your groups...", - "Search your plants...": "Search your plants...", - "Search your points...": "Search your points...", - "Search your regimens...": "Search your regimens...", - "Search your seed containers...": "Search your seed containers...", - "Search your tools...": "Search your tools...", - "Search your weeds...": "Search your weeds...", - "Search your zones...": "Search your zones...", - "Searching...": "Searching...", - "sec": "sec", - "seconds ago": "seconds ago", - "See what FarmBot is doing": "See what FarmBot is doing", - "Seed Bin": "Seed Bin", - "Seed Container": "Seed Container", - "seed containers": "seed containers", - "Seed Tray": "Seed Tray", - "Seed Trough 1": "Seed Trough 1", - "Seed Trough 2": "Seed Trough 2", - "Seeder": "Seeder", - "Seeding in progress.": "Seeding in progress.", - "Seeding your account without resetting it first may result in duplicate resources. Continue?": "Seeding your account without resetting it first may result in duplicate resources. Continue?", - "select": "select", - "Select a camera on the Settings panel to take photos.": "Select a camera on the Settings panel to take photos.", - "Select a default value for this variable. If the sequence is ever run without the variable explicitly set to another value, the default value will be used.": "Select a default value for this variable. If the sequence is ever run without the variable explicitly set to another value, the default value will be used.", - "Select a group": "Select a group", - "Select a location": "Select a location", - "Select a location in the map.": "Select a location in the map.", - "Select a map origin by clicking on one of the four quadrants to adjust the garden map to your viewing angle.": "Select a map origin by clicking on one of the four quadrants to adjust the garden map to your viewing angle.", - "Select a model": "Select a model", - "Select a peripheral": "Select a peripheral", - "Select a pin": "Select a pin", - "Select a pin ": "Select a pin ", - "Select a regimen first or create one.": "Select a regimen first or create one.", - "Select a sensor": "Select a sensor", - "Select a sequence": "Select a sequence", - "Select a sequence first": "Select a sequence first", - "Select a sequence from the dropdown first.": "Select a sequence from the dropdown first.", - "Select a status": "Select a status", - "Select all": "Select all", - "select all days": "select all days", - "Select all in group": "Select all in group", - "Select an action": "Select an action", - "select color": "select color", - "Select none": "Select none", - "Select one": "Select one", - "Select the 'Find Home' sequence in the dropdown. FarmBot will execute this sequence every time it boots up. You can modify this sequence or choose a different boot sequence later to have FarmBot perform different functions when it turns on.": "Select the 'Find Home' sequence in the dropdown. FarmBot will execute this sequence every time it boots up. You can modify this sequence or choose a different boot sequence later to have FarmBot perform different functions when it turns on.", - "Select the correct map origin.": "Select the correct map origin.", - "Select your FarmBot model.": "Select your FarmBot model.", - "selected": "selected", - "selected by filters": "selected by filters", - "SELECTION ACTIONS": "SELECTION ACTIONS", - "selection type": "selection type", - "selections empty": "selections empty", - "Send a log message for each sequence step.": "Send a log message for each sequence step.", - "Send a log message upon the end of sequence execution.": "Send a log message upon the end of sequence execution.", - "Send a log message upon the start of sequence execution.": "Send a log message upon the start of sequence execution.", - "Send message": "Send message", - "Sending firmware configuration...": "Sending firmware configuration...", - "Sensor": "Sensor", - "Sensor History": "Sensor History", - "sensor or peripheral": "sensor or peripheral", - "Sensor readings": "Sensor readings", - "Sensors": "Sensors", - "Sequence execution": "Sequence execution", - "Sequence load error": "Sequence load error", - "Sequence logs:": "Sequence logs:", - "Sequence Name": "Sequence Name", - "Sequence not found": "Sequence not found", - "sequence steps": "sequence steps", - "Sequence upgraded.": "Sequence upgraded.", - "Server": "Server", - "Servo pin": "Servo pin", - "Set axis length": "Set axis length", - "Set axis length to the current FarmBot axis position.": "Set axis length to the current FarmBot axis position.", - "Set Farmware Env": "Set Farmware Env", - "Set home": "Set home", - "Set Home": "Set Home", - "SET HOME": "SET HOME", - "SET HOME {{ axis }}": "SET HOME {{ axis }}", - "SET LENGTH": "SET LENGTH", - "Set the current location as home (zero).": "Set the current location as home (zero).", - "Set the length of each axis to provide software limits. Used only if STOP AT MAX is enabled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }} (disabled))": "Set the length of each axis to provide software limits. Used only if STOP AT MAX is enabled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }} (disabled))", - "set to": "set to", - "Setting name (key)": "Setting name (key)", - "Setting toggle": "Setting toggle", - "Setting up slots": "Setting up slots", - "settings": "settings", - "Settings": "Settings", - "Setup": "Setup", - "Setup Complete!": "Setup Complete!", - "Setup, customize, and control FarmBot from your": "Setup, customize, and control FarmBot from your", - "share sequence": "share sequence", - "Shop": "Shop", - "show": "show", - "Show a confirmation dialog when deleting a plant.": "Show a confirmation dialog when deleting a plant.", - "Show a confirmation dialog when deleting a sequence step.": "Show a confirmation dialog when deleting a sequence step.", - "Show a confirmation dialog when deleting a sequence.": "Show a confirmation dialog when deleting a sequence.", - "Show advanced settings": "Show advanced settings", - "show all": "show all", - "Show all download links": "Show all download links", - "Show Areas Map Layer": "Show Areas Map Layer", - "show assertion log messages": "show assertion log messages", - "show busy log messages": "show busy log messages", - "show calibration images": "show calibration images", - "show camera view area": "show camera view area", - "show debug log messages": "show debug log messages", - "show error log messages": "show error log messages", - "Show FarmBot Map Layer": "Show FarmBot Map Layer", - "show fun log messages": "show fun log messages", - "show icons": "show icons", - "show info log messages": "show info log messages", - "Show logs": "Show logs", - "Show Moisture Interpolation Map Layer": "Show Moisture Interpolation Map Layer", - "show motor position plot display": "show motor position plot display", - "show only photos taken within": "show only photos taken within", - "show only this photo and": "show only this photo and", - "show photos in map": "show photos in map", - "Show Photos Map Layer": "Show Photos Map Layer", - "Show pins": "Show pins", - "Show Plants Map Layer": "Show Plants Map Layer", - "Show Points Map Layer": "Show Points Map Layer", - "Show Previous Period": "Show Previous Period", - "Show raw pin lists in Read Sensor, Control Peripheral, and If Statement steps.": "Show raw pin lists in Read Sensor, Control Peripheral, and If Statement steps.", - "Show Readings Map Layer": "Show Readings Map Layer", - "Show removed": "Show removed", - "Show Removed Weeds Map Layer": "Show Removed Weeds Map Layer", - "Show seconds in time": "Show seconds in time", - "show soil height images": "show soil height images", - "Show Soil Interpolation Map Layer": "Show Soil Interpolation Map Layer", - "Show Spread Map Layer": "Show Spread Map Layer", - "show success log messages": "show success log messages", - "show take photo images": "show take photo images", - "Show the camera's field of view in the garden map.": "Show the camera's field of view in the garden map.", - "Show the camera's uncropped and unrotated field of view in the garden map when CROP MAP IMAGES is enabled.": "Show the camera's uncropped and unrotated field of view in the garden map when CROP MAP IMAGES is enabled.", - "show warn log messages": "show warn log messages", - "show weed detector images": "show weed detector images", - "Show Weeds Map Layer": "Show Weeds Map Layer", - "showing single setting": "showing single setting", - "shown in map": "shown in map", - "Shutdown": "Shutdown", - "Shutdown Farmbot": "Shutdown Farmbot", - "Since you're new around here, we recommend taking our guided tours of the app. This is the fastest way to learn about the most important pages and features at your fingertips.": "Since you're new around here, we recommend taking our guided tours of the app. This is the fastest way to learn about the most important pages and features at your fingertips.", - "single input": "single input", - "Single photo mode active": "Single photo mode active", - "size": "size", - "Size doesn't match calibration": "Size doesn't match calibration", - "Size matches camera calibration": "Size matches camera calibration", - "Size of the structuring element used for morphological transformations. (default: {{ defaultMorph }})": "Size of the structuring element used for morphological transformations. (default: {{ defaultMorph }})", - "slot": "slot", - "Slot": "Slot", - "slot direction": "slot direction", - "slots": "slots", - "Slots": "Slots", - "smartphone": "smartphone", - "Snaps a photo using the device camera. Select the camera type in the Settings panel.": "Snaps a photo using the device camera. Select the camera type in the Settings panel.", - "Snapshot current garden": "Snapshot current garden", - "Soft": "Soft", - "Soft Reset": "Soft Reset", - "SOFT RESET": "SOFT RESET", - "Soft resetting your FarmBot will revoke your FarmBot's ability to connect to your web app account and your home WiFi network. Upon soft resetting, your device will go into Configurator mode.": "Soft resetting your FarmBot will revoke your FarmBot's ability to connect to your web app account and your home WiFi network. Upon soft resetting, your device will go into Configurator mode.", - "Software": "Software", - "Software Documentation": "Software Documentation", + "Raspberry Pi Camera": "Raspberry Pi 摄像头", + "Raspberry Pi GPIO pin already bound or in use.": "Raspberry Pi GPIO 引脚已绑定或正在使用。", + "Raspberry Pi power status since last reboot. If supply voltage drops below the standard operational threshold the indicator will turn red. Once the voltage level recovers the status will turn yellow, indicating that a low voltage event has occurred. Low voltage may adversely affect WiFi and camera functionality.": "自上次重启以来的Raspberry Pi电源状态。如果电源电压降到标准操作阈值以下,指示灯将变红。一旦电压水平恢复,状态将变为黄色,表明发生了低电压事件。低电压可能会对WiFi和相机功能产生不利影响。", + "Raw Encoder data": "原始编码器数据", + "Raw encoder position": "原始编码器位置", + "re-seed account": "重新播种账户", + "Read pin": "读取引脚", + "read sensor": "读取传感器", + "Read sensor": "读取传感器", + "Read Sensor": "读取传感器", + "Read speak logs in browser": "在浏览器中读取语音日志", + "Read status": "读取状态", + "Read Status": "读取状态", + "Read the docs": "阅读文档", + "Readings": "读数", + "realtime": "实时", + "Reboot": "重启", + "Reboot Bot": "重启机器人", + "Received change of ownership.": "收到所有权变更。", + "Reconnected to the message broker.": "重新连接到消息代理。", + "Recover and continue": "恢复并继续", + "Recovery Sequence": "恢复序列", + "Recursive condition.": "递归条件。", + "red": "红色", + "Red": "红色", + "Redirecting": "正在重定向", + "Reduction to missed step total for every good step. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "每走一步减少错过的总步数。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Refer to the": "参考", + "Refusing to modify data in read-only mode": "拒绝在只读模式下修改数据", + "Register your ORDER NUMBER": "注册您的订单号", + "Release Notes": "发行说明", + "released under the": "在以下条件下发布", + "Removal method": "移除方法", + "Removal Method": "移除方法", + "Remove": "移除", + "Remove all manual selections?": "移除所有手动选择?", + "remove Farmware": "移除Farmware", + "Remove Farmware": "移除Farmware", + "remove filter": "移除过滤器", + "remove number criteria": "移除数字标准", + "Remove portions of images that extend beyond the garden map boundaries.": "移除超出花园地图边界的图像部分。", + "remove week": "移除周", + "Removed": "已移除", + "Repeats?": "重复?", + "Republishing this sequence will prevent you from viewing public copies and upgrading to versions from the current import source.": "重新发布此序列将阻止您查看公共副本并升级到当前导入源的版本。", + "Requires": "需要", + "RESEND": "重新发送", + "Resend parameters": "重新发送参数", + "Resend Verification Email": "重新发送验证邮件", + "Reserved Raspberry Pi pin may not work as expected.": "保留的Raspberry Pi引脚可能无法按预期工作。", + "reset": "重置", + "Reset {{ count }} values?": "重置 {{ count }} 个值?", + "Reset account": "重置账户", + "Reset all values": "重置所有值", + "Reset calibration values": "重置校准值", + "Reset Farmware config values": "重置Farmware配置值", + "Reset filters": "重置过滤器", + "Reset hardware parameters": "重置硬件参数", + "Reset password": "重置密码", + "reset to default": "恢复默认", + "resolution": "分辨率", + "resource": "资源", + "Resource": "资源", + "Resource {{ num }}": "资源 {{ num }}", + "Resources added!": "资源已添加!", + "restart": "重新启动", + "Restart Farmbot": "重新启动Farmbot", + "restart firmware": "重新启动固件", + "Restart Firmware": "重新启动固件", + "Restart setup wizard": "重新启动设置向导", + "Restart the Farmduino or Arduino firmware.": "重新启动Farmduino或Arduino固件。", + "Restoring hardware parameter defaults will destroy the current settings, resetting them to default values.": "恢复硬件参数默认值将销毁当前设置,将其重置为默认值。", + "Restrict travel to negative coordinate locations. Overridden by disabling STOP AT HOME. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "限制行程到负坐标位置。通过禁用在原地停止来覆盖。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", + "result toast": "结果通知", + "Results are viewable from the": "结果可从以下查看", + "Results are viewable in the": "结果可在以下查看", + "Retry": "重试", + "retry fetch package name": "重试获取包名称", + "Return to the": "返回到", + "Return to the wizard": "返回向导", + "Reverse the direction of encoder position reading. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "反转编码器位置读取的方向。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", + "revert changes": "还原更改", + "Rotary tool": "旋转工具", + "Rotary Tool": "旋转工具", + "ROTARY TOOL": "旋转工具", + "Rotary tool forward": "旋转工具前进", + "Rotary tool reverse": "旋转工具反转", + "Rotary Tool Reverse": "旋转工具反转", + "ROTARY TOOL REVERSE": "旋转工具反转", + "rotate during capture": "在捕获过程中旋转", + "Rotate during capture": "在捕获过程中旋转", + "Rotate map": "旋转地图", + "rotate tool 180 degrees": "旋转工具180度", + "Row Spacing": "行间距", + "Run": "运行", + "Run Farmware": "运行Farmware", + "run water for 5 seconds": "运行水5秒", + "safe": "安全", + "Safe height": "安全高度", + "Safe Height": "安全高度", + "Safe Z": "安全Z", + "same as front": "与前面相同", + "SATURATION": "饱和度", + "save": "保存", + "save as default": "保存为默认", + "Save as default": "保存为默认", + "save detected plants": "保存检测到的植物", + "Save detected plants as map points. (default: {{ defaultSavePlants }})": "将检测到的植物保存为地图点。(默认: {{ defaultSavePlants }})", + "Save error. Click to retry.": "保存错误。点击重试。", + "save folder name": "保存文件夹名称", + "Save new slot?": "保存新槽位?", + "Save sequence and sync device before running.": "保存序列并在运行前同步设备。", + "Save sequence first.": "先保存序列。", + "Saved": "已保存", + "saved garden": "已保存的花园", + "Saved pin bindings": "已保存的引脚绑定", + "Saving": "保存中", + "saving...": "保存中...", + "Scaled Encoder (mm)": "缩放编码器(毫米)", + "Scaled encoder position": "缩放编码器位置", + "Scan current image": "扫描当前图像", + "Scan this image": "扫描此图像", + "Schedule item": "计划项目", + "Scheduler": "调度器", + "SD card": "SD卡", + "search all crops?": "搜索所有作物?", + "Search commands and sequences...": "搜索命令和序列...", + "Search for a crop to add to your garden.": "搜索要添加到花园的作物。", + "Search logs...": "搜索日志...", + "Search OpenFarm...": "搜索OpenFarm...", + "Search sequences...": "搜索序列...", + "Search settings...": "搜索设置...", + "Search term too short": "搜索词太短", + "Search your events...": "搜索您的事件...", + "Search your Farmware...": "搜索您的Farmware...", + "Search your gardens...": "搜索您的花园...", + "Search your groups...": "搜索您的群组...", + "Search your plants...": "搜索您的植物...", + "Search your points...": "搜索您的点...", + "Search your regimens...": "搜索您的方案...", + "Search your seed containers...": "搜索您的种子容器...", + "Search your tools...": "搜索您的工具...", + "Search your weeds...": "搜索您的杂草...", + "Search your zones...": "搜索您的区域...", + "Searching...": "搜索中...", + "sec": "秒", + "seconds ago": "秒前", + "See what FarmBot is doing": "查看FarmBot的操作", + "Seed Bin": "种子箱", + "Seed Container": "种子容器", + "seed containers": "种子容器", + "Seed Tray": "种子托盘", + "Seed Trough 1": "种子槽 1", + "Seed Trough 2": "种子槽 2", + "Seeder": "播种机", + "Seeding in progress.": "播种进行中。", + "Seeding your account without resetting it first may result in duplicate resources. Continue?": "在不先重置账户的情况下播种可能会导致资源重复。继续?", + "select": "选择", + "Select a camera on the Settings panel to take photos.": "在设置面板上选择一个相机来拍照。", + "Select a default value for this variable. If the sequence is ever run without the variable explicitly set to another value, the default value will be used.": "选择此变量的默认值。如果运行序列时没有显式设置变量的值,则使用默认值。", + "Select a group": "选择一个组", + "Select a location": "选择一个位置", + "Select a location in the map.": "在地图中选择一个位置。", + "Select a map origin by clicking on one of the four quadrants to adjust the garden map to your viewing angle.": "通过点击四个象限之一选择地图原点,以调整花园地图到您的视角。", + "Select a model": "选择一个模型", + "Select a peripheral": "选择一个外设", + "Select a pin": "选择一个引脚", + "Select a pin ": "选择一个引脚 ", + "Select a regimen first or create one.": "先选择一个方案或创建一个。", + "Select a sensor": "选择一个传感器", + "Select a sequence": "选择一个序列", + "Select a sequence first": "先选择一个序列", + "Select a sequence from the dropdown first.": "先从下拉菜单中选择一个序列。", + "Select a status": "选择一个状态", + "Select all": "全选", + "select all days": "选择所有天", + "Select all in group": "选择组中所有", + "Select an action": "选择一个动作", + "select color": "选择颜色", + "Select none": "全不选", + "Select one": "选择一个", + "Select the 'Find Home' sequence in the dropdown. FarmBot will execute this sequence every time it boots up. You can modify this sequence or choose a different boot sequence later to have FarmBot perform different functions when it turns on.": "在下拉菜单中选择“找到家”序列。FarmBot每次启动时都会执行此序列。您可以稍后修改此序列或选择不同的启动序列,以便FarmBot在启动时执行不同的功能。", + "Select the correct map origin.": "选择正确的地图原点。", + "Select your FarmBot model.": "选择您的FarmBot模型。", + "selected": "已选择", + "selected by filters": "通过筛选选择", + "SELECTION ACTIONS": "选择操作", + "selection type": "选择类型", + "selections empty": "选择为空", + "Send a log message for each sequence step.": "为每个序列步骤发送日志消息。", + "Send a log message upon the end of sequence execution.": "在序列执行结束时发送日志消息。", + "Send a log message upon the start of sequence execution.": "在序列执行开始时发送日志消息。", + "Send message": "发送消息", + "Sending firmware configuration...": "发送固件配置...", + "Sensor": "传感器", + "Sensor History": "传感器历史", + "sensor or peripheral": "传感器或外设", + "Sensor readings": "传感器读数", + "Sensors": "传感器", + "Sequence execution": "序列执行", + "Sequence load error": "序列加载错误", + "Sequence logs:": "序列日志:", + "Sequence Name": "序列名称", + "Sequence not found": "序列未找到", + "sequence steps": "序列步骤", + "Sequence upgraded.": "序列已升级。", + "Server": "服务器", + "Servo pin": "伺服引脚", + "Set axis length": "设置轴长度", + "Set axis length to the current FarmBot axis position.": "将轴长度设置为当前FarmBot轴位置。", + "Set Farmware Env": "设置Farmware环境", + "Set home": "设置原点", + "Set Home": "设置原点", + "SET HOME": "设置原点", + "SET HOME {{ axis }}": "设置原点 {{ axis }}", + "SET LENGTH": "设置长度", + "Set the current location as home (zero).": "将当前位置设置为原点(零)。", + "Set the length of each axis to provide software limits. Used only if STOP AT MAX is enabled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }} (disabled))": "设置每个轴的长度以提供软件限制。仅在启用“在最大值处停止”时使用。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }} (已禁用))", + "set to": "设置为", + "Setting name (key)": "设置名称(键)", + "Setting toggle": "设置开关", + "Setting up slots": "设置槽位", + "settings": "设置", + "Settings": "设置", + "Setup": "设置", + "Setup Complete!": "设置完成!", + "Setup, customize, and control FarmBot from your": "从您的设备设置、定制和控制FarmBot", + "share sequence": "分享序列", + "Shop": "商店", + "show": "显示", + "Show a confirmation dialog when deleting a plant.": "删除植物时显示确认对话框。", + "Show a confirmation dialog when deleting a sequence step.": "删除序列步骤时显示确认对话框。", + "Show a confirmation dialog when deleting a sequence.": "删除序列时显示确认对话框。", + "Show advanced settings": "显示高级设置", + "show all": "显示全部", + "Show all download links": "显示所有下载链接", + "Show Areas Map Layer": "显示区域地图图层", + "show assertion log messages": "显示断言日志消息", + "show busy log messages": "显示忙碌日志消息", + "show calibration images": "显示校准图像", + "show camera view area": "显示相机视野区域", + "show debug log messages": "显示调试日志消息", + "show error log messages": "显示错误日志消息", + "Show FarmBot Map Layer": "显示FarmBot地图图层", + "show fun log messages": "显示有趣的日志消息", + "show icons": "显示图标", + "show info log messages": "显示信息日志消息", + "Show logs": "显示日志", + "Show Moisture Interpolation Map Layer": "显示湿度插值地图图层", + "show motor position plot display": "显示电机位置图显示", + "show only photos taken within": "仅显示在以下范围内拍摄的照片", + "show only this photo and": "仅显示此照片和", + "show photos in map": "在地图中显示照片", + "Show Photos Map Layer": "显示照片地图图层", + "Show pins": "显示引脚", + "Show Plants Map Layer": "显示植物地图图层", + "Show Points Map Layer": "显示点地图图层", + "Show Previous Period": "显示上一时期", + "Show raw pin lists in Read Sensor, Control Peripheral, and If Statement steps.": "在读取传感器、控制外设和条件语句步骤中显示原始引脚列表。", + "Show Readings Map Layer": "显示读数地图图层", + "Show removed": "显示已移除", + "Show Removed Weeds Map Layer": "显示已移除杂草地图图层", + "Show seconds in time": "显示时间中的秒", + "show soil height images": "显示土壤高度图像", + "Show Soil Interpolation Map Layer": "显示土壤插值地图图层", + "Show Spread Map Layer": "显示扩展地图图层", + "show success log messages": "显示成功日志消息", + "show take photo images": "显示拍照图像", + "Show the camera's field of view in the garden map.": "在花园地图中显示相机的视野。", + "Show the camera's uncropped and unrotated field of view in the garden map when CROP MAP IMAGES is enabled.": "启用裁剪地图图像时,在花园地图中显示相机未裁剪和未旋转的视野。", + "show warn log messages": "显示警告日志消息", + "show weed detector images": "显示杂草检测图像", + "Show Weeds Map Layer": "显示杂草地图图层", + "showing single setting": "显示单个设置", + "shown in map": "在地图中显示", + "Shutdown": "关机", + "Shutdown Farmbot": "关机Farmbot", + "Since you're new around here, we recommend taking our guided tours of the app. This is the fastest way to learn about the most important pages and features at your fingertips.": "由于您是新用户,我们建议您参加我们的应用程序导览。这是最快了解您指尖上最重要的页面和功能的方法。", + "single input": "单输入", + "Single photo mode active": "单张照片模式激活", + "size": "大小", + "Size doesn't match calibration": "尺寸与校准不匹配", + "Size matches camera calibration": "尺寸与相机校准匹配", + "Size of the structuring element used for morphological transformations. (default: {{ defaultMorph }})": "用于形态学变换的结构元素的大小。(默认:{{ defaultMorph }})", + "slot": "槽位", + "Slot": "槽位", + "slot direction": "槽位方向", + "slots": "槽位", + "Slots": "槽位", + "smartphone": "智能手机", + "Snaps a photo using the device camera. Select the camera type in the Settings panel.": "使用设备相机拍照。在设置面板中选择相机类型。", + "Snapshot current garden": "快照当前花园", + "Soft": "软", + "Soft Reset": "软重置", + "SOFT RESET": "软重置", + "Soft resetting your FarmBot will revoke your FarmBot's ability to connect to your web app account and your home WiFi network. Upon soft resetting, your device will go into Configurator mode.": "软重置您的FarmBot将撤销其连接到您的Web应用程序账户和家庭WiFi网络的能力。软重置后,您的设备将进入配置模式。", + "Software": "软件", + "Software Documentation": "软件文档", "software.farm.bot": "software.farm.bot", - "soil": "soil", - "Soil": "Soil", - "Soil height": "Soil height", - "Soil Height": "Soil Height", - "soil height at plant location": "soil height at plant location", - "Soil Height Detector": "Soil Height Detector", - "Soil height measurement": "Soil height measurement", - "Soil height measurements": "Soil height measurements", - "Soil Moisture": "Soil Moisture", - "Soil sensor": "Soil sensor", - "Soil Sensor": "Soil Sensor", - "Soil sensor reading": "Soil sensor reading", - "Solenoid valve": "Solenoid valve", - "Some {{points}} failed to delete.": "Some {{points}} failed to delete.", - "Some other issue is preventing FarmBot from working. Please see the table above for more information.": "Some other issue is preventing FarmBot from working. Please see the table above for more information.", - "Something else happened and I need additional help": "Something else happened and I need additional help", - "Something went wrong while rendering this page.": "Something went wrong while rendering this page.", - "Sorry, that feature is unavailable in demo accounts.": "Sorry, that feature is unavailable in demo accounts.", - "sort by": "sort by", - "Sort by": "Sort by", - "SORT BY": "SORT BY", - "Source": "Source", - "Sowing Method": "Sowing Method", - "Spacing (MM)": "Spacing (MM)", - "Speak": "Speak", - "Specify custom map dimensions (in millimeters). These values set the size of the garden map unless DYNAMIC MAP SIZE is enabled.": "Specify custom map dimensions (in millimeters). These values set the size of the garden map unless DYNAMIC MAP SIZE is enabled.", - "Speed (%)": "Speed (%)", - "Spread": "Spread", - "Sprouted": "Sprouted", - "stable": "stable", - "Stage": "Stage", - "Stall Detection": "Stall Detection", - "Stall Detection note": "Stall Detection note", - "Stall Sensitivity": "Stall Sensitivity", - "Standard support": "Standard support", - "Standing from where you will normally view the FarmBot, **press the right arrow button**.": "Standing from where you will normally view the FarmBot, **press the right arrow button**.", - "Standing from where you will normally view the FarmBot, **press the up arrow button**.": "Standing from where you will normally view the FarmBot, **press the up arrow button**.", - "Standing from where you will normally view the FarmBot, **press the z-axis down arrow button**.": "Standing from where you will normally view the FarmBot, **press the z-axis down arrow button**.", - "start over": "start over", - "Start time and date must be in the future.": "Start time and date must be in the future.", - "Start tour": "Start tour", - "Starting X": "Starting X", - "starting Y": "starting Y", - "status": "status", - "Status": "Status", - "Steps": "Steps", - "stereo inputs": "stereo inputs", - "Stock": "Stock", - "Stock Bindings": "Stock Bindings", - "stock names": "stock names", - "Stock pin bindings": "Stock pin bindings", - "Stock sensors": "Stock sensors", - "Stop at Home": "Stop at Home", - "Stop at Max": "Stop at Max", - "Stop at the home (zero) location of the axis. If enabled, moving past zero is disallowed. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Stop at the home (zero) location of the axis. If enabled, moving past zero is disallowed. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Stops a device from moving until it is unlocked by a user.": "Stops a device from moving until it is unlocked by a user.", - "strings": "strings", - "submit": "submit", - "submitted": "submitted", - "Success": "Success", - "Sun Requirements": "Sun Requirements", - "Svg Icon": "Svg Icon", - "Swap axis minimum and maximum limit switches. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Swap axis minimum and maximum limit switches. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Swap jog buttons (and rotate map)": "Swap jog buttons (and rotate map)", - "Swap jog buttons: x and y axes": "Swap jog buttons: x and y axes", - "Swap limit switches": "Swap limit switches", - "Swap map X and Y axes, making the Y axis horizontal and X axis vertical. This setting will also swap the X and Y jog control buttons in the Move widget.": "Swap map X and Y axes, making the Y axis horizontal and X axis vertical. This setting will also swap the X and Y jog control buttons in the Move widget.", - "swap x and y axis jog buttons": "swap x and y axis jog buttons", - "Sync": "Sync", - "Sync error": "Sync error", - "SYNC ERROR": "SYNC ERROR", - "Sync LED": "Sync LED", - "SYNC NOW": "SYNC NOW", - "Sync unknown": "Sync unknown", - "Synced": "Synced", - "SYNCED": "SYNCED", - "SYNCING": "SYNCING", - "Syncing...": "Syncing...", - "System": "System", - "tablet": "tablet", - "Take a guided tour": "Take a guided tour", - "Take a photo": "Take a photo", - "Take a Tour": "Take a Tour", - "Take and view photos": "Take and view photos", - "Take photo": "Take photo", - "Target": "Target", - "Taxon": "Taxon", - "Temp": "Temp", - "Temporarily hidden": "Temporarily hidden", - "Terms of Use": "Terms of Use", - "text": "text", - "Text": "Text", - "Text {{ num }}": "Text {{ num }}", - "Thanks for taking the Getting Started Tour! You're now ready to dive into the details of each panel and begin planting your first garden with FarmBot. Check out our other tours for practical step-by-step help, and refer to our in-depth documentation in case you get stuck on anything.": "Thanks for taking the Getting Started Tour! You're now ready to dive into the details of each panel and begin planting your first garden with FarmBot. Check out our other tours for practical step-by-step help, and refer to our in-depth documentation in case you get stuck on anything.", - "Thanks for trying out the FarmBot web app! This is a great way to introduce yourself to building sequences, regimens, events, and designing a virtual garden.": "Thanks for trying out the FarmBot web app! This is a great way to introduce yourself to building sequences, regimens, events, and designing a virtual garden.", - "The **GANTRY HEIGHT** is the distance in millimeters between the bottom of FarmBot's tool head and the bottom of the gantry main beam when the Z-axis is fully raised. It is used to determine if a plant is too tall for the gantry to pass over it. (default: {{ distance }})": "The **GANTRY HEIGHT** is the distance in millimeters between the bottom of FarmBot's tool head and the bottom of the gantry main beam when the Z-axis is fully raised. It is used to determine if a plant is too tall for the gantry to pass over it. (default: {{ distance }})", - "The axis is not at the home position": "The axis is not at the home position", - "The axis length value looks incorrect": "The axis length value looks incorrect", - "The camera will capture images at the closest available resolution to the selected size. Changing image resolution requires recalibration of the camera. Higher quality images will take longer to process.": "The camera will capture images at the closest available resolution to the selected size. Changing image resolution requires recalibration of the camera. Higher quality images will take longer to process.", - "The Control Peripheral step instructs FarmBot to set the specified pin on the Arduino to the specified mode and value. Use the digital pin mode for on (1) and off (0) control, and analog pin mode for PWM (pulse width modulation) (0-255).": "The Control Peripheral step instructs FarmBot to set the specified pin on the Arduino to the specified mode and value. Use the digital pin mode for on (1) and off (0) control, and analog pin mode for PWM (pulse width modulation) (0-255).", - "The coordinate is not zero": "The coordinate is not zero", - "The Detect Weeds step takes a photo and detects any weeds in the area. Visit the Photos panel to view results or change parameters.": "The Detect Weeds step takes a photo and detects any weeds in the area. Visit the Photos panel to view results or change parameters.", - "The device has never been seen. Most likely, there is a network connectivity issue on the device's end.": "The device has never been seen. Most likely, there is a network connectivity issue on the device's end.", - "The FarmBot axis along which the calibration objects are aligned. (default: {{ defaultAxis }})": "The FarmBot axis along which the calibration objects are aligned. (default: {{ defaultAxis }})", - "The FarmBot web app is a powerful tool that allows you to control and configure your FarmBot in any way you want. To give you so much power, we've packed the app with a ton of settings, features, and pages, which can be a lot to understand. That's why we've created comprehensive written documentation and videos to teach you how to use everything.": "The FarmBot web app is a powerful tool that allows you to control and configure your FarmBot in any way you want. To give you so much power, we've packed the app with a ton of settings, features, and pages, which can be a lot to understand. That's why we've created comprehensive written documentation and videos to teach you how to use everything.", - "The FarmBot WiFi network isn't showing up": "The FarmBot WiFi network isn't showing up", - "The Farmware will use the parameter values set via the Farmware panel for any parameters that are not set in this sequence step.": "The Farmware will use the parameter values set via the Farmware panel for any parameters that are not set in this sequence step.", - "The Find Home step instructs the device to perform a homing command (using encoders, stall detection, or limit switches) to find and set home (zero) for the chosen axis or axes.": "The Find Home step instructs the device to perform a homing command (using encoders, stall detection, or limit switches) to find and set home (zero) for the chosen axis or axes.", - "The FIND LENGTH button is disabled": "The FIND LENGTH button is disabled", - "The firmware is missing": "The firmware is missing", - "The gantry attaches to aluminum tracks": "The gantry attaches to aluminum tracks", - "The gantry is set directly upon a raised bed": "The gantry is set directly upon a raised bed", - "The image appears flipped": "The image appears flipped", - "The image is black": "The image is black", - "The image is rotated": "The image is rotated", - "The map is rotated incorrectly": "The map is rotated incorrectly", - "The map origin is in a different corner": "The map origin is in a different corner", - "The Mark As step allows FarmBot to programmatically edit the properties of the UTM, plants, and weeds from within a sequence. For example, you can mark a plant as \"planted\" during a seeding sequence or mark a weed as \"removed\" after removing it.": "The Mark As step allows FarmBot to programmatically edit the properties of the UTM, plants, and weeds from within a sequence. For example, you can mark a plant as \"planted\" during a seeding sequence or mark a weed as \"removed\" after removing it.", - "The Measure Soil Height step takes a photo and detects the z-axis coordinate of the visible soil surface. Visit the Points panel to view results or visit the Farmware panel to change parameters.": "The Measure Soil Height step takes a photo and detects the z-axis coordinate of the visible soil surface. Visit the Points panel to view results or visit the Farmware panel to change parameters.", - "The motor is having trouble": "The motor is having trouble", - "The Move Relative step instructs FarmBot to move the specified distance from its current location. For example, if FarmBot is currently at X=1000, Y=1000 and it receives a Move Relative where X=0 and Y=3000, then FarmBot will move to X=1000, Y=4000. If FarmBot must move in multiple directions, it will move diagonally. If you require straight movements along one axis at a time, use multiple Move Relative steps. Move Relative steps should be preceded by a Move To step to ensure you are starting from a known location.": "The Move Relative step instructs FarmBot to move the specified distance from its current location. For example, if FarmBot is currently at X=1000, Y=1000 and it receives a Move Relative where X=0 and Y=3000, then FarmBot will move to X=1000, Y=4000. If FarmBot must move in multiple directions, it will move diagonally. If you require straight movements along one axis at a time, use multiple Move Relative steps. Move Relative steps should be preceded by a Move To step to ensure you are starting from a known location.", - "The Move step instructs FarmBot to move to the specified coordinate or distance from its current location.": "The Move step instructs FarmBot to move to the specified coordinate or distance from its current location.", - "The Move To step instructs FarmBot to move to the specified coordinate regardless of the current position. For example, if FarmBot is currently at X=1000, Y=1000 and it receives a Move To where X=0 and Y=3000, then FarmBot will move to X=0, Y=3000. If FarmBot must move in multiple directions, it will move diagonally. If you require straight movements along one axis at a time, use multiple Move To steps. Offsets allow you to more easily instruct FarmBot to move to a location, but offset from it by the specified amount. For example moving to just above where a peripheral is located. Using offsets lets FarmBot do the math for you.": "The Move To step instructs FarmBot to move to the specified coordinate regardless of the current position. For example, if FarmBot is currently at X=1000, Y=1000 and it receives a Move To where X=0 and Y=3000, then FarmBot will move to X=0, Y=3000. If FarmBot must move in multiple directions, it will move diagonally. If you require straight movements along one axis at a time, use multiple Move To steps. Offsets allow you to more easily instruct FarmBot to move to a location, but offset from it by the specified amount. For example moving to just above where a peripheral is located. Using offsets lets FarmBot do the math for you.", - "The next item in this event will run {{timeFromNow}}.": "The next item in this event will run {{timeFromNow}}.", - "The number of microsteps required to move the motor one step. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "The number of microsteps required to move the motor one step. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "The number of motor steps required to move the axis one millimeter. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "The number of motor steps required to move the axis one millimeter. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "The number of the pin to guard. This pin will be set to the specified state after the duration specified by TIMEOUT.": "The number of the pin to guard. This pin will be set to the specified state after the duration specified by TIMEOUT.", - "The number of the pin to report. Analog pin values will be reported every 500ms.": "The number of the pin to report. Analog pin values will be reported every 500ms.", - "The page won't load": "The page won't load", - "The pump is on, but there isn't any suction": "The pump is on, but there isn't any suction", - "The Read Sensor step instructs FarmBot to read the current value of the specified sensor or peripheral. Pin Mode: Use digital for a 0 (LOW) or 1 (HIGH) response, and analog for a voltage reading (0-1023 for 0-5V).": "The Read Sensor step instructs FarmBot to read the current value of the specified sensor or peripheral. Pin Mode: Use digital for a 0 (LOW) or 1 (HIGH) response, and analog for a voltage reading (0-1023 for 0-5V).", - "The Run Farmware step runs a Farmware package. Visit the Farmware panel to install and manage Farmware.": "The Run Farmware step runs a Farmware package. Visit the Farmware panel to install and manage Farmware.", - "The Send Message step instructs FarmBot to send a custom message to the logs (and toast message and/or email, if selected). This can help you with debugging your sequences.": "The Send Message step instructs FarmBot to send a custom message to the logs (and toast message and/or email, if selected). This can help you with debugging your sequences.", - "The status is 'disconnected'": "The status is 'disconnected'", - "The terms of service have recently changed. You must accept the new terms of service to continue using the site.": "The terms of service have recently changed. You must accept the new terms of service to continue using the site.", - "The tool currently mounted to the UTM can be set here or by using a MARK AS step in a sequence. Use the verify button or read the tool verification pin in a sequence to verify that a tool is attached.": "The tool currently mounted to the UTM can be set here or by using a MARK AS step in a sequence. Use the verify button or read the tool verification pin in a sequence to verify that a tool is attached.", - "The valve clicked, but there isn't any water": "The valve clicked, but there isn't any water", - "The Wait step instructs FarmBot to wait for the specified amount of time. Use it in combination with the Control Peripheral step to water for a length of time.": "The Wait step instructs FarmBot to wait for the specified amount of time. Use it in combination with the Control Peripheral step to water for a length of time.", - "The z-axis did not reach the hardstop": "The z-axis did not reach the hardstop", - "Then Execute": "Then Execute", - "Then try finding the axis length again.": "Then try finding the axis length again.", - "There is a 'camera not detected' or 'problem getting image' error log": "There is a 'camera not detected' or 'problem getting image' error log", - "There is a detection error log": "There is a detection error log", - "There is a surface error message": "There is a surface error message", - "There is an axis error log": "There is an axis error log", - "There is no 'Find Home' sequence": "There is no 'Find Home' sequence", - "There is no access to FarmBot or the message broker. This is usually caused by outdated browsers (Internet Explorer) or firewalls that block WebSockets on port 3002.": "There is no access to FarmBot or the message broker. This is usually caused by outdated browsers (Internet Explorer) or firewalls that block WebSockets on port 3002.", - "There is no image": "There is no image", - "There is no power": "There is no power", - "There is no value": "There is no value", - "There was an error": "There was an error", - "These are the most basic commands FarmBot can execute. Drag and drop them to create sequences for watering, planting seeds, measuring soil properties, and more.": "These are the most basic commands FarmBot can execute. Drag and drop them to create sequences for watering, planting seeds, measuring soil properties, and more.", - "This command will not execute correctly because you do not have encoders, stall detection, or limit switches enabled for the chosen axis. Enable limit switches, encoders, or stall detection from the Settings panel for: ": "This command will not execute correctly because you do not have encoders, stall detection, or limit switches enabled for the chosen axis. Enable limit switches, encoders, or stall detection from the Settings panel for: ", - "This computer": "This computer", - "This is the account menu, providing you with links to other pages in the app, and for logging out.": "This is the account menu, providing you with links to other pages in the app, and for logging out.", - "This is the connectivity popup. Click it to view information about the connection between your web browser, your FarmBot, and the FarmBot web app servers. Whenever your FarmBot is online and ready for action, you will see a green checkmark.": "This is the connectivity popup. Click it to view information about the connection between your web browser, your FarmBot, and the FarmBot web app servers. Whenever your FarmBot is online and ready for action, you will see a green checkmark.", - "This is the controls panel. Here you can control your FarmBot in realtime by pressing the movement arrow buttons, toggling peripherals, and executing pinned sequences. You can also view current status information about your FarmBot including its position and an optional webcam stream.": "This is the controls panel. Here you can control your FarmBot in realtime by pressing the movement arrow buttons, toggling peripherals, and executing pinned sequences. You can also view current status information about your FarmBot including its position and an optional webcam stream.", - "This is the crop details panel. Here you can view factual information about the chosen crop such as the expected spread and height at maturity. Proceed to the next step of the tour to learn how to add the crop to your garden.": "This is the crop details panel. Here you can view factual information about the chosen crop such as the expected spread and height at maturity. Proceed to the next step of the tour to learn how to add the crop to your garden.", - "This is the crop search panel. Type in a crop name to the search field, for example \"Spinach\". We recommend trying generic crop names rather than specific varietals. Select the best search result and then advance the tour.": "This is the crop search panel. Type in a crop name to the search field, for example \"Spinach\". We recommend trying generic crop names rather than specific varietals. Select the best search result and then advance the tour.", - "This is the current position indicator. FarmBot's current X, Y, and Z coordinates in millimeters are displayed for quick viewing from any page in the web app.": "This is the current position indicator. FarmBot's current X, Y, and Z coordinates in millimeters are displayed for quick viewing from any page in the web app.", - "This is the E-STOP button, allowing you to emergency stop any movements and turn off all of FarmBot's peripherals in case something is going wrong. After E-STOPPING FarmBot, you will need to click the same button to UNLOCK the device before resuming execution of any commands.": "This is the E-STOP button, allowing you to emergency stop any movements and turn off all of FarmBot's peripherals in case something is going wrong. After E-STOPPING FarmBot, you will need to click the same button to UNLOCK the device before resuming execution of any commands.", - "This is the edit group panel. To make a group of all plants of one crop type, select the crop type you would like to include. Check that the correct plants are listed in the Group Members section, then advance the tour.": "This is the edit group panel. To make a group of all plants of one crop type, select the crop type you would like to include. Check that the correct plants are listed in the Group Members section, then advance the tour.", - "This is the edit slot panel where you will let FarmBot know the exact X, Y, and Z coordinates it must travel to when mounting and dismounting tools or picking up seeds from a seed container. Advance the tour to figure out the coordinates for this first slot.": "This is the edit slot panel where you will let FarmBot know the exact X, Y, and Z coordinates it must travel to when mounting and dismounting tools or picking up seeds from a seed container. Advance the tour to figure out the coordinates for this first slot.", - "This is the events panel. Here you can view and manage all of your scheduled sequences and regimens. Clicking an event will open up the event details panel where you can edit it. Pressing the + button will create a new event.": "This is the events panel. Here you can view and manage all of your scheduled sequences and regimens. Clicking an event will open up the event details panel where you can edit it. Pressing the + button will create a new event.", - "This is the groups section. Here you can create and manage groups of plants based on any criteria. Clicking a group will open up the group details panel where you can make edits. Pressing the group + button will create a new group.": "This is the groups section. Here you can create and manage groups of plants based on any criteria. Clicking a group will open up the group details panel where you can make edits. Pressing the group + button will create a new group.", - "This is the help panel. Here you can browse the documentation or get support if you need it. Switch between documentation hubs and the other help resources using the dropdown at the top of the panel.": "This is the help panel. Here you can browse the documentation or get support if you need it. Switch between documentation hubs and the other help resources using the dropdown at the top of the panel.", - "This is the message center. Here you can view and manage setup cards and announcements. Dismiss items you are finished with by pressing the X in the top right of a card. Check back often for new feature announcements and important information about your FarmBot.": "This is the message center. Here you can view and manage setup cards and announcements. Dismiss items you are finished with by pressing the X in the top right of a card. Check back often for new feature announcements and important information about your FarmBot.", - "This is the photos panel. Here you can view and manage all of the photos of your garden. Additionally, here is where you can calibrate FarmBot's camera and weed detection settings to fine tune the performance for your lighting conditions and soil type.": "This is the photos panel. Here you can view and manage all of the photos of your garden. Additionally, here is where you can calibrate FarmBot's camera and weed detection settings to fine tune the performance for your lighting conditions and soil type.", - "This is the plant details panel. Here you can view and edit a plant's coordinates and status, or delete it entirely.": "This is the plant details panel. Here you can view and edit a plant's coordinates and status, or delete it entirely.", - "This is the plants panel. Here you can view and manage all of the plants in your garden. Mousing over a plant in the list will highlight it in the map and vice versa. Clicking a plant will open up the plant details panel where you can edit it. Pressing the plant + button will allow you to search for and add new crops to your garden.": "This is the plants panel. Here you can view and manage all of the plants in your garden. Mousing over a plant in the list will highlight it in the map and vice versa. Clicking a plant will open up the plant details panel where you can edit it. Pressing the plant + button will allow you to search for and add new crops to your garden.", - "This is the plants panel. Once you add plants to your garden, they will be listed here for you to view and manage. To add a plant to your garden, press the plant + button and then advance the tour.": "This is the plants panel. Once you add plants to your garden, they will be listed here for you to view and manage. To add a plant to your garden, press the plant + button and then advance the tour.", - "This is the points panel. Here you can view and manage all of the points in your garden, including measured soil height points. Mousing over a point in the list will highlight it in the map and vice versa. Clicking a point will open up the point details panel where you can edit it. Pressing the point + button will allow you to add a point or a grid of points to the map.": "This is the points panel. Here you can view and manage all of the points in your garden, including measured soil height points. Mousing over a point in the list will highlight it in the map and vice versa. Clicking a point will open up the point details panel where you can edit it. Pressing the point + button will allow you to add a point or a grid of points to the map.", - "This is the regimens panel. Here you can view and manage all of your regimens which allow you to bulk schedule sequences based on the age of a plant. Clicking a regimen will open up the regimen editor panel where you can edit it. Pressing the + button will create a new regimen.": "This is the regimens panel. Here you can view and manage all of your regimens which allow you to bulk schedule sequences based on the age of a plant. Clicking a regimen will open up the regimen editor panel where you can edit it. Pressing the + button will create a new regimen.", - "This is the sequences panel. Here you can view and manage all of your sequences. Clicking a sequence will open up the sequence editor panel where you can edit it. Pressing the + button will create a new sequence.": "This is the sequences panel. Here you can view and manage all of your sequences. Clicking a sequence will open up the sequence editor panel where you can edit it. Pressing the + button will create a new sequence.", - "This is the settings panel. Here you can view and manage all of your FarmBot and account settings. Refer to the tooltips and documentation for information about each setting.": "This is the settings panel. Here you can view and manage all of your FarmBot and account settings. Refer to the tooltips and documentation for information about each setting.", - "This is the tools panel. Here you can add, edit, and view your FarmBot's tools and seed containers as well the slots they are loaded into. Mousing over a slot will highlight it in the map and vice versa. We've already added all of the items included with your FarmBot kit. Your job now is to input the exact location of the slots corresponding to where you installed them in real life. Click the first slot in the list and then advance the tour.": "This is the tools panel. Here you can add, edit, and view your FarmBot's tools and seed containers as well the slots they are loaded into. Mousing over a slot will highlight it in the map and vice versa. We've already added all of the items included with your FarmBot kit. Your job now is to input the exact location of the slots corresponding to where you installed them in real life. Click the first slot in the list and then advance the tour.", - "This is the tools panel. Here you can view and manage all of the tools, seed containers, and slots in your garden. Clicking an item will open up the details panel where you can edit it. Pressing the + buttons will allow you to add new items.": "This is the tools panel. Here you can view and manage all of the tools, seed containers, and slots in your garden. Clicking an item will open up the details panel where you can edit it. Pressing the + buttons will allow you to add new items.", - "This is the weeds panel. Here you can view and manage all of the weeds in your garden. Mousing over a weed in the list will highlight it in the map and vice versa. Newly detected weeds will appear in the PENDING category, which you must periodically approve to be listed in the ACTIVE category. Once a weed has been dealt with by FarmBot, it can be moved to the REMOVED category with a Mark As sequence command. Clicking a weed will open up the weed details panel where you can manually edit it.": "This is the weeds panel. Here you can view and manage all of the weeds in your garden. Mousing over a weed in the list will highlight it in the map and vice versa. Newly detected weeds will appear in the PENDING category, which you must periodically approve to be listed in the ACTIVE category. Once a weed has been dealt with by FarmBot, it can be moved to the REMOVED category with a Mark As sequence command. Clicking a weed will open up the weed details panel where you can manually edit it.", - "This page has moved. Redirecting...": "This page has moved. Redirecting...", - "This phone": "This phone", - "this photo": "this photo", - "this photo from map": "this photo from map", - "this photo in map": "this photo in map", - "This sequence has no description.": "This sequence has no description.", - "This sequence includes deprecated steps.": "This sequence includes deprecated steps.", - "This sequence is pinned.": "This sequence is pinned.", - "This sequence is published at the following link": "This sequence is published at the following link", - "this sequence was imported": "this sequence was imported", - "This sequence was imported from a publicly shared sequence. If the original author publishes a new version, you may upgrade your copy. Upgrading will overwrite your copy with the contents of the new version. It is recommended you check your FarmBot continues operating as expected after any upgrades.": "This sequence was imported from a publicly shared sequence. If the original author publishes a new version, you may upgrade your copy. Upgrading will overwrite your copy with the contents of the new version. It is recommended you check your FarmBot continues operating as expected after any upgrades.", - "This step executes the sequence that contains it, which may cause an infinite loop.": "This step executes the sequence that contains it, which may cause an infinite loop.", - "This variable is currently being used and cannot be deleted.": "This variable is currently being used and cannot be deleted.", - "This will restart FarmBot's Raspberry Pi and controller software.": "This will restart FarmBot's Raspberry Pi and controller software.", - "This will shutdown FarmBot's Raspberry Pi. To turn it back on, unplug FarmBot and plug it back in.": "This will shutdown FarmBot's Raspberry Pi. To turn it back on, unplug FarmBot and plug it back in.", - "Ticker Notification": "Ticker Notification", - "Time is not properly formatted.": "Time is not properly formatted.", - "Time period": "Time period", - "time zone": "time zone", - "Timeout (sec)": "Timeout (sec)", - "Timeout after (seconds)": "Timeout after (seconds)", - "timezone": "timezone", - "Tip: Use dot notation (i.e., 'meta.color') to access meta fields.": "Tip: Use dot notation (i.e., 'meta.color') to access meta fields.", - "to": "to", - "To add a grid or row of plants, scroll to the bottom of the panel, enter values into the grid and row planting fields and click PREVIEW. The previewed plants will show in the map in grayscale. Make adjustments as necessary and when you are happy with the preview, click SAVE. Then advance the tour.": "To add a grid or row of plants, scroll to the bottom of the panel, enter values into the grid and row planting fields and click PREVIEW. The previewed plants will show in the map in grayscale. Make adjustments as necessary and when you are happy with the preview, click SAVE. Then advance the tour.", - "to add the plant to the map. Alternatively, you can plant a grid using the form below.": "to add the plant to the map. Alternatively, you can plant a grid using the form below.", - "To calculate **WATER FLOW RATE**, hold a measuring cup below the watering nozzle and click the **RUN WATER FOR 5 SECONDS** button. Measure how much water FarmBot dispensed in milliliters (mL) and then divide this number by 5. Enter the result in the field.": "To calculate **WATER FLOW RATE**, hold a measuring cup below the watering nozzle and click the **RUN WATER FOR 5 SECONDS** button. Measure how much water FarmBot dispensed in milliliters (mL) and then divide this number by 5. Enter the result in the field.", - "To finish setting up your account and FarmBot, please select which FarmBot you have. Once you make a selection, we'll automatically add some tools, sensors, peripherals, sequences, and more to get you up and running faster. If you want to start completely from scratch, feel free to select \"Custom bot\" and we won't change a thing.": "To finish setting up your account and FarmBot, please select which FarmBot you have. Once you make a selection, we'll automatically add some tools, sensors, peripherals, sequences, and more to get you up and running faster. If you want to start completely from scratch, feel free to select \"Custom bot\" and we won't change a thing.", - "to get started": "to get started", - "to get started or click the": "to get started or click the", - "To prepare for camera calibration, move the z-axis all the way up.": "To prepare for camera calibration, move the z-axis all the way up.", - "To State": "To State", - "Toast Pop Up": "Toast Pop Up", - "toggle": "toggle", - "Toggle a digital pin on or off.": "Toggle a digital pin on or off.", - "toggle advanced view": "toggle advanced view", - "toggle beeps": "toggle beeps", - "toggle celery script view": "toggle celery script view", - "toggle code view": "toggle code view", - "Toggle crop": "Toggle crop", - "toggle editor view": "toggle editor view", - "toggle fancy editor": "toggle fancy editor", - "toggle folder open": "toggle folder open", - "toggle logs": "toggle logs", - "toggle packing method": "toggle packing method", - "Toggle peripheral": "Toggle peripheral", - "Toggle Peripheral": "Toggle Peripheral", - "Toggle rotation": "Toggle rotation", - "toggle safe z": "toggle safe z", - "toggle settings open": "toggle settings open", - "too weak": "too weak", - "Tool Mount": "Tool Mount", - "Tool or Seed Container": "Tool or Seed Container", - "Tool Verification": "Tool Verification", - "Tools": "Tools", - "tools and seed containers": "tools and seed containers", - "top": "top", - "Top Left": "Top Left", - "Top Right": "Top Right", - "Total number of times to retry calibration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Total number of times to retry calibration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Tours": "Tours", - "TOURS": "TOURS", - "Trail": "Trail", - "Travel in millimeters for stall detection to ignore during acceleration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Travel in millimeters for stall detection to ignore during acceleration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "true": "true", - "Try a different Raspberry Pi USB power cable.": "Try a different Raspberry Pi USB power cable.", - "Try again while observing the log messages.": "Try again while observing the log messages.", - "Try an alternate calibration method. Two red objects spaced 100mm apart can be used in place of the card.": "Try an alternate calibration method. Two red objects spaced 100mm apart can be used in place of the card.", - "Try disabling cellular data or connecting with a different device.": "Try disabling cellular data or connecting with a different device.", - "Try navigating to ": "Try navigating to ", - "Try using the FIND HOME button a few more times. If FarmBot is still unable to reach the home position, check the hardware for resistance. You may also move FarmBot's {{ axis }}-axis with the controls or manually until the plates hit the hardstop. Then open the ... menu and click SET HOME.": "Try using the FIND HOME button a few more times. If FarmBot is still unable to reach the home position, check the hardware for resistance. You may also move FarmBot's {{ axis }}-axis with the controls or manually until the plates hit the hardstop. Then open the ... menu and click SET HOME.", - "Try waiting three minutes from power on. Check the Raspberry Pi power LED. Check that the SD is fully inserted. Try downloading a new FarmBot OS image, ensuring that the device model is correct. Try re-flashing the SD card via Etcher. If possible, ensure line-of-sight between devices when trying to connect.": "Try waiting three minutes from power on. Check the Raspberry Pi power LED. Check that the SD is fully inserted. Try downloading a new FarmBot OS image, ensuring that the device model is correct. Try re-flashing the SD card via Etcher. If possible, ensure line-of-sight between devices when trying to connect.", - "ttyACM0 (recommended for Genesis)": "ttyACM0 (recommended for Genesis)", - "ttyAMA0 (recommended for Express v1.0)": "ttyAMA0 (recommended for Express v1.0)", - "ttyUSB0 (recommended for Express v1.1)": "ttyUSB0 (recommended for Express v1.1)", - "Turn off to set Web App to English.": "Turn off to set Web App to English.", - "type": "type", - "Type": "Type", - "Type filtered": "Type filtered", - "Type not filtered": "Type not filtered", - "Unable to connect to FarmBot. Please reconnect FarmBot to continue.": "Unable to connect to FarmBot. Please reconnect FarmBot to continue.", - "Unable to load content.": "Unable to load content.", - "Unable to load webcam feed.": "Unable to load webcam feed.", - "Unable to properly display this step.": "Unable to properly display this step.", - "Unable to resend verification email. Are you already verified?": "Unable to resend verification email. Are you already verified?", - "Unable to save changes.": "Unable to save changes.", - "Unable to save event.": "Unable to save event.", - "Unavailable": "Unavailable", - "uncategorized": "uncategorized", - "Uncropped Camera view": "Uncropped Camera view", - "Unexpected error occurred, we've been notified of the problem.": "Unexpected error occurred, we've been notified of the problem.", - "unknown": "unknown", - "Unknown": "Unknown", - "UNKNOWN": "UNKNOWN", - "unknown (offline)": "unknown (offline)", - "Unknown Farmware": "Unknown Farmware", - "Unknown problem of priority {{priority}} ({{slug}}).": "Unknown problem of priority {{priority}} ({{slug}}).", - "Unknown tool": "Unknown tool", - "Unknown.": "Unknown.", - "UNLOCK": "UNLOCK", - "Unlock button": "Unlock button", - "unlock device": "unlock device", - "Unlocking a device requires user intervention.": "Unlocking a device requires user intervention.", - "Unnamed": "Unnamed", - "unpin sequence": "unpin sequence", - "Unpublish error": "Unpublish error", - "Unpublishing": "Unpublishing", - "Untitled Group": "Untitled Group", - "Untitled point": "Untitled point", - "Untitled tool": "Untitled tool", - "Untitled weed": "Untitled weed", - "Untitled Zone": "Untitled Zone", - "unvisualize": "unvisualize", - "Update": "Update", - "Update color to": "Update color to", - "Update depth to": "Update depth to", - "update Farmware": "update Farmware", - "Update Farmware": "Update Farmware", - "Update radius to": "Update radius to", - "Update start to": "Update start to", - "Update status to": "Update status to", - "update time": "update time", - "UPDATE TO": "UPDATE TO", - "update to FarmBot's value": "update to FarmBot's value", - "Update type to": "Update type to", - "Upgrade error": "Upgrade error", - "upgrade FarmBot OS": "upgrade FarmBot OS", - "upgrade your copy to this version": "upgrade your copy to this version", - "Upgrading their copy to other published versions": "Upgrading their copy to other published versions", - "uploading photo": "uploading photo", - "Upon successful password change, your FarmBot will soft reset allowing you to configure it with the updated credentials. You will also be logged out of other browser sessions. Continue?": "Upon successful password change, your FarmBot will soft reset allowing you to configure it with the updated credentials. You will also be logged out of other browser sessions. Continue?", - "Uptime": "Uptime", - "USB Camera": "USB Camera", - "Use 24-hour time format": "Use 24-hour time format", - "use alternative method": "use alternative method", - "use average soil height": "use average soil height", - "use average z: {{ value }}": "use average z: {{ value }}", - "use current location": "use current location", - "Use current location": "Use current location", - "Use Encoders for Positioning": "Use Encoders for Positioning", - "Use the encoders for calculating movements in addition to using encoders for stall detection. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "Use the encoders for calculating movements in addition to using encoders for stall detection. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Use the manual controls to move FarmBot along the full length of the X-axis in both directions.": "Use the manual controls to move FarmBot along the full length of the X-axis in both directions.", - "Use the manual controls to move FarmBot along the full length of the Y-axis in both directions.": "Use the manual controls to move FarmBot along the full length of the Y-axis in both directions.", - "Use the manual controls to move FarmBot along the full length of the Z-axis in both directions.": "Use the manual controls to move FarmBot along the full length of the Z-axis in both directions.", - "Use these manual control buttons to move FarmBot in realtime. Press the arrows for relative movements or type in new coordinates and press GO for an absolute movement. Tip: Press the Home button when you are done so FarmBot is ready to get back to work.": "Use these manual control buttons to move FarmBot in realtime. Press the arrows for relative movements or type in new coordinates and press GO for an absolute movement. Tip: Press the Home button when you are done so FarmBot is ready to get back to work.", - "Use these toggle switches to control FarmBot's peripherals in realtime. To edit and create new peripherals, press the EDIT button. Make sure to turn things off when you're done!": "Use these toggle switches to control FarmBot's peripherals in realtime. To edit and create new peripherals, press the EDIT button. Make sure to turn things off when you're done!", - "Used in another resource. Protected from deletion.": "Used in another resource. Protected from deletion.", - "User Interface Read Only Mode": "User Interface Read Only Mode", - "Using a demo account": "Using a demo account", - "Using another device, search for and connect to the \\": "Using another device, search for and connect to the \\", - "Using another device, search for and connect to the `farmbot-xxxx` WiFi network": "Using another device, search for and connect to the `farmbot-xxxx` WiFi network", - "Using the manual controls, instruct FarmBot to move towards the seed trough. As you get closer, change the MOVE AMOUNT to a smaller value for finer movements. Your goal is to position the needle just above the trough and then descend down into it until the tip of the needle is 3 to 5mm from the bottom of the trough. Click the blue button next to the slot's X, Y, and Z fields to save FarmBot's current position to the slot.": "Using the manual controls, instruct FarmBot to move towards the seed trough. As you get closer, change the MOVE AMOUNT to a smaller value for finer movements. Your goal is to position the needle just above the trough and then descend down into it until the tip of the needle is 3 to 5mm from the bottom of the trough. Click the blue button next to the slot's X, Y, and Z fields to save FarmBot's current position to the slot.", - "Using the manual controls, instruct FarmBot to move towards the tool and slot. As you get closer, change the MOVE AMOUNT to a smaller value for finer movements. Your goal is to position the UTM just above the tool and then descend down onto it (mounting it). Once the UTM has mounted the tool, click the blue button next to the slot's X, Y, and Z fields to save FarmBot's current position to the slot.": "Using the manual controls, instruct FarmBot to move towards the tool and slot. As you get closer, change the MOVE AMOUNT to a smaller value for finer movements. Your goal is to position the UTM just above the tool and then descend down onto it (mounting it). Once the UTM has mounted the tool, click the blue button next to the slot's X, Y, and Z fields to save FarmBot's current position to the slot.", + "soil": "土壤", + "Soil": "土壤", + "Soil height": "土壤高度", + "Soil Height": "土壤高度", + "soil height at plant location": "植物位置的土壤高度", + "Soil Height Detector": "土壤高度检测器", + "Soil height measurement": "土壤高度测量", + "Soil height measurements": "土壤高度测量", + "Soil Moisture": "土壤湿度", + "Soil sensor": "土壤传感器", + "Soil Sensor": "土壤传感器", + "Soil sensor reading": "土壤传感器读数", + "Solenoid valve": "电磁阀", + "Some {{points}} failed to delete.": "一些{{points}}删除失败。", + "Some other issue is preventing FarmBot from working. Please see the table above for more information.": "其他一些问题阻止了FarmBot的工作。请参阅上表以获取更多信息。", + "Something else happened and I need additional help": "发生了其他问题,我需要额外的帮助", + "Something went wrong while rendering this page.": "渲染此页面时出了点问题。", + "Sorry, that feature is unavailable in demo accounts.": "抱歉,该功能在演示账户中不可用。", + "sort by": "排序依据", + "Sort by": "排序依据", + "SORT BY": "排序依据", + "Source": "来源", + "Sowing Method": "播种方法", + "Spacing (MM)": "间距(毫米)", + "Speak": "说话", + "Specify custom map dimensions (in millimeters). These values set the size of the garden map unless DYNAMIC MAP SIZE is enabled.": "指定自定义地图尺寸(以毫米为单位)。这些值设置花园地图的大小,除非启用动态地图大小。", + "Speed (%)": "速度(%)", + "Spread": "扩展", + "Sprouted": "发芽", + "stable": "稳定", + "Stage": "阶段", + "Stall Detection": "停滞检测", + "Stall Detection note": "停滞检测说明", + "Stall Sensitivity": "停滞灵敏度", + "Standard support": "标准支持", + "Standing from where you will normally view the FarmBot, **press the right arrow button**.": "站在通常查看FarmBot的位置,**按下右箭头按钮**。", + "Standing from where you will normally view the FarmBot, **press the up arrow button**.": "站在通常查看FarmBot的位置,**按下上箭头按钮**。", + "Standing from where you will normally view the FarmBot, **press the z-axis down arrow button**.": "站在通常查看FarmBot的位置,**按下Z轴下箭头按钮**。", + "start over": "重新开始", + "Start time and date must be in the future.": "开始时间和日期必须在未来。", + "Start tour": "开始导览", + "Starting X": "起始X", + "starting Y": "起始Y", + "status": "状态", + "Status": "状态", + "Steps": "步骤", + "stereo inputs": "立体声输入", + "Stock": "库存", + "Stock Bindings": "库存绑定", + "stock names": "库存名称", + "Stock pin bindings": "库存引脚绑定", + "Stock sensors": "库存传感器", + "Stop at Home": "停止在原点", + "Stop at Max": "停止在最大值", + "Stop at the home (zero) location of the axis. If enabled, moving past zero is disallowed. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "在轴的原点(零)位置停止。如果启用,则不允许超过零。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Stops a device from moving until it is unlocked by a user.": "在用户解锁之前,停止设备移动。", + "strings": "字符串", + "submit": "提交", + "submitted": "已提交", + "Success": "成功", + "Sun Requirements": "阳光需求", + "Svg Icon": "Svg 图标", + "Swap axis minimum and maximum limit switches. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "交换轴的最小和最大限位开关。(默认值: x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Swap jog buttons (and rotate map)": "交换点动按钮(并旋转地图)", + "Swap jog buttons: x and y axes": "交换点动按钮:x轴和y轴", + "Swap limit switches": "交换限位开关", + "Swap map X and Y axes, making the Y axis horizontal and X axis vertical. This setting will also swap the X and Y jog control buttons in the Move widget.": "交换地图的X轴和Y轴,使Y轴水平,X轴垂直。此设置还将交换移动小部件中的X和Y点动控制按钮。", + "swap x and y axis jog buttons": "交换x轴和y轴点动按钮", + "Sync": "同步", + "Sync error": "同步错误", + "SYNC ERROR": "同步错误", + "Sync LED": "同步LED", + "SYNC NOW": "立即同步", + "Sync unknown": "同步未知", + "Synced": "已同步", + "SYNCED": "已同步", + "SYNCING": "正在同步", + "Syncing...": "正在同步...", + "System": "系统", + "tablet": "平板电脑", + "Take a guided tour": "进行引导游览", + "Take a photo": "拍照", + "Take a Tour": "进行游览", + "Take and view photos": "拍摄并查看照片", + "Take photo": "拍照", + "Target": "目标", + "Taxon": "分类单元", + "Temp": "温度", + "Temporarily hidden": "暂时隐藏", + "Terms of Use": "使用条款", + "text": "文本", + "Text": "文本", + "Text {{ num }}": "文本 {{ num }}", + "Thanks for taking the Getting Started Tour! You're now ready to dive into the details of each panel and begin planting your first garden with FarmBot. Check out our other tours for practical step-by-step help, and refer to our in-depth documentation in case you get stuck on anything.": "感谢参加入门游览!您现在可以深入了解每个面板的细节,并开始使用FarmBot种植您的第一个花园。查看我们的其他游览以获取实用的逐步帮助,并在遇到问题时参考我们的深入文档。", + "Thanks for trying out the FarmBot web app! This is a great way to introduce yourself to building sequences, regimens, events, and designing a virtual garden.": "感谢您试用FarmBot网络应用程序!这是介绍自己构建序列、方案、事件和设计虚拟花园的好方法。", + "The **GANTRY HEIGHT** is the distance in millimeters between the bottom of FarmBot's tool head and the bottom of the gantry main beam when the Z-axis is fully raised. It is used to determine if a plant is too tall for the gantry to pass over it. (default: {{ distance }})": "**龙门高度**是指当Z轴完全升起时,FarmBot工具头底部与龙门主梁底部之间的距离(以毫米为单位)。它用于确定植物是否过高,龙门无法通过。(默认值: {{ distance }})", + "The axis is not at the home position": "轴不在原点位置", + "The axis length value looks incorrect": "轴长度值看起来不正确", + "The camera will capture images at the closest available resolution to the selected size. Changing image resolution requires recalibration of the camera. Higher quality images will take longer to process.": "相机将以最接近所选大小的可用分辨率捕捉图像。更改图像分辨率需要重新校准相机。高质量图像需要更长时间处理。", + "The Control Peripheral step instructs FarmBot to set the specified pin on the Arduino to the specified mode and value. Use the digital pin mode for on (1) and off (0) control, and analog pin mode for PWM (pulse width modulation) (0-255).": "控制外设步骤指示FarmBot将Arduino上的指定引脚设置为指定模式和值。使用数字引脚模式进行开(1)和关(0)控制,使用模拟引脚模式进行PWM(脉宽调制)(0-255)控制。", + "The coordinate is not zero": "坐标不是零", + "The Detect Weeds step takes a photo and detects any weeds in the area. Visit the Photos panel to view results or change parameters.": "检测杂草步骤拍摄照片并检测区域内的任何杂草。访问照片面板查看结果或更改参数。", + "The device has never been seen. Most likely, there is a network connectivity issue on the device's end.": "设备从未见过。很可能是设备端存在网络连接问题。", + "The FarmBot axis along which the calibration objects are aligned. (default: {{ defaultAxis }})": "校准对象对齐的FarmBot轴。(默认值: {{ defaultAxis }})", + "The FarmBot web app is a powerful tool that allows you to control and configure your FarmBot in any way you want. To give you so much power, we've packed the app with a ton of settings, features, and pages, which can be a lot to understand. That's why we've created comprehensive written documentation and videos to teach you how to use everything.": "FarmBot网络应用程序是一个强大的工具,可让您以任何方式控制和配置您的FarmBot。为了给您如此多的功能,我们在应用程序中包含了大量设置、功能和页面,这可能需要大量理解。这就是为什么我们创建了全面的书面文档和视频来教您如何使用一切。", + "The FarmBot WiFi network isn't showing up": "FarmBot WiFi网络没有显示", + "The Farmware will use the parameter values set via the Farmware panel for any parameters that are not set in this sequence step.": "Farmware将使用通过Farmware面板设置的参数值,适用于在此序列步骤中未设置的任何参数。", + "The Find Home step instructs the device to perform a homing command (using encoders, stall detection, or limit switches) to find and set home (zero) for the chosen axis or axes.": "寻找原点步骤指示设备执行归零命令(使用编码器、停滞检测或限位开关)以找到并设置所选轴的原点(零)。", + "The FIND LENGTH button is disabled": "FIND LENGTH按钮被禁用", + "The firmware is missing": "固件丢失", + "The gantry attaches to aluminum tracks": "龙门架连接到铝轨道上", + "The gantry is set directly upon a raised bed": "龙门架直接设置在高架床上", + "The image appears flipped": "图像看起来是翻转的", + "The image is black": "图像是黑的", + "The image is rotated": "图像被旋转了", + "The map is rotated incorrectly": "地图旋转不正确", + "The map origin is in a different corner": "地图原点在另一个角落", + "The Mark As step allows FarmBot to programmatically edit the properties of the UTM, plants, and weeds from within a sequence. For example, you can mark a plant as \"planted\" during a seeding sequence or mark a weed as \"removed\" after removing it.": "“标记为”步骤允许FarmBot在序列中以编程方式编辑UTM、植物和杂草的属性。例如,您可以在播种序列中将植物标记为“已种植”或在移除杂草后将杂草标记为“已移除”。", + "The Measure Soil Height step takes a photo and detects the z-axis coordinate of the visible soil surface. Visit the Points panel to view results or visit the Farmware panel to change parameters.": "“测量土壤高度”步骤拍摄一张照片并检测可见土壤表面的z轴坐标。访问“点”面板查看结果或访问“农具”面板更改参数。", + "The motor is having trouble": "电机出现问题", + "The Move Relative step instructs FarmBot to move the specified distance from its current location. For example, if FarmBot is currently at X=1000, Y=1000 and it receives a Move Relative where X=0 and Y=3000, then FarmBot will move to X=1000, Y=4000. If FarmBot must move in multiple directions, it will move diagonally. If you require straight movements along one axis at a time, use multiple Move Relative steps. Move Relative steps should be preceded by a Move To step to ensure you are starting from a known location.": "“相对移动”步骤指示FarmBot从当前位置移动指定距离。例如,如果FarmBot当前在X=1000,Y=1000并且接收到一个X=0,Y=3000的“相对移动”指令,那么FarmBot将移动到X=1000,Y=4000。如果FarmBot必须同时在多个方向移动,它将沿对角线移动。如果您需要沿一个轴一次直线移动,请使用多个“相对移动”步骤。“相对移动”步骤应在“移动到”步骤之后,以确保从已知位置开始。", + "The Move step instructs FarmBot to move to the specified coordinate or distance from its current location.": "“移动”步骤指示FarmBot移动到指定坐标或从当前位置移动指定距离。", + "The Move To step instructs FarmBot to move to the specified coordinate regardless of the current position. For example, if FarmBot is currently at X=1000, Y=1000 and it receives a Move To where X=0 and Y=3000, then FarmBot will move to X=0, Y=3000. If FarmBot must move in multiple directions, it will move diagonally. If you require straight movements along one axis at a time, use multiple Move To steps. Offsets allow you to more easily instruct FarmBot to move to a location, but offset from it by the specified amount. For example moving to just above where a peripheral is located. Using offsets lets FarmBot do the math for you.": "“移动到”步骤指示FarmBot移动到指定坐标,无论当前位置如何。例如,如果FarmBot当前在X=1000,Y=1000并且接收到一个X=0,Y=3000的“移动到”指令,那么FarmBot将移动到X=0,Y=3000。如果FarmBot必须同时在多个方向移动,它将沿对角线移动。如果您需要沿一个轴一次直线移动,请使用多个“移动到”步骤。偏移量允许您更轻松地指示FarmBot移动到一个位置,但按指定数量偏移。例如,移动到外设所在位置的正上方。使用偏移量让FarmBot为您计算。", + "The next item in this event will run {{timeFromNow}}.": "此事件中的下一项将在{{timeFromNow}}运行。", + "The number of microsteps required to move the motor one step. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "移动电机一步所需的微步数。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "The number of motor steps required to move the axis one millimeter. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "移动轴一毫米所需的电机步数。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "The number of the pin to guard. This pin will be set to the specified state after the duration specified by TIMEOUT.": "要保护的针脚编号。在TIMEOUT指定的时间后,此针脚将被设置为指定状态。", + "The number of the pin to report. Analog pin values will be reported every 500ms.": "要报告的针脚编号。模拟针脚值将每500毫秒报告一次。", + "The page won't load": "页面无法加载", + "The pump is on, but there isn't any suction": "泵开着,但没有吸力", + "The Read Sensor step instructs FarmBot to read the current value of the specified sensor or peripheral. Pin Mode: Use digital for a 0 (LOW) or 1 (HIGH) response, and analog for a voltage reading (0-1023 for 0-5V).": "“读取传感器”步骤指示FarmBot读取指定传感器或外设的当前值。针脚模式:使用数字模式获得0(低)或1(高)响应,使用模拟模式获得电压读数(0-1023对应0-5V)。", + "The Run Farmware step runs a Farmware package. Visit the Farmware panel to install and manage Farmware.": "“运行农具”步骤运行一个农具包。访问“农具”面板安装和管理农具。", + "The Send Message step instructs FarmBot to send a custom message to the logs (and toast message and/or email, if selected). This can help you with debugging your sequences.": "“发送消息”步骤指示FarmBot向日志发送自定义消息(如果选择,还可以发送弹出消息和/或电子邮件)。这可以帮助您调试序列。", + "The status is 'disconnected'": "状态为“断开连接”", + "The terms of service have recently changed. You must accept the new terms of service to continue using the site.": "服务条款最近发生了变化。您必须接受新的服务条款才能继续使用该网站。", + "The tool currently mounted to the UTM can be set here or by using a MARK AS step in a sequence. Use the verify button or read the tool verification pin in a sequence to verify that a tool is attached.": "当前安装在UTM上的工具可以在此处设置,也可以通过序列中的“标记为”步骤进行设置。使用验证按钮或在序列中读取工具验证针脚以验证是否安装了工具。", + "The valve clicked, but there isn't any water": "阀门点击了,但没有水", + "The Wait step instructs FarmBot to wait for the specified amount of time. Use it in combination with the Control Peripheral step to water for a length of time.": "“等待”步骤指示FarmBot等待指定时间。将其与“控制外设”步骤结合使用以进行一段时间的浇水。", + "The z-axis did not reach the hardstop": "Z轴未达到硬停止", + "Then Execute": "然后执行", + "Then try finding the axis length again.": "然后尝试再次找到轴长度。", + "There is a 'camera not detected' or 'problem getting image' error log": "有“未检测到摄像头”或“获取图像问题”错误日志", + "There is a detection error log": "有检测错误日志", + "There is a surface error message": "有表面错误消息", + "There is an axis error log": "有轴错误日志", + "There is no 'Find Home' sequence": "没有“查找原点”序列", + "There is no access to FarmBot or the message broker. This is usually caused by outdated browsers (Internet Explorer) or firewalls that block WebSockets on port 3002.": "无法访问FarmBot或消息代理。这通常是由于浏览器过时(如Internet Explorer)或防火墙阻止了3002端口的WebSockets造成的。", + "There is no image": "没有图像", + "There is no power": "没有电源", + "There is no value": "没有值", + "There was an error": "发生错误", + "These are the most basic commands FarmBot can execute. Drag and drop them to create sequences for watering, planting seeds, measuring soil properties, and more.": "这些是FarmBot可以执行的最基本的命令。拖放它们以创建浇水、播种、测量土壤特性等的序列。", + "This command will not execute correctly because you do not have encoders, stall detection, or limit switches enabled for the chosen axis. Enable limit switches, encoders, or stall detection from the Settings panel for: ": "此命令将无法正确执行,因为您没有为所选轴启用编码器、停滞检测或限位开关。请在“设置”面板中为以下选项启用限位开关、编码器或停滞检测:", + "This computer": "这台电脑", + "This is the account menu, providing you with links to other pages in the app, and for logging out.": "这是帐户菜单,提供指向应用程序中其他页面的链接,并用于注销。", + "This is the connectivity popup. Click it to view information about the connection between your web browser, your FarmBot, and the FarmBot web app servers. Whenever your FarmBot is online and ready for action, you will see a green checkmark.": "这是连接弹出窗口。点击它查看您的网络浏览器、FarmBot和FarmBot网络应用服务器之间的连接信息。每当您的FarmBot在线并准备好操作时,您将看到一个绿色勾号。", + "This is the controls panel. Here you can control your FarmBot in realtime by pressing the movement arrow buttons, toggling peripherals, and executing pinned sequences. You can also view current status information about your FarmBot including its position and an optional webcam stream.": "这是控制面板。在这里,您可以通过按移动箭头按钮、切换外设和执行固定的序列来实时控制您的FarmBot。您还可以查看有关FarmBot的当前状态信息,包括其位置和可选的网络摄像头流。", + "This is the crop details panel. Here you can view factual information about the chosen crop such as the expected spread and height at maturity. Proceed to the next step of the tour to learn how to add the crop to your garden.": "这是作物详细信息面板。在这里,您可以查看所选作物的事实信息,例如预期的成熟时的扩展和高度。继续浏览下一步,了解如何将作物添加到您的花园中。", + "This is the crop search panel. Type in a crop name to the search field, for example \"Spinach\". We recommend trying generic crop names rather than specific varietals. Select the best search result and then advance the tour.": "这是作物搜索面板。在搜索栏中输入作物名称,例如“菠菜”。我们建议使用通用作物名称,而不是具体的品种名称。选择最佳搜索结果,然后继续浏览。", + "This is the current position indicator. FarmBot's current X, Y, and Z coordinates in millimeters are displayed for quick viewing from any page in the web app.": "这是当前位置指示器。FarmBot当前的X、Y和Z坐标(以毫米为单位)会显示在网页应用的任何页面上,以便快速查看。", + "This is the E-STOP button, allowing you to emergency stop any movements and turn off all of FarmBot's peripherals in case something is going wrong. After E-STOPPING FarmBot, you will need to click the same button to UNLOCK the device before resuming execution of any commands.": "这是急停按钮,允许您在出现问题时紧急停止所有动作并关闭所有FarmBot外设。急停FarmBot后,您需要点击相同的按钮解锁设备,然后才能继续执行任何命令。", + "This is the edit group panel. To make a group of all plants of one crop type, select the crop type you would like to include. Check that the correct plants are listed in the Group Members section, then advance the tour.": "这是编辑组面板。要创建一个包含所有某种作物类型植物的组,选择您想要包含的作物类型。检查“组成员”部分是否列出了正确的植物,然后继续浏览。", + "This is the edit slot panel where you will let FarmBot know the exact X, Y, and Z coordinates it must travel to when mounting and dismounting tools or picking up seeds from a seed container. Advance the tour to figure out the coordinates for this first slot.": "这是编辑槽面板,在这里您将告知FarmBot在安装和卸下工具或从种子容器中取种时必须前往的确切X、Y和Z坐标。继续浏览以确定第一个槽的坐标。", + "This is the events panel. Here you can view and manage all of your scheduled sequences and regimens. Clicking an event will open up the event details panel where you can edit it. Pressing the + button will create a new event.": "这是事件面板。在这里,您可以查看和管理所有计划的序列和方案。点击一个事件将打开事件详细信息面板,您可以在其中进行编辑。按下+按钮将创建一个新事件。", + "This is the groups section. Here you can create and manage groups of plants based on any criteria. Clicking a group will open up the group details panel where you can make edits. Pressing the group + button will create a new group.": "这是群组部分。在这里,您可以根据任何标准创建和管理植物群组。点击一个群组将打开群组详细信息面板,您可以在其中进行编辑。按下群组+按钮将创建一个新群组。", + "This is the help panel. Here you can browse the documentation or get support if you need it. Switch between documentation hubs and the other help resources using the dropdown at the top of the panel.": "这是帮助面板。在这里,您可以浏览文档或在需要时获取支持。使用面板顶部的下拉菜单在文档中心和其他帮助资源之间切换。", + "This is the message center. Here you can view and manage setup cards and announcements. Dismiss items you are finished with by pressing the X in the top right of a card. Check back often for new feature announcements and important information about your FarmBot.": "这是消息中心。在这里,您可以查看和管理设置卡和公告。按下卡片右上角的X可以删除完成的项目。请经常查看新功能公告和有关您的FarmBot的重要信息。", + "This is the photos panel. Here you can view and manage all of the photos of your garden. Additionally, here is where you can calibrate FarmBot's camera and weed detection settings to fine tune the performance for your lighting conditions and soil type.": "这是照片面板。在这里,您可以查看和管理花园的所有照片。此外,您还可以在这里校准FarmBot的摄像头和杂草检测设置,以微调适合您的光照条件和土壤类型的性能。", + "This is the plant details panel. Here you can view and edit a plant's coordinates and status, or delete it entirely.": "这是植物详细信息面板。在这里,您可以查看和编辑植物的坐标和状态,或完全删除它。", + "This is the plants panel. Here you can view and manage all of the plants in your garden. Mousing over a plant in the list will highlight it in the map and vice versa. Clicking a plant will open up the plant details panel where you can edit it. Pressing the plant + button will allow you to search for and add new crops to your garden.": "这是植物面板。在这里,您可以查看和管理花园中的所有植物。在列表中将鼠标悬停在某个植物上时,它将在地图中高亮显示,反之亦然。点击植物将打开植物详细信息面板,您可以在其中进行编辑。按下植物+按钮将允许您搜索并将新作物添加到花园中。", + "This is the plants panel. Once you add plants to your garden, they will be listed here for you to view and manage. To add a plant to your garden, press the plant + button and then advance the tour.": "这是植物面板。一旦您将植物添加到花园中,它们将列在这里供您查看和管理。要将植物添加到花园中,请按下植物+按钮,然后继续浏览。", + "This is the points panel. Here you can view and manage all of the points in your garden, including measured soil height points. Mousing over a point in the list will highlight it in the map and vice versa. Clicking a point will open up the point details panel where you can edit it. Pressing the point + button will allow you to add a point or a grid of points to the map.": "这是点面板。在这里,您可以查看和管理花园中的所有点,包括测量的土壤高度点。在列表中将鼠标悬停在某个点上时,它将在地图中高亮显示,反之亦然。点击某个点将打开点详细信息面板,您可以在其中进行编辑。按下点+按钮将允许您将点或点网格添加到地图中。", + "This is the regimens panel. Here you can view and manage all of your regimens which allow you to bulk schedule sequences based on the age of a plant. Clicking a regimen will open up the regimen editor panel where you can edit it. Pressing the + button will create a new regimen.": "这是方案面板。在这里,您可以查看和管理所有方案,这些方案允许您根据植物的年龄批量安排序列。点击方案将打开方案编辑器面板,您可以在其中进行编辑。按下+按钮将创建一个新方案。", + "This is the sequences panel. Here you can view and manage all of your sequences. Clicking a sequence will open up the sequence editor panel where you can edit it. Pressing the + button will create a new sequence.": "这是序列面板。在这里,您可以查看和管理所有序列。点击序列将打开序列编辑器面板,您可以在其中进行编辑。按下+按钮将创建一个新序列。", + "This is the settings panel. Here you can view and manage all of your FarmBot and account settings. Refer to the tooltips and documentation for information about each setting.": "这是设置面板。在这里,您可以查看和管理所有FarmBot和帐户设置。有关每个设置的信息,请参阅工具提示和文档。", + "This is the tools panel. Here you can add, edit, and view your FarmBot's tools and seed containers as well the slots they are loaded into. Mousing over a slot will highlight it in the map and vice versa. We've already added all of the items included with your FarmBot kit. Your job now is to input the exact location of the slots corresponding to where you installed them in real life. Click the first slot in the list and then advance the tour.": "这是工具面板。在这里,您可以添加、编辑和查看FarmBot的工具和种子容器以及它们加载的槽。在列表中将鼠标悬停在某个槽上时,它将在地图中高亮显示,反之亦然。我们已经添加了您的FarmBot套件中包含的所有物品。现在您的工作是输入与您在现实生活中安装它们的位置相对应的槽的确切位置。点击列表中的第一个槽,然后继续浏览。", + "This is the tools panel. Here you can view and manage all of the tools, seed containers, and slots in your garden. Clicking an item will open up the details panel where you can edit it. Pressing the + buttons will allow you to add new items.": "这是工具面板。在这里,您可以查看和管理花园中的所有工具、种子容器和槽。点击一个项目将打开详细信息面板,您可以在其中进行编辑。按下+按钮将允许您添加新项目。", + "This is the weed detector toggle. When turned ON, your FarmBot will take and process photos for weeds after every sequence execution.": "这是杂草探测器开关。开启时,您的FarmBot将在每次序列执行后拍摄和处理杂草照片。", + "This is the weeds panel. Here you can view and manage all of the weeds in your garden detected by FarmBot. Mousing over a weed in the list will highlight it in the map and vice versa. Clicking a weed will open up the weed details panel where you can edit it. Pressing the weed + button will allow you to add a weed manually.": "这是杂草面板。在这里,您可以查看和管理FarmBot检测到的花园中的所有杂草。在列表中将鼠标悬停在某个杂草上时,它将在地图中高亮显示,反之亦然。点击杂草将打开杂草详细信息面板,您可以在其中进行编辑。按下杂草+按钮将允许您手动添加杂草。", + "This page has moved. Redirecting...": "该页面已移动。正在重定向...", + "This phone": "这部手机", + "this photo": "这张照片", + "this photo from map": "地图中的这张照片", + "this photo in map": "地图中的这张照片", + "This sequence has no description.": "此序列没有描述。", + "This sequence includes deprecated steps.": "此序列包含已弃用的步骤。", + "This sequence is pinned.": "此序列已固定。", + "This sequence is published at the following link": "此序列已发布在以下链接", + "this sequence was imported": "此序列已导入", + "This sequence was imported from a publicly shared sequence. If the original author publishes a new version, you may upgrade your copy. Upgrading will overwrite your copy with the contents of the new version. It is recommended you check your FarmBot continues operating as expected after any upgrades.": "此序列是从公开共享的序列中导入的。如果原作者发布新版本,您可以升级您的副本。升级将用新版本的内容覆盖您的副本。建议在升级后检查您的FarmBot是否按预期运行。", + "This step executes the sequence that contains it, which may cause an infinite loop.": "此步骤执行包含它的序列,这可能导致无限循环。", + "This variable is currently being used and cannot be deleted.": "此变量正在使用中,无法删除。", + "This will restart FarmBot's Raspberry Pi and controller software.": "这将重启FarmBot的Raspberry Pi和控制器软件。", + "This will shutdown FarmBot's Raspberry Pi. To turn it back on, unplug FarmBot and plug it back in.": "这将关闭FarmBot的Raspberry Pi。要重新开启,请拔掉FarmBot并重新插入。", + "Ticker Notification": "滚动通知", + "Time is not properly formatted.": "时间格式不正确。", + "Time period": "时间段", + "time zone": "时区", + "Timeout (sec)": "超时(秒)", + "Timeout after (seconds)": "超时后(秒)", + "timezone": "时区", + "Tip: Use dot notation (i.e., 'meta.color') to access meta fields.": "提示:使用点符号(即'meta.color')来访问元字段。", + "to": "至", + "To add a grid or row of plants, scroll to the bottom of the panel, enter values into the grid and row planting fields and click PREVIEW. The previewed plants will show in the map in grayscale. Make adjustments as necessary and when you are happy with the preview, click SAVE. Then advance the tour.": "要添加一排或一行植物,请滚动到面板底部,在网格和行种植字段中输入数值并点击预览。预览的植物将在地图中以灰度显示。根据需要进行调整,当对预览满意时,点击保存。然后继续浏览。", + "to add the plant to the map. Alternatively, you can plant a grid using the form below.": "以将植物添加到地图中。或者,您可以使用下面的表格种植网格。", + "To calculate **WATER FLOW RATE**, hold a measuring cup below the watering nozzle and click the **RUN WATER FOR 5 SECONDS** button. Measure how much water FarmBot dispensed in milliliters (mL) and then divide this number by 5. Enter the result in the field.": "要计算**水流量**,将量杯放在浇水喷嘴下方,并点击**运行5秒钟水**按钮。测量FarmBot分配的水量(毫升),然后将此数值除以5。在字段中输入结果。", + "To finish setting up your account and FarmBot, please select which FarmBot you have. Once you make a selection, we'll automatically add some tools, sensors, peripherals, sequences, and more to get you up and running faster. If you want to start completely from scratch, feel free to select \"Custom bot\" and we won't change a thing.": "要完成帐户和FarmBot的设置,请选择您拥有的FarmBot型号。选择后,我们将自动添加一些工具、传感器、外设、序列等,以便您更快地启动和运行。如果您想从头开始,随时选择“自定义机器人”,我们不会更改任何内容。", + "to get started": "开始", + "to get started or click the": "开始或点击", + "To prepare for camera calibration, move the z-axis all the way up.": "为准备相机校准,将z轴移动到最上方。", + "To State": "到状态", + "Toast Pop Up": "弹出通知", + "toggle": "切换", + "Toggle a digital pin on or off.": "切换数字引脚开或关。", + "toggle advanced view": "切换高级视图", + "toggle beeps": "切换蜂鸣声", + "toggle celery script view": "切换芹菜脚本视图", + "toggle code view": "切换代码视图", + "Toggle crop": "切换作物", + "toggle editor view": "切换编辑器视图", + "toggle fancy editor": "切换高级编辑器", + "toggle folder open": "切换文件夹打开", + "toggle logs": "切换日志", + "toggle packing method": "切换打包方法", + "Toggle peripheral": "切换外设", + "Toggle Peripheral": "切换外设", + "Toggle rotation": "切换旋转", + "toggle safe z": "切换安全z", + "toggle settings open": "切换设置打开", + "too weak": "太弱", + "Tool Mount": "工具安装", + "Tool or Seed Container": "工具或种子容器", + "Tool Verification": "工具验证", + "Tools": "工具", + "tools and seed containers": "工具和种子容器", + "top": "顶部", + "Top Left": "左上角", + "Top Right": "右上角", + "Total number of times to retry calibration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "重试校准的总次数。(默认:x:{{ x }},y:{{ y }},z:{{ z }})", + "Tours": "导览", + "TOURS": "导览", + "Trail": "路径", + "Travel in millimeters for stall detection to ignore during acceleration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "在加速过程中忽略卡滞检测的行程(以毫米为单位)。(默认:x:{{ x }},y:{{ y }},z:{{ z }})", + "true": "真", + "Try a different Raspberry Pi USB power cable.": "尝试不同的Raspberry Pi USB电源线。", + "Try again while observing the log messages.": "在观察日志消息时再试一次。", + "Try an alternate calibration method. Two red objects spaced 100mm apart can be used in place of the card.": "尝试替代校准方法。可以用相距100毫米的两个红色物体代替卡片。", + "Try disabling cellular data or connecting with a different device.": "尝试禁用蜂窝数据或使用不同的设备连接。", + "Try navigating to ": "尝试导航到", + "Try using the FIND HOME button a few more times. If FarmBot is still unable to reach the home position, check the hardware for resistance. You may also move FarmBot's {{ axis }}-axis with the controls or manually until the plates hit the hardstop. Then open the ... menu and click SET HOME.": "尝试多次使用“查找原点”按钮。如果FarmBot仍无法到达原点位置,请检查硬件是否有阻力。您还可以使用控制器或手动移动FarmBot的{{ axis }}轴,直到板块碰到硬停。然后打开...菜单并点击设置原点。", + "Try waiting three minutes from power on. Check the Raspberry Pi power LED. Check that the SD is fully inserted. Try downloading a new FarmBot OS image, ensuring that the device model is correct. Try re-flashing the SD card via Etcher. If possible, ensure line-of-sight between devices when trying to connect.": "尝试从开机起等待三分钟。检查Raspberry Pi电源LED。检查SD卡是否完全插入。尝试下载新的FarmBot OS镜像,确保设备型号正确。通过Etcher重新刷新SD卡。如果可能,请确保连接时设备之间有视线。", + "ttyACM0 (recommended for Genesis)": "ttyACM0(推荐用于Genesis)", + "ttyAMA0 (recommended for Express v1.0)": "ttyAMA0(推荐用于Express v1.0)", + "ttyUSB0 (recommended for Express v1.1)": "ttyUSB0(推荐用于Express v1.1)", + "Turn off to set Web App to English.": "关闭以将Web应用程序设置为英文。", + "type": "类型", + "Type": "类型", + "Type filtered": "类型过滤", + "Type not filtered": "类型未过滤", + "Unable to connect to FarmBot. Please reconnect FarmBot to continue.": "无法连接到FarmBot。请重新连接FarmBot以继续。", + "Unable to load content.": "无法加载内容。", + "Unable to load webcam feed.": "无法加载摄像头视频。", + "Unable to properly display this step.": "无法正确显示此步骤。", + "Unable to resend verification email. Are you already verified?": "无法重新发送验证电子邮件。您是否已经验证过?", + "Unable to save changes.": "无法保存更改。", + "Unable to save event.": "无法保存事件。", + "Unavailable": "不可用", + "uncategorized": "未分类", + "Uncropped Camera view": "未裁剪的相机视图", + "Unexpected error occurred, we've been notified of the problem.": "发生意外错误,我们已收到问题通知。", + "unknown": "未知", + "Unknown": "未知", + "UNKNOWN": "未知", + "unknown (offline)": "未知(离线)", + "Unknown Farmware": "未知的Farmware", + "Unknown problem of priority {{priority}} ({{slug}}).": "优先级为{{priority}}的未知问题({{slug}})。", + "Unknown tool": "未知工具", + "Unknown.": "未知。", + "UNLOCK": "解锁", + "Unlock button": "解锁按钮", + "unlock device": "解锁设备", + "Unlocking a device requires user intervention.": "解锁设备需要用户干预。", + "Unnamed": "未命名", + "unpin sequence": "取消固定序列", + "Unpublish error": "取消发布错误", + "Unpublishing": "取消发布", + "Untitled Group": "未命名的组", + "Untitled point": "未命名的点", + "Untitled tool": "未命名的工具", + "Untitled weed": "未命名的杂草", + "Untitled Zone": "未命名的区域", + "unvisualize": "取消可视化", + "Update": "更新", + "Update color to": "更新颜色为", + "Update depth to": "更新深度为", + "update Farmware": "更新Farmware", + "Update Farmware": "更新Farmware", + "Update radius to": "更新半径为", + "Update start to": "更新开始为", + "Update status to": "更新状态为", + "update time": "更新时间", + "UPDATE TO": "更新为", + "update to FarmBot's value": "更新为FarmBot的值", + "Update type to": "更新类型为", + "Upgrade error": "升级错误", + "upgrade FarmBot OS": "升级FarmBot操作系统", + "upgrade your copy to this version": "将您的副本升级到此版本", + "Upgrading their copy to other published versions": "将他们的副本升级到其他已发布的版本", + "uploading photo": "正在上传照片", + "Upon successful password change, your FarmBot will soft reset allowing you to configure it with the updated credentials. You will also be logged out of other browser sessions. Continue?": "密码更改成功后,您的FarmBot将进行软重置,允许您使用更新的凭据进行配置。您还将退出其他浏览器会话。继续吗?", + "Uptime": "正常运行时间", + "USB Camera": "USB相机", + "Use 24-hour time format": "使用24小时制时间格式", + "use alternative method": "使用替代方法", + "use average soil height": "使用平均土壤高度", + "use average z: {{ value }}": "使用平均z:{{ value }}", + "use current location": "使用当前位置", + "Use current location": "使用当前位置", + "Use Encoders for Positioning": "使用编码器进行定位", + "Use the encoders for calculating movements in addition to using encoders for stall detection. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "除了使用编码器进行卡滞检测外,还使用编码器计算运动。(默认:x:{{ x }},y:{{ y }},z:{{ z }})", + "Use the manual controls to move FarmBot along the full length of the X-axis in both directions.": "使用手动控制器将FarmBot沿X轴全长双向移动。", + "Use the manual controls to move FarmBot along the full length of the Y-axis in both directions.": "使用手动控制器将FarmBot沿Y轴全长双向移动。", + "Use the manual controls to move FarmBot along the full length of the Z-axis in both directions.": "使用手动控制器将FarmBot沿Z轴全长双向移动。", + "Use these manual control buttons to move FarmBot in realtime. Press the arrows for relative movements or type in new coordinates and press GO for an absolute movement. Tip: Press the Home button when you are done so FarmBot is ready to get back to work.": "使用这些手动控制按钮实时移动FarmBot。按箭头进行相对移动或输入新坐标并按GO进行绝对移动。提示:完成后按“原点”按钮,以便FarmBot准备好重新工作。", + "Use these toggle switches to control FarmBot's peripherals in realtime. To edit and create new peripherals, press the EDIT button. Make sure to turn things off when you're done!": "使用这些开关实时控制FarmBot的外设。要编辑和创建新的外设,请按编辑按钮。完成后请确保关闭所有设备!", + "Used in another resource. Protected from deletion.": "用于其他资源。受保护,无法删除。", + "User Interface Read Only Mode": "用户界面只读模式", + "Using a demo account": "使用演示帐户", + "Using another device, search for and connect to the \\": "使用另一台设备,搜索并连接到\\", + "Using another device, search for and connect to the `farmbot-xxxx` WiFi network": "使用另一台设备,搜索并连接到`farmbot-xxxx` WiFi网络", + "Using the manual controls, instruct FarmBot to move towards the seed trough. As you get closer, change the MOVE AMOUNT to a smaller value for finer movements. Your goal is to position the needle just above the trough and then descend down into it until the tip of the needle is 3 to 5mm from the bottom of the trough. Click the blue button next to the slot's X, Y, and Z fields to save FarmBot's current position to the slot.": "使用手动控制器指示FarmBot移动到种子槽。当接近时,将移动量更改为较小值以进行更精细的移动。您的目标是将针头定位在槽上方,然后下降到槽内,直到针头尖端距离槽底3至5毫米。点击插槽X、Y和Z字段旁边的蓝色按钮,以保存FarmBot当前的位置到插槽。", + "Using the manual controls, instruct FarmBot to move towards the tool and slot. As you get closer, change the MOVE AMOUNT to a smaller value for finer movements. Your goal is to position the UTM just above the tool and then descend down onto it (mounting it). Once the UTM has mounted the tool, click the blue button next to the slot's X, Y, and Z fields to save FarmBot's current position to the slot.": "使用手动控制器指示FarmBot移动到工具和插槽。接近时,将移动量更改为较小值以进行更精细的移动。您的目标是将UTM定位在工具上方,然后下降到工具上(安装它)。一旦UTM安装了工具,点击插槽X、Y和Z字段旁边的蓝色按钮,以保存FarmBot当前的位置到插槽。", "UTM": "UTM", - "UTM and TOOLS": "UTM and TOOLS", - "Vacuum": "Vacuum", - "VACUUM": "VACUUM", - "Vacuum pump": "Vacuum pump", - "value": "value", - "VALUE": "VALUE", - "Value must be greater than {{ num }}.": "Value must be greater than {{ num }}.", - "Value must be greater than or equal to {{min}}.": "Value must be greater than or equal to {{min}}.", - "Value must be less than {{ num }}.": "Value must be less than {{ num }}.", - "Value must be less than or equal to {{max}}.": "Value must be less than or equal to {{max}}.", - "Variables": "Variables", - "Variance": "Variance", - "Verification email resent. Please check your email!": "Verification email resent. Please check your email!", - "verify": "verify", - "Verify axis motor connections.": "Verify axis motor connections.", - "Version {{ version }}": "Version {{ version }}", - "Version last seen": "Version last seen", - "versions": "versions", - "view": "view", - "View": "View", - "View all logs": "View all logs", - "View and filter historical sensor reading data.": "View and filter historical sensor reading data.", - "View and filter log messages.": "View and filter log messages.", - "View available tours": "View available tours", - "View CeleryScript": "View CeleryScript", - "View crop info": "View crop info", - "View current location": "View current location", - "View FarmBot's current location using the axis position display.": "View FarmBot's current location using the axis position display.", - "View fullscreen": "View fullscreen", - "view in map (opens in new tab)": "view in map (opens in new tab)", - "View log messages": "View log messages", - "View Logs": "View Logs", - "View photos your FarmBot has taken here.": "View photos your FarmBot has taken here.", - "View raw data representation of sequence steps.": "View raw data representation of sequence steps.", - "View recent log messages here. More detailed log messages can be shown by adjusting filter settings.": "View recent log messages here. More detailed log messages can be shown by adjusting filter settings.", - "viewing a publicly shared sequence": "viewing a publicly shared sequence", - "Viewing saved garden": "Viewing saved garden", - "Visit the documentation.": "Visit the documentation.", - "visualize": "visualize", - "Voltage": "Voltage", - "Warn": "Warn", - "Warning": "Warning", - "Warning: Binding to a pin without a physical button and pull-down resistor connected may put FarmBot into an unstable state.": "Warning: Binding to a pin without a physical button and pull-down resistor connected may put FarmBot into an unstable state.", - "Warning: Changing the values below may cause app and device errors.": "Warning: Changing the values below may cause app and device errors.", - "Warning: Limit switches are NOT included with standard FarmBot Genesis or Express kits. Do NOT enable limit switches unless you have built your own FarmBot with them or added them to a stock kit.": "Warning: Limit switches are NOT included with standard FarmBot Genesis or Express kits. Do NOT enable limit switches unless you have built your own FarmBot with them or added them to a stock kit.", - "Warning: low value": "Warning: low value", - "WARNING: Sending passwords via HTTP:// is not secure.": "WARNING: Sending passwords via HTTP:// is not secure.", - "Warning: This will erase data stored on your FarmBot's SD card, requiring you to reconfigure FarmBot so that it can reconnect to your WiFi network and web app account. Soft resetting the device will not delete data stored in your web app account. Are you sure you wish to continue?": "Warning: This will erase data stored on your FarmBot's SD card, requiring you to reconfigure FarmBot so that it can reconnect to your WiFi network and web app account. Soft resetting the device will not delete data stored in your web app account. Are you sure you wish to continue?", - "Warning: This will overwrite all existing hardware settings, replacing them with the provided values. Are you sure you wish to continue?": "Warning: This will overwrite all existing hardware settings, replacing them with the provided values. Are you sure you wish to continue?", - "Warning: This will reset all hardware settings to the default values. Are you sure you wish to continue?": "Warning: This will reset all hardware settings to the default values. Are you sure you wish to continue?", - "Warning: Upon successful change of your account email or password, FarmBot will cease to function and become inaccessible until it is reconfigured with your new web app credentials.": "Warning: Upon successful change of your account email or password, FarmBot will cease to function and become inaccessible until it is reconfigured with your new web app credentials.", - "WARNING! Deleting your account will permanently delete all of your Sequences, Regimens, Events, and Farm Designer data. Upon deleting your account, FarmBot will cease to function and become inaccessible until it is paired with another web app account. To do this, you will need to reboot your FarmBot so that is goes back into configuration mode for pairing with another user account. When this happens, all of the data on your FarmBot will be overwritten with the new account's data. If the account is brand new, then FarmBot will become a blank slate.": "WARNING! Deleting your account will permanently delete all of your Sequences, Regimens, Events, and Farm Designer data. Upon deleting your account, FarmBot will cease to function and become inaccessible until it is paired with another web app account. To do this, you will need to reboot your FarmBot so that is goes back into configuration mode for pairing with another user account. When this happens, all of the data on your FarmBot will be overwritten with the new account's data. If the account is brand new, then FarmBot will become a blank slate.", - "Warning! Leaving the stable FarmBot OS release channel may reduce FarmBot system stability. Are you sure?": "Warning! Leaving the stable FarmBot OS release channel may reduce FarmBot system stability. Are you sure?", - "WARNING! Resetting your account will permanently delete all of your Sequences, Regimens, Events, Tools, Logs, and Farm Designer data. All app settings and device settings will be reset to default values. This is useful if you want to delete all data to start from scratch while avoiding having to fully delete your account, re-signup, and re-configure your FarmBot. Note that when FarmBot syncs after resetting your account, your FarmBot will delete all of its stored Sequences, etc, because your account will no longer have any of these resources until you create new ones. Furthermore, upon reset any customized device settings will be immediately overwritten with the default values downloaded from the reset web app account.": "WARNING! Resetting your account will permanently delete all of your Sequences, Regimens, Events, Tools, Logs, and Farm Designer data. All app settings and device settings will be reset to default values. This is useful if you want to delete all data to start from scratch while avoiding having to fully delete your account, re-signup, and re-configure your FarmBot. Note that when FarmBot syncs after resetting your account, your FarmBot will delete all of its stored Sequences, etc, because your account will no longer have any of these resources until you create new ones. Furthermore, upon reset any customized device settings will be immediately overwritten with the default values downloaded from the reset web app account.", - "Warning! When disabled, clicking the UNLOCK button will immediately unlock FarmBot instead of confirming that it is safe to do so. As a result, double-clicking the E-STOP button may not stop FarmBot. Are you sure you want to disable this feature?": "Warning! When disabled, clicking the UNLOCK button will immediately unlock FarmBot instead of confirming that it is safe to do so. As a result, double-clicking the E-STOP button may not stop FarmBot. Are you sure you want to disable this feature?", - "Warning! When enabled, any unsaved changes to sequences will be discarded when refreshing or closing the page. Are you sure?": "Warning! When enabled, any unsaved changes to sequences will be discarded when refreshing or closing the page. Are you sure?", - "Warning! When enabled, any unsaved changes will be discarded when refreshing or closing the page. Are you sure?": "Warning! When enabled, any unsaved changes will be discarded when refreshing or closing the page. Are you sure?", - "Watch the video below and make small adjustments to the motor speed and current settings.": "Watch the video below and make small adjustments to the motor speed and current settings.", - "Watch the video below demonstrating movements along the full length of the axes. Once you have finished watching, proceed to the next setup steps to test movements along the full length of each axis.": "Watch the video below demonstrating movements along the full length of the axes. Once you have finished watching, proceed to the next setup steps to test movements along the full length of each axis.", - "Watch the video below showing how to match the manual controls to your real life FarmBot. Once you have finished watching, proceed to the next setup steps to test and set the controls for each axis.": "Watch the video below showing how to match the manual controls to your real life FarmBot. Once you have finished watching, proceed to the next setup steps to test and set the controls for each axis.", - "Watch the video below showing how to match the virtual FarmBot map to your real life FarmBot. The relevant controls are available below the video for your convenience.": "Watch the video below showing how to match the virtual FarmBot map to your real life FarmBot. The relevant controls are available below the video for your convenience.", - "Water": "Water", - "WATER": "WATER", - "Water flow rate": "Water flow rate", - "Water Flow Rate (mL/s)": "Water Flow Rate (mL/s)", - "Watering nozzle": "Watering nozzle", - "Watering Nozzle": "Watering Nozzle", - "weak": "weak", - "Web App": "Web App", - "Webcam Feeds": "Webcam Feeds", - "weed": "weed", - "Weed created.": "Weed created.", - "Weed detection": "Weed detection", - "Weed Groups": "Weed Groups", - "Weed status": "Weed status", - "Weeder": "Weeder", - "weeds": "weeds", - "Weeds": "Weeds", - "Week": "Week", - "Weeks": "Weeks", - "Welcome to the": "Welcome to the", - "Welcome to the FarmBot Web App": "Welcome to the FarmBot Web App", - "Welcome to the FarmBot web app! In this tour you'll become familiar with the overall organization of the app.": "Welcome to the FarmBot web app! In this tour you'll become familiar with the overall organization of the app.", - "Welcome to the setup wizard. This process will guide you through the steps necessary to get your FarmBot set up and running. Each step will include an action to perform and a question about the outcome, which can be answered yes or no. Answering yes will continue to the next step, while answering no will display a list of results that can be selected for specific troubleshooting tips.": "Welcome to the setup wizard. This process will guide you through the steps necessary to get your FarmBot set up and running. Each step will include an action to perform and a question about the outcome, which can be answered yes or no. Answering yes will continue to the next step, while answering no will display a list of results that can be selected for specific troubleshooting tips.", - "What do you want to grow?": "What do you want to grow?", - "What's next?": "What's next?", - "When": "When", - "When adding plants to the map from the web app, set each new plant's depth to this value (in millimeters).": "When adding plants to the map from the web app, set each new plant's depth to this value (in millimeters).", - "When executing a sequence over a Group of locations, FarmBot will travel to each group member in the order of the chosen sort method. If the random option is chosen, FarmBot will travel in a random order every time, so the ordering shown below will only be representative.": "When executing a sequence over a Group of locations, FarmBot will travel to each group member in the order of the chosen sort method. If the random option is chosen, FarmBot will travel in a random order every time, so the ordering shown below will only be representative.", - "When you program your FarmBot to perform an operation on a group of plants, you may want to control the ordering at which FarmBot visits each plant in the group. To do this, select one of the available Sort By methods. Once you have chosen a method, advance the tour.": "When you program your FarmBot to perform an operation on a group of plants, you may want to control the ordering at which FarmBot visits each plant in the group. To do this, select one of the available Sort By methods. Once you have chosen a method, advance the tour.", - "When you publish a new version, other users of the sequence may optionally upgrade to the latest version.": "When you publish a new version, other users of the sequence may optionally upgrade to the latest version.", - "When you're finished with a message, press the x button in the top right of the card to dismiss it.": "When you're finished with a message, press the x button in the top right of the card to dismiss it.", - "Which FarmBot model do you have?": "Which FarmBot model do you have?", - "while your garden is applied.": "while your garden is applied.", - "White": "White", - "Why is my FarmBot not moving?": "Why is my FarmBot not moving?", - "Widget load failed.": "Widget load failed.", - "width": "width", + "UTM and TOOLS": "UTM和工具", + "Vacuum": "真空", + "VACUUM": "真空", + "Vacuum pump": "真空泵", + "value": "值", + "VALUE": "值", + "Value must be greater than {{ num }}.": "值必须大于{{ num }}。", + "Value must be greater than or equal to {{min}}.": "值必须大于或等于{{min}}。", + "Value must be less than {{ num }}.": "值必须小于{{ num }}。", + "Value must be less than or equal to {{max}}.": "值必须小于或等于{{max}}。", + "Variables": "变量", + "Variance": "方差", + "Verification email resent. Please check your email!": "验证邮件已重新发送。请检查您的电子邮件!", + "verify": "验证", + "Verify axis motor connections.": "验证轴电机连接。", + "Version {{ version }}": "版本{{ version }}", + "Version last seen": "上次看到的版本", + "versions": "版本", + "view": "查看", + "View": "查看", + "View all logs": "查看所有日志", + "View and filter historical sensor reading data.": "查看和过滤历史传感器读数数据。", + "View and filter log messages.": "查看和过滤日志消息。", + "View available tours": "查看可用的导览", + "View CeleryScript": "查看CeleryScript", + "View crop info": "查看作物信息", + "View current location": "查看当前位置", + "View FarmBot's current location using the axis position display.": "使用轴位置显示查看FarmBot的当前位置。", + "View fullscreen": "全屏查看", + "view in map (opens in new tab)": "在地图中查看(在新标签页打开)", + "View log messages": "查看日志消息", + "View Logs": "查看日志", + "View photos your FarmBot has taken here.": "在这里查看FarmBot拍摄的照片。", + "View raw data representation of sequence steps.": "查看序列步骤的原始数据表示。", + "View recent log messages here. More detailed log messages can be shown by adjusting filter settings.": "在此查看最近的日志消息。通过调整过滤器设置可以显示更详细的日志消息。", + "viewing a publicly shared sequence": "查看公开共享的序列", + "Viewing saved garden": "查看已保存的花园", + "Visit the documentation.": "访问文档。", + "visualize": "可视化", + "Voltage": "电压", + "Warn": "警告", + "Warning": "警告", + "Warning: Binding to a pin without a physical button and pull-down resistor connected may put FarmBot into an unstable state.": "警告:绑定到一个没有连接物理按钮和下拉电阻的引脚可能会使FarmBot处于不稳定状态。", + "Warning: Changing the values below may cause app and device errors.": "警告:更改下面的值可能会导致应用程序和设备错误。", + "Warning: Limit switches are NOT included with standard FarmBot Genesis or Express kits. Do NOT enable limit switches unless you have built your own FarmBot with them or added them to a stock kit.": "警告:标准的FarmBot Genesis或Express套件不包括限位开关。除非您已经用它们建造了自己的FarmBot或将它们添加到标准套件中,否则不要启用限位开关。", + "Warning: low value": "警告:低值", + "WARNING: Sending passwords via HTTP:// is not secure.": "警告:通过HTTP://发送密码是不安全的。", + "Warning: This will erase data stored on your FarmBot's SD card, requiring you to reconfigure FarmBot so that it can reconnect to your WiFi network and web app account. Soft resetting the device will not delete data stored in your web app account. Are you sure you wish to continue?": "警告:这将擦除存储在FarmBot的SD卡上的数据,需要您重新配置FarmBot以便它可以重新连接到您的WiFi网络和Web应用程序帐户。软重置设备不会删除存储在您的Web应用程序帐户中的数据。您确定要继续吗?", + "Warning: This will overwrite all existing hardware settings, replacing them with the provided values. Are you sure you wish to continue?": "警告:这将覆盖所有现有的硬件设置,并用提供的值替换它们。您确定要继续吗?", + "Warning: This will reset all hardware settings to the default values. Are you sure you wish to continue?": "警告:这将将所有硬件设置重置为默认值。您确定要继续吗?", + "Warning: Upon successful change of your account email or password, FarmBot will cease to function and become inaccessible until it is reconfigured with your new web app credentials.": "警告:成功更改您的帐户电子邮件或密码后,FarmBot将停止工作,并且在重新配置为新的Web应用程序凭据之前将无法访问。", + "WARNING! Deleting your account will permanently delete all of your Sequences, Regimens, Events, and Farm Designer data. Upon deleting your account, FarmBot will cease to function and become inaccessible until it is paired with another web app account. To do this, you will need to reboot your FarmBot so that is goes back into configuration mode for pairing with another user account. When this happens, all of the data on your FarmBot will be overwritten with the new account's data. If the account is brand new, then FarmBot will become a blank slate.": "警告!删除您的帐户将永久删除所有序列,方案,事件和农场设计师数据。删除您的帐户后,FarmBot将停止工作,并且在与另一个Web应用程序帐户配对之前将无法访问。要做到这一点,您需要重新启动FarmBot,以使其重新进入与另一个用户帐户配对的配置模式。发生这种情况时,FarmBot上的所有数据都将被新帐户的数据覆盖。如果帐户是全新的,则FarmBot将变成一个空白状态。", + "Warning! Leaving the stable FarmBot OS release channel may reduce FarmBot system stability. Are you sure?": "警告!离开稳定的FarmBot OS发布通道可能会降低FarmBot系统的稳定性。您确定吗?", + "WARNING! Resetting your account will permanently delete all of your Sequences, Regimens, Events, Tools, Logs, and Farm Designer data. All app settings and device settings will be reset to default values. This is useful if you want to delete all data to start from scratch while avoiding having to fully delete your account, re-signup, and re-configure your FarmBot. Note that when FarmBot syncs after resetting your account, your FarmBot will delete all of its stored Sequences, etc, because your account will no longer have any of these resources until you create new ones. Furthermore, upon reset any customized device settings will be immediately overwritten with the default values downloaded from the reset web app account.": "警告!重置您的帐户将永久删除所有序列,方案,事件,工具,日志和农场设计师数据。所有应用程序设置和设备设置将重置为默认值。如果您想要删除所有数据,从头开始,同时避免完全删除您的帐户,重新注册和重新配置FarmBot,则此功能非常有用。请注意,当FarmBot在重置您的帐户后同步时,您的FarmBot将删除所有存储的序列等,因为您的帐户将不再拥有这些资源,直到您创建新的资源。此外,重置后,任何自定义的设备设置都将立即被重置为从重置的Web应用程序帐户下载的默认值。", + "Warning! When disabled, clicking the UNLOCK button will immediately unlock FarmBot instead of confirming that it is safe to do so. As a result, double-clicking the E-STOP button may not stop FarmBot. Are you sure you want to disable this feature?": "警告!当禁用时,单击UNLOCK按钮将立即解锁FarmBot,而不是确认是否安全进行此操作。因此,双击E-STOP按钮可能不会停止FarmBot。您确定要禁用此功能吗?", + "Warning! When enabled, any unsaved changes to sequences will be discarded when refreshing or closing the page. Are you sure?": "警告!启用时,刷新或关闭页面时将放弃对序列的任何未保存更改。您确定吗?", + "Warning! When enabled, any unsaved changes will be discarded when refreshing or closing the page. Are you sure?": "警告!启用时,刷新或关闭页面时将放弃任何未保存的更改。您确定吗?", + "Watch the video below and make small adjustments to the motor speed and current settings.": "观看下面的视频并对电机速度和电流设置进行小幅调整。", + "Watch the video below demonstrating movements along the full length of the axes. Once you have finished watching, proceed to the next setup steps to test movements along the full length of each axis.": "观看下面的视频,演示沿轴的整个长度进行移动。观看完成后,请继续下一步设置以测试沿每个轴的整个长度移动。", + "Watch the video below showing how to match the manual controls to your real life FarmBot. Once you have finished watching, proceed to the next setup steps to test and set the controls for each axis.": "观看下面的视频,了解如何将手动控件与您的现实中的FarmBot相匹配。观看完成后,请继续下一步设置以测试和设置每个轴的控件。", + "Watch the video below showing how to match the virtual FarmBot map to your real life FarmBot. The relevant controls are available below the video for your convenience.": "观看下面的视频,了解如何将虚拟FarmBot地图与您的现实中的FarmBot相匹配。相关的控件可在视频下方方便您使用。", + "Water": "水", + "WATER": "水", + "Water flow rate": "水流量", + "Water Flow Rate (mL/s)": "水流量(毫升/秒)", + "Watering nozzle": "浇水喷嘴", + "Watering Nozzle": "浇水喷嘴", + "weak": "弱", + "Web App": "Web 应用程序", + "Webcam Feeds": "网络摄像头供稿", + "weed": "杂草", + "Weed created.": "杂草已创建。", + "Weed detection": "杂草检测", + "Weed Groups": "杂草分组", + "Weed status": "杂草状态", + "Weeder": "除草机", + "weeds": "杂草", + "Weeds": "杂草", + "Week": "周", + "Weeks": "周", + "Welcome to the": "欢迎来到", + "Welcome to the FarmBot Web App": "欢迎来到 FarmBot Web 应用程序", + "Welcome to the FarmBot web app! In this tour you'll become familiar with the overall organization of the app.": "欢迎来到 FarmBot web 应用程序!在本次导览中,您将熟悉应用程序的整体组织。", + "Welcome to the setup wizard. This process will guide you through the steps necessary to get your FarmBot set up and running. Each step will include an action to perform and a question about the outcome, which can be answered yes or no. Answering yes will continue to the next step, while answering no will display a list of results that can be selected for specific troubleshooting tips.": "欢迎使用设置向导。此过程将引导您完成设置和运行FarmBot所需的步骤。每个步骤都将包括要执行的操作以及有关结果的问题,可以回答是或否。回答是将继续进行下一步,而回答否将显示可以选择特定故障排除提示的结果列表。", + "What do you want to grow?": "您想种什么?", + "What's next?": "下一步是什么?", + "When": "当", + "When adding plants to the map from the web app, set each new plant's depth to this value (in millimeters).": "从Web应用程序向地图添加植物时,请将每个新植物的深度设置为此值(以毫米为单位)。", + "When executing a sequence over a Group of locations, FarmBot will travel to each group member in the order of the chosen sort method. If the random option is chosen, FarmBot will travel in a random order every time, so the ordering shown below will only be representative.": "在对位置组执行序列时,FarmBot将按照选择的排序方法的顺序前往每个组成员。如果选择了随机选项,则FarmBot将每次以随机顺序前往,因此下面显示的顺序仅供参考。", + "When you program your FarmBot to perform an operation on a group of plants, you may want to control the ordering at which FarmBot visits each plant in the group. To do this, select one of the available Sort By methods. Once you have chosen a method, advance the tour.": "当您将FarmBot编程执行对一组植物的操作时,您可能希望控制FarmBot访问组中每个植物的顺序。要做到这一点,请选择其中一个可用的排序方法。选择了一种方法后,继续导览。", + "When you publish a new version, other users of the sequence may optionally upgrade to the latest version.": "当您发布新版本时,序列的其他用户可以选择升级到最新版本。", + "When you're finished with a message, press the x button in the top right of the card to dismiss it.": "完成消息后,请按卡片右上角的x按钮将其关闭。", + "Which FarmBot model do you have?": "您有哪种FarmBot型号?", + "while your garden is applied.": "在应用您的花园时。", + "White": "白色", + "Why is my FarmBot not moving?": "为什么我的FarmBot不动?", + "Widget load failed.": "小部件加载失败。", + "width": "宽度", "WiFi": "WiFi", - "WiFi strength": "WiFi strength", - "With the FarmBot still powered off, manually move the gantry, cross-slide, and Z-axis roughly 150mm away from any of its hardstops. In other words, position the gantry partway along the tracks, position the cross-slide partway across the gantry main beam, and position the Z-axis halfway down.": "With the FarmBot still powered off, manually move the gantry, cross-slide, and Z-axis roughly 150mm away from any of its hardstops. In other words, position the gantry partway along the tracks, position the cross-slide partway across the gantry main beam, and position the Z-axis halfway down.", - "Within filter range": "Within filter range", - "Worst time": "Worst time", - "Would you like to": "Would you like to", - "Write pin": "Write pin", + "WiFi strength": "WiFi强度", + "With the FarmBot still powered off, manually move the gantry, cross-slide, and Z-axis roughly 150mm away from any of its hardstops. In other words, position the gantry partway along the tracks, position the cross-slide partway across the gantry main beam, and position the Z-axis halfway down.": "在FarmBot仍然关闭电源的情况下,手动将门架,横梁和Z轴大致移动到任何一个硬停位置的150mm处。换句话说,将门架部分沿轨道移动,将横梁部分沿门架主梁移动,并将Z轴部分向下移动一半。", + "Within filter range": "在过滤器范围内", + "Worst time": "最差时间", + "Would you like to": "您想要", + "Write pin": "写入引脚", "X": "X", - "x (mm)": "x (mm)", - "X (mm)": "X (mm)", - "x and y axis": "x and y axis", - "X Axis": "X Axis", - "X position": "X position", - "X-axis": "X-axis", - "x-axis acceleration": "x-axis acceleration", - "X-axis length": "X-axis length", - "x-axis length (mm)": "x-axis length (mm)", - "x-axis maximum speed": "x-axis maximum speed", - "x-axis minimum speed": "x-axis minimum speed", - "X-axis motor": "X-axis motor", - "x-axis motor current": "x-axis motor current", - "x-axis motor step": "x-axis motor step", - "X-axis movements": "X-axis movements", - "x-axis stall detection": "x-axis stall detection", - "X, Y, Z (mm)": "X, Y, Z (mm)", - "X/Y Alternating": "X/Y Alternating", - "X/Y, Ascending": "X/Y, Ascending", - "X/Y, Descending": "X/Y, Descending", + "x (mm)": "x(毫米)", + "X (mm)": "X(毫米)", + "x and y axis": "x和y轴", + "X Axis": "X 轴", + "X position": "X 位置", + "X-axis": "X轴", + "x-axis acceleration": "x轴加速度", + "X-axis length": "X轴长度", + "x-axis length (mm)": "x轴长度(毫米)", + "x-axis maximum speed": "x轴最大速度", + "x-axis minimum speed": "x轴最小速度", + "X-axis motor": "X轴电机", + "x-axis motor current": "x轴电机电流", + "x-axis motor step": "x轴电机步数", + "X-axis movements": "X轴移动", + "x-axis stall detection": "x轴堵转检测", + "X, Y, Z (mm)": "X,Y,Z(毫米)", + "X/Y Alternating": "X/Y 交替", + "X/Y, Ascending": "X/Y,升序", + "X/Y, Descending": "X/Y,降序", "Y": "Y", - "y (mm)": "y (mm)", - "Y (mm)": "Y (mm)", - "Y Axis": "Y Axis", - "Y position": "Y position", - "Y-axis": "Y-axis", - "y-axis acceleration": "y-axis acceleration", - "Y-axis length": "Y-axis length", - "y-axis length (mm)": "y-axis length (mm)", - "y-axis maximum speed": "y-axis maximum speed", - "y-axis minimum speed": "y-axis minimum speed", - "Y-axis motor": "Y-axis motor", - "y-axis motor current": "y-axis motor current", - "y-axis motor step": "y-axis motor step", - "Y-axis movements": "Y-axis movements", - "y-axis stall detection": "y-axis stall detection", - "Y/X Alternating": "Y/X Alternating", - "Y/X, Ascending": "Y/X, Ascending", - "Y/X, Descending": "Y/X, Descending", - "Year": "Year", - "Years": "Years", - "Yellow": "Yellow", - "You are either offline, using a web browser that does not support WebSockets, or are behind a firewall that blocks port 3002. Do not attempt to debug FarmBot hardware until you solve this issue first. You will not be able to troubleshoot hardware issues without a reliable browser and internet connection.": "You are either offline, using a web browser that does not support WebSockets, or are behind a firewall that blocks port 3002. Do not attempt to debug FarmBot hardware until you solve this issue first. You will not be able to troubleshoot hardware issues without a reliable browser and internet connection.", - "You are running an old version of FarmBot OS that is no longer supported.": "You are running an old version of FarmBot OS that is no longer supported.", - "You are scheduling a regimen to run today. Be aware that running a regimen too late in the day may result in skipped regimen tasks. Consider rescheduling this event to tomorrow if this is a concern.": "You are scheduling a regimen to run today. Be aware that running a regimen too late in the day may result in skipped regimen tasks. Consider rescheduling this event to tomorrow if this is a concern.", - "You can publish new versions of this sequence at any time, which other users may choose to upgrade to.": "You can publish new versions of this sequence at any time, which other users may choose to upgrade to.", - "You have a FarmBot": "You have a FarmBot", - "You have made custom modifications to this imported sequence. Upgrading will overwrite all modifications, replacing your copy with the chosen public version.": "You have made custom modifications to this imported sequence. Upgrading will overwrite all modifications, replacing your copy with the chosen public version.", - "You haven't made any sequences or regimens yet. To add an event, first create a sequence or regimen.": "You haven't made any sequences or regimens yet. To add an event, first create a sequence or regimen.", - "You haven't yet taken any photos with your FarmBot. Once you do, they will show up here.": "You haven't yet taken any photos with your FarmBot. Once you do, they will show up here.", - "You may also try increasing motor current by 10%.": "You may also try increasing motor current by 10%.", - "You may also unpublish the sequence and/or delete it from your account at any time to disable the share link. However, these actions will not affect existing imports owned by other user accounts.": "You may also unpublish the sequence and/or delete it from your account at any time to disable the share link. However, these actions will not affect existing imports owned by other user accounts.", - "You may click the button below to resend the email.": "You may click the button below to resend the email.", - "You may experience data loss if you do not refresh the page.": "You may experience data loss if you do not refresh the page.", - "You must register your original FarmBot order number before contacting support.": "You must register your original FarmBot order number before contacting support.", - "You must save changes to the sequence before publishing a new version.": "You must save changes to the sequence before publishing a new version.", - "You're currently using a demo account": "You're currently using a demo account", - "You're currently viewing the": "You're currently viewing the", - "Your browser is connected correctly, but we have no recent record of FarmBot connecting to the internet. This usually happens because of poor WiFi connectivity in the garden, a bad password during configuration, a very long power outage, or blocked ports on FarmBot's local network. Please refer IT staff to:": "Your browser is connected correctly, but we have no recent record of FarmBot connecting to the internet. This usually happens because of poor WiFi connectivity in the garden, a bad password during configuration, a very long power outage, or blocked ports on FarmBot's local network. Please refer IT staff to:", - "your copy": "your copy", - "Your device has no firmware": "Your device has no firmware", - "Your FarmBot's internal computer is the": "Your FarmBot's internal computer is the", - "Your password is changed.": "Your password is changed.", - "Your version of FarmBot OS is outdated and will soon no longer be supported. Please update your device as soon as possible.": "Your version of FarmBot OS is outdated and will soon no longer be supported. Please update your device as soon as possible.", - "Your web browser is unable to communicate with the web app server. Make sure you are connected to the Internet.": "Your web browser is unable to communicate with the web app server. Make sure you are connected to the Internet.", - "Your web browser is unable to connect to the message broker. You might be behind a firewall or disconnected from the Internet. Check your network settings. View the connection status for more details.": "Your web browser is unable to connect to the message broker. You might be behind a firewall or disconnected from the Internet. Check your network settings. View the connection status for more details.", - "Your web browser may not work properly with the FarmBot Web App. If you experience any issues, try using a recent version of Chrome, Firefox, or Edge.": "Your web browser may not work properly with the FarmBot Web App. If you experience any issues, try using a recent version of Chrome, Firefox, or Edge.", + "y (mm)": "y(毫米)", + "Y (mm)": "Y(毫米)", + "Y Axis": "Y轴", + "Y position": "Y位置", + "Y-axis": "Y轴", + "y-axis acceleration": "Y轴加速度", + "Y-axis length": "Y轴长度", + "y-axis length (mm)": "Y轴长度(毫米)", + "y-axis maximum speed": "Y轴最大速度", + "y-axis minimum speed": "Y轴最小速度", + "Y-axis motor": "Y轴电机", + "y-axis motor current": "Y轴电机电流", + "y-axis motor step": "Y轴电机步数", + "Y-axis movements": "Y轴移动", + "y-axis stall detection": "Y轴堵转检测", + "Y/X Alternating": "Y/X,交替", + "Y/X, Ascending": "Y/X,升序", + "Y/X, Descending": "Y/X,降序", + "Year": "年", + "Years": "年", + "Yellow": "黄色", + "You are either offline, using a web browser that does not support WebSockets, or are behind a firewall that blocks port 3002. Do not attempt to debug FarmBot hardware until you solve this issue first. You will not be able to troubleshoot hardware issues without a reliable browser and internet connection.": "您要么处于离线状态,要么使用不支持WebSockets的网络浏览器,或者位于阻止端口3002的防火墙后面。在解决此问题之前,请勿尝试调试FarmBot硬件。没有可靠的浏览器和互联网连接,您将无法排除硬件问题。", + "You are running an old version of FarmBot OS that is no longer supported.": "您正在运行一个不再受支持的旧版本的FarmBot OS。", + "You are scheduling a regimen to run today. Be aware that running a regimen too late in the day may result in skipped regimen tasks. Consider rescheduling this event to tomorrow if this is a concern.": "您正在安排一个今天运行的生活习惯。请注意,如果在一天中运行生活习惯太晚,可能会导致生活习惯任务被跳过。如果这是一个问题,请考虑将此事件重新安排到明天。", + "You can publish new versions of this sequence at any time, which other users may choose to upgrade to.": "您可以随时发布此序列的新版本,其他用户可以选择升级到该版本。", + "You have a FarmBot": "您有一个FarmBot", + "You have made custom modifications to this imported sequence. Upgrading will overwrite all modifications, replacing your copy with the chosen public version.": "您已对此导入的序列进行了自定义修改。升级将覆盖所有修改,使用所选择的公共版本替换您的副本。", + "You haven't made any sequences or regimens yet. To add an event, first create a sequence or regimen.": "您尚未创建任何序列或生活习惯。要添加事件,请首先创建序列或生活习惯。", + "You haven't yet taken any photos with your FarmBot. Once you do, they will show up here.": "您尚未使用您的FarmBot拍摄任何照片。一旦您拍摄,它们将显示在这里。", + "You may also try increasing motor current by 10%.": "您还可以尝试将电机电流增加10%。", + "You may also unpublish the sequence and/or delete it from your account at any time to disable the share link. However, these actions will not affect existing imports owned by other user accounts.": "您还可以随时取消发布序列和/或从您的帐户中删除它,以禁用共享链接。但是,这些操作不会影响其他用户帐户拥有的现有导入。", + "You may click the button below to resend the email.": "您可以单击下面的按钮重新发送电子邮件。", + "You may experience data loss if you do not refresh the page.": "如果您不刷新页面,可能会丢失数据。", + "You must register your original FarmBot order number before contacting support.": "在联系支持之前,您必须注册您的原始FarmBot订单号。", + "You must save changes to the sequence before publishing a new version.": "在发布新版本之前,您必须保存对序列的更改。", + "You're currently using a demo account": "您当前正在使用演示帐户", + "You're currently viewing the": "您当前正在查看", + "Your browser is connected correctly, but we have no recent record of FarmBot connecting to the internet. This usually happens because of poor WiFi connectivity in the garden, a bad password during configuration, a very long power outage, or blocked ports on FarmBot's local network. Please refer IT staff to:": "您的浏览器已正确连接,但我们没有最近的记录显示FarmBot连接到互联网。这通常是由于花园中的WiFi连接质量差、配置期间密码错误、长时间的停电或FarmBot本地网络上的端口被阻止而引起的。请向IT人员求助:", + "your copy": "您的副本", + "Your device has no firmware": "您的设备没有固件", + "Your FarmBot's internal computer is the": "您的FarmBot的内部计算机是", + "Your password is changed.": "您的密码已更改。", + "Your version of FarmBot OS is outdated and will soon no longer be supported. Please update your device as soon as possible.": "您的FarmBot OS版本已过时,将很快不再受支持。请尽快更新您的设备。", + "Your web browser is unable to communicate with the web app server. Make sure you are connected to the Internet.": "您的网络浏览器无法与Web应用程序服务器通信。确保您已连接到互联网。", + "Your web browser is unable to connect to the message broker. You might be behind a firewall or disconnected from the Internet. Check your network settings. View the connection status for more details.": "您的网络浏览器无法连接到消息代理。您可能在防火墙后面或未连接到互联网。检查您的网络设置。查看连接状态以获取更多详细信息。", + "Your web browser may not work properly with the FarmBot Web App. If you experience any issues, try using a recent version of Chrome, Firefox, or Edge.": "您的网络浏览器可能无法与FarmBot Web App正常工作。如果遇到任何问题,请尝试使用Chrome、Firefox或Edge的最新版本。", "z": "z", "Z": "Z", - "Z (mm)": "Z (mm)", - "Z Axis": "Z Axis", - "Z axis coordinate (millimeters) of soil level. This value will only be used if there are no soil height measurements available. To add soil height measurements, run a sequence with the MEASURE SOIL HEIGHT command in a grid over your garden. Alternatively, use a ruler to manually measure the height at various locations in the garden and add corresponding soil height points from the points panel. (default: 0)": "Z axis coordinate (millimeters) of soil level. This value will only be used if there are no soil height measurements available. To add soil height measurements, run a sequence with the MEASURE SOIL HEIGHT command in a grid over your garden. Alternatively, use a ruler to manually measure the height at various locations in the garden and add corresponding soil height points from the points panel. (default: 0)", - "Z axis coordinate (millimeters) to which the z axis should be retracted during Safe Z moves. It is recommended to choose a value at which the z axis is all of the way up to provide as much clearance as possible. (default: 0)": "Z axis coordinate (millimeters) to which the z axis should be retracted during Safe Z moves. It is recommended to choose a value at which the z axis is all of the way up to provide as much clearance as possible. (default: 0)", - "Z doesn't match calibration": "Z doesn't match calibration", - "Z height matches calibration": "Z height matches calibration", - "Z position": "Z position", - "Z-axis": "Z-axis", - "z-axis acceleration": "z-axis acceleration", - "Z-axis length": "Z-axis length", - "z-axis length (mm)": "z-axis length (mm)", - "z-axis maximum speed": "z-axis maximum speed", - "z-axis minimum speed": "z-axis minimum speed", - "Z-axis motor": "Z-axis motor", - "z-axis motor current": "z-axis motor current", - "z-axis motor step": "z-axis motor step", - "Z-axis movements": "Z-axis movements", - "z-axis stall detection": "z-axis stall detection", - "zone name": "zone name", - "Zones": "Zones", - "zoom in": "zoom in", - "zoom out": "zoom out" + "Z (mm)": "Z(毫米)", + "Z Axis": "Z轴", + "Z axis coordinate (millimeters) of soil level. This value will only be used if there are no soil height measurements available. To add soil height measurements, run a sequence with the MEASURE SOIL HEIGHT command in a grid over your garden. Alternatively, use a ruler to manually measure the height at various locations in the garden and add corresponding soil height points from the points panel. (default: 0)": "土壤水平的Z轴坐标(毫米)。仅当没有土壤高度测量数据可用时,才会使用此值。要添加土壤高度测量数据,请在花园上运行带有MEASURE SOIL HEIGHT命令的序列。或者,使用标尺在花园的各个位置手动测量高度,并从点面板添加相应的土壤高度点。(默认值:0)", + "Z axis coordinate (millimeters) to which the z axis should be retracted during Safe Z moves. It is recommended to choose a value at which the z axis is all of the way up to provide as much clearance as possible. (default: 0)": "在安全Z移动期间应将z轴缩回的Z轴坐标(毫米)。建议选择一个值,其中z轴全部上移,以尽可能提供尽可能多的间隙。(默认值:0)", + "Z doesn't match calibration": "Z不符合校准", + "Z height matches calibration": "Z高度符合校准", + "Z position": "Z位置", + "Z-axis": "Z轴", + "z-axis acceleration": "z轴加速度", + "Z-axis length": "Z轴长度", + "z-axis length (mm)": "z轴长度(毫米)", + "z-axis maximum speed": "z轴最大速度", + "z-axis minimum speed": "z轴最小速度", + "Z-axis motor": "Z轴电机", + "z-axis motor current": "z轴电机电流", + "z-axis motor step": "z轴电机步进", + "Z-axis movements": "Z轴运动", + "z-axis stall detection": "z轴堵转检测", + "zone name": "区域名称", + "Zones": "区域", + "zoom in": "放大", + "zoom out": "缩小" }, "other_translations": { "ACCELERATE FOR (steps)": "加速 (步骤)", From 1bc26639fd3e3f0f57cff08c35e35ebfd44d02bb Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 25 Jun 2024 12:15:43 -0700 Subject: [PATCH 02/54] run translation helper: zh --- .../languages/translation_metrics.md | 24 +- public/app-resources/languages/zh.json | 548 ++++++++++++------ 2 files changed, 377 insertions(+), 195 deletions(-) diff --git a/public/app-resources/languages/translation_metrics.md b/public/app-resources/languages/translation_metrics.md index 0617a34231..b531bd9e2a 100644 --- a/public/app-resources/languages/translation_metrics.md +++ b/public/app-resources/languages/translation_metrics.md @@ -21,21 +21,21 @@ For example, `sudo docker compose run web npm run translation-check`._ See the [README](https://github.com/FarmBot/Farmbot-Web-App#translating-the-web-app) for contribution instructions. -Total number of phrases identified by the language helper for translation: __2369__ +Total number of phrases identified by the language helper for translation: __2373__ |Language|Percent translated|Translated|Untranslated|Other Translations| |:---:|---:|---:|---:|---:| -|da|4%|84|2285|28| -|de|78%|1854|515|593| -|es|57%|1362|1007|547| -|fr|39%|927|1442|456| -|it|97%|2309|60|150| -|ko|98%|2312|57|38| -|nl|3%|62|2307|76| -|pt|2%|55|2314|98| -|ru|19%|441|1928|356| -|th|0%|0|2369|0| -|zh|3%|69|2300|82| +|da|3%|83|2290|29| +|de|77%|1833|540|614| +|es|57%|1353|1020|556| +|fr|39%|919|1454|464| +|it|96%|2283|90|176| +|ko|96%|2286|87|64| +|nl|3%|61|2312|77| +|pt|2%|55|2318|98| +|ru|18%|436|1937|361| +|th|0%|0|2373|0| +|zh|91%|2159|214|156| **Percent translated** refers to the percent of phrases identified by the language helper that have been translated. Additional phrases not identified diff --git a/public/app-resources/languages/zh.json b/public/app-resources/languages/zh.json index bd419de38c..0b61667346 100644 --- a/public/app-resources/languages/zh.json +++ b/public/app-resources/languages/zh.json @@ -1,79 +1,5 @@ { "translated": { - "Account Settings": "帐户设置", - "Age": "年龄", - "Agree to Terms of Service": "同意服务条款", - "BACK": "后退", - "Camera": "照相机", - "Create Account": "创建帐户", - "Create An Account": "申请新帐号", - "Data Label": "数据记录单", - "Day {{day}}": "时期 {{day}}", - "days old": "21日龄", - "Delete": "删除", - "Delete this plant": "删除这个植物", - "Drag and drop into map": "拖放到地图上", - "Edit": "编辑工作", - "Email": "电子邮件", - "Enter Email": "输入电子邮件", - "Enter Password": "输入密码", - "Execute Sequence": "执行序列", - "FIRMWARE": "固件", - "GO": "走", - "I Agree to the Terms of Service": "我同意服务条款", - "Location": "位置", - "Login": "登录", - "Logout": "注销", - "Message": "消息", - "MOVE AMOUNT (mm)": "移动距离 (mm)", - "Move Relative": "相对移动", - "New Password": "新口令", - "no": "否", - "Old Password": "原口令", - "Operator": "操作员", - "Package Name": "类名", - "Parameters": "参数", - "Password": "口令", - "Plants": "植物", - "Problem Loading Terms of Service": "加载服务条款时出现的问题", - "Regimens": "方案", - "Request sent": "发送请求", - "Reset": "重新设定", - "RESET": "重新设定", - "Reset Password": "重置密码", - "Reset your password": "重置您的密码", - "RESTART": "重新开始", - "Save": "保存", - "Send Message": "发送信息", - "Sequence": "序列", - "Sequence Editor": "序列编辑器", - "Sequence or Regimen": "序列或方案", - "Sequences": "序列", - "SHUTDOWN": "关机", - "Speed": "速度", - "Started": "启动", - "Starts": "开始", - "Steps per MM": "步距/MM", - "Take a Photo": "拍照", - "Take Photo": "拍照", - "Time": "时间", - "Time in milliseconds": "时间以毫秒为单位", - "Until": "直到", - "UP TO DATE": "最新的", - "Value": "价值", - "Variable": "可变的", - "Verify Password": "验证密码", - "Version": "版本", - "Wait": "等候", - "Weed Detector": "杂草探测器", - "X AXIS": "X轴", - "Y AXIS": "Y轴", - "yes": "是", - "Your Name": "你的名字", - "Z AXIS": "Z轴" - }, - "untranslated": { - "": "", " copy ": " 复制 ", " Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:": " 特此授予获得此软件和相关文档文件(“软件”)副本的任何人免费许可,以无限制方式处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再授权和/或销售软件副本的权利,并允许向其提供软件的人员这样做,但须遵守以下条件:", " request sent to device.": " 请求已发送至设备。", @@ -89,10 +15,8 @@ "(No selection)": "(不选择)", "(resets upon refresh)": "(刷新后重置)", "(unknown)": "(未知)", - "(x, y, z)": "(x, y, z)", "{{ amount }}mm": "{{ amount }}毫米", "{{ axis }}-axis profile": "{{ axis }}-轴 配置", - "{{ name }} Grid": "{{ name }} Grid", "{{ resetMethod }} resetting your FarmBot will not affect any of your data or settings from your web app account, allowing you to do a complete restore to your device once it is back online and paired with your web app account.": "{{ resetMethod }} 重置您的 FarmBot 不会影响您的 Web 应用程序帐户中的任何数据或设置,一旦设备重新上线并与 Web 应用程序帐户配对,您就可以对其进行完全恢复。", "{{axis}} (mm)": "{{axis}} (毫米)", "{{axis}}-Offset": "{{axis}}-偏移", @@ -100,16 +24,8 @@ "{{length}} {{name}} selected": "{{length}} {{name}} 被选择", "{{seconds}} seconds!": "{{seconds}} 秒!", "# of plants": "# 植物", - "1280 x 960 (1.3MP)": "1280 x 960 (1.3MP)", - "1600 x 1200 (2MP)": "1600 x 1200 (2MP)", "24 hour response time": "24 小时响应", - "2592 x 1944 (5MP)": "2592 x 1944 (5MP)", - "320 x 240 (0.08MP)": "320 x 240 (0.08MP)", - "3280 x 2464 (8MP)": "3280 x 2464 (8MP)", - "4056 x 3040 (12.3MP)": "4056 x 3040 (12.3MP)", - "640 x 480 (0.3MP)": "640 x 480 (0.3MP)", "72 hour response time": "72小时响应", - "800 x 600 (0.5MP)": "800 x 600 (0.5MP)", "A different axis moved": "移动的轴", "A microstep value of 1 is recommended for best performance when quiet motor mode is enabled.": "当启用静音电机模式时,建议使用微步值 1 以获得最佳性能。", "A new version of the FarmBot web app has been released. Refresh page?": "FarmBot 网络应用程序的新版本已发布。刷新页面?", @@ -122,14 +38,13 @@ "Account has been reset.": "账号已重置", "Account Menu": "账号菜单", "Account Not Verified": "账号未认证", + "Account Settings": "帐户设置", "Action": "执行", "Actions": "动作", - "active": "活动", "Active": "活动", "add": "添加", "Add a seed container": "添加一个种子容器", "Add a tool or seed container": "添加一个工具或种子容器", - "Add Command": "添加命令", "Add event": "添加事件", "Add Event": "添加事件", "add filter": "添加过滤", @@ -177,15 +92,16 @@ "Advanced": "高级", "advanced mode": "高级模式", "age": "年龄", + "Age": "年龄", "age selection empty": "年龄选择为空", "agree": "同意", + "Agree to Terms of Service": "同意服务条款", "all": "所有", "All": "所有", "All items scheduled before the start time. Nothing to run.": "所有项目均在开始时间之前安排好。没有要运行的项目。", "All of the plants you added to your garden are listed here in the plants panel. Mousing over a plant will highlight it in the map and vice versa. Go ahead and click a plant and then advance the tour.": "您添加到花园的所有植物都列在植物面板中。将鼠标悬停在植物上会在地图上突出显示该植物,反之亦然。继续单击植物,然后继续游览。", "All Soil Height": "所有土壤高度", "All systems nominal.": "所有系统均正常。", - "alpha": "alpha", "Already added.": "已经添加", "Always": "总是", "always highlight current photo in map": "始终在地图上突出显示当前照片", @@ -200,7 +116,6 @@ "APP VERSION": "应用程序版本", "apply": "申请", "apply garden": "申请花园", - "Arduino/Farmduino": "Arduino/Farmduino", "Are all configurator steps complete?": "所有配置器步骤是否完成?", "Are FarmBot's motors unpowered? (Try moving the Y-axis by hand)": "FarmBot 的电机是否没有动力?(尝试手动移动 Y 轴)", "Are they in use by sequences?": "它们是否被序列使用?", @@ -221,9 +136,7 @@ "Assemble your FarmBot.": "组装你的 FarmBot。", "Assembly": "组装", "Assembly documentation": "组装文档", - "Assertion": "Assertion", "Assign an action or sequence to execute when a Raspberry Pi GPIO pin is activated.": "分配在 Raspberry Pi GPIO 引脚激活时执行的操作或序列", - "at soil level": "at soil level", "Attach the rotary tool to the UTM and press VERIFY.": "将旋转工具连接到 UTM 并按 VERIFY(验证)。", "Attach the seeder tool to the UTM and press VERIFY.": "将播种机工具连接到 UTM 并按 VERIFY。", "Attach the soil sensor tool to the UTM and press the READ SENSOR for the SOIL MOISTURE sensor.": "将土壤传感器工具连接到 UTM,然后按下土壤湿度传感器的读取传感器。", @@ -245,6 +158,7 @@ "Axis Length (mm)": "轴长 (mm)", "back": "后退", "Back": "后退", + "BACK": "后退", "Back to plant overview": "返回工厂概览", "back to sequence": "返回序列", "back to sequences": "返回序列", @@ -255,8 +169,6 @@ "Begin?": "开始?", "Best time": "最好的时间", "beta": "测试版", - "BIND": "BIND", - "Binomial Name": "Binomial Name", "Black": "黑色的", "Blue": "蓝色的", "BLUR": "模糊", @@ -299,6 +211,7 @@ "Calibration total retries": "校准总重试次数", "calibration value": "校准值", "camera": "相机", + "Camera": "照相机", "CAMERA": "相机", "Camera calibrated at z-axis height": "在 z 轴高度校准的相机", "Camera calibration": "相机校准", @@ -345,7 +258,6 @@ "Check hardware for resistance.": "检查硬件的阻力。", "Check motor cable connections. Try again while observing electronics box LED activity.": "检查电机电缆连接。观察电子箱 LED 活动,然后重试。", "Check power cable connections.": "检查电源线连接。", - "Check that the camera is plugged in correctly to either a Raspberry Pi USB port (Express v1.0 kits and all Genesis kits) or into one of the vertically oriented USB ports on the Farmduino (Express v1.1 kits). For cameras with a 90 degree intermediary connector at the cross-slide, ensure the connectors are fully connected.": "检查相机是否正确插入 Raspberry Pi USB 端口(Express v1.0 套件和所有 Genesis 套件)或 Farmduino 上的垂直 USB 端口之一(Express v1.1 套件)。对于在横向滑动处具有 90 度中间连接器的相机,请确保连接器已完全连接。", "Check the E-STOP button wiring.": "检查紧急停止按钮接线。", "Check the LED light strip power cable connections.": "检查LED灯带电源线连接。", "Check the side of the box your FarmBot came in. What is the labeled version?": "检查 FarmBot 所装盒子的侧面。标签上的版本是什么?", @@ -394,8 +306,6 @@ "Close": "关闭", "close profile viewer": "关闭个人资料查看器", "close saved garden": "关闭已保存的花园", - "collage": "collage", - "collapse": "collapse", "Color": "颜色", "Color Range": "颜色范围", "Color range. (default: {{ defaultLow }} - {{ defaultHigh }} ({{ defaultColor }}))": "颜色范围 (默认值: {{ defaultLow }} - {{ defaultHigh }} ({{ defaultColor }}))", @@ -413,7 +323,6 @@ "Complete setup wizard": "完成安装向导", "Complete the configurator steps.": "完成配置器步骤。", "Completed": "完成的", - "Completed jobs older than five minutes may be cleared upon refresh": "超过五分钟的已完成作业可能会在刷新时被清除", "computer": "电脑", "Config data successfully deleted.": "配置数据已成功删除。", "Config editor": "配置编辑器", @@ -451,11 +360,12 @@ "Could not download FarmBot OS update information.": "无法下载 FarmBot OS 更新信息。", "Could not fetch package name": "无法获取包名称", "Could not get release notes.": "无法获取发行说明。", - "CPU": "CPU", "CPU temperature": "CPU 温度", "CPU usage": "CPU使用率", "Create a new garden from scratch or by copying plants from the current garden.": "从头开始创建一个新花园或从现有花园复制植物。", "Create a new sequence and add the FIND HOME command.": "创建一个新序列并添加 FIND HOME 命令。", + "Create Account": "创建帐户", + "Create An Account": "申请新帐号", "Create group": "创建组", "create subfolder": "创建子文件夹", "Create subfolder": "创建子文件夹", @@ -464,7 +374,6 @@ "Crop images displayed in the garden map to remove black borders from image rotation. Crop amount determined by CAMERA ROTATION value.": "裁剪花园地图中显示的图像,以消除图像旋转产生的黑色边框。裁剪量由相机旋转值决定。", "Crop map images": "裁剪地图图像", "Crop search": "作物搜索", - "Current position": "当前位置", "Current position (mm)": "当前位置 (mm)", "Current version only": "仅限当前版本", "Custom": "自定义", @@ -474,42 +383,37 @@ "Custom field": "自定义字段", "Custom number": "自定义数量", "Custom Settings": "自定义设置", - "Custom settings can be added here and accessed via the Lua env() function.": "可以在这里添加自定义设置并通过 Lua env() 函数访问。", + "Custom settings can be added here and accessed via the Lua env() function.": "可以在这里添加自定义设置并通过 Lua env() 函数访问。", "Custom text": "自定义文本", "custom tool graphics": "自定义工具图形", "Custom tools": "自定义工具", - "Customize which Action or Sequence you want FarmBot to execute when you press Button 3, 4, or 5 on the electronics box. To start, we recommend setting Button 5 to the 'Find Home' sequence. You can change this later from the controls panel.": "自定义当您按下电子盒上的按钮 3、4 或 5 时 FarmBot 执行的操作或序列。首先,我们建议将按钮 5 设置为“查找主页”序列。您可以稍后从控制面板更改此设置。", + "Data Label": "数据记录单", "Date": "日期", "Date Planted": "种植日期", "Day": "天", + "Day {{day}}": "时期 {{day}}", "day old": "日龄", "days": "天", "Days": "天", + "days old": "21日龄", "debug log stream": "调试日志流", "debug logs": "调试日志", "default": "默认", - "Default plant depth": "默认植物深度", "Default value": "默认值", "Default Value": "默认值", "delete": "删除", + "Delete": "删除", "Delete account": "删除帐户", "delete all": "删除所有", "Delete all {{ count }} plants in your main garden?": "删除主花园里的所有 {{ count }} 株植物?", "Delete all {{ count }} points in section?": "删除部分中的所有 {{ count }} 点?", - "Delete all created points": "删除所有已创建的点", - "Delete all created weeds": "删除所有已创建的杂草", "delete all data": "删除所有数据", "Delete all logs": "删除所有日志", - "Delete all of the points created through this panel.": "删除通过此面板创建的所有点。", - "Delete all of the weeds created through this panel.": "删除通过此面板创建的所有杂草。", "delete all plants in garden": "删除花园中的所有植物", - "Delete all the points you have created?": "删除您创建的所有点?", - "Delete all the weeds you have created?": "删除您创建的所有杂草?", "delete folder": "删除文件夹", "delete garden": "删除花园", "Delete group": "删除组", "delete log": "删除日志", - "Delete multiple": "删除多个", "Delete Photo": "删除照片", "delete regimen": "删除方案", "delete sequence": "删除序列", @@ -545,7 +449,6 @@ "Did FarmBot move to the end of the axis and then move back to the home position for this axis?": "FarmBot 是否移动到轴的末端,然后移动回该轴的原点位置?", "Did FarmBot reach the home position (touching the hardstop) for this axis and set the coordinate to 0? Note: sometimes after a movement, FarmBot will settle into place and coordinates may change by +/-0.5mm from the desired value. If the coordinates are within 1mm of 0, that is acceptable.": "FarmBot 是否到达该轴的原点位置(触碰硬停止),并将坐标设置为 0?注意:有时在移动后,FarmBot 会就位,坐标可能会从所需值改变 +/-0.5mm。如果坐标在 0 的 1mm 以内,那是可以接受的。", "Did FarmBot's {{ axis }}-axis move? (Don't worry about the direction right now)": "FarmBot 的 {{ axis }} 轴是否移动?(暂时不用担心方向)", - "Did FarmBot's motors power back on? (Try moving the Y-axis by hand)": "FarmBot 的电机是否重新启动?(尝试手动移动 Y 轴)", "Did the lights turn on?": "灯是否亮了?", "Did the rotary tool rotate?": "旋转工具是否旋转了?", "Did the sensor return a value?": "传感器是否返回了一个值?", @@ -597,12 +500,12 @@ "Drag and drop": "拖放", "DRAG COMMAND HERE": "在此拖动命令", "duplicate step": "重复步骤", - "Duration": "持续时间", "Dynamic map size": "动态地图大小", "E-STOP": "紧急停止", "E-stop button": "紧急停止按钮", "E-STOP Button": "紧急停止按钮", "E-Stop on Movement Error": "运动错误时紧急停止", + "Edit": "编辑工作", "Edit event": "编辑事件", "edit filter settings": "编辑过滤设置", "edit folder": "编辑文件夹", @@ -612,7 +515,6 @@ "Edit on": "编辑开启", "Edit plant group": "编辑植物组", "Edit point group": "编辑点组", - "Edit Sequence": "编辑序列", "Edit slot": "编辑插槽", "Edit slot coordinates": "编辑插槽坐标", "Edit slot coordinates setup": "编辑插槽坐标设置", @@ -625,6 +527,7 @@ "Electronics Board": "电子板", "Else Execute": "否则执行", "email": "电子邮件", + "Email": "电子邮件", "Email has been sent.": "电子邮件已发送。", "emergency stop": "紧急停止", "Emergency stop": "紧急停止", @@ -653,6 +556,8 @@ "End date must not be before start date.": "结束日期不得早于开始日期。", "End time must be after start time.": "结束时间必须在开始时间之后。", "Ensure that the camera lens is not covered and there is adequate lighting. Try unplugging the camera and plugging it back in.": "确保摄像头镜头没有被遮盖并且有足够的光线。尝试拔下摄像头然后重新插入。", + "Enter Email": "输入电子邮件", + "Enter Password": "输入密码", "Entire system": "整个系统", "ENV Editor": "环境变量编辑器", "Environment": "环境", @@ -671,6 +576,7 @@ "Execute a sequence if a condition is satisfied. If the condition is not satisfied, chose to do nothing or execute a different sequence.": "如果满足条件则执行序列。如果不满足条件,可以选择不执行或执行不同的序列。", "Execute Lua commands. For power users and software developers.": "执行Lua命令。适用于高级用户和软件开发人员。", "Execute sequence": "执行序列", + "Execute Sequence": "执行序列", "exit": "退出", "Exit": "退出", "Export": "导出", @@ -719,7 +625,6 @@ "FarmBot's motors are still powered": "FarmBot的电机仍然通电", "FarmBot's motors are still unpowered": "FarmBot的电机仍然未通电", "Farmduino firmware is missing. Press the yellow FLASH FIRMWARE button to flash the firmware to your FarmBot. Verify FIRMWARE selection matches FarmBot kit version and check the USB cable between the Raspberry Pi and the Farmduino. Reboot FarmBot after a reconnection. If the issue persists, reconfiguration of FarmBot OS may be necessary.": "Farmduino固件丢失。按下黄色的闪存固件按钮将固件刷新到您的FarmBot上。确认固件选择与FarmBot套件版本匹配,并检查Raspberry Pi和Farmduino之间的USB电缆。重新连接后重启FarmBot。如果问题仍然存在,可能需要重新配置FarmBot操作系统。", - "Farmware": "Farmware", "Farmware execution": "Farmware执行", "Farmware manifest URL": "Farmware清单URL", "Farmware not found.": "找不到Farmware。", @@ -735,7 +640,6 @@ "filter": "过滤器", "Filter map photos": "过滤地图照片", "filters": "过滤器", - "Filters active": "过滤器已激活", "Find a detail in the image at the soil level where the coordinates are known (for example, a spot watered by FarmBot), and compare the known coordinates against the location for the detail shown in the map.": "在图像中找到土壤水平上坐标已知的细节(例如,FarmBot浇水的地点),并将已知坐标与地图中显示的细节位置进行比较。", "Find axis length": "查找轴长度", "find home": "查找原点", @@ -750,16 +654,15 @@ "Finish setting up your account and FarmBot using our setup wizard. To open the setup wizard, click the **Setup: {{ percentComplete }}** button in the main navigation bar.": "使用我们的设置向导完成账户和FarmBot的设置。要打开设置向导,请点击主导航栏中的**设置: {{ percentComplete }}**按钮。", "Finish setup": "完成设置", "Firmware": "固件", + "FIRMWARE": "固件", "Firmware code": "固件代码", "Firmware commit": "固件提交", "Firmware Name": "固件名称", "Firmware path": "固件路径", - "Firmware value from your choice in the dropdown to the left, as understood by the Web App.": "Web应用程序理解的下拉菜单中选择的固件值。", "Firmware value reported from the firmware, as understood by FarmBot OS.": "FarmBot操作系统理解的由固件报告的固件值。", "Firmware value reported from the firmware.": "固件报告的固件值。", "Fix issues above to continue.": "修复上述问题以继续。", "flash": "闪存", - "Flash FarmBot's SD card with FarmBot OS and re-insert it.": "使用FarmBot操作系统刷新FarmBot的SD卡并重新插入。", "flash firmware": "刷新固件", "Flash firmware": "刷新固件", "Flash Firmware": "刷新固件", @@ -790,6 +693,7 @@ "Getting started": "入门", "Getting Started": "入门", "Give your group a descriptive name such as \"All Spinach Plants\". When you are finished editing your group press the back button and advance the tour.": "为您的组提供一个描述性名称,例如“所有菠菜植物”。完成编辑组后,按返回按钮继续导览。", + "GO": "走", "Go ahead and add more groups. It is best to have a group for every set of plants where you wish to perform the same operation (such as watering) on each member of the group. Once you have added additional groups, you are finished with this tour!": "继续添加更多组。最好为每组植物分配一个组,您希望对组中的每个成员执行相同的操作(例如浇水)。添加更多组后,您就完成了这次导览!", "Go ahead and add more plants to your garden. Once you have added at least two crop types, advance the tour.": "继续在您的花园中添加更多植物。一旦您添加了至少两种作物类型,请继续导览。", "go back": "返回", @@ -800,7 +704,6 @@ "Greater than": "大于", "Green": "绿色", "Grid and row planting": "网格和行种植", - "Grid and Row Planting": "网格和行种植", "Grid point": "网格点", "Group": "组", "Group Filters": "组过滤器", @@ -848,12 +751,12 @@ "hours prior to most recent record": "最近记录前的小时数", "HUE": "色调", "I agree to the": "我同意", + "I Agree to the Terms of Service": "我同意服务条款", "I can see the farmbot-xxxx network but my device will not connect": "我可以看到farmbot-xxxx网络,但我的设备无法连接", "I can't find the calibration card": "我找不到校准卡", "I do not know my FarmBot model": "我不知道我的FarmBot型号", "I do not know my order number": "我不知道我的订单号", "I do not know where to connect the ethernet cable": "我不知道在哪里连接以太网电缆", - "I do not know where to get FarmBot OS": "我不知道在哪里获取FarmBot操作系统", "I do not wish to continue yet": "我还不想继续", "I pressed the wrong button": "我按错了按钮", "I still need to assemble FarmBot": "我还需要组装FarmBot", @@ -866,7 +769,6 @@ "If encoders or limit switches are enabled, find the home position when the device powers on. Warning! This will perform homing on all axes when the device powers on. Encoders or limit switches must be enabled. It is recommended to make sure homing works properly before enabling this feature. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "如果编码器或限位开关已启用,在设备开机时查找原位。警告!这将在设备开机时对所有轴执行归位。必须启用编码器或限位开关。建议在启用此功能之前确保归位正常工作。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", "If encoders or limit switches are enabled, home axis and determine maximum. Will set axis length value.": "如果编码器或限位开关已启用,归位轴并确定最大值。将设置轴长度值。", "If encoders, stall detection, or limit switches are enabled, home axis and determine maximum. Will set axis length value.": "如果编码器、堵转检测或限位开关已启用,归位轴并确定最大值。将设置轴长度值。", - "If not using a webcam, use this setting to remove the widget from the Controls panel.": "如果不使用摄像头,请使用此设置从控制面板中移除小部件。", "If not using sensors, use this setting to remove the panel from the Farm Designer.": "如果不使用传感器,请使用此设置从农场设计师中移除面板。", "If stall detection or limit switches are enabled, find home for an axis (set zero position).": "如果启用了堵转检测或限位开关,请为轴查找原位(设置零点位置)。", "If stall detection or limit switches are enabled, find the home position when the device powers on. Warning! This will perform homing on all axes when the device powers on. Stall detection or limit switches must be enabled. It is recommended to make sure homing works properly before enabling this feature. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "如果启用了堵转检测或限位开关,在设备开机时查找原位。警告!这将在设备开机时对所有轴执行归位。必须启用堵转检测或限位开关。建议在启用此功能之前确保归位正常工作。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", @@ -910,7 +812,6 @@ "Input is not needed for this Farmware.": "此Farmware不需要输入。", "Input required": "需要输入", "Insert a luer lock needle into the 3-in-1 tool head and place a seed trough into the gantry-mounted seed trough holder. Then, using the controls popup, instruct FarmBot to find the home position.": "将路尔锁针插入3合1工具头中,并将种子槽放入龙门安装的种子槽托架中。然后,使用控制弹出窗口,指示FarmBot找到原位。", - "Inspect the wood raised bed (Express kits) or track extrusions (Genesis kits) for bumps. Use sand paper to smooth out imperfections.": "检查木制高床(Express套件)或轨道挤压件(Genesis套件)是否有凹凸。使用砂纸平滑不完美的地方。", "Install": "安装", "Install error": "安装错误", "install Farmware": "安装Farmware", @@ -919,7 +820,6 @@ "Install new Farmware": "安装新Farmware", "installation pending": "正在安装", "Installing FarmBot OS": "安装FarmBot操作系统", - "Installing FarmBot OS documentation": "安装FarmBot操作系统文档", "Internal Computer": "内部计算机", "internal envs": "内部环境", "Internationalize Web App": "国际化Web应用程序", @@ -964,7 +864,6 @@ "Is the FarmBot able to move reliably along the full length of the Y-axis in both directions?": "FarmBot是否能够可靠地沿Y轴的全长双向移动?", "Is the FarmBot able to move reliably along the full length of the Z-axis in both directions?": "FarmBot是否能够可靠地沿Z轴的全长双向移动?", "Is the location in the image aligned with the map location?": "图像中的位置是否与地图位置对齐?", - "Is the SD card with FarmBot OS installed?": "是否已安装FarmBot操作系统的SD卡?", "Is the status 'connected'?": "状态是否为“已连接”?", "Is the UTM cable plugged in?": "UTM电缆是否已插入?", "Is the z-axis as high as it will go?": "Z轴是否达到最高点?", @@ -998,8 +897,6 @@ "latitude": "纬度", "Learn more": "了解更多", "Learn more about the app": "了解更多关于应用的信息", - "LED 3": "LED 3", - "LED 4": "LED 4", "LED light strip": "LED灯带", "Less": "更少", "Less than": "小于", @@ -1016,17 +913,18 @@ "Loading...": "加载中...", "Local IP": "本地IP", "location": "位置", + "Location": "位置", "Location {{ num }}": "位置 {{ num }}", "Location info": "位置信息", "Log not sent by current version of FarmBot OS.": "日志未由当前版本的FarmBot OS发送。", + "Login": "登录", "logout": "登出", + "Logout": "注销", "Logout and destroy token": "登出并销毁令牌", "Logs": "日志", "longitude": "经度", "Look for the 'Available UART devices' log message.": "查找“可用UART设备”的日志消息。", "Look inside the electronics box. What color cable is plugged into the top of the Raspberry Pi (the green circuit board)?": "查看电子盒内部。哪种颜色的电缆插入了树莓派的顶部(绿色电路板)?", - "low": "低", - "Lua": "Lua", "M-F 9-5 PST": "周一至周五 上午9点至下午5点 太平洋标准时间", "MAC address": "MAC地址", "Make a real account": "创建一个真实的账户", @@ -1078,6 +976,7 @@ "Memory": "内存", "Memory usage": "内存使用情况", "Menu": "菜单", + "Message": "消息", "Message Broker": "消息代理", "Messages": "消息", "Microsteps per step": "每步微步", @@ -1107,10 +1006,7 @@ "More options": "更多选项", "MORPH": "形态", "Most people connect their FarmBot to the internet over WiFi, though you may optionally use a hardwired ethernet connection. If you would like to use an ethernet connection, simply connect an ethernet cable between your WiFi router and the Raspberry Pi.": "大多数人将其FarmBot连接到WiFi上的互联网,尽管您可以选择使用有线以太网连接。如果您想要使用以太网连接,只需在WiFi路由器和树莓派之间连接以太网电缆即可。", - "Motor Current": "电机电流", - "Motor current in milliamps. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "电机电流(毫安)。 (默认值:x: {{ x }}, y: {{ y }}, z: {{ z }})", "Motor Load": "电机负载", - "Motor position plot": "电机位置图", "Motor stall sensitivity. Most sensitive: -63. Least sensitive: +63. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "电机堵转灵敏度。 最敏感:-63。 最不敏感:+63。 (默认值:x: {{ x }}, y: {{ y }}, z: {{ z }})", "Motors": "电机", "MOTORS": "电机", @@ -1126,6 +1022,7 @@ "Move into": "移动到", "move mode": "移动模式", "Move out of folders": "移出文件夹", + "Move Relative": "相对移动", "move sequence": "移动序列", "move step": "移动步骤", "Move To": "移动到", @@ -1148,16 +1045,14 @@ "Negative Coordinates Only": "仅负坐标", "Negative X": "负X", "Negative Y": "负Y", - "Network Quality": "网络质量", "Never": "从不", "New Folder": "新文件夹", "New message from bot": "来自机器人的新消息", + "New Password": "新口令", "New password and confirmation do not match.": "新密码与确认密码不匹配。", "New password must be at least 8 characters.": "新密码必须至少8个字符。", "New Peripheral": "新外设", - "New regimen ": "新日程", "New Sensor": "新传感器", - "new sequence {{ num }}": "新序列 {{ num }}", "New Terms of Service": "新服务条款", "newer": "更新", "Newer than": "更新于", @@ -1165,7 +1060,7 @@ "Next": "下一个", "next image": "下一张图片", "Next image": "下一张图片", - "no active jobs": "没有活动任务", + "no": "否", "No active weeds.": "没有活动杂草。", "No camera selected": "未选择摄像头", "No day(s) selected.": "未选择日期。", @@ -1206,7 +1101,6 @@ "Node name": "节点名称", "none": "无", "None": "无", - "normal": "正常", "not all features of the app will work because there is not a real FarmBot connected to this account. Additionally, keep in mind that when you leave this web page, the demo account and all data will be deleted.": "应用程序的所有功能都无法使用,因为此账户未连接实际的FarmBot。另外,请注意,当您离开此网页时,演示账户和所有数据将被删除。", "Not available": "不可用", "Not available when device is offline.": "设备离线时不可用。", @@ -1231,7 +1125,6 @@ "Number of times to retry a movement before stopping. (default: {{ retries }})": "在停止之前重试移动的次数。(默认值:{{ retries }})", "Number of times to retry calibration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "重试校准的次数。(默认值:x: {{ x }}, y: {{ y }}, z: {{ z }})", "numbers": "数字", - "occurred": "发生", "off": "关闭", "OFF": "关闭", "offline": "离线", @@ -1241,6 +1134,7 @@ "Offset from current location": "从当前位置偏移", "ok": "好", "Ok": "好", + "Old Password": "原口令", "older": "更旧", "Older than": "早于", "oldest": "最旧", @@ -1269,6 +1163,7 @@ "open scheduler panel": "打开调度器面板", "Open the ... menu for the {{ axis }} axis and click **FIND HOME**.": "打开 {{ axis }} 轴的 ... 菜单并单击 **查找原点**。", "Open the ... menu for the {{ axis }} axis and click **FIND LENGTH**.": "打开 {{ axis }} 轴的 ... 菜单并单击 **查找长度**。", + "Operator": "操作员", "Optimized": "优化", "options": "选项", "Options": "选项", @@ -1286,9 +1181,11 @@ "Outside of planting area. Plants must be placed within the grid.": "在种植区外。植物必须放置在网格内。", "Over time you may need to make minor adjustments to the coordinates of your slots. At any time you can come back to the edit slot panel and manually adjust the X, Y, and Z input fields.": "随着时间的推移,您可能需要对插槽的坐标进行小幅调整。随时可以返回编辑插槽面板,手动调整X、Y和Z输入字段。", "override": "覆盖", - "Page Not Found.": "页面未找到。", + "Package Name": "类名", "Parameter load progress": "参数加载进度", "Parameter Management": "参数管理", + "Parameters": "参数", + "Password": "口令", "Password must be 8 or more characters.": "密码必须为8个或更多字符。", "Paste the output from EXPORT PARAMETERS into the text field and press IMPORT to import new hardware parameters to your FarmBot.": "将导出参数的输出粘贴到文本字段中,然后按导入以将新的硬件参数导入到您的FarmBot。", "Pending": "待定", @@ -1329,7 +1226,6 @@ "Pings received": "收到的Ping", "Pings sent": "发送的Ping", "Pink": "粉色", - "pinned sequences": "固定的序列", "Pinned Sequences": "固定的序列", "Pins": "引脚", "pixel coordinate scale": "像素坐标比例", @@ -1348,6 +1244,7 @@ "Planted": "已种植", "Planting a garden": "种植花园", "plants": "植物", + "Plants": "植物", "Please agree to the terms.": "请同意条款。", "Please check your email for the verification link.": "请检查您的电子邮件以获取验证链接。", "Please check your email to confirm email address changes.": "请检查您的电子邮件以确认电子邮件地址的更改。", @@ -1377,7 +1274,6 @@ "Point status": "点状态", "Points": "点", "points panel": "点面板", - "Position (mm)": "位置(毫米)", "Positions": "位置", "Positive X": "正X", "Positive Y": "正Y", @@ -1386,7 +1282,6 @@ "Power down FarmBot's onboard computer.": "关闭FarmBot的板载计算机。", "Power Off Bot": "关闭机器人", "Power up": "启动", - "Presets": "预设", "Press \"+\" to add a Farmware.": "按 \"+\" 添加一个Farmware。", "Press \"+\" to add a garden.": "按 \"+\" 添加一个花园。", "Press \"+\" to add a group.": "按 \"+\" 添加一个组。", @@ -1420,6 +1315,7 @@ "Priority support": "优先支持", "priority support subscription": "优先支持订阅", "Privacy Policy": "隐私政策", + "Problem Loading Terms of Service": "加载服务条款时出现的问题", "Processing now. Results usually available in one minute. Check log messages for result status.": "正在处理。结果通常在一分钟内可用。检查日志消息以获取结果状态。", "Processing Parameters": "处理参数", "Progress": "进展", @@ -1434,12 +1330,10 @@ "Publishing this sequence will create a": "发布此序列将创建一个", "Publishing, distributing, and even selling their copy": "发布、分发,甚至销售他们的副本", "Purple": "紫色", - "Quiet Mode": "安静模式", "quit": "退出", "Radius": "半径", "radius (mm)": "半径(毫米)", "Random Order": "随机顺序", - "Raspberry Pi": "Raspberry Pi", "Raspberry Pi Camera": "Raspberry Pi 摄像头", "Raspberry Pi GPIO pin already bound or in use.": "Raspberry Pi GPIO 引脚已绑定或正在使用。", "Raspberry Pi power status since last reboot. If supply voltage drops below the standard operational threshold the indicator will turn red. Once the voltage level recovers the status will turn yellow, indicating that a low voltage event has occurred. Low voltage may adversely affect WiFi and camera functionality.": "自上次重启以来的Raspberry Pi电源状态。如果电源电压降到标准操作阈值以下,指示灯将变红。一旦电压水平恢复,状态将变为黄色,表明发生了低电压事件。低电压可能会对WiFi和相机功能产生不利影响。", @@ -1469,6 +1363,7 @@ "Reduction to missed step total for every good step. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "每走一步减少错过的总步数。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", "Refer to the": "参考", "Refusing to modify data in read-only mode": "拒绝在只读模式下修改数据", + "Regimens": "方案", "Register your ORDER NUMBER": "注册您的订单号", "Release Notes": "发行说明", "released under the": "在以下条件下发布", @@ -1485,12 +1380,15 @@ "Removed": "已移除", "Repeats?": "重复?", "Republishing this sequence will prevent you from viewing public copies and upgrading to versions from the current import source.": "重新发布此序列将阻止您查看公共副本并升级到当前导入源的版本。", + "Request sent": "发送请求", "Requires": "需要", "RESEND": "重新发送", "Resend parameters": "重新发送参数", "Resend Verification Email": "重新发送验证邮件", "Reserved Raspberry Pi pin may not work as expected.": "保留的Raspberry Pi引脚可能无法按预期工作。", "reset": "重置", + "Reset": "重新设定", + "RESET": "重新设定", "Reset {{ count }} values?": "重置 {{ count }} 个值?", "Reset account": "重置账户", "Reset all values": "重置所有值", @@ -1499,13 +1397,16 @@ "Reset filters": "重置过滤器", "Reset hardware parameters": "重置硬件参数", "Reset password": "重置密码", + "Reset Password": "重置密码", "reset to default": "恢复默认", + "Reset your password": "重置您的密码", "resolution": "分辨率", "resource": "资源", "Resource": "资源", "Resource {{ num }}": "资源 {{ num }}", "Resources added!": "资源已添加!", "restart": "重新启动", + "RESTART": "重新开始", "Restart Farmbot": "重新启动Farmbot", "restart firmware": "重新启动固件", "Restart Firmware": "重新启动固件", @@ -1544,6 +1445,7 @@ "same as front": "与前面相同", "SATURATION": "饱和度", "save": "保存", + "Save": "保存", "save as default": "保存为默认", "Save as default": "保存为默认", "save detected plants": "保存检测到的植物", @@ -1564,7 +1466,6 @@ "Scan this image": "扫描此图像", "Schedule item": "计划项目", "Scheduler": "调度器", - "SD card": "SD卡", "search all crops?": "搜索所有作物?", "Search commands and sequences...": "搜索命令和序列...", "Search for a crop to add to your garden.": "搜索要添加到花园的作物。", @@ -1617,7 +1518,6 @@ "Select all": "全选", "select all days": "选择所有天", "Select all in group": "选择组中所有", - "Select an action": "选择一个动作", "select color": "选择颜色", "Select none": "全不选", "Select one": "选择一个", @@ -1633,19 +1533,24 @@ "Send a log message upon the end of sequence execution.": "在序列执行结束时发送日志消息。", "Send a log message upon the start of sequence execution.": "在序列执行开始时发送日志消息。", "Send message": "发送消息", + "Send Message": "发送信息", "Sending firmware configuration...": "发送固件配置...", "Sensor": "传感器", "Sensor History": "传感器历史", "sensor or peripheral": "传感器或外设", "Sensor readings": "传感器读数", "Sensors": "传感器", + "Sequence": "序列", + "Sequence Editor": "序列编辑器", "Sequence execution": "序列执行", "Sequence load error": "序列加载错误", "Sequence logs:": "序列日志:", "Sequence Name": "序列名称", "Sequence not found": "序列未找到", + "Sequence or Regimen": "序列或方案", "sequence steps": "序列步骤", "Sequence upgraded.": "序列已升级。", + "Sequences": "序列", "Server": "服务器", "Servo pin": "伺服引脚", "Set axis length": "设置轴长度", @@ -1669,12 +1574,10 @@ "Setup, customize, and control FarmBot from your": "从您的设备设置、定制和控制FarmBot", "share sequence": "分享序列", "Shop": "商店", - "show": "显示", "Show a confirmation dialog when deleting a plant.": "删除植物时显示确认对话框。", "Show a confirmation dialog when deleting a sequence step.": "删除序列步骤时显示确认对话框。", "Show a confirmation dialog when deleting a sequence.": "删除序列时显示确认对话框。", "Show advanced settings": "显示高级设置", - "show all": "显示全部", "Show all download links": "显示所有下载链接", "Show Areas Map Layer": "显示区域地图图层", "show assertion log messages": "显示断言日志消息", @@ -1697,7 +1600,7 @@ "Show pins": "显示引脚", "Show Plants Map Layer": "显示植物地图图层", "Show Points Map Layer": "显示点地图图层", - "Show Previous Period": "显示上一时期", + "Show Previous Period": "显示上一时期", "Show raw pin lists in Read Sensor, Control Peripheral, and If Statement steps.": "在读取传感器、控制外设和条件语句步骤中显示原始引脚列表。", "Show Readings Map Layer": "显示读数地图图层", "Show removed": "显示已移除", @@ -1716,6 +1619,7 @@ "showing single setting": "显示单个设置", "shown in map": "在地图中显示", "Shutdown": "关机", + "SHUTDOWN": "关机", "Shutdown Farmbot": "关机Farmbot", "Since you're new around here, we recommend taking our guided tours of the app. This is the fastest way to learn about the most important pages and features at your fingertips.": "由于您是新用户,我们建议您参加我们的应用程序导览。这是最快了解您指尖上最重要的页面和功能的方法。", "single input": "单输入", @@ -1738,7 +1642,6 @@ "Soft resetting your FarmBot will revoke your FarmBot's ability to connect to your web app account and your home WiFi network. Upon soft resetting, your device will go into Configurator mode.": "软重置您的FarmBot将撤销其连接到您的Web应用程序账户和家庭WiFi网络的能力。软重置后,您的设备将进入配置模式。", "Software": "软件", "Software Documentation": "软件文档", - "software.farm.bot": "software.farm.bot", "soil": "土壤", "Soil": "土壤", "Soil height": "土壤高度", @@ -1761,10 +1664,10 @@ "Sort by": "排序依据", "SORT BY": "排序依据", "Source": "来源", - "Sowing Method": "播种方法", "Spacing (MM)": "间距(毫米)", "Speak": "说话", "Specify custom map dimensions (in millimeters). These values set the size of the garden map unless DYNAMIC MAP SIZE is enabled.": "指定自定义地图尺寸(以毫米为单位)。这些值设置花园地图的大小,除非启用动态地图大小。", + "Speed": "速度", "Speed (%)": "速度(%)", "Spread": "扩展", "Sprouted": "发芽", @@ -1780,11 +1683,12 @@ "start over": "重新开始", "Start time and date must be in the future.": "开始时间和日期必须在未来。", "Start tour": "开始导览", - "Starting X": "起始X", - "starting Y": "起始Y", + "Started": "启动", + "Starts": "开始", "status": "状态", "Status": "状态", "Steps": "步骤", + "Steps per MM": "步距/MM", "stereo inputs": "立体声输入", "Stock": "库存", "Stock Bindings": "库存绑定", @@ -1799,7 +1703,6 @@ "submit": "提交", "submitted": "已提交", "Success": "成功", - "Sun Requirements": "阳光需求", "Svg Icon": "Svg 图标", "Swap axis minimum and maximum limit switches. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "交换轴的最小和最大限位开关。(默认值: x: {{ x }}, y: {{ y }}, z: {{ z }})", "Swap jog buttons (and rotate map)": "交换点动按钮(并旋转地图)", @@ -1821,9 +1724,11 @@ "tablet": "平板电脑", "Take a guided tour": "进行引导游览", "Take a photo": "拍照", + "Take a Photo": "拍照", "Take a Tour": "进行游览", "Take and view photos": "拍摄并查看照片", "Take photo": "拍照", + "Take Photo": "拍照", "Target": "目标", "Taxon": "分类单元", "Temp": "温度", @@ -1894,9 +1799,7 @@ "This command will not execute correctly because you do not have encoders, stall detection, or limit switches enabled for the chosen axis. Enable limit switches, encoders, or stall detection from the Settings panel for: ": "此命令将无法正确执行,因为您没有为所选轴启用编码器、停滞检测或限位开关。请在“设置”面板中为以下选项启用限位开关、编码器或停滞检测:", "This computer": "这台电脑", "This is the account menu, providing you with links to other pages in the app, and for logging out.": "这是帐户菜单,提供指向应用程序中其他页面的链接,并用于注销。", - "This is the connectivity popup. Click it to view information about the connection between your web browser, your FarmBot, and the FarmBot web app servers. Whenever your FarmBot is online and ready for action, you will see a green checkmark.": "这是连接弹出窗口。点击它查看您的网络浏览器、FarmBot和FarmBot网络应用服务器之间的连接信息。每当您的FarmBot在线并准备好操作时,您将看到一个绿色勾号。", - "This is the controls panel. Here you can control your FarmBot in realtime by pressing the movement arrow buttons, toggling peripherals, and executing pinned sequences. You can also view current status information about your FarmBot including its position and an optional webcam stream.": "这是控制面板。在这里,您可以通过按移动箭头按钮、切换外设和执行固定的序列来实时控制您的FarmBot。您还可以查看有关FarmBot的当前状态信息,包括其位置和可选的网络摄像头流。", - "This is the crop details panel. Here you can view factual information about the chosen crop such as the expected spread and height at maturity. Proceed to the next step of the tour to learn how to add the crop to your garden.": "这是作物详细信息面板。在这里,您可以查看所选作物的事实信息,例如预期的成熟时的扩展和高度。继续浏览下一步,了解如何将作物添加到您的花园中。", + "This is the crop details panel. Here you can view factual information about the chosen crop such as the expected spread and height at maturity. Proceed to the next step of the tour to learn how to add the crop to your garden.": "这是作物详细信息面板。在这里,您可以查看所选作物的事实信息,例如预期的成熟时的扩展和高度。继续浏览下一步,了解如何将作物添加到您的花园中。", "This is the crop search panel. Type in a crop name to the search field, for example \"Spinach\". We recommend trying generic crop names rather than specific varietals. Select the best search result and then advance the tour.": "这是作物搜索面板。在搜索栏中输入作物名称,例如“菠菜”。我们建议使用通用作物名称,而不是具体的品种名称。选择最佳搜索结果,然后继续浏览。", "This is the current position indicator. FarmBot's current X, Y, and Z coordinates in millimeters are displayed for quick viewing from any page in the web app.": "这是当前位置指示器。FarmBot当前的X、Y和Z坐标(以毫米为单位)会显示在网页应用的任何页面上,以便快速查看。", "This is the E-STOP button, allowing you to emergency stop any movements and turn off all of FarmBot's peripherals in case something is going wrong. After E-STOPPING FarmBot, you will need to click the same button to UNLOCK the device before resuming execution of any commands.": "这是急停按钮,允许您在出现问题时紧急停止所有动作并关闭所有FarmBot外设。急停FarmBot后,您需要点击相同的按钮解锁设备,然后才能继续执行任何命令。", @@ -1916,8 +1819,6 @@ "This is the settings panel. Here you can view and manage all of your FarmBot and account settings. Refer to the tooltips and documentation for information about each setting.": "这是设置面板。在这里,您可以查看和管理所有FarmBot和帐户设置。有关每个设置的信息,请参阅工具提示和文档。", "This is the tools panel. Here you can add, edit, and view your FarmBot's tools and seed containers as well the slots they are loaded into. Mousing over a slot will highlight it in the map and vice versa. We've already added all of the items included with your FarmBot kit. Your job now is to input the exact location of the slots corresponding to where you installed them in real life. Click the first slot in the list and then advance the tour.": "这是工具面板。在这里,您可以添加、编辑和查看FarmBot的工具和种子容器以及它们加载的槽。在列表中将鼠标悬停在某个槽上时,它将在地图中高亮显示,反之亦然。我们已经添加了您的FarmBot套件中包含的所有物品。现在您的工作是输入与您在现实生活中安装它们的位置相对应的槽的确切位置。点击列表中的第一个槽,然后继续浏览。", "This is the tools panel. Here you can view and manage all of the tools, seed containers, and slots in your garden. Clicking an item will open up the details panel where you can edit it. Pressing the + buttons will allow you to add new items.": "这是工具面板。在这里,您可以查看和管理花园中的所有工具、种子容器和槽。点击一个项目将打开详细信息面板,您可以在其中进行编辑。按下+按钮将允许您添加新项目。", - "This is the weed detector toggle. When turned ON, your FarmBot will take and process photos for weeds after every sequence execution.": "这是杂草探测器开关。开启时,您的FarmBot将在每次序列执行后拍摄和处理杂草照片。", - "This is the weeds panel. Here you can view and manage all of the weeds in your garden detected by FarmBot. Mousing over a weed in the list will highlight it in the map and vice versa. Clicking a weed will open up the weed details panel where you can edit it. Pressing the weed + button will allow you to add a weed manually.": "这是杂草面板。在这里,您可以查看和管理FarmBot检测到的花园中的所有杂草。在列表中将鼠标悬停在某个杂草上时,它将在地图中高亮显示,反之亦然。点击杂草将打开杂草详细信息面板,您可以在其中进行编辑。按下杂草+按钮将允许您手动添加杂草。", "This page has moved. Redirecting...": "该页面已移动。正在重定向...", "This phone": "这部手机", "this photo": "这张照片", @@ -1934,6 +1835,8 @@ "This will restart FarmBot's Raspberry Pi and controller software.": "这将重启FarmBot的Raspberry Pi和控制器软件。", "This will shutdown FarmBot's Raspberry Pi. To turn it back on, unplug FarmBot and plug it back in.": "这将关闭FarmBot的Raspberry Pi。要重新开启,请拔掉FarmBot并重新插入。", "Ticker Notification": "滚动通知", + "Time": "时间", + "Time in milliseconds": "时间以毫秒为单位", "Time is not properly formatted.": "时间格式不正确。", "Time period": "时间段", "time zone": "时区", @@ -1942,7 +1845,6 @@ "timezone": "时区", "Tip: Use dot notation (i.e., 'meta.color') to access meta fields.": "提示:使用点符号(即'meta.color')来访问元字段。", "to": "至", - "To add a grid or row of plants, scroll to the bottom of the panel, enter values into the grid and row planting fields and click PREVIEW. The previewed plants will show in the map in grayscale. Make adjustments as necessary and when you are happy with the preview, click SAVE. Then advance the tour.": "要添加一排或一行植物,请滚动到面板底部,在网格和行种植字段中输入数值并点击预览。预览的植物将在地图中以灰度显示。根据需要进行调整,当对预览满意时,点击保存。然后继续浏览。", "to add the plant to the map. Alternatively, you can plant a grid using the form below.": "以将植物添加到地图中。或者,您可以使用下面的表格种植网格。", "To calculate **WATER FLOW RATE**, hold a measuring cup below the watering nozzle and click the **RUN WATER FOR 5 SECONDS** button. Measure how much water FarmBot dispensed in milliliters (mL) and then divide this number by 5. Enter the result in the field.": "要计算**水流量**,将量杯放在浇水喷嘴下方,并点击**运行5秒钟水**按钮。测量FarmBot分配的水量(毫升),然后将此数值除以5。在字段中输入结果。", "To finish setting up your account and FarmBot, please select which FarmBot you have. Once you make a selection, we'll automatically add some tools, sensors, peripherals, sequences, and more to get you up and running faster. If you want to start completely from scratch, feel free to select \"Custom bot\" and we won't change a thing.": "要完成帐户和FarmBot的设置,请选择您拥有的FarmBot型号。选择后,我们将自动添加一些工具、传感器、外设、序列等,以便您更快地启动和运行。如果您想从头开始,随时选择“自定义机器人”,我们不会更改任何内容。", @@ -1961,7 +1863,6 @@ "toggle editor view": "切换编辑器视图", "toggle fancy editor": "切换高级编辑器", "toggle folder open": "切换文件夹打开", - "toggle logs": "切换日志", "toggle packing method": "切换打包方法", "Toggle peripheral": "切换外设", "Toggle Peripheral": "切换外设", @@ -1992,7 +1893,6 @@ "Try waiting three minutes from power on. Check the Raspberry Pi power LED. Check that the SD is fully inserted. Try downloading a new FarmBot OS image, ensuring that the device model is correct. Try re-flashing the SD card via Etcher. If possible, ensure line-of-sight between devices when trying to connect.": "尝试从开机起等待三分钟。检查Raspberry Pi电源LED。检查SD卡是否完全插入。尝试下载新的FarmBot OS镜像,确保设备型号正确。通过Etcher重新刷新SD卡。如果可能,请确保连接时设备之间有视线。", "ttyACM0 (recommended for Genesis)": "ttyACM0(推荐用于Genesis)", "ttyAMA0 (recommended for Express v1.0)": "ttyAMA0(推荐用于Express v1.0)", - "ttyUSB0 (recommended for Express v1.1)": "ttyUSB0(推荐用于Express v1.1)", "Turn off to set Web App to English.": "关闭以将Web应用程序设置为英文。", "type": "类型", "Type": "类型", @@ -2025,12 +1925,14 @@ "unpin sequence": "取消固定序列", "Unpublish error": "取消发布错误", "Unpublishing": "取消发布", + "Until": "直到", "Untitled Group": "未命名的组", "Untitled point": "未命名的点", "Untitled tool": "未命名的工具", "Untitled weed": "未命名的杂草", "Untitled Zone": "未命名的区域", "unvisualize": "取消可视化", + "UP TO DATE": "最新的", "Update": "更新", "Update color to": "更新颜色为", "Update depth to": "更新深度为", @@ -2071,47 +1973,48 @@ "Using another device, search for and connect to the `farmbot-xxxx` WiFi network": "使用另一台设备,搜索并连接到`farmbot-xxxx` WiFi网络", "Using the manual controls, instruct FarmBot to move towards the seed trough. As you get closer, change the MOVE AMOUNT to a smaller value for finer movements. Your goal is to position the needle just above the trough and then descend down into it until the tip of the needle is 3 to 5mm from the bottom of the trough. Click the blue button next to the slot's X, Y, and Z fields to save FarmBot's current position to the slot.": "使用手动控制器指示FarmBot移动到种子槽。当接近时,将移动量更改为较小值以进行更精细的移动。您的目标是将针头定位在槽上方,然后下降到槽内,直到针头尖端距离槽底3至5毫米。点击插槽X、Y和Z字段旁边的蓝色按钮,以保存FarmBot当前的位置到插槽。", "Using the manual controls, instruct FarmBot to move towards the tool and slot. As you get closer, change the MOVE AMOUNT to a smaller value for finer movements. Your goal is to position the UTM just above the tool and then descend down onto it (mounting it). Once the UTM has mounted the tool, click the blue button next to the slot's X, Y, and Z fields to save FarmBot's current position to the slot.": "使用手动控制器指示FarmBot移动到工具和插槽。接近时,将移动量更改为较小值以进行更精细的移动。您的目标是将UTM定位在工具上方,然后下降到工具上(安装它)。一旦UTM安装了工具,点击插槽X、Y和Z字段旁边的蓝色按钮,以保存FarmBot当前的位置到插槽。", - "UTM": "UTM", "UTM and TOOLS": "UTM和工具", "Vacuum": "真空", "VACUUM": "真空", "Vacuum pump": "真空泵", "value": "值", + "Value": "价值", "VALUE": "值", "Value must be greater than {{ num }}.": "值必须大于{{ num }}。", "Value must be greater than or equal to {{min}}.": "值必须大于或等于{{min}}。", "Value must be less than {{ num }}.": "值必须小于{{ num }}。", "Value must be less than or equal to {{max}}.": "值必须小于或等于{{max}}。", + "Variable": "可变的", "Variables": "变量", "Variance": "方差", "Verification email resent. Please check your email!": "验证邮件已重新发送。请检查您的电子邮件!", "verify": "验证", "Verify axis motor connections.": "验证轴电机连接。", + "Verify Password": "验证密码", + "Version": "版本", "Version {{ version }}": "版本{{ version }}", "Version last seen": "上次看到的版本", "versions": "版本", "view": "查看", "View": "查看", - "View all logs": "查看所有日志", "View and filter historical sensor reading data.": "查看和过滤历史传感器读数数据。", "View and filter log messages.": "查看和过滤日志消息。", "View available tours": "查看可用的导览", "View CeleryScript": "查看CeleryScript", - "View crop info": "查看作物信息", + "View crop info": "查看作物信息", "View current location": "查看当前位置", - "View FarmBot's current location using the axis position display.": "使用轴位置显示查看FarmBot的当前位置。", "View fullscreen": "全屏查看", "view in map (opens in new tab)": "在地图中查看(在新标签页打开)", "View log messages": "查看日志消息", "View Logs": "查看日志", "View photos your FarmBot has taken here.": "在这里查看FarmBot拍摄的照片。", "View raw data representation of sequence steps.": "查看序列步骤的原始数据表示。", - "View recent log messages here. More detailed log messages can be shown by adjusting filter settings.": "在此查看最近的日志消息。通过调整过滤器设置可以显示更详细的日志消息。", "viewing a publicly shared sequence": "查看公开共享的序列", "Viewing saved garden": "查看已保存的花园", "Visit the documentation.": "访问文档。", "visualize": "可视化", "Voltage": "电压", + "Wait": "等候", "Warn": "警告", "Warning": "警告", "Warning: Binding to a pin without a physical button and pull-down resistor connected may put FarmBot into an unstable state.": "警告:绑定到一个没有连接物理按钮和下拉电阻的引脚可能会使FarmBot处于不稳定状态。", @@ -2141,10 +2044,10 @@ "Watering Nozzle": "浇水喷嘴", "weak": "弱", "Web App": "Web 应用程序", - "Webcam Feeds": "网络摄像头供稿", "weed": "杂草", "Weed created.": "杂草已创建。", "Weed detection": "杂草检测", + "Weed Detector": "杂草探测器", "Weed Groups": "杂草分组", "Weed status": "杂草状态", "Weeder": "除草机", @@ -2161,7 +2064,6 @@ "When": "当", "When adding plants to the map from the web app, set each new plant's depth to this value (in millimeters).": "从Web应用程序向地图添加植物时,请将每个新植物的深度设置为此值(以毫米为单位)。", "When executing a sequence over a Group of locations, FarmBot will travel to each group member in the order of the chosen sort method. If the random option is chosen, FarmBot will travel in a random order every time, so the ordering shown below will only be representative.": "在对位置组执行序列时,FarmBot将按照选择的排序方法的顺序前往每个组成员。如果选择了随机选项,则FarmBot将每次以随机顺序前往,因此下面显示的顺序仅供参考。", - "When you program your FarmBot to perform an operation on a group of plants, you may want to control the ordering at which FarmBot visits each plant in the group. To do this, select one of the available Sort By methods. Once you have chosen a method, advance the tour.": "当您将FarmBot编程执行对一组植物的操作时,您可能希望控制FarmBot访问组中每个植物的顺序。要做到这一点,请选择其中一个可用的排序方法。选择了一种方法后,继续导览。", "When you publish a new version, other users of the sequence may optionally upgrade to the latest version.": "当您发布新版本时,序列的其他用户可以选择升级到最新版本。", "When you're finished with a message, press the x button in the top right of the card to dismiss it.": "完成消息后,请按卡片右上角的x按钮将其关闭。", "Which FarmBot model do you have?": "您有哪种FarmBot型号?", @@ -2170,27 +2072,22 @@ "Why is my FarmBot not moving?": "为什么我的FarmBot不动?", "Widget load failed.": "小部件加载失败。", "width": "宽度", - "WiFi": "WiFi", "WiFi strength": "WiFi强度", "With the FarmBot still powered off, manually move the gantry, cross-slide, and Z-axis roughly 150mm away from any of its hardstops. In other words, position the gantry partway along the tracks, position the cross-slide partway across the gantry main beam, and position the Z-axis halfway down.": "在FarmBot仍然关闭电源的情况下,手动将门架,横梁和Z轴大致移动到任何一个硬停位置的150mm处。换句话说,将门架部分沿轨道移动,将横梁部分沿门架主梁移动,并将Z轴部分向下移动一半。", "Within filter range": "在过滤器范围内", "Worst time": "最差时间", "Would you like to": "您想要", "Write pin": "写入引脚", - "X": "X", "x (mm)": "x(毫米)", "X (mm)": "X(毫米)", "x and y axis": "x和y轴", "X Axis": "X 轴", + "X AXIS": "X轴", "X position": "X 位置", "X-axis": "X轴", - "x-axis acceleration": "x轴加速度", "X-axis length": "X轴长度", "x-axis length (mm)": "x轴长度(毫米)", - "x-axis maximum speed": "x轴最大速度", - "x-axis minimum speed": "x轴最小速度", "X-axis motor": "X轴电机", - "x-axis motor current": "x轴电机电流", "x-axis motor step": "x轴电机步数", "X-axis movements": "X轴移动", "x-axis stall detection": "x轴堵转检测", @@ -2198,19 +2095,15 @@ "X/Y Alternating": "X/Y 交替", "X/Y, Ascending": "X/Y,升序", "X/Y, Descending": "X/Y,降序", - "Y": "Y", "y (mm)": "y(毫米)", "Y (mm)": "Y(毫米)", "Y Axis": "Y轴", + "Y AXIS": "Y轴", "Y position": "Y位置", "Y-axis": "Y轴", - "y-axis acceleration": "Y轴加速度", "Y-axis length": "Y轴长度", "y-axis length (mm)": "Y轴长度(毫米)", - "y-axis maximum speed": "Y轴最大速度", - "y-axis minimum speed": "Y轴最小速度", "Y-axis motor": "Y轴电机", - "y-axis motor current": "Y轴电机电流", "y-axis motor step": "Y轴电机步数", "Y-axis movements": "Y轴移动", "y-axis stall detection": "Y轴堵转检测", @@ -2220,6 +2113,7 @@ "Year": "年", "Years": "年", "Yellow": "黄色", + "yes": "是", "You are either offline, using a web browser that does not support WebSockets, or are behind a firewall that blocks port 3002. Do not attempt to debug FarmBot hardware until you solve this issue first. You will not be able to troubleshoot hardware issues without a reliable browser and internet connection.": "您要么处于离线状态,要么使用不支持WebSockets的网络浏览器,或者位于阻止端口3002的防火墙后面。在解决此问题之前,请勿尝试调试FarmBot硬件。没有可靠的浏览器和互联网连接,您将无法排除硬件问题。", "You are running an old version of FarmBot OS that is no longer supported.": "您正在运行一个不再受支持的旧版本的FarmBot OS。", "You are scheduling a regimen to run today. Be aware that running a regimen too late in the day may result in skipped regimen tasks. Consider rescheduling this event to tomorrow if this is a concern.": "您正在安排一个今天运行的生活习惯。请注意,如果在一天中运行生活习惯太晚,可能会导致生活习惯任务被跳过。如果这是一个问题,请考虑将此事件重新安排到明天。", @@ -2240,28 +2134,24 @@ "your copy": "您的副本", "Your device has no firmware": "您的设备没有固件", "Your FarmBot's internal computer is the": "您的FarmBot的内部计算机是", + "Your Name": "你的名字", "Your password is changed.": "您的密码已更改。", "Your version of FarmBot OS is outdated and will soon no longer be supported. Please update your device as soon as possible.": "您的FarmBot OS版本已过时,将很快不再受支持。请尽快更新您的设备。", "Your web browser is unable to communicate with the web app server. Make sure you are connected to the Internet.": "您的网络浏览器无法与Web应用程序服务器通信。确保您已连接到互联网。", "Your web browser is unable to connect to the message broker. You might be behind a firewall or disconnected from the Internet. Check your network settings. View the connection status for more details.": "您的网络浏览器无法连接到消息代理。您可能在防火墙后面或未连接到互联网。检查您的网络设置。查看连接状态以获取更多详细信息。", "Your web browser may not work properly with the FarmBot Web App. If you experience any issues, try using a recent version of Chrome, Firefox, or Edge.": "您的网络浏览器可能无法与FarmBot Web App正常工作。如果遇到任何问题,请尝试使用Chrome、Firefox或Edge的最新版本。", - "z": "z", - "Z": "Z", "Z (mm)": "Z(毫米)", "Z Axis": "Z轴", + "Z AXIS": "Z轴", "Z axis coordinate (millimeters) of soil level. This value will only be used if there are no soil height measurements available. To add soil height measurements, run a sequence with the MEASURE SOIL HEIGHT command in a grid over your garden. Alternatively, use a ruler to manually measure the height at various locations in the garden and add corresponding soil height points from the points panel. (default: 0)": "土壤水平的Z轴坐标(毫米)。仅当没有土壤高度测量数据可用时,才会使用此值。要添加土壤高度测量数据,请在花园上运行带有MEASURE SOIL HEIGHT命令的序列。或者,使用标尺在花园的各个位置手动测量高度,并从点面板添加相应的土壤高度点。(默认值:0)", "Z axis coordinate (millimeters) to which the z axis should be retracted during Safe Z moves. It is recommended to choose a value at which the z axis is all of the way up to provide as much clearance as possible. (default: 0)": "在安全Z移动期间应将z轴缩回的Z轴坐标(毫米)。建议选择一个值,其中z轴全部上移,以尽可能提供尽可能多的间隙。(默认值:0)", "Z doesn't match calibration": "Z不符合校准", "Z height matches calibration": "Z高度符合校准", "Z position": "Z位置", "Z-axis": "Z轴", - "z-axis acceleration": "z轴加速度", "Z-axis length": "Z轴长度", "z-axis length (mm)": "z轴长度(毫米)", - "z-axis maximum speed": "z轴最大速度", - "z-axis minimum speed": "z轴最小速度", "Z-axis motor": "Z轴电机", - "z-axis motor current": "z轴电机电流", "z-axis motor step": "z轴电机步进", "Z-axis movements": "Z轴运动", "z-axis stall detection": "z轴堵转检测", @@ -2270,28 +2160,263 @@ "zoom in": "放大", "zoom out": "缩小" }, + "untranslated": { + "": "", + ", quietMode = ": ", quietMode = ", + ".img\\": ".img\\", + "(x, y, z)": "(x, y, z)", + "{{ name }} Grid": "{{ name }} Grid", + "% Change": "% Change", + "1280 x 960 (1.3MP)": "1280 x 960 (1.3MP)", + "1600 x 1200 (2MP)": "1600 x 1200 (2MP)", + "2592 x 1944 (5MP)": "2592 x 1944 (5MP)", + "320 x 240 (0.08MP)": "320 x 240 (0.08MP)", + "3280 x 2464 (8MP)": "3280 x 2464 (8MP)", + "4056 x 3040 (12.3MP)": "4056 x 3040 (12.3MP)", + "640 x 480 (0.3MP)": "640 x 480 (0.3MP)", + "800 x 600 (0.5MP)": "800 x 600 (0.5MP)", + "Action may be required": "Action may be required", + "Add Grid or Row": "Add Grid or Row", + "add new height curve": "add new height curve", + "add new spread curve": "add new spread curve", + "Add new tool": "Add new tool", + "add new water curve": "add new water curve", + "Add watering nozzle": "Add watering nozzle", + "alpha": "alpha", + "Alternatively, revert to the previous resolution": "Alternatively, revert to the previous resolution", + "Always review and test auto-generated code": "Always review and test auto-generated code", + "Arduino/Farmduino": "Arduino/Farmduino", + "Assertion": "Assertion", + "at soil level": "at soil level", + "Auto update": "Auto update", + "auto-generate Lua code": "auto-generate Lua code", + "auto-generate sequence description": "auto-generate sequence description", + "auto-generate sequence title and color": "auto-generate sequence title and color", + "auto-update preview": "auto-update preview", + "Automatically finding the Z-axis home position is not enabled by default for Express FarmBots. To manually set the Z home position, use the manual controls to move the Z-axis to the fully raised position. If the Z-axis is not fully raised when the FarmBot reaches the Z=0 coordinate, press the E-stop button, rotate the leadscrew by hand to fully raise the Z-axis, and then Unlock the FarmBot. With the Z-axis fully raised, open the ... menu for the Z-axis and click **SET HOME**.": "Automatically finding the Z-axis home position is not enabled by default for Express FarmBots. To manually set the Z home position, use the manual controls to move the Z-axis to the fully raised position. If the Z-axis is not fully raised when the FarmBot reaches the Z=0 coordinate, press the E-stop button, rotate the leadscrew by hand to fully raise the Z-axis, and then Unlock the FarmBot. With the Z-axis fully raised, open the ... menu for the Z-axis and click **SET HOME**.", + "Automatically finding the Z-axis length is not enabled by default for Express FarmBots. To manually set the Z length, use the manual controls to move the Z-axis to the fully lowered position. With the Z-axis fully lowered, open the ... menu for the Z-axis and click **SET LENGTH**. Then open the ... menu again and click **MOVE TO HOME**.": "Automatically finding the Z-axis length is not enabled by default for Express FarmBots. To manually set the Z length, use the manual controls to move the Z-axis to the fully lowered position. With the Z-axis fully lowered, open the ... menu for the Z-axis and click **SET LENGTH**. Then open the ... menu again and click **MOVE TO HOME**.", + "automatically update preview": "automatically update preview", + "BIND": "BIND", + "Binomial Name": "Binomial Name", + "Calibrate the camera again for the selected resolution.": "Calibrate the camera again for the selected resolution.", + "Change {{ curveName }} curve for {{ num }} items?": "Change {{ curveName }} curve for {{ num }} items?", + "Check that the camera is plugged in correctly to either a Raspberry Pi USB port (Express v1.0 kits and all Genesis kits) or into one of the vertically oriented USB ports on the Farmduino (Express v1.1+ kits). For cameras with a 90 degree intermediary connector at the cross-slide, ensure the connectors are fully connected.": "Check that the camera is plugged in correctly to either a Raspberry Pi USB port (Express v1.0 kits and all Genesis kits) or into one of the vertically oriented USB ports on the Farmduino (Express v1.1+ kits). For cameras with a 90 degree intermediary connector at the cross-slide, ensure the connectors are fully connected.", + "CHOOSE STORAGE\\": "CHOOSE STORAGE\\", + "Closed": "Closed", + "collage": "collage", + "collapse": "collapse", + "Connect the microSD card to your computer": "Connect the microSD card to your computer", + "Connected": "Connected", + "Connection Quality": "Connection Quality", + "Connection type": "Connection type", + "Consider moving steps into subsequences.": "Consider moving steps into subsequences.", + "Constant Value": "Constant Value", + "Copy curve": "Copy curve", + "CPU": "CPU", + "Currently used with this crop": "Currently used with this crop", + "curve": "curve", + "Curve already has the maximum number of control points.": "Curve already has the maximum number of control points.", + "Curve in use.": "Curve in use.", + "Curves": "Curves", + "Customize which Action or Sequence you want FarmBot to execute when you press Button 3, 4, or 5 on the electronics box. To start, we recommend setting Button 5 to the 'Find Home' sequence. You can change this later from the controls pop-up.": "Customize which Action or Sequence you want FarmBot to execute when you press Button 3, 4, or 5 on the electronics box. To start, we recommend setting Button 5 to the 'Find Home' sequence. You can change this later from the controls pop-up.", + "DAY": "DAY", + "Day {{ num }}": "Day {{ num }}", + "Default plant depth (mm)": "Default plant depth (mm)", + "Delete all {{ count }} {{points}} in section?": "Delete all {{ count }} {{points}} in section?", + "Delete curve": "Delete curve", + "Did FarmBot unlock? (Check the logs or try sending a movement command)": "Did FarmBot unlock? (Check the logs or try sending a movement command)", + "Did the writing process complete?": "Did the writing process complete?", + "Did you select a time when you will not need to use your FarmBot?": "Did you select a time when you will not need to use your FarmBot?", + "Double-check the URL or explore the navigation bar.": "Double-check the URL or explore the navigation bar.", + "Download": "Download", + "Download Raspberry Pi Imager": "Download Raspberry Pi Imager", + "duration": "duration", + "edit curve": "edit curve", + "Enable 3D electronics box": "Enable 3D electronics box", + "Expected height (mm)": "Expected height (mm)", + "Expected spread (mm)": "Expected spread (mm)", + "FarmBot Connection": "FarmBot Connection", + "Farmware": "Farmware", + "Firmware value from your choice in the dropdown to the right, as understood by the Web App.": "Firmware value from your choice in the dropdown to the right, as understood by the Web App.", + "For a profile view of FarmBot's current location in the virtual garden, open the profile viewer.": "For a profile view of FarmBot's current location in the virtual garden, open the profile viewer.", + "fullscreen": "fullscreen", + "Fully raised tool head": "Fully raised tool head", + "Gantry main beam": "Gantry main beam", + "generate code": "generate code", + "generating": "generating", + "Good": "Good", + "grid": "grid", + "Has the download finished?": "Has the download finished?", + "Have you identified which Raspberry Pi is in your FarmBot?": "Have you identified which Raspberry Pi is in your FarmBot?", + "Have you inserted the microSD card into the Raspberry Pi?": "Have you inserted the microSD card into the Raspberry Pi?", + "Have you manually set the Z-axis home position with the Z-axis fully raised?": "Have you manually set the Z-axis home position with the Z-axis fully raised?", + "Have you manually set the Z-axis length with the Z-axis fully lowered and then returned the Z-axis to the home position?": "Have you manually set the Z-axis length with the Z-axis fully lowered and then returned the Z-axis to the home position?", + "height curves": "height curves", + "Here you can control your FarmBot in realtime by pressing the movement arrow buttons, toggling peripherals, and executing pinned sequences. You can also view current status information about your FarmBot including its position and an optional webcam stream.": "Here you can control your FarmBot in realtime by pressing the movement arrow buttons, toggling peripherals, and executing pinned sequences. You can also view current status information about your FarmBot including its position and an optional webcam stream.", + "Here you can view running and completed jobs as well as log messages.": "Here you can view running and completed jobs as well as log messages.", + "idle": "idle", + "If you are upgrading your FarmBot, you may need to manually add any new peripherals, sensors, and tools that your new electronics board supports.": "If you are upgrading your FarmBot, you may need to manually add any new peripherals, sensors, and tools that your new electronics board supports.", + "Insert the microSD card into FarmBot": "Insert the microSD card into FarmBot", + "Inspect the ports on the top edge of the Raspberry Pi and select which Raspberry Pi model is in your FarmBot.": "Inspect the ports on the top edge of the Raspberry Pi and select which Raspberry Pi model is in your FarmBot.", + "Inspect the wood raised bed (Express kits) or track extrusions (Genesis kits) for bumps. Use sand paper to smooth out imperfections. Check the cable carrier for any snap-in tabs that are not fully snapped into place. Tabs may be catching on the cable carrier supports or other parts of the cable carrier.": "Inspect the wood raised bed (Express kits) or track extrusions (Genesis kits) for bumps. Use sand paper to smooth out imperfections. Check the cable carrier for any snap-in tabs that are not fully snapped into place. Tabs may be catching on the cable carrier supports or other parts of the cable carrier.", + "INSTALL FARMBOT OS": "INSTALL FARMBOT OS", + "Install FarmBot OS onto the microSD card": "Install FarmBot OS onto the microSD card", + "Is FarmBot positioned?": "Is FarmBot positioned?", + "Is Raspberry Pi Imager installed?": "Is Raspberry Pi Imager installed?", + "Is the card connected?": "Is the card connected?", + "jobs": "jobs", + "Jobs and Logs": "Jobs and Logs", + "Learn more about connecting": "Learn more about connecting", + "Learn more about ports": "Learn more about ports", + "LED 3": "LED 3", + "LED 4": "LED 4", + "Linear Ramp": "Linear Ramp", + "Load (%)": "Load (%)", + "logs": "logs", + "Low": "Low", + "Lua": "Lua", + "Manually position the FarmBot": "Manually position the FarmBot", + "max value": "max value", + "Maximum number of control points reached.": "Maximum number of control points reached.", + "mL": "mL", + "motor load": "motor load", + "motor position": "motor position", + "move": "move", + "network": "network", + "New Regimen ": "New Regimen ", + "New Sequence {{ num }}": "New Sequence {{ num }}", + "No Curve selected": "No Curve selected", + "No curves yet.": "No curves yet.", + "Not Found": "Not Found", + "Occurred": "Occurred", + "Open": "Open", + "Open up the Raspberry Pi Imager program and click \\": "Open up the Raspberry Pi Imager program and click \\", + "Other curves": "Other curves", + "Perhaps the page has moved?": "Perhaps the page has moved?", + "peripherals": "peripherals", + "Plant may exceed the distance between the soil and FarmBot": "Plant may exceed the distance between the soil and FarmBot", + "Plant may spread beyond the growing area": "Plant may spread beyond the growing area", + "Please select a model": "Please select a model", + "Plots": "Plots", + "Ports": "Ports", + "Press \"+\" to add a curve.": "Press \"+\" to add a curve.", + "Raspberry Pi": "Raspberry Pi", + "Raspberry Pi model": "Raspberry Pi model", + "Raspberry Pi Model 3": "Raspberry Pi Model 3", + "Raspberry Pi Model 4": "Raspberry Pi Model 4", + "Raspberry Pi model from your choice in the dropdown to the right, as understood by the Web App.": "Raspberry Pi model from your choice in the dropdown to the right, as understood by the Web App.", + "Raspberry Pi model reported from your device, as understood by FarmBot OS.": "Raspberry Pi model reported from your device, as understood by FarmBot OS.", + "Remove the microSD card from the FarmBot's Raspberry Pi. The card slot is located on the back side of the Raspberry Pi, on the right-hand edge. Then connect the microSD card to your computer using a card reader. You may need to use the microSD card to SD card adapter included with your kit.": "Remove the microSD card from the FarmBot's Raspberry Pi. The card slot is located on the back side of the Raspberry Pi, on the right-hand edge. Then connect the microSD card to your computer using a card reader. You may need to use the microSD card to SD card adapter included with your kit.", + "Remove the microSD card from the FarmBot's Raspberry Pi. The card slot is located on the front side of the Raspberry Pi, on the left-hand edge. Then connect the microSD card to your computer using a card reader. You may need to use the microSD card to SD card adapter included with your kit.": "Remove the microSD card from the FarmBot's Raspberry Pi. The card slot is located on the front side of the Raspberry Pi, on the left-hand edge. Then connect the microSD card to your computer using a card reader. You may need to use the microSD card to SD card adapter included with your kit.", + "Remove the microSD card from your computer and insert it into FarmBot's Raspberry Pi. The card slot is located on the front side of the Raspberry Pi, on the left-hand edge.": "Remove the microSD card from your computer and insert it into FarmBot's Raspberry Pi. The card slot is located on the front side of the Raspberry Pi, on the left-hand edge.", + "S-Curve": "S-Curve", + "scale": "scale", + "Search your curves...": "Search your curves...", + "Select": "Select", + "Select a curve": "Select a curve", + "Set the time you wish for FarmBot to automatically download and install updates when available. During this time FarmBot will reboot to apply the update, so you should never schedule any events to occur during the same hour. We recommend selecting 3 AM.": "Set the time you wish for FarmBot to automatically download and install updates when available. During this time FarmBot will reboot to apply the update, so you should never schedule any events to occur during the same hour. We recommend selecting 3 AM.", + "shape": "shape", + "Show a 3D model of FarmBot's electronics box instead of a 2D view in the Peripherals tab of the Controls pop-up.": "Show a 3D model of FarmBot's electronics box instead of a 2D view in the Peripherals tab of the Controls pop-up.", + "show motor load plot display": "show motor load plot display", + "software.farm.bot": "software.farm.bot", + "Sowing": "Sowing", + "spread curves": "spread curves", + "Stall detection is disabled for one or more axes.": "Stall detection is disabled for one or more axes.", + "Start": "Start", + "start date": "start date", + "Sun": "Sun", + "Table": "Table", + "templates": "templates", + "The camera was previously calibrated for a different resolution.": "The camera was previously calibrated for a different resolution.", + "The maximum number of sequences allowed is {{ num }}.": "The maximum number of sequences allowed is {{ num }}.", + "The maximum number of steps allowed in one sequence is {{ num }}.": "The maximum number of steps allowed in one sequence is {{ num }}.", + "This is the connectivity popup. View information about the connection between your web browser, your FarmBot, and the FarmBot web app servers. Whenever your FarmBot is online and ready for action, you will see a green checkmark.": "This is the connectivity popup. View information about the connection between your web browser, your FarmBot, and the FarmBot web app servers. Whenever your FarmBot is online and ready for action, you will see a green checkmark.", + "This is the curves panel. Here you can view and manage all of the water, spread, and height curves for your plants. Pressing the + button will create a new curve.": "This is the curves panel. Here you can view and manage all of the water, spread, and height curves for your plants. Pressing the + button will create a new curve.", + "This is the sensors panel. Here you can view and manage your sensors and sensor readings. Click the Read Sensor buttons to read the current value of your sensors. Create and view historical sensor readings in the Sensor History section.": "This is the sensors panel. Here you can view and manage your sensors and sensor readings. Click the Read Sensor buttons to read the current value of your sensors. Create and view historical sensor readings in the Sensor History section.", + "This is the weeds panel. Here you can view and manage all of the weeds in your garden. Mousing over a weed in the list will highlight it in the map and vice versa. Newly detected weeds will appear in the PENDING category, which you must periodically approve to be listed in the ACTIVE category. Once a weed has been dealt with by FarmBot, it can be moved to the REMOVED category with a Mark As sequence command. Clicking a weed will open up the weed details panel where you can manually edit it.": "This is the weeds panel. Here you can view and manage all of the weeds in your garden. Mousing over a weed in the list will highlight it in the map and vice versa. Newly detected weeds will appear in the PENDING category, which you must periodically approve to be listed in the ACTIVE category. Once a weed has been dealt with by FarmBot, it can be moved to the REMOVED category with a Mark As sequence command. Clicking a weed will open up the weed details panel where you can manually edit it.", + "This sequence includes Lua code. Review carefully before executing.": "This sequence includes Lua code. Review carefully before executing.", + "To add a grid or row of plants, press the + GRID button, enter values into the grid and row planting fields and click PREVIEW. The previewed plants will show in the map in grayscale. Make adjustments as necessary and when you are happy with the preview, click SAVE. Then advance the tour.": "To add a grid or row of plants, press the + GRID button, enter values into the grid and row planting fields and click PREVIEW. The previewed plants will show in the map in grayscale. Make adjustments as necessary and when you are happy with the preview, click SAVE. Then advance the tour.", + "toggle increased editor height": "toggle increased editor height", + "Update {{ curveName }} curve to": "Update {{ curveName }} curve to", + "Update preview": "Update preview", + "Using a desktop computer or laptop, download and install the official Raspberry Pi Imager program from the Raspberry Pi Foundation. This is necessary for installing FarmBot OS onto the microSD card in the next step.": "Using a desktop computer or laptop, download and install the official Raspberry Pi Imager program from the Raspberry Pi Foundation. This is necessary for installing FarmBot OS onto the microSD card in the next step.", + "Using a desktop computer or laptop, download the latest FarmBot OS .img file:": "Using a desktop computer or laptop, download the latest FarmBot OS .img file:", + "UTM": "UTM", + "View FarmBot's current location in the navigation bar.": "View FarmBot's current location in the navigation bar.", + "View profile": "View profile", + "View recent log messages in the logs pop-up. More detailed log messages can be shown by adjusting filter settings.": "View recent log messages in the logs pop-up. More detailed log messages can be shown by adjusting filter settings.", + "Volume (mL)": "Volume (mL)", + "Volume to date (L)": "Volume to date (L)", + "Warning: One or more items are scheduled to run within one hour of the FarmBot OS update time setting.": "Warning: One or more items are scheduled to run within one hour of the FarmBot OS update time setting.", + "Water curves": "Water curves", + "webcams": "webcams", + "What is your preferred language?": "What is your preferred language?", + "When you program your FarmBot to perform an operation on a group of plants, you may want to control the ordering at which FarmBot visits each plant in the group. To do this, click the sort icon to open the sort menu and select one of the available Sort By methods. Once you have chosen a method, advance the tour.": "When you program your FarmBot to perform an operation on a group of plants, you may want to control the ordering at which FarmBot visits each plant in the group. To do this, click the sort icon to open the sort menu and select one of the available Sort By methods. Once you have chosen a method, advance the tour.", + "WiFi": "WiFi", + "With the FarmBot still powered off, manually move the gantry and cross-slide roughly 150mm away from the X and Y axis hardstops. In other words, position the gantry partway along the tracks and position the cross-slide partway across the gantry main beam. Rotate the leadscrew by hand to position the Z-axis fully raised up.": "With the FarmBot still powered off, manually move the gantry and cross-slide roughly 150mm away from the X and Y axis hardstops. In other words, position the gantry partway along the tracks and position the cross-slide partway across the gantry main beam. Rotate the leadscrew by hand to position the Z-axis fully raised up.", + "WRITE\\": "WRITE\\", + "X": "X", + "x-axis acceleration (mm)": "x-axis acceleration (mm)", + "x-axis maximum speed (mm/s)": "x-axis maximum speed (mm/s)", + "x-axis minimum speed (mm/s)": "x-axis minimum speed (mm/s)", + "x-axis motor current (%)": "x-axis motor current (%)", + "X-max bleed": "X-max bleed", + "X-min bleed": "X-min bleed", + "Y": "Y", + "y-axis acceleration (mm)": "y-axis acceleration (mm)", + "y-axis maximum speed (mm/s)": "y-axis maximum speed (mm/s)", + "y-axis minimum speed (mm/s)": "y-axis minimum speed (mm/s)", + "y-axis motor current (%)": "y-axis motor current (%)", + "Y-max bleed": "Y-max bleed", + "Y-min bleed": "Y-min bleed", + "z": "z", + "Z": "Z", + "z-axis acceleration (mm)": "z-axis acceleration (mm)", + "z-axis maximum speed (mm/s)": "z-axis maximum speed (mm/s)", + "z-axis minimum speed (mm/s)": "z-axis minimum speed (mm/s)", + "z-axis motor current (%)": "z-axis motor current (%)" + }, "other_translations": { "ACCELERATE FOR (steps)": "加速 (步骤)", + "active": "活动", "Add": "添加", + "Add Command": "添加命令", "Add Farm Event": "添加农场事件", "ALLOW NEGATIVES": "允许负", "Bot ready": "机器人准备", "CALIBRATE {{axis}}": "校正 {{轴}}", "CALIBRATION": "校准", "calling FarmBot with credentials": "调用FarmBot与凭证", + "Check that the camera is plugged in correctly to either a Raspberry Pi USB port (Express v1.0 kits and all Genesis kits) or into one of the vertically oriented USB ports on the Farmduino (Express v1.1 kits). For cameras with a 90 degree intermediary connector at the cross-slide, ensure the connectors are fully connected.": "检查相机是否正确插入 Raspberry Pi USB 端口(Express v1.0 套件和所有 Genesis 套件)或 Farmduino 上的垂直 USB 端口之一(Express v1.1 套件)。对于在横向滑动处具有 90 度中间连接器的相机,请确保连接器已完全连接。", "Choose a species": "选择一个种类", + "Completed jobs older than five minutes may be cleared upon refresh": "超过五分钟的已完成作业可能会在刷新时被清除", "Confirm Password": "确认密码", "CONTROLLER": "控制器", "Copy": "复制", "Could not download sync data": "无法下载同步数据", "Crop Info": "作物信息", + "Current position": "当前位置", + "Customize which Action or Sequence you want FarmBot to execute when you press Button 3, 4, or 5 on the electronics box. To start, we recommend setting Button 5 to the 'Find Home' sequence. You can change this later from the controls panel.": "自定义当您按下电子盒上的按钮 3、4 或 5 时 FarmBot 执行的操作或序列。首先,我们建议将按钮 5 设置为“查找主页”序列。您可以稍后从控制面板更改此设置。", + "Default plant depth": "默认植物深度", "DELETE ACCOUNT": "删除帐户", + "Delete all created points": "删除所有已创建的点", + "Delete all created weeds": "删除所有已创建的杂草", + "Delete all of the points created through this panel.": "删除通过此面板创建的所有点。", + "Delete all of the weeds created through this panel.": "删除通过此面板创建的所有杂草。", + "Delete all the points you have created?": "删除您创建的所有点?", + "Delete all the weeds you have created?": "删除您创建的所有杂草?", + "Delete multiple": "删除多个", + "Delete this plant": "删除这个植物", "Designer": "设计师", "DEVICE": "装置", + "Did FarmBot's motors power back on? (Try moving the Y-axis by hand)": "FarmBot 的电机是否重新启动?(尝试手动移动 Y 轴)", "downloading device credentials": "下载设备凭证", + "Drag and drop into map": "拖放到地图上", "DRAG STEP HERE": "拖一步", + "Duration": "持续时间", "EDIT": "编辑工作", "Edit Farm Event": "编辑农场事件", + "Edit Sequence": "编辑序列", "ENABLE ENCODERS": "编码器", "Error establishing socket connection": "建立套接字连接错误", "Execute Script": "执行脚本", @@ -2299,44 +2424,83 @@ "EXECUTE SEQUENCE": "执行序列", "Factory Reset": "恢复出场设置", "Farm Events": "农场事件", + "Filters active": "过滤器已激活", + "Firmware value from your choice in the dropdown to the left, as understood by the Web App.": "Web应用程序理解的下拉菜单中选择的固件值。", + "Flash FarmBot's SD card with FarmBot OS and re-insert it.": "使用FarmBot操作系统刷新FarmBot的SD卡并重新插入。", "Forgot Password": "忘记密码", + "Grid and Row Planting": "网格和行种植", "I agree to the terms of use": "我同意使用条款", + "I do not know where to get FarmBot OS": "我不知道在哪里获取FarmBot操作系统", + "If not using a webcam, use this setting to remove the widget from the Controls panel.": "如果不使用摄像头,请使用此设置从控制面板中移除小部件。", "If Statement": "条件语句", "IF STATEMENT": "条件语句", "Import coordinates from": "进口坐标", "initiating connection": "初始化连接", + "Inspect the wood raised bed (Express kits) or track extrusions (Genesis kits) for bumps. Use sand paper to smooth out imperfections.": "检查木制高床(Express套件)或轨道挤压件(Genesis套件)是否有凹凸。使用砂纸平滑不完美的地方。", + "Installing FarmBot OS documentation": "安装FarmBot操作系统文档", "INVERT ENDPOINTS": "反转端口", "INVERT MOTORS": "反转电机", + "Is the SD card with FarmBot OS installed?": "是否已安装FarmBot操作系统的SD卡?", "LENGTH (m)": "长度(m)", + "low": "低", + "Motor Current": "电机电流", + "Motor current in milliamps. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "电机电流(毫安)。 (默认值:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Motor position plot": "电机位置图", "Move Absolute": "绝对移动", "MOVE ABSOLUTE": "绝对移动", + "MOVE AMOUNT (mm)": "移动距离 (mm)", "MOVE RELATIVE": "相对移动", "NAME": "名称", "NETWORK": "网络", + "Network Quality": "网络质量", "never connected to device": "没有连接到设备", + "New regimen ": "新日程", + "new sequence {{ num }}": "新序列 {{ num }}", + "no active jobs": "没有活动任务", + "normal": "正常", "Not Connected to bot": "没有连接到机器人", + "occurred": "发生", + "Page Not Found.": "页面未找到。", "Pin {{num}}": "引脚 {{num}}", "Pin Mode": "引脚模式", "Pin Number": "引脚数", + "pinned sequences": "固定的序列", "Plant Info": "工厂信息", + "Position (mm)": "位置(毫米)", + "Presets": "预设", + "Quiet Mode": "安静模式", "Read Pin": "读出引脚", "READ PIN": "读出引脚", "Regimen Name": "方案名称", "Repeats Every": "每次重复序列", "RESTART FARMBOT": "重启FARMBOT", "SAVE": "保存", + "SD card": "SD卡", + "Select an action": "选择一个动作", "SEND MESSAGE": "发送信息", "Send Password reset": "发送密码重置", "Server Port": "服务器端口", "Server URL": "服务器URL", + "show": "显示", + "show all": "显示全部", "SHUTDOWN FARMBOT": "关闭FARMBOT", "SLOT": "位置", "Socket Connection Established": "套接字连接建立", + "Sowing Method": "播种方法", + "Starting X": "起始X", + "starting Y": "起始Y", "STATUS": "地位", + "Sun Requirements": "阳光需求", "Sync Required": "同步要求", "TAKE PHOTO": "拍照", "TEST": "测试", + "This is the connectivity popup. Click it to view information about the connection between your web browser, your FarmBot, and the FarmBot web app servers. Whenever your FarmBot is online and ready for action, you will see a green checkmark.": "这是连接弹出窗口。点击它查看您的网络浏览器、FarmBot和FarmBot网络应用服务器之间的连接信息。每当您的FarmBot在线并准备好操作时,您将看到一个绿色勾号。", + "This is the controls panel. Here you can control your FarmBot in realtime by pressing the movement arrow buttons, toggling peripherals, and executing pinned sequences. You can also view current status information about your FarmBot including its position and an optional webcam stream.": "这是控制面板。在这里,您可以通过按移动箭头按钮、切换外设和执行固定的序列来实时控制您的FarmBot。您还可以查看有关FarmBot的当前状态信息,包括其位置和可选的网络摄像头流。", + "This is the weed detector toggle. When turned ON, your FarmBot will take and process photos for weeds after every sequence execution.": "这是杂草探测器开关。开启时,您的FarmBot将在每次序列执行后拍摄和处理杂草照片。", + "This is the weeds panel. Here you can view and manage all of the weeds in your garden detected by FarmBot. Mousing over a weed in the list will highlight it in the map and vice versa. Clicking a weed will open up the weed details panel where you can edit it. Pressing the weed + button will allow you to add a weed manually.": "这是杂草面板。在这里,您可以查看和管理FarmBot检测到的花园中的所有杂草。在列表中将鼠标悬停在某个杂草上时,它将在地图中高亮显示,反之亦然。点击杂草将打开杂草详细信息面板,您可以在其中进行编辑。按下杂草+按钮将允许您手动添加杂草。", "TIMEOUT AFTER (seconds)": "超时后 (秒)", + "To add a grid or row of plants, scroll to the bottom of the panel, enter values into the grid and row planting fields and click PREVIEW. The previewed plants will show in the map in grayscale. Make adjustments as necessary and when you are happy with the preview, click SAVE. Then advance the tour.": "要添加一排或一行植物,请滚动到面板底部,在网格和行种植字段中输入数值并点击预览。预览的植物将在地图中以灰度显示。根据需要进行调整,当对预览满意时,点击保存。然后继续浏览。", + "toggle logs": "切换日志", "TOOL": "工具", "TOOL NAME": "工具名称", "TOOLBAY NAME": "工具名字", @@ -2345,11 +2509,29 @@ "Tried to save Farm Event": "试图保存农场件", "Tried to save plant": "试图保存植物", "Tried to update Farm Event": "试图更新农场事件", + "ttyUSB0 (recommended for Express v1.1)": "ttyUSB0(推荐用于Express v1.1)", "Unable to delete sequence": "无法删除序列", "Unable to download device credentials": "无法下载设备凭据", "UPDATE": "更新", + "View all logs": "查看所有日志", + "View FarmBot's current location using the axis position display.": "使用轴位置显示查看FarmBot的当前位置。", + "View recent log messages here. More detailed log messages can be shown by adjusting filter settings.": "在此查看最近的日志消息。通过调整过滤器设置可以显示更详细的日志消息。", "WAIT": "等候", + "Webcam Feeds": "网络摄像头供稿", + "When you program your FarmBot to perform an operation on a group of plants, you may want to control the ordering at which FarmBot visits each plant in the group. To do this, select one of the available Sort By methods. Once you have chosen a method, advance the tour.": "当您将FarmBot编程执行对一组植物的操作时,您可能希望控制FarmBot访问组中每个植物的顺序。要做到这一点,请选择其中一个可用的排序方法。选择了一种方法后,继续导览。", "Write Pin": "写入引脚", - "WRITE PIN": "写入引脚" + "WRITE PIN": "写入引脚", + "x-axis acceleration": "x轴加速度", + "x-axis maximum speed": "x轴最大速度", + "x-axis minimum speed": "x轴最小速度", + "x-axis motor current": "x轴电机电流", + "y-axis acceleration": "Y轴加速度", + "y-axis maximum speed": "Y轴最大速度", + "y-axis minimum speed": "Y轴最小速度", + "y-axis motor current": "Y轴电机电流", + "z-axis acceleration": "z轴加速度", + "z-axis maximum speed": "z轴最大速度", + "z-axis minimum speed": "z轴最小速度", + "z-axis motor current": "z轴电机电流" } } From 748cbf00a76c6bd121d9dd22ad9dafbd5436c38c Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 28 Jun 2024 09:54:57 -0700 Subject: [PATCH 03/54] add 3D garden environment --- app/controllers/dashboard_controller.rb | 2 + app/views/dashboard/promo.html.erb | 6 + config/routes.rb | 1 + ...38_add_three_d_garden_to_web_app_config.rb | 9 ++ db/structure.sql | 6 +- frontend/constants.ts | 1 + frontend/css/farm_designer/farm_designer.scss | 7 + .../farm_designer/__tests__/index_test.tsx | 8 ++ .../__tests__/three_d_garden_map_test.tsx | 13 ++ frontend/farm_designer/index.tsx | 126 +++++++++--------- .../__tests__/garden_map_legend_test.tsx | 16 +++ .../map/legend/garden_map_legend.tsx | 9 ++ .../farm_designer/map/legend/layer_toggle.tsx | 1 + frontend/farm_designer/three_d_garden_map.tsx | 10 ++ frontend/promo/__tests__/index_test.tsx | 11 ++ frontend/promo/__tests__/promo_test.tsx | 11 ++ frontend/promo/index.tsx | 4 + frontend/promo/promo.tsx | 5 + frontend/session_keys.ts | 3 +- frontend/settings/default_values.ts | 1 + .../three_d_garden/__tests__/index_test.tsx | 41 ++++++ frontend/three_d_garden/index.tsx | 47 +++++++ 22 files changed, 274 insertions(+), 64 deletions(-) create mode 100644 app/views/dashboard/promo.html.erb create mode 100644 db/migrate/20240625195838_add_three_d_garden_to_web_app_config.rb create mode 100644 frontend/farm_designer/__tests__/three_d_garden_map_test.tsx create mode 100644 frontend/farm_designer/three_d_garden_map.tsx create mode 100644 frontend/promo/__tests__/index_test.tsx create mode 100644 frontend/promo/__tests__/promo_test.tsx create mode 100644 frontend/promo/index.tsx create mode 100644 frontend/promo/promo.tsx create mode 100644 frontend/three_d_garden/__tests__/index_test.tsx create mode 100644 frontend/three_d_garden/index.tsx diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 6d72bedc23..4140ba75fd 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -13,6 +13,7 @@ class DashboardController < ApplicationController :terminal, :tos_update, :try_farmbot, + :promo, ] OUTPUT_URL = "/" + File.join("assets", "parcel") # <= served from public/ dir @@ -32,6 +33,7 @@ class DashboardController < ApplicationController tos_update: "/tos_update/index.tsx", demo: "/demo/index.tsx", try_farmbot: "/try_farmbot/index.tsx", + promo: "/promo/index.tsx", os_download: "/os_download/index.tsx", featured: "/featured/index.tsx", terminal: "/terminal/index.tsx", diff --git a/app/views/dashboard/promo.html.erb b/app/views/dashboard/promo.html.erb new file mode 100644 index 0000000000..f23398816f --- /dev/null +++ b/app/views/dashboard/promo.html.erb @@ -0,0 +1,6 @@ +<% # Intentionally blank %> + diff --git a/config/routes.rb b/config/routes.rb index 0c750f4347..2fccffaf7c 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -130,6 +130,7 @@ get "/demo" => "dashboard#demo", as: :demo_main get "/try_farmbot" => "dashboard#try_farmbot", as: :try_farmbot_main + get "/promo" => "dashboard#promo", as: :promo_main get "/os" => "dashboard#os_download", as: :os_download get "/featured" => "dashboard#featured", as: :featured get "/password_reset/*token" => "dashboard#password_reset", as: :password_reset diff --git a/db/migrate/20240625195838_add_three_d_garden_to_web_app_config.rb b/db/migrate/20240625195838_add_three_d_garden_to_web_app_config.rb new file mode 100644 index 0000000000..66ee11d2df --- /dev/null +++ b/db/migrate/20240625195838_add_three_d_garden_to_web_app_config.rb @@ -0,0 +1,9 @@ +class AddThreeDGardenToWebAppConfig < ActiveRecord::Migration[6.1] + def up + add_column :web_app_configs, :three_d_garden, :boolean, default: false + end + + def down + remove_column :web_app_configs, :three_d_garden + end +end diff --git a/db/structure.sql b/db/structure.sql index b704281f4e..7c33c62e9d 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -2036,7 +2036,8 @@ CREATE TABLE public.web_app_configs ( show_uncropped_camera_view_area boolean DEFAULT false, default_plant_depth integer DEFAULT 5, show_missed_step_plot boolean DEFAULT false, - enable_3d_electronics_box_top boolean DEFAULT true + enable_3d_electronics_box_top boolean DEFAULT true, + three_d_garden boolean DEFAULT false ); @@ -3987,6 +3988,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20240118204046'), ('20240202171922'), ('20240207234421'), -('20240405171128'); +('20240405171128'), +('20240625195838'); diff --git a/frontend/constants.ts b/frontend/constants.ts index 5f1cb92797..9c9a2ef8a5 100644 --- a/frontend/constants.ts +++ b/frontend/constants.ts @@ -2166,6 +2166,7 @@ export enum DeviceSetting { showReadingsMapLayer = `Show Readings Map Layer`, showMoisture = `Moisture`, showMoistureInterpolationMapLayer = `Show Moisture Interpolation Map Layer`, + show3DMap = `3D Map`, // Controls invertJogButtonXAxis = `X Axis`, diff --git a/frontend/css/farm_designer/farm_designer.scss b/frontend/css/farm_designer/farm_designer.scss index d5d2060d8a..c1d421f73a 100644 --- a/frontend/css/farm_designer/farm_designer.scss +++ b/frontend/css/farm_designer/farm_designer.scss @@ -1201,3 +1201,10 @@ } } } + +.three-d-garden { + position: relative; + height: 100vh; + width: 100vw; + cursor: grab; +} diff --git a/frontend/farm_designer/__tests__/index_test.tsx b/frontend/farm_designer/__tests__/index_test.tsx index 26acd1746b..fdd940d4c5 100644 --- a/frontend/farm_designer/__tests__/index_test.tsx +++ b/frontend/farm_designer/__tests__/index_test.tsx @@ -129,6 +129,7 @@ describe("", () => { p.designer.openedSavedGarden = 1; const wrapper = mount(); expect(wrapper.text().toLowerCase()).toContain("viewing saved garden"); + expect(wrapper.html()).not.toContain("three-d-garden"); }); it("toggles setting", () => { @@ -157,6 +158,13 @@ describe("", () => { const i = new FarmDesigner(p); expect(i.getBotOriginQuadrant()).toEqual(1); }); + + it("renders 3D garden", () => { + const p = fakeProps(); + p.getConfigValue = () => true; + const wrapper = mount(); + expect(wrapper.html()).toContain("three-d-garden"); + }); }); describe("getDefaultAxisLength()", () => { diff --git a/frontend/farm_designer/__tests__/three_d_garden_map_test.tsx b/frontend/farm_designer/__tests__/three_d_garden_map_test.tsx new file mode 100644 index 0000000000..5a5b0dc7f9 --- /dev/null +++ b/frontend/farm_designer/__tests__/three_d_garden_map_test.tsx @@ -0,0 +1,13 @@ +import React from "react"; +import { mount } from "enzyme"; +import { ThreeDGardenMapProps, ThreeDGardenMap } from "../three_d_garden_map"; + +describe("", () => { + const fakeProps = (): ThreeDGardenMapProps => ({ + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("three-d-garden"); + }); +}); diff --git a/frontend/farm_designer/index.tsx b/frontend/farm_designer/index.tsx index 015872b2ce..d43c375747 100755 --- a/frontend/farm_designer/index.tsx +++ b/frontend/farm_designer/index.tsx @@ -24,6 +24,7 @@ import { SavedGardenHUD } from "../saved_gardens/saved_gardens"; import { calculateImageAgeInfo } from "../photos/photo_filter_settings/util"; import { Xyz } from "farmbot"; import { ProfileViewer } from "./map/profile"; +import { ThreeDGardenMap } from "./three_d_garden_map"; export const getDefaultAxisLength = (getConfigValue: GetWebAppConfigValue): Record => { @@ -192,72 +193,75 @@ export class RawFarmDesigner {this.props.children || React.createElement(Plants)} -
- + :
+ +
} + + {this.props.designer.openedSavedGarden && + } + + {!this.props.getConfigValue(BooleanSetting.three_d_garden) && + -
- - {this.props.designer.openedSavedGarden && - } - - + mapTransformProps={this.mapTransformProps} + allPoints={this.props.allPoints} />} ; } } diff --git a/frontend/farm_designer/map/legend/__tests__/garden_map_legend_test.tsx b/frontend/farm_designer/map/legend/__tests__/garden_map_legend_test.tsx index 29c1147ead..11cd0e8d75 100644 --- a/frontend/farm_designer/map/legend/__tests__/garden_map_legend_test.tsx +++ b/frontend/farm_designer/map/legend/__tests__/garden_map_legend_test.tsx @@ -10,6 +10,11 @@ jest.mock("../../../../config_storage/actions", () => ({ setWebAppConfigValue: jest.fn(), })); +let mockDev = false; +jest.mock("../../../../settings/dev/dev_support", () => ({ + DevSettings: { futureFeaturesEnabled: () => mockDev } +})); + import React from "react"; import { shallow, mount } from "enzyme"; import { @@ -63,6 +68,7 @@ describe("", () => { expect(wrapper.html()).toContain("filter"); expect(wrapper.html()).toContain("extras"); expect(wrapper.html()).not.toContain("-100"); + expect(wrapper.text().toLowerCase()).not.toContain("3d map"); }); it("renders with readings", () => { @@ -77,6 +83,16 @@ describe("", () => { wrapper.find(".fb-toggle-button").last().simulate("click"); expect(wrapper.html()).toContain("-100"); }); + + it("renders 3D map toggle", () => { + mockDev = true; + const p = fakeProps(); + const wrapper = mount(); + expect(wrapper.text().toLowerCase()).toContain("3d map"); + wrapper.find(".fb-layer-toggle").last().simulate("click"); + expect(setWebAppConfigValue).toHaveBeenCalledWith( + BooleanSetting.three_d_garden, true); + }); }); describe("", () => { diff --git a/frontend/farm_designer/map/legend/garden_map_legend.tsx b/frontend/farm_designer/map/legend/garden_map_legend.tsx index cd60de29fe..212fe96085 100644 --- a/frontend/farm_designer/map/legend/garden_map_legend.tsx +++ b/frontend/farm_designer/map/legend/garden_map_legend.tsx @@ -23,6 +23,7 @@ import { getModifiedClassName } from "../../../settings/default_values"; import { Position } from "@blueprintjs/core"; import { MapSizeInputs } from "../../map_size_setting"; import { OriginSelector } from "../../../settings/farm_designer_settings"; +import { DevSettings } from "../../../settings/dev/dev_support"; export const ZoomControls = ({ zoom, getConfigValue }: { zoom: (value: number) => () => void, @@ -115,6 +116,7 @@ export const FarmbotSubMenu = (props: SettingsSubMenuProps) => const LayerToggles = (props: GardenMapLegendProps) => { const { toggle, getConfigValue, dispatch } = props; const subMenuProps = { dispatch, getConfigValue }; + const threeDGarden = !!props.getConfigValue(BooleanSetting.three_d_garden); return
{ value={props.showMoistureInterpolationMap} label={DeviceSetting.showMoisture} onClick={toggle(BooleanSetting.show_moisture_interpolation_map)} />} + {DevSettings.futureFeaturesEnabled() && + dispatch(setWebAppConfigValue( + BooleanSetting.three_d_garden, !threeDGarden))} />}
; }; diff --git a/frontend/farm_designer/map/legend/layer_toggle.tsx b/frontend/farm_designer/map/legend/layer_toggle.tsx index d69d685bef..174e360daa 100644 --- a/frontend/farm_designer/map/legend/layer_toggle.tsx +++ b/frontend/farm_designer/map/legend/layer_toggle.tsx @@ -22,6 +22,7 @@ export function LayerToggle(props: LayerToggleProps) { const classNames = [ "fb-button", "fb-toggle-button", + "fb-layer-toggle", value ? "green" : "red", getModifiedClassName(props.settingName), ].join(" "); diff --git a/frontend/farm_designer/three_d_garden_map.tsx b/frontend/farm_designer/three_d_garden_map.tsx new file mode 100644 index 0000000000..63a288d2a6 --- /dev/null +++ b/frontend/farm_designer/three_d_garden_map.tsx @@ -0,0 +1,10 @@ +import React from "react"; +import { ThreeDGarden } from "../three_d_garden"; + +export interface ThreeDGardenMapProps { +} + +export const ThreeDGardenMap = (props: ThreeDGardenMapProps) => { + props; + return ; +}; diff --git a/frontend/promo/__tests__/index_test.tsx b/frontend/promo/__tests__/index_test.tsx new file mode 100644 index 0000000000..2ea54fe356 --- /dev/null +++ b/frontend/promo/__tests__/index_test.tsx @@ -0,0 +1,11 @@ +jest.mock("../../util/page", () => ({ entryPoint: jest.fn() })); + +import { entryPoint } from "../../util"; +import { Promo } from "../promo"; + +describe("Promo loader", () => { + it("calls entryPoint", async () => { + await import("../index"); + expect(entryPoint).toHaveBeenCalledWith(Promo); + }); +}); diff --git a/frontend/promo/__tests__/promo_test.tsx b/frontend/promo/__tests__/promo_test.tsx new file mode 100644 index 0000000000..39728c29b2 --- /dev/null +++ b/frontend/promo/__tests__/promo_test.tsx @@ -0,0 +1,11 @@ +import React from "react"; +import { shallow } from "enzyme"; +import { Promo } from "../promo"; + +describe("", () => { + it("renders", () => { + console.error = jest.fn(); + const wrapper = shallow(); + expect(wrapper.html()).toContain("three-d-garden"); + }); +}); diff --git a/frontend/promo/index.tsx b/frontend/promo/index.tsx new file mode 100644 index 0000000000..2f8aeed030 --- /dev/null +++ b/frontend/promo/index.tsx @@ -0,0 +1,4 @@ +import { entryPoint } from "../util"; +import { Promo } from "./promo"; + +entryPoint(Promo); diff --git a/frontend/promo/promo.tsx b/frontend/promo/promo.tsx new file mode 100644 index 0000000000..71c89815d1 --- /dev/null +++ b/frontend/promo/promo.tsx @@ -0,0 +1,5 @@ +import React from "react"; +import { ThreeDGarden } from "../three_d_garden"; + +export const Promo = () => + ; diff --git a/frontend/session_keys.ts b/frontend/session_keys.ts index a112a97444..ad503516bc 100644 --- a/frontend/session_keys.ts +++ b/frontend/session_keys.ts @@ -4,7 +4,7 @@ import { StringConfigKey as WebAppStringConfigKey, } from "farmbot/dist/resources/configs/web_app"; -type WebAppBooleanConfigKeyAll = WebAppBooleanConfigKey; +type WebAppBooleanConfigKeyAll = WebAppBooleanConfigKey | "three_d_garden"; type WebAppNumberConfigKeyAll = WebAppNumberConfigKey; type WebAppStringConfigKeyAll = WebAppStringConfigKey; @@ -49,6 +49,7 @@ export const BooleanSetting: BooleanSettings = { crop_images: "crop_images", clip_image_layer: "clip_image_layer", highlight_modified_settings: "highlight_modified_settings", + three_d_garden: "three_d_garden" as WebAppBooleanConfigKey, /** Sequence settings */ confirm_step_deletion: "confirm_step_deletion", diff --git a/frontend/settings/default_values.ts b/frontend/settings/default_values.ts index e12074f823..e92f4a2c96 100644 --- a/frontend/settings/default_values.ts +++ b/frontend/settings/default_values.ts @@ -87,6 +87,7 @@ const DEFAULT_WEB_APP_CONFIG_VALUES: Record = { view_celery_script: false, highlight_modified_settings: true, show_advanced_settings: false, + ["three_d_garden" as Key]: false, }; const DEFAULT_EXPRESS_WEB_APP_CONFIG_VALUES = diff --git a/frontend/three_d_garden/__tests__/index_test.tsx b/frontend/three_d_garden/__tests__/index_test.tsx new file mode 100644 index 0000000000..5304f2c663 --- /dev/null +++ b/frontend/three_d_garden/__tests__/index_test.tsx @@ -0,0 +1,41 @@ +jest.mock("@react-three/drei", () => { + return { + Box: () =>
, + Circle: () =>
, + PerspectiveCamera: () =>
, + OrbitControls: () =>
, + }; +}); + +jest.mock("@react-three/fiber", () => ({ + Canvas: () =>
, + addEffect: jest.fn(), +})); + +import { mount } from "enzyme"; +import { + ThreeDGardenProps, ThreeDGarden, + ThreeDGardenModel, ThreeDGardenModelProps, + +} from ".."; +import React from "react"; + +describe("", () => { + const fakeProps = (): ThreeDGardenProps => ({ + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("three-d-garden"); + }); +}); + +describe("", () => { + const fakeProps = (): ThreeDGardenModelProps => ({ + }); + + it("renders model", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("three-d-garden-model"); + }); +}); diff --git a/frontend/three_d_garden/index.tsx b/frontend/three_d_garden/index.tsx new file mode 100644 index 0000000000..a1f26de56b --- /dev/null +++ b/frontend/three_d_garden/index.tsx @@ -0,0 +1,47 @@ +/* eslint-disable react/no-unknown-property */ +import { Circle, PerspectiveCamera, OrbitControls, Box } from "@react-three/drei"; +import { Canvas } from "@react-three/fiber"; +import React from "react"; + +export interface ThreeDGardenProps { +} + +export const ThreeDGarden = (props: ThreeDGardenProps) => { + props; + return
+ + + +
; +}; + +export interface ThreeDGardenModelProps { +} + +export const ThreeDGardenModel = (props: ThreeDGardenModelProps) => { + props; + return + + + + + + + + + + + ; +}; From 8f123590018128d4d00137b9a9b638e295fe81e6 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 28 Jun 2024 09:55:50 -0700 Subject: [PATCH 04/54] add workaround for no-unknown-property errors --- .eslintrc.js | 2 ++ frontend/settings/pin_bindings/model.tsx | 24 ++++++++++++---------- frontend/three_d_garden/components.tsx | 26 ++++++++++++++++++++++++ frontend/three_d_garden/index.tsx | 6 +++--- package.json | 1 + 5 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 frontend/three_d_garden/components.tsx diff --git a/.eslintrc.js b/.eslintrc.js index 7bb601619e..88969caf5b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -16,6 +16,7 @@ module.exports = { "no-null", "import", "promise", + "@react-three", ], extends: [ "eslint:recommended", @@ -29,6 +30,7 @@ module.exports = { "plugin:import/errors", "plugin:import/warnings", "plugin:import/typescript", + "plugin:@react-three/recommended", ], settings: { react: { diff --git a/frontend/settings/pin_bindings/model.tsx b/frontend/settings/pin_bindings/model.tsx index be05f20b19..12969a1bed 100644 --- a/frontend/settings/pin_bindings/model.tsx +++ b/frontend/settings/pin_bindings/model.tsx @@ -1,4 +1,3 @@ -/* eslint-disable react/no-unknown-property */ /* eslint-disable no-null/no-null */ import React, { useRef } from "react"; import * as THREE from "three"; @@ -15,6 +14,9 @@ import { debounce, some } from "lodash"; import { t } from "../../i18next_wrapper"; import { isExpress } from "../../settings/firmware/firmware_hardware_support"; import { ButtonPin } from "./list_and_label_support"; +import { + AmbientLight, DirectionalLight, Group, Mesh, PointLight, +} from "../../three_d_garden/components"; const ASSETS = "/3D/"; const LIB_DIR = `${ASSETS}lib/`; @@ -265,27 +267,27 @@ export const Model = (props: BoxTopBaseProps) => { setZForAllInGroup(e, Z); document.body.style.cursor = "default"; }; - return - - - - + - - @@ -305,7 +307,7 @@ export const Model = (props: BoxTopBaseProps) => { }; return - { .map(ledIndicator => { const { position, color, ref } = ledIndicator; return - { ; })} - ; + ; }; export const ElectronicsBoxModel = (props: BoxTopBaseProps) => { diff --git a/frontend/three_d_garden/components.tsx b/frontend/three_d_garden/components.tsx new file mode 100644 index 0000000000..18cc9e443e --- /dev/null +++ b/frontend/three_d_garden/components.tsx @@ -0,0 +1,26 @@ +import React from "react"; +import { + AmbientLightProps, + DirectionalLightProps, + GroupProps, + MeshProps, + PointLightProps, +} from "@react-three/fiber"; + +// Workaround to avoid disabling no-unknown-property rule +// eslint is marking props for THREE components starting with lowercase as unknown + +export const AmbientLight = (props: AmbientLightProps) => + ; + +export const DirectionalLight = (props: DirectionalLightProps) => + ; + +export const Group = (props: GroupProps) => + ; + +export const Mesh = (props: MeshProps) => + ; + +export const PointLight = (props: PointLightProps) => + ; diff --git a/frontend/three_d_garden/index.tsx b/frontend/three_d_garden/index.tsx index a1f26de56b..c051449434 100644 --- a/frontend/three_d_garden/index.tsx +++ b/frontend/three_d_garden/index.tsx @@ -1,7 +1,7 @@ -/* eslint-disable react/no-unknown-property */ import { Circle, PerspectiveCamera, OrbitControls, Box } from "@react-three/drei"; import { Canvas } from "@react-three/fiber"; import React from "react"; +import { AmbientLight, DirectionalLight } from "./components"; export interface ThreeDGardenProps { } @@ -29,8 +29,8 @@ export const ThreeDGardenModel = (props: ThreeDGardenModelProps) => { - - + + Date: Wed, 3 Jul 2024 15:24:14 -0700 Subject: [PATCH 05/54] upgrade deps --- .circleci/config.yml | 2 +- Gemfile.lock | 26 +++++++++++----------- frontend/plants/map_state_to_props.ts | 7 ++---- frontend/plants/select_plants.tsx | 3 +-- package.json | 32 +++++++++++++-------------- 5 files changed, 33 insertions(+), 37 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d0d6efb918..68ce3361d0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 executors: build-executor: machine: - image: ubuntu-2204:edge + image: ubuntu-2404:current resource_class: xlarge working_directory: /home/circleci/project diff --git a/Gemfile.lock b/Gemfile.lock index 9a56e36176..46823d9d64 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -71,15 +71,15 @@ GEM minitest (>= 5.1) tzinfo (~> 2.0) zeitwerk (~> 2.3) - addressable (2.8.6) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) amq-protocol (2.3.2) ast (2.4.2) base64 (0.2.0) bcrypt (3.1.20) bigdecimal (3.1.8) builder (3.3.0) - bunny (2.22.0) + bunny (2.23.0) amq-protocol (~> 2.3, >= 2.3.1) sorted_set (~> 1, >= 1.0.2) case_transform (0.2) @@ -162,7 +162,7 @@ GEM rexml google-apis-iamcredentials_v1 (0.21.0) google-apis-core (>= 0.15.0, < 2.a) - google-apis-storage_v1 (0.39.0) + google-apis-storage_v1 (0.40.0) google-apis-core (>= 0.15.0, < 2.a) google-cloud-core (1.7.0) google-cloud-env (>= 1.0, < 3.a) @@ -192,7 +192,7 @@ GEM i18n (1.14.5) concurrent-ruby (~> 1.0) jsonapi-renderer (0.2.2) - jwt (2.8.1) + jwt (2.8.2) base64 kaminari (1.2.2) activesupport (>= 4.1.0) @@ -222,12 +222,12 @@ GEM marcel (1.0.4) method_source (1.1.0) mini_mime (1.1.5) - minitest (5.23.1) + minitest (5.24.1) multi_json (1.15.0) multipart-post (2.4.1) mutations (0.9.1) activesupport - net-imap (0.4.12) + net-imap (0.4.14) date net-protocol net-pop (0.1.2) @@ -251,9 +251,9 @@ GEM pry (0.14.2) coderay (~> 1.1) method_source (~> 1.0) - pry-rails (0.3.9) - pry (>= 0.10.4) - public_suffix (5.0.5) + pry-rails (0.3.11) + pry (>= 0.13.0) + public_suffix (6.0.0) rabbitmq_http_api_client (2.2.0) addressable (~> 2.7) faraday (~> 1.3) @@ -314,7 +314,7 @@ GEM actionpack (>= 5.2) railties (>= 5.2) retriable (3.1.2) - rexml (3.3.0) + rexml (3.3.1) strscan rollbar (3.5.2) rspec (3.13.0) @@ -329,7 +329,7 @@ GEM rspec-mocks (3.13.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-rails (6.1.2) + rspec-rails (6.1.3) actionpack (>= 6.1) activesupport (>= 6.1) railties (>= 6.1) @@ -393,7 +393,7 @@ GEM websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) - zeitwerk (2.6.15) + zeitwerk (2.6.16) PLATFORMS x86_64-linux diff --git a/frontend/plants/map_state_to_props.ts b/frontend/plants/map_state_to_props.ts index 84a27587fe..798dcd3bd5 100644 --- a/frontend/plants/map_state_to_props.ts +++ b/frontend/plants/map_state_to_props.ts @@ -116,11 +116,8 @@ export function formatPlantInfo(plant: TaggedPlant): FormattedPlantInfo { radius: plant.body.radius, depth: plant.kind == "Point" ? plant.body.depth : undefined, uuid: plant.uuid, - plantedAt: (get(plant, "body.planted_at") - || get(plant, "body.pointer_type") == "Weed") - ? plantDate(plant) - : undefined, - plantStatus: get(plant, "body.plant_stage", "planned") as PlantStage, + plantedAt: get(plant, "body.planted_at") ? plantDate(plant) : undefined, + plantStatus: get(plant, "body.plant_stage", "planned"), meta: plant.kind == "Point" ? plant.body.meta : undefined, water_curve_id: plant.body["water_curve_id" as keyof ( PlantPointer | PlantTemplate)] as number, diff --git a/frontend/plants/select_plants.tsx b/frontend/plants/select_plants.tsx index 8553d6e98e..9ae1a123e1 100644 --- a/frontend/plants/select_plants.tsx +++ b/frontend/plants/select_plants.tsx @@ -66,8 +66,7 @@ export const isPointType = (x: any): x is PointType => export const validPointTypes = (pointerTypes: unknown[] | undefined): PointType[] | undefined => { - const validValues = (pointerTypes || []) - .filter(x => isPointType(x)).map(x => x as PointType); + const validValues = (pointerTypes || []).filter(x => isPointType(x)); return validValues.length > 0 ? validValues : undefined; }; diff --git a/package.json b/package.json index 1790e545eb..26e4412fe2 100644 --- a/package.json +++ b/package.json @@ -33,21 +33,21 @@ "@parcel/watcher": "2.1.0" }, "dependencies": { - "@blueprintjs/core": "5.10.3", - "@blueprintjs/select": "5.1.5", + "@blueprintjs/core": "5.10.5", + "@blueprintjs/select": "5.2.1", "@monaco-editor/react": "4.6.0", "@parcel/transformer-sass": "2.12.0", "@parcel/transformer-typescript-tsc": "2.12.0", - "@react-three/drei": "9.106.0", + "@react-three/drei": "9.108.1", "@react-three/fiber": "8.16.8", - "@types/lodash": "4.17.5", + "@types/lodash": "4.17.6", "@types/markdown-it": "14.1.1", - "@types/node": "20.14.2", + "@types/node": "20.14.9", "@types/promise-timeout": "1.3.3", "@types/react": "18.3.3", "@types/react-color": "3.0.12", "@types/react-dom": "18.3.0", - "@types/three": "0.165.0", + "@types/three": "0.166.0", "@types/ws": "8.5.10", "axios": "1.7.2", "bowser": "2.11.0", @@ -59,8 +59,8 @@ "markdown-it": "14.1.0", "markdown-it-emoji": "3.0.0", "moment": "2.30.1", - "monaco-editor": "0.49.0", - "mqtt": "5.7.0", + "monaco-editor": "0.50.0", + "mqtt": "5.7.3", "npm": "10.8.1", "parcel": "2.12.0", "process": "0.11.10", @@ -75,8 +75,8 @@ "redux-immutable-state-invariant": "2.1.0", "redux-thunk": "3.1.0", "takeme": "0.12.0", - "three": "0.165.0", - "typescript": "5.4.5", + "three": "0.166.1", + "typescript": "5.5.3", "url": "0.11.3", "xterm": "5.3.0" }, @@ -85,8 +85,8 @@ "@types/enzyme": "3.10.12", "@types/jest": "29.5.12", "@types/readable-stream": "4.0.14", - "@typescript-eslint/eslint-plugin": "7.13.0", - "@typescript-eslint/parser": "7.13.0", + "@typescript-eslint/eslint-plugin": "7.15.0", + "@typescript-eslint/parser": "7.15.0", "@wojtekmaj/enzyme-adapter-react-17": "0.8.0", "enzyme": "3.11.0", "eslint": "8.57.0", @@ -94,8 +94,8 @@ "eslint-plugin-import": "2.29.1", "eslint-plugin-jest": "28.6.0", "eslint-plugin-no-null": "1.0.2", - "eslint-plugin-promise": "6.2.0", - "eslint-plugin-react": "7.34.2", + "eslint-plugin-promise": "6.4.0", + "eslint-plugin-react": "7.34.3", "eslint-plugin-react-hooks": "4.6.2", "jest": "29.7.0", "jest-canvas-mock": "2.5.2", @@ -108,9 +108,9 @@ "raf": "3.4.1", "react-addons-test-utils": "15.6.2", "react-test-renderer": "18.3.1", - "sass": "1.77.5", + "sass": "1.77.6", "sass-lint": "1.13.1", - "ts-jest": "29.1.4", + "ts-jest": "29.1.5", "tslint": "6.1.3" } } From 3b7c32e3176f01efa6ab26ba28648990082a205e Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 3 Jul 2024 15:46:11 -0700 Subject: [PATCH 06/54] keep original tag order in release task --- lib/tasks/releases.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/releases.rake b/lib/tasks/releases.rake index 267a15b7bc..074d6da8e4 100644 --- a/lib/tasks/releases.rake +++ b/lib/tasks/releases.rake @@ -54,7 +54,7 @@ namespace :releases do file = URI.parse(uri).open raw_json = file.read json = JSON.parse(raw_json, symbolize_names: true).pluck(:tag_name) - json.first(9).sort.reverse + json end def self.get_channel From bc8b21fff4c0bd83e63f4b6aca80a188fa709546 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 4 Jul 2024 13:14:13 -0700 Subject: [PATCH 07/54] add version list to release task --- lib/tasks/releases.rake | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/lib/tasks/releases.rake b/lib/tasks/releases.rake index 074d6da8e4..da4399abcb 100644 --- a/lib/tasks/releases.rake +++ b/lib/tasks/releases.rake @@ -96,6 +96,20 @@ namespace :releases do puts "" end + def self.device_version_list + Device + .where("last_saw_api > ?", 24.hours.ago) + .pluck(:fbos_version) + .compact + .map{|x| x} + .tally + .sort_by{|(k, v)| v} + .reverse + .to_a + .map{|v, c| "#{v.ljust(17)} #{c.to_s.rjust(5)}"} + .join("\n") + end + def self.create_releases(metadata, channel) output = Releases::Parse.run!(metadata) .map { |params| Releases::Create.run!(params.merge(channel: channel)) } @@ -122,7 +136,7 @@ namespace :releases do def self.select_summary_type puts "\n=== SUMMARY OPTIONS ===" - choices = ["none", "message", "link", "body"] + choices = ["none", "message", "link", "body", "versions"] choices.each_with_index do |version, index| puts "#{index}) #{version}" end @@ -146,22 +160,29 @@ namespace :releases do puts "\n=== body ===" body = "\n#{metadata.fetch(:body)}" puts body - [notification_text, info, link, body] + puts "\n=== versions ===" + versions = "\n\nVersions of devices active in the last 24 hours:" + versions += "\n```#{self.device_version_list}```" + puts versions + [notification_text, info, link, body, versions] end def self.post_summary(metadata) webhook_url = ENV["RELEASE_WEBHOOK_URL"] if webhook_url server = Release.first.image_url.split("/")[3].split("-")[1] - notification_text, info, link, body = prepare_summary(server, metadata) + notification_text, info, link, body, versions = prepare_summary(server, metadata) summary_type = select_summary_type return if summary_type == "none" - if ["link", "body"].include?(summary_type) + if ["link", "body", "versions"].include?(summary_type) info += link end - if ["body"].include?(summary_type) + if ["body", "versions"].include?(summary_type) info += body end + if ["versions"].include?(summary_type) + info += versions + end payload = { "mrkdwn": true, "text": notification_text, From a61e4508c61d5ba8cec69859715a02a36cb59923 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 10 Jul 2024 10:17:56 -0700 Subject: [PATCH 08/54] add 3D garden config and bed --- .../__tests__/three_d_garden_map_test.tsx | 5 + frontend/farm_designer/index.tsx | 5 +- frontend/farm_designer/three_d_garden_map.tsx | 16 +- frontend/promo/__tests__/promo_test.tsx | 4 +- frontend/promo/promo.tsx | 16 +- .../three_d_garden/__tests__/bed_test.tsx | 27 ++ .../__tests__/components_test.tsx | 37 ++ .../three_d_garden/__tests__/config_test.ts | 76 ++++ .../three_d_garden/__tests__/index_test.tsx | 4 + frontend/three_d_garden/bed.tsx | 161 +++++++ frontend/three_d_garden/components.tsx | 4 + frontend/three_d_garden/config.ts | 410 ++++++++++++++++++ frontend/three_d_garden/index.tsx | 24 +- 13 files changed, 771 insertions(+), 18 deletions(-) create mode 100644 frontend/three_d_garden/__tests__/bed_test.tsx create mode 100644 frontend/three_d_garden/__tests__/components_test.tsx create mode 100644 frontend/three_d_garden/__tests__/config_test.ts create mode 100644 frontend/three_d_garden/bed.tsx create mode 100644 frontend/three_d_garden/config.ts diff --git a/frontend/farm_designer/__tests__/three_d_garden_map_test.tsx b/frontend/farm_designer/__tests__/three_d_garden_map_test.tsx index 5a5b0dc7f9..0e95cadd65 100644 --- a/frontend/farm_designer/__tests__/three_d_garden_map_test.tsx +++ b/frontend/farm_designer/__tests__/three_d_garden_map_test.tsx @@ -1,9 +1,14 @@ import React from "react"; import { mount } from "enzyme"; import { ThreeDGardenMapProps, ThreeDGardenMap } from "../three_d_garden_map"; +import { fakeMapTransformProps } from "../../__test_support__/map_transform_props"; +import { fakeBotSize } from "../../__test_support__/fake_bot_data"; describe("", () => { const fakeProps = (): ThreeDGardenMapProps => ({ + mapTransformProps: fakeMapTransformProps(), + botSize: fakeBotSize(), + gridOffset: { x: 10, y: 10 }, }); it("renders", () => { diff --git a/frontend/farm_designer/index.tsx b/frontend/farm_designer/index.tsx index d43c375747..1fa5ae2069 100755 --- a/frontend/farm_designer/index.tsx +++ b/frontend/farm_designer/index.tsx @@ -194,7 +194,10 @@ export class RawFarmDesigner
{this.props.getConfigValue(BooleanSetting.three_d_garden) - ? + ? :
{ - props; - return ; + const config = clone(INITIAL); + const { gridSize } = props.mapTransformProps; + config.botSizeX = gridSize.x; + config.botSizeY = gridSize.y; + config.bedWidthOuter = gridSize.y + 160; + config.bedLengthOuter = gridSize.x + 160; + + return ; }; diff --git a/frontend/promo/__tests__/promo_test.tsx b/frontend/promo/__tests__/promo_test.tsx index 39728c29b2..8b1bdd3f8f 100644 --- a/frontend/promo/__tests__/promo_test.tsx +++ b/frontend/promo/__tests__/promo_test.tsx @@ -1,11 +1,11 @@ import React from "react"; -import { shallow } from "enzyme"; +import { mount } from "enzyme"; import { Promo } from "../promo"; describe("", () => { it("renders", () => { console.error = jest.fn(); - const wrapper = shallow(); + const wrapper = mount(); expect(wrapper.html()).toContain("three-d-garden"); }); }); diff --git a/frontend/promo/promo.tsx b/frontend/promo/promo.tsx index 71c89815d1..70c179f57e 100644 --- a/frontend/promo/promo.tsx +++ b/frontend/promo/promo.tsx @@ -1,5 +1,17 @@ import React from "react"; import { ThreeDGarden } from "../three_d_garden"; +import { + Config, INITIAL, modifyConfigsFromUrlParams, -export const Promo = () => - ; +} from "../three_d_garden/config"; + +export const Promo = () => { + const [config, setConfig] = React.useState(INITIAL); + + React.useEffect(() => { + setConfig(modifyConfigsFromUrlParams(config)); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); // intentionally empty dependency array + + return ; +}; diff --git a/frontend/three_d_garden/__tests__/bed_test.tsx b/frontend/three_d_garden/__tests__/bed_test.tsx new file mode 100644 index 0000000000..24a178696c --- /dev/null +++ b/frontend/three_d_garden/__tests__/bed_test.tsx @@ -0,0 +1,27 @@ +import React from "react"; +import { mount } from "enzyme"; +import { INITIAL } from "../config"; +import { Bed, BedProps } from "../bed"; +import { clone } from "lodash"; + +describe("", () => { + const fakeProps = (): BedProps => ({ + config: clone(INITIAL), + }); + + it("renders bed", () => { + const p = fakeProps(); + p.config.extraLegsX = 0; + const wrapper = mount(); + expect(wrapper.html()).toContain("args=\"1500,50,50\""); + }); + + it("renders bed with extra legs", () => { + const p = fakeProps(); + p.config.extraLegsX = 2; + p.config.extraLegsY = 2; + p.config.legsFlush = false; + const wrapper = mount(); + expect(wrapper.html()).toContain("args=\"1500,50,50\""); + }); +}); diff --git a/frontend/three_d_garden/__tests__/components_test.tsx b/frontend/three_d_garden/__tests__/components_test.tsx new file mode 100644 index 0000000000..8aba8c89d4 --- /dev/null +++ b/frontend/three_d_garden/__tests__/components_test.tsx @@ -0,0 +1,37 @@ +import React from "react"; +import { mount } from "enzyme"; +import { AmbientLight, Mesh, PointLight } from "../components"; +import { AmbientLightProps, MeshProps, PointLightProps } from "@react-three/fiber"; + +describe("", () => { + const fakeProps = (): AmbientLightProps => ({ + intensity: 0.5, + }); + + it("adds props", () => { + const wrapper = mount(); + expect(wrapper.props().intensity).toEqual(0.5); + }); +}); + +describe("", () => { + const fakeProps = (): PointLightProps => ({ + intensity: 0.5, + }); + + it("adds props", () => { + const wrapper = mount(); + expect(wrapper.props().intensity).toEqual(0.5); + }); +}); + +describe("", () => { + const fakeProps = (): MeshProps => ({ + name: "mesh", + }); + + it("adds props", () => { + const wrapper = mount(); + expect(wrapper.props().name).toEqual("mesh"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/config_test.ts b/frontend/three_d_garden/__tests__/config_test.ts new file mode 100644 index 0000000000..3ec339aaf2 --- /dev/null +++ b/frontend/three_d_garden/__tests__/config_test.ts @@ -0,0 +1,76 @@ +import { clone } from "lodash"; +import { INITIAL, modifyConfig, modifyConfigsFromUrlParams } from "../config"; + +describe("modifyConfig()", () => { + it("modifies config: lab", () => { + const initial = clone(INITIAL); + const result = modifyConfig(initial, { scene: "Lab" }); + expect(initial.lab).toEqual(false); + expect(result.lab).toEqual(true); + expect(initial.clouds).toEqual(true); + expect(result.clouds).toEqual(false); + expect(initial.bedType).toEqual("Standard"); + expect(result.bedType).toEqual("Mobile"); + }); + + it("modifies config: lab XL", () => { + const initial = clone(INITIAL); + const result = modifyConfig(initial, { + scene: "Lab", + sizePreset: "Genesis XL", + }); + expect(initial.bedType).toEqual("Standard"); + expect(result.bedType).toEqual("Standard"); + }); + + it("modifies config: Jr", () => { + const initial = clone(INITIAL); + const result = modifyConfig(initial, { sizePreset: "Jr" }); + expect(initial.x).toEqual(300); + expect(result.x).toEqual(100); + }); + + it("modifies config: bedType", () => { + const initial = clone(INITIAL); + initial.bedZOffset = 100; + initial.bedType = "Mobile"; + const result = modifyConfig(initial, { bedType: "Standard" }); + expect(result.bedZOffset).toEqual(0); + }); + + it("resets config", () => { + const initial = clone(INITIAL); + initial.bedLengthOuter = 1; + const result = modifyConfig(initial, { otherPreset: "Reset all" }); + expect(result.bedLengthOuter).toEqual(3000); + }); + + it("modifies config: preset", () => { + const initial = clone(INITIAL); + initial.bedHeight = 1; + const result = modifyConfig(initial, { otherPreset: "Initial" }); + expect(result.bedHeight).toEqual(300); + }); +}); + +describe("modifyConfigsFromUrlParams()", () => { + it("sets config scene", () => { + window.location.search = "?scene=Lab"; + const initial = clone(INITIAL); + initial.lab = false; + const result = modifyConfigsFromUrlParams(initial); + expect(result.lab).toEqual(true); + }); + + it("sets other config", () => { + window.location.search = "?kit=JR&x=1&ground=true"; + const initial = clone(INITIAL); + initial.sizePreset = "Genesis XL"; + initial.x = 100; + initial.ground = false; + const result = modifyConfigsFromUrlParams(initial); + expect(result.sizePreset).toEqual("Jr"); + expect(result.x).toEqual(1); + expect(result.ground).toEqual(true); + }); +}); diff --git a/frontend/three_d_garden/__tests__/index_test.tsx b/frontend/three_d_garden/__tests__/index_test.tsx index 5304f2c663..7e65291e15 100644 --- a/frontend/three_d_garden/__tests__/index_test.tsx +++ b/frontend/three_d_garden/__tests__/index_test.tsx @@ -19,9 +19,12 @@ import { } from ".."; import React from "react"; +import { INITIAL } from "../config"; +import { clone } from "lodash"; describe("", () => { const fakeProps = (): ThreeDGardenProps => ({ + config: clone(INITIAL), }); it("renders", () => { @@ -32,6 +35,7 @@ describe("", () => { describe("", () => { const fakeProps = (): ThreeDGardenModelProps => ({ + config: clone(INITIAL), }); it("renders model", () => { diff --git a/frontend/three_d_garden/bed.tsx b/frontend/three_d_garden/bed.tsx new file mode 100644 index 0000000000..d9448783ce --- /dev/null +++ b/frontend/three_d_garden/bed.tsx @@ -0,0 +1,161 @@ +import React from "react"; +import { Box, Extrude } from "@react-three/drei"; +import { DoubleSide, Path, Shape } from "three"; +import { range } from "lodash"; +import { Config } from "./config"; +import { Group, MeshPhongMaterial } from "./components"; + +const soil = ( + Type: typeof Path | typeof Shape, + botSize: Record<"x" | "y" | "z" | "thickness", number>, +): Path | Shape => { + const { x, y, thickness } = botSize; + + const hole = new Type(); + hole.moveTo(thickness, thickness); + hole.lineTo(thickness, y - thickness); + hole.lineTo(x - thickness, y - thickness); + hole.lineTo(x - thickness, thickness); + hole.lineTo(thickness, thickness); + return hole; +}; + +const bedStructure2D = ( + botSize: Record<"x" | "y" | "z" | "thickness", number>, +) => { + const { x, y } = botSize; + const shape = new Shape(); + + // outer edge + shape.moveTo(0, 0); + shape.lineTo(0, y); + shape.lineTo(x, y); + shape.lineTo(x, 0); + shape.lineTo(0, 0); + + // inner edge + shape.holes.push(soil(Path, botSize)); + + return shape; +}; + +export interface BedProps { + config: Config; +} + +export const Bed = (props: BedProps) => { + const { + bedWidthOuter, bedLengthOuter, botSizeZ, bedHeight, bedZOffset, + legSize, legsFlush, extraLegsX, extraLegsY, + soilHeight, ccSupportSize, + } = props.config; + const thickness = props.config.bedWallThickness; + const botSize = { x: bedLengthOuter, y: bedWidthOuter, z: botSizeZ, thickness }; + const bedStartZ = 0; + const legXPositions = [ + 0 + legSize / 2 + thickness, + ...(extraLegsX + ? range(0, bedLengthOuter, bedLengthOuter / (extraLegsX + 1)).slice(1) + : []), + bedLengthOuter - legSize / 2 - thickness, + ]; + const legYPositions = (index: number) => + [ + 0 + legSize / 2 + thickness, + ...(extraLegsY && (index == 0 || index == (legXPositions.length - 1)) + ? range(0, bedWidthOuter, bedWidthOuter / (extraLegsY + 1)).slice(1) + : []), + bedWidthOuter - legSize / 2 - thickness, + ]; + const casterHeight = legSize * 1.375; + + const Bed = ({ children }: { children: React.ReactElement }) => + + {children} + ; + + const Soil = ({ children }: { children: React.ReactElement }) => { + const soilDepth = bedHeight + (soilHeight - 50) - soilHeight; + return + {children} + ; + }; + + const bedColor = "#ad7039"; + return + + + + + + + + + + + + + {legXPositions.map((x, index) => + + {legYPositions(index).map(y => { + const legTopOffset = legsFlush ? bedHeight / 2 : bedHeight; + return + + + + ; + })} + )} + ; +}; diff --git a/frontend/three_d_garden/components.tsx b/frontend/three_d_garden/components.tsx index 18cc9e443e..954c54e5ab 100644 --- a/frontend/three_d_garden/components.tsx +++ b/frontend/three_d_garden/components.tsx @@ -3,6 +3,7 @@ import { AmbientLightProps, DirectionalLightProps, GroupProps, + MeshPhongMaterialProps, MeshProps, PointLightProps, } from "@react-three/fiber"; @@ -24,3 +25,6 @@ export const Mesh = (props: MeshProps) => export const PointLight = (props: PointLightProps) => ; + +export const MeshPhongMaterial = (props: MeshPhongMaterialProps) => + ; diff --git a/frontend/three_d_garden/config.ts b/frontend/three_d_garden/config.ts new file mode 100644 index 0000000000..e809ad295c --- /dev/null +++ b/frontend/three_d_garden/config.ts @@ -0,0 +1,410 @@ +export interface Config { + sizePreset: string; + bedType: string; + otherPreset: string; + label: string; + botSizeX: number; + botSizeY: number; + botSizeZ: number; + bedWallThickness: number; + bedHeight: number; + ccSupportSize: number; + x: number; + y: number; + z: number; + beamLength: number; + columnLength: number; + zAxisLength: number; + bedXOffset: number; + bedYOffset: number; + bedZOffset: number; + zGantryOffset: number; + bedWidthOuter: number; + bedLengthOuter: number; + legSize: number; + legsFlush: boolean; + extraLegsX: number; + extraLegsY: number; + bedBrightness: number; + soilBrightness: number; + soilHeight: number; + plants: string; + labels: boolean; + labelsOnHover: boolean; + ground: boolean; + grid: boolean; + axes: boolean; + trail: boolean; + tracks: boolean; + clouds: boolean; + sunInclination: number; + sunAzimuth: number; + perspective: boolean; + bot: boolean; + laser: boolean; + tool: string; + cableCarriers: boolean; + viewCube: boolean; + stats: boolean; + config: boolean; + zoom: boolean; + pan: boolean; + bounds: boolean; + threeAxes: boolean; + xyDimensions: boolean; + zDimension: boolean; + promoInfo: boolean; + solar: boolean; + utilitiesPost: boolean; + packaging: boolean; + lab: boolean; + people: boolean; + scene: string; + lowDetail: boolean; +} + +export const INITIAL: Config = { + sizePreset: "Genesis", + bedType: "Standard", + otherPreset: "Initial", + label: "FarmBot Genesis v1.7", + botSizeX: 2720, + botSizeY: 1230, + botSizeZ: 500, + bedWallThickness: 40, + bedHeight: 300, + ccSupportSize: 50, + x: 300, + y: 700, + z: 200, + beamLength: 1500, + columnLength: 500, + zAxisLength: 1000, + bedXOffset: 140, + bedYOffset: 60, + bedZOffset: 0, + zGantryOffset: 140, + bedWidthOuter: 1360, + bedLengthOuter: 3000, + legSize: 100, + legsFlush: true, + extraLegsX: 1, + extraLegsY: 0, + bedBrightness: 8, + soilBrightness: 6, + soilHeight: 500, + plants: "Spring", + labels: false, + labelsOnHover: true, + ground: true, + grid: false, + axes: false, + trail: false, + tracks: true, + clouds: true, + sunInclination: 140, + sunAzimuth: 230, + perspective: true, + bot: true, + laser: false, + tool: "rotaryTool", + cableCarriers: true, + viewCube: false, + stats: false, + config: false, + zoom: false, + pan: false, + bounds: false, + threeAxes: false, + xyDimensions: false, + zDimension: false, + promoInfo: true, + solar: false, + utilitiesPost: true, + packaging: false, + lab: false, + people: false, + scene: "Outdoor", + lowDetail: false, +}; + +export const STRING_KEYS = [ + "sizePreset", "bedType", "otherPreset", "label", "plants", "tool", "scene", +]; + +export const NUMBER_KEYS = [ + "botSizeX", "botSizeY", "botSizeZ", "bedWallThickness", "bedHeight", + "ccSupportSize", "x", "y", "z", "beamLength", "columnLength", "zAxisLength", + "bedXOffset", "bedYOffset", "bedZOffset", "zGantryOffset", "bedWidthOuter", + "bedLengthOuter", "legSize", "extraLegsX", "extraLegsY", "bedBrightness", + "soilBrightness", "soilHeight", "sunInclination", "sunAzimuth", +]; + +export const BOOLEAN_KEYS = [ + "legsFlush", "labels", "labelsOnHover", "ground", "grid", "axes", "trail", + "tracks", "clouds", "perspective", "bot", "laser", "cableCarriers", + "viewCube", "stats", "config", "zoom", "pan", "bounds", "threeAxes", + "xyDimensions", "zDimension", "promoInfo", "solar", "utilitiesPost", + "packaging", "lab", "people", "lowDetail", +]; + +export const PRESETS: Record = { + "Jr": { + ...INITIAL, + sizePreset: "Jr", + bedType: "Standard", + label: "FarmBot Jr", + botSizeX: 620, + botSizeY: 220, + botSizeZ: 250, + beamLength: 550, + columnLength: 300, + zAxisLength: 750, + bedXOffset: 140, + bedYOffset: 80, + zGantryOffset: 140, + bedWidthOuter: 400, + bedLengthOuter: 900, + extraLegsX: 0, + extraLegsY: 0, + soilHeight: 280, + tracks: true, + }, + "Genesis": { + ...INITIAL, + sizePreset: "Genesis", + bedType: "Standard", + label: "FarmBot Genesis v1.7", + botSizeX: 2720, + botSizeY: 1230, + botSizeZ: 500, + beamLength: 1500, + columnLength: 500, + zAxisLength: 1000, + bedXOffset: 140, + bedYOffset: 60, + zGantryOffset: 140, + bedWidthOuter: 1360, + bedLengthOuter: 3000, + extraLegsX: 1, + extraLegsY: 0, + soilHeight: 500, + tracks: true, + }, + "Genesis XL": { + ...INITIAL, + sizePreset: "Genesis XL", + bedType: "Standard", + label: "FarmBot Genesis XL v1.7", + botSizeX: 5720, + botSizeY: 2730, + botSizeZ: 500, + beamLength: 3000, + columnLength: 500, + zAxisLength: 1000, + bedXOffset: 140, + bedYOffset: 60, + zGantryOffset: 140, + bedWidthOuter: 2860, + bedLengthOuter: 6000, + extraLegsX: 3, + extraLegsY: 1, + soilHeight: 500, + tracks: true, + }, + "Initial": INITIAL, + "Minimal": { + ...INITIAL, + bedWallThickness: 40, + bedHeight: 300, + x: 300, + y: 200, + z: 200, + ccSupportSize: 50, + legSize: 100, + legsFlush: false, + bedBrightness: 8, + soilBrightness: 6, + plants: "", + labels: false, + labelsOnHover: false, + ground: true, + grid: false, + axes: false, + trail: false, + clouds: false, + sunInclination: 90, + sunAzimuth: 0, + perspective: true, + bot: true, + laser: false, + tool: "", + cableCarriers: true, + viewCube: false, + stats: false, + config: false, + zoom: true, + pan: true, + bounds: false, + threeAxes: false, + xyDimensions: false, + zDimension: false, + promoInfo: false, + solar: false, + utilitiesPost: false, + packaging: false, + lab: false, + people: false, + scene: "Outdoor", + lowDetail: false, + }, + "Maximal": { + ...INITIAL, + bedWallThickness: 40, + bedHeight: 300, + x: 300, + y: 200, + z: 200, + ccSupportSize: 50, + legSize: 100, + legsFlush: true, + bedBrightness: 8, + soilBrightness: 6, + plants: "Spring", + labels: true, + labelsOnHover: false, + ground: true, + grid: true, + axes: true, + trail: true, + clouds: true, + sunInclination: 30, + sunAzimuth: 45, + perspective: true, + bot: true, + laser: true, + tool: "", + cableCarriers: true, + viewCube: true, + stats: true, + config: true, + zoom: true, + pan: true, + bounds: true, + threeAxes: true, + xyDimensions: true, + zDimension: true, + promoInfo: true, + solar: true, + utilitiesPost: true, + packaging: true, + lab: true, + people: true, + scene: "outdoor", + lowDetail: false, + }, +}; + +const SIZE_CONFIG_KEYS: (keyof Config)[] = [ + "sizePreset", "label", "bedType", + "botSizeX", "botSizeY", "botSizeZ", "beamLength", "columnLength", "zAxisLength", + "bedXOffset", "bedYOffset", "zGantryOffset", "bedWidthOuter", "bedLengthOuter", + "extraLegsX", "extraLegsY", "soilHeight", "tracks", +]; + +const OTHER_CONFIG_KEYS: (keyof Config)[] = [ + "bedWallThickness", "bedHeight", "x", "y", "z", + "ccSupportSize", "legSize", "legsFlush", + "bedBrightness", "soilBrightness", "plants", "labels", "ground", "grid", "axes", + "trail", "clouds", "sunInclination", "sunAzimuth", "perspective", "bot", "laser", + "tool", "cableCarriers", "viewCube", "stats", "config", "zoom", "bounds", + "threeAxes", "xyDimensions", "zDimension", "labelsOnHover", "promoInfo", "pan", + "solar", "utilitiesPost", "packaging", "lab", "people", "scene", "lowDetail", +]; + +export const modifyConfig = (config: Config, update: Partial) => { + const newConfig: Config = { ...config, ...update }; + if (update.sizePreset) { + const presetConfig = PRESETS[update.sizePreset]; + SIZE_CONFIG_KEYS.map(key => newConfig[key] = presetConfig[key] as never); + if (update.sizePreset == "Jr") { + newConfig.x = 100; + newConfig.y = 100; + newConfig.z = 50; + } + } + if (update.scene) { + newConfig.lab = update.scene == "Lab"; + newConfig.clouds = update.scene != "Lab"; + newConfig.people = update.scene == "Lab"; + newConfig.bedType = + (update.scene == "Lab" && newConfig.sizePreset != "Genesis XL") + ? "Mobile" + : "Standard"; + } + if (update.bedType || (newConfig.bedType != config.bedType)) { + newConfig.bedZOffset = newConfig.bedType == "Mobile" ? 500 : 0; + newConfig.legsFlush = newConfig.bedType != "Mobile"; + } + if (update.otherPreset) { + if (update.otherPreset == "Reset all") { + Object.keys(config).map(key => { + const configKey = key as keyof Config; + newConfig[configKey] = INITIAL[configKey] as never; + }); + } else { + const presetConfig = PRESETS[update.otherPreset]; + OTHER_CONFIG_KEYS.map(key => newConfig[key] = presetConfig[key] as never); + } + } + return newConfig; +}; + +export const KIT_LOOKUP: { [x: string]: string } = { + "genesis": "Genesis", + "genesis_xl": "Genesis XL", + "jr": "Jr", +}; + +export const modifyConfigsFromUrlParams = (config: Config) => { + let newConfig: Config = { ...config }; + const urlParams = new URLSearchParams(window.location.search); + const kit = urlParams.get("kit")?.toLowerCase(); + if (kit) { + const sizePreset = KIT_LOOKUP[kit]; + if (sizePreset && sizePreset != config.sizePreset) { + newConfig = modifyConfig(newConfig, { sizePreset }); + } + } + STRING_KEYS.map(key => { + const value = urlParams.get(key); + if (value) { + newConfig = modifyConfig(newConfig, { [key]: value }); + } + }); + NUMBER_KEYS.map(key => { + const value = urlParams.get(key); + if (value) { + newConfig = modifyConfig(newConfig, { [key]: parseInt(value) }); + } + }); + BOOLEAN_KEYS.map(key => { + const value = urlParams.get(key); + if (value) { + newConfig = modifyConfig(newConfig, { [key]: value == "true" }); + } + }); + return newConfig; +}; + +type SeasonProperties = { + sunIntensity: number; + sunColor: string; + cloudOpacity: number; +}; +export const seasonProperties: Record = { + Winter: { sunIntensity: 4 / 4, sunColor: "#A0C4FF", cloudOpacity: 0.85 }, + Spring: { sunIntensity: 7 / 4, sunColor: "#BDE0FE", cloudOpacity: 0.2 }, + Summer: { sunIntensity: 9 / 4, sunColor: "#FFFFFF", cloudOpacity: 0 }, + Fall: { sunIntensity: 5.5 / 4, sunColor: "#FFD6BC", cloudOpacity: 0.3 }, +}; diff --git a/frontend/three_d_garden/index.tsx b/frontend/three_d_garden/index.tsx index c051449434..9421354f58 100644 --- a/frontend/three_d_garden/index.tsx +++ b/frontend/three_d_garden/index.tsx @@ -1,25 +1,32 @@ -import { Circle, PerspectiveCamera, OrbitControls, Box } from "@react-three/drei"; +import { Circle, PerspectiveCamera, OrbitControls } from "@react-three/drei"; import { Canvas } from "@react-three/fiber"; import React from "react"; import { AmbientLight, DirectionalLight } from "./components"; +import { Config } from "./config"; +import { Bed } from "./bed"; export interface ThreeDGardenProps { + config: Config; } export const ThreeDGarden = (props: ThreeDGardenProps) => { - props; return
- +
; }; export interface ThreeDGardenModelProps { + config: Config; } export const ThreeDGardenModel = (props: ThreeDGardenModelProps) => { - props; + const mid = { + x: props.config.bedLengthOuter / 2, + y: props.config.bedWidthOuter / 2, + z: props.config.bedHeight, + }; return { rotation={[0, 0, 0]} up={[0, 0, 1]} /> @@ -36,12 +43,7 @@ export const ThreeDGardenModel = (props: ThreeDGardenModelProps) => { args={[30000, 16]} position={[0, 0, -10]}> - - - + ; }; From 58bee2bcadcf7ab7e47048ab610700126e0cb42d Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 12 Jul 2024 09:54:29 -0700 Subject: [PATCH 09/54] add 3D textures --- frontend/three_d_garden/bed.tsx | 43 +++++++++++++++++++++++------- frontend/three_d_garden/index.tsx | 13 +++++++-- public/3D/textures/grass.avif | Bin 0 -> 119858 bytes public/3D/textures/soil.avif | Bin 0 -> 56364 bytes public/3D/textures/wood.avif | Bin 0 -> 58222 bytes 5 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 public/3D/textures/grass.avif create mode 100644 public/3D/textures/soil.avif create mode 100644 public/3D/textures/wood.avif diff --git a/frontend/three_d_garden/bed.tsx b/frontend/three_d_garden/bed.tsx index d9448783ce..a89c73be35 100644 --- a/frontend/three_d_garden/bed.tsx +++ b/frontend/three_d_garden/bed.tsx @@ -1,6 +1,6 @@ import React from "react"; import { Box, Extrude } from "@react-three/drei"; -import { DoubleSide, Path, Shape } from "three"; +import { DoubleSide, Path, RepeatWrapping, Shape, TextureLoader } from "three"; import { range } from "lodash"; import { Config } from "./config"; import { Group, MeshPhongMaterial } from "./components"; @@ -39,6 +39,30 @@ const bedStructure2D = ( return shape; }; +const woodTexture = new TextureLoader() + .load("/3D/textures/wood.avif", + texture => { + texture.wrapS = RepeatWrapping; + texture.wrapT = RepeatWrapping; + texture.repeat.set(.0003, .003); + }); + +const legWoodTexture = new TextureLoader() + .load("/3D/textures/wood.avif", + texture => { + texture.wrapS = RepeatWrapping; + texture.wrapT = RepeatWrapping; + texture.repeat.set(.02, .05); + }); + +const soilTexture = new TextureLoader() + .load("/3D/textures/soil.avif", + texture => { + texture.wrapS = RepeatWrapping; + texture.wrapT = RepeatWrapping; + texture.repeat.set(.00034, .00068); + }); + export interface BedProps { config: Config; } @@ -103,10 +127,9 @@ export const Bed = (props: BedProps) => { ; }; - const bedColor = "#ad7039"; return - + { position={[ bedLengthOuter / 4, -ccSupportSize / 2, - -Math.min(150, bedHeight / 2) - ccSupportSize / 2, + Math.min(150, bedHeight / 2) - ccSupportSize / 2, ]}> - + { position={[ bedLengthOuter * 3 / 4, -ccSupportSize / 2, - -50 - ccSupportSize / 2, + 50 - ccSupportSize / 2, ]}> - + - {legXPositions.map((x, index) => @@ -142,7 +165,7 @@ export const Bed = (props: BedProps) => { position={[ x, y, - -bedZOffset / 2 - legTopOffset + (casterHeight / 2), + bedZOffset / 2 + legTopOffset + (casterHeight / 2), ]}> { legSize, bedZOffset + (legsFlush ? bedHeight : 0) - casterHeight, ]}> - + ; })} diff --git a/frontend/three_d_garden/index.tsx b/frontend/three_d_garden/index.tsx index 9421354f58..9b5d6d29b0 100644 --- a/frontend/three_d_garden/index.tsx +++ b/frontend/three_d_garden/index.tsx @@ -1,9 +1,10 @@ import { Circle, PerspectiveCamera, OrbitControls } from "@react-three/drei"; import { Canvas } from "@react-three/fiber"; import React from "react"; -import { AmbientLight, DirectionalLight } from "./components"; +import { AmbientLight, DirectionalLight, MeshPhongMaterial } from "./components"; import { Config } from "./config"; import { Bed } from "./bed"; +import { RepeatWrapping, TextureLoader } from "three"; export interface ThreeDGardenProps { config: Config; @@ -17,6 +18,14 @@ export const ThreeDGarden = (props: ThreeDGardenProps) => {
; }; +const grassTexture = new TextureLoader() + .load("/3D/textures/grass.avif", + texture => { + texture.wrapS = RepeatWrapping; + texture.wrapT = RepeatWrapping; + texture.repeat.set(24, 24); + }); + export interface ThreeDGardenModelProps { config: Config; } @@ -42,7 +51,7 @@ export const ThreeDGardenModel = (props: ThreeDGardenModelProps) => { receiveShadow={true} args={[30000, 16]} position={[0, 0, -10]}> - + ; diff --git a/public/3D/textures/grass.avif b/public/3D/textures/grass.avif new file mode 100644 index 0000000000000000000000000000000000000000..df6bd5fcf1e479e73e15405a1c04622702807abd GIT binary patch literal 119858 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 m0Qjh60#8&4G|I+E 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 literal 0 HcmV?d00001 diff --git a/public/3D/textures/soil.avif b/public/3D/textures/soil.avif new file mode 100644 index 0000000000000000000000000000000000000000..d2e123babee875cebaf8fae81bd4e7eec178e8a7 GIT binary patch literal 56364 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

|}0$uu%%f(%! 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 literal 0 HcmV?d00001 From 283aac554c67abb817f6bc5cac9a227522422a1d Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 8 Aug 2024 15:25:59 -0700 Subject: [PATCH 10/54] add all code from 3D repo --- frontend/__test_support__/three_d_mocks.tsx | 594 +++++++++++ frontend/css/colors.scss | 1 + frontend/css/farm_designer/farm_designer.scss | 454 +++++++++ frontend/external_urls.ts | 9 + frontend/promo/__tests__/promo_test.tsx | 7 + frontend/promo/promo.tsx | 32 +- .../pin_bindings/__tests__/model_test.tsx | 64 +- frontend/settings/pin_bindings/model.tsx | 52 +- .../three_d_garden/__tests__/arrow_test.tsx | 15 + .../three_d_garden/__tests__/bed_test.tsx | 5 +- .../three_d_garden/__tests__/bot_test.tsx | 42 + .../three_d_garden/__tests__/button_test.tsx | 81 ++ .../three_d_garden/__tests__/caster_test.tsx | 17 + .../__tests__/components_test.tsx | 38 +- .../__tests__/config_overlays_test.tsx | 154 +++ .../three_d_garden/__tests__/config_test.ts | 12 +- .../__tests__/constant_tests.ts | 7 + .../three_d_garden/__tests__/desk_test.tsx | 17 + .../__tests__/distance_indicator_test.tsx | 19 + .../__tests__/farmbot_axes_test.tsx | 16 + .../three_d_garden/__tests__/garden_test.tsx | 101 ++ .../three_d_garden/__tests__/helper_tests.ts | 46 + .../three_d_garden/__tests__/index_test.tsx | 29 +- .../three_d_garden/__tests__/lab_test.tsx | 29 + .../__tests__/packaging_test.tsx | 26 + .../__tests__/power_supply_test.tsx | 26 + .../three_d_garden/__tests__/sky_test.tsx | 13 + .../three_d_garden/__tests__/solar_test.tsx | 17 + .../three_d_garden/__tests__/sun_test.tsx | 16 + .../__tests__/utilities_post_test.tsx | 17 + .../__tests__/x_axis_water_tube_test.tsx | 16 + .../__tests__/zoom_beacons_constants_test.tsx | 98 ++ .../__tests__/zoom_beacons_test.tsx | 103 ++ frontend/three_d_garden/arrow.tsx | 36 + frontend/three_d_garden/bed.tsx | 160 +-- frontend/three_d_garden/bot.tsx | 921 ++++++++++++++++++ frontend/three_d_garden/button.tsx | 86 ++ frontend/three_d_garden/caster.tsx | 58 ++ frontend/three_d_garden/components.tsx | 20 + frontend/three_d_garden/config.ts | 23 +- frontend/three_d_garden/config_overlays.tsx | 352 +++++++ frontend/three_d_garden/constants.ts | 447 +++++++++ frontend/three_d_garden/desk.tsx | 109 +++ .../three_d_garden/distance_indicator.tsx | 47 + frontend/three_d_garden/farmbot_axes.tsx | 25 + frontend/three_d_garden/garden.tsx | 259 +++++ frontend/three_d_garden/helpers.ts | 48 + frontend/three_d_garden/index.tsx | 54 +- frontend/three_d_garden/lab.tsx | 115 +++ frontend/three_d_garden/packaging.tsx | 99 ++ .../parts/__tests__/cross_slide_test.tsx | 15 + .../__tests__/gantry_wheel_plate_test.tsx | 15 + .../parts/__tests__/rotary_tool_test.tsx | 15 + .../__tests__/seed_trough_assembly_test.tsx | 18 + .../__tests__/seed_trough_holder_test.tsx | 15 + .../parts/__tests__/soil_sensor_test.tsx | 15 + .../__tests__/vacuum_pump_cover_test.tsx | 15 + frontend/three_d_garden/parts/cross_slide.tsx | 545 +++++++++++ .../parts/gantry_wheel_plate.tsx | 361 +++++++ frontend/three_d_garden/parts/rotary_tool.tsx | 205 ++++ .../parts/seed_trough_assembly.tsx | 39 + .../parts/seed_trough_holder.tsx | 34 + frontend/three_d_garden/parts/soil_sensor.tsx | 205 ++++ .../parts/vacuum_pump_cover.tsx | 32 + frontend/three_d_garden/power_supply.tsx | 167 ++++ frontend/three_d_garden/sky.tsx | 51 + frontend/three_d_garden/solar.tsx | 102 ++ frontend/three_d_garden/sun.tsx | 57 ++ frontend/three_d_garden/utilities_post.tsx | 170 ++++ frontend/three_d_garden/x_axis_water_tube.tsx | 50 + frontend/three_d_garden/zoom_beacons.tsx | 128 +++ .../three_d_garden/zoom_beacons_constants.tsx | 429 ++++++++ jest.config.js | 1 + package.json | 1 + public/3D/fonts/Cabin.ttf | Bin 0 -> 153656 bytes public/3D/fonts/Cabin_Bold.ttf | Bin 0 -> 76300 bytes public/3D/fonts/InknutAntiqua-Bold.ttf | Bin 0 -> 347140 bytes public/3D/icons/anaheim_pepper.avif | Bin 0 -> 5414 bytes public/3D/icons/arugula.avif | Bin 0 -> 7076 bytes public/3D/icons/basil.avif | Bin 0 -> 8750 bytes public/3D/icons/beet.avif | Bin 0 -> 4780 bytes public/3D/icons/bibb_lettuce.avif | Bin 0 -> 8340 bytes public/3D/icons/bok_choy.avif | Bin 0 -> 5770 bytes public/3D/icons/broccoli.avif | Bin 0 -> 5837 bytes public/3D/icons/brussels_sprout.avif | Bin 0 -> 7706 bytes public/3D/icons/carrot.avif | Bin 0 -> 5841 bytes public/3D/icons/cauliflower.avif | Bin 0 -> 7719 bytes public/3D/icons/celery.avif | Bin 0 -> 7702 bytes public/3D/icons/cherry_belle_radish.avif | Bin 0 -> 3838 bytes public/3D/icons/cilantro.avif | Bin 0 -> 4882 bytes public/3D/icons/collard_greens.avif | Bin 0 -> 8282 bytes public/3D/icons/cucumber.avif | Bin 0 -> 5393 bytes public/3D/icons/eggplant.avif | Bin 0 -> 4868 bytes public/3D/icons/french_breakfast_radish.avif | Bin 0 -> 3559 bytes public/3D/icons/garlic.avif | Bin 0 -> 6725 bytes public/3D/icons/golden_beet.avif | Bin 0 -> 5191 bytes public/3D/icons/hillbilly_tomato.avif | Bin 0 -> 7599 bytes public/3D/icons/icicle_radish.avif | Bin 0 -> 3411 bytes public/3D/icons/lacinato_kale.avif | Bin 0 -> 5814 bytes public/3D/icons/leek.avif | Bin 0 -> 3625 bytes public/3D/icons/napa_cabbage.avif | Bin 0 -> 5056 bytes public/3D/icons/okra.avif | Bin 0 -> 5570 bytes public/3D/icons/parsnip.avif | Bin 0 -> 5167 bytes public/3D/icons/rainbow_chard.avif | Bin 0 -> 7468 bytes public/3D/icons/red_bell_pepper.avif | Bin 0 -> 5316 bytes public/3D/icons/red_curly_kale.avif | Bin 0 -> 6200 bytes public/3D/icons/red_russian_kale.avif | Bin 0 -> 9264 bytes public/3D/icons/runner_bean.avif | Bin 0 -> 7366 bytes public/3D/icons/rutabaga.avif | Bin 0 -> 4483 bytes public/3D/icons/savoy_cabbage.avif | Bin 0 -> 8482 bytes public/3D/icons/shallot.avif | Bin 0 -> 5235 bytes public/3D/icons/snap_pea.avif | Bin 0 -> 6119 bytes public/3D/icons/spinach.avif | Bin 0 -> 7559 bytes public/3D/icons/sweet_potato.avif | Bin 0 -> 5215 bytes public/3D/icons/swiss_chard.avif | Bin 0 -> 8678 bytes public/3D/icons/turmeric.avif | Bin 0 -> 5739 bytes public/3D/icons/turnip.avif | Bin 0 -> 4610 bytes public/3D/icons/yellow_onion.avif | Bin 0 -> 6746 bytes public/3D/icons/zucchini.avif | Bin 0 -> 5437 bytes public/3D/models/belt_clip.glb | Bin 0 -> 2224 bytes public/3D/models/camera_mount_half.glb | Bin 0 -> 1800 bytes public/3D/models/cc_horizontal.glb | Bin 0 -> 5340 bytes public/3D/models/cc_vertical.glb | Bin 0 -> 4844 bytes public/3D/models/cross_slide.glb | Bin 0 -> 192556 bytes public/3D/models/farmduino.glb | Bin 0 -> 31092 bytes public/3D/models/gantry_wheel_plate.glb | Bin 0 -> 96268 bytes public/3D/models/horizontal_motor_housing.glb | Bin 0 -> 6088 bytes public/3D/models/housing_vertical.glb | Bin 0 -> 10316 bytes public/3D/models/left_bracket.glb | Bin 0 -> 4400 bytes public/3D/models/motor_horizontal.glb | Bin 0 -> 42724 bytes public/3D/models/motor_vertical.glb | Bin 0 -> 41096 bytes public/3D/models/pi.glb | Bin 0 -> 6816 bytes public/3D/models/right_bracket.glb | Bin 0 -> 4408 bytes public/3D/models/rotary_tool.glb | Bin 0 -> 124008 bytes public/3D/models/seed_bin.glb | Bin 0 -> 7932 bytes public/3D/models/seed_tray.glb | Bin 0 -> 27552 bytes public/3D/models/seed_trough_assembly.glb | Bin 0 -> 16968 bytes public/3D/models/seed_trough_holder.glb | Bin 0 -> 6168 bytes public/3D/models/seeder.glb | Bin 0 -> 45756 bytes public/3D/models/shaft_coupler.glb | Bin 0 -> 5332 bytes public/3D/models/soil_sensor.glb | Bin 0 -> 90004 bytes public/3D/models/solenoid.glb | Bin 0 -> 46896 bytes public/3D/models/toolbay_3.glb | Bin 0 -> 12788 bytes public/3D/models/utm.glb | Bin 0 -> 96660 bytes public/3D/models/vacuum_pump.glb | Bin 0 -> 36996 bytes public/3D/models/vacuum_pump_cover.glb | Bin 0 -> 11596 bytes public/3D/models/watering_nozzle.glb | Bin 0 -> 50972 bytes public/3D/models/x_axis_cc_mount.glb | Bin 0 -> 1936 bytes public/3D/models/z_axis_motor_mount.glb | Bin 0 -> 5428 bytes public/3D/models/z_stop.glb | Bin 0 -> 1588 bytes public/3D/people/person_1.avif | Bin 0 -> 2740 bytes public/3D/people/person_1_flipped.avif | Bin 0 -> 2613 bytes public/3D/people/person_2.avif | Bin 0 -> 2994 bytes public/3D/people/person_2_flipped.avif | Bin 0 -> 2805 bytes public/3D/shapes/beam.svg | 27 + public/3D/shapes/column.svg | 21 + public/3D/shapes/track.svg | 19 + public/3D/shapes/z_axis.svg | 15 + public/3D/textures/aluminum.avif | Bin 0 -> 7692 bytes public/3D/textures/cloud.avif | Bin 0 -> 11157 bytes public/3D/textures/concrete.avif | Bin 0 -> 84203 bytes public/3D/textures/screen.avif | Bin 0 -> 6101 bytes 162 files changed, 7567 insertions(+), 232 deletions(-) create mode 100644 frontend/__test_support__/three_d_mocks.tsx create mode 100644 frontend/three_d_garden/__tests__/arrow_test.tsx create mode 100644 frontend/three_d_garden/__tests__/bot_test.tsx create mode 100644 frontend/three_d_garden/__tests__/button_test.tsx create mode 100644 frontend/three_d_garden/__tests__/caster_test.tsx create mode 100644 frontend/three_d_garden/__tests__/config_overlays_test.tsx create mode 100644 frontend/three_d_garden/__tests__/constant_tests.ts create mode 100644 frontend/three_d_garden/__tests__/desk_test.tsx create mode 100644 frontend/three_d_garden/__tests__/distance_indicator_test.tsx create mode 100644 frontend/three_d_garden/__tests__/farmbot_axes_test.tsx create mode 100644 frontend/three_d_garden/__tests__/garden_test.tsx create mode 100644 frontend/three_d_garden/__tests__/helper_tests.ts create mode 100644 frontend/three_d_garden/__tests__/lab_test.tsx create mode 100644 frontend/three_d_garden/__tests__/packaging_test.tsx create mode 100644 frontend/three_d_garden/__tests__/power_supply_test.tsx create mode 100644 frontend/three_d_garden/__tests__/sky_test.tsx create mode 100644 frontend/three_d_garden/__tests__/solar_test.tsx create mode 100644 frontend/three_d_garden/__tests__/sun_test.tsx create mode 100644 frontend/three_d_garden/__tests__/utilities_post_test.tsx create mode 100644 frontend/three_d_garden/__tests__/x_axis_water_tube_test.tsx create mode 100644 frontend/three_d_garden/__tests__/zoom_beacons_constants_test.tsx create mode 100644 frontend/three_d_garden/__tests__/zoom_beacons_test.tsx create mode 100644 frontend/three_d_garden/arrow.tsx create mode 100644 frontend/three_d_garden/bot.tsx create mode 100644 frontend/three_d_garden/button.tsx create mode 100644 frontend/three_d_garden/caster.tsx create mode 100644 frontend/three_d_garden/config_overlays.tsx create mode 100644 frontend/three_d_garden/constants.ts create mode 100644 frontend/three_d_garden/desk.tsx create mode 100644 frontend/three_d_garden/distance_indicator.tsx create mode 100644 frontend/three_d_garden/farmbot_axes.tsx create mode 100644 frontend/three_d_garden/garden.tsx create mode 100644 frontend/three_d_garden/helpers.ts create mode 100644 frontend/three_d_garden/lab.tsx create mode 100644 frontend/three_d_garden/packaging.tsx create mode 100644 frontend/three_d_garden/parts/__tests__/cross_slide_test.tsx create mode 100644 frontend/three_d_garden/parts/__tests__/gantry_wheel_plate_test.tsx create mode 100644 frontend/three_d_garden/parts/__tests__/rotary_tool_test.tsx create mode 100644 frontend/three_d_garden/parts/__tests__/seed_trough_assembly_test.tsx create mode 100644 frontend/three_d_garden/parts/__tests__/seed_trough_holder_test.tsx create mode 100644 frontend/three_d_garden/parts/__tests__/soil_sensor_test.tsx create mode 100644 frontend/three_d_garden/parts/__tests__/vacuum_pump_cover_test.tsx create mode 100644 frontend/three_d_garden/parts/cross_slide.tsx create mode 100644 frontend/three_d_garden/parts/gantry_wheel_plate.tsx create mode 100644 frontend/three_d_garden/parts/rotary_tool.tsx create mode 100644 frontend/three_d_garden/parts/seed_trough_assembly.tsx create mode 100644 frontend/three_d_garden/parts/seed_trough_holder.tsx create mode 100644 frontend/three_d_garden/parts/soil_sensor.tsx create mode 100644 frontend/three_d_garden/parts/vacuum_pump_cover.tsx create mode 100644 frontend/three_d_garden/power_supply.tsx create mode 100644 frontend/three_d_garden/sky.tsx create mode 100644 frontend/three_d_garden/solar.tsx create mode 100644 frontend/three_d_garden/sun.tsx create mode 100644 frontend/three_d_garden/utilities_post.tsx create mode 100644 frontend/three_d_garden/x_axis_water_tube.tsx create mode 100644 frontend/three_d_garden/zoom_beacons.tsx create mode 100644 frontend/three_d_garden/zoom_beacons_constants.tsx create mode 100644 public/3D/fonts/Cabin.ttf create mode 100644 public/3D/fonts/Cabin_Bold.ttf create mode 100644 public/3D/fonts/InknutAntiqua-Bold.ttf create mode 100644 public/3D/icons/anaheim_pepper.avif create mode 100644 public/3D/icons/arugula.avif create mode 100644 public/3D/icons/basil.avif create mode 100644 public/3D/icons/beet.avif create mode 100644 public/3D/icons/bibb_lettuce.avif create mode 100644 public/3D/icons/bok_choy.avif create mode 100644 public/3D/icons/broccoli.avif create mode 100644 public/3D/icons/brussels_sprout.avif create mode 100644 public/3D/icons/carrot.avif create mode 100644 public/3D/icons/cauliflower.avif create mode 100644 public/3D/icons/celery.avif create mode 100644 public/3D/icons/cherry_belle_radish.avif create mode 100644 public/3D/icons/cilantro.avif create mode 100644 public/3D/icons/collard_greens.avif create mode 100644 public/3D/icons/cucumber.avif create mode 100644 public/3D/icons/eggplant.avif create mode 100644 public/3D/icons/french_breakfast_radish.avif create mode 100644 public/3D/icons/garlic.avif create mode 100644 public/3D/icons/golden_beet.avif create mode 100644 public/3D/icons/hillbilly_tomato.avif create mode 100644 public/3D/icons/icicle_radish.avif create mode 100644 public/3D/icons/lacinato_kale.avif create mode 100644 public/3D/icons/leek.avif create mode 100644 public/3D/icons/napa_cabbage.avif create mode 100644 public/3D/icons/okra.avif create mode 100644 public/3D/icons/parsnip.avif create mode 100644 public/3D/icons/rainbow_chard.avif create mode 100644 public/3D/icons/red_bell_pepper.avif create mode 100644 public/3D/icons/red_curly_kale.avif create mode 100644 public/3D/icons/red_russian_kale.avif create mode 100644 public/3D/icons/runner_bean.avif create mode 100644 public/3D/icons/rutabaga.avif create mode 100644 public/3D/icons/savoy_cabbage.avif create mode 100644 public/3D/icons/shallot.avif create mode 100644 public/3D/icons/snap_pea.avif create mode 100644 public/3D/icons/spinach.avif create mode 100644 public/3D/icons/sweet_potato.avif create mode 100644 public/3D/icons/swiss_chard.avif create mode 100644 public/3D/icons/turmeric.avif create mode 100644 public/3D/icons/turnip.avif create mode 100644 public/3D/icons/yellow_onion.avif create mode 100644 public/3D/icons/zucchini.avif create mode 100644 public/3D/models/belt_clip.glb create mode 100644 public/3D/models/camera_mount_half.glb create mode 100644 public/3D/models/cc_horizontal.glb create mode 100644 public/3D/models/cc_vertical.glb create mode 100644 public/3D/models/cross_slide.glb create mode 100644 public/3D/models/farmduino.glb create mode 100644 public/3D/models/gantry_wheel_plate.glb create mode 100644 public/3D/models/horizontal_motor_housing.glb create mode 100644 public/3D/models/housing_vertical.glb create mode 100644 public/3D/models/left_bracket.glb create mode 100644 public/3D/models/motor_horizontal.glb create mode 100644 public/3D/models/motor_vertical.glb create mode 100644 public/3D/models/pi.glb create mode 100644 public/3D/models/right_bracket.glb create mode 100644 public/3D/models/rotary_tool.glb create mode 100644 public/3D/models/seed_bin.glb create mode 100644 public/3D/models/seed_tray.glb create mode 100644 public/3D/models/seed_trough_assembly.glb create mode 100644 public/3D/models/seed_trough_holder.glb create mode 100644 public/3D/models/seeder.glb create mode 100644 public/3D/models/shaft_coupler.glb create mode 100644 public/3D/models/soil_sensor.glb create mode 100644 public/3D/models/solenoid.glb create mode 100644 public/3D/models/toolbay_3.glb create mode 100644 public/3D/models/utm.glb create mode 100644 public/3D/models/vacuum_pump.glb create mode 100644 public/3D/models/vacuum_pump_cover.glb create mode 100644 public/3D/models/watering_nozzle.glb create mode 100644 public/3D/models/x_axis_cc_mount.glb create mode 100644 public/3D/models/z_axis_motor_mount.glb create mode 100644 public/3D/models/z_stop.glb create mode 100644 public/3D/people/person_1.avif create mode 100644 public/3D/people/person_1_flipped.avif create mode 100644 public/3D/people/person_2.avif create mode 100644 public/3D/people/person_2_flipped.avif create mode 100644 public/3D/shapes/beam.svg create mode 100644 public/3D/shapes/column.svg create mode 100644 public/3D/shapes/track.svg create mode 100644 public/3D/shapes/z_axis.svg create mode 100644 public/3D/textures/aluminum.avif create mode 100644 public/3D/textures/cloud.avif create mode 100644 public/3D/textures/concrete.avif create mode 100644 public/3D/textures/screen.avif diff --git a/frontend/__test_support__/three_d_mocks.tsx b/frontend/__test_support__/three_d_mocks.tsx new file mode 100644 index 0000000000..f903e43577 --- /dev/null +++ b/frontend/__test_support__/three_d_mocks.tsx @@ -0,0 +1,594 @@ +import { + ASSETS, + ElectronicsBoxMaterial, + PartName, + SeedTroughAssemblyMaterial, + SeedTroughHolderMaterial, + VacuumPumpCoverMaterial, +} from "../three_d_garden/constants"; +import * as THREE from "three"; +import React, { ReactNode } from "react"; +import { TransitionFn, UseSpringProps } from "@react-spring/three"; + +jest.mock("three/examples/jsm/Addons.js", () => ({ + SVGLoader: class { + static createShapes: unknown = jest.fn(() => [{ holes: { push: jest.fn() } }]); + load = jest.fn((_, fn) => fn({ paths: [[0], [1], [2], [3], [4]] })); + } +})); + +jest.mock("@react-three/fiber", () => ({ + Canvas: ({ children }: { children: ReactNode }) =>

{children}
, + addEffect: jest.fn(), + useFrame: jest.fn(x => x({ clock: { getElapsedTime: jest.fn(() => 0) } })), +})); + +jest.mock("@react-spring/three", () => ({ + useSpring: (props: UseSpringProps) => { + const next = jest.fn(); + (props.to as TransitionFn)?.(next); + return { ...props, ...props.from }; + }, + animated: { + mesh: ({ children }: { children: ReactNode }) => +
{children}
, + meshPhongMaterial: () =>
, + group: ({ children }: { children: ReactNode }) => +
{children}
, + pointLight: () =>
, + } +})); + +jest.mock("@react-three/drei", () => { + const useGLTF = jest.fn((key: string) => ({ + [ASSETS.models.crossSlide]: { + nodes: { + Cable_Carrier_Spacer_Block: {} as THREE.Mesh, + mesh0_mesh: {} as THREE.Mesh, + mesh0_mesh_1: {} as THREE.Mesh, + mesh0_mesh_2: {} as THREE.Mesh, + mesh0_mesh_3: {} as THREE.Mesh, + mesh0_mesh_4: {} as THREE.Mesh, + mesh0_mesh_5: {} as THREE.Mesh, + mesh0_mesh_6: {} as THREE.Mesh, + mesh0_mesh_7: {} as THREE.Mesh, + mesh0_mesh_8: {} as THREE.Mesh, + mesh0_mesh_9: {} as THREE.Mesh, + mesh0_mesh_10: {} as THREE.Mesh, + mesh0_mesh_11: {} as THREE.Mesh, + mesh0_mesh_12: {} as THREE.Mesh, + mesh0_mesh_13: {} as THREE.Mesh, + mesh0_mesh_14: {} as THREE.Mesh, + mesh0_mesh_15: {} as THREE.Mesh, + mesh0_mesh_16: {} as THREE.Mesh, + mesh0_mesh_17: {} as THREE.Mesh, + mesh0_mesh_18: {} as THREE.Mesh, + mesh0_mesh_19: {} as THREE.Mesh, + mesh0_mesh_20: {} as THREE.Mesh, + mesh0_mesh_21: {} as THREE.Mesh, + mesh0_mesh_22: {} as THREE.Mesh, + mesh0_mesh_23: {} as THREE.Mesh, + mesh0_mesh_24: {} as THREE.Mesh, + mesh0_mesh_25: {} as THREE.Mesh, + mesh0_mesh_26: {} as THREE.Mesh, + mesh0_mesh_27: {} as THREE.Mesh, + mesh0_mesh_28: {} as THREE.Mesh, + mesh0_mesh_29: {} as THREE.Mesh, + mesh0_mesh_30: {} as THREE.Mesh, + mesh0_mesh_31: {} as THREE.Mesh, + mesh0_mesh_32: {} as THREE.Mesh, + mesh0_mesh_33: {} as THREE.Mesh, + mesh0_mesh_34: {} as THREE.Mesh, + mesh0_mesh_35: {} as THREE.Mesh, + mesh0_mesh_36: {} as THREE.Mesh, + mesh0_mesh_37: {} as THREE.Mesh, + mesh0_mesh_38: {} as THREE.Mesh, + mesh0_mesh_39: {} as THREE.Mesh, + mesh134_mesh: {} as THREE.Mesh, + mesh134_mesh_1: {} as THREE.Mesh, + mesh134_mesh_2: {} as THREE.Mesh, + mesh134_mesh_3: {} as THREE.Mesh, + mesh134_mesh_4: {} as THREE.Mesh, + mesh134_mesh_5: {} as THREE.Mesh, + mesh134_mesh_6: {} as THREE.Mesh, + mesh134_mesh_7: {} as THREE.Mesh, + mesh134_mesh_8: {} as THREE.Mesh, + mesh134_mesh_9: {} as THREE.Mesh, + mesh134_mesh_10: {} as THREE.Mesh, + mesh134_mesh_11: {} as THREE.Mesh, + mesh134_mesh_12: {} as THREE.Mesh, + mesh134_mesh_13: {} as THREE.Mesh, + mesh134_mesh_14: {} as THREE.Mesh, + mesh134_mesh_15: {} as THREE.Mesh, + mesh134_mesh_16: {} as THREE.Mesh, + mesh134_mesh_17: {} as THREE.Mesh, + mesh152_mesh: {} as THREE.Mesh, + mesh152_mesh_1: {} as THREE.Mesh, + mesh152_mesh_2: {} as THREE.Mesh, + mesh152_mesh_3: {} as THREE.Mesh, + mesh152_mesh_4: {} as THREE.Mesh, + mesh152_mesh_5: {} as THREE.Mesh, + mesh152_mesh_6: {} as THREE.Mesh, + mesh152_mesh_7: {} as THREE.Mesh, + mesh152_mesh_8: {} as THREE.Mesh, + mesh152_mesh_9: {} as THREE.Mesh, + mesh152_mesh_10: {} as THREE.Mesh, + mesh152_mesh_11: {} as THREE.Mesh, + mesh152_mesh_12: {} as THREE.Mesh, + mesh152_mesh_13: {} as THREE.Mesh, + mesh152_mesh_14: {} as THREE.Mesh, + mesh152_mesh_15: {} as THREE.Mesh, + mesh152_mesh_16: {} as THREE.Mesh, + mesh169_mesh: {} as THREE.Mesh, + mesh169_mesh_1: {} as THREE.Mesh, + mesh169_mesh_2: {} as THREE.Mesh, + mesh169_mesh_3: {} as THREE.Mesh, + mesh169_mesh_4: {} as THREE.Mesh, + mesh169_mesh_5: {} as THREE.Mesh, + mesh169_mesh_6: {} as THREE.Mesh, + mesh169_mesh_7: {} as THREE.Mesh, + mesh169_mesh_8: {} as THREE.Mesh, + mesh169_mesh_9: {} as THREE.Mesh, + mesh169_mesh_10: {} as THREE.Mesh, + mesh169_mesh_11: {} as THREE.Mesh, + mesh169_mesh_12: {} as THREE.Mesh, + mesh169_mesh_13: {} as THREE.Mesh, + mesh169_mesh_14: {} as THREE.Mesh, + mesh169_mesh_15: {} as THREE.Mesh, + mesh169_mesh_16: {} as THREE.Mesh, + mesh169_mesh_17: {} as THREE.Mesh, + mesh187_mesh: {} as THREE.Mesh, + mesh187_mesh_1: {} as THREE.Mesh, + mesh187_mesh_2: {} as THREE.Mesh, + mesh187_mesh_3: {} as THREE.Mesh, + mesh187_mesh_4: {} as THREE.Mesh, + mesh187_mesh_5: {} as THREE.Mesh, + mesh187_mesh_6: {} as THREE.Mesh, + mesh187_mesh_7: {} as THREE.Mesh, + mesh187_mesh_8: {} as THREE.Mesh, + mesh187_mesh_9: {} as THREE.Mesh, + mesh187_mesh_10: {} as THREE.Mesh, + mesh187_mesh_11: {} as THREE.Mesh, + mesh187_mesh_12: {} as THREE.Mesh, + mesh187_mesh_13: {} as THREE.Mesh, + mesh187_mesh_14: {} as THREE.Mesh, + mesh187_mesh_15: {} as THREE.Mesh, + mesh203_mesh: {} as THREE.Mesh, + mesh203_mesh_1: {} as THREE.Mesh, + mesh203_mesh_2: {} as THREE.Mesh, + mesh203_mesh_3: {} as THREE.Mesh, + mesh203_mesh_4: {} as THREE.Mesh, + mesh203_mesh_5: {} as THREE.Mesh, + mesh203_mesh_6: {} as THREE.Mesh, + mesh203_mesh_7: {} as THREE.Mesh, + mesh203_mesh_8: {} as THREE.Mesh, + mesh203_mesh_9: {} as THREE.Mesh, + mesh203_mesh_10: {} as THREE.Mesh, + mesh203_mesh_11: {} as THREE.Mesh, + mesh203_mesh_12: {} as THREE.Mesh, + mesh203_mesh_13: {} as THREE.Mesh, + mesh217_mesh: {} as THREE.Mesh, + mesh217_mesh_1: {} as THREE.Mesh, + mesh217_mesh_2: {} as THREE.Mesh, + mesh217_mesh_3: {} as THREE.Mesh, + mesh217_mesh_4: {} as THREE.Mesh, + mesh217_mesh_5: {} as THREE.Mesh, + }, + materials: { + PaletteMaterial001: {} as THREE.MeshStandardMaterial, + }, + }, + [ASSETS.models.gantryWheelPlate]: { + nodes: { + Gantry_Wheel_Plate: {} as THREE.Mesh, + mesh141_mesh: {} as THREE.Mesh, + mesh141_mesh_1: {} as THREE.Mesh, + mesh141_mesh_2: {} as THREE.Mesh, + mesh141_mesh_3: {} as THREE.Mesh, + mesh141_mesh_4: {} as THREE.Mesh, + mesh141_mesh_5: {} as THREE.Mesh, + mesh141_mesh_6: {} as THREE.Mesh, + mesh141_mesh_7: {} as THREE.Mesh, + mesh141_mesh_8: {} as THREE.Mesh, + mesh141_mesh_9: {} as THREE.Mesh, + mesh141_mesh_10: {} as THREE.Mesh, + mesh141_mesh_11: {} as THREE.Mesh, + mesh141_mesh_12: {} as THREE.Mesh, + mesh141_mesh_13: {} as THREE.Mesh, + mesh141_mesh_14: {} as THREE.Mesh, + mesh141_mesh_15: {} as THREE.Mesh, + mesh141_mesh_16: {} as THREE.Mesh, + mesh141_mesh_17: {} as THREE.Mesh, + mesh159_mesh: {} as THREE.Mesh, + mesh159_mesh_1: {} as THREE.Mesh, + mesh159_mesh_2: {} as THREE.Mesh, + mesh159_mesh_3: {} as THREE.Mesh, + mesh159_mesh_4: {} as THREE.Mesh, + mesh159_mesh_5: {} as THREE.Mesh, + mesh159_mesh_6: {} as THREE.Mesh, + mesh159_mesh_7: {} as THREE.Mesh, + mesh159_mesh_8: {} as THREE.Mesh, + mesh159_mesh_9: {} as THREE.Mesh, + mesh159_mesh_10: {} as THREE.Mesh, + mesh159_mesh_11: {} as THREE.Mesh, + mesh159_mesh_12: {} as THREE.Mesh, + mesh159_mesh_13: {} as THREE.Mesh, + mesh159_mesh_14: {} as THREE.Mesh, + mesh159_mesh_15: {} as THREE.Mesh, + mesh159_mesh_16: {} as THREE.Mesh, + mesh176_mesh: {} as THREE.Mesh, + mesh176_mesh_1: {} as THREE.Mesh, + mesh176_mesh_2: {} as THREE.Mesh, + mesh176_mesh_3: {} as THREE.Mesh, + mesh176_mesh_4: {} as THREE.Mesh, + mesh176_mesh_5: {} as THREE.Mesh, + mesh176_mesh_6: {} as THREE.Mesh, + mesh176_mesh_7: {} as THREE.Mesh, + mesh176_mesh_8: {} as THREE.Mesh, + mesh176_mesh_9: {} as THREE.Mesh, + mesh176_mesh_10: {} as THREE.Mesh, + mesh176_mesh_11: {} as THREE.Mesh, + mesh176_mesh_12: {} as THREE.Mesh, + mesh176_mesh_13: {} as THREE.Mesh, + mesh176_mesh_14: {} as THREE.Mesh, + mesh176_mesh_15: {} as THREE.Mesh, + mesh192_mesh: {} as THREE.Mesh, + mesh192_mesh_1: {} as THREE.Mesh, + mesh192_mesh_2: {} as THREE.Mesh, + mesh192_mesh_3: {} as THREE.Mesh, + mesh192_mesh_4: {} as THREE.Mesh, + mesh192_mesh_5: {} as THREE.Mesh, + mesh192_mesh_6: {} as THREE.Mesh, + mesh192_mesh_7: {} as THREE.Mesh, + mesh192_mesh_8: {} as THREE.Mesh, + mesh192_mesh_9: {} as THREE.Mesh, + mesh192_mesh_10: {} as THREE.Mesh, + mesh192_mesh_11: {} as THREE.Mesh, + mesh192_mesh_12: {} as THREE.Mesh, + mesh192_mesh_13: {} as THREE.Mesh, + mesh206_mesh: {} as THREE.Mesh, + mesh206_mesh_1: {} as THREE.Mesh, + mesh206_mesh_2: {} as THREE.Mesh, + mesh206_mesh_3: {} as THREE.Mesh, + mesh206_mesh_4: {} as THREE.Mesh, + mesh206_mesh_5: {} as THREE.Mesh, + mesh206_mesh_6: {} as THREE.Mesh, + mesh206_mesh_7: {} as THREE.Mesh, + mesh206_mesh_8: {} as THREE.Mesh, + mesh206_mesh_9: {} as THREE.Mesh, + mesh206_mesh_10: {} as THREE.Mesh, + mesh206_mesh_11: {} as THREE.Mesh, + mesh206_mesh_12: {} as THREE.Mesh, + mesh206_mesh_13: {} as THREE.Mesh, + mesh206_mesh_14: {} as THREE.Mesh, + mesh206_mesh_15: {} as THREE.Mesh, + mesh206_mesh_16: {} as THREE.Mesh, + mesh206_mesh_17: {} as THREE.Mesh, + }, + materials: { + PaletteMaterial001: {} as THREE.MeshStandardMaterial, + }, + }, + [ASSETS.models.rotaryTool]: { + nodes: { + M25_x_6mm_Screw: {} as THREE.Mesh, + mesh0_mesh: {} as THREE.Mesh, + mesh0_mesh_1: {} as THREE.Mesh, + mesh0_mesh_2: {} as THREE.Mesh, + mesh0_mesh_3: {} as THREE.Mesh, + mesh0_mesh_4: {} as THREE.Mesh, + mesh0_mesh_5: {} as THREE.Mesh, + mesh0_mesh_6: {} as THREE.Mesh, + mesh0_mesh_7: {} as THREE.Mesh, + mesh0_mesh_8: {} as THREE.Mesh, + mesh0_mesh_9: {} as THREE.Mesh, + mesh0_mesh_10: {} as THREE.Mesh, + mesh0_mesh_11: {} as THREE.Mesh, + mesh0_mesh_12: {} as THREE.Mesh, + mesh0_mesh_13: {} as THREE.Mesh, + mesh0_mesh_14: {} as THREE.Mesh, + mesh0_mesh_15: {} as THREE.Mesh, + mesh0_mesh_16: {} as THREE.Mesh, + mesh0_mesh_17: {} as THREE.Mesh, + mesh476_mesh: {} as THREE.Mesh, + mesh476_mesh_1: {} as THREE.Mesh, + mesh476_mesh_2: {} as THREE.Mesh, + mesh476_mesh_3: {} as THREE.Mesh, + mesh476_mesh_4: {} as THREE.Mesh, + mesh476_mesh_5: {} as THREE.Mesh, + mesh476_mesh_6: {} as THREE.Mesh, + mesh476_mesh_7: {} as THREE.Mesh, + mesh476_mesh_8: {} as THREE.Mesh, + mesh476_mesh_9: {} as THREE.Mesh, + mesh476_mesh_10: {} as THREE.Mesh, + mesh476_mesh_11: {} as THREE.Mesh, + mesh476_mesh_12: {} as THREE.Mesh, + mesh476_mesh_13: {} as THREE.Mesh, + mesh476_mesh_14: {} as THREE.Mesh, + mesh476_mesh_15: {} as THREE.Mesh, + mesh476_mesh_16: {} as THREE.Mesh, + mesh476_mesh_17: {} as THREE.Mesh, + mesh476_mesh_18: {} as THREE.Mesh, + mesh476_mesh_19: {} as THREE.Mesh, + mesh476_mesh_20: {} as THREE.Mesh, + mesh476_mesh_21: {} as THREE.Mesh, + mesh476_mesh_22: {} as THREE.Mesh, + mesh476_mesh_23: {} as THREE.Mesh, + mesh476_mesh_24: {} as THREE.Mesh, + mesh476_mesh_25: {} as THREE.Mesh, + }, + materials: { + PaletteMaterial001: {} as THREE.MeshStandardMaterial, + }, + }, + [ASSETS.models.soilSensor]: { + nodes: { + Soil_Sensor: {} as THREE.Mesh, + mesh0_mesh: {} as THREE.Mesh, + mesh0_mesh_1: {} as THREE.Mesh, + mesh0_mesh_2: {} as THREE.Mesh, + mesh0_mesh_3: {} as THREE.Mesh, + mesh0_mesh_4: {} as THREE.Mesh, + mesh0_mesh_5: {} as THREE.Mesh, + mesh0_mesh_6: {} as THREE.Mesh, + mesh0_mesh_7: {} as THREE.Mesh, + mesh0_mesh_8: {} as THREE.Mesh, + mesh0_mesh_9: {} as THREE.Mesh, + mesh0_mesh_10: {} as THREE.Mesh, + mesh0_mesh_11: {} as THREE.Mesh, + mesh0_mesh_12: {} as THREE.Mesh, + mesh0_mesh_13: {} as THREE.Mesh, + mesh0_mesh_14: {} as THREE.Mesh, + mesh0_mesh_15: {} as THREE.Mesh, + mesh0_mesh_16: {} as THREE.Mesh, + mesh0_mesh_17: {} as THREE.Mesh, + mesh0_mesh_18: {} as THREE.Mesh, + mesh0_mesh_19: {} as THREE.Mesh, + mesh0_mesh_20: {} as THREE.Mesh, + mesh0_mesh_21: {} as THREE.Mesh, + mesh0_mesh_22: {} as THREE.Mesh, + mesh0_mesh_23: {} as THREE.Mesh, + mesh0_mesh_24: {} as THREE.Mesh, + mesh0_mesh_25: {} as THREE.Mesh, + mesh584_mesh: {} as THREE.Mesh, + mesh584_mesh_1: {} as THREE.Mesh, + mesh584_mesh_2: {} as THREE.Mesh, + mesh584_mesh_3: {} as THREE.Mesh, + mesh584_mesh_4: {} as THREE.Mesh, + mesh584_mesh_5: {} as THREE.Mesh, + mesh584_mesh_6: {} as THREE.Mesh, + mesh584_mesh_7: {} as THREE.Mesh, + mesh584_mesh_8: {} as THREE.Mesh, + mesh584_mesh_9: {} as THREE.Mesh, + mesh584_mesh_10: {} as THREE.Mesh, + mesh584_mesh_11: {} as THREE.Mesh, + mesh584_mesh_12: {} as THREE.Mesh, + mesh584_mesh_13: {} as THREE.Mesh, + mesh584_mesh_14: {} as THREE.Mesh, + mesh584_mesh_15: {} as THREE.Mesh, + mesh584_mesh_16: {} as THREE.Mesh, + mesh584_mesh_17: {} as THREE.Mesh, + }, + materials: { + PaletteMaterial001: {} as THREE.MeshStandardMaterial, + }, + }, + [ASSETS.models.seedTroughAssembly]: { + nodes: { + mesh0_mesh: {} as THREE.Mesh, + mesh0_mesh_1: {} as THREE.Mesh, + Seed_Trough: {} as THREE.Mesh, + }, + materials: { + [SeedTroughAssemblyMaterial.zero]: {} as THREE.MeshStandardMaterial, + [SeedTroughAssemblyMaterial.one]: {} as THREE.MeshStandardMaterial, + [SeedTroughAssemblyMaterial.two]: {} as THREE.MeshStandardMaterial, + }, + }, + [ASSETS.models.seedTroughHolder]: { + nodes: { + Seed_Trough_Holder_Mount_Plate: {} as THREE.Mesh, + M5_x_10mm_Screw: {} as THREE.Mesh, + }, + materials: { + [SeedTroughHolderMaterial.zero]: {} as THREE.MeshStandardMaterial, + [SeedTroughHolderMaterial.one]: {} as THREE.MeshStandardMaterial, + }, + }, + [ASSETS.models.vacuumPumpCover]: { + nodes: { + M5_x_10mm_Screw: {} as THREE.Mesh, + Vacuum_Pump_Cover: {} as THREE.Mesh, + }, + materials: { + [VacuumPumpCoverMaterial.zero]: {} as THREE.MeshStandardMaterial, + [VacuumPumpCoverMaterial.one]: {} as THREE.MeshStandardMaterial, + }, + }, + [ASSETS.models.leftBracket]: { + nodes: { [PartName.leftBracket]: {} as THREE.Mesh }, + }, + [ASSETS.models.rightBracket]: { + nodes: { [PartName.rightBracket]: {} as THREE.Mesh }, + }, + [ASSETS.models.beltClip]: { + nodes: { [PartName.beltClip]: {} as THREE.Mesh }, + }, + [ASSETS.models.zStop]: { + nodes: { [PartName.zStop]: {} as THREE.Mesh }, + }, + [ASSETS.models.utm]: { + nodes: { [PartName.utm]: {} as THREE.Mesh }, + materials: { PaletteMaterial001: {} as THREE.MeshStandardMaterial }, + }, + [ASSETS.models.ccHorizontal]: { + nodes: { [PartName.ccHorizontal]: {} as THREE.Mesh }, + }, + [ASSETS.models.ccVertical]: { + nodes: { [PartName.ccVertical]: {} as THREE.Mesh }, + }, + [ASSETS.models.housingVertical]: { + nodes: { [PartName.housingVertical]: {} as THREE.Mesh }, + }, + [ASSETS.models.horizontalMotorHousing]: { + nodes: { [PartName.horizontalMotorHousing]: {} as THREE.Mesh }, + materials: { PaletteMaterial001: {} as THREE.MeshStandardMaterial }, + }, + [ASSETS.models.zAxisMotorMount]: { + nodes: { [PartName.zAxisMotorMount]: {} as THREE.Mesh }, + materials: { PaletteMaterial001: {} as THREE.MeshStandardMaterial }, + }, + [ASSETS.models.toolbay3]: { + nodes: { + [PartName.toolbay3]: {} as THREE.Mesh, + [PartName.toolbay3Logo]: {} as THREE.Mesh, + }, + }, + [ASSETS.models.seeder]: { + nodes: { [PartName.seeder]: {} as THREE.Mesh }, + }, + [ASSETS.models.seedTray]: { + nodes: { [PartName.seedTray]: {} as THREE.Mesh }, + }, + [ASSETS.models.seedBin]: { + nodes: { [PartName.seedBin]: {} as THREE.Mesh }, + }, + [ASSETS.models.wateringNozzle]: { + nodes: { [PartName.wateringNozzle]: {} as THREE.Mesh }, + materials: { PaletteMaterial001: {} as THREE.MeshStandardMaterial }, + }, + [ASSETS.models.pi]: { + nodes: { [PartName.pi]: {} as THREE.Mesh }, + materials: { PaletteMaterial001: {} as THREE.MeshStandardMaterial }, + }, + [ASSETS.models.farmduino]: { + nodes: { [PartName.farmduino]: {} as THREE.Mesh }, + materials: { PaletteMaterial001: {} as THREE.MeshStandardMaterial }, + }, + [ASSETS.models.cameraMountHalf]: { + nodes: { [PartName.cameraMountHalf]: {} as THREE.Mesh }, + }, + [ASSETS.models.solenoid]: { + nodes: { [PartName.solenoid]: {} as THREE.Mesh }, + materials: { PaletteMaterial001: {} as THREE.MeshStandardMaterial }, + }, + [ASSETS.models.xAxisCCMount]: { + nodes: { [PartName.xAxisCCMount]: {} as THREE.Mesh }, + }, + [ASSETS.models.box]: { + nodes: { + Electronics_Box: { + geometry: jest.fn(), + material: { color: { set: jest.fn() } }, + }, + Electronics_Box_Gasket: { + geometry: jest.fn(), + material: { color: { set: jest.fn() } }, + }, + Electronics_Box_Lid: { + geometry: jest.fn(), + material: { color: { set: jest.fn() } }, + }, + }, + materials: { + [ElectronicsBoxMaterial.box]: { + color: { set: jest.fn() }, + transparent: false, + }, + [ElectronicsBoxMaterial.gasket]: { + color: { set: jest.fn() }, + transparent: false, + }, + [ElectronicsBoxMaterial.lid]: { + color: { set: jest.fn() }, + transparent: false, + }, + }, + }, + [ASSETS.models.btn]: { + nodes: { + ["Push_Button_-_Red"]: { + geometry: jest.fn(), + material: { color: { set: jest.fn() } }, + }, + }, + materials: { + [ElectronicsBoxMaterial.button]: { + color: { set: jest.fn() }, + transparent: false, + }, + }, + }, + [ASSETS.models.led]: { + nodes: { + LED: { + geometry: jest.fn(), + material: { color: { set: jest.fn() } }, + }, + }, + materials: { + [ElectronicsBoxMaterial.led]: { + color: { set: jest.fn() }, + transparent: false, + }, + }, + }, + }[key])); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (useGLTF as any).preload = jest.fn(); + return { + useGLTF, + RoundedBox: ({ name }: { name: string }) => +
{name}
, + Cylinder: ({ name }: { name: string }) => +
{name}
, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Sphere: (props: any) => +
{props.children}
, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Box: (props: any) => +
{props.children}
, + Extrude: ({ name }: { name: string }) => +
{name}
, + Line: ({ name }: { name: string }) => +
{name}
, + Trail: ({ name }: { name: string }) => +
{name}
, + Tube: ({ name, children }: { name: string, children: ReactNode }) => +
{children}
, + Text: ({ children }: { children: ReactNode }) => +
{children}
, + Detailed: ({ children }: { children: ReactNode }) => +
{children}
, + Html: ({ children }: { children: ReactNode }) => +
{children}
, + PerspectiveCamera: ({ name }: { name: string }) => +
{name}
, + useCursor: jest.fn(), + useTexture: jest.fn(() => ({ + wrapS: "", + wrapT: "", + repeat: { set: jest.fn() }, + })), + GizmoHelper: ({ name }: { name: string }) => +
{name}
, + GizmoViewcube: ({ name }: { name: string }) => +
{name}
, + OrbitControls: ({ name }: { name: string }) => +
{name}
, + Circle: ({ name, children }: { name: string, children: ReactNode }) => +
{children}
, + Stats: ({ name }: { name: string }) => +
{name}
, + Billboard: ({ name }: { name: string }) => +
{name}
, + Image: ({ name }: { name: string }) => +
{name}
, + Clouds: ({ name }: { name: string }) => +
{name}
, + Cloud: ({ name }: { name: string }) => +
{name}
, + OrthographicCamera: ({ name }: { name: string }) => +
{name}
, + }; +}); diff --git a/frontend/css/colors.scss b/frontend/css/colors.scss index 012f7b9f5e..ebe5283ba5 100644 --- a/frontend/css/colors.scss +++ b/frontend/css/colors.scss @@ -20,6 +20,7 @@ $placeholder_gray: #999; $dark_gray: #434343; $darker_gray: #182026; $black: #000; +$off_black: #222; $light_blue: #cdf; $blue: #a4c2f4; $dark_blue: #37d; diff --git a/frontend/css/farm_designer/farm_designer.scss b/frontend/css/farm_designer/farm_designer.scss index c1d421f73a..15b95dc765 100644 --- a/frontend/css/farm_designer/farm_designer.scss +++ b/frontend/css/farm_designer/farm_designer.scss @@ -1207,4 +1207,458 @@ height: 100vh; width: 100vw; cursor: grab; + + body { + margin: 0; + } + + .garden-bed-3d-model { + position: relative; + height: 100vh; + width: 100vw; + cursor: grab; + + &:active { + cursor: grabbing; + } + } + + .gear { + position: absolute; + top: 1rem; + right: 1rem; + width: 1rem; + cursor: pointer; + background: rgba(255, 255, 255, 0.4); + box-shadow: $translucent2 0px 0px 5px; + padding: 7px; + border-radius: 5px; + backdrop-filter: blur(5px); + opacity: 0; + + &:hover { + opacity: 1; + } + } + + .overlay { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + pointer-events: none; + user-select: none; + + .settings-bar { + display: flex; + position: absolute; + left: 0; + bottom: 0; + right: 0; + justify-content: center; + gap: 1.25rem; + padding: 1rem; + overflow-x: scroll; + background: linear-gradient(0deg, $translucent5, transparent); + + @media screen and (max-width: 768px) { + justify-content: left; + pointer-events: all; + } + + .setting-section { + pointer-events: all; + } + + .setting-title { + color: $off_white; + font-family: 'Inknut Antiqua'; + text-shadow: 0 0 10px black; + line-height: 1.8rem; + text-align: center; + } + + .row { + display: flex; + background: rgba(255, 255, 255, 0.6); + box-shadow: $translucent2 0px 0px 10px; + border-radius: 25px; + height: 40px; + padding: 5px; + justify-content: space-evenly; + backdrop-filter: blur(5px); + gap: 5px; + } + + button { + padding: 0 1rem; + border-radius: 25px; + font-weight: bold; + border: none; + background: none; + white-space: nowrap; + color: $off_black; + + &.outdoor.active, + &.lab.active, + &.genesis.active, + &.standard.active, + &.mobile.active { + background: rgba(255, 255, 255, 0.6); + } + + &.genesis-xl.active { + background: linear-gradient(315deg, #22a36d, #4ea3ed); + color: $off_white; + } + + &.winter.active { + background: linear-gradient(-15deg, #152e40, #3e8dc2); + color: $off_white; + } + + &.spring.active { + background: linear-gradient(15deg, #055b08, #49cc78); + color: $off_white; + } + + &.summer.active { + background: linear-gradient(-15deg, #d87f09, #f5e40a); + } + + &.fall.active { + background: linear-gradient(15deg, #502402, #c69075); + color: $off_white + } + + &:hover { + cursor: pointer; + background: $translucent3_white; + } + + &.disabled { + color: $placeholder_gray; + + &:hover { + cursor: not-allowed; + background: none; + } + } + } + } + } + + .tool-tip { + position: absolute; + left: 0; + bottom: 6.5rem; + right: 0; + margin: auto; + width: fit-content; + color: $off_white; + background: rgba(120, 0, 0, 0.65); + padding: 0.75rem 1rem; + border-radius: 5px; + text-align: center; + pointer-events: none; + backdrop-filter: blur(5px); + box-shadow: $translucent2 0px 0px 5px; + + @media screen and (max-width: 768px) { + margin: 0 1rem; + } + } + + .all-configs { + position: absolute; + top: 1rem; + right: 1rem; + width: 22rem; + background: $dark_gray; + text-align: left; + padding: 1rem; + border-radius: 5px; + max-height: 30rem; + overflow-y: scroll; + + .close { + position: absolute; + top: 0.5rem; + right: 1rem; + margin: 0; + cursor: pointer; + font-size: 1rem; + padding: 0.5rem 0.75rem; + background: none; + border-radius: 5px; + + &:hover { + background: $medium_gray; + } + } + + .spacer { + margin-top: 1rem; + } + + details { + color: $off_white; + + label { + font-weight: bold; + color: $off_white; + text-transform: none; + font-size: 0.9rem; + } + } + + summary { + margin: -1rem; + cursor: pointer; + padding: 1rem; + + &:hover { + background: $dark_gray; + } + } + + .config-row { + display: grid; + grid-template-columns: min-content minmax(30%, 200px) auto; + margin-bottom: 0.25rem; + + span { + width: 8rem; + padding-left: 1rem; + color: $gray; + } + + input[type="checkbox"] { + width: 1.1rem; + height: 1.1rem; + justify-self: left; + cursor: pointer; + box-shadow: none; + } + + input[type="number"] { + width: 100%; + max-width: 4rem; + height: 1rem; + font-size: 0.9rem; + box-shadow: none; + } + + input[type="radio"] { + width: 1.1rem; + height: 1.1rem; + cursor: pointer; + box-shadow: none; + } + + .options { + width: 100%; + justify-content: space-between; + } + + input[type="range"] { + width: 4rem; + margin-left: -2rem; + cursor: pointer; + box-shadow: none; + height: 1rem; + } + } + } + + .promo-info { + display: grid; + position: absolute; + top: 3rem; + right: 4rem; + color: $off_white; + text-align: right; + pointer-events: none; + text-shadow: 0 0 3.5rem $black, 0 0 1rem $black; + gap: 1rem; + justify-items: right; + + .title { + margin: 0; + font-family: 'Inknut Antiqua'; + font-size: 3.5rem; + line-height: 5rem; + } + + .description { + margin: 0; + font-weight: normal; + max-width: 40vw; + + p { + color: $off_white; + font-size: 1.25rem; + line-height: 1.7rem; + } + + .short { + display: none; + } + + .full { + display: inline; + } + } + + .buy-button { + display: flex; + pointer-events: all; + background: #00a579e0; + border-radius: 7px; + box-shadow: $translucent2 0px 0px 10px; + backdrop-filter: blur(5px); + padding: 0 1.75rem; + text-shadow: none; + text-transform: uppercase; + text-decoration: none; + gap: 0.4rem; + align-items: center; + + p { + margin: 0; + color: $off_white; + font-size: 1.5rem; + line-height: 4rem; + } + + .genesis-xl { + background: linear-gradient(315deg, #22a36d, #4ea3ed); + box-shadow: 0 0 8px rgba(0, 0, 0, 0.25); + color: $off_white; + border-radius: 50%; + height: 2.5rem; + width: 2.5rem; + line-height: 2.5rem; + text-align: center; + font-size: 80%; + vertical-align: middle; + } + + &:hover { + background: #00bb89e5; + } + } + } + + .beacon-info { + width: 500px; + font-size: 20px; + background: $white; + background: rgba(255, 255, 255, 0.8); + box-shadow: $translucent2 0px 0px 10px; + border-radius: 10px; + padding: 25px; + backdrop-filter: blur(5px); + text-align: left; + user-select: none; + p { + margin-bottom: 0; + } + iframe { + margin-top: 20px; + width: 100%; + height: auto; + border-radius: 5px; + aspect-ratio: 16 / 9; + } + .header { + display: flex; + justify-content: space-between; + h2 { + margin: 0; + font-family: 'Inknut Antiqua'; + line-height: 100%; + } + .exit-button { + width: 30px; + height: 30px; + aspect-ratio: 1 / 1; + border-radius: 50%; + filter: grayscale(100%); + font-size: 12px; + line-height: 30px; + text-align: center; + background: rgba(255, 255, 255, 0.4); + box-shadow: $translucent2 0px 0px 10px; + &:hover { + cursor: pointer; + background: rgba(255, 255, 255, 0.6); + } + } + } + } + + @media screen and (max-width: 768px) { + .beacon-info-wrapper { + display: grid; + position: absolute; + left: 0; + bottom: 0; + right: 0; + align-items: end; + transform: none!important; + * { + transform: none!important; + } + .beacon-info { + width: initial; + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; + overflow: scroll; + height: 25vh; + font-size: 100%; + } + } + .promo-info { + top: 1rem; + right: 1rem; + gap: 0.5rem; + + .title { + font-size: 1.5rem; + line-height: 2rem; + } + + .description { + max-width: 80vw; + + p { + font-size: 1rem; + line-height: 1.5rem; + } + + .short { + display: inline; + } + + .full { + display: none; + } + } + + .buy-button { + font-size: 0.85rem; + line-height: 2.2rem; + padding: 0 0.75rem; + border-radius: 5px; + + .genesis-xl { + height: 1.5rem; + width: 1.5rem; + line-height: 1.5rem; + } + } + } + } } diff --git a/frontend/external_urls.ts b/frontend/external_urls.ts index fbd54d7388..e06154ff89 100644 --- a/frontend/external_urls.ts +++ b/frontend/external_urls.ts @@ -27,6 +27,8 @@ export namespace ExternalUrl { const EDU_DOCS = "https://oer.farm.bot"; const SOFTWARE_DOCS = "https://software.farm.bot"; const DEVELOPER_DOCS = "https://developer.farm.bot"; + const SOLAR = "https://solar.farm.bot"; + const RAISED_BED = "https://bed.farm.bot"; const FORUM = "https://forum.farmbot.org"; const SHOPIFY_CDN = "https://cdn.shopify.com/s/files/1/2040/0289/files"; const YOUTUBE = "https://www.youtube.com/embed/"; @@ -67,6 +69,9 @@ export namespace ExternalUrl { export const developerDocs = `${DEVELOPER_DOCS}/docs`; export const softwareForum = `${FORUM}/c/software`; + export const solar = SOLAR; + export const raisedBed = RAISED_BED; + export namespace OpenFarm { export const cropApi = `${OPENFARM}/api/v1/crops/`; export const cropBrowse = `${OPENFARM}/crops/`; @@ -83,13 +88,17 @@ export namespace ExternalUrl { const motorMovement = `${YOUTUBE}HGuoD23s30A`; export const movements = `${motorMovement}?end=107`; export const motorTuning = `${motorMovement}?start=107`; + export const tools = `${YOUTUBE}f_GqlMAMWPk`; } const PRODUCTS = `${FARMBOT}/products`; + const KITS = `${FARMBOT}/collections/farmbot-kits/products`; export namespace Store { export const home = FARMBOT; export const cameraCalibrationCard = `${PRODUCTS}/camera-calibration-card`; export const cameraReplacement = `${PRODUCTS}/genesis-v1-5-express-v1-0-camera-free-replacement`; + export const genesisKit = `${KITS}/farmbot-genesis-v1-7`; + export const genesisXlKit = `${KITS}/farmbot-genesis-xl-v1-7`; } } diff --git a/frontend/promo/__tests__/promo_test.tsx b/frontend/promo/__tests__/promo_test.tsx index 8b1bdd3f8f..38db949d1d 100644 --- a/frontend/promo/__tests__/promo_test.tsx +++ b/frontend/promo/__tests__/promo_test.tsx @@ -8,4 +8,11 @@ describe("", () => { const wrapper = mount(); expect(wrapper.html()).toContain("three-d-garden"); }); + + it("opens config menu", () => { + const wrapper = mount(); + expect(wrapper.html()).not.toContain("all-configs"); + wrapper.find(".gear").simulate("click"); + expect(wrapper.html()).toContain("all-configs"); + }); }); diff --git a/frontend/promo/promo.tsx b/frontend/promo/promo.tsx index 70c179f57e..024f028753 100644 --- a/frontend/promo/promo.tsx +++ b/frontend/promo/promo.tsx @@ -1,17 +1,43 @@ import React from "react"; -import { ThreeDGarden } from "../three_d_garden"; import { Config, INITIAL, modifyConfigsFromUrlParams, - } from "../three_d_garden/config"; +import { GardenModel } from "../three_d_garden/garden"; +import { Canvas } from "@react-three/fiber"; +import { + PrivateOverlay, PublicOverlay, ToolTip, +} from "../three_d_garden/config_overlays"; +import { ASSETS } from "../three_d_garden/constants"; export const Promo = () => { const [config, setConfig] = React.useState(INITIAL); + const [toolTip, setToolTip] = React.useState({ timeoutId: 0, text: "" }); + const [activeFocus, setActiveFocus] = React.useState(""); + const common = { + config, setConfig, + toolTip, setToolTip, + activeFocus, setActiveFocus, + showBeacons: true, + }; React.useEffect(() => { setConfig(modifyConfigsFromUrlParams(config)); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); // intentionally empty dependency array - return ; + return
+
+ + + + + {!config.config && setConfig({ ...config, config: true })} />} + {config.config && + } + +
+
; }; diff --git a/frontend/settings/pin_bindings/__tests__/model_test.tsx b/frontend/settings/pin_bindings/__tests__/model_test.tsx index 630fae6441..e555e7e8dd 100644 --- a/frontend/settings/pin_bindings/__tests__/model_test.tsx +++ b/frontend/settings/pin_bindings/__tests__/model_test.tsx @@ -1,61 +1,3 @@ -jest.mock("@react-three/drei", () => { - const useGLTF = jest.fn(() => ({ - nodes: { - Electronics_Box: { - geometry: jest.fn(), - material: { color: { set: jest.fn() } }, - }, - Electronics_Box_Gasket: { - geometry: jest.fn(), - material: { color: { set: jest.fn() } }, - }, - Electronics_Box_Lid: { - geometry: jest.fn(), - material: { color: { set: jest.fn() } }, - }, - ["Push_Button_-_Red"]: { - geometry: jest.fn(), - material: { color: { set: jest.fn() } }, - }, - LED: { - geometry: jest.fn(), - material: { color: { set: jest.fn() } }, - }, - }, - materials: { - [Material.box]: { - color: { set: jest.fn() }, - transparent: false, - }, - [Material.gasket]: { - color: { set: jest.fn() }, - transparent: false, - }, - [Material.lid]: { - color: { set: jest.fn() }, - transparent: false, - }, - [Material.button]: { - color: { set: jest.fn() }, - transparent: false, - }, - [Material.led]: { - color: { set: jest.fn() }, - transparent: false, - }, - }, - })); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (useGLTF as any).preload = jest.fn(); - return { - useGLTF, - Cylinder: () =>
, - Html: ({ children }: { children: ReactNode }) =>
{children}
, - PerspectiveCamera: () =>
, - useCursor: jest.fn(), - }; -}); - let mockElapsedTime = 0; jest.mock("@react-three/fiber", () => ({ Canvas: () =>
, @@ -63,6 +5,7 @@ jest.mock("@react-three/fiber", () => ({ useFrame: jest.fn(x => x({ clock: { getElapsedTime: jest.fn(() => mockElapsedTime) } })), + addEffect: jest.fn(), })); const mockSetColor = jest.fn(); @@ -87,10 +30,10 @@ jest.mock("../../../devices/actions", () => ({ execSequence: jest.fn(), })); -import React, { ReactNode } from "react"; +import React from "react"; import { mount } from "enzyme"; import { ThreeEvent } from "@react-three/fiber"; -import { IColor, Material, Model, setZForAllInGroup } from "../model"; +import { IColor, Model, setZForAllInGroup } from "../model"; import { buildResourceIndex, } from "../../../__test_support__/resource_index_builder"; @@ -218,6 +161,7 @@ describe("", () => { }); it("renders: blinking on", () => { + mockElapsedTime = 0; const p = fakeProps(); p.isEditing = true; p.bot.hardware.informational_settings.locked = true; diff --git a/frontend/settings/pin_bindings/model.tsx b/frontend/settings/pin_bindings/model.tsx index 12969a1bed..e41bf9bcf7 100644 --- a/frontend/settings/pin_bindings/model.tsx +++ b/frontend/settings/pin_bindings/model.tsx @@ -17,15 +17,9 @@ import { ButtonPin } from "./list_and_label_support"; import { AmbientLight, DirectionalLight, Group, Mesh, PointLight, } from "../../three_d_garden/components"; - -const ASSETS = "/3D/"; -const LIB_DIR = `${ASSETS}lib/`; - -const MODELS = { - box: `${ASSETS}models/box.glb`, - btn: `${ASSETS}models/push_button.glb`, - led: `${ASSETS}models/led_indicator.glb`, -}; +import { + ASSETS, ElectronicsBoxMaterial, LIB_DIR, +} from "../../three_d_garden/constants"; type Box = GLTF & { nodes: { @@ -34,26 +28,18 @@ type Box = GLTF & { Electronics_Box_Lid: THREE.Mesh; }; materials: { - [Material.box]: THREE.MeshStandardMaterial; - [Material.gasket]: THREE.MeshStandardMaterial; - [Material.lid]: THREE.MeshStandardMaterial; + [ElectronicsBoxMaterial.box]: THREE.MeshStandardMaterial; + [ElectronicsBoxMaterial.gasket]: THREE.MeshStandardMaterial; + [ElectronicsBoxMaterial.lid]: THREE.MeshStandardMaterial; }; } -export enum Material { - box = "0.901961_0.901961_0.901961_0.000000_0.000000", - gasket = "0.301961_0.301961_0.301961_0.000000_0.000000", - lid = "0.564706_0.811765_0.945098_0.000000_0.623529", - button = "0.701961_0.701961_0.701961_0.000000_0.000000", - led = "0.600000_0.600000_0.600000_0.000000_0.000000", -} - type Btn = GLTF & { nodes: { ["Push_Button_-_Red"]: THREE.Mesh; }; materials: { - [Material.button]: THREE.MeshStandardMaterial; + [ElectronicsBoxMaterial.button]: THREE.MeshStandardMaterial; }; } @@ -62,10 +48,16 @@ type Led = GLTF & { LED: THREE.Mesh; }; materials: { - [Material.led]: THREE.MeshStandardMaterial; + [ElectronicsBoxMaterial.led]: THREE.MeshStandardMaterial; }; } +const MODELS = { + box: ASSETS.models.box, + btn: ASSETS.models.btn, + led: ASSETS.models.led, +}; + Object.values(MODELS).map(model => useGLTF.preload(model, LIB_DIR)); type MeshObject = THREE.Mesh; @@ -125,9 +117,9 @@ interface ButtonOrLedItem { } export const Model = (props: BoxTopBaseProps) => { - const box = useGLTF(MODELS.box, LIB_DIR) as Box; - const btn = useGLTF(MODELS.btn, LIB_DIR) as Btn; - const led = useGLTF(MODELS.led, LIB_DIR) as Led; + const box = useGLTF(ASSETS.models.box, LIB_DIR) as Box; + const btn = useGLTF(ASSETS.models.btn, LIB_DIR) as Btn; + const led = useGLTF(ASSETS.models.led, LIB_DIR) as Led; const SCALE = 1000; const syncLed = useRef(null); @@ -279,17 +271,17 @@ export const Model = (props: BoxTopBaseProps) => { {BUTTONS .filter((_, index) => express ? index == 0 : true) @@ -309,7 +301,7 @@ export const Model = (props: BoxTopBaseProps) => { onPointerUp={leave}> @@ -367,7 +359,7 @@ export const Model = (props: BoxTopBaseProps) => { return diff --git a/frontend/three_d_garden/__tests__/arrow_test.tsx b/frontend/three_d_garden/__tests__/arrow_test.tsx new file mode 100644 index 0000000000..d65c53f361 --- /dev/null +++ b/frontend/three_d_garden/__tests__/arrow_test.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import { mount } from "enzyme"; +import { Arrow, ArrowProps } from "../arrow"; + +describe("", () => { + const fakeProps = (): ArrowProps => ({ + length: 10, + width: 5, + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("extrude"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/bed_test.tsx b/frontend/three_d_garden/__tests__/bed_test.tsx index 24a178696c..9bbf78e895 100644 --- a/frontend/three_d_garden/__tests__/bed_test.tsx +++ b/frontend/three_d_garden/__tests__/bed_test.tsx @@ -7,13 +7,14 @@ import { clone } from "lodash"; describe("", () => { const fakeProps = (): BedProps => ({ config: clone(INITIAL), + activeFocus: "", }); it("renders bed", () => { const p = fakeProps(); p.config.extraLegsX = 0; const wrapper = mount(); - expect(wrapper.html()).toContain("args=\"1500,50,50\""); + expect(wrapper.html()).toContain("bed-group"); }); it("renders bed with extra legs", () => { @@ -22,6 +23,6 @@ describe("", () => { p.config.extraLegsY = 2; p.config.legsFlush = false; const wrapper = mount(); - expect(wrapper.html()).toContain("args=\"1500,50,50\""); + expect(wrapper.html()).toContain("bed-group"); }); }); diff --git a/frontend/three_d_garden/__tests__/bot_test.tsx b/frontend/three_d_garden/__tests__/bot_test.tsx new file mode 100644 index 0000000000..c08108b455 --- /dev/null +++ b/frontend/three_d_garden/__tests__/bot_test.tsx @@ -0,0 +1,42 @@ +import React from "react"; +import { mount } from "enzyme"; +import { Bot, FarmbotModelProps } from "../bot"; +import { INITIAL } from "../config"; +import { clone } from "lodash"; +import { SVGLoader } from "three/examples/jsm/Addons"; + +describe("", () => { + const fakeProps = (): FarmbotModelProps => ({ + config: clone(INITIAL), + activeFocus: "", + }); + + it("renders", () => { + const p = fakeProps(); + p.config.sizePreset = "Genesis"; + p.config.tracks = true; + p.config.trail = true; + const wrapper = mount(); + expect(wrapper.html()).toContain("bot"); + expect(wrapper.html()).toContain("water-tube"); + expect(wrapper.find({ name: "wateringNozzle" }).first().props().position) + .toEqual([-1344, 210, 75]); + }); + + it("renders: Jr", () => { + const p = fakeProps(); + p.config.sizePreset = "Jr"; + p.config.tracks = false; + p.config.trail = false; + const wrapper = mount(); + expect(wrapper.html()).toContain("bot"); + expect(wrapper.find({ name: "wateringNozzle" }).first().props().position) + .toEqual([-1344, 110, 75]); + }); + + it("loads shapes", () => { + const p = fakeProps(); + mount(); + expect(SVGLoader.createShapes).toHaveBeenCalledTimes(15); + }); +}); diff --git a/frontend/three_d_garden/__tests__/button_test.tsx b/frontend/three_d_garden/__tests__/button_test.tsx new file mode 100644 index 0000000000..3b8cf296f3 --- /dev/null +++ b/frontend/three_d_garden/__tests__/button_test.tsx @@ -0,0 +1,81 @@ +import React from "react"; +import { mount } from "enzyme"; +import { PresetButton, PresetButtonProps } from "../button"; + +describe("", () => { + const fakeProps = (): PresetButtonProps => ({ + preset: "preset", + choosePreset: jest.fn(() => jest.fn()), + hovered: "", + setHovered: jest.fn(), + startPosition: { x: 0, y: 0, z: 0 }, + index: 0, + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("box"); + expect(wrapper.html()).toContain("text"); + }); + + it("clicks wrapper", () => { + const p = fakeProps(); + const wrapper = mount(); + wrapper.find({ name: "preset-button-wrapper" }).first().simulate("click"); + expect(p.choosePreset).toHaveBeenCalledWith("preset"); + }); + + it("depresses button", () => { + const p = fakeProps(); + const wrapper = mount(); + const e = { + object: { + parent: { + children: [ + { name: "btn", position: { z: 0 }, children: [] }, + { name: "not-btn", position: { z: 0 }, children: [] }, + ] + } + } + }; + wrapper.find({ name: "preset-button" }).first().simulate("pointerdown", e); + expect(e.object.parent.children[0].position.z).toEqual(-10); + expect(e.object.parent.children[1].position.z).toEqual(16); + }); + + it("hovers button", () => { + const p = fakeProps(); + p.preset = "preset"; + p.hovered = "preset"; + const wrapper = mount(); + wrapper.find({ name: "preset-button" }).first().simulate("pointerover"); + expect(p.setHovered).toHaveBeenCalledWith("preset"); + expect(document.body.style.cursor).toEqual("pointer"); + }); + + it("un-hovers button", () => { + const p = fakeProps(); + const wrapper = mount(); + wrapper.find({ name: "preset-button" }).first().simulate("pointerleave"); + expect(document.body.style.cursor).toEqual("default"); + expect(p.setHovered).toHaveBeenCalledWith(""); + }); + + it("releases button", () => { + const p = fakeProps(); + const wrapper = mount(); + const e = { + object: { + parent: { + children: [ + { name: "btn", position: { z: 0 }, children: [] }, + { name: "not-btn", position: { z: 0 }, children: [] }, + ] + } + } + }; + wrapper.find({ name: "preset-button" }).first().simulate("pointerup", e); + expect(e.object.parent.children[0].position.z).toEqual(0); + expect(e.object.parent.children[1].position.z).toEqual(26); + }); +}); diff --git a/frontend/three_d_garden/__tests__/caster_test.tsx b/frontend/three_d_garden/__tests__/caster_test.tsx new file mode 100644 index 0000000000..2a9ea5ea19 --- /dev/null +++ b/frontend/three_d_garden/__tests__/caster_test.tsx @@ -0,0 +1,17 @@ +import React from "react"; +import { mount } from "enzyme"; +import { Caster, CasterProps } from "../caster"; +import { INITIAL } from "../config"; +import { clone } from "lodash"; + +describe("", () => { + const fakeProps = (): CasterProps => ({ + config: clone(INITIAL), + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("cylinder"); + expect(wrapper.html()).toContain("extrude"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/components_test.tsx b/frontend/three_d_garden/__tests__/components_test.tsx index 8aba8c89d4..978b959747 100644 --- a/frontend/three_d_garden/__tests__/components_test.tsx +++ b/frontend/three_d_garden/__tests__/components_test.tsx @@ -1,7 +1,19 @@ import React from "react"; import { mount } from "enzyme"; -import { AmbientLight, Mesh, PointLight } from "../components"; -import { AmbientLightProps, MeshProps, PointLightProps } from "@react-three/fiber"; +import { + AmbientLight, + DirectionalLight, + Mesh, + MeshBasicMaterial, + PointLight, +} from "../components"; +import { + AmbientLightProps, + DirectionalLightProps, + MeshBasicMaterialProps, + MeshProps, + PointLightProps, +} from "@react-three/fiber"; describe("", () => { const fakeProps = (): AmbientLightProps => ({ @@ -25,6 +37,17 @@ describe("", () => { }); }); +describe("", () => { + const fakeProps = (): DirectionalLightProps => ({ + intensity: 0.5, + }); + + it("adds props", () => { + const wrapper = mount(); + expect(wrapper.props().intensity).toEqual(0.5); + }); +}); + describe("", () => { const fakeProps = (): MeshProps => ({ name: "mesh", @@ -35,3 +58,14 @@ describe("", () => { expect(wrapper.props().name).toEqual("mesh"); }); }); + +describe("", () => { + const fakeProps = (): MeshBasicMaterialProps => ({ + name: "material", + }); + + it("adds props", () => { + const wrapper = mount(); + expect(wrapper.props().name).toEqual("material"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/config_overlays_test.tsx b/frontend/three_d_garden/__tests__/config_overlays_test.tsx new file mode 100644 index 0000000000..9d4b8ff925 --- /dev/null +++ b/frontend/three_d_garden/__tests__/config_overlays_test.tsx @@ -0,0 +1,154 @@ +jest.mock("../zoom_beacons_constants", () => ({ + setUrlParam: jest.fn(), +})); + +import React from "react"; +import { mount } from "enzyme"; +import { + PublicOverlay, OverlayProps, PrivateOverlay, maybeAddParam, +} from "../config_overlays"; +import { INITIAL, PRESETS } from "../config"; +import { clone } from "lodash"; +import { setUrlParam } from "../zoom_beacons_constants"; + +describe("", () => { + const fakeProps = (): OverlayProps => ({ + config: clone(INITIAL), + setConfig: jest.fn(), + toolTip: { timeoutId: 0, text: "" }, + setToolTip: jest.fn(), + activeFocus: "", + setActiveFocus: jest.fn(), + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("settings-bar"); + }); + + it("changes preset", () => { + const p = fakeProps(); + const wrapper = mount(); + wrapper.find("button").at(1).simulate("click"); + expect(p.setConfig).toHaveBeenCalledWith({ + ...p.config, + ...PRESETS["Genesis XL"], + }); + }); + + it("doesn't allow mobile XL", () => { + const p = fakeProps(); + p.config.sizePreset = "Genesis XL"; + const wrapper = mount(); + jest.useFakeTimers(); + wrapper.find("button").at(7).simulate("click"); + expect(p.setConfig).not.toHaveBeenCalled(); + expect(p.setToolTip).toHaveBeenCalledWith({ + timeoutId: 1000000000000, + text: "Mobile beds are not recommended for Genesis XL machines", + }); + jest.runAllTimers(); + expect(p.setToolTip).toHaveBeenCalledWith({ + timeoutId: 0, + text: "", + }); + }); +}); + +describe("", () => { + const fakeProps = (): OverlayProps => ({ + config: clone(INITIAL), + setConfig: jest.fn(), + toolTip: { timeoutId: 0, text: "" }, + setToolTip: jest.fn(), + activeFocus: "", + setActiveFocus: jest.fn(), + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("all-configs"); + }); + + it("changes value: number", () => { + const p = fakeProps(); + const wrapper = mount(); + wrapper.find({ type: "number" }).first().simulate("change", + { target: { value: "123" } }); + expect(p.setConfig).toHaveBeenCalledWith({ + ...p.config, + x: 123, + }); + expect(p.setConfig).not.toHaveBeenCalledWith(p.config); + }); + + it("doesn't change value: number", () => { + const p = fakeProps(); + const wrapper = mount(); + wrapper.find({ type: "number" }).first().simulate("change", + { target: { value: "nope" } }); + expect(p.setConfig).not.toHaveBeenCalled(); + }); + + it("changes value: toggle", () => { + const p = fakeProps(); + const wrapper = mount(); + wrapper.find({ type: "checkbox" }).at(1).simulate("change", + { target: { checked: false } }); + expect(p.setConfig).toHaveBeenCalledWith({ + ...p.config, + promoInfo: false, + }); + expect(p.setConfig).not.toHaveBeenCalledWith(p.config); + }); + + it("changes value: radio", () => { + const p = fakeProps(); + const wrapper = mount(); + wrapper.find({ type: "radio" }).first().simulate("change", + { target: { value: "Jr" } }); + expect(p.setConfig).toHaveBeenCalledWith({ + ...p.config, + ...PRESETS["Jr"], + x: 100, + y: 100, + z: 50, + }); + expect(p.setConfig).not.toHaveBeenCalledWith(p.config); + }); + + it("closes the config menu", () => { + const p = fakeProps(); + const wrapper = mount(); + wrapper.find(".close").first().simulate("click"); + expect(p.setConfig).toHaveBeenCalledWith({ + ...p.config, + config: false, + }); + }); + + it("sets paramAdd boolean", () => { + const p = fakeProps(); + const wrapper = mount(); + wrapper.find({ type: "number" }).first().simulate("change", + { target: { value: "123" } }); + expect(setUrlParam).not.toHaveBeenCalled(); + wrapper.find({ type: "checkbox" }).first().simulate("change", + { target: { checked: "true" } }); + wrapper.find({ type: "number" }).first().simulate("change", + { target: { value: "123" } }); + expect(setUrlParam).toHaveBeenCalledWith("x", "123"); + }); +}); + +describe("maybeAddParam()", () => { + it("doesn't add param", () => { + maybeAddParam(false, "x", "1"); + expect(setUrlParam).not.toHaveBeenCalled(); + }); + + it("adds param", () => { + maybeAddParam(true, "x", "1"); + expect(setUrlParam).toHaveBeenCalledWith("x", "1"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/config_test.ts b/frontend/three_d_garden/__tests__/config_test.ts index 3ec339aaf2..d5a310cfb3 100644 --- a/frontend/three_d_garden/__tests__/config_test.ts +++ b/frontend/three_d_garden/__tests__/config_test.ts @@ -1,5 +1,7 @@ import { clone } from "lodash"; -import { INITIAL, modifyConfig, modifyConfigsFromUrlParams } from "../config"; +import { + detailLevels, INITIAL, modifyConfig, modifyConfigsFromUrlParams, +} from "../config"; describe("modifyConfig()", () => { it("modifies config: lab", () => { @@ -74,3 +76,11 @@ describe("modifyConfigsFromUrlParams()", () => { expect(result.ground).toEqual(true); }); }); + +describe("detailLevels()", () => { + it("returns detail level", () => { + const config = clone(INITIAL); + config.lowDetail = true; + expect(detailLevels(config)).toEqual([0, 0]); + }); +}); diff --git a/frontend/three_d_garden/__tests__/constant_tests.ts b/frontend/three_d_garden/__tests__/constant_tests.ts new file mode 100644 index 0000000000..395bf2a299 --- /dev/null +++ b/frontend/three_d_garden/__tests__/constant_tests.ts @@ -0,0 +1,7 @@ +import { PLANTS } from "../constants"; + +describe("PLANTS", () => { + it("returns data", () => { + expect(PLANTS.anaheimPepper.size).toEqual(150); + }); +}); diff --git a/frontend/three_d_garden/__tests__/desk_test.tsx b/frontend/three_d_garden/__tests__/desk_test.tsx new file mode 100644 index 0000000000..4e1f3246f6 --- /dev/null +++ b/frontend/three_d_garden/__tests__/desk_test.tsx @@ -0,0 +1,17 @@ +import React from "react"; +import { mount } from "enzyme"; +import { Desk, DeskProps } from "../desk"; +import { clone } from "lodash"; +import { INITIAL } from "../config"; + +describe("", () => { + const fakeProps = (): DeskProps => ({ + config: clone(INITIAL), + activeFocus: "", + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("desk"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/distance_indicator_test.tsx b/frontend/three_d_garden/__tests__/distance_indicator_test.tsx new file mode 100644 index 0000000000..2460369648 --- /dev/null +++ b/frontend/three_d_garden/__tests__/distance_indicator_test.tsx @@ -0,0 +1,19 @@ +import React from "react"; +import { mount } from "enzyme"; +import { DistanceIndicator, DistanceIndicatorProps } from "../distance_indicator"; + +describe("", () => { + const fakeProps = (): DistanceIndicatorProps => ({ + start: { x: 0, y: 0, z: 0 }, + end: { x: 100, y: 0, z: 0 }, + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("box"); + expect(wrapper.html()).toContain("text"); + expect(wrapper.html()).toContain("arrow"); + expect(wrapper.html()).toContain("100mm"); + expect(wrapper.html()).toContain("extrude"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/farmbot_axes_test.tsx b/frontend/three_d_garden/__tests__/farmbot_axes_test.tsx new file mode 100644 index 0000000000..6173653219 --- /dev/null +++ b/frontend/three_d_garden/__tests__/farmbot_axes_test.tsx @@ -0,0 +1,16 @@ +import React from "react"; +import { mount } from "enzyme"; +import { FarmbotAxes, FarmbotAxesProps } from "../farmbot_axes"; +import { clone } from "lodash"; +import { INITIAL } from "../config"; + +describe("", () => { + const fakeProps = (): FarmbotAxesProps => ({ + config: clone(INITIAL) + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("extrude"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/garden_test.tsx b/frontend/three_d_garden/__tests__/garden_test.tsx new file mode 100644 index 0000000000..1f179b5a48 --- /dev/null +++ b/frontend/three_d_garden/__tests__/garden_test.tsx @@ -0,0 +1,101 @@ +import React from "react"; +import { mount } from "enzyme"; +import { GardenModelProps, GardenModel } from "../garden"; +import { clone } from "lodash"; +import { INITIAL } from "../config"; + +describe("", () => { + const fakeProps = (): GardenModelProps => ({ + config: clone(INITIAL), + activeFocus: "", + setActiveFocus: jest.fn(), + showBeacons: true, + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("zoom-beacons"); + expect(wrapper.html()).not.toContain("stats"); + expect(wrapper.html()).toContain("darkgreen"); + }); + + it("renders other options", () => { + Object.defineProperty(window, "innerWidth", { + value: 400, + configurable: true, + }); + const p = fakeProps(); + p.config.perspective = false; + p.config.plants = ""; + p.config.labels = true; + p.config.labelsOnHover = false; + p.config.sizePreset = "Genesis XL"; + p.config.stats = true; + p.config.viewCube = true; + p.config.lab = true; + p.activeFocus = "plant"; + const wrapper = mount(); + expect(wrapper.html()).toContain("gray"); + expect(wrapper.html()).toContain("stats"); + }); + + it("sets hover", () => { + const p = fakeProps(); + p.config.labelsOnHover = true; + const wrapper = mount(); + const e = { + stopPropagation: jest.fn(), + intersections: [{ object: { name: "obj" } }], + }; + wrapper.find({ name: "plants" }).first().simulate("pointerEnter", e); + expect(e.stopPropagation).toHaveBeenCalled(); + }); + + it("sets hover: buttons", () => { + const p = fakeProps(); + p.config.labelsOnHover = true; + const wrapper = mount(); + const e = { + stopPropagation: jest.fn(), + buttons: true, + }; + wrapper.find({ name: "plants" }).first().simulate("pointerEnter", e); + expect(e.stopPropagation).toHaveBeenCalled(); + }); + + it("un-sets hover", () => { + const p = fakeProps(); + p.config.labelsOnHover = true; + const wrapper = mount(); + const e = { + stopPropagation: jest.fn(), + intersections: [{ object: { name: "obj" } }], + }; + wrapper.find({ name: "plants" }).first().simulate("pointerLeave", e); + expect(e.stopPropagation).toHaveBeenCalled(); + }); + + it("doesn't set hover", () => { + const p = fakeProps(); + p.config.labels = true; + p.config.labelsOnHover = false; + const wrapper = mount(); + const e = { stopPropagation: jest.fn() }; + wrapper.find({ name: "plants" }).first().simulate("pointerEnter", e); + expect(e.stopPropagation).not.toHaveBeenCalled(); + }); + + it("logs debug event", () => { + console.log = jest.fn(); + const p = fakeProps(); + p.config.eventDebug = true; + const wrapper = mount(); + wrapper.simulate("pointerMove", { + intersections: [ + { object: { name: "1" } }, + { object: { name: "2" } }, + ], + }); + expect(console.log).toHaveBeenCalledWith(["1", "2"]); + }); +}); diff --git a/frontend/three_d_garden/__tests__/helper_tests.ts b/frontend/three_d_garden/__tests__/helper_tests.ts new file mode 100644 index 0000000000..6bde1511a7 --- /dev/null +++ b/frontend/three_d_garden/__tests__/helper_tests.ts @@ -0,0 +1,46 @@ +import { clone } from "lodash"; +import { + easyCubicBezierCurve3, + getColorFromBrightness, + threeSpace, + zZero, +} from "../helpers"; +import { INITIAL } from "../config"; +import * as THREE from "three"; + +describe("threeSpace()", () => { + it("returns adjusted position", () => { + expect(threeSpace(0, 100)).toEqual(-50); + }); +}); + +describe("zZero()", () => { + it("returns position", () => { + const config = clone(INITIAL); + expect(zZero(config)).toEqual(400); + }); +}); + +describe("getColorFromBrightness()", () => { + it("returns color", () => { + expect(getColorFromBrightness(1)).toEqual("#444"); + }); +}); + +describe("easyCubicBezierCurve3()", () => { + it("returns coordinates", () => { + const expected = new THREE.CubicBezierCurve3( + new THREE.Vector3(0, 0, 0), + new THREE.Vector3(-10, 0, 0), + new THREE.Vector3(90, 0, 0), + new THREE.Vector3(100, 0, 0), + ); + const result = easyCubicBezierCurve3( + [0, 0, 0], + [-10, 0, 0], + [-10, 0, 0], + [100, 0, 0], + ); + expect(result).toEqual(expected); + }); +}); diff --git a/frontend/three_d_garden/__tests__/index_test.tsx b/frontend/three_d_garden/__tests__/index_test.tsx index 7e65291e15..f1e135c203 100644 --- a/frontend/three_d_garden/__tests__/index_test.tsx +++ b/frontend/three_d_garden/__tests__/index_test.tsx @@ -1,23 +1,7 @@ -jest.mock("@react-three/drei", () => { - return { - Box: () =>
, - Circle: () =>
, - PerspectiveCamera: () =>
, - OrbitControls: () =>
, - }; -}); - -jest.mock("@react-three/fiber", () => ({ - Canvas: () =>
, - addEffect: jest.fn(), -})); - import { mount } from "enzyme"; import { ThreeDGardenProps, ThreeDGarden, - ThreeDGardenModel, ThreeDGardenModelProps, - -} from ".."; +} from "../index"; import React from "react"; import { INITIAL } from "../config"; import { clone } from "lodash"; @@ -32,14 +16,3 @@ describe("", () => { expect(wrapper.html()).toContain("three-d-garden"); }); }); - -describe("", () => { - const fakeProps = (): ThreeDGardenModelProps => ({ - config: clone(INITIAL), - }); - - it("renders model", () => { - const wrapper = mount(); - expect(wrapper.html()).toContain("three-d-garden-model"); - }); -}); diff --git a/frontend/three_d_garden/__tests__/lab_test.tsx b/frontend/three_d_garden/__tests__/lab_test.tsx new file mode 100644 index 0000000000..9fc46cfd28 --- /dev/null +++ b/frontend/three_d_garden/__tests__/lab_test.tsx @@ -0,0 +1,29 @@ +import React from "react"; +import { mount } from "enzyme"; +import { Lab, LabProps } from "../lab"; +import { INITIAL } from "../config"; +import { clone } from "lodash"; + +describe("", () => { + const fakeProps = (): LabProps => ({ + config: clone(INITIAL), + activeFocus: "", + }); + + it("renders", () => { + const p = fakeProps(); + p.config.people = false; + p.activeFocus = ""; + const wrapper = mount(); + expect(wrapper.html()).toContain("lab"); + expect(wrapper.find({ name: "people" }).first().props().visible).toBeFalsy(); + }); + + it("renders with people", () => { + const p = fakeProps(); + p.config.people = true; + p.activeFocus = ""; + const wrapper = mount(); + expect(wrapper.find({ name: "people" }).first().props().visible).toBeTruthy(); + }); +}); diff --git a/frontend/three_d_garden/__tests__/packaging_test.tsx b/frontend/three_d_garden/__tests__/packaging_test.tsx new file mode 100644 index 0000000000..1dcdefb972 --- /dev/null +++ b/frontend/three_d_garden/__tests__/packaging_test.tsx @@ -0,0 +1,26 @@ +import React from "react"; +import { mount } from "enzyme"; +import { Packaging, PackagingProps } from "../packaging"; +import { INITIAL } from "../config"; +import { clone } from "lodash"; + +describe("", () => { + const fakeProps = (): PackagingProps => ({ + config: clone(INITIAL), + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("packaging"); + expect(wrapper.html()).toContain("100"); + expect(wrapper.html()).not.toContain("170"); + }); + + it("renders: XL", () => { + const p = fakeProps(); + p.config.sizePreset = "Genesis XL"; + const wrapper = mount(); + expect(wrapper.html()).toContain("170"); + expect(wrapper.html()).not.toContain("100"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/power_supply_test.tsx b/frontend/three_d_garden/__tests__/power_supply_test.tsx new file mode 100644 index 0000000000..9ded40538d --- /dev/null +++ b/frontend/three_d_garden/__tests__/power_supply_test.tsx @@ -0,0 +1,26 @@ +import React from "react"; +import { mount } from "enzyme"; +import { PowerSupply, PowerSupplyProps } from "../power_supply"; +import { INITIAL } from "../config"; +import { clone } from "lodash"; + +describe("", () => { + const fakeProps = (): PowerSupplyProps => ({ + config: clone(INITIAL), + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("powerSupplyGroup"); + expect(wrapper.html()).toContain("#222"); + expect(wrapper.html()).not.toContain("hsl("); + }); + + it("renders cable debug mode", () => { + const p = fakeProps(); + p.config.cableDebug = true; + const wrapper = mount(); + expect(wrapper.html()).toContain("hsl("); + expect(wrapper.html()).not.toContain("#222"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/sky_test.tsx b/frontend/three_d_garden/__tests__/sky_test.tsx new file mode 100644 index 0000000000..98ebf5bc36 --- /dev/null +++ b/frontend/three_d_garden/__tests__/sky_test.tsx @@ -0,0 +1,13 @@ +import React from "react"; +import { mount } from "enzyme"; +import { Sky, SkyProps } from "../sky"; + +describe("", () => { + const fakeProps = (): SkyProps => ({ + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("primitive"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/solar_test.tsx b/frontend/three_d_garden/__tests__/solar_test.tsx new file mode 100644 index 0000000000..901b87e49c --- /dev/null +++ b/frontend/three_d_garden/__tests__/solar_test.tsx @@ -0,0 +1,17 @@ +import React from "react"; +import { mount } from "enzyme"; +import { Solar, SolarProps } from "../solar"; +import { INITIAL } from "../config"; +import { clone } from "lodash"; + +describe("", () => { + const fakeProps = (): SolarProps => ({ + config: clone(INITIAL), + activeFocus: "", + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("solar"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/sun_test.tsx b/frontend/three_d_garden/__tests__/sun_test.tsx new file mode 100644 index 0000000000..caff85ec11 --- /dev/null +++ b/frontend/three_d_garden/__tests__/sun_test.tsx @@ -0,0 +1,16 @@ +import React from "react"; +import { mount } from "enzyme"; +import { Sun, SunProps } from "../sun"; +import { INITIAL } from "../config"; +import { clone } from "lodash"; + +describe("", () => { + const fakeProps = (): SunProps => ({ + config: clone(INITIAL), + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("sun"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/utilities_post_test.tsx b/frontend/three_d_garden/__tests__/utilities_post_test.tsx new file mode 100644 index 0000000000..b9dab5bcc6 --- /dev/null +++ b/frontend/three_d_garden/__tests__/utilities_post_test.tsx @@ -0,0 +1,17 @@ +import React from "react"; +import { mount } from "enzyme"; +import { UtilitiesPost, UtilitiesPostProps } from "../utilities_post"; +import { INITIAL } from "../config"; +import { clone } from "lodash"; + +describe("", () => { + const fakeProps = (): UtilitiesPostProps => ({ + config: clone(INITIAL), + activeFocus: "", + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("utilities-post"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/x_axis_water_tube_test.tsx b/frontend/three_d_garden/__tests__/x_axis_water_tube_test.tsx new file mode 100644 index 0000000000..3641d9b62b --- /dev/null +++ b/frontend/three_d_garden/__tests__/x_axis_water_tube_test.tsx @@ -0,0 +1,16 @@ +import React from "react"; +import { mount } from "enzyme"; +import { XAxisWaterTubeProps, XAxisWaterTube } from "../x_axis_water_tube"; +import { clone } from "lodash"; +import { INITIAL } from "../config"; + +describe("", () => { + const fakeProps = (): XAxisWaterTubeProps => ({ + config: clone(INITIAL), + }); + + it("renders", () => { + const wrapper = mount(); + expect(wrapper.html()).toContain("x-axis-water-tube"); + }); +}); diff --git a/frontend/three_d_garden/__tests__/zoom_beacons_constants_test.tsx b/frontend/three_d_garden/__tests__/zoom_beacons_constants_test.tsx new file mode 100644 index 0000000000..9e97790599 --- /dev/null +++ b/frontend/three_d_garden/__tests__/zoom_beacons_constants_test.tsx @@ -0,0 +1,98 @@ +import { + Camera, + FOCI, + getCamera, + getCameraOffset, + getFocus, + getFocusFromUrlParams, + setUrlParam, +} from "../zoom_beacons_constants"; +import { clone } from "lodash"; +import { INITIAL } from "../config"; + +describe("FOCI()", () => { + it("returns foci", () => { + const config = clone(INITIAL); + expect(FOCI(config)[0].label).toEqual("What you can grow"); + expect(FOCI(config)[0].info.scale).toEqual(3000); + }); + + it("returns FOCI(): XL", () => { + const config = clone(INITIAL); + config.sizePreset = "Genesis XL"; + expect(FOCI(config)[0].label).toEqual("What you can grow"); + expect(FOCI(config)[0].info.scale).toEqual(6000); + }); +}); + +describe("getFocus()", () => { + it("returns focus", () => { + const config = clone(INITIAL); + expect(getFocus(config, "What you can grow").label) + .toEqual("What you can grow"); + }); +}); + +describe("getCameraOffset()", () => { + it("returns camera offset: wide", () => { + Object.defineProperty(window, "innerWidth", { + value: 1000, + configurable: true + }); + const config = clone(INITIAL); + const focus = FOCI(config)[0]; + expect(getCameraOffset(focus).position[1]).toEqual(0); + }); + + it("returns camera offset: narrow", () => { + Object.defineProperty(window, "innerWidth", { + value: 400, + configurable: true + }); + const config = clone(INITIAL); + const focus = FOCI(config)[0]; + expect(getCameraOffset(focus).position[1]).toEqual(-1000); + }); +}); + +describe("getCamera()", () => { + it("returns camera", () => { + const config = clone(INITIAL); + const fallback: Camera = { + position: [0, 0, 0], + target: [0, 0, 0], + }; + expect(getCamera(config, "What you can grow", fallback).position[0]) + .toEqual(0); + }); +}); + +describe("setUrlParam()", () => { + history.pushState = jest.fn(); + + it("sets URL param", () => { + window.location.href = "http://localhost:3000/app/designer"; + setUrlParam("focus", "What you can grow"); + expect(history.pushState).toHaveBeenCalledWith(undefined, "", + "http://localhost:3000/app/designer?focus=What+you+can+grow"); + }); + + it("removes URL param", () => { + window.location.href = "http://localhost:3000/app/designer?focus=What+you+can+grow"; + setUrlParam("focus", ""); + expect(history.pushState).toHaveBeenCalledWith(undefined, "", + "http://localhost:3000/app/designer"); + }); +}); + +describe("getFocusFromUrlParams()", () => { + it("returns focus", () => { + window.location.search = "?focus=What+you+can+grow"; + expect(getFocusFromUrlParams()).toEqual("What you can grow"); + }); + + it("returns default", () => { + window.location.search = ""; + expect(getFocusFromUrlParams()).toEqual(""); + }); +}); diff --git a/frontend/three_d_garden/__tests__/zoom_beacons_test.tsx b/frontend/three_d_garden/__tests__/zoom_beacons_test.tsx new file mode 100644 index 0000000000..a1ed4c396a --- /dev/null +++ b/frontend/three_d_garden/__tests__/zoom_beacons_test.tsx @@ -0,0 +1,103 @@ +import React from "react"; +import { mount } from "enzyme"; +import { ZoomBeacons, ZoomBeaconsProps } from "../zoom_beacons"; +import { clone } from "lodash"; +import { INITIAL } from "../config"; + +describe("", () => { + beforeEach(() => { + window.location.href = "http://localhost:3000/app/designer"; + history.pushState = jest.fn(); + }); + + const fakeProps = (): ZoomBeaconsProps => ({ + config: clone(INITIAL), + activeFocus: "", + setActiveFocus: jest.fn(), + }); + + it("renders", async () => { + jest.useFakeTimers(); + const wrapper = mount(); + await jest.runAllTimers(); + expect(wrapper.html()).toContain("zoom-beacons"); + expect(wrapper.html()).not.toContain("debug-group"); + expect(wrapper.html()).toContain("40"); + jest.runAllTimers(); + }); + + it("renders: debug", () => { + const p = fakeProps(); + p.config.zoomBeaconDebug = true; + p.config.sizePreset = "Genesis XL"; + p.config.animate = false; + const wrapper = mount(); + expect(wrapper.html()).toContain("debug-group"); + }); + + it("renders mobile", () => { + Object.defineProperty(window, "innerWidth", { + value: 400, + configurable: true, + }); + const wrapper = mount(); + expect(wrapper.html()).toContain("60"); + }); + + it("shows beacon", () => { + const p = fakeProps(); + const wrapper = mount(); + const sphere = wrapper.find({ name: "beacon-sphere" }).first(); + sphere.simulate("pointerEnter"); + sphere.simulate("pointerLeave"); + sphere.simulate("click"); + expect(p.setActiveFocus).toHaveBeenCalledWith("What you can grow"); + }); + + it("changes cursor", () => { + const element = document.createElement("div"); + Object.defineProperty(document, "querySelector", { + value: () => element, + configurable: true, + }); + const p = fakeProps(); + p.activeFocus = "What you can grow"; + const wrapper = mount(); + const sphere = wrapper.find({ name: "beacon-sphere" }).first(); + sphere.simulate("pointerEnter"); + expect((document.querySelector("") as HTMLElement).style.cursor) + .toEqual("zoom-out"); + sphere.simulate("pointerLeave"); + expect((document.querySelector("") as HTMLElement).style.cursor).toEqual(""); + sphere.simulate("click"); + expect((document.querySelector("") as HTMLElement).style.cursor).toEqual(""); + expect(p.setActiveFocus).toHaveBeenCalledWith(""); + }); + + it("changes cursor: zoom-in", () => { + const element = document.createElement("div"); + Object.defineProperty(document, "querySelector", { + value: () => element, + configurable: true, + }); + const p = fakeProps(); + p.activeFocus = ""; + const wrapper = mount(); + const sphere = wrapper.find({ name: "beacon-sphere" }).first(); + sphere.simulate("pointerEnter"); + expect((document.querySelector("") as HTMLElement).style.cursor) + .toEqual("zoom-in"); + }); + + it("shows pop-up", () => { + const p = fakeProps(); + p.activeFocus = "What you can grow"; + const wrapper = mount(); + const e = { stopPropagation: jest.fn() }; + wrapper.find(".beacon-info").first().simulate("pointerDown", e); + wrapper.find(".beacon-info").first().simulate("pointerMove", e); + expect(e.stopPropagation).toHaveBeenCalledTimes(2); + wrapper.find(".exit-button").first().simulate("click"); + expect(p.setActiveFocus).toHaveBeenCalledWith(""); + }); +}); diff --git a/frontend/three_d_garden/arrow.tsx b/frontend/three_d_garden/arrow.tsx new file mode 100644 index 0000000000..8040f0af79 --- /dev/null +++ b/frontend/three_d_garden/arrow.tsx @@ -0,0 +1,36 @@ +import React from "react"; +import { Extrude } from "@react-three/drei"; +import { Shape } from "three"; +import { MeshPhongMaterial } from "./components"; + +export interface ArrowProps { + length: number; + width: number; + rotation?: [number, number, number]; +} + +const arrow2D = + (length: number, width: number) => { + const path = new Shape(); + path.moveTo(0, -width / 2); + path.lineTo(length - (width * 4), -width / 2); + path.lineTo(length - (width * 4), -width * 1.5); + path.lineTo(length, 0); + path.lineTo(length - (width * 4), width * 1.5); + path.lineTo(length - (width * 4), width / 2); + path.lineTo(0, width / 2); + path.moveTo(0, -width / 2); + return path; + }; + +export const Arrow = (props: ArrowProps) => { + return + + ; +}; diff --git a/frontend/three_d_garden/bed.tsx b/frontend/three_d_garden/bed.tsx index a89c73be35..423a34a444 100644 --- a/frontend/three_d_garden/bed.tsx +++ b/frontend/three_d_garden/bed.tsx @@ -1,8 +1,15 @@ import React from "react"; -import { Box, Extrude } from "@react-three/drei"; -import { DoubleSide, Path, RepeatWrapping, Shape, TextureLoader } from "three"; +import { Box, Detailed, Extrude, useTexture } from "@react-three/drei"; +import { DoubleSide, Path, Shape, RepeatWrapping } from "three"; import { range } from "lodash"; -import { Config } from "./config"; +import { threeSpace, zZero, getColorFromBrightness } from "./helpers"; +import { Config, detailLevels } from "./config"; +import { ASSETS } from "./constants"; +import { DistanceIndicator } from "./distance_indicator"; +import { FarmbotAxes } from "./farmbot_axes"; +import { Packaging } from "./packaging"; +import { Caster } from "./caster"; +import { UtilitiesPost } from "./utilities_post"; import { Group, MeshPhongMaterial } from "./components"; const soil = ( @@ -39,43 +46,23 @@ const bedStructure2D = ( return shape; }; -const woodTexture = new TextureLoader() - .load("/3D/textures/wood.avif", - texture => { - texture.wrapS = RepeatWrapping; - texture.wrapT = RepeatWrapping; - texture.repeat.set(.0003, .003); - }); - -const legWoodTexture = new TextureLoader() - .load("/3D/textures/wood.avif", - texture => { - texture.wrapS = RepeatWrapping; - texture.wrapT = RepeatWrapping; - texture.repeat.set(.02, .05); - }); - -const soilTexture = new TextureLoader() - .load("/3D/textures/soil.avif", - texture => { - texture.wrapS = RepeatWrapping; - texture.wrapT = RepeatWrapping; - texture.repeat.set(.00034, .00068); - }); - export interface BedProps { config: Config; + activeFocus: string; } export const Bed = (props: BedProps) => { const { bedWidthOuter, bedLengthOuter, botSizeZ, bedHeight, bedZOffset, - legSize, legsFlush, extraLegsX, extraLegsY, - soilHeight, ccSupportSize, + legSize, legsFlush, extraLegsX, extraLegsY, bedBrightness, soilBrightness, + soilHeight, ccSupportSize, axes, xyDimensions, } = props.config; const thickness = props.config.bedWallThickness; const botSize = { x: bedLengthOuter, y: bedWidthOuter, z: botSizeZ, thickness }; - const bedStartZ = 0; + const bedStartZ = bedHeight; + const bedColor = getColorFromBrightness(bedBrightness); + const soilColor = getColorFromBrightness(soilBrightness); + const groundZ = -bedHeight - bedZOffset; const legXPositions = [ 0 + legSize / 2 + thickness, ...(extraLegsX @@ -93,6 +80,19 @@ export const Bed = (props: BedProps) => { ]; const casterHeight = legSize * 1.375; + const woodTexture = useTexture(ASSETS.textures.wood); + woodTexture.wrapS = RepeatWrapping; + woodTexture.wrapT = RepeatWrapping; + woodTexture.repeat.set(0.0003, 0.003); + const legWoodTexture = useTexture(ASSETS.textures.wood); + legWoodTexture.wrapS = RepeatWrapping; + legWoodTexture.wrapT = RepeatWrapping; + legWoodTexture.repeat.set(0.02, 0.05); + const soilTexture = useTexture(ASSETS.textures.soil); + soilTexture.wrapS = RepeatWrapping; + soilTexture.wrapT = RepeatWrapping; + soilTexture.repeat.set(0.00034, 0.00068); + const Bed = ({ children }: { children: React.ReactElement }) => { { steps: 1, depth: bedHeight, bevelEnabled: false }, ]} position={[ - 0, - 0, + threeSpace(0, bedLengthOuter), + threeSpace(0, bedWidthOuter), -bedStartZ, ]}> {children} ; const Soil = ({ children }: { children: React.ReactElement }) => { - const soilDepth = bedHeight + (soilHeight - 50) - soilHeight; + const soilDepth = bedHeight + zZero(props.config) - soilHeight; return { { steps: 1, depth: soilDepth, bevelEnabled: false }, ]} position={[ - 0, - 0, + threeSpace(0, bedLengthOuter), + threeSpace(0, bedWidthOuter), -bedStartZ, ]}> {children} @@ -128,44 +128,84 @@ export const Bed = (props: BedProps) => { }; return - - - + + + + + + + + + + + + + + + - + - + - - - + + + + + + + + {legXPositions.map((x, index) => - {legYPositions(index).map(y => { - const legTopOffset = legsFlush ? bedHeight / 2 : bedHeight; - return + { legSize, bedZOffset + (legsFlush ? bedHeight : 0) - casterHeight, ]}> - + - ; - })} + + )} )} + + ; }; diff --git a/frontend/three_d_garden/bot.tsx b/frontend/three_d_garden/bot.tsx new file mode 100644 index 0000000000..e1a0336573 --- /dev/null +++ b/frontend/three_d_garden/bot.tsx @@ -0,0 +1,921 @@ +/* eslint-disable complexity */ +import React, { useEffect, useState } from "react"; +import * as THREE from "three"; +import { + Cylinder, Extrude, Line, Trail, Tube, useGLTF, useTexture, +} from "@react-three/drei"; +import { DoubleSide, Shape, RepeatWrapping } from "three"; +import { + easyCubicBezierCurve3, threeSpace, zDir, zZero as zZeroFunc, +} from "./helpers"; +import { Config } from "./config"; +import { GLTF } from "three-stdlib"; +import { ASSETS, LIB_DIR, PartName } from "./constants"; +import { SVGLoader } from "three/examples/jsm/Addons.js"; +import { range } from "lodash"; +import { CrossSlide, CrossSlideFull } from "./parts/cross_slide"; +import { GantryWheelPlate, GantryWheelPlateFull } from "./parts/gantry_wheel_plate"; +import { RotaryTool, RotaryToolFull } from "./parts/rotary_tool"; +import { DistanceIndicator } from "./distance_indicator"; +import { VacuumPumpCover, VacuumPumpCoverFull } from "./parts/vacuum_pump_cover"; +import { SoilSensor, SoilSensorFull } from "./parts/soil_sensor"; +import { + SeedTroughAssembly, SeedTroughAssemblyFull, +} from "./parts/seed_trough_assembly"; +import { SeedTroughHolder, SeedTroughHolderFull } from "./parts/seed_trough_holder"; +import { PowerSupply } from "./power_supply"; +import { XAxisWaterTube } from "./x_axis_water_tube"; +import { Group, Mesh, MeshPhongMaterial } from "./components"; + +const extrusionWidth = 20; +const utmRadius = 35; +const utmHeight = 35; +const xTrackPadding = 280; + +type LeftBracket = GLTF & { + nodes: { [PartName.leftBracket]: THREE.Mesh }; + materials: never; +} +type RightBracket = GLTF & { + nodes: { [PartName.rightBracket]: THREE.Mesh }; + materials: never; +} +type ZStop = GLTF & { + nodes: { [PartName.zStop]: THREE.Mesh }; + materials: never; +} +type BeltClip = GLTF & { + nodes: { [PartName.beltClip]: THREE.Mesh }; + materials: never; +} +type UTM = GLTF & { + nodes: { [PartName.utm]: THREE.Mesh }; + materials: { PaletteMaterial001: THREE.MeshStandardMaterial }; +} +type CCHorizontal = GLTF & { + nodes: { [PartName.ccHorizontal]: THREE.Mesh }; + materials: never; +} +type CCVertical = GLTF & { + nodes: { [PartName.ccVertical]: THREE.Mesh }; + materials: never; +} +type HousingVertical = GLTF & { + nodes: { [PartName.housingVertical]: THREE.Mesh }; + materials: never; +} +type HorizontalMotorHousing = GLTF & { + nodes: { [PartName.horizontalMotorHousing]: THREE.Mesh }; + materials: { PaletteMaterial001: THREE.MeshStandardMaterial }; +} +type ZAxisMotorMount = GLTF & { + nodes: { [PartName.zAxisMotorMount]: THREE.Mesh }; + materials: { PaletteMaterial001: THREE.MeshStandardMaterial }; +} +type Toolbay3 = GLTF & { + nodes: { + [PartName.toolbay3]: THREE.Mesh; + [PartName.toolbay3Logo]: THREE.Mesh; + }; + materials: never; +} +type WateringNozzle = GLTF & { + nodes: { [PartName.wateringNozzle]: THREE.Mesh }; + materials: { PaletteMaterial001: THREE.MeshStandardMaterial }; +} +type SeedBin = GLTF & { + nodes: { [PartName.seedBin]: THREE.Mesh }; + materials: never; +} +type SeedTray = GLTF & { + nodes: { [PartName.seedTray]: THREE.Mesh }; + materials: never; +} +type CameraMountHalf = GLTF & { + nodes: { [PartName.cameraMountHalf]: THREE.Mesh }; + materials: never; +} +type Pi = GLTF & { + nodes: { [PartName.pi]: THREE.Mesh }; + materials: { PaletteMaterial001: THREE.MeshStandardMaterial }; +} +type Farmduino = GLTF & { + nodes: { [PartName.farmduino]: THREE.Mesh }; + materials: { PaletteMaterial001: THREE.MeshStandardMaterial }; +} +type Solenoid = GLTF & { + nodes: { [PartName.solenoid]: THREE.Mesh }; + materials: { PaletteMaterial001: THREE.MeshStandardMaterial }; +} +type XAxisCCMount = GLTF & { + nodes: { [PartName.xAxisCCMount]: THREE.Mesh }; + materials: never; +} + +Object.values(ASSETS.models).map(model => useGLTF.preload(model, LIB_DIR)); + +const ccPath = + (axisLength: number, y: number, curveDia: number, isX?: boolean) => { + const lowerLength = (y + axisLength + 180) / 2; + const upperLength = lowerLength - y; + const outerRadius = curveDia / 2; + const height = isX ? 15 : 20; + const innerRadius = outerRadius - height; + + const path = new Shape(); + path.moveTo(y + 20, 0); + path.lineTo(y + upperLength, 0); + path.arc(0, outerRadius, outerRadius, -Math.PI / 2, Math.PI / 2); + path.lineTo(0, curveDia); + path.lineTo(0, curveDia - 5); + path.lineTo(20, curveDia - height); + path.lineTo(lowerLength, curveDia - height); + path.arc(0, -innerRadius, innerRadius, Math.PI / 2, -Math.PI / 2, true); + if (isX) { + path.lineTo(y + 20, height - 1); + path.lineTo(y, 5); + path.lineTo(y, 0); + } else { + path.lineTo(y, height - 1); + path.lineTo(y, height - 5); + } + path.lineTo(y + 20, 0); + return path; + }; + +export interface FarmbotModelProps { + config: Config; + activeFocus: string; +} + +export const Bot = (props: FarmbotModelProps) => { + const config = props.config; + const { + x, y, z, botSizeX, botSizeY, botSizeZ, beamLength, trail, laser, soilHeight, + bedXOffset, bedYOffset, bedLengthOuter, bedWidthOuter, tracks, zDimension, + columnLength, zAxisLength, zGantryOffset, bedWallThickness, tool, bedHeight, + cableCarriers, bounds, + } = props.config; + const zZero = zZeroFunc(props.config); + const zero = { + x: threeSpace(bedXOffset, bedLengthOuter), + y: threeSpace(bedYOffset, bedWidthOuter), + z: zZero, + }; + const extents = { + x: threeSpace(bedXOffset + botSizeX, bedLengthOuter), + y: threeSpace(bedYOffset + botSizeY, bedWidthOuter), + z: zZero + zDir * botSizeZ, + }; + const zDip = (x: number, y: number): [number, number, number][] => [ + [x, y, extents.z], + [x, y, zero.z], + [x, y, extents.z], + ]; + const gantryWheelPlate = + useGLTF(ASSETS.models.gantryWheelPlate, LIB_DIR) as GantryWheelPlateFull; + const GantryWheelPlateComponent = GantryWheelPlate(gantryWheelPlate); + const leftBracket = useGLTF(ASSETS.models.leftBracket, LIB_DIR) as LeftBracket; + const rightBracket = useGLTF(ASSETS.models.rightBracket, LIB_DIR) as RightBracket; + const crossSlide = useGLTF(ASSETS.models.crossSlide, LIB_DIR) as CrossSlideFull; + const CrossSlideComponent = CrossSlide(crossSlide); + const beltClip = useGLTF(ASSETS.models.beltClip, LIB_DIR) as BeltClip; + const zStop = useGLTF(ASSETS.models.zStop, LIB_DIR) as ZStop; + const utm = useGLTF(ASSETS.models.utm, LIB_DIR) as UTM; + const ccHorizontal = useGLTF(ASSETS.models.ccHorizontal, LIB_DIR) as CCHorizontal; + const ccVertical = useGLTF(ASSETS.models.ccVertical, LIB_DIR) as CCVertical; + const housingVertical = useGLTF( + ASSETS.models.housingVertical, LIB_DIR) as HousingVertical; + const horizontalMotorHousing = useGLTF( + ASSETS.models.horizontalMotorHousing, LIB_DIR) as HorizontalMotorHousing; + const zAxisMotorMount = useGLTF( + ASSETS.models.zAxisMotorMount, LIB_DIR) as ZAxisMotorMount; + const toolbay3 = useGLTF(ASSETS.models.toolbay3, LIB_DIR) as Toolbay3; + const rotaryTool = useGLTF(ASSETS.models.rotaryTool, LIB_DIR) as RotaryToolFull; + const RotaryToolComponent = RotaryTool(rotaryTool); + const vacuumPumpCover = useGLTF( + ASSETS.models.vacuumPumpCover, LIB_DIR) as VacuumPumpCoverFull; + const VacuumPumpCoverComponent = VacuumPumpCover(vacuumPumpCover); + const seedBin = useGLTF(ASSETS.models.seedBin, LIB_DIR) as SeedBin; + const seedTray = useGLTF(ASSETS.models.seedTray, LIB_DIR) as SeedTray; + const seedTroughHolder = useGLTF( + ASSETS.models.seedTroughHolder, LIB_DIR) as SeedTroughHolderFull; + const SeedTroughHolderComponent = SeedTroughHolder(seedTroughHolder); + const seedTroughAssembly = useGLTF( + ASSETS.models.seedTroughAssembly, LIB_DIR) as SeedTroughAssemblyFull; + const SeedTroughAssemblyComponent = SeedTroughAssembly(seedTroughAssembly); + const soilSensor = useGLTF(ASSETS.models.soilSensor, LIB_DIR) as SoilSensorFull; + const SoilSensorComponent = SoilSensor(soilSensor); + const wateringNozzle = useGLTF( + ASSETS.models.wateringNozzle, LIB_DIR) as WateringNozzle; + const cameraMountHalf = useGLTF( + ASSETS.models.cameraMountHalf, LIB_DIR) as CameraMountHalf; + const pi = useGLTF(ASSETS.models.pi, LIB_DIR) as Pi; + const farmduino = useGLTF(ASSETS.models.farmduino, LIB_DIR) as Farmduino; + const solenoid = useGLTF(ASSETS.models.solenoid, LIB_DIR) as Solenoid; + const xAxisCCMount = useGLTF(ASSETS.models.xAxisCCMount, LIB_DIR) as XAxisCCMount; + const [trackShape, setTrackShape] = useState(); + const [beamShape, setBeamShape] = useState(); + const [columnShape, setColumnShape] = useState(); + const [zAxisShape, setZAxisShape] = useState(); + useEffect(() => { + if (!(trackShape && beamShape && columnShape && zAxisShape)) { + const loader = new SVGLoader(); + loader.load(ASSETS.shapes.track, + svg => { + const smallCutout = SVGLoader.createShapes(svg.paths[0])[0]; + const largeCutout = SVGLoader.createShapes(svg.paths[1])[0]; + const outline = SVGLoader.createShapes(svg.paths[2])[0]; + outline.holes.push(smallCutout); + outline.holes.push(largeCutout); + setTrackShape(outline); + }); + loader.load(ASSETS.shapes.beam, + svg => { + const outline = SVGLoader.createShapes(svg.paths[0])[0]; + range(1, 6).map(i => { + const hole = SVGLoader.createShapes(svg.paths[i])[0]; + outline.holes.push(hole); + }); + setBeamShape(outline); + }); + loader.load(ASSETS.shapes.column, + svg => { + const outline = SVGLoader.createShapes(svg.paths[3])[0]; + range(3).map(i => { + const hole = SVGLoader.createShapes(svg.paths[i])[0]; + outline.holes.push(hole); + }); + setColumnShape(outline); + }); + loader.load(ASSETS.shapes.zAxis, + svg => { + const hole = SVGLoader.createShapes(svg.paths[1])[0]; + const outline = SVGLoader.createShapes(svg.paths[0])[0]; + outline.holes.push(hole); + setZAxisShape(outline); + }); + } + }); + const aluminumTexture = useTexture(ASSETS.textures.aluminum); + aluminumTexture.wrapS = RepeatWrapping; + aluminumTexture.wrapT = RepeatWrapping; + aluminumTexture.repeat.set(0.01, 0.0003); + + const yBeltPath = () => { + const radius = 12; + const path = new Shape(); + path.moveTo(0, 0); + path.lineTo(0, y + 30); + path.arc(radius, -5, radius, Math.PI, Math.PI / 2, true); + path.lineTo(45, y + 30); + path.arc(0, 10, 10, -Math.PI / 2, Math.PI / 4); + path.lineTo(0, y + 100); + path.arc(radius, 5, radius, (-3 / 4) * Math.PI, Math.PI, true); + path.lineTo(0, botSizeY + 220); + path.lineTo(-2, botSizeY + 220); + path.lineTo(-2, y + 100); + path.arc(radius, 4, radius, Math.PI, (-3 / 4) * Math.PI); + path.lineTo(45, y + 50); + path.arc(0, -10, 8, Math.PI / 4, -Math.PI / 2, true); + path.lineTo(radius, y + 40); + path.arc(-2, -radius, radius, Math.PI / 2, Math.PI); + path.lineTo(-2, 0); + return path; + }; + const distanceToSoil = soilHeight + zDir * z; + const bedCCSupportHeight = Math.min(150, bedHeight / 2); + const isJr = props.config.sizePreset == "Jr"; + return + {[0 - extrusionWidth, bedWidthOuter].map((y, index) => { + const bedColumnYOffset = + (tracks ? 0 : extrusionWidth) * (index == 0 ? 1 : -1); + return + + + + + + + + + + + + + + + + + + + + + + + + ; + })} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {range((zAxisLength - 350) / 200).map(i => + + + )} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {range((botSizeY - 10) / 300).map(i => + + + )} + + + + + + + + + + + + + + + + + + + + + + + + {(isJr ? [0] : [-200, 200]).map(yPosition => + + {[ + { node: PartName.toolbay3, color: "black", id: "toolbay3" }, + { node: PartName.toolbay3Logo, color: "white", id: "toolbay3Logo" }, + ].map(part => + + + )} + )} + + + + + + + + + + + + + + + + + ; +}; diff --git a/frontend/three_d_garden/button.tsx b/frontend/three_d_garden/button.tsx new file mode 100644 index 0000000000..68c973be4b --- /dev/null +++ b/frontend/three_d_garden/button.tsx @@ -0,0 +1,86 @@ +import React from "react"; +import * as THREE from "three"; +import { Box, Text } from "@react-three/drei"; +import { BufferGeometry } from "three"; +import { ASSETS } from "./constants"; +import { Group, MeshPhongMaterial } from "./components"; + +export interface PresetButtonProps { + preset: string; + choosePreset(preset: string): () => void; + hovered: string; + setHovered(preset: string): void; + startPosition: Record<"x" | "y" | "z", number>; + index: number; +} + +export const PresetButton = (props: PresetButtonProps) => { + const { preset, choosePreset, hovered, setHovered, startPosition, index } = props; + const btnHeight = 50; + const btnZ = 0; + const textZ = btnHeight / 2 + 1; + return { + choosePreset(preset)(); + }}> + + changeItemsInGroup(e.object.parent as MeshObject, object => { + if (object.name == "btn") { + object.position.z = btnZ - 10; + } else { + object.position.z = textZ - 10; + } + })} + onPointerOver={() => { + setHovered(preset); + document.body.style.cursor = "pointer"; + }} + onPointerUp={e => + changeItemsInGroup(e.object.parent as MeshObject, object => { + if (object.name == "btn") { + object.position.z = btnZ; + } else { + object.position.z = textZ; + } + })} + onPointerLeave={() => { + document.body.style.cursor = "default"; + setHovered(""); + }}> + + + + + {preset} + + + ; +}; + +const changeItemsInGroup = ( + meshObject: MeshObject, + cb: (x: MeshObject) => void, +) => { + meshObject.children.map(child => { + const object = child as MeshObject; + cb(object); + changeItemsInGroup(object, cb); + }); +}; + +type MeshObject = THREE.Mesh; diff --git a/frontend/three_d_garden/caster.tsx b/frontend/three_d_garden/caster.tsx new file mode 100644 index 0000000000..63d962bdb8 --- /dev/null +++ b/frontend/three_d_garden/caster.tsx @@ -0,0 +1,58 @@ +import React from "react"; +import { Extrude, Cylinder } from "@react-three/drei"; +import { Shape } from "three"; +import { Config } from "./config"; +import { Group, MeshPhongMaterial } from "./components"; + +export interface CasterProps { + config: Config; +} + +export const Caster = (props: CasterProps) => { + const { + bedHeight, bedZOffset, legSize, legsFlush, + } = props.config; + const casterHeight = legSize * 1.375; + const casterBracket2D = () => { + const shape = new Shape(); + shape.moveTo(0, 0); + shape.lineTo(legSize, 0); + shape.lineTo(legSize / 3 * 2, -legSize); + shape.lineTo(legSize / 3, -legSize); + shape.lineTo(0, 0); + return shape; + }; + return + + + + + + + + + + + + ; +}; diff --git a/frontend/three_d_garden/components.tsx b/frontend/three_d_garden/components.tsx index 954c54e5ab..9342a95413 100644 --- a/frontend/three_d_garden/components.tsx +++ b/frontend/three_d_garden/components.tsx @@ -1,11 +1,16 @@ import React from "react"; import { AmbientLightProps, + AxesHelperProps, + BoxGeometryProps, DirectionalLightProps, GroupProps, + InstancedMeshProps, + MeshBasicMaterialProps, MeshPhongMaterialProps, MeshProps, PointLightProps, + PrimitiveProps, } from "@react-three/fiber"; // Workaround to avoid disabling no-unknown-property rule @@ -28,3 +33,18 @@ export const PointLight = (props: PointLightProps) => export const MeshPhongMaterial = (props: MeshPhongMaterialProps) => ; + +export const InstancedMesh = (props: InstancedMeshProps) => + ; + +export const Primitive = (props: PrimitiveProps) => + ; + +export const BoxGeometry = (props: BoxGeometryProps) => + ; + +export const MeshBasicMaterial = (props: MeshBasicMaterialProps) => + ; + +export const AxesHelper = (props: AxesHelperProps) => + ; diff --git a/frontend/three_d_garden/config.ts b/frontend/three_d_garden/config.ts index e809ad295c..be985fd7da 100644 --- a/frontend/three_d_garden/config.ts +++ b/frontend/three_d_garden/config.ts @@ -61,6 +61,10 @@ export interface Config { people: boolean; scene: string; lowDetail: boolean; + eventDebug: boolean; + cableDebug: boolean; + zoomBeaconDebug: boolean; + animate: boolean; } export const INITIAL: Config = { @@ -126,6 +130,10 @@ export const INITIAL: Config = { people: false, scene: "Outdoor", lowDetail: false, + eventDebug: false, + cableDebug: false, + zoomBeaconDebug: false, + animate: true, }; export const STRING_KEYS = [ @@ -145,7 +153,8 @@ export const BOOLEAN_KEYS = [ "tracks", "clouds", "perspective", "bot", "laser", "cableCarriers", "viewCube", "stats", "config", "zoom", "pan", "bounds", "threeAxes", "xyDimensions", "zDimension", "promoInfo", "solar", "utilitiesPost", - "packaging", "lab", "people", "lowDetail", + "packaging", "lab", "people", "lowDetail", "eventDebug", "cableDebug", + "zoomBeaconDebug", "animate", ]; export const PRESETS: Record = { @@ -257,6 +266,10 @@ export const PRESETS: Record = { people: false, scene: "Outdoor", lowDetail: false, + eventDebug: false, + cableDebug: false, + zoomBeaconDebug: false, + animate: true, }, "Maximal": { ...INITIAL, @@ -302,6 +315,10 @@ export const PRESETS: Record = { people: true, scene: "outdoor", lowDetail: false, + eventDebug: false, + cableDebug: true, + zoomBeaconDebug: true, + animate: true, }, }; @@ -320,6 +337,7 @@ const OTHER_CONFIG_KEYS: (keyof Config)[] = [ "tool", "cableCarriers", "viewCube", "stats", "config", "zoom", "bounds", "threeAxes", "xyDimensions", "zDimension", "labelsOnHover", "promoInfo", "pan", "solar", "utilitiesPost", "packaging", "lab", "people", "scene", "lowDetail", + "eventDebug", "cableDebug", "zoomBeaconDebug", "animate", ]; export const modifyConfig = (config: Config, update: Partial) => { @@ -408,3 +426,6 @@ export const seasonProperties: Record = { Summer: { sunIntensity: 9 / 4, sunColor: "#FFFFFF", cloudOpacity: 0 }, Fall: { sunIntensity: 5.5 / 4, sunColor: "#FFD6BC", cloudOpacity: 0.3 }, }; + +export const detailLevels = (config: Config) => + config.lowDetail ? [0, 0] : [0, 25000]; diff --git a/frontend/three_d_garden/config_overlays.tsx b/frontend/three_d_garden/config_overlays.tsx new file mode 100644 index 0000000000..2b63c47999 --- /dev/null +++ b/frontend/three_d_garden/config_overlays.tsx @@ -0,0 +1,352 @@ +import React from "react"; +import { Config, modifyConfig } from "./config"; +import { setUrlParam } from "./zoom_beacons_constants"; +import { ExternalUrl } from "../external_urls"; + +export interface ToolTip { + timeoutId: number; + text: string; +} + +export interface OverlayProps { + config: Config; + setConfig(config: Config): void; + toolTip: ToolTip; + setToolTip(tooltip: ToolTip): void; + activeFocus: string; + setActiveFocus(focus: string): void; +} + +interface SectionProps { + title: string; + configKey: keyof Config; + options: Record; +} + +export const PublicOverlay = (props: OverlayProps) => { + const { config, setConfig, toolTip, setToolTip } = props; + + const Section = (sectionProps: SectionProps) => { + const { title, configKey, options } = sectionProps; + return
+
{title}
+
+ {Object.entries(options).map(([preset, label]) => { + const active = label == config[configKey]; + const disabled = label == "Mobile" + && config.sizePreset == "Genesis XL"; + const className = [ + preset, + active ? "active" : "", + disabled ? "disabled" : "", + ].join(" "); + const update = { [configKey]: label }; + return ; + })} +
+
; + }; + + return
+ {!props.activeFocus && +
+
+
+
+
+
} + {config.promoInfo && !props.activeFocus && + } +
; +}; + +interface PromoInfoProps { + isGenesis: boolean; +} + +const PromoInfo = (props: PromoInfoProps) => { + const { isGenesis } = props; + return
+

Explore our models

+ {isGenesis + ?
+

+ FarmBot Genesis is our flagship kit for prosumers and enthusiasts. +

+

+ FarmBot Genesis is our flagship kit for prosumers and enthusiasts + featuring our most advanced technology, features, and options. + Coming 90% pre-assembled in the box, Genesis can be installed on + an existing raised bed in an afternoon. It is suitable for fixed + or mobile raised beds in classrooms, research labs, and backyards. +

+
+ :
+

+ Covering 400% the area, Genesis XL can grow enough veggies for a + family of four. +

+

+ Covering 400% the area, FarmBot Genesis XL can grow enough veggies + for a family of four, provides ample room for student competitions, + and can take research experiments to new scale. Suitable for fixed + installations at home, farm to fork restaurants, schools and + universities, and commercial research facilities. +

+
} + +

Order Genesis

+

+ XL +

+
+
; +}; + +interface ConfigRowProps { + configKey: keyof Config; + children: React.ReactNode; +} + +const ConfigRow = (props: ConfigRowProps) => { + const { configKey } = props; + return
+ {configKey} + {props.children} +
; +}; + +export const maybeAddParam = + (paramAdd: boolean, configKey: string, value: string) => + paramAdd && setUrlParam(configKey, value); + +interface SliderProps extends OverlayProps { + configKey: keyof Config; + min: number; + max: number; + paramAdd: boolean; +} + +const Slider = (props: SliderProps) => { + const { config, setConfig, configKey, min, max } = props; + const change = (e: React.ChangeEvent) => { + const newValue = parseInt(e.target.value); + if (isNaN(newValue)) { return; } + const update = { [configKey]: newValue }; + setConfig(modifyConfig(config, update)); + maybeAddParam(props.paramAdd, configKey, "" + newValue); + }; + const value = config[configKey] as number; + return + + + ; +}; + +interface ToggleProps extends OverlayProps { + configKey: keyof Config; + paramAdd: boolean; +} + +const Toggle = (props: ToggleProps) => { + const { config, setConfig, configKey } = props; + return + { + const newValue = e.target.checked; + const update = { [configKey]: newValue }; + setConfig(modifyConfig(config, update)); + maybeAddParam(props.paramAdd, configKey, "" + newValue); + }} + /> + ; +}; + +interface RadioProps extends OverlayProps { + configKey: keyof Config; + options: string[]; + paramAdd: boolean; +} + +const Radio = (props: RadioProps) => { + const { config, setConfig, configKey, options } = props; + const change = (e: React.ChangeEvent) => { + const newValue = e.target.value; + const update = { [configKey]: newValue }; + setConfig(modifyConfig(config, update)); + maybeAddParam(props.paramAdd, configKey, "" + newValue); + }; + return +
+ {options.map(value => +
+ + +
)} +
+
; +}; + +export const PrivateOverlay = (props: OverlayProps) => { + const bedMin = props.config.bedWallThickness * 2; + const { config, setConfig } = props; + const [paramAdd, setParamAdd] = React.useState(false); + const common = { ...props, paramAdd }; + return
+
+ + {"Configs"} +

setConfig(modifyConfig(config, { config: false }))}> + X +

+
+
+
+ {"auto-add to URL"} + setParamAdd(e.target.checked)} /> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
; +}; diff --git a/frontend/three_d_garden/constants.ts b/frontend/three_d_garden/constants.ts new file mode 100644 index 0000000000..4a435e44cd --- /dev/null +++ b/frontend/three_d_garden/constants.ts @@ -0,0 +1,447 @@ +/* eslint-disable max-len */ +import { sampleSize } from "lodash"; + +export const LIB_DIR = "/3D/lib/"; + +export const ASSETS = { + fonts: { + cabinBold: "/3D/fonts/Cabin_Bold.ttf", + }, + textures: { + cloud: "/3D/textures/cloud.avif", + grass: "/3D/textures/grass.avif", + wood: "/3D/textures/wood.avif", + soil: "/3D/textures/soil.avif", + aluminum: "/3D/textures/aluminum.avif", + concrete: "/3D/textures/concrete.avif", + screen: "/3D/textures/screen.avif", + }, + icons: { + anaheimPepper: "/3D/icons/anaheim_pepper.avif", + arugula: "/3D/icons/arugula.avif", + basil: "/3D/icons/basil.avif", + beet: "/3D/icons/beet.avif", + bibbLettuce: "/3D/icons/bibb_lettuce.avif", + bokChoy: "/3D/icons/bok_choy.avif", + broccoli: "/3D/icons/broccoli.avif", + brusselsSprout: "/3D/icons/brussels_sprout.avif", + carrot: "/3D/icons/carrot.avif", + cauliflower: "/3D/icons/cauliflower.avif", + celery: "/3D/icons/celery.avif", + chard: "/3D/icons/swiss_chard.avif", + cherryBelleRadish: "/3D/icons/cherry_belle_radish.avif", + cilantro: "/3D/icons/cilantro.avif", + collardGreens: "/3D/icons/collard_greens.avif", + cucumber: "/3D/icons/cucumber.avif", + eggplant: "/3D/icons/eggplant.avif", + frenchBreakfastRadish: "/3D/icons/french_breakfast_radish.avif", + garlic: "/3D/icons/garlic.avif", + goldenBeet: "/3D/icons/golden_beet.avif", + hillbillyTomato: "/3D/icons/hillbilly_tomato.avif", + icicleRadish: "/3D/icons/icicle_radish.avif", + lacinatoKale: "/3D/icons/lacinato_kale.avif", + leek: "/3D/icons/leek.avif", + napaCabbage: "/3D/icons/napa_cabbage.avif", + okra: "/3D/icons/okra.avif", + parsnip: "/3D/icons/parsnip.avif", + rainbowChard: "/3D/icons/rainbow_chard.avif", + redBellPepper: "/3D/icons/red_bell_pepper.avif", + redCurlyKale: "/3D/icons/red_curly_kale.avif", + redRussianKale: "/3D/icons/red_russian_kale.avif", + runnerBean: "/3D/icons/runner_bean.avif", + rutabaga: "/3D/icons/rutabaga.avif", + savoyCabbage: "/3D/icons/savoy_cabbage.avif", + shallot: "/3D/icons/shallot.avif", + snapPea: "/3D/icons/snap_pea.avif", + spinach: "/3D/icons/spinach.avif", + sweetPotato: "/3D/icons/sweet_potato.avif", + turmeric: "/3D/icons/turmeric.avif", + turnip: "/3D/icons/turnip.avif", + yellowOnion: "/3D/icons/yellow_onion.avif", + zucchini: "/3D/icons/zucchini.avif", + }, + shapes: { + track: "/3D/shapes/track.svg", + column: "/3D/shapes/column.svg", + beam: "/3D/shapes/beam.svg", + zAxis: "/3D/shapes/z_axis.svg", + }, + models: { + gantryWheelPlate: "/3D/models/gantry_wheel_plate.glb", + leftBracket: "/3D/models/left_bracket.glb", + rightBracket: "/3D/models/right_bracket.glb", + crossSlide: "/3D/models/cross_slide.glb", + beltClip: "/3D/models/belt_clip.glb", + zStop: "/3D/models/z_stop.glb", + utm: "/3D/models/utm.glb", + ccHorizontal: "/3D/models/cc_horizontal.glb", + ccVertical: "/3D/models/cc_vertical.glb", + housingVertical: "/3D/models/housing_vertical.glb", + horizontalMotorHousing: "/3D/models/horizontal_motor_housing.glb", + zAxisMotorMount: "/3D/models/z_axis_motor_mount.glb", + toolbay3: "/3D/models/toolbay_3.glb", + rotaryTool: "/3D/models/rotary_tool.glb", + seeder: "/3D/models/seeder.glb", + seedTray: "/3D/models/seed_tray.glb", + seedBin: "/3D/models/seed_bin.glb", + seedTroughAssembly: "/3D/models/seed_trough_assembly.glb", + seedTroughHolder: "/3D/models/seed_trough_holder.glb", + soilSensor: "/3D/models/soil_sensor.glb", + wateringNozzle: "/3D/models/watering_nozzle.glb", + vacuumPumpCover: "/3D/models/vacuum_pump_cover.glb", + pi: "/3D/models/pi.glb", + farmduino: "/3D/models/farmduino.glb", + cameraMountHalf: "/3D/models/camera_mount_half.glb", + solenoid: "/3D/models/solenoid.glb", + xAxisCCMount: "/3D/models/x_axis_cc_mount.glb", + box: "/3d/models/box.glb", + btn: "/3d/models/push_button.glb", + led: "/3d/models/led_indicator.glb", + }, + other: { + gear: "/app-resources/img/icons/settings.svg", + }, + people: { + person1: "/3D/people/person_1.avif", + person1Flipped: "/3D/people/person_1_flipped.avif", + person2: "/3D/people/person_2.avif", + person2Flipped: "/3D/people/person_2_flipped.avif", + }, +}; + +interface Plant { + label: string; + icon: string; + spread: number; + size: number; +} + +interface Gardens { + [key: string]: string[]; +} + +export const PLANTS: Record = { + anaheimPepper: { + label: "Anaheim Pepper", + icon: ASSETS.icons.anaheimPepper, + spread: 400, + size: 150, + }, + arugula: { + label: "Arugula", + icon: ASSETS.icons.arugula, + spread: 250, + size: 180, + }, + basil: { + label: "Basil", + icon: ASSETS.icons.basil, + spread: 250, + size: 160, + }, + beet: { + label: "Beet", + icon: ASSETS.icons.beet, + spread: 175, + size: 150, + }, + bibbLettuce: { + label: "Bibb Lettuce", + icon: ASSETS.icons.bibbLettuce, + spread: 250, + size: 200, + }, + bokChoy: { + label: "Bok Choy", + icon: ASSETS.icons.bokChoy, + spread: 210, + size: 160, + }, + broccoli: { + label: "Broccoli", + icon: ASSETS.icons.broccoli, + spread: 375, + size: 250, + }, + brusselsSprout: { + label: "Brussels Sprout", + icon: ASSETS.icons.brusselsSprout, + spread: 300, + size: 250, + }, + carrot: { + label: "Carrot", + icon: ASSETS.icons.carrot, + spread: 150, + size: 125, + }, + cauliflower: { + label: "Cauliflower", + icon: ASSETS.icons.cauliflower, + spread: 400, + size: 250, + }, + celery: { + label: "Celery", + icon: ASSETS.icons.celery, + spread: 350, + size: 200, + }, + chard: { + label: "Swiss Chard", + icon: ASSETS.icons.chard, + spread: 300, + size: 300, + }, + cherryBelleRadish: { + label: "Cherry Belle Radish", + icon: ASSETS.icons.cherryBelleRadish, + spread: 100, + size: 100, + }, + cilantro: { + label: "Cilantro", + icon: ASSETS.icons.cilantro, + spread: 180, + size: 150, + }, + collardGreens: { + label: "Collard Greens", + icon: ASSETS.icons.collardGreens, + spread: 230, + size: 230, + }, + cucumber: { + label: "Cucumber", + icon: ASSETS.icons.cucumber, + spread: 400, + size: 200, + }, + eggplant: { + label: "Eggplant", + icon: ASSETS.icons.eggplant, + spread: 400, + size: 200, + }, + frenchBreakfastRadish: { + label: "French Breakfast Radish", + icon: ASSETS.icons.frenchBreakfastRadish, + spread: 100, + size: 100, + }, + garlic: { + label: "Garlic", + icon: ASSETS.icons.garlic, + spread: 175, + size: 100, + }, + goldenBeet: { + label: "Golden Beet", + icon: ASSETS.icons.goldenBeet, + spread: 175, + size: 150, + }, + hillbillyTomato: { + label: "Hillbilly Tomato", + icon: ASSETS.icons.hillbillyTomato, + spread: 400, + size: 200, + }, + icicleRadish: { + label: "Icicle Radish", + icon: ASSETS.icons.icicleRadish, + spread: 100, + size: 100, + }, + lacinatoKale: { + label: "Lacinato Kale", + icon: ASSETS.icons.lacinatoKale, + spread: 250, + size: 220, + }, + leek: { + label: "Leek", + icon: ASSETS.icons.leek, + spread: 200, + size: 200, + }, + napaCabbage: { + label: "Napa Cabbage", + icon: ASSETS.icons.napaCabbage, + spread: 400, + size: 220, + }, + okra: { + label: "Okra", + icon: ASSETS.icons.okra, + spread: 400, + size: 200, + }, + parsnip: { + label: "Parsnip", + icon: ASSETS.icons.parsnip, + spread: 180, + size: 120, + }, + rainbowChard: { + label: "Rainbow Chard", + icon: ASSETS.icons.rainbowChard, + spread: 250, + size: 250, + }, + redBellPepper: { + label: "Red Bell Pepper", + icon: ASSETS.icons.redBellPepper, + spread: 350, + size: 200, + }, + redCurlyKale: { + label: "Red Curly Kale", + icon: ASSETS.icons.redCurlyKale, + spread: 350, + size: 220, + }, + redRussianKale: { + label: "Red Russian Kale", + icon: ASSETS.icons.redRussianKale, + spread: 250, + size: 200, + }, + runnerBean: { + label: "Runner Bean", + icon: ASSETS.icons.runnerBean, + spread: 350, + size: 200, + }, + rutabaga: { + label: "Rutabaga", + icon: ASSETS.icons.rutabaga, + spread: 200, + size: 150, + }, + savoyCabbage: { + label: "Savoy Cabbage", + icon: ASSETS.icons.savoyCabbage, + spread: 400, + size: 250, + }, + shallot: { + label: "Shallot", + icon: ASSETS.icons.shallot, + spread: 200, + size: 140, + }, + snapPea: { + label: "Snap Pea", + icon: ASSETS.icons.snapPea, + spread: 200, + size: 150, + }, + spinach: { + label: "Spinach", + icon: ASSETS.icons.spinach, + spread: 250, + size: 200, + }, + sweetPotato: { + label: "Sweet Potato", + icon: ASSETS.icons.sweetPotato, + spread: 400, + size: 180, + }, + turmeric: { + label: "Turmeric", + icon: ASSETS.icons.turmeric, + spread: 250, + size: 150, + }, + turnip: { + label: "Turnip", + icon: ASSETS.icons.turnip, + spread: 175, + size: 150, + }, + yellowOnion: { + label: "Yellow Onion", + icon: ASSETS.icons.yellowOnion, + spread: 200, + size: 150, + }, + zucchini: { + label: "Zucchini", + icon: ASSETS.icons.zucchini, + spread: 400, + size: 250, + }, +}; + +export const GARDENS: Gardens = { + "Spring": [ + "beet", "bibbLettuce", "broccoli", "carrot", "cauliflower", "rainbowChard", + "icicleRadish", "redRussianKale", "bokChoy", "spinach", "snapPea", + ], + "Summer": [ + "anaheimPepper", "basil", "cucumber", "eggplant", "hillbillyTomato", "okra", + "redBellPepper", "runnerBean", "sweetPotato", "zucchini", + ], + "Fall": [ + "arugula", "cherryBelleRadish", "cilantro", "collardGreens", "garlic", + "goldenBeet", "leek", "lacinatoKale", "turnip", "yellowOnion", + ], + "Winter": [ + "frenchBreakfastRadish", "napaCabbage", "parsnip", "redCurlyKale", + "rutabaga", "savoyCabbage", "shallot", "turmeric", "celery", "brusselsSprout", + ], + "Random": sampleSize(Object.keys(PLANTS), 20), +}; + +export enum SeedTroughAssemblyMaterial { + zero = "0.800000_0.800000_0.800000_0.000000_0.000000", + one = "0.400000_0.400000_0.400000_0.000000_0.000000", + two = "0.603922_0.647059_0.686275_0.000000_0.000000", +} + +export enum SeedTroughHolderMaterial { + zero = "0.603922_0.647059_0.686275_0.000000_0.000000", + one = "0.800000_0.800000_0.800000_0.000000_0.000000", +} + +export enum VacuumPumpCoverMaterial { + zero = "0.800000_0.800000_0.800000_0.000000_0.000000", + one = "0.603922_0.647059_0.686275_0.000000_0.000000", +} + +export enum PartName { + gantryWheelPlate = "Gantry_Wheel_Plate", + leftBracket = "Left_Gantry_Corner_Bracket", + rightBracket = "Right_Gantry_Corner_Bracket", + crossSlide = "Cross-Slide_Plate", + zStop = "Z-Axis_Hardstop", + beltClip = "Belt_Clip_-_Slim", + utm = "M5_Barb", + ccHorizontal = "60mm_Horizontal_Cable_Carrier_Support", + ccVertical = "60mm_Vertical_Cable_Carrier_Support", + housingVertical = "80mm_Vertical_Motor_Housing", + horizontalMotorHousing = "75mm_Horizontal_Motor_Housing", + zAxisMotorMount = "Z-Axis_Motor_Mount", + toolbay3 = "mesh0_mesh", + toolbay3Logo = "mesh0_mesh_1", + seeder = "Seeder_Brass_Insert", + vacuumPump = "Lower_Vacuum_Tube", + wateringNozzle = "M5_x_30mm_Screw", + seedBin = "Seed_Bin", + seedTray = "Seed_Tray", + cameraMountHalf = "Camera_Mount_Half", + pi = "Raspberry_Pi_4B", + farmduino = "Farmduino", + solenoid = "200mm_Zip_Tie", + xAxisCCMount = "X-Axis_CC_Mount", +} + +export enum ElectronicsBoxMaterial { + box = "0.901961_0.901961_0.901961_0.000000_0.000000", + gasket = "0.301961_0.301961_0.301961_0.000000_0.000000", + lid = "0.564706_0.811765_0.945098_0.000000_0.623529", + button = "0.701961_0.701961_0.701961_0.000000_0.000000", + led = "0.600000_0.600000_0.600000_0.000000_0.000000", +} diff --git a/frontend/three_d_garden/desk.tsx b/frontend/three_d_garden/desk.tsx new file mode 100644 index 0000000000..bcedb8652e --- /dev/null +++ b/frontend/three_d_garden/desk.tsx @@ -0,0 +1,109 @@ +import React from "react"; +import { RepeatWrapping } from "three"; +import { Box, useTexture } from "@react-three/drei"; +import { ASSETS } from "./constants"; +import { threeSpace } from "./helpers"; +import { Config } from "./config"; +import { Group, MeshPhongMaterial } from "./components"; + +export interface DeskProps { + config: Config; + activeFocus: string; +} + +const deskWidth = 1000; +const deskDepth = 500; +const deskHeight = 550; +const deskOffset = 800; +const deskLegWidth = 50; +const deskWoodDarkness = "#666"; + +export const Desk = (props: DeskProps) => { + const { config } = props; + const zGround = -config.bedZOffset - config.bedHeight; + const woodTexture = useTexture(ASSETS.textures.wood); + woodTexture.wrapS = RepeatWrapping; + woodTexture.wrapT = RepeatWrapping; + woodTexture.repeat.set(0.3, 0.3); + const screenTexture = useTexture(ASSETS.textures.screen); + screenTexture.rotation = Math.PI / 2; + screenTexture.wrapT = RepeatWrapping; + return + + + + + {[ + [(-deskDepth + deskLegWidth) / 2, (-deskWidth + deskLegWidth) / 2], + [(-deskDepth + deskLegWidth) / 2, (deskWidth - deskLegWidth) / 2], + [(deskDepth - deskLegWidth) / 2, (-deskWidth + deskLegWidth) / 2], + [(deskDepth - deskLegWidth) / 2, (deskWidth - deskLegWidth) / 2], + ].map(([xOffset, yOffset], index) => + + + )} + + + + + + + + + + + + + + + + + + + + + + + ; +}; diff --git a/frontend/three_d_garden/distance_indicator.tsx b/frontend/three_d_garden/distance_indicator.tsx new file mode 100644 index 0000000000..93f2bf7281 --- /dev/null +++ b/frontend/three_d_garden/distance_indicator.tsx @@ -0,0 +1,47 @@ +import React from "react"; +import { Box, Text } from "@react-three/drei"; +import { ASSETS } from "./constants"; +import { Arrow } from "./arrow"; +import { Group, MeshPhongMaterial } from "./components"; + +export interface DistanceIndicatorProps { + start: Record<"x" | "y" | "z", number>; + end: Record<"x" | "y" | "z", number>; + visible?: boolean; +} + +export const DistanceIndicator = (props: DistanceIndicatorProps) => { + const { start, end } = props; + const dx = end.x - start.x; + const dy = end.y - start.y; + const dz = end.z - start.z; + const distance = Math.sqrt(dx ** 2 + dy ** 2 + dz ** 2); + const midX = (start.x + end.x) / 2; + const midY = (start.y + end.y) / 2; + const midZ = (start.z + end.z) / 2; + const angleY = Math.atan2(dz, dx); + const angleZ = Math.atan2(dy, dx); + return + + + + + + + + {distance.toFixed(0)}mm + + + ; +}; diff --git a/frontend/three_d_garden/farmbot_axes.tsx b/frontend/three_d_garden/farmbot_axes.tsx new file mode 100644 index 0000000000..275e732b18 --- /dev/null +++ b/frontend/three_d_garden/farmbot_axes.tsx @@ -0,0 +1,25 @@ +import React from "react"; +import { Config } from "./config"; +import { Arrow } from "./arrow"; +import { threeSpace, zZero } from "./helpers"; +import { Group } from "./components"; + +export interface FarmbotAxesProps { + config: Config; +} + +export const FarmbotAxes = (props: FarmbotAxesProps) => { + const { + bedLengthOuter, bedXOffset, bedWidthOuter, bedYOffset, + } = props.config; + const length = 150; + const width = 15; + const x = threeSpace(0, bedLengthOuter) + bedXOffset; + const y = threeSpace(0, bedWidthOuter) + bedYOffset; + const z = zZero(props.config); + return + + + + ; +}; diff --git a/frontend/three_d_garden/garden.tsx b/frontend/three_d_garden/garden.tsx new file mode 100644 index 0000000000..ee1d475d96 --- /dev/null +++ b/frontend/three_d_garden/garden.tsx @@ -0,0 +1,259 @@ +import React from "react"; +import { ThreeEvent } from "@react-three/fiber"; +import { + GizmoHelper, GizmoViewcube, + OrbitControls, PerspectiveCamera, + Circle, Stats, Billboard, Text, Image, Clouds, Cloud, OrthographicCamera, + Detailed, Sphere, + useTexture, +} from "@react-three/drei"; +import { RepeatWrapping, Vector3, BackSide } from "three"; +import { Bot } from "./bot"; +import { Bed } from "./bed"; +import { threeSpace, zZero } from "./helpers"; +import { Sky } from "./sky"; +import { Config, detailLevels, seasonProperties } from "./config"; +import { ASSETS, GARDENS, PLANTS } from "./constants"; +import { useSpring, animated } from "@react-spring/three"; +import { Solar } from "./solar"; +import { Sun, sunPosition } from "./sun"; +import { Lab } from "./lab"; +import { ZoomBeacons } from "./zoom_beacons"; +import { getCamera, Camera as CameraInterface } from "./zoom_beacons_constants"; +import { + AmbientLight, AxesHelper, Group, MeshBasicMaterial, MeshPhongMaterial, +} from "./components"; + +export interface GardenModelProps { + config: Config; + activeFocus: string; + setActiveFocus(focus: string): void; + showBeacons: boolean; +} + +interface Plant { + label: string; + icon: string; + size: number; + spread: number; + x: number; + y: number; +} + +export const GardenModel = (props: GardenModelProps) => { + const { config } = props; + const groundZ = config.bedZOffset + config.bedHeight; + const Camera = config.perspective ? PerspectiveCamera : OrthographicCamera; + + const gardenPlants = GARDENS[config.plants] || []; + const calculatePlantPositions = (): Plant[] => { + const positions: Plant[] = []; + const startX = 350; + let nextX = startX; + let index = 0; + while (nextX <= config.bedLengthOuter - 100) { + const plantKey = gardenPlants[index]; + const plant = PLANTS[plantKey]; + if (!plant) { return []; } + positions.push({ + ...plant, + x: nextX, + y: config.bedWidthOuter / 2, + }); + const plantsPerHalfRow = + Math.ceil((config.bedWidthOuter - plant.spread) / 2 / plant.spread); + for (let i = 1; i < plantsPerHalfRow; i++) { + positions.push({ + ...plant, + x: nextX, + y: config.bedWidthOuter / 2 + plant.spread * i, + }); + positions.push({ + ...plant, + x: nextX, + y: config.bedWidthOuter / 2 - plant.spread * i, + }); + } + if (index + 1 < gardenPlants.length) { + const nextPlant = PLANTS[gardenPlants[index + 1]]; + nextX += (plant.spread / 2) + (nextPlant.spread / 2); + index++; + } else { + index = 0; + const nextPlant = PLANTS[gardenPlants[0]]; + nextX += (plant.spread / 2) + (nextPlant.spread / 2); + } + } + return positions; + }; + const plants = calculatePlantPositions(); + + const [hoveredPlant, setHoveredPlant] = + React.useState(undefined); + + const getI = (e: ThreeEvent) => + e.buttons ? -1 : parseInt(e.intersections[0].object.name); + + const setHover = (active: boolean) => { + return config.labelsOnHover + ? (e: ThreeEvent) => { + e.stopPropagation(); + setHoveredPlant(active ? getI(e) : undefined); + } + : undefined; + }; + + interface PlantProps { + plant: Plant; + i: number; + labelOnly?: boolean; + } + + const Plant = (props: PlantProps) => { + const { i, plant, labelOnly } = props; + const alwaysShowLabels = config.labels && !config.labelsOnHover; + return + {labelOnly + ? + {plant.label} + + : } + ; + }; + const isXL = config.sizePreset == "Genesis XL"; + const { scale } = useSpring({ + scale: isXL ? 1.75 : 1, + config: { + tension: 300, + friction: 40, + }, + }); + + const grassTexture = useTexture(ASSETS.textures.grass); + grassTexture.wrapS = RepeatWrapping; + grassTexture.wrapT = RepeatWrapping; + grassTexture.repeat.set(24, 24); + const concreteTexture = useTexture(ASSETS.textures.concrete); + concreteTexture.wrapS = RepeatWrapping; + concreteTexture.wrapT = RepeatWrapping; + concreteTexture.repeat.set(16, 24); + + const Ground = ({ children }: { children: React.ReactElement }) => + + {children} + ; + + const initCamera: CameraInterface = { + position: window.innerWidth > 768 ? [2000, -4000, 2500] : [5400, -2500, 3400], + target: [0, 0, 0], + }; + const camera = getCamera(config, props.activeFocus, initCamera); + + // eslint-disable-next-line no-null/no-null + return console.log(e.intersections.map(x => x.object.name)) + : undefined}> + {config.stats && } + {props.showBeacons && } + + + + + + + + + + {config.viewCube && + + } + + + + + + + + + + + + + + + + + {Object.values(PLANTS).map((plant, i) => + )} + + + {plants.map((plant, i) => + )} + + + {plants.map((plant, i) => + )} + + + + ; +}; diff --git a/frontend/three_d_garden/helpers.ts b/frontend/three_d_garden/helpers.ts new file mode 100644 index 0000000000..41d268010e --- /dev/null +++ b/frontend/three_d_garden/helpers.ts @@ -0,0 +1,48 @@ +import { Config } from "./config"; +import * as THREE from "three"; + +export const threeSpace = (position: number, max: number): number => + position - max / 2; +export const zZero = (config: Config): number => + config.columnLength + 40 - config.zGantryOffset; +export const getColorFromBrightness = (value: number) => { + const colorMap: { [key: number]: string } = { + 1: "#444", + 2: "#555", + 3: "#666", + 4: "#777", + 5: "#888", + 6: "#999", + 7: "#aaa", + 8: "#bbb", + 9: "#ccc", + 10: "#ddd", + 11: "#eee", + 12: "#fff", + }; + return colorMap[value]; +}; +export const zDir = -1; + +interface Vector3Array extends Array { + 0: number; + 1: number; + 2: number; +} +export const easyCubicBezierCurve3 = ( + startPosition: Vector3Array, + startControl: Vector3Array, + endControl: Vector3Array, + endPosition: Vector3Array, +) => { + const [x1, y1, z1] = startPosition; + const [x1c, y1c, z1c] = startControl; + const [x2c, y2c, z2c] = endControl; + const [x2, y2, z2] = endPosition; + return new THREE.CubicBezierCurve3( + new THREE.Vector3(x1, y1, z1), + new THREE.Vector3(x1 + x1c, y1 + y1c, z1 + z1c), + new THREE.Vector3(x2 + x2c, y2 + y2c, z2 + z2c), + new THREE.Vector3(x2, y2, z2), + ); +}; diff --git a/frontend/three_d_garden/index.tsx b/frontend/three_d_garden/index.tsx index 9b5d6d29b0..c810f812b4 100644 --- a/frontend/three_d_garden/index.tsx +++ b/frontend/three_d_garden/index.tsx @@ -1,10 +1,8 @@ -import { Circle, PerspectiveCamera, OrbitControls } from "@react-three/drei"; import { Canvas } from "@react-three/fiber"; import React from "react"; -import { AmbientLight, DirectionalLight, MeshPhongMaterial } from "./components"; import { Config } from "./config"; -import { Bed } from "./bed"; -import { RepeatWrapping, TextureLoader } from "three"; +import { GardenModel } from "./garden"; +import { noop } from "lodash"; export interface ThreeDGardenProps { config: Config; @@ -12,47 +10,11 @@ export interface ThreeDGardenProps { export const ThreeDGarden = (props: ThreeDGardenProps) => { return
- - - +
+ + + +
; }; - -const grassTexture = new TextureLoader() - .load("/3D/textures/grass.avif", - texture => { - texture.wrapS = RepeatWrapping; - texture.wrapT = RepeatWrapping; - texture.repeat.set(24, 24); - }); - -export interface ThreeDGardenModelProps { - config: Config; -} - -export const ThreeDGardenModel = (props: ThreeDGardenModelProps) => { - const mid = { - x: props.config.bedLengthOuter / 2, - y: props.config.bedWidthOuter / 2, - z: props.config.bedHeight, - }; - return - - - - - - - - - ; -}; diff --git a/frontend/three_d_garden/lab.tsx b/frontend/three_d_garden/lab.tsx new file mode 100644 index 0000000000..e7485bcf01 --- /dev/null +++ b/frontend/three_d_garden/lab.tsx @@ -0,0 +1,115 @@ +import React from "react"; +import { Box, Billboard, Image, Extrude, useTexture } from "@react-three/drei"; +import { DoubleSide, Shape, RepeatWrapping } from "three"; +import { ASSETS } from "./constants"; +import { threeSpace } from "./helpers"; +import { Config } from "./config"; +import { Desk } from "./desk"; +import { Group, MeshPhongMaterial } from "./components"; + +export interface LabProps { + config: Config; + activeFocus: string; +} + +const wallLength = 10000; +const wallHeight = 2500; +const wallThickness = 200; +const wallOffset = 2000; +const wallColor = "#f4f4f4"; +const shelfThickness = 50; + +const wallStructure2D = () => { + const shape = new Shape(); + + shape.moveTo(0, 0); + shape.lineTo(wallLength, 0); + shape.lineTo(wallLength, wallThickness); + shape.lineTo(-wallThickness, wallThickness); + shape.lineTo(-wallThickness, -wallLength); + shape.lineTo(0, -wallLength); + shape.lineTo(0, 0); + + return shape; +}; + +export const Lab = (props: LabProps) => { + const { config } = props; + const groundZ = -config.bedZOffset - config.bedHeight; + + const woodTexture = useTexture(ASSETS.textures.wood); + woodTexture.wrapS = RepeatWrapping; + woodTexture.wrapT = RepeatWrapping; + woodTexture.repeat.set(0.3, 0.3); + + return + + + + + {[wallHeight / 2, wallHeight / 3].map((shelfHeight, index) => ( + + + + ))} + + + + + + + + + + + ; +}; diff --git a/frontend/three_d_garden/packaging.tsx b/frontend/three_d_garden/packaging.tsx new file mode 100644 index 0000000000..24fe0acb83 --- /dev/null +++ b/frontend/three_d_garden/packaging.tsx @@ -0,0 +1,99 @@ +import React from "react"; +import { Box, Text } from "@react-three/drei"; +import { threeSpace } from "./helpers"; +import { Config } from "./config"; +import { Group, MeshPhongMaterial } from "./components"; +import { ASSETS } from "./constants"; + +export interface PackagingProps { + config: Config; +} + +export const Packaging = (props: PackagingProps) => { + const { config } = props; + const isXL = config.sizePreset == "Genesis XL"; + const mainCartonLength = 1060; + const mainCartonWidth = 420; + const mainCartonHeight = 220; + const extrusionKitLength = 1540; + const extrusionKitWidth = isXL ? 170 : 100; + const extrusionKitHeight = 60; + const edgeProtectorSize = 20; + const edgeProtector = (boxDimension: number) => { + const edgeProtectorCenter = edgeProtectorSize / 2 - 1; + const boxDimensionMid = boxDimension / 2; + return edgeProtectorCenter - boxDimensionMid; + }; + const strapThickness = 4; + const strapWidth = 10; + const strap = (boxDimension: number) => boxDimension + strapThickness; + const zGround = -config.bedZOffset - config.bedHeight; + const boxColor = "#bf8b59"; + const strapColor = "#434343"; + const edgeProtectorColor = "#9d6c40"; + return + + + + + + {config.label} + + {[-450, 0, 450].map(x => + + + )} + {[ + [-edgeProtector(mainCartonWidth), -edgeProtector(mainCartonHeight)], + [-edgeProtector(mainCartonWidth), edgeProtector(mainCartonHeight)], + [edgeProtector(mainCartonWidth), -edgeProtector(mainCartonHeight)], + [edgeProtector(mainCartonWidth), edgeProtector(mainCartonHeight)], + ].map(([y, z], index) => + + + )} + + + + + + {[-600, -300, 0, 300, 600].map(x => + + + )} + {[ + [-edgeProtector(extrusionKitWidth), -edgeProtector(extrusionKitHeight)], + [-edgeProtector(extrusionKitWidth), edgeProtector(extrusionKitHeight)], + [edgeProtector(extrusionKitWidth), -edgeProtector(extrusionKitHeight)], + [edgeProtector(extrusionKitWidth), edgeProtector(extrusionKitHeight)], + ].map(([y, z], index) => + + + )} + + ; +}; diff --git a/frontend/three_d_garden/parts/__tests__/cross_slide_test.tsx b/frontend/three_d_garden/parts/__tests__/cross_slide_test.tsx new file mode 100644 index 0000000000..f622df95f9 --- /dev/null +++ b/frontend/three_d_garden/parts/__tests__/cross_slide_test.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import { mount } from "enzyme"; +import { CrossSlideFull, CrossSlide } from "../cross_slide"; +import { useGLTF } from "@react-three/drei"; +import { ASSETS } from "../../constants"; + +describe("", () => { + it("renders", () => { + const model = useGLTF(ASSETS.models.crossSlide) as CrossSlideFull; + const Component = CrossSlide(model); + const wrapper = mount(); + expect(wrapper.html()).toContain("name"); + expect(wrapper.html()).toContain("instancedmesh"); + }); +}); diff --git a/frontend/three_d_garden/parts/__tests__/gantry_wheel_plate_test.tsx b/frontend/three_d_garden/parts/__tests__/gantry_wheel_plate_test.tsx new file mode 100644 index 0000000000..e01cc0c3b9 --- /dev/null +++ b/frontend/three_d_garden/parts/__tests__/gantry_wheel_plate_test.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import { mount } from "enzyme"; +import { GantryWheelPlate, GantryWheelPlateFull } from "../gantry_wheel_plate"; +import { useGLTF } from "@react-three/drei"; +import { ASSETS } from "../../constants"; + +describe("", () => { + it("renders", () => { + const model = useGLTF(ASSETS.models.gantryWheelPlate) as GantryWheelPlateFull; + const Component = GantryWheelPlate(model); + const wrapper = mount(); + expect(wrapper.html()).toContain("name"); + expect(wrapper.html()).toContain("instancedmesh"); + }); +}); diff --git a/frontend/three_d_garden/parts/__tests__/rotary_tool_test.tsx b/frontend/three_d_garden/parts/__tests__/rotary_tool_test.tsx new file mode 100644 index 0000000000..131df56eca --- /dev/null +++ b/frontend/three_d_garden/parts/__tests__/rotary_tool_test.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import { mount } from "enzyme"; +import { RotaryTool, RotaryToolFull } from "../rotary_tool"; +import { ASSETS } from "../../constants"; +import { useGLTF } from "@react-three/drei"; + +describe("", () => { + it("renders", () => { + const model = useGLTF(ASSETS.models.rotaryTool) as RotaryToolFull; + const Component = RotaryTool(model); + const wrapper = mount(); + expect(wrapper.html()).toContain("name"); + expect(wrapper.html()).toContain("instancedmesh"); + }); +}); diff --git a/frontend/three_d_garden/parts/__tests__/seed_trough_assembly_test.tsx b/frontend/three_d_garden/parts/__tests__/seed_trough_assembly_test.tsx new file mode 100644 index 0000000000..ceabbc21b0 --- /dev/null +++ b/frontend/three_d_garden/parts/__tests__/seed_trough_assembly_test.tsx @@ -0,0 +1,18 @@ +import React from "react"; +import { mount } from "enzyme"; +import { + SeedTroughAssembly, SeedTroughAssemblyFull, +} from "../seed_trough_assembly"; +import { ASSETS } from "../../constants"; +import { useGLTF } from "@react-three/drei"; + +describe("", () => { + it("renders", () => { + const model = useGLTF( + ASSETS.models.seedTroughAssembly) as SeedTroughAssemblyFull; + const Component = SeedTroughAssembly(model); + const wrapper = mount(); + expect(wrapper.html()).toContain("name"); + expect(wrapper.html()).toContain("mesh"); + }); +}); diff --git a/frontend/three_d_garden/parts/__tests__/seed_trough_holder_test.tsx b/frontend/three_d_garden/parts/__tests__/seed_trough_holder_test.tsx new file mode 100644 index 0000000000..66ae320472 --- /dev/null +++ b/frontend/three_d_garden/parts/__tests__/seed_trough_holder_test.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import { mount } from "enzyme"; +import { SeedTroughHolder, SeedTroughHolderFull } from "../seed_trough_holder"; +import { useGLTF } from "@react-three/drei"; +import { ASSETS } from "../../constants"; + +describe("", () => { + it("renders", () => { + const model = useGLTF(ASSETS.models.seedTroughHolder) as SeedTroughHolderFull; + const Component = SeedTroughHolder(model); + const wrapper = mount(); + expect(wrapper.html()).toContain("name"); + expect(wrapper.html()).toContain("mesh"); + }); +}); diff --git a/frontend/three_d_garden/parts/__tests__/soil_sensor_test.tsx b/frontend/three_d_garden/parts/__tests__/soil_sensor_test.tsx new file mode 100644 index 0000000000..623e94dbc9 --- /dev/null +++ b/frontend/three_d_garden/parts/__tests__/soil_sensor_test.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import { mount } from "enzyme"; +import { SoilSensor, SoilSensorFull } from "../soil_sensor"; +import { useGLTF } from "@react-three/drei"; +import { ASSETS } from "../../constants"; + +describe("", () => { + it("renders", () => { + const model = useGLTF(ASSETS.models.soilSensor) as SoilSensorFull; + const Component = SoilSensor(model); + const wrapper = mount(); + expect(wrapper.html()).toContain("name"); + expect(wrapper.html()).toContain("instancedmesh"); + }); +}); diff --git a/frontend/three_d_garden/parts/__tests__/vacuum_pump_cover_test.tsx b/frontend/three_d_garden/parts/__tests__/vacuum_pump_cover_test.tsx new file mode 100644 index 0000000000..3f56de9075 --- /dev/null +++ b/frontend/three_d_garden/parts/__tests__/vacuum_pump_cover_test.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import { mount } from "enzyme"; +import { VacuumPumpCover, VacuumPumpCoverFull } from "../vacuum_pump_cover"; +import { useGLTF } from "@react-three/drei"; +import { ASSETS } from "../../constants"; + +describe("", () => { + it("renders", () => { + const model = useGLTF(ASSETS.models.vacuumPumpCover) as VacuumPumpCoverFull; + const Component = VacuumPumpCover(model); + const wrapper = mount(); + expect(wrapper.html()).toContain("name"); + expect(wrapper.html()).toContain("mesh"); + }); +}); diff --git a/frontend/three_d_garden/parts/cross_slide.tsx b/frontend/three_d_garden/parts/cross_slide.tsx new file mode 100644 index 0000000000..bb27b27db4 --- /dev/null +++ b/frontend/three_d_garden/parts/cross_slide.tsx @@ -0,0 +1,545 @@ +/* eslint-disable max-len */ +import React from "react"; +import * as THREE from "three"; +import { InstancedBufferAttribute } from "three"; +import { GLTF } from "three-stdlib"; +import { Group, Mesh as MeshComponent, InstancedMesh } from "../components"; + +type Mesh = THREE.Mesh & { instanceMatrix: InstancedBufferAttribute | undefined }; + +export type CrossSlideFull = GLTF & { + nodes: { + Cable_Carrier_Spacer_Block: THREE.Mesh; + mesh0_mesh: Mesh; + mesh0_mesh_1: Mesh; + mesh0_mesh_2: Mesh; + mesh0_mesh_3: Mesh; + mesh0_mesh_4: Mesh; + mesh0_mesh_5: Mesh; + mesh0_mesh_6: Mesh; + mesh0_mesh_7: Mesh; + mesh0_mesh_8: Mesh; + mesh0_mesh_9: Mesh; + mesh0_mesh_10: Mesh; + mesh0_mesh_11: Mesh; + mesh0_mesh_12: Mesh; + mesh0_mesh_13: Mesh; + mesh0_mesh_14: Mesh; + mesh0_mesh_15: Mesh; + mesh0_mesh_16: Mesh; + mesh0_mesh_17: Mesh; + mesh0_mesh_18: Mesh; + mesh0_mesh_19: Mesh; + mesh0_mesh_20: Mesh; + mesh0_mesh_21: Mesh; + mesh0_mesh_22: Mesh; + mesh0_mesh_23: Mesh; + mesh0_mesh_24: Mesh; + mesh0_mesh_25: Mesh; + mesh0_mesh_26: Mesh; + mesh0_mesh_27: Mesh; + mesh0_mesh_28: Mesh; + mesh0_mesh_29: Mesh; + mesh0_mesh_30: Mesh; + mesh0_mesh_31: Mesh; + mesh0_mesh_32: Mesh; + mesh0_mesh_33: Mesh; + mesh0_mesh_34: Mesh; + mesh0_mesh_35: Mesh; + mesh0_mesh_36: Mesh; + mesh0_mesh_37: Mesh; + mesh0_mesh_38: Mesh; + mesh0_mesh_39: Mesh; + mesh134_mesh: Mesh; + mesh134_mesh_1: Mesh; + mesh134_mesh_2: Mesh; + mesh134_mesh_3: Mesh; + mesh134_mesh_4: Mesh; + mesh134_mesh_5: Mesh; + mesh134_mesh_6: Mesh; + mesh134_mesh_7: Mesh; + mesh134_mesh_8: Mesh; + mesh134_mesh_9: Mesh; + mesh134_mesh_10: Mesh; + mesh134_mesh_11: Mesh; + mesh134_mesh_12: Mesh; + mesh134_mesh_13: Mesh; + mesh134_mesh_14: Mesh; + mesh134_mesh_15: Mesh; + mesh134_mesh_16: Mesh; + mesh134_mesh_17: Mesh; + mesh152_mesh: Mesh; + mesh152_mesh_1: Mesh; + mesh152_mesh_2: Mesh; + mesh152_mesh_3: Mesh; + mesh152_mesh_4: Mesh; + mesh152_mesh_5: Mesh; + mesh152_mesh_6: Mesh; + mesh152_mesh_7: Mesh; + mesh152_mesh_8: Mesh; + mesh152_mesh_9: Mesh; + mesh152_mesh_10: Mesh; + mesh152_mesh_11: Mesh; + mesh152_mesh_12: Mesh; + mesh152_mesh_13: Mesh; + mesh152_mesh_14: Mesh; + mesh152_mesh_15: Mesh; + mesh152_mesh_16: Mesh; + mesh169_mesh: Mesh; + mesh169_mesh_1: Mesh; + mesh169_mesh_2: Mesh; + mesh169_mesh_3: Mesh; + mesh169_mesh_4: Mesh; + mesh169_mesh_5: Mesh; + mesh169_mesh_6: Mesh; + mesh169_mesh_7: Mesh; + mesh169_mesh_8: Mesh; + mesh169_mesh_9: Mesh; + mesh169_mesh_10: Mesh; + mesh169_mesh_11: Mesh; + mesh169_mesh_12: Mesh; + mesh169_mesh_13: Mesh; + mesh169_mesh_14: Mesh; + mesh169_mesh_15: Mesh; + mesh169_mesh_16: Mesh; + mesh169_mesh_17: Mesh; + mesh187_mesh: Mesh; + mesh187_mesh_1: Mesh; + mesh187_mesh_2: Mesh; + mesh187_mesh_3: Mesh; + mesh187_mesh_4: Mesh; + mesh187_mesh_5: Mesh; + mesh187_mesh_6: Mesh; + mesh187_mesh_7: Mesh; + mesh187_mesh_8: Mesh; + mesh187_mesh_9: Mesh; + mesh187_mesh_10: Mesh; + mesh187_mesh_11: Mesh; + mesh187_mesh_12: Mesh; + mesh187_mesh_13: Mesh; + mesh187_mesh_14: Mesh; + mesh187_mesh_15: Mesh; + mesh203_mesh: Mesh; + mesh203_mesh_1: Mesh; + mesh203_mesh_2: Mesh; + mesh203_mesh_3: Mesh; + mesh203_mesh_4: Mesh; + mesh203_mesh_5: Mesh; + mesh203_mesh_6: Mesh; + mesh203_mesh_7: Mesh; + mesh203_mesh_8: Mesh; + mesh203_mesh_9: Mesh; + mesh203_mesh_10: Mesh; + mesh203_mesh_11: Mesh; + mesh203_mesh_12: Mesh; + mesh203_mesh_13: Mesh; + mesh217_mesh: Mesh; + mesh217_mesh_1: Mesh; + mesh217_mesh_2: Mesh; + mesh217_mesh_3: Mesh; + mesh217_mesh_4: Mesh; + mesh217_mesh_5: Mesh; + }; + materials: { + PaletteMaterial001: THREE.MeshStandardMaterial; + }; +} + +export const CrossSlide = (model: CrossSlideFull) => + (props: JSX.IntrinsicElements["group"]) => { + const { nodes, materials } = model; + return + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ; + }; diff --git a/frontend/three_d_garden/parts/gantry_wheel_plate.tsx b/frontend/three_d_garden/parts/gantry_wheel_plate.tsx new file mode 100644 index 0000000000..4bc7ceb342 --- /dev/null +++ b/frontend/three_d_garden/parts/gantry_wheel_plate.tsx @@ -0,0 +1,361 @@ +/* eslint-disable max-len */ +import React from "react"; +import * as THREE from "three"; +import { InstancedBufferAttribute } from "three"; +import { GLTF } from "three-stdlib"; +import { Group, Mesh as MeshComponent, InstancedMesh } from "../components"; + +type Mesh = THREE.Mesh & { instanceMatrix: InstancedBufferAttribute | undefined }; + +export type GantryWheelPlateFull = GLTF & { + nodes: { + Gantry_Wheel_Plate: THREE.Mesh; + mesh141_mesh: Mesh; + mesh141_mesh_1: Mesh; + mesh141_mesh_2: Mesh; + mesh141_mesh_3: Mesh; + mesh141_mesh_4: Mesh; + mesh141_mesh_5: Mesh; + mesh141_mesh_6: Mesh; + mesh141_mesh_7: Mesh; + mesh141_mesh_8: Mesh; + mesh141_mesh_9: Mesh; + mesh141_mesh_10: Mesh; + mesh141_mesh_11: Mesh; + mesh141_mesh_12: Mesh; + mesh141_mesh_13: Mesh; + mesh141_mesh_14: Mesh; + mesh141_mesh_15: Mesh; + mesh141_mesh_16: Mesh; + mesh141_mesh_17: Mesh; + mesh159_mesh: Mesh; + mesh159_mesh_1: Mesh; + mesh159_mesh_2: Mesh; + mesh159_mesh_3: Mesh; + mesh159_mesh_4: Mesh; + mesh159_mesh_5: Mesh; + mesh159_mesh_6: Mesh; + mesh159_mesh_7: Mesh; + mesh159_mesh_8: Mesh; + mesh159_mesh_9: Mesh; + mesh159_mesh_10: Mesh; + mesh159_mesh_11: Mesh; + mesh159_mesh_12: Mesh; + mesh159_mesh_13: Mesh; + mesh159_mesh_14: Mesh; + mesh159_mesh_15: Mesh; + mesh159_mesh_16: Mesh; + mesh176_mesh: Mesh; + mesh176_mesh_1: Mesh; + mesh176_mesh_2: Mesh; + mesh176_mesh_3: Mesh; + mesh176_mesh_4: Mesh; + mesh176_mesh_5: Mesh; + mesh176_mesh_6: Mesh; + mesh176_mesh_7: Mesh; + mesh176_mesh_8: Mesh; + mesh176_mesh_9: Mesh; + mesh176_mesh_10: Mesh; + mesh176_mesh_11: Mesh; + mesh176_mesh_12: Mesh; + mesh176_mesh_13: Mesh; + mesh176_mesh_14: Mesh; + mesh176_mesh_15: Mesh; + mesh192_mesh: Mesh; + mesh192_mesh_1: Mesh; + mesh192_mesh_2: Mesh; + mesh192_mesh_3: Mesh; + mesh192_mesh_4: Mesh; + mesh192_mesh_5: Mesh; + mesh192_mesh_6: Mesh; + mesh192_mesh_7: Mesh; + mesh192_mesh_8: Mesh; + mesh192_mesh_9: Mesh; + mesh192_mesh_10: Mesh; + mesh192_mesh_11: Mesh; + mesh192_mesh_12: Mesh; + mesh192_mesh_13: Mesh; + mesh206_mesh: Mesh; + mesh206_mesh_1: Mesh; + mesh206_mesh_2: Mesh; + mesh206_mesh_3: Mesh; + mesh206_mesh_4: Mesh; + mesh206_mesh_5: Mesh; + mesh206_mesh_6: Mesh; + mesh206_mesh_7: Mesh; + mesh206_mesh_8: Mesh; + mesh206_mesh_9: Mesh; + mesh206_mesh_10: Mesh; + mesh206_mesh_11: Mesh; + mesh206_mesh_12: Mesh; + mesh206_mesh_13: Mesh; + mesh206_mesh_14: Mesh; + mesh206_mesh_15: Mesh; + mesh206_mesh_16: Mesh; + mesh206_mesh_17: Mesh; + }; + materials: { + PaletteMaterial001: THREE.MeshStandardMaterial; + }; +} + +export const GantryWheelPlate = (model: GantryWheelPlateFull) => + (props: JSX.IntrinsicElements["group"]) => { + const { nodes, materials } = model; + return + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ; + }; diff --git a/frontend/three_d_garden/parts/rotary_tool.tsx b/frontend/three_d_garden/parts/rotary_tool.tsx new file mode 100644 index 0000000000..751f61b915 --- /dev/null +++ b/frontend/three_d_garden/parts/rotary_tool.tsx @@ -0,0 +1,205 @@ +/* eslint-disable max-len */ +import React from "react"; +import * as THREE from "three"; +import { InstancedBufferAttribute } from "three"; +import { GLTF } from "three-stdlib"; +import { Group, Mesh as MeshComponent, InstancedMesh } from "../components"; + +type Mesh = THREE.Mesh & { instanceMatrix: InstancedBufferAttribute | undefined }; + +export type RotaryToolFull = GLTF & { + nodes: { + M25_x_6mm_Screw: THREE.Mesh; + mesh0_mesh: Mesh; + mesh0_mesh_1: Mesh; + mesh0_mesh_2: Mesh; + mesh0_mesh_3: Mesh; + mesh0_mesh_4: Mesh; + mesh0_mesh_5: Mesh; + mesh0_mesh_6: Mesh; + mesh0_mesh_7: Mesh; + mesh0_mesh_8: Mesh; + mesh0_mesh_9: Mesh; + mesh0_mesh_10: Mesh; + mesh0_mesh_11: Mesh; + mesh0_mesh_12: Mesh; + mesh0_mesh_13: Mesh; + mesh0_mesh_14: Mesh; + mesh0_mesh_15: Mesh; + mesh0_mesh_16: Mesh; + mesh0_mesh_17: Mesh; + mesh476_mesh: Mesh; + mesh476_mesh_1: Mesh; + mesh476_mesh_2: Mesh; + mesh476_mesh_3: Mesh; + mesh476_mesh_4: Mesh; + mesh476_mesh_5: Mesh; + mesh476_mesh_6: Mesh; + mesh476_mesh_7: Mesh; + mesh476_mesh_8: Mesh; + mesh476_mesh_9: Mesh; + mesh476_mesh_10: Mesh; + mesh476_mesh_11: Mesh; + mesh476_mesh_12: Mesh; + mesh476_mesh_13: Mesh; + mesh476_mesh_14: Mesh; + mesh476_mesh_15: Mesh; + mesh476_mesh_16: Mesh; + mesh476_mesh_17: Mesh; + mesh476_mesh_18: Mesh; + mesh476_mesh_19: Mesh; + mesh476_mesh_20: Mesh; + mesh476_mesh_21: Mesh; + mesh476_mesh_22: Mesh; + mesh476_mesh_23: Mesh; + mesh476_mesh_24: Mesh; + mesh476_mesh_25: Mesh; + }; + materials: { + PaletteMaterial001: THREE.MeshStandardMaterial; + }; +} + +export const RotaryTool = (model: RotaryToolFull) => + (props: JSX.IntrinsicElements["group"]) => { + const { nodes, materials } = model; + return + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ; + }; diff --git a/frontend/three_d_garden/parts/seed_trough_assembly.tsx b/frontend/three_d_garden/parts/seed_trough_assembly.tsx new file mode 100644 index 0000000000..db86837f6b --- /dev/null +++ b/frontend/three_d_garden/parts/seed_trough_assembly.tsx @@ -0,0 +1,39 @@ +/* eslint-disable max-len */ +import React from "react"; +import * as THREE from "three"; +import { GLTF } from "three-stdlib"; +import { Group, Mesh as MeshComponent } from "../components"; +import { SeedTroughAssemblyMaterial } from "../constants"; + +export type SeedTroughAssemblyFull = GLTF & { + nodes: { + mesh0_mesh: THREE.Mesh; + mesh0_mesh_1: THREE.Mesh; + Seed_Trough: THREE.Mesh; + }; + materials: { + [SeedTroughAssemblyMaterial.zero]: THREE.MeshStandardMaterial; + [SeedTroughAssemblyMaterial.one]: THREE.MeshStandardMaterial; + [SeedTroughAssemblyMaterial.two]: THREE.MeshStandardMaterial; + }; +} + +export const SeedTroughAssembly = (model: SeedTroughAssemblyFull) => + (props: JSX.IntrinsicElements["group"]) => { + const { nodes, materials } = model; + // eslint-disable-next-line no-null/no-null + return + + + + + + ; + }; diff --git a/frontend/three_d_garden/parts/seed_trough_holder.tsx b/frontend/three_d_garden/parts/seed_trough_holder.tsx new file mode 100644 index 0000000000..83a12db261 --- /dev/null +++ b/frontend/three_d_garden/parts/seed_trough_holder.tsx @@ -0,0 +1,34 @@ +/* eslint-disable max-len */ +import React from "react"; +import * as THREE from "three"; +import { GLTF } from "three-stdlib"; +import { Group, Mesh as MeshComponent } from "../components"; +import { SeedTroughHolderMaterial } from "../constants"; + +export type SeedTroughHolderFull = GLTF & { + nodes: { + Seed_Trough_Holder_Mount_Plate: THREE.Mesh; + M5_x_10mm_Screw: THREE.Mesh; + } + materials: { + [SeedTroughHolderMaterial.zero]: THREE.MeshStandardMaterial; + [SeedTroughHolderMaterial.one]: THREE.MeshStandardMaterial; + }; +} + +export const SeedTroughHolder = (model: SeedTroughHolderFull) => + (props: JSX.IntrinsicElements["group"]) => { + const { nodes, materials } = model; + // eslint-disable-next-line no-null/no-null + return + + + ; + }; diff --git a/frontend/three_d_garden/parts/soil_sensor.tsx b/frontend/three_d_garden/parts/soil_sensor.tsx new file mode 100644 index 0000000000..71fb6d8f86 --- /dev/null +++ b/frontend/three_d_garden/parts/soil_sensor.tsx @@ -0,0 +1,205 @@ +/* eslint-disable max-len */ +import React from "react"; +import * as THREE from "three"; +import { InstancedBufferAttribute } from "three"; +import { GLTF } from "three-stdlib"; +import { Group, Mesh as MeshComponent, InstancedMesh } from "../components"; + +type Mesh = THREE.Mesh & { instanceMatrix: InstancedBufferAttribute | undefined }; + +export type SoilSensorFull = GLTF & { + nodes: { + Soil_Sensor: Mesh; + mesh0_mesh: Mesh; + mesh0_mesh_1: Mesh; + mesh0_mesh_2: Mesh; + mesh0_mesh_3: Mesh; + mesh0_mesh_4: Mesh; + mesh0_mesh_5: Mesh; + mesh0_mesh_6: Mesh; + mesh0_mesh_7: Mesh; + mesh0_mesh_8: Mesh; + mesh0_mesh_9: Mesh; + mesh0_mesh_10: Mesh; + mesh0_mesh_11: Mesh; + mesh0_mesh_12: Mesh; + mesh0_mesh_13: Mesh; + mesh0_mesh_14: Mesh; + mesh0_mesh_15: Mesh; + mesh0_mesh_16: Mesh; + mesh0_mesh_17: Mesh; + mesh0_mesh_18: Mesh; + mesh0_mesh_19: Mesh; + mesh0_mesh_20: Mesh; + mesh0_mesh_21: Mesh; + mesh0_mesh_22: Mesh; + mesh0_mesh_23: Mesh; + mesh0_mesh_24: Mesh; + mesh0_mesh_25: Mesh; + mesh584_mesh: Mesh; + mesh584_mesh_1: Mesh; + mesh584_mesh_2: Mesh; + mesh584_mesh_3: Mesh; + mesh584_mesh_4: Mesh; + mesh584_mesh_5: Mesh; + mesh584_mesh_6: Mesh; + mesh584_mesh_7: Mesh; + mesh584_mesh_8: Mesh; + mesh584_mesh_9: Mesh; + mesh584_mesh_10: Mesh; + mesh584_mesh_11: Mesh; + mesh584_mesh_12: Mesh; + mesh584_mesh_13: Mesh; + mesh584_mesh_14: Mesh; + mesh584_mesh_15: Mesh; + mesh584_mesh_16: Mesh; + mesh584_mesh_17: Mesh; + }; + materials: { + PaletteMaterial001: THREE.MeshStandardMaterial; + }; +} + +export const SoilSensor = (model: SoilSensorFull) => + (props: JSX.IntrinsicElements["group"]) => { + const { nodes, materials } = model; + // eslint-disable-next-line no-null/no-null + return + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ; + }; diff --git a/frontend/three_d_garden/parts/vacuum_pump_cover.tsx b/frontend/three_d_garden/parts/vacuum_pump_cover.tsx new file mode 100644 index 0000000000..a83d1e790c --- /dev/null +++ b/frontend/three_d_garden/parts/vacuum_pump_cover.tsx @@ -0,0 +1,32 @@ +import React from "react"; +import * as THREE from "three"; +import { GLTF } from "three-stdlib"; +import { Group, Mesh as MeshComponent } from "../components"; +import { VacuumPumpCoverMaterial } from "../constants"; + +export type VacuumPumpCoverFull = GLTF & { + nodes: { + M5_x_10mm_Screw: THREE.Mesh; + Vacuum_Pump_Cover: THREE.Mesh; + }; + materials: { + [VacuumPumpCoverMaterial.zero]: THREE.MeshStandardMaterial; + [VacuumPumpCoverMaterial.one]: THREE.MeshStandardMaterial; + }; +} + +export const VacuumPumpCover = (model: VacuumPumpCoverFull) => + (props: JSX.IntrinsicElements["group"]) => { + const { nodes, materials } = model; + // eslint-disable-next-line no-null/no-null + return + + + ; + }; diff --git a/frontend/three_d_garden/power_supply.tsx b/frontend/three_d_garden/power_supply.tsx new file mode 100644 index 0000000000..3a3c23972d --- /dev/null +++ b/frontend/three_d_garden/power_supply.tsx @@ -0,0 +1,167 @@ +/* eslint-disable max-len */ +import React from "react"; +import { RepeatWrapping } from "three"; +import * as THREE from "three"; +import { Box, Tube, useTexture } from "@react-three/drei"; +import { ASSETS } from "./constants"; +import { threeSpace, easyCubicBezierCurve3 } from "./helpers"; +import { Config } from "./config"; +import { Group, MeshPhongMaterial } from "./components"; + +export interface PowerSupplyProps { + config: Config; +} + +export const outletDepth = 25; +const plugDepth = 25; + +let incr = 0; +const cableColor = (enabled: boolean) => { + if (!enabled) { return "#222"; } + const hue = incr * 80; + incr++; + return `hsl(${hue}, 100%, 50%)`; +}; + +export const PowerSupply = (props: PowerSupplyProps) => { + const { + bedWidthOuter, bedLengthOuter, bedHeight, botSizeX, + legSize, ccSupportSize, bedZOffset + } = props.config; + const zGround = -bedHeight - bedZOffset; + + const aluminumTexture = useTexture(ASSETS.textures.aluminum); + aluminumTexture.wrapS = RepeatWrapping; + aluminumTexture.wrapT = RepeatWrapping; + aluminumTexture.repeat.set(0.01, 0.003); + + const combinedCablePath = new THREE.CurvePath(); + + const powerCableInCC = new THREE.LineCurve3( + new THREE.Vector3( + threeSpace(botSizeX / 2, bedLengthOuter), + threeSpace(-20, bedWidthOuter), + 10 - Math.min(150, bedHeight / 2), + ), + new THREE.Vector3( + threeSpace(bedLengthOuter / 2, bedLengthOuter), + threeSpace(-20, bedWidthOuter), + 10 - Math.min(150, bedHeight / 2), + ), + ); + combinedCablePath.add(powerCableInCC); + + const powerCableFromSupplyToCC = easyCubicBezierCurve3( + [ + threeSpace(bedLengthOuter / 2 + 0, bedLengthOuter), + threeSpace(-20, bedWidthOuter), + 10 - Math.min(150, bedHeight / 2), + ], + [100, 0, 0], + [-100, 0, 0], + [ + threeSpace(bedLengthOuter / 2 + 300 - (163 / 2), bedLengthOuter), + threeSpace(-20, bedWidthOuter), + -90 - ccSupportSize, + ], + ); + combinedCablePath.add(powerCableFromSupplyToCC); + + const powerCableFromGroundToSupply = easyCubicBezierCurve3( + [ + threeSpace(bedLengthOuter / 2 + 300 + (163 / 2), bedLengthOuter), + threeSpace(-20, bedWidthOuter), + -90 - ccSupportSize, + ], + [100, 0, 0], + [-100, 0, 0], + [ + threeSpace(bedLengthOuter / 2 + 500, bedLengthOuter), + threeSpace(-20, bedWidthOuter), + -bedHeight + 10, + ], + ); + combinedCablePath.add(powerCableFromGroundToSupply); + + const powerCableFromBedEndToSupply = new THREE.LineCurve3( + new THREE.Vector3(threeSpace(bedLengthOuter / 2 + 500, bedLengthOuter), + threeSpace(-20, bedWidthOuter), + -bedHeight + 10), + new THREE.Vector3(threeSpace(bedLengthOuter - 150, bedLengthOuter), + threeSpace(-20, bedWidthOuter), + -bedHeight + 10), + ); + combinedCablePath.add(powerCableFromBedEndToSupply); + + const powerCableFromGroundToBedEnd = easyCubicBezierCurve3( + [ + threeSpace(bedLengthOuter - 150, bedLengthOuter), + threeSpace(-20, bedWidthOuter), + -bedHeight + 10, + ], + [100, 0, 0], + [-100, 0, 0], + [ + threeSpace(bedLengthOuter - 50, bedLengthOuter), + threeSpace(-20, bedWidthOuter), + zGround + 10, + ], + ); + + combinedCablePath.add(powerCableFromGroundToBedEnd); + const powerCableFromPostToBedEnd = new THREE.LineCurve3( + new THREE.Vector3(threeSpace(bedLengthOuter - 50, bedLengthOuter), + threeSpace(-20, bedWidthOuter), + zGround + 10), + new THREE.Vector3(threeSpace(bedLengthOuter + 400, bedLengthOuter), + threeSpace(-20, bedWidthOuter), + zGround + 10), + ); + combinedCablePath.add(powerCableFromPostToBedEnd); + + const powerCableFromOutletToGround = easyCubicBezierCurve3( + [ + threeSpace(bedLengthOuter + 400, bedLengthOuter), + threeSpace(-20, bedWidthOuter), + zGround + 10, + ], + [100, 0, 0], + [-100, 0, 0], + [ + threeSpace(bedLengthOuter + 550 - legSize / 2, bedLengthOuter), + threeSpace(legSize / 2, bedWidthOuter), + zGround + 250, + ], + ); + combinedCablePath.add(powerCableFromOutletToGround); + + return + + + + + + + + + + ; +}; diff --git a/frontend/three_d_garden/sky.tsx b/frontend/three_d_garden/sky.tsx new file mode 100644 index 0000000000..b406e47447 --- /dev/null +++ b/frontend/three_d_garden/sky.tsx @@ -0,0 +1,51 @@ +// Forked from https://github.com/pmndrs/drei/blob/master/src/core/Sky.tsx + +import React from "react"; +import { Vector3 as Vector3Type } from "@react-three/fiber"; +import { Sky as SkyImpl } from "three-stdlib"; +import { Vector3 } from "three"; +import { ForwardRefComponent } from "@react-three/drei/helpers/ts-utils"; +import { Primitive } from "./components"; + +export type SkyProps = { + distance?: number + sunPosition?: Vector3Type + mieCoefficient?: number + mieDirectionalG?: number + rayleigh?: number + turbidity?: number + up?: Vector3Type +} + +export const Sky: ForwardRefComponent = + /* @__PURE__ */ + React.forwardRef(( + { + distance = 1000, + mieCoefficient = 0.005, + mieDirectionalG = 0.8, + rayleigh = 0.5, + turbidity = 10, + sunPosition = [0, 5000, 0], + up = [0, 0, 1], + ...props + }: SkyProps, + ref, + ) => { + const scale = React.useMemo(() => new Vector3() + .setScalar(distance), [distance]); + const [sky] = React.useState(() => new SkyImpl()); + + return ; + }); diff --git a/frontend/three_d_garden/solar.tsx b/frontend/three_d_garden/solar.tsx new file mode 100644 index 0000000000..423e24a815 --- /dev/null +++ b/frontend/three_d_garden/solar.tsx @@ -0,0 +1,102 @@ +import React from "react"; +import { Shape } from "three"; +import { Extrude, Line } from "@react-three/drei"; +import { threeSpace } from "./helpers"; +import { Config } from "./config"; +import { Group, Mesh, BoxGeometry, MeshPhongMaterial } from "./components"; + +export interface SolarProps { + config: Config; + activeFocus: string; +} + +const panelWidth = 540; +const panelLength = 1040; + +const cell2D = () => { + const cellSize = 95; + const cellBevel = 15; + const path = new Shape(); + path.moveTo(cellBevel, 0); + path.lineTo(cellSize - cellBevel, 0); + path.lineTo(cellSize, cellBevel); + path.lineTo(cellSize, cellSize - cellBevel); + path.lineTo(cellSize - cellBevel, cellSize); + path.lineTo(cellBevel, cellSize); + path.lineTo(0, cellSize - cellBevel); + path.lineTo(0, cellBevel); + return path; +}; + +const cellArray = () => { + const cells = []; + const cellSize = 100; + const cellsWide = Math.floor(panelWidth / cellSize); + const cellsLong = Math.floor(panelLength / cellSize); + + for (let x = 0; x < cellsWide; x++) { + for (let y = 0; y < cellsLong; y++) { + const xPos = x * cellSize - (panelWidth / 2) + 20 + 2.5; + const yPos = y * cellSize - (panelLength / 2) + 20 + 2.5; + cells.push( + + + + + ); + } + } + return cells; +}; + +const SolarPanel = () => { + return + + + + + {cellArray()} + ; +}; + +export const Solar = (props: SolarProps) => { + const { config } = props; + const zGround = -config.bedZOffset - config.bedHeight; + return + + + + + + + + + + ; +}; diff --git a/frontend/three_d_garden/sun.tsx b/frontend/three_d_garden/sun.tsx new file mode 100644 index 0000000000..ef19b1ba55 --- /dev/null +++ b/frontend/three_d_garden/sun.tsx @@ -0,0 +1,57 @@ +import React from "react"; +import { Config, seasonProperties } from "./config"; +import { Vector3 } from "three"; +import { useSpring, animated } from "@react-spring/three"; +import { Group } from "./components"; + +export interface SunProps { + config: Config; +} + +export const sunPosition = (config: Config): Vector3 => { + const { sunInclination, sunAzimuth } = config; + return new Vector3( + 10000 + * Math.cos(sunInclination * Math.PI / 180) + * Math.sin(sunAzimuth * Math.PI / 180), + 10000 + * Math.cos(sunInclination * Math.PI / 180) + * Math.cos(sunAzimuth * Math.PI / 180), + 10000 + * Math.sin(sunInclination * Math.PI / 180), + ); +}; + +export const Sun = (props: SunProps) => { + const { config } = props; + + const { sunIntensity, sunColor } = useSpring({ + ...seasonProperties[config.plants] || seasonProperties.Spring, + tension: 50, + friction: 40, + }); + + const sunPos = sunPosition(config); + const sunDistance = 20000; + const sunDecay = 0; + const shadowNormalBias = 100; + const offset = 50; + + return + {[ + [0, 0], + [0, offset], + [offset, offset], + [offset, 0], + ].map(([xOffset, yOffset], index) => + )} + ; +}; diff --git a/frontend/three_d_garden/utilities_post.tsx b/frontend/three_d_garden/utilities_post.tsx new file mode 100644 index 0000000000..264a45cbde --- /dev/null +++ b/frontend/three_d_garden/utilities_post.tsx @@ -0,0 +1,170 @@ +import React from "react"; +import { Box, Cylinder, RoundedBox, Tube, useTexture } from "@react-three/drei"; +import { RepeatWrapping } from "three"; +import { ASSETS } from "./constants"; +import { Config } from "./config"; +import { + threeSpace, getColorFromBrightness, easyCubicBezierCurve3, +} from "./helpers"; +import { outletDepth } from "./power_supply"; +import * as THREE from "three"; +import { Group, MeshPhongMaterial } from "./components"; + +export interface UtilitiesPostProps { + config: Config; + activeFocus: string; +} + +export const UtilitiesPost = (props: UtilitiesPostProps) => { + const { + utilitiesPost, legSize, bedLengthOuter, bedWidthOuter, + bedBrightness, bedHeight, bedZOffset, + } = props.config; + const groundZ = -bedHeight - bedZOffset; + const postColor = getColorFromBrightness(bedBrightness); + const faucetX = 0; + const faucetY = -115; + const faucetZ = 70; + const barbX = -bedLengthOuter / 2 - 200; + const barbY = -100; + const barbZ = -130; + + const hosePathCurved = easyCubicBezierCurve3( + [faucetX, faucetY, faucetZ], + [0, -60, -65], + [200, 0, 0], + [faucetX - 205, barbY, barbZ], + ); + + const hosePathStraight = new THREE.LineCurve3( + new THREE.Vector3(faucetX - 200, barbY, barbZ), + new THREE.Vector3(barbX, barbY, barbZ), + ); + + const woodTexture = useTexture(ASSETS.textures.wood); + woodTexture.wrapS = RepeatWrapping; + woodTexture.wrapT = RepeatWrapping; + woodTexture.repeat.set(0.02, 0.05); + + return + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ; +}; diff --git a/frontend/three_d_garden/x_axis_water_tube.tsx b/frontend/three_d_garden/x_axis_water_tube.tsx new file mode 100644 index 0000000000..cbdc11ec40 --- /dev/null +++ b/frontend/three_d_garden/x_axis_water_tube.tsx @@ -0,0 +1,50 @@ +import React from "react"; +import { Cylinder, Tube } from "@react-three/drei"; +import { Config } from "./config"; +import { threeSpace, easyCubicBezierCurve3 } from "./helpers"; +import { Group, MeshPhongMaterial } from "./components"; + +export interface XAxisWaterTubeProps { + config: Config; +} + +export const XAxisWaterTube = (props: XAxisWaterTubeProps) => { + const { config } = props; + const groundZ = -config.bedHeight - config.bedZOffset; + const barbX = 400; + const barbY = threeSpace(-50, config.bedWidthOuter); + const barbZ = groundZ + 20; + const tubePath = easyCubicBezierCurve3( + [-20, threeSpace(-30, config.bedWidthOuter), -140], + [300, 0, 0], + [-300, 0, 0], + [barbX, barbY, barbZ], + ); + + return + + + + + + + + + + ; +}; diff --git a/frontend/three_d_garden/zoom_beacons.tsx b/frontend/three_d_garden/zoom_beacons.tsx new file mode 100644 index 0000000000..8b9680271e --- /dev/null +++ b/frontend/three_d_garden/zoom_beacons.tsx @@ -0,0 +1,128 @@ +import { Sphere, Html, Line } from "@react-three/drei"; +import React from "react"; +import { Config } from "./config"; +import { FOCI, getCameraOffset, setUrlParam } from "./zoom_beacons_constants"; +import { useSpring, animated } from "@react-spring/three"; +import { Group, MeshPhongMaterial } from "./components"; + +const beaconColor = "#0266b5"; + +export interface ZoomBeaconsProps { + config: Config; + activeFocus: string; + setActiveFocus(focus: string): void; +} + +interface BeaconPulseProps { + beaconSize: number; + animate: boolean; +} + +const BeaconPulse = (props: BeaconPulseProps) => { + const { beaconSize, animate } = props; + const { scale, opacity } = useSpring({ + from: { scale: 1, opacity: 0.75 }, + to: async (next) => { + while (animate) { + await next({ scale: 2.5, opacity: 0 }); + await new Promise(resolve => setTimeout(resolve, 2000)); + await next({ scale: 1, opacity: 0.75, immediate: true }); + } + }, + config: { duration: 1500 } + }); + + return + + + + ; +}; + +export const ZoomBeacons = (props: ZoomBeaconsProps) => { + const [hoveredFocus, setHoveredFocus] = React.useState(""); + const { activeFocus, setActiveFocus } = props; + const gardenBedDiv = + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + document.querySelector(".garden-bed-3d-model") as HTMLElement | null; + + const beaconSize = window.innerWidth > 768 ? 40 : 60; + return + {FOCI(props.config).map(focus => { + const camera = getCameraOffset(focus); + return + {props.config.zoomBeaconDebug && + + + + + } + { + setActiveFocus(activeFocus ? "" : focus.label); + setUrlParam("focus", focus.label); + setHoveredFocus(""); + if (gardenBedDiv) { + gardenBedDiv.style.cursor = ""; + } + }} + onPointerEnter={() => { + setHoveredFocus(focus.label); + if (gardenBedDiv) { + gardenBedDiv.style.cursor = activeFocus ? "zoom-out" : "zoom-in"; + } + }} + onPointerLeave={() => { + setHoveredFocus(""); + if (gardenBedDiv) { + gardenBedDiv.style.cursor = ""; + } + }} + receiveShadow={true} + visible={!activeFocus} + args={[ + beaconSize + * (hoveredFocus == focus.label ? 1.5 : 1) + * ((!activeFocus && props.config.sizePreset == "Genesis XL") ? 1.5 : 1), + 12, + 12, + ]}> + + + {!activeFocus && + } + {activeFocus == focus.label && + +
e.stopPropagation()} + onPointerMove={e => e.stopPropagation()}> +
+

{focus.label}

+
{ + setActiveFocus(""); + setUrlParam("focus", ""); + }}> + ❌ +
+
+ {focus.info.description} +
+ } +
; + })} +
; +}; diff --git a/frontend/three_d_garden/zoom_beacons_constants.tsx b/frontend/three_d_garden/zoom_beacons_constants.tsx new file mode 100644 index 0000000000..dbb950a511 --- /dev/null +++ b/frontend/three_d_garden/zoom_beacons_constants.tsx @@ -0,0 +1,429 @@ +import React from "react"; +import { findIndex } from "lodash"; +import { Config } from "./config"; +import { threeSpace, zDir, zZero } from "./helpers"; +import { ExternalUrl } from "../external_urls"; + +export type VectorXyz = [x: number, y: number, z: number]; + +export interface Camera { + position: VectorXyz; + target: VectorXyz; +} + +interface Focus { + label: string; + info: { + description: React.ReactElement; + position: VectorXyz; + scale: number; + }; + position: VectorXyz; + camera: { + narrow: Camera; + wide: Camera; + }; +} + +export const FOCI = (config: Config): Focus[] => [ + { + label: "What you can grow", + info: { + description:
+

+ FarmBot is well suited to growing a polycrop of many common + garden veggies at the same time. Crops we've had success with include + Bok Choy, Lettuces, Radish, Beets, Chard, Arugula, Broccoli, and much + more. +

+

+ By placing vining and other indeterminate crops near the ends + of the bed and training them outwards, you can easily double or + triple the area your plants can utilize while still being maintained + by the FarmBot. +

+
, + position: [ + 0, + config.bedWidthOuter * .8, + 300, + ], + scale: config.sizePreset == "Genesis XL" ? 6000 : 3000, + }, + position: [ + threeSpace(config.bedLengthOuter / 2, config.bedLengthOuter), + threeSpace(config.bedWidthOuter / 2, config.bedWidthOuter), + 150, + ], + camera: { + narrow: { + position: [ + 0, + -1000, + config.sizePreset == "Genesis XL" ? 16000 : 8000, + ], + target: [ + 0, + -1000, + 0, + ], + }, + wide: { + position: [ + 0, + 0, + config.sizePreset == "Genesis XL" ? 10000 : 5000, + ], + target: [ + 0, + 0, + 0, + ], + }, + }, + }, + { + label: "Included tools", + info: { + description:
+

+ FarmBot comes with four tools to cover the basics of food production: + the Seed Injector, Watering Nozzle, Soil Sensor, and Rotary Tool. +

+

+ Also included are the Seed Bin, Seed Tray, Seed Troughs, and the Camera + which remains permanently mounted to the Z-axis. +

+ +
, + position: [ + 0, + -300, + 175, + ], + scale: 550, + }, + position: [ + threeSpace(0, config.bedLengthOuter), + threeSpace(config.bedWidthOuter / 2, config.bedWidthOuter), + 100, + ], + camera: { + narrow: { + position: [ + 1100, + -1150, + 500, + ], + target: [ + 0, + 0, + -325, + ], + }, + wide: { + position: [ + 850, + -650, + 350, + ], + target: [ + 0, + 0, + 0, + ], + }, + }, + }, + { + label: "Universal Tool Mounting", + info: { + description:
+

The Universal Tool Mount (UTM) allows FarmBot to automatically + switch between a variety of lightweight + tools — whichever one is appropriate for the task at hand (seeding, + watering, weeding, etc). Using three neodymium ring magnets, tools + are magnetically held in place during operation, but can be + automatically dismounted in a toolbay when not in use.

+ +

Once a tool has been mounted, FarmBot can power it up and communicate + with it using the 12 gold-plated pogo pins inside the UTM. The stock + connections include ground, 5v, 24v, as well as analog and digital I/O. + Meanwhile, the remaining electrical connections are available for + custom tooling such as specialized sensors or low power motorized + implements. Additionally, the three liquid/gas ports provide water, + vacuum air, and an expansion port for custom applications.

+ +

Because FarmBot is 100% open-source, you can download our + CAD models to start designing your own compatible creations. + Tools can be 3D printed and wired up with common electrical hardware in + just an afternoon.

+
, + position: [ + 0, + 75, + 0, + ], + scale: 400, + }, + position: [ + threeSpace(config.x, config.bedLengthOuter) + config.bedXOffset, + threeSpace(config.y + 150, config.bedWidthOuter) + config.bedYOffset, + zZero(config) + zDir * config.z, + ], + camera: { + narrow: { + position: [ + 500, + -300, + 225, + ], + target: [ + 0, + -150, + -100, + ], + }, + wide: { + position: [ + 500, + -300, + 225, + ], + target: [ + 0, + -75, + -25, + ], + }, + }, + }, + { + label: "Electronics", + info: { + description:
+

+ FarmBot is powered by the workhorses of the DIY movement: + the Raspberry Pi and a custom designed Arduino we call the + Farmduino. +

+

+ This custom circuit board includes Trinamic TMC2130 stepper drivers + with built-in quiet mode, an STM32 co-processor for monitoring the + rotary encoders, five 24v peripheral outputs, and an H-bridge for + reversible DC motor control at the UTM. +

+
, + position: [ + 0, + 200, + 200, + ], + scale: 550, + }, + position: [ + threeSpace(config.x, config.bedLengthOuter) + config.bedXOffset - 50, + threeSpace(-200, config.bedWidthOuter), + config.columnLength - 150, + ], + camera: { + narrow: { + position: [ + -200, + -550, + 400, + ], + target: [ + 0, + 100, + -150, + ], + }, + wide: { + position: [ + -200, + -550, + 400, + ], + target: [ + 0, + 100, + 100, + ], + }, + }, + }, + { + label: "What you need to provide", + info: { + description:
+

+ FarmBot must be plugged into a standard 100-265V AC outlet. + The power cable comes with a standard US 3-prong plug (NEMA 5-15P), which + can be used with a plug adapter for installations outside the US. +

+

+ FarmBot can optionally be powered by + a solar + system with the appropriate battery and inverter. These + components may be purchased from a 3rd party. +

+

+ FarmBot's water system has a 3/4″ female Garden Hose Thread (GHT) + connection, meaning you can take a standard US garden hose and + screw it into your FarmBot. You will need to provide a hose of + the appropriate length. +

+

+ FarmBot requires an internet connection and supports both WiFi + and Ethernet. You may need to reposition your WiFi router or + install a repeater to ensure a reliable connection. +

+
, + position: [ + 300, + -300, + 0, + ], + scale: 1000, + }, + position: [ + threeSpace(config.bedLengthOuter + 700, config.bedLengthOuter), + threeSpace(config.legSize / 2, config.bedWidthOuter), + 250 - config.bedZOffset - config.bedHeight, + ], + camera: { + narrow: { + position: [ + -1200, + -1000, + 450, + ], + target: [ + -150, + -150, + -150, + ], + }, + wide: { + position: [ + -1000, + -800, + 600, + ], + target: [ + 0, + -150, + 0, + ], + }, + }, + }, + { + label: "Planter bed", + info: { + description:
+

+ All FarmBots must be mounted to a raised + bed or similar infrastructure. Neither materials for the bed nor + soil are included with the kits because every installation will be + different, and shipping lumber and soil would be prohibitively expensive. +

+
, + position: [ + 0, + -config.bedWidthOuter / 2, + config.sizePreset == "Genesis XL" ? 1000 : 800, + ], + scale: 1500, + }, + position: [ + threeSpace(config.bedLengthOuter + 50, config.bedLengthOuter), + 0, + -config.bedHeight / 2, + ], + camera: { + narrow: { + position: [ + config.sizePreset == "Genesis XL" ? 9000 : 4500, + config.sizePreset == "Genesis XL" + ? -7000 + : -2500 - config.bedWidthOuter / 2, + 1500, + ], + target: [ + 0, + -config.bedWidthOuter / 2, + 0, + ], + }, + wide: { + position: [ + 2000, + config.sizePreset == "Genesis XL" ? -3000 : -2000, + 800, + ], + target: [ + 0, + -config.bedWidthOuter / 2, + 500 - config.bedZOffset / 2, + ], + }, + }, + }, +]; + +export const getFocus = (config: Config, activeFocus: string) => + FOCI(config)[findIndex(FOCI(config), ["label", activeFocus])]; + +export const getCameraOffset = (focus: Focus) => + window.innerWidth > 768 + ? focus.camera.wide + : focus.camera.narrow; + +export const getCamera = ( + config: Config, + activeFocus: string, + fallback: Camera, +): Camera => { + const focus = getFocus(config, activeFocus); + if (!focus) { return fallback; } + const camera = getCameraOffset(focus); + return { + position: [ + focus.position[0] + camera.position[0], + focus.position[1] + camera.position[1], + focus.position[2] + camera.position[2], + ], + target: [ + focus.position[0] + camera.target[0], + focus.position[1] + camera.target[1], + focus.position[2] + camera.target[2], + ] + }; +}; + +export const setUrlParam = (key: string, value: string) => { + const url = new URL(window.location.href); + const params = new URLSearchParams(url.search); + if (value) { + params.set(key, value); + } else { + params.delete(key); + } + url.search = params.toString(); + history.pushState(undefined, "", url.toString()); +}; + +export const getFocusFromUrlParams = () => { + const urlParams = new URLSearchParams(window.location.search); + return urlParams.get("focus") || ""; +}; diff --git a/jest.config.js b/jest.config.js index fdabad36f0..1a490d559d 100644 --- a/jest.config.js +++ b/jest.config.js @@ -19,6 +19,7 @@ module.exports = { "./frontend/__test_support__/mock_fbtoaster.ts", "./frontend/__test_support__/mock_i18next.ts", "./frontend/__test_support__/additional_mocks.tsx", + "./frontend/__test_support__/three_d_mocks.tsx", "jest-canvas-mock", ], transform: { diff --git a/package.json b/package.json index 26e4412fe2..8cdc1e121f 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "@monaco-editor/react": "4.6.0", "@parcel/transformer-sass": "2.12.0", "@parcel/transformer-typescript-tsc": "2.12.0", + "@react-spring/three": "9.7.3", "@react-three/drei": "9.108.1", "@react-three/fiber": "8.16.8", "@types/lodash": "4.17.6", diff --git a/public/3D/fonts/Cabin.ttf b/public/3D/fonts/Cabin.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f5edbaa065e35d92fbedb276987abb6651087383 GIT binary patch literal 153656 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∨6^KnKC?$H%9EuGz6 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 literal 0 HcmV?d00001 diff --git a/public/3D/fonts/Cabin_Bold.ttf b/public/3D/fonts/Cabin_Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6d99c3759e9100aac1610f1304df74a0a929a529 GIT binary patch literal 76300 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

qkNje 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 literal 0 HcmV?d00001 diff --git a/public/3D/fonts/InknutAntiqua-Bold.ttf b/public/3D/fonts/InknutAntiqua-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a926d326a9d9f76d5f41f4c3a8912572e036bd20 GIT binary patch literal 347140 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%0Dc&W1ifiy!D=7J!Xuo3g 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%0DyARjMX14BV##GnxWYRss5qU?6Uw`~t`UsoW{Z zTq+wyT?RBQCBmFZf3f=ya(weg37Q586sG;-3-s))&S5-B4b~jB0%_mGh0}!o*Vl|bW z7q@iAYC{zW#y4_^Dtu8H0zXsT$gL#t ztnSduwCgarPU!oni^vRzZB+}*za*i9=h?{DhLTNJ6}iQB?G9o}-e%Uv_o$2Ug{ z3-r?BOM?p=IKSoiK!01uqQ>wUOPfnJUS4qi(pl%ufeEj(r7b#rnblz*7_hqVLe71i zbu}|u3XOf6I=VrF1scj^fV_>!h4Qs2_(imtfGN)3uAbkbo>%+dtoG*?WglB5ZGMI! z6$M#V(q=WEBz-;g!}X%yxmrIttDky5B6GLl0kU#80y)N>Pv`0RbpAW|%_(VE`XMBO zG73(^+9D+qQN~JHDMhUyOqhgFa6$+H*f^?$Ha(Sm=yy5%BKyPZw`B#WYH~gd;5N5( z&s!CNw$|m|#PdTCv9^}^239QR@y4((@g7_t^CUmX^~;wVkC~Ntxe_D7Ka6NQNaOan z18R(}1m$DAp0V+$8`{sfk%D}7s3Hb(Khpw9dVo|`hNO@jT`7kgte!j}aC!Ji@UUYx zCWCM6*=IwPsEq!>{K-~;IgSGbV7STa6$Q5}Sm&ReAQ z-mYdYE)c&S(pH;)QK$U6cS;QwUV4%e7VY$76j_Vfumf7UB46Iq5l^(iOZW@Ghl>+-%8gTJ_ElKF1FAIgDOtkBak(}p>D{!MduYt&edvGF za{@CGYl^kT>qy!1xVc#MA&XdsX3$L+#hoGeYZr(mp}>0Z91jIYp<0D3?FNUEcdK8m z#4pHY)Cr^!_Gp*00B<)%O)cF7`!m%s(9q+mSao-KBvw78`~eM5q$^`J6)lzG$LOgk z@B?d-Z{y~>Gq7gQ4+!7_YozDI9LTfQ3Z`mD5P=GH6G0tSY*K*)r6M{YEkKfDmRbWC z!zfb#Y0BzE;21GdVgXrkrwJ7<-81fC623!Z211O|y)$nHTbGDFh_<8_R;w^J(TA&O zoKsz6k#d_0ZO0(RSEqsYtsLl^0Y75~D8H3n_KB$cdqDP4nM6nxmG^#?APek3#wbyO zJQkpeKvY-_N~8hR1_m7VlnjZ;Ke6!SND}g+hz(@S>nSZM!b_cj0+czG?YKrhUb?0j zLgh4UFpN!7v+BN2q~hQ(RM2r4MAK5W|hgeEF0ghyb9cdu$K*}UyoXFjY z+*$>%{1w6}SoEG&UbfD-svoCk^4Z;G%q+81qCLjvP^XNY_)gPPh72ZS@pDB9%8ZBcLZ=YqHOo^hXVJZPpB&@=EPE10Dte8q^ zk;una<01?xJVPQXFBN?L>Z^fXmtMM>`1>C&TJ*)Yh($ef;ffsq73|bXJ}{-0P~TTx zTB2}WZ4C@4u%AHUK$5*QP=+cTGKU5Q*EIM$5fcScIWg-%jl&N;@$GT^g+kG zw>mnOZChuIHLXqyCm`&2Cw2p}Kic9gMTG^R)TJeAYOg5VV51t4T&C!2l9$q$iBYSu zK$DD=1f_3f2ud%8&mAu)X`>Nh64qLbM3C)g1PLqnF7`!!ixdufj`F1K$9D!^CgrkW?qnsR90v>R8|U< zoHQ#m+w$u3`D%UDHHXg%H86KfHAJ|`_G%!Nv2QA{Are~NxwLHx9R-KFmh!~^I(L?b zY9sq1^qccvZ<__{gY{8S9s!srZ-&E`uTG+`um#RbfuAk5Lunz{bXYj6Z}Me z7>Mj;^{^7$qbk(}h+I;HS&96TR4*^KUtM(wBdiLMFEI~>_3^$$fqN-wi+qTF zEn!h8=}Rc0V+Lkv*oA?s8&Om=CBBxp<|<+e*rq!a-LrJ>S* zw+gp&Lq{j$bmmNi4^FM|srR?hRA3`%p|~|apW;(zLVmc~p0(tdE9|Z!pGb2faw)__ zWG}IEc;eJm;e2nQ^P!q{)j86gl%@ZHAJ++FpB9hXVDBk*!`6(&&^aBn7VyJk%qqUA zejYCT03;@19S}9^b9oSO78G6_wb(_bC5%GOGQF)%>CwamH)ez>wDk@ro=Zh3jCRcU zVakgdZ5u_ld}lg1fw&)NbhkjBzIaa&a0hX8C@GW18(H8DTsgEAr5%8{7%adpq!IiC zve;`xs3g-8bjO$<5?El2YU7Io8h(UUILlk-6|CvyMRtCJC-Emj3}Sj)RvDXW&kR(N zlSYh5kV)vmg0)CG9`V_0)V#x-NpzXExK!5RU~79@ym7_}wb3tD^_I=6b`-aD z4IVRVV2Mc1tG%_;>w=5$_XBO+?n2ClMr{(a zd_|l6PBBYA&X=UmWA=J{O|yjjLbL2<$SbS^>2zVc*epmLCeu~!yh5@4$FL5TUZ1_r zXD=yH^9qlURyZj@;LvQZ^~F=UNRjf`&I)znIU%!aX1T9DD>ErjEV--#5cb@VBJ`Mo z<)#Vy@R}4tkA3`40uUuAzN&*Qzn49uTF5L2Cg71gc*7x4$5VenkWTsi5k-za*=CPS6Ys&R@iez0&KecyP8W#<~fm1C?p+9Zjl1f*6JqTj1y`i+lqVL zGrV?pq(0Ib@*y_C-(I#TF*>w;`w2J93~wF`1w9`A?T%1oq|0A@e2>liKvR2}-Bs)J zG)(pTJ44=DcgeJ--J?4@X7Z{1iv}-U6rCRqc7{ClWmt(+`lf^z{17UFg9vX*3EM2Z zDLSg+0-s6Bo8m<$z*N}*c~JGBf+!;7LikbD#LPInOllvT#w~TImznA;dI%#Bo>XkJ zJAHQYb7%NbQW=XAd?-0QD5Jm6^q-*eY4Q{PhV&Z{ZWJ>|4OAHwYPl05z%IfRC?6lA zMQMAG3E>~XI{RQYwR?$7=!inM*%)sU$gaJYy~oc4G({;UerDSKjeb&CsIcgVu^i+GT?T;k z2^#jVz&B&@RtJXd!LWnge5)SX<77jp4UeH$sOfZsV=Ov}$blWC^=z&}g={*y`Hc4de z@X>)2>d^?Grh)T+(qM*qbk5lM?+W!u1@qoG&I9#r;CzHQA+|Q|hAF%f$YW6CU;v@F zij)eyB{;jO`z2J43D^QrY%Q7iMYL@h)-C-F&e7M>T99%PU~3{oawA46XYgnah#91l zv}oG#xaG+Vq0I>yGBv80LouN$rrpQxpsC_@Dool65y#3p;{~F2B=`wzQhEsW^Y#ZY zMJmpyZUtgL_=};EoY*HrkCxcfR6&%JfE;g!Y z$C4WopS(ZZr#?`=9S?M|X>pMqm~XYf5sW%~NdGD{Ns{(h)FZEmx!3+Kbn=PUd&OX0c|{w}U+?Jbq+uO;>jc1u;2_^F zP~;#chn>h#j4OSfcA|RzPQ3I8-)sHVo!9~&zq2j~uQ#OvqLg>QUsY~V^t2fXg5zxX zut7{8OmD-9U#b;C;AGKE@-59?kLqj5Fv%Y-AyAhaD7-k=uH!wqK$UyveLGQcwD8-5 z7YWhcuqG4IZmA5+5B26WTeA^+Nz&@gkq1N6m&;h|9QEdeiBE^MhTxAEz5vfC(+}ZF zZnw1YnJbnp_x|6j7p?I;d)1QVo_BtG&L-*kMJ;_D-{05L_so18Jbzo9P!I9rgzJSY z5-&vf=3HT3gc{3Cl+uNzqOy`?SSK+bWhJY~zz)ub8ltfjj>Tex;qUd%ouZtU#`3ol z6^T!qhb~ymU1?m0M5#VeVAWp;Ye3(>u3{C9M7ZMUJm|Y0zX+?uc@?YbPz<0b1d)Xg zp!9Yy0AEJAiQGbjQVs;^X3%%gmg$sV>VP|0xg_g53gB~4zC~RmBb>-^1loTch#Wkm-cc=i%EN=*R3^1Cm4iosNax^b z#;Mh~gJ9vGDF+XQ58B))*vWregNhkTc=Ux(Y$4y5`00IGfsB>~w!atkCVmD=Dn=*P z^l!9gSkwCilgU00HL3w$r~6ZUfZAV;;Y85~lyNu{a#uAwGj6XAd&)|YE=_N`q40o0 z0~VSbnqj~L_HQE+Yw!*j`9jpMFnm#%>^-0%vMdUVR8s1KkIqv51Jvx@=xW?8`et?# z{&*DPaF9RVFu@-`zA%So&VU77x9simKs#(piRXrv{b;OK$8pc}ZmsYPE=Sk_gm*EMftyyC5z)e6 zb2E&9l^P}E1`7mw2C<$oH3yIKRqInBFlO)yx@=6`MO0P;$kH(S$gb6Q}Ql{J)a=iR^A;)j8 zm=~z)sF@HBz5Gl48*Z2xTDR1#$@!|7zoWe;-r3fk9VI<@@nS^}n`xk{Lem0bfCO|` zWhHc1dTH2vwu~Pa&s#WuaOR9QBEn`OCj|JZ*lX6j0_$b~+=jOezB7Ct5bVsdp*LPGm0oZXh-O4fyP>;V6;e5|g-3W4u zqF2_Bzh5D?LLW|A3N5^F*JruY*q93EQ@yO(1q&#DVZpKmOBXMiJ9~P6Z%=0onGE7p zY5-`!Umc*RI|niu_=GS!1c#?Q1Qa&~)Nlq;rd;7wNQ=jZ&28nsy!R$Ag7i*0Y5k2e zx-Tm&E%&ySHk3G~#9P{={zhN4IN0QCExGqCO0qhxx&9whn`fR{d3ki&)^jNV_70=o zSII}SWBP1XOGCN4p`zCBLcHG{(V$2##E(>F;aqPMz?tqe8KBy8G26W*yJk#)7on8KQ-9M_PC z-ZLn!90n1ca2*K^^*OF%5*{EK*N?y6N)IEg$0-FRi9+%-E ze`hSiqwJWPaP!{18nz5yJFR7BAc~w1o;&H|u|Q34*SKI$y)r%xgx378$}D*s9Bb3r zv+)AZzi1ffOhNh96y2^y+&UQa3KOd8lM$4USde1N;02(?O9is4YfgF7+S=ig%@Dmf zR&4~N)&qA5T_sjL^P+eY!hZ3tM6Di`IXGffvLzG2!{J-M1s?*Z@NhX|CalY-Lw9T5*ZR|&JYh8$B z1?1zH%pl-YWfZc8ggQ2sT?WMXSdEYbWC?o^$GyhgPw7C(CvaHBoo%m%n}eYV>bz=?(X&|M3MSz+P$TZS>h*`Mu} z*oX#`Vf}RT2%VXKg z@(2aTXCha_nc;?$n^G*e#AkJa2e(T7O@89R{?_6{ALUmr2HqW%zo~NLriOn^ZJ7aX z+%kQP8&~i{V!w|=#&UbGCdHQ#{0qi>MFwL&7Wp8Ar3pDljx;f7M?M&|%!-qr=so}j zcR>eQ%rB1@&L5l_YostZ;?sE+4S8eqPLl!@49+78Tv){O@(c4uP#wx_$u~pHv)R~c z0~80M-d1k0s4Ux(Le}oXUJeRGxGC$BWzY+5#zy@zJbgm-oE%!Tvj%$VNS3($9hN1}{G zIHb}#FnY%k82#jEEtr0A40)L-f}%Q>{kkQ>jV$szOPADyn(n>jjy2y=n4e3Om>glSA$+v&YwSj`TS)| z77q^0nKcD9E1DYBm4!@UJAzD+7AYoKVpY6o%OFn_;gQZ!)QxO8{;NypoQ@pD1(c&` ze<)DbJ2f!txSMVoN1Y(-wVpR+&$^|MIY#sCRmauT$3B#PFA^E&OyN?d@F5ZzOI;-e zE00;3ixzpE;X2B3T+6@P+8l}y-5E*eI$}?OqwCFB?;bXXcg2hPdZxBFP%(yLH<>O9 zteQ-Ma&Ta(T(^tmD+Nk^!7h_Q(iNH|C10m(#(G$+1(p%)UqNQ_peD$a#Z@JQb)pe% zM{_;HyDzP>b-i{U;Zr3^pQ@K;JshmqYRR)s7(^Zh0UXZ0N4!tmPgqlQu%>7e$axRh zVwG3YbksY^)?vCCBp-It-nEk|)N6a%B#xL&;nc__M4cCf=d*laMGA)Kj?$0Mnlkl84t)oFb_Q?OtyjrFxD z2?Wuo>T;XldhH) z+KJEyRk6TYWygDFE!_W6Ec-Dp%#+lItsWprv z9_iD`ma(M=)|ZN6LxowaVv}@e%qWvMm|jq!2x7;b%NihOybv#JZm37>g|_GNQhTm} zS@c%D#kz|in`f5vP(n6?%^FbLBV)6vDu^(|&}NGq?kY(1Mw4;f*y=@7yDZnEOa>z` zM|&Xj9OG)bdI8qX1!@?jcZnkAQ5Elt3P}|NEj;YzLUolCg*^H_b;st;&6^vKelwY# zFPmCDaT@{ZcryXfxoK{)yb-FbohnJP{mSaPeBC@ zS-WYiRs!khiJ^D&qSQ{x^ml(2%Gf8($=pd;(@j{@DQq_TZ9Ko%N6r_xq7~UfIzG|G zR%SsZ91HngtU9ChLPB|LC!K{feJg6wSoI^&=O-xiw3f|Bajm8%i(Aktc9KUA>vx!^ zn)F1IwPyo^D5%V2p!IXjo;j_ryQ>qcm*QI`w6oGl1c%*UlPp`-qODZ34UT%vM!%C< zv2;Gd@skn2@qDa}A4sni)LICfZmd;37}+#l9=A{Hi%*@>-Bcf>7nCBkwlHM}YhneG z6+2GY!SY}SgFS=R%4D{hM)L6@S_YMtY=#+@FkwwT+;xba5|%LS`m~JMn!1QtOlFhC zJmH}hJQPHMtY~A`#;1s58MHzhYtGA6iyB6*-UJpkx{nYmOM82;&au`O5K`2M&}?dc z8*SC#1S|5S4A32wGuD@nC2lE?A6by(qu)(wldt~l&Iix-a_@_mp3v8KL_zYajKJw=u6#x{1)1V^0>D6AI9^W>gxiO^_ias?}D~b!_XRK zT5VLzPp>ve?<9*I$kjcy$m(V3H3nDAUfa|oGS)VI2~4DTD6MR+iw?7*E?Q0Eiat+j zHB)Rc#rBS@7-UMC%JoN71%^gX&{ps$)(qupv_+$pg6H}~tcZ^ztN<%@P(kH!bp^#r zrOxkD4&r;&uKHi-ui90YvkiQ8+>)}W8dDb4o_ss3sD(_o!iLCB=H!J&Ryg7qZ%K9W zq9VRpGgD49q)sCuox0OzW~1BKa@{VTT7>dd66#B|CgqhuD)UwBWHZNR@4&f@tk z&3N~nYN@cKM7Mf$QjGjzhcUKKvn~kSKp20sDlo(8`1L= z@Pe1OigJV`cGaUM7V@<8yRaLu3MQ^>HggyZEIPeq1U6f8De812`53CG(sJ$L`ZEL5 z8FU-OWmJ&DRbOAvB>d3&}*a8wpr` zgl6a!qW~7lApu?#!=Zvmjn5F(s!1gEOzcXz1A5&$4LV3Jz!4$agnQzRNjm*XL@v^s zXY@K!<*YWlP~nPFp+u^HNw1O7qU6UZZBhcpk1;6SzPa<{O--tHrit-sm_QTj32T}d z!9ctphs+qy$F1#c;+^z*ok_33pi$ME%vfl%VHea~oxyk^BDhUl2Wfq?N>nj+Q8T(q z6oVyr)E)jZgk9;4`t{;!lFnO2cl=2z)@09OMm%OEELjA5qn-rwLKu^p)liWlx7`9< z%cV|bfNc_4+--uUd{;!o|^66`Wq4Lq|#jcf73KT-m3>Sb7P&vWe}B zo5`X8O~^p;L4;*Bh$quwhoT}bf(!K*0!`rZH&T?4P=B&wfe5yt$uCgDcIY~_s;E$T zCcV8Lw8OQ>tW;A!2Ux#)uhU&RPc)rlUrUmgNd{FCU&NvJ_9$b zS1(F)l$ume)ax;zo>s=~v7}iS#GC0_l1;Ud@X8=T+tvpe^nTfSrPt@An`zXKZ}K!60n2@=F6 zxIqBixZF#mNNtH4q^31(YuJwM*p_5lr1z+uG;!)A&1mB^j?*}^iJRGcW4BGxCe5mw zHceN)t(zUkBJ_LCd+)^{L5h;|`{Vnm`-x-&7wq9T$26%XH%+ zTXAyYS9w6@_)KP=Q$X1RjyDyU_=1b;dO-GfX`e#_1JNkK-3BHHQ09vENBg=uRzTex z*9Ude<@X_paBZFVw(=ZjaiDk0K<~OyZMWw-hScSJ-_}!P^4QgShKm4!Yl+mciC7z~hyY&Fo}sD4gz!}lUiKZUc9J&r!Ae1Ms9#jvRCV7b9= zu1u)2>PmiNGP|nzAlfr(-@E|KaRc{u$=>@#5CHki8hrC!vT< zu&J3QKUo6H+6~cCo&y@Ls%@IzapGLnxUV6h++w*fVZpF%HyY)D6Haz6rIdC=!aQZb z!7vx-2>y+x5R#eV{!KDZO%8Mg2#rlqkqxgLg;GrOh2!SaK<>V-Xe@8XcBWA|7uDU)La5(pcHj(0xOTonGDm}y2L%w9JYoXH z*FjETpM^pj%|OH&4JR!Gt=xxZd#GS$=7H=ClZV&1;v2Ht%)ZAIclo!-QbbmKi=zqF zg5ovu~|X-YEhMmdBT(5+wuKgA#l zl)Mm-ub=A5R@qABv`E2k@rAYL`% zfND9NQLAHEL~Jj)lp;%3q+LpMjpzRgC*sqhK2txJfznMYK2JP!a4^-Mf~Cv(n$$+A zu5_Y8UD%3mq1BJl6y#xwvWH2wkZlT56l4qYz#>-Jlzi!l+?~jqoLIgA*{KP|Bd7sd z^-m=;wOx5@keZ+gBXmka)LA0vHBeqq!f4Oqg^9HGIBQ9vPGRO9RAbVtEJpt-pNA9? zPXSuXaW!z}2@uU>m;dQ#w-&W~kn<3+salbOATwHcsQbWffF84QcRK1`89suPO(jPA zs@zL}B*ilKf&b=@sZp8e*%apA9Oq%_M@RYNG94zFA2`wHVScL6y!0K(77F-lF-4B% zxQdqS#02FdaC>kXgQz*KhkiggsVSdl@eWH&kQJfCM9xP!w0fZt=#c!CbhHype~$jM z4$-LcXvi+-<5ClSlVTn9!7ILi0jw11(0=h+7U@`u9kL$UDXz>!IeC;XZ-kSpc|8Bl zY|^{DNB{D#_oWLUcm;At$uX!Vm8t=(x?Vh}0@MjDa_pE~1yv-F zMyd1SX@zl{#K3>He^M@Z=D2GF@qvjUp|HwIf|IzXC7YD&?&`!aNpfVH-;Kc`Co1K0XA!@dHv?8y(qRjGAT!KH7tr@$_o zG}_hIraa9+Auy55?B;gw+PQ7Z%tpelIEuo7x}eX`U<|z78%)G>I&W>z3VdE5h-sG^N2?&emi$V6qR&X2PlP<9RyTmt=Pe-cz zBJLXP(BWuN!ilM>-JvZ_%^MQ^{&1allW!q(zH{KdEzNcIqGnI~jm={V-?+K^hW4hO zif;GzC%3%6@nq+*^xyvT@FiZjXX)(T_(z;}oo^_j72lT#RF?Dg?(&!~X>YG-j5p0B z{Y}Fs68_edXiY{Y+z`ipJcG{}tH3 z=b$meXiYjT-58HSXNCgaTC|N9*$Zt22oRt*4kPAd@G$ylRTM26i>SE>jX?-*IgV_M z0l>VIsQDOmMpl znds$9P~8NVD-rVq@ei4r)nxC~Mq^&hG~|Ed*B0J&XIIS~f4*@4sj_-k>#5N@4;*id z&JWg?F1>t76IfH;OF#L-7lex>@~sQ+n@JwNwdm0HnPf|!-PYJLk&Fht39s#&`9<9O zt#3gfIF_2{#7f+ze=pgSxhIc2E;@OX+RuCP=%|rvhE$+|OvtlJp4T?bt2 zHfeKsrCMuAtr2M<07X>_gx;jqNJ;@!N!x*J9@AslLV;nk0dxB5xH?&XO&HO*ZvAzw zTSs4CSf?J&q?JymgVGHHD_=C!pKQk}ecrNCuu^G6M)*K#M@{=$IIW1ZMf`IfItb== zgHrgmn2FX&kMe_F55>dW8u^bb(5F0QY#m=W?E~ap`8G0WZhRR~`}{u(YXQcILo7;| zlz(0Rx`~W<38c@gMW3V??;_?5GHKJDdHqHlYN*`?L-E438*AZ;YLWThUb9_R6;d|~ zg>2^9xZTpuCIBfw16Ah2aA@#1vkfcOk72Si7*WyMfRQyuEsJ!GTG6P4XeP5k2l5vE zoGfAttw9|aPi&TzvdC^h=$<2}s~cBYIknFza#`Dm>b73G{D5jGWl5}QE@d^n@>uFO z;#cwR!8cexxiwjzNi7j+ipim$%OArQ01dG@b0u_A{&z-Pd%d1L03s3Zp2D zN2BbPaXCFskDk9LVhhJg`ybzb;E!gEyCcWj19f-evVCZO>bn~ccq;3+`})V)wnyEC zwV}DkHneSScyG$RDE`@E>Yq|?2>d5}WthrTFmklXH`dryS#BIp7IY*(7dq1o%EE2c zC4Q&1+;5wlZ}9eqx@M9y$(NC(k>!K4xr;j{9oafDE=vdjYCZ{BAt4)Ja(aUm5;CLH z&2%UuDDth0`)HD~EU8`Gj_upFY@XUMI-Dghf_1)Gc?A{f2^Vnm47^32(3_B->B#i^7^DpLGn^udj2mH z0ndrsH{XHg^wfVvW;PuR4TnQF-4^MqP5ow3`0GVpxRC4%4wtr`Yz}PiGJHDG(Ow>Q zRzy0ZN$XHerVUOs{x8-#zzs-JANo-ub*TN@wHk{K3)X-PLAZ!(okL&aNx0-9 zQg|pEq28obse2q)dYvyErc@rLF@X^=(JQEKZ7@d5m%Bc7u*3=nIrE3}y_eI&{}$w$ zwgzcWU;krs2c|E&9sY1-rKi2gZz*kF<#jdRTe$pfVSrxOS=7~6*MD>0z<$e2QrlV= z2vxT<6jn4xRu=+Y;P>f@AOtVBjr*KbF}Yzp+1p0pjJKw$0v({B|262eno{zu9Jr;x zE)9Yr7S)&xqUk)RLl++~UMGQON4u8dfpX&Z*&t1V0uf4HBz}c2eAs zz`o@?gM%}Sh19z|Rb}K5Ep1Y*8ETm>PR9 zc4|5~ksQ8dC^%RiiI{v<*0F*1-EEP9+WKyLOKVaaZ>n!ZuKvp1slV0y7Q2?@_DlPc zy=bIrZm9F)xRoOnT3BE)b57_mNSm=G5H>Vfa~^jds^O413dG2NV{kC?7AK9Y3xX;2 z9GnvHQFWsku*l)Cmjvpawah0~1%~heOqqEj2*_16?_MX;ZuozqR6^L7aA|&9bD%D{ zxXWaHI^wwF#TA0|SM-!EZMdYlec^?-yyc#Ov1sLR)rHiRqN;%#ljW6ryIp~*h2;1&x~aVxZ2uHS7)KP|tin~?F$d8nfC`JX9m1i2G_ z9v+Ii$ZLD-@>Rm~!-!ws0pI+d-CH(|pbgK_5R}glixt;%hO&+j0!d7lTlE;J=g1`= zJ3UY%(RCcC_q1HB9%DDsm!rRGuYac~pp9y=i&9fj*pZHrBa zQGm~_t-x8+YXp}8lR&`s$04-QiWX6e2wrDFixH_5f*pZpZOS^)0yHe~xtJ*gHOx^I zX_(qL1)GbCH+;*8y~^(^B_~Ux)5FPvpphzp&}8w+lMk85;|ZioRyTKwwL{}Uz?%@g z&ZziWJJ4&EJ0Yv;^8VfuHv-sp}Y>la|&b{t=EDp@f9`oc%6%K0;2_yR;@(35B& z8K+3XEbiRLgjwC%UtoVa^_{)(U0u;-c8x;$ndH(*Q1?EB;Qh*lE5|jP*o}KqviJ3N zbzpWD>U40-IV%;wX{31-BnFXj=+6>Zt?p#DajKAfxH~{X$-+p=tdVRfft&L&l-V4P z;)YPfhe?U>)tOU))CMe)>Z-B}fV>Ja^|+qFK&lvhcv^nd=~6Ear(gJ|iGvLd@%E)Qm2q9u_p7)5+>Y zuxYfR|4vx>!4rw#Kx0GFTOAlo7TE`q#=?PEV4!w1@tew;mK}+wQ%e$9E&@PATdC{K;pz9(Wqz}s!a^-d6LM3)hMQdp=M<*6;X&0 z5vQu!i2xEa<8nR@5c;N>jZ+&YMuytsjr9Rvl~G@oEl3v*H{?k^PL@Hyok|z0Dp#HU z>T>(w3Xo^+SHTgxs~O5y3Z?*%E7KiJq*T~!?mRg@hyt}5XNNW%S|mYVW_ z%VKFy@{L}nGZLCf78Q2P#cR7FN>4nDS<2BmKLl>eD{x}{ya2fJVV1({#|4R` zuXqms%P+kh|K5od-T)EmM_UDcyx&_2xR?&1BqECis;y)4DcnR3IgUff^q^f$+($#* zWH%Q+W|5cDa^+=}>`onaIg>2zY>D1{=kXoKYNtm&ezt!8 zJ@vagPLFSSFno)b7w0g*ItF{q77FY=TPRE!Td0oqM@|C5MXjPVD!vgf^09p~5@hlk_6aXX zfv*L8{I1;LW4B z#zKJ^BmbfVlhLUBF^&G|TK7W=_HhLT$}=ckg+~D5y2=ua2o{V87FH}peo6t$RqdJG zxnt|*@zH*XstiT;l1MFMAxk@^372Y$5-t(f9vsy-o5Rx0?s#y^?DMDek%#rYeH)IJ z`k&nYQ6+nGjU@=-J9V1YT~X<9thy||v$8tq9ZxpyNo`G1it9QOU1YXN19Y%R`+1L4 zx@iU_h56-qNvo0$A6+d$XyFR17C5$M&T6(Qi9*z+DNVW0W`d6*XBw41rxTS!*Zw@y zJ{$04^5cLXk`tE$t33yaOE^zNFSOeFl;^QbW({;_KevBwALz)oP5}WuIFOaoBvOf- zRGsd+3R7#F;_J_M*5{b%rW4uKsY7of7n-+5l~$WaxUIZJD%k?+wq;6Fq*gCi+Z;Ka z3?34uCFrS7Yl-@2vzd5wELCahPHB~W&VG~$)yfWsNxI*khGZ^*>sN{hT@bA;>ILy;^dRfr=u@{}%X0_$kW_YHcGu38 z8cjo|NWNWFj>8_$hg`Grmo@AEe9+fvo>W1D6)-1x1xoY=Q) zXNyz^WYu$@?}9J1v5n4GCtdyAul}Hw6;sdxVxw;3Zp-U05WU;)?>1l#>T)0px{U|+wc^KO58UM1ndi@X=A+ov`@x8KexVgEv^TI%|uBp{GEeLmCr`NgCrFhZp zs|uA?wFK)%%chg|rm~vS(t5AY)7(#10xUfQ)KKwLKh_v!E0Ovw%c<4!vX%I;=6|sr zB0g_cfE`o7R{5lgT{|~#n%OXcvy=<-V5JDEw~rtY60-qTXxb|_C|wI5f2kVwFo*E>uE90TDmau^K({GpK~4 zw+1{9jAj-IT-0|dPi`OrQ=L);X=-ZfZt6<+o;&o~(P?40YGSSl9}xRfJDqFRo^ z$F&Rp8X1}L4>@AHI$UZx_1d?x1%))tS1`KnWu$4$TuAbps7F>nmKw)^CRg*qJ|HID z0_8i*oY_%i*HUs%4x6dQ>f|f1R{tgb?n}Z2*cIWUuz@#T+LdU( zySu!+xTseYv4V;D55?m{-I~Os?`}DAtin|ss~8ZM>L_YPs(F97sZ)McVH!(v(~>YU z9jVQ=m*nQEu%u#TNwg-pu%2f{KYQ@fWMbiBO|7e4SK9SUXE z)37rX>&JS&3=utt^|)v~Xve>*h+Lc#TVVH*h%mX3mZOiVn-QgiYSha=`r?tqTh89C zD`jH&uyKBl*CZZ$w&j~oU;bBF9!;TnSiCD=Mbl(2T(T0bS!%$~qdQWA9m3cuPIHJU zI<_gR0$;)vLmC+8S03Stm?*M;97vC-uk)`-8&hJ)3z=JoT-XzZsoS ze|`78gYvtJpJP9c`acShMp4jR{nv~9?AKN8(5K%WzwQ+_ym3p_*)Q(C;dTf6`RD4s zb`ih+z6V;4965Pp$uGbB!*7!{L6gLY@=rhdl=9OLy@{XpVb8N)TQ9u8hd);QWa^Fc z|GPzg@AjX*hu6f|Z+~;itNu1Jcy!pcdi;3NI^Vm9bL6}?TBR~S?(hg#_{}dCKa=|Y zh16>o*>C^ZC-^B%{B3V*x#95Fmn!6+=6%X9Kc@aNx`@CNyr#tEU-q%>=JkP`ACCK? z;_vvUi=R(D|9I+^XXKYY%==zos&?ea%S$K*)4^8-t}DYY7t=ehW>rS##Ize{&7Xow9DSx z;fadx=0C$5ivKNj;ghK+{#5??f8rk(6jl44YVuT>>wc=rd>ucYv)e0wTzrjxm3J3k zPVM_z>d5Ei-~JVkLkvwje&D-H;oR-kpS%8__T}t1=g~;Gi`t4)ucf-an`-}t{M#5_ z@o&m|e`hJU?8mR*$Jyy-wqc3Llk6%kI z-pqdgPao%>K`A%>#4|02kDfTH+Lyoc&+!hnfWJL)!;(*yfcpE!;@{)%Ynz3m{2j$hcP#xP_0!bo{qpbs z3G~6I{QeQu(4>F=S=?;bWM9{K|Csi?@G$>)@zUm{zfJu^D)6Yh10Uy8d_t4J4v+v8 zOZWJbilsAsOx1yP=svUXYplSl^9X;(f4+E$UwR<*;?lpopRM47FAEaC2Zo-OaQw(p zZSEeJ|4Nm?^=RR8CD46I4DhcOr*>Yxl6off$kMw%!`ATr9|;fgcW4q%y`$yG4aW~J zdE_-b_7o?iK0(eM)=&)Z3NzZPis0U%1_vStohW0?;me{`W*>N^G|0LOf@Y5Wk$P^b z-KDtlaW<%uVuZ_~`h5U+lBKu+siycj!558k2`TY&$uG$?zkhrIwP*&;Yx}}aPazWvi0g41@9br+mqV_QJ zNKuU=kCd7KWtY?qm(lO^z$aoQxb(HCE-7cB^6D-ug1Fu98+%k#9xH#x56DC0A+p7w26OYGU$|u&G7Z zQ)Nki_T)P^&FDU$AG>?g-~Q-A_L`oYn5y!&RPDN_KlMYls#}#+m2)wvwG3qH8j;*N zATC7sk`zwpb!_u6B~018a<1GFsD*$GDs~_HM-D#0EP@PVNBX6#$A6JuV!p~;qJzBf4u40`)Dnfe~Y!ef}>wbYjN4E>sU)ESL*QPUkeS%jJ9g1 ztB9{8{l4^Pr@y-AO6!YtKY8C7-uB*e*(;eCO}*au!lxg7iY?^1-{(SV@+{=GAD&A6 zeC+v#*FSzIU;F&&)mPG_tfYiQ;)n8l#OlOvFirI!9V^|ia6 z{}g}r5w%p{TcJ&k~;k)bB0p%Xw&2tD{;{_-5tp4R{s0EpaG zf*NIj6dUol0yu#pfd)ZVB)~$+3h2{{1Z1!bnJBWGGI;x|^@ypF>xU^N*4(2V4lir_ zdSdH;9?A-8DXYa>GR<7wBVS~i|0}lkM=*iBLyDK7O$#drsoDyir*Ky@4|s4D*;ahK zoX`Wy#fx+w{QFF8NL}S~FLod4XiY-_vKN+Bxgq=T60HZ7n=m&d^@lLnT3(U~02G`? z^w1EjA223am;j)VFmVg0$1==?u`qdU=|&@VGIQ3pvN)kGwP-V|EnG?_A<%TGf&Ti$ zR{k@#ERiaugP!5s(gEHAr2{!DVc`5yEhH-PvP6OP68L=xPUW0|fio1@HF^w*X0{)I z3YL%fJLN}&1==Dx#i4lwLxB-%+AMgS7MCCyCD1I=>*KBwaQlg36@!`=VqTIRTSH;C zdgsNWa#me^%MVkIJfr4v&Ko}lUH%oU&;M{eB>(0nbXIWVfLi!SE%Gb0a;>EkEj?Th zLjWzm)nxf!Tc%hsS!p_sbMZ>RMOieCo{%~>WOG1e;jgIeVp5$8_tHspk_Qo~2|2h^e75Nesf_K-I zf7DLk?Yp@VX%Ov(zqz01ncxeJA%D{Iv4M}}#M@eIe55)Y8 zZ&OVo=DwbSq>INBc8@F(LLtijgo{-S*o$i?D2W(q8G7pAf$0mCMUiHoC*0GdGl)wc z@&$*ZuSHUS+CAGHiw$Xt3R7=9s2yCCk+GJ-{u?E^GoZ7{7w+iOV}g^hePM9;#?p5s zepG!Zq}sBCyX*iE#Tt=|%6+K#Muo%S_vM&C zG-RvW8EthbeLy1Rb3WEGRvkRLp`$$*P5t+x_;UL2rCtthY#ZM1ch_28Ww}S;${CPe zS+J&3F3LS5S;4v;tgdtwV-%X1XkLh9q7MB!Is;rqE2OaM3(A;ig73MU z9NSOmuZ}_dR9(hjqT=r4)ArHLJ3nxwsysPk-@K@CTw40(u8HQgI~k`_=~En31*D8W$%Nmr)Lh2vE9ZN~s)2b#d3 zkDfwyd7y=h;QiTsV6{O$)3CFm=}YeyEicPg@GG2F*81iKP5lZ{(fj3s)v_c9aE`hFV z2pr2kOxG(8x?Cd2{w(-R9ZuZ!&b;TE;Wt(MJDD~>wq@I;sh}h5YsC>3A713YqMYKY z=3uRLX<$K9x**>_78_2iy^wTYOGmc4sj(Pi1d=n@;WK#CKgOGOVFbnz>0n1Z+JG@$ zu95<9lG7$@pz0T4jR5ndCL1l9Y*6tKK&lHXMTB|Kb&$j8&g0Z_^XzbBV}-lByGOf+ z`;rbvna}I=)dh%7MFvqTS}vo|ahBCrbj8zuWQLrXE)|FFC-n#NnxU<|;#x`STdH5wd~h-Ko$2ymiPH=>T__K~ zW9!WAebUXt@ksfmXx{`slhoIim)acogC-FSHiZIJw~qA80=f*T@h=X?Hx{~U+HgzZ z7W=jMDkSD3K&ZE-!d@s}+(`8xGY+B^k(-w>0=Ty`9bOO(#zi~qE`K2F-j3lo$?Vcp zE2HXQp-#>|0JS`lb#hSZX~9ooI~mUj;pF@EV2NROuiYkStvaps zJO?gFYXM!t&{^>$xatkY0>g2%^{DS=DKv|KcCs#FhU_HDxzY5KFlbMwwVk)~HmlBd z9nX`dpjLVvk4hWR(0X(ky}1VhR8iaC&vE@*`!~;QBw9d7q%Yaq-6eOV`kicO6f?i5 zgDNd{*W8h+M9jL1PU2Kp{vyCb72GmL~M9*Vcj>$?h+yp&k=nb-e&Or!EM&wuzfcbxdMyUNYL` zpgB>^WEYwTL?#0d?RFI_NnTRn4eZ(8Fns%HWQ%XZ9 z>?3Hgkx#5%43SN4a-QFjYhMRpgpm*2IuKi+eq`(o_zvArL^dH76!Me3Q0 z;)54c7jNP3-80%dIJ99V*^JTDlU>K9Q)ClUFfL>Yzl*h%aRI7OR+N<>e+X3q<*OF0 zN@OkAjX>d(S|{}R*t&=|EHn3GdK>4&%P`SY7c&nDTr{_bL` ztEcCdfvp4W2Tt-o-+5!l$eF&`$0vG^_p-I!a-Z8XJJZpB<{$(JA4a?ni)`fvrM|`p zX5VRaRLI9&Epq5uG{9~fV7C!B%970P%f<3rxfZOL`7D$@AX%>8TS5P#hrf9}Zi@Ki z;xAH5{3qApq$FQfWdByYRsb&SxHM8*jmRC1nt&x3082m<38y=6RMZ5#FEYP4Jl7mG zX>F;m!xQ|pCH@F;WH41Jaj6Mhx}20#oV`EZlB{dk#rIBj9q8(q=!(G=JGSqZzq_Y> zuKi5vhKu5D7gJyV(&Mf`L4n3$<@tO2x*9jdb=A8fp@!k3&9SbzKiU!B9hdd#(={bN zt+}w=gFZLXERBS>D?wfw*Q^tzcu;ebC&k0+d?qn1~0gyMz)`z?Zcv3O(F&x*o@tt$=zK8aVEou^%E`Pq))$B=UsQ#y6 zdwb83?yr;1|Ig-%HveBkr)~ly>C0Fi^8tKbcSQ+0Wwja;b%lV_k|(Mr^eG^c)9aB$ zVBIWgU;`XTaXsjISUZ`5Tc8#mUJo=UOPeD~Q?7sZpT*;6vBtB#jlxgrFMqmcPHJ!K z5mR4Z(ERl!_%5sH2Y9atZ6Wuxr8yXchq1V~&Q}FSBB`GlUj0-m z{D9b|`X#fqE#+;Ak9osiQT!1uaOGFxx5NO~z;$qcAQiOKhXXZ*5S?hEz^e>S1ZZP?h9A8iZ@~p>$qO2%a6S%(lbN^BV5(-3+knCJok*_^Jv2N zc|l%+rceWNVaj#D8tl}o+ojLY9D9@_;*H^C_r*)A3^l%%Gt=>=kJeu~`RS8gbFp2i z^B2YA7g8^Mh`(>Rt7pRKtqL`F%{Ej=%{M3BXF2kRTbj4UFac@e93Pr`PAN^Jlnh7(R}Us2Z}c>uh8=+Vg5xx?EA7kBI(vgrEkW*btebra#bh0@Y^`>EEEp|&iv zRHD=|baQVG9=-L`${qDdb{^ZfDQTi9bX>Pi!@5dFb7IHQ@zL#aj=-9I4a!k4j^TDVB-1ZuUSee{hls$Oi3sST(ag(EMg?6@ ztA5c4d!J+M6zLt`u=!x>0pu`JANa;M_EQY2NitX{yhPCP*>C(ZUfa?&0N$1V3P zio=(d{-$LtS=@X2xFX6)Z*osKVHi%dR*)qann-Lfjz07~*j?oIg?C_?m0X<^tSE(H z)aeK%i>rA#N)}aiB=H$ac8%=3i+@MHB)st0gIG)cTsteE-gRXwTSzVcm|{sUF0-U8 zO4d|kv0<)DY7hBqYmgL^nIj7zRvZergz{D|cL`DYb2u9!SuP=qfN>wn(OMSYK}k9y zc8WJbv?IGNI*hvNsz`gVdCr^q3q$Mvp`izwceO1IEoe$E$p`x35ZIq|nvl1@DbnNa z?fz?jUF&SeNLMUz3k1%hVNPN^2JPHo$sUh3BimI54g<)Wv(jBhP0Hw=f!tBIV^H zWB2*18=5*xLq1P|+2v^(X&rcME-@Rsx5iiB+*w}db=xepkq-aTlT-yv-6fc6ZX0RZ z(5T(iZ*Fg$F0XGawt1Qp{=qW?O&c1tGySIamg%a-2A3n+US|N^D-y|Yb}n2w#a_IY ze@Z^0!iTsWva_>8c6Q`M7G1f1O8WR~?%66Blo;qmtZj`jDjpjdJ~R3E6x7w@ zNMaHY(zz(-g4#l<=VlyGVk8&lgr1Ln#7)4 zCpYyEoZrmzvoK-)1^(`Z%U9r4+C`hC$OW9iVlSTc=JJa(PGmIdWWTO>5HFQ_rFW$2 zyUnjSqvZ{^ZHu?GPw9K_*f`Sl%>|9=5`X!!3v`zn)J0GFE|}YHr0W}HB93x7 zJo)XIZjtfZ%gTz1%4*80i%N@1ne)!Dh54L!5DsH13+gpg23_vJe|z7JB7Y(p*m-zp zxf9ZNGAfBpe-adCfxP?oss>baAs2YYJ(QL~!iX_!@VuSzTy)jrA`(~4^CRF z%PaI6;nLC*oz~{s>Q0aR!Veb|#A2I^mRIFxdUxMkTweVrxIw;>`mOMDym$-c6zap( zjER=KD`+071+cbCqIp?P0W%UB8zOa-Sg0>zIR#`z-2&8)GU9Sd1bkC)2zbhAB^dW) zIy6LR4Xm7f>}~t!FO|7`o>(6rANf`!718%}Y}6mv*OL0#1>w01KYtGo>i4P=aqw{4 zWY0{}T3u98HQ3(NU;j{?k9a+U2V5(#KJ&bWLd{zK zLFF?ybAKp*<`31+JbPtdJZggDC$CJQ%S;jB&$O(vhwxbut(pu4;T8(Jocavv)Mv3g87C+&4wah(-~iSQkLetE_~a z0TE^?O@fX0L!d@;>%fktKMDLv#^FWLxfWlqag>B>N$3=u(OWIUL?H%Gd#>p)TzE3o zafrWA->yQ05QjTTt*P2Yv2$VRBT6KGo?h-Boc$^$h~HOQ>j1aVjFfsriN$&D^TGvj z3@@VPN+lq!1P0bqVS0{2fdG0e>nM&bEiDKlb{S7#9`1YDf$k*8SbMAmBya92q*)kh z47_E)Sb&3)QdU&lL%tA{ZqPsET2RE4os4Wa0$MP=jRYB^@jk0V#+ZB0?3SF$TaFmJ zAs=Gw;vbwlwdv-(fUz$Nu1vlq0~p)%fkEl4`z<4?&p*j$5M$&q+>Hij5mHNXlibbH zsp0;TN<2S18SoykE3nV87BXC*vUYzlUn0q=0BQSDJL ze6`9u^7y{}GZ)>3(P`mY7e8-UsUa=g+P zX|g+9G`5OMFYS#N7!r*KhLhj!8}C0rRJHA`8+ry6%pJdU zwYFLeJ4X|{6`H-=mOSWjo7tr?;$D=h|u!%8)9i`k+zUqsJ0Z!trL zz#v*=45CFVSimDl?ijd8tQZN3x#SA(VqafJ2gmh|^^FY;bVwb*6yP`7f#wN&%Ta_% z_gCA!=^_*j>3|cu>=Y`_xe86xYh1t*pl>mu7OQl<5Sd!6st88vLDW`BIX|X#MDbhO zQdKObMlS09{gUv;zc)NnQ^#MH%UMdZzEaLA)mBmw>2vibGKxuwz{W_WEWZAohWSI5 zol3IbOK7P@?^JJ8o$ndnD) z1}`_f&D+M^3gUlu&WH}?+gH%})u9Zd;q zYA@P|^i<$;#2@vB%aIbBCqGPnEnNv-E6#0@#@bry{XQ5gq-l!rYPM^5wRntPE$Hy& zeKnShk*yIKBDFZV^8LQwPg(Kl3$9X@iiuM!_t4qdomnsWyURaV)R`CQB?pN1nqIQK zIS>k`_V0~<@!6r|+$t~H$o4PJZIw3RMbjH-0TVp-4|yi}KwuY9k=Fng3FE8BZW?&Z zP32CSLHn*^sNw*~G&iL;lL6&cT44Ew^S|tRcQnc+AfjP5_Mu}xerHz)1sZfT4Js@)|{6GB)TI#VDP5T7@1;|m17;3TCFF&UP|j!{7X zNp-79%!~zS#sH`0-sYY-h)D5BaN&|7+kM5}%=jM`$jUj}G_EMC3Z13ME)E$Drz)_L zsIDET*v|2RM~*upHT9*X4`J8eI#(GOtxx?-uRZvHaM#k#2Xy}ko{5f=OW$bff8Xie zCS>iXFQufkZOWSvs!FZ))akwP-zin>>IPDBxvJUm2;Xt4?{Li1Q)pw3+Vi?!K`=wy zJl`ypY?_%K8S3xF7_NZdQvvT$t0^)e6H2GpY zgJ9i*-v@FgYx!$^ou;q4hlhvfhv#Q^Zru!m;!$EW0)*Y!=tT(3F2}6M9)srT7EH&D z0sMVEMqVqMcg7N~R9{)hOnENdujF!4+u8YwZhzPtxj91l=SbM+ZE@RIxBI&PzWp%)L&&5EFI_39koWx~>q@ zzyRQL@EAL9Rs0ltQGr=Q{Sp>7y{nkF*^Kk@Kn_eMCEA-o+|$4{7hc5E=wavOhXKtC zKk*u#Mbn;#G4`v_q&&-nXK^~LYY(2tnY29dqbLu=Iyj@vh!MYJ5pox4KoNgr#e-lv zP2`1L+mlH1>SuRNp_l3)C>?hlo;^IZb87qM8Ay0?VtjODu)nK=oHU;^;Io&|)tQa_ zU@5`%XdZBDikmE_|K+rz4_d5XL!2Td7=s>JLv=@Bho(<&{O~CGI zrdyr_lTI+52Yn?JUUrww(0k;5Av&wYh`c$c#vHx9@p$h@??}HC?}>MH$kB$gjyz>3 zvMe|yihXmE`#noC%H=@iUYDSwxe`JO`3K zH{^ae%>DD|>qLTC|2ESWYzs?$%`W-eM}UB?IG zl++WXNyAFCq19m}Ybu6*|HY+O%u9d9P8EMZL7q5s1I}#Z$<OrLj>aH`0I{00@710&&4CFW!7&QgBJLxjA z*jP`4>UT-#fKtAwxK23_0Lqg<g>X&+Zu)OZhjzpYUH$q9InPRhmQ_%0U zw{w-mfQMZsV0n*fiAZTt23bwc3R)@DQENd~Ak(~9<9g)45 zRtCm$SMpZlRJ0jQj;kjHq?4B90RUiN;C`w762#sCno3*?qseYLH-}^Z=J3$9AfWcj zM2@Cb!1*X7&?6+EdqJRk0j{q>qlvbfVuo58 zPl1g3MJfo&TAGMHbP>-ML&-Wa{iBEq(v1n$N;ta`(hAx*dF z;|4G!qwd{A)J`vdGB97ZIj`a>WiULh#^?o3TRX~^AD*_x4!Wlx^ zs$L>0d@`aK-U-8dD;mjw#hEfK@>C3L;*5zDxrRrArIn{D#z#BrEQ2j)H#US`j-*~Y z@ca!;g9*KLWVm6nq4SQJA(Nx?SeJ|gyZk$IL88d!RA9#6DKzVboShTFhJ?1!w-Z?1 z%BF&giI3{0ZtbfZ?+)oq4Kpp?zR>VZ9jy}I7Q>vR87UC7w>1@42P@_J^@uhBMKyyZ zaax)TP=%D}0F3}T88{<4#4e(90_kTh(i}!3H!q)U6JP-7pqDHA97j=?8<%(~@M3rr zF$S8`jDf5K;6$cG5fTgU90SW(E_QLx8Z{JddIR3G|uHbM)s0;0YETDY;E5n+H#Q+T2cJA#` z(bV|JV3NuWR_3jVg;WP7Btt7cOJ!iBIj~R)l~B4?-c=sQqYQO5nY4sVX48_JR(#2X zFb6b;dB2O9t`Y{(Z`p*!OgM^yO=bRY2%{q95QPq@Ow}0#xP|39mm#_HD;Po75f00^ zQN0GyN?OBykUSMT`(dQ_O56`P+uB2|0i(vkFy9TKSL#!*9aQyfs9{4x*BvuJx_UQ0 zwSy^|aQULSAYNpJq9J!O)IFH|gs;M`+g=!M?Wm}W@y%X_3}3EojjFa)^>~bYwCxCO zQMSIp8VrlKia@|1tFl+Jc7vU|IpW4xJsm@pP`_an?qBLmCA1np&+77!cm_sNp8oG? z$hZ748ewm&3*gL#byO3(##1U!ehUVpfh;NVk6it9_MYjxICp6nN0~pP98dm^^&ZOZ z-l61JL^t$G=2VL4rx?xWeu5XVt{%CTwwn3J>CDO>0H>2Vo_@e)wI*1+ ze+F#Uv(<0azglP*8@<{g4F>}46^1Q4Zhb)9c!_^wyK+j!joqW^?wSW4hM+ zuk~3fhc`V+ZuX?Eku?{DOG0(ibZtt7&&Y2-6Y zgG_oG{5IXSXo|a17g3PXTMnfSmN|`?7C7IPVeNysaQAV?xlc-t{rh%LjE~6*qv{LY zw|(jDF@ns;$gq#_DUeYV@mCDRhQ(JE#tiq^GKY~NFg^tZnJvaZ07d6kdqx4LF973F zzDHSbSCrgvc<-LsU0XIyWj2@Q24yugyot@lt*lni$=}9aE8xuRt=2v$XR(Lh-sGvd zmi>){40Gc-*=vUEy#I}Rv+nJ^aZBMq+<1*!Z0X)=&Pik=tv!?3ZI(g&fq~}q&0w2v z;txqBl++&TXiqfMhp0Qd1lh23R=bO$!$LW0SZEdsPuh92SYVz-^2X{A3JfCRN4n^h zWTJ%?la!zlw-gPP?Z+J;nsxBbRz6CHM{(MhdI&YE3y=}OCvXGGpH%FHR05iWqQX4FP*9_ ztq8bJ7q+@(cw(TouxRZhw_%dH%*D%(HvfT0R72l#2hgZCdc3P*>DRs>FE!TG@aHov z=q+1gnu6Kds8vQaR(N%qtE9Wpt1docJHsf6jv4uP?TVd32SuU5Vt33Ep+D0p+jfRpSkC)ci!=qL#Gejbn4{%J~D$lwr`q7*`&!29v{Dx zG)_;xixT0oOD@5Y6Oj?Yh+SWoKOYct%0*F3_4hQn(8sUD<-_ zFGD}a(Ijw~`@H1ZIypAn56RYr{ncoFDWYEPVzn@sAOpk8Ce&&}Ef7(vP2_FIVMFbF zR?4lwTxil{tV@N|i}A!n*1{~O`UG9p6Sy@W0DhH;3649ATHCIj6FVj_!X8UTnN2oL zA#WDHii%$FquL99=sL6lY3gj7A``1l*Ss6ittpVJGIxK{ld$kIJGNm=8dX@Eyx~Z8jTJcz%6_Gb{eH3!a>nfUpbi>XhnQEnp`1Rn z`LJTF%oyu65*^R7cC@8xFj54z*Ik>g7+<=ic|DM&E5dMD{6(fL;(XhZW5`z{MCS+4 z=Ef4md*jRd+umofx+~s<4!vsV8Tf>(NBrZ7TfTp!wq-|rqzhSPA{!*YZ5O5Ly4qV1 zhPjK292RsZ!@0HtIGauu12>?hdMz#(MCVf zJtd-81~bchjY8PzKsQ5YLCyo~xEv!V)}VR&x%SB;Y1%>Yk5{7{yd*cBfMD>sp=77$ zroIgC;B&9#Z-d+@zrEpgy!}z`S*i5s;eFe-ZW--EeWgClx#%oFI7-cejVR-wX;(B} z1QrYJyWDx;TMR%GtMrQ&aGr5o!5mE@EkF_hG$^p>V@Zo8CE3ZHu;G-Avt}$E*-QUjAXec2vVJ7S`$yOK*_IGzwT<|9*n#wuGns z!BU6H5t;tX3f@Slu)YwRILN(ADjbk7;kyx?s>No2pvd?Us{u+;0Dptk0H9MK?O?`0 zV6ZpDp4*&|Lz4h5XW; zkx;@T@!kpX4gjHWK$^qEHFWf31iZS8;M~f2Zzfx-8J=)jxEu#&wLvO~po_ex(Ox2p zX<2$~buq1NJzO4S!gQ}dQq(|R*S_J@GD&Sdc=;E31$FL{z`D#?3mfuYf#FX|Q)-o9~>8Rm-$(2`deG6Gl@Qkr+(pyv6)SE57XxwU*yW;b!+jOQ=p5*vp z%^yLImFR;)`*~*v`WaX|Lzx4(7@G(XzDB!%lc@oC7L&lK;wdUTtFdTP1A6BR*%a`# z-dsrNoqV3#iE(GTG=FsYa=w?G+scX-F0>AR__IplG_ZPlLp)Miacllsd+ z=~&fUMl+X_ySX7e1?T;((3<;^?a2Xxgvupdd@ev8PQMeY3>(nLdBzs1= zE(xwXF)y&<60u2AgbDYKwd31#ob4oX>Hy7IEe3Fy88PYBXhf>3u+TKGj>qn~`XdTC zAoULAc@mP`QqAVgM-J_u+q`!(FejLmy#;fSM?pFaGQ5D-Pcx9!*4m6_BJy+PB(T&w ziQ(Qd7nu65SuTOx0VQVCuhx*Oy+dxujrMt`J4gQTaOcr}lcle!+=twDZNh7oyL6`> zEnE70z6}-s=a^+Ou}1&yUe>=G@dZ$iZ=S3d+LHS2ruwG(hEfOX=rwNd&acu*eMtJPzsOPoZMQAV4fQBu#aEO{U^|h1z1cOs9=P^yJK!;pOnp+267J!NQ zTjU(cw>)x=x94R(-tg{02_)#fEBfS!?c;-t0Wt!F{=Jet))EQ%3kh*x!b+`_s3+Kr zpR)4E%>!Zzz^|47zhuGSK%xnqQ;XmgXzf;$tIFr`o~wR*r{t)wuaDQqL-dwauy>5^ zCT;J6IJQLrm82uzTW47{?RMF!B}Y@gI`^x38`-gc%;^`@&gCKTs80PoM8k)Dve8;D zpmd6wcJhKqFc+CB-(TxsJ4xg|uuM3bMCVIAkN8L4&J_)h#F&8>Ee&P{ki>{wRQ2Te zSl+F5iAA{Odg>X{8j$sTw6JCKaJ%Q{qL+w&vK|x=mNwa-IMcX))@e{AXNI#j|%Am5@3@>2#%(GjB zj7>9sYF@%SeKt+<`PrPE5*Jk}M+w zJ)MydHp!@l$8`vU1scUCae=&iD{OAp8YVl5dyfsB62$jlzz(n)s?R)JVj@>|F)X(T4}d{!Sd^;JXmf~}7!YhFlR9|RFaF25 zyC*NrWbvr???~ifQYWu_Q|gVu?nd}V=cg7_@re5tQ;ACSW^T*n zjjtQ--dNpVYlK^ryks8CkxvrgGrZ}eORs9GAdAD?3GNB$(PKvrAJ{%IK8(5$)F+Gv zUx(eG!~A#zZ;5iDqW;OxLJ*b6dAa~x}g=@{3`nJqM}*8<~af!D+% z&&?Mc2av%tY2`W2Hpkg)Zrjv}<412m5oLaE@3t+|Q=@=UhlzVFRq+~ys)_(6!s@)msjoL&Y(COBbEvd1)H;4)qe^%m ze()Y5yubHlPo>^eliU^b4LTYPaM{&H<3Ny)HkYTK-jnc~vj$oCL+Bo?Fup8kQt{(K zucy>(4;S>#fQ~8DHIv-PxbbQ4{#sL+ckfydqGz_R%nDqXPNOr>6$w8_e_o~XwwVPp zDBQS0-oh86OBB0jq}?;3hnYs{nz4IkwtE(ix5&F!fZemsaaOC_x?=ZyP0HRegL_ST zw>*b+ZF^U_j=i(obZ%1pCbM_3LIR^r?z8Pktl7btxW;eT@f)iu%JQE;IP=y!&YrpXrjsX*9YqO$ z_l|AT7=PU_`OAGJ?5u-;WtqODk2I@H=;T@|W!Y3ypfaV(xldO0k`FoScVEw$=MeZP z*gLN#=lt7n*4qbNm4^!gHO(!}wK}VHIDBNZx$TAK|JnTP!Dz$KP-rmJc5a)g+*{nZ zwPkEWX{TdtGqB_;s;YL_i%OA$P8$S=eJQ#({;ESa;|#eQk~K9=LR(-*=dOBRoAHV0 zmrbLGqWz99P8L*uPhhb#iD z&%$y=z3MZwbrcwWDtK;3HEYxK=y1Q(nQ&D5i@c;f`HT%y9=nG+RAt;(Mrjx*Q|?!# z`(iy;LwUA&DS&FEK6+P+UoRGnH=Les2m_h<-@D#Dr#&z)`X|TNQiKI&Q!b{r-{x4V z17)=9aQi6V5ZvCitIpj5Fz^e8-HW3|7+5sw$iLUq=_}w>?Id=1KX(IN--i#(@7**! zl!Q|Iy_J9kBi=18K)fqbpD0mUi3YO%NW+5C*Ju)rCS2tvov9FJ#iliDZDvB#A``-{ zaGlnK%&nF)YqaL$@Mk=f@Bsa{nuF&!N~Yt-(bfkv-p-kg6Jrh75nKXbmZ9rA)5y0X zr%pWp9_lf5v6D;8E^OF?UYkw7-4t)W>l5#@8d)tDAsdr~C z^i7w>cWvq5#pcwFftF;Vt55Kiu5wiz(BV#x}hd=dQ)##L+^jA z;t|QW>V>obD=Sh>d*g2uoCr=w2lx6ayq3eC&*SsVs0yDt%0xE;+$We=CeS_Fj>IK! zc8KNazI6Ovq=)wCvEiWslo&{QL9#NdNsk;CbP2tA0dBkV><_M6gz-m)lK+0^`lJZo zBlVY>b1)l8WYG_Ck4um2p4~AHv~seWXjm$l9Fa!16GCUJ}~Ywn;?0eQ4kMo_7o--)X$C=Kdj?OVZMK&fxbjNq~>;nbYV zw(7RzuJGZ(@pl|@_iWtRJ-$+Vm!4nL+{^5DDzbAt#xDGUic)`Lafv6gSW(#;3k8Mq zX}xyXQxzQ*?)Y41$ov1X_9ozso#nmwIXXxCVoA0v?~7zDmMnRZC3)BJzK_TD?5k%c z`)o-j3y_dxW(cuEAPIrc-jFeo;N5Z5G zPTG)G;*hjVUu{S4;*cmQ+xnb5^8Lk!H1}`!?wNSQzHJYQnV9u=heLg(&uPOcb!68O zzngjwckg^s_0=VhiXBw;i~4;ysBX0J=7k59*UnCj5B4WITB^LDyS77}P>x-NxOF%m zgWXVutl4QZ+MKAwXk(Bt?0SQYx|jh6X8_33219Q%p0&CP5tf2L=4o<583H6A$qR$7 za7(a@1{(8jw^`E|O}yLXz@EUy)AR%+4@T${@_Q-X`FHoE50-uTrpei@;~V{%RSY%$ zM&9YV#io;N&1!qnvWSZpMw^!K7@(~e)(#&*rL_`w^cj*=l<3=xa%_G|GN{fQdcP-x># zpz@F?=fZq{=IxGH|M0l`mbLLM7v<^i02#`}O7^YVV!hF4+eKQ1a)JpH#3*i8eN(T0 zi`99V?7)*^QeCn)ldP>09SYMfw|Q)CV89{%m;0 zj0S72D7K)GOf8wJZY)9A9_rf3HB^Z<=?TPhOX1={;CN{3pjyC(E_`4-(+|*2!Ro>1 ze+Yy)V$p}8TvJf47)GOCR_qvi1s0t8=oUgU(pI`407}@-f%?7iJX}9a6fOjRheF2= z+&4)khOuJ&u=Of^O0>#4>$V?Ky0xE2jtEXNec|Vjbe8^Iz{FO@5sr?^YS+JRPFAGGR+wPc6bSBHnuqrm*6bwV=4_yDL;fIjfXDYku1Vm6*MhP6~B{9nl_DRV=8Jk1Yn=yxr z3N*-X=`va@!YNkLw~JOQAH=ZH{1~0keh{>q^$w&FW?CG2S=j06f*#M`@!`tRjnBpE zAglsH)=6Lf@|ItoKb~}B>#vRjZ&+GdIOG1Dyx@Cmq+Vw}3zTBq_*bHI7*>CtX1vsUDFR3)XO^3i5CJ?yWvkk7RNTb=w z(PST>U1S!$@{gg#gyCvxo4gGeoBUZVhLlDR!MHxVs(-EkvsFJ(bP&zHmKwekhX7g- zvcV1^w`0NE?<=-=l(XV_T%PQj^&hAg_`#Q#}a-bm@;nYy{{ECT8x~EH+@e{$kZ&RsmdW^*8`r&6$mo zt0n{&uCzjEE$r{re}i4ne)NT%eW{LEfW$`t2gJnuvbE7QvC#cg5n4=aIWJ?gVh$sh zK+@tD)m3c#7)fi3PvLfTc6Ro6_9N2-zzesF#sZ5WUO61iW=UxvF9w}081?%GZw2o= z9k^w_SYq+HfYV4gh-*Ju)qmsB%{}0BtglFN?Hv{F5-UwegwL~WV|pPBz?&l+g7^p{ z0zz3)6<{@(a##Zr5+U=C7V!!Kk_HjI^d|Oin?jKMk6-{BD~}u9KyzULn`sbnhU9Qt zMbdzo#0X?M?UgQGdmCu3SN&F}ks-AnC=5W_B1UhZ4rndhgX~dfg+(H0)>%Na3jAZl zSd|PCIO`G=Y#5hh5M%a-gvXROOpPj7M9~4DeNDB~$Y@NE583S0{Lq8Y6ewwj4cl=+ z=Of!3GJwAlW-l%alF25SF0=UGPVs-9y5Cw>m_g0W4Gn=X;?UfI#f72Sq3Mxf{BD#X z_-bUoFPBA8#IL1M+&dH?thV(YoaBUj5~d*%x*}Kdbmq}`-`vu`OLy*KVX|RjHS4^s zJ^ReesYZ)Q{9$f&GBj|x(jV{K%MiL*nK;EPj8n_?8z-smaku0|G7-7r}ap% z7KCN0NiHufjsQ8@-U0&tsxq{E!5W9u0QbVo4gr_~9D>EDM*&&3m@vTtTMv{Hs8OKA zMl)hXY^TP5ThJxS-?h=v(S_0ZsfjS{ppLoSNPwxyOKK$|HK4xi?!-)q73m>HR*+V> z3&kr^^6;Kl4%4dX^)Dk^xc$Xjx7kV^U+frrbl>53-O)nn#rJN~mJ7V-b!G!Z~y>b8UQde3=<&? z3$xRrtz-}%ftP4sbyW_$M43Sd6cSYbp$obNC3-v~|Jgks)bF&oTKbpq%qOMPmfNd| z(fwzJJ8(tz3m{Qj-V2;;W@xY{9#grm-Don1Ry~NWsnlfBn{geGe2ZYxv|yY8a38de zbeIVS!xpqsI>l+g9HPypH52ylTUuP$Lkpot6k5&A=&zY8)6N?2%%ZezgzJSflZ>dR zloSYEK^&Auvj$N8k{6tDNhbLp3speJ6NqwfLh-93Lm`KKZgb8Id-Q5m$ez0Mi&C{6uK^X{j zR1z9UB7mbp)MjNfsV6ysAMOa4u2V_6Bo(yRT;nJyc|}5ml`bVP9zPlNO9%uu>^k>l z$2UtwdhwOhYx-XykYd25;``IlzWL?ZIx(c!SFZON+<4bMnu_U7VJfDEn3iD1Q74lO zqCpZ-SLUyMj;$}=;;s7x&=tBW@ydb7=C|Ikd#1b8i|2Q|d-bRB-v9Y}V^jUtJHFeI zN8d6FYK@x^H z4bTj5Z_Fxlkf(>-e$wdS(GGxbw-?_9Uv|S^1X_Bc;xC=XpCbTz<&$eh$D`|i**P^- z(SP?@epLtqS9Co}-4?T1gTg7mf*z=l+n@LryF5QPd>0bjC!AD{?OQ~Ts~2SaRbB|t z0jLXNY{`o37KE1)2rst~WMOj|EoE$?9~~yPbFM!S;Recx;El_W8y{9#&}N9p(HXu= zVhnc@3+};P%JC-~d2fGpbc1V?YG`cEpQ0&AUQJV;L)YdCaQKLY`P$@L8y_Km3VqZ;niBAvf3Gx+ZJRxaF;*K>9gj>%% zw`e{VJ=+tEJeX=)H;sj7)bQOf)!s;X8iQpZ!YlJ!I3Dx#jd>be$|iKmohR`y=CHXf47j zb|(TsH(Dcs$|hDQ(x4#z5HIZ%K&VS8IX8-sakrnDL@ZazA*q`~^4BkqK5@)jo;h1z z-~0&({YyxoTh9mHT0){zuGWQx^{3W!U)0Y$ao{5-SEUnc>mQWG4=-LBZ#)`qdwsIi zpZ&WNDWui2U7O_wZoP-GVM($ad~j%-c~UO4KIxlK-=Hw6C;_a5<&Kor_ela8Q?!x= zNwFxO<`UwI8lYt~D`x=SJ5~U-;uZN&QS_qYtOA%IWs{^yIKRP$A!^EcT;>5%f0!Z9qc^ zY*~qp3aRv6&619BQ5X=zoJ0JAi)pnO;jm5Gj)>0AfzE-x9(N_)fE+c8({e)>nv*H< z8Z@I*!YPOJs#BhMPwMVcuNSPVYqqU_W=(HdqZ-6e#UO1_RR_qH(xqP7=^TpCVpVlq zOzdKtRS~!7DFf&c4k*jrosm#|9VlbWXc(#MoG9Nj7%kx8!#RNtlHML1UfLhoq8n8V zEL=rl)$Q_As2^-0F$kKc%(10xmEF*|l4|^j7ez|sc~6dh=#qZ5lp7na#Rp?Hc6!1(;d-nf@f+e1_t+kqlyudS@9t9jp>c@OmO1q)nN^ zc{{3o1k5>$zOBh@Go1sFUOdG*LxuY#(7PQUV{@5494s?;VKkz%P-!CDbr^(n~n_AQFBgPGz zwW3};{8ZESu^y*{759MDt2Y8;?D$JppVFOoH~2Ur)w zhuPa;v^L^k6in>95Av;#zd=?1Q3{RT%zsGJyJFRTZ-;IKk zwlbyx5=8D=*obdH(-na>WwsR^Hmm>dCj3(mo5tSdpW(o%OM)Qpe{4Q*@$c7r*Yxi! z-le|fp;L>5Zau{pF%YcID>FTbSOmcgjvEFO$6Odw6rOT%V1aIUZ@f31bbD~pTL%`K z4tk4JUyCX>r}~r{P*%VG(wg4>#+|Zy7VmFP;%RB;^$N+4xAsYU5iUsb{}aBG{V4|8 zu;?=TQ#R1X@&Tp~ih!+7%3y&e*n#rQYXTFIse~pJ0%8fHlKeF^0hMM{5h*!KLpgXM zahICV5VcsGdS6}ZV7tL2ah=$OA~e(*GPU&uxw>@ysqD|?KZVpfP(C^+Rw-q3Sk$JZ z+uNFOUjT*TxjI&VVJsHW2oIvoKw_X0f(|?_IbvJjXxjxZIMXl|W{Ei*>ZD4=Ir}2* zV;C=fjG!Yq12%4x%s28du%Xe{(Y7X0CyH%`d{s|F%H7=ADF_GlE$rzW>l^`_e@`+& zZDYb8`NIJXtwqPRbz;3?08Bv2jB_o_qLXefn30eRsjzg)*JV%lUdMhCD4yD-+4C5GuRn786VdW{U}YgkS=r#kB71ERV@SW=KZSO3R2$ zdni4oaWNl8Wj&N4Gn-f7{D1sTZbbIX>Qk63 zRFAB8>7(2q%TQqPp|GvLJxd`Z~}0cl;NP!D|$8;XchRTaQ3y!uDg*e9m+CiFX3n(``QXd)QF`j@qmQr}ox zV?(L|$c!9~PC8(8*|sSy73zr&Wh9{g?ez{%wbWcovE&!8Utwx7LLCNWu#2k&0w_jk z0%|D$)UQHCEKm$nPB-jUBKkaOBRUWB9%2{*>bWJb2F>bAXjeD=T z1<-+kxh_{=^@zj+{v$OEtQl_V@4m6i|0b-2y@%iU<(snK)RaIv_w}!<*S~YFu_m

B&a{jy0vPE}au##N!!m{^8oX|U`O1eh481aCJI{3sS}4H59%7ualbcuhMI1e_~x zh}d6JHC6Q=-b50A0&J_9wnlue=%g))UGg#Iw)}e4Zb6@5n6`n7a zeG;G(aw<1NG~>{XJA}VgoVVY6l=~Gzzaqfo$}wicQok~%>QKN6L?9)s{KK@1$t{*S z$g{ws2;8G+#jbLf-2!fwyiUvrHmAX9V}>6OW4fR{%ywfBJFEm(RwgD^?pV3wwp%7n zPB3NQ+Zy;O=QOP88Y0=TZ3KaIu|EyOc@s6 z@X80F3oRodu>pC-bxj*|M{>;P*zI#7HSZ5LjhJ`o5|*dkkRE%rVMv z&3Frrzgrk3%@`T#?nLNhA;J=HaY|*R8EfW37UVwq(T^5ZQHa233%U&!Q8epB z$`edFGrEHinBD|*i%w@dg|0Q2me9{OoXoAXpiE=9_z~#Z=|ljFP}Z^R_Cd-ddj=Xq zlFmwJM_=aht9TM3tBQsBsmWp3xn?)dD#8>Lw@|C@2C@p&(sC|Cjhehz{zgi}nt$G; zQF1(aZu$N@cFZWG7uK@>tSJVy-}>)T-Z6K0Ho@C_Zm-yQF`d~vp=_T|WOCiML&p{l z@ApZ(cW1Rkc-b~0{XH~-EfvBX0MVk*JOZpC)FHPA8|px^rQsSrt0d4k4Xu6Bn5a-u ziwki#F_rneE{v?RIbh@uB1RhMsuNg=6&`{i6dS=n3x%Pj8!8ypD1|e<-@I3>X=(Rd zK9q?)*>JwEf2h8;KIOU6bW^zd;?b&D*ZLD{(${&LspZFG8L>5K5;F^BclQp6qdhHA zv7>cwrYg`j*IqaHI}CXt3Kz4#knfY~ggJ4a;=y#50+y4uXrQUF++BuubQ5Ztwy|bV zkievt2;iiKdp8oQ(kPg$M!?w&=x-aW7s?zuo6T~HImUUwaMVA7zlft+2XEjp_LIbF z%Ab;3HcW&0WBei70EzmY=nS^}N+q5}3P!KA%g4}=zu9s#dqMs*J8fM7`!6GLjU5ush!slp=@WMAiWua`lI!_f+3%t1vumh9jIQEr@CUk@lKBE`r zb~(@|(ui-=OEOHv3;N>-l+6+?>6HYtQ$i2%1|FnL31ADe*no1__F00(X0jaJ?mJOZ ziE}=4_{^!3#I!Jt)x4AerMjWYEiHtYW=Ul(tl-#K^-Q-pS;D}w?K?$SVust_0$FW* znFkaMS>1JWwC!YSBr?-<`|wEQ$%eB7>HZoo9Xrgy@ahq%uX%50MFGk`2flvAvS$2D zA^4iX*5~~IU)NUEddvEPF~_Bzex=(NMw(Bp-uY<>#5`L+aPmT=_ zfV?IgYOce^K3Q_o_yhSHK+)M`uzaYS?I`QOaGiv~i3)xb6`yd#?vr=eun3SVU) zP_&JUhdo6&WuQrJz$F-^ufQdI&Cqjta4hlehUugJV63JoDn1!(8v-r*xv`-*1q!eX z~e3LFXpf5tV`chrH&E-IlE6g zJz$%|R5!DakAgmg9VXyGxv?TwNvsX9YJ?BEffMyg|B4gMe)S<^V*%jyz+GZE09?*@ z^NzmI;&Vse=usU#TI}TMMdNL?4M5<2wp&Hu##)9Or&Es>o$f|w4>YduI?(ffAE!Gb z>=%a>@4me=lS2TeL|XkmtO&PJDWHNn(8R+^3-73TLEhP>2ecHkY@z{CF!%2cyM>TG zr&wWq9_3~Ak0#Pk9#@(Tf`JxiZF&y=dRLF3kZ@4g{bP6mf`1v#>QIXzy`4UfK-Xxx znFTHUrL;N*+q^eBJG*}tW#?(=`>+Ck5D8GhVFO+^WGsczNT;_60D*_}vKqt2DXZ^) zIP><1a3;Os`d_e8!krgX zn8&=oGnlHbZe*sQC#sr)10#vS;<#|+g5s^zRW%V9YEkw4Z~8WCULKIBW$Tlc5m*x& z=QplD$eWkfA7sr-+9dK{`d>*wVB4s%yI=UC;sGvne5|Ldtu+{^u7n3bk&brh65%vj zb~d|B1Sf=5z}PhImL26*vmF&zjJ}}@Oxx7}|27#UkWijP^-e;%V6n)jfTU@V*-phB zpJ2hLj!e7NHatiI-E?zbpU>B~zYjFiM6Z?V?ritPd@*-ch6A*Ys(-LsTuk^bzO?v9g=nIut0ABB-%LH)Js<>lor zsmxaH)nyk~j|`n3-xL6doJo4(R6yg6Ud;6PBU^Ap??bqk*xyy`?FopI{etuY&bMFq zl44IKFcMz{)Tzlr4OYUU!~xbp>4)ZOseXzX7cZUj+mn#bOQTtW=}Z^ozE z`KJ&C?($<8rf0t={|WLb0@%oNzp(Jvz!4LgrC;c!vIQcwa0|l&5w6aQ42*Df;JWk` z{HhUohMU zLC*?D#p6o(q4}A~etR%}mK?z1QO;yC z2`72g+U_jT&{GPZq2J;e0*V=Ukp3jol10r2qXb-hVYdZNUK_` zL-+4qD3#eHnxRxilzffIjdVH&8d4X#(_NtD(X%fGxfau>kZtesW2D8!pFrS6O~?E% zM7%GvD~Df$^Tf(&WvH(QwdpRV$?eeNdXA6H>oH*HY=nzh<1O^p9So`Zj$Aucq|V?| z+57m?nU7zbx+k+qkw04Bbf2;W{MoUD_)_5!w0LHZx2KPG&%I`_Yk7k{>$1@nbGWZP z6bX+<3*p*X;lEiP)jA%M zH@9}qhuVAhULK3g#9)hW$=hPx`j;!6^#+T>UBODh*)K8GNeE98twaMT+Bw#nD^3Su z9-`exBytHinN~OhjfqZ(USLzd3MeTnAaPX* zICo(llL8-x>?5ZSEHWWCCcZ`$Wn~Qv)e8EEfisiGE_}19;piXTUFg8>7eA4^?B%ZY zADl=X?VO!HgKpwJnR_tqx!C3Yf=naR&44Q}D|-{P6R93NUo_8)7ew-hh6tB!qnX$Xwv~BurO4&0C<^=d^31xY@qvw10*aa)kE_uz%5uIoyTGlgsU^tIfOQ_ z3f_XV>aOtTlT3D!#h!}lg%rbVJY(+$hot{-=2=(Y47JGMkE*J&{iFE-ffIjp*Tkif z+U##%H5>rTR`2z0Z)ewwjIW{e|50 zN3q^_IcCkyOru|HvzXI$irH4bLm_Y0%=LXm`E;|t!jXp zu-*d5z&$mzf32<~)akc$~%m zt-EyRuyS#{DCC%XWQHOS5sK2MJrkb(~n^xEv%vmrQ_$C?9 z4iRgvnJKf2Ia>x?IpzxmLd&`eZ5iT1C(dUSgqu2>gGN5c8eT>qp+3tk+F%$F-|Xg5 zlwnMkcvKntTALq5-v{w&*-7kE*!0Z+;obbD*ptct4=tkwETx}V{Dzccv<#x3c{7Mx zX-~u8+~5p>4Ix?RXgC0@X3pwClqul$Vwoz7TsK@O{XZ0E z9FI3|eZ35qVdjx!zyNDmMz+rIf*RfyTsB5wP>_1G?{xKw5{^%mA@Ze5Sab&|3wb$b z4OSH^nSv^8ZpuZ$Cm06*#VoU!fmIa>gV0(kKJZVV&b*5cU__`V z)ztyL=3x{o2{6^(W&E^Jxk;O&H2+x;NmZ$dLAh-q( z6>2bmSt!29w1SrkXM@5)WnVhl!eT3v7F#h6RSU@PEJS{1Rs$_70xaw10IRR3vmMlW zHymJr5S1A|qbESKFG!!TJC$Wq9=WP0&RTxUvS!LYM+B%}f}y+rq}a6nDV9O8E4Crn zdVATP+qzW&D7p-pxAEKDZ`X;4407G0!~#bVuIG7@S*)MW%7127kW zT_Aum?C21!XgVX{)MFqKwL`l$0%LYCo>LXr-`Xk&M4Z=}ZcRZbQA90a+zSk^`O(79 zvz(%?$KYPT?Wuj6;;4F~vKHuSQvW}TqpvUa?0xgW;~%|?i3m~Gqb%yW_D^E78g{L} z;(2a#|7g#d^BV)OsoBX(!$+T<9XdO-Ire(K;pk%T$fcV|O6xzBzQt}#T<8*dl@ziD zKdp*K2xigQWnfoOq7e~~Vwf1Hj`IZj*4%4L3&OAlEePYjZj0bcD9EOhL^C9PE89N? za`@NI7sOz%pH*K~`kSlS*9;<3qjwX#SvdB{eKm(K_Kut#%f({HUo*hpZ#ny?4bA+W zuKkinW!TOm5lHP;;j;43O=pfATHJ$$)<&o(E7N2i!$majS6i@uO_T!ovLA>~u?z zc7}t^pT_1}xXsWwcxY?WueEi@lY|*icnwlXXtw zB?bkz9cy)L7KaURHmd~&OQI$}O8a&KQ(Iu~Ez$+pdjJE3^B5{-g%41^{dYiE zG;b&hHY;WDD8<3M&}6$t{>-X70K4&V#O-VPyA$o=%NLQ#Zt%CViVW@F`rpbg-p}_gXEN#7Dl0s z?S5Z{QwBW=T{%r^G=haFn@ue5c;yZX7;7MU+i*);3w&^JvlJ0phfrtKI&PfAYx7mx zQQwW?1y!F<|JI^ETx*MTS1V7SI`x|inMn4lv8#!jyO)l8olULtZ`$AfxowoZK$n{` zA$>)y!{xG%o}^V}rt8VGk*4NKyQkGTeJt7@`t1@M5JU z0CaL8iN4C1R*SJ0Yy>j^ABGx8MPT+OG z%mtOeae~e*Kam9hum*^^!Nc-tzcq?-QsDGs(lgi8C& zP4dcAk5;BHuI%sZFl!Ys=a;DP@BGQbN)^2Am@vwx?Qlk2sPUp1do9_nvjdVn`Nqs=9>q$t;Hk%6H>U}`(EBm>>CxEHYB*2Eo7wREI~tG#UV2M z$Z+Q%uTk*Meo!gfJ3f+0go0J9K1YCjBEs(`Mqh`KB4#7TnE`!AU;>70vjkRAg8`J7 ztSo0MWAxf5wGHh3XuHZrolFK^`#5aAkuU>0eHsARF<|etH1cz*0$iIrmu?s|8%x1S-{XtVPs%*49 zA=#;Kq`$$UyfS7l_u^`nGvAbJj3C3)SoV8!J&xkO2-&_1+ol-=#?yK#8~P(Vf0!H2 zy#>xKg=~E*!^y7c#wC1OuVh1gHd@oB=Jm%)c2fS(vW3w= z+QQ0$((7>u^agQz;)BU~2$R&m^P_`vdHM-AD2D=k4G(Cq;Mvy)Dj8*LT0 z>?UJw63Qz~<>#x!3g}jak%loVMJGlo&U-~S?7N%nJ5Cwp;d4N@3n#%Xi6)7|W0!~` zk~8O`X+xgn$hJ>6?DTYcE`9~;=a%>lbTLoit~f=#6RWbfc@O$c!Zxq5?JrUQP}=S9 zFbIGwqvN>4?~KYQrbLpNhMkbKdad8HO{d@PIiiR|p6O$wpffm@j zGVFKU#^&)kG0pjN<~q2o(g3$~k<}Bsi;ni?p5ehnbDgCz(0R{7s{KQ4>*qgpzJDco zWTUMUHCrcsa?{a$AnI@JcSM@2Yuaa8IG3Gy@iil@Gi{L~GbiTF90DhT9+I!>0lUEO zDdujFDVG}z8jb?-LMiwZIj-~D%eEG%w^CWwEUIev7^Om z&%v_JnlSKR2+NunL!S(jK8em?F*wV)8*mnShouY}wG!2JI2!FL!Gz`ut3<4Y++a1xd(OyQ%^aY4EjystlWFXi%0cfvxmk})i5+){5ciBb~P>LgeWrBIvIkU=Gi z-6zYNbOoN#%aW*n%$z-U^z8>!d9Y~jF} zv3xrFWGnWbi1j&XtVbw`f-$`QZdrjyss*2*D1%iVye(znL~aNkCUjybx`9OW5<)qx zEn9<`!Wv(Vub~bftaewlRDwwWn}K1Ih)Dn?P};zUV=z50; zWg33s`1G2be(c)khG>5#WyQoahRsMr{}DUbGkEL3pVMg1e=OH_2fl`c@6PNm^kID0 zkT9W)2K^1d@!4(c``TeufL_B40d-pOzsu}vn~d0v307N`&jNoJ5<>2ZHt-PT__XnT zQL-gtif;|Z6s%2FgCC4Lab`)c{F==D^Y?u1n=lCX48?WdZ@c!=;EK}IJt$@Wd{y6p z`9*y7nM325Z;3TDpTt8TnC)X-#idCuqN*MFw}DBfWR$;J`oU|+ha z+>Kpq(}IDVi-F*o2n85jF$RM47RJpXo?=rgRx_DFjWII=CWOpn2L2llL-vnT0Lfl3 z7}Oj_={5u*C5lQN8;%OaCz(zP!bnKZF-rL&uHxI$Dp&EIXO6N0M^El3^?yM0#Ov?C zS^oZz_z6xPznP@CY~gf-IP?n7_^bEP8UM#JKV`!xBs43WQC23$GWf#r7+4@=8>-G2 zj@B6ft1w}6vI&O`VcD3l_{wDJn->YoqSl*m^s~YYO!V%*IW>pG-u&Efr-ofwF}&ZOuw6Hl1vJv%bpa-rgSwtBmy+|CXQYI zvO4$nWtFt^;p;z_K8Bz13!{qSYpkm&ce|`+=n0ldFeC;FMhql}4kOngP`(50xWdtn z5Tjqf$XPJzGOGHHzBG}9ppy-!N`E3*dJE`6sM~So;ng=@sBZIiU6^|C%-MM2)L2_> z-TL#7Ng!k7bmw`8*O8mq^u zT;S5D5l|=Lcu`A~NcmBN6o?dv)*~X3!mJn8W8sz@m+8Q`6wMn^(() zn(0;BNAj;)VV+18PBAh@_usny5&d7|rRS)JIWvhJq(~>!g-&JA1gtQ`91`u$AP+@v zZW2L$L=AME9*n~}pcZJKlO%!W9*lXG6<&D-as*m{@oYca;lwEJwd;?!r>mddyu*o) zrFmf+dAJV?!C}3|3UI|_blU1B>Dld8Hw^|_{n5Lk+0U5Tm%AR}JDVbLT@TyXwC*~s z|KQsCA8)&{DHI5g`;MnYTO=5pjkYV;lA`bJnBTCh>9?-GNB;_BH%qdco)|$m9cjhX znzj#%F*Rf5CUqClW<(&R?JNYZgN`_R9)D{yW24?u zb`U0%Ld8jXcNAT-^!ZYvyZW|!FQkrE-%=>K_ivEgwf}uu|4ouym3btOrI{DI;*C=F zvrE4>rrc98(YCYbplY~vh95(6VAB^KQXV+GcU}`;O|{2jmRx`|fw2^fDzL%e3o_B9 z6$atVgk{pRowW?pBpJZ7FJb4m9{ja=~RlCd4-u4G-e?-x7npu>yrsY08aoderLH7%SGexy`_ zPZ2@;1mI=et>Nmb3Rt~zZThkU?K!Ino2O2FgOsRPlcVbTaMY%d%Lh+-$J< zI~!bd{B=RvFIVdL1Fdy+zRvmz2}a8BlgF-IZU_!{)W=8i%tw$T@9NlS2%)iBjK`~> zeB0cCu1GK(kJd?ICET2Hhq#R6;Am)ih^fdJ^^hYc&x$9Z8+nVz2+O(nrMkI@fY z00*oX)C`34sJ?=gM2E^M&L3cwvwX%`PcA^UTXVCO=i4gLfgqn(#63s`y=X*(38

    3dx46N}WfXR+y0rO%o_pFXhT&#L$`hU8Ub;ZgA(m-!x^jHYnP*ho+U>@^; zvOG6ElI#wLf(_XGpzen+N0cpzn5%%-gp1UZ4THA?9)$}GOWa`fS2z;`8G7VUKn&K^ zdOg?Ba}Wj znvB1x7wX+EH#W1FXjw3qR?%h_&_Srn5+qtDo!`K6=5gIa>xUng<;S=cd$wTL%3>zJ z0^!i?!Kt?FkB$199@jn1H$FX=QNKZBtfp3Fe*1`i8oxY5=nZA8D;^8A z)K-+k5?Tpwk8QT-aT7-yA*{JZW0V7aPh&m|hr@|*qSftjM}4q^EPBg(nqn)*z93B% z6vq9W0#8591AlB^mQewY?7jQ3Y2uuf53fs0g*!!3 z$;y_XJ4$qL8!dgwS1e)s8N*8hx9PM8aiHimYd3B?yw-eLU$Lrtlz3p-?vM@d%A@oG zgT9#AgAnJP*FPfvND2YJFeSWOaZQY8Q0I*K>dW1fj1qq-(ek9QF%k_&8DS<^@{t)bW+!f}7OcY;GLm^3GF#*++dD#VZ0$G9P?Y(>drw6+V9pa^x zuDLr6*_Td>>*2(}!}}h(!+-1O>$(DrA8Xy#TH$s%tL&gfCoy-$_YdZz%u*pw^)1LM zD;C%G&RuXNL~(i`OWCv2J!Y3iXPc^cP-)ih!TpM1k2K(Xd&bjktyNw-HFT*ePaKqH ztIldh0U(bw#v~64@en#+^-pCIZY8w3by7)8+DWkm3FZfOD@2)UOnZ@wMW< znK!JTKCN$E6W4$FhXb*M#cr&rkK8n&o9c_j$`;ZGM!ONPU%mFm6RCr}J*WCxo0>z# zvNSsSMir9Y*W>MH^`YuOTWT@f+HZ4~cZCLeo#IEBeg2vJ0mw3fZAj+UU~P?zSWI=8 ztq>P2LxL2wi7_H$K+>Cb63Rt0pHlhjejA1fm|_lrE;?5a{1;B z4x$oQHf^Zn{=s3){*}gN@YY(3IeUMRybnvZYoC7HV1EqGVmebkc-MK};{cVmD5}H; zb=6ib|CDHr22k)Qb8n~iXY~ z`?_0Y3pZOwY(cEfE3Du+>>sC9hTpz5HE49a1g~)A`gi2#akG3vn=r17M174|n1TW& z?v@RZHm&{(dxY?kzmmy_^?riJ(Bk*|+x%^KrARA9?XW%E$Fp(_3{O4?A*-|LeV(WH z`O3YIr6PZGsy;Xw&HmW*Palx7z0i%d;+IK$cRcf!@}^v%^e3C%g^DT1@h&OU`Y|av zK@Kj^g5a7LT&Zr!)q))nDzRxw^ zw>0Y#r$)yg?+`i6;?3cf#f(A5ctLw~uwiK6y`|54aqth*_kH_Tf9HYJWWQSN(EkMl zH3&gr=w)QEFU_EQUaJM%{YcwH8Pju=Nq~LLfVK5xMzks?=zi2XUE!X&p`oG4A@oMj z7op3IF}Y^8J16I%c~yxwd<`7FyuHjk%^_5hw9d#=4Z%?i!!2BGa0O8usEIWBw^juG z2d}RGg(>@gNfZ8hTvweh(@_zip|vafxf7`^lw&a?WNnPz|3_ z##t9kojB!w1Z#vWs9`daQo2QEYvGJ3*6BrB!>kSFa>smdA~tQZRCOYoeKQIuYSO?q ztaai&)eUQ*LY4oJp=NOXN2le_Z``g{tno+*Svv98=*LoZ<1k*P4P;6g;Vp`NsIRTH zrM89~35}Ex#4L<%E8i84q!asK_&z-{WvKp}Xf`i5Gt!Ps6QpC*zu46$K#hv60GTAX z!Li^b^(j{{Lx{YW=#+V-RH`CyVx^>|&_XEfiJ_SF3g>pN%3WW$TEn6l?jlg{4``4#E>mEdv<~a)z3Tu?HbnlAzOQb zP$<+D>Oyj~J5NwDH44d3=U#cD@M^pc@0V>qE#LV@v_r=Fym3hTdkaE6;E4N)mN9kaoK%#Of=(2tjct z^mQblmO!X(#F}Z{ss1Ye>aq2=_BlFyjeX5rE#GXnCzH$N+t*wdhmPGa`{ z3ts=Y^w&~QXa{=m?TRZAkA{72JI_rehYm+WT+ygsz~5ul66n0}KM>FoCgn1>aQS*Y z@!0B40j|`b13h&679Ro?sY%C6m1wZ$YyF3nazqXw4#JmdcUOeN11JV*C4b6vu~0ls z)d&@f$cdX+V4AB-8fE-D&wo4~sTqdp@9*6={npzZQG@k#s^`p5=VBan$ia)#&Bu~U zds0P}$jT}%*T$cYDTmC;zEDa`I5G!1g5wdCAk)W(EUo_W%)d|(?G`FPc7>4VL4spU zf<2fheNHJGK*$uWt;D<9M6(kx)d2bW~Q0}Lqng3py$cUT}sk_=(XxRzHJt&MzDGJU?ybM6**Q69CP~tY$famhZ_=`xgOIpD%GwX7ky~=&(NQOU7`X#J%s&{5%$*L zDZkz~QF?d!5*9&k(Q~%^!uK(;l}S}&V`F>9_RP%?p|86-9PZx2`=GqPl{$gUfh9w% z)(@3J^o7oi0d(tmpQFEv`<#O}EnFF$e*YsbQn6&;nSsuw*vLZ*gBPG;0|y2z(1odjM_@-O~eLH#8YCIW8`2P)a~G#rh1M+-QvR)+^e9T_CCEy zdP_&E*qrw)%zD+sdW8|y9#d>>!6tOTa3{>7s(3ZfIAl?{3dABwgDNtEQX-YART?+_ zBf!A$H|$4baq;jcT7u9W>i2;F+$ip3g1n)YLhDl(>holOv8DM*A6V>vhq(Sl)&!}n z5~o^{uI#tAv^>GNiQB|)%3%}$KcX3UV+P4PU_2`V)714Cgn z$UsvVtp+1o#BHz&ml6Ab@JFVUhKdg0MG!cYj@nHHD#4eGlzaq`QaTd_QGl84_#7X; z%3$fQvhg`K0gH+F-Ohh4Y&av;EcGflL;5C^n;FoqI1h|Z$p_Fx8Mf?AGlHF#R;Wcw zDW^~6vaR(3r83RI=iR%yn7u$t^aI@A_deJ$cHiI@y3sZ~-XWgeTZFdB#@D3yqp!S6 zQxvuR7z?$wl+=&PbaHgXRs^sCcyN!VDoAcGXMZ8R7qM4d7*Kjq4r(lSV(5a#0t`?I z2y_)-OXDg6S~dz$I0b;&DH;Jl-@PHKH*P%xfIH7RT`G|xW~X&W4`1xyYKl_?+AK#*(cXz|E_v>?X6eFGk@ImKxXG|-Q}!N`jJ$QiJApv4ug4- z5bXy7*E}SG<~f96GJ~-IYcY+Y88I90$(5X#ALwIe-5w11SbsefgtgZq*g^v2bZCn~ zkd2qX=#~Ct=*TUxxwg70Z-@J8?NVUy>cQcgy6!pu5*vvtc`Z`yFN)vJ{z+S3OJ8$M zAn04n*j*!M`$9`YmRZ}azqzmEMWGov@k!kEbJ>5?{R$VQOSqy~W06MqDs)+>v_U<% zNKPygGHIZwT+)C{BhpH>=KCaGKvMPE!1-o zxcE?8_j*|GlI%lXlxVJV(6L&D_Iv!mAwmd&+h){ZpX{6PPy z?xWd9u1MCa-+f*buaKS?tw7dI_xnQW*kY!sH*1{07u<+{r;8CsmAc_v%Tp+(p_XM#77Hl0Uv{O^gb8bo0vEiY-q+n zU92N_8xSJH(EXelxQxgILli37ZfYA)Yfw*7; ze+1?HEb89n&x6RgyNf9h%8bZa8o9aLD3RnQiKzEtlleSG=5uB|FPn}c*=#bTv1J(2 zGT&Qr()r5to}6$B<;ZMm8s(BJ*FPl_1Tzimu}^qGDO=8fU_DHg{&JvgAu@_%Q`iFs z4nfiaY)U}cNi<>A6j>6h1p&3)Y?Dj??I19_!0wDXj!+9EOA- z&mUH5dwK+6VSZ++XS`<&Uowdc=&y+du=OCXSsN~(QJu~LwwC@S?L{%UfQvibL<)(v z5B@Rj_qv&hL$@$R?JuLQWq3%P+`Y7yuI9`2-9vMU%+sf>doSI$|H1l`$s_B}uF1#X z$X*t+pXdqr>H=PjcK#scG=3TaR#rA~QNSFCa_L$U<m8n!B42nlLsvJ4J z<-6W693hL#euIV>5YiCH0|>|2X&YbFtuSP2Kxrug|{js+78#{nbB-;_o)r`0Mq1 zGo!u936sCNl{~sHWqvyG$M##^zSufbbCb6=Fc!g%^u^3~p_q8(FUT~+(}=ak#0 zx>3ifb>hOP4&H3FSk1I@(qy&Z3W`Yaz(5P^4&n9BYJT2fBjitx$h@gZ5Spf&Py!`S zPkZD2&G-$C^>rAvsq}&S9{^ZD3VGDWT-%1X_Y!WWKx{1RBe7{b0+1;zJ7`VHWqsy? zvN-j`3DfjzCz|VTH(@&J4cSN5gs3@~VD+UL9p{7GuO#w9+`CXvPptPMxW`DN5K1 zTSNw0tBh>_X$goHhCb#xji+p86h*~N5NOR8zU44G>s3AOi`PFi+t7eaQ=b^rg(H!fHm=Wd_B!dXzeQ~Ch7RlCkY12q zM0f@oc;VZM>-gbAdoTpn5vZ?(MP*PxYPie_RuFU1xVYV6M)Zc_h2$_}Oii*lBw9#r za?o|hL?F;>$kxhK9#`01o!+E7Tj;B6m8IQ1O$RfqgBjlZR2~o&J`_{@M~)o1?Z_>s zSHQ!*K>HaPy;5aO)W^8Ma!x;eBd1o<^?3?ICEyZJ^QJ(QPTnZL$b+F|+w3mRv$yyT z_|$;vk#!f&cSt>JUG_UHZt7TW?A+;iH(m(QqsCr)L>ms=sh&M^ttR;w(8o?V*3-gw z7003F>HdybO*sq`(@5$;%)z4~?9$n7b{*(?oi>ZjNyZK9FNj`Jwv|CkMZvBU?Z{}Y zqHMOI8K>!|+u<_FXrQSa+qDYq1l;CvR`8TT>DB63?y-VZw!wsM@zldgpsPy|POTh2 z+O@B19~RV43}^a!k_o(7r`r`s*P^ae4u8xs*cFE-Wj{3|1VJ=SqnE`&>ZYZ+ehquGF`!d!*PrpBsv9&3Mz#o7a? z0^8Hw;hJg|Oy$6XX$*2B@+9wc3CJ$=G^m_T$SBG#2;Y59+h_u(o?l#3i!e<6Bsf-X z;Df9RjC~2~dsJmMJnGteu|H=+DfGGX`W5LXP@e#r)aI6EDx-s5gX1rQxaG7C z1|0^z4hEPY-ev_CoK`r#C4i;9=X~UkOUL zlYgZd=b}WE618&5=0LY@^d<~xu9ilzYs1M8)r5N%d&i%>sWa4-E;{v(bq0J5?uxR< z#HFT3jDBCKTM%yQ>S-CdsC4bG4IGT;Z$S35O&H(P>x>uXYi{>62E!tm)a(mPRw-c^ zbCp0HPEIJ9&bXfqzf#8HM3jhaH^^fV2#T2I0n;`*RY>vG`VRt|Tu>+o!6(kt(4eSZ6zv19wMK5MN+YYu*lRwUL}NOt;l}w-pRuci`z)+Q+}Tx0xKyldyPK( z#j(t6-2>BGi!2Z(nUNMq971T!UMNROBfd`x8rlO6)DmiIB(R?D6aErO}m1OEF}IfMWajNN!S1P7FD6z zQkdCV9Ufe`Iy1fS-~-_^vrwr zobJxuD~TmlKVmYO6izEA!R6P5qYu?05#VxhzdE^061^S~bq@4(#3SLR1`^K}m&rrb z#L%xJqHo{x$(vrKkTSm-&%CVcEGQjJutEM;HG+9idF}G_0PIq8U2P>*TE7 zBq4B-C~yIhg-juaO-7`F2m_0SsT6NDvj~G{1Wrd;Vc0^^MLx3V@6{rU)|N1st7-jj zL1cle%LgqeDlE8GTqCtaUkfeNkb@-@8$t`0oaEKnr@DOefs4!aH6yW(x~A2Ex~co8 z+oj&o{TQ|Q<5eC^{NX^nrUtVXJrM*GlQe1(4ENBih3*jw9}e|)v>xo5>sj=R>C|u8T7HMvwBz-z2hg&PY9K;<)?^$THw9BD}ozg{iH)sT>pl-k2$c-9CvXPtI zxo5VVu|Zmh?S1cqI6Ba>oKYs34~jSB$eK(D<5AE64FR!WfWsuu(qu9fvouwz4VoOy z?dEt*JJy2i8a(hhcH5UTXYV}t_(GxcF6z>RXFH`TqGtM@#%a4A`(Dj0k4}~>F4n~A zET2n#j5FEN_5QTa~XHF)e?AOOK$;JoAi=`qKONGK=v!0rK%|OvC3-CIVqrK6l`U;jcvz8WQ zVRG0VCM>MCQ>BF54BJ8_=s>w^(y`?>W}^j>vRc!3+R6+v@I@;e;xRr>c5-}qd~tr( zH|7I1M^CD=9m_LSi%BRwcMfo*=Cf?LFO~K(4bp;_8%SWe2Bu{)EC*h<_&zMSA9-r! zriB@alGf+e^q#eCbJlnD2c#aK(-df}ugwkkjU)|hzmPTNa;km8ZSvH*+FGe|P?v}V z5KN20f$J~Gd!>7D`#z_X52IR$E!B->D&osYz=;S76vGfAh!+q_8!(naR*2SEK}R`s zNh{bA4@P1qM94YIHy$6&XI&*7GJbLHCkWOW?2-s(Nb+JDH_d8Qi3I;Z*+a-dpy+ zX)(Hg<(30uYllvZ+YG}lYgu`VKQh}IS*@x{^<3zh9PegGF%Bdy|IwIo);4u>syEtk z-{{1F?xogfuh^Y2xa`%5wte09`Hb8inXc{a{Rx$~A@f6kFntU%pA!>G+3Zv%+1-f^ zXuuKMXhA2{0q4Myi$o7>(k83kY61vSZ?o!cAn~yg`^i-TT3AFvq2kt?L@Q5w%N#nJ z&3+Qhh`=GqvhfsPk&QC#4W~0)Mx0MTO4Jm$eKtaW>YMZygnH!nVEiMw8pGk+ZUdN2{0?YQ~H z+qXUWj>(qtqZdRm`>rQ+pMMOs1R7L+wsS66Ux}v9_UB*I&|D361cD2~wc!dF_u~re z7gofNDejX;_b-k2_tDxY7it_Btl*PD`!V4S)@T?xgq?N^MFE1{2rwJAw!&@VS_n3$ zo;YxHf>Y9AaVU0{SS0&7*2KpCx&NQMH;-@Yy3R$gVjw|q1c@0SL4qVmf-??h zN+Kzenng|2VA+x_d6F~OwQS3_B+E^lrm>r(X&kpn+ayh$H1o@JUz&8dxxJ~|B+Yo! zbV%oy3-zNzIQ|5$0m`v7HfC-yX z5#dI5qlaUj15cMxXTHUUleHb9B8!pWjW_oOxAr%b1Hb6wt%Avl33=4^=Jm_uWT3g= z-o1N|?LBtn5UC;U*fueSXah{F%m`_Ais|U+z`?(uG4jEx0OKUU#jg%mnfGu+9fqr( zzBL2=I|6av@w9yGs*aj1Pt$NK=BjZxWb-IHN!SCbx@V!g-U7y+{lZ@s4g1y34VW)(Uj2AfJV&er#x}yRNPT2bjy8#&@?S`w;1f%7nuH?nI z(ZY)<+ivx7P&~K7#gsmkNDx{U76O5V{R{i|?hecccFatTj{)@(YV;%t9$C!Ll=m|E zf)6Sf0n$OzK=@qkZqrMqCLPnE^Nr8)eO*}TI;^a|Z?&mmVc+oazUfCJhM!+vyLY^; zj)NoWWU?s|1IAsk?{Mvyn{eQm!}H-dM-c zlC=%Z`Riz**D{}#dRilGqWH`CO%;WG*FPxzIyQAsxTv@X`rDI?K4BqVtg)c%YEUdZtkY+_)fI&VEC^XC$L5V zVMPopp1B>{rv?Z5S`z^;fh?Wc-8}_OOY~N3)Vwp<8NaSzH^FC{;k5xu!`)pWGQb0~ zOk932cNUbAxm#9&n&+1`!Bn>2;9>0GFx=&hpQtRLcVx3W=seQz0~D;>@5`S?2~rjk zYpP?Wf*&K@kHsm%O&tsdSAr{hcI}*>7{g7S!A0#!5|onN)H)YQskNGK@Cq|KLq>J* zWs~TPVm5YPt78@#FT=f`8vRPS-2e(*R0W;worSmvJJhqeQ zDkn49Avg>+19tX?&&1Z>_>ox;b7$8zP-zf)04_5MT(vz5+VI~vzf92v?Kq!OfU^<)G;zYMs3zq zyU_rj%o`xGPD&mM?z_kUrQbBDgPWY=tfI2i0(ah&1%BYitXKB8(kUd(O<=yUH`Y-O z2XL=84-vq*E@EtI4)7ESMdz1It$3Fi;bWM!93M@0cd5*# z6&h!o0))5KXaWTdASc9}U@=mO3=9fLaAf5DMzARv&3EFR1e->n!1RVSl1QYrc!X?% zZNJuMpsUK|C58romaSrZv*kz_%J9wR%`r{Ir}9*@|5lDKRU`4dO~Ocu-yo1CJh(quUYg>A4G!&;X{WO77m>} zbaM6R!pg#deS3+ZnC?qvF{up+MPU$>kc;SVlyHNVvmAakYAnUF&zI)pm0r|3A~l4% zz|@YVioBM7W_oxf8gx|^vxAn}Rh}7i?Gx85{wLOscK)gaR?FN={-`Kk(1xl(4|}Aq zFjU=qD&7z>$wd^QMJA``23>xS^FGFMdB!RpS0}Ei_unD?2TZU}cmjc9cdCH^?R1N> zwi7qJ1TTxqMBq(iR0d?ilmwFu{hb?lsPF-Vu83G=n8j8f<`{0Gp{ec-#@j;$9x7G{ zBwt71?L0!IHx`YC3O$uH^*DVT%Wam%vd>o3wTwU0x%#jeywnQ%qDEly+@tlG$Q}F$ zubg`*eQa`^zyhyaBQVMbkGM^vT_>lrVqhuj>yLyI{*I*Yt7)%?uVH;K)A#2ES1JD; zmMM#ATH8>67qRV|iCTmXW*1SLBr}Lb?SM+=+2k1qbe?D= zLtm7PsLJ2kHyO4MzlBMJyTLf+#Z-S(!}bvhR~^(uQBG5yB}-*|{W0AV2K0zsP|q9w zd?Qi+>3)@{fAZ21*XuQRD7rm$*_Id9K5|X|7tT7r8BKr1*si#0l=i9`j@)Ax>A%X~ zz=|e>bBZ+{AzsQn=p=~sfB^6XVyTo-At?(u3DJjWKz55yaj;23NO;_*f(;=Z*hEj@ zlqp^jt+VNsV>rkKZp$il^}|RJRo0S?$B~~f!j5@+gQ1$%!U@yJ z_Tlz$&TuuBIa|hz%Em4aVI59fy!`yb(ZtA={SUqVVqaT*f4Jyei3!KrnQQWouc1l# z!6SW)hJSd;H9|rHCe?tn zvJj{}3j{W_VxPc@jbI4za|qf-2Ga#b5sfpil@>#SKQc%r!(l8OHM1nBR8m+_vT~dU zpslccH~vcTViRBYR(nG;fFRMD9-W>T^VFOQwh=Q)@oE>Y;$rTWqGd1Piq2D%m_AW@ z-4;$V`PQAMwfUNe3EN`b0`ZA0N!EvARg?}v^gxSY(W&a0+&s^+9a4t)m}X{n%Zh-GjUO4cc7$Rm`;$kFCq@ zG91g-X&+qjs~(Rb^H0|o9eOo)29(B^%_KNx_#$P&S_iOD&}jnhU@ph5 z*eM(l6N+bL&(1k0#A$}$Btvk)5M}`627w?Bvl9m4L<9$_I24DVQ;NQc?6=+`o1@gIhv>|S1& z-?5$8BZ~}$}HT59YFI%v!3uy9SqwwG=Swt+N{z#_qvNdjJ7`T(Nex6WTM+-`lQ| zAmB2-Pp#uqM@_!dR&HRY0rx7l82~>vYGyzvsDh}=e*A#q!M(we$H7RjX-kMGC`a_( zxOhyj*YM}MF>y8|dhB=ab>FKU$Mwb&eFxY6_L|W}Bjx3$MD4pTZc`6jvY(HY6C(C} z?iFJOYcn7`t=I?p`&#`CsFi8R@-9#=;%%)4OoSTHXTJ{}aT~#j34V7c%J^(hSU(rj zpmY{}2Vlq>eFX_XXGa43+a5O-sRooR>ZItFD^do-MLK)Zk7!7A|Fb7uo2*UwDN*;H z*G-nJPMHBwiiSUJ^kBIZIG;}{6$?l+IeaTW&oG8&0on`jHefInWPm?`RfK7QB@5$A z@IZEWAlMMg1o9fN#gh%=8=v8jX)x{PAHwL(x6e*Z;HM%5#hfUrl)#5+I%pIS>)>xR z>5v~Tqkf*w6pIp2fCWooQHHN?juoqt9@I=!bT|8V#8=k-@|v-^3~;OrNJ3GO2}pTY!ObiT^phRM;YVhb&4hvq6M?rwhD5aX0wJT*#mD-Axgj|Z2fc` zn_GD}rq*8Lb8UjzX6E5x(QgL>62e1xq(xzot_hM>9cC2nk&vev;b8*Y)#gw0sINK)Y~II3=D{yeE$>EzXZA zgWa9&nA;&dhle6dDy{DqT!<`PEV6W%oV2R|q@iP3Ayi^u6{W&z)ZQdFB29zfkqw^W zNYh(o2T>gI52`f6qgbt#t4Knct(r%HjJ$;604gOn`FCIjxAbR#O8Q0r0!v+ZFS7W3 zSTNeUveMD9a%$z&iPesS9SBQzE^M2juymjwgGJC~g|{JqNlj5;$~%)=*win8HsSH9 zvck|NXFr^LT=PVKT^YJPmb(j{Xw3e``CkxyvTIDWyw>K?xutA0J9Enz6a!5071M1n z#SY5-qV_&y5H1w8A<74Pbiy7hO?Fcy(2{m=yultF zut-M*AuT+jOD0$x65&cM<3SwEGM>B{R;&Ut$<2@&^ZV)X2BYiJ{|nEjX8mD2-(xU( zZuoq`<1%;{xZ_q{LIH=J}?M7AjDWzh#zdKd$pgV=-4Rog@SWd}G=}bHY z2Nle2p*LI8#=+1-=OtrPC_sxKMDOgDc5sNeqR}} z6!rZ#D2o7qAio zA5@$p5Lbb~FOv*$XqVw2$mnGTgV6*;Dny5wP}@5EOJ3-=Xr!V6MPqzfGGXoV@*_9> zZKT=*0|Vm&W7*M6Ur(Bu3TcoqX6t;}RU5oOgBL9Xo?-zBSat=AOG0~Dhr*jyXIA9I3_)h<|W7KdrE%TU`iQx(LQ4QQY&y#FRRi0H5=+ zk@$m}g^=*T$EhkNYbz1atpph7^D9v-ztW)a6;l^t^A8?SypUQC23m-Mi5M4X88%9_ z6kLslC}R>WZ^nD85-oc*zbhVFf99HTwp5%&eOuP^CP@~!RnuqiiZL{I2Zd{jZJ;+6 zhG%7<3A&Tw;4npkDe;;)8$bk%j5?GX^;j^Kn0Kr<@eL5dqrW@YIoRJvQ~1${o3?)| zJr>>jlNm50C@0188Gb3D$@?j84u|v00&{3zzk1E|M^CIBxrV#xd*a>sYboF7B^{Q$ zU0|&iH|npzHsn9U!Ucq+@StLAiv|3&Y-As_Y+ko50MH*}$UR0Co+BV`T$O8kgMDnD1=K}B{p_S0>WTxene}a=$B9rwQ zNd;6KI`?my!pf^JUNe4ZQ-u|E4U45!?!Nw0`SVzvF2sWNt`6{Zz7uU~h|lRjda{XAI|muAUh z<-W2(mgU#3$zQ&zlVwqtgaa-&=&{^={k!H}SesE{LHGluat4|Rbk!r~VJuOErfDx7)Nnk81{H-rh<*(sJ^&PKvuqnV1EK{3`!fCuuEZS14Yu>G>GpDvk7GM-U+e- zTQvIjjQ5S)Iee-2E!(!g_1?zjMrW+?sH?9<)e>3MjYMO7jB)AZ1+`Kn^~x3=cAnf9iVp6QTUL zBm+G}2~4GmAuu-}QX?c&2valG5D^e~!ACQ0$*Pgy+%3c=N|0eg{8E-@5#ILM&*sJ&Ms&50j@qy%l zhV-`PtQ4$o3XTrmReK(S13a`+{XI`K)LbJ7H;$UH`U3fcGk3>j#v+#wwSV?nv8^yCFVDYmGt> zye6twxPK(cFD+D8S2tBRg*^?}Yoe;=Ffm@F?&UFJAu*F$)x2c+zHL{fz~#KyBO4=Q zVvqhe%tEblsYtEzEz%@@SOn2hn-Y%&o9h6>HRD&o6&pn1E)02Mh1K6v>+#e_6DG{f zW8M^kuWj*1qlWFMh*BkZ`$yzva)S>qP?qg=-!b_Jx@)qeDuEYq1LXm zm!#~a59OX{9-2+PB#QfXwt78{osn>2X4_)6tAFQ1N@k*_Wmh}<(f`y_>uOAeKk+Tt z$Ya;}&u+jhPOs3a#9~dgUbM0d;Hv>bMKIn)vu&c`C@y2@lO*Yf$Jp;SGXxOf1=#t( z|KIR)Wt6h=FW1)_GCVsxJiFtOdHm?B(U1FwwspQFI_esNq0z}yd+X?GuPDxR zM^C2vS9YL#>I~Br}XVq|;b`DguDC9Yp}2 z+l70R2vZCQvka;fj@cx^F65(_A@j=%Y62hhH#OAvxLp==on{+g{Ltb6?f|s+)7i;s zvXkcIgBn`UJk}d~{F-#6#9|IQ;*t1d=rE*PQ-Qu+?!Nva+o4UkL;g4X_Av6Q5n(~u zG29Q5mOvw-BD_Hbh#U|wYIOa80rCk@o7F6%PoSxtY89OBF3kG}Tbk3XAOX=k9VBwo zml7Gji>62wSJ32d*k{6Z#{>inusX&w6M5vx0i;tB?%VB?WnKxg|{qS^y ztAc}gbhw?zP{w&3R-sOaqLN{4sr3?|Sewfsb!3z#2%&AUl2Q>Mcwpe-{WV+|tiPtJ zlAw%(599WxOaDfnX8Bb#+zboApRV(OF{uh515H9lO*6Tjs}>&Nf~l-Qo{|0tMnFPd zwL?w5y76a@Zo4X*FxTN+I2>%c|h zZJHa!m%jNe${cAYKa4l>!5el8)5=7ut*OCRO~!1yIb#MEzBAexuLCfV`ap#FD7Itr zI(#?SJ7|`xms*iOoHyN6mcPsI-q>LID=p?8$(!i6zLhspqKNyp;Syf0K}aakx*81l zRDepEyd^>#6g2XlvZ1~fmu)}>AsO%XHxw zUVk#Q~9z5sDy?Y?1)`)wwRT#w2_yPzl|$(DM!Ixa~FW(>gqz)jxW zfyrNjlhFKKI2>-r|5OJ(jV!JQTbRy0l>9oZEPghw9dLHiKO)|gnJ98gTi=BatM-E- zhrG6DD%2D6d`-NlYCN->@*t#TtVO>+_ekGx{l~ubExpL|E5;eDC*3|^?e1xhh6=)& zmCSdWMN+O7kuqzRZ-Stlo|&+_6Wx>;o)Pv`Lp{@05ThVuJo?aiR~{)k$EDK8@^di% zlAI3G$INz&qn9@*9dp$22Bl-|ke5gs)2VnpI~8eRUfGV5+Eh3bW?&G_41<_=^yY%2 zmvLojggmviwdvY)7**#R9u0O?Z88`vzn)GOILh@m8o}wz;Jl)B!RJv&BnkwpnP@#J#4GtYx)|Nv-GkkOncf-{L8`YvsUzts zaUh7e^4S)gh)+weXp!`TVD$~Per^xdS6+pOudodFvcxL)E%C$Jj2E|yyl`ekmFg%L za~Dlju27gKQs4e|UNjS4MW&g6Hk<;`n{_9m;I1d0PFBNq!e@#AnGmn3*&vyTPzXm_ zo7IHD6y)H%z{xdGd6{XdQptkBb<32Oi-KQofE{+ia(fMLEL%}Vou1s2{EY{8MIw>;LbbtAVgdA`J|EL9 zV|F0DeNgeMYUb+ZOYgsw`=6M#?Yz7`qgsG?F4m~ZmKW{%8LRW`ZCtFJy~ICAeRzo$ zL^uCv-%FC zTmkOgpxLL^=S0l&P*UZU`sfI=3H15X%(FR+$Htgs)RQ@>`>Zn@C>kvf+^w3kxG?!6 zK!tPBp8a)5q3sw2Ub<2sUc%vYvuq!uT{0E^ro3th;1Ci_lnH<-^pj3gk>Y=p>b z^ZLzT{+msx^$Oa)n5;asMHl0aO?Ss6KDqXfRKb5mw?W_SnjNhky7%nb|IqIf3CwT0 zRm-^_vl_p)U#>q#JiNDBPCflsxqnu7jtVpT7=iy7bf14iaZgPQ4|H}Usq6=NiU6ucfA@Fne1--Ag;hbF7?af<+>$(SMrMa32mW*o^k{X+>|yEp$_J4F0At{dx+ z$8{I|ZvJ>d0?pu!mH||O+7G_f2kS7{MaxVWY@o2C$BqfYvD=TG#?Bta;Ld?PyA~I~ zqcow6M#4zlqTz_Ux&({8iS3e=YshRC;0@`rH|0HeL|=Dzs8iDKhE zVQ6tlZGdY(b5*?OzMJ5K6xW&pZnAz}N&sxTEz;SoxA-GctGBXZpp7uxQ`Q@DMdr@> zWp*ZTgFKGuuL~$-58>E9C_FA5R2nb-(w%3|oH}@5@AhrV$WW>^8g6NJQ!%2Bjt0$w zEeHrJTy7JPkw(Et(-|r>62(u0ui7KI+(1X7ED8WOzQ}{Dnkui2T__NfBAl+-%mI=N z`A-1J1pp)QSOQ*d_E;x@E^q#+)p+WzO`pnfko+ebT(|gW5*s~Gcyy)FZsbT&EJq$G zTJA3h#>$&ok=V`r0bjL&fjQ|V1oahe_74zd^vI3h0Ds}IPpozsst>=Gze1c(r(iBl z7e|a@dx03;WVPsTq1(^@97B$}2{~%IxmQw-|2O@e3c*}~i4O{?i;b2+RGG)=e(0g` z@!{cz9)IZ4_=DpQUbyf4T_;u#uK-)TNVBEGW5d8N4GsY7A4Ltx?W(2lQdc@+-e z6D1h6qd^y`%4pV$kTb%*5z{gM<1yJp9ev>YuKw)T;Hs{Oe|jtIXKN=_r=^Y^5(`>eG}&I{x4aFeN~2B3Ft`&< zB4CGZfgY{k%qXaO*+_ze{RoFoDyv{V?TJ$sgvJ2Z6p%#>pyNh2IE>&Ck}9FCM?{e- z0*hZ@6&!(eOhsU^KBzK~#Y6l12qxtT)+VUt&8WZ%dNzg4)KV*T8#RcP-{95oRc0+R zl|O`gg5j+CThHvkJ{(`V@0}{dcb#e%&ztD~D95)mkw8R*QBI5J7A( zgako3)DvFA0u7;0Jv2TvhWgbYi2{oboQAGKl^<`AKmIA zO}sFvh{ju7CsvO)&cTe@z!5Ym98~rV^!IkPL3M+h64uHMkwh8v>C`=y5RIE9A~(Rl zYo$35@1X{%WviJ?GMO38j3oP#eQ{4?f;<9)q?LMv!r?U|j@EcUS$o)6m?PJ$$2iB+ zn)YKIU9Uf+vmSqAg@t-d>yKVFPCZdT3$MS4+Yc+a%|lV4r%z`;zJS}KjfyYk0mFIw zp>_Fy;TqP(2p!{y(5<9MucICb3)4w9REpcs6=(f!5`GcHV{oC+KyUHa)_7bpl_A)h z7&7_7xvmc3lPSkQ_~bQQTYu!L;n6Dz$xp}95RI%UNu?( zcxR<^^=m5rox*_PZ=rIY$xMu8vYBkeQxi)h*>Tpl+>i!vfKp+bv|Ay+MZnDP0nj|L zi=dqV<3&2y`Z~I!Ca`m0>TM^rqu?;Ab@cTouNp5Dm|fQXOg$haylJLNY{Pj)J0%{c zT`Q|EWtUZQm)x83CkJ&UUFB|C_#>rya;&6!2Or22rC#<(|Q-dpG+Km8%8Z?&JOCDtxa0jtZaIizAeN?RCD_1GDp5YJI=*Z1P!L zFsAFzOCNzpi$SC0U5Y&s4OP+24gK03FOma;h#!gxz>1?#B$*@|QYl0{G+4`H8y#|w z1|^w_0$?2tN_vYgs(jZ}^MqYJT3_Fo_Kdh5ikU z-D_MCh;;|FK*)!dB9XMQ+H+bmWbb?W!jE47I3RvzZr6$73p;j=D;JkPz+@4`^@&PH zWtFeW11h`q`)7Y+Qd#TXF?%wCn5WM&bRgY1Hg#e0^$d^QYmqW-p$1R4Vg|(|7E2i>HKLk>FGD~=4ULTdv8n#Pn{_3o-z;kF46gHb_ z6<8!cqrF$}4vyH)KL<;CD~~~eRmFU7@dTj#Y%0IJ{`Ww~0+2mLNvD65(uUN)Jr(mN$3*Om4xy)tHK|*}YO3s}DB7J!ApkKh^T4Bf5Q;7TY5HvGhP@fF z$0Jvz>C3Oakl(VAJlci1rumQ;qAf}e++Q2EP=!b@->>arZyr&A7z^-^f53Kjpk(m_ zA|Pq4)$!Xm8_m$o)ze*FN z*f%;ux?jMytud7ngw#-qq{%vjj%1s=2b)Gy3ndwbe!8W2$I_baMA3%H{kTL(gd%b> zG*h}oACKkrCf1z!O=36%Bo>6(->@xZPS(rpWYJbk3ok2vha|~}k!1E! zqXbfZXCM%0546R}B~@F1vx<-x+U$Ptc~MQ(-3^AnMlP`NYWVoRc&=JA-|tg0Q0`7x z>hOpinlnKneE0PqN?$=h*#O+dlrmoL1E)1zqYP}t?oSANs-k#wWGx693zz{xAg}=! zg!2Y{z|Uylx6%ubIZ?9_Q&my}&frJ zkJ*jqbfCB6CGsS?r3KD4tHz`p`+)qSh$=|st0O#pEXwfoUVxG%YiT2g7?j>ocs=7b z*17rFZ372$%h#Nnkth|ta!%Yea_%K7^^S>vM#hUbVJN6qIHVlt?t-90IMh^+opMm6 z!T?Gc%;qB%LsJVS9Vo&W&^eYU+Sl%E3)K5^eeTo8JB(5VleOKZUx}VdY>q=~Bg_ElnB%02Uyj8OUTY4WbPg7i2MzT*pF~ zMVeRTMRz-(UxhkEAdu+`qyj1a{*A?~lqxo$C@d(m0=<&jRrMN0S^)+X=vwj>t-%wz zH8?i*n;T&R-fUF24m`7_hT~(}m>w+9P@Lj*;>U(tAkjs8%8^1hy*Lr z5(h7wYELM{6z|kI)g6UHXxN({PhGq8XFD(EF}ORrbyla%r)FQe2(BW$)^qH&+5p8{ zROVY_G!`#m4Dl9TtP3KEC>yrX2&VdCW$K_Cy-fL6JA=CCi+HQVU6C8SoL1=E{QbzM zylkY2i$(xHQ^F<1*3sHnhgZxGTCxFKl5#6`qNskLaaS1lYS$7KoRAxT9)rmc(?~_I z>ERH&d?<7(alGXZ1&}u(-8nE$a`Q)!^y$K88yB8jJNz^jeGzWGoS!S6qk8nZ;zY310ondi(q(Zn-6uU zc=rGvy!|%79A3C0+66EOmg#(cM-8?EKsqtvWiMi0J6k1!NX?&B^+Eqp} z1S?b~EMR>%?tvHi1icLJLYa-kid};D{fzV*g%>pb7YF@btE{e-Cgqukps` z;SrRBL5r2J@+5rWaw*ejYaEyRGxNd z%oGDKP6)RP7ZB>mKwO}>1ExG+P|l&6i79d?;ekP$2H6rL5h^UWLr!I?!*1ex$JE0u%ENKmay zvoTvjH=r)9P4t6{49!Oy?#M!*x}}c=#CL0-3?GYmrlB-MExWsxX;~XK_}F|+y387j zIOBOdcLC1*9`d*PGBk+B?)^a#Ur`*ya|Fszjl9Zn7lBqD|a1w%=ib5}{4GYslt=oR;1V4YT>DOttR z9B;J`?bm8@dFrgHSvRYy&p}zlixI+*mg*S($i3~k)OhmgKCvwnP>$B=*CG3Z zxrtqr<-Pm*N2EJpKy|p9N0p&ab6riPI;ZK7s42VIoMwG}eYidxY@yj18r94reI=yU z$l`Rg)W$;jPP&u!^@kT88MtScQ)8Ikz**3iTc1>(tWXw$T2m0?Zq2ppMnjj2?LhYgUwnPAp=UCAMp`J16M!)^pU-$$LoGUqC(a-&qLIiNm{1nI7zG4>UK`dnmiW1O|ra zEH;B~=mNnIq9JXJu&c}O?;7d?j^5wt?`ZJU@!oD3w1?KsWfmsno4X-(U(8}*gXDkb zflm90RP0c8;!S5g$wV(Is`8&ax%Q^1O4i%`5sP(1@p5U*)6&?~oIRY#Z(44pze?@v z^6eAFQ~7-qVSB%A_$=N(NDbY9zXl}Z7}7%P#i34V(G`>*(?XOH6i_N^YK$659XbD- zecG^AvDKNyLH7IJaPM=G47GEg8n|a!wK>Dvt^)VWf6BXe#)ft6Tt);vXJo-5jmCjelqRuR&zVhl=+)dko|=wOB1jX~0=YL{-q3+(OlGx9 zN9~Ec`(rIqqxk9SXb%wuErL`#lIZt$Md~Yuqr?+1yrRvpyn0QpyR!ZU!+f?1Jx<uy~Lbi_JmJ@3kVA8JK~HXC3qc$tg2e>A*+m+8lVxdYQ2ts#;hf?WNM7rnS80*LPb z&&Acw8#z3z)4x@N5<+VoP=A`%BsSznwU6pQMFZxZnsyLU(CZsx6y|BcjBaY0si16l z`G8gk@)=$?dhoXPxnyIluhVm>VL38#Y2VZx>2duM7@oOyT?ogf(?61T97qm^2Ltty zXmBZ8;T}Ib7~eB$ZYx;^5Ft#TuYH%P6U-+M=YC>%2U(x^484{7Ploft8E~J7;)`d9 z`vhgK>ldy+Xe5w3@xycr`;^_C?Zgp-F-JO~xFM_}2(Mj3?GjiWI5I;sjF9F3ud z#lc`V=3O}bi!Va+k{hrXdGLRRdr*d3(0NdiwE>MPti0>4?$uu%9(vwCv_E$4a18-3 zK7G~bxS|7ItW)1lE!9R_8r+WzG&e>Ywfbz{udcu8ZPe$xej)c$`8czZQQ=n<*YH5P zGZ7B?*`3HbR)lQqK%bSpI5@;{OA1E_nT+z6bPi*$j7$73bUuJnQ2SI$O7{hkeT6_P zlEtveH`u7}=*SSUKlI@~4Mp0MRkT*ZR`+SfR9HP74jfmimoJ;)TDcoFJg}fH;o1G- zi6dR>{a59)xL0%E!P1HE-r`oBOPkqxhPFdj84!XWh`GCI8EN`-j(LtG-KuTzNT`nK zW%6n-4bdRufPYsH85j`qSsn~8DI`7K_714Wf&c-rCxQo26A{v7P2@Ysxe)H1nTc0A zpWXgHE{NXJOv%!HdAsE4V3cW73=&}M`3-(eH@v_+Y$#IfCXysAx>G~_tCLX2l zyGUE~H9Y_=`Xfh<+;Qae>ajyB2lg-RoZC+7u1VAdyhNf{JOL7;%LT?nxpjueW$L

    +)zHUjMnn@f;j2=m!X^*5FYuB!r2CwD@ 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 HWDQGD9w`8VV?Sa$ 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 V1tQCfI#2_ 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%0A|QiV2--#2XBsu z=Cf=Alc(J*uHPF}K;qCZ2Q*V+(KN3Hg+0UNJ1=K*zGf zFu<(T_JprPKo_mwa`dw6RY|{iTBbpwosn%m_BVPx?LlmSvg)WmCLa~&xV7F4`lZK~ zQgXr`+2~~B2*gBaA?Yej;!!ccij$z=5giH8idn?kU}s6g+fJqMo7MmVY>^snLnz_I!rIZ6Fv)~M{_W~O@O{{wgI8B72G literal 0 HcmV?d00001 diff --git a/public/3D/icons/arugula.avif b/public/3D/icons/arugula.avif new file mode 100644 index 0000000000000000000000000000000000000000..c178bc82ec6dbb6827659729b97dc7c83ebbd2ed GIT binary patch literal 7076 zcmYjzWl)?=)AbVE-Q8URS%L)DKyZiPx&&C*w|zcQ*dZy&991 znT_LrE&yN;GIjo+{}*jQCjTpgVGnY){l~$)?rb0%u<74O5&(Du_?vlMXo3I$Cg?T( z7s1p404O1^zBmYE_ivJa49RO?{#Ww%gt05vTM4iY_}>8kk9np4GGaFNR>psoBp^rg z|0)0g7{)H{HvfA5?b;2pceH=SbdbF%_!aR$PWI-n_-Zg$|1AKPJ;)vOHv@}=g!Bq% z#;$KA{9(}krf^NcHjZ|tHtw$#-vAK&UQ@3Z{Z9__|B1=|iuqn!OZ;_Q9PI>b?aeL! zZQ=r^AX9q*Cl4oQb6Y2YR}IJpWbEi6VEn)FDM0qN|L*a6^z~!G!Mq8C1H6HQfe%3h z0ElmG&5WIK04NAVCc?hL_}uq+uK|0C~?YjK|^R`iAx%SSWdX8wi<pA zet~0f?z#`ktDFX~zSU*Bb)y~D91L4>nJ)7{D*5V@CF5z-hq&j;AI+IDIz`1ls&{h( z_Qf@Dua=g}NA;O}nTeUOCHgJ=i(?A@X&7l8|8coM9!x5tFtPoPVwX85v4recRjHG_ znrBU`kVa*1B|~A?p(okDO|ANU3c!OQdCK(5(ZwD>_f5j zmNR=X25@nkuio(hU+ct?ML|zJwJ#ile?Gq!xcarKkzilg0g$RB_=CeI4^PJ9NkN^c zWIHLkg5KaeC(vRd$6xM(J9McIR$eS`oH7&XcAAHYP?RkJOW9U+ZbXvp`m~_EFKEy< zvXFFC!$`!TQ21%Ae!(ojL`WEm2y=?zJL~dIvvw;k;j-+g6?KJF74ZkJJDt7pF^C$z z=uFHDt@dO$sRV-hVzyxRoi&Gg@HDAJw!m8^w;5-Mgy@^k?UcE2D;-kAiZ4Ve&v`A_ z;rB1Qlm*{2Oc>RuMIXPHs)^(-g|DflgE4N81IQ5#UFZY?(cJe2Rq7KLLq2sgCs#=1 zke>&UmOGqKi+tS0>Y^M7ZzQmxl<}b7&uzzE)su*S=V!WMOVasn@x!_w9pBovIsakY zlz`?LN7NWB&BdT%88gNo`@lw~i4q{_Ntx8atHi`VUu91Oa|p*mKfzOMFdW6%>9KFM7mtj^adM zUNb^)ZkACvlw^X5HTpgQ)v?Itx{CeVC%65DfwQ@Tn8K04P!NF!zHW8p#s;>B*Y59= z-L~P0tjmVAHp|O+c})@dpoDT)x6pv-DxJJg%!uA`SS>u{9G1u@nuDC1!B7a818^zk;nFAk$}+XtWpcDa|iQ ztdc%(hRpJrTx4=YRdM8IBjWM4a`gy8{aCRlY1y>vpK6&)FQ}XV;8YB_Um}eIdv+L{ zZdc7Da)aL*u{m89x;IjY@cKs`u&k1QN8!S6_Mszm4=1UrIXKGC2P$4M6pt1?knUk$ zZe(Rd8J5z8?-Y+=kU22XnIXxmLB$@A>$GQTYv;PZu)(Q&`cpPE?i1D`6R=oRYKugZ zt5j-OZ--3e2>1?hA(ZTH6Oykuhl(NKRAEAcQ5lHmbU%va$ ze!~L}np)izY1GF((Q8CnJ3rQlF86(IfGeT1JMR&Q+h&MaWx8efU+2U~{=1#6)*7-PB$t4yWvmYjO{=VA}}^eH&426`aD-K*gTw`JT{K zb9a~M2FufjU#oIYsKPZaVZjM4xJ_`f;Nk8Qquyxh2iyTqC;onG&D5dU_qxtHxnb00 z%OTvrfh(71Wo2%+yf$9P8S7I@&$zl1RFP$i9l>(8-zmn%Hm3V|K5VlLI~raUdp~4H zmMd6&Mt&;Zp!0mPKV5OibneWNEh>;)o65mDD|i%K&8kMOwUh9(3WHUM4Q0{1776N4 zLdE9DMTA?Cu5a~q!1-P6yi67ldny{~9sBEiAgk+ObUvXdKi#g-Vs?gVL!%0Z4KN&G zX_ysD-i42t0~4^3Iv~|S?N%F}NjwER*1F%;Tf`8L3#Oj92c4v8`Di!brAP&rdRH&4 zDb~)dLR1Y#p7AQni#^vjyw?P*`t=#g?}Q^JZ#%!T;(Ie&*X$T17z!qK0l{d!52GW_ z(hTG`BwyQB4ulB%FS`jN>&Ua%)#pkd+g?n&8CvUs{&+?n#-tU$Xon1uts^h`oSWU~ zdMp?iBkNRSvp${FU)?nl>F0(iA*6E%f2_T>C|B}#}@|busetnj#dTw4wOC-QV6=Hr;Zt!>jkLu_(jE%{;Yv9)gHgYjB5Ij zqy}KrEZ@ugIO?(-(DpRxRA+@Hwi*VEd5lMCYr2}jWSK#Mr?K8LSi)i9 zpvYp{*7tiUD5)U?zJ71J>9I#EE%W0&O+EfKbG?bs_V6N$0ku(Ejf(aXD|@M-#9GIj zQ0b5z3+dBrGx>6Z1%Mw|%gn?jWqUnd{?p74F?edP&+sGRFygYEYK$=iV_X|dycag+ z?*jUpSz&2th4N~YapQFrA(_HII`zU7vh=6;-YyCLSWS4ygKEEk#QBMsC7~07d6xA4 zPwi;w#x~!7sqr+&NSoP>4FEam+TdGPCeYj&1*<2RGsJ{B`eIQO3x(8SDW2|m3f0%> zKQLu2u$JEz_n@(}+k;N4Dmm0f6T(q^8N5Y#Bw-X;B|5O^6SQl8&$HNE{mH_UM`NaE zfuD!YbyqNglH*-hph1$w^BuVd`sEo-@yEy}E-is3L^AIteDZF0TSGCv<0TiFNGk4!Cfp&HeoySSDTko48SK!!mE0i5Y9Jgq`CR79nc= z(#7lU?39S35k*8a$Ov1>RXJR4BbW1dszVZk?N2+vDT*R6a zQRryh?cFHNJ2b^rB~=z7QzsF8?7P%va;w%Q+Hk~yrFaRBn~T!=b1x;WQ0Av9zrL9% zb@P6Cz^Z8YHkWwOt{ncP>)g`ufWnP>iQ&9i)Tm;N2MM2JCRV5)5{<+f5Rz3z=v{Mh z$ovhLr{_IXVjeGS8oBW8+#2_!chv*e5!AYka@!y;p_2Dll~SL1ipl=Uur*H88fTO3 zoj^zM{^3{A%klf(=rjV7@Vkwlk2%=ix*E10+tBeigE?exU?GVUKt3R4{Je2|wdg_*TDH_sGJ;-1>llF~7Sj&HY~8Ob_)E`LZq zYITVn)2lJzZ`L3w{O5RZOgL4~=3B6vNieFp#d&(OBMO=RjZp7B8*eD`Su%A{vjH&g^L6tf_yJ`ow#Hcsl=>^8X(j>-byN&VZ9cMW=gm=n*zK0xVBi;pxN>G0) z>u+dy7Ir9g@%cyttrGjGc8u?BqW6R=>csbl*kcv+_=LI7S4c={CafayjO$o)W=kVa zAbjcCFm8}j{VYvR2t_76k0OJ%q=ND8;i_p<)kl`Z#(!N;1^sZmy)AJu)_>2Q9-^$X zcjF>;g<1ZIswfLDF%B6X#jeh64@gbWE=0anD0Cn^#f-U;pu|^TD3E$4=BWZM6G{!p zt-~sYE4Wwj!$oq!xqez^hHnx`HYX_+*o^SWEIbfXUx%|I@&3eksy84-2BazN$-v7l z9FV}>7NOkk*+wa!Jx}(XNZ-&GLpXO^f=r$wGR;fwmh$j% zrRB>PP;_T@#}sAB!M-anPs2os)c_(p8*O+J^DUVY#?fCVYJ^Jy-Tu{dl{!7yGJ_siCt8FR; zw6;skASo(#mhMd5qR*OOmiWG{;-7`yH^nT5;*MzWNxZ zy6&%L6CJU9H`+4|h1on6*D=eb5D3Pq|MH;-3HsazgpipX!0A+cT~h;yu#)%v7l zOlQ;25}6|m8#+zi*Kc!`k0H1v#=uBxYmTXxA+Ks3(hsfH{XxT7GedyiLH6l+v@iQ0 z?%QcV%Lvvr*6=wr@ojGvvaRn;H0h42Z#Pm%{N7k`{+k9XiovhXv+BI#m{k#iW~cdh z^G%s+;QsP6KRIxbJB==)zFc+#DF?M76Sb{>?nUB|auZk33WFEP2H)d8^$UO1-3OqX zMzHpW&x;+$ij&IP-%RQ`neiKZCLU0U0mq1!sNv4!d`5RND^#CRA_l)G)2PUyEduF{ z>T^l*u!jNpi~V8}#X`N&o0K50tJI1RtTY~g2!;4meuz_DDre^*iv|M;M#>? z=*~mc z9h(OHp(*>b6{qwtOGAEVm3884D>8R zR9Ht?ZY3^N427UH^Uo=6* z$uu#i)QsV8(n>=V@Y&8|lJ6ak_=0Ojd?4K<-u})HU=W2edshv(pASYcB`voykdp+=gw{3228+};2>6Y$XA$L_m7buP~uJ-DbHk$gNC)k^x4g4UYHk=eKPa_2rPms(l!mz8N9 zOY0a-Xz|*0j5bI0oj5brj?XHosIgxz$?_5ZnWT0sRypZ}IwPb38_)j0snR7+Z1Qs< z24cZ9)xNUBXliW$NP~ssF_v8rlBA3TMGeBYMstaLqf1WaOq38|)QoR<**i1q2w#d}^8Aryu3`U;#5@c(lP7#^OBh!vI3Y#SJ*W z+~BWma{GfS>)cUDSq>WjAYLJ28_-l0#I>T{$Gm1682`%efQEx#4I_P0Yv_(;*!UIJz-P=U5rw@>;t)1_^< zxXGIwVq~zbNhlpDJL`E|H;Ry4d#W&ZTPchDJgNDfG_5(~KGI{JI-Cp*LH1SMN%vIY z89YykC3Ct#=#=KVaVxF|E`=T<;we)Mt0B@$J1{>DKtBh%fd6o>iyD^c0yDKLQ(iuu zJMVj)%J5IEx>?ig9A=3)EscC8{Q$0rTzqz{IBIE46rwub{@vx(GQ&G0G$)OLwJf+q zD9Cn*-t8r#;o5SjS2E$i8zbb|Ci*xL(_o~o&bHEMs=_IT=N`e_<+49Xjx z0`wl*`oXmlsrTKA0ie+D??=%;hVlXZyh{k{-cyJs+j1+{Qu3|?*ilTi#C9uq;Vml~ zG>)+7OqlljYI~^t?XKlrDCx(zyn^=d_plk!j{^H8_=Bj&-#-~xn#P|F2|p-XzQFB! zh>I`a#nxLskuK0?_@q#aMIfPAUi?l&iQ!4^gdM^|Nl@(Od6V9QTBtb_NGB*f8Rf~N z8p-3P!!@-QVgqljVfTG|UhdH4L0?H(oxulXpHv;BF}WM-?_QsO2?t7Lavf`Dq{u45 zlJyAgx+uTWANS++intt1fbW5$kh(U}?ICmv!Ex973fw6G`Wv4@S{!m?YW2;0We4ni zIB6<4V1b2@uV&_z6h`CLHMgEJ;j@)OTXlBe8zW59kI-T8=X_c2FK=bw8);QQ zv-Yg&i1y)MgW*VJP<94BK%p3<=K*my8!-@O2|lq!Umh5Nj>lhEW~~w26_BiuKh|n? zF8n`p)W`x{fIe5YJ01EQaL*57CLiKHTEnN}=6z59B|^V@QOm>w*6y1#Dl_0AQVo!J zSWCKb5n44{!AANbA&G&Q6|3LG&Utk}wCSzqx*QU5>aL68OMFr3DgHSPrTMyM86NTmY;`BZ%e*tfAZc|55GUdKS1EJQTSt#(w z){~?#Viu>KH;PKXau?7K3)!YU;WV-K({0xDqfN@`7EOK zH!mkM6zqOGI51faE`cR#rdkv4@i;Qw=eyYjj)OX%9L7$o+5lxz$3Jq4TbIM5_BISt zqa<6rV^&9__lc1g-M>fpXjYGF`*svzcxm^fB$WHQ`HAKmoGs`o{q3BG8Tp=zEiOoD|dM5ze0(^^-VMD~)V}G7! z!Hs_9bSBu%ylprT=7}!l+5ksn>^;j58tyMW3t>USqstktM60NMxt}Ul?O=R7G_Yad za6n6lvj+^iV@*d6KjNhlvZw|Y#1Cyc+?9H56sS6w(b;(f>`|NR|IEa#`|EmGoC8%A zIROlrdRDqjkPsZI66|xpY37scof_$2_oMKLKO7$nMoGEgeaH+1*+zv~S6Bhm5XWH5 z;`(l>(OGD?3px63-S->sm`0(%Vk6xc{KI9UJYSzx?!1MH-WN*OCS#+quJbzvaQ@l$yr~B*ZluCo0cFXq zdUH+0o(t`!@f-%tB0P6qBfI7;2iHm*Q1kayaiVNBP5xtRv1p~5P{M1)fySptefh_Ls8iEG*g~i=n6EwI5cemi~?ruQ>1oz+{xu1IL|EFr^ zboV*a-E+-V0{{RhEnGYujNQN%fcNnaZNU~CwqRomB{2?h001i5*4)MTANM{Otjr)z z|1$vq2e7Hj|JnZ#0yg=-H0Tas7u)|hsP~lx46!%;=Sczp(13rD_X&Rr0Fa2i`~P`R zjQ{`~@4GDy2HXAD$$t#-yJP-O@^6Q+8#{-DJ;eUM2L3NTc+Ut8fDd>Ny&v>{a;X2GnDn2R_r0{lKf~3@j^Eb7-15Ig zoZl2|>cH>p>Fi=|>&*YI0YkvXPM-Y6|JOb_*unO{bG&bT|5&h4(7~_(Xjmw?FogHJ z3bZvdcEJW9!xNea`wQcJEJwzUqmEF$nZ(*0qttqXwS{;3#{BcTGu8u!{GN?klm#*0 z%#+;gnEeN6Tl%CG{Y&3x@x(o#P2!eo1- znoh!&$jFxo&$ccsL+>DNLP8HB6t-32JM|2j7~9qwH^i#5k&{-G73o6nV-M>#i_ow* zG!l5xkRD!LULQ%KT6(Y7g<36i*#M@=U$(p{2PI9sZhn%M{qjPn7%`9De*0%PAX8<& z%Q;f}RenCq#O~z&2c6%Nx=VU8?e$Khxwl?guefQ*ZK`H|LG#;W18n+L9HJ%?jhtDM zR@^dt5HfRUgJ0&vjXJ`DKaWDHuPh6TiW$01WZBl3ErvZVesf$B&)irBGIG>;Z99D! zk;9i#)FPleKA7aV!Hp}Y(J9&BWCkQXOreLv+p?B*7?os+P*7jBX0*rXbN@1yc>-gS z6|3C=eYViaU*c*ujeB$Sx3CC_?%>B01x;{QF|UZB@QQxRov%Xa6)Y zGCPfeOSzv7r=l@sr_A+Ehw~SZG07%q0yyKjM`$pRLcntTFe6d84IMLFcEXIMo{zN! zqTF_`hT+w5?9&4g8b9ucuB6#i|F~Jtd8EHICYq>+=` zGw~zkj?zq&7hxpp=0OD>)|ryY_S|;^!W|4rT(-Qp5+GfINs-7CIMc!nQv@*fnM7aR z9VT9v3#xr%CNka-KG8QT8jDH$!zd|OO}#R~Yv)`zzkI0!cwvzC?3PM)O<(^Y?t5J( zE^idY?*9DgYHMnjg*>NjtVe4~zi;TtS`|dloT#W`=*1BU(A+20j#hwvTt7kVDs|z> z_c4&a>AGA^o~pogA6s^HfZt=&oeJYa_=%EToIqp@6>Zv@Hd{2bR09M?rbWxbCYMSW zqKUf-Tma3K(G(r?(~F`HN66ukbP%sDx z{lW$fEqbbqcY7e)5x7K*l}_mjQG*tR{Y4BH2!D-24pYQG2AD3f_O^xsxd|H_v_zap z-!NH#l$3FUkKHSbKmC5J^ki=4p5A3kobU~_ATdTE-`%byLeTTref*1ak&a_)9*`!o zKR(Fh%DwtJ!y_&VmQ&I=H~@dMU&NP}f*~84BPYAam(OLN4Wqh|3SE(>+F^sc z{c?l&8?vM|vYDs9=Ghvn@wQEC|$z$@V0ZOx7*!=h@9UKyhTKP78Q{HmwH{Xtzo=QDA)I{$^L}~BrJ00X^c-^{s8y1g0qmcXi&Z2MH4C#!EuXr^EJ8>Z5H$^ zd|W}H1nQ%&N6heD3!OiH10zvlDS1Cor1$ws;}{o6jvslyUAgWP#QkK%tR{aNcEx}f z`Mi6M?T9yUF;dPq^x|x*BIUglz8;*xryoMoUW0wE{nbI&l(raf>Z5qoi+8fv4B8Lw zOd^ceRz9*2#;3@c1aM{pg{TdEmTJn8>?J72pM`D66imh;$pUZ{T>1KK#}Cx|*-mGA zEj{rwO0l7b>((34Q~2Chgdt(K!Rn5^&oFsfQrjtx31`(G8M0=&sj{E?xR>4M@e--~ zs%*-Wo4tlM>XLr@%0ow}o#kU+5?@O_(k^7Z+U^0=5qLqWR44HKI7f-SKMw+{I|0<% zp)3zF%TaRkR>iS%f_8;f-K`-BA7bW}?4?>_Z1d2XCbgTQFE{EyD|uSY#T&T8x9QG3 zEPPZ^Ov{D=WCV2#14qa(8D>6q1|D-pO-_bgGYONcBPI2NuuWDYv-V_}+=ck!)dA?2 zb)Y#~h1+xN;lS^~(pOR6n&<+Ow0I)d+wS^b{ia zLE{h_{sAv>&!`XSB^5|Gc#Ra2+1LgZ@kK|3tSHY)u4X_n3uPz{!AbSHL4OS#qbg$N zhJZIJtS4Pzys2SE)Mkc9iHxH81YJ=NjT2iV5mAYlux)Z%VTpK1CYa6&kS5}E_BRq1 z5!}O9omm+FfD0bfg>LZ>eiZZ0s-)D?Fg*vd4=Qw`iZffp#bj3DNc5Q`tA)UM0W;m& z(B+j}(b=fV-FdWX5;R|}Q@iT1_I|h%i%^}6SZ)p%3}b^&fc`eGTwXtX*fI93qi1&N zAEzYwJ;4(dWVn;gyb{6fQ=hbowZR*Q;#q}KZTUPj;-ef7oYge~1_1S~1T;EV!Vvm7 z3^I2Sn-Y5Yj6;wX7BL(Fb8;tos0N%1I6J|DvlB^9bwpQVtDHiM>RajGmv${k*2^=* zQ4M#AvCBe{tJT8pw{1*mVv6}Vf8QD|_fj-WhWZT;?bhoO=ssh;1Xb&tZ_#{ zd#XfeqkGgx18<6rD zdAwc%9TK9e5blnt3mM5zptaa;QuAKU6k=$CkG`q8!{{u62H50CEe)EpA^dE(cXof` zH2w$-Bp}+Lk&vV=Z2SLW+J}CST*A6)lsk5Eva1MNeTFlb-MqUOqt#(@XlcY>I@`tO zD3?#;o8gmy!%?Yz-KUD>z=98ma3rx$tz?l<8$Ptpz7Wd`C#Qm!Rk(p`Jge^0`6Zyf zA1}mjOWp>{v-{wnYrYqjKBKRP4|I*q$D7^R060jJRiv>|Ew79y0^SS zkH-zC4W;P-$5Qq(lHW6Apd~LraO;V@U(yC|SI8XHiYJ`vw2M7U@(@Il1J(+rHmc=6 zz(oSO=pqR$0Z9aFCN#F6EmLD&;@Iksr#b}3Y?rbIZ|H|Ka-nsNIF}z}&h$+5Q2Q|< zbWRt-4oVx8;UzrCKN>}gV(NN)bAe3T-w<~5)NrXa=3yDYPGk3lS4Kc>X3Qs*1B_2( zA93o7N_3MJha=3{aGafbzboTA>%85XNigPSEnrelm@@+}sq={U9Y;rXNGM{;5C5`6 z`${gy&8~R7vV(2XRgM*V8T)-Ck|8ii4EI|Aio+sN-Fs-9mRiXbRBkiFS}yHn|J7KO zsWw<2UIzvxUx5?+bG+AZ?VnlnyN&1yGx4wDzCoe4Q&z7$X6Wj-r|jU zoLHu-(fRsN(Q%aMqi5u6Qb;y7ds`xvsyXfjTs$WwgV>xY=HakjDEf`B_GCqvLrRsr@Vyg0^x;owHZS24ZBE^y*H;syn&p z9~@rCs?3!4|6_9s-PEb_l50VYD~#F8d(-}uw{)dY;bFY2$3jul9+k zY$6{e+}PaID2ThUo_}38K1216al~}&ECy;pFU|>XFeYoW8F#EiK! z+M`74%q2Xz6BpX7_TIQq$^|oDWoG72G_t@ELXzpcXi+Hp zuxA$$d98=4W1!N$$SNjkepBb`#a2Yv zq}bV@w*H!9$~r@_kDUjL?aK%KT=dX&CV7oOt!$A<;Q7w-nhUipTbHbjPl{tfpVY0#^LWF-CD_!dk8N`nd6i^H?x$+&(1Hhjbf; zKQxsUl4unGp9aG8atDd;0zZ+h=su7I4CF0dl@0CMXAaQ(v>7Rm=f5>i zI^vdd!(2Gc&ufd_F*zLM_yntr+nv0;wpB8N zn^JM{rEW4an6D1`A)>s7!(GSVRq-Q*?|Hw5ra>4N-4{2Bm^?eU#D!6~9)zD~OMVaR z{jIITx)ed*)=|W^QMH*?=0AV@G_FlV_=l@hKWcQ}lP3J9OK!X$hZMk-@l^V;@n)T8 zv%H%E6UxK&3vm>@Hj2c^SDj^9xbha@JcDXg3b3#Fhks2#Vd(%bJsT^{63E}(4N+7u z6A0xPs>troLWwqNMC0(KYuxOHq1PfjRCI12L^q|YR9wrzU>{EE56v~UJoVCAy@8u5 ziS{O?U4By5&I=33eOSRQe%+<|%!VN#zTu6r34{Ej&Ns6>%}div1!Bby4PEL`pp=ah z9ya{cyt96BdA4Dg#m=~)Q3vQGLWT6ZiC(jkZ&grvqjCO;Xn&>b4A00_`h{sIg$kE% zPVIJL1>nH?vb)PlW%k?&{?j)=j(UP)*!0Rr#V%n*ud7%D{WEM>UApSMRrC8QgJ{_O znzpRV7Z-&9L>W47b5jY3mMbiw%2a?N@wG`GUi?*XDwDK10Z2`@B7nP8_*6X`Wz}8= z-6p|Eb3a?9G}w=vGs_$#YZ-LgBw2n=JwU#0`jD|WMFF*1JZV*b>U|SDHpoEw(QeWC z^uzea+we-*O3vj~v4l{LVIoahU1BC3eUwDu$|E?rd!W4jp;mtj>4aY@RAGvRWl;CX zY440nC+r)utrpgx)TiwyYf8u@N_gCs3%CbFVHA0M`3m*pa&=L2)%|* zBAiK6XZVbW;?S-~Vj)`!)uw7h_njD6{!LDWhgsO?d3ex>p$O= zr()lp;cF^0MZcKJyC#X}j$d4kS@SR-DKG|ie})ha9T0^MmFe`gDT9&HIp#iGz5h3g*rvg&Wd-(9{MP zOT=r6FI7ae7%duGUk)|;q7u%?$MO%bzPT_C=5Q5(9&x1>A z%O2^2YMSc={|Tr7%{5f!%B{^`yw(;jfr6u+%S>;$v1^f-{o#P$y+vn8TZkYYU+C)^6Fm{}T?#@(&RQD^p z*i}ufLD64&vV#9fk;8WWK_|<^_A*g9X@&lgc;9X1$`>oc2T5=y?)%9a3PQt1I<$Q( ztV}QE>vLCBHlLd<+LwXvxxF{mA!%@2Yk&g>j@K~2V#61vgRuj)d+3OC#JKGivPPCa z1~n8R+^>E=<{Ampf(+ZwXi(KtT?Bpk4VpSGZB=Oo3ogZBQ6;K0E*xRkdq0V0FQC%p zO7SF2>G1e^fjk{UTBT_gF+dr1GHGa@n`F$W>y^lRqn|bhI*DMO2D*57*J_^oi$sC6 z(dxLFn}5_<4Ev;3Y1Fp~)K+nlbuU5W5VK24Yf}TQ)6}~5$MoG5R;u1>LQEFWlRV14 zcoXlNKBC3I$*VXQGkI!_IL2QmuE(UbeI23$1J>pZh36JPbpSCMApV5g)lnkT>k-CL zO48|M>R7UxJAP|@Qy9*rDL-OjFhEY8R=N~bEKiqO#={DCT_;&cKK=E<0ad-g$UVqP zY6jw_+&0#fpGLjcbYJ)WW6;np4Dy?OIgwnu%3FnFP(Oz>19xR$UDEzU^|gIapRK8Y zWcjZK6KkKH3aomtFPvMrj38rEmF0}Ddi>kWoMHN*v(ImLv9v$Ddeqg$a_`Zcg4&nyBcZ*MmT6|?i0USsT5=ajocx=U*$RyjpyH4+8-D^Si);v*D&>LW2q5U90G8znn> z%7zK1%jezf(qp!(z(M`%hJ?r_BFJ{WhyHBOa-9bzF!| zSx$E|@RaMPY+06_mS{%yDx4ubZMqEcKJ~W9*c`!pv+i+W5vNC4ROjfOM)6;&x;>3< z&4FY5xTH7NH9BqB1lq=()0&i$dOUQ*Z#aat^85)AKAt6y4N@xZQew~gIuGY+sGLCEN=Wp^71Gd%@qH<{;&i z2eMvGGfYJ`j=ShBtXC9#K-!l&q+fU-B)$EDD>6CVTV((P)?rT{ex>&k{oRc1&kNcU zp7z-he|${G9a=CR{S}fIr|f{R#V7 z7zNo|9ckN=49R_}XSf9X6EAsGAXT*FN=2r?wrjWR!0Z)?A9yTLo2Xsyz+)kg(*Q$? zNCP8>MT+rDl`3PTH=kABU>{A3@?_=tm$M-qtLPfiQ|$i4EAyx;;5n>98QqI_j>)Im z#x)}#+q?%HK4ZfaYrG6KgEIF*1ADX(y^YTc%Y(lStdoBqgA zdjg75TkRhK{+Gz6HVvI`==84UE|9db0IK zOReF{PN5$2x5SARNU*9HC)g+mf3;Vy9KFw&>gIj%!*J-AmMU-)7V;HY6A0I%&{IRr z2pOjFnd3cpCRH>kcbGePKHVdJQ_-53JFGuD>1jfXv|1gJlOKPRAPwUPg}JBLK{9trIIo^<0;NJ%HU!!eatnuy#_&F<`3mFiVecDsFAnBZEV9#;4^c*3Yz z2VNYKYUDE2`Z@i5Jkji#=J#1gG*`%cLG!%5%77@wK#3CXBh}CNv{VBF&%xNV^%|T%fZ~iC&3fxw4_%F!x&7nmPh0zS zs79_XqMws@WbH)%%0RBaR*vFS;_mu$1+Bl`qXnoD^~auga7LCu79#oq)M2n17wu6u zQi@jHXvP$=gpV&th763EqmQ{8_Ty(0M;FdPA7jv2W1bSjnE~v-3@6k5B_gJth&i9X zX4=5c?i+?9fmAqmv9x38tKFit-|2c|uU@0`tjwEHek#J8oBXUF?jE@{YU zRv+0w1!*eRC!gFr`W2N~Q>L$9bt4IG^Z@GdAd+dxZi;$=CYG0@5ZhMhFslbs3YiF1 z@6Vy3Mdy%+=Ei<#RM#K=lGS+nWk(SO;-91w_tlvAOwCwcCa!$BO@?y zv1cqggrjmXkYarO_WKE-kM9FQqTKBVlCR^+GFF%9?3v@Ji6!G9Sxg7l(L+KtuRR~lC=9c1MAY11;&bG6!8)ro2CjtQMyc}S;5Jx(PG2V%j%r!zS)*rgo{s%s-@^V-?@ zQ0-DC-$6UmAJuCAYI({xK%t4Tr~u;l8b#$ERnWxaZZ;7GRas<_P|gpx%&D*6CWIQq z)f~E3N%Xc8a|Jo>$Jafi3OMXJNhb9;$F6bk`>@T5CP--wUdRH7QF4 zgj@pxLk{G{FUZ;aAwyl&4~Y?OjNeH=60kqYw9b+}nN=b0s-a`M?js_S7?Ab|G!s|F zp@-reX9>>H)_;19f|xwOc;K%SeeF=BlNhtA2x02s4ev)xU%S`VH(YYQo7(>v$iv9h zsKcnfB{VFSVB9tIgPX-h(hSOenkg&}N*Wg??d1t$DrTxTt5{#AoxW(v_VZ2Tvp>>n`{X<)Ft{zOvdL&?<;S;G zD$43nw%WDPsAGC$iQ%tT*&_L|308E%Oc7Ky0_ia+kqz-*JlLP!?qpl-?z@dCIS7X7 NQVkI#W|t4U{~z(7P#gdN literal 0 HcmV?d00001 diff --git a/public/3D/icons/beet.avif b/public/3D/icons/beet.avif new file mode 100644 index 0000000000000000000000000000000000000000..96978470b00b860aaa006fe888e38338d4e7bf13 GIT binary patch literal 4780 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%0AlT1H%ISUhp3F(DIxf@$u55;G2y2ek zUQCZ4Q(~zxF7`~VnW zA6r0+NJaN%a|(tFu}8Z4s_+a~7`(6n11&Yel|Hzs2rwBC*~?WRi^H@R_CuEt#u46; z)~vEWu;k6Zo`6Y)a-=h_Ag!c(Z;r@iR55rUn4pO|bL;`F2s_07`tMR+bi%U8V9*Bn zCtAy87h34%WtX2Pyk+^1Qv7Nz8UB)@twqG$j25G)j&-@jKHgQ+bgM;%i*C}HZg^pb zU4*dbI;yJ2A9I^-G*a%_*aok9HhE?M{ zry-U#a6dMY2;4Oj>-nqNx^$mz$nciVjc|uj+F2K(OM7Q58%WO@4Tr_?AUvU`ZW0muO)1x}r9u zGo((}jiO2K!ZFQVt=q^?6GPt8(7Cin7#`Jl9riBx>F+qtvdeXf=z`Cec0*W)4!TNa zFelI6yb{B4vKY?MH#N3|MoHMoS90863TzRgKV7Tbi)oDwlJ%2Oqn6DTG?K5GaNwFK z?PVp^L?@WQjp~>)j1R+BL|9F&h3VM%%G$kQG29yA7auV28D$!bCa5{=C85p{9v%oI zr28L8l9MJ(y~aXhF=l@zd5Is{w|rAy+tq^e`PC#fXzU!^f0oTbAv!CWdus7vHy7cX z#LrM1v0G?`%0G)>!~%g_5*f*T7KECgVv1-q05aG1GzI=1f{Cq%3CPQnE7)*^cG~>e zN!cb0!#2mno;hAg*MZz`RtT=J1c!NEa*J8Ki%R{M7ZVrQvX?{|OCpoIg2!8Yk+8iU*qM&0E^Sw zA~jsUSf|pv2FrM{v6#KMcnx~oeqzo#~Ugl zwNCwa!S~t;xIs-%@BU_pym4siOKT*d+fZE_?Z zc?MO5|FokUlley06gW)Z2Uhxs3`fQJCGcsAMBubDw;;M%wHsNu-Jr%4Fvzz1^X!l- z@S71;Bb62%v^!aH)kam)1^+||d;XfSmi42t!;YF<=WR~__sG|TE*@=9yjx4;p3Mb* z5kKE9f}*NJ$p&pJ(>k%n26C}IsJ+hrC@RH!&oQj}v0bop<*%wh1OFrcu{tmN)l#;A z)???u9$2i3>cD;1NKoo`HCgg8!=wQUj#>m{2^8KS(&Br~VV(U6Ez~7Nx=QdI0(pLa zMO0yxks$h9)70BEunPfVuzk!2xmCbQZc3nb6k<5`JRK_LT>f^wTBFUFQrOTq98F$YLP?g!<8 z`EgPKu`oTS@O!A0u~SPylSz1~s9b0dCJ5COR>gzyj^kj6jwDe&#(J?D6-*dLyi?ryqT(2 zoBcaVn$FK%710J}=aTIW%#}%;vM>jW6=cwMmQ3Sv=gqV?U-yYnlv}4A^OJy^%2`lb zq~1#tIm|AbLj~5o`vz-*&<@iXyGY0gMY;SkA2QD^Bz?$F2XT(SFBetJFiN?b>A|in zp)H?-sT-NgvM>0ks*dU|zxxU`YN?02SGjI`?!iBVpXRy85=aawIR?dG4W^a&lb0Mk z;_8@!;TDt&Eez7A+I(L^HEPt`uuok*f~4(yCV^|NdMuv52t2onNb}+D8QbPay0^i@ zNVY>j>X!&E^DB7#C@zkbF!m~g;iXFjGE!VVYeD16irO_^+n;cT-1vXcjIe*zcd%1; z5Bst}xs65lqThH2U(G%#e3b&aYkqV;_r8`e5b50GwB2ao>%z1-%n_$yB3F;Z_RoQL zG2$!gZ__oSy&N7w5Pe1aG%BP2)F0SK_`t13 z#QkUS%Gbl<=E8$KdunZZ&3W1YKlq6yYM3g*uDFIn@QEULSz%TT&91G##%hy9o|Vm8 T&F%P>)gKzsySC=TwD11|kL=5x literal 0 HcmV?d00001 diff --git a/public/3D/icons/bok_choy.avif b/public/3D/icons/bok_choy.avif new file mode 100644 index 0000000000000000000000000000000000000000..d3554ff3a69cc30b0466f062838f9b4a3ed0e233 GIT binary patch literal 5770 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 literal 0 HcmV?d00001 diff --git a/public/3D/icons/broccoli.avif b/public/3D/icons/broccoli.avif new file mode 100644 index 0000000000000000000000000000000000000000..9c990fb281a3af1ca20f3c1a3d6a63508cee870b GIT binary patch literal 5837 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 D4vXoM literal 0 HcmV?d00001 diff --git a/public/3D/icons/brussels_sprout.avif b/public/3D/icons/brussels_sprout.avif new file mode 100644 index 0000000000000000000000000000000000000000..40bd350be775a2c55f1a3ed0ad1b06155c5b3365 GIT binary patch literal 7706 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 ROeu|ed~j`Gj0RTW{{chK)@uL& literal 0 HcmV?d00001 diff --git a/public/3D/icons/cauliflower.avif b/public/3D/icons/cauliflower.avif new file mode 100644 index 0000000000000000000000000000000000000000..7267975ef6bae7b9a57459ecbbb54edd2d021d1c GIT binary patch literal 7719 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 Ij1z(X4}H*ExBvhE literal 0 HcmV?d00001 diff --git a/public/3D/icons/cherry_belle_radish.avif b/public/3D/icons/cherry_belle_radish.avif new file mode 100644 index 0000000000000000000000000000000000000000..74ddb61f763572182f914bcd806ebb3a4f6bc759 GIT binary patch literal 3838 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 literal 0 HcmV?d00001 diff --git a/public/3D/icons/cilantro.avif b/public/3D/icons/cilantro.avif new file mode 100644 index 0000000000000000000000000000000000000000..adce3552e257fffa53b6eb5c9c2544d449ffa72a GIT binary patch literal 4882 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 literal 0 HcmV?d00001 diff --git a/public/3D/icons/cucumber.avif b/public/3D/icons/cucumber.avif new file mode 100644 index 0000000000000000000000000000000000000000..d80c20dc7aa4b89e22d231a4245125a95881452a GIT binary patch literal 5393 zcmYjzbyO72_x4gt_tMhcEg=ok9a54@ExD4?ogy7eBO$S%bV!3p2}*+?NJ)1K?EcWt z`JVTkb7r1<@AJ&Pcjn9=0{{RR9K8LZHog!Cz~lIfZV(4SH;9dcmb{<>0D$t=&EDJQ zFZVb&oa|gZ|1$vqCb-Edpsft;sv#T#K(bh@!tdxK_Rape*m(L&+WfD5ItbM5-#H$)K3*0&3Th-e02Lht zBL?%a13Nc68*dT-4v^ATCRBz@sDtRy;n2O9AYRz-&BbF^P!LRBd^y~!gy3D%N4BNP@ooCRm0MB^i(hPRF#1-9Ph2%}rcSaSU6hrR_8E=r zPo1n|?#Si$?)-YihrYubUuw9yCx&-UB4V7lpL4?Epw=q0-Uge|qP6J5cDPPTJdpAh z5w?Ry&zJ3&I8749CT;rPzgNF?HcKFS>btNP=)9pEy4Csz@pZ+koz+%_#Scd2gOl^?Gkne$;@d z!s7KpQ0pwC%=aUe5;o6I&SRen$5~;;iM!f6c-OT!2Z&e7-jG-_&XHaj=nP=yyo1 zg*}@Ce^cVDg-d-5uiY8GwaYvHnEg#;aJguxQ{Ig_TS$s@@dRPSU8P}5@a>k)p(68R zzG(3nrq5KvFu84V?M;w1@qBPj7b%&-c-I1jP16;>^xj0UN+ko9G!spnX}fHyH3op; zZSf1}7sJj^IGZSVVh~n84;I)&iny5v-`aY5_-I*u+(Gt>1E3FOc6aN8_%*BX8kVie z<`Ok<^<%NboQrm6@f0By)yRE7q!crGG*bYIMCc%+X7nMqI%E{YUbr9^5hbNcwnC zeE|Mu;`OcBat`SyJuFRAblR}fBAKW$<3x#Z@kK9I%XQ4r2{qWnSsAUQA^^e+UT-HN z5<1=gaFV7Epimx*TGbV_Sg;-x0>ramF!Vq>I1@0Av+cg`B60rk4S zjV;W>HMiq%KFGBhcSVKa25-CQ3976ujUK!ASG`rUI{dIDF(5LA$5lle;6XD$5lj4` zL!B%<#&FwHZmx9+X9i{gx|W_5%Ov7$Gz_B*>VrMiu=ytX5tArEp>k?qj;H#oF5_&o z30V;bq3^+fcgBI4yop-qgz!FMDUJr=85PZwS;8vGkj9O*rYkB?sph$AESVDbKKzg0vZR7jW>wt4OswC0UpJ50 zK%`qCt3Je%#Xq(wpxDpX-GT!Rt?C=)!EA`HQn-jHt()9sc`$>>jjC~&mi(8+NnNG- z?2bNhwNz{GP&2Z7l4S-di4;F!xq<~5(jHYxYysMcq2`r=K=lgBv=YB<^ip03L0Yi;7QSpxB7Cr1 z-iX7Z9TP3m(bh1*IyOgPcd}yNty4%wv+;!Cb6*tsUq1(1t; z@;6pqp+j78ULROoB&;I;o1Dq|L3jamzfc9Xp#W&Qe!7Nn`)UB|zyrJfl3bi`Yu(HF z`TiQ!YMen_9(q(ovBsNa&XFP?PTX}k;jWclm?y9oD6k>5?I-T(SR030*jmnG&a*zr zn)$(iQnC8xjJ zo9T3lK=TZq$!UYUpo$ne@Vfu`qql=6k6ZvO_J>}?A}`3idmWUqfE_I#fh;5(GeCTd zp(Mbv(WMN)XVg6>JXE$JEl$OX+oEAwfO|FNFpWHTK*J`8u23+UcJJ~eozIfCQ^MR> zeV-LwL*P;hE~MW>tx7g95%~>Cfo%Shp%DN>p)xrK2MV|=o@0igjG?fE>V1|yZMR#ahmsSi?4caG`-$_R^b8am(RKwv5O^@^S)&LySt{el3-OZY1ap) zbUx?Z#HGmg5#n7PwwFst7siuc3)Sq|A44BqF6vioh>===Tdha0nl7{aTcg+jCu%0nh6Le%OYpr z-1M}ja-3@~8a|WgFd`EbgkjgxQSl@GG*w=%8p%|C|2nww#bVb;**3gGve2Qsn!>y2 zgD_|mv3w9(C6@+6B9VxBdJzn;-I~umt)9H577I*NJ{M%F8uU){CJ1Ckw+`Bk>1tLs(XO2E%BR5MrDYkFGILwADg{9Zgr zS}5={kQW$XS0zE}$jbccQk~h_V~YZNm7g*8aqKx!fPnZOT5_8kiWH@ zQ#O2FpKLN{KDLx8l-k4-cklCPrQ;f+{^bhweuMdk(7=&+Z`B)^*i?8h3}rj4L9xV! znfwP$YZk4a9YgJ0PPYVc>D8LbLhF$|)|TC&_ge-wV#~~yu{7Z*A6bin_aGxPSlyFC zRT0XqnFjpMXj?`fl$cc$(MT%An6Rw%+yu?sm9g*`cOIXvsEdN1<%2=Zo-R!34}^Wa z$&d;-LeCT#g5OB*MQ&96;X-u8zhV|eT8lDbR#73 zkYR$OZL=3sk4WknkYtQ;Ikto6%k9hdc2pX-#1nC)m7k3<0hD&Iv7;p_6=I7ol{?dL z<00s?u9Ur5e^2EcT2%$_^efDnsKQ~Na?WTjV*4$=pM#(ukOBVYZiuVq#Hj07pd4GZ z8>Q?@YD;`iGQu(uFsU+a`9>C1OZyKJxjluH@oT%f?U}so5AH#ZIcnI3#deEqH`Dei zW0y~!EN8t_@flztZ7m!$;X2Eb`*VFirgymBz(b3P zleLG6?-aRO5{DhVMv#|&=SrabI&-$7M&6#e`N=4QB_Dq8xao%*&|*NRy?y(BK4`-& z_@$&BWbb)_e#`{_13QoU}7@2w!T{Edp#dyY-t9nA78!-Fj()k&Ys$>0o3|RILo)z|A>4^BgBz!xc z;&mL%V&tm<2s07h_|CD5?NbzlMtf9FNMd-IUrQU`0=chg-iL*qtHm=$j2JrZM4B&@ zo$!8nsfrm(j=BU%pZ7mI+4Qs`0>nv5W#SlJ-zZs^tQ+B5ssPh7V;kuggR7T)TNX*HmJ3w%EI%B%&9`dDtvq-TqjE6Hw7Sb|~u@<2x~S zPZeDye>>|PIV`107GDX$my1BpVnu;~S&T5{*55ieQ}7HFFN2fj?JMhM-R(Ci+%mLj z0m<~X!O_D#_+|P%>W7CAft%IojZY<$r9~%)3@hIZhhg(usr79w_>2vF1bQu|{~?j@mL|?QBVKeX`JkyS3i=<0Rw-3FlMW zkTqsfn6*EFe)NzZM>%RRPQN>yGG&lCrqM4#$3MyXOvDv;?pF@E*j>v*+o6vy7dLs@ zEFzW{A9`kmxuCiP?95|cjb}RjShUwA_x!l0CBFc+MkXHGL{OclNg$>zuU-MCu4m)? zQKRC9$>DXb*7K`JnYC{9QXoL<-Zbt&i%$&qy~L4wo1NlHEV0`3h{B9vRzCf7bor4( z&8Q)a9m@hYU*sLQieKAmh}y8l=myoHP+rxB&dKZYw$~{XSdIrc#YA`iBD>bjQ*l>{ zQE))c`J3!Vf>64Zyqv^#_=q`rhwmzK_p@Q-RDfcFbZfW0wkat_)2H?=O7x{7!DBhR z!ahYHRfXXNh5Oc~){%-)I_$Vfy<(vlYc8$3*Z$bwM4rpWNXBEud|#+0s$ze8@_NDS zkWc0ghF%@3WxhfXB>F_qx$gcR$W^Zy`_}l4{vTl#=r>UjW|MP2;R>uH;&6aaNw!-RYjVY`1b1YS+tVz9b9Oh^KUuJog zgf8&OXmxKa&$seo$A{0X8kg*`pZ=gxiyWz{*YMj+jRw&&ji!y2ys1p7Q;sf}OE_}u zw!~{7>C+Qy>RUhh4ZZ|nJV22C$Tj;*_nAMy#pjJ35j-*(?mJKIRJ zMP5z00#dTP(;`~y}GK{4YT>(-a`_|w~_ISD3^D9{-GCK3#(=^2VjubtZ>w6qlW)*Ub z-WC&ySSb?lk+}~0w3ri==SJ2izQdBVXnPGp1+-2p_MZ(tnruXKb z;ohnvh%1U;hdpfV&)IT8rRcIAEv;wXV7AX4wq}m}?1ws96d6B+k5~C^ld*w1GumEg z#lq(bl%E(=+0%aPs_=L!TqkW%e%7ibKjd5-%pTDXy~h`9HXrKH=ivBBv( zYd1G##eX~B1@_Iy8))OUxH&c`dzB%zPkUKmuEYQz}vAC!F@?Nu!raKw}QKQXNFkN^Mx literal 0 HcmV?d00001 diff --git a/public/3D/icons/eggplant.avif b/public/3D/icons/eggplant.avif new file mode 100644 index 0000000000000000000000000000000000000000..5e9d5f358a0311d983bb7ddc312ad94bbcdb285c GIT binary patch literal 4868 zcmYjzbySq!_w~?7Nl14|OX|=JEl7$WAmI=L0|N|0H&P;<(%nddbhmU34I+&w(kaXj z{H*VK-@Dei`<%1)J?Gr#pZfp+049jD2OR7Qg#hl?1KL3$f_6|aL|s-;4gf%lw6k;u zKXCVp)7k=t_|F9Z;81ht|M?FHgPQ%X3=tgaZ1;~tyWe@CFbDI8NC5yq2Rvl%?a|YF zTfL9}MQC3E0364AUk(bj|2N4$hUPx7e2_ex0J{nZ$~(Xu{tfW|n0xwxk%hsn!4FCr zD8ll;3IG5R*u@?8ujfP89w;0EzsC$H+}zaA;Ns%m z0|D4oQ2qlN!9$A7+yRELH;1|3S40P3``@STFZ!Px?f(x#_rSEBbPG3K#KL3WO8o% zx7%o;|2|0Ing{iwLwDjE(3>+{D$n}2UYkVBf%0LWQHddY*%EbE#S@`0c*#CO#_QdZ;WJR|`uzw}HCx*m5K)aE&H-EiaRr@~y$=}- zF7LB}ReW@O)iUWV&KKYJMgKTuccV0BtSZ)`Jh(+UZ15Bp!9^7rSb>}uHnbWh*+{>w zR&RN`UMa;o?4beb)+BivEQt3@7I6Q*cqv!)*S3clwH7+@ zKO`aqQINPPYCx*T&Tk&15D3td(VUfzBtbC$xXE&V4kf$fCXNL>w-I}HvHN3+31fST zHM4?>e!Y7uI#dYZrzVAUBw7{#{xyoB;Lb>5!$jveUvr?nr)QQa6YE2Zv@YL%)MlE> zn<1>ra_fTWy3^-6!)?NgLsP-1Xnv$OqXD{1uX1!*{%rK#pI1+lnYYYRNkXNz;UWQ@ z>5D=6^KNWky zvgT4-c*T51FPKcSU0XcG;}v9|f)aa>_T*^*fWw*oap0#?!T7vBoY}>rBgd z64`qH%&0ZbBvq?1|5&?mYWz9x0EC0UXv{!33GE-jjZAd0SGs7 zWAf}$NuHSqDtyNfVqw~V`io_5WTfyPO7TvkXx2A;@Y^2$>G3M#0|s%ow@6cD*tw&p z1)sV!^o6?~<@s2yui56Ju3Krw$)NdnYP?kuV6xKI2S%p)6d)0=Bq)g8u70fxt zmW7;1H@aLgLMCsK)f9g5p7F628%1Ci6yT@6+ce6z?{>524Z@q{5Wh{Y2HtY0Y8O%h z@bt^Z&OhXkZe@}T4gK7BydehG7ROt~Oh~F`{-!i`$^YEFYsd3>;dJFRrA*@a61%YP ziM2(<&OoVwQumI+6Tdh>hl7~M)dKH{50pB@bhJs`sHa&5&oHrW#YH$d}Uax=+M>KuqsHa_CN@s48 z195S?dMyLH{P04E5wKu;f4Zn7K+kb)ml>OO#flaOP8A;qmJh?@S5xU z9!>oj^h2Eh@;RJp<@pg)gh2$^3uc}hv^8y;68)|oybB>z``6F?I(R7e! zIy+rU`kUc_HD^&;7VZFjyog9b^o~U*3Gq1^gE%fJg$0WhA-5WIXOO%^-}dX{NgR*^m`M;Tf7ag59}%>&fkv%uCSH zX&cKf&aH0TYu?h*Hs1Qc)5Vlq%Ho~eaf(%0A|$|Wf^j_s4#`hJO7WYp!vT6mYvsBf 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 XYR;?g)vidMBc#48?KpG(#OnQjKrR{v literal 0 HcmV?d00001 diff --git a/public/3D/icons/french_breakfast_radish.avif b/public/3D/icons/french_breakfast_radish.avif new file mode 100644 index 0000000000000000000000000000000000000000..d03d48326410a0a3ec893b8652ba8e52cb0c4a09 GIT binary patch literal 3559 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 P+kQR`NmW?YL+Jkj_k4L^ literal 0 HcmV?d00001 diff --git a/public/3D/icons/golden_beet.avif b/public/3D/icons/golden_beet.avif new file mode 100644 index 0000000000000000000000000000000000000000..b6f725ba1d6a9b2002642c8003011a0f602d65cd GIT binary patch literal 5191 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 literal 0 HcmV?d00001 diff --git a/public/3D/icons/hillbilly_tomato.avif b/public/3D/icons/hillbilly_tomato.avif new file mode 100644 index 0000000000000000000000000000000000000000..5d0a81a709411ce1bd99ba900f828cd18d779d6f GIT binary patch literal 7599 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 E4>yk@cK`qY literal 0 HcmV?d00001 diff --git a/public/3D/icons/icicle_radish.avif b/public/3D/icons/icicle_radish.avif new file mode 100644 index 0000000000000000000000000000000000000000..de927e6b4c91c67df1167bf448a66a27168362d3 GIT binary patch literal 3411 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 literal 0 HcmV?d00001 diff --git a/public/3D/icons/leek.avif b/public/3D/icons/leek.avif new file mode 100644 index 0000000000000000000000000000000000000000..b364da09a5291958b049e32c9d816857a4f117da GIT binary patch literal 3625 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 literal 0 HcmV?d00001 diff --git a/public/3D/icons/napa_cabbage.avif b/public/3D/icons/napa_cabbage.avif new file mode 100644 index 0000000000000000000000000000000000000000..1ea2aae6c6cafacaee95ac9b24372799122c0616 GIT binary patch literal 5056 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 HcW3_(vMWmm literal 0 HcmV?d00001 diff --git a/public/3D/icons/okra.avif b/public/3D/icons/okra.avif new file mode 100644 index 0000000000000000000000000000000000000000..8131e626641e075c40d5261cdb23dacca6dfbe3d GIT binary patch literal 5570 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 A7ytkO literal 0 HcmV?d00001 diff --git a/public/3D/icons/parsnip.avif b/public/3D/icons/parsnip.avif new file mode 100644 index 0000000000000000000000000000000000000000..3a57804673a0acbf7ce9feb8490b73d49d5acf81 GIT binary patch literal 5167 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 E1C52(c>n+a literal 0 HcmV?d00001 diff --git a/public/3D/icons/red_curly_kale.avif b/public/3D/icons/red_curly_kale.avif new file mode 100644 index 0000000000000000000000000000000000000000..5dd7db06fb202f5f0900cef3fab965260dd47350 GIT binary patch literal 6200 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 JBD-tt{(nusolXD% literal 0 HcmV?d00001 diff --git a/public/3D/icons/red_russian_kale.avif b/public/3D/icons/red_russian_kale.avif new file mode 100644 index 0000000000000000000000000000000000000000..e1ef63c946945bdc0c0b0eb0f90771c7525422bc GIT binary patch literal 9264 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 HiSYjbg9u=} literal 0 HcmV?d00001 diff --git a/public/3D/icons/runner_bean.avif b/public/3D/icons/runner_bean.avif new file mode 100644 index 0000000000000000000000000000000000000000..246934c841aceb9d071bb7f85242a3d59c709013 GIT binary patch literal 7366 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 literal 0 HcmV?d00001 diff --git a/public/3D/icons/rutabaga.avif b/public/3D/icons/rutabaga.avif new file mode 100644 index 0000000000000000000000000000000000000000..43e32cd2d14d865656b420aa405c5d7d3b8c5c9d GIT binary patch literal 4483 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 JpB*)l{s*=&GA{rC literal 0 HcmV?d00001 diff --git a/public/3D/icons/savoy_cabbage.avif b/public/3D/icons/savoy_cabbage.avif new file mode 100644 index 0000000000000000000000000000000000000000..e5afd102661af292d216b98a7f605e2cb1a129a2 GIT binary patch literal 8482 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 E2aG%?8vp(BEFdM_xrEdL3J6k?f+!)~ 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 literal 0 HcmV?d00001 diff --git a/public/3D/icons/snap_pea.avif b/public/3D/icons/snap_pea.avif new file mode 100644 index 0000000000000000000000000000000000000000..a48906e36f1dfdb69ef84eb80699952b589ac544 GIT binary patch literal 6119 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 R1lS8ld=M}AMf?Ty{{Y~+N?rf} literal 0 HcmV?d00001 diff --git a/public/3D/icons/sweet_potato.avif b/public/3D/icons/sweet_potato.avif new file mode 100644 index 0000000000000000000000000000000000000000..ab6a01be5634177978439b2288b932965ae88cd4 GIT binary patch literal 5215 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 L?%O;TO#k$MhsKvE literal 0 HcmV?d00001 diff --git a/public/3D/icons/swiss_chard.avif b/public/3D/icons/swiss_chard.avif new file mode 100644 index 0000000000000000000000000000000000000000..38f355501c360adfe2e0f1a15427c96b03e3596c GIT binary patch literal 8678 zcmYkg1yEg0(>02_26rd8yF0<%gB)BAaB!Dk!QC}TaCg_>?!leldLTGIdEWZ!-maQi zEo-`a_O9C1wILuN$SqyHKmd0eONbBohxRs>?DjSQOC@o32?z+t7<&s>z`xjs&{>-U zo&TpoK!9w_T>nr1hd>+C|4V}gvT?QlF9!LsGuZ$g&Hh7yQA;D`O6 z1=$1vfl&9MOW4>r{MX5U5yB6{;vePT34l8ryQCw~@xKQCzsN`UUql=TvIhKP652Rh z{4WCp1RB826Zl`ve^m!;K+d2K%&`HPIes9vjSI-)13v^3{J#Z(0kZM5`R9Q~KtT8a z6o5Os zf4nPxdvk#6CkP}sd{dDC5gd*pOw4#Vd{uBC*O$Q`uzH5Rr3$G2e*maZG&~3?B7{>M z7N7du-cq_|e|h*$nytcDbx43cQGgBi_vKd?vv@n6y5o!7p4jhRETZ&Sp)@`P`E2qghj53dztZX89{@C;r8ZOIMe6!I$B91+NNlo(>vS= z7gPu3`F%(;VtP{&P~BvEEGHg~k8%`^lGxWgBZCw zm8c5|%%>m#V@FgL3&;DJ`WH9!HUdQgc#G&ACP0y(i^Y2r1zR4`%xl`ZZd9HP9<5`N zP8;0^UToAIw%dxJIX8N%#_>c@LZ@%k}7>Xj?C995qS;lW*2lJ+KW$6$633V5}8bgTEtc zZ>H&)_T!79$_o^Ijkq+#)^k7qOy~OOr~Kqx)OQa;;u5ux&;5$ApbzMM4*GT4+D2l` zuRM}~@WZ-z$;fgqm-_2Mb|0SxAss8NHP24@? z-upF{Ltcp=DQP&&s0DhJM^oBkk+q^XI;`JxL&J|~e7 zbJgU|n*u_b8fVFK1sQ^gp#aAPbT>PS(r$<&tO>r)OLxTws|KUeMxYV{CnaMWAUb+K z2@FP&Cz^hds^qN+TtT|X!ZK7K&GR)&Xsl7~fID7x{c16(lGBN6hf1@j?j&7tI9d(W z<7rR6!ajCS&HUMVt5GvAPF=cFEK`dvmw@Whpi3*K7T3`blCX z-Bf8{PC%94jn|~U@+-{Ix`X>y>*cKde+3S&yBCI-*_Yb1NNsX^{{)$r3XOHhGeSEwvA4&Hy?85*dY0VOI<-^CE*$fLqOH9NkiiZN(D!g-t?OCT`5d8% z7Yc0=$`oVqV%HicC#z^CxE@N2&5DpR*Vri@D=zD57^U$62unsbJ**n)2&WIL%MLco0+*xQ*ZzWxHr>2cGq8Y~b| z>_crpy*t%=IZUab!xJGM{=PTUHx~i5c(xI8)A#-Qf;U1ior~pB!ajUk__}0wCLsA- zn1dbZc#})(Oosi7@49))QC?q^np~EsqqipRHRf7=4~&r4DtIpK`NGaSx*?5*EvdDe zFc~gnTq6*jH5=L`c?>i_roc*w39tFOL^l{UV}H3AQRUpn0BAeP)ef)Ft-Yh<7f71S z$(Q@R+&CM)nRL&1)rgA3@7PO6Fz-ES{#_Vn8$%k^im;ja`6VIW6!PdZYBe@qf5Go( zkRcWAWvrb2$F%7b50JjwwFfx)6kGY2tT^1 zCK;nupBvi7n~TLXE1Z(=L#$SZK6v~)8Liu9vNYdi@z>>Le+25D$&?d}kg6f+A~`bo zo3wT~B{mp_IXLH0u=2ap_vyf|^uop$ft_jUd%LO@4zjA@z94d~>2e0k*-k#DewZ@E zbdC2hc(FxMb{H?#+e_(W>D%$dd}xYRmy2O#;{@LRwceQw(<1p*;`p>yQ&d1c!B|?ITZ-J~#UtKdYzmNM^izsN+0_@~w%a!|d_zqmK$ZU?`Q#wP z{79Em_KFty_P2sBpcJl)(0|60`{F1CRV(r^T|b$Ox`4v7E5tNa`pYd>o|horUaZ@2 z{dYIvchh={$cxZUzd>dSl@jZn5K{w{(JR2FS1Gu`FIW)iOM7l$nW(glfl(a`*LL(G zX!sMoKW7qu%Z?tVm;(>1KQ$)G(+?%sX+Ne87XELk-I8V57uE%r?5AuDq^J zFY4XGmSa)?nRz!8DoOAOzB5gnpwgurxKgy0Ks=EQ;n(;Px5|i|PsQX`I=-fV-T58?!})nwSx1HY;%pPC4qSx9Zw@ zd(m}14E|8q4CEUFNk`!%rDVqaMQ+JRQ$(*T_oi$M$yfV9G2h0F z`qB3_c7s69j^FLD6i68Uj_xxl%(kV3g_(E}6 z0^YtH7S8HX*kg2wp3PSxhR!&r+Lmo3dGK+}rH&SX{e5exy^%=a@T_oP-|}>2i6Bgd z;l^L#Q(({+k;TnfgWP?SIo(M~MnHiKN+CCM+mcGA?ls|Yo8ejz`?`qu8j0 zmj2sTqTZY{&}}Vl=*>`g;uvETZV>t`rNS@yuy?nA=au z>4q`4J&S>dqRE}EjARvZ6x=DXr>cCAeR*j2(k_3W6W7@#|IHy3 z*aVuRIQS!*1ajB7b8U~3{z}B)K%cYlIs0td28r(Sk6bzuxe5NXv={d04P@5djA@L> zg+H25E0qki*l9`nZf;etz`eX_+1M_s%W8uYB^>>=xyN{mN_OT_jpQOJYQtkcIwJ!< zaj$>kks3m5+4wEGw?whxGk4Y1y32Ng4E}+EFZvFV1*7eKz-c~c2=YW1$GAS5cVK@c z@0}zpmo&5iKR`rFlwat*IO^gZeVk{Jx7{VqT8^X%gE-9;vDB+s}S=KJi1BI*lkUz7B^>TkiKjc;Ou7NF1F5pW~sr{0XjK6R+Q&OQ!wwgs9{UG4&o`^-q2vqa_zIvPUZi-}&>&Y_Mk#DV?L=K*GV7?LPn8 z`UpX+=6(Ap*1Z)xYN5_ggHL(Wd$0H<1av0Cw2?x5x`9L9l|!Fo5xkBlZd)CwIHpc9}2xEkq8#|ZbS3$vXE z`QWM<#|+S{pA<;D#7hj|LAH%P&t)WY|q??a#k>t93?dwfNguc6iF z!8d>Ov>gj~7Gf~}CJ}48Ye!8)tXDZisX~c6C%vkg_&f)dY!8;qYZbN+(ZW~d@(dr~ zW#J5CWQ8}AN}_848z6}>5p(ps&PUCplIF4DP&!ae!*W{R`Ba!FxoB7g9*L-DtmQ59 znKZOl{oP_a`lI@(rsY&OeF6q>D&Bl2bj9yyTr&-_XQO6!n3^|9n~Pjc_KbgijR3gN|%Q z^TN9};ma(JOl-84i4}UmHETh`->WPuY%O{|-2EC}n!i%(jP$)q+4d%~bsS$D%cIv) z4#F%)3q)mbp1Djn5h89r;@7Oh%-q6Lk~rJkI>wD*W}PW8;D3S_v)G>890zu z9(h%>mo)%HZ&vhq>>AYhQIQ|Px1IG2uL++UwwmB{86vs^O?R3itTJ=|N)836mF1ha zb#!53IN7Y(?QksxG5`g<1`H)bQnT|u+h&f-QKFR+RWL`_THK=5mJ@A<@OXb-5&st8nTN%rj^p}H9FMvR^*Li$hquX~Egq_)Z!!9L> z!f^e`?w4mFN<)J{_oY*PeuMQ{Mx#n)p=bslo$H7M<ab8YVis58-4VY`c{ zS06j*MT40M% z${b;mb*Q{BnlM^tov43H{B_(cYWCVl7{B3uhAFBczv(0_&^>nSMlaFpm|ry&vtDi7 zWpDsIVKc@xdMG)8@NHWaHn=vm{C2nhJg7Gs9SlnXqr$vyZPSaCi%#q`uh@=we7ge+ zggA%j{Q+EyH*{9?8>2q9@nA=;TVb z^ykX&`X;fC%cQUWm`?f^Pi;F}>eWqIzWy&{t1n+q9fB{E3Q9nzjGszm;C3hGhL&Ma zELfv*-nBcCq>3%SIYqCp1Z$*^yLab@jO@JorE+^ufl7%kV=QkE@HRb>+3I9ec8?uC zJc`3E05_}a4Z4|F%+aQ>8&HkJ>Xr@@vj$?*(<+8ZVVO2bhEl(6*PJ<6PGe>ycMx0z zw25*RgVyu5`R{ki%~U=a!m$&YKY+5QHbQb!ECs)ztMhCX=NTZfEi)$1BMV}t<@+XA z(oS279|pfauLbO!v%-H`l1sFO&D_EZSlmCBhY(>{!_wc0LBEJL#wKbLd7srNqoFSJZ)AYWd7Zr zuW=vncL7}?xV;V!p2Wi{+FKB24O-_M0vB;M-hluvxVC@rNwrdnb>Y!KdpNO&K9p2B z!QN0eP#B2t{JaC2fXjDuf0%yOP8<6|37ad&2Dspcs%cF`2El0Bq9y*Q{tkkqTX zF@(;=d;l!YJvC@QKac8L>Cu7>aVUJEWxniar4R8~ec$+eSHNfPlVZw=v&FBgi({>j zvgj@R%K%w*W&gPXOoJ~=C6GE3Xyv!VWB(EqGs-dMB9;d0%@h`+GEDP|(r%P6>y^|x zPWlsHW&}MZDPt1)=vJpLxb{W{{eeE}tL)NcU-p{1Lt4mAzdDh<=;&t=CcDt-PXxHk zJuB!s5uo>ov^yub%o$AaK3TfLSv^|CFdOk~{_*l#SF~{Wgb{XB1($!UlaEuNbg?V(| z5-Bc}`372vEjT)=!4}ew!Gu^+(wJz9XK4+CBL4LWy;9+KmXs~st$^(QL|cm4Ki1|& z*$14%V(P#Mcw`Eu+Uf;21b!pw$5YDe@Iq(JeH{f6Z6~~s-)7}1OhEx7Z#D1N$yZNT z$bh1C4;DMoopNa+72z@0Ov%!$H`hJX9ZMs5-IPWEPwQXq-J$d)x|l~W@*%|r@ta>3 z4KBn~B%D4aY7o^*WZfLRFY|8o4U{YyW`gmIB%=VK;N>_Zb~6jC9vhp|dfpG#C7rJK zST3z2ucyUP!sp6 zCnIxmb1_!zi+KK~Kaz~&EMw`)AXM!puy#4MNyiZNy6tifnM0^1-15~%UiwEzHYsRY zE_B33E`DCHV5Niko9q7F-CqO2Wh5KaNnWzkKt59@OpCV7)#p~Qd~hiWS6T>5(6^}* z@Rw~niYh2{0gOpS+dTN5BNt294Q@IBM+G-Kv@pzL;im}5jb#2^0`pZXj^%t*bu-Kfjr&LGGA8w8N0>*u{z`tpo68`ko zH5B~k5lq?SVHubSVgJzCj^-vW&IIknc8==FJa;|?Y+Vk~8=-j%csJjS9mx>*jrn$B zAv^zLff(wi0(DXdjP}CL9ai0HOo93AHAw9sUcNBXh}@?kmNj}#xLfW@iJ(Ra@XD%^ zFY*f>0pxT>;!l$R5v-o+@JSDj@0k`B=8SM^Ik|nDhuS2n$tQbtfJA;ASJC1Tz!wHA z(yz#@XLmgZ<;%a6g3EgAWqywpH;BtJNT(~VnrOk5=2E(oo*uhTq(Ya-+22c1XM$G3 z&~u8T*w_7#n6E=0SIi!VPZm%FlP!2v5dB^p_{36&D@PH2Njc5*a$u&y`Ig-U4n7pL zJ`Q%@@1fErn@}8Ih;1|4%34sbSjJ_9IfB;bw(t{0;aHo5N$yERD6$S@Kc*^gX^kY@ zNJvxUP-ZU-x_;o#AC>nhFOi!o>%SMt959T|u~GaHjVXH>M{vnbLa@NbC`L3Z#IXwT zNQV?cUg7u?uM@|f161;>jd*C$SsD|Mb3a(~PI)?}p*W>V^vZB47++P_{>8MUuMb7S&!l27$M zEB-Nq!$d2HVZy}DGt5JX${FLyuxUEfA3o6O4%8+xQjmzIuq%Pe;s~n30>Y~gqw?Ax zpXa~ed#Ruf9+`Io#_Oxv|yVGj(AylAkQ*CYU@R{*V#uAhKJgm zi`qYSH)NR3BWIYA1;P>8T}^6W(5(JD61hx?Slq^RJ~p8bbo)&~>jv5I<>VUj>+x0%O$+p+YT7ri3g+b)&=?JeHG>|&mZ$gwB<8Wy zcpRR2m>9?1sZ%c2?N$6yML>JwaiMh_tZ0kz`T61NJa$?c=T0MyzNwt$d zs^j>}kZoR+nXHj3QsR;5VY-7O!Xcy!Qk zsrPD5cqEEJLH%t#b5^J`K%|j2bS$X#@L?8=Hi!3<7I>{+rOffA-E&SO^73P`6&})U zouo7~5P9n4!T9P#!k87_zN51g{x1gn=ad+GTtNAIU*$CPTZcuSs1H1I-1CT zu?*qN_nV;;vb~5|Cb9jR-Tsx*CdDbjmAXG!+0y0HARV>VNQsGSry9CJW}AL(zB&Zt=tIz?O2etbIr%a~hh znlfnEuTy_@w3x$HO7KF6bBKkWkK+{1S0}*Vpn{2#S{ur013RlipxwgWLQ6+SKOr(e zdn_t`#FXt&CsJ4ROGEysgc{~Rf0O_7(`a-*tVcA=F|y?}Ls&Hw@1GKtNSZ@RDaHqr zq7%5jvE_ibUAu-d48HB45t}L%3bVy~(>U0p;^drU@!!})Z2h}s8zoI&J)vc*MFStD z;lX6@bz)w0uW!K)Z|z&O7Sn_^ZgJ03B1v8G6$@+4*1qIxlaq^Sh8P(a_OcHaKjq1X zgbc7+$f(V2!n^cXbQ+(zf@=NgM$CvGRMH@4a`p>cMBV*(N#AzipEuaLg62s=qW_*W zj8cgf+y##hIq{Ilr|3&@-WFJ+9BAo~TrOp!$@*EHq1P>bN8*PnCF`qaH$w9)_)*>G zgBSvGH*Qa6{=MMc4jl~@O+VP*d!G_V0v&jmJ5@|Bgec;K?^fx_RWNEs3NKSt%pd26 zjR{*lHk#+l_1RL!`I%n_K>NhIU@Xn$j`G_!6Cfd@a$wy#DiCt@3v z(&XyZ$ux}zE$v%7^n9`cW;sVIQ$4iEPP!cx`LaZ`Bl`>Ju8P7kWaM zJJ`>2Ch=85(PkK4&yuOsGn=1t9)|n&t?LL1 z>ei;UyW>|;fPT(|mtOEUd=aV{a=1^-ee|Aq`6;~oSEe4G4fe|W<2DEOc)@6@VG8~E u={sc`Z^i;#gH<(}84~ga$*Netf;cFV8C8ktUg;NL(n8snYM_QUGXEc6*+k?3 literal 0 HcmV?d00001 diff --git a/public/3D/icons/turmeric.avif b/public/3D/icons/turmeric.avif new file mode 100644 index 0000000000000000000000000000000000000000..95bac46bc79f1b55b7ce10d691811a2b610498b1 GIT binary patch literal 5739 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 literal 0 HcmV?d00001 diff --git a/public/3D/icons/yellow_onion.avif b/public/3D/icons/yellow_onion.avif new file mode 100644 index 0000000000000000000000000000000000000000..54bc9db1ffd5fc77fba62964327f223aac5bde98 GIT binary patch literal 6746 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 literal 0 HcmV?d00001 diff --git a/public/3D/icons/zucchini.avif b/public/3D/icons/zucchini.avif new file mode 100644 index 0000000000000000000000000000000000000000..cbcfe1901765913b3ed577dccf60299c3bdb594b GIT binary patch literal 5437 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 VW$L@3{?+$WOE8c8aPj=N{tu`J1q=WH literal 0 HcmV?d00001 diff --git a/public/3D/models/belt_clip.glb b/public/3D/models/belt_clip.glb new file mode 100644 index 0000000000000000000000000000000000000000..38941582d24f56349563fe664b7a5fca5b965fa1 GIT binary patch literal 2224 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 Q`|1i$YsRdf7d=z_5A{1hvj6}9 literal 0 HcmV?d00001 diff --git a/public/3D/models/cc_horizontal.glb b/public/3D/models/cc_horizontal.glb new file mode 100644 index 0000000000000000000000000000000000000000..84b729994ff80a92f951f567c9ba1092bff43cd0 GIT binary patch literal 5340 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 NKTXP$2a=bm{0}5|2rK{q literal 0 HcmV?d00001 diff --git a/public/3D/models/cc_vertical.glb b/public/3D/models/cc_vertical.glb new file mode 100644 index 0000000000000000000000000000000000000000..1f0a58d1983b6a16d4343ce0237c22ffc917e0ce GIT binary patch literal 4844 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 literal 0 HcmV?d00001 diff --git a/public/3D/models/cross_slide.glb b/public/3D/models/cross_slide.glb new file mode 100644 index 0000000000000000000000000000000000000000..edf980eff8f7ce0e518375ca593cffe0a531f382 GIT binary patch literal 192556 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 X2agvoTgS6@Ca_M~UXsZBujKm=wHr50 literal 0 HcmV?d00001 diff --git a/public/3D/models/farmduino.glb b/public/3D/models/farmduino.glb new file mode 100644 index 0000000000000000000000000000000000000000..94342db740e915a7f722f287b2bf6cf2b756a0d5 GIT binary patch literal 31092 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

    S;v{$&Qj5tM0r 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 z zHvZuDxPeXO>#>o2I(%tI>j3wee>@No^?Rz(kWs8FS?^uu7cY+F-uKIaaV31hciS$N zb~LX>--R@;T)>}nF83sO3cmXKjsJPe%O7XSekZQ;9c2>KPQ@t}R0 zk+CWtV=`Tp}yA{TvbPIl(E^wW!kIw2z5vY~q@4kDhURU+0t~%XaU0wU^v-Udsto?RN z-|-MooW6zw@+UOa)75_sg&H`dY|13?w@Hv?fsxyEgZqU zo6+1JLY)YaLb#&3U|g(b6axpZ#+@4QqA#mJWZC#WK;l$%PaV6R*;sINB;$GegYj`9 z{aM0Q{c{Ur&-Y$|&58r>U6vNHAvC-|#RGwfMgEeHj{KC5DbL>G$hh#GSIU5%-?D=U zOMb)WJKstun8qpENp38A(`bznqltVYF2*W4kAR+aa^> znU|2U@t&Ex32sw``$Xa5=PvPgTsp}z+;s-=k%$p^z`pzCaEvLTSzV2jX0gTso0xxM z`|9Ngv1dZOKOj)Q=W5jDhJ0j{Q@q%UJ>diFpPu!f>P;svihKrxu3Cx3iF|9k#23(F zF(Sy*aX-YiGL+HR;2zL{2eO#wwYzRb(U*;nlVRSA7P3A6AdEF~fI7wd62`=w6LUdybi zotUJ8SkZ5Mdl+g_xIJ%gbm88iU5S`t*?pqg*Ay&{eIBUUrnTkhFSOI{&ueAn6g(1C z2;=6UcS0XIycu8N=xvvN=#ZmC`SVe0#SC?dJmLDLkbiW=4p# zqfCtQu$|n}-MKzYDOisi13{XUXJY9aP-@DLr<1?}=E_;pCA!3I({Y>XBD&tU1xvYV zv12B53Ct&7@IAYj)mKSSx!JTSchwEmyC@fJw+E^w=YgMED$XxlPq?DzV2QS01tUN9 zs(NfT`~iLkT;`E|4L-+f=IUo^vTzW@5p2cD41$)3TU0_e>d_FiL<3r93Oc#Pn4v}E4%K?6wLzP~N1^Og5KD6ZwM}!htL}&i*akG|!DmR?+ z4!7r0ocn$lUu7per`$hoQdDjr7A&83{pNC@zB`(rzN_w)i7l9z)XN-CPwpUNo_C;) z>JC3FnGXEu{RGr@{P0%8mL>5%whR&dL(s-!)u|wafya^c#-T2`#5jr9w1euvE0?J@ z%U(AK#J5?zA8d@nzTrdwggL5aAwybGQwon1{p*s#O@_HL7VFh0C4-t3WC2+&J}*om zXC5N)u|3xU%^d!`k|_@c&(IG7wdqdpk?xQqc{t9_=gi0L)zYC}DNl@be%(cuF_6ZS zu}!~?;kH}V?DQ(X=SzqYX18ixX9R58IpERmbF(T5vn063#&T`&siuZ4T+up1{&b4} z4eWlY1Ad7?h9oo$JC)%Oc&4L>s{~GtzKt_ln4PhCoSxltP_GR>CjM~)EAbChu-E;7 zEc0*~v8L-z>%Ix@ny%rOt;rL{V$f?m!-$j^@WU`04hHs20sc#gl7H zdOK+WELd@J+Ev+B-)5{-Sfx zz2-69O)V~}s<^$Gz|+eT1=|ajzoCj3%{0a=j#?O&(M%Uh=?Pmx0iQw& z5lDXM1W7)#Ol8_}NFG33$L%+<{Ny*5NZg6;uFMy7K8@IsbaEmSL1q=AoJy7y+g(9z z96;aE81>6OulfG|k0!QBR3mH1gV7NQR#}*jQ~JZ$TA=AvW!}wVCY2&RnTh6)Hd`lw zhJx~H0r1WGa{=Y!?S+kYuy$&gplj^1#Q|bC!Nohs!??k#d6Dt|nh5seTOEme)$n4P z)WH!XtZH}}@-Stm-%K+*0jx6;=?*?sOd^EH&cjghU8-mK?VE8RY z<|{z>nd49sbSo@QjFBH7clVwgbPhXgXP&f99}_;+4JD6y*Md!ZSjfA>%lzI<^AUD8 z7+a-KaSbj(qxS5p{ z3ZrUiLt?u;913+mnIUOyKoHg^&Ny?W?|ElQ+dboa&v`S#3<~Vf{4GDqK;)?XgXE>I zU$?Rg;fFoP2{U|QvZ@%u66_YK31Ok4(Ml-8j#sv&(dz?|3S%;2e2+wWid}D#lJ77Z z(q)SwMZc2{#FVZl{CIkC%H{nzntJQuG^9{j!gnQK6W4f81*W865dHR>a^l}%)gHxx2KRn02v^_uFAAxoFIr_$2`I5Vi3sumzLJKKfaM)R|a6 zOJi4QLbtgNsl+Ww^8g1iN8-me_RpEO_tpd~=*&~WJ68igLPkY`sDLr+W`W#p$DVkH z`B%wBEbvM9$@dLarv?|dsq3TdCxgt^7Bz@|tcQpVaGl|7$_E^uIE>YiXuf!NwK4CD zI?021y+SfQtR18;0Cri4U4a;x9Nq7oEZeu@UMH#H#2V8!GWhPBY+FX<7_GoJ46!ga zFdrS?Afu1yy)VsTr}YJ&KhTs96}>@2<0@pc`>z$!GrzU313&R3ap-i6U!YBe8|F^0 zQOf@)7(cb7s6#+%IphKeYR1nefW8VWD%=i1l&M9EfJ*5Q=*+g;z-U5X`k@h?`#_Q= zA5?vS!bGqJM7R?oy+u962EOsIh=44FXM1{P=N#z*E1=7>qB43jc@wT|iaM5pZCvmG z`@c$>z0M88jBp^SQ~MAh=4C2s_YCqk+chWA_LA=7sv8C$(?}C!V8c#5_t*(t=)D@+V38N=)@H!enJA_V1 zA~4E$SUC;yd{}IzCv)D036_23Qq`*uH82F(I_(*gCg4$doBx#Cl-VD#@5=CTFbG?a zs{F^4UP2R>JiiF@PFP|aVe=0Axxee=%Qw4^-y#}hVNu^q`VJ2k*=_mv|Eg2mF|w6P zw({(*2`E-lpwg)Ex_1V)pv8f%M3BAS&*6B4kJFv>M~>+iv+QP`zGMn2lSIkHq7t zpDl-vFK0lo*MwJ%{hIGl%zF5qq+ysJc70yD?6fL0Cfr~yY|HO&IrV$q9W=OyiQg&* z;RvRI_9p@(O?inCV<|Ev@TD_W@d8TV4^zRZV<|_s8Fr#ozAgILi}?gWS9|pDS*~Z& z04u9H3f85ddn+G^KWa`R{W#2NQ=CJK?T~8(XX!yWW^nI??)E*IiV-~@iCx3`wHUHJ zgLg5CSb>=Q@po*W9Y*R8T$9=IqljaO?d5~zyP!=uxiYmBF zO+s8#NchqpjXU7{>v}K>0-Gl+;fXX_A3Uvu?Y08mQ(yUMo*9?&2dCw;JXEHNTBQD|*7bI#Rj&{XPcME1w784IFEZUHE z%;K+4~i@7a?ID+S<*GL{j}0 zLSOEJ%<3VfY|_6AI6Ov8if-Op6Fp|qa@|xKg+zEjDp}eEOws`v@}k>QFIp`15O|+N zM0{01qKQLed1*sv;i0LEKwfo1S-@fkmEbM&7|%1lW6T9D>(z~c{(8dkE{OyB?PZTb zuH~#*nXnR=9%*LvgJe=)hMqtexl9Kqo`&HHiDyBCuD%c3P$gY+H6DJ!xuYH1p(O$( z&VBhob!I~dzWnyEXp6>}p1qLkIE?6TR464t)#cDUTu1X#1VD3Ms#&kJpNRtg)ufws zLIx8I0WvLiDyNX+Ks?K4!2fp#0&6DO*kOTPwD{^Eumy;bjFK6w!A!04WBONV=P!T? zTyFEsgJ?{v{WiPT9bz3RNKJ8&A!Q&+FwDFx!3HRq(q}kBunT;MOJ|}>KA6Nl&ba{l zogU;DUnDXYq*oNlYd|p^5Y(2Hd4`h?qlc27sEWZT(kSzdfcmBR@N zJ}oNJEIbyx`MuXtJBL%pb2>_U>&J5e{LeJ=&1-Gu9z<8I=}@aW=FU`(v&i2Gr*x@h zW3Zdch#pa%=Zuh0c}s27{~FjVR#50$)R))TRia={*g*7p^pQ%+o`CY27jk~$d3kTd zb?-C8hsv$q4HDQxpvL7WOZ{=wK%*zN@PpQ45B(2b<0HJIsmzTnz@rsr^9*rV-<7P* zCd!0WT1N~LsIYz$Z&@t0Q1jT&bsu;E|M)6lOnKe*+sX`23rr^NuT77c9=1p*f5fLaqvHHaxv01_DIPzb)riW3! zhv>?6aYq-?%I4hhRow3)Srpd>0O~*r#6*RxzhRi0J1p(zh(R7wc@^8Fia6CNAKZtpO2_P?%HY*)R2IGpvP zPTg;t-IYom%R9bOSX)L5wO4Lg5MmlQV)gFS85Vq7AnodL)D!IL4_jyKZ$J<5lifqr zel4@8`G?j78_fJlR$$ruq>J#Tb6BJIQKp9}G+yb*ub5U@ zbN6y;y_N1r89lz`DxueICYD>^6zO?VwHQZonVE`!ay47QKNiVqTX?WrbY`C+WW-*Y z7{^2oyPTP>H;ss3$`~GBogXR6%+`XJ^6eMYLF>R2ZqIetipGrk2R|8;JlvPG<0C_~`9%nm0gq0aL5~~}hFMoV!vx?5D>1J|$ zB^uxj8KEDEYAp_=+19kvE#+_EMul8W#C!)zGucqzo^lOkS#bfXif&I~;;9I+u|5gI zY;{~jPY4BbC){$Mjo!Mo&9E^@sFxQFn6WQ!aTh99m)_nzmFF7JE_YCz9Q;a0=in|T z6iLBmfD*($I+jw;mVmD<=e6eO(^dAp<9#U5CE6*#8d|_m|#ITVrF@jj|MCv?Y&22{X`QQ7vChx-N>F`Pnp=l&Bx${7YJaH@ zU3Rq~Zew$3Rx=w)T6 zgT!x$U3YxR3Fc|1gFT@@Sj)pzca#3j%G?bIld)nh zvAmlHJBQG;btd@}K#@FrsWSIi!D>vL2~q7g!$&=-G8_I}6VF8otFkR!ITgVIvBK58 zWENG(-%0`fSI~Om4QcEGwI1iq?3L$ZkY-7I6_{xT@i`K#pFbPP5nYD!qD@VTh@n<{ zj=DoT5aaNgo@Wwu`#~Z9pfLh8BEJuugtx~AcnXM6F2rF<7A`)w-IE3Wk#zp)m3A(M z+}55sX%UH{*PdKko_3urHFqt?qdQMnlj<~DDITg+6z&mK5Mp_BKEvIhSEL(-V z+$9;Hzj!OMPrn|_#@RoU3e?{xnb(kl72AlUEvf)ILE0H}&_HI|6^N zE^!o#NXz%YQ7Ad31OAf6$FVjD#2S3XHOUDE4$2(i-3kFLNM*!@k_A+#mP7Bv)7CYW zMa+ZX^3J-s*QF`I#yG$poY1;S{YtNR{!;Ui|bJnkI#)Rj~*fgt_# zSV*0NI<=|G)5Equt({s`y5zACRuQc!`xvr2=(d^cStzLtP(2KfQQv`(CkJ$k;*-vH zqM}J8L!(1n15u2^h>;*GB8%iL-A7HQX=+tvXL7D8Vo@GxdS8rOO<_l>v1QTpb^vCM zxJJRiMwqn;G+Lkw_p4mE3#0YXcgRFmJ#TO#$QjtQzc*{CQGT}@pEO|9Ej!*{2WP%q z*Djb_pGcpDkF<&G6p2|M*-9mo!gDDLlfm`Fecp>bH;lPtjb@zZoI~jX|7OSy41(LB7CyZSs3#8HhX0YUp}%JEzP3kLvgR)`5py9?4F z>Zg_Q1S=GYr2S12zL5d`-`C8Xx{+hbY-7Ug@vGxP%~MuFkF7l63#;7_9)U_m*O1&! zq*;P%-H%lUH08fJ$V?{kb(?LzAX}05d+nZr5x66GKcaY1r{sJym=Ucue9ogzK0?_r znTw=A?EClbcVGq1cG>WWFyeES0BgBr! z`PgrYPM&tnXr`H{9e#UTmDAQ|tt`Sso^>6u20+0+ZSwZK!!$)#J8W zUjqsd^zAq)tQ#-tOpY_6{6?NwPn9Q?xhGFoNvGI`s3-{OHye1K!%hfWqpzKos-NMp z0~F!PjPcn|o*(A+W?cQ&`aB4GF_&b6I1-Ji)iIa^_9&DUqi{Ml=X^uRpoEuFwk@R# z=94Wlr_AMPp_p|~NmROkU~`k%nFF!@n+2daFh9NItK)TO_|KZgeFQ{7?A#^YGQ32J zUI35^jpu+EVQPewvb0_lmx8}qX|+s%R6=UUESg4SKR+wy0I zI0<`e>|jhopE>p1S}tbAp{ebxjXxE@&iZ|s&@bK-2A88)qPklZ=w@bI&xfkKt zP-U8AbvaPDMP;cqv1$VchIUd;5fa#d?F3W*bv1FG2evzd&t)zMYh~W-orXDP^2IPr zoed<2Ge(qH`bbX{Qp`h5<3&`w2~ErJNWt47xff+JMR)_`Y}q#();U;&uwU;}D4Roc zZ2~OKQ4uzfi=~GmFlW7hjqWwt|*GjL~*SdY(95^@ovZez4mx z)#Si*-b>6z7P*qTN=$D9);Yx+=}9JGmsAL5*%QjY1@bap+W5SDe(d70r(-!uC0UI> z8h)0_CYU9LsjdzLFbC4wqFY$2SDnOvI(zR+td>1;gP{`>*?(2@Cw|Nzx%J0?KozdD zulXWIEk_ydH{ELp4dP!vv(O_AmkzZ(ASXo7!3#gFomeLtur*emv!HUc6-nD~;MlxZ zft*4$r-pt>3!JO9eG3hA+I5g!;AOO5PLTQ;V;r6r1%r+^q|Qrr`dTqfWi4}BAXteV z+PnQC7GVN6N1XK&+YDDYyjY<=H!ABvylpPqRjJw2iqvf)PRWsK!-~(g1`E1%&}S9^ zL5M_g(>(iC8$bvfeHTj6<+7K9v``k2dMarCn(ZArs*jyM<^6*8dq@rqyCiEA1D`W` z)Q1-at3)>*R7+R-i4LnssTq5)PXWrg5hZCCjhV(!CWw~_P*pmYK*zw{W03WYH0Au; z=Hb=>^>y(9A%+JLhc2rZxL5#Fo8%+~#Z_6HZ!||wAc~>U*fG0e(#yI! zCjzhuunbQ~g*uh(jO?#+(UhEramWD4muv21k7+Pv`64wxb5P?iq`U?4mf}_yhrTrR z1oHSiU03aLOkF%hvm#Cbt3mF-&SB9J{(cifC1h;pm5TT$N8*R;&wpL&yg{>aWY!-i z{yDfi_fsn?&E^T}@MdLWWSckv!%5q5_O(yA3)KYRm23&#gk2WhBxapUisB>UVqr9E z7Ls6b@t*wBHU=Q5QJ0mB4|iQ&YuaR-=Qr1X@*%5RIK%SI&bXrzG?kiZ|Hf@UP8cVb zh}^Bc3ihg!6<^fkYYM7tQSxs%(PWX&kB7)$17}%yMEFqvur+7%8Zi}HMFGjm z^Wg^))NJ4RYy7)s}FyKy=rp(G(I2T5C~yi)F#1idH-d zxH|8zv8e7q$O%LAAr*~_n_3&P5o0#vBZc==?OM8Rk+U$mZ}!y2G&YdJoq7zqkvc-*@}?A*vd4a1PjR~yPH?XRSG z=gbe5xN*SDiyO$ku`^sHKoj^K;-$sGK)<^M2oqp8m#ijX$7<4|I z6K1;Dd*h`h*Q&@Od!890f1 zI=EkjvZ1j>m(khi1eg6PY13e3bg=c!uY9@nie4^1=?ky}>wK{2U42iYUm!7N`*^cvh2YB_&KX83<_p z+Em8d+*j49Yw2ewJP~C|8Oyb?%_p?s0V_MrjkdLwlN>HjEAvfi}+#dAJ zkHXIpjy+RUC)YEXb>MV!;E|MkcH~C@hq->=Z`I2<2093i`b-%pBi)3SbHWP04A^PcK`Tof^H9R^q8rZ-~UfwxOxkp=Nr6W9}moZ}zWX8?Du>`|c6nQ0V^(@?w zPoaS83~dc!Qc8@TF#B>m35F4T&#rOID#eX)Wr|2=`X>fsMgfvXqtvD9I>no%2~L1= z8=J`ZlXIjA5 zPRaXkrI&7>?}=;I6HYN%#)j40rpn12saRG*h?bNVjMnq&jBLtgkr*HLeZrOfCRxg@ zdYP!E_ddmMD4YrD zikZ~7Z_W}u7;un#{K2&RE#m+vP4&$#Cow9Rsp1*x&ZxXi!eTp?go7HaBzPvsY+avd zJ15FPcTR7yw$2DS-^SK^0NAhv)*(b>51_?K%@8KgdvjCW3q*D~S;{A7Nr zJihg!XOGusfpW(4ZYCU65Vr2@y=VG!fF<@1HDE~h8}=|fLtJV71iYXs8uq18AIZVN zK2J+Upvyd_iJu=mbC=WO)^<}i^fJEE*|RV8D}LZ?U;c-1a={P zEU272Jk`T_&2|MGr8rKcDIa$Qo|Q!?0b$PzjWAzOQXql}h;^ODPhHK%AIzFuvEble z43yB|?YsIu8f5>Fsjys}t%}s{()_~h#`@Ys=Ks%3{(l(Q4o*$`6!{>axX2Yl;Hpva zSG`6yggE(Uc}y6VOzExiBOaQ84J0r*T_FC-b2HWRAKO=Z<>ST5fPp(>Fd43$D*t>X zuEFBot}sRb zL~ACikyrN~UpvSlj{6d+A3%PBVq}|5p6RXRAKIRM2Iul2A%@af`i_-yawC(NNiQiz zPdLBQFPWci^YmpUZ*!Mbrn`dlW1oe>Np;cCv6*~BnJB@?`%RNFtnbSz&kJ)xk@}X# zACFsp19$Js#+j83LQQoTn$_Etc^u1`3smubT<=Ex3Se2(1ewbwIwv#`g#yo9vKxQx zF8v@Y*Mj0fP~~E9kEG70`&?J2x4iYZy$rr8Nxx1M5eelJU}vr!Q5=?I<3Nwwg5{|; zk|QxQb?EG9?Q|Xi&9ww%7gjuwRry3U69f8}PJdo3>TZsYNoMIBv?uoDMS~r5i8LT@Q7o+3Y}nN z%JmcS@V&%B#a`x!Io#{&+cnvsdh!X^svx#T88^*qhfZ!Nr3#j}qj=->rm}Q}(840r zqJeBgup{ak0TBGy?gNxRhoW#vV%%k8cxcKhd_89wTv;@CA#*eI|6^${@$ElzY#rk; zz=I)n*nqMv*F%+%53kZ&+guuBJ+0_tx^;#)Ky|{4^kU*&1(O_1hIn(qwMR`zR zV^wJ!6v$7kIsA;$37>(jbXSNQYVUbBJ&nq{7cTd`&^K!#K(O%GFA&tHt~?6kUO$xc zexFZDuz~nw4-i}|s`I{Spw<`1s)68Vt<7@yC1YJKa}+0q1NalgsYL(!!ty{8>G89P{Ek?a_M*l??B)wr!WLi4tw=SxGssBB!LVXe3hZA+0lDy1*E!c!_@m@5ZvS+xq zm=fi8?s!!bZMsiL?v7&DTLC-E2T4Yrb&U22qG zYt;Gh4m;A%cNALW_|+>?g%kHp8_4s;)|^=yu$~}W-!zZP^SJr|x(66yrhcF3D9q24TRhY$g1(FjOPYSdXFlgKv^$gH5mwd>SnX(y@ zec7bjE10R8ZYiJr@&3_yELjK(pu#j;ix|IF==M;9!SLvMf&h1z(&6e<^UCv3DuIQ} zVTSXKW-9&w3l^~&-g1Wm6{>j^$`O^_>Vp_YQHr-gd@bWW`|}Ohwx@P?(vLrnb0u~5 z6G(5Q$lBI7%DtzKZtXjdt&N@Mr;e9AL(PwhPr#AA#t2iQnR=zNG7ye?mk znMzYueeAhn1khg%2W^hChhO6@e&uahg9~53zrbqVM=04(*%MoLc3}%n3Qfbgm!SrG zARKEDVS=0F)K3jkJIur2$ysZk$1p+uq#TOXIuuxhWe%iG zgV~Q}@{d({%s>f40=zpZGp)h~C=65x;%SSbup^;SLO9`0vw137tc7@dCGm z@xWQF1*bBUB-NE`hFj0z7VGVtjGyjxk5H*ueIu!ngZMkRDft6`!+V^<#=J&pg(H2> zw$mo#_9Uqt5}u%-`z!NRM!z0^e~lpH(c^1ibN^rfMY@aiTl5e3TM-iITkxOuKL>5! zUi+d4v;e|Cq5+@*M4p0lbpP&<{Qo!S|45?#|GWR~IY)v6s|Qv+rQ347$rLATk-e9B#Wm@azbKG|=-C_Fx7y7qkT c2?5SUe7ch>{pY8ABmUC{@c-uo5`+W#UvQ1cBLDyZ literal 0 HcmV?d00001 diff --git a/public/3D/models/gantry_wheel_plate.glb b/public/3D/models/gantry_wheel_plate.glb new file mode 100644 index 0000000000000000000000000000000000000000..3544c6b1eaa5f42a239a0fbe14ff173b587fd67c GIT binary patch literal 96268 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 ZA9rL!Z*1TQ9a4KU}9**G-T2kw1f~r zTsWVHsTgB@5rY;G6ciE{#}~xWtbI1pgzIBMurar#c5FK?rXIwPj^Xn{ctZE-0W%|G zlPO_54~uAOW@##7{AJ_mxYXnyEzJM2FfuW={Qp}pXwd;lSauiyV>9OTWny7$W^BbY zVK5n(^iLtv!qkjuX2~@7#Vo=xh&~4YWHKeRWSUw{UB<>{MkZF~#tf#f2(t=|U$-tq z;29p0_=}BSeVR2B8(J?6ab34=n(9Bh>=0h4Fbw0t%G~1L*1s%y0nt-Dy7PqrQGS2A z`Q_xlT15v4Lj>UgQGc^z8e;HFjg0-UhPkD=u?5yJpGJ-~eo^pO1LHiHA0HSM;uanp z5=^re3gSZ;w3tA_iV!S#RCo}VA0HaV!zOvENCE@mLYDHQ_yVVZpy^VPTIIeEX-Iu$rq*)t_ zFsJ-rj8Rjp@h4%^(-O`L4#(s_y#@?qnx^ek1>l0;^V@3p%~z4 z+}6w~YT|;hMfx{mE}t*NbpGY^S0PTT{TEOkaZ|JFL;GKVVFCV40yiW!K3wpB+lZ)P zN&xoDSAqlAZmBB{halJ<^NBbigM5~8A{{~$DWyodqz0*gAY&leKuSkskO z*HtAYi1{jJK>HhdtZH*!zhI!PnJZ|WVs`WiS zVsK?RK-BXcP_6BcIOgYGbCc^`>%P7=mrHct%VpKrFLmsTHhtf|Va%ALX{J$=_KX)!ISEg@8M zfrudT7oH(!a?UaD-8_W|5{oXE^j?codhdAjj?71C_qW>PiA8#T$u_Tdk}0|v$z3%sHn8VZNWsb5Yhxol34veNK4|MEv_Qd4H@i%q1F?eA-bfB%v$af`H=nA5T1 zQAX#D`<&A$=k8a3RS(Y4H8M^2x?AG;FgEwry-&ApX*+L4MUJFP+DQ71 z#3zv^>qv!UEecsfS$T3HNrpuFM!JAK@FX{q1!-C>h*X7{nvfz%YHT@WONyK&$w6z4 zBpuIYQt%uyDHtU)Da`GbcnXzFp30Pjrzc4y_3YV;TeEvaV>zDe)~1oF2HrsA^XdKpo)NY~5m@P-TLhV7rtTll%~^Ua?D;`P1U zhV9fd!yWH0)*TXgo(^(tGfLgX3Ja<~w5drftWeeY6@Y!N>0!^C9T~Vj#rKD2txM(B z6Dz1)IJKGPrS1o`9???#XH`E`=t;g2X>Xuz)|bM+vifn`qc1pOa%3u3VJ7Wz1lb}& zv7pOB)Oa;Az|!3Fw~MHJ`zsNy1BodN=H-oBM~ZEU(P_(95-}H+4jr^q0q9jXJkAsjhm%iztIw zxp*ahj!nF#Q1jH+cGZ0{=06SiI`R7Rb&cL`U53_%NZD>$y@A{0GiTn}ounh5%bpy) z*4yJ_W6LsMy_o3fa%J7Z=F(2HH^qgTMZ5)@(o2n<94(xB6#J#p$D*Parb)9_W{oq{ zXVopLj2_-{Gryy6Qp`Ku)MmZ?N#KpJgNzN6uDXfE-os0zOgck{I4^GYoH-w-&~TF1 zbHMhxDD8RMK4GbFaRr&*F~*wxVJ`n#e5Psq`Sw%i#$J55TKl|>D0BAZ zx*1L7C!V@|+0=h`B*puOnau|U-3?l(y3g*QlC<4^x!d|SY>8-IGm_ll5`ORD=u<-t ztrO31ESCJ+uTkOoz0%KyGtMn>Ts)i+BM_zElCcq~9%^Yh&$_<0n7zM#-uZ&Uj4Pd? zYq)DJseHQPZ%(Xh4wO!MdoM+W5Igtm>Gu0&y*6f(QE$5!@lAHDuQ(*Cso&SAxpN1% z+ISDK_36zY&+IPx^#*n$cMFSdyu0DWcMB@`-r?w25O?GNuR(C}sSmxAwJ~eX1qQLU z^=GB`ms^c@p1LSl+K)Y*vtWH1#V_+>XsIY?|K>}6>-{%3`wknrb``SsA8B;sY8+ic z_c#4^YH{fB-Olg2b7vL4kal97fAB6Q*2TU1`Rf_=HV&3^6=P#X>D0xe4}Tu+m%p+s zV6=Fvw1_w{U9rpb$74>ly{X<@yg}NWk*I&ewMlT$_V@2LIqu0T8$9PQ7yLuHWcVca z?@i6oTlw{caHq9R)S6X|ytI@FW0&Q2XzBPF|te zEO}gY?P-k%cM>%#8nyK1on1Y{P4P}&LPmE_;l|0|Pim_w&WSULid-G?`P*gT2ZfES!J@mpe15&=ZV?Yu zTLMNoZ^Vzwx!!pNuVbxV99!dv&)thkoZETM~Q?=qILlRW>{nyiZtowKgX)ZG5E z*y}piZ|k;o21}gvHm=`gpQmtzUm5Jse%mgfJzt`{#^AH(CJX+u$oCJ*dY}7+K0I9D zcLwb<-a9TiAmxC{^Y-`wV=r8B9#YhTyg_ZR9&M6TnOvu-8;H$Xo1J15oh1|0Ct7f8 zBpbe@`?Efr`y}2{lFpYM3?gT{dy(ud4eKE%&$$nBY$0yYNG}JB*s3WtJ1Y6YhIvZrl!#jw?w@5Q&&~jq$ljY^~AokhN(W#EkTj;G%C1F#C5)!TaQF$RO@?Kfm!NrcH5t^kEt-_zd~WQTLGhwXT4 zGF=y~M3})U3He2z&&Ew*Pn_MqYe$uP7~X7%FsDe4ymY%VRvXNf;|57X?bg^~3yN;v zr{5tp^z90FMs$aY@k||C3No>M(@pIrM0Pf`0w)%t3jNqeq>(G#c=YsdlIVWEEVyl+ z1=eS+AbWBfKv;Yuf~q;q0odoe383xM2m-ASWTNN<_#SH`?g^o|DeD51GePS{Ap2`A zSzG{}x#!&w;Au!VA20#`;uxTGXsGWoKacp!le~NtAd?TMj!pzy#R6>iNF^yFC5k6a zE3H-mjQ)|2hp+$)U4+dWkmrpd{+CfIl({Shwt6CvEU*!?vt(tZ$r&R!xLqd$AI<~; z$|ZgTxT%&3P(9xX;6%I*h_BC70so*<8Q?T`5rOd=re7V@jsQzhjRe=;r~nN=j?EFY z&R0c1oZLVHkUDMz&~oQHfH(w!r~s_Q6d1t(!H2&ikbT8k3dAfQq}cYtN$}5mjc^{F z*LjRKDJi8C=awAr>v#uV0*R&Nx9<%ZV1A)HVV0hPt`SZ3@)jlkm{i7PQrMh)MN!Q3 z;vHP+87Pn_x<@3So?$QchemNA=;j)k>0mKP>Ml@nO zOIjIn15FW>aXudgcWWeKLByjTa!URTj2E<$mQCOlEzz9%i^+LMdb+)loYC74Ds(`I zoNQ|S2^te@aPm6^GO~_Zr-`Q0-V^M#fr8rxFq^{G!{Omn=S912*~_Q7f3OgWl5r7M zj&E$u9G>UVb=4*oN+uz~)ReQ@{+W;YbV!@8<5G`R!dz;L1bohTPfSel41Z+P7GX=@lhN~+Aha>4q3#;~r-RbRUDb}Hh z%ytJiZp+d%(nGSZYEO~a#I7slyh28S>_p1;SL^ExJt&HC_2K!pU zUfX<*J=cl?&X11852xqz_7YaBqBrXZ-Hja!T`@1buE&Z%)7Ocah2!-S;7GLx_-8yL zLQ-qWd4?@@+y@4i$3!Bi!np%PIF5Hzg;ALpFQCpD^h404kW2)uI+DzE7zo;gEiCa_ z9Bc(y8K4s~8PKbC=O~C107uMO034&4G!T;q?Eu~AFcYG391+{d^>U#1;55L2Bz1sX z{Tc++)h`d^S5pqkz(kgh3}ll&F+e<9?+Ab&41oO~cLD{jW%%r;cxsdcHH+lGO}eB? zh8jW^r>fyWXtI5t&PjE!#gK_#OD_Y^^E1E!H8q_KC?jtPfM9itgnY!MnR_S`X+m~G7J|-B*#gWqs&jRE6=2Ls4yYo`d+(RM7xKe~E+f=8TG*2PK8ip&ANx_q`J9DOeTog}!5?Tz z0+13v0Q0E?j@sr&5dXFtIO|=4@=S6d-$W7g&yvt4b9uN?Ouc|Wfs)y}%){7*dkW;0 zMuONRbwYiz1k@`j`_HxwWJ}9PH=n_s^#Jt#T5KK`*obH7U&t?~XbnEYfq3ILzpF|k za@b3U0K3R(1eBi5hWyYy1hl5o3G{eu0;+v!DR>E)1a$jz?Cs>arfTBUD}+GIoF4A#u0YGzXs01WU*v*8JzR)N@H4lmr7~A-ih<5J_1hn~4CPIDklme>0 zImlpFu{vaGlq3GNR;YHfEcUlcJ*V4K%;?VFOHRR9R2h#|Gp>Vr@2w7CHWXFo`V}0v(uA* zt_B87)!Z1J^t%!>8|&maMCZN>Gol3Z$;W+=K`B>dFz=)I3*-=LxSK3|`m70#$WBxe zv7=kG^&fJ#7^&0TJ?KV0ior4C0>5Kzk3V zZGNe`%3zxtXMT(1SJ)<>!rk^Fa!)=@Xa5Ns`UN8GD|Vp7BeoTQYpo_`5yIG!j= zsun+9ZR?;o@l7^kFq|#$(^KHE{h93<1XTqR$JQ44nqrKzzl&3i66i%B=$NeeU4{2h zVk%V_wKWe$mt!wkoWFAk0U4I9HjDAc)vLsK0|VRVZ%5!kyjTWXTri1Md(YLYrx!dd N$6n$9*mJQg{0EC;IbQ$( literal 0 HcmV?d00001 diff --git a/public/3D/models/housing_vertical.glb b/public/3D/models/housing_vertical.glb new file mode 100644 index 0000000000000000000000000000000000000000..d256fd04ce34fea2a7b12796ac2fd2129a851d69 GIT binary patch literal 10316 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 literal 0 HcmV?d00001 diff --git a/public/3D/models/motor_horizontal.glb b/public/3D/models/motor_horizontal.glb new file mode 100644 index 0000000000000000000000000000000000000000..7f1e8b5831bd95ab1e4e0d9eaa139100dfa1b8cb GIT binary patch literal 42724 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 literal 0 HcmV?d00001 diff --git a/public/3D/models/motor_vertical.glb b/public/3D/models/motor_vertical.glb new file mode 100644 index 0000000000000000000000000000000000000000..572a97e4ef87d326325b8463d07a8883393cd286 GIT binary patch literal 41096 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

    sA3i`*B4dv3^7P@|Y+` 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 literal 0 HcmV?d00001 diff --git a/public/3D/models/seed_trough_assembly.glb b/public/3D/models/seed_trough_assembly.glb new file mode 100644 index 0000000000000000000000000000000000000000..e27b2e8241e44ae61d0ed171cd1edd667a8d1927 GIT binary patch literal 16968 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 literal 0 HcmV?d00001 diff --git a/public/3D/models/seeder.glb b/public/3D/models/seeder.glb new file mode 100644 index 0000000000000000000000000000000000000000..cdb7b650d74a256d994d321c01fa28ab04940355 GIT binary patch literal 45756 zcmdS9cUY58yDmyqqzGz26i`IE(tAfbp@)PLq)G2xx)f=KVxyx}1LQ>zFaaropdv_- zUZq&*B1l#0nc(kRYkm8yb*^*m{nwtDH&dQ@<|+5wGl@94BQ?lKNJtv1Nl5l7Nl4(v z2Ku2KwtjvN{v5KQ98M0N4!*YjUcMZ%98N$~0O@P%>F4O>>%o3oOi)BvP?+O7$885+ zKNl}gAR-Fd;nz8A?d%-<{JebqIAkqCIsAjY9l)5e>J8l+2q13f<>Bq+>EP*)JRXn` z5fvkL26%!M#l=J#Vmmm7vQ*sz<)R6f9#YLmXeT?6c!VgkrWdV z6PA&%{CE3B|9`m*7QYqX=;+{U;^GkaH`IUI9J0b-DA?b@z|rwIkN-4v9Xy@J1`Y@IY*-2EK@GGwGgrH=#g?;U}@ zw%*3X)x>3_u5%Du$bVWyW&RF9{sF!Yf0g~C`PgvK@8C(q6Br8RP&Y$b|08N0=y1!M z*yraJ;A;mUB^(}3)Z_w8`A3hZtp^cmhPLhw{{9Xswtfz(UhV+AMC&{p{^ISgywI_- z{~AG}zW)g6U$g#EhxGEdb+`T}T>ooqL}Vn0(>!cJC|qpa|83$wcIf>xCM+xhEV1_r zxaIC(>|*a=&mrsY8{lxA!~2%6o J-Ng>!72xFT33d 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 M|L~x?3UBNG2D1fDVgLXD literal 0 HcmV?d00001 diff --git a/public/3D/models/soil_sensor.glb b/public/3D/models/soil_sensor.glb new file mode 100644 index 0000000000000000000000000000000000000000..1879025cf91566b45a767e0b302c4f5fd44aca7e GIT binary patch literal 90004 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%0DN7IF2puRkj6*j)@vA`E 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 literal 0 HcmV?d00001 diff --git a/public/3D/models/toolbay_3.glb b/public/3D/models/toolbay_3.glb new file mode 100644 index 0000000000000000000000000000000000000000..0fb8a0adfd0174d5a006e37aae28b3e8b2274c82 GIT binary patch literal 12788 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 literal 0 HcmV?d00001 diff --git a/public/3D/models/x_axis_cc_mount.glb b/public/3D/models/x_axis_cc_mount.glb new file mode 100644 index 0000000000000000000000000000000000000000..5fde86f4518599d654c353f5de7d9af94da0be7d GIT binary patch literal 1936 zcmb7FeNYr-7=QLoA#U(cQ^8MYBNaSocW?JN4v<62AcWK7Bt|k=?iN@$ZgKApIqC8k z9kdS%9WC)Iu$-jSGAJ8jjIwdkB+U=B(Tp+2DXbxN(n@7}cMowir>6IhyXSqL=l6S_ z_xHTJTkf>YRRKU#C_vT-fT!~2`Uf{2^&a+I226IqwLOc1MM zYW0aEkx1Y=yp|K)yx>A96x#cBIBU0aZnq%1aZ^z}?(x-dD3+g@F)zc4((OWZjo{*3 z9-9(iNJ=j|y)IPIK+%5PFr?tgO#K4^hG76j8UHsxhgY+8s5R6*Nil@HNTY!=&@ zxDQm#dN`41o%g_qL<6Burl?|M&`AW7EE`COBnBCZEX1&Z#^4aVrA{uNcW@5erlNw*4u2gz`UhEPbAwEK>+&@Ioi2>+L(paOS~ZRM7DdGWt7 z{urGaU`}=(JYmhqw5U`VhTb!dV;FW68y%7x7B>5_P)&Z?=H?$`Gu6u+@D zzCWk+WbdAw1@krguP?~$ov`EGMV&A3X|~;#1y>Sx*xuvYROYrFFU{Go9WZS4_8Gc2 zPZU+I|Hyhwe*`}{a?O$x7b+d!=nr))i}~UZdz^0U<*noG)XOTsKmr5_LrtkMK!2DD z8Q2IZw2hPoVrONo*o&pC!K(hmR&}&zRb^evk_H~ZoYG}y*0tEGSSkHh)tM9?Tj8A5 zgnaDIhT5$gtv7B*t=rb|d6%Qo_7mM?VprzmXWXpY)t!)@roKeD*mckM&ulDj4L_xc z-+z9~!jja+)k}-FdN(xZO#kj^(?I1_-|?QM9bG54WWEv^eX}m^ndwJIw8k7P=uB*o zP@@u(OoJieBGhS`=ux3-Rlj0OM)gdY`thy5&Xx8Q6u!M}nk&Dx<%6-lv$xK^xT=2V zq^gL9O;-+}H@Up3LSQi3ah@IgYV0akh)DqP@qju2P(j&3xV?PiDHsP)-%40u3}%MFjD3><#!p!b(D05LN_wS8 zcqnx$m`6Sp3oTLz!cj6g8G)=nZfGBdz9TXjT7&5T-IA2PDH6h=B1D@4eO-sz0h&Yi zQdOHwa53Uy963ti)IAWKu`Qq3l+~@O@)?;slUKX zoP^jh5tpTmbF0F-XQSLt#{HZPeY;i^Vu9xH(vd(t?wf$frd*fMr!Ih*FO3HC^S9C?L-IG!Rn~ z*$puHLl#PW-oa>Cb_UE~!XePEMTHKYI}j4^d7)48osop;d+acFZ4|t^+8d67AR!gv Uo_(!LbNa0=d9OMBXqt@r8&4Q|f&c&j literal 0 HcmV?d00001 diff --git a/public/3D/models/z_axis_motor_mount.glb b/public/3D/models/z_axis_motor_mount.glb new file mode 100644 index 0000000000000000000000000000000000000000..9e73b785a5f59c152df562370a9bb666d19b58fd GIT binary patch literal 5428 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 literal 0 HcmV?d00001 diff --git a/public/3D/people/person_1.avif b/public/3D/people/person_1.avif new file mode 100644 index 0000000000000000000000000000000000000000..cc7124bdddee90b067e353bd9d68d50af7773f34 GIT binary patch literal 2740 zcmYjSc{tST7yk}pj3s0#iK2{soh%dAHnx(bVeDID7={@JGZWH+GS?PS)({t!-BrX$ ziAW;LMNF2mSH^acCGK#a`}}_AdEWPP&iQ=abI$wz^8x@Mi6e)TFjPDaVA%l@@i=uN z9)q(oQbz&+D2eDp#vE`glk@W?g#7CQ011yJ|K}ed0q^x+89ox8Og!X3tX&CD2*Msj zCIG+&9AsFFE1U(otoSejJqG~JHkOaX;{y*TIb_6GfzN^D-~@)MrfwWW2s#|#e+-L0 zV2lVPKg@wr3?Jh2Zv_D0!%)HqhdmFvw&F=4Bo^l4N!TD33gbgbJ}hJzD1bHEFv}4j z;luC;8FnZX$^u>tRoyrW#Cwnu!UhpS0UG!f$=>Npx2Vw-Pwef*N z2?^98l6-s*H>3_0k0t4ZhKG`Uh@mER>S6Z6O zV4s-=^7i%*6=9vYMNOVI@1w71v8G9Nqkm*CJ2qTJl?D$L>U9e6ube897O?41DYkku zP2Y0*q-iB8NQZc}y!H#&P@MdTwT{<*3zy&*(5{zzdwtgQMfO%%)Q7IE5s9L}5(nqW zyzQ6j{)Ib2?oEa6&(y`xt{FBrIcbj?>zuAMw%&O3QwW{nIwP#5>d<@!LG3JDTMG+uS8$GNP;nR@-hMPlUX0hmF!}%Xqqqr(zlNzA zbt9Jt&z}|uX<>!|S5Ls?4L3gzgsT{WxO7^6WVCK%T7P}Ur*|UrHlsyc=8g*e4xeha z$E~6|sE4H0+P>iW9L32BUSlom*y{W%f}YNO8le5;6|FIr+g;DN{knUwyKO$2>$F!Q zR4Q6J_ZWNYDRjk|n9s*e*{>((k3B!~It{&Ve-mP%0m<<+Xt7x>L}mpt22gLn)(H#1 z9D-WRFCL>kTv_GV>?xw*a8k-kyTZ(k`Llk+1K^M>|*J__(@NVF(<(8q7ZF{Q4*e| zqnpmbk6N9+ySQ7?{jRw5icgYaTj#GBHWJ38FPe({(=xxTG)r|xA4wq~j917|L2jHsh#PdS-}B_mD@9k1 zKAXp%xkarV;=fRX=cr`=f-&3ANYjjZ+U_7dG~E!3ipm-~!5mvh+ujM_pBO5QkDkER z+bj**^G?_q*z9PV7nG)nRyPzaZ1W{Jx#WhV;S4&Fl)LA8w-)C(%f^}?#et56noLP< z-rf@t=!$;OEb~(-Ve#zqeuj)huT?TK0$$lTPwMjja~nd#88U08)rUMgT>*L2U2{7- zUAjEPZ^%>WRk`BW8cM zRqJb;6r#|7Yeb8Gz`tj0T3fa{XS`?fQyE|WO}K#ch@ffp)N=zjq%~l1*8cs4m%UoT zMt@QLZn~IBn(P-&ymE|AJiFd_v!$fxHMA%d%kG>)0H43MPIJ(c`Ln`?oFDo=aZ6J9 z!}LPq@?CG^wF*~SEoxzkamV}~XtVQ@MJA{Xw|kkMW%l4&r1BTo_#{_;!Nt`V*dJv= z`?gYf_~Gcm;rl|ay+0`Y5gVSm`9U>(g=VQViOmXq+x$^79f zb(C?GiC?MzD^gzyLqAU;GQXyOijds0LZgBW08rCk;X4^D6F3ipWZ~nsDdFTVnlT%rj9ksyES4S(uG@Q`T%I zbyJ5>^ECD7tQY)CXW8xen0jhf0fXlq&=ftT*zP(9VoTQZlILRUOyDl@G*xFb50 zYdZ9)k6nrGng1hRYqy$npE`;{qcvSkZqrid*?ZISgV`WwWK53VvHD=OM;zNt;-*Zb zUp`+u7D2rvRSCYzv0u{$l?M-IV(qVtly?#$3iHFuSKa!rWyT`n4bGkQj=)e>vye6W<%sC8qaB8@nWr z*CBpIa zYB9V%K5wdv@R;c_m;QC#kE1=CXWu1zZ`d-n_if#duJpc^T~K66hl61fw2X!+vu-xs ZsyLF`2oH_c9UGpG+&7SO%cz7c{{xQ<#0CHW literal 0 HcmV?d00001 diff --git a/public/3D/people/person_1_flipped.avif b/public/3D/people/person_1_flipped.avif new file mode 100644 index 0000000000000000000000000000000000000000..10e5d785cea21bdf375c3adcf3c7cd78de714660 GIT binary patch literal 2613 zcmYjSc|6o>7yr#<8CytPyM)Uf+t}ApmSjmG%95BFgCB!w>}2d?i;GZbY!~H$_y>`_9zGw$bp-uHYy&+|R!e80~*=Xw5l006k)<{yGb1%hq>&FJV2x+!^s zC^rjzB?AC}q~LtmWl=>Y#@Xf&PC z$KgFtbfq9j!2VMK0M4QUf^nxk>0K!xo`9zz8N_3JX?Py=!((YkGl&;$wD&ZJ3l9c^ z^voF;3`PTXRG^Y!6oj3g;=%ah2tF8GFs&jKV2Y%rXczrQ4*5T^FkP%kYi&q(0ti0Z z-gvD0>1Lpf0Wo-OzYsrvthb*wO#|XU6d^<#_3!wiAm01*9<-yh$6|m$V;BG^1B8*p z3;?hMZ&#H6Ie?X!AMJgsjx|!bkCPV3Sk|Ac&nfXcHwWR%mtJiQvqQHlDWVZYjjDgZ z`rxgOkdED7sJ5=7e@KUHMI2*!bVX!J<9;nQ4Et;fZCOi9T5m)1Pup&cjxEpD=;$Vg zIaMwWL3TyttW4j{BA{4o+)|p)7Zftt8?(A|xN4o65UoCLL`jyu#PMdA!)5yst)tI2wHY73GMCFPzDw=dH;N~F zV$u8~FK+Tw#;arfY^jUK1)f&}EQ8tcgY(emngzb4#>JX`mv>dsikj3`q@@vm#o6ay zf7q`R=ePryT7DMey`{!#3wXU$nr`T9!btOVL9k|UXqdls0mfK=KL(zwcwDI7gFE3Wv|LO zf10PvZ0ba83=_6pFj^`nxr2Xl^zofc6>W1=h^oB$PavT52?1$fH<7qMY{!;Wo^2uV z6QND~Uh7Z=-o_ChNnB3te9!eNqwd`N+{>hXeHr2B$cgLHnO(~&QPeoAzN2DTY-%T| zn5c6pGE~9T6Z1vPH+-o(gApuFjGM$b6;Io&Yl+_*rp6%Uj+%6uhN%%yG}*Rupv);? z!@%WEV3F{+(}zb1=~4^JNCxn?9KLI78g@f%sl0{2Tl+f4oTS3I0tJugE2xC>`;1pV zbKiR?DU@%Nr5E0uYvL>Pw@TI{2lZ%M+Kf zH(6~kt~LFpuZefaDhi6T#!=(bWz4HqQF&w!_(o_0OY6apbuKeDazh9^^cU9B?*d?#SGacey3N6aOg3$OM;FelPVov8$||Yg5ZM_TG$WbNdgriLM`6{Kl`PL#thF zQ$<}5_M5eKI6EEvw+tw(i+Li``!Zcml-l|b zcNLA0eP)LcdJ|n&)R;xUNP?_+eMnSGtzBcPNFvhVb^NBbN&o`MGA~*Jt+I6eMfx-I~uV7{}dA{fya;3j9|g&u*(q$dOd8)$d?KCINFCBY(%K7%$!otP z_4m%`xI5hW%BD>3xA1!Bw`9YvgNCESv8}{*a+s)+uu9<9<7lS3%I4y#O9XsTYW1Ik|3mktdt_4&K2|An3E>&745p)D`-k{839n%m5`Z18=DD&qd{CzX^(6i@{9{-#H&@23UVNeK{& z-4W(k{aW>!s-PrOwUDP6!+him>D8IvA4-d#^tHt+r@Sz~^kQn|XqBKnfn+kpa@Wh|1>uJh$<@e@pXNLlq%U|Sk?fgzW7ZSRgtGRI(D5fH2_iXeaLR-)BQf!w#2zOP0m!sXZTHKNEb?4^J#7y&;yhhe1RWTu-S}}j< zE-=2*p)7onqUR~P^Q3|`mZQ#jr2of7^;+S;>GbVEfSM${-#kCJQ&0QJSx^6U1{h3` zOZgGRC=w`6lDS+@RoHj8X+$)4sz#?USG|^k>0b`kMwHDP38~$F@ZH)aSW@>jc^dmW z<)Pr}^PC?O=H?urR&=Z8i=0`_w{87z5O+5N0nMm^=ubJl!*GU$J^_Q2K}%1Y*0Q~} zfU`dFPIpgshrGx`@{?0kS-+Rt^-@je}03d=U2I3KZ7&L%xC+LMiL%lEv zw22N>7XSc0^Fk33Cmh|RJ>0N_e_Q|nk3kau^-mCsas9W z000PZlA$lwn{*)1u$iNg}Sk=OuwMG$~7oSvdz^dC9!|HKzg#MkJpVJD6+ z!CT!6k8(fVbk&gR2Fjx$N5U7s$cYGlX-s|)p^rQ600s}#h!2l2# z$Pmdye>4U!Hw2Ljz{(`xiuPY-4Oc$oq({P33eW z{MB+QcA(^D>&0=!5D2-8O=-Sh+#~5P5Bc*O5A&P*FMIKB6yqj`SNDa#lqKI^UsD@H zP(?gO%k<=;+);-mHN~6mk)a`|F!1Ow2QK^v#z3IhS)TJN2cmRmnR3O}OPS;$Un;D| zJun@VmWcKpZ_)^oo20;HWmBJ&020+kq&ONav!>P*cME&rD5q&D{uWU)XpMK|-tXe& z#pgDz_7%pVlNSA$gSqO|YmK$`k#f&`?(A>tNB>eX0jh43Yxdd;Bh%YycriMq(sko1wPfs-oUfc}(SYrn1O1%?&>j ziPJ|4DugW-7<*||iSGlmEz;4~Wc%`M!mKJcNyIIJ;FC_{(WTrVJN7o(X8X+R2>#St z88Pu=uBa^cOhtg?XjJaz8m)L2@`xgTrKD|VbWWNhM_dGcELAKbu5cMJO@7O|*Rivu z{**xAN|l5si#GfYaU70eD=r|y><^kdV#U%Ik^bP1alsT|3MuUUgLqR<3$|xWkruUz zLVNetJM}}BZRM|$CG^+N_oe(!yigW1S1J6kg8$u3yY8{v8^UCyXxcsG5oi!1IHzS7 zw8yK>t@va54t&1Pn{Dao5f38)T+Iq&o-EbQZDZmx9pc&pO4<$x z4mAHhG;3ShkTZI`XP)cR5_O>V&YW#=3l|pwl#;G^mx-DYpHBSk-jorSvk_;UKK~b} z3)dm2n6TW`wmKq0bX60!o4u!F(xH<_tJ%O+fX5 zHnn=HwwO@XSZ_1X3=;N+Ph2aATHL6{=CNX1l1qMD#6xvTh|av5h`B=wip}B!UT4j` zG8Xu%dkK&((q~{Kv$X211$I-S3MTdDcT|;n4nI@hw5jUCN&LcbS5XG;SW4ROgnFz5 z?Kn%bs%o?B7w9hV*r3lj46`9SP!m`N{uQPxjHveg%=LuqE|ugvlm0?!Tp&LR4G_$`m(?v|OM2-B zP{fH?|KQcL6c0O7l}zer6icABgPtEgY8&fq(3xg=snGH~ki=qfEh5(PH^$$?q_2F; zj-npn_fp%`rXg-fm)x%Ri?44li(k6EI&fvPJJx`?L6`Q4^fBv?YuHQJ>wFdXxLBkc zq;r2FM;HKx{chpDd)ZPue*JUtzOESbiuDFJok zMsC=;NADH`%FU){Q#064BJ;Y51%zAwZViu1`e$Y~Aj$Nyen2t7d z`g#c*Jv5bh-;e*5pgL@3{}yCAMmb{o*B1E+|DwTg=a# z`KwAw4V!$LJSjJW@`19^B}G+*&s8alc#Q#<;P}ko;p*OXi^u<2o{-Nt4pW|M{@HT7 z4k7AGng5ouY4n~86`+xRsA_@_2a=UHJ1Y&u zx=y~gtAACyIDjAk;Wg6BxHnhlzZG;B{d_`d<}^`$C8@twVp9_p&#dJnQDTL5T+cd~ zu-84(pH)QNT|4NTmLDyfSh%tCH^X8gON!k9j6;zQFWx~5mvhW*@vX}`Ot@dL{F{CcW#j{$hs_?Tk+ zuybp7>CuG4CmDny=fI$#$QcI&Q}(KxEGX-&Igw9vo3jsULc3AoC+|EOyiii0@0_3Q z>6I<7w0`ZJi-l&tWh2#7@5`TcFO=-ZLYT1c`O)cDkx`^MYYkP+Dmy=Pv(Zw1`r{JP zL#bv$G(?aQ_(V#TN&Y)bqD}(NA#|2q)|Ikx#jq5&ZGXKr?f|)rd{M1CToZlVXyPf) zp(W7yhe@g6>~Q^dik1*>jLZd8f3}%h!*08k>#ct2>l7d93A3=z%G4}~^Z06_X-lPu zY}rq>LQ_|`*zDLqU{vcwqI1-g+5y|rAN`h^Vb0u|Nzv0{lr~01=(s8?UujO`toEjl z-4Qi%CWhM)@!5~I1e-1hBi`_@AyoLB#?Ddb+HlBD@jhQY>n z67PAis1Syk6i)wqu%3QJz|71LPUUG37XTC^{Tfg?9^_ZvL#go*m&G^rJlo~c@5(_e z>QAFxtj~FB)_6To3CXrfs=9TM{yp`j9&bLaCFs8EXK$6(ph&2%S)GFe&kd+{@SkG7 zD^-t~;1Wt#tAs{DQybPnvVS+)fzk^eFH-c3NAvgf3e$v%hGk`o`Y(pCo-pySq zH?fr{)0<#hOh8=ZOOG&Q%J8z07$3JSeaN2Wy`$hLImE9voh7M|iffX~J7mlW?rOdR zz14a*Ip>Zqz6a$Zy{C`_5akR9qt%|l;N~&5t;IYdKWm)UMLR_%#+2JrLRg%Y$rFpH z?Z5M4;2lLvMzvJv;SAJzi&%IcK0E$sFz-KhkolU!7{7}d992|L4cyiSahuR{cke4# SlzjZo(WWrVa)nO*@_zx+)K44$ literal 0 HcmV?d00001 diff --git a/public/3D/people/person_2_flipped.avif b/public/3D/people/person_2_flipped.avif new file mode 100644 index 0000000000000000000000000000000000000000..bb19ace726db3a0b1c9e4ca819c906335b0d6151 GIT binary patch literal 2805 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 + + + + + + + + + diff --git a/public/3D/shapes/column.svg b/public/3D/shapes/column.svg new file mode 100644 index 0000000000..ac0aa6ec38 --- /dev/null +++ b/public/3D/shapes/column.svg @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/public/3D/shapes/track.svg b/public/3D/shapes/track.svg new file mode 100644 index 0000000000..0ab2fc64c5 --- /dev/null +++ b/public/3D/shapes/track.svg @@ -0,0 +1,19 @@ + + + + + + + diff --git a/public/3D/shapes/z_axis.svg b/public/3D/shapes/z_axis.svg new file mode 100644 index 0000000000..a000644e7d --- /dev/null +++ b/public/3D/shapes/z_axis.svg @@ -0,0 +1,15 @@ + + + + + + diff --git a/public/3D/textures/aluminum.avif b/public/3D/textures/aluminum.avif new file mode 100644 index 0000000000000000000000000000000000000000..ac7ddd83b1f2c90919553d47c5c9e8e1e1a3329e GIT binary patch literal 7692 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 literal 0 HcmV?d00001 diff --git a/public/3D/textures/cloud.avif b/public/3D/textures/cloud.avif new file mode 100644 index 0000000000000000000000000000000000000000..73f477694e588a25c40ae2aae3f44b09cfbd4ab1 GIT binary patch literal 11157 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 ZQ#~yomV3rajhIMNPpypTGf{8P{{XBYEHeNA literal 0 HcmV?d00001 diff --git a/public/3D/textures/concrete.avif b/public/3D/textures/concrete.avif new file mode 100644 index 0000000000000000000000000000000000000000..4a7f72aa503dd823ac6be0dfd9d7ee0208269b73 GIT binary patch literal 84203 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

    D(Rr6`C4sceGm|pta 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 literal 0 HcmV?d00001 diff --git a/public/3D/textures/screen.avif b/public/3D/textures/screen.avif new file mode 100644 index 0000000000000000000000000000000000000000..49af89a846b501f7b4552a8a4610fb7e80b7d96f GIT binary patch literal 6101 zcmah|bzD^6x4m=-NJ)2xG(&@Qmvqa(5CaShEhya}jesC6Atfc!-QA%gAky6u${Y0e zd*AoR`@Og4bIw_JowfHpckMF(0Fc>w_`tzlP+I^I_bUu)%Lf3c1TY&9@I8kJdV7eI z+g}I(aHzG%zwy6UJUG+?_U8c!F$+SST&(Y(*#19due8BzAeK7q+sQUkAhyoF; z2o&o4=LmoFj}Q+we-aT{U@u<8fdJqi60!3y5=9#dcY^}}%3~b)>r?dMX*y?{^YkN0DH;@Gp8YT$L8BrhE=r4xc;@e2(Zf0C>7Ni^1SFc7G;W zF>9zbT+H3a-NOdvE{4!RouFVhA2F~K-2Tt!{eN|-pm5k<9}q48NGL&J=m0WGFbcvq zfCB1f^Y?!U0CJR7j^!#M_DF{#Rj|Y4QAzf{o;h{fm z;V@+gL};-7Xru#!^7xNf5V{~tfuMeZR8c-iIKG?Yy9Iy1X z!w9krS$gS#dH9p**5Fm5uDCfTJ@0}+OK=A(fKv~2T+a(g8V{q5MnP6nKs1wgY1u^r zPHa5brsk$w*8-SXh1{GEde7}qBERCH=+nk8D1U8jo=xY%VpykpdaH8v?w!OlcG+)_3NUK3IFhV!<;Sl4wNSnhIWgj zK-F=vMeb#g#!kvd!vDqno#&zQ_L@g48^Dy_qwWmZ%x*Sef8cd=N2)jNIDn?oGaCM~?nF{jGs zchlZJewz@dLZnnQtt59YO;HP56d*`#-zbj##D`OxtIl&`zZEQJ)NgzlbBj9SLHEVl zif_pg?`|=_bJCo@cbaKp9B$(!Y?Jv8qV+W1?wxmI zn0}u#HY(qVN6+@WA)H$f=_VO0j;{3N<7u5U)WY~pW1Um@B`g@@(B050^WsNH=9+b8YUaiH1 z@$5H3JTn-&bB9~M0eujtmiNKphODm^{$$&xRzgA?e&Y{Oayd2y-b6`za=rZbBYCHS zhogx_@MY}jcS4i2ed#q3G{zIUoa=Y%OhQ7@n`xLim+ZoZ%Z{?Qw38oQXktFePd(@_ zeH6N9ogDg%`DSujkOOm@AW(!=6OAh@z!--b2!cXY5<->yV|jle zwFRo~f2>lRtNKixFCfOM&mT9GQ%;eJ=;`xX5Hj}81bw!vL?Es7>FfNjAzJX1&S#y! zWExlfWYKD!8QmW$HHT?!ak$WDe|-xJ$)v+*MWt9V$C<^UM1Jp3Lp8M~C$8tk9N6oF zkHdH}VAEfSSsy`vRf1{AuV<`-)N_%1=0Ff@~G$E;3eU z;CE6aae%nkCR+EHdFl6Fvls)}>)+;^*Zp?P>EZADpB%%L2{^IHm*43}8F8Iqdj$zD zWbd2g^;1E+Y(NG?lM_O_X9Bb>M_Oo2S*@F+YDViERKqnx%P)#t1efuD$2bWRSeK!% zN0^vVJL=n)`W;jx<#FE_9+u~|Zaz~Mtg54AtU3cF3>2Ki?V(@@(zNQc)4yf;WSi)V z&x6+7w@j8wKbRSh*@eY?^W-hHWF4Hk9L>boL2C9(@`vmB!3b}h4cboKbFGkcr?N=# z?d4);ZoDqklunA2S-?Inb1B~BK-AR>zNXx*O)70kcI>A^W+Ty4@Udv6{^*TwwQ``H zdKf>l!~1s2+l#eUXbciQ-p^WzHf0ZRAFkW>^Q(T#Tg|>&1u?}79?Q__C<|)Cz)cv zn4fr4AuM}FsS?e*kR)Y*(g=I@#Qy3iT;*x2LOB$&aiqT4SbJe;>nGoF_DYqttfNSY zbJ*r%L6zC}K5-2l6WYl#7=!{HvhfgH%t)dSk8<+5V%@=(qORH%q&u@Xbkr{zIVgKY zv@iR}X7w}0hK^Lz-j)kn-7ERd6}q3(j%0*MYMcAo7}v%=D?F&XuqQv%8Rj-VCeRE0 zL`vUPJ4=PT@oCDo_`9;uVX}<+ggv7Do*Tw9hE-ef2Gn6uSL>sofU_~t9 zN=fDm)NrVOko(O_NRyfjsG6U^=6If^phwt{Wq#qt}d&47H^XaxC^A zhp#MOtE}0zlzr2JMua^X+tWd>Si^B`Bo;Xm z-uxku+%9jtvP!R@=kTghGRYNeVorjS9cgNps?8}qQ{Y7h_AD9!ZnpTsCz^8WqT!Q# zi}NL=A$S2Xv#@M+X$QrHgbS;@be(8R6B>k(OQ$&R4({)J*K1@j=^yve|L%Q|2i2Vi zk?A%F)8SX_K=gptn{06m$D)Ws=SODt{*$^Xr(}ylb;>UkfzIZ}MfiloNksD9-VJlk z9y|i5V*24#9; z;&t~0@RLA~QHGt#i}se2V+um$E&4mH& z%XVZlPVaiJN^ccyvy9-1vl%O2FjqV-;rPM{YuFq>K_$aYc)AqnMQgY6Zm9Z;8idMQ ztIM5Als121aoYheNyheC+~RecJKej)ilua{;IA^Wlpi!m&?zmuLSJc9vqqeA+kUVH z+ir454+dDMv4$#fnS67ShyD&Z(Urxf#OTo@Y?7lg(r7TqHB%!EN>jh$zS+!RMM`T} zGg+wft|FvUKyB@*!m20GwlWPZ1T)sm9PVtRp9mFe*C$pU%K2~mQA)|IvMJN|Yncb} z|0G8u8RLlnTh;UQ6;ere%vrtA+Dbk1FB1?83Hgk!i|iBm*t2Tk!#bt8ZvdrE^Jw4P z05?h1dT9d#70BPKLd+0VUtz~ATit2EdQo_-vp+YH02O~A<}#inG~HQ1#^M_1X9aij zCHK$eJk2t27j62vFLhYwyEE|+B8L5JHp_$u#QbpPS8{?{^^cWji!qpH3y0D@dxmRC zo6Twq<+{T#kBxiyMX4RXo9>FGguR&0R~*(A6L17ptW--Hn8WtDS4PC_ti1?m!Z0FM zChR__MY+)oc%V#avhU)oE>rtmT@cVeEVWun(`$?h%)cWr@oU37ihdyAnth5(At%e+ zj#|T8P`VzK8|5_BdCTRS(mqQWNcF>{ak?5L(V#)k5v@hgYUBHs`Wy}5wc#i50qM&Z z?tL?6u4E4gC?I6{RpOtBvq?KWl+rki^s0v6PBrWJ68~vDQWxe&ei<3@Am_O8SKeEr z$mye0evj#H9N+i_q-}zK6C*$U>CP=!Rpd@e7ZmZLTQoX}Y54OO1@55jCO(&?@R9LO zIjlR2wl>cRX(s6??mg8o(6Q=83r07vMUL}?55mqyiUpEzXQoyaP{?M+*dGtOB771E zT;)b}5L74fJbPxRt0#6@MwVw4rFi47ZZX-llDX9TS_i`cwfjc%INg##d}7+5OEdSI zBM+l#WU#->)+L_StmI3crJZjd@fQ+v8ySbkROAHDg~2qG;dftr61H+W2nT`KdO6;sRwe;FqU8=^!Mps`qNcWGal=(8-jGKcsnwO8yC{bTk=x%mq0KXM<40X6{QoT8p1s!yk0adb%tGF{pMw ze|%H)S?EFN^_pq#39XXJGnq^SepHGzii#u@CmkEyEweQ&fx!p70!|{Udi#A;T*lA& zn71=F)?PRSpQev%C>;{99WVqg3SW?eM&xwqyamIsn9r}!DX7Qy1Wq2sOjZkA{p6MHt>?-_NYm>6$k6d0kh(Wb>g!MFYiW zqDo4wvH}TB0eoj(s_&7>IkxcF<+A2_tFV<+NTr&pUfhm3IwYyxk~rrLZJ!~5@HKO= zPbpPU!2CJ*cP4Fgxk{F5BIANmf}O8mr$wVU(i zW)vUB6ZeH;1C?3Mxp>#4)1u4`DN&6&KthF`(Y^4Z@?NW`Ze!UACDicKt|m16z@Wwe z3~9Y&Nxh@s?-sJGw^avDQKl|8C%9hrl#y9lwd&c5wFvcU*<2AR| ziJQ>XW%lzfQ*7yU1z#yfG{Cc8ASZu4R?lnDy<*Zp~Ux z#Wd<6t=}Lo(TpUqUTUwqR>r=U^?K+|S&&q`9H@9|LAiRU<%#aOhOq|YG3mcfc_Ja7 zC@LTDGPLVN+uw_t^C%E{7$VNi7ZS|YOnELI)-ku>J^YgUi}`y9=61Lah;pQ9}) zhmMu!MldOxj$#M1pd!;=`z~@Rn?v|_d<_eeopAIXB<1Gb-MTTI)=c1HIPYsftB51E zo_L?q-j6eWFza*0)Q8SZe(U-Zq-ESEvD?oI0QD4^CgwEJ7)kKt%$=~i{*fUob3G$o zg#$1 z*(l+zFF?%@mvjEK`s=K+Rf=0w(OM~qM5M5I0fBI1jkB8djxeORb;}MSrHWSrBal@} zy`0f_5wodKf38H!h6mT8yJXj;476CV<5oosmn>km*P5rKv-OoX6Gg~uM4J#el|lB1 zvBV|uD*my-vqmoBGP@Z8cRsDxzvD1V>%4X_&TLm^;s&T<&92f_d<`eQd6J9?vMpTR zRDWP&c9FO=DRYZZ~)E+u3qIak}`x!k#_YLo?23kHXxa>o#9GwtWt$$nymvpBae!vQ` zaQV*8!JU>X%yS~LnGb%~vX>vUu9RZ^wE@pg8O-Ff?J6^KcE@rX0IwXhv2sQ=Ic6^O z){L;qo>JKD1-WVm_(7E&=VP4Y_Y`+y3j(_-QJvkr&B z`!DUwXL6~8#5Q}2MJuVnlCz>7UpPw`Y;;<3NX1CJF9!1(b;qU+7sGI+2yar-?KCq#-+^8pQv^`-cCS`J;tZAIgb3T^XGI&4&*{~k zF_1KT$qIGXm1lO*4fqu+P4OK!BP}jjWMSmzF_nmS29KJ5vG9Ih`!9i)yN{P_wz<+e#y6zU)uCuwR#(MV>7(CT+h?h&^dcC z6Hv%zI-WL0{Pd1phTsh(`Z}PvQgXSic*0YUxl&GM8kF846fD6*tbVXzEc)d)eQ(*R z3s#2NL&sDPKBqJs Date: Thu, 8 Aug 2024 15:26:27 -0700 Subject: [PATCH 11/54] add override option to coverage task --- lib/tasks/coverage.rake | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/tasks/coverage.rake b/lib/tasks/coverage.rake index 4925f4d80c..e3da5f8f2c 100644 --- a/lib/tasks/coverage.rake +++ b/lib/tasks/coverage.rake @@ -11,9 +11,13 @@ BASE_BRANCHES = ["main", "staging"] CURRENT_COMMIT = ENV.fetch("CIRCLE_SHA1", "") CSS_SELECTOR = ".fraction" FRACTION_DELIM = "/" +REMOTE_COVERAGE_OVERRIDE = ENV.fetch('REMOTE_COVERAGE_OVERRIDE', '0').to_f # Fetch JSON over HTTP. Rails probably already has a helper for this :shrug: def open_json(url) + if REMOTE_COVERAGE_OVERRIDE > 0 + return {} + end begin JSON.parse(URI.parse(url).open.read) rescue *[OpenURI::HTTPError, SocketError] => exception @@ -272,6 +276,16 @@ namespace :coverage do if remote[:percent].nil? puts "Error getting coveralls data." + puts "Checking for override." + percent = REMOTE_COVERAGE_OVERRIDE + if percent > 0 + puts "Using override of #{percent}% for remote coverage value." + remote = { branch: "N/A", commit: "", percent: percent } + end + end + + if remote[:percent].nil? + puts "No override available." puts "Using 100 instead of nil for remote coverage value." remote = { branch: "N/A", commit: "", percent: 100 } end From 48cf8a3bfa0f30ce37441b2022678df6c55769a8 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 9 Aug 2024 16:21:33 -0700 Subject: [PATCH 12/54] fix 3D asset bugs --- frontend/promo/promo.tsx | 2 ++ frontend/three_d_garden/bed.tsx | 15 ++++++++------- frontend/three_d_garden/bot.tsx | 2 +- frontend/three_d_garden/constants.ts | 6 +++--- frontend/three_d_garden/desk.tsx | 18 +++++++++--------- frontend/three_d_garden/garden.tsx | 12 ++++++------ frontend/three_d_garden/lab.tsx | 16 ++++++++-------- frontend/three_d_garden/power_supply.tsx | 10 +++++----- frontend/three_d_garden/solar.tsx | 4 ++-- frontend/three_d_garden/utilities_post.tsx | 12 ++++++------ frontend/three_d_garden/x_axis_water_tube.tsx | 8 ++++++-- 11 files changed, 56 insertions(+), 49 deletions(-) diff --git a/frontend/promo/promo.tsx b/frontend/promo/promo.tsx index 024f028753..a214c993c6 100644 --- a/frontend/promo/promo.tsx +++ b/frontend/promo/promo.tsx @@ -8,6 +8,7 @@ import { PrivateOverlay, PublicOverlay, ToolTip, } from "../three_d_garden/config_overlays"; import { ASSETS } from "../three_d_garden/constants"; +import { getFocusFromUrlParams } from "../three_d_garden/zoom_beacons_constants"; export const Promo = () => { const [config, setConfig] = React.useState(INITIAL); @@ -22,6 +23,7 @@ export const Promo = () => { React.useEffect(() => { setConfig(modifyConfigsFromUrlParams(config)); + setActiveFocus(getFocusFromUrlParams()); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); // intentionally empty dependency array diff --git a/frontend/three_d_garden/bed.tsx b/frontend/three_d_garden/bed.tsx index 423a34a444..f543b5a82c 100644 --- a/frontend/three_d_garden/bed.tsx +++ b/frontend/three_d_garden/bed.tsx @@ -80,15 +80,16 @@ export const Bed = (props: BedProps) => { ]; const casterHeight = legSize * 1.375; - const woodTexture = useTexture(ASSETS.textures.wood); - woodTexture.wrapS = RepeatWrapping; - woodTexture.wrapT = RepeatWrapping; - woodTexture.repeat.set(0.0003, 0.003); - const legWoodTexture = useTexture(ASSETS.textures.wood); + const bedWoodTexture = useTexture(ASSETS.textures.wood + "?=bedWood"); + bedWoodTexture.wrapS = RepeatWrapping; + bedWoodTexture.wrapT = RepeatWrapping; + bedWoodTexture.rotation = Math.PI / 2; + bedWoodTexture.repeat.set(0.003, 0.0003); + const legWoodTexture = useTexture(ASSETS.textures.wood + "?=legWood"); legWoodTexture.wrapS = RepeatWrapping; legWoodTexture.wrapT = RepeatWrapping; legWoodTexture.repeat.set(0.02, 0.05); - const soilTexture = useTexture(ASSETS.textures.soil); + const soilTexture = useTexture(ASSETS.textures.soil + "?=soil"); soilTexture.wrapS = RepeatWrapping; soilTexture.wrapT = RepeatWrapping; soilTexture.repeat.set(0.00034, 0.00068); @@ -130,7 +131,7 @@ export const Bed = (props: BedProps) => { return - + diff --git a/frontend/three_d_garden/bot.tsx b/frontend/three_d_garden/bot.tsx index e1a0336573..7272d66add 100644 --- a/frontend/three_d_garden/bot.tsx +++ b/frontend/three_d_garden/bot.tsx @@ -257,7 +257,7 @@ export const Bot = (props: FarmbotModelProps) => { }); } }); - const aluminumTexture = useTexture(ASSETS.textures.aluminum); + const aluminumTexture = useTexture(ASSETS.textures.aluminum + "?=bot"); aluminumTexture.wrapS = RepeatWrapping; aluminumTexture.wrapT = RepeatWrapping; aluminumTexture.repeat.set(0.01, 0.0003); diff --git a/frontend/three_d_garden/constants.ts b/frontend/three_d_garden/constants.ts index 4a435e44cd..4a62573ae6 100644 --- a/frontend/three_d_garden/constants.ts +++ b/frontend/three_d_garden/constants.ts @@ -94,9 +94,9 @@ export const ASSETS = { cameraMountHalf: "/3D/models/camera_mount_half.glb", solenoid: "/3D/models/solenoid.glb", xAxisCCMount: "/3D/models/x_axis_cc_mount.glb", - box: "/3d/models/box.glb", - btn: "/3d/models/push_button.glb", - led: "/3d/models/led_indicator.glb", + box: "/3D/models/box.glb", + btn: "/3D/models/push_button.glb", + led: "/3D/models/led_indicator.glb", }, other: { gear: "/app-resources/img/icons/settings.svg", diff --git a/frontend/three_d_garden/desk.tsx b/frontend/three_d_garden/desk.tsx index bcedb8652e..fe129c5acf 100644 --- a/frontend/three_d_garden/desk.tsx +++ b/frontend/three_d_garden/desk.tsx @@ -21,18 +21,18 @@ const deskWoodDarkness = "#666"; export const Desk = (props: DeskProps) => { const { config } = props; const zGround = -config.bedZOffset - config.bedHeight; - const woodTexture = useTexture(ASSETS.textures.wood); - woodTexture.wrapS = RepeatWrapping; - woodTexture.wrapT = RepeatWrapping; - woodTexture.repeat.set(0.3, 0.3); - const screenTexture = useTexture(ASSETS.textures.screen); + const deskWoodTexture = useTexture(ASSETS.textures.wood + "?=desk"); + deskWoodTexture.wrapS = RepeatWrapping; + deskWoodTexture.wrapT = RepeatWrapping; + deskWoodTexture.repeat.set(0.3, 0.3); + const screenTexture = useTexture(ASSETS.textures.screen + "?=screen"); screenTexture.rotation = Math.PI / 2; screenTexture.wrapT = RepeatWrapping; return { receiveShadow={true} args={[deskDepth, deskWidth, 50]} position={[0, 0, deskHeight + 25]}> - + {[ @@ -57,7 +57,7 @@ export const Desk = (props: DeskProps) => { receiveShadow={true} args={[deskLegWidth, deskLegWidth, deskHeight]} position={[xOffset, yOffset, deskHeight / 2]}> - + )} { }, }); - const grassTexture = useTexture(ASSETS.textures.grass); + const grassTexture = useTexture(ASSETS.textures.grass + "?=grass"); grassTexture.wrapS = RepeatWrapping; grassTexture.wrapT = RepeatWrapping; grassTexture.repeat.set(24, 24); - const concreteTexture = useTexture(ASSETS.textures.concrete); - concreteTexture.wrapS = RepeatWrapping; - concreteTexture.wrapT = RepeatWrapping; - concreteTexture.repeat.set(16, 24); + const labFloorTexture = useTexture(ASSETS.textures.concrete + "?=labFloor"); + labFloorTexture.wrapS = RepeatWrapping; + labFloorTexture.wrapT = RepeatWrapping; + labFloorTexture.repeat.set(16, 24); const Ground = ({ children }: { children: React.ReactElement }) => { diff --git a/frontend/three_d_garden/lab.tsx b/frontend/three_d_garden/lab.tsx index e7485bcf01..be7b55b3f8 100644 --- a/frontend/three_d_garden/lab.tsx +++ b/frontend/three_d_garden/lab.tsx @@ -37,17 +37,17 @@ export const Lab = (props: LabProps) => { const { config } = props; const groundZ = -config.bedZOffset - config.bedHeight; - const woodTexture = useTexture(ASSETS.textures.wood); - woodTexture.wrapS = RepeatWrapping; - woodTexture.wrapT = RepeatWrapping; - woodTexture.repeat.set(0.3, 0.3); + const shelfWoodTexture = useTexture(ASSETS.textures.wood + "?=shelf"); + shelfWoodTexture.wrapS = RepeatWrapping; + shelfWoodTexture.wrapT = RepeatWrapping; + shelfWoodTexture.repeat.set(0.3, 0.3); return { shelfHeight, ]}> @@ -98,8 +98,8 @@ export const Lab = (props: LabProps) => { { } = props.config; const zGround = -bedHeight - bedZOffset; - const aluminumTexture = useTexture(ASSETS.textures.aluminum); - aluminumTexture.wrapS = RepeatWrapping; - aluminumTexture.wrapT = RepeatWrapping; - aluminumTexture.repeat.set(0.01, 0.003); + const powerSupplyTexture = useTexture(ASSETS.textures.aluminum + "?=powerSupply"); + powerSupplyTexture.wrapS = RepeatWrapping; + powerSupplyTexture.wrapT = RepeatWrapping; + powerSupplyTexture.repeat.set(0.01, 0.003); const combinedCablePath = new THREE.CurvePath(); @@ -145,7 +145,7 @@ export const PowerSupply = (props: PowerSupplyProps) => { threeSpace(-21, bedWidthOuter), -90 - ccSupportSize, ]}> - + { visible={config.solar || props.activeFocus == "What you need to provide"}> { zGround + 20, ], [ - threeSpace(2500, -config.bedLengthOuter), + threeSpace(config.bedLengthOuter + 2500, config.bedLengthOuter), threeSpace(750, config.bedWidthOuter), zGround + 20, ]]} diff --git a/frontend/three_d_garden/utilities_post.tsx b/frontend/three_d_garden/utilities_post.tsx index 264a45cbde..8e50f61dca 100644 --- a/frontend/three_d_garden/utilities_post.tsx +++ b/frontend/three_d_garden/utilities_post.tsx @@ -41,22 +41,22 @@ export const UtilitiesPost = (props: UtilitiesPostProps) => { new THREE.Vector3(barbX, barbY, barbZ), ); - const woodTexture = useTexture(ASSETS.textures.wood); - woodTexture.wrapS = RepeatWrapping; - woodTexture.wrapT = RepeatWrapping; - woodTexture.repeat.set(0.02, 0.05); + const postWoodTexture = useTexture(ASSETS.textures.wood + "?=post"); + postWoodTexture.wrapS = RepeatWrapping; + postWoodTexture.wrapT = RepeatWrapping; + postWoodTexture.repeat.set(0.02, 0.05); return - + { const { config } = props; const groundZ = -config.bedHeight - config.bedZOffset; - const barbX = 400; + const barbX = threeSpace(config.bedLengthOuter / 2 + 400, config.bedLengthOuter); const barbY = threeSpace(-50, config.bedWidthOuter); const barbZ = groundZ + 20; const tubePath = easyCubicBezierCurve3( - [-20, threeSpace(-30, config.bedWidthOuter), -140], + [ + threeSpace(config.bedLengthOuter / 2 - 20, config.bedLengthOuter), + threeSpace(-30, config.bedWidthOuter), + -140, + ], [300, 0, 0], [-300, 0, 0], [barbX, barbY, barbZ], From b3723da172360dd1ae477b82e21b991157c5920a Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 9 Aug 2024 16:52:27 -0700 Subject: [PATCH 13/54] override cheerio npm --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 8cdc1e121f..302c5e082c 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "author": "farmbot.io", "license": "MIT", "overrides": { + "cheerio": "1.0.0-rc.12", "@parcel/watcher": "2.1.0" }, "dependencies": { From 09fdaafefd358e87c76efe4cce12e73c49bcc62c Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 14 Aug 2024 09:49:41 -0700 Subject: [PATCH 14/54] upgrade deps --- Gemfile.lock | 100 ++++++++---------- config/application.rb | 1 - frontend/css/farm_designer/farm_designer.scss | 26 ++--- .../farm_designer/farm_designer_panels.scss | 28 ++--- frontend/css/farm_designer/farm_events.scss | 6 +- frontend/css/global.scss | 30 +++--- frontend/css/navbar.scss | 8 +- frontend/css/sequences.scss | 16 +-- frontend/css/static_pages.scss | 4 +- frontend/css/status_ticker.scss | 2 +- frontend/css/steps.scss | 2 +- frontend/css/widgets.scss | 8 +- frontend/settings/pin_bindings/model.tsx | 12 +-- lib/tasks/fe.rake | 10 ++ package.json | 48 ++++----- 15 files changed, 150 insertions(+), 151 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 46823d9d64..8124fa81a7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -86,20 +86,20 @@ GEM activesupport climate_control (1.2.0) coderay (1.1.3) - concurrent-ruby (1.3.3) + concurrent-ruby (1.3.4) crack (1.0.0) bigdecimal rexml crass (1.0.6) database_cleaner (2.0.2) database_cleaner-active_record (>= 2, < 3) - database_cleaner-active_record (2.1.0) + database_cleaner-active_record (2.2.0) activerecord (>= 5.a) database_cleaner-core (~> 2.0.0) database_cleaner-core (2.0.1) date (3.3.4) declarative (0.0.20) - delayed_job (4.1.11) + delayed_job (4.1.12) activesupport (>= 3.0, < 8.0) delayed_job_active_record (4.1.8) activerecord (>= 3.0, < 8.0) @@ -115,7 +115,7 @@ GEM rake (>= 12.0.0, < 14.0.0) discard (1.3.0) activerecord (>= 4.2, < 8) - docile (1.4.0) + docile (1.4.1) e2mmap (0.1.0) erubi (1.13.0) factory_bot (6.4.6) @@ -123,48 +123,30 @@ GEM factory_bot_rails (6.4.3) factory_bot (~> 6.4) railties (>= 5.0.0) - faker (3.4.1) + faker (3.4.2) i18n (>= 1.8.11, < 2) - faraday (1.10.3) - faraday-em_http (~> 1.0) - faraday-em_synchrony (~> 1.0) - faraday-excon (~> 1.1) - faraday-httpclient (~> 1.0) - faraday-multipart (~> 1.0) - faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.0) - faraday-patron (~> 1.0) - faraday-rack (~> 1.0) - faraday-retry (~> 1.0) - ruby2_keywords (>= 0.0.4) - faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) - faraday-excon (1.1.0) - faraday-httpclient (1.0.1) - faraday-multipart (1.0.4) - multipart-post (~> 2) - faraday-net_http (1.0.1) - faraday-net_http_persistent (1.2.0) - faraday-patron (1.0.0) - faraday-rack (1.0.0) - faraday-retry (1.0.3) - faraday_middleware (1.2.0) - faraday (~> 1.0) + faraday (2.10.1) + faraday-net_http (>= 2.0, < 3.2) + logger + faraday-follow_redirects (0.3.0) + faraday (>= 1, < 3) + faraday-net_http (3.1.1) + net-http globalid (1.2.1) activesupport (>= 6.1) - google-apis-core (0.15.0) + google-apis-core (0.15.1) addressable (~> 2.5, >= 2.5.1) googleauth (~> 1.9) - httpclient (>= 2.8.1, < 3.a) + httpclient (>= 2.8.3, < 3.a) mini_mime (~> 1.0) + mutex_m representable (~> 3.0) retriable (>= 2.0, < 4.a) - rexml google-apis-iamcredentials_v1 (0.21.0) google-apis-core (>= 0.15.0, < 2.a) - google-apis-storage_v1 (0.40.0) + google-apis-storage_v1 (0.42.0) google-apis-core (>= 0.15.0, < 2.a) - google-cloud-core (1.7.0) + google-cloud-core (1.7.1) google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) google-cloud-env (2.1.1) @@ -186,7 +168,7 @@ GEM multi_json (~> 1.11) os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) - hashdiff (1.1.0) + hashdiff (1.1.1) hashie (4.1.0) httpclient (2.8.3) i18n (1.14.5) @@ -206,6 +188,7 @@ GEM activerecord kaminari-core (= 1.2.2) kaminari-core (1.2.2) + logger (1.6.0) lograge (0.14.0) actionpack (>= 4) activesupport (>= 4) @@ -222,11 +205,13 @@ GEM marcel (1.0.4) method_source (1.1.0) mini_mime (1.1.5) - minitest (5.24.1) + minitest (5.25.0) multi_json (1.15.0) - multipart-post (2.4.1) mutations (0.9.1) activesupport + mutex_m (0.2.0) + net-http (0.4.1) + uri net-imap (0.4.14) date net-protocol @@ -237,30 +222,31 @@ GEM net-smtp (0.5.0) net-protocol nio4r (2.7.3) - nokogiri (1.16.6-x86_64-linux) + nokogiri (1.16.7-x86_64-linux) racc (~> 1.4) orm_adapter (0.5.0) os (1.1.4) - parser (3.3.3.0) + parser (3.3.4.2) ast (~> 2.4.1) racc - passenger (6.0.22) - rack - rake (>= 0.8.1) - pg (1.5.6) + passenger (6.0.23) + rack (>= 1.6.13) + rackup + rake (>= 12.3.3) + pg (1.5.7) pry (0.14.2) coderay (~> 1.1) method_source (~> 1.0) pry-rails (0.3.11) pry (>= 0.13.0) - public_suffix (6.0.0) - rabbitmq_http_api_client (2.2.0) + public_suffix (6.0.1) + rabbitmq_http_api_client (3.0.0) addressable (~> 2.7) - faraday (~> 1.3) - faraday_middleware (~> 1.2) + faraday (~> 2.9) + faraday-follow_redirects (~> 0.3) hashie (~> 4.1) multi_json (~> 1.15) - racc (1.8.0) + racc (1.8.1) rack (2.2.9) rack-attack (6.7.0) rack (>= 1.0, < 4) @@ -268,6 +254,9 @@ GEM rack (>= 2.0.0) rack-test (2.1.0) rack (>= 1.3) + rackup (1.0.0) + rack (< 3) + webrick rails (6.1.7.8) actioncable (= 6.1.7.8) actionmailbox (= 6.1.7.8) @@ -314,7 +303,7 @@ GEM actionpack (>= 5.2) railties (>= 5.2) retriable (3.1.2) - rexml (3.3.1) + rexml (3.3.5) strscan rollbar (3.5.2) rspec (3.13.0) @@ -340,13 +329,12 @@ GEM rspec-support (3.13.1) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) - ruby2_keywords (0.0.5) scenic (1.8.0) activerecord (>= 4.0.0) railties (>= 4.0.0) scout_apm (5.3.8) parser - secure_headers (6.5.0) + secure_headers (6.7.0) set (1.1.0) signet (0.19.0) addressable (~> 2.8) @@ -368,7 +356,7 @@ GEM sprockets (4.2.1) concurrent-ruby (~> 1.0) rack (>= 2.2.4, < 4) - sprockets-rails (3.5.1) + sprockets-rails (3.5.2) actionpack (>= 6.1) activesupport (>= 6.1) sprockets (>= 3.0.0) @@ -381,6 +369,7 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) + uri (0.13.0) valid_url (0.0.4) addressable rails @@ -390,10 +379,11 @@ GEM addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) + webrick (1.8.1) websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) - zeitwerk (2.6.16) + zeitwerk (2.6.17) PLATFORMS x86_64-linux @@ -445,4 +435,4 @@ RUBY VERSION ruby 3.1.6p260 BUNDLED WITH - 2.5.10 + 2.5.17 diff --git a/config/application.rb b/config/application.rb index 4d7dfbd143..61a297c40b 100755 --- a/config/application.rb +++ b/config/application.rb @@ -90,7 +90,6 @@ class Application < Rails::Application config.csp = { default_src: %w(https: 'self'), base_uri: %w('self'), - block_all_mixed_content: false, # :( Some webcam feeds use http:// connect_src: connect_src, font_src: %w( maxcdn.bootstrapcdn.com diff --git a/frontend/css/farm_designer/farm_designer.scss b/frontend/css/farm_designer/farm_designer.scss index 15b95dc765..a1d316c686 100644 --- a/frontend/css/farm_designer/farm_designer.scss +++ b/frontend/css/farm_designer/farm_designer.scss @@ -23,13 +23,13 @@ padding: 11rem 2rem 2rem 2rem; // at zoom = 1.0: 110px 20px 20px 20px height: 100%; overflow: visible; + transition: 0.2s ease; &.panel-open { padding: 11rem 2rem 2rem 46.8rem; // at zoom = 1.0: 110px 20px 20px 468px } &.short-panel { padding: 35rem 2rem 2rem 2rem; // at zoom = 1.0: 350px 20px 20px 20px } - transition: 0.2s ease; &::-webkit-scrollbar { display: none; } @@ -377,19 +377,19 @@ .weed-indicator.is-chosen-true, .plant-indicator.is-chosen-true { + transform-origin: center; + transform-box: fill-box; &.animate { animation: plant-selection-pop 0.2s 1 cubic-bezier(0, 0, 0, 0.9), pulse-and-rotate 4s 0.2s infinite linear; } - transform-origin: center; - transform-box: fill-box; } .tool-slot-indicator { + transform-origin: center; + transform-box: fill-box; &.animate { animation: pulse-and-rotate 4s 0.2s infinite linear; } - transform-origin: center; - transform-box: fill-box; } .map-point { @@ -402,11 +402,11 @@ } &.is-selected { .point-radius { + transform-origin: center; + transform-box: fill-box; &.animate { animation: dashed-rotate 4s infinite linear; } - transform-origin: center; - transform-box: fill-box; } } } @@ -440,11 +440,11 @@ } .soil-cloud { + transform-origin: center; + transform-box: fill-box; &.new { animation: soil-poof 0.5s cubic-bezier(0, 0, 0, 1); } - transform-origin: center; - transform-box: fill-box; } .spread { @@ -744,10 +744,10 @@ } .data-slider { .bp5-start { + height: 5px; &:first-of-type { display: unset; } - height: 5px; } .bp5-slider-label { margin-left: -6rem; @@ -1052,15 +1052,15 @@ box-shadow: none; } .bp5-start { - &:first-of-type { - display: none; - } top: 0.53rem; width: 0.5px; background: transparentize($dark_gray, 0.75); box-shadow: none; height: 0.55rem; border-radius: 0; + &:first-of-type { + display: none; + } } &.vertical { .bp5-start { diff --git a/frontend/css/farm_designer/farm_designer_panels.scss b/frontend/css/farm_designer/farm_designer_panels.scss index 5a7adf8d7d..dcdcd9f196 100644 --- a/frontend/css/farm_designer/farm_designer_panels.scss +++ b/frontend/css/farm_designer/farm_designer_panels.scss @@ -357,14 +357,14 @@ height: 50px; overflow: hidden; .back-arrow { - &.black-text{ - color: $medium_gray; - } float: left; text-align: center; font-size: 1.8rem; width: 50px; line-height: 50px; + &.black-text{ + color: $medium_gray; + } &:hover { &.black-text{ color: $darker_gray !important; @@ -634,10 +634,10 @@ max-height: calc(100vh - 17rem); overflow-y: auto; overflow-x: hidden; + padding-top: 1rem; ul { margin-bottom: 0; } - padding-top: 1rem; label { margin-top: 0 !important; } @@ -704,6 +704,7 @@ .weed-info-panel-content, .point-info-panel-content { + font-size: 1.4rem; .point-color-input { div[class*=col-] { padding-left: 0.5rem; @@ -716,7 +717,6 @@ display: block; margin-top: 3rem; } - font-size: 1.4rem; p { margin-top: 1rem; margin-bottom: 0.5rem !important; @@ -1242,11 +1242,11 @@ li { cursor: default !important; } input { + box-shadow: none; &.numPlantsH, &.numPlantsV { -moz-appearance: unset !important; } - box-shadow: none; } } .grid-planting-toggle { @@ -2022,11 +2022,11 @@ li { padding-bottom: inherit; .non-empty-state { max-height: calc(100vh - 14rem); + overflow-y: auto; + overflow-x: hidden; @media screen and (max-width: 450px) { max-height: calc(100vh - 19rem); } - overflow-y: auto; - overflow-x: hidden; } .row { margin: 0; @@ -2066,11 +2066,11 @@ li { &.more-indicator { height: 20px; width: 20px; + cursor: pointer; p { display: inline; text-align: center; } - cursor: pointer; } } @@ -2343,11 +2343,11 @@ li { .row { margin-left: 0; margin-right: -2.5rem; + margin-top: 1rem; div[class*=col-] { padding: 0; text-align: center; } - margin-top: 1rem; p { display: block !important; text-transform: uppercase; @@ -2845,10 +2845,10 @@ li { border: none; } .widget-footer { + background: none; * { color: $dark_gray; } - background: none; } } .title-help-icon:hover { @@ -3181,12 +3181,12 @@ li { .designer-sequence-list-panel { .panel-content { height: calc(100vh - 14rem); - @media screen and (max-width: 450px) { - max-height: calc(100vh - 19rem); - } overflow-y: scroll; overflow-x: hidden; padding-bottom: 6rem; + @media screen and (max-width: 450px) { + max-height: calc(100vh - 19rem); + } .panel-top { margin-left: 0 !important; } diff --git a/frontend/css/farm_designer/farm_events.scss b/frontend/css/farm_designer/farm_events.scss index 6d6612ae28..85e656016b 100644 --- a/frontend/css/farm_designer/farm_events.scss +++ b/frontend/css/farm_designer/farm_events.scss @@ -12,13 +12,13 @@ .farm-events { max-height: calc(100vh - 15rem); - @media screen and (max-width: 450px) { - max-height: calc(100vh - 20rem); - } overflow-y: auto; overflow-x: hidden; margin-right: -10px; padding-bottom: inherit; + @media screen and (max-width: 450px) { + max-height: calc(100vh - 20rem); + } } .farm-event { diff --git a/frontend/css/global.scss b/frontend/css/global.scss index 28bad26348..8917bb4d39 100644 --- a/frontend/css/global.scss +++ b/frontend/css/global.scss @@ -148,11 +148,11 @@ fieldset { } .diagnosis-indicator { + text-align: center !important; &.nav { display: inline-block; border-color: transparent; } - text-align: center !important; i { display: block; position: absolute; @@ -515,10 +515,10 @@ a { } .input-group { + width: 100% !important; input[type=checkbox] { box-shadow: none; } - width: 100% !important; } .fa { @@ -567,14 +567,14 @@ a { } .centered-button-div { + text-align: center; + padding: 0.25rem; .fb-button { float: none !important; } label { padding: 0; } - text-align: center; - padding: 0.25rem; } .single-setting-row { @@ -959,19 +959,19 @@ hr { .e-stop { margin: 0; box-shadow: none !important; + height: 2.9rem; + font-size: 1.1rem !important; &.pseudo-disabled { box-shadow: none !important; } - height: 2.9rem; - font-size: 1.1rem !important; &:hover { + box-shadow: 0 0 10px $translucent5, 0 0 5px inset rgba(255, 255, 255, 0.2) !important; &.red { color: $white; } &.yellow { color: $black; } - box-shadow: 0 0 10px $translucent5, 0 0 5px inset rgba(255, 255, 255, 0.2) !important; } } &.hard { @@ -1980,6 +1980,12 @@ ul { } } .sensor-reading-display { + border-style: solid; + border-color: $dark_gray; + border-width: 0.1px; + height: 2rem; + width: 100%; + margin-top: 0.5rem; &.moisture-sensor { background: linear-gradient(to right, rgba($blue, 0) 20%, $blue 80%, rgba($blue, 0) 85%); } @@ -1988,12 +1994,6 @@ ul { text-align: center; } } - border-style: solid; - border-color: $dark_gray; - border-width: 0.1px; - height: 2rem; - width: 100%; - margin-top: 0.5rem; .indicator { position: relative; background: $dark_gray; @@ -2166,10 +2166,10 @@ ul { } .update-resource-pair { margin-top: 1rem; + margin-right: -2rem; &.first { margin-top: 0; } - margin-right: -2rem; div[class*=col-] { padding: 0; padding-right: 2rem; @@ -2636,10 +2636,10 @@ ul { .firmware-path-selection { .manual-selection { + margin: 1rem -15px; p { padding: 0rem 1.5rem 1rem; } - margin: 1rem -15px; } } diff --git a/frontend/css/navbar.scss b/frontend/css/navbar.scss index fa280b0dba..40dab303f7 100644 --- a/frontend/css/navbar.scss +++ b/frontend/css/navbar.scss @@ -189,13 +189,13 @@ nav { &.hover, &:hover { color: $white; + filter: brightness(1.05); + box-shadow: inset 0 -1px 0px 0px $translucent2, 0 0 5px $translucent15, inset 0 0 5px rgba(255, 255, 255, 0.3); .jobs-button-progress-text, .title, p { color: $white; } - filter: brightness(1.05); - box-shadow: inset 0 -1px 0px 0px $translucent2, 0 0 5px $translucent15, inset 0 0 5px rgba(255, 255, 255, 0.3); } } .nav-coordinates { @@ -308,11 +308,11 @@ nav { width: 22rem; background: $dark_gray; padding: 0; + font-size: 1.2rem; + letter-spacing: 1.2px; i { margin-right: 0.8rem; } - font-size: 1.2rem; - letter-spacing: 1.2px; a:not(.app-version) { display: inline-block; width: 100%; diff --git a/frontend/css/sequences.scss b/frontend/css/sequences.scss index 5bb4c28dbd..e742d74d11 100644 --- a/frontend/css/sequences.scss +++ b/frontend/css/sequences.scss @@ -9,6 +9,8 @@ margin-top: 0.4rem; height: calc(100vh - 8.95rem); background: $light_gray; + padding: 0 2rem; + overflow: hidden; @media screen and (max-width: 767px) { display: none; &.open { @@ -19,7 +21,6 @@ } } } - padding: 0 2rem; h3 { margin-top: 1rem; } @@ -31,7 +32,6 @@ width: unset; } } - overflow: hidden; .bp5-popover-target .saucer { float: left; } @@ -851,10 +851,10 @@ } .text-input-wrapper { margin: 0; + border-bottom-color: $white !important; input { color: $white; } - border-bottom-color: $white !important; &:before, &:after { background: $white !important; @@ -869,11 +869,11 @@ .step-button-cluster-panel { @media screen and (max-width: 767px) { display: none; + margin-left: 15px; + margin-right: 15px; &.inserting-step { display: block; } - margin-left: 15px; - margin-right: 15px; } .row { margin-left: -2.5rem; @@ -1184,6 +1184,7 @@ } .folder-list-item, .sequence-list-item { + padding-left: 3rem; .bp5-popover-wrapper.color-picker { position: absolute; line-height: 0; @@ -1192,7 +1193,6 @@ height: 3.5rem; } } - padding-left: 3rem; .saucer, .icon-saucer { position: relative; top: 0.55rem; @@ -1313,11 +1313,11 @@ } } @media screen and (max-width: 767px) { + margin-left: 15px; + margin-right: 15px; &.open { display: none; } - margin-left: 15px; - margin-right: 15px; .empty-state { display: block; } diff --git a/frontend/css/static_pages.scss b/frontend/css/static_pages.scss index 23a568fd3a..4f3b8a411c 100644 --- a/frontend/css/static_pages.scss +++ b/frontend/css/static_pages.scss @@ -1,11 +1,11 @@ .static-page { min-height: 100vh; max-height: 100%; + background: linear-gradient(-135deg, #6db1ec, #35a274); + padding-top: 4rem; .row { margin: 0 auto; } - background: linear-gradient(-135deg, #6db1ec, #35a274); - padding-top: 4rem; h1, h2 { font-family: "Cabin", Arial, Helvetica, sans-serif !important; diff --git a/frontend/css/status_ticker.scss b/frontend/css/status_ticker.scss index a284a8dc92..f8049a0ffb 100644 --- a/frontend/css/status_ticker.scss +++ b/frontend/css/status_ticker.scss @@ -118,10 +118,10 @@ } .logs-page-link { + text-align: center; label { cursor: pointer; } - text-align: center; &:hover { background: rgba(255, 255, 255, 0.2); } diff --git a/frontend/css/steps.scss b/frontend/css/steps.scss index 60ad37d06f..fa49e4a97f 100644 --- a/frontend/css/steps.scss +++ b/frontend/css/steps.scss @@ -51,13 +51,13 @@ padding: .75rem 1rem; border-top-left-radius: 3px; border-top-right-radius: 3px; + margin-bottom: -1px; .step-header-flex { display: flex; } &.sequence-selected.no-inputs { border-radius: 3px; } - margin-bottom: -1px; .step-comment { display: inline; width: 100%; diff --git a/frontend/css/widgets.scss b/frontend/css/widgets.scss index b7b388e182..3ed37a33e9 100644 --- a/frontend/css/widgets.scss +++ b/frontend/css/widgets.scss @@ -26,11 +26,11 @@ background: $dark_gray; letter-spacing: .05rem; padding: .75rem 1rem; + border-top-left-radius: 5px; + border-top-right-radius: 5px; >*:not(h5):not(.title-help-icon):not(.title-help) { margin-left: 1rem; } - border-top-left-radius: 5px; - border-top-right-radius: 5px; .title-help{ display: inline; .title-help-text { @@ -108,11 +108,11 @@ border-color: $light_gray; color: $dark_gray; padding: 1.25rem; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; >.row:not(:first-of-type) { margin-top: 1rem; } - border-bottom-left-radius: 5px; - border-bottom-right-radius: 5px; } .widget-footer { diff --git a/frontend/settings/pin_bindings/model.tsx b/frontend/settings/pin_bindings/model.tsx index e41bf9bcf7..88bf90a96b 100644 --- a/frontend/settings/pin_bindings/model.tsx +++ b/frontend/settings/pin_bindings/model.tsx @@ -297,7 +297,7 @@ export const Model = (props: BoxTopBaseProps) => { !props.isEditing && setHovered(pinNumber); setCursor(); }; - return { position={[-30, btnPosition, Z]} scale={SCALE} material-color={0xcccccc} /> - { {getLabel(binding) || label}

    } - - ; + + ; })} {LEDS .filter(() => !express) .map(ledIndicator => { const { position, color, ref } = ledIndicator; - return + return { position={[-66, position, Z]}>

    {ledIndicator.label}

    -
    ; +
    ; })} ; }; diff --git a/lib/tasks/fe.rake b/lib/tasks/fe.rake index b145225813..ee0b53ffac 100644 --- a/lib/tasks/fe.rake +++ b/lib/tasks/fe.rake @@ -17,6 +17,16 @@ EXCLUDE = [ reason: "breaking changes in", version: "9", }, + { + packages: ["@typescript-eslint/eslint-plugin"], + reason: "breaking changes in", + version: "8", + }, + { + packages: ["@typescript-eslint/parser"], + reason: "breaking changes in", + version: "8", + }, ] # Load package.json as JSON. diff --git a/package.json b/package.json index 302c5e082c..8d6b10ff7f 100644 --- a/package.json +++ b/package.json @@ -34,36 +34,36 @@ "@parcel/watcher": "2.1.0" }, "dependencies": { - "@blueprintjs/core": "5.10.5", - "@blueprintjs/select": "5.2.1", + "@blueprintjs/core": "5.11.0", + "@blueprintjs/select": "5.2.2", "@monaco-editor/react": "4.6.0", "@parcel/transformer-sass": "2.12.0", "@parcel/transformer-typescript-tsc": "2.12.0", - "@react-spring/three": "9.7.3", - "@react-three/drei": "9.108.1", - "@react-three/fiber": "8.16.8", - "@types/lodash": "4.17.6", - "@types/markdown-it": "14.1.1", - "@types/node": "20.14.9", + "@react-spring/three": "9.7.4", + "@react-three/drei": "9.109.5", + "@react-three/fiber": "8.17.5", + "@types/lodash": "4.17.7", + "@types/markdown-it": "14.1.2", + "@types/node": "22.3.0", "@types/promise-timeout": "1.3.3", "@types/react": "18.3.3", "@types/react-color": "3.0.12", "@types/react-dom": "18.3.0", - "@types/three": "0.166.0", - "@types/ws": "8.5.10", - "axios": "1.7.2", + "@types/three": "0.167.1", + "@types/ws": "8.5.12", + "axios": "1.7.4", "bowser": "2.11.0", "browser-speech": "1.1.1", "events": "3.3.0", "farmbot": "15.8.8", - "i18next": "23.11.5", + "i18next": "23.12.3", "lodash": "4.17.21", "markdown-it": "14.1.0", "markdown-it-emoji": "3.0.0", "moment": "2.30.1", "monaco-editor": "0.50.0", - "mqtt": "5.7.3", - "npm": "10.8.1", + "mqtt": "5.10.0", + "npm": "10.8.2", "parcel": "2.12.0", "process": "0.11.10", "promise-timeout": "1.3.0", @@ -77,16 +77,16 @@ "redux-immutable-state-invariant": "2.1.0", "redux-thunk": "3.1.0", "takeme": "0.12.0", - "three": "0.166.1", - "typescript": "5.5.3", - "url": "0.11.3", + "three": "0.167.1", + "typescript": "5.5.4", + "url": "0.11.4", "xterm": "5.3.0" }, "devDependencies": { "@react-three/eslint-plugin": "0.1.1", "@types/enzyme": "3.10.12", "@types/jest": "29.5.12", - "@types/readable-stream": "4.0.14", + "@types/readable-stream": "4.0.15", "@typescript-eslint/eslint-plugin": "7.15.0", "@typescript-eslint/parser": "7.15.0", "@wojtekmaj/enzyme-adapter-react-17": "0.8.0", @@ -94,10 +94,10 @@ "eslint": "8.57.0", "eslint-plugin-eslint-comments": "3.2.0", "eslint-plugin-import": "2.29.1", - "eslint-plugin-jest": "28.6.0", + "eslint-plugin-jest": "28.8.0", "eslint-plugin-no-null": "1.0.2", - "eslint-plugin-promise": "6.4.0", - "eslint-plugin-react": "7.34.3", + "eslint-plugin-promise": "7.1.0", + "eslint-plugin-react": "7.35.0", "eslint-plugin-react-hooks": "4.6.2", "jest": "29.7.0", "jest-canvas-mock": "2.5.2", @@ -106,13 +106,13 @@ "jest-junit": "16.0.0", "jest-skipped-reporter": "0.0.5", "jshint": "2.13.6", - "madge": "7.0.0", + "madge": "8.0.0", "raf": "3.4.1", "react-addons-test-utils": "15.6.2", "react-test-renderer": "18.3.1", - "sass": "1.77.6", + "sass": "1.77.8", "sass-lint": "1.13.1", - "ts-jest": "29.1.5", + "ts-jest": "29.2.4", "tslint": "6.1.3" } } From 6c8e7411a6fa9b0e91673592669edc047c55a473 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 14 Aug 2024 11:48:38 -0700 Subject: [PATCH 15/54] fix wood texture scaling --- frontend/three_d_garden/bed.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frontend/three_d_garden/bed.tsx b/frontend/three_d_garden/bed.tsx index f543b5a82c..e70bf41310 100644 --- a/frontend/three_d_garden/bed.tsx +++ b/frontend/three_d_garden/bed.tsx @@ -83,8 +83,7 @@ export const Bed = (props: BedProps) => { const bedWoodTexture = useTexture(ASSETS.textures.wood + "?=bedWood"); bedWoodTexture.wrapS = RepeatWrapping; bedWoodTexture.wrapT = RepeatWrapping; - bedWoodTexture.rotation = Math.PI / 2; - bedWoodTexture.repeat.set(0.003, 0.0003); + bedWoodTexture.repeat.set(0.0003, 0.003); const legWoodTexture = useTexture(ASSETS.textures.wood + "?=legWood"); legWoodTexture.wrapS = RepeatWrapping; legWoodTexture.wrapT = RepeatWrapping; From 8d8a79c42bf73006474c81eff2575e5b8764a71b Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 15 Aug 2024 12:16:18 -0700 Subject: [PATCH 16/54] upgrade postgres/rabbitmq/node and add instructions --- .gitignore | 5 +- docker-compose.yml | 4 +- docker_configs/api.Dockerfile | 2 +- docker_configs/rabbitmq.Dockerfile | 2 +- package.json | 2 +- ubuntu_example.sh | 90 ++++++++++++++++++++---------- 6 files changed, 66 insertions(+), 39 deletions(-) diff --git a/.gitignore b/.gitignore index d6ba393f6c..b360b9c626 100755 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ .vscode *.log *.pem +*.sql passenger.*.pid *.tsbuildinfo *.pid.lock @@ -27,7 +28,3 @@ public/dist # ActiveStorage blobs: storage/* tmp - -# === Legacy -# v13 upgrade creates a DB backup as dump.sql: -dump.sql diff --git a/docker-compose.yml b/docker-compose.yml index 0122683fd1..b2075cd318 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,7 +25,6 @@ # +--------+ +------------+ # ================================================ -version: "3" services: redis: env_file: ".env" @@ -37,8 +36,7 @@ services: db: env_file: ".env" - # Know to work: 10, 11 - image: postgres:13 + image: postgres:16 restart: always volumes: ["./docker_volumes/db:/var/lib/postgresql/data"] diff --git a/docker_configs/api.Dockerfile b/docker_configs/api.Dockerfile index b5d8e61dc8..2e3d8f7132 100644 --- a/docker_configs/api.Dockerfile +++ b/docker_configs/api.Dockerfile @@ -4,7 +4,7 @@ RUN curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | te apt-get update -qq && apt-get install -y build-essential libpq-dev postgresql postgresql-contrib && \ mkdir -p /etc/apt/keyrings && \ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ - sh -c 'echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >> /etc/apt/sources.list.d/nodesource.list' && \ + sh -c 'echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >> /etc/apt/sources.list.d/nodesource.list' && \ apt-get update -qq && \ sh -c 'echo "\nPackage: *\nPin: origin deb.nodesource.com\nPin-Priority: 700\n" >> /etc/apt/preferences' && \ apt-get install -y nodejs && \ diff --git a/docker_configs/rabbitmq.Dockerfile b/docker_configs/rabbitmq.Dockerfile index fb5b4a4362..4e6d1bcc77 100755 --- a/docker_configs/rabbitmq.Dockerfile +++ b/docker_configs/rabbitmq.Dockerfile @@ -1,4 +1,4 @@ -FROM rabbitmq:3.12.6 +FROM rabbitmq:3.13.6 RUN rabbitmq-plugins enable --offline \ rabbitmq_auth_backend_http \ rabbitmq_management \ diff --git a/package.json b/package.json index 8d6b10ff7f..ee8fb60e5d 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Farmbot web frontend.", "engines": { "browsers": "defaults", - "node": "20.x", + "node": "22.x", "npm": "10.x", "parcel": "2.x" }, diff --git a/ubuntu_example.sh b/ubuntu_example.sh index bd160fb1e4..7210d18ea7 100644 --- a/ubuntu_example.sh +++ b/ubuntu_example.sh @@ -1,4 +1,4 @@ -# How to install FarmBot Web API on a fresh Ubuntu 22.04 machine +# How to install FarmBot Web API on a fresh Ubuntu 24.04 machine # IMPORTANT NOTE: Resources are limited and FarmBot Inc cannot provide # longterm support to self-hosted users. If you have never administered a @@ -12,10 +12,6 @@ # # Self-hosting a FarmBot server is not a simple task. -# Remove old (possibly broke) docker versions -sudo apt remove docker-engine -sudo apt remove docker docker.io containerd runc - # Install docker and docker compose sudo apt update sudo apt install ca-certificates curl gnupg -y @@ -58,36 +54,72 @@ sudo docker compose run web npm install sudo docker compose run web bundle exec rails db:create db:migrate # Generate a set of *.pem files for data encryption sudo docker compose run web rake keys:generate # ⚠ SKIP THIS STEP IF UPGRADING! -# Build the UI assets via ParcelJS -sudo docker compose run web rake assets:precompile # Run the server! ٩(^‿^)۶ -# NOTE: DONT TRY TO LOGIN until you see a message similar to this: +# Note: You won't be able to log in until you see a message similar to this: # "✨ Built in 44.92s" -# THIS MAY TAKE A VERY LONG TIME ON SLOW MACHINES (~3 minutes on DigitalOcean) # You will just get an empty screen otherwise. -# This only happens during initialization +# This only happens during initialization and may take a long time on slow machines. sudo docker compose up -# At this point, setup is complete. Content should be visible at =============== -# http://YOUR_HOST:3000/. - -# You can optionally verify installation by running unit tests. +# At this point, setup is complete. +# Content should be visible at http://YOUR_HOST:3000/. -# Create the database for the app to use: -sudo docker compose run -e RAILS_ENV=test web bundle exec rails db:setup -# Run the tests in the "test" RAILS_ENV: -sudo docker compose run -e RAILS_ENV=test web rspec spec -# Run user-interface unit tests REQUIRES AT LEAST 4 GB OF RAM: -sudo docker compose run web npm run test +# --- You can optionally verify installation by running unit tests. --- + # Create the database for the app to use + sudo docker compose run -e RAILS_ENV=test web bundle exec rails db:setup + # Run the tests in the "test" RAILS_ENV + sudo docker compose run -e RAILS_ENV=test web rspec spec + # Run user-interface unit tests (requires a large amount of RAM) + sudo docker compose run web npm run test +# --- end of optional tests --- -# === BEGIN OPTIONAL UPGRADES - # To update to later versions of FarmBot, - # shut down the server, create a database backup - # and run commands below. +# === BEGIN OPTIONAL UPGRADES to later versions of the FarmBot Web App === + # Shut down the server + sudo docker compose down + # Start the database service by starting the web container + sudo docker compose run web gem install bundler + # Verify that the correct database service is running. + # If the version doesn't print, a `git reset` may be required. + sudo docker compose exec db pg_dumpall -V + # Create a database backup (this will overwrite dump.sql!) + # If you do not do this before `git pull`, you will need to `git reset` first. + sudo docker compose exec db pg_dumpall -U postgres > dump.sql + # Create a backup of the dump.sql file + cp -vi dump.sql dump_$(date +%Y%m%d%H%M%S).sql + # Stop and remove containers + sudo docker stop $(sudo docker ps -a -q) + sudo docker rm $(sudo docker ps -a -q) + # Remove docker images. This will later require re-download of large amounts of data. + sudo docker system prune -af --volumes + # Delete the database. This will delete all of your data! + # Only run after verifying your data is backed up in dump.sql. + # Commented with `#` for safety. Run the command without `#`. + # sudo rm -rf docker_volumes/db + # Verify that the database has been deleted. Do not continue on until "OK". + if [ -d docker_volumes/db ]; then echo "ERROR"; else echo "OK"; fi + # Download the latest version of the web app git pull https://github.com/FarmBot/Farmbot-Web-App.git main - sudo docker compose build - sudo docker compose run web bundle install # <== ⚠ UPGRADE USERS ONLY - sudo docker compose run web npm install # <== ⚠ UPGRADE USERS ONLY - sudo docker compose run web rails db:migrate # <== ⚠ UPGRADE USERS ONLY -# === END OPTIONAL UPGRADES ^ + # Install Ruby gems + sudo docker compose run web gem install bundler + sudo docker compose run web bundle install + # Install NPM packages + sudo docker compose run web npm install + # Replace the dump.sql password value with the value of POSTGRES_PASSWORD from .env + nano dump.sql + # Verify that the correct database service is running + sudo docker compose exec db pg_dumpall -V + # Restore the database + sudo docker compose run -v $(pwd):/farmbot db bash + # Run these commands in the db container shell opened by the previous command + # --- begin db container shell commands --- + cd /farmbot + PGPASSWORD=$POSTGRES_PASSWORD psql -U postgres -h db < dump.sql + exit + # --- end db container shell commands --- + # Migrate the database + sudo docker compose run web rails db:migrate + # Run the server + sudo docker compose up + # If you get a MQTT authentification error, stop and start the server again. +# === END OPTIONAL UPGRADES === From 502ebcf44428b0cec0005c48cfcb3a2cb26f87bc Mon Sep 17 00:00:00 2001 From: Rory Aronson Date: Wed, 21 Aug 2024 13:13:53 -0700 Subject: [PATCH 17/54] add mac install instructions --- ubuntu_example.sh | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/ubuntu_example.sh b/ubuntu_example.sh index 7210d18ea7..7b9bf21cab 100644 --- a/ubuntu_example.sh +++ b/ubuntu_example.sh @@ -12,7 +12,7 @@ # # Self-hosting a FarmBot server is not a simple task. -# Install docker and docker compose +# Install docker and docker compose (Ubuntu) sudo apt update sudo apt install ca-certificates curl gnupg -y source /etc/os-release @@ -22,7 +22,17 @@ sudo chmod a+r /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$ID $VERSION_CODENAME stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y -# Verify installation + +# Install docker and docker compose (Mac) +# Install Homebrew +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +# Install Docker Desktop from https://www.docker.com/products/docker-desktop/ +# Open the Docker Desktop app +# Install docker-compose +brew install docker-compose +# From here on out, all commands are the same for both Ubuntu and Mac, but `sudo` is not required for Mac. + +# Verify docker installation sudo docker run hello-world sudo docker compose version @@ -122,4 +132,3 @@ sudo docker compose up sudo docker compose up # If you get a MQTT authentification error, stop and start the server again. # === END OPTIONAL UPGRADES === - From 7998ab9a596d72c151563ab7a97bb5051f981cd2 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 21 Aug 2024 13:47:54 -0700 Subject: [PATCH 18/54] update local setup instructions --- ubuntu_example.sh | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/ubuntu_example.sh b/ubuntu_example.sh index 7b9bf21cab..548e509461 100644 --- a/ubuntu_example.sh +++ b/ubuntu_example.sh @@ -1,4 +1,4 @@ -# How to install FarmBot Web API on a fresh Ubuntu 24.04 machine +# How to install FarmBot Web API on a local machine # IMPORTANT NOTE: Resources are limited and FarmBot Inc cannot provide # longterm support to self-hosted users. If you have never administered a @@ -12,7 +12,7 @@ # # Self-hosting a FarmBot server is not a simple task. -# Install docker and docker compose (Ubuntu) +# Linux (Debian/Ubuntu): Install docker and docker compose sudo apt update sudo apt install ca-certificates curl gnupg -y source /etc/os-release @@ -23,14 +23,14 @@ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker. sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y -# Install docker and docker compose (Mac) +# Mac: Install docker and docker compose # Install Homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # Install Docker Desktop from https://www.docker.com/products/docker-desktop/ # Open the Docker Desktop app # Install docker-compose brew install docker-compose -# From here on out, all commands are the same for both Ubuntu and Mac, but `sudo` is not required for Mac. +# From here on out, all commands are the same for both Linux and Mac, but `sudo` is not required for Mac. # Verify docker installation sudo docker run hello-world @@ -70,6 +70,13 @@ sudo docker compose run web rake keys:generate # ⚠ SKIP THIS STEP IF UPGRADING # You will just get an empty screen otherwise. # This only happens during initialization and may take a long time on slow machines. sudo docker compose up +# If you get an MQTT authentication error, it could be a config file issue. +# Verify that you've used your computer's real IP address (`hostname -I`) +# for the values of `API_HOST` and `MQTT_HOST` in the `.env` file, and then: +# Stop the server with `Ctrl + C` and +sudo docker compose down +# Start the server again with +sudo docker compose up # At this point, setup is complete. # Content should be visible at http://YOUR_HOST:3000/. @@ -96,11 +103,13 @@ sudo docker compose up sudo docker compose exec db pg_dumpall -U postgres > dump.sql # Create a backup of the dump.sql file cp -vi dump.sql dump_$(date +%Y%m%d%H%M%S).sql + git add . + git stash save "dump.sql backup" # Stop and remove containers - sudo docker stop $(sudo docker ps -a -q) - sudo docker rm $(sudo docker ps -a -q) + sudo docker stop $(sudo docker ps -a -f farmbot -q) + sudo docker rm $(sudo docker ps -a -f farmbot -q) # Remove docker images. This will later require re-download of large amounts of data. - sudo docker system prune -af --volumes + sudo docker system prune -af # Delete the database. This will delete all of your data! # Only run after verifying your data is backed up in dump.sql. # Commented with `#` for safety. Run the command without `#`. @@ -114,7 +123,8 @@ sudo docker compose up sudo docker compose run web bundle install # Install NPM packages sudo docker compose run web npm install - # Replace the dump.sql password value with the value of POSTGRES_PASSWORD from .env + # Edit the `dump.sql` file to replace the PASSWORD value at the end of line 15 + # with the value of POSTGRES_PASSWORD from .env nano dump.sql # Verify that the correct database service is running sudo docker compose exec db pg_dumpall -V @@ -130,5 +140,4 @@ sudo docker compose up sudo docker compose run web rails db:migrate # Run the server sudo docker compose up - # If you get a MQTT authentification error, stop and start the server again. # === END OPTIONAL UPGRADES === From 423cf8497a26a585dc622a0463d8622b1f17afd6 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 21 Aug 2024 13:58:00 -0700 Subject: [PATCH 19/54] rename `ubuntu_example.sh` to `local_setup_instructions.sh` --- README.md | 2 +- ubuntu_example.sh => local_setup_instructions.sh | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename ubuntu_example.sh => local_setup_instructions.sh (100%) diff --git a/README.md b/README.md index 8dbd434006..ee3fd7095a 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Hosting your own server requires an understanding of how Ruby on Rails applicati ## Local setup -We recommend all self hosted installations be installed on a fresh Ubuntu server using the instructions provided in [ubuntu_example.sh](https://github.com/FarmBot/Farmbot-Web-App/blob/main/ubuntu_example.sh). These instructions are regularly checked and updated to ensure they work. **At this time we cannot provide assistance for running the web app in different environments.** +We recommend all self hosted installations be installed on a fresh Ubuntu server using the instructions provided in [local_setup_instructions.sh](https://github.com/FarmBot/Farmbot-Web-App/blob/main/local_setup_instructions.sh). These instructions are regularly checked and updated to ensure they work. **At this time we cannot provide assistance for running the web app in different environments.** If you raise an issue indicating that you haven't followed the setup instructions, looked through past issues, or done a cursory internet search for basic help, expect the issue to be closed and we'll point you to the setup instructions. *Again, if you do not have at least intermediate Linux and Ruby experience, please use [my.farm.bot](https://my.farm.bot).* Running a self-hosted server is not easy! diff --git a/ubuntu_example.sh b/local_setup_instructions.sh similarity index 100% rename from ubuntu_example.sh rename to local_setup_instructions.sh From 598be6113082e88dbfa7f073b3534b15c1074ba4 Mon Sep 17 00:00:00 2001 From: Gabriel Burnworth Date: Wed, 21 Aug 2024 14:04:06 -0700 Subject: [PATCH 20/54] use relative file links in readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ee3fd7095a..0f018b58c9 100644 --- a/README.md +++ b/README.md @@ -24,13 +24,13 @@ Hosting your own server requires an understanding of how Ruby on Rails applicati ## Local setup -We recommend all self hosted installations be installed on a fresh Ubuntu server using the instructions provided in [local_setup_instructions.sh](https://github.com/FarmBot/Farmbot-Web-App/blob/main/local_setup_instructions.sh). These instructions are regularly checked and updated to ensure they work. **At this time we cannot provide assistance for running the web app in different environments.** +We recommend all self hosted installations be installed on a fresh Ubuntu server using the instructions provided in [local_setup_instructions.sh](local_setup_instructions.sh). These instructions are regularly checked and updated to ensure they work. **At this time we cannot provide assistance for running the web app in different environments.** If you raise an issue indicating that you haven't followed the setup instructions, looked through past issues, or done a cursory internet search for basic help, expect the issue to be closed and we'll point you to the setup instructions. *Again, if you do not have at least intermediate Linux and Ruby experience, please use [my.farm.bot](https://my.farm.bot).* Running a self-hosted server is not easy! ## Configuration settings (important) -**Your server won't run without setting ENV variables first**. Set the ENV variables directly from your shell / server management tool or by writing a `.env` file in the server's base directory. See [example.env](https://github.com/FarmBot/Farmbot-Web-App/blob/main/example.env) for a list of all the variables that must be set. +**Your server won't run without setting ENV variables first**. Set the ENV variables directly from your shell / server management tool or by writing a `.env` file in the server's base directory. See [example.env](example.env) for a list of all the variables that must be set. Encryption keys will be auto-generated if not present. They can be reset using `rake keys:generate`. If `ENV['RSA_KEY']` is set, it will be used in place of the `*.pem` files. This is useful for environments like Heroku and Docker, where file system access is not allowed. From 779bc059d67a2b8f0cdb6ab98039647238dfebb1 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 21 Aug 2024 16:16:09 -0700 Subject: [PATCH 21/54] update example.env --- example.env | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/example.env b/example.env index b08cfb702f..77d518325b 100644 --- a/example.env +++ b/example.env @@ -112,6 +112,8 @@ CODECOV_TOKEN= DOCS=Set this to any value if you want to generate API docs after running tests # Most self hosting users will want to delete this. HEROKU_SLUG_COMMIT=This is set by Heroku, used by Frontend to show current version. +# Override for HEROKU_SLUG_COMMIT +BUILT_AT= # If you are a software developer and you wish to run integration tests, set the # ENV below to true. # Most users will not want this enabled. @@ -176,3 +178,14 @@ OPENAI_API_TEMPERATURE= OPENAI_MODEL_LUA= # OpenAI model name for other requests. OPENAI_MODEL_OTHER= +# Increment to bust 1-week Lua docs cache +DOCS_CACHE_NUM= +# Set by CircleCI, used by CI test coverage check +CIRCLE_SHA1= +CIRCLE_BRANCH= +CIRCLE_PULL_REQUEST= +# Add URLs to enforce TOS acceptance +TOS_URL= +PRIV_URL= +# Continuously run log digest loop +FOREVER= From 7ba73464b6a8b035e3ec51c3f7f998b330eb9a49 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 22 Aug 2024 14:59:00 -0700 Subject: [PATCH 22/54] downgrade node --- docker_configs/api.Dockerfile | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker_configs/api.Dockerfile b/docker_configs/api.Dockerfile index 2e3d8f7132..b5d8e61dc8 100644 --- a/docker_configs/api.Dockerfile +++ b/docker_configs/api.Dockerfile @@ -4,7 +4,7 @@ RUN curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | te apt-get update -qq && apt-get install -y build-essential libpq-dev postgresql postgresql-contrib && \ mkdir -p /etc/apt/keyrings && \ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ - sh -c 'echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >> /etc/apt/sources.list.d/nodesource.list' && \ + sh -c 'echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >> /etc/apt/sources.list.d/nodesource.list' && \ apt-get update -qq && \ sh -c 'echo "\nPackage: *\nPin: origin deb.nodesource.com\nPin-Priority: 700\n" >> /etc/apt/preferences' && \ apt-get install -y nodejs && \ diff --git a/package.json b/package.json index ee8fb60e5d..8d6b10ff7f 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Farmbot web frontend.", "engines": { "browsers": "defaults", - "node": "22.x", + "node": "20.x", "npm": "10.x", "parcel": "2.x" }, From c9365ce696918e91dcc0932f69ed7567ebbe76fe Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 22 Aug 2024 15:04:43 -0700 Subject: [PATCH 23/54] upgrade Ruby --- .ruby-version | 2 +- Gemfile | 2 +- Gemfile.lock | 2 +- config/boot.rb | 2 +- docker_configs/api.Dockerfile | 2 +- spec/mutations/fragments/create_spec.rb | 5 +++-- spec/mutations/releases/parse_spec.rb | 11 ++++------- 7 files changed, 12 insertions(+), 14 deletions(-) diff --git a/.ruby-version b/.ruby-version index 9cec7165ab..a0891f563f 100755 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.1.6 +3.3.4 diff --git a/Gemfile b/Gemfile index 851a8f0c00..216cf5dd60 100755 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,5 @@ source "https://rubygems.org" -ruby "~> 3.1.6" +ruby "~> 3.3.4" gem "rails", "~> 6" gem "active_model_serializers" diff --git a/Gemfile.lock b/Gemfile.lock index 8124fa81a7..ececdd51a5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -432,7 +432,7 @@ DEPENDENCIES webmock RUBY VERSION - ruby 3.1.6p260 + ruby 3.3.4p94 BUNDLED WITH 2.5.17 diff --git a/config/boot.rb b/config/boot.rb index 3596736667..5e5f0c1fac 100755 --- a/config/boot.rb +++ b/config/boot.rb @@ -1,4 +1,4 @@ # Set up gems listed in the Gemfile. ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) -require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) +require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) diff --git a/docker_configs/api.Dockerfile b/docker_configs/api.Dockerfile index b5d8e61dc8..e1a4c1cc5b 100644 --- a/docker_configs/api.Dockerfile +++ b/docker_configs/api.Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:3.1.6 +FROM ruby:3.3.4 RUN curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg > /dev/null && \ sh -c '. /etc/os-release; echo $VERSION_CODENAME; echo "deb http://apt.postgresql.org/pub/repos/apt/ $VERSION_CODENAME-pgdg main" >> /etc/apt/sources.list.d/pgdg.list' && \ apt-get update -qq && apt-get install -y build-essential libpq-dev postgresql postgresql-contrib && \ diff --git a/spec/mutations/fragments/create_spec.rb b/spec/mutations/fragments/create_spec.rb index 5ea3965686..ab05aab62d 100644 --- a/spec/mutations/fragments/create_spec.rb +++ b/spec/mutations/fragments/create_spec.rb @@ -32,11 +32,12 @@ }, ], } - boom = ->() { Fragments::Preprocessor.run!(**params) } err = CeleryScript::TypeCheckError msg = CeleryScriptSettingsBag::BAD_PLACEHOLDER - expect(boom).to raise_error(err, msg) + expect{ + Fragments::Preprocessor.run!(**params) + }.to raise_error(err, msg) end it "loads CeleryScript from the database" do diff --git a/spec/mutations/releases/parse_spec.rb b/spec/mutations/releases/parse_spec.rb index 093071f495..0c8e07595f 100644 --- a/spec/mutations/releases/parse_spec.rb +++ b/spec/mutations/releases/parse_spec.rb @@ -104,14 +104,13 @@ end it "refuses to parse drafts" do - boom = -> do + expect { Releases::Parse.run!({ draft: true, prerelease: false, tag_name: "11.0.1", assets: [] }) - end - expect(boom).to raise_error(Mutations::ValidationException, "Don't publish drafts.") + }.to raise_error(Mutations::ValidationException, "Don't publish drafts.") end it "double checks the platform detection regex" do - boom = -> do + expect{ Releases::Parse.run!({ draft: false, prerelease: false, @@ -125,8 +124,6 @@ }, ], }) - end - - expect(boom).to raise_error("Invalid platform?: bbb3") + }.to raise_error("Invalid platform?: bbb3") end end From b5f2ba1aed388d9d3f0d48a8e60f62624cc2a1f8 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 22 Aug 2024 15:05:28 -0700 Subject: [PATCH 24/54] add npm dep update script builder --- .gitignore | 2 ++ lib/tasks/fe.rake | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/.gitignore b/.gitignore index b360b9c626..2231fe0333 100755 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,8 @@ package-lock.json public/assets/ public/direct_upload/temp/*.jpg public/dist +core +upgrade_deps.sh # ActiveStorage blobs: storage/* tmp diff --git a/lib/tasks/fe.rake b/lib/tasks/fe.rake index ee0b53ffac..1ce0782007 100644 --- a/lib/tasks/fe.rake +++ b/lib/tasks/fe.rake @@ -85,6 +85,26 @@ namespace :fe do max_key_length = available_upgrades.keys.max_by(&:length).length package_json = load_package_json() + bash_file_string = "#!/bin/bash\n\n" + bash_file_string += "# CONTENTS WILL BE OVERWRITTEN BY `rake fe:upgrade_deps`\n\n" + bash_file_string += "title() { echo -e \"\\n$1\\n" + "=" * 100 + "\\n\"; }\n\n" + bash_file_string += "check_dep() {\n" + bash_file_string += " okay=0\n" + bash_file_string += " title \"Installing $1\"\n" + bash_file_string += " sudo docker compose run web npm install $1\n" + bash_file_string += " if [ $? -ne 0 ]; then okay=1; fi\n" + bash_file_string += " title \"Typechecking with $1\"\n" + bash_file_string += " sudo docker compose run web npm run typecheck\n" + bash_file_string += " if [ $? -ne 0 ]; then okay=1; fi\n" + bash_file_string += " title \"Building with $1\"\n" + bash_file_string += " sudo docker compose run web rake assets:precompile\n" + bash_file_string += " if [ $? -ne 0 ]; then okay=1; fi\n" + bash_file_string += " if [ $okay -ne 0 ]; then\n" + bash_file_string += " title \"\"\n" + bash_file_string += " title \"Failed on: $1\"\n" + bash_file_string += " exit 1\n" + bash_file_string += " fi\n" + bash_file_string += "}\n\n" puts puts "=" * 40 puts "#{PACKAGE_JSON_FILE} AVAILABLE UPDATES:" @@ -97,16 +117,22 @@ namespace :fe do end padding = ' ' * (max_key_length - dep.length) puts " #{dep} #{padding} #{current_version} -> #{new_version}" + bash_file_string += "check_dep \"#{dep}@#{new_version}\"\n" package_json[deps_key][dep] = new_version end puts "=" * 40 + File.open("upgrade_deps.sh", "w") { |file| + file.write(bash_file_string) + } + puts "Type 'save' to update #{PACKAGE_JSON_FILE}, enter to abort." if user_typed?("save") save_package_json(package_json) puts "Saved. Use 'sudo docker compose run web npm install' to upgrade." else puts "Aborted. No changes made." + puts "Run the following script to upgrade incrementally: `bash upgrade_deps.sh`" end else puts "\n" From 6b154841002ef9326a23b8bc4c1401eb0bfea116 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 22 Aug 2024 15:05:50 -0700 Subject: [PATCH 25/54] update local setup upgrade instructions --- local_setup_instructions.sh | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/local_setup_instructions.sh b/local_setup_instructions.sh index 548e509461..6420b6bead 100644 --- a/local_setup_instructions.sh +++ b/local_setup_instructions.sh @@ -105,17 +105,28 @@ sudo docker compose up cp -vi dump.sql dump_$(date +%Y%m%d%H%M%S).sql git add . git stash save "dump.sql backup" + # Shut down the server again to stop the database service + sudo docker compose down # Stop and remove containers - sudo docker stop $(sudo docker ps -a -f farmbot -q) - sudo docker rm $(sudo docker ps -a -f farmbot -q) + sudo docker stop $(sudo docker ps -aq --filter name=farmbot) + sudo docker rm $(sudo docker ps -aq --filter name=farmbot) # Remove docker images. This will later require re-download of large amounts of data. - sudo docker system prune -af + sudo docker rmi $(sudo docker images -q --filter reference=farmbot*) + sudo docker system prune -af --filter label=farmbot # Delete the database. This will delete all of your data! # Only run after verifying your data is backed up in dump.sql. # Commented with `#` for safety. Run the command without `#`. - # sudo rm -rf docker_volumes/db + # sudo rm -rf docker_volumes + # If your system is a fresh machine that is only used as a farmbot server, + # you can run these commands to delete all docker data. + # sudo docker system prune -af --volumes + # sudo docker volume rm $(sudo docker volume ls -q) # Verify that the database has been deleted. Do not continue on until "OK". if [ -d docker_volumes/db ]; then echo "ERROR"; else echo "OK"; fi + # Delete the parcel cache + sudo rm -rf .parcel-cache/ + # Remove installed NPM packages + sudo rm -rf node_modules/ # Download the latest version of the web app git pull https://github.com/FarmBot/Farmbot-Web-App.git main # Install Ruby gems @@ -138,6 +149,8 @@ sudo docker compose up # --- end db container shell commands --- # Migrate the database sudo docker compose run web rails db:migrate + # Verify that parcel builds successfully + sudo docker compose run web rake assets:precompile # Run the server sudo docker compose up # === END OPTIONAL UPGRADES === From 8fc7b2a2b6709f0dd754d4a52122a9dfad3d391a Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 22 Aug 2024 15:10:17 -0700 Subject: [PATCH 26/54] remove SmarfDoc --- Gemfile | 1 - Gemfile.lock | 7 ----- api_docs.md.erb | 28 ------------------- example.env | 4 --- .../farm_events/farm_events_create_spec.rb | 4 --- spec/controllers/api/points/create_spec.rb | 1 - spec/controllers/api/points/index_spec.rb | 7 ----- .../rmq_utils/rmq_utils_controller_spec.rb | 2 -- spec/controllers/dashboard_spec.rb | 3 -- spec/spec_helper.rb | 16 ----------- 10 files changed, 73 deletions(-) delete mode 100644 api_docs.md.erb diff --git a/Gemfile b/Gemfile index 216cf5dd60..a4819c48b4 100755 --- a/Gemfile +++ b/Gemfile @@ -41,7 +41,6 @@ group :development, :test do gem "rspec_junit_formatter" gem "simplecov" gem "simplecov-cobertura" - gem "smarf_doc", git: "https://github.com/RickCarlino/smarf_doc.git" gem "webmock" end diff --git a/Gemfile.lock b/Gemfile.lock index ececdd51a5..7531e7e201 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,9 +1,3 @@ -GIT - remote: https://github.com/RickCarlino/smarf_doc.git - revision: 40dc733363431c6153ccebbeb80df942a77f0b02 - specs: - smarf_doc (1.0.0) - GEM remote: https://rubygems.org/ specs: @@ -425,7 +419,6 @@ DEPENDENCIES secure_headers simplecov simplecov-cobertura - smarf_doc! thwait tzinfo valid_url diff --git a/api_docs.md.erb b/api_docs.md.erb deleted file mode 100644 index 2e874e6315..0000000000 --- a/api_docs.md.erb +++ /dev/null @@ -1,28 +0,0 @@ -<% if (response.successful? || note.present?) %> -# <%= response.successful? ? "" : "(NOT OK)" %> <%= request.pretty_url %> -<% if note.present? %> -**Notes:** <%= note %> -<% end %> -<% if (request.has_params? || request.has_body?) %> -<% if request.display_body.length > 4 %> -**Request** - -``` -<%= - request.display_body -%> -``` -<% end %> -<% end %> -**Response** - -``` -<%= - begin - JSON.pretty_generate(JSON.parse(response.body)).first(500) - rescue => e - "Empty Response" - end -%> -``` -<% end %> diff --git a/example.env b/example.env index 77d518325b..db6c65c4d9 100644 --- a/example.env +++ b/example.env @@ -106,10 +106,6 @@ ROLLBAR_CLIENT_TOKEN=____ ROLLBAR_ENV= # Can be deleted unless you are using codecov. CODECOV_TOKEN= -# This can be set to anything. -# Most users can just delete it. -# This is used for people writing modifications to the software, mostly. -DOCS=Set this to any value if you want to generate API docs after running tests # Most self hosting users will want to delete this. HEROKU_SLUG_COMMIT=This is set by Heroku, used by Frontend to show current version. # Override for HEROKU_SLUG_COMMIT diff --git a/spec/controllers/api/farm_events/farm_events_create_spec.rb b/spec/controllers/api/farm_events/farm_events_create_spec.rb index 995ee0be6c..916fa021a1 100644 --- a/spec/controllers/api/farm_events/farm_events_create_spec.rb +++ b/spec/controllers/api/farm_events/farm_events_create_spec.rb @@ -84,8 +84,6 @@ it "prevents creation of unusually large farm_events" do sign_in user - SmarfDoc.note("This is how you could create a FarmEvent that fires " + - "every 4 minutes.") input = { executable_id: sequence.id, executable_type: sequence.class.name, start_time: (Time.now + 1.minute).as_json, @@ -100,8 +98,6 @@ it "makes a farm_event" do sign_in user - SmarfDoc.note("This is how you could create a FarmEvent that fires " + - "every 4 days.") input = { executable_id: sequence.id, executable_type: sequence.class.name, start_time: (Time.now + 1.minute).as_json, diff --git a/spec/controllers/api/points/create_spec.rb b/spec/controllers/api/points/create_spec.rb index f7398ebd8b..6d794f896c 100644 --- a/spec/controllers/api/points/create_spec.rb +++ b/spec/controllers/api/points/create_spec.rb @@ -126,7 +126,6 @@ it "handles bad data" do sign_in user - SmarfDoc.note("This is what happens when you post bad JSON") post :create, body: "{'x': 0, 'this isnt': 'JSON'}", params: { format: :json } expect(response.status).to eq(422) expect(json[:error]).to include("Please use a _valid_ JSON object or array") diff --git a/spec/controllers/api/points/index_spec.rb b/spec/controllers/api/points/index_spec.rb index da7419b829..ccdfec7861 100644 --- a/spec/controllers/api/points/index_spec.rb +++ b/spec/controllers/api/points/index_spec.rb @@ -35,8 +35,6 @@ openfarm_slug: "cabbage", pointer_type: "Plant", discarded_at: nil) - SmarfDoc.note("If you want to see previously deleted points, " + - "add `?filter=old` to the end of the URL.") sign_in user get :index, params: { filter: "old" } expect(response.status).to eq(200) @@ -65,8 +63,6 @@ openfarm_slug: "cabbage", pointer_type: "Plant", discarded_at: nil) - SmarfDoc.note("If you want to see previously deleted points, " + - "add `?filter=old` to the end of the URL.") sign_in user get :index, params: {} expect(response.status).to eq(200) @@ -95,9 +91,6 @@ openfarm_slug: "cabbage", pointer_type: "Plant", discarded_at: nil) - SmarfDoc.note("If you want to see previously deleted points alongside" \ - " your active points, add `?filter=all` to the end of " \ - "the URL.") sign_in user get :index, params: { filter: "all" } expect(response.status).to eq(200) diff --git a/spec/controllers/api/rmq_utils/rmq_utils_controller_spec.rb b/spec/controllers/api/rmq_utils/rmq_utils_controller_spec.rb index 998cf7e0d4..775f9ae2a4 100644 --- a/spec/controllers/api/rmq_utils/rmq_utils_controller_spec.rb +++ b/spec/controllers/api/rmq_utils/rmq_utils_controller_spec.rb @@ -102,7 +102,6 @@ end it "allows public_broadcast read access to non-admin users" do - SmarfDoc.skip routing_key = Api::RmqUtilsController::PUBLIC_CHANNELS.sample permission = "read" p = credentials.merge(routing_key: routing_key, permission: permission) @@ -112,7 +111,6 @@ end it "allows access to ones own topic" do - SmarfDoc.skip p = credentials.merge(routing_key: "bot.#{credentials[:username]}.logs") post :topic_action, params: p expect(response.body).to include("allow") diff --git a/spec/controllers/dashboard_spec.rb b/spec/controllers/dashboard_spec.rb index af2c53af3b..8794f833a3 100644 --- a/spec/controllers/dashboard_spec.rb +++ b/spec/controllers/dashboard_spec.rb @@ -23,9 +23,6 @@ it "renders the front page" do get :front_page expect(response.status).to eq(200) - # first entry in api_docs.md - SmarfDoc.note("Documentation generated for the " + - "[FarmBot Web App](https://github.com/FarmBot/Farmbot-Web-App).") end it "returns error on invalid path" do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b4be59abfb..6a97cf8d5a 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -69,11 +69,6 @@ def clear! Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } -SmarfDoc.config do |c| - c.template_file = "api_docs.md.erb" - c.output_file = "api_docs.md" -end - require "database_cleaner" DatabaseCleaner.strategy = :truncation # then, whenever you need to clean the DB @@ -88,17 +83,6 @@ def clear! config.include Helpers config.infer_spec_type_from_file_location! config.order = "random" - if ENV["DOCS"] - config.after(:each, type: :controller) do - if request.path.length > 0 || response.body.length > 0 - SmarfDoc.run!(NiceResponse.new(request), response) - end - end - - config.after(:suite) do - SmarfDoc.finish! - end - end end FAKE_ATTACHMENT_URL = "https://cdn.shopify.com/s/files/1/2040/0" \ From 032cfb87bc0a543c6e69c8c9d8a62394ee21689c Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 22 Aug 2024 15:11:28 -0700 Subject: [PATCH 27/54] upgrade deps --- Gemfile.lock | 12 ++++++------ package.json | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 7531e7e201..551b44b850 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -95,7 +95,7 @@ GEM declarative (0.0.20) delayed_job (4.1.12) activesupport (>= 3.0, < 8.0) - delayed_job_active_record (4.1.8) + delayed_job_active_record (4.1.10) activerecord (>= 3.0, < 8.0) delayed_job (>= 3.0, < 5) devise (4.9.4) @@ -138,7 +138,7 @@ GEM retriable (>= 2.0, < 4.a) google-apis-iamcredentials_v1 (0.21.0) google-apis-core (>= 0.15.0, < 2.a) - google-apis-storage_v1 (0.42.0) + google-apis-storage_v1 (0.43.0) google-apis-core (>= 0.15.0, < 2.a) google-cloud-core (1.7.1) google-cloud-env (>= 1.0, < 3.a) @@ -199,7 +199,7 @@ GEM marcel (1.0.4) method_source (1.1.0) mini_mime (1.1.5) - minitest (5.25.0) + minitest (5.25.1) multi_json (1.15.0) mutations (0.9.1) activesupport @@ -297,7 +297,7 @@ GEM actionpack (>= 5.2) railties (>= 5.2) retriable (3.1.2) - rexml (3.3.5) + rexml (3.3.6) strscan rollbar (3.5.2) rspec (3.13.0) @@ -306,13 +306,13 @@ GEM rspec-mocks (~> 3.13.0) rspec-core (3.13.0) rspec-support (~> 3.13.0) - rspec-expectations (3.13.1) + rspec-expectations (3.13.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-mocks (3.13.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-rails (6.1.3) + rspec-rails (6.1.4) actionpack (>= 6.1) activesupport (>= 6.1) railties (>= 6.1) diff --git a/package.json b/package.json index 8d6b10ff7f..946bc9b320 100644 --- a/package.json +++ b/package.json @@ -40,13 +40,13 @@ "@parcel/transformer-sass": "2.12.0", "@parcel/transformer-typescript-tsc": "2.12.0", "@react-spring/three": "9.7.4", - "@react-three/drei": "9.109.5", + "@react-three/drei": "9.111.2", "@react-three/fiber": "8.17.5", "@types/lodash": "4.17.7", "@types/markdown-it": "14.1.2", - "@types/node": "22.3.0", + "@types/node": "22.5.0", "@types/promise-timeout": "1.3.3", - "@types/react": "18.3.3", + "@types/react": "18.3.4", "@types/react-color": "3.0.12", "@types/react-dom": "18.3.0", "@types/three": "0.167.1", @@ -56,7 +56,7 @@ "browser-speech": "1.1.1", "events": "3.3.0", "farmbot": "15.8.8", - "i18next": "23.12.3", + "i18next": "23.14.0", "lodash": "4.17.21", "markdown-it": "14.1.0", "markdown-it-emoji": "3.0.0", @@ -113,6 +113,6 @@ "sass": "1.77.8", "sass-lint": "1.13.1", "ts-jest": "29.2.4", - "tslint": "6.1.3" + "tslint": "5.20.1" } } From e1ff23d03136235ac1d443a8836ca986e5bcbe8e Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 23 Aug 2024 09:14:42 -0700 Subject: [PATCH 28/54] upgrade redis --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index b2075cd318..2f2344f564 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,7 +28,7 @@ services: redis: env_file: ".env" - image: redis:5 + image: redis:7 volumes: - "./docker_volumes/redis/data:/data" - "./docker_volumes/redis/conf:/usr/local/etc/redis" From f883e7dca9ee9cef800622a9f324271910856af4 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 23 Aug 2024 09:14:51 -0700 Subject: [PATCH 29/54] upgrade deps --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 946bc9b320..eeb91f43ef 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "@parcel/transformer-sass": "2.12.0", "@parcel/transformer-typescript-tsc": "2.12.0", "@react-spring/three": "9.7.4", - "@react-three/drei": "9.111.2", + "@react-three/drei": "9.111.3", "@react-three/fiber": "8.17.5", "@types/lodash": "4.17.7", "@types/markdown-it": "14.1.2", @@ -51,7 +51,7 @@ "@types/react-dom": "18.3.0", "@types/three": "0.167.1", "@types/ws": "8.5.12", - "axios": "1.7.4", + "axios": "1.7.5", "bowser": "2.11.0", "browser-speech": "1.1.1", "events": "3.3.0", @@ -61,7 +61,7 @@ "markdown-it": "14.1.0", "markdown-it-emoji": "3.0.0", "moment": "2.30.1", - "monaco-editor": "0.50.0", + "monaco-editor": "0.51.0", "mqtt": "5.10.0", "npm": "10.8.2", "parcel": "2.12.0", @@ -112,7 +112,7 @@ "react-test-renderer": "18.3.1", "sass": "1.77.8", "sass-lint": "1.13.1", - "ts-jest": "29.2.4", + "ts-jest": "29.2.5", "tslint": "5.20.1" } } From 790801b115389114d3d52a5b8c27fddd8968fa41 Mon Sep 17 00:00:00 2001 From: Rory Aronson Date: Fri, 23 Aug 2024 11:40:47 -0700 Subject: [PATCH 30/54] make example.env more legible --- example.env | 238 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 148 insertions(+), 90 deletions(-) diff --git a/example.env b/example.env index db6c65c4d9..039a7f28cf 100644 --- a/example.env +++ b/example.env @@ -8,180 +8,238 @@ # # When you are done, save this file as `.env` at the root of the Farmbot-Web-App # directory. -# -# Again, PLEASE READ ALL ENTRIES. This is the most important setup step. # ============================================================================= -# -# Where is your MQTT server running? 99% of setups will use the same value -# found in API_HOST. Heroku users will not use the same value. -# Use a REAL, PUBLIC IP ADDRESS if you are controlling real bots. -MQTT_HOST=98.76.54.32 -# Set the max pool size for Passenger. -# Only needed if using Heroku. FarmBot, Inc. uses Heroku. Self hosters do not. -MAX_POOL_SIZE=2 + # If your server is on a domain (eg=my-own-farmbot.com), put it here. -# DONT USE `localhost`. -# DONT USE `127.0.0.1`. -# DONT USE `0.0.0.0`. -# Use a real ip or domain name. -API_HOST=12.34.56.78 -# 3000 for local development. 443 is using SSL. You will need `sudo` to use PORT -# 80 on most systems. +# DONT USE `localhost`, `127.0.0.1`, or `0.0.0.0`. +# Use a real IP address or domain name. +API_HOST= + +# 3000 for local development. 443 is using SSL. +# You will need `sudo` to use PORT 80 on most systems. API_PORT=3000 -# Every server needs to set this. This is the password to the entire database. -# NOTE: Must be less than 100 characters long. + +# Set to the IP address of the MQTT broker. +# 99% of setups will use the same value found in API_HOST. +# Heroku users will not use the same value. +MQTT_HOST= + +# Set the max pool size for Passenger. (Only needed if using Heroku) +# FarmBot Inc uses Heroku. Self hosters do not. +MAX_POOL_SIZE=2 + +# This is the password to the entire database. +# Every server needs to set this. +# Must be less than 100 characters long. POSTGRES_PASSWORD= -# MUST REPLACE. MUST BE A VERY RANDOM VALUE. -# 128 CHARACTERS LONG, HEXADECIMAL STRING (0-9, A-F) -DEVISE_SECRET=Used for devise. Generate a new value using `openssl rand -hex 64`. -# Every server has a superuser. -# Set this to something SECURE. + +# Used for devise. Generate a new value using `openssl rand -hex 64`. +# MUST BE A VERY RANDOM, 128 CHARACTER LONG, HEXADECIMAL STRING (0-9, A-F) +DEVISE_SECRET= + +# Set the server superuser password to something SECURE. ADMIN_PASSWORD= -# Secret key used by Rails. -# Generate a new value using `openssl rand -hex 64` + +# Secret key used by Rails. Generate using `openssl rand -hex 64`. SECRET_KEY_BASE= -# Set this to production in most cases. -# Setting this line to production will disable debug backtraces. + +# Set this to `production` in most cases. +# Setting this line to `production` will disable debug backtraces. # Please delete this line if you are submitting a bug report, as production mode # will not give detailed crash reports. RAILS_ENV=production + # Set this if you don't want to deal with email verification of new users. -# (self hosted users) NO_EMAILS=TRUE -# If you wish to opt out of https:// (we wish you wouldn't), you can -# delete this line. Be aware that by not using SSL, users will transmit their -# passwords without encryption, making it very easy for attackers to see -# user passwords. Consider buying a domain and using a free certificate from -# Let's Encrypt. -FORCE_SSL=Remove this if not using HTTPS:// - -# MOST USERS SHOULD DELETE THE REST OF THIS FILE. -# Continue reading if you: -# * work at FarmBot, Inc. -# * need email notification support -# * pay for managed database / file hosting (Google Cloud) -# * use the test suite to write new features + +# If you wish to opt out of https, delete this line. +# NOTE: By not using SSL, passwords will be transmitted without encryption, +# making it very easy for attackers to see them. +FORCE_SSL=TRUE + + + +# ============================================================================= +# MOST USERS SHOULD DELETE THE REST OF THIS FILE. +# Continue reading if you: +# * Work at FarmBot Inc +# * Need email notification support +# * Pay for managed database / file hosting (Google Cloud) +# * Use the test suite to write new features # If running a FarmBot setup for personal use or none of the above apply, you # can safely delete the rest of this file. +# ============================================================================= + -# Only relevant if you use Heroku or pay a 3rd party vendor for Redis hosting. -# Most users can delete this. + +# REDIS +# ============================================================================= # If your Heroku Redis vendor uses a custom `REDIS_URL` ENV var such as -# `REDISTOGO_URL`, set the value here. If you delete this line, the app will -# default to `REDIS_URL`. +# `REDISTOGO_URL`, set the value here. If you delete this line, the app will +# default to `REDIS_URL`. Only relevant if you use Heroku or pay a 3rd party +# vendor for Redis hosting. Most users can delete this. WHERE_IS_REDIS_URL=REDISTOGO_URL # Just an example. Change or delete. -# Delete this if you don't use 3rd party Redis hosting. See WHERE_IS_REDIS_URL + +# Delete this if you don't use 3rd party Redis hosting. See WHERE_IS_REDIS_URL REDIS_URL=redis://redis:6379/0 + + +# EMAILS +# ============================================================================= # For email delivery. Who is your email host? SMTP_HOST=smtp.sendgrid.net -# Optional with default of 587 + +# Optional, with default of 587 SMTP_PORT=587 -# FarmBot, Inc. uses SendGrid to send emails. + +# FarmBot Inc uses SendGrid to send emails. # Delete these if you aren't a send grid customer. -SENDGRID_PASSWORD=Used by FarmBot, Inc -SENDGRID_USERNAME=Used by FarmBot, Inc +SENDGRID_USERNAME= +SENDGRID_PASSWORD= + # If you're using other SMTP server (like Gmail) use this. -#SMTP_USERNAME=email@gmail.com -#SMTP_PASSWORD=password +# SMTP_USERNAME=email@gmail.com +# SMTP_PASSWORD=password + + +# HOSTING PROVIDERS +# ============================================================================= # Used by people who pay for managed database hosting. # Most users should delete this. DATABASE_URL=postgres://user:password@host:5432/db_name + # Google Cloud Storage API Bucket for image data. # Deleting this will save to disk. # Most self hosting users will want to delete this. GCS_BUCKET=GOOGLE_CLOUD_STORAGE_BUCKET_NAME_FOR_IMAGE_FILES + # Google Cloud Storage ID for image data. # Deleting this will save images to disk. # Most self hosting users will want to delete this. GCS_ID=GOOGLE_CLOUD_STORAGE='interop' id + # Most self hosting users will want to delete this. GCS_KEY=GOOGLE_CLOUD_STORAGE='interop' key GCS_PROJECT= GOOGLE_CLOUD_KEYFILE_JSON= + # Can be deleted unless you are a Rollbar customer. ROLLBAR_ACCESS_TOKEN=____ ROLLBAR_CLIENT_TOKEN=____ ROLLBAR_ENV= + +# FarmBot uses DataDog for log analytics and for assessing overall system health. +# Do not add this key if you do not use DataDog on your server. +DATADOG_CLIENT_TOKEN=?? + +# Set by CircleCI, used by CI test coverage check +CIRCLE_SHA1= +CIRCLE_BRANCH= +CIRCLE_PULL_REQUEST= + # Can be deleted unless you are using codecov. CODECOV_TOKEN= + +# This is set by Heroku and used by the frontend to show the current version. # Most self hosting users will want to delete this. -HEROKU_SLUG_COMMIT=This is set by Heroku, used by Frontend to show current version. +HEROKU_SLUG_COMMIT= + # Override for HEROKU_SLUG_COMMIT BUILT_AT= + # If you are a software developer and you wish to run integration tests, set the -# ENV below to true. -# Most users will not want this enabled. +# ENV below to true. Most users will not want this enabled. RUN_CAPYBARA=true + # Self hosting users can delete this line. # If you are not using the standard MQTT broker (eg=you use a 3rd party # MQTT vendor), you will need to change this line. MQTT_WS=ws://DELETE_OR_CHANGE_THIS_LINE/ws + # If you are using a shared RabbitMQ server and need to use a VHost other than # /, change this ENV var. MQTT_VHOST=/ -# If you run a server with multiple domain names (HINT=You probably don't), -# you can list the names here. This is used by FarmBot employees so that they -# can securely host the same server on multiple domain names -# ex=my.farm.bot, my.farmbot.io -EXTRA_DOMAINS=staging.farm.bot,whatever.farm.bot -# Some hosts (Eg=FarmBot, Inc.) run the RabbitMQ management API on a -# non-standard host. -# Include the protocol! (http vs. https) + +# Some hosts (Eg=FarmBot Inc) run the RabbitMQ management API on a +# non-standard host. Protocol (http vs. https) must be included! # DELETE THIS LINE if you are a self-hosted user. RABBIT_MGMT_URL=http://delete_this_line.com -# defaults to `CLOUDAMQP_URL` + +# Defaults to `CLOUDAMQP_URL` WHERE_IS_CLOUDAMQP_URL= CLOUDAMQP_URL= RABBITMQ_URL= + + + +# DOMAIN NAMES and SECURITY +# ============================================================================= +# If you run a server with multiple domain names, list them here. +EXTRA_DOMAINS=staging.farm.bot,whatever.farm.bot + # Allow only certain users on the server. If the user's email domain is not # on the list of trusted domains, they can not use the server. # The example below only allows users with `@farmbot.io` or `@farm.bot` emails # to use the server. # DELETE THIS LINE IF YOU RUN A PUBLIC SERVER. TRUSTED_DOMAINS=farmbot.io,farm.bot + # Self hosting users can safely delete this (a new key will be created). # This key is used to exchange secrets between bots and MQTT servers (important # if you don't use SSL) # SERVER WONT WORK IF YOU FORGET TO DELETE THIS EXAMPLE TEXT BELOW. # ADD A REAL RSA_KEY OR DELETE THIS LINE!! RSA_KEY=Change this! Keys look like `-----BEGIN RSA .........` -# Prevents JS/CSS build system from cleaning out old assets on start. -# This speed up boot time by one minute, but may put you at risk of -# loading stale versions of the application. -NO_CLEAN=true -# FarmBot uses DataDog for log analytics and for assessing overall system health. -# Do not add this key if you do not use DataDog on your server. -DATADOG_CLIENT_TOKEN=?? -# Comma separated list of emails that wish to receive a daily -# report of new FarmBot installations (not new users, but -# actual FarmBot installations). -CUSTOMER_SUPPORT_SUBSCRIBERS=alice@protonmail.com,bob@yahoo.com -# URL to send user-generated feedback to. -FEEDBACK_WEBHOOK_URL=http://localhost:3000/change_this -# Email address of a "publisher account" that is used to -# publish shared sequences via `rake sequences:publish ` -AUTHORIZED_PUBLISHER=foo@bar.com -# URL to send release info to. -RELEASE_WEBHOOK_URL= + + + +# OPENAI +# ============================================================================= # OpenAI API key. Delete this line if you don't have one. OPENAI_API_KEY= + # OpenAI API sampling temperature. Optional. Float between 0 and 2. # Defaults to 1, use a lower value for less random output. OPENAI_API_TEMPERATURE= + # OpenAI model name for Lua code generation requests. OPENAI_MODEL_LUA= + # OpenAI model name for other requests. OPENAI_MODEL_OTHER= -# Increment to bust 1-week Lua docs cache + +# Increment to bust 1-week Lua docs cache. +# The docs cache is used in Lua code generation requests. DOCS_CACHE_NUM= -# Set by CircleCI, used by CI test coverage check -CIRCLE_SHA1= -CIRCLE_BRANCH= -CIRCLE_PULL_REQUEST= -# Add URLs to enforce TOS acceptance + + + +# OTHER +# ============================================================================= +# Comma separated list of emails to receive a daily report of new FarmBot +# installations (not new users, but actual FarmBot installations). +CUSTOMER_SUPPORT_SUBSCRIBERS=alice@protonmail.com,bob@yahoo.com + +# Webhook URL to send user-generated feedback to. +FEEDBACK_WEBHOOK_URL=http://localhost:3000/change_this + +# Email address of a "publisher account" that is used to +# publish shared sequences via `rake sequences:publish ` +AUTHORIZED_PUBLISHER=foo@bar.com + +# URL to send release info to. +RELEASE_WEBHOOK_URL= + +# URLs to enforce TOS acceptance. TOS_URL= PRIV_URL= -# Continuously run log digest loop + +# Continuously run log digest loop. FOREVER= + +# Prevents JS/CSS build system from cleaning out old assets on start. +# This speed up boot time by one minute, but may put you at risk of +# loading stale versions of the application. +NO_CLEAN=true From 7aed0c711bc2cceb13077c4984378a8ee6541488 Mon Sep 17 00:00:00 2001 From: Rory Aronson Date: Fri, 23 Aug 2024 11:43:36 -0700 Subject: [PATCH 31/54] mac specific gems --- Gemfile.lock | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Gemfile.lock b/Gemfile.lock index 551b44b850..9475bebbbb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -216,6 +216,8 @@ GEM net-smtp (0.5.0) net-protocol nio4r (2.7.3) + nokogiri (1.16.7-aarch64-linux) + racc (~> 1.4) nokogiri (1.16.7-x86_64-linux) racc (~> 1.4) orm_adapter (0.5.0) @@ -380,6 +382,7 @@ GEM zeitwerk (2.6.17) PLATFORMS + aarch64-linux x86_64-linux DEPENDENCIES From 5f93727feca728b3470cf47843366ab2eaa68a2c Mon Sep 17 00:00:00 2001 From: Rory Aronson Date: Fri, 23 Aug 2024 12:07:54 -0700 Subject: [PATCH 32/54] allow dump.sql backups to be stashed during upgrade --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2231fe0333..d79995fecb 100755 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ .vscode *.log *.pem -*.sql +dump.sql passenger.*.pid *.tsbuildinfo *.pid.lock From 3569bafdd0609a54aedfc4e840fafd91c4480dcd Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 23 Aug 2024 12:43:47 -0700 Subject: [PATCH 33/54] update local setup upgrade stash instructions --- .gitignore | 2 +- local_setup_instructions.sh | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index d79995fecb..2231fe0333 100755 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ .vscode *.log *.pem -dump.sql +*.sql passenger.*.pid *.tsbuildinfo *.pid.lock diff --git a/local_setup_instructions.sh b/local_setup_instructions.sh index 6420b6bead..a4d2c93803 100644 --- a/local_setup_instructions.sh +++ b/local_setup_instructions.sh @@ -101,10 +101,13 @@ sudo docker compose up # Create a database backup (this will overwrite dump.sql!) # If you do not do this before `git pull`, you will need to `git reset` first. sudo docker compose exec db pg_dumpall -U postgres > dump.sql - # Create a backup of the dump.sql file + # Create a backup of the dump.sql file. This will be gitignored + # or stashed in the next step to not interfere with the git pull later. cp -vi dump.sql dump_$(date +%Y%m%d%H%M%S).sql + # Stage and stash to avoid conflicts with the `git pull`. Stage: git add . - git stash save "dump.sql backup" + # And stash. Any output from this command is fine. + git stash save "pre-upgrade" # Shut down the server again to stop the database service sudo docker compose down # Stop and remove containers From 0e5a1337f3d7c90ae8d497d5b23a25b74bcd2945 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 23 Aug 2024 12:50:41 -0700 Subject: [PATCH 34/54] move env in example --- example.env | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/example.env b/example.env index 039a7f28cf..207cdde66a 100644 --- a/example.env +++ b/example.env @@ -24,10 +24,6 @@ API_PORT=3000 # Heroku users will not use the same value. MQTT_HOST= -# Set the max pool size for Passenger. (Only needed if using Heroku) -# FarmBot Inc uses Heroku. Self hosters do not. -MAX_POOL_SIZE=2 - # This is the password to the entire database. # Every server needs to set this. # Must be less than 100 characters long. @@ -142,6 +138,10 @@ CIRCLE_PULL_REQUEST= # Can be deleted unless you are using codecov. CODECOV_TOKEN= +# Set the max pool size for Passenger. (Only needed if using Heroku) +# FarmBot Inc uses Heroku. Self hosters do not. +MAX_POOL_SIZE=2 + # This is set by Heroku and used by the frontend to show the current version. # Most self hosting users will want to delete this. HEROKU_SLUG_COMMIT= From ce1bc49499ea60dc811abb8fed249fcec95a4ace Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 23 Aug 2024 14:31:55 -0700 Subject: [PATCH 35/54] add deploy release hook --- Procfile | 2 +- lib/tasks/hook.rake | 53 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 lib/tasks/hook.rake diff --git a/Procfile b/Procfile index 76f14962d2..76f9d192de 100644 --- a/Procfile +++ b/Procfile @@ -2,4 +2,4 @@ worker: bundle exec rake jobs:work rabbit_workers: bin/rails r lib/rabbit_workers.rb web: bundle exec passenger start -p $PORT -e $RAILS_ENV --max-pool-size $MAX_POOL_SIZE # This will perform a hard refresh on all connected browsers. -release: rails r "User.refresh_everyones_ui" && rails db:migrate +release: rails r "User.refresh_everyones_ui" && rails db:migrate && (bundle exec rake hook:release_info || true) diff --git a/lib/tasks/hook.rake b/lib/tasks/hook.rake new file mode 100644 index 0000000000..cd72d452d8 --- /dev/null +++ b/lib/tasks/hook.rake @@ -0,0 +1,53 @@ +COMPARE_URL_API = "https://api.github.com/repos/Farmbot/Farmbot-Web-App/compare/" +COMPARE_URL_WEB = "https://github.com/Farmbot/Farmbot-Web-App/compare/" +COMMIT_SHA = ENV["HEROKU_SLUG_COMMIT"] +WEBHOOK_URL = ENV["RELEASE_WEBHOOK_URL"] + +def open_json(url) + begin + JSON.parse(URI.parse(url).open.read) + rescue *[OpenURI::HTTPError, SocketError] => exception + puts exception.message + return {} + end +end + +def commit_messages + base_head = "#{COMMIT_SHA}...staging" + url = "#{COMPARE_URL_API}#{base_head}" + data = open_json(url) + commits = data.fetch("commits", []) + web_url = "#{COMPARE_URL_WEB}#{base_head}" + output = "\n\n<#{web_url}|compare>\n" + messages = commits.map do |x| + output += "\n + #{x["commit"]["message"]}" + end + output +end + +namespace :hook do + desc "Post release info." + task release_info: :environment do + if WEBHOOK_URL + notification_text = "A new release has been deployed to the server." + info = notification_text + commit_messages + payload = { + "mrkdwn": true, + "text": notification_text, + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": info, + } + } + ], + "channel": "#software", + }.to_json + Faraday.post(WEBHOOK_URL, + payload, + "Content-Type" => "application/json") + end + end +end From 7e8368466eebbb46a58a4fae9ca578fa0302ec9f Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 23 Aug 2024 15:02:35 -0700 Subject: [PATCH 36/54] deprecate HEROKU_SLUG_COMMIT --- app/models/global_config.rb | 2 +- app/models/user.rb | 2 +- example.env | 5 +++-- lib/tasks/hook.rake | 13 +++++++++---- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/models/global_config.rb b/app/models/global_config.rb index 313672969f..9b36d39a4b 100644 --- a/app/models/global_config.rb +++ b/app/models/global_config.rb @@ -18,7 +18,7 @@ class GlobalConfig < ApplicationRecord self.create!(key: key, value: value) unless x end - LONG_REVISION = ENV["BUILT_AT"] || ENV["HEROKU_SLUG_COMMIT"] || "NONE" + LONG_REVISION = ENV["BUILT_AT"] || ENV["HEROKU_BUILD_COMMIT"] || "NONE" # Bootstrap these values, and ALWAYS clobber pre-existing ones: { "NODE_ENV" => Rails.env || "development", diff --git a/app/models/user.rb b/app/models/user.rb index db8be451c4..2cc984c145 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -47,7 +47,7 @@ def update_tracked_fields!(request) def self.refresh_everyones_ui msg = { "type" => "reload", - "commit" => (ENV["HEROKU_SLUG_COMMIT"] || "NONE").first(8), + "commit" => (ENV["HEROKU_BUILD_COMMIT"] || "NONE").first(8), } Transport diff --git a/example.env b/example.env index 207cdde66a..f7f1ef46c8 100644 --- a/example.env +++ b/example.env @@ -144,9 +144,10 @@ MAX_POOL_SIZE=2 # This is set by Heroku and used by the frontend to show the current version. # Most self hosting users will want to delete this. -HEROKU_SLUG_COMMIT= +HEROKU_BUILD_COMMIT= +HEROKU_BUILD_DESCRIPTION= -# Override for HEROKU_SLUG_COMMIT +# Override for HEROKU_BUILD_COMMIT BUILT_AT= # If you are a software developer and you wish to run integration tests, set the diff --git a/lib/tasks/hook.rake b/lib/tasks/hook.rake index cd72d452d8..e83dce35bb 100644 --- a/lib/tasks/hook.rake +++ b/lib/tasks/hook.rake @@ -1,6 +1,7 @@ COMPARE_URL_API = "https://api.github.com/repos/Farmbot/Farmbot-Web-App/compare/" COMPARE_URL_WEB = "https://github.com/Farmbot/Farmbot-Web-App/compare/" -COMMIT_SHA = ENV["HEROKU_SLUG_COMMIT"] +COMMIT_SHA = ENV["HEROKU_BUILD_COMMIT"] +DESCRIPTION = ENV["HEROKU_BUILD_DESCRIPTION"] WEBHOOK_URL = ENV["RELEASE_WEBHOOK_URL"] def open_json(url) @@ -13,14 +14,18 @@ def open_json(url) end def commit_messages - base_head = "#{COMMIT_SHA}...staging" + base_head = "main...#{COMMIT_SHA}" url = "#{COMPARE_URL_API}#{base_head}" data = open_json(url) commits = data.fetch("commits", []) web_url = "#{COMPARE_URL_WEB}#{base_head}" - output = "\n\n<#{web_url}|compare>\n" + output = "\n\n" + if !DESCRIPTION.nil? + output += "#{DESCRIPTION}\n\n" + end + output += "<#{web_url}|compare>\n" messages = commits.map do |x| - output += "\n + #{x["commit"]["message"]}" + output += "\n + #{x["commit"]["message"].gsub("\n", " ")}" end output end From 36511b5e11c24418430280c62cbf2baad1eac3dc Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Sat, 24 Aug 2024 11:30:25 -0700 Subject: [PATCH 37/54] shorten deploy notification commit list --- lib/tasks/hook.rake | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/lib/tasks/hook.rake b/lib/tasks/hook.rake index e83dce35bb..6e3d630c77 100644 --- a/lib/tasks/hook.rake +++ b/lib/tasks/hook.rake @@ -1,4 +1,6 @@ -COMPARE_URL_API = "https://api.github.com/repos/Farmbot/Farmbot-Web-App/compare/" +BASE_URL_API = "https://api.github.com/repos/Farmbot/Farmbot-Web-App/" +COMPARE_URL_API = "#{BASE_URL_API}compare/" +DEPLOYS_URL_API = "#{BASE_URL_API}deployments" COMPARE_URL_WEB = "https://github.com/Farmbot/Farmbot-Web-App/compare/" COMMIT_SHA = ENV["HEROKU_BUILD_COMMIT"] DESCRIPTION = ENV["HEROKU_BUILD_DESCRIPTION"] @@ -8,24 +10,44 @@ def open_json(url) begin JSON.parse(URI.parse(url).open.read) rescue *[OpenURI::HTTPError, SocketError] => exception - puts exception.message + puts exception.message + ": #{url}" return {} end end -def commit_messages +def commits_since_main base_head = "main...#{COMMIT_SHA}" url = "#{COMPARE_URL_API}#{base_head}" data = open_json(url) - commits = data.fetch("commits", []) - web_url = "#{COMPARE_URL_WEB}#{base_head}" + data.fetch("commits", []) +end + +def last_deploy_commit + data = open_json(DEPLOYS_URL_API) + (data[0] || {}).fetch("sha", nil) +end + +def commits_since_last_deploy + last_sha_deployed = last_deploy_commit() + commits = [] + commits_since_main.reverse.map do |commit| + if commit.fetch("sha") == last_sha_deployed + break + end + commits.push(commit["commit"]["message"].gsub("\n", " ")) + end + commits +end + +def details output = "\n\n" if !DESCRIPTION.nil? output += "#{DESCRIPTION}\n\n" end - output += "<#{web_url}|compare>\n" - messages = commits.map do |x| - output += "\n + #{x["commit"]["message"].gsub("\n", " ")}" + web_compare_url = "#{COMPARE_URL_WEB}#{COMMIT_SHA}...#{last_deploy_commit}" + output += "<#{web_compare_url}|compare>\n" + messages = commits_since_last_deploy.reverse.map do |commit| + output += "\n + #{commit}" end output end @@ -35,7 +57,7 @@ namespace :hook do task release_info: :environment do if WEBHOOK_URL notification_text = "A new release has been deployed to the server." - info = notification_text + commit_messages + info = notification_text + details payload = { "mrkdwn": true, "text": notification_text, From 0422ac1efe13cdb1a127cfafe002141ab4e80a0e Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Sat, 24 Aug 2024 11:48:14 -0700 Subject: [PATCH 38/54] use previous index for deploy notification --- lib/tasks/hook.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/hook.rake b/lib/tasks/hook.rake index 6e3d630c77..abb903a792 100644 --- a/lib/tasks/hook.rake +++ b/lib/tasks/hook.rake @@ -24,7 +24,7 @@ end def last_deploy_commit data = open_json(DEPLOYS_URL_API) - (data[0] || {}).fetch("sha", nil) + (data[1] || {}).fetch("sha", nil) end def commits_since_last_deploy From 72c6805f907a7e41c6cdb18cfb711c9683893a88 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Sat, 24 Aug 2024 15:32:35 -0700 Subject: [PATCH 39/54] switch the base --- lib/tasks/hook.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/hook.rake b/lib/tasks/hook.rake index abb903a792..617b8fdc62 100644 --- a/lib/tasks/hook.rake +++ b/lib/tasks/hook.rake @@ -44,7 +44,7 @@ def details if !DESCRIPTION.nil? output += "#{DESCRIPTION}\n\n" end - web_compare_url = "#{COMPARE_URL_WEB}#{COMMIT_SHA}...#{last_deploy_commit}" + web_compare_url = "#{COMPARE_URL_WEB}#{last_deploy_commit}...#{COMMIT_SHA}" output += "<#{web_compare_url}|compare>\n" messages = commits_since_last_deploy.reverse.map do |commit| output += "\n + #{commit}" From 67d57783061e265bf7c57face82552f6d75f328b Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 28 Aug 2024 14:38:12 -0700 Subject: [PATCH 40/54] add curve_id validation to points --- app/mutations/points/create.rb | 4 ++++ app/mutations/points/helpers.rb | 23 +++++++++++++++++++ app/mutations/points/update.rb | 4 ++++ spec/mutations/points/create_spec.rb | 33 ++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+) create mode 100644 app/mutations/points/helpers.rb diff --git a/app/mutations/points/create.rb b/app/mutations/points/create.rb index afbbef6ba3..9e99995076 100644 --- a/app/mutations/points/create.rb +++ b/app/mutations/points/create.rb @@ -2,6 +2,7 @@ module Points class Create < Mutations::Command + include Points::Helpers # WHY 1000?: # * This limit is placed for _technical_ # reasons, not business reasons. If it were @@ -65,6 +66,9 @@ def validate return unless safe_pointer_kind? # Security critical always goes first. validate_resource_count validate_tool if klass_ == ToolSlot + validate_water_curve_id + validate_spread_curve_id + validate_height_curve_id name ||= default_name end diff --git a/app/mutations/points/helpers.rb b/app/mutations/points/helpers.rb new file mode 100644 index 0000000000..3deaa3fa21 --- /dev/null +++ b/app/mutations/points/helpers.rb @@ -0,0 +1,23 @@ +module Points + module Helpers + BAD_CURVE_ID = "Curve ID is not valid" + + def validate_water_curve_id + if water_curve_id && !device.curves.exists?(water_curve_id) + add_error :water_curve_id, :water_curve_id, BAD_CURVE_ID + end + end + + def validate_spread_curve_id + if spread_curve_id && !device.curves.exists?(spread_curve_id) + add_error :spread_curve_id, :spread_curve_id, BAD_CURVE_ID + end + end + + def validate_height_curve_id + if height_curve_id && !device.curves.exists?(height_curve_id) + add_error :height_curve_id, :height_curve_id, BAD_CURVE_ID + end + end + end + end diff --git a/app/mutations/points/update.rb b/app/mutations/points/update.rb index 4d40d499f2..6d7bbf130b 100644 --- a/app/mutations/points/update.rb +++ b/app/mutations/points/update.rb @@ -2,6 +2,7 @@ module Points class Update < Mutations::Command + include Points::Helpers required do model :device, class: Device model :point, class: Point @@ -28,6 +29,9 @@ class Update < Mutations::Command def validate prevent_removal_of_in_use_tools + validate_water_curve_id + validate_spread_curve_id + validate_height_curve_id end def execute diff --git a/spec/mutations/points/create_spec.rb b/spec/mutations/points/create_spec.rb index 556f9d946a..4f73fa84bf 100644 --- a/spec/mutations/points/create_spec.rb +++ b/spec/mutations/points/create_spec.rb @@ -57,4 +57,37 @@ def with_fake_limits(soft_limit = 2, hard_limit = 3) expect(errors.fetch("point_limit")).to be end end + + it "validates curve ids: ok" do + water_curve = FactoryBot.create(:curve, type: "water", device: device) + spread_curve = FactoryBot.create(:curve, type: "spread", device: device) + height_curve = FactoryBot.create(:curve, type: "height", device: device) + params = { x: 0, + y: 0, + z: 0, + water_curve_id: water_curve.id, + spread_curve_id: spread_curve.id, + height_curve_id: height_curve.id, + device: device, + pointer_type: "GenericPointer" } + expect(Points::Create.run(params).errors).to be nil + end + + it "validates curve ids: ko" do + curve = FactoryBot.create(:curve, type: "water", device: device) + params = { x: 0, + y: 0, + z: 0, + water_curve_id: -1, + height_curve_id: -1, + spread_curve_id: -1, + device: device, + pointer_type: "GenericPointer" } + + errors = Points::Create.run(params).errors + expect(errors).to be + expect(errors.fetch("water_curve_id")).to be + expect(errors.fetch("spread_curve_id")).to be + expect(errors.fetch("height_curve_id")).to be + end end From cd9db3415c342deb7f8bbeb4fe156d5115ff4f5d Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 29 Aug 2024 16:43:17 -0700 Subject: [PATCH 41/54] add environment to deploy notification --- lib/tasks/hook.rake | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/tasks/hook.rake b/lib/tasks/hook.rake index 617b8fdc62..49e27c2240 100644 --- a/lib/tasks/hook.rake +++ b/lib/tasks/hook.rake @@ -1,10 +1,12 @@ BASE_URL_API = "https://api.github.com/repos/Farmbot/Farmbot-Web-App/" COMPARE_URL_API = "#{BASE_URL_API}compare/" DEPLOYS_URL_API = "#{BASE_URL_API}deployments" +COMMITS_URL_API = "#{BASE_URL_API}commits" COMPARE_URL_WEB = "https://github.com/Farmbot/Farmbot-Web-App/compare/" COMMIT_SHA = ENV["HEROKU_BUILD_COMMIT"] DESCRIPTION = ENV["HEROKU_BUILD_DESCRIPTION"] WEBHOOK_URL = ENV["RELEASE_WEBHOOK_URL"] +ENVIRONMENT = ENV["HEROKU_APP_NAME"] def open_json(url) begin @@ -15,27 +17,28 @@ def open_json(url) end end -def commits_since_main - base_head = "main...#{COMMIT_SHA}" - url = "#{COMPARE_URL_API}#{base_head}" - data = open_json(url) - data.fetch("commits", []) -end - def last_deploy_commit data = open_json(DEPLOYS_URL_API) - (data[1] || {}).fetch("sha", nil) + environment = ENVIRONMENT.include?("production") ? "production" : ENVIRONMENT + data = data.select { |deploy| deploy["environment"] == environment } + deploy_index = 1 # 0 is the latest in-progress deploy + (data[deploy_index] || {}).fetch("sha", nil) end def commits_since_last_deploy last_sha_deployed = last_deploy_commit() + deploy_commit_found = false commits = [] - commits_since_main.reverse.map do |commit| + open_json(COMMITS_URL_API + "?per_page=100").map do |commit| if commit.fetch("sha") == last_sha_deployed + deploy_commit_found = true break end commits.push(commit["commit"]["message"].gsub("\n", " ")) end + if !deploy_commit_found + commits.push("[LAST DEPLOY COMMIT NOT FOUND]") + end commits end @@ -56,7 +59,8 @@ namespace :hook do desc "Post release info." task release_info: :environment do if WEBHOOK_URL - notification_text = "A new release has been deployed to the server." + environment = ENVIRONMENT.include?("staging") ? "staging" : "production" + notification_text = "A new release has been deployed to #{environment}." info = notification_text + details payload = { "mrkdwn": true, From 771fac577145320e5152edbfd594cc90348c380b Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 16 Sep 2024 22:30:19 -0700 Subject: [PATCH 42/54] add /webhooks --- app/controllers/webhooks_controller.rb | 62 ++++++++++ config/routes.rb | 1 + spec/controllers/webhooks_controller_spec.rb | 115 +++++++++++++++++++ 3 files changed, 178 insertions(+) create mode 100644 app/controllers/webhooks_controller.rb create mode 100644 spec/controllers/webhooks_controller_spec.rb diff --git a/app/controllers/webhooks_controller.rb b/app/controllers/webhooks_controller.rb new file mode 100644 index 0000000000..568706ebf2 --- /dev/null +++ b/app/controllers/webhooks_controller.rb @@ -0,0 +1,62 @@ +class WebhooksController < ApplicationController + + skip_before_action :verify_authenticity_token + + def create + request_body = request.raw_post + heroku_signature = request.headers['Heroku-Webhook-Hmac-SHA256'] + secret = ENV['HEROKU_WEBHOOK_SECRET'] + + if secret.nil? + render json: { message: 'Secret not set' }, status: :forbidden + return + end + calculated_signature = Base64.strict_encode64(OpenSSL::HMAC.digest('sha256', secret, request_body)) + + if heroku_signature && secure_compare(calculated_signature, heroku_signature) + webhook_url = ENV["RELEASE_WEBHOOK_URL"] + current = params[:data][:current] + status = params[:data][:status] + build = params[:resource] == "build" && params[:action] == "create" && status == "pending" + if webhook_url && (current || build) + environment = ENV["HEROKU_APP_NAME"]&.include?("staging") ? "staging" : "production" + notification_text = "New #{environment} Heroku event: " + if build + output = params[:data][:output_stream_url] + notification_text += "Build started" + details = "<#{output}|build log>" + else + notification_text += "#{params[:data][:description]} `#{status}`" + commit_desc = params[:data][:slug][:commit_description] + details = commit_desc + end + payload = { + "mrkdwn": true, + "text": notification_text, + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "#{notification_text}\n#{details}", + } + } + ], + "channel": "#software", + }.to_json + Faraday.post(webhook_url, + payload, + "Content-Type" => "application/json") + end + render json: { message: 'Webhook received successfully' }, status: :ok + else + render json: { message: 'Invalid signature' }, status: :forbidden + end + end + + private + + def secure_compare(calculated_signature, heroku_signature) + ActiveSupport::SecurityUtils.secure_compare(calculated_signature, heroku_signature) + end +end diff --git a/config/routes.rb b/config/routes.rb index 2fccffaf7c..b623130ce8 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -138,4 +138,5 @@ get "/verify/:token" => "dashboard#confirmation_page", as: :confirmation_page post "/csp_reports" => "dashboard#csp_reports", as: :csp_report post "/direct_upload" => "dashboard#direct_upload", as: :direct_upload + post "/webhooks" => "webhooks#create", as: :webhooks end diff --git a/spec/controllers/webhooks_controller_spec.rb b/spec/controllers/webhooks_controller_spec.rb new file mode 100644 index 0000000000..704c3febad --- /dev/null +++ b/spec/controllers/webhooks_controller_spec.rb @@ -0,0 +1,115 @@ +require "spec_helper" + +describe WebhooksController do + include Devise::Test::ControllerHelpers + before do + allow(Faraday).to receive(:post) + end + + RELEASE = { + id: "id", + data: { + status: "succeeded", + current: true, + description: "description", + slug: { + commit_description: "commit_description", + }, + }, + resource: "release", + action: "update", + } + BUILD = { + id: "id", + data: { + status: "pending", + output_stream_url: "output_stream_url", + }, + resource: "build", + action: "create", + } + + it "handles a release payload" do + with_modified_env( + RELEASE_WEBHOOK_URL: "https://example.com/webhook_url", + HEROKU_WEBHOOK_SECRET: "secret", + ) do + stub_request(:post, ENV["RELEASE_WEBHOOK_URL"]). + to_return(status: 200, body: "", headers: {}) + request.headers["Heroku-Webhook-Hmac-SHA256"] = Base64.strict_encode64( + OpenSSL::HMAC.digest("sha256", "secret", RELEASE.to_json)) + request.headers["Content-Type"] = "application/json" + post :create, body: RELEASE.to_json, params: { format: :json } + expect(response.status).to eq(200) + expect(json[:message]).to eq("Webhook received successfully") + expect(Faraday).to have_received(:post).with( + ENV["RELEASE_WEBHOOK_URL"], + {"mrkdwn":true, + "text":"New production Heroku event: description `succeeded`", + "blocks":[{ + "type":"section", + "text":{ + "type":"mrkdwn", + "text":"New production Heroku event: description `succeeded`\ncommit_description"}}], + "channel":"#software"}.to_json, + "Content-Type" => "application/json") + end + end + + it "handles a build payload" do + with_modified_env( + RELEASE_WEBHOOK_URL: "https://example.com/webhook_url", + HEROKU_WEBHOOK_SECRET: "secret", + ) do + stub_request(:post, ENV["RELEASE_WEBHOOK_URL"]). + to_return(status: 200, body: "", headers: {}) + request.headers["Heroku-Webhook-Hmac-SHA256"] = Base64.strict_encode64( + OpenSSL::HMAC.digest("sha256", "secret", BUILD.to_json)) + request.headers["Content-Type"] = "application/json" + post :create, body: BUILD.to_json, params: { format: :json } + expect(response.status).to eq(200) + expect(json[:message]).to eq("Webhook received successfully") + expect(Faraday).to have_received(:post).with( + ENV["RELEASE_WEBHOOK_URL"], + {"mrkdwn":true, + "text":"New production Heroku event: Build started", + "blocks":[{ + "type":"section", + "text":{ + "type":"mrkdwn", + "text":"New production Heroku event: Build started\n\u003coutput_stream_url|build log\u003e"}}], + "channel":"#software"}.to_json, + "Content-Type" => "application/json") + end + end + + it "receives a webhook: no relay" do + with_modified_env(HEROKU_WEBHOOK_SECRET: "secret", RELEASE_WEBHOOK_URL: nil) do + request.headers["Heroku-Webhook-Hmac-SHA256"] = Base64.strict_encode64( + OpenSSL::HMAC.digest("sha256", "secret", RELEASE.to_json)) + request.headers["Content-Type"] = "application/json" + post :create, body: RELEASE.to_json, params: { format: :json } + expect(response.status).to eq(200) + expect(json[:message]).to eq("Webhook received successfully") + end + end + + it "rejects a webhook with an invalid signature" do + with_modified_env HEROKU_WEBHOOK_SECRET: "secret" do + request.headers["Heroku-Webhook-Hmac-SHA256"] = "invalid" + request.headers["Content-Type"] = "application/json" + post :create, body: RELEASE.to_json, params: { format: :json } + expect(response.status).to eq(403) + expect(json[:message]).to eq("Invalid signature") + end + end + + it "rejects a webhook with a missing secret" do + with_modified_env HEROKU_WEBHOOK_SECRET: nil do + request.headers["Content-Type"] = "application/json" + post :create, body: RELEASE.to_json, params: { format: :json } + expect(response.status).to eq(403) + expect(json[:message]).to eq("Secret not set") + end + end +end From 46bce3ac70764bb45c3edb637b95ba200e57b70c Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 17 Sep 2024 09:46:39 -0700 Subject: [PATCH 43/54] upgrade ruby --- .ruby-version | 2 +- Gemfile | 2 +- Gemfile.lock | 48 +++++++++++++++++------------------ docker_configs/api.Dockerfile | 2 +- 4 files changed, 26 insertions(+), 28 deletions(-) diff --git a/.ruby-version b/.ruby-version index a0891f563f..fa7adc7ac7 100755 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.3.4 +3.3.5 diff --git a/Gemfile b/Gemfile index a4819c48b4..2ef940e03d 100755 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,5 @@ source "https://rubygems.org" -ruby "~> 3.3.4" +ruby "~> 3.3.5" gem "rails", "~> 6" gem "active_model_serializers" diff --git a/Gemfile.lock b/Gemfile.lock index 9475bebbbb..8184c86137 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -112,19 +112,19 @@ GEM docile (1.4.1) e2mmap (0.1.0) erubi (1.13.0) - factory_bot (6.4.6) + factory_bot (6.5.0) activesupport (>= 5.0.0) factory_bot_rails (6.4.3) factory_bot (~> 6.4) railties (>= 5.0.0) faker (3.4.2) i18n (>= 1.8.11, < 2) - faraday (2.10.1) - faraday-net_http (>= 2.0, < 3.2) + faraday (2.11.0) + faraday-net_http (>= 2.0, < 3.4) logger faraday-follow_redirects (0.3.0) faraday (>= 1, < 3) - faraday-net_http (3.1.1) + faraday-net_http (3.3.0) net-http globalid (1.2.1) activesupport (>= 6.1) @@ -138,12 +138,12 @@ GEM retriable (>= 2.0, < 4.a) google-apis-iamcredentials_v1 (0.21.0) google-apis-core (>= 0.15.0, < 2.a) - google-apis-storage_v1 (0.43.0) + google-apis-storage_v1 (0.44.0) google-apis-core (>= 0.15.0, < 2.a) google-cloud-core (1.7.1) google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) - google-cloud-env (2.1.1) + google-cloud-env (2.2.0) faraday (>= 1.0, < 3.a) google-cloud-errors (1.4.0) google-cloud-storage (1.52.0) @@ -165,10 +165,10 @@ GEM hashdiff (1.1.1) hashie (4.1.0) httpclient (2.8.3) - i18n (1.14.5) + i18n (1.14.6) concurrent-ruby (~> 1.0) jsonapi-renderer (0.2.2) - jwt (2.8.2) + jwt (2.9.0) base64 kaminari (1.2.2) activesupport (>= 4.1.0) @@ -182,7 +182,7 @@ GEM activerecord kaminari-core (= 1.2.2) kaminari-core (1.2.2) - logger (1.6.0) + logger (1.6.1) lograge (0.14.0) actionpack (>= 4) activesupport (>= 4) @@ -206,7 +206,7 @@ GEM mutex_m (0.2.0) net-http (0.4.1) uri - net-imap (0.4.14) + net-imap (0.4.16) date net-protocol net-pop (0.1.2) @@ -222,14 +222,14 @@ GEM racc (~> 1.4) orm_adapter (0.5.0) os (1.1.4) - parser (3.3.4.2) + parser (3.3.5.0) ast (~> 2.4.1) racc passenger (6.0.23) rack (>= 1.6.13) rackup rake (>= 12.3.3) - pg (1.5.7) + pg (1.5.8) pry (0.14.2) coderay (~> 1.1) method_source (~> 1.0) @@ -299,22 +299,21 @@ GEM actionpack (>= 5.2) railties (>= 5.2) retriable (3.1.2) - rexml (3.3.6) - strscan - rollbar (3.5.2) + rexml (3.3.7) + rollbar (3.6.0) rspec (3.13.0) rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) rspec-mocks (~> 3.13.0) - rspec-core (3.13.0) + rspec-core (3.13.1) rspec-support (~> 3.13.0) - rspec-expectations (3.13.2) + rspec-expectations (3.13.3) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-mocks (3.13.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-rails (6.1.4) + rspec-rails (6.1.5) actionpack (>= 6.1) activesupport (>= 6.1) railties (>= 6.1) @@ -328,7 +327,7 @@ GEM scenic (1.8.0) activerecord (>= 4.0.0) railties (>= 4.0.0) - scout_apm (5.3.8) + scout_apm (5.4.0) parser secure_headers (6.7.0) set (1.1.0) @@ -344,7 +343,7 @@ GEM simplecov-cobertura (2.1.0) rexml simplecov (~> 0.19) - simplecov-html (0.12.3) + simplecov-html (0.13.1) simplecov_json_formatter (0.1.4) sorted_set (1.0.3) rbtree @@ -356,8 +355,7 @@ GEM actionpack (>= 6.1) activesupport (>= 6.1) sprockets (>= 3.0.0) - strscan (3.1.0) - thor (1.3.1) + thor (1.3.2) thwait (0.2.0) e2mmap timeout (0.4.1) @@ -365,7 +363,7 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) - uri (0.13.0) + uri (0.13.1) valid_url (0.0.4) addressable rails @@ -379,7 +377,7 @@ GEM websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) - zeitwerk (2.6.17) + zeitwerk (2.6.18) PLATFORMS aarch64-linux @@ -428,7 +426,7 @@ DEPENDENCIES webmock RUBY VERSION - ruby 3.3.4p94 + ruby 3.3.5p100 BUNDLED WITH 2.5.17 diff --git a/docker_configs/api.Dockerfile b/docker_configs/api.Dockerfile index e1a4c1cc5b..6a517dfc64 100644 --- a/docker_configs/api.Dockerfile +++ b/docker_configs/api.Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:3.3.4 +FROM ruby:3.3.5 RUN curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg > /dev/null && \ sh -c '. /etc/os-release; echo $VERSION_CODENAME; echo "deb http://apt.postgresql.org/pub/repos/apt/ $VERSION_CODENAME-pgdg main" >> /etc/apt/sources.list.d/pgdg.list' && \ apt-get update -qq && apt-get install -y build-essential libpq-dev postgresql postgresql-contrib && \ From cde5f983b0b14a2f1b339534f4c8ebe3301a9f04 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 17 Sep 2024 10:23:59 -0700 Subject: [PATCH 44/54] upgrade deps --- .../__tests__/tile_lua_support_test.tsx | 2 +- .../sequences/step_tiles/tile_lua_support.tsx | 2 +- .../__tests__/garden_location_row_test.tsx | 4 +-- package.json | 28 +++++++++---------- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/frontend/sequences/step_tiles/__tests__/tile_lua_support_test.tsx b/frontend/sequences/step_tiles/__tests__/tile_lua_support_test.tsx index c428b66df4..9a856128fd 100644 --- a/frontend/sequences/step_tiles/__tests__/tile_lua_support_test.tsx +++ b/frontend/sequences/step_tiles/__tests__/tile_lua_support_test.tsx @@ -14,7 +14,7 @@ import React from "react"; import { shallow } from "enzyme"; import { LuaTextArea, LuaTextAreaProps } from "../tile_lua_support"; import { Lua } from "farmbot"; -import Editor from "@monaco-editor/react"; +import { Editor } from "@monaco-editor/react"; import { fakeStepParams } from "../../../__test_support__/fake_sequence_step_data"; import { StateToggleKey } from "../../step_ui"; diff --git a/frontend/sequences/step_tiles/tile_lua_support.tsx b/frontend/sequences/step_tiles/tile_lua_support.tsx index 46dfe014cc..b12b05fc6d 100644 --- a/frontend/sequences/step_tiles/tile_lua_support.tsx +++ b/frontend/sequences/step_tiles/tile_lua_support.tsx @@ -1,5 +1,5 @@ import React from "react"; -import Editor, { loader } from "@monaco-editor/react"; +import { Editor, loader } from "@monaco-editor/react"; loader.config({ paths: { vs: "/assets/monaco" } }); import { StepParams } from "../interfaces"; import { Assertion, Lua } from "farmbot/dist/corpus"; diff --git a/frontend/settings/fbos_settings/__tests__/garden_location_row_test.tsx b/frontend/settings/fbos_settings/__tests__/garden_location_row_test.tsx index d5d48ec3d6..c5aa75c676 100644 --- a/frontend/settings/fbos_settings/__tests__/garden_location_row_test.tsx +++ b/frontend/settings/fbos_settings/__tests__/garden_location_row_test.tsx @@ -30,8 +30,8 @@ describe("", () => { timestamp: 1, coords: { accuracy: 1, altitude: 1, altitudeAccuracy: 1, heading: 1, speed: 1, - latitude: 100, longitude: 50 - } + latitude: 100, longitude: 50, toJSON: jest.fn(), + }, toJSON: jest.fn(), }); const p = fakeProps(); const wrapper = mount(); diff --git a/package.json b/package.json index eeb91f43ef..1d51d83c22 100644 --- a/package.json +++ b/package.json @@ -34,8 +34,8 @@ "@parcel/watcher": "2.1.0" }, "dependencies": { - "@blueprintjs/core": "5.11.0", - "@blueprintjs/select": "5.2.2", + "@blueprintjs/core": "5.12.0", + "@blueprintjs/select": "5.2.3", "@monaco-editor/react": "4.6.0", "@parcel/transformer-sass": "2.12.0", "@parcel/transformer-typescript-tsc": "2.12.0", @@ -44,26 +44,26 @@ "@react-three/fiber": "8.17.5", "@types/lodash": "4.17.7", "@types/markdown-it": "14.1.2", - "@types/node": "22.5.0", + "@types/node": "22.5.5", "@types/promise-timeout": "1.3.3", - "@types/react": "18.3.4", + "@types/react": "18.3.7", "@types/react-color": "3.0.12", "@types/react-dom": "18.3.0", "@types/three": "0.167.1", "@types/ws": "8.5.12", - "axios": "1.7.5", + "axios": "1.7.7", "bowser": "2.11.0", "browser-speech": "1.1.1", "events": "3.3.0", "farmbot": "15.8.8", - "i18next": "23.14.0", + "i18next": "23.15.1", "lodash": "4.17.21", "markdown-it": "14.1.0", "markdown-it-emoji": "3.0.0", "moment": "2.30.1", "monaco-editor": "0.51.0", - "mqtt": "5.10.0", - "npm": "10.8.2", + "mqtt": "5.10.1", + "npm": "10.8.3", "parcel": "2.12.0", "process": "0.11.10", "promise-timeout": "1.3.0", @@ -78,14 +78,14 @@ "redux-thunk": "3.1.0", "takeme": "0.12.0", "three": "0.167.1", - "typescript": "5.5.4", + "typescript": "5.6.2", "url": "0.11.4", "xterm": "5.3.0" }, "devDependencies": { "@react-three/eslint-plugin": "0.1.1", "@types/enzyme": "3.10.12", - "@types/jest": "29.5.12", + "@types/jest": "29.5.13", "@types/readable-stream": "4.0.15", "@typescript-eslint/eslint-plugin": "7.15.0", "@typescript-eslint/parser": "7.15.0", @@ -93,11 +93,11 @@ "enzyme": "3.11.0", "eslint": "8.57.0", "eslint-plugin-eslint-comments": "3.2.0", - "eslint-plugin-import": "2.29.1", - "eslint-plugin-jest": "28.8.0", + "eslint-plugin-import": "2.30.0", + "eslint-plugin-jest": "28.8.3", "eslint-plugin-no-null": "1.0.2", "eslint-plugin-promise": "7.1.0", - "eslint-plugin-react": "7.35.0", + "eslint-plugin-react": "7.36.1", "eslint-plugin-react-hooks": "4.6.2", "jest": "29.7.0", "jest-canvas-mock": "2.5.2", @@ -110,7 +110,7 @@ "raf": "3.4.1", "react-addons-test-utils": "15.6.2", "react-test-renderer": "18.3.1", - "sass": "1.77.8", + "sass": "1.78.0", "sass-lint": "1.13.1", "ts-jest": "29.2.5", "tslint": "5.20.1" From 5a9a5f032b0912b52eeac9d50b5ef742c85a9155 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 18 Sep 2024 16:13:21 -0700 Subject: [PATCH 45/54] upgrade frontend rollbar --- app/views/dashboard/_addons.html.erb | 33 ------------ .../__test_support__/additional_mocks.tsx | 5 ++ frontend/__test_support__/fake_state/token.ts | 6 +++ frontend/__tests__/routes_test.tsx | 19 +++++-- frontend/auth/interfaces.ts | 3 ++ frontend/routes.tsx | 51 ++++++++++++++----- package.json | 2 + 7 files changed, 69 insertions(+), 50 deletions(-) diff --git a/app/views/dashboard/_addons.html.erb b/app/views/dashboard/_addons.html.erb index 86ff319c2f..7723c23ae7 100644 --- a/app/views/dashboard/_addons.html.erb +++ b/app/views/dashboard/_addons.html.erb @@ -22,36 +22,3 @@ <% end %> - diff --git a/frontend/__test_support__/additional_mocks.tsx b/frontend/__test_support__/additional_mocks.tsx index 4afb22db17..b530a4e478 100644 --- a/frontend/__test_support__/additional_mocks.tsx +++ b/frontend/__test_support__/additional_mocks.tsx @@ -42,3 +42,8 @@ window.ResizeObserver = (() => ({ disconnect: jest.fn(), // eslint-disable-next-line @typescript-eslint/no-explicit-any })) as any; + +jest.mock("@rollbar/react", () => ({ + Provider: ({ children }: { children: React.ReactNode }) => +
    {children}
    , +})); diff --git a/frontend/__test_support__/fake_state/token.ts b/frontend/__test_support__/fake_state/token.ts index ccee4ac007..26e20e54d5 100644 --- a/frontend/__test_support__/fake_state/token.ts +++ b/frontend/__test_support__/fake_state/token.ts @@ -23,5 +23,11 @@ export const auth: AuthState = { "hXSbH3k4PyxqvPOLYso-R7kjfpOnfFCMfMZLW8TQtg-yj82zs93RP2DHOOx-jxek69" + "tmgNyP3FJaoWHwHW7bXOEv09p3dhNVTCSVNKD9LZczLpuXV7U4oSmL6KLkbzsM6G0P" + "9rrbJ9ASYaOw" + }, + user: { + id: 0, + name: "name", + email: "email", + language: "english", } }; diff --git a/frontend/__tests__/routes_test.tsx b/frontend/__tests__/routes_test.tsx index 84846b303c..a6005740e9 100644 --- a/frontend/__tests__/routes_test.tsx +++ b/frontend/__tests__/routes_test.tsx @@ -12,7 +12,7 @@ jest.mock("takeme", () => ({ })); import React from "react"; -import { shallow } from "enzyme"; +import { mount, shallow } from "enzyme"; import { AnyConnectedComponent, RootComponent } from "../routes"; import { store } from "../redux/store"; import { AuthState } from "../auth/interfaces"; @@ -24,17 +24,30 @@ import { Path } from "../internal_urls"; describe("", () => { it("clears session when not authorized", () => { mockAuth = undefined; + globalConfig.ROLLBAR_CLIENT_TOKEN = "abc"; window.location.pathname = Path.mock(Path.logs()); - const wrapper = shallow(); + const wrapper = mount(); expect(Session.clear).toHaveBeenCalled(); wrapper.unmount(); }); it("authorized", () => { mockAuth = auth; + globalConfig.ROLLBAR_CLIENT_TOKEN = "abc"; window.location.pathname = Path.mock(Path.logs()); - const wrapper = shallow(); + const wrapper = mount(); expect(Session.clear).not.toHaveBeenCalled(); + expect(wrapper.html()).toContain("rollbar"); + wrapper.unmount(); + }); + + it("doesn't add rollbar", () => { + mockAuth = auth; + globalConfig.ROLLBAR_CLIENT_TOKEN = ""; + window.location.pathname = Path.mock(Path.logs()); + const wrapper = mount(); + expect(Session.clear).not.toHaveBeenCalled(); + expect(wrapper.html()).not.toContain("rollbar"); wrapper.unmount(); }); diff --git a/frontend/auth/interfaces.ts b/frontend/auth/interfaces.ts index 6248c79e8a..14889c522f 100644 --- a/frontend/auth/interfaces.ts +++ b/frontend/auth/interfaces.ts @@ -1,3 +1,5 @@ +import { User } from "farmbot/dist/resources/api_resources"; + interface Token { unencoded: UnencodedToken; encoded: string; @@ -5,6 +7,7 @@ interface Token { export interface AuthState { token: Token; + user: User; } interface UnencodedToken { diff --git a/frontend/routes.tsx b/frontend/routes.tsx index 68e38040bc..c82f0a0253 100644 --- a/frontend/routes.tsx +++ b/frontend/routes.tsx @@ -10,6 +10,7 @@ import { UnboundRouteConfig, UNBOUND_ROUTES } from "./route_config"; import { App } from "./app"; import { ConnectedComponent, Provider } from "react-redux"; import { HotkeysProvider } from "@blueprintjs/core"; +import { Provider as RollbarProvider } from "@rollbar/react"; interface RootComponentProps { store: Store; } @@ -61,19 +62,41 @@ export class RootComponent const Route = this.state.Route as React.FunctionComponent<{ children: React.ReactNode }>; - return - - - - - {ChildRoute && - - - } - - - - - ; + const OuterWrapper = ({ children }: { children: React.ReactNode }) => + globalConfig.ROLLBAR_CLIENT_TOKEN + ? {children} + : <>{children}; + + return + + + + + + {ChildRoute && + + + } + + + + + + ; } } diff --git a/package.json b/package.json index 1d51d83c22..f4dff66495 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "@react-spring/three": "9.7.4", "@react-three/drei": "9.111.3", "@react-three/fiber": "8.17.5", + "@rollbar/react": "0.12.0-beta", "@types/lodash": "4.17.7", "@types/markdown-it": "14.1.2", "@types/node": "22.5.5", @@ -76,6 +77,7 @@ "redux": "5.0.1", "redux-immutable-state-invariant": "2.1.0", "redux-thunk": "3.1.0", + "rollbar": "2.26.4", "takeme": "0.12.0", "three": "0.167.1", "typescript": "5.6.2", From b42173d6b0ed1d8eb552212efef969202fcc0d3b Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 18 Sep 2024 17:59:24 -0700 Subject: [PATCH 46/54] upgrade xterm --- frontend/terminal/__tests__/index_test.tsx | 2 +- frontend/terminal/__tests__/support_test.ts | 4 ++-- frontend/terminal/__tests__/terminal_session_test.ts | 2 +- frontend/terminal/index.tsx | 2 +- frontend/terminal/support.ts | 2 +- frontend/terminal/terminal_session.ts | 2 +- package.json | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/frontend/terminal/__tests__/index_test.tsx b/frontend/terminal/__tests__/index_test.tsx index 0cdf990aa3..07b4a03013 100644 --- a/frontend/terminal/__tests__/index_test.tsx +++ b/frontend/terminal/__tests__/index_test.tsx @@ -1,4 +1,4 @@ -jest.mock("xterm/css/xterm.css", () => { }); +jest.mock("@xterm/xterm/css/xterm.css", () => { }); const mockTS = { connect: jest.fn() }; jest.mock("../terminal_session", () => ({ TerminalSession: () => mockTS })); jest.mock("../support", () => ({ diff --git a/frontend/terminal/__tests__/support_test.ts b/frontend/terminal/__tests__/support_test.ts index c18a5fa7d1..a5ef4dcf99 100644 --- a/frontend/terminal/__tests__/support_test.ts +++ b/frontend/terminal/__tests__/support_test.ts @@ -3,7 +3,7 @@ const mockTerminal: Pick = { resize: jest.fn(), }; -jest.mock("xterm", () => { +jest.mock("@xterm/xterm", () => { return { Terminal: function () { return mockTerminal; @@ -11,7 +11,7 @@ jest.mock("xterm", () => { }; }); -import { Terminal } from "xterm"; +import { Terminal } from "@xterm/xterm"; import { attachTerminal, getCredentials } from "../support"; describe("getCredentials", () => { diff --git a/frontend/terminal/__tests__/terminal_session_test.ts b/frontend/terminal/__tests__/terminal_session_test.ts index bf50e9a935..e251b9acdd 100644 --- a/frontend/terminal/__tests__/terminal_session_test.ts +++ b/frontend/terminal/__tests__/terminal_session_test.ts @@ -11,7 +11,7 @@ jest.mock("mqtt", () => { }; }); -import { Terminal } from "xterm"; +import { Terminal } from "@xterm/xterm"; import { TerminalSession } from "../terminal_session"; type FakeTerminal = Pick; diff --git a/frontend/terminal/index.tsx b/frontend/terminal/index.tsx index faa14791fe..d5720c8e3c 100644 --- a/frontend/terminal/index.tsx +++ b/frontend/terminal/index.tsx @@ -1,4 +1,4 @@ -import "xterm/css/xterm.css"; +import "@xterm/xterm/css/xterm.css"; import { getCredentials, attachTerminal } from "./support"; import { TerminalSession } from "./terminal_session"; diff --git a/frontend/terminal/support.ts b/frontend/terminal/support.ts index de675c6631..023542512a 100644 --- a/frontend/terminal/support.ts +++ b/frontend/terminal/support.ts @@ -1,4 +1,4 @@ -import { Terminal } from "xterm"; +import { Terminal } from "@xterm/xterm"; import { AuthState } from "../auth/interfaces"; export const attachTerminal = () => { diff --git a/frontend/terminal/terminal_session.ts b/frontend/terminal/terminal_session.ts index 199a13198b..81ee296dea 100644 --- a/frontend/terminal/terminal_session.ts +++ b/frontend/terminal/terminal_session.ts @@ -1,6 +1,6 @@ import { times } from "lodash"; import mqtt, { MqttClient } from "mqtt"; -import { Terminal } from "xterm"; +import { Terminal } from "@xterm/xterm"; type TerminalLike = Pick; type KeysWeNeed = "publish" | "on" | "once" | "subscribe"; diff --git a/package.json b/package.json index f4dff66495..fc930ae5da 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "three": "0.167.1", "typescript": "5.6.2", "url": "0.11.4", - "xterm": "5.3.0" + "@xterm/xterm": "5.5.0" }, "devDependencies": { "@react-three/eslint-plugin": "0.1.1", From 8688b217d7c03722a43ff60e29df5228204b3229 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 20 Sep 2024 13:01:11 -0700 Subject: [PATCH 47/54] fix 3D load errors --- config/application.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/config/application.rb b/config/application.rb index 61a297c40b..d5a8a1dfd4 100755 --- a/config/application.rb +++ b/config/application.rb @@ -86,6 +86,7 @@ class Application < Rails::Application "browser-http-intake.logs.datadoghq.com", "#{ENV.fetch("API_HOST")}:#{API_PORT}", "#{ENV.fetch("API_HOST")}:3808", + "blob:", # 3D ] config.csp = { default_src: %w(https: 'self'), From 78830e0bdc017eddd68cdbba876a8f999849cb7f Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 20 Sep 2024 13:01:57 -0700 Subject: [PATCH 48/54] fix erroneous timeout message bug --- frontend/app.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/frontend/app.tsx b/frontend/app.tsx index f503b7ed09..13c9341954 100644 --- a/frontend/app.tsx +++ b/frontend/app.tsx @@ -146,6 +146,7 @@ const MUST_LOAD: ResourceName[] = [ ]; export class RawApp extends React.Component { + private _isMounted = false; private get isLoaded() { return (MUST_LOAD.length === intersection(this.props.loaded, MUST_LOAD).length); @@ -156,8 +157,9 @@ export class RawApp extends React.Component { * access into the app, but still warned. */ componentDidMount() { + this._isMounted = true; setTimeout(() => { - if (!this.isLoaded) { + if (this._isMounted && !this.isLoaded) { error(t(Content.APP_LOAD_TIMEOUT_MESSAGE), { title: t("Warning") }); } }, LOAD_TIME_FAILURE_MS); @@ -166,6 +168,10 @@ export class RawApp extends React.Component { warning(t(Content.UNSUPPORTED_BROWSER)); } + componentWillUnmount() { + this._isMounted = false; + } + render() { const syncLoaded = this.isLoaded; const { bot, dispatch, getConfigValue } = this.props; From 8dec78cc0f8b57668f7c896d0132ad09669604fa Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 20 Sep 2024 18:25:18 -0700 Subject: [PATCH 49/54] refactor and increase mobile screen size threshold --- frontend/css/_index.scss | 1 + frontend/css/farm_designer/farm_designer.scss | 21 +++++++---- .../farm_designer/farm_designer_panels.scss | 21 +++++------ frontend/css/farm_designer/farm_events.scss | 2 +- frontend/css/global.scss | 2 +- frontend/css/numbers.scss | 1 + frontend/css/sequences.scss | 4 +-- .../__tests__/connectivity_row_test.tsx | 10 +++--- .../__tests__/connectivity_test.tsx | 15 ++++---- .../connectivity/__tests__/diagram_test.tsx | 14 ++++---- .../devices/connectivity/connectivity.tsx | 3 +- .../devices/connectivity/connectivity_row.tsx | 3 +- frontend/devices/connectivity/diagram.tsx | 3 +- frontend/farm_designer/index.tsx | 5 ++- .../farm_designer/map/__tests__/util_test.ts | 35 ++++++++++++++----- frontend/farm_designer/map/util.ts | 8 +++-- frontend/farm_designer/panel_header.tsx | 2 +- frontend/help/__tests__/header_test.tsx | 11 +++--- frontend/help/header.tsx | 3 +- frontend/nav/__tests__/index_test.tsx | 30 ++++++---------- frontend/nav/e_stop_btn.tsx | 3 +- frontend/nav/index.tsx | 13 +++---- .../os_download/__tests__/content_test.tsx | 9 +++-- frontend/os_download/content.tsx | 3 +- frontend/screen_size.ts | 2 ++ .../sequences/__tests__/sequences_test.tsx | 15 ++++---- .../sequences/panel/__tests__/editor_test.tsx | 10 +++--- frontend/sequences/panel/editor.tsx | 3 +- frontend/sequences/panel/list.tsx | 3 +- frontend/sequences/sequences.tsx | 3 +- .../__tests__/tile_move_absolute_test.tsx | 15 ++++---- .../sequences/step_tiles/tile_assertion.tsx | 3 +- frontend/sequences/step_tiles/tile_lua.tsx | 3 +- .../step_tiles/tile_move_absolute.tsx | 3 +- .../three_d_garden/__tests__/garden_test.tsx | 10 +++--- .../__tests__/zoom_beacons_constants_test.tsx | 15 ++++---- .../__tests__/zoom_beacons_test.tsx | 10 +++--- frontend/three_d_garden/garden.tsx | 3 +- frontend/three_d_garden/zoom_beacons.tsx | 3 +- .../three_d_garden/zoom_beacons_constants.tsx | 3 +- 40 files changed, 192 insertions(+), 134 deletions(-) create mode 100644 frontend/css/numbers.scss create mode 100644 frontend/screen_size.ts diff --git a/frontend/css/_index.scss b/frontend/css/_index.scss index c542161c5b..d771a2eb0c 100644 --- a/frontend/css/_index.scss +++ b/frontend/css/_index.scss @@ -5,6 +5,7 @@ @import "animations"; @import "colors"; @import "fonts"; +@import "numbers"; // Global @import "global"; @import "mobile"; diff --git a/frontend/css/farm_designer/farm_designer.scss b/frontend/css/farm_designer/farm_designer.scss index a1d316c686..40979b6f32 100644 --- a/frontend/css/farm_designer/farm_designer.scss +++ b/frontend/css/farm_designer/farm_designer.scss @@ -3,13 +3,14 @@ height: 100vh; overflow: scroll; .garden-map-legend { - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { &.panel-open { display: none; } &.short-panel { top: 35rem; } + &.panel-closed-mobile, &.panel-closed { top: 15rem; } @@ -27,6 +28,9 @@ &.panel-open { padding: 11rem 2rem 2rem 46.8rem; // at zoom = 1.0: 110px 20px 20px 468px } + &.panel-closed-mobile { + padding: 16rem 2rem 2rem 2rem; // at zoom = 1.0: 160px 20px 20px 20px + } &.short-panel { padding: 35rem 2rem 2rem 2rem; // at zoom = 1.0: 350px 20px 20px 20px } @@ -795,7 +799,7 @@ } .move-to-mode { display: none; - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { display: block; } } @@ -1082,28 +1086,31 @@ position: fixed; bottom: 0; z-index: 2; - width: calc(100% - 450px); + width: calc(100% - $mobile_max_width); background: #e5e5e5; transition: transform 0.5s ease-out; box-shadow: 0 0 1px rgba(0, 0, 0, .3); - transform: translateY(10rem) translateX(450px); + transform: translateY(10rem) translateX($mobile_max_width); + &.panel-closed-mobile, &.panel-closed { width: 100%; transform: translateY(10rem); } &.none-chosen { - transform: translateY(21rem) translateX(450px); + transform: translateY(21rem) translateX($mobile_max_width); + &.panel-closed-mobile, &.panel-closed { transform: translateY(21rem); } } - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { &.panel-open { display: none; } } &.open { - transform: translateY(0) translateX(450px); + transform: translateY(0) translateX($mobile_max_width); + &.panel-closed-mobile, &.panel-closed { transform: translateY(0); } diff --git a/frontend/css/farm_designer/farm_designer_panels.scss b/frontend/css/farm_designer/farm_designer_panels.scss index dcdcd9f196..79cf689354 100644 --- a/frontend/css/farm_designer/farm_designer_panels.scss +++ b/frontend/css/farm_designer/farm_designer_panels.scss @@ -4,21 +4,21 @@ top: 8.9rem; width: 45rem; box-shadow: 0 0 10px $translucent; - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { width: 100%; } } .panel-nav { display: none; - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { display: block; } } .panel-top { margin-top: 0; - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { margin-top: 5rem; } } @@ -31,7 +31,7 @@ .panel-content { padding-top: 1rem; max-height: calc(100vh - 3rem); - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { padding-top: 6rem; max-height: calc(100vh - 9rem); } @@ -48,7 +48,7 @@ .controls-panel { .panel-content { padding-top: 0; - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { padding-top: 4rem; } } @@ -103,7 +103,7 @@ .settings-panel { .panel-content { max-height: calc(100vh - 14rem); - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { max-height: calc(100vh - 19rem); } } @@ -121,6 +121,7 @@ .farm-designer-panels { bottom: 0; z-index: 1; + &.panel-closed-mobile, &.panel-closed { display: none !important; } @@ -2024,7 +2025,7 @@ li { max-height: calc(100vh - 14rem); overflow-y: auto; overflow-x: hidden; - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { max-height: calc(100vh - 19rem); } } @@ -3184,7 +3185,7 @@ li { overflow-y: scroll; overflow-x: hidden; padding-bottom: 6rem; - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { max-height: calc(100vh - 19rem); } .panel-top { @@ -3223,7 +3224,7 @@ li { z-index: 1; margin: 1rem; width: 84%; - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { width: 65%; } } @@ -3355,7 +3356,7 @@ li { .support-panel, .tours-panel, .help-panel { - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { .help-panel-header { position: relative; margin-top: 5rem; diff --git a/frontend/css/farm_designer/farm_events.scss b/frontend/css/farm_designer/farm_events.scss index 85e656016b..ac32557986 100644 --- a/frontend/css/farm_designer/farm_events.scss +++ b/frontend/css/farm_designer/farm_events.scss @@ -16,7 +16,7 @@ overflow-x: hidden; margin-right: -10px; padding-bottom: inherit; - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { max-height: calc(100vh - 20rem); } } diff --git a/frontend/css/global.scss b/frontend/css/global.scss index 8917bb4d39..25d1daae59 100644 --- a/frontend/css/global.scss +++ b/frontend/css/global.scss @@ -1341,7 +1341,7 @@ ul { .controls-popup { color: $off_white; - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { &.panel-open { display: none; } diff --git a/frontend/css/numbers.scss b/frontend/css/numbers.scss new file mode 100644 index 0000000000..72eb47e0ca --- /dev/null +++ b/frontend/css/numbers.scss @@ -0,0 +1 @@ +$mobile_max_width: 500px; diff --git a/frontend/css/sequences.scss b/frontend/css/sequences.scss index e742d74d11..bc230f0642 100644 --- a/frontend/css/sequences.scss +++ b/frontend/css/sequences.scss @@ -451,7 +451,7 @@ .show-on-hover { display: none !important; } - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { .show-on-hover { display: flex !important; } @@ -1100,7 +1100,7 @@ display: block; } } - @media screen and (max-width: 450px) { + @media screen and (max-width: $mobile_max_width) { .fa-question-circle, .run-btn, .fa-ellipsis-v { diff --git a/frontend/devices/connectivity/__tests__/connectivity_row_test.tsx b/frontend/devices/connectivity/__tests__/connectivity_row_test.tsx index e8ab1d1012..961255f0ec 100644 --- a/frontend/devices/connectivity/__tests__/connectivity_row_test.tsx +++ b/frontend/devices/connectivity/__tests__/connectivity_row_test.tsx @@ -1,3 +1,8 @@ +let mockIsMobile = false; +jest.mock("../../../screen_size", () => ({ + isMobile: () => mockIsMobile, +})); + import React from "react"; import { render } from "enzyme"; import { ConnectivityRow, StatusRowProps } from "../connectivity_row"; @@ -36,10 +41,7 @@ describe("", () => { }); it("renders small row", () => { - Object.defineProperty(window, "innerWidth", { - value: 400, - configurable: true - }); + mockIsMobile = true; const p = fakeProps(); p.from = "browser"; const wrapper = render(); diff --git a/frontend/devices/connectivity/__tests__/connectivity_test.tsx b/frontend/devices/connectivity/__tests__/connectivity_test.tsx index 36920a9205..3412de8ff9 100644 --- a/frontend/devices/connectivity/__tests__/connectivity_test.tsx +++ b/frontend/devices/connectivity/__tests__/connectivity_test.tsx @@ -1,3 +1,8 @@ +let mockIsMobile = false; +jest.mock("../../../screen_size", () => ({ + isMobile: () => mockIsMobile, +})); + jest.mock("../../../api/crud", () => ({ refresh: jest.fn() })); jest.mock("../../actions", () => ({ @@ -128,10 +133,7 @@ describe("", () => { }); it("renders network tab", () => { - Object.defineProperty(window, "innerWidth", { - value: 400, - configurable: true - }); + mockIsMobile = true; const p = fakeProps(); p.metricPanelState.realtime = false; p.metricPanelState.network = true; @@ -142,10 +144,7 @@ describe("", () => { }); it("displays more network info", () => { - Object.defineProperty(window, "innerWidth", { - value: 500, - configurable: true - }); + mockIsMobile = false; const p = fakeProps(); p.metricPanelState.realtime = false; p.metricPanelState.network = true; diff --git a/frontend/devices/connectivity/__tests__/diagram_test.tsx b/frontend/devices/connectivity/__tests__/diagram_test.tsx index 45107cd3b9..93a65e061a 100644 --- a/frontend/devices/connectivity/__tests__/diagram_test.tsx +++ b/frontend/devices/connectivity/__tests__/diagram_test.tsx @@ -1,4 +1,9 @@ -import * as React from "react"; +let mockIsMobile = false; +jest.mock("../../../screen_size", () => ({ + isMobile: () => mockIsMobile, +})); + +import React from "react"; import { ConnectivityDiagram, ConnectivityDiagramProps, @@ -10,7 +15,7 @@ import { DiagramNodes, getConnectionColor, } from "../diagram"; -import { Color } from "../../../ui/index"; +import { Color } from "../../../ui"; import { svgMount } from "../../../__test_support__/svg_mount"; describe("", () => { @@ -64,10 +69,7 @@ describe("", () => { }); it("renders small diagram", () => { - Object.defineProperty(window, "innerWidth", { - value: 400, - configurable: true - }); + mockIsMobile = true; const wrapper = svgMount(); expect(wrapper.text()) .toContain("This phoneWeb AppMessage BrokerFarmBotRaspberry PiF"); diff --git a/frontend/devices/connectivity/connectivity.tsx b/frontend/devices/connectivity/connectivity.tsx index 0bf0684bd6..c03c00de6b 100644 --- a/frontend/devices/connectivity/connectivity.tsx +++ b/frontend/devices/connectivity/connectivity.tsx @@ -24,6 +24,7 @@ import { readStatus, restartFirmware, sync } from "../actions"; import { FbosMetricHistoryTable } from "./fbos_metric_history_table"; import { Actions } from "../../constants"; import { forceOnline } from "../must_be_online"; +import { isMobile } from "../../screen_size"; export interface ConnectivityProps { bot: BotState; @@ -156,7 +157,7 @@ export class Connectivity
    - {window.innerWidth <= 450 ? t("This phone") : t("This computer")} + {isMobile() ? t("This phone") : t("This computer")} diff --git a/frontend/devices/connectivity/connectivity_row.tsx b/frontend/devices/connectivity/connectivity_row.tsx index 2c5c7485f7..6118941d77 100644 --- a/frontend/devices/connectivity/connectivity_row.tsx +++ b/frontend/devices/connectivity/connectivity_row.tsx @@ -3,6 +3,7 @@ import { Row, Col } from "../../ui"; import { t } from "../../i18next_wrapper"; import { syncText } from "../../nav/sync_text"; import { SyncStatus } from "farmbot"; +import { isMobile } from "../../screen_size"; /** Data model for a single row within the */ export interface StatusRowProps { @@ -55,7 +56,7 @@ export function ConnectivityRow(props: StatusRowProps) { } }; - const browserFrom = window.innerWidth <= 450 + const browserFrom = isMobile() ? t("This phone") : t("This computer"); diff --git a/frontend/devices/connectivity/diagram.tsx b/frontend/devices/connectivity/diagram.tsx index 431c3dbe88..e94aa74aa9 100644 --- a/frontend/devices/connectivity/diagram.tsx +++ b/frontend/devices/connectivity/diagram.tsx @@ -2,6 +2,7 @@ import React from "react"; import { StatusRowProps } from "./connectivity_row"; import { Color } from "../../ui"; import { t } from "../../i18next_wrapper"; +import { isMobile } from "../../screen_size"; export interface ConnectivityDiagramProps { rowData: StatusRowProps[]; @@ -137,7 +138,7 @@ export function ConnectivityDiagram(props: ConnectivityDiagramProps) { const botAPI = rowData[3]; const botFirmware = rowData[4]; const board = botFirmware.to; - const browser = window.innerWidth <= 450 ? t("This phone") : t("This computer"); + const browser = isMobile() ? t("This phone") : t("This computer"); return
    - push(Path.setup())}> {t("Setup")} - {window.innerWidth > 450 && + {!isMobile() && `: ${setupProgressString(wizardStepResults, { firmwareHardware })}`} :
    ; @@ -202,8 +203,8 @@ export class NavBar extends React.Component> { const job = jobActive ? sortedJobs[0] : undefined; const isPercent = job?.unit == "percent"; const percent = isPercent ? round(job.percent, 1) : ""; - const activeText = window.innerWidth > 450 ? jobNameLookup(job) : ""; - const inactiveText = window.innerWidth > 450 ? t("idle") : t("jobs"); + const activeText = !isMobile() ? jobNameLookup(job) : ""; + const inactiveText = !isMobile() ? t("idle") : t("jobs"); const jobProgress = isPercent ? `${percent}%` : ""; const isOpen = this.props.appState.popups.jobs; return
    @@ -215,7 +216,7 @@ export class NavBar extends React.Component> { target={ - {window.innerWidth > 450 && + {!isMobile() &&

    {jobActive ? activeText : inactiveText}

    {jobActive && diff --git a/frontend/os_download/__tests__/content_test.tsx b/frontend/os_download/__tests__/content_test.tsx index 5395670a0a..fffb3febdf 100644 --- a/frontend/os_download/__tests__/content_test.tsx +++ b/frontend/os_download/__tests__/content_test.tsx @@ -1,3 +1,8 @@ +let mockIsMobile = false; +jest.mock("../../screen_size", () => ({ + isMobile: () => mockIsMobile, +})); + import React from "react"; import { mount } from "enzyme"; import { OsDownloadPage } from "../content"; @@ -24,13 +29,13 @@ describe("", () => { }); it("renders on small screens", () => { - Object.defineProperty(window, "innerWidth", { value: 400, configurable: true }); + mockIsMobile = true; const wrapper = mount(); expect(wrapper.text().toLowerCase()).toContain("download"); }); it("renders on large screens", () => { - Object.defineProperty(window, "innerWidth", { value: 500, configurable: true }); + mockIsMobile = false; const wrapper = mount(); expect(wrapper.text().toLowerCase()).toContain("download"); }); diff --git a/frontend/os_download/content.tsx b/frontend/os_download/content.tsx index 365a46921e..a0e213a886 100644 --- a/frontend/os_download/content.tsx +++ b/frontend/os_download/content.tsx @@ -2,6 +2,7 @@ import React from "react"; import { t } from "../i18next_wrapper"; import { Content, SetupWizardContent } from "../constants"; import { FilePath } from "../internal_urls"; +import { isMobile } from "../screen_size"; interface ReleaseItem { computer: string; @@ -420,7 +421,7 @@ class OsDownloadWizard export const OsDownloadPage = () => { const [wizard, setWizard] = React.useState(true); - if (window.innerWidth > 450) { + if (!isMobile()) { (document.querySelector("html") as HTMLElement).style.fontSize = "15px"; } return
    diff --git a/frontend/screen_size.ts b/frontend/screen_size.ts new file mode 100644 index 0000000000..17efcf1f46 --- /dev/null +++ b/frontend/screen_size.ts @@ -0,0 +1,2 @@ +export const isMobile = () => window.innerWidth <= 500; +export const isDesktop = () => window.innerWidth > 768; diff --git a/frontend/sequences/__tests__/sequences_test.tsx b/frontend/sequences/__tests__/sequences_test.tsx index 50fd16ea71..bf29cfa449 100644 --- a/frontend/sequences/__tests__/sequences_test.tsx +++ b/frontend/sequences/__tests__/sequences_test.tsx @@ -1,3 +1,8 @@ +let mockIsMobile = false; +jest.mock("../../screen_size", () => ({ + isMobile: () => mockIsMobile, +})); + import { Path } from "../../internal_urls"; let mockPath = ""; jest.mock("../../history", () => ({ @@ -59,10 +64,7 @@ describe("", () => { it("redirects to mobile interface", () => { mockPath = Path.mock(Path.sequencePage()); - Object.defineProperty(window, "innerWidth", { - value: 400, - configurable: true, - }); + mockIsMobile = true; const p = fakeProps(); p.sequence = undefined; shallow(); @@ -71,10 +73,7 @@ describe("", () => { it("redirects to mobile interface: sequence selected", () => { mockPath = Path.mock(Path.sequencePage()); - Object.defineProperty(window, "innerWidth", { - value: 400, - configurable: true, - }); + mockIsMobile = true; const p = fakeProps(); p.sequence = fakeSequence(); shallow(); diff --git a/frontend/sequences/panel/__tests__/editor_test.tsx b/frontend/sequences/panel/__tests__/editor_test.tsx index 7e2373af55..da0bc27b2b 100644 --- a/frontend/sequences/panel/__tests__/editor_test.tsx +++ b/frontend/sequences/panel/__tests__/editor_test.tsx @@ -1,3 +1,8 @@ +let mockIsMobile = false; +jest.mock("../../../screen_size", () => ({ + isMobile: () => mockIsMobile, +})); + jest.mock("../../../sequences/set_active_sequence_by_name", () => ({ setActiveSequenceByName: jest.fn() })); @@ -129,10 +134,7 @@ describe("", () => { }); it("navigates to full page editor", () => { - Object.defineProperty(window, "innerWidth", { - value: 500, - configurable: true - }); + mockIsMobile = false; const p = fakeProps(); const wrapper = mount(); wrapper.find(".fa-expand").first().simulate("click"); diff --git a/frontend/sequences/panel/editor.tsx b/frontend/sequences/panel/editor.tsx index 4a8fc441ab..1350350a63 100644 --- a/frontend/sequences/panel/editor.tsx +++ b/frontend/sequences/panel/editor.tsx @@ -32,6 +32,7 @@ import { error } from "../../toast/toast"; import { noop } from "lodash"; import { addNewSequenceToFolder } from "../../folders/actions"; import { Position } from "@blueprintjs/core"; +import { isMobile } from "../../screen_size"; interface SequencesState { processingTitle: boolean; @@ -85,7 +86,7 @@ export class RawDesignerSequenceEditor content={ this.props.dispatch(edit(sequence, { color }))} current={sequence.body.color} />} />} - {sequence && window.innerWidth > 450 && + {sequence && !isMobile() && diff --git a/frontend/sequences/panel/list.tsx b/frontend/sequences/panel/list.tsx index 1f19c9c1e7..3727503b46 100644 --- a/frontend/sequences/panel/list.tsx +++ b/frontend/sequences/panel/list.tsx @@ -24,6 +24,7 @@ import { import { SequencesPanelState } from "../../interfaces"; import { Actions } from "../../constants"; import { push } from "../../history"; +import { isMobile } from "../../screen_size"; interface DesignerSequenceListState { featuredList: FeaturedSequence[]; @@ -74,7 +75,7 @@ export class RawDesignerSequenceList searchTerm={this.props.folderData.searchTerm || ""} placeholder={t("Search sequences...")} onChange={updateSearchTerm} /> - {window.innerWidth > 450 && + {!isMobile() &&
    diff --git a/frontend/three_d_garden/__tests__/garden_test.tsx b/frontend/three_d_garden/__tests__/garden_test.tsx index 1f179b5a48..7b50ce3dfe 100644 --- a/frontend/three_d_garden/__tests__/garden_test.tsx +++ b/frontend/three_d_garden/__tests__/garden_test.tsx @@ -1,3 +1,8 @@ +let mockIsDesktop = false; +jest.mock("../../screen_size", () => ({ + isDesktop: () => mockIsDesktop, +})); + import React from "react"; import { mount } from "enzyme"; import { GardenModelProps, GardenModel } from "../garden"; @@ -20,10 +25,7 @@ describe("", () => { }); it("renders other options", () => { - Object.defineProperty(window, "innerWidth", { - value: 400, - configurable: true, - }); + mockIsDesktop = false; const p = fakeProps(); p.config.perspective = false; p.config.plants = ""; diff --git a/frontend/three_d_garden/__tests__/zoom_beacons_constants_test.tsx b/frontend/three_d_garden/__tests__/zoom_beacons_constants_test.tsx index 9e97790599..7912811fc8 100644 --- a/frontend/three_d_garden/__tests__/zoom_beacons_constants_test.tsx +++ b/frontend/three_d_garden/__tests__/zoom_beacons_constants_test.tsx @@ -1,3 +1,8 @@ +let mockIsDesktop = false; +jest.mock("../../screen_size", () => ({ + isDesktop: () => mockIsDesktop, +})); + import { Camera, FOCI, @@ -35,20 +40,14 @@ describe("getFocus()", () => { describe("getCameraOffset()", () => { it("returns camera offset: wide", () => { - Object.defineProperty(window, "innerWidth", { - value: 1000, - configurable: true - }); + mockIsDesktop = true; const config = clone(INITIAL); const focus = FOCI(config)[0]; expect(getCameraOffset(focus).position[1]).toEqual(0); }); it("returns camera offset: narrow", () => { - Object.defineProperty(window, "innerWidth", { - value: 400, - configurable: true - }); + mockIsDesktop = false; const config = clone(INITIAL); const focus = FOCI(config)[0]; expect(getCameraOffset(focus).position[1]).toEqual(-1000); diff --git a/frontend/three_d_garden/__tests__/zoom_beacons_test.tsx b/frontend/three_d_garden/__tests__/zoom_beacons_test.tsx index a1ed4c396a..51ee61976e 100644 --- a/frontend/three_d_garden/__tests__/zoom_beacons_test.tsx +++ b/frontend/three_d_garden/__tests__/zoom_beacons_test.tsx @@ -1,3 +1,8 @@ +let mockIsDesktop = true; +jest.mock("../../screen_size", () => ({ + isDesktop: () => mockIsDesktop, +})); + import React from "react"; import { mount } from "enzyme"; import { ZoomBeacons, ZoomBeaconsProps } from "../zoom_beacons"; @@ -36,10 +41,7 @@ describe("", () => { }); it("renders mobile", () => { - Object.defineProperty(window, "innerWidth", { - value: 400, - configurable: true, - }); + mockIsDesktop = false; const wrapper = mount(); expect(wrapper.html()).toContain("60"); }); diff --git a/frontend/three_d_garden/garden.tsx b/frontend/three_d_garden/garden.tsx index 174c72a168..49bde51706 100644 --- a/frontend/three_d_garden/garden.tsx +++ b/frontend/three_d_garden/garden.tsx @@ -23,6 +23,7 @@ import { getCamera, Camera as CameraInterface } from "./zoom_beacons_constants"; import { AmbientLight, AxesHelper, Group, MeshBasicMaterial, MeshPhongMaterial, } from "./components"; +import { isDesktop } from "../screen_size"; export interface GardenModelProps { config: Config; @@ -164,7 +165,7 @@ export const GardenModel = (props: GardenModelProps) => { ; const initCamera: CameraInterface = { - position: window.innerWidth > 768 ? [2000, -4000, 2500] : [5400, -2500, 3400], + position: isDesktop() ? [2000, -4000, 2500] : [5400, -2500, 3400], target: [0, 0, 0], }; const camera = getCamera(config, props.activeFocus, initCamera); diff --git a/frontend/three_d_garden/zoom_beacons.tsx b/frontend/three_d_garden/zoom_beacons.tsx index 8b9680271e..e7b04d4c30 100644 --- a/frontend/three_d_garden/zoom_beacons.tsx +++ b/frontend/three_d_garden/zoom_beacons.tsx @@ -4,6 +4,7 @@ import { Config } from "./config"; import { FOCI, getCameraOffset, setUrlParam } from "./zoom_beacons_constants"; import { useSpring, animated } from "@react-spring/three"; import { Group, MeshPhongMaterial } from "./components"; +import { isDesktop } from "../screen_size"; const beaconColor = "#0266b5"; @@ -50,7 +51,7 @@ export const ZoomBeacons = (props: ZoomBeaconsProps) => { // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion document.querySelector(".garden-bed-3d-model") as HTMLElement | null; - const beaconSize = window.innerWidth > 768 ? 40 : 60; + const beaconSize = isDesktop() ? 40 : 60; return {FOCI(props.config).map(focus => { const camera = getCameraOffset(focus); diff --git a/frontend/three_d_garden/zoom_beacons_constants.tsx b/frontend/three_d_garden/zoom_beacons_constants.tsx index dbb950a511..8b0ccf3103 100644 --- a/frontend/three_d_garden/zoom_beacons_constants.tsx +++ b/frontend/three_d_garden/zoom_beacons_constants.tsx @@ -3,6 +3,7 @@ import { findIndex } from "lodash"; import { Config } from "./config"; import { threeSpace, zDir, zZero } from "./helpers"; import { ExternalUrl } from "../external_urls"; +import { isDesktop } from "../screen_size"; export type VectorXyz = [x: number, y: number, z: number]; @@ -385,7 +386,7 @@ export const getFocus = (config: Config, activeFocus: string) => FOCI(config)[findIndex(FOCI(config), ["label", activeFocus])]; export const getCameraOffset = (focus: Focus) => - window.innerWidth > 768 + isDesktop() ? focus.camera.wide : focus.camera.narrow; From 0f2c85e3cc3469ad6f29d3aa396e7e65ac74f73f Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Sat, 21 Sep 2024 14:28:39 -0700 Subject: [PATCH 50/54] fix promo CSS and add electronics box --- app/views/dashboard/promo.html.erb | 3 + frontend/css/farm_designer/farm_designer.scss | 25 +++-- frontend/three_d_garden/bot.tsx | 104 +++++++++++++++++- frontend/three_d_garden/lab.tsx | 2 +- 4 files changed, 124 insertions(+), 10 deletions(-) diff --git a/app/views/dashboard/promo.html.erb b/app/views/dashboard/promo.html.erb index f23398816f..5722dd921b 100644 --- a/app/views/dashboard/promo.html.erb +++ b/app/views/dashboard/promo.html.erb @@ -1,5 +1,8 @@ <% # Intentionally blank %>

    +Rj zTBy3wNNCgi`AGg#cG$LaGh>+nZ@Qiy8sf5;buA0Ey=m>*o|}K@w}gM1d|527Y^za772 z_2lNd8^Sjk{!14YoVyOo$E!A7bsl}+{OplXVybhw)aAOWiurC;1uy;2O0pZ)Sufn( zQn{(zW!RE@`VsX-DqYMgHQif9OiTxgwpP_c7A9l=B+DHk7lYCmdSt z&}K;4KI`;(bDB}@YM(2yq9%Y?lA4Mkgdzu7g*gYT38pzArDV;uKkS*)+%5Ga9 zMSg8#?}u9(pOnaYJt)62DC7O4M>xRfU8inGSFp9ogGu8@6l28w#)8??>dp}PGwz}U zz9#k>CF0oZhwY7(-omNOf;|%4JhS&kuL?AjZq6I8f4#i#e3Mtz;tPk{JfdHVTts*T zNo_<=QKCbkb_cKj_qI-fKW@&Slv3P(A3dSyGwgvD{2rH}NI%_o@XoQ)m*!3P2do=$ zle`v{Ed>u-ar^qmr%xR5t-aN=VaQh|F&lQ@9c}U<@79vC=^=yatnDw^w3l<5A8?!S z&Ut)K*e18`+Dj7RI5Qta`s$K=uVE`rA z!q}ORDzl5ZGG&ouQFWq|=uuNs*O0Rh3kbu)<6XkBDW;=!hqKhn)z#NwN(SFdq|X$v z7c(?m3N$g>Ogv;dWZ(7s&3Q+QnNoC;KJ_>@6;(Sp{MhtxQ*r!{bH^$Z^7#&qo@oED zt7ubz+v)y0*Er12Q9n%a`3|H7G>zv|CO*&R)h74EW178Xe$2lj1{BYr9p%LL(h^^c z-qfwJLL6=lO!)L~zTv-z&z>5TTzRu`Mi%?$fo)Jpt0^qn&b8OR)h&ALVm79ywX}c~ zm>{U__L`5pk*G<;a)zK^KK8)k7<>VSsA~m%W{o^O>H}JW_Gst$lEaRU$9*QW&A;Vz z_~juT-3wv$`6jsXAH!nKlA3db&@0R6q08>?uZ$iQkGa>LOKy)Y8N3jivTIzZ>i$*l z_OxJ?L7k9GBX)kdouq-s=Y`M&L3?&{qh;&;+t!{lKXXhb`*@l4`!!kc3;yKi3Fmwd zJWD_G9G7uMf9_7w`mbFC@A*c{Tgi&zcM96pFm8K{xXMr2Rs6Z`mUPDzOI!JC)CYbJ ztbfoUMkrL0u*!{)+;>fFfy{<>>FO=~te@@ZRA~>Rm7gfTesuiX{XJ}j#r~V(AF^o} z-fS>dHRM0h{o#k*i_pbqsQK?%>u&$|FRwv2` F{x5e_MJoUR literal 0 HcmV?d00001 diff --git a/public/3D/models/right_bracket.glb b/public/3D/models/right_bracket.glb new file mode 100644 index 0000000000000000000000000000000000000000..ecca8fe389af87e390f049f2d4e693fb9a5967ff GIT binary patch literal 4408 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 o4w`XTVEGd-98c-IMAZm?0fnl%(*OVf literal 0 HcmV?d00001 diff --git a/public/3D/models/seed_bin.glb b/public/3D/models/seed_bin.glb new file mode 100644 index 0000000000000000000000000000000000000000..ae497533ab020bba821a9727507092f9dd8cb97a GIT binary patch literal 7932 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 literal 0 HcmV?d00001 diff --git a/public/3D/models/seed_tray.glb b/public/3D/models/seed_tray.glb new file mode 100644 index 0000000000000000000000000000000000000000..3a018637ddd57d2aeac5d8440f987057b94ed41d GIT binary patch literal 27552 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