[{"data":1,"prerenderedAt":14184},["ShallowReactive",2],{"blog-\u002Fblog\u002F2026\u002F07\u002Fdigital-work-instruction":3,"blog-all-for-related":14183},{"id":4,"title":5,"authors":6,"body":8,"cta":14160,"date":14164,"description":14165,"extension":14166,"image":14167,"lastUpdated":14168,"meta":14169,"navigation":5404,"path":14174,"seo":14175,"sitemap":14176,"stem":14177,"subtitle":14178,"tags":14179,"tldr":14181,"video":14168,"__hash__":14182},"blog\u002Fblog\u002F2026\u002F07\u002Fdigital-work-instruction.md","Building Digital Work Instructions Dashboard for the Shop Floor",[7],"sumit-shinde",{"type":9,"value":10,"toc":14138},"minimark",[11,15,18,28,36,39,49,58,63,66,129,139,143,146,171,174,177,199,203,206,214,4789,4796,4800,4821,4914,4923,4926,4930,4933,4940,4961,4970,4973,4976,4998,5013,5017,5020,5044,5050,5146,5160,5192,5206,5218,5222,5231,5249,5619,5625,5634,5638,5641,5652,5658,5714,5717,5793,5797,5800,5805,5841,5845,5873,6112,6150,6163,6172,6176,6179,6201,6445,6496,6506,6510,6513,6528,7038,7043,7059,9206,9226,9235,9245,9254,9275,9284,9288,9291,9311,9315,9326,9337,9358,9369,12626,12635,12642,13038,13046,13065,13068,13072,13079,13112,13307,13341,13344,13348,13354,13363,13439,13448,13457,13466,13864,13899,13908,13911,13915,13921,13958,14098,14108,14111,14114,14118,14128,14135],[12,13,14],"p",{},"Operators need to know what to build, how to build it, and what to do when something breaks. Digital work instructions put that on a screen, guided steps, a checklist, buttons to finish or flag a defect, and retire the paper binder.",[12,16,17],{},"But shared stations raise a question paper never had: who's using it? Without a way to tell operators apart, the work order, the current step, and the record of what happened all blur together. Authentication draws the line, the operator's identity becomes the thread the app hangs on.",[12,19,20,25],{},[21,22],"img",{"alt":23,"src":24},"Digital work instructions dashboard showing operator work orders, production status","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fdigital-work-instruction-dashboard.png",[26,27,23],"em",{},[12,29,30,34],{},[21,31],{"alt":32,"src":33},"Operator interface displaying guided work instructions with step completion and defect reporting options","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fdigital-work-instruction-2.png",[26,35,32],{},[12,37,38],{},"In this article, we'll build a digital work instructions app in FlowFuse: an operator interface with work orders, step-by-step assembly guidance, defect reporting, and traceability via authentication.",[40,41,42],"blockquote",{},[12,43,44,48],{},[45,46,47],"strong",{},"Note:"," This demo is deliberately configured with a preset demo user so anyone can try it, even without being on the team where it's deployed. The version you build following this article uses FlowFuse User Authentication, which limits dashboard access to members of the same team.",[12,50,51,52,57],{},"You can interact with the live demo here: ",[53,54,56],"a",{"href":55},"https:\u002F\u002Fexpensive-pied-flycatcher-5052.flowfuse.cloud\u002Fdashboard\u002Fhome","Try the Digital Work Instruction Dashboard Demo",".",[59,60,62],"h2",{"id":61},"what-youll-need","What You'll Need",[12,64,65],{},"Before you start building, get these ready:",[67,68,69,83,89,123],"ul",{},[70,71,72,75,76,82],"li",{},[45,73,74],{},"A FlowFuse account."," ",[53,77,81],{"href":78,"rel":79},"https:\u002F\u002Fapp.flowfuse.com\u002Faccount\u002Fcreate",[80],"nofollow","Sign up"," for FlowFuse Cloud, or use a self-hosted instance.",[70,84,85,88],{},[45,86,87],{},"A FlowFuse instance up and running."," If you don't have one yet, create a new instance from your FlowFuse Platform.",[70,90,91,94,95,99,100,103,104,103,107,103,110,103,113,103,116,103,119,122],{},[45,92,93],{},"FlowFuse Dashboard installed."," This tutorial uses ",[96,97,98],"code",{},"@flowfuse\u002Fnode-red-dashboard"," nodes (",[96,101,102],{},"ui-template",", ",[96,105,106],{},"ui-table",[96,108,109],{},"ui-form",[96,111,112],{},"ui-button",[96,114,115],{},"ui-control",[96,117,118],{},"ui-event",[96,120,121],{},"ui-text",") to build the operator interface. Install it from the Palette Manager if it isn't already in your instance.",[70,124,125,128],{},[45,126,127],{},"The FlowFuse Dashboard user addon."," This is what attaches the logged-in user to every dashboard message. We'll install it in the first section.",[40,130,131],{},[12,132,133,134,138],{},"Note: The Multi-User addon is available to Teams and Enterprise Self-Hosted customers. If you're on a different tier, ",[53,135,137],{"href":136},"\u002Fcontact-us\u002F","contact us"," for the configuration to get started.",[59,140,142],{"id":141},"how-the-application-works","How the Application Works",[12,144,145],{},"Before we build anything, let's walk through what the app does and how the pieces fit together. There are three pages, and one idea holding them together.",[147,148,149,159,165],"ol",{},[70,150,151,154,155,158],{},[45,152,153],{},"Home."," After logging in, the application uses the operator's username to retrieve only the work orders assigned to them from the ERP or MES. It displays their station, production summary, the highest-priority work order, and the remaining queue. Selecting ",[45,156,157],{},"Start Work Order"," opens the instructions.",[70,160,161,164],{},[45,162,163],{},"Instructions."," Operators follow step-by-step instructions with images, checklists, and target cycle times. They can progress through each step, complete the operation, or report an issue at any time.",[70,166,167,170],{},[45,168,169],{},"Report Issue."," Operators can quickly log defects by selecting the issue type, severity, affected part, and description, with the issue automatically linked to the current work order.",[12,172,173],{},"The logged-in username acts as the application's lookup key. It retrieves the operator's assigned work orders and stores their active work order and current step, allowing them to resume exactly where they left off, even on shared production stations.",[12,175,176],{},"There are two different questions the app has to answer, and it's worth keeping them separate from the start:",[67,178,179,189],{},[70,180,181,184,185,188],{},[45,182,183],{},"\"Where is this operator's data stored?\""," — under a persistent global key named after their username, e.g. ",[96,186,187],{},"global.get('operator1', 'persistent')",". This is a durable, shared store, and it's meant to be: it's what lets progress survive reloads and reconnects.",[70,190,191,194,195,198],{},[45,192,193],{},"\"Who is acting right now, in this message?\""," — this must be read fresh from the message that triggered the flow (",[96,196,197],{},"msg._client.user","), not from a single shared \"current user\" variable. A shared variable has only one value at a time; the moment a second operator's browser connects, it overwrites the first operator's identity for the whole running flow. We'll come back to this the moment it becomes relevant, but it's the one rule that makes every \"per operator\" claim in this tutorial actually true when two people are logged in at once.",[59,200,202],{"id":201},"importing-the-simulated-flow","Importing the Simulated Flow",[12,204,205],{},"Instead of connecting to a real ERP or MES, we'll use a simple simulated backend that serves sample work orders through an HTTP API.",[147,207,208],{},[70,209,210,211,57],{},"Import the following flow into FlowFuse and click ",[45,212,213],{},"Deploy",[215,216,218],"render-flow",{":height":217},"300",[219,220,225],"pre",{"className":221,"code":222,"language":223,"meta":224,"style":224},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[{\"id\":\"83cd1b1c4cc8e310\",\"type\":\"group\",\"z\":\"3012f9c2796b5b41\",\"style\":{\"stroke\":\"#b2b3bd\",\"stroke-opacity\":\"1\",\"fill\":\"#f2f3fb\",\"fill-opacity\":\"0.5\",\"label\":true,\"label-position\":\"nw\",\"color\":\"#32333b\"},\"nodes\":[\"5a2c1cb7932accb9\",\"f2334a5d527a684a\",\"f65db363fdde0eba\",\"cdda81f6a2701b7c\",\"8554ad9dfdb36f54\",\"6dd109a105da5dd5\",\"439862e5c86675cd\",\"9d853fad37785bec\",\"3506d88cd094d44c\",\"wo_stats_http_in\",\"wo_stats_func\",\"wo_stats_response\",\"6d1644eabb9a5bf5\",\"62760b81dea503c2\"],\"x\":44,\"y\":59,\"w\":652,\"h\":482},{\"id\":\"5a2c1cb7932accb9\",\"type\":\"http in\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"GET Work Orders\",\"url\":\"\u002Fworkorders\",\"method\":\"get\",\"upload\":false,\"skipBodyParsing\":false,\"swaggerDoc\":\"\",\"x\":160,\"y\":300,\"wires\":[[\"f2334a5d527a684a\"]]},{\"id\":\"f2334a5d527a684a\",\"type\":\"function\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"Generate Work Orders\",\"func\":\"const stationId = msg.req.query.stationId;\\nconst username = msg.req.query.username;\\n\\nconst workOrders = global.get(\\\"workOrders\\\", \\\"persistent\\\") || [];\\n\\nconst result = workOrders.filter(w =>\\n    w.stationId === stationId &&\\n    w.assignedTo === username &&\\n    w.status !== \\\"defect\\\" &&\\n    w.status !== \\\"completed\\\"\\n);\\n\\nmsg.payload = result;\\n\\nreturn msg;\",\"outputs\":1,\"timeout\":\"\",\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":420,\"y\":300,\"wires\":[[\"f65db363fdde0eba\"]]},{\"id\":\"f65db363fdde0eba\",\"type\":\"http response\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"\",\"statusCode\":\"\",\"headers\":{\"Content-Type\":\"application\u002Fjson\"},\"x\":610,\"y\":300,\"wires\":[]},{\"id\":\"cdda81f6a2701b7c\",\"type\":\"http in\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"POST Mark Defect\",\"url\":\"\u002Fworkorders\u002Fdefect\",\"method\":\"post\",\"upload\":false,\"skipBodyParsing\":false,\"swaggerDoc\":\"\",\"x\":160,\"y\":400,\"wires\":[[\"8554ad9dfdb36f54\"]]},{\"id\":\"8554ad9dfdb36f54\",\"type\":\"function\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"Mark Defect\",\"func\":\"const { workOrderId, issueType, severity, affectedPart, description } = msg.payload || {};\\n\\nif (!workOrderId || !issueType || !severity || !affectedPart) {\\n    msg.statusCode = 400;\\n    msg.payload = { error: 'workOrderId, issueType, severity, and affectedPart are required' };\\n    return msg;\\n}\\n\\nconst workOrders = global.get('workOrders', 'persistent') || [];\\nconst idx = workOrders.findIndex(w => w.workOrderId === workOrderId);\\n\\nif (idx === -1) {\\n    msg.statusCode = 404;\\n    msg.payload = { error: 'Work order not found' };\\n    return msg;\\n}\\n\\nworkOrders[idx].status = 'defect';\\nworkOrders[idx].defect = {\\n    issueType,\\n    severity,\\n    affectedPart,\\n    description: description || null,\\n    reportedAt: new Date().toISOString()\\n};\\n\\nglobal.set('workOrders', workOrders, 'persistent');\\n\\nmsg.statusCode = 200;\\nmsg.payload = { success: true, workOrder: workOrders[idx] };\\nreturn msg;\",\"outputs\":1,\"timeout\":\"\",\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":390,\"y\":400,\"wires\":[[\"6dd109a105da5dd5\"]]},{\"id\":\"6dd109a105da5dd5\",\"type\":\"http response\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"\",\"statusCode\":\"\",\"headers\":{\"Content-Type\":\"application\u002Fjson\"},\"x\":610,\"y\":400,\"wires\":[]},{\"id\":\"439862e5c86675cd\",\"type\":\"http in\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"POST Complete Order\",\"url\":\"\u002Fworkorders\u002Fcomplete\",\"method\":\"post\",\"upload\":false,\"skipBodyParsing\":false,\"swaggerDoc\":\"\",\"x\":170,\"y\":500,\"wires\":[[\"9d853fad37785bec\"]]},{\"id\":\"9d853fad37785bec\",\"type\":\"function\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"Complete Work Order\",\"func\":\"const { workOrderId } = msg.payload || {};\\n\\nif (!workOrderId) {\\n    msg.statusCode = 400;\\n    msg.payload = { error: 'workOrderId is required' };\\n    return msg;\\n}\\n\\nconst workOrders = global.get('workOrders', 'persistent') || [];\\nconst idx = workOrders.findIndex(w => w.workOrderId === workOrderId);\\n\\nif (idx === -1) {\\n    msg.statusCode = 404;\\n    msg.payload = { error: 'Work order not found' };\\n    return msg;\\n}\\n\\nworkOrders[idx].status = 'completed';\\nworkOrders[idx].completedAt = new Date().toISOString();\\n\\nglobal.set('workOrders', workOrders, 'persistent');\\n\\nmsg.statusCode = 200;\\nmsg.payload = { success: true, workOrder: workOrders[idx] };\\nreturn msg;\",\"outputs\":1,\"timeout\":\"\",\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":410,\"y\":500,\"wires\":[[\"3506d88cd094d44c\"]]},{\"id\":\"3506d88cd094d44c\",\"type\":\"http response\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"\",\"statusCode\":\"\",\"headers\":{\"Content-Type\":\"application\u002Fjson\"},\"x\":620,\"y\":500,\"wires\":[]},{\"id\":\"wo_stats_http_in\",\"type\":\"http in\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"GET Work Order Stats\",\"url\":\"\u002Fworkorders\u002Fstats\",\"method\":\"get\",\"upload\":false,\"skipBodyParsing\":false,\"swaggerDoc\":\"\",\"x\":180,\"y\":220,\"wires\":[[\"wo_stats_func\"]]},{\"id\":\"wo_stats_func\",\"type\":\"function\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"Compute Stats\",\"func\":\"const workOrders = global.get('workOrders', 'persistent') || [];\\nnode.warn(msg.req.query);\\nconst stationId = msg.req.query.stationId;\\nconst username = msg.req.query.username;\\n\\n\u002F\u002F Filter only by station\\nconst stationWorkOrders = stationId\\n    ? workOrders.filter(w => w.stationId === stationId)\\n    : workOrders;\\n\\nconst total = stationWorkOrders.length;\\nconst completed = stationWorkOrders.filter(w => w.status === \\\"completed\\\").length;\\nconst defected = stationWorkOrders.filter(w => w.status === \\\"defect\\\").length;\\n\\n\u002F\u002F Filter by user within the station\\nconst assignedToMe = username\\n    ? stationWorkOrders.filter(w => w.assignedTo === username).length\\n    : 0;\\n\\nmsg.statusCode = 200;\\nmsg.payload = {\\n    total,\\n    completed,\\n    defected,\\n    assignedToMe\\n};\\n\\nreturn msg;\",\"outputs\":1,\"timeout\":\"\",\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":400,\"y\":220,\"wires\":[[\"wo_stats_response\"]]},{\"id\":\"wo_stats_response\",\"type\":\"http response\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"\",\"statusCode\":\"\",\"headers\":{\"Content-Type\":\"application\u002Fjson\"},\"x\":610,\"y\":220,\"wires\":[]},{\"id\":\"6d1644eabb9a5bf5\",\"type\":\"function\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"Generate Mock Work Orders\",\"func\":\"const user = global.get(\\\"user\\\", \\\"persistent\\\");\\nconst currentUser = user?.username || \\\"operator1\\\";\\n\\n\u002F\u002F Pool of 5 operators (logged-in user + 4 others)\\nconst operators = [\\n    currentUser,\\n    \\\"operator2\\\",\\n    \\\"operator3\\\",\\n    \\\"operator4\\\",\\n    \\\"operator5\\\"\\n];\\n\\nconst vehicles = [\\n    {\\n        model: \\\"Sedan X\\\",\\n        variants: [\\\"Standard\\\", \\\"Premium\\\", \\\"Sport\\\"],\\n        colors: [\\\"White\\\", \\\"Black\\\", \\\"Red\\\"]\\n    },\\n    {\\n        model: \\\"SUV Y\\\",\\n        variants: [\\\"Base\\\", \\\"Premium\\\", \\\"Sport\\\"],\\n        colors: [\\\"Grey\\\", \\\"White\\\", \\\"Black\\\"]\\n    },\\n    {\\n        model: \\\"Truck Z\\\",\\n        variants: [\\\"Standard\\\", \\\"Heavy Duty\\\"],\\n        colors: [\\\"Blue\\\", \\\"Green\\\", \\\"White\\\"]\\n    },\\n    {\\n        model: \\\"Hatchback W\\\",\\n        variants: [\\\"Base\\\", \\\"Sport\\\"],\\n        colors: [\\\"Silver\\\", \\\"Yellow\\\", \\\"Red\\\"]\\n    }\\n];\\n\\nconst operations = [\\n    {\\n        operationId: \\\"OP_WHEEL_FL\\\",\\n        name: \\\"Install Front Left Wheel\\\",\\n        instructionSetId: \\\"INS001\\\",\\n        estimatedCycleTime: 45\\n    },\\n    {\\n        operationId: \\\"OP_WHEEL_FR\\\",\\n        name: \\\"Install Front Right Wheel\\\",\\n        instructionSetId: \\\"INS002\\\",\\n        estimatedCycleTime: 45\\n    }\\n];\\n\\nconst priorities = [\\\"Critical\\\", \\\"High\\\", \\\"Normal\\\", \\\"Low\\\"];\\nconst statuses = [\\\"Ready\\\", \\\"Waiting\\\", \\\"Queued\\\"];\\n\\nfunction random(arr) {\\n    return arr[Math.floor(Math.random() * arr.length)];\\n}\\n\\n\u002F\u002F Read existing work orders\\nconst existingWorkOrders = global.get(\\\"workOrders\\\", \\\"persistent\\\") || [];\\n\\n\u002F\u002F Start IDs after the existing ones\\nlet nextId = 10245 + existingWorkOrders.length;\\n\\n\u002F\u002F Generate 20 new work orders\\nfor (let i = 0; i \u003C 20; i++) {\\n    const vehicle = random(vehicles);\\n    const operation = random(operations);\\n\\n    existingWorkOrders.push({\\n        workOrderId: `WO-${nextId++}`,\\n        stationId: \\\"ST12\\\",\\n        status: random(statuses),\\n        priority: random(priorities),\\n        assignedTo: random(operators),\\n        vehicle: {\\n            vin: `MH01AB${1234567890 + existingWorkOrders.length}`,\\n            model: vehicle.model,\\n            variant: random(vehicle.variants),\\n            color: random(vehicle.colors)\\n        },\\n        operation: {\\n            operationId: operation.operationId,\\n            name: operation.name,\\n            estimatedCycleTime: operation.estimatedCycleTime,\\n            instructionSetId: operation.instructionSetId\\n        }\\n    });\\n}\\n\\n\u002F\u002F Save updated list\\nglobal.set(\\\"workOrders\\\", existingWorkOrders, \\\"persistent\\\");\\n\\nmsg.payload = existingWorkOrders;\\nreturn msg;\",\"outputs\":1,\"timeout\":0,\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":440,\"y\":100,\"wires\":[[]]},{\"id\":\"62760b81dea503c2\",\"type\":\"ui-event\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"ui\":\"37b66bc5b4d6d3d3\",\"name\":\"\",\"x\":160,\"y\":100,\"wires\":[[\"6d1644eabb9a5bf5\"]]},{\"id\":\"37b66bc5b4d6d3d3\",\"type\":\"ui-base\",\"name\":\"My Dashboard\",\"path\":\"\u002Fdashboard\",\"appIcon\":\"\",\"includeClientData\":true,\"acceptsClientConfig\":[\"ui-notification\",\"ui-control\",\"ui-template\",\"ui-form\",\"ui-table\",\"ui-text-input\",\"ui-number-input\",\"ui-file-input\",\"ui-button\",\"ui-button-group\",\"ui-dropdown\",\"ui-radio-group\",\"ui-slider\",\"ui-text\",\"ui-switch\",\"ui-chart\",\"ui-audio\",\"ui-markdown\",\"ui-progress\",\"ui-gauge\"],\"showPathInSidebar\":false,\"headerContent\":\"page\",\"navigationStyle\":\"default\",\"titleBarStyle\":\"default\",\"showReconnectNotification\":true,\"notificationDisplayTime\":1,\"showDisconnectNotification\":true,\"allowInstall\":false},{\"id\":\"4b583d9b76bf5cf2\",\"type\":\"global-config\",\"env\":[],\"modules\":{\"@flowfuse\u002Fnode-red-dashboard\":\"1.30.2\"}}]\n","json","",[96,226,227],{"__ignoreMap":224},[228,229,232,236,239,243,245,248,250,254,256,259,261,264,266,268,270,273,275,277,279,282,284,286,288,291,293,295,297,300,302,305,307,311,313,315,317,320,322,324,326,329,331,333,335,338,340,342,344,347,349,351,353,356,358,360,362,365,367,369,371,374,376,378,380,383,385,388,390,393,395,397,399,402,404,406,408,411,413,415,417,420,422,425,427,430,432,435,437,440,442,444,446,449,451,453,455,458,460,462,464,467,469,471,473,476,478,480,482,485,487,489,491,494,496,498,500,503,505,507,509,512,514,516,518,521,523,525,527,530,532,534,536,539,541,543,545,548,550,552,554,557,559,562,564,567,569,571,575,577,579,582,584,586,589,591,593,596,598,600,603,605,607,610,612,614,617,620,622,624,626,628,630,632,634,636,638,640,642,644,646,649,651,653,655,657,659,661,663,665,667,669,671,674,676,678,680,682,684,686,688,691,693,695,697,700,702,704,706,709,711,713,715,718,720,722,724,727,729,731,733,736,738,740,742,745,747,750,752,755,757,759,761,764,766,768,771,773,775,777,779,781,784,786,788,790,792,794,796,798,800,803,805,808,810,812,814,817,819,821,823,825,827,829,831,833,835,837,839,841,843,846,848,850,852,854,856,858,860,862,864,866,868,870,872,874,876,878,880,882,884,886,888,890,892,895,897,899,901,904,906,908,910,913,917,920,923,926,929,932,934,936,938,941,943,946,948,951,953,956,958,961,963,966,968,971,973,976,978,980,982,985,988,991,993,996,998,1001,1003,1005,1007,1010,1012,1014,1016,1018,1020,1023,1025,1027,1029,1031,1033,1036,1038,1040,1043,1045,1047,1050,1052,1054,1056,1058,1060,1063,1065,1067,1069,1071,1073,1076,1078,1081,1083,1085,1087,1089,1092,1094,1096,1098,1100,1102,1104,1106,1108,1110,1112,1114,1116,1118,1120,1122,1124,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197,1199,1201,1204,1206,1208,1210,1212,1214,1217,1219,1221,1223,1226,1228,1230,1232,1235,1237,1239,1241,1243,1245,1247,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268,1270,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1350,1352,1354,1356,1358,1360,1362,1364,1367,1369,1371,1373,1375,1377,1379,1381,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1534,1536,1538,1540,1542,1544,1546,1548,1551,1553,1556,1558,1561,1563,1566,1568,1571,1573,1576,1578,1581,1583,1586,1588,1591,1593,1596,1598,1601,1603,1605,1607,1609,1611,1614,1616,1619,1621,1624,1626,1629,1631,1634,1636,1639,1641,1644,1646,1649,1651,1654,1656,1659,1661,1664,1666,1668,1670,1672,1674,1676,1678,1680,1682,1684,1686,1688,1690,1692,1694,1696,1698,1700,1702,1704,1706,1708,1710,1712,1714,1716,1718,1720,1722,1724,1726,1728,1730,1732,1734,1736,1738,1740,1742,1744,1746,1748,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847,1849,1851,1853,1855,1857,1859,1861,1863,1865,1867,1869,1871,1873,1875,1877,1879,1881,1883,1885,1887,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911,1913,1915,1917,1919,1921,1923,1925,1927,1929,1931,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997,1999,2002,2004,2006,2008,2010,2012,2014,2016,2019,2021,2023,2025,2027,2029,2031,2033,2035,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075,2078,2080,2082,2084,2086,2088,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155,2157,2159,2161,2163,2165,2167,2169,2171,2173,2175,2177,2179,2181,2183,2186,2188,2190,2192,2194,2196,2198,2200,2203,2205,2208,2210,2212,2214,2217,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2258,2260,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287,2289,2291,2293,2295,2297,2299,2301,2303,2305,2307,2309,2311,2313,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357,2359,2362,2364,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384,2386,2388,2390,2392,2394,2396,2398,2400,2402,2404,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2430,2432,2434,2436,2438,2440,2442,2444,2446,2448,2450,2452,2454,2456,2458,2460,2462,2464,2466,2468,2470,2472,2474,2476,2478,2480,2482,2484,2486,2488,2490,2492,2494,2496,2498,2500,2502,2504,2506,2508,2510,2512,2515,2517,2519,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577,2579,2581,2583,2585,2587,2589,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611,2614,2616,2618,2620,2622,2624,2626,2628,2631,2633,2635,2637,2639,2641,2643,2645,2647,2649,2651,2653,2655,2657,2659,2661,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2690,2692,2694,2696,2698,2700,2703,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767,2769,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795,2798,2800,2802,2804,2806,2808,2810,2812,2814,2816,2819,2821,2823,2825,2827,2829,2832,2834,2837,2839,2842,2844,2847,2849,2852,2854,2857,2859,2861,2863,2866,2868,2871,2873,2875,2877,2879,2881,2884,2886,2889,2891,2894,2896,2899,2901,2903,2905,2908,2910,2913,2915,2918,2920,2923,2925,2928,2930,2932,2934,2936,2938,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960,2962,2964,2966,2968,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004,3006,3008,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028,3030,3032,3034,3036,3038,3040,3042,3044,3046,3048,3050,3052,3054,3056,3058,3060,3062,3064,3066,3068,3070,3072,3074,3076,3078,3080,3082,3084,3086,3088,3090,3092,3094,3096,3098,3100,3102,3104,3106,3108,3110,3112,3114,3116,3118,3120,3122,3124,3126,3128,3130,3132,3134,3136,3138,3140,3142,3144,3146,3148,3150,3152,3154,3156,3158,3160,3162,3164,3166,3168,3170,3172,3174,3176,3178,3180,3182,3184,3186,3188,3190,3192,3194,3196,3198,3200,3202,3204,3206,3208,3210,3212,3214,3216,3218,3220,3222,3224,3226,3228,3230,3232,3234,3236,3238,3240,3242,3244,3246,3248,3250,3252,3254,3256,3258,3260,3262,3264,3266,3269,3271,3273,3275,3277,3279,3281,3283,3286,3288,3291,3293,3295,3297,3299,3301,3303,3305,3308,3310,3313,3315,3318,3320,3323,3325,3328,3330,3333,3335,3338,3341,3343,3345,3347,3349,3352,3354,3356,3358,3360,3363,3365,3367,3369,3371,3374,3376,3379,3381,3384,3386,3389,3391,3394,3396,3399,3401,3403,3405,3408,3410,3413,3415,3417,3419,3422,3424,3426,3428,3431,3433,3435,3437,3440,3442,3445,3447,3449,3451,3454,3456,3458,3460,3463,3465,3468,3470,3473,3475,3477,3479,3481,3483,3486,3488,3490,3492,3494,3496,3499,3501,3503,3505,3507,3509,3511,3513,3515,3517,3519,3521,3523,3525,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560,3562,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,3586,3588,3590,3592,3594,3596,3599,3601,3603,3605,3608,3610,3612,3614,3616,3618,3620,3622,3624,3626,3628,3630,3632,3634,3637,3639,3641,3643,3645,3647,3649,3651,3653,3655,3657,3659,3661,3663,3665,3667,3670,3672,3674,3676,3679,3681,3683,3685,3687,3689,3691,3693,3696,3698,3700,3702,3705,3707,3709,3711,3714,3716,3719,3721,3723,3725,3728,3730,3733,3735,3737,3739,3742,3744,3747,3749,3751,3753,3756,3758,3760,3762,3764,3766,3768,3770,3773,3775,3777,3779,3781,3783,3786,3788,3790,3792,3794,3796,3799,3801,3803,3805,3807,3809,3811,3813,3815,3817,3820,3822,3825,3827,3829,3831,3834,3836,3838,3840,3843,3845,3847,3849,3852,3854,3856,3858,3861,3863,3866,3868,3870,3872,3875,3877,3879,3881,3884,3886,3888,3890,3893,3895,3898,3900,3902,3904,3907,3909,3912,3914,3916,3918,3920,3922,3924,3926,3928,3930,3933,3935,3938,3940,3943,3945,3948,3950,3953,3955,3958,3960,3963,3965,3968,3970,3973,3975,3978,3980,3982,3984,3987,3989,3992,3994,3997,3999,4002,4004,4007,4009,4012,4014,4017,4019,4022,4024,4027,4029,4032,4034,4037,4039,4042,4044,4047,4049,4052,4054,4057,4059,4062,4064,4066,4068,4071,4073,4076,4078,4080,4082,4085,4087,4089,4091,4093,4095,4098,4100,4102,4104,4106,4108,4110,4112,4114,4116,4118,4120,4122,4124,4126,4128,4130,4132,4134,4136,4138,4140,4142,4144,4146,4148,4150,4152,4154,4156,4158,4160,4162,4164,4166,4168,4170,4172,4174,4176,4178,4180,4182,4185,4187,4189,4191,4193,4195,4198,4200,4202,4204,4206,4209,4211,4213,4215,4217,4219,4221,4223,4225,4227,4229,4231,4233,4235,4237,4239,4241,4243,4245,4247,4249,4251,4253,4255,4257,4259,4261,4263,4265,4267,4269,4271,4273,4275,4278,4280,4282,4284,4287,4289,4291,4293,4295,4297,4299,4301,4303,4305,4307,4309,4311,4313,4315,4317,4319,4321,4323,4325,4327,4329,4331,4333,4335,4337,4339,4341,4343,4345,4347,4349,4351,4353,4355,4357,4359,4361,4363,4365,4367,4369,4372,4374,4376,4378,4380,4382,4384,4386,4389,4391,4393,4395,4398,4400,4402,4404,4407,4409,4411,4413,4416,4418,4420,4422,4424,4426,4429,4431,4433,4435,4438,4440,4442,4444,4447,4449,4451,4453,4455,4457,4459,4461,4463,4465,4467,4469,4471,4473,4475,4477,4479,4481,4483,4485,4488,4490,4492,4494,4497,4499,4501,4503,4506,4508,4510,4512,4514,4516,4518,4520,4523,4525,4527,4529,4532,4534,4536,4538,4541,4543,4545,4547,4550,4552,4554,4556,4558,4560,4562,4564,4567,4569,4571,4573,4576,4578,4580,4582,4585,4587,4589,4591,4594,4596,4598,4600,4603,4605,4607,4609,4612,4614,4616,4618,4621,4623,4625,4627,4630,4632,4634,4636,4639,4641,4643,4645,4648,4650,4652,4654,4657,4659,4661,4663,4666,4668,4670,4672,4674,4676,4678,4680,4683,4685,4687,4689,4692,4694,4696,4698,4700,4702,4705,4707,4709,4711,4714,4716,4719,4721,4723,4725,4727,4729,4732,4734,4736,4738,4740,4742,4744,4746,4749,4751,4753,4755,4758,4760,4762,4764,4767,4769,4771,4773,4775,4777,4779,4781,4784,4786],"span",{"class":230,"line":231},"line",1,[228,233,235],{"class":234},"sMK4o","[{",[228,237,238],{"class":234},"\"",[228,240,242],{"class":241},"spNyl","id",[228,244,238],{"class":234},[228,246,247],{"class":234},":",[228,249,238],{"class":234},[228,251,253],{"class":252},"sfazB","83cd1b1c4cc8e310",[228,255,238],{"class":234},[228,257,258],{"class":234},",",[228,260,238],{"class":234},[228,262,263],{"class":241},"type",[228,265,238],{"class":234},[228,267,247],{"class":234},[228,269,238],{"class":234},[228,271,272],{"class":252},"group",[228,274,238],{"class":234},[228,276,258],{"class":234},[228,278,238],{"class":234},[228,280,281],{"class":241},"z",[228,283,238],{"class":234},[228,285,247],{"class":234},[228,287,238],{"class":234},[228,289,290],{"class":252},"3012f9c2796b5b41",[228,292,238],{"class":234},[228,294,258],{"class":234},[228,296,238],{"class":234},[228,298,299],{"class":241},"style",[228,301,238],{"class":234},[228,303,304],{"class":234},":{",[228,306,238],{"class":234},[228,308,310],{"class":309},"sBMFI","stroke",[228,312,238],{"class":234},[228,314,247],{"class":234},[228,316,238],{"class":234},[228,318,319],{"class":252},"#b2b3bd",[228,321,238],{"class":234},[228,323,258],{"class":234},[228,325,238],{"class":234},[228,327,328],{"class":309},"stroke-opacity",[228,330,238],{"class":234},[228,332,247],{"class":234},[228,334,238],{"class":234},[228,336,337],{"class":252},"1",[228,339,238],{"class":234},[228,341,258],{"class":234},[228,343,238],{"class":234},[228,345,346],{"class":309},"fill",[228,348,238],{"class":234},[228,350,247],{"class":234},[228,352,238],{"class":234},[228,354,355],{"class":252},"#f2f3fb",[228,357,238],{"class":234},[228,359,258],{"class":234},[228,361,238],{"class":234},[228,363,364],{"class":309},"fill-opacity",[228,366,238],{"class":234},[228,368,247],{"class":234},[228,370,238],{"class":234},[228,372,373],{"class":252},"0.5",[228,375,238],{"class":234},[228,377,258],{"class":234},[228,379,238],{"class":234},[228,381,382],{"class":309},"label",[228,384,238],{"class":234},[228,386,387],{"class":234},":true,",[228,389,238],{"class":234},[228,391,392],{"class":309},"label-position",[228,394,238],{"class":234},[228,396,247],{"class":234},[228,398,238],{"class":234},[228,400,401],{"class":252},"nw",[228,403,238],{"class":234},[228,405,258],{"class":234},[228,407,238],{"class":234},[228,409,410],{"class":309},"color",[228,412,238],{"class":234},[228,414,247],{"class":234},[228,416,238],{"class":234},[228,418,419],{"class":252},"#32333b",[228,421,238],{"class":234},[228,423,424],{"class":234},"},",[228,426,238],{"class":234},[228,428,429],{"class":241},"nodes",[228,431,238],{"class":234},[228,433,434],{"class":234},":[",[228,436,238],{"class":234},[228,438,439],{"class":252},"5a2c1cb7932accb9",[228,441,238],{"class":234},[228,443,258],{"class":234},[228,445,238],{"class":234},[228,447,448],{"class":252},"f2334a5d527a684a",[228,450,238],{"class":234},[228,452,258],{"class":234},[228,454,238],{"class":234},[228,456,457],{"class":252},"f65db363fdde0eba",[228,459,238],{"class":234},[228,461,258],{"class":234},[228,463,238],{"class":234},[228,465,466],{"class":252},"cdda81f6a2701b7c",[228,468,238],{"class":234},[228,470,258],{"class":234},[228,472,238],{"class":234},[228,474,475],{"class":252},"8554ad9dfdb36f54",[228,477,238],{"class":234},[228,479,258],{"class":234},[228,481,238],{"class":234},[228,483,484],{"class":252},"6dd109a105da5dd5",[228,486,238],{"class":234},[228,488,258],{"class":234},[228,490,238],{"class":234},[228,492,493],{"class":252},"439862e5c86675cd",[228,495,238],{"class":234},[228,497,258],{"class":234},[228,499,238],{"class":234},[228,501,502],{"class":252},"9d853fad37785bec",[228,504,238],{"class":234},[228,506,258],{"class":234},[228,508,238],{"class":234},[228,510,511],{"class":252},"3506d88cd094d44c",[228,513,238],{"class":234},[228,515,258],{"class":234},[228,517,238],{"class":234},[228,519,520],{"class":252},"wo_stats_http_in",[228,522,238],{"class":234},[228,524,258],{"class":234},[228,526,238],{"class":234},[228,528,529],{"class":252},"wo_stats_func",[228,531,238],{"class":234},[228,533,258],{"class":234},[228,535,238],{"class":234},[228,537,538],{"class":252},"wo_stats_response",[228,540,238],{"class":234},[228,542,258],{"class":234},[228,544,238],{"class":234},[228,546,547],{"class":252},"6d1644eabb9a5bf5",[228,549,238],{"class":234},[228,551,258],{"class":234},[228,553,238],{"class":234},[228,555,556],{"class":252},"62760b81dea503c2",[228,558,238],{"class":234},[228,560,561],{"class":234},"],",[228,563,238],{"class":234},[228,565,566],{"class":241},"x",[228,568,238],{"class":234},[228,570,247],{"class":234},[228,572,574],{"class":573},"sbssI","44",[228,576,258],{"class":234},[228,578,238],{"class":234},[228,580,581],{"class":241},"y",[228,583,238],{"class":234},[228,585,247],{"class":234},[228,587,588],{"class":573},"59",[228,590,258],{"class":234},[228,592,238],{"class":234},[228,594,595],{"class":241},"w",[228,597,238],{"class":234},[228,599,247],{"class":234},[228,601,602],{"class":573},"652",[228,604,258],{"class":234},[228,606,238],{"class":234},[228,608,609],{"class":241},"h",[228,611,238],{"class":234},[228,613,247],{"class":234},[228,615,616],{"class":573},"482",[228,618,619],{"class":234},"},{",[228,621,238],{"class":234},[228,623,242],{"class":241},[228,625,238],{"class":234},[228,627,247],{"class":234},[228,629,238],{"class":234},[228,631,439],{"class":252},[228,633,238],{"class":234},[228,635,258],{"class":234},[228,637,238],{"class":234},[228,639,263],{"class":241},[228,641,238],{"class":234},[228,643,247],{"class":234},[228,645,238],{"class":234},[228,647,648],{"class":252},"http in",[228,650,238],{"class":234},[228,652,258],{"class":234},[228,654,238],{"class":234},[228,656,281],{"class":241},[228,658,238],{"class":234},[228,660,247],{"class":234},[228,662,238],{"class":234},[228,664,290],{"class":252},[228,666,238],{"class":234},[228,668,258],{"class":234},[228,670,238],{"class":234},[228,672,673],{"class":241},"g",[228,675,238],{"class":234},[228,677,247],{"class":234},[228,679,238],{"class":234},[228,681,253],{"class":252},[228,683,238],{"class":234},[228,685,258],{"class":234},[228,687,238],{"class":234},[228,689,690],{"class":241},"name",[228,692,238],{"class":234},[228,694,247],{"class":234},[228,696,238],{"class":234},[228,698,699],{"class":252},"GET Work Orders",[228,701,238],{"class":234},[228,703,258],{"class":234},[228,705,238],{"class":234},[228,707,708],{"class":241},"url",[228,710,238],{"class":234},[228,712,247],{"class":234},[228,714,238],{"class":234},[228,716,717],{"class":252},"\u002Fworkorders",[228,719,238],{"class":234},[228,721,258],{"class":234},[228,723,238],{"class":234},[228,725,726],{"class":241},"method",[228,728,238],{"class":234},[228,730,247],{"class":234},[228,732,238],{"class":234},[228,734,735],{"class":252},"get",[228,737,238],{"class":234},[228,739,258],{"class":234},[228,741,238],{"class":234},[228,743,744],{"class":241},"upload",[228,746,238],{"class":234},[228,748,749],{"class":234},":false,",[228,751,238],{"class":234},[228,753,754],{"class":241},"skipBodyParsing",[228,756,238],{"class":234},[228,758,749],{"class":234},[228,760,238],{"class":234},[228,762,763],{"class":241},"swaggerDoc",[228,765,238],{"class":234},[228,767,247],{"class":234},[228,769,770],{"class":234},"\"\"",[228,772,258],{"class":234},[228,774,238],{"class":234},[228,776,566],{"class":241},[228,778,238],{"class":234},[228,780,247],{"class":234},[228,782,783],{"class":573},"160",[228,785,258],{"class":234},[228,787,238],{"class":234},[228,789,581],{"class":241},[228,791,238],{"class":234},[228,793,247],{"class":234},[228,795,217],{"class":573},[228,797,258],{"class":234},[228,799,238],{"class":234},[228,801,802],{"class":241},"wires",[228,804,238],{"class":234},[228,806,807],{"class":234},":[[",[228,809,238],{"class":234},[228,811,448],{"class":252},[228,813,238],{"class":234},[228,815,816],{"class":234},"]]},{",[228,818,238],{"class":234},[228,820,242],{"class":241},[228,822,238],{"class":234},[228,824,247],{"class":234},[228,826,238],{"class":234},[228,828,448],{"class":252},[228,830,238],{"class":234},[228,832,258],{"class":234},[228,834,238],{"class":234},[228,836,263],{"class":241},[228,838,238],{"class":234},[228,840,247],{"class":234},[228,842,238],{"class":234},[228,844,845],{"class":252},"function",[228,847,238],{"class":234},[228,849,258],{"class":234},[228,851,238],{"class":234},[228,853,281],{"class":241},[228,855,238],{"class":234},[228,857,247],{"class":234},[228,859,238],{"class":234},[228,861,290],{"class":252},[228,863,238],{"class":234},[228,865,258],{"class":234},[228,867,238],{"class":234},[228,869,673],{"class":241},[228,871,238],{"class":234},[228,873,247],{"class":234},[228,875,238],{"class":234},[228,877,253],{"class":252},[228,879,238],{"class":234},[228,881,258],{"class":234},[228,883,238],{"class":234},[228,885,690],{"class":241},[228,887,238],{"class":234},[228,889,247],{"class":234},[228,891,238],{"class":234},[228,893,894],{"class":252},"Generate Work Orders",[228,896,238],{"class":234},[228,898,258],{"class":234},[228,900,238],{"class":234},[228,902,903],{"class":241},"func",[228,905,238],{"class":234},[228,907,247],{"class":234},[228,909,238],{"class":234},[228,911,912],{"class":252},"const stationId = msg.req.query.stationId;",[228,914,916],{"class":915},"sTEyZ","\\n",[228,918,919],{"class":252},"const username = msg.req.query.username;",[228,921,922],{"class":915},"\\n\\n",[228,924,925],{"class":252},"const workOrders = global.get(",[228,927,928],{"class":915},"\\\"",[228,930,931],{"class":252},"workOrders",[228,933,928],{"class":915},[228,935,103],{"class":252},[228,937,928],{"class":915},[228,939,940],{"class":252},"persistent",[228,942,928],{"class":915},[228,944,945],{"class":252},") || [];",[228,947,922],{"class":915},[228,949,950],{"class":252},"const result = workOrders.filter(w =>",[228,952,916],{"class":915},[228,954,955],{"class":252},"    w.stationId === stationId &&",[228,957,916],{"class":915},[228,959,960],{"class":252},"    w.assignedTo === username &&",[228,962,916],{"class":915},[228,964,965],{"class":252},"    w.status !== ",[228,967,928],{"class":915},[228,969,970],{"class":252},"defect",[228,972,928],{"class":915},[228,974,975],{"class":252}," &&",[228,977,916],{"class":915},[228,979,965],{"class":252},[228,981,928],{"class":915},[228,983,984],{"class":252},"completed",[228,986,987],{"class":915},"\\\"\\n",[228,989,990],{"class":252},");",[228,992,922],{"class":915},[228,994,995],{"class":252},"msg.payload = result;",[228,997,922],{"class":915},[228,999,1000],{"class":252},"return msg;",[228,1002,238],{"class":234},[228,1004,258],{"class":234},[228,1006,238],{"class":234},[228,1008,1009],{"class":241},"outputs",[228,1011,238],{"class":234},[228,1013,247],{"class":234},[228,1015,337],{"class":573},[228,1017,258],{"class":234},[228,1019,238],{"class":234},[228,1021,1022],{"class":241},"timeout",[228,1024,238],{"class":234},[228,1026,247],{"class":234},[228,1028,770],{"class":234},[228,1030,258],{"class":234},[228,1032,238],{"class":234},[228,1034,1035],{"class":241},"noerr",[228,1037,238],{"class":234},[228,1039,247],{"class":234},[228,1041,1042],{"class":573},"0",[228,1044,258],{"class":234},[228,1046,238],{"class":234},[228,1048,1049],{"class":241},"initialize",[228,1051,238],{"class":234},[228,1053,247],{"class":234},[228,1055,770],{"class":234},[228,1057,258],{"class":234},[228,1059,238],{"class":234},[228,1061,1062],{"class":241},"finalize",[228,1064,238],{"class":234},[228,1066,247],{"class":234},[228,1068,770],{"class":234},[228,1070,258],{"class":234},[228,1072,238],{"class":234},[228,1074,1075],{"class":241},"libs",[228,1077,238],{"class":234},[228,1079,1080],{"class":234},":[],",[228,1082,238],{"class":234},[228,1084,566],{"class":241},[228,1086,238],{"class":234},[228,1088,247],{"class":234},[228,1090,1091],{"class":573},"420",[228,1093,258],{"class":234},[228,1095,238],{"class":234},[228,1097,581],{"class":241},[228,1099,238],{"class":234},[228,1101,247],{"class":234},[228,1103,217],{"class":573},[228,1105,258],{"class":234},[228,1107,238],{"class":234},[228,1109,802],{"class":241},[228,1111,238],{"class":234},[228,1113,807],{"class":234},[228,1115,238],{"class":234},[228,1117,457],{"class":252},[228,1119,238],{"class":234},[228,1121,816],{"class":234},[228,1123,238],{"class":234},[228,1125,242],{"class":241},[228,1127,238],{"class":234},[228,1129,247],{"class":234},[228,1131,238],{"class":234},[228,1133,457],{"class":252},[228,1135,238],{"class":234},[228,1137,258],{"class":234},[228,1139,238],{"class":234},[228,1141,263],{"class":241},[228,1143,238],{"class":234},[228,1145,247],{"class":234},[228,1147,238],{"class":234},[228,1149,1150],{"class":252},"http response",[228,1152,238],{"class":234},[228,1154,258],{"class":234},[228,1156,238],{"class":234},[228,1158,281],{"class":241},[228,1160,238],{"class":234},[228,1162,247],{"class":234},[228,1164,238],{"class":234},[228,1166,290],{"class":252},[228,1168,238],{"class":234},[228,1170,258],{"class":234},[228,1172,238],{"class":234},[228,1174,673],{"class":241},[228,1176,238],{"class":234},[228,1178,247],{"class":234},[228,1180,238],{"class":234},[228,1182,253],{"class":252},[228,1184,238],{"class":234},[228,1186,258],{"class":234},[228,1188,238],{"class":234},[228,1190,690],{"class":241},[228,1192,238],{"class":234},[228,1194,247],{"class":234},[228,1196,770],{"class":234},[228,1198,258],{"class":234},[228,1200,238],{"class":234},[228,1202,1203],{"class":241},"statusCode",[228,1205,238],{"class":234},[228,1207,247],{"class":234},[228,1209,770],{"class":234},[228,1211,258],{"class":234},[228,1213,238],{"class":234},[228,1215,1216],{"class":241},"headers",[228,1218,238],{"class":234},[228,1220,304],{"class":234},[228,1222,238],{"class":234},[228,1224,1225],{"class":309},"Content-Type",[228,1227,238],{"class":234},[228,1229,247],{"class":234},[228,1231,238],{"class":234},[228,1233,1234],{"class":252},"application\u002Fjson",[228,1236,238],{"class":234},[228,1238,424],{"class":234},[228,1240,238],{"class":234},[228,1242,566],{"class":241},[228,1244,238],{"class":234},[228,1246,247],{"class":234},[228,1248,1249],{"class":573},"610",[228,1251,258],{"class":234},[228,1253,238],{"class":234},[228,1255,581],{"class":241},[228,1257,238],{"class":234},[228,1259,247],{"class":234},[228,1261,217],{"class":573},[228,1263,258],{"class":234},[228,1265,238],{"class":234},[228,1267,802],{"class":241},[228,1269,238],{"class":234},[228,1271,1272],{"class":234},":[]},{",[228,1274,238],{"class":234},[228,1276,242],{"class":241},[228,1278,238],{"class":234},[228,1280,247],{"class":234},[228,1282,238],{"class":234},[228,1284,466],{"class":252},[228,1286,238],{"class":234},[228,1288,258],{"class":234},[228,1290,238],{"class":234},[228,1292,263],{"class":241},[228,1294,238],{"class":234},[228,1296,247],{"class":234},[228,1298,238],{"class":234},[228,1300,648],{"class":252},[228,1302,238],{"class":234},[228,1304,258],{"class":234},[228,1306,238],{"class":234},[228,1308,281],{"class":241},[228,1310,238],{"class":234},[228,1312,247],{"class":234},[228,1314,238],{"class":234},[228,1316,290],{"class":252},[228,1318,238],{"class":234},[228,1320,258],{"class":234},[228,1322,238],{"class":234},[228,1324,673],{"class":241},[228,1326,238],{"class":234},[228,1328,247],{"class":234},[228,1330,238],{"class":234},[228,1332,253],{"class":252},[228,1334,238],{"class":234},[228,1336,258],{"class":234},[228,1338,238],{"class":234},[228,1340,690],{"class":241},[228,1342,238],{"class":234},[228,1344,247],{"class":234},[228,1346,238],{"class":234},[228,1348,1349],{"class":252},"POST Mark Defect",[228,1351,238],{"class":234},[228,1353,258],{"class":234},[228,1355,238],{"class":234},[228,1357,708],{"class":241},[228,1359,238],{"class":234},[228,1361,247],{"class":234},[228,1363,238],{"class":234},[228,1365,1366],{"class":252},"\u002Fworkorders\u002Fdefect",[228,1368,238],{"class":234},[228,1370,258],{"class":234},[228,1372,238],{"class":234},[228,1374,726],{"class":241},[228,1376,238],{"class":234},[228,1378,247],{"class":234},[228,1380,238],{"class":234},[228,1382,1383],{"class":252},"post",[228,1385,238],{"class":234},[228,1387,258],{"class":234},[228,1389,238],{"class":234},[228,1391,744],{"class":241},[228,1393,238],{"class":234},[228,1395,749],{"class":234},[228,1397,238],{"class":234},[228,1399,754],{"class":241},[228,1401,238],{"class":234},[228,1403,749],{"class":234},[228,1405,238],{"class":234},[228,1407,763],{"class":241},[228,1409,238],{"class":234},[228,1411,247],{"class":234},[228,1413,770],{"class":234},[228,1415,258],{"class":234},[228,1417,238],{"class":234},[228,1419,566],{"class":241},[228,1421,238],{"class":234},[228,1423,247],{"class":234},[228,1425,783],{"class":573},[228,1427,258],{"class":234},[228,1429,238],{"class":234},[228,1431,581],{"class":241},[228,1433,238],{"class":234},[228,1435,247],{"class":234},[228,1437,1438],{"class":573},"400",[228,1440,258],{"class":234},[228,1442,238],{"class":234},[228,1444,802],{"class":241},[228,1446,238],{"class":234},[228,1448,807],{"class":234},[228,1450,238],{"class":234},[228,1452,475],{"class":252},[228,1454,238],{"class":234},[228,1456,816],{"class":234},[228,1458,238],{"class":234},[228,1460,242],{"class":241},[228,1462,238],{"class":234},[228,1464,247],{"class":234},[228,1466,238],{"class":234},[228,1468,475],{"class":252},[228,1470,238],{"class":234},[228,1472,258],{"class":234},[228,1474,238],{"class":234},[228,1476,263],{"class":241},[228,1478,238],{"class":234},[228,1480,247],{"class":234},[228,1482,238],{"class":234},[228,1484,845],{"class":252},[228,1486,238],{"class":234},[228,1488,258],{"class":234},[228,1490,238],{"class":234},[228,1492,281],{"class":241},[228,1494,238],{"class":234},[228,1496,247],{"class":234},[228,1498,238],{"class":234},[228,1500,290],{"class":252},[228,1502,238],{"class":234},[228,1504,258],{"class":234},[228,1506,238],{"class":234},[228,1508,673],{"class":241},[228,1510,238],{"class":234},[228,1512,247],{"class":234},[228,1514,238],{"class":234},[228,1516,253],{"class":252},[228,1518,238],{"class":234},[228,1520,258],{"class":234},[228,1522,238],{"class":234},[228,1524,690],{"class":241},[228,1526,238],{"class":234},[228,1528,247],{"class":234},[228,1530,238],{"class":234},[228,1532,1533],{"class":252},"Mark Defect",[228,1535,238],{"class":234},[228,1537,258],{"class":234},[228,1539,238],{"class":234},[228,1541,903],{"class":241},[228,1543,238],{"class":234},[228,1545,247],{"class":234},[228,1547,238],{"class":234},[228,1549,1550],{"class":252},"const { workOrderId, issueType, severity, affectedPart, description } = msg.payload || {};",[228,1552,922],{"class":915},[228,1554,1555],{"class":252},"if (!workOrderId || !issueType || !severity || !affectedPart) {",[228,1557,916],{"class":915},[228,1559,1560],{"class":252},"    msg.statusCode = 400;",[228,1562,916],{"class":915},[228,1564,1565],{"class":252},"    msg.payload = { error: 'workOrderId, issueType, severity, and affectedPart are required' };",[228,1567,916],{"class":915},[228,1569,1570],{"class":252},"    return msg;",[228,1572,916],{"class":915},[228,1574,1575],{"class":252},"}",[228,1577,922],{"class":915},[228,1579,1580],{"class":252},"const workOrders = global.get('workOrders', 'persistent') || [];",[228,1582,916],{"class":915},[228,1584,1585],{"class":252},"const idx = workOrders.findIndex(w => w.workOrderId === workOrderId);",[228,1587,922],{"class":915},[228,1589,1590],{"class":252},"if (idx === -1) {",[228,1592,916],{"class":915},[228,1594,1595],{"class":252},"    msg.statusCode = 404;",[228,1597,916],{"class":915},[228,1599,1600],{"class":252},"    msg.payload = { error: 'Work order not found' };",[228,1602,916],{"class":915},[228,1604,1570],{"class":252},[228,1606,916],{"class":915},[228,1608,1575],{"class":252},[228,1610,922],{"class":915},[228,1612,1613],{"class":252},"workOrders[idx].status = 'defect';",[228,1615,916],{"class":915},[228,1617,1618],{"class":252},"workOrders[idx].defect = {",[228,1620,916],{"class":915},[228,1622,1623],{"class":252},"    issueType,",[228,1625,916],{"class":915},[228,1627,1628],{"class":252},"    severity,",[228,1630,916],{"class":915},[228,1632,1633],{"class":252},"    affectedPart,",[228,1635,916],{"class":915},[228,1637,1638],{"class":252},"    description: description || null,",[228,1640,916],{"class":915},[228,1642,1643],{"class":252},"    reportedAt: new Date().toISOString()",[228,1645,916],{"class":915},[228,1647,1648],{"class":252},"};",[228,1650,922],{"class":915},[228,1652,1653],{"class":252},"global.set('workOrders', workOrders, 'persistent');",[228,1655,922],{"class":915},[228,1657,1658],{"class":252},"msg.statusCode = 200;",[228,1660,916],{"class":915},[228,1662,1663],{"class":252},"msg.payload = { success: true, workOrder: workOrders[idx] };",[228,1665,916],{"class":915},[228,1667,1000],{"class":252},[228,1669,238],{"class":234},[228,1671,258],{"class":234},[228,1673,238],{"class":234},[228,1675,1009],{"class":241},[228,1677,238],{"class":234},[228,1679,247],{"class":234},[228,1681,337],{"class":573},[228,1683,258],{"class":234},[228,1685,238],{"class":234},[228,1687,1022],{"class":241},[228,1689,238],{"class":234},[228,1691,247],{"class":234},[228,1693,770],{"class":234},[228,1695,258],{"class":234},[228,1697,238],{"class":234},[228,1699,1035],{"class":241},[228,1701,238],{"class":234},[228,1703,247],{"class":234},[228,1705,1042],{"class":573},[228,1707,258],{"class":234},[228,1709,238],{"class":234},[228,1711,1049],{"class":241},[228,1713,238],{"class":234},[228,1715,247],{"class":234},[228,1717,770],{"class":234},[228,1719,258],{"class":234},[228,1721,238],{"class":234},[228,1723,1062],{"class":241},[228,1725,238],{"class":234},[228,1727,247],{"class":234},[228,1729,770],{"class":234},[228,1731,258],{"class":234},[228,1733,238],{"class":234},[228,1735,1075],{"class":241},[228,1737,238],{"class":234},[228,1739,1080],{"class":234},[228,1741,238],{"class":234},[228,1743,566],{"class":241},[228,1745,238],{"class":234},[228,1747,247],{"class":234},[228,1749,1750],{"class":573},"390",[228,1752,258],{"class":234},[228,1754,238],{"class":234},[228,1756,581],{"class":241},[228,1758,238],{"class":234},[228,1760,247],{"class":234},[228,1762,1438],{"class":573},[228,1764,258],{"class":234},[228,1766,238],{"class":234},[228,1768,802],{"class":241},[228,1770,238],{"class":234},[228,1772,807],{"class":234},[228,1774,238],{"class":234},[228,1776,484],{"class":252},[228,1778,238],{"class":234},[228,1780,816],{"class":234},[228,1782,238],{"class":234},[228,1784,242],{"class":241},[228,1786,238],{"class":234},[228,1788,247],{"class":234},[228,1790,238],{"class":234},[228,1792,484],{"class":252},[228,1794,238],{"class":234},[228,1796,258],{"class":234},[228,1798,238],{"class":234},[228,1800,263],{"class":241},[228,1802,238],{"class":234},[228,1804,247],{"class":234},[228,1806,238],{"class":234},[228,1808,1150],{"class":252},[228,1810,238],{"class":234},[228,1812,258],{"class":234},[228,1814,238],{"class":234},[228,1816,281],{"class":241},[228,1818,238],{"class":234},[228,1820,247],{"class":234},[228,1822,238],{"class":234},[228,1824,290],{"class":252},[228,1826,238],{"class":234},[228,1828,258],{"class":234},[228,1830,238],{"class":234},[228,1832,673],{"class":241},[228,1834,238],{"class":234},[228,1836,247],{"class":234},[228,1838,238],{"class":234},[228,1840,253],{"class":252},[228,1842,238],{"class":234},[228,1844,258],{"class":234},[228,1846,238],{"class":234},[228,1848,690],{"class":241},[228,1850,238],{"class":234},[228,1852,247],{"class":234},[228,1854,770],{"class":234},[228,1856,258],{"class":234},[228,1858,238],{"class":234},[228,1860,1203],{"class":241},[228,1862,238],{"class":234},[228,1864,247],{"class":234},[228,1866,770],{"class":234},[228,1868,258],{"class":234},[228,1870,238],{"class":234},[228,1872,1216],{"class":241},[228,1874,238],{"class":234},[228,1876,304],{"class":234},[228,1878,238],{"class":234},[228,1880,1225],{"class":309},[228,1882,238],{"class":234},[228,1884,247],{"class":234},[228,1886,238],{"class":234},[228,1888,1234],{"class":252},[228,1890,238],{"class":234},[228,1892,424],{"class":234},[228,1894,238],{"class":234},[228,1896,566],{"class":241},[228,1898,238],{"class":234},[228,1900,247],{"class":234},[228,1902,1249],{"class":573},[228,1904,258],{"class":234},[228,1906,238],{"class":234},[228,1908,581],{"class":241},[228,1910,238],{"class":234},[228,1912,247],{"class":234},[228,1914,1438],{"class":573},[228,1916,258],{"class":234},[228,1918,238],{"class":234},[228,1920,802],{"class":241},[228,1922,238],{"class":234},[228,1924,1272],{"class":234},[228,1926,238],{"class":234},[228,1928,242],{"class":241},[228,1930,238],{"class":234},[228,1932,247],{"class":234},[228,1934,238],{"class":234},[228,1936,493],{"class":252},[228,1938,238],{"class":234},[228,1940,258],{"class":234},[228,1942,238],{"class":234},[228,1944,263],{"class":241},[228,1946,238],{"class":234},[228,1948,247],{"class":234},[228,1950,238],{"class":234},[228,1952,648],{"class":252},[228,1954,238],{"class":234},[228,1956,258],{"class":234},[228,1958,238],{"class":234},[228,1960,281],{"class":241},[228,1962,238],{"class":234},[228,1964,247],{"class":234},[228,1966,238],{"class":234},[228,1968,290],{"class":252},[228,1970,238],{"class":234},[228,1972,258],{"class":234},[228,1974,238],{"class":234},[228,1976,673],{"class":241},[228,1978,238],{"class":234},[228,1980,247],{"class":234},[228,1982,238],{"class":234},[228,1984,253],{"class":252},[228,1986,238],{"class":234},[228,1988,258],{"class":234},[228,1990,238],{"class":234},[228,1992,690],{"class":241},[228,1994,238],{"class":234},[228,1996,247],{"class":234},[228,1998,238],{"class":234},[228,2000,2001],{"class":252},"POST Complete Order",[228,2003,238],{"class":234},[228,2005,258],{"class":234},[228,2007,238],{"class":234},[228,2009,708],{"class":241},[228,2011,238],{"class":234},[228,2013,247],{"class":234},[228,2015,238],{"class":234},[228,2017,2018],{"class":252},"\u002Fworkorders\u002Fcomplete",[228,2020,238],{"class":234},[228,2022,258],{"class":234},[228,2024,238],{"class":234},[228,2026,726],{"class":241},[228,2028,238],{"class":234},[228,2030,247],{"class":234},[228,2032,238],{"class":234},[228,2034,1383],{"class":252},[228,2036,238],{"class":234},[228,2038,258],{"class":234},[228,2040,238],{"class":234},[228,2042,744],{"class":241},[228,2044,238],{"class":234},[228,2046,749],{"class":234},[228,2048,238],{"class":234},[228,2050,754],{"class":241},[228,2052,238],{"class":234},[228,2054,749],{"class":234},[228,2056,238],{"class":234},[228,2058,763],{"class":241},[228,2060,238],{"class":234},[228,2062,247],{"class":234},[228,2064,770],{"class":234},[228,2066,258],{"class":234},[228,2068,238],{"class":234},[228,2070,566],{"class":241},[228,2072,238],{"class":234},[228,2074,247],{"class":234},[228,2076,2077],{"class":573},"170",[228,2079,258],{"class":234},[228,2081,238],{"class":234},[228,2083,581],{"class":241},[228,2085,238],{"class":234},[228,2087,247],{"class":234},[228,2089,2090],{"class":573},"500",[228,2092,258],{"class":234},[228,2094,238],{"class":234},[228,2096,802],{"class":241},[228,2098,238],{"class":234},[228,2100,807],{"class":234},[228,2102,238],{"class":234},[228,2104,502],{"class":252},[228,2106,238],{"class":234},[228,2108,816],{"class":234},[228,2110,238],{"class":234},[228,2112,242],{"class":241},[228,2114,238],{"class":234},[228,2116,247],{"class":234},[228,2118,238],{"class":234},[228,2120,502],{"class":252},[228,2122,238],{"class":234},[228,2124,258],{"class":234},[228,2126,238],{"class":234},[228,2128,263],{"class":241},[228,2130,238],{"class":234},[228,2132,247],{"class":234},[228,2134,238],{"class":234},[228,2136,845],{"class":252},[228,2138,238],{"class":234},[228,2140,258],{"class":234},[228,2142,238],{"class":234},[228,2144,281],{"class":241},[228,2146,238],{"class":234},[228,2148,247],{"class":234},[228,2150,238],{"class":234},[228,2152,290],{"class":252},[228,2154,238],{"class":234},[228,2156,258],{"class":234},[228,2158,238],{"class":234},[228,2160,673],{"class":241},[228,2162,238],{"class":234},[228,2164,247],{"class":234},[228,2166,238],{"class":234},[228,2168,253],{"class":252},[228,2170,238],{"class":234},[228,2172,258],{"class":234},[228,2174,238],{"class":234},[228,2176,690],{"class":241},[228,2178,238],{"class":234},[228,2180,247],{"class":234},[228,2182,238],{"class":234},[228,2184,2185],{"class":252},"Complete Work Order",[228,2187,238],{"class":234},[228,2189,258],{"class":234},[228,2191,238],{"class":234},[228,2193,903],{"class":241},[228,2195,238],{"class":234},[228,2197,247],{"class":234},[228,2199,238],{"class":234},[228,2201,2202],{"class":252},"const { workOrderId } = msg.payload || {};",[228,2204,922],{"class":915},[228,2206,2207],{"class":252},"if (!workOrderId) {",[228,2209,916],{"class":915},[228,2211,1560],{"class":252},[228,2213,916],{"class":915},[228,2215,2216],{"class":252},"    msg.payload = { error: 'workOrderId is required' };",[228,2218,916],{"class":915},[228,2220,1570],{"class":252},[228,2222,916],{"class":915},[228,2224,1575],{"class":252},[228,2226,922],{"class":915},[228,2228,1580],{"class":252},[228,2230,916],{"class":915},[228,2232,1585],{"class":252},[228,2234,922],{"class":915},[228,2236,1590],{"class":252},[228,2238,916],{"class":915},[228,2240,1595],{"class":252},[228,2242,916],{"class":915},[228,2244,1600],{"class":252},[228,2246,916],{"class":915},[228,2248,1570],{"class":252},[228,2250,916],{"class":915},[228,2252,1575],{"class":252},[228,2254,922],{"class":915},[228,2256,2257],{"class":252},"workOrders[idx].status = 'completed';",[228,2259,916],{"class":915},[228,2261,2262],{"class":252},"workOrders[idx].completedAt = new Date().toISOString();",[228,2264,922],{"class":915},[228,2266,1653],{"class":252},[228,2268,922],{"class":915},[228,2270,1658],{"class":252},[228,2272,916],{"class":915},[228,2274,1663],{"class":252},[228,2276,916],{"class":915},[228,2278,1000],{"class":252},[228,2280,238],{"class":234},[228,2282,258],{"class":234},[228,2284,238],{"class":234},[228,2286,1009],{"class":241},[228,2288,238],{"class":234},[228,2290,247],{"class":234},[228,2292,337],{"class":573},[228,2294,258],{"class":234},[228,2296,238],{"class":234},[228,2298,1022],{"class":241},[228,2300,238],{"class":234},[228,2302,247],{"class":234},[228,2304,770],{"class":234},[228,2306,258],{"class":234},[228,2308,238],{"class":234},[228,2310,1035],{"class":241},[228,2312,238],{"class":234},[228,2314,247],{"class":234},[228,2316,1042],{"class":573},[228,2318,258],{"class":234},[228,2320,238],{"class":234},[228,2322,1049],{"class":241},[228,2324,238],{"class":234},[228,2326,247],{"class":234},[228,2328,770],{"class":234},[228,2330,258],{"class":234},[228,2332,238],{"class":234},[228,2334,1062],{"class":241},[228,2336,238],{"class":234},[228,2338,247],{"class":234},[228,2340,770],{"class":234},[228,2342,258],{"class":234},[228,2344,238],{"class":234},[228,2346,1075],{"class":241},[228,2348,238],{"class":234},[228,2350,1080],{"class":234},[228,2352,238],{"class":234},[228,2354,566],{"class":241},[228,2356,238],{"class":234},[228,2358,247],{"class":234},[228,2360,2361],{"class":573},"410",[228,2363,258],{"class":234},[228,2365,238],{"class":234},[228,2367,581],{"class":241},[228,2369,238],{"class":234},[228,2371,247],{"class":234},[228,2373,2090],{"class":573},[228,2375,258],{"class":234},[228,2377,238],{"class":234},[228,2379,802],{"class":241},[228,2381,238],{"class":234},[228,2383,807],{"class":234},[228,2385,238],{"class":234},[228,2387,511],{"class":252},[228,2389,238],{"class":234},[228,2391,816],{"class":234},[228,2393,238],{"class":234},[228,2395,242],{"class":241},[228,2397,238],{"class":234},[228,2399,247],{"class":234},[228,2401,238],{"class":234},[228,2403,511],{"class":252},[228,2405,238],{"class":234},[228,2407,258],{"class":234},[228,2409,238],{"class":234},[228,2411,263],{"class":241},[228,2413,238],{"class":234},[228,2415,247],{"class":234},[228,2417,238],{"class":234},[228,2419,1150],{"class":252},[228,2421,238],{"class":234},[228,2423,258],{"class":234},[228,2425,238],{"class":234},[228,2427,281],{"class":241},[228,2429,238],{"class":234},[228,2431,247],{"class":234},[228,2433,238],{"class":234},[228,2435,290],{"class":252},[228,2437,238],{"class":234},[228,2439,258],{"class":234},[228,2441,238],{"class":234},[228,2443,673],{"class":241},[228,2445,238],{"class":234},[228,2447,247],{"class":234},[228,2449,238],{"class":234},[228,2451,253],{"class":252},[228,2453,238],{"class":234},[228,2455,258],{"class":234},[228,2457,238],{"class":234},[228,2459,690],{"class":241},[228,2461,238],{"class":234},[228,2463,247],{"class":234},[228,2465,770],{"class":234},[228,2467,258],{"class":234},[228,2469,238],{"class":234},[228,2471,1203],{"class":241},[228,2473,238],{"class":234},[228,2475,247],{"class":234},[228,2477,770],{"class":234},[228,2479,258],{"class":234},[228,2481,238],{"class":234},[228,2483,1216],{"class":241},[228,2485,238],{"class":234},[228,2487,304],{"class":234},[228,2489,238],{"class":234},[228,2491,1225],{"class":309},[228,2493,238],{"class":234},[228,2495,247],{"class":234},[228,2497,238],{"class":234},[228,2499,1234],{"class":252},[228,2501,238],{"class":234},[228,2503,424],{"class":234},[228,2505,238],{"class":234},[228,2507,566],{"class":241},[228,2509,238],{"class":234},[228,2511,247],{"class":234},[228,2513,2514],{"class":573},"620",[228,2516,258],{"class":234},[228,2518,238],{"class":234},[228,2520,581],{"class":241},[228,2522,238],{"class":234},[228,2524,247],{"class":234},[228,2526,2090],{"class":573},[228,2528,258],{"class":234},[228,2530,238],{"class":234},[228,2532,802],{"class":241},[228,2534,238],{"class":234},[228,2536,1272],{"class":234},[228,2538,238],{"class":234},[228,2540,242],{"class":241},[228,2542,238],{"class":234},[228,2544,247],{"class":234},[228,2546,238],{"class":234},[228,2548,520],{"class":252},[228,2550,238],{"class":234},[228,2552,258],{"class":234},[228,2554,238],{"class":234},[228,2556,263],{"class":241},[228,2558,238],{"class":234},[228,2560,247],{"class":234},[228,2562,238],{"class":234},[228,2564,648],{"class":252},[228,2566,238],{"class":234},[228,2568,258],{"class":234},[228,2570,238],{"class":234},[228,2572,281],{"class":241},[228,2574,238],{"class":234},[228,2576,247],{"class":234},[228,2578,238],{"class":234},[228,2580,290],{"class":252},[228,2582,238],{"class":234},[228,2584,258],{"class":234},[228,2586,238],{"class":234},[228,2588,673],{"class":241},[228,2590,238],{"class":234},[228,2592,247],{"class":234},[228,2594,238],{"class":234},[228,2596,253],{"class":252},[228,2598,238],{"class":234},[228,2600,258],{"class":234},[228,2602,238],{"class":234},[228,2604,690],{"class":241},[228,2606,238],{"class":234},[228,2608,247],{"class":234},[228,2610,238],{"class":234},[228,2612,2613],{"class":252},"GET Work Order Stats",[228,2615,238],{"class":234},[228,2617,258],{"class":234},[228,2619,238],{"class":234},[228,2621,708],{"class":241},[228,2623,238],{"class":234},[228,2625,247],{"class":234},[228,2627,238],{"class":234},[228,2629,2630],{"class":252},"\u002Fworkorders\u002Fstats",[228,2632,238],{"class":234},[228,2634,258],{"class":234},[228,2636,238],{"class":234},[228,2638,726],{"class":241},[228,2640,238],{"class":234},[228,2642,247],{"class":234},[228,2644,238],{"class":234},[228,2646,735],{"class":252},[228,2648,238],{"class":234},[228,2650,258],{"class":234},[228,2652,238],{"class":234},[228,2654,744],{"class":241},[228,2656,238],{"class":234},[228,2658,749],{"class":234},[228,2660,238],{"class":234},[228,2662,754],{"class":241},[228,2664,238],{"class":234},[228,2666,749],{"class":234},[228,2668,238],{"class":234},[228,2670,763],{"class":241},[228,2672,238],{"class":234},[228,2674,247],{"class":234},[228,2676,770],{"class":234},[228,2678,258],{"class":234},[228,2680,238],{"class":234},[228,2682,566],{"class":241},[228,2684,238],{"class":234},[228,2686,247],{"class":234},[228,2688,2689],{"class":573},"180",[228,2691,258],{"class":234},[228,2693,238],{"class":234},[228,2695,581],{"class":241},[228,2697,238],{"class":234},[228,2699,247],{"class":234},[228,2701,2702],{"class":573},"220",[228,2704,258],{"class":234},[228,2706,238],{"class":234},[228,2708,802],{"class":241},[228,2710,238],{"class":234},[228,2712,807],{"class":234},[228,2714,238],{"class":234},[228,2716,529],{"class":252},[228,2718,238],{"class":234},[228,2720,816],{"class":234},[228,2722,238],{"class":234},[228,2724,242],{"class":241},[228,2726,238],{"class":234},[228,2728,247],{"class":234},[228,2730,238],{"class":234},[228,2732,529],{"class":252},[228,2734,238],{"class":234},[228,2736,258],{"class":234},[228,2738,238],{"class":234},[228,2740,263],{"class":241},[228,2742,238],{"class":234},[228,2744,247],{"class":234},[228,2746,238],{"class":234},[228,2748,845],{"class":252},[228,2750,238],{"class":234},[228,2752,258],{"class":234},[228,2754,238],{"class":234},[228,2756,281],{"class":241},[228,2758,238],{"class":234},[228,2760,247],{"class":234},[228,2762,238],{"class":234},[228,2764,290],{"class":252},[228,2766,238],{"class":234},[228,2768,258],{"class":234},[228,2770,238],{"class":234},[228,2772,673],{"class":241},[228,2774,238],{"class":234},[228,2776,247],{"class":234},[228,2778,238],{"class":234},[228,2780,253],{"class":252},[228,2782,238],{"class":234},[228,2784,258],{"class":234},[228,2786,238],{"class":234},[228,2788,690],{"class":241},[228,2790,238],{"class":234},[228,2792,247],{"class":234},[228,2794,238],{"class":234},[228,2796,2797],{"class":252},"Compute Stats",[228,2799,238],{"class":234},[228,2801,258],{"class":234},[228,2803,238],{"class":234},[228,2805,903],{"class":241},[228,2807,238],{"class":234},[228,2809,247],{"class":234},[228,2811,238],{"class":234},[228,2813,1580],{"class":252},[228,2815,916],{"class":915},[228,2817,2818],{"class":252},"node.warn(msg.req.query);",[228,2820,916],{"class":915},[228,2822,912],{"class":252},[228,2824,916],{"class":915},[228,2826,919],{"class":252},[228,2828,922],{"class":915},[228,2830,2831],{"class":252},"\u002F\u002F Filter only by station",[228,2833,916],{"class":915},[228,2835,2836],{"class":252},"const stationWorkOrders = stationId",[228,2838,916],{"class":915},[228,2840,2841],{"class":252},"    ? workOrders.filter(w => w.stationId === stationId)",[228,2843,916],{"class":915},[228,2845,2846],{"class":252},"    : workOrders;",[228,2848,922],{"class":915},[228,2850,2851],{"class":252},"const total = stationWorkOrders.length;",[228,2853,916],{"class":915},[228,2855,2856],{"class":252},"const completed = stationWorkOrders.filter(w => w.status === ",[228,2858,928],{"class":915},[228,2860,984],{"class":252},[228,2862,928],{"class":915},[228,2864,2865],{"class":252},").length;",[228,2867,916],{"class":915},[228,2869,2870],{"class":252},"const defected = stationWorkOrders.filter(w => w.status === ",[228,2872,928],{"class":915},[228,2874,970],{"class":252},[228,2876,928],{"class":915},[228,2878,2865],{"class":252},[228,2880,922],{"class":915},[228,2882,2883],{"class":252},"\u002F\u002F Filter by user within the station",[228,2885,916],{"class":915},[228,2887,2888],{"class":252},"const assignedToMe = username",[228,2890,916],{"class":915},[228,2892,2893],{"class":252},"    ? stationWorkOrders.filter(w => w.assignedTo === username).length",[228,2895,916],{"class":915},[228,2897,2898],{"class":252},"    : 0;",[228,2900,922],{"class":915},[228,2902,1658],{"class":252},[228,2904,916],{"class":915},[228,2906,2907],{"class":252},"msg.payload = {",[228,2909,916],{"class":915},[228,2911,2912],{"class":252},"    total,",[228,2914,916],{"class":915},[228,2916,2917],{"class":252},"    completed,",[228,2919,916],{"class":915},[228,2921,2922],{"class":252},"    defected,",[228,2924,916],{"class":915},[228,2926,2927],{"class":252},"    assignedToMe",[228,2929,916],{"class":915},[228,2931,1648],{"class":252},[228,2933,922],{"class":915},[228,2935,1000],{"class":252},[228,2937,238],{"class":234},[228,2939,258],{"class":234},[228,2941,238],{"class":234},[228,2943,1009],{"class":241},[228,2945,238],{"class":234},[228,2947,247],{"class":234},[228,2949,337],{"class":573},[228,2951,258],{"class":234},[228,2953,238],{"class":234},[228,2955,1022],{"class":241},[228,2957,238],{"class":234},[228,2959,247],{"class":234},[228,2961,770],{"class":234},[228,2963,258],{"class":234},[228,2965,238],{"class":234},[228,2967,1035],{"class":241},[228,2969,238],{"class":234},[228,2971,247],{"class":234},[228,2973,1042],{"class":573},[228,2975,258],{"class":234},[228,2977,238],{"class":234},[228,2979,1049],{"class":241},[228,2981,238],{"class":234},[228,2983,247],{"class":234},[228,2985,770],{"class":234},[228,2987,258],{"class":234},[228,2989,238],{"class":234},[228,2991,1062],{"class":241},[228,2993,238],{"class":234},[228,2995,247],{"class":234},[228,2997,770],{"class":234},[228,2999,258],{"class":234},[228,3001,238],{"class":234},[228,3003,1075],{"class":241},[228,3005,238],{"class":234},[228,3007,1080],{"class":234},[228,3009,238],{"class":234},[228,3011,566],{"class":241},[228,3013,238],{"class":234},[228,3015,247],{"class":234},[228,3017,1438],{"class":573},[228,3019,258],{"class":234},[228,3021,238],{"class":234},[228,3023,581],{"class":241},[228,3025,238],{"class":234},[228,3027,247],{"class":234},[228,3029,2702],{"class":573},[228,3031,258],{"class":234},[228,3033,238],{"class":234},[228,3035,802],{"class":241},[228,3037,238],{"class":234},[228,3039,807],{"class":234},[228,3041,238],{"class":234},[228,3043,538],{"class":252},[228,3045,238],{"class":234},[228,3047,816],{"class":234},[228,3049,238],{"class":234},[228,3051,242],{"class":241},[228,3053,238],{"class":234},[228,3055,247],{"class":234},[228,3057,238],{"class":234},[228,3059,538],{"class":252},[228,3061,238],{"class":234},[228,3063,258],{"class":234},[228,3065,238],{"class":234},[228,3067,263],{"class":241},[228,3069,238],{"class":234},[228,3071,247],{"class":234},[228,3073,238],{"class":234},[228,3075,1150],{"class":252},[228,3077,238],{"class":234},[228,3079,258],{"class":234},[228,3081,238],{"class":234},[228,3083,281],{"class":241},[228,3085,238],{"class":234},[228,3087,247],{"class":234},[228,3089,238],{"class":234},[228,3091,290],{"class":252},[228,3093,238],{"class":234},[228,3095,258],{"class":234},[228,3097,238],{"class":234},[228,3099,673],{"class":241},[228,3101,238],{"class":234},[228,3103,247],{"class":234},[228,3105,238],{"class":234},[228,3107,253],{"class":252},[228,3109,238],{"class":234},[228,3111,258],{"class":234},[228,3113,238],{"class":234},[228,3115,690],{"class":241},[228,3117,238],{"class":234},[228,3119,247],{"class":234},[228,3121,770],{"class":234},[228,3123,258],{"class":234},[228,3125,238],{"class":234},[228,3127,1203],{"class":241},[228,3129,238],{"class":234},[228,3131,247],{"class":234},[228,3133,770],{"class":234},[228,3135,258],{"class":234},[228,3137,238],{"class":234},[228,3139,1216],{"class":241},[228,3141,238],{"class":234},[228,3143,304],{"class":234},[228,3145,238],{"class":234},[228,3147,1225],{"class":309},[228,3149,238],{"class":234},[228,3151,247],{"class":234},[228,3153,238],{"class":234},[228,3155,1234],{"class":252},[228,3157,238],{"class":234},[228,3159,424],{"class":234},[228,3161,238],{"class":234},[228,3163,566],{"class":241},[228,3165,238],{"class":234},[228,3167,247],{"class":234},[228,3169,1249],{"class":573},[228,3171,258],{"class":234},[228,3173,238],{"class":234},[228,3175,581],{"class":241},[228,3177,238],{"class":234},[228,3179,247],{"class":234},[228,3181,2702],{"class":573},[228,3183,258],{"class":234},[228,3185,238],{"class":234},[228,3187,802],{"class":241},[228,3189,238],{"class":234},[228,3191,1272],{"class":234},[228,3193,238],{"class":234},[228,3195,242],{"class":241},[228,3197,238],{"class":234},[228,3199,247],{"class":234},[228,3201,238],{"class":234},[228,3203,547],{"class":252},[228,3205,238],{"class":234},[228,3207,258],{"class":234},[228,3209,238],{"class":234},[228,3211,263],{"class":241},[228,3213,238],{"class":234},[228,3215,247],{"class":234},[228,3217,238],{"class":234},[228,3219,845],{"class":252},[228,3221,238],{"class":234},[228,3223,258],{"class":234},[228,3225,238],{"class":234},[228,3227,281],{"class":241},[228,3229,238],{"class":234},[228,3231,247],{"class":234},[228,3233,238],{"class":234},[228,3235,290],{"class":252},[228,3237,238],{"class":234},[228,3239,258],{"class":234},[228,3241,238],{"class":234},[228,3243,673],{"class":241},[228,3245,238],{"class":234},[228,3247,247],{"class":234},[228,3249,238],{"class":234},[228,3251,253],{"class":252},[228,3253,238],{"class":234},[228,3255,258],{"class":234},[228,3257,238],{"class":234},[228,3259,690],{"class":241},[228,3261,238],{"class":234},[228,3263,247],{"class":234},[228,3265,238],{"class":234},[228,3267,3268],{"class":252},"Generate Mock Work Orders",[228,3270,238],{"class":234},[228,3272,258],{"class":234},[228,3274,238],{"class":234},[228,3276,903],{"class":241},[228,3278,238],{"class":234},[228,3280,247],{"class":234},[228,3282,238],{"class":234},[228,3284,3285],{"class":252},"const user = global.get(",[228,3287,928],{"class":915},[228,3289,3290],{"class":252},"user",[228,3292,928],{"class":915},[228,3294,103],{"class":252},[228,3296,928],{"class":915},[228,3298,940],{"class":252},[228,3300,928],{"class":915},[228,3302,990],{"class":252},[228,3304,916],{"class":915},[228,3306,3307],{"class":252},"const currentUser = user?.username || ",[228,3309,928],{"class":915},[228,3311,3312],{"class":252},"operator1",[228,3314,928],{"class":915},[228,3316,3317],{"class":252},";",[228,3319,922],{"class":915},[228,3321,3322],{"class":252},"\u002F\u002F Pool of 5 operators (logged-in user + 4 others)",[228,3324,916],{"class":915},[228,3326,3327],{"class":252},"const operators = [",[228,3329,916],{"class":915},[228,3331,3332],{"class":252},"    currentUser,",[228,3334,916],{"class":915},[228,3336,3337],{"class":915},"    \\\"",[228,3339,3340],{"class":252},"operator2",[228,3342,928],{"class":915},[228,3344,258],{"class":252},[228,3346,916],{"class":915},[228,3348,3337],{"class":915},[228,3350,3351],{"class":252},"operator3",[228,3353,928],{"class":915},[228,3355,258],{"class":252},[228,3357,916],{"class":915},[228,3359,3337],{"class":915},[228,3361,3362],{"class":252},"operator4",[228,3364,928],{"class":915},[228,3366,258],{"class":252},[228,3368,916],{"class":915},[228,3370,3337],{"class":915},[228,3372,3373],{"class":252},"operator5",[228,3375,987],{"class":915},[228,3377,3378],{"class":252},"];",[228,3380,922],{"class":915},[228,3382,3383],{"class":252},"const vehicles = [",[228,3385,916],{"class":915},[228,3387,3388],{"class":252},"    {",[228,3390,916],{"class":915},[228,3392,3393],{"class":252},"        model: ",[228,3395,928],{"class":915},[228,3397,3398],{"class":252},"Sedan X",[228,3400,928],{"class":915},[228,3402,258],{"class":252},[228,3404,916],{"class":915},[228,3406,3407],{"class":252},"        variants: [",[228,3409,928],{"class":915},[228,3411,3412],{"class":252},"Standard",[228,3414,928],{"class":915},[228,3416,103],{"class":252},[228,3418,928],{"class":915},[228,3420,3421],{"class":252},"Premium",[228,3423,928],{"class":915},[228,3425,103],{"class":252},[228,3427,928],{"class":915},[228,3429,3430],{"class":252},"Sport",[228,3432,928],{"class":915},[228,3434,561],{"class":252},[228,3436,916],{"class":915},[228,3438,3439],{"class":252},"        colors: [",[228,3441,928],{"class":915},[228,3443,3444],{"class":252},"White",[228,3446,928],{"class":915},[228,3448,103],{"class":252},[228,3450,928],{"class":915},[228,3452,3453],{"class":252},"Black",[228,3455,928],{"class":915},[228,3457,103],{"class":252},[228,3459,928],{"class":915},[228,3461,3462],{"class":252},"Red",[228,3464,928],{"class":915},[228,3466,3467],{"class":252},"]",[228,3469,916],{"class":915},[228,3471,3472],{"class":252},"    },",[228,3474,916],{"class":915},[228,3476,3388],{"class":252},[228,3478,916],{"class":915},[228,3480,3393],{"class":252},[228,3482,928],{"class":915},[228,3484,3485],{"class":252},"SUV Y",[228,3487,928],{"class":915},[228,3489,258],{"class":252},[228,3491,916],{"class":915},[228,3493,3407],{"class":252},[228,3495,928],{"class":915},[228,3497,3498],{"class":252},"Base",[228,3500,928],{"class":915},[228,3502,103],{"class":252},[228,3504,928],{"class":915},[228,3506,3421],{"class":252},[228,3508,928],{"class":915},[228,3510,103],{"class":252},[228,3512,928],{"class":915},[228,3514,3430],{"class":252},[228,3516,928],{"class":915},[228,3518,561],{"class":252},[228,3520,916],{"class":915},[228,3522,3439],{"class":252},[228,3524,928],{"class":915},[228,3526,3527],{"class":252},"Grey",[228,3529,928],{"class":915},[228,3531,103],{"class":252},[228,3533,928],{"class":915},[228,3535,3444],{"class":252},[228,3537,928],{"class":915},[228,3539,103],{"class":252},[228,3541,928],{"class":915},[228,3543,3453],{"class":252},[228,3545,928],{"class":915},[228,3547,3467],{"class":252},[228,3549,916],{"class":915},[228,3551,3472],{"class":252},[228,3553,916],{"class":915},[228,3555,3388],{"class":252},[228,3557,916],{"class":915},[228,3559,3393],{"class":252},[228,3561,928],{"class":915},[228,3563,3564],{"class":252},"Truck Z",[228,3566,928],{"class":915},[228,3568,258],{"class":252},[228,3570,916],{"class":915},[228,3572,3407],{"class":252},[228,3574,928],{"class":915},[228,3576,3412],{"class":252},[228,3578,928],{"class":915},[228,3580,103],{"class":252},[228,3582,928],{"class":915},[228,3584,3585],{"class":252},"Heavy Duty",[228,3587,928],{"class":915},[228,3589,561],{"class":252},[228,3591,916],{"class":915},[228,3593,3439],{"class":252},[228,3595,928],{"class":915},[228,3597,3598],{"class":252},"Blue",[228,3600,928],{"class":915},[228,3602,103],{"class":252},[228,3604,928],{"class":915},[228,3606,3607],{"class":252},"Green",[228,3609,928],{"class":915},[228,3611,103],{"class":252},[228,3613,928],{"class":915},[228,3615,3444],{"class":252},[228,3617,928],{"class":915},[228,3619,3467],{"class":252},[228,3621,916],{"class":915},[228,3623,3472],{"class":252},[228,3625,916],{"class":915},[228,3627,3388],{"class":252},[228,3629,916],{"class":915},[228,3631,3393],{"class":252},[228,3633,928],{"class":915},[228,3635,3636],{"class":252},"Hatchback W",[228,3638,928],{"class":915},[228,3640,258],{"class":252},[228,3642,916],{"class":915},[228,3644,3407],{"class":252},[228,3646,928],{"class":915},[228,3648,3498],{"class":252},[228,3650,928],{"class":915},[228,3652,103],{"class":252},[228,3654,928],{"class":915},[228,3656,3430],{"class":252},[228,3658,928],{"class":915},[228,3660,561],{"class":252},[228,3662,916],{"class":915},[228,3664,3439],{"class":252},[228,3666,928],{"class":915},[228,3668,3669],{"class":252},"Silver",[228,3671,928],{"class":915},[228,3673,103],{"class":252},[228,3675,928],{"class":915},[228,3677,3678],{"class":252},"Yellow",[228,3680,928],{"class":915},[228,3682,103],{"class":252},[228,3684,928],{"class":915},[228,3686,3462],{"class":252},[228,3688,928],{"class":915},[228,3690,3467],{"class":252},[228,3692,916],{"class":915},[228,3694,3695],{"class":252},"    }",[228,3697,916],{"class":915},[228,3699,3378],{"class":252},[228,3701,922],{"class":915},[228,3703,3704],{"class":252},"const operations = [",[228,3706,916],{"class":915},[228,3708,3388],{"class":252},[228,3710,916],{"class":915},[228,3712,3713],{"class":252},"        operationId: ",[228,3715,928],{"class":915},[228,3717,3718],{"class":252},"OP_WHEEL_FL",[228,3720,928],{"class":915},[228,3722,258],{"class":252},[228,3724,916],{"class":915},[228,3726,3727],{"class":252},"        name: ",[228,3729,928],{"class":915},[228,3731,3732],{"class":252},"Install Front Left Wheel",[228,3734,928],{"class":915},[228,3736,258],{"class":252},[228,3738,916],{"class":915},[228,3740,3741],{"class":252},"        instructionSetId: ",[228,3743,928],{"class":915},[228,3745,3746],{"class":252},"INS001",[228,3748,928],{"class":915},[228,3750,258],{"class":252},[228,3752,916],{"class":915},[228,3754,3755],{"class":252},"        estimatedCycleTime: 45",[228,3757,916],{"class":915},[228,3759,3472],{"class":252},[228,3761,916],{"class":915},[228,3763,3388],{"class":252},[228,3765,916],{"class":915},[228,3767,3713],{"class":252},[228,3769,928],{"class":915},[228,3771,3772],{"class":252},"OP_WHEEL_FR",[228,3774,928],{"class":915},[228,3776,258],{"class":252},[228,3778,916],{"class":915},[228,3780,3727],{"class":252},[228,3782,928],{"class":915},[228,3784,3785],{"class":252},"Install Front Right Wheel",[228,3787,928],{"class":915},[228,3789,258],{"class":252},[228,3791,916],{"class":915},[228,3793,3741],{"class":252},[228,3795,928],{"class":915},[228,3797,3798],{"class":252},"INS002",[228,3800,928],{"class":915},[228,3802,258],{"class":252},[228,3804,916],{"class":915},[228,3806,3755],{"class":252},[228,3808,916],{"class":915},[228,3810,3695],{"class":252},[228,3812,916],{"class":915},[228,3814,3378],{"class":252},[228,3816,922],{"class":915},[228,3818,3819],{"class":252},"const priorities = [",[228,3821,928],{"class":915},[228,3823,3824],{"class":252},"Critical",[228,3826,928],{"class":915},[228,3828,103],{"class":252},[228,3830,928],{"class":915},[228,3832,3833],{"class":252},"High",[228,3835,928],{"class":915},[228,3837,103],{"class":252},[228,3839,928],{"class":915},[228,3841,3842],{"class":252},"Normal",[228,3844,928],{"class":915},[228,3846,103],{"class":252},[228,3848,928],{"class":915},[228,3850,3851],{"class":252},"Low",[228,3853,928],{"class":915},[228,3855,3378],{"class":252},[228,3857,916],{"class":915},[228,3859,3860],{"class":252},"const statuses = [",[228,3862,928],{"class":915},[228,3864,3865],{"class":252},"Ready",[228,3867,928],{"class":915},[228,3869,103],{"class":252},[228,3871,928],{"class":915},[228,3873,3874],{"class":252},"Waiting",[228,3876,928],{"class":915},[228,3878,103],{"class":252},[228,3880,928],{"class":915},[228,3882,3883],{"class":252},"Queued",[228,3885,928],{"class":915},[228,3887,3378],{"class":252},[228,3889,922],{"class":915},[228,3891,3892],{"class":252},"function random(arr) {",[228,3894,916],{"class":915},[228,3896,3897],{"class":252},"    return arr[Math.floor(Math.random() * arr.length)];",[228,3899,916],{"class":915},[228,3901,1575],{"class":252},[228,3903,922],{"class":915},[228,3905,3906],{"class":252},"\u002F\u002F Read existing work orders",[228,3908,916],{"class":915},[228,3910,3911],{"class":252},"const existingWorkOrders = global.get(",[228,3913,928],{"class":915},[228,3915,931],{"class":252},[228,3917,928],{"class":915},[228,3919,103],{"class":252},[228,3921,928],{"class":915},[228,3923,940],{"class":252},[228,3925,928],{"class":915},[228,3927,945],{"class":252},[228,3929,922],{"class":915},[228,3931,3932],{"class":252},"\u002F\u002F Start IDs after the existing ones",[228,3934,916],{"class":915},[228,3936,3937],{"class":252},"let nextId = 10245 + existingWorkOrders.length;",[228,3939,922],{"class":915},[228,3941,3942],{"class":252},"\u002F\u002F Generate 20 new work orders",[228,3944,916],{"class":915},[228,3946,3947],{"class":252},"for (let i = 0; i \u003C 20; i++) {",[228,3949,916],{"class":915},[228,3951,3952],{"class":252},"    const vehicle = random(vehicles);",[228,3954,916],{"class":915},[228,3956,3957],{"class":252},"    const operation = random(operations);",[228,3959,922],{"class":915},[228,3961,3962],{"class":252},"    existingWorkOrders.push({",[228,3964,916],{"class":915},[228,3966,3967],{"class":252},"        workOrderId: `WO-${nextId++}`,",[228,3969,916],{"class":915},[228,3971,3972],{"class":252},"        stationId: ",[228,3974,928],{"class":915},[228,3976,3977],{"class":252},"ST12",[228,3979,928],{"class":915},[228,3981,258],{"class":252},[228,3983,916],{"class":915},[228,3985,3986],{"class":252},"        status: random(statuses),",[228,3988,916],{"class":915},[228,3990,3991],{"class":252},"        priority: random(priorities),",[228,3993,916],{"class":915},[228,3995,3996],{"class":252},"        assignedTo: random(operators),",[228,3998,916],{"class":915},[228,4000,4001],{"class":252},"        vehicle: {",[228,4003,916],{"class":915},[228,4005,4006],{"class":252},"            vin: `MH01AB${1234567890 + existingWorkOrders.length}`,",[228,4008,916],{"class":915},[228,4010,4011],{"class":252},"            model: vehicle.model,",[228,4013,916],{"class":915},[228,4015,4016],{"class":252},"            variant: random(vehicle.variants),",[228,4018,916],{"class":915},[228,4020,4021],{"class":252},"            color: random(vehicle.colors)",[228,4023,916],{"class":915},[228,4025,4026],{"class":252},"        },",[228,4028,916],{"class":915},[228,4030,4031],{"class":252},"        operation: {",[228,4033,916],{"class":915},[228,4035,4036],{"class":252},"            operationId: operation.operationId,",[228,4038,916],{"class":915},[228,4040,4041],{"class":252},"            name: operation.name,",[228,4043,916],{"class":915},[228,4045,4046],{"class":252},"            estimatedCycleTime: operation.estimatedCycleTime,",[228,4048,916],{"class":915},[228,4050,4051],{"class":252},"            instructionSetId: operation.instructionSetId",[228,4053,916],{"class":915},[228,4055,4056],{"class":252},"        }",[228,4058,916],{"class":915},[228,4060,4061],{"class":252},"    });",[228,4063,916],{"class":915},[228,4065,1575],{"class":252},[228,4067,922],{"class":915},[228,4069,4070],{"class":252},"\u002F\u002F Save updated list",[228,4072,916],{"class":915},[228,4074,4075],{"class":252},"global.set(",[228,4077,928],{"class":915},[228,4079,931],{"class":252},[228,4081,928],{"class":915},[228,4083,4084],{"class":252},", existingWorkOrders, ",[228,4086,928],{"class":915},[228,4088,940],{"class":252},[228,4090,928],{"class":915},[228,4092,990],{"class":252},[228,4094,922],{"class":915},[228,4096,4097],{"class":252},"msg.payload = existingWorkOrders;",[228,4099,916],{"class":915},[228,4101,1000],{"class":252},[228,4103,238],{"class":234},[228,4105,258],{"class":234},[228,4107,238],{"class":234},[228,4109,1009],{"class":241},[228,4111,238],{"class":234},[228,4113,247],{"class":234},[228,4115,337],{"class":573},[228,4117,258],{"class":234},[228,4119,238],{"class":234},[228,4121,1022],{"class":241},[228,4123,238],{"class":234},[228,4125,247],{"class":234},[228,4127,1042],{"class":573},[228,4129,258],{"class":234},[228,4131,238],{"class":234},[228,4133,1035],{"class":241},[228,4135,238],{"class":234},[228,4137,247],{"class":234},[228,4139,1042],{"class":573},[228,4141,258],{"class":234},[228,4143,238],{"class":234},[228,4145,1049],{"class":241},[228,4147,238],{"class":234},[228,4149,247],{"class":234},[228,4151,770],{"class":234},[228,4153,258],{"class":234},[228,4155,238],{"class":234},[228,4157,1062],{"class":241},[228,4159,238],{"class":234},[228,4161,247],{"class":234},[228,4163,770],{"class":234},[228,4165,258],{"class":234},[228,4167,238],{"class":234},[228,4169,1075],{"class":241},[228,4171,238],{"class":234},[228,4173,1080],{"class":234},[228,4175,238],{"class":234},[228,4177,566],{"class":241},[228,4179,238],{"class":234},[228,4181,247],{"class":234},[228,4183,4184],{"class":573},"440",[228,4186,258],{"class":234},[228,4188,238],{"class":234},[228,4190,581],{"class":241},[228,4192,238],{"class":234},[228,4194,247],{"class":234},[228,4196,4197],{"class":573},"100",[228,4199,258],{"class":234},[228,4201,238],{"class":234},[228,4203,802],{"class":241},[228,4205,238],{"class":234},[228,4207,4208],{"class":234},":[[]]},{",[228,4210,238],{"class":234},[228,4212,242],{"class":241},[228,4214,238],{"class":234},[228,4216,247],{"class":234},[228,4218,238],{"class":234},[228,4220,556],{"class":252},[228,4222,238],{"class":234},[228,4224,258],{"class":234},[228,4226,238],{"class":234},[228,4228,263],{"class":241},[228,4230,238],{"class":234},[228,4232,247],{"class":234},[228,4234,238],{"class":234},[228,4236,118],{"class":252},[228,4238,238],{"class":234},[228,4240,258],{"class":234},[228,4242,238],{"class":234},[228,4244,281],{"class":241},[228,4246,238],{"class":234},[228,4248,247],{"class":234},[228,4250,238],{"class":234},[228,4252,290],{"class":252},[228,4254,238],{"class":234},[228,4256,258],{"class":234},[228,4258,238],{"class":234},[228,4260,673],{"class":241},[228,4262,238],{"class":234},[228,4264,247],{"class":234},[228,4266,238],{"class":234},[228,4268,253],{"class":252},[228,4270,238],{"class":234},[228,4272,258],{"class":234},[228,4274,238],{"class":234},[228,4276,4277],{"class":241},"ui",[228,4279,238],{"class":234},[228,4281,247],{"class":234},[228,4283,238],{"class":234},[228,4285,4286],{"class":252},"37b66bc5b4d6d3d3",[228,4288,238],{"class":234},[228,4290,258],{"class":234},[228,4292,238],{"class":234},[228,4294,690],{"class":241},[228,4296,238],{"class":234},[228,4298,247],{"class":234},[228,4300,770],{"class":234},[228,4302,258],{"class":234},[228,4304,238],{"class":234},[228,4306,566],{"class":241},[228,4308,238],{"class":234},[228,4310,247],{"class":234},[228,4312,783],{"class":573},[228,4314,258],{"class":234},[228,4316,238],{"class":234},[228,4318,581],{"class":241},[228,4320,238],{"class":234},[228,4322,247],{"class":234},[228,4324,4197],{"class":573},[228,4326,258],{"class":234},[228,4328,238],{"class":234},[228,4330,802],{"class":241},[228,4332,238],{"class":234},[228,4334,807],{"class":234},[228,4336,238],{"class":234},[228,4338,547],{"class":252},[228,4340,238],{"class":234},[228,4342,816],{"class":234},[228,4344,238],{"class":234},[228,4346,242],{"class":241},[228,4348,238],{"class":234},[228,4350,247],{"class":234},[228,4352,238],{"class":234},[228,4354,4286],{"class":252},[228,4356,238],{"class":234},[228,4358,258],{"class":234},[228,4360,238],{"class":234},[228,4362,263],{"class":241},[228,4364,238],{"class":234},[228,4366,247],{"class":234},[228,4368,238],{"class":234},[228,4370,4371],{"class":252},"ui-base",[228,4373,238],{"class":234},[228,4375,258],{"class":234},[228,4377,238],{"class":234},[228,4379,690],{"class":241},[228,4381,238],{"class":234},[228,4383,247],{"class":234},[228,4385,238],{"class":234},[228,4387,4388],{"class":252},"My Dashboard",[228,4390,238],{"class":234},[228,4392,258],{"class":234},[228,4394,238],{"class":234},[228,4396,4397],{"class":241},"path",[228,4399,238],{"class":234},[228,4401,247],{"class":234},[228,4403,238],{"class":234},[228,4405,4406],{"class":252},"\u002Fdashboard",[228,4408,238],{"class":234},[228,4410,258],{"class":234},[228,4412,238],{"class":234},[228,4414,4415],{"class":241},"appIcon",[228,4417,238],{"class":234},[228,4419,247],{"class":234},[228,4421,770],{"class":234},[228,4423,258],{"class":234},[228,4425,238],{"class":234},[228,4427,4428],{"class":241},"includeClientData",[228,4430,238],{"class":234},[228,4432,387],{"class":234},[228,4434,238],{"class":234},[228,4436,4437],{"class":241},"acceptsClientConfig",[228,4439,238],{"class":234},[228,4441,434],{"class":234},[228,4443,238],{"class":234},[228,4445,4446],{"class":252},"ui-notification",[228,4448,238],{"class":234},[228,4450,258],{"class":234},[228,4452,238],{"class":234},[228,4454,115],{"class":252},[228,4456,238],{"class":234},[228,4458,258],{"class":234},[228,4460,238],{"class":234},[228,4462,102],{"class":252},[228,4464,238],{"class":234},[228,4466,258],{"class":234},[228,4468,238],{"class":234},[228,4470,109],{"class":252},[228,4472,238],{"class":234},[228,4474,258],{"class":234},[228,4476,238],{"class":234},[228,4478,106],{"class":252},[228,4480,238],{"class":234},[228,4482,258],{"class":234},[228,4484,238],{"class":234},[228,4486,4487],{"class":252},"ui-text-input",[228,4489,238],{"class":234},[228,4491,258],{"class":234},[228,4493,238],{"class":234},[228,4495,4496],{"class":252},"ui-number-input",[228,4498,238],{"class":234},[228,4500,258],{"class":234},[228,4502,238],{"class":234},[228,4504,4505],{"class":252},"ui-file-input",[228,4507,238],{"class":234},[228,4509,258],{"class":234},[228,4511,238],{"class":234},[228,4513,112],{"class":252},[228,4515,238],{"class":234},[228,4517,258],{"class":234},[228,4519,238],{"class":234},[228,4521,4522],{"class":252},"ui-button-group",[228,4524,238],{"class":234},[228,4526,258],{"class":234},[228,4528,238],{"class":234},[228,4530,4531],{"class":252},"ui-dropdown",[228,4533,238],{"class":234},[228,4535,258],{"class":234},[228,4537,238],{"class":234},[228,4539,4540],{"class":252},"ui-radio-group",[228,4542,238],{"class":234},[228,4544,258],{"class":234},[228,4546,238],{"class":234},[228,4548,4549],{"class":252},"ui-slider",[228,4551,238],{"class":234},[228,4553,258],{"class":234},[228,4555,238],{"class":234},[228,4557,121],{"class":252},[228,4559,238],{"class":234},[228,4561,258],{"class":234},[228,4563,238],{"class":234},[228,4565,4566],{"class":252},"ui-switch",[228,4568,238],{"class":234},[228,4570,258],{"class":234},[228,4572,238],{"class":234},[228,4574,4575],{"class":252},"ui-chart",[228,4577,238],{"class":234},[228,4579,258],{"class":234},[228,4581,238],{"class":234},[228,4583,4584],{"class":252},"ui-audio",[228,4586,238],{"class":234},[228,4588,258],{"class":234},[228,4590,238],{"class":234},[228,4592,4593],{"class":252},"ui-markdown",[228,4595,238],{"class":234},[228,4597,258],{"class":234},[228,4599,238],{"class":234},[228,4601,4602],{"class":252},"ui-progress",[228,4604,238],{"class":234},[228,4606,258],{"class":234},[228,4608,238],{"class":234},[228,4610,4611],{"class":252},"ui-gauge",[228,4613,238],{"class":234},[228,4615,561],{"class":234},[228,4617,238],{"class":234},[228,4619,4620],{"class":241},"showPathInSidebar",[228,4622,238],{"class":234},[228,4624,749],{"class":234},[228,4626,238],{"class":234},[228,4628,4629],{"class":241},"headerContent",[228,4631,238],{"class":234},[228,4633,247],{"class":234},[228,4635,238],{"class":234},[228,4637,4638],{"class":252},"page",[228,4640,238],{"class":234},[228,4642,258],{"class":234},[228,4644,238],{"class":234},[228,4646,4647],{"class":241},"navigationStyle",[228,4649,238],{"class":234},[228,4651,247],{"class":234},[228,4653,238],{"class":234},[228,4655,4656],{"class":252},"default",[228,4658,238],{"class":234},[228,4660,258],{"class":234},[228,4662,238],{"class":234},[228,4664,4665],{"class":241},"titleBarStyle",[228,4667,238],{"class":234},[228,4669,247],{"class":234},[228,4671,238],{"class":234},[228,4673,4656],{"class":252},[228,4675,238],{"class":234},[228,4677,258],{"class":234},[228,4679,238],{"class":234},[228,4681,4682],{"class":241},"showReconnectNotification",[228,4684,238],{"class":234},[228,4686,387],{"class":234},[228,4688,238],{"class":234},[228,4690,4691],{"class":241},"notificationDisplayTime",[228,4693,238],{"class":234},[228,4695,247],{"class":234},[228,4697,337],{"class":573},[228,4699,258],{"class":234},[228,4701,238],{"class":234},[228,4703,4704],{"class":241},"showDisconnectNotification",[228,4706,238],{"class":234},[228,4708,387],{"class":234},[228,4710,238],{"class":234},[228,4712,4713],{"class":241},"allowInstall",[228,4715,238],{"class":234},[228,4717,4718],{"class":234},":false},{",[228,4720,238],{"class":234},[228,4722,242],{"class":241},[228,4724,238],{"class":234},[228,4726,247],{"class":234},[228,4728,238],{"class":234},[228,4730,4731],{"class":252},"4b583d9b76bf5cf2",[228,4733,238],{"class":234},[228,4735,258],{"class":234},[228,4737,238],{"class":234},[228,4739,263],{"class":241},[228,4741,238],{"class":234},[228,4743,247],{"class":234},[228,4745,238],{"class":234},[228,4747,4748],{"class":252},"global-config",[228,4750,238],{"class":234},[228,4752,258],{"class":234},[228,4754,238],{"class":234},[228,4756,4757],{"class":241},"env",[228,4759,238],{"class":234},[228,4761,1080],{"class":234},[228,4763,238],{"class":234},[228,4765,4766],{"class":241},"modules",[228,4768,238],{"class":234},[228,4770,304],{"class":234},[228,4772,238],{"class":234},[228,4774,98],{"class":309},[228,4776,238],{"class":234},[228,4778,247],{"class":234},[228,4780,238],{"class":234},[228,4782,4783],{"class":252},"1.30.2",[228,4785,238],{"class":234},[228,4787,4788],{"class":234},"}}]\n",[12,4790,4791,4792,4795],{},"The flow initializes a set of sample work orders and exposes REST APIs that the Digital Work Instructions application uses throughout this tutorial. The ",[96,4793,4794],{},"GET \u002Fworkorders"," endpoint returns the active work orders, while the other endpoints simulate completing a work order, reporting defects, and retrieving production statistics. This lets you build and test the application without a live ERP or MES. Later, you can replace these endpoints with calls to your production system while keeping the rest of the application unchanged.",[59,4797,4799],{"id":4798},"setting-up-the-dashboard-layout","Setting Up the Dashboard Layout",[12,4801,4802,4803,4808,4809,4812,4813,4816,4817,4820],{},"The application consists of three pages. Most widgets are placed inside named groups, while a few are scoped differently. See the ",[53,4804,4807],{"href":4805,"rel":4806},"https:\u002F\u002Fdashboard.flowfuse.com\u002Fgetting-started",[80],"Dashboard layout docs"," if you're new to how pages, groups, and bases relate. The app bar greeting is ",[45,4810,4811],{},"UI-scoped",", and the work instruction widget is ",[45,4814,4815],{},"page-scoped",", allowing it to fill the entire ",[45,4818,4819],{},"Instructions"," page without requiring a group. Before adding any widgets, create the dashboard structure by setting up the pages and groups.",[147,4822,4823,4868,4871,4903],{},[70,4824,4825,4826,4829,4830],{},"Create three ",[45,4827,4828],{},"ui-page"," nodes. The Dashboard automatically creates a base dashboard the first time you add a Dashboard node to the canvas.",[67,4831,4832,4846,4857],{},[70,4833,4834,4837,4838,4841,4842,4845],{},[45,4835,4836],{},"Home"," (path: ",[96,4839,4840],{},"\u002Fhome",") – The operator's landing page after login. Set the layout to ",[45,4843,4844],{},"Notebook"," to match the demo application.",[70,4847,4848,4837,4850,4853,4854,57],{},[45,4849,4819],{},[96,4851,4852],{},"\u002Finstructions",") – Displays the step-by-step work instructions. Set the layout to ",[45,4855,4856],{},"Grid",[70,4858,4859,4837,4862,4865,4866,57],{},[45,4860,4861],{},"Report Issue",[96,4863,4864],{},"\u002Freport-issue",") – Contains the defect reporting form. Set the layout to ",[45,4867,4856],{},[70,4869,4870],{},"Configure the theme for each page as desired.",[70,4872,4873,4874,4876,4877,4880,4881],{},"On the ",[45,4875,4836],{}," page, create four ",[45,4878,4879],{},"ui-group"," nodes:",[67,4882,4883,4888,4893,4898],{},[70,4884,4885],{},[45,4886,4887],{},"Current Station",[70,4889,4890],{},[45,4891,4892],{},"Stats",[70,4894,4895],{},[45,4896,4897],{},"Current Work Order",[70,4899,4900],{},[45,4901,4902],{},"Up Next",[70,4904,4873,4905,4907,4908,4910,4911,4913],{},[45,4906,4861],{}," page, create a single ",[45,4909,4879],{}," named ",[45,4912,4861],{},". This group will contain the issue reporting form and its action buttons.",[12,4915,4916,4917,4919,4920,4922],{},"The ",[45,4918,4819],{}," page does not require a ",[45,4921,4879],{}," because the work instruction widget is page-scoped and automatically occupies the full page.",[12,4924,4925],{},"With this layout in place, each widget added in the following sections can be assigned to the appropriate group, or directly to the page when required.",[59,4927,4929],{"id":4928},"enabling-flowfuse-user-authentication","Enabling FlowFuse User Authentication",[12,4931,4932],{},"Everything starts with a login. Without authentication, the dashboard cannot identify who is using it, so every visitor sees the same experience.",[40,4934,4935],{},[12,4936,4937,4939],{},[45,4938,47],{}," FlowFuse User Authentication grants dashboard access to members of the same team as the instance. Operators you want to sign in must belong to that team, otherwise they won't be able to reach the dashboard. If you need people outside the team to use the application, you'll need to add them to the team.",[147,4941,4942,4948,4955],{},[70,4943,4944,4945,57],{},"Open your FlowFuse instance ",[45,4946,4947],{},"Settings",[70,4949,4950,4951,4954],{},"Select the ",[45,4952,4953],{},"Security"," tab.",[70,4956,4957,4958,57],{},"Enable ",[45,4959,4960],{},"FlowFuse User Authentication",[12,4962,4963,4967],{},[21,4964],{"alt":4965,"src":4966},"Screenshot: the Security tab in instance settings with FlowFuse User Authentication enabled","\u002Fblog\u002F2024\u002F04\u002Fimages\u002Fdisplaying-logged-in-user-flowfuse-instance-setting.png",[26,4968,4969],{},"Enable FlowFuse User Authentication in the instance Security settings. You'll also create a Personal Access Token here for authenticating API requests later in the tutorial.",[12,4971,4972],{},"The first time someone opens the dashboard, they will be prompted to sign in using their FlowFuse username and password. Once authenticated, the dashboard can personalize the experience for each operator throughout the rest of this tutorial.",[12,4974,4975],{},"Because this tutorial also interacts with the FlowFuse API, you'll need to create a Personal Access Token:",[147,4977,4979,4988,4991],{"start":4978},4,[70,4980,4981,4982,4984,4985,57],{},"In the same ",[45,4983,4953],{}," tab, click ",[45,4986,4987],{},"Add Token",[70,4989,4990],{},"Enter a name for the token and choose an expiration date.",[70,4992,4993,4994,4997],{},"Click ",[45,4995,4996],{},"Create",", then copy the generated token and save it somewhere secure. You will need it later in the tutorial.",[40,4999,5000],{},[12,5001,5002,5005,5006,5009,5010,5012],{},[45,5003,5004],{},"Security note:"," Every ",[96,5007,5008],{},"http request"," node in this tutorial authenticates with this token, and for the sake of a self-contained tutorial we reference it as a plain Bearer token on each node. Don't leave it hardcoded that way in a real deployment. Store it as an environment variable on your FlowFuse instance and reference that variable from each ",[96,5011,5008],{}," node's auth config instead, so the raw token never sits in exported flow JSON or version control.",[59,5014,5016],{"id":5015},"installing-the-user-addon","Installing the User Addon",[12,5018,5019],{},"Authentication identifies the user, but your flows also need access to that information. The FlowFuse User Addon attaches the authenticated user's details to every Dashboard message.",[147,5021,5022,5028,5034,5040],{},[70,5023,5024,5025,57],{},"Open ",[45,5026,5027],{},"Manage Palette",[70,5029,5030,5031,4954],{},"Go to the ",[45,5032,5033],{},"Install",[70,5035,5036,5037,57],{},"Search for ",[96,5038,5039],{},"@flowfuse\u002Fnode-red-dashboard-2-user-addon",[70,5041,4993,5042,57],{},[45,5043,5033],{},[12,5045,5046,5047,5049],{},"After installation, every Dashboard message includes a ",[96,5048,197],{}," object:",[219,5051,5053],{"className":221,"code":5052,"language":223,"meta":224,"style":224},"{\n  \"userId\": \"\",\n  \"username\": \"\",\n  \"email\": \"\",\n  \"name\": \"\",\n  \"image\": \"\"\n}\n",[96,5054,5055,5060,5079,5095,5110,5125,5140],{"__ignoreMap":224},[228,5056,5057],{"class":230,"line":231},[228,5058,5059],{"class":234},"{\n",[228,5061,5063,5066,5069,5071,5073,5076],{"class":230,"line":5062},2,[228,5064,5065],{"class":234},"  \"",[228,5067,5068],{"class":241},"userId",[228,5070,238],{"class":234},[228,5072,247],{"class":234},[228,5074,5075],{"class":234}," \"\"",[228,5077,5078],{"class":234},",\n",[228,5080,5082,5084,5087,5089,5091,5093],{"class":230,"line":5081},3,[228,5083,5065],{"class":234},[228,5085,5086],{"class":241},"username",[228,5088,238],{"class":234},[228,5090,247],{"class":234},[228,5092,5075],{"class":234},[228,5094,5078],{"class":234},[228,5096,5097,5099,5102,5104,5106,5108],{"class":230,"line":4978},[228,5098,5065],{"class":234},[228,5100,5101],{"class":241},"email",[228,5103,238],{"class":234},[228,5105,247],{"class":234},[228,5107,5075],{"class":234},[228,5109,5078],{"class":234},[228,5111,5113,5115,5117,5119,5121,5123],{"class":230,"line":5112},5,[228,5114,5065],{"class":234},[228,5116,690],{"class":241},[228,5118,238],{"class":234},[228,5120,247],{"class":234},[228,5122,5075],{"class":234},[228,5124,5078],{"class":234},[228,5126,5128,5130,5133,5135,5137],{"class":230,"line":5127},6,[228,5129,5065],{"class":234},[228,5131,5132],{"class":241},"image",[228,5134,238],{"class":234},[228,5136,247],{"class":234},[228,5138,5139],{"class":234}," \"\"\n",[228,5141,5143],{"class":230,"line":5142},7,[228,5144,5145],{"class":234},"}\n",[12,5147,5148,5149,5151,5152,5155,5156,5159],{},"The same information is available in a ",[45,5150,102],{}," using ",[96,5153,5154],{},"setup.socketio.auth.user"," (or ",[96,5157,5158],{},"this.setup.socketio.auth.user"," in the script).",[147,5161,5162,5173],{},[70,5163,5164,5165,5168,5169,5172],{},"In the ",[45,5166,5167],{},"FF Auth"," sidebar tab, ensure ",[45,5170,5171],{},"Include Client Data"," is enabled.",[70,5174,5175,5176,5179,5180,103,5182,103,5184,103,5186,5188,5189,5191],{},"Also enable ",[45,5177,5178],{},"Accept Client Data"," for ",[45,5181,102],{},[45,5183,115],{},[45,5185,118],{},[45,5187,109],{},", and ",[45,5190,106],{}," so each browser session is handled independently and operators don't affect each other's dashboard.",[12,5193,5194,5198],{},[21,5195],{"alt":5196,"src":5197},"Screenshot: FF Auth settings showing Include Client Data and Accept Client Data enabled for Dashboard nodes","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fclient-data-tab-dashboard.png",[26,5199,4957,5200,5202,5203,5205],{},[45,5201,5171],{}," and ",[45,5204,5178],{}," to make Dashboard interactions user-specific.",[12,5207,5208,5209,5211,5212,5214,5215,5217],{},"This is the setting that matters most in this tutorial, and it's worth being explicit about why. With ",[45,5210,5178],{}," enabled, every message a widget sends carries ",[96,5213,197],{}," for the session that sent it. That's a per-session identity attached directly to the message, as opposed to a single shared variable that every session would otherwise read and overwrite. We'll use ",[96,5216,197],{}," as the source of truth for \"who is acting right now\" in every function node from here on, rather than a global variable.",[59,5219,5221],{"id":5220},"greeting-the-logged-in-operator","Greeting the Logged-In Operator",[12,5223,5224,5225,5230],{},"The first, simplest payoff: show the operator their name and avatar in the app bar, so it's obvious who's signed in at this station. This uses Vue's ",[53,5226,5229],{"href":5227,"rel":5228},"https:\u002F\u002Fdashboard.flowfuse.com\u002Fnodes\u002Fwidgets\u002Fui-template.html#teleports",[80],"Teleport"," to render into the header's action area from a single widget that lives on every page, so you don't have to add it per page.",[147,5232,5233,5239,5246],{},[70,5234,5235,5236,5238],{},"Add a ",[96,5237,102],{}," node and name it \"App Bar User Info\".",[70,5240,5241,5242,5245],{},"Set its type to ",[45,5243,5244],{},"Widget (UI-Scoped)"," and select your \"My Dashboard\" ui-base. UI-scoped widgets render on every page automatically, so one widget covers the whole app, no group needed.",[70,5247,5248],{},"Paste in the snippet below:",[219,5250,5254],{"className":5251,"code":5252,"language":5253,"meta":224,"style":224},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Ctemplate>\n    \u003C!-- Teleport into #app-bar-actions, the action bar's right-hand corner -->\n    \u003CTeleport v-if=\"loaded\" to=\"#app-bar-actions\">\n        \u003Cdiv class=\"user-info\">\n            \u003Cimg :src=\"setup.socketio.auth.user.image\" \u002F>\n            \u003Cspan>Hi, {{ setup.socketio.auth.user.name }}\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n    \u003C\u002FTeleport>\n\u003C\u002Ftemplate>\n\n\u003Cscript>\nexport default {\n    data() {\n        return { loaded: false };\n    },\n    mounted() {\n        \u002F\u002F Wait for mount so #app-bar-actions exists before teleporting into it.\n        this.loaded = true;\n    }\n}\n\u003C\u002Fscript>\n\n\u003Cstyle>\n.user-info { display: flex; align-items: center; gap: 8px; }\n.user-info img { width: 24px; height: 24px; }\n\u003C\u002Fstyle>\n","html",[96,5255,5256,5268,5274,5308,5330,5352,5371,5380,5390,5399,5406,5416,5429,5440,5461,5467,5477,5483,5500,5506,5511,5520,5525,5534,5577,5610],{"__ignoreMap":224},[228,5257,5258,5261,5265],{"class":230,"line":231},[228,5259,5260],{"class":234},"\u003C",[228,5262,5264],{"class":5263},"swJcz","template",[228,5266,5267],{"class":234},">\n",[228,5269,5270],{"class":230,"line":5062},[228,5271,5273],{"class":5272},"sHwdD","    \u003C!-- Teleport into #app-bar-actions, the action bar's right-hand corner -->\n",[228,5275,5276,5279,5281,5284,5287,5289,5292,5294,5297,5299,5301,5304,5306],{"class":230,"line":5081},[228,5277,5278],{"class":234},"    \u003C",[228,5280,5229],{"class":5263},[228,5282,5283],{"class":241}," v-if",[228,5285,5286],{"class":234},"=",[228,5288,238],{"class":234},[228,5290,5291],{"class":252},"loaded",[228,5293,238],{"class":234},[228,5295,5296],{"class":241}," to",[228,5298,5286],{"class":234},[228,5300,238],{"class":234},[228,5302,5303],{"class":252},"#app-bar-actions",[228,5305,238],{"class":234},[228,5307,5267],{"class":234},[228,5309,5310,5313,5316,5319,5321,5323,5326,5328],{"class":230,"line":4978},[228,5311,5312],{"class":234},"        \u003C",[228,5314,5315],{"class":5263},"div",[228,5317,5318],{"class":241}," class",[228,5320,5286],{"class":234},[228,5322,238],{"class":234},[228,5324,5325],{"class":252},"user-info",[228,5327,238],{"class":234},[228,5329,5267],{"class":234},[228,5331,5332,5335,5337,5340,5342,5344,5347,5349],{"class":230,"line":5112},[228,5333,5334],{"class":234},"            \u003C",[228,5336,21],{"class":5263},[228,5338,5339],{"class":241}," :src",[228,5341,5286],{"class":234},[228,5343,238],{"class":234},[228,5345,5346],{"class":252},"setup.socketio.auth.user.image",[228,5348,238],{"class":234},[228,5350,5351],{"class":234}," \u002F>\n",[228,5353,5354,5356,5358,5361,5364,5367,5369],{"class":230,"line":5127},[228,5355,5334],{"class":234},[228,5357,228],{"class":5263},[228,5359,5360],{"class":234},">",[228,5362,5363],{"class":915},"Hi, {{ setup.socketio.auth.user.name }}",[228,5365,5366],{"class":234},"\u003C\u002F",[228,5368,228],{"class":5263},[228,5370,5267],{"class":234},[228,5372,5373,5376,5378],{"class":230,"line":5142},[228,5374,5375],{"class":234},"        \u003C\u002F",[228,5377,5315],{"class":5263},[228,5379,5267],{"class":234},[228,5381,5383,5386,5388],{"class":230,"line":5382},8,[228,5384,5385],{"class":234},"    \u003C\u002F",[228,5387,5229],{"class":5263},[228,5389,5267],{"class":234},[228,5391,5393,5395,5397],{"class":230,"line":5392},9,[228,5394,5366],{"class":234},[228,5396,5264],{"class":5263},[228,5398,5267],{"class":234},[228,5400,5402],{"class":230,"line":5401},10,[228,5403,5405],{"emptyLinePlaceholder":5404},true,"\n",[228,5407,5409,5411,5414],{"class":230,"line":5408},11,[228,5410,5260],{"class":234},[228,5412,5413],{"class":5263},"script",[228,5415,5267],{"class":234},[228,5417,5419,5423,5426],{"class":230,"line":5418},12,[228,5420,5422],{"class":5421},"s7zQu","export",[228,5424,5425],{"class":5421}," default",[228,5427,5428],{"class":234}," {\n",[228,5430,5432,5435,5438],{"class":230,"line":5431},13,[228,5433,5434],{"class":5263},"    data",[228,5436,5437],{"class":234},"()",[228,5439,5428],{"class":234},[228,5441,5443,5446,5449,5452,5454,5458],{"class":230,"line":5442},14,[228,5444,5445],{"class":5421},"        return",[228,5447,5448],{"class":234}," {",[228,5450,5451],{"class":5263}," loaded",[228,5453,247],{"class":234},[228,5455,5457],{"class":5456},"sfNiH"," false",[228,5459,5460],{"class":234}," };\n",[228,5462,5464],{"class":230,"line":5463},15,[228,5465,5466],{"class":234},"    },\n",[228,5468,5470,5473,5475],{"class":230,"line":5469},16,[228,5471,5472],{"class":5263},"    mounted",[228,5474,5437],{"class":234},[228,5476,5428],{"class":234},[228,5478,5480],{"class":230,"line":5479},17,[228,5481,5482],{"class":5272},"        \u002F\u002F Wait for mount so #app-bar-actions exists before teleporting into it.\n",[228,5484,5486,5489,5491,5494,5497],{"class":230,"line":5485},18,[228,5487,5488],{"class":234},"        this.",[228,5490,5291],{"class":915},[228,5492,5493],{"class":234}," =",[228,5495,5496],{"class":5456}," true",[228,5498,5499],{"class":234},";\n",[228,5501,5503],{"class":230,"line":5502},19,[228,5504,5505],{"class":234},"    }\n",[228,5507,5509],{"class":230,"line":5508},20,[228,5510,5145],{"class":234},[228,5512,5514,5516,5518],{"class":230,"line":5513},21,[228,5515,5366],{"class":234},[228,5517,5413],{"class":5263},[228,5519,5267],{"class":234},[228,5521,5523],{"class":230,"line":5522},22,[228,5524,5405],{"emptyLinePlaceholder":5404},[228,5526,5528,5530,5532],{"class":230,"line":5527},23,[228,5529,5260],{"class":234},[228,5531,299],{"class":5263},[228,5533,5267],{"class":234},[228,5535,5537,5539,5541,5543,5547,5549,5552,5554,5557,5559,5562,5564,5567,5569,5572,5574],{"class":230,"line":5536},24,[228,5538,57],{"class":234},[228,5540,5325],{"class":309},[228,5542,5448],{"class":234},[228,5544,5546],{"class":5545},"sqsOY"," display",[228,5548,247],{"class":234},[228,5550,5551],{"class":915}," flex",[228,5553,3317],{"class":234},[228,5555,5556],{"class":5545}," align-items",[228,5558,247],{"class":234},[228,5560,5561],{"class":915}," center",[228,5563,3317],{"class":234},[228,5565,5566],{"class":5545}," gap",[228,5568,247],{"class":234},[228,5570,5571],{"class":573}," 8px",[228,5573,3317],{"class":234},[228,5575,5576],{"class":234}," }\n",[228,5578,5580,5582,5584,5587,5589,5592,5594,5597,5599,5602,5604,5606,5608],{"class":230,"line":5579},25,[228,5581,57],{"class":234},[228,5583,5325],{"class":309},[228,5585,5586],{"class":309}," img",[228,5588,5448],{"class":234},[228,5590,5591],{"class":5545}," width",[228,5593,247],{"class":234},[228,5595,5596],{"class":573}," 24px",[228,5598,3317],{"class":234},[228,5600,5601],{"class":5545}," height",[228,5603,247],{"class":234},[228,5605,5596],{"class":573},[228,5607,3317],{"class":234},[228,5609,5576],{"class":234},[228,5611,5613,5615,5617],{"class":230,"line":5612},26,[228,5614,5366],{"class":234},[228,5616,299],{"class":5263},[228,5618,5267],{"class":234},[12,5620,5621,5622,5624],{},"Deploy and open the dashboard. The signed-in operator's name and avatar appear in the top-right corner. You don't redeploy when a different operator logs in, the addon fetches each user's data at runtime, so everyone sees their own. This widget reads identity straight off the browser's own socket session (",[96,5623,5154],{},"), so it's already per-operator by construction, no shared state involved.",[12,5626,5627,75,5631],{},[21,5628],{"alt":5629,"src":5630},"Screenshot: the dashboard app bar showing the logged-in operator's avatar and greeting","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Flogged-in-user-app-bar.png",[26,5632,5633],{},"The signed-in operator greeted by name and avatar in the app bar, rendered from a single UI-scoped widget.",[59,5635,5637],{"id":5636},"seeding-the-operator-into-context-on-login","Seeding the Operator into Context on Login",[12,5639,5640],{},"Greeting the operator is the visible half. The other half is making their identity available to every function node, not just the widgets.",[12,5642,5643,5644,5647,5648,5651],{},"You might reach for a single shared global here, ",[96,5645,5646],{},"global.set('user', msg._client.user, 'persistent')"," on connect, then read it everywhere. ",[45,5649,5650],{},"Don't."," Global context is one store for the whole flow, not one per session, so if two operators are connected at once, whichever connects last overwrites the identity for everyone, and function nodes start attributing the wrong operator's actions to the wrong person.",[12,5653,5654,5655,5657],{},"Instead, read ",[96,5656,197],{}," off each message for \"who is acting right now,\" and use the username only as a durable storage key for saved state. A shared global is still handy as a bootstrap fallback for the very first tick of a page, before any client-tagged message has round-tripped.",[147,5659,5660,5665,5711],{},[70,5661,5235,5662,5664],{},[96,5663,118],{}," node named \"Client connected\" and select the \"My Dashboard\" ui-base. It fires when a browser session connects.",[70,5666,5235,5667,5670,5671,5674,5675],{},[96,5668,5669],{},"change"," node named \"Seed globals\" with these ",[96,5672,5673],{},"set"," rules, in order:\n",[67,5676,5677,5689,5698,5706],{},[70,5678,5679,5681,5682,5684,5685,5688],{},[96,5680,3290],{}," (global, persistent) → ",[96,5683,197],{},". ",[45,5686,5687],{},"Bootstrap fallback only",", not the source of truth elsewhere.",[70,5690,5691,5694,5695,57],{},[96,5692,5693],{},"StationContext.stationName"," (global) → your station's name, e.g. ",[96,5696,5697],{},"Wheel Assembly Station 12",[70,5699,5700,5703,5704,57],{},[96,5701,5702],{},"StationContext.stationId"," (global, persistent) → this station's ID, e.g. ",[96,5705,3977],{},[70,5707,5708,5710],{},[96,5709,4819],{}," (global, persistent) → the instruction set (steps, images, target times, checklists), cached so the Instructions page loads instantly.",[70,5712,5713],{},"Wire \"Client connected\" into \"Seed globals\".",[12,5715,5716],{},"From here on, every function node that needs the current operator uses this pattern, per-session identity first, bootstrap global only as a fallback:",[219,5718,5722],{"className":5719,"code":5720,"language":5721,"meta":224,"style":224},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\n","javascript",[96,5723,5724,5752],{"__ignoreMap":224},[228,5725,5726,5729,5732,5734,5737,5739,5742,5745,5747,5749],{"class":230,"line":231},[228,5727,5728],{"class":241},"const",[228,5730,5731],{"class":915}," username ",[228,5733,5286],{"class":234},[228,5735,5736],{"class":915}," msg",[228,5738,57],{"class":234},[228,5740,5741],{"class":915},"_client",[228,5743,5744],{"class":234},"?.",[228,5746,3290],{"class":915},[228,5748,5744],{"class":234},[228,5750,5751],{"class":915},"username\n",[228,5753,5754,5757,5760,5762,5765,5768,5771,5773,5775,5777,5780,5782,5784,5787,5789,5791],{"class":230,"line":5062},[228,5755,5756],{"class":234},"    ||",[228,5758,5759],{"class":915}," global",[228,5761,57],{"class":234},[228,5763,735],{"class":5764},"s2Zo4",[228,5766,5767],{"class":915},"(",[228,5769,5770],{"class":234},"'",[228,5772,3290],{"class":252},[228,5774,5770],{"class":234},[228,5776,258],{"class":234},[228,5778,5779],{"class":234}," '",[228,5781,940],{"class":252},[228,5783,5770],{"class":234},[228,5785,5786],{"class":915},")",[228,5788,5744],{"class":234},[228,5790,5086],{"class":915},[228,5792,5499],{"class":234},[59,5794,5796],{"id":5795},"showing-the-station-and-stats-on-the-home-page","Showing the Station and Stats on the Home Page",[12,5798,5799],{},"The Home page shows the current station and a quick summary of work order statistics. Both update whenever the page opens.",[5801,5802,5804],"h3",{"id":5803},"display-the-station-name","Display the Station Name",[147,5806,5807,5828],{},[70,5808,5809,5810,5813,5814,5816,5817,5820,5821,5824,5825,57],{},"From the ",[45,5811,5812],{},"Client connected"," event, add a ",[45,5815,5669],{}," node named ",[45,5818,5819],{},"Read station name"," and set ",[96,5822,5823],{},"msg.payload"," to ",[96,5826,5827],{},"global.StationContext.stationName",[70,5829,5830,5831,5816,5833,5835,5836,5838,5839,57],{},"Connect it to a ",[45,5832,121],{},[45,5834,4887],{}," in the ",[45,5837,4887],{}," group. Set the value to ",[96,5840,5823],{},[5801,5842,5844],{"id":5843},"display-the-stats","Display the Stats",[147,5846,5847,5858],{},[70,5848,5235,5849,5816,5851,5854,5855,5857],{},[45,5850,115],{},[45,5852,5853],{},"Page changed",", set its event to ",[45,5856,5669],{},", and select your dashboard.",[70,5859,5235,5860,5816,5862,5865,5866],{},[45,5861,845],{},[45,5863,5864],{},"Build \u002Fstats request URL"," and paste in the following code. ",[45,5867,5868,5869,5872],{},"Replace ",[96,5870,5871],{},"https:\u002F\u002Fyour-instance.flowfuse.cloud"," with your own FlowFuse instance URL.",[219,5874,5876],{"className":5719,"code":5875,"language":5721,"meta":224,"style":224},"const StationContext = global.get('StationContext', 'persistent');\nconst username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\n\nconst params = new URLSearchParams();\nparams.set('stationId', StationContext.stationId);\nif (username) params.set('username', username);\n\nmsg.url = `https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders\u002Fstats?${params}`;\nmsg.method = \"GET\";\nreturn msg;\n",[96,5877,5878,5914,5936,5970,5974,5993,6023,6050,6054,6082,6103],{"__ignoreMap":224},[228,5879,5880,5882,5885,5887,5889,5891,5893,5895,5897,5900,5902,5904,5906,5908,5910,5912],{"class":230,"line":231},[228,5881,5728],{"class":241},[228,5883,5884],{"class":915}," StationContext ",[228,5886,5286],{"class":234},[228,5888,5759],{"class":915},[228,5890,57],{"class":234},[228,5892,735],{"class":5764},[228,5894,5767],{"class":915},[228,5896,5770],{"class":234},[228,5898,5899],{"class":252},"StationContext",[228,5901,5770],{"class":234},[228,5903,258],{"class":234},[228,5905,5779],{"class":234},[228,5907,940],{"class":252},[228,5909,5770],{"class":234},[228,5911,5786],{"class":915},[228,5913,5499],{"class":234},[228,5915,5916,5918,5920,5922,5924,5926,5928,5930,5932,5934],{"class":230,"line":5062},[228,5917,5728],{"class":241},[228,5919,5731],{"class":915},[228,5921,5286],{"class":234},[228,5923,5736],{"class":915},[228,5925,57],{"class":234},[228,5927,5741],{"class":915},[228,5929,5744],{"class":234},[228,5931,3290],{"class":915},[228,5933,5744],{"class":234},[228,5935,5751],{"class":915},[228,5937,5938,5940,5942,5944,5946,5948,5950,5952,5954,5956,5958,5960,5962,5964,5966,5968],{"class":230,"line":5081},[228,5939,5756],{"class":234},[228,5941,5759],{"class":915},[228,5943,57],{"class":234},[228,5945,735],{"class":5764},[228,5947,5767],{"class":915},[228,5949,5770],{"class":234},[228,5951,3290],{"class":252},[228,5953,5770],{"class":234},[228,5955,258],{"class":234},[228,5957,5779],{"class":234},[228,5959,940],{"class":252},[228,5961,5770],{"class":234},[228,5963,5786],{"class":915},[228,5965,5744],{"class":234},[228,5967,5086],{"class":915},[228,5969,5499],{"class":234},[228,5971,5972],{"class":230,"line":4978},[228,5973,5405],{"emptyLinePlaceholder":5404},[228,5975,5976,5978,5981,5983,5986,5989,5991],{"class":230,"line":5112},[228,5977,5728],{"class":241},[228,5979,5980],{"class":915}," params ",[228,5982,5286],{"class":234},[228,5984,5985],{"class":234}," new",[228,5987,5988],{"class":5764}," URLSearchParams",[228,5990,5437],{"class":915},[228,5992,5499],{"class":234},[228,5994,5995,5998,6000,6002,6004,6006,6009,6011,6013,6016,6018,6021],{"class":230,"line":5127},[228,5996,5997],{"class":915},"params",[228,5999,57],{"class":234},[228,6001,5673],{"class":5764},[228,6003,5767],{"class":915},[228,6005,5770],{"class":234},[228,6007,6008],{"class":252},"stationId",[228,6010,5770],{"class":234},[228,6012,258],{"class":234},[228,6014,6015],{"class":915}," StationContext",[228,6017,57],{"class":234},[228,6019,6020],{"class":915},"stationId)",[228,6022,5499],{"class":234},[228,6024,6025,6028,6031,6033,6035,6037,6039,6041,6043,6045,6048],{"class":230,"line":5142},[228,6026,6027],{"class":5421},"if",[228,6029,6030],{"class":915}," (username) params",[228,6032,57],{"class":234},[228,6034,5673],{"class":5764},[228,6036,5767],{"class":915},[228,6038,5770],{"class":234},[228,6040,5086],{"class":252},[228,6042,5770],{"class":234},[228,6044,258],{"class":234},[228,6046,6047],{"class":915}," username)",[228,6049,5499],{"class":234},[228,6051,6052],{"class":230,"line":5382},[228,6053,5405],{"emptyLinePlaceholder":5404},[228,6055,6056,6059,6061,6064,6066,6069,6072,6075,6077,6080],{"class":230,"line":5392},[228,6057,6058],{"class":915},"msg",[228,6060,57],{"class":234},[228,6062,6063],{"class":915},"url ",[228,6065,5286],{"class":234},[228,6067,6068],{"class":234}," `",[228,6070,6071],{"class":252},"https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders\u002Fstats?",[228,6073,6074],{"class":234},"${",[228,6076,5997],{"class":915},[228,6078,6079],{"class":234},"}`",[228,6081,5499],{"class":234},[228,6083,6084,6086,6088,6091,6093,6096,6099,6101],{"class":230,"line":5401},[228,6085,6058],{"class":915},[228,6087,57],{"class":234},[228,6089,6090],{"class":915},"method ",[228,6092,5286],{"class":234},[228,6094,6095],{"class":234}," \"",[228,6097,6098],{"class":252},"GET",[228,6100,238],{"class":234},[228,6102,5499],{"class":234},[228,6104,6105,6108,6110],{"class":230,"line":5408},[228,6106,6107],{"class":5421},"return",[228,6109,5736],{"class":915},[228,6111,5499],{"class":234},[147,6113,6114,6131,6134,6144],{"start":5081},[70,6115,6116,6117,6119,6120,5202,6123,6126,6127,6130],{},"Add an ",[45,6118,5008],{}," node that uses ",[96,6121,6122],{},"msg.method",[96,6124,6125],{},"msg.url",", returns a parsed JSON object, and uses ",[45,6128,6129],{},"Bearer"," authentication.",[70,6132,6133],{},"Configure the bearer token using the access token you created earlier. For production, store it as an environment variable instead of hardcoding it in the flow.",[70,6135,5235,6136,4910,6138,5835,6141,6143],{},[45,6137,102],{},[45,6139,6140],{},"Stats Cards",[45,6142,4892],{}," group and paste in the template below.",[70,6145,6146,6147,57],{},"Wire the nodes: ",[45,6148,6149],{},"Page changed → Build \u002Fstats request URL → HTTP Request → Stats Cards",[12,6151,6152,6153,6156,6157,6159,6160,6162],{},"The request includes the logged-in username, so the ",[45,6154,6155],{},"Assigned to me"," count is personalized for each operator, and because ",[96,6158,115],{}," is client-data-aware, ",[96,6161,197],{}," reflects whichever operator's browser triggered the page change.",[12,6164,6165,6169],{},[21,6166],{"alt":6167,"src":6168},"Placeholder: Stats Cards widget rendered on the Home page","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fstats-and-station.png",[26,6170,6171],{},"The Home page displays station statistics, including total, assigned to me, completed, and defected work orders.",[59,6173,6175],{"id":6174},"loading-the-operators-work-orders","Loading the Operator's Work Orders",[12,6177,6178],{},"Now for the main part of the Home page: fetching and displaying the operator's work orders. Because the request includes the logged-in username, each operator only sees the work orders assigned to them at the current station.",[147,6180,6181,6191],{},[70,6182,5235,6183,5816,6185,6187,6188,6190],{},[45,6184,115],{},[45,6186,5853],{},", select your dashboard, and set the event to ",[45,6189,5669],{},". It fires whenever the operator navigates to the Home page, triggering the work order request.",[70,6192,5235,6193,5816,6195,6198,6199,5872],{},[45,6194,845],{},[45,6196,6197],{},"Build \u002Fworkorders request URL",", paste in the code below, and replace ",[96,6200,5871],{},[219,6202,6205],{"className":5719,"code":6203,"language":5721,"meta":6204,"style":224},"const StationContext = global.get('StationContext', 'persistent');\nconst username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\n\nconst stationId = StationContext?.stationId;\n\nconst params = new URLSearchParams();\nparams.set('stationId', stationId);\nif (username) params.set('username', username);\n\nmsg.url = `https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders?${params.toString()}`;\nmsg.method = 'GET';\nreturn msg;\n","id=\"8m19sv\"",[96,6206,6207,6241,6263,6297,6301,6318,6322,6338,6361,6385,6389,6419,6437],{"__ignoreMap":224},[228,6208,6209,6211,6213,6215,6217,6219,6221,6223,6225,6227,6229,6231,6233,6235,6237,6239],{"class":230,"line":231},[228,6210,5728],{"class":241},[228,6212,5884],{"class":915},[228,6214,5286],{"class":234},[228,6216,5759],{"class":915},[228,6218,57],{"class":234},[228,6220,735],{"class":5764},[228,6222,5767],{"class":915},[228,6224,5770],{"class":234},[228,6226,5899],{"class":252},[228,6228,5770],{"class":234},[228,6230,258],{"class":234},[228,6232,5779],{"class":234},[228,6234,940],{"class":252},[228,6236,5770],{"class":234},[228,6238,5786],{"class":915},[228,6240,5499],{"class":234},[228,6242,6243,6245,6247,6249,6251,6253,6255,6257,6259,6261],{"class":230,"line":5062},[228,6244,5728],{"class":241},[228,6246,5731],{"class":915},[228,6248,5286],{"class":234},[228,6250,5736],{"class":915},[228,6252,57],{"class":234},[228,6254,5741],{"class":915},[228,6256,5744],{"class":234},[228,6258,3290],{"class":915},[228,6260,5744],{"class":234},[228,6262,5751],{"class":915},[228,6264,6265,6267,6269,6271,6273,6275,6277,6279,6281,6283,6285,6287,6289,6291,6293,6295],{"class":230,"line":5081},[228,6266,5756],{"class":234},[228,6268,5759],{"class":915},[228,6270,57],{"class":234},[228,6272,735],{"class":5764},[228,6274,5767],{"class":915},[228,6276,5770],{"class":234},[228,6278,3290],{"class":252},[228,6280,5770],{"class":234},[228,6282,258],{"class":234},[228,6284,5779],{"class":234},[228,6286,940],{"class":252},[228,6288,5770],{"class":234},[228,6290,5786],{"class":915},[228,6292,5744],{"class":234},[228,6294,5086],{"class":915},[228,6296,5499],{"class":234},[228,6298,6299],{"class":230,"line":4978},[228,6300,5405],{"emptyLinePlaceholder":5404},[228,6302,6303,6305,6308,6310,6312,6314,6316],{"class":230,"line":5112},[228,6304,5728],{"class":241},[228,6306,6307],{"class":915}," stationId ",[228,6309,5286],{"class":234},[228,6311,6015],{"class":915},[228,6313,5744],{"class":234},[228,6315,6008],{"class":915},[228,6317,5499],{"class":234},[228,6319,6320],{"class":230,"line":5127},[228,6321,5405],{"emptyLinePlaceholder":5404},[228,6323,6324,6326,6328,6330,6332,6334,6336],{"class":230,"line":5142},[228,6325,5728],{"class":241},[228,6327,5980],{"class":915},[228,6329,5286],{"class":234},[228,6331,5985],{"class":234},[228,6333,5988],{"class":5764},[228,6335,5437],{"class":915},[228,6337,5499],{"class":234},[228,6339,6340,6342,6344,6346,6348,6350,6352,6354,6356,6359],{"class":230,"line":5382},[228,6341,5997],{"class":915},[228,6343,57],{"class":234},[228,6345,5673],{"class":5764},[228,6347,5767],{"class":915},[228,6349,5770],{"class":234},[228,6351,6008],{"class":252},[228,6353,5770],{"class":234},[228,6355,258],{"class":234},[228,6357,6358],{"class":915}," stationId)",[228,6360,5499],{"class":234},[228,6362,6363,6365,6367,6369,6371,6373,6375,6377,6379,6381,6383],{"class":230,"line":5392},[228,6364,6027],{"class":5421},[228,6366,6030],{"class":915},[228,6368,57],{"class":234},[228,6370,5673],{"class":5764},[228,6372,5767],{"class":915},[228,6374,5770],{"class":234},[228,6376,5086],{"class":252},[228,6378,5770],{"class":234},[228,6380,258],{"class":234},[228,6382,6047],{"class":915},[228,6384,5499],{"class":234},[228,6386,6387],{"class":230,"line":5401},[228,6388,5405],{"emptyLinePlaceholder":5404},[228,6390,6391,6393,6395,6397,6399,6401,6404,6406,6408,6410,6413,6415,6417],{"class":230,"line":5408},[228,6392,6058],{"class":915},[228,6394,57],{"class":234},[228,6396,6063],{"class":915},[228,6398,5286],{"class":234},[228,6400,6068],{"class":234},[228,6402,6403],{"class":252},"https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders?",[228,6405,6074],{"class":234},[228,6407,5997],{"class":915},[228,6409,57],{"class":234},[228,6411,6412],{"class":5764},"toString",[228,6414,5437],{"class":915},[228,6416,6079],{"class":234},[228,6418,5499],{"class":234},[228,6420,6421,6423,6425,6427,6429,6431,6433,6435],{"class":230,"line":5418},[228,6422,6058],{"class":915},[228,6424,57],{"class":234},[228,6426,6090],{"class":915},[228,6428,5286],{"class":234},[228,6430,5779],{"class":234},[228,6432,6098],{"class":252},[228,6434,5770],{"class":234},[228,6436,5499],{"class":234},[228,6438,6439,6441,6443],{"class":230,"line":5431},[228,6440,6107],{"class":5421},[228,6442,5736],{"class":915},[228,6444,5499],{"class":234},[147,6446,6447,6479],{"start":5081},[70,6448,6116,6449,6451,6452,5824,6455,6460,6461,6464,6465,6467,6468,6471,6472,6475,6476,6478],{},[45,6450,5008],{}," node, set the ",[45,6453,6454],{},"Method",[45,6456,6457,6458],{},"Use ",[96,6459,6122],{},", leave the ",[45,6462,6463],{},"URL"," field blank so it uses ",[96,6466,6125],{},", set the ",[45,6469,6470],{},"Return"," type to a ",[45,6473,6474],{},"parsed JSON object",", and configure ",[45,6477,6129],{}," authentication. Use the access token you created earlier as the bearer token. For production deployments, store the token as an environment variable and reference it here instead of hardcoding it in the flow.",[70,6480,6481,6482,6484,6485,5816,6488,6491,6492,6495],{},"Connect the ",[45,6483,5008],{}," node to a ",[45,6486,6487],{},"link out",[45,6489,6490],{},"Work Orders Out",". The widgets that display the work orders will connect to this node using their own ",[45,6493,6494],{},"link in"," nodes, allowing the same API response to be reused without stretching wires across the canvas.",[12,6497,6498,6499,6501,6502,6505],{},"The username in the request is what makes the dashboard personal. Two operators can open the same page at the same station, yet each receives only the work orders assigned to them, because each one's ",[96,6500,115],{}," event carries their own ",[96,6503,6504],{},"_client.user",", not a shared one.",[59,6507,6509],{"id":6508},"splitting-the-current-order-from-the-queue","Splitting the Current Order From the Queue",[12,6511,6512],{},"The Home page shows one work order front and centre and the rest as a queue. A function splits the list, sorting by priority so the most urgent job is the one the operator sees first. This function also records which work order the operator is about to start, that's the record the Instructions page, the Complete Operation flow, and the Report Issue flow will all read back later, so it has to be attributed to the right operator from the start.",[147,6514,6515,6520],{},[70,6516,5235,6517,6519],{},[96,6518,6494],{}," node named \"link in 6\" and point it at the \"work orders out\" link.",[70,6521,5235,6522,6524,6525,247],{},[96,6523,845],{}," node named \"split current vs queue (by priority)\" with ",[45,6526,6527],{},"2 outputs",[219,6529,6531],{"className":5719,"code":6530,"language":5721,"meta":224,"style":224},"const orders = Array.isArray(msg.payload) ? msg.payload : [];\n\n\u002F\u002F Sort by priority (Critical\u002FUrgent -> High -> Medium -> Normal -> Low)\nconst priorityOrder = { critical: 0, urgent: 0, high: 1, medium: 2, normal: 3, low: 4 };\nconst sorted = [...orders].sort(\n    (a, b) => (priorityOrder[(a.priority || '').toLowerCase()] ?? 5)\n            - (priorityOrder[(b.priority || '').toLowerCase()] ?? 5)\n);\n\nconst currentWorkOrder = sorted[0] || null;\n\n\u002F\u002F Record which work order the current operator is about to see\u002Fstart.\n\u002F\u002F Identity comes from the triggering message's client data, not a shared global,\n\u002F\u002F so this is always attributed to the operator whose browser fetched this list.\nconst username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\n\nif (username && currentWorkOrder) {\n    const userState = global.get(username, 'persistent') || {};\n    userState.workOrderId = currentWorkOrder.workOrderId;\n    global.set(username, userState, 'persistent');\n}\n\nreturn [\n    { payload: currentWorkOrder },  \u002F\u002F output 1: current order (for card)\n    { payload: sorted.slice(1) }    \u002F\u002F output 2: remaining orders (queue)\n];\n",[96,6532,6533,6575,6579,6584,6654,6680,6731,6761,6767,6771,6793,6797,6802,6807,6812,6834,6868,6872,6887,6923,6944,6973,6977,6981,6988,7004,7031],{"__ignoreMap":224},[228,6534,6535,6537,6540,6542,6545,6547,6550,6553,6555,6558,6561,6563,6565,6568,6570,6573],{"class":230,"line":231},[228,6536,5728],{"class":241},[228,6538,6539],{"class":915}," orders ",[228,6541,5286],{"class":234},[228,6543,6544],{"class":915}," Array",[228,6546,57],{"class":234},[228,6548,6549],{"class":5764},"isArray",[228,6551,6552],{"class":915},"(msg",[228,6554,57],{"class":234},[228,6556,6557],{"class":915},"payload) ",[228,6559,6560],{"class":234},"?",[228,6562,5736],{"class":915},[228,6564,57],{"class":234},[228,6566,6567],{"class":915},"payload ",[228,6569,247],{"class":234},[228,6571,6572],{"class":915}," []",[228,6574,5499],{"class":234},[228,6576,6577],{"class":230,"line":5062},[228,6578,5405],{"emptyLinePlaceholder":5404},[228,6580,6581],{"class":230,"line":5081},[228,6582,6583],{"class":5272},"\u002F\u002F Sort by priority (Critical\u002FUrgent -> High -> Medium -> Normal -> Low)\n",[228,6585,6586,6588,6591,6593,6595,6598,6600,6603,6605,6608,6610,6612,6614,6617,6619,6622,6624,6627,6629,6632,6634,6637,6639,6642,6644,6647,6649,6652],{"class":230,"line":4978},[228,6587,5728],{"class":241},[228,6589,6590],{"class":915}," priorityOrder ",[228,6592,5286],{"class":234},[228,6594,5448],{"class":234},[228,6596,6597],{"class":5263}," critical",[228,6599,247],{"class":234},[228,6601,6602],{"class":573}," 0",[228,6604,258],{"class":234},[228,6606,6607],{"class":5263}," urgent",[228,6609,247],{"class":234},[228,6611,6602],{"class":573},[228,6613,258],{"class":234},[228,6615,6616],{"class":5263}," high",[228,6618,247],{"class":234},[228,6620,6621],{"class":573}," 1",[228,6623,258],{"class":234},[228,6625,6626],{"class":5263}," medium",[228,6628,247],{"class":234},[228,6630,6631],{"class":573}," 2",[228,6633,258],{"class":234},[228,6635,6636],{"class":5263}," normal",[228,6638,247],{"class":234},[228,6640,6641],{"class":573}," 3",[228,6643,258],{"class":234},[228,6645,6646],{"class":5263}," low",[228,6648,247],{"class":234},[228,6650,6651],{"class":573}," 4",[228,6653,5460],{"class":234},[228,6655,6656,6658,6661,6663,6666,6669,6672,6674,6677],{"class":230,"line":5112},[228,6657,5728],{"class":241},[228,6659,6660],{"class":915}," sorted ",[228,6662,5286],{"class":234},[228,6664,6665],{"class":915}," [",[228,6667,6668],{"class":234},"...",[228,6670,6671],{"class":915},"orders]",[228,6673,57],{"class":234},[228,6675,6676],{"class":5764},"sort",[228,6678,6679],{"class":915},"(\n",[228,6681,6682,6685,6688,6690,6693,6695,6698,6701,6703,6706,6709,6712,6714,6716,6719,6722,6725,6728],{"class":230,"line":5127},[228,6683,6684],{"class":234},"    (",[228,6686,53],{"class":6687},"sHdIc",[228,6689,258],{"class":234},[228,6691,6692],{"class":6687}," b",[228,6694,5786],{"class":234},[228,6696,6697],{"class":241}," =>",[228,6699,6700],{"class":915}," (priorityOrder[(a",[228,6702,57],{"class":234},[228,6704,6705],{"class":915},"priority ",[228,6707,6708],{"class":234},"||",[228,6710,6711],{"class":234}," ''",[228,6713,5786],{"class":915},[228,6715,57],{"class":234},[228,6717,6718],{"class":5764},"toLowerCase",[228,6720,6721],{"class":915},"()] ",[228,6723,6724],{"class":234},"??",[228,6726,6727],{"class":573}," 5",[228,6729,6730],{"class":915},")\n",[228,6732,6733,6736,6739,6741,6743,6745,6747,6749,6751,6753,6755,6757,6759],{"class":230,"line":5142},[228,6734,6735],{"class":234},"            -",[228,6737,6738],{"class":915}," (priorityOrder[(b",[228,6740,57],{"class":234},[228,6742,6705],{"class":915},[228,6744,6708],{"class":234},[228,6746,6711],{"class":234},[228,6748,5786],{"class":915},[228,6750,57],{"class":234},[228,6752,6718],{"class":5764},[228,6754,6721],{"class":915},[228,6756,6724],{"class":234},[228,6758,6727],{"class":573},[228,6760,6730],{"class":915},[228,6762,6763,6765],{"class":230,"line":5382},[228,6764,5786],{"class":915},[228,6766,5499],{"class":234},[228,6768,6769],{"class":230,"line":5392},[228,6770,5405],{"emptyLinePlaceholder":5404},[228,6772,6773,6775,6778,6780,6783,6785,6788,6790],{"class":230,"line":5401},[228,6774,5728],{"class":241},[228,6776,6777],{"class":915}," currentWorkOrder ",[228,6779,5286],{"class":234},[228,6781,6782],{"class":915}," sorted[",[228,6784,1042],{"class":573},[228,6786,6787],{"class":915},"] ",[228,6789,6708],{"class":234},[228,6791,6792],{"class":234}," null;\n",[228,6794,6795],{"class":230,"line":5408},[228,6796,5405],{"emptyLinePlaceholder":5404},[228,6798,6799],{"class":230,"line":5418},[228,6800,6801],{"class":5272},"\u002F\u002F Record which work order the current operator is about to see\u002Fstart.\n",[228,6803,6804],{"class":230,"line":5431},[228,6805,6806],{"class":5272},"\u002F\u002F Identity comes from the triggering message's client data, not a shared global,\n",[228,6808,6809],{"class":230,"line":5442},[228,6810,6811],{"class":5272},"\u002F\u002F so this is always attributed to the operator whose browser fetched this list.\n",[228,6813,6814,6816,6818,6820,6822,6824,6826,6828,6830,6832],{"class":230,"line":5463},[228,6815,5728],{"class":241},[228,6817,5731],{"class":915},[228,6819,5286],{"class":234},[228,6821,5736],{"class":915},[228,6823,57],{"class":234},[228,6825,5741],{"class":915},[228,6827,5744],{"class":234},[228,6829,3290],{"class":915},[228,6831,5744],{"class":234},[228,6833,5751],{"class":915},[228,6835,6836,6838,6840,6842,6844,6846,6848,6850,6852,6854,6856,6858,6860,6862,6864,6866],{"class":230,"line":5469},[228,6837,5756],{"class":234},[228,6839,5759],{"class":915},[228,6841,57],{"class":234},[228,6843,735],{"class":5764},[228,6845,5767],{"class":915},[228,6847,5770],{"class":234},[228,6849,3290],{"class":252},[228,6851,5770],{"class":234},[228,6853,258],{"class":234},[228,6855,5779],{"class":234},[228,6857,940],{"class":252},[228,6859,5770],{"class":234},[228,6861,5786],{"class":915},[228,6863,5744],{"class":234},[228,6865,5086],{"class":915},[228,6867,5499],{"class":234},[228,6869,6870],{"class":230,"line":5479},[228,6871,5405],{"emptyLinePlaceholder":5404},[228,6873,6874,6876,6879,6882,6885],{"class":230,"line":5485},[228,6875,6027],{"class":5421},[228,6877,6878],{"class":915}," (username ",[228,6880,6881],{"class":234},"&&",[228,6883,6884],{"class":915}," currentWorkOrder) ",[228,6886,5059],{"class":234},[228,6888,6889,6892,6895,6897,6899,6901,6903,6905,6907,6909,6911,6913,6915,6918,6920],{"class":230,"line":5502},[228,6890,6891],{"class":241},"    const",[228,6893,6894],{"class":915}," userState",[228,6896,5493],{"class":234},[228,6898,5759],{"class":915},[228,6900,57],{"class":234},[228,6902,735],{"class":5764},[228,6904,5767],{"class":5263},[228,6906,5086],{"class":915},[228,6908,258],{"class":234},[228,6910,5779],{"class":234},[228,6912,940],{"class":252},[228,6914,5770],{"class":234},[228,6916,6917],{"class":5263},") ",[228,6919,6708],{"class":234},[228,6921,6922],{"class":234}," {};\n",[228,6924,6925,6928,6930,6933,6935,6938,6940,6942],{"class":230,"line":5508},[228,6926,6927],{"class":915},"    userState",[228,6929,57],{"class":234},[228,6931,6932],{"class":915},"workOrderId",[228,6934,5493],{"class":234},[228,6936,6937],{"class":915}," currentWorkOrder",[228,6939,57],{"class":234},[228,6941,6932],{"class":915},[228,6943,5499],{"class":234},[228,6945,6946,6949,6951,6953,6955,6957,6959,6961,6963,6965,6967,6969,6971],{"class":230,"line":5513},[228,6947,6948],{"class":915},"    global",[228,6950,57],{"class":234},[228,6952,5673],{"class":5764},[228,6954,5767],{"class":5263},[228,6956,5086],{"class":915},[228,6958,258],{"class":234},[228,6960,6894],{"class":915},[228,6962,258],{"class":234},[228,6964,5779],{"class":234},[228,6966,940],{"class":252},[228,6968,5770],{"class":234},[228,6970,5786],{"class":5263},[228,6972,5499],{"class":234},[228,6974,6975],{"class":230,"line":5522},[228,6976,5145],{"class":234},[228,6978,6979],{"class":230,"line":5527},[228,6980,5405],{"emptyLinePlaceholder":5404},[228,6982,6983,6985],{"class":230,"line":5536},[228,6984,6107],{"class":5421},[228,6986,6987],{"class":915}," [\n",[228,6989,6990,6992,6995,6997,6999,7001],{"class":230,"line":5579},[228,6991,3388],{"class":234},[228,6993,6994],{"class":5263}," payload",[228,6996,247],{"class":234},[228,6998,6777],{"class":915},[228,7000,424],{"class":234},[228,7002,7003],{"class":5272},"  \u002F\u002F output 1: current order (for card)\n",[228,7005,7006,7008,7010,7012,7015,7017,7020,7022,7024,7026,7028],{"class":230,"line":5612},[228,7007,3388],{"class":234},[228,7009,6994],{"class":5263},[228,7011,247],{"class":234},[228,7013,7014],{"class":915}," sorted",[228,7016,57],{"class":234},[228,7018,7019],{"class":5764},"slice",[228,7021,5767],{"class":915},[228,7023,337],{"class":573},[228,7025,6917],{"class":915},[228,7027,1575],{"class":234},[228,7029,7030],{"class":5272},"    \u002F\u002F output 2: remaining orders (queue)\n",[228,7032,7034,7036],{"class":230,"line":7033},27,[228,7035,3467],{"class":915},[228,7037,5499],{"class":234},[147,7039,7040],{"start":5081},[70,7041,7042],{},"Import the Current Work Order Card ui-template below and assign it to the Current Work Order group. The complete component is provided below, so there's no need to recreate it.",[40,7044,7045],{},[12,7046,7047,7050,7051,7055,7056,7058],{},[45,7048,7049],{},"Tip:"," Whenever you need a custom Dashboard widget, you don't have to write the Vue code yourself. Use ",[53,7052,7054],{"href":7053},"\u002Fdocs\u002Fuser\u002Fexpert\u002Fnode-red-embedded-ai\u002F#css-and-html-generation-for-flowfuse-dashboard","FlowFuse Expert"," and describe the widget in plain English and it will generate the ",[96,7057,102],{}," for you.",[215,7060,7061],{":height":217},[219,7062,7064],{"className":221,"code":7063,"language":223,"meta":224,"style":224},"[{\"id\":\"eb41d1ba8e4bfb01\",\"type\":\"ui-template\",\"z\":\"c50b1b501a74c081\",\"g\":\"3e9b1176168ca254\",\"group\":\"\",\"page\":\"\",\"ui\":\"\",\"name\":\"Current Work Order Card\",\"order\":1,\"width\":0,\"height\":0,\"head\":\"\",\"format\":\"\u003Ctemplate>\\n  \u003Cdiv class=\\\"wi-root\\\">\\n    \u003C!-- Top status bar -->\\n    \u003Cdiv class=\\\"wi-topbar\\\">\\n      \u003Cdiv class=\\\"wi-topbar-left\\\">\\n        \u003Cspan class=\\\"wi-wo-label\\\">WORK ORDER\u003C\u002Fspan>\\n        \u003Cspan class=\\\"wi-wo-id\\\">{{ msg?.payload?.workOrderId ?? '—' }}\u003C\u002Fspan>\\n      \u003C\u002Fdiv>\\n      \u003Cdiv class=\\\"wi-topbar-right\\\">\\n        \u003Cv-chip size=\\\"large\\\" variant=\\\"flat\\\" label :color=\\\"priorityColor\\\" class=\\\"wi-chip\\\">\\n          \u003Cv-icon start icon=\\\"mdi-flag\\\">\u003C\u002Fv-icon>\\n          {{ (msg?.payload?.priority ?? 'Normal').toUpperCase() }} PRIORITY\\n        \u003C\u002Fv-chip>\\n      \u003C\u002Fdiv>\\n    \u003C\u002Fdiv>\\n\\n    \u003Cv-row no-gutters class=\\\"wi-body\\\">\\n      \u003C!-- Left: Station + Operation -->\\n      \u003Cv-col cols=\\\"12\\\" md=\\\"5\\\" class=\\\"wi-col\\\">\\n        \u003Cv-card flat class=\\\"wi-card wi-card-station\\\">\\n          \u003Cdiv class=\\\"wi-card-head\\\">\\n            \u003Cv-icon icon=\\\"mdi-map-marker-radius\\\" size=\\\"22\\\">\u003C\u002Fv-icon>\\n            \u003Cspan>STATION\u003C\u002Fspan>\\n          \u003C\u002Fdiv>\\n          \u003Cdiv class=\\\"wi-station-id\\\">{{ msg?.payload?.stationId ?? '—' }}\u003C\u002Fdiv>\\n\\n          \u003Cv-divider class=\\\"wi-divider\\\">\u003C\u002Fv-divider>\\n\\n          \u003Cdiv class=\\\"wi-card-head\\\">\\n            \u003Cv-icon icon=\\\"mdi-clipboard-text-outline\\\" size=\\\"22\\\">\u003C\u002Fv-icon>\\n            \u003Cspan>OPERATION\u003C\u002Fspan>\\n          \u003C\u002Fdiv>\\n          \u003Cdiv class=\\\"wi-operation-name\\\">\\n            {{ msg?.payload?.operation?.name ?? 'Awaiting operation' }}\\n          \u003C\u002Fdiv>\\n\\n          \u003Cdiv class=\\\"wi-cycle\\\">\\n            \u003Cv-icon icon=\\\"mdi-timer-outline\\\" size=\\\"26\\\">\u003C\u002Fv-icon>\\n            \u003Cdiv class=\\\"wi-cycle-text\\\">\\n              \u003Cspan class=\\\"wi-cycle-label\\\">ESTIMATED CYCLE TIME\u003C\u002Fspan>\\n              \u003Cspan class=\\\"wi-cycle-value\\\">\\n                {{ msg?.payload?.operation?.estimatedCycleTime ?? '—' }}\\n              \u003C\u002Fspan>\\n            \u003C\u002Fdiv>\\n          \u003C\u002Fdiv>\\n        \u003C\u002Fv-card>\\n      \u003C\u002Fv-col>\\n\\n      \u003C!-- Right: Vehicle -->\\n      \u003Cv-col cols=\\\"12\\\" md=\\\"7\\\" class=\\\"wi-col\\\">\\n        \u003Cv-card flat class=\\\"wi-card wi-card-vehicle\\\">\\n          \u003Cdiv class=\\\"wi-card-head\\\">\\n            \u003Cv-icon icon=\\\"mdi-car-side\\\" size=\\\"22\\\">\u003C\u002Fv-icon>\\n            \u003Cspan>VEHICLE\u003C\u002Fspan>\\n          \u003C\u002Fdiv>\\n\\n          \u003Cdiv class=\\\"wi-vehicle-model\\\">\\n            {{ msg?.payload?.vehicle?.model ?? 'Unknown model' }}\\n          \u003C\u002Fdiv>\\n          \u003Cdiv class=\\\"wi-vehicle-variant\\\">\\n            {{ msg?.payload?.vehicle?.variant ?? '' }}\\n          \u003C\u002Fdiv>\\n\\n          \u003Cv-row no-gutters class=\\\"wi-spec-grid\\\">\\n            \u003Cv-col cols=\\\"12\\\" sm=\\\"7\\\">\\n              \u003Cdiv class=\\\"wi-spec\\\">\\n                \u003Cspan class=\\\"wi-spec-label\\\">VIN\u003C\u002Fspan>\\n                \u003Cspan class=\\\"wi-spec-value wi-vin\\\">\\n                  {{ msg?.payload?.vehicle?.vin ?? '—' }}\\n                \u003C\u002Fspan>\\n              \u003C\u002Fdiv>\\n            \u003C\u002Fv-col>\\n            \u003Cv-col cols=\\\"12\\\" sm=\\\"5\\\">\\n              \u003Cdiv class=\\\"wi-spec\\\">\\n                \u003Cspan class=\\\"wi-spec-label\\\">COLOR\u003C\u002Fspan>\\n                \u003Cspan class=\\\"wi-spec-value\\\">\\n                  \u003Cv-icon\\n                    icon=\\\"mdi-circle\\\"\\n                    size=\\\"18\\\"\\n                    class=\\\"wi-color-dot\\\"\\n                  >\u003C\u002Fv-icon>\\n                  {{ msg?.payload?.vehicle?.color ?? '—' }}\\n                \u003C\u002Fspan>\\n              \u003C\u002Fdiv>\\n            \u003C\u002Fv-col>\\n          \u003C\u002Fv-row>\\n        \u003C\u002Fv-card>\\n      \u003C\u002Fv-col>\\n    \u003C\u002Fv-row>\\n\\n    \u003C!-- Start button -->\\n    \u003Cv-btn block size=\\\"x-large\\\" color=\\\"green-darken-1\\\" class=\\\"wi-start-btn\\\" :disabled=\\\"!msg?.payload?.workOrderId\\\"\\n      @click=\\\"send({ payload: { action: 'start', workOrderId: msg?.payload?.workOrderId, stationId: msg?.payload?.stationId } })\\\">\\n      \u003Cv-icon start icon=\\\"mdi-play-circle\\\" size=\\\"34\\\">\u003C\u002Fv-icon>\\n      START WORK ORDER\\n    \u003C\u002Fv-btn>\\n  \u003C\u002Fdiv>\\n\u003C\u002Ftemplate>\\n\\n\u003Cscript>\\n  export default {\\n  computed: {\\n    priorityColor () {\\n      const p = (this.msg?.payload?.priority ?? '').toLowerCase()\\n      if (p === 'high' || p === 'urgent' || p === 'critical') return 'red-darken-1'\\n      if (p === 'medium') return 'amber-darken-2'\\n      return 'blue-grey-darken-1'\\n    }\\n  }\\n}\\n\u003C\u002Fscript>\\n\\n\u003Cstyle>\\n  .wi-root {\\n    font-family: 'Roboto', system-ui, sans-serif;\\n    color: #1f2933;\\n    padding: 4px;\\n  }\\n\\n  .wi-topbar {\\n    display: flex;\\n    align-items: center;\\n    justify-content: space-between;\\n    flex-wrap: wrap;\\n    gap: 12px;\\n    background: #ffffff;\\n    border: 1px solid #e2e8f0;\\n    border-left: 6px solid #1565c0;\\n    border-radius: 10px;\\n    padding: 14px 20px;\\n    margin-bottom: 14px;\\n  }\\n\\n  .wi-topbar-left {\\n    display: flex;\\n    flex-direction: column;\\n    line-height: 1.1;\\n  }\\n\\n  .wi-wo-label {\\n    font-size: 12px;\\n    letter-spacing: 2px;\\n    color: #64748b;\\n    font-weight: 600;\\n  }\\n\\n  .wi-wo-id {\\n    font-size: 30px;\\n    font-weight: 700;\\n    color: #0f172a;\\n    font-variant-numeric: tabular-nums;\\n  }\\n\\n  .wi-topbar-right {\\n    display: flex;\\n    gap: 10px;\\n    flex-wrap: wrap;\\n  }\\n\\n  .wi-chip {\\n    font-weight: 700 !important;\\n    letter-spacing: 0.5px;\\n  }\\n\\n  .wi-body {\\n    gap: 0;\\n  }\\n\\n  .wi-col {\\n    padding: 6px;\\n  }\\n\\n  .wi-card {\\n    background: #ffffff !important;\\n    border: 1px solid #e2e8f0 !important;\\n    border-radius: 10px !important;\\n    padding: 20px 22px;\\n    height: 100%;\\n  }\\n\\n  .wi-card-vehicle {\\n    border-left: 6px solid #00897b !important;\\n  }\\n\\n  .wi-card-station {\\n    border-left: 6px solid #5e35b1 !important;\\n  }\\n\\n  .wi-card-head {\\n    display: flex;\\n    align-items: center;\\n    gap: 8px;\\n    font-size: 13px;\\n    letter-spacing: 2px;\\n    font-weight: 700;\\n    color: #64748b;\\n    margin-bottom: 6px;\\n  }\\n\\n  .wi-station-id {\\n    font-size: 44px;\\n    font-weight: 700;\\n    color: #4527a0;\\n    line-height: 1;\\n    margin-bottom: 6px;\\n  }\\n\\n  .wi-divider {\\n    margin: 16px 0;\\n    border-color: #edf2f7 !important;\\n  }\\n\\n  .wi-operation-name {\\n    font-size: 24px;\\n    font-weight: 600;\\n    color: #0f172a;\\n    margin-bottom: 18px;\\n  }\\n\\n  .wi-cycle {\\n    display: flex;\\n    align-items: center;\\n    gap: 12px;\\n    background: #f1f5f9;\\n    border-radius: 8px;\\n    padding: 12px 16px;\\n  }\\n\\n  .wi-cycle-text {\\n    display: flex;\\n    flex-direction: column;\\n    line-height: 1.2;\\n  }\\n\\n  .wi-cycle-label {\\n    font-size: 11px;\\n    letter-spacing: 1.5px;\\n    font-weight: 600;\\n    color: #64748b;\\n  }\\n\\n  .wi-cycle-value {\\n    font-size: 22px;\\n    font-weight: 700;\\n    color: #0f172a;\\n    font-variant-numeric: tabular-nums;\\n  }\\n\\n  .wi-vehicle-model {\\n    font-size: 34px;\\n    font-weight: 700;\\n    color: #0f172a;\\n    line-height: 1.05;\\n  }\\n\\n  .wi-vehicle-variant {\\n    font-size: 18px;\\n    font-weight: 500;\\n    color: #00695c;\\n    margin-bottom: 20px;\\n  }\\n\\n  .wi-spec-grid {\\n    gap: 0;\\n  }\\n\\n  .wi-spec {\\n    display: flex;\\n    flex-direction: column;\\n    padding: 10px 0;\\n  }\\n\\n  .wi-spec-label {\\n    font-size: 11px;\\n    letter-spacing: 1.5px;\\n    font-weight: 600;\\n    color: #64748b;\\n    margin-bottom: 2px;\\n  }\\n\\n  .wi-spec-value {\\n    font-size: 20px;\\n    font-weight: 600;\\n    color: #0f172a;\\n    display: flex;\\n    align-items: center;\\n    gap: 6px;\\n  }\\n\\n  .wi-vin {\\n    font-family: 'Roboto Mono', monospace;\\n    font-size: 18px;\\n    letter-spacing: 1px;\\n  }\\n\\n  .wi-color-dot {\\n    color: #cbd5e1;\\n  }\\n\\n  .wi-start-btn {\\n    margin-top: 16px;\\n    height: 84px !important;\\n    font-size: 24px !important;\\n    font-weight: 700 !important;\\n    letter-spacing: 1px;\\n    border-radius: 12px !important;\\n  }\\n\u003C\u002Fstyle>\",\"storeOutMessages\":true,\"passthru\":false,\"resendOnRefresh\":true,\"templateScope\":\"local\",\"className\":\"\",\"x\":570,\"y\":620,\"wires\":[[\"455c7536a9adcfe6\"]]},{\"id\":\"77ecf88a48f8c4f0\",\"type\":\"global-config\",\"env\":[],\"modules\":{\"@flowfuse\u002Fnode-red-dashboard\":\"1.30.2\"}}]\n",[96,7065,7066],{"__ignoreMap":224},[228,7067,7068,7070,7072,7074,7076,7078,7080,7083,7085,7087,7089,7091,7093,7095,7097,7099,7101,7103,7105,7107,7109,7111,7113,7116,7118,7120,7122,7124,7126,7128,7130,7133,7135,7137,7139,7141,7143,7145,7147,7149,7151,7153,7155,7157,7159,7161,7163,7165,7167,7169,7171,7173,7175,7177,7179,7181,7183,7186,7188,7190,7192,7195,7197,7199,7201,7203,7205,7208,7210,7212,7214,7216,7218,7221,7223,7225,7227,7229,7231,7234,7236,7238,7240,7242,7244,7247,7249,7251,7253,7256,7258,7261,7263,7266,7268,7270,7272,7275,7277,7280,7282,7285,7287,7289,7291,7294,7296,7299,7301,7303,7305,7308,7310,7313,7315,7318,7320,7322,7324,7327,7329,7332,7334,7337,7339,7341,7343,7346,7348,7350,7352,7355,7357,7360,7362,7365,7367,7370,7372,7375,7377,7380,7382,7385,7387,7390,7392,7394,7396,7399,7401,7404,7406,7409,7411,7414,7416,7419,7421,7423,7425,7428,7430,7433,7435,7438,7440,7442,7444,7447,7449,7452,7454,7457,7459,7462,7464,7467,7469,7471,7473,7476,7478,7480,7482,7485,7487,7490,7492,7494,7496,7499,7501,7504,7506,7508,7510,7513,7515,7518,7520,7523,7525,7528,7530,7532,7534,7537,7539,7542,7544,7546,7548,7551,7553,7556,7558,7561,7563,7566,7568,7571,7573,7575,7577,7579,7581,7583,7585,7587,7589,7592,7594,7596,7598,7600,7602,7604,7606,7609,7611,7613,7615,7617,7619,7622,7624,7626,7628,7631,7633,7635,7637,7639,7641,7644,7646,7648,7650,7652,7654,7657,7659,7661,7663,7666,7668,7670,7672,7675,7677,7680,7682,7684,7686,7689,7691,7694,7696,7699,7701,7703,7705,7708,7710,7712,7714,7717,7719,7722,7724,7727,7729,7731,7733,7736,7738,7741,7743,7746,7748,7750,7752,7754,7756,7758,7760,7763,7765,7767,7769,7771,7773,7775,7777,7779,7781,7784,7786,7788,7790,7792,7794,7796,7798,7800,7802,7804,7806,7809,7811,7813,7815,7817,7819,7821,7823,7826,7828,7830,7832,7834,7836,7839,7841,7843,7845,7848,7850,7852,7854,7856,7858,7861,7863,7865,7867,7870,7872,7874,7876,7879,7881,7884,7886,7888,7890,7893,7895,7897,7899,7902,7904,7906,7908,7910,7912,7915,7917,7920,7922,7924,7926,7929,7931,7934,7936,7939,7941,7943,7945,7948,7950,7952,7954,7957,7959,7962,7964,7967,7969,7972,7974,7976,7978,7980,7982,7984,7986,7988,7990,7992,7994,7996,7998,8000,8002,8004,8006,8008,8010,8012,8014,8017,8019,8021,8023,8026,8028,8030,8032,8035,8037,8040,8042,8045,8047,8050,8052,8055,8057,8060,8062,8065,8067,8070,8072,8075,8077,8079,8081,8083,8085,8087,8089,8092,8094,8096,8098,8100,8102,8105,8107,8110,8112,8115,8117,8120,8122,8125,8127,8130,8132,8134,8136,8139,8141,8144,8146,8149,8151,8154,8156,8159,8161,8163,8165,8168,8170,8173,8175,8177,8179,8182,8184,8186,8188,8191,8193,8196,8198,8201,8203,8206,8208,8211,8213,8216,8218,8221,8223,8226,8228,8231,8233,8236,8238,8241,8243,8246,8248,8250,8252,8255,8257,8259,8261,8264,8266,8269,8271,8274,8276,8279,8281,8284,8286,8289,8291,8293,8295,8298,8300,8303,8305,8308,8310,8313,8315,8318,8320,8323,8325,8328,8330,8333,8335,8338,8340,8343,8345,8348,8350,8353,8355,8357,8359,8362,8364,8366,8368,8371,8373,8376,8378,8380,8382,8385,8387,8390,8392,8395,8397,8400,8402,8405,8407,8409,8411,8414,8416,8419,8421,8424,8426,8429,8431,8434,8436,8438,8440,8443,8445,8447,8449,8452,8454,8456,8458,8460,8462,8465,8467,8470,8472,8475,8477,8479,8481,8484,8486,8489,8491,8493,8495,8498,8500,8503,8505,8507,8509,8512,8514,8517,8519,8522,8524,8527,8529,8532,8534,8537,8539,8541,8543,8546,8548,8551,8553,8555,8557,8560,8562,8565,8567,8569,8571,8574,8576,8578,8580,8582,8584,8587,8589,8592,8594,8596,8598,8600,8602,8604,8606,8609,8611,8613,8615,8618,8620,8623,8625,8627,8629,8632,8634,8637,8639,8641,8643,8645,8647,8650,8652,8655,8657,8660,8662,8664,8666,8669,8671,8674,8676,8678,8680,8682,8684,8687,8689,8691,8693,8696,8698,8700,8702,8704,8706,8708,8710,8713,8715,8718,8720,8723,8725,8727,8729,8732,8734,8736,8738,8740,8742,8745,8747,8749,8751,8754,8756,8759,8761,8764,8766,8768,8770,8772,8774,8776,8778,8781,8783,8786,8788,8790,8792,8794,8796,8798,8800,8802,8804,8807,8809,8812,8814,8816,8818,8820,8822,8825,8827,8829,8831,8834,8836,8839,8841,8844,8846,8849,8851,8854,8856,8858,8860,8863,8865,8867,8869,8871,8873,8876,8878,8880,8882,8884,8886,8889,8891,8893,8895,8898,8900,8902,8904,8906,8908,8910,8912,8914,8916,8919,8921,8923,8925,8928,8930,8933,8935,8937,8939,8941,8943,8945,8947,8949,8951,8954,8956,8958,8960,8963,8965,8968,8970,8972,8974,8977,8979,8981,8983,8986,8988,8991,8993,8995,8997,9000,9002,9005,9007,9010,9012,9015,9017,9019,9021,9023,9025,9028,9030,9032,9034,9037,9039,9041,9043,9046,9048,9050,9052,9055,9057,9059,9061,9064,9066,9068,9070,9073,9075,9077,9079,9082,9084,9086,9088,9091,9093,9095,9097,9099,9101,9103,9105,9107,9110,9112,9114,9116,9118,9120,9122,9124,9126,9128,9130,9132,9134,9137,9139,9141,9143,9145,9147,9149,9151,9154,9156,9158,9160,9162,9164,9166,9168,9170,9172,9174,9176,9178,9180,9182,9184,9186,9188,9190,9192,9194,9196,9198,9200,9202,9204],{"class":230,"line":231},[228,7069,235],{"class":234},[228,7071,238],{"class":234},[228,7073,242],{"class":241},[228,7075,238],{"class":234},[228,7077,247],{"class":234},[228,7079,238],{"class":234},[228,7081,7082],{"class":252},"eb41d1ba8e4bfb01",[228,7084,238],{"class":234},[228,7086,258],{"class":234},[228,7088,238],{"class":234},[228,7090,263],{"class":241},[228,7092,238],{"class":234},[228,7094,247],{"class":234},[228,7096,238],{"class":234},[228,7098,102],{"class":252},[228,7100,238],{"class":234},[228,7102,258],{"class":234},[228,7104,238],{"class":234},[228,7106,281],{"class":241},[228,7108,238],{"class":234},[228,7110,247],{"class":234},[228,7112,238],{"class":234},[228,7114,7115],{"class":252},"c50b1b501a74c081",[228,7117,238],{"class":234},[228,7119,258],{"class":234},[228,7121,238],{"class":234},[228,7123,673],{"class":241},[228,7125,238],{"class":234},[228,7127,247],{"class":234},[228,7129,238],{"class":234},[228,7131,7132],{"class":252},"3e9b1176168ca254",[228,7134,238],{"class":234},[228,7136,258],{"class":234},[228,7138,238],{"class":234},[228,7140,272],{"class":241},[228,7142,238],{"class":234},[228,7144,247],{"class":234},[228,7146,770],{"class":234},[228,7148,258],{"class":234},[228,7150,238],{"class":234},[228,7152,4638],{"class":241},[228,7154,238],{"class":234},[228,7156,247],{"class":234},[228,7158,770],{"class":234},[228,7160,258],{"class":234},[228,7162,238],{"class":234},[228,7164,4277],{"class":241},[228,7166,238],{"class":234},[228,7168,247],{"class":234},[228,7170,770],{"class":234},[228,7172,258],{"class":234},[228,7174,238],{"class":234},[228,7176,690],{"class":241},[228,7178,238],{"class":234},[228,7180,247],{"class":234},[228,7182,238],{"class":234},[228,7184,7185],{"class":252},"Current Work Order Card",[228,7187,238],{"class":234},[228,7189,258],{"class":234},[228,7191,238],{"class":234},[228,7193,7194],{"class":241},"order",[228,7196,238],{"class":234},[228,7198,247],{"class":234},[228,7200,337],{"class":573},[228,7202,258],{"class":234},[228,7204,238],{"class":234},[228,7206,7207],{"class":241},"width",[228,7209,238],{"class":234},[228,7211,247],{"class":234},[228,7213,1042],{"class":573},[228,7215,258],{"class":234},[228,7217,238],{"class":234},[228,7219,7220],{"class":241},"height",[228,7222,238],{"class":234},[228,7224,247],{"class":234},[228,7226,1042],{"class":573},[228,7228,258],{"class":234},[228,7230,238],{"class":234},[228,7232,7233],{"class":241},"head",[228,7235,238],{"class":234},[228,7237,247],{"class":234},[228,7239,770],{"class":234},[228,7241,258],{"class":234},[228,7243,238],{"class":234},[228,7245,7246],{"class":241},"format",[228,7248,238],{"class":234},[228,7250,247],{"class":234},[228,7252,238],{"class":234},[228,7254,7255],{"class":252},"\u003Ctemplate>",[228,7257,916],{"class":915},[228,7259,7260],{"class":252},"  \u003Cdiv class=",[228,7262,928],{"class":915},[228,7264,7265],{"class":252},"wi-root",[228,7267,928],{"class":915},[228,7269,5360],{"class":252},[228,7271,916],{"class":915},[228,7273,7274],{"class":252},"    \u003C!-- Top status bar -->",[228,7276,916],{"class":915},[228,7278,7279],{"class":252},"    \u003Cdiv class=",[228,7281,928],{"class":915},[228,7283,7284],{"class":252},"wi-topbar",[228,7286,928],{"class":915},[228,7288,5360],{"class":252},[228,7290,916],{"class":915},[228,7292,7293],{"class":252},"      \u003Cdiv class=",[228,7295,928],{"class":915},[228,7297,7298],{"class":252},"wi-topbar-left",[228,7300,928],{"class":915},[228,7302,5360],{"class":252},[228,7304,916],{"class":915},[228,7306,7307],{"class":252},"        \u003Cspan class=",[228,7309,928],{"class":915},[228,7311,7312],{"class":252},"wi-wo-label",[228,7314,928],{"class":915},[228,7316,7317],{"class":252},">WORK ORDER\u003C\u002Fspan>",[228,7319,916],{"class":915},[228,7321,7307],{"class":252},[228,7323,928],{"class":915},[228,7325,7326],{"class":252},"wi-wo-id",[228,7328,928],{"class":915},[228,7330,7331],{"class":252},">{{ msg?.payload?.workOrderId ?? '—' }}\u003C\u002Fspan>",[228,7333,916],{"class":915},[228,7335,7336],{"class":252},"      \u003C\u002Fdiv>",[228,7338,916],{"class":915},[228,7340,7293],{"class":252},[228,7342,928],{"class":915},[228,7344,7345],{"class":252},"wi-topbar-right",[228,7347,928],{"class":915},[228,7349,5360],{"class":252},[228,7351,916],{"class":915},[228,7353,7354],{"class":252},"        \u003Cv-chip size=",[228,7356,928],{"class":915},[228,7358,7359],{"class":252},"large",[228,7361,928],{"class":915},[228,7363,7364],{"class":252}," variant=",[228,7366,928],{"class":915},[228,7368,7369],{"class":252},"flat",[228,7371,928],{"class":915},[228,7373,7374],{"class":252}," label :color=",[228,7376,928],{"class":915},[228,7378,7379],{"class":252},"priorityColor",[228,7381,928],{"class":915},[228,7383,7384],{"class":252}," class=",[228,7386,928],{"class":915},[228,7388,7389],{"class":252},"wi-chip",[228,7391,928],{"class":915},[228,7393,5360],{"class":252},[228,7395,916],{"class":915},[228,7397,7398],{"class":252},"          \u003Cv-icon start icon=",[228,7400,928],{"class":915},[228,7402,7403],{"class":252},"mdi-flag",[228,7405,928],{"class":915},[228,7407,7408],{"class":252},">\u003C\u002Fv-icon>",[228,7410,916],{"class":915},[228,7412,7413],{"class":252},"          {{ (msg?.payload?.priority ?? 'Normal').toUpperCase() }} PRIORITY",[228,7415,916],{"class":915},[228,7417,7418],{"class":252},"        \u003C\u002Fv-chip>",[228,7420,916],{"class":915},[228,7422,7336],{"class":252},[228,7424,916],{"class":915},[228,7426,7427],{"class":252},"    \u003C\u002Fdiv>",[228,7429,922],{"class":915},[228,7431,7432],{"class":252},"    \u003Cv-row no-gutters class=",[228,7434,928],{"class":915},[228,7436,7437],{"class":252},"wi-body",[228,7439,928],{"class":915},[228,7441,5360],{"class":252},[228,7443,916],{"class":915},[228,7445,7446],{"class":252},"      \u003C!-- Left: Station + Operation -->",[228,7448,916],{"class":915},[228,7450,7451],{"class":252},"      \u003Cv-col cols=",[228,7453,928],{"class":915},[228,7455,7456],{"class":252},"12",[228,7458,928],{"class":915},[228,7460,7461],{"class":252}," md=",[228,7463,928],{"class":915},[228,7465,7466],{"class":252},"5",[228,7468,928],{"class":915},[228,7470,7384],{"class":252},[228,7472,928],{"class":915},[228,7474,7475],{"class":252},"wi-col",[228,7477,928],{"class":915},[228,7479,5360],{"class":252},[228,7481,916],{"class":915},[228,7483,7484],{"class":252},"        \u003Cv-card flat class=",[228,7486,928],{"class":915},[228,7488,7489],{"class":252},"wi-card wi-card-station",[228,7491,928],{"class":915},[228,7493,5360],{"class":252},[228,7495,916],{"class":915},[228,7497,7498],{"class":252},"          \u003Cdiv class=",[228,7500,928],{"class":915},[228,7502,7503],{"class":252},"wi-card-head",[228,7505,928],{"class":915},[228,7507,5360],{"class":252},[228,7509,916],{"class":915},[228,7511,7512],{"class":252},"            \u003Cv-icon icon=",[228,7514,928],{"class":915},[228,7516,7517],{"class":252},"mdi-map-marker-radius",[228,7519,928],{"class":915},[228,7521,7522],{"class":252}," size=",[228,7524,928],{"class":915},[228,7526,7527],{"class":252},"22",[228,7529,928],{"class":915},[228,7531,7408],{"class":252},[228,7533,916],{"class":915},[228,7535,7536],{"class":252},"            \u003Cspan>STATION\u003C\u002Fspan>",[228,7538,916],{"class":915},[228,7540,7541],{"class":252},"          \u003C\u002Fdiv>",[228,7543,916],{"class":915},[228,7545,7498],{"class":252},[228,7547,928],{"class":915},[228,7549,7550],{"class":252},"wi-station-id",[228,7552,928],{"class":915},[228,7554,7555],{"class":252},">{{ msg?.payload?.stationId ?? '—' }}\u003C\u002Fdiv>",[228,7557,922],{"class":915},[228,7559,7560],{"class":252},"          \u003Cv-divider class=",[228,7562,928],{"class":915},[228,7564,7565],{"class":252},"wi-divider",[228,7567,928],{"class":915},[228,7569,7570],{"class":252},">\u003C\u002Fv-divider>",[228,7572,922],{"class":915},[228,7574,7498],{"class":252},[228,7576,928],{"class":915},[228,7578,7503],{"class":252},[228,7580,928],{"class":915},[228,7582,5360],{"class":252},[228,7584,916],{"class":915},[228,7586,7512],{"class":252},[228,7588,928],{"class":915},[228,7590,7591],{"class":252},"mdi-clipboard-text-outline",[228,7593,928],{"class":915},[228,7595,7522],{"class":252},[228,7597,928],{"class":915},[228,7599,7527],{"class":252},[228,7601,928],{"class":915},[228,7603,7408],{"class":252},[228,7605,916],{"class":915},[228,7607,7608],{"class":252},"            \u003Cspan>OPERATION\u003C\u002Fspan>",[228,7610,916],{"class":915},[228,7612,7541],{"class":252},[228,7614,916],{"class":915},[228,7616,7498],{"class":252},[228,7618,928],{"class":915},[228,7620,7621],{"class":252},"wi-operation-name",[228,7623,928],{"class":915},[228,7625,5360],{"class":252},[228,7627,916],{"class":915},[228,7629,7630],{"class":252},"            {{ msg?.payload?.operation?.name ?? 'Awaiting operation' }}",[228,7632,916],{"class":915},[228,7634,7541],{"class":252},[228,7636,922],{"class":915},[228,7638,7498],{"class":252},[228,7640,928],{"class":915},[228,7642,7643],{"class":252},"wi-cycle",[228,7645,928],{"class":915},[228,7647,5360],{"class":252},[228,7649,916],{"class":915},[228,7651,7512],{"class":252},[228,7653,928],{"class":915},[228,7655,7656],{"class":252},"mdi-timer-outline",[228,7658,928],{"class":915},[228,7660,7522],{"class":252},[228,7662,928],{"class":915},[228,7664,7665],{"class":252},"26",[228,7667,928],{"class":915},[228,7669,7408],{"class":252},[228,7671,916],{"class":915},[228,7673,7674],{"class":252},"            \u003Cdiv class=",[228,7676,928],{"class":915},[228,7678,7679],{"class":252},"wi-cycle-text",[228,7681,928],{"class":915},[228,7683,5360],{"class":252},[228,7685,916],{"class":915},[228,7687,7688],{"class":252},"              \u003Cspan class=",[228,7690,928],{"class":915},[228,7692,7693],{"class":252},"wi-cycle-label",[228,7695,928],{"class":915},[228,7697,7698],{"class":252},">ESTIMATED CYCLE TIME\u003C\u002Fspan>",[228,7700,916],{"class":915},[228,7702,7688],{"class":252},[228,7704,928],{"class":915},[228,7706,7707],{"class":252},"wi-cycle-value",[228,7709,928],{"class":915},[228,7711,5360],{"class":252},[228,7713,916],{"class":915},[228,7715,7716],{"class":252},"                {{ msg?.payload?.operation?.estimatedCycleTime ?? '—' }}",[228,7718,916],{"class":915},[228,7720,7721],{"class":252},"              \u003C\u002Fspan>",[228,7723,916],{"class":915},[228,7725,7726],{"class":252},"            \u003C\u002Fdiv>",[228,7728,916],{"class":915},[228,7730,7541],{"class":252},[228,7732,916],{"class":915},[228,7734,7735],{"class":252},"        \u003C\u002Fv-card>",[228,7737,916],{"class":915},[228,7739,7740],{"class":252},"      \u003C\u002Fv-col>",[228,7742,922],{"class":915},[228,7744,7745],{"class":252},"      \u003C!-- Right: Vehicle -->",[228,7747,916],{"class":915},[228,7749,7451],{"class":252},[228,7751,928],{"class":915},[228,7753,7456],{"class":252},[228,7755,928],{"class":915},[228,7757,7461],{"class":252},[228,7759,928],{"class":915},[228,7761,7762],{"class":252},"7",[228,7764,928],{"class":915},[228,7766,7384],{"class":252},[228,7768,928],{"class":915},[228,7770,7475],{"class":252},[228,7772,928],{"class":915},[228,7774,5360],{"class":252},[228,7776,916],{"class":915},[228,7778,7484],{"class":252},[228,7780,928],{"class":915},[228,7782,7783],{"class":252},"wi-card wi-card-vehicle",[228,7785,928],{"class":915},[228,7787,5360],{"class":252},[228,7789,916],{"class":915},[228,7791,7498],{"class":252},[228,7793,928],{"class":915},[228,7795,7503],{"class":252},[228,7797,928],{"class":915},[228,7799,5360],{"class":252},[228,7801,916],{"class":915},[228,7803,7512],{"class":252},[228,7805,928],{"class":915},[228,7807,7808],{"class":252},"mdi-car-side",[228,7810,928],{"class":915},[228,7812,7522],{"class":252},[228,7814,928],{"class":915},[228,7816,7527],{"class":252},[228,7818,928],{"class":915},[228,7820,7408],{"class":252},[228,7822,916],{"class":915},[228,7824,7825],{"class":252},"            \u003Cspan>VEHICLE\u003C\u002Fspan>",[228,7827,916],{"class":915},[228,7829,7541],{"class":252},[228,7831,922],{"class":915},[228,7833,7498],{"class":252},[228,7835,928],{"class":915},[228,7837,7838],{"class":252},"wi-vehicle-model",[228,7840,928],{"class":915},[228,7842,5360],{"class":252},[228,7844,916],{"class":915},[228,7846,7847],{"class":252},"            {{ msg?.payload?.vehicle?.model ?? 'Unknown model' }}",[228,7849,916],{"class":915},[228,7851,7541],{"class":252},[228,7853,916],{"class":915},[228,7855,7498],{"class":252},[228,7857,928],{"class":915},[228,7859,7860],{"class":252},"wi-vehicle-variant",[228,7862,928],{"class":915},[228,7864,5360],{"class":252},[228,7866,916],{"class":915},[228,7868,7869],{"class":252},"            {{ msg?.payload?.vehicle?.variant ?? '' }}",[228,7871,916],{"class":915},[228,7873,7541],{"class":252},[228,7875,922],{"class":915},[228,7877,7878],{"class":252},"          \u003Cv-row no-gutters class=",[228,7880,928],{"class":915},[228,7882,7883],{"class":252},"wi-spec-grid",[228,7885,928],{"class":915},[228,7887,5360],{"class":252},[228,7889,916],{"class":915},[228,7891,7892],{"class":252},"            \u003Cv-col cols=",[228,7894,928],{"class":915},[228,7896,7456],{"class":252},[228,7898,928],{"class":915},[228,7900,7901],{"class":252}," sm=",[228,7903,928],{"class":915},[228,7905,7762],{"class":252},[228,7907,928],{"class":915},[228,7909,5360],{"class":252},[228,7911,916],{"class":915},[228,7913,7914],{"class":252},"              \u003Cdiv class=",[228,7916,928],{"class":915},[228,7918,7919],{"class":252},"wi-spec",[228,7921,928],{"class":915},[228,7923,5360],{"class":252},[228,7925,916],{"class":915},[228,7927,7928],{"class":252},"                \u003Cspan class=",[228,7930,928],{"class":915},[228,7932,7933],{"class":252},"wi-spec-label",[228,7935,928],{"class":915},[228,7937,7938],{"class":252},">VIN\u003C\u002Fspan>",[228,7940,916],{"class":915},[228,7942,7928],{"class":252},[228,7944,928],{"class":915},[228,7946,7947],{"class":252},"wi-spec-value wi-vin",[228,7949,928],{"class":915},[228,7951,5360],{"class":252},[228,7953,916],{"class":915},[228,7955,7956],{"class":252},"                  {{ msg?.payload?.vehicle?.vin ?? '—' }}",[228,7958,916],{"class":915},[228,7960,7961],{"class":252},"                \u003C\u002Fspan>",[228,7963,916],{"class":915},[228,7965,7966],{"class":252},"              \u003C\u002Fdiv>",[228,7968,916],{"class":915},[228,7970,7971],{"class":252},"            \u003C\u002Fv-col>",[228,7973,916],{"class":915},[228,7975,7892],{"class":252},[228,7977,928],{"class":915},[228,7979,7456],{"class":252},[228,7981,928],{"class":915},[228,7983,7901],{"class":252},[228,7985,928],{"class":915},[228,7987,7466],{"class":252},[228,7989,928],{"class":915},[228,7991,5360],{"class":252},[228,7993,916],{"class":915},[228,7995,7914],{"class":252},[228,7997,928],{"class":915},[228,7999,7919],{"class":252},[228,8001,928],{"class":915},[228,8003,5360],{"class":252},[228,8005,916],{"class":915},[228,8007,7928],{"class":252},[228,8009,928],{"class":915},[228,8011,7933],{"class":252},[228,8013,928],{"class":915},[228,8015,8016],{"class":252},">COLOR\u003C\u002Fspan>",[228,8018,916],{"class":915},[228,8020,7928],{"class":252},[228,8022,928],{"class":915},[228,8024,8025],{"class":252},"wi-spec-value",[228,8027,928],{"class":915},[228,8029,5360],{"class":252},[228,8031,916],{"class":915},[228,8033,8034],{"class":252},"                  \u003Cv-icon",[228,8036,916],{"class":915},[228,8038,8039],{"class":252},"                    icon=",[228,8041,928],{"class":915},[228,8043,8044],{"class":252},"mdi-circle",[228,8046,987],{"class":915},[228,8048,8049],{"class":252},"                    size=",[228,8051,928],{"class":915},[228,8053,8054],{"class":252},"18",[228,8056,987],{"class":915},[228,8058,8059],{"class":252},"                    class=",[228,8061,928],{"class":915},[228,8063,8064],{"class":252},"wi-color-dot",[228,8066,987],{"class":915},[228,8068,8069],{"class":252},"                  >\u003C\u002Fv-icon>",[228,8071,916],{"class":915},[228,8073,8074],{"class":252},"                  {{ msg?.payload?.vehicle?.color ?? '—' }}",[228,8076,916],{"class":915},[228,8078,7961],{"class":252},[228,8080,916],{"class":915},[228,8082,7966],{"class":252},[228,8084,916],{"class":915},[228,8086,7971],{"class":252},[228,8088,916],{"class":915},[228,8090,8091],{"class":252},"          \u003C\u002Fv-row>",[228,8093,916],{"class":915},[228,8095,7735],{"class":252},[228,8097,916],{"class":915},[228,8099,7740],{"class":252},[228,8101,916],{"class":915},[228,8103,8104],{"class":252},"    \u003C\u002Fv-row>",[228,8106,922],{"class":915},[228,8108,8109],{"class":252},"    \u003C!-- Start button -->",[228,8111,916],{"class":915},[228,8113,8114],{"class":252},"    \u003Cv-btn block size=",[228,8116,928],{"class":915},[228,8118,8119],{"class":252},"x-large",[228,8121,928],{"class":915},[228,8123,8124],{"class":252}," color=",[228,8126,928],{"class":915},[228,8128,8129],{"class":252},"green-darken-1",[228,8131,928],{"class":915},[228,8133,7384],{"class":252},[228,8135,928],{"class":915},[228,8137,8138],{"class":252},"wi-start-btn",[228,8140,928],{"class":915},[228,8142,8143],{"class":252}," :disabled=",[228,8145,928],{"class":915},[228,8147,8148],{"class":252},"!msg?.payload?.workOrderId",[228,8150,987],{"class":915},[228,8152,8153],{"class":252},"      @click=",[228,8155,928],{"class":915},[228,8157,8158],{"class":252},"send({ payload: { action: 'start', workOrderId: msg?.payload?.workOrderId, stationId: msg?.payload?.stationId } })",[228,8160,928],{"class":915},[228,8162,5360],{"class":252},[228,8164,916],{"class":915},[228,8166,8167],{"class":252},"      \u003Cv-icon start icon=",[228,8169,928],{"class":915},[228,8171,8172],{"class":252},"mdi-play-circle",[228,8174,928],{"class":915},[228,8176,7522],{"class":252},[228,8178,928],{"class":915},[228,8180,8181],{"class":252},"34",[228,8183,928],{"class":915},[228,8185,7408],{"class":252},[228,8187,916],{"class":915},[228,8189,8190],{"class":252},"      START WORK ORDER",[228,8192,916],{"class":915},[228,8194,8195],{"class":252},"    \u003C\u002Fv-btn>",[228,8197,916],{"class":915},[228,8199,8200],{"class":252},"  \u003C\u002Fdiv>",[228,8202,916],{"class":915},[228,8204,8205],{"class":252},"\u003C\u002Ftemplate>",[228,8207,922],{"class":915},[228,8209,8210],{"class":252},"\u003Cscript>",[228,8212,916],{"class":915},[228,8214,8215],{"class":252},"  export default {",[228,8217,916],{"class":915},[228,8219,8220],{"class":252},"  computed: {",[228,8222,916],{"class":915},[228,8224,8225],{"class":252},"    priorityColor () {",[228,8227,916],{"class":915},[228,8229,8230],{"class":252},"      const p = (this.msg?.payload?.priority ?? '').toLowerCase()",[228,8232,916],{"class":915},[228,8234,8235],{"class":252},"      if (p === 'high' || p === 'urgent' || p === 'critical') return 'red-darken-1'",[228,8237,916],{"class":915},[228,8239,8240],{"class":252},"      if (p === 'medium') return 'amber-darken-2'",[228,8242,916],{"class":915},[228,8244,8245],{"class":252},"      return 'blue-grey-darken-1'",[228,8247,916],{"class":915},[228,8249,3695],{"class":252},[228,8251,916],{"class":915},[228,8253,8254],{"class":252},"  }",[228,8256,916],{"class":915},[228,8258,1575],{"class":252},[228,8260,916],{"class":915},[228,8262,8263],{"class":252},"\u003C\u002Fscript>",[228,8265,922],{"class":915},[228,8267,8268],{"class":252},"\u003Cstyle>",[228,8270,916],{"class":915},[228,8272,8273],{"class":252},"  .wi-root {",[228,8275,916],{"class":915},[228,8277,8278],{"class":252},"    font-family: 'Roboto', system-ui, sans-serif;",[228,8280,916],{"class":915},[228,8282,8283],{"class":252},"    color: #1f2933;",[228,8285,916],{"class":915},[228,8287,8288],{"class":252},"    padding: 4px;",[228,8290,916],{"class":915},[228,8292,8254],{"class":252},[228,8294,922],{"class":915},[228,8296,8297],{"class":252},"  .wi-topbar {",[228,8299,916],{"class":915},[228,8301,8302],{"class":252},"    display: flex;",[228,8304,916],{"class":915},[228,8306,8307],{"class":252},"    align-items: center;",[228,8309,916],{"class":915},[228,8311,8312],{"class":252},"    justify-content: space-between;",[228,8314,916],{"class":915},[228,8316,8317],{"class":252},"    flex-wrap: wrap;",[228,8319,916],{"class":915},[228,8321,8322],{"class":252},"    gap: 12px;",[228,8324,916],{"class":915},[228,8326,8327],{"class":252},"    background: #ffffff;",[228,8329,916],{"class":915},[228,8331,8332],{"class":252},"    border: 1px solid #e2e8f0;",[228,8334,916],{"class":915},[228,8336,8337],{"class":252},"    border-left: 6px solid #1565c0;",[228,8339,916],{"class":915},[228,8341,8342],{"class":252},"    border-radius: 10px;",[228,8344,916],{"class":915},[228,8346,8347],{"class":252},"    padding: 14px 20px;",[228,8349,916],{"class":915},[228,8351,8352],{"class":252},"    margin-bottom: 14px;",[228,8354,916],{"class":915},[228,8356,8254],{"class":252},[228,8358,922],{"class":915},[228,8360,8361],{"class":252},"  .wi-topbar-left {",[228,8363,916],{"class":915},[228,8365,8302],{"class":252},[228,8367,916],{"class":915},[228,8369,8370],{"class":252},"    flex-direction: column;",[228,8372,916],{"class":915},[228,8374,8375],{"class":252},"    line-height: 1.1;",[228,8377,916],{"class":915},[228,8379,8254],{"class":252},[228,8381,922],{"class":915},[228,8383,8384],{"class":252},"  .wi-wo-label {",[228,8386,916],{"class":915},[228,8388,8389],{"class":252},"    font-size: 12px;",[228,8391,916],{"class":915},[228,8393,8394],{"class":252},"    letter-spacing: 2px;",[228,8396,916],{"class":915},[228,8398,8399],{"class":252},"    color: #64748b;",[228,8401,916],{"class":915},[228,8403,8404],{"class":252},"    font-weight: 600;",[228,8406,916],{"class":915},[228,8408,8254],{"class":252},[228,8410,922],{"class":915},[228,8412,8413],{"class":252},"  .wi-wo-id {",[228,8415,916],{"class":915},[228,8417,8418],{"class":252},"    font-size: 30px;",[228,8420,916],{"class":915},[228,8422,8423],{"class":252},"    font-weight: 700;",[228,8425,916],{"class":915},[228,8427,8428],{"class":252},"    color: #0f172a;",[228,8430,916],{"class":915},[228,8432,8433],{"class":252},"    font-variant-numeric: tabular-nums;",[228,8435,916],{"class":915},[228,8437,8254],{"class":252},[228,8439,922],{"class":915},[228,8441,8442],{"class":252},"  .wi-topbar-right {",[228,8444,916],{"class":915},[228,8446,8302],{"class":252},[228,8448,916],{"class":915},[228,8450,8451],{"class":252},"    gap: 10px;",[228,8453,916],{"class":915},[228,8455,8317],{"class":252},[228,8457,916],{"class":915},[228,8459,8254],{"class":252},[228,8461,922],{"class":915},[228,8463,8464],{"class":252},"  .wi-chip {",[228,8466,916],{"class":915},[228,8468,8469],{"class":252},"    font-weight: 700 !important;",[228,8471,916],{"class":915},[228,8473,8474],{"class":252},"    letter-spacing: 0.5px;",[228,8476,916],{"class":915},[228,8478,8254],{"class":252},[228,8480,922],{"class":915},[228,8482,8483],{"class":252},"  .wi-body {",[228,8485,916],{"class":915},[228,8487,8488],{"class":252},"    gap: 0;",[228,8490,916],{"class":915},[228,8492,8254],{"class":252},[228,8494,922],{"class":915},[228,8496,8497],{"class":252},"  .wi-col {",[228,8499,916],{"class":915},[228,8501,8502],{"class":252},"    padding: 6px;",[228,8504,916],{"class":915},[228,8506,8254],{"class":252},[228,8508,922],{"class":915},[228,8510,8511],{"class":252},"  .wi-card {",[228,8513,916],{"class":915},[228,8515,8516],{"class":252},"    background: #ffffff !important;",[228,8518,916],{"class":915},[228,8520,8521],{"class":252},"    border: 1px solid #e2e8f0 !important;",[228,8523,916],{"class":915},[228,8525,8526],{"class":252},"    border-radius: 10px !important;",[228,8528,916],{"class":915},[228,8530,8531],{"class":252},"    padding: 20px 22px;",[228,8533,916],{"class":915},[228,8535,8536],{"class":252},"    height: 100%;",[228,8538,916],{"class":915},[228,8540,8254],{"class":252},[228,8542,922],{"class":915},[228,8544,8545],{"class":252},"  .wi-card-vehicle {",[228,8547,916],{"class":915},[228,8549,8550],{"class":252},"    border-left: 6px solid #00897b !important;",[228,8552,916],{"class":915},[228,8554,8254],{"class":252},[228,8556,922],{"class":915},[228,8558,8559],{"class":252},"  .wi-card-station {",[228,8561,916],{"class":915},[228,8563,8564],{"class":252},"    border-left: 6px solid #5e35b1 !important;",[228,8566,916],{"class":915},[228,8568,8254],{"class":252},[228,8570,922],{"class":915},[228,8572,8573],{"class":252},"  .wi-card-head {",[228,8575,916],{"class":915},[228,8577,8302],{"class":252},[228,8579,916],{"class":915},[228,8581,8307],{"class":252},[228,8583,916],{"class":915},[228,8585,8586],{"class":252},"    gap: 8px;",[228,8588,916],{"class":915},[228,8590,8591],{"class":252},"    font-size: 13px;",[228,8593,916],{"class":915},[228,8595,8394],{"class":252},[228,8597,916],{"class":915},[228,8599,8423],{"class":252},[228,8601,916],{"class":915},[228,8603,8399],{"class":252},[228,8605,916],{"class":915},[228,8607,8608],{"class":252},"    margin-bottom: 6px;",[228,8610,916],{"class":915},[228,8612,8254],{"class":252},[228,8614,922],{"class":915},[228,8616,8617],{"class":252},"  .wi-station-id {",[228,8619,916],{"class":915},[228,8621,8622],{"class":252},"    font-size: 44px;",[228,8624,916],{"class":915},[228,8626,8423],{"class":252},[228,8628,916],{"class":915},[228,8630,8631],{"class":252},"    color: #4527a0;",[228,8633,916],{"class":915},[228,8635,8636],{"class":252},"    line-height: 1;",[228,8638,916],{"class":915},[228,8640,8608],{"class":252},[228,8642,916],{"class":915},[228,8644,8254],{"class":252},[228,8646,922],{"class":915},[228,8648,8649],{"class":252},"  .wi-divider {",[228,8651,916],{"class":915},[228,8653,8654],{"class":252},"    margin: 16px 0;",[228,8656,916],{"class":915},[228,8658,8659],{"class":252},"    border-color: #edf2f7 !important;",[228,8661,916],{"class":915},[228,8663,8254],{"class":252},[228,8665,922],{"class":915},[228,8667,8668],{"class":252},"  .wi-operation-name {",[228,8670,916],{"class":915},[228,8672,8673],{"class":252},"    font-size: 24px;",[228,8675,916],{"class":915},[228,8677,8404],{"class":252},[228,8679,916],{"class":915},[228,8681,8428],{"class":252},[228,8683,916],{"class":915},[228,8685,8686],{"class":252},"    margin-bottom: 18px;",[228,8688,916],{"class":915},[228,8690,8254],{"class":252},[228,8692,922],{"class":915},[228,8694,8695],{"class":252},"  .wi-cycle {",[228,8697,916],{"class":915},[228,8699,8302],{"class":252},[228,8701,916],{"class":915},[228,8703,8307],{"class":252},[228,8705,916],{"class":915},[228,8707,8322],{"class":252},[228,8709,916],{"class":915},[228,8711,8712],{"class":252},"    background: #f1f5f9;",[228,8714,916],{"class":915},[228,8716,8717],{"class":252},"    border-radius: 8px;",[228,8719,916],{"class":915},[228,8721,8722],{"class":252},"    padding: 12px 16px;",[228,8724,916],{"class":915},[228,8726,8254],{"class":252},[228,8728,922],{"class":915},[228,8730,8731],{"class":252},"  .wi-cycle-text {",[228,8733,916],{"class":915},[228,8735,8302],{"class":252},[228,8737,916],{"class":915},[228,8739,8370],{"class":252},[228,8741,916],{"class":915},[228,8743,8744],{"class":252},"    line-height: 1.2;",[228,8746,916],{"class":915},[228,8748,8254],{"class":252},[228,8750,922],{"class":915},[228,8752,8753],{"class":252},"  .wi-cycle-label {",[228,8755,916],{"class":915},[228,8757,8758],{"class":252},"    font-size: 11px;",[228,8760,916],{"class":915},[228,8762,8763],{"class":252},"    letter-spacing: 1.5px;",[228,8765,916],{"class":915},[228,8767,8404],{"class":252},[228,8769,916],{"class":915},[228,8771,8399],{"class":252},[228,8773,916],{"class":915},[228,8775,8254],{"class":252},[228,8777,922],{"class":915},[228,8779,8780],{"class":252},"  .wi-cycle-value {",[228,8782,916],{"class":915},[228,8784,8785],{"class":252},"    font-size: 22px;",[228,8787,916],{"class":915},[228,8789,8423],{"class":252},[228,8791,916],{"class":915},[228,8793,8428],{"class":252},[228,8795,916],{"class":915},[228,8797,8433],{"class":252},[228,8799,916],{"class":915},[228,8801,8254],{"class":252},[228,8803,922],{"class":915},[228,8805,8806],{"class":252},"  .wi-vehicle-model {",[228,8808,916],{"class":915},[228,8810,8811],{"class":252},"    font-size: 34px;",[228,8813,916],{"class":915},[228,8815,8423],{"class":252},[228,8817,916],{"class":915},[228,8819,8428],{"class":252},[228,8821,916],{"class":915},[228,8823,8824],{"class":252},"    line-height: 1.05;",[228,8826,916],{"class":915},[228,8828,8254],{"class":252},[228,8830,922],{"class":915},[228,8832,8833],{"class":252},"  .wi-vehicle-variant {",[228,8835,916],{"class":915},[228,8837,8838],{"class":252},"    font-size: 18px;",[228,8840,916],{"class":915},[228,8842,8843],{"class":252},"    font-weight: 500;",[228,8845,916],{"class":915},[228,8847,8848],{"class":252},"    color: #00695c;",[228,8850,916],{"class":915},[228,8852,8853],{"class":252},"    margin-bottom: 20px;",[228,8855,916],{"class":915},[228,8857,8254],{"class":252},[228,8859,922],{"class":915},[228,8861,8862],{"class":252},"  .wi-spec-grid {",[228,8864,916],{"class":915},[228,8866,8488],{"class":252},[228,8868,916],{"class":915},[228,8870,8254],{"class":252},[228,8872,922],{"class":915},[228,8874,8875],{"class":252},"  .wi-spec {",[228,8877,916],{"class":915},[228,8879,8302],{"class":252},[228,8881,916],{"class":915},[228,8883,8370],{"class":252},[228,8885,916],{"class":915},[228,8887,8888],{"class":252},"    padding: 10px 0;",[228,8890,916],{"class":915},[228,8892,8254],{"class":252},[228,8894,922],{"class":915},[228,8896,8897],{"class":252},"  .wi-spec-label {",[228,8899,916],{"class":915},[228,8901,8758],{"class":252},[228,8903,916],{"class":915},[228,8905,8763],{"class":252},[228,8907,916],{"class":915},[228,8909,8404],{"class":252},[228,8911,916],{"class":915},[228,8913,8399],{"class":252},[228,8915,916],{"class":915},[228,8917,8918],{"class":252},"    margin-bottom: 2px;",[228,8920,916],{"class":915},[228,8922,8254],{"class":252},[228,8924,922],{"class":915},[228,8926,8927],{"class":252},"  .wi-spec-value {",[228,8929,916],{"class":915},[228,8931,8932],{"class":252},"    font-size: 20px;",[228,8934,916],{"class":915},[228,8936,8404],{"class":252},[228,8938,916],{"class":915},[228,8940,8428],{"class":252},[228,8942,916],{"class":915},[228,8944,8302],{"class":252},[228,8946,916],{"class":915},[228,8948,8307],{"class":252},[228,8950,916],{"class":915},[228,8952,8953],{"class":252},"    gap: 6px;",[228,8955,916],{"class":915},[228,8957,8254],{"class":252},[228,8959,922],{"class":915},[228,8961,8962],{"class":252},"  .wi-vin {",[228,8964,916],{"class":915},[228,8966,8967],{"class":252},"    font-family: 'Roboto Mono', monospace;",[228,8969,916],{"class":915},[228,8971,8838],{"class":252},[228,8973,916],{"class":915},[228,8975,8976],{"class":252},"    letter-spacing: 1px;",[228,8978,916],{"class":915},[228,8980,8254],{"class":252},[228,8982,922],{"class":915},[228,8984,8985],{"class":252},"  .wi-color-dot {",[228,8987,916],{"class":915},[228,8989,8990],{"class":252},"    color: #cbd5e1;",[228,8992,916],{"class":915},[228,8994,8254],{"class":252},[228,8996,922],{"class":915},[228,8998,8999],{"class":252},"  .wi-start-btn {",[228,9001,916],{"class":915},[228,9003,9004],{"class":252},"    margin-top: 16px;",[228,9006,916],{"class":915},[228,9008,9009],{"class":252},"    height: 84px !important;",[228,9011,916],{"class":915},[228,9013,9014],{"class":252},"    font-size: 24px !important;",[228,9016,916],{"class":915},[228,9018,8469],{"class":252},[228,9020,916],{"class":915},[228,9022,8976],{"class":252},[228,9024,916],{"class":915},[228,9026,9027],{"class":252},"    border-radius: 12px !important;",[228,9029,916],{"class":915},[228,9031,8254],{"class":252},[228,9033,916],{"class":915},[228,9035,9036],{"class":252},"\u003C\u002Fstyle>",[228,9038,238],{"class":234},[228,9040,258],{"class":234},[228,9042,238],{"class":234},[228,9044,9045],{"class":241},"storeOutMessages",[228,9047,238],{"class":234},[228,9049,387],{"class":234},[228,9051,238],{"class":234},[228,9053,9054],{"class":241},"passthru",[228,9056,238],{"class":234},[228,9058,749],{"class":234},[228,9060,238],{"class":234},[228,9062,9063],{"class":241},"resendOnRefresh",[228,9065,238],{"class":234},[228,9067,387],{"class":234},[228,9069,238],{"class":234},[228,9071,9072],{"class":241},"templateScope",[228,9074,238],{"class":234},[228,9076,247],{"class":234},[228,9078,238],{"class":234},[228,9080,9081],{"class":252},"local",[228,9083,238],{"class":234},[228,9085,258],{"class":234},[228,9087,238],{"class":234},[228,9089,9090],{"class":241},"className",[228,9092,238],{"class":234},[228,9094,247],{"class":234},[228,9096,770],{"class":234},[228,9098,258],{"class":234},[228,9100,238],{"class":234},[228,9102,566],{"class":241},[228,9104,238],{"class":234},[228,9106,247],{"class":234},[228,9108,9109],{"class":573},"570",[228,9111,258],{"class":234},[228,9113,238],{"class":234},[228,9115,581],{"class":241},[228,9117,238],{"class":234},[228,9119,247],{"class":234},[228,9121,2514],{"class":573},[228,9123,258],{"class":234},[228,9125,238],{"class":234},[228,9127,802],{"class":241},[228,9129,238],{"class":234},[228,9131,807],{"class":234},[228,9133,238],{"class":234},[228,9135,9136],{"class":252},"455c7536a9adcfe6",[228,9138,238],{"class":234},[228,9140,816],{"class":234},[228,9142,238],{"class":234},[228,9144,242],{"class":241},[228,9146,238],{"class":234},[228,9148,247],{"class":234},[228,9150,238],{"class":234},[228,9152,9153],{"class":252},"77ecf88a48f8c4f0",[228,9155,238],{"class":234},[228,9157,258],{"class":234},[228,9159,238],{"class":234},[228,9161,263],{"class":241},[228,9163,238],{"class":234},[228,9165,247],{"class":234},[228,9167,238],{"class":234},[228,9169,4748],{"class":252},[228,9171,238],{"class":234},[228,9173,258],{"class":234},[228,9175,238],{"class":234},[228,9177,4757],{"class":241},[228,9179,238],{"class":234},[228,9181,1080],{"class":234},[228,9183,238],{"class":234},[228,9185,4766],{"class":241},[228,9187,238],{"class":234},[228,9189,304],{"class":234},[228,9191,238],{"class":234},[228,9193,98],{"class":309},[228,9195,238],{"class":234},[228,9197,247],{"class":234},[228,9199,238],{"class":234},[228,9201,4783],{"class":252},[228,9203,238],{"class":234},[228,9205,4788],{"class":234},[147,9207,9208],{"start":4978},[70,9209,9210,9211,9214,9215,5835,9217,9219,9220,9222,9223,57],{},"Wire ",[45,9212,9213],{},"output 1"," to the \"Current Work Order Card\" ",[96,9216,102],{},[45,9218,4897],{}," group. It shows the work order ID, station, operation and estimated cycle time, the vehicle (model, variant, VIN, colour), a priority chip, and a ",[45,9221,157],{}," button. On click, the button sends ",[96,9224,9225],{},"{ action: 'start', workOrderId, stationId }",[12,9227,9228,75,9232],{},[21,9229],{"alt":9230,"src":9231},"Placeholder: Current Work Order Card rendered on the Home page","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fcurrent-work-order.png",[26,9233,9234],{},"The Current Work Order card: work order ID, priority chip, station, operation, vehicle details, and the Start button.",[147,9236,9237],{"start":5112},[70,9238,5235,9239,9241,9242,9244],{},[96,9240,106],{}," node and assign it to the ",[45,9243,4902],{}," group. Turn off auto-columns and add two text columns as shown below: Work Order (workOrderId) and Priority (priority). Wire output 2 of the split function into it.",[12,9246,9247,75,9251],{},[21,9248],{"alt":9249,"src":9250},"Placeholder: Up Next table listing queued work orders","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fup-next.png",[26,9252,9253],{},"The Up Next table showing the remaining queued work orders with their priority.",[147,9255,9256],{"start":5127},[70,9257,9258,9259,9261,9262,9265,9266,9268,9269,9271,9272,9274],{},"From the card, wire a ",[96,9260,5669],{}," node named \"go to Instructions\" that sets ",[96,9263,9264],{},"payload"," (msg) to ",[96,9267,4819],{},", then into a ",[96,9270,115],{}," node with its event set to ",[45,9273,5669],{}," to switch the page.",[12,9276,9277,9278,9280,9281,9283],{},"When the operator taps ",[45,9279,157],{},", the card sends them to the Instructions page. Because the split function already saved this operator's ",[96,9282,6932],{}," under their own username, the Instructions page, Complete Operation, and Report Issue flows can all look it back up correctly, even if another operator is doing the exact same thing on another screen at the same moment.",[59,9285,9287],{"id":9286},"loading-the-cached-instruction-set","Loading the Cached Instruction Set",[12,9289,9290],{},"The Instructions page needs the steps to show. Because the instruction set was cached in context on login, the page can paint it instantly without another round trip.",[147,9292,9293,9298,9308],{},[70,9294,5235,9295,9297],{},[96,9296,118],{}," node named \"Page opened\" for the Instructions page.",[70,9299,5235,9300,9302,9303,9305,9306,57],{},[96,9301,5669],{}," node named \"Load cached instruction set\". Set ",[96,9304,9264],{}," (msg) to the persistent global ",[96,9307,4819],{},[70,9309,9310],{},"Wire \"Page opened\" into it, and its output into the \"Work Instruction Widget\" you build next.",[59,9312,9314],{"id":9313},"remembering-each-operators-step","Remembering Each Operator's Step",[12,9316,9317,9318,9321,9322,9325],{},"This is something paper can't do and shared screens get wrong. If an operator completes the first two steps of a five-step wheel installation and returns later, they should resume at ",[45,9319,9320],{},"step 3",", not start again at ",[45,9323,9324],{},"step 1",". We achieve this by saving their progress against their username, the one they were identified as when the step was saved, not whichever username happens to be sitting in a shared global at read time.",[12,9327,9328,9329,9332,9333,9336],{},"The instruction widget emits two housekeeping actions: ",[96,9330,9331],{},"save_step"," whenever the operator moves between steps, and ",[96,9334,9335],{},"load_step"," when the page opens and needs to know where to resume. One function node handles both.",[147,9338,9339],{},[70,9340,9341,9342,75,9345,9347,9348,9350,9351,9354,9355,57],{},"Import the ",[45,9343,9344],{},"Work Instruction Widget",[96,9346,102],{}," below, assign it to the ",[45,9349,4819],{}," page, and set its scope to ",[45,9352,9353],{},"Page",". The widget displays one instruction at a time with its image, target cycle time, and checklist. Operators can't move to the next step until every checklist item is completed, and the final step changes the button to ",[45,9356,9357],{},"Complete Operation",[40,9359,9360],{},[12,9361,9362,7050,9364,7055,9367,7058],{},[45,9363,7049],{},[53,9365,7054],{"href":9366},"\u002Fdocs\u002Fuser\u002Fexpert\u002Fnode-red-embedded-ai\u002F?utm_source=chatgpt.com#css-and-html-generation-for-flowfuse-dashboard",[96,9368,102],{},[215,9370,9371],{":height":217},[219,9372,9374],{"className":221,"code":9373,"language":223,"meta":224,"style":224},"[{\"id\":\"d3492b9665d71f27\",\"type\":\"ui-template\",\"z\":\"c50b1b501a74c081\",\"g\":\"96f12d35d68b430e\",\"group\":\"\",\"page\":\"\",\"ui\":\"\",\"name\":\"Work Instruction Widget\",\"order\":1,\"width\":0,\"height\":0,\"head\":\"\",\"format\":\"\u003Ctemplate>\\n  \u003Cdiv class=\\\"wi-root\\\">\\n    \u003C!-- Context header with live timer -->\\n    \u003Cdiv class=\\\"wi-topbar\\\">\\n      \u003Cdiv class=\\\"wi-topbar-left\\\">\\n        \u003Cspan class=\\\"wi-op-label\\\">OPERATION\u003C\u002Fspan>\\n        \u003Cspan class=\\\"wi-op-name\\\">{{ payload?.operation ?? 'Work Instruction' }}\u003C\u002Fspan>\\n        \u003Cspan class=\\\"wi-op-sub\\\">\\n          {{ payload?.instructionSetId ?? '—' }} &nbsp;·&nbsp; v{{ payload?.version ?? '—' }}\\n        \u003C\u002Fspan>\\n      \u003C\u002Fdiv>\\n      \u003Cdiv class=\\\"wi-topbar-right\\\">\\n        \u003Cdiv class=\\\"wi-timer\\\">\\n          \u003Cv-icon icon=\\\"mdi-timer-outline\\\" size=\\\"26\\\">\u003C\u002Fv-icon>\\n          \u003Cdiv class=\\\"wi-timer-text\\\">\\n            \u003Cspan class=\\\"wi-timer-label\\\">TARGET TIME\u003C\u002Fspan>\\n            \u003Cspan class=\\\"wi-timer-value\\\">{{ currentStep?.estimatedTime ?? '—' }}s\u003C\u002Fspan>\\n          \u003C\u002Fdiv>\\n        \u003C\u002Fdiv>\\n      \u003C\u002Fdiv>\\n    \u003C\u002Fdiv>\\n\\n    \u003C!-- Step progress -->\\n    \u003Cv-card flat class=\\\"wi-card wi-stepper-card\\\">\\n      \u003Cdiv class=\\\"wi-stepper-head\\\">\\n        \u003Cspan class=\\\"wi-step-count\\\">\\n          STEP {{ (currentIndex + 1) }} OF {{ steps.length }}\\n        \u003C\u002Fspan>\\n        \u003Cspan class=\\\"wi-step-percent\\\">{{ progressPercent }}% COMPLETE\u003C\u002Fspan>\\n      \u003C\u002Fdiv>\\n      \u003Cv-progress-linear :model-value=\\\"progressPercent\\\" color=\\\"green-darken-1\\\" height=\\\"8\\\" rounded>\u003C\u002Fv-progress-linear>\\n    \u003C\u002Fv-card>\\n\\n    \u003C!-- Main instruction pane: image left, instruction + checklist right -->\\n    \u003Cv-card flat class=\\\"wi-card wi-card-instruction\\\">\\n      \u003Cdiv class=\\\"wi-instruction-flex\\\">\\n        \u003C!-- Reference image (left) -->\\n        \u003Cdiv class=\\\"wi-img-col\\\">\\n          \u003Cdiv class=\\\"wi-image-wrap\\\">\\n            \u003Cimg\\n              :src=\\\"stepImage\\\"\\n              :alt=\\\"currentStep?.title\\\"\\n              class=\\\"wi-image\\\"\\n              @error=\\\"onImageError\\\"\\n            \u002F>\\n          \u003C\u002Fdiv>\\n        \u003C\u002Fdiv>\\n\\n        \u003C!-- Instruction + checklist (right) -->\\n        \u003Cdiv class=\\\"wi-text-col\\\">\\n          \u003Cdiv class=\\\"wi-card-head\\\">\\n            \u003Cv-icon icon=\\\"mdi-clipboard-text-outline\\\" size=\\\"20\\\">\u003C\u002Fv-icon>\\n            \u003Cspan>INSTRUCTION\u003C\u002Fspan>\\n          \u003C\u002Fdiv>\\n          \u003Cdiv class=\\\"wi-step-title\\\">{{ currentStep?.title ?? '—' }}\u003C\u002Fdiv>\\n          \u003Cp class=\\\"wi-step-instruction\\\">{{ currentStep?.instruction ?? '' }}\u003C\u002Fp>\\n\\n          \u003Cdiv class=\\\"wi-card-head wi-checklist-head\\\">\\n            \u003Cv-icon icon=\\\"mdi-format-list-checks\\\" size=\\\"20\\\">\u003C\u002Fv-icon>\\n            \u003Cspan>CHECKLIST\u003C\u002Fspan>\\n          \u003C\u002Fdiv>\\n          \u003Cdiv class=\\\"wi-checklist\\\">\\n            \u003Clabel\\n              v-for=\\\"(item, i) in (currentStep?.checklist ?? [])\\\"\\n              :key=\\\"i\\\"\\n              class=\\\"wi-check-row\\\"\\n              :class=\\\"{ 'wi-check-row-done': checkedState[i] }\\\"\\n            >\\n              \u003Cv-checkbox-btn\\n                :model-value=\\\"checkedState[i]\\\"\\n                color=\\\"green-darken-1\\\"\\n                density=\\\"comfortable\\\"\\n                @update:model-value=\\\"toggleCheck(i)\\\"\\n              >\u003C\u002Fv-checkbox-btn>\\n              \u003Cspan>{{ item }}\u003C\u002Fspan>\\n            \u003C\u002Flabel>\\n          \u003C\u002Fdiv>\\n        \u003C\u002Fdiv>\\n      \u003C\u002Fdiv>\\n    \u003C\u002Fv-card>\\n\\n    \u003C!-- Controls -->\\n    \u003Cv-row no-gutters class=\\\"wi-controls\\\">\\n      \u003Cv-col cols=\\\"12\\\" sm=\\\"3\\\" class=\\\"wi-ctrl-col\\\">\\n        \u003Cv-btn block size=\\\"x-large\\\" variant=\\\"outlined\\\" color=\\\"blue-grey-darken-1\\\" class=\\\"wi-nav-btn\\\"\\n          :disabled=\\\"currentIndex === 0\\\" @click=\\\"prevStep\\\">\\n          \u003Cv-icon start icon=\\\"mdi-chevron-left\\\" size=\\\"30\\\">\u003C\u002Fv-icon>\\n          PREVIOUS\\n        \u003C\u002Fv-btn>\\n      \u003C\u002Fv-col>\\n\\n      \u003Cv-col cols=\\\"12\\\" sm=\\\"3\\\" class=\\\"wi-ctrl-col\\\">\\n        \u003Cv-btn block size=\\\"x-large\\\" variant=\\\"flat\\\" color=\\\"red-darken-1\\\" class=\\\"wi-nav-btn\\\" @click=\\\"reportDefect\\\">\\n          \u003Cv-icon start icon=\\\"mdi-alert-octagon-outline\\\" size=\\\"28\\\">\u003C\u002Fv-icon>\\n          REPORT ISSUE\\n        \u003C\u002Fv-btn>\\n      \u003C\u002Fv-col>\\n\\n      \u003Cv-col cols=\\\"12\\\" sm=\\\"6\\\" class=\\\"wi-ctrl-col\\\">\\n        \u003Cv-btn block size=\\\"x-large\\\" variant=\\\"flat\\\" :color=\\\"isLastStep ? 'green-darken-2' : 'green-darken-1'\\\"\\n          class=\\\"wi-nav-btn wi-next-btn\\\" :disabled=\\\"!allChecked\\\" @click=\\\"nextStep\\\">\\n          \u003Cv-icon start :icon=\\\"isLastStep ? 'mdi-check-circle' : 'mdi-chevron-right'\\\" size=\\\"30\\\">\u003C\u002Fv-icon>\\n          {{ isLastStep ? 'COMPLETE OPERATION' : 'NEXT STEP' }}\\n        \u003C\u002Fv-btn>\\n      \u003C\u002Fv-col>\\n    \u003C\u002Fv-row>\\n\\n    \u003Cdiv v-if=\\\"!allChecked\\\" class=\\\"wi-hint\\\">\\n      \u003Cv-icon icon=\\\"mdi-information-outline\\\" size=\\\"18\\\">\u003C\u002Fv-icon>\\n      Complete all checklist items to continue.\\n    \u003C\u002Fdiv>\\n  \u003C\u002Fdiv>\\n\u003C\u002Ftemplate>\\n\\n\u003Cscript>\\n  export default {\\n  data () {\\n    return {\\n      currentIndex: 0,\\n      checked: {},\\n      assetBase: '\u002Fassets\u002F',\\n      placeholder: 'https:\u002F\u002Fplacehold.co\u002F800x600\u002Feef2f7\u002F475569?text=Step+Reference',\\n      instruction: null\\n    }\\n  },\\n  computed: {\\n    payload () {\\n      return this.instruction ?? {}\\n    },\\n    steps () {\\n      return this.instruction?.steps ?? []\\n    },\\n    currentStep () {\\n      return this.steps[this.currentIndex] ?? null\\n    },\\n    isLastStep () {\\n      return this.currentIndex === this.steps.length - 1\\n    },\\n    progressPercent () {\\n      if (!this.steps.length) return 0\\n      return Math.round((this.currentIndex \u002F this.steps.length) * 100)\\n    },\\n    checkedState () {\\n      return this.checked[this.currentIndex] ?? []\\n    },\\n    allChecked () {\\n      const list = this.currentStep?.checklist ?? []\\n      if (!list.length) return true\\n      const state = this.checkedState\\n      return list.every((_, i) => state[i])\\n    },\\n    stepImage () {\\n      return this.resolveImage(this.currentStep?.image)\\n    }\\n  },\\n  methods: {\\n    resolveImage (img) {\\n      if (!img) return this.placeholder\\n      if (\u002F^https?:\\\\\u002F\\\\\u002F\u002F.test(img) || img.startsWith('\u002F')) return img\\n      return this.assetBase + img\\n    },\\n    preloadImages () {\\n      for (const step of this.steps) {\\n        const url = this.resolveImage(step?.image)\\n        if (url && url !== this.placeholder) {\\n          const im = new Image()\\n          im.src = url\\n        }\\n      }\\n    },\\n    saveStep () {\\n      this.send({\\n        payload: {\\n          action: 'save_step',\\n          stepIndex: this.currentIndex,\\n          stepName: this.currentStep?.title ?? null,\\n          stepId: this.currentStep?.stepId ?? null\\n        }\\n      })\\n    },\\n    toggleCheck (i) {\\n      const arr = (this.checked[this.currentIndex] ?? []).slice()\\n      arr[i] = !arr[i]\\n      this.checked = { ...this.checked, [this.currentIndex]: arr }\\n    },\\n    onImageError (e) {\\n      if (e?.target && e.target.src !== this.placeholder) {\\n        e.target.src = this.placeholder\\n      }\\n    },\\n    goToStep (i) {\\n      const max = this.steps.length - 1\\n      this.currentIndex = Math.min(Math.max(i, 0), Math.max(max, 0))\\n      this.saveStep()\\n    },\\n    nextStep () {\\n      if (this.isLastStep) {\\n        this.send({ payload: { action: 'complete_operation', stepIndex: this.currentIndex } })\\n        return\\n      }\\n      this.goToStep(this.currentIndex + 1)\\n    },\\n    prevStep () {\\n      if (this.currentIndex === 0) return\\n      this.goToStep(this.currentIndex - 1)\\n    },\\n    reportDefect () {\\n      this.send({\\n        payload: {\\n          action: 'Report Issue',\\n        }\\n      })\\n    }\\n  },\\n  watch: {\\n    msg: {\\n      immediate: true,\\n      handler (m) {\\n        const pl = m?.payload\\n        if (!pl) return\\n        if (Array.isArray(pl.steps)) {\\n          \u002F\u002F Instruction-set data: cache it so later messages can't wipe it.\\n          this.instruction = pl\\n          \u002F\u002F Preload every step image so navigation is instant.\\n          this.$nextTick(() => this.preloadImages())\\n        } else if (typeof pl.stepIndex === 'number') {\\n          \u002F\u002F Resume reply from the tracker: jump to the saved step.\\n          this.currentIndex = Math.min(\\n            Math.max(pl.stepIndex, 0),\\n            Math.max(this.steps.length - 1, 0)\\n          )\\n        }\\n      }\\n    }\\n  },\\n  mounted () {\\n    \u002F\u002F Ask the tracker which step this work order was left on.\\n    this.send({ payload: { action: 'load_step' } })\\n  }\\n}\\n\u003C\u002Fscript>\\n\\n\u003Cstyle>\\n  .wi-root {\\n    font-family: 'Roboto', system-ui, sans-serif;\\n    color: #1f2933;\\n    padding: 2px;\\n  }\\n\\n  \u002F* Header *\u002F\\n  .wi-topbar {\\n    display: flex;\\n    align-items: center;\\n    justify-content: space-between;\\n    flex-wrap: wrap;\\n    gap: 12px;\\n    background: #ffffff;\\n    border: 1px solid #e2e8f0;\\n    border-left: 6px solid #1565c0;\\n    border-radius: 10px;\\n    padding: 10px 16px;\\n    margin-bottom: 10px;\\n  }\\n\\n  .wi-topbar-left {\\n    display: flex;\\n    flex-direction: column;\\n    line-height: 1.15;\\n  }\\n\\n  .wi-op-label {\\n    font-size: 11px;\\n    letter-spacing: 2px;\\n    color: #64748b;\\n    font-weight: 600;\\n  }\\n\\n  .wi-op-name {\\n    font-size: 21px;\\n    font-weight: 700;\\n    color: #0f172a;\\n  }\\n\\n  .wi-op-sub {\\n    font-size: 12px;\\n    color: #94a3b8;\\n    font-weight: 500;\\n    margin-top: 2px;\\n  }\\n\\n  .wi-timer {\\n    display: flex;\\n    align-items: center;\\n    gap: 10px;\\n    padding: 8px 14px;\\n    border-radius: 10px;\\n    background: #f1f5f9;\\n    color: #0f172a;\\n  }\\n\\n  .wi-timer-text {\\n    display: flex;\\n    flex-direction: column;\\n    line-height: 1.1;\\n  }\\n\\n  .wi-timer-label {\\n    font-size: 10px;\\n    letter-spacing: 1.5px;\\n    font-weight: 600;\\n    opacity: 0.75;\\n  }\\n\\n  .wi-timer-value {\\n    font-size: 20px;\\n    font-weight: 700;\\n    font-variant-numeric: tabular-nums;\\n  }\\n\\n  \u002F* Cards *\u002F\\n  .wi-card {\\n    background: #ffffff !important;\\n    border: 1px solid #e2e8f0 !important;\\n    border-radius: 10px !important;\\n    padding: 14px 18px !important;\\n    height: 100%;\\n    box-sizing: border-box;\\n  }\\n\\n  .wi-card-head {\\n    display: flex;\\n    align-items: center;\\n    gap: 8px;\\n    font-size: 13px;\\n    letter-spacing: 2px;\\n    font-weight: 700;\\n    color: #64748b;\\n    margin-bottom: 8px;\\n  }\\n\\n  \u002F* Stepper (compact) *\u002F\\n  .wi-stepper-card {\\n    margin-bottom: 10px;\\n    padding: 10px 16px;\\n  }\\n\\n  .wi-stepper-head {\\n    display: flex;\\n    justify-content: space-between;\\n    align-items: baseline;\\n    margin-bottom: 8px;\\n  }\\n\\n  .wi-step-count {\\n    font-size: 14px;\\n    font-weight: 700;\\n    letter-spacing: 1px;\\n    color: #0f172a;\\n  }\\n\\n  .wi-step-percent {\\n    font-size: 12px;\\n    font-weight: 600;\\n    letter-spacing: 1px;\\n    color: #64748b;\\n  }\\n\\n  \u002F* Instruction card *\u002F\\n  .wi-card-instruction {\\n    border-left: 5px solid #5e35b1 !important;\\n    padding: 16px 20px !important;\\n    box-sizing: border-box;\\n  }\\n\\n  \u002F* Desktop: keep the instruction card a consistent size across every step,\\n     so navigating between steps does not make the layout jump. The card\\n     still grows taller when the reference image needs more room. *\u002F\\n  @media (min-width: 701px) {\\n    .wi-card-instruction {\\n      min-height: 360px;\\n    }\\n  }\\n\\n  .wi-step-title {\\n    font-size: 19px;\\n    font-weight: 700;\\n    color: #0f172a;\\n    margin-bottom: 6px;\\n    line-height: 1.15;\\n  }\\n\\n  .wi-step-instruction {\\n    font-size: 15px;\\n    line-height: 1.55;\\n    color: #334155;\\n    margin: 0 0 16px;\\n  }\\n\\n  .wi-checklist-head {\\n    margin-top: 6px;\\n    padding-top: 12px;\\n    border-top: 1px solid #edf2f7;\\n  }\\n\\n  .wi-checklist {\\n    display: flex;\\n    flex-direction: column;\\n    gap: 4px;\\n  }\\n\\n  .wi-check-row {\\n    display: flex;\\n    align-items: center;\\n    justify-content: flex-start;\\n    gap: 10px;\\n    padding: 6px 4px;\\n    border-radius: 8px;\\n    font-size: 15px;\\n    font-weight: 500;\\n    color: #1f2933;\\n    cursor: pointer;\\n  }\\n\\n  .wi-check-row>span {\\n    flex: 1;\\n    line-height: 1.35;\\n  }\\n\\n  .wi-check-row .v-selection-control {\\n    flex: none;\\n    min-width: 0;\\n  }\\n\\n  .wi-check-row-done>span {\\n    color: #94a3b8;\\n  }\\n\\n  \u002F* Instruction two-column layout (plain flexbox, no Vuetify grid) *\u002F\\n  .wi-instruction-flex {\\n    display: flex;\\n    gap: 20px;\\n    align-items: stretch;\\n    width: 100%;\\n    height: 100%;\\n  }\\n\\n  .wi-img-col {\\n    flex: 0 0 40%;\\n    display: flex;\\n    min-width: 0;\\n  }\\n\\n  .wi-text-col {\\n    flex: 1 1 60%;\\n    padding-top: 4px;\\n    min-width: 0;\\n  }\\n\\n  \u002F* Reference image (left) *\u002F\\n  .wi-image-wrap {\\n    border-radius: 10px;\\n    overflow: hidden;\\n    background: #f1f5f9;\\n    border: 1px solid #e2e8f0;\\n    width: 100%;\\n    height: 100%;\\n    min-height: 210px;\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n  }\\n\\n  \u002F* Desktop: image box tracks a fixed aspect ratio based on its column\\n     width, so the card height scales with the image. The text column\\n     stretches to match via align-items: stretch on the flex container. *\u002F\\n  @media (min-width: 701px) {\\n    .wi-image-wrap {\\n      aspect-ratio: 4 \u002F 3;\\n      height: auto;\\n      align-self: flex-start;\\n    }\\n  }\\n\\n  .wi-image {\\n    width: 100%;\\n    height: 100%;\\n    object-fit: contain;\\n  }\\n\\n  @media (max-width: 700px) {\\n    .wi-instruction-flex {\\n      flex-direction: column;\\n    }\\n\\n    .wi-img-col {\\n      flex: none;\\n    }\\n\\n    .wi-image-wrap {\\n      min-height: 150px;\\n    }\\n  }\\n\\n  \u002F* Controls *\u002F\\n  .wi-controls {\\n    margin-top: 12px;\\n    gap: 0;\\n  }\\n\\n  .wi-ctrl-col {\\n    padding: 6px 8px;\\n  }\\n\\n  .wi-nav-btn {\\n    height: 52px !important;\\n    font-size: 15px !important;\\n    font-weight: 700 !important;\\n    letter-spacing: 0.5px;\\n    border-radius: 12px !important;\\n  }\\n\\n  .wi-nav-btn .v-btn__content {\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n  }\\n\\n  .wi-next-btn {\\n    font-size: 17px !important;\\n  }\\n\\n  .wi-hint {\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n    gap: 6px;\\n    margin-top: 8px;\\n    font-size: 14px;\\n    font-weight: 500;\\n    color: #94a3b8;\\n  }\\n\u003C\u002Fstyle>\",\"storeOutMessages\":true,\"passthru\":true,\"resendOnRefresh\":true,\"templateScope\":\"widget:page\",\"className\":\"\",\"x\":670,\"y\":780,\"wires\":[[\"c67ea1f6c0580816\",\"effed3f3a008aef7\"]]},{\"id\":\"e51561215326fafd\",\"type\":\"global-config\",\"env\":[],\"modules\":{\"@flowfuse\u002Fnode-red-dashboard\":\"1.30.2\"}}]\n",[96,9375,9376],{"__ignoreMap":224},[228,9377,9378,9380,9382,9384,9386,9388,9390,9393,9395,9397,9399,9401,9403,9405,9407,9409,9411,9413,9415,9417,9419,9421,9423,9425,9427,9429,9431,9433,9435,9437,9439,9442,9444,9446,9448,9450,9452,9454,9456,9458,9460,9462,9464,9466,9468,9470,9472,9474,9476,9478,9480,9482,9484,9486,9488,9490,9492,9494,9496,9498,9500,9502,9504,9506,9508,9510,9512,9514,9516,9518,9520,9522,9524,9526,9528,9530,9532,9534,9536,9538,9540,9542,9544,9546,9548,9550,9552,9554,9556,9558,9560,9562,9564,9566,9568,9570,9572,9575,9577,9579,9581,9583,9585,9587,9589,9591,9593,9595,9597,9599,9601,9603,9605,9608,9610,9613,9615,9617,9619,9622,9624,9627,9629,9631,9633,9636,9638,9640,9642,9645,9647,9650,9652,9654,9656,9658,9660,9662,9664,9666,9668,9671,9673,9676,9678,9680,9682,9685,9687,9689,9691,9693,9695,9697,9699,9701,9703,9705,9707,9710,9712,9714,9716,9719,9721,9724,9726,9729,9731,9733,9735,9738,9740,9743,9745,9747,9749,9752,9754,9756,9758,9760,9762,9765,9767,9770,9772,9775,9777,9779,9781,9783,9785,9788,9790,9792,9794,9796,9798,9801,9803,9805,9807,9810,9812,9814,9816,9818,9820,9823,9825,9828,9830,9832,9834,9837,9839,9842,9844,9846,9848,9850,9852,9855,9857,9860,9862,9865,9867,9870,9872,9875,9877,9879,9881,9884,9886,9888,9890,9892,9894,9897,9899,9901,9903,9906,9908,9910,9912,9915,9917,9919,9921,9923,9925,9928,9930,9932,9934,9937,9939,9942,9944,9947,9949,9952,9954,9957,9959,9962,9964,9967,9969,9972,9974,9977,9979,9982,9984,9986,9988,9990,9992,9995,9997,9999,10001,10004,10006,10008,10010,10012,10014,10016,10018,10020,10022,10024,10026,10028,10030,10032,10034,10037,10039,10041,10043,10046,10048,10050,10052,10054,10056,10059,10061,10064,10066,10069,10071,10074,10076,10079,10081,10083,10085,10088,10090,10092,10094,10096,10098,10101,10103,10105,10107,10109,10111,10113,10115,10118,10120,10122,10124,10126,10128,10131,10133,10135,10137,10140,10142,10145,10147,10150,10152,10155,10157,10160,10162,10164,10166,10169,10171,10174,10176,10179,10181,10184,10186,10189,10191,10194,10196,10199,10201,10204,10206,10208,10210,10213,10215,10218,10220,10223,10225,10228,10230,10233,10235,10238,10240,10243,10245,10247,10249,10251,10253,10255,10257,10259,10261,10264,10266,10268,10270,10273,10275,10277,10279,10281,10283,10285,10287,10289,10291,10294,10296,10298,10300,10303,10305,10307,10309,10312,10314,10316,10318,10320,10322,10325,10327,10329,10331,10334,10336,10338,10340,10343,10345,10348,10350,10353,10355,10358,10360,10363,10365,10367,10369,10371,10373,10376,10378,10380,10382,10385,10387,10389,10391,10394,10396,10399,10401,10403,10405,10407,10409,10411,10413,10415,10417,10419,10421,10423,10425,10427,10429,10431,10433,10435,10437,10439,10441,10443,10445,10447,10449,10451,10453,10456,10458,10460,10462,10464,10466,10468,10470,10473,10475,10477,10479,10481,10483,10486,10488,10490,10492,10495,10497,10499,10501,10504,10506,10508,10510,10512,10514,10516,10518,10520,10522,10524,10526,10529,10531,10533,10535,10537,10539,10541,10543,10545,10547,10549,10551,10553,10555,10557,10559,10562,10564,10567,10569,10572,10574,10577,10579,10581,10583,10586,10588,10590,10592,10595,10597,10599,10601,10604,10606,10609,10611,10613,10615,10617,10619,10621,10623,10626,10628,10630,10632,10634,10636,10638,10640,10643,10645,10647,10649,10651,10653,10656,10658,10660,10662,10665,10667,10670,10672,10674,10676,10678,10680,10682,10684,10687,10689,10691,10693,10695,10697,10699,10701,10703,10705,10707,10709,10712,10714,10717,10719,10722,10724,10727,10729,10732,10734,10737,10739,10742,10744,10746,10748,10751,10753,10755,10757,10760,10762,10765,10767,10769,10771,10774,10776,10779,10781,10783,10785,10788,10790,10793,10795,10797,10799,10802,10804,10807,10809,10811,10813,10816,10818,10821,10823,10826,10828,10830,10832,10835,10837,10840,10842,10844,10846,10849,10851,10854,10856,10859,10861,10864,10866,10869,10871,10873,10875,10878,10880,10883,10885,10887,10889,10891,10893,10896,10898,10901,10903,10906,10908,10911,10914,10917,10919,10922,10924,10927,10929,10931,10933,10936,10938,10941,10943,10946,10948,10951,10953,10956,10958,10961,10963,10965,10967,10970,10972,10974,10976,10979,10981,10984,10986,10989,10991,10994,10996,10999,11001,11004,11006,11009,11011,11013,11015,11018,11020,11022,11024,11027,11029,11032,11034,11037,11039,11042,11044,11046,11048,11051,11053,11056,11058,11061,11063,11065,11067,11069,11071,11074,11076,11079,11081,11084,11086,11089,11091,11093,11095,11098,11100,11103,11105,11108,11110,11112,11114,11116,11118,11121,11123,11125,11127,11130,11132,11135,11137,11140,11142,11144,11146,11149,11151,11153,11155,11157,11159,11162,11164,11166,11168,11170,11172,11174,11176,11178,11180,11183,11185,11188,11190,11193,11195,11198,11200,11203,11205,11208,11210,11213,11215,11218,11220,11223,11225,11228,11230,11233,11235,11238,11240,11243,11245,11248,11250,11253,11255,11258,11260,11263,11265,11267,11269,11271,11273,11275,11277,11279,11281,11284,11286,11289,11291,11294,11296,11298,11300,11302,11304,11306,11308,11310,11312,11314,11316,11318,11320,11322,11324,11327,11329,11331,11333,11336,11338,11340,11342,11344,11346,11348,11350,11352,11354,11356,11358,11360,11362,11364,11366,11368,11370,11372,11374,11376,11378,11381,11383,11386,11388,11390,11392,11394,11396,11398,11400,11402,11404,11407,11409,11411,11413,11416,11418,11420,11422,11424,11426,11428,11430,11432,11434,11436,11438,11441,11443,11446,11448,11450,11452,11454,11456,11458,11460,11463,11465,11467,11469,11472,11474,11476,11478,11481,11483,11485,11487,11490,11492,11494,11496,11498,11500,11502,11504,11507,11509,11511,11513,11515,11517,11519,11521,11523,11525,11528,11530,11532,11534,11536,11538,11540,11542,11544,11546,11549,11551,11554,11556,11558,11560,11562,11564,11567,11569,11571,11573,11576,11578,11580,11582,11584,11586,11588,11590,11592,11594,11597,11599,11601,11603,11605,11607,11609,11611,11613,11615,11618,11620,11622,11624,11627,11629,11631,11633,11635,11637,11639,11641,11643,11645,11647,11649,11651,11653,11655,11657,11659,11661,11663,11665,11668,11670,11672,11674,11677,11679,11682,11684,11686,11688,11690,11692,11694,11696,11699,11701,11703,11705,11707,11709,11712,11714,11716,11718,11720,11722,11725,11727,11730,11732,11734,11736,11738,11740,11742,11744,11746,11748,11751,11753,11755,11757,11759,11761,11763,11765,11767,11769,11771,11773,11776,11778,11781,11783,11786,11788,11791,11793,11795,11797,11799,11801,11804,11806,11809,11811,11814,11816,11819,11821,11824,11826,11829,11831,11833,11835,11837,11839,11842,11844,11847,11849,11851,11853,11855,11857,11859,11861,11863,11865,11867,11869,11872,11874,11877,11879,11882,11884,11887,11889,11892,11894,11896,11898,11901,11903,11906,11908,11911,11913,11916,11918,11920,11922,11925,11927,11929,11931,11933,11935,11938,11940,11942,11944,11947,11949,11951,11953,11955,11957,11960,11962,11964,11966,11969,11971,11973,11975,11977,11979,11981,11983,11985,11987,11990,11992,11994,11996,11999,12001,12004,12006,12009,12011,12013,12015,12018,12020,12023,12025,12028,12030,12032,12034,12037,12039,12041,12043,12045,12047,12050,12052,12055,12057,12059,12061,12064,12066,12069,12071,12074,12076,12078,12080,12082,12084,12087,12089,12092,12094,12096,12098,12100,12102,12104,12106,12109,12111,12114,12116,12119,12121,12123,12125,12127,12129,12132,12134,12137,12139,12141,12143,12146,12148,12150,12152,12154,12156,12158,12160,12162,12164,12167,12169,12171,12173,12175,12177,12180,12182,12184,12186,12189,12191,12194,12196,12199,12201,12203,12205,12208,12210,12213,12215,12218,12220,12223,12225,12227,12229,12231,12233,12236,12238,12240,12242,12244,12246,12249,12251,12253,12255,12258,12260,12263,12265,12268,12270,12272,12274,12277,12279,12282,12284,12286,12288,12290,12292,12295,12297,12299,12301,12303,12305,12308,12310,12313,12315,12318,12320,12322,12324,12326,12328,12331,12333,12336,12338,12340,12342,12345,12347,12350,12352,12355,12357,12359,12361,12363,12365,12367,12369,12371,12373,12376,12378,12380,12382,12384,12386,12388,12390,12392,12394,12397,12399,12402,12404,12406,12408,12411,12413,12415,12417,12419,12421,12423,12425,12427,12429,12432,12434,12436,12438,12440,12442,12444,12446,12448,12450,12452,12454,12456,12458,12460,12462,12464,12466,12468,12470,12472,12474,12476,12478,12480,12482,12484,12486,12488,12490,12493,12495,12497,12499,12501,12503,12505,12507,12509,12511,12513,12515,12517,12520,12522,12524,12526,12528,12530,12533,12535,12537,12539,12541,12543,12545,12548,12550,12552,12554,12557,12559,12561,12563,12565,12567,12569,12571,12574,12576,12578,12580,12582,12584,12586,12588,12590,12592,12594,12596,12598,12600,12602,12604,12606,12608,12610,12612,12614,12616,12618,12620,12622,12624],{"class":230,"line":231},[228,9379,235],{"class":234},[228,9381,238],{"class":234},[228,9383,242],{"class":241},[228,9385,238],{"class":234},[228,9387,247],{"class":234},[228,9389,238],{"class":234},[228,9391,9392],{"class":252},"d3492b9665d71f27",[228,9394,238],{"class":234},[228,9396,258],{"class":234},[228,9398,238],{"class":234},[228,9400,263],{"class":241},[228,9402,238],{"class":234},[228,9404,247],{"class":234},[228,9406,238],{"class":234},[228,9408,102],{"class":252},[228,9410,238],{"class":234},[228,9412,258],{"class":234},[228,9414,238],{"class":234},[228,9416,281],{"class":241},[228,9418,238],{"class":234},[228,9420,247],{"class":234},[228,9422,238],{"class":234},[228,9424,7115],{"class":252},[228,9426,238],{"class":234},[228,9428,258],{"class":234},[228,9430,238],{"class":234},[228,9432,673],{"class":241},[228,9434,238],{"class":234},[228,9436,247],{"class":234},[228,9438,238],{"class":234},[228,9440,9441],{"class":252},"96f12d35d68b430e",[228,9443,238],{"class":234},[228,9445,258],{"class":234},[228,9447,238],{"class":234},[228,9449,272],{"class":241},[228,9451,238],{"class":234},[228,9453,247],{"class":234},[228,9455,770],{"class":234},[228,9457,258],{"class":234},[228,9459,238],{"class":234},[228,9461,4638],{"class":241},[228,9463,238],{"class":234},[228,9465,247],{"class":234},[228,9467,770],{"class":234},[228,9469,258],{"class":234},[228,9471,238],{"class":234},[228,9473,4277],{"class":241},[228,9475,238],{"class":234},[228,9477,247],{"class":234},[228,9479,770],{"class":234},[228,9481,258],{"class":234},[228,9483,238],{"class":234},[228,9485,690],{"class":241},[228,9487,238],{"class":234},[228,9489,247],{"class":234},[228,9491,238],{"class":234},[228,9493,9344],{"class":252},[228,9495,238],{"class":234},[228,9497,258],{"class":234},[228,9499,238],{"class":234},[228,9501,7194],{"class":241},[228,9503,238],{"class":234},[228,9505,247],{"class":234},[228,9507,337],{"class":573},[228,9509,258],{"class":234},[228,9511,238],{"class":234},[228,9513,7207],{"class":241},[228,9515,238],{"class":234},[228,9517,247],{"class":234},[228,9519,1042],{"class":573},[228,9521,258],{"class":234},[228,9523,238],{"class":234},[228,9525,7220],{"class":241},[228,9527,238],{"class":234},[228,9529,247],{"class":234},[228,9531,1042],{"class":573},[228,9533,258],{"class":234},[228,9535,238],{"class":234},[228,9537,7233],{"class":241},[228,9539,238],{"class":234},[228,9541,247],{"class":234},[228,9543,770],{"class":234},[228,9545,258],{"class":234},[228,9547,238],{"class":234},[228,9549,7246],{"class":241},[228,9551,238],{"class":234},[228,9553,247],{"class":234},[228,9555,238],{"class":234},[228,9557,7255],{"class":252},[228,9559,916],{"class":915},[228,9561,7260],{"class":252},[228,9563,928],{"class":915},[228,9565,7265],{"class":252},[228,9567,928],{"class":915},[228,9569,5360],{"class":252},[228,9571,916],{"class":915},[228,9573,9574],{"class":252},"    \u003C!-- Context header with live timer -->",[228,9576,916],{"class":915},[228,9578,7279],{"class":252},[228,9580,928],{"class":915},[228,9582,7284],{"class":252},[228,9584,928],{"class":915},[228,9586,5360],{"class":252},[228,9588,916],{"class":915},[228,9590,7293],{"class":252},[228,9592,928],{"class":915},[228,9594,7298],{"class":252},[228,9596,928],{"class":915},[228,9598,5360],{"class":252},[228,9600,916],{"class":915},[228,9602,7307],{"class":252},[228,9604,928],{"class":915},[228,9606,9607],{"class":252},"wi-op-label",[228,9609,928],{"class":915},[228,9611,9612],{"class":252},">OPERATION\u003C\u002Fspan>",[228,9614,916],{"class":915},[228,9616,7307],{"class":252},[228,9618,928],{"class":915},[228,9620,9621],{"class":252},"wi-op-name",[228,9623,928],{"class":915},[228,9625,9626],{"class":252},">{{ payload?.operation ?? 'Work Instruction' }}\u003C\u002Fspan>",[228,9628,916],{"class":915},[228,9630,7307],{"class":252},[228,9632,928],{"class":915},[228,9634,9635],{"class":252},"wi-op-sub",[228,9637,928],{"class":915},[228,9639,5360],{"class":252},[228,9641,916],{"class":915},[228,9643,9644],{"class":252},"          {{ payload?.instructionSetId ?? '—' }} &nbsp;·&nbsp; v{{ payload?.version ?? '—' }}",[228,9646,916],{"class":915},[228,9648,9649],{"class":252},"        \u003C\u002Fspan>",[228,9651,916],{"class":915},[228,9653,7336],{"class":252},[228,9655,916],{"class":915},[228,9657,7293],{"class":252},[228,9659,928],{"class":915},[228,9661,7345],{"class":252},[228,9663,928],{"class":915},[228,9665,5360],{"class":252},[228,9667,916],{"class":915},[228,9669,9670],{"class":252},"        \u003Cdiv class=",[228,9672,928],{"class":915},[228,9674,9675],{"class":252},"wi-timer",[228,9677,928],{"class":915},[228,9679,5360],{"class":252},[228,9681,916],{"class":915},[228,9683,9684],{"class":252},"          \u003Cv-icon icon=",[228,9686,928],{"class":915},[228,9688,7656],{"class":252},[228,9690,928],{"class":915},[228,9692,7522],{"class":252},[228,9694,928],{"class":915},[228,9696,7665],{"class":252},[228,9698,928],{"class":915},[228,9700,7408],{"class":252},[228,9702,916],{"class":915},[228,9704,7498],{"class":252},[228,9706,928],{"class":915},[228,9708,9709],{"class":252},"wi-timer-text",[228,9711,928],{"class":915},[228,9713,5360],{"class":252},[228,9715,916],{"class":915},[228,9717,9718],{"class":252},"            \u003Cspan class=",[228,9720,928],{"class":915},[228,9722,9723],{"class":252},"wi-timer-label",[228,9725,928],{"class":915},[228,9727,9728],{"class":252},">TARGET TIME\u003C\u002Fspan>",[228,9730,916],{"class":915},[228,9732,9718],{"class":252},[228,9734,928],{"class":915},[228,9736,9737],{"class":252},"wi-timer-value",[228,9739,928],{"class":915},[228,9741,9742],{"class":252},">{{ currentStep?.estimatedTime ?? '—' }}s\u003C\u002Fspan>",[228,9744,916],{"class":915},[228,9746,7541],{"class":252},[228,9748,916],{"class":915},[228,9750,9751],{"class":252},"        \u003C\u002Fdiv>",[228,9753,916],{"class":915},[228,9755,7336],{"class":252},[228,9757,916],{"class":915},[228,9759,7427],{"class":252},[228,9761,922],{"class":915},[228,9763,9764],{"class":252},"    \u003C!-- Step progress -->",[228,9766,916],{"class":915},[228,9768,9769],{"class":252},"    \u003Cv-card flat class=",[228,9771,928],{"class":915},[228,9773,9774],{"class":252},"wi-card wi-stepper-card",[228,9776,928],{"class":915},[228,9778,5360],{"class":252},[228,9780,916],{"class":915},[228,9782,7293],{"class":252},[228,9784,928],{"class":915},[228,9786,9787],{"class":252},"wi-stepper-head",[228,9789,928],{"class":915},[228,9791,5360],{"class":252},[228,9793,916],{"class":915},[228,9795,7307],{"class":252},[228,9797,928],{"class":915},[228,9799,9800],{"class":252},"wi-step-count",[228,9802,928],{"class":915},[228,9804,5360],{"class":252},[228,9806,916],{"class":915},[228,9808,9809],{"class":252},"          STEP {{ (currentIndex + 1) }} OF {{ steps.length }}",[228,9811,916],{"class":915},[228,9813,9649],{"class":252},[228,9815,916],{"class":915},[228,9817,7307],{"class":252},[228,9819,928],{"class":915},[228,9821,9822],{"class":252},"wi-step-percent",[228,9824,928],{"class":915},[228,9826,9827],{"class":252},">{{ progressPercent }}% COMPLETE\u003C\u002Fspan>",[228,9829,916],{"class":915},[228,9831,7336],{"class":252},[228,9833,916],{"class":915},[228,9835,9836],{"class":252},"      \u003Cv-progress-linear :model-value=",[228,9838,928],{"class":915},[228,9840,9841],{"class":252},"progressPercent",[228,9843,928],{"class":915},[228,9845,8124],{"class":252},[228,9847,928],{"class":915},[228,9849,8129],{"class":252},[228,9851,928],{"class":915},[228,9853,9854],{"class":252}," height=",[228,9856,928],{"class":915},[228,9858,9859],{"class":252},"8",[228,9861,928],{"class":915},[228,9863,9864],{"class":252}," rounded>\u003C\u002Fv-progress-linear>",[228,9866,916],{"class":915},[228,9868,9869],{"class":252},"    \u003C\u002Fv-card>",[228,9871,922],{"class":915},[228,9873,9874],{"class":252},"    \u003C!-- Main instruction pane: image left, instruction + checklist right -->",[228,9876,916],{"class":915},[228,9878,9769],{"class":252},[228,9880,928],{"class":915},[228,9882,9883],{"class":252},"wi-card wi-card-instruction",[228,9885,928],{"class":915},[228,9887,5360],{"class":252},[228,9889,916],{"class":915},[228,9891,7293],{"class":252},[228,9893,928],{"class":915},[228,9895,9896],{"class":252},"wi-instruction-flex",[228,9898,928],{"class":915},[228,9900,5360],{"class":252},[228,9902,916],{"class":915},[228,9904,9905],{"class":252},"        \u003C!-- Reference image (left) -->",[228,9907,916],{"class":915},[228,9909,9670],{"class":252},[228,9911,928],{"class":915},[228,9913,9914],{"class":252},"wi-img-col",[228,9916,928],{"class":915},[228,9918,5360],{"class":252},[228,9920,916],{"class":915},[228,9922,7498],{"class":252},[228,9924,928],{"class":915},[228,9926,9927],{"class":252},"wi-image-wrap",[228,9929,928],{"class":915},[228,9931,5360],{"class":252},[228,9933,916],{"class":915},[228,9935,9936],{"class":252},"            \u003Cimg",[228,9938,916],{"class":915},[228,9940,9941],{"class":252},"              :src=",[228,9943,928],{"class":915},[228,9945,9946],{"class":252},"stepImage",[228,9948,987],{"class":915},[228,9950,9951],{"class":252},"              :alt=",[228,9953,928],{"class":915},[228,9955,9956],{"class":252},"currentStep?.title",[228,9958,987],{"class":915},[228,9960,9961],{"class":252},"              class=",[228,9963,928],{"class":915},[228,9965,9966],{"class":252},"wi-image",[228,9968,987],{"class":915},[228,9970,9971],{"class":252},"              @error=",[228,9973,928],{"class":915},[228,9975,9976],{"class":252},"onImageError",[228,9978,987],{"class":915},[228,9980,9981],{"class":252},"            \u002F>",[228,9983,916],{"class":915},[228,9985,7541],{"class":252},[228,9987,916],{"class":915},[228,9989,9751],{"class":252},[228,9991,922],{"class":915},[228,9993,9994],{"class":252},"        \u003C!-- Instruction + checklist (right) -->",[228,9996,916],{"class":915},[228,9998,9670],{"class":252},[228,10000,928],{"class":915},[228,10002,10003],{"class":252},"wi-text-col",[228,10005,928],{"class":915},[228,10007,5360],{"class":252},[228,10009,916],{"class":915},[228,10011,7498],{"class":252},[228,10013,928],{"class":915},[228,10015,7503],{"class":252},[228,10017,928],{"class":915},[228,10019,5360],{"class":252},[228,10021,916],{"class":915},[228,10023,7512],{"class":252},[228,10025,928],{"class":915},[228,10027,7591],{"class":252},[228,10029,928],{"class":915},[228,10031,7522],{"class":252},[228,10033,928],{"class":915},[228,10035,10036],{"class":252},"20",[228,10038,928],{"class":915},[228,10040,7408],{"class":252},[228,10042,916],{"class":915},[228,10044,10045],{"class":252},"            \u003Cspan>INSTRUCTION\u003C\u002Fspan>",[228,10047,916],{"class":915},[228,10049,7541],{"class":252},[228,10051,916],{"class":915},[228,10053,7498],{"class":252},[228,10055,928],{"class":915},[228,10057,10058],{"class":252},"wi-step-title",[228,10060,928],{"class":915},[228,10062,10063],{"class":252},">{{ currentStep?.title ?? '—' }}\u003C\u002Fdiv>",[228,10065,916],{"class":915},[228,10067,10068],{"class":252},"          \u003Cp class=",[228,10070,928],{"class":915},[228,10072,10073],{"class":252},"wi-step-instruction",[228,10075,928],{"class":915},[228,10077,10078],{"class":252},">{{ currentStep?.instruction ?? '' }}\u003C\u002Fp>",[228,10080,922],{"class":915},[228,10082,7498],{"class":252},[228,10084,928],{"class":915},[228,10086,10087],{"class":252},"wi-card-head wi-checklist-head",[228,10089,928],{"class":915},[228,10091,5360],{"class":252},[228,10093,916],{"class":915},[228,10095,7512],{"class":252},[228,10097,928],{"class":915},[228,10099,10100],{"class":252},"mdi-format-list-checks",[228,10102,928],{"class":915},[228,10104,7522],{"class":252},[228,10106,928],{"class":915},[228,10108,10036],{"class":252},[228,10110,928],{"class":915},[228,10112,7408],{"class":252},[228,10114,916],{"class":915},[228,10116,10117],{"class":252},"            \u003Cspan>CHECKLIST\u003C\u002Fspan>",[228,10119,916],{"class":915},[228,10121,7541],{"class":252},[228,10123,916],{"class":915},[228,10125,7498],{"class":252},[228,10127,928],{"class":915},[228,10129,10130],{"class":252},"wi-checklist",[228,10132,928],{"class":915},[228,10134,5360],{"class":252},[228,10136,916],{"class":915},[228,10138,10139],{"class":252},"            \u003Clabel",[228,10141,916],{"class":915},[228,10143,10144],{"class":252},"              v-for=",[228,10146,928],{"class":915},[228,10148,10149],{"class":252},"(item, i) in (currentStep?.checklist ?? [])",[228,10151,987],{"class":915},[228,10153,10154],{"class":252},"              :key=",[228,10156,928],{"class":915},[228,10158,10159],{"class":252},"i",[228,10161,987],{"class":915},[228,10163,9961],{"class":252},[228,10165,928],{"class":915},[228,10167,10168],{"class":252},"wi-check-row",[228,10170,987],{"class":915},[228,10172,10173],{"class":252},"              :class=",[228,10175,928],{"class":915},[228,10177,10178],{"class":252},"{ 'wi-check-row-done': checkedState[i] }",[228,10180,987],{"class":915},[228,10182,10183],{"class":252},"            >",[228,10185,916],{"class":915},[228,10187,10188],{"class":252},"              \u003Cv-checkbox-btn",[228,10190,916],{"class":915},[228,10192,10193],{"class":252},"                :model-value=",[228,10195,928],{"class":915},[228,10197,10198],{"class":252},"checkedState[i]",[228,10200,987],{"class":915},[228,10202,10203],{"class":252},"                color=",[228,10205,928],{"class":915},[228,10207,8129],{"class":252},[228,10209,987],{"class":915},[228,10211,10212],{"class":252},"                density=",[228,10214,928],{"class":915},[228,10216,10217],{"class":252},"comfortable",[228,10219,987],{"class":915},[228,10221,10222],{"class":252},"                @update:model-value=",[228,10224,928],{"class":915},[228,10226,10227],{"class":252},"toggleCheck(i)",[228,10229,987],{"class":915},[228,10231,10232],{"class":252},"              >\u003C\u002Fv-checkbox-btn>",[228,10234,916],{"class":915},[228,10236,10237],{"class":252},"              \u003Cspan>{{ item }}\u003C\u002Fspan>",[228,10239,916],{"class":915},[228,10241,10242],{"class":252},"            \u003C\u002Flabel>",[228,10244,916],{"class":915},[228,10246,7541],{"class":252},[228,10248,916],{"class":915},[228,10250,9751],{"class":252},[228,10252,916],{"class":915},[228,10254,7336],{"class":252},[228,10256,916],{"class":915},[228,10258,9869],{"class":252},[228,10260,922],{"class":915},[228,10262,10263],{"class":252},"    \u003C!-- Controls -->",[228,10265,916],{"class":915},[228,10267,7432],{"class":252},[228,10269,928],{"class":915},[228,10271,10272],{"class":252},"wi-controls",[228,10274,928],{"class":915},[228,10276,5360],{"class":252},[228,10278,916],{"class":915},[228,10280,7451],{"class":252},[228,10282,928],{"class":915},[228,10284,7456],{"class":252},[228,10286,928],{"class":915},[228,10288,7901],{"class":252},[228,10290,928],{"class":915},[228,10292,10293],{"class":252},"3",[228,10295,928],{"class":915},[228,10297,7384],{"class":252},[228,10299,928],{"class":915},[228,10301,10302],{"class":252},"wi-ctrl-col",[228,10304,928],{"class":915},[228,10306,5360],{"class":252},[228,10308,916],{"class":915},[228,10310,10311],{"class":252},"        \u003Cv-btn block size=",[228,10313,928],{"class":915},[228,10315,8119],{"class":252},[228,10317,928],{"class":915},[228,10319,7364],{"class":252},[228,10321,928],{"class":915},[228,10323,10324],{"class":252},"outlined",[228,10326,928],{"class":915},[228,10328,8124],{"class":252},[228,10330,928],{"class":915},[228,10332,10333],{"class":252},"blue-grey-darken-1",[228,10335,928],{"class":915},[228,10337,7384],{"class":252},[228,10339,928],{"class":915},[228,10341,10342],{"class":252},"wi-nav-btn",[228,10344,987],{"class":915},[228,10346,10347],{"class":252},"          :disabled=",[228,10349,928],{"class":915},[228,10351,10352],{"class":252},"currentIndex === 0",[228,10354,928],{"class":915},[228,10356,10357],{"class":252}," @click=",[228,10359,928],{"class":915},[228,10361,10362],{"class":252},"prevStep",[228,10364,928],{"class":915},[228,10366,5360],{"class":252},[228,10368,916],{"class":915},[228,10370,7398],{"class":252},[228,10372,928],{"class":915},[228,10374,10375],{"class":252},"mdi-chevron-left",[228,10377,928],{"class":915},[228,10379,7522],{"class":252},[228,10381,928],{"class":915},[228,10383,10384],{"class":252},"30",[228,10386,928],{"class":915},[228,10388,7408],{"class":252},[228,10390,916],{"class":915},[228,10392,10393],{"class":252},"          PREVIOUS",[228,10395,916],{"class":915},[228,10397,10398],{"class":252},"        \u003C\u002Fv-btn>",[228,10400,916],{"class":915},[228,10402,7740],{"class":252},[228,10404,922],{"class":915},[228,10406,7451],{"class":252},[228,10408,928],{"class":915},[228,10410,7456],{"class":252},[228,10412,928],{"class":915},[228,10414,7901],{"class":252},[228,10416,928],{"class":915},[228,10418,10293],{"class":252},[228,10420,928],{"class":915},[228,10422,7384],{"class":252},[228,10424,928],{"class":915},[228,10426,10302],{"class":252},[228,10428,928],{"class":915},[228,10430,5360],{"class":252},[228,10432,916],{"class":915},[228,10434,10311],{"class":252},[228,10436,928],{"class":915},[228,10438,8119],{"class":252},[228,10440,928],{"class":915},[228,10442,7364],{"class":252},[228,10444,928],{"class":915},[228,10446,7369],{"class":252},[228,10448,928],{"class":915},[228,10450,8124],{"class":252},[228,10452,928],{"class":915},[228,10454,10455],{"class":252},"red-darken-1",[228,10457,928],{"class":915},[228,10459,7384],{"class":252},[228,10461,928],{"class":915},[228,10463,10342],{"class":252},[228,10465,928],{"class":915},[228,10467,10357],{"class":252},[228,10469,928],{"class":915},[228,10471,10472],{"class":252},"reportDefect",[228,10474,928],{"class":915},[228,10476,5360],{"class":252},[228,10478,916],{"class":915},[228,10480,7398],{"class":252},[228,10482,928],{"class":915},[228,10484,10485],{"class":252},"mdi-alert-octagon-outline",[228,10487,928],{"class":915},[228,10489,7522],{"class":252},[228,10491,928],{"class":915},[228,10493,10494],{"class":252},"28",[228,10496,928],{"class":915},[228,10498,7408],{"class":252},[228,10500,916],{"class":915},[228,10502,10503],{"class":252},"          REPORT ISSUE",[228,10505,916],{"class":915},[228,10507,10398],{"class":252},[228,10509,916],{"class":915},[228,10511,7740],{"class":252},[228,10513,922],{"class":915},[228,10515,7451],{"class":252},[228,10517,928],{"class":915},[228,10519,7456],{"class":252},[228,10521,928],{"class":915},[228,10523,7901],{"class":252},[228,10525,928],{"class":915},[228,10527,10528],{"class":252},"6",[228,10530,928],{"class":915},[228,10532,7384],{"class":252},[228,10534,928],{"class":915},[228,10536,10302],{"class":252},[228,10538,928],{"class":915},[228,10540,5360],{"class":252},[228,10542,916],{"class":915},[228,10544,10311],{"class":252},[228,10546,928],{"class":915},[228,10548,8119],{"class":252},[228,10550,928],{"class":915},[228,10552,7364],{"class":252},[228,10554,928],{"class":915},[228,10556,7369],{"class":252},[228,10558,928],{"class":915},[228,10560,10561],{"class":252}," :color=",[228,10563,928],{"class":915},[228,10565,10566],{"class":252},"isLastStep ? 'green-darken-2' : 'green-darken-1'",[228,10568,987],{"class":915},[228,10570,10571],{"class":252},"          class=",[228,10573,928],{"class":915},[228,10575,10576],{"class":252},"wi-nav-btn wi-next-btn",[228,10578,928],{"class":915},[228,10580,8143],{"class":252},[228,10582,928],{"class":915},[228,10584,10585],{"class":252},"!allChecked",[228,10587,928],{"class":915},[228,10589,10357],{"class":252},[228,10591,928],{"class":915},[228,10593,10594],{"class":252},"nextStep",[228,10596,928],{"class":915},[228,10598,5360],{"class":252},[228,10600,916],{"class":915},[228,10602,10603],{"class":252},"          \u003Cv-icon start :icon=",[228,10605,928],{"class":915},[228,10607,10608],{"class":252},"isLastStep ? 'mdi-check-circle' : 'mdi-chevron-right'",[228,10610,928],{"class":915},[228,10612,7522],{"class":252},[228,10614,928],{"class":915},[228,10616,10384],{"class":252},[228,10618,928],{"class":915},[228,10620,7408],{"class":252},[228,10622,916],{"class":915},[228,10624,10625],{"class":252},"          {{ isLastStep ? 'COMPLETE OPERATION' : 'NEXT STEP' }}",[228,10627,916],{"class":915},[228,10629,10398],{"class":252},[228,10631,916],{"class":915},[228,10633,7740],{"class":252},[228,10635,916],{"class":915},[228,10637,8104],{"class":252},[228,10639,922],{"class":915},[228,10641,10642],{"class":252},"    \u003Cdiv v-if=",[228,10644,928],{"class":915},[228,10646,10585],{"class":252},[228,10648,928],{"class":915},[228,10650,7384],{"class":252},[228,10652,928],{"class":915},[228,10654,10655],{"class":252},"wi-hint",[228,10657,928],{"class":915},[228,10659,5360],{"class":252},[228,10661,916],{"class":915},[228,10663,10664],{"class":252},"      \u003Cv-icon icon=",[228,10666,928],{"class":915},[228,10668,10669],{"class":252},"mdi-information-outline",[228,10671,928],{"class":915},[228,10673,7522],{"class":252},[228,10675,928],{"class":915},[228,10677,8054],{"class":252},[228,10679,928],{"class":915},[228,10681,7408],{"class":252},[228,10683,916],{"class":915},[228,10685,10686],{"class":252},"      Complete all checklist items to continue.",[228,10688,916],{"class":915},[228,10690,7427],{"class":252},[228,10692,916],{"class":915},[228,10694,8200],{"class":252},[228,10696,916],{"class":915},[228,10698,8205],{"class":252},[228,10700,922],{"class":915},[228,10702,8210],{"class":252},[228,10704,916],{"class":915},[228,10706,8215],{"class":252},[228,10708,916],{"class":915},[228,10710,10711],{"class":252},"  data () {",[228,10713,916],{"class":915},[228,10715,10716],{"class":252},"    return {",[228,10718,916],{"class":915},[228,10720,10721],{"class":252},"      currentIndex: 0,",[228,10723,916],{"class":915},[228,10725,10726],{"class":252},"      checked: {},",[228,10728,916],{"class":915},[228,10730,10731],{"class":252},"      assetBase: '\u002Fassets\u002F',",[228,10733,916],{"class":915},[228,10735,10736],{"class":252},"      placeholder: 'https:\u002F\u002Fplacehold.co\u002F800x600\u002Feef2f7\u002F475569?text=Step+Reference',",[228,10738,916],{"class":915},[228,10740,10741],{"class":252},"      instruction: null",[228,10743,916],{"class":915},[228,10745,3695],{"class":252},[228,10747,916],{"class":915},[228,10749,10750],{"class":252},"  },",[228,10752,916],{"class":915},[228,10754,8220],{"class":252},[228,10756,916],{"class":915},[228,10758,10759],{"class":252},"    payload () {",[228,10761,916],{"class":915},[228,10763,10764],{"class":252},"      return this.instruction ?? {}",[228,10766,916],{"class":915},[228,10768,3472],{"class":252},[228,10770,916],{"class":915},[228,10772,10773],{"class":252},"    steps () {",[228,10775,916],{"class":915},[228,10777,10778],{"class":252},"      return this.instruction?.steps ?? []",[228,10780,916],{"class":915},[228,10782,3472],{"class":252},[228,10784,916],{"class":915},[228,10786,10787],{"class":252},"    currentStep () {",[228,10789,916],{"class":915},[228,10791,10792],{"class":252},"      return this.steps[this.currentIndex] ?? null",[228,10794,916],{"class":915},[228,10796,3472],{"class":252},[228,10798,916],{"class":915},[228,10800,10801],{"class":252},"    isLastStep () {",[228,10803,916],{"class":915},[228,10805,10806],{"class":252},"      return this.currentIndex === this.steps.length - 1",[228,10808,916],{"class":915},[228,10810,3472],{"class":252},[228,10812,916],{"class":915},[228,10814,10815],{"class":252},"    progressPercent () {",[228,10817,916],{"class":915},[228,10819,10820],{"class":252},"      if (!this.steps.length) return 0",[228,10822,916],{"class":915},[228,10824,10825],{"class":252},"      return Math.round((this.currentIndex \u002F this.steps.length) * 100)",[228,10827,916],{"class":915},[228,10829,3472],{"class":252},[228,10831,916],{"class":915},[228,10833,10834],{"class":252},"    checkedState () {",[228,10836,916],{"class":915},[228,10838,10839],{"class":252},"      return this.checked[this.currentIndex] ?? []",[228,10841,916],{"class":915},[228,10843,3472],{"class":252},[228,10845,916],{"class":915},[228,10847,10848],{"class":252},"    allChecked () {",[228,10850,916],{"class":915},[228,10852,10853],{"class":252},"      const list = this.currentStep?.checklist ?? []",[228,10855,916],{"class":915},[228,10857,10858],{"class":252},"      if (!list.length) return true",[228,10860,916],{"class":915},[228,10862,10863],{"class":252},"      const state = this.checkedState",[228,10865,916],{"class":915},[228,10867,10868],{"class":252},"      return list.every((_, i) => state[i])",[228,10870,916],{"class":915},[228,10872,3472],{"class":252},[228,10874,916],{"class":915},[228,10876,10877],{"class":252},"    stepImage () {",[228,10879,916],{"class":915},[228,10881,10882],{"class":252},"      return this.resolveImage(this.currentStep?.image)",[228,10884,916],{"class":915},[228,10886,3695],{"class":252},[228,10888,916],{"class":915},[228,10890,10750],{"class":252},[228,10892,916],{"class":915},[228,10894,10895],{"class":252},"  methods: {",[228,10897,916],{"class":915},[228,10899,10900],{"class":252},"    resolveImage (img) {",[228,10902,916],{"class":915},[228,10904,10905],{"class":252},"      if (!img) return this.placeholder",[228,10907,916],{"class":915},[228,10909,10910],{"class":252},"      if (\u002F^https?:",[228,10912,10913],{"class":915},"\\\\",[228,10915,10916],{"class":252},"\u002F",[228,10918,10913],{"class":915},[228,10920,10921],{"class":252},"\u002F\u002F.test(img) || img.startsWith('\u002F')) return img",[228,10923,916],{"class":915},[228,10925,10926],{"class":252},"      return this.assetBase + img",[228,10928,916],{"class":915},[228,10930,3472],{"class":252},[228,10932,916],{"class":915},[228,10934,10935],{"class":252},"    preloadImages () {",[228,10937,916],{"class":915},[228,10939,10940],{"class":252},"      for (const step of this.steps) {",[228,10942,916],{"class":915},[228,10944,10945],{"class":252},"        const url = this.resolveImage(step?.image)",[228,10947,916],{"class":915},[228,10949,10950],{"class":252},"        if (url && url !== this.placeholder) {",[228,10952,916],{"class":915},[228,10954,10955],{"class":252},"          const im = new Image()",[228,10957,916],{"class":915},[228,10959,10960],{"class":252},"          im.src = url",[228,10962,916],{"class":915},[228,10964,4056],{"class":252},[228,10966,916],{"class":915},[228,10968,10969],{"class":252},"      }",[228,10971,916],{"class":915},[228,10973,3472],{"class":252},[228,10975,916],{"class":915},[228,10977,10978],{"class":252},"    saveStep () {",[228,10980,916],{"class":915},[228,10982,10983],{"class":252},"      this.send({",[228,10985,916],{"class":915},[228,10987,10988],{"class":252},"        payload: {",[228,10990,916],{"class":915},[228,10992,10993],{"class":252},"          action: 'save_step',",[228,10995,916],{"class":915},[228,10997,10998],{"class":252},"          stepIndex: this.currentIndex,",[228,11000,916],{"class":915},[228,11002,11003],{"class":252},"          stepName: this.currentStep?.title ?? null,",[228,11005,916],{"class":915},[228,11007,11008],{"class":252},"          stepId: this.currentStep?.stepId ?? null",[228,11010,916],{"class":915},[228,11012,4056],{"class":252},[228,11014,916],{"class":915},[228,11016,11017],{"class":252},"      })",[228,11019,916],{"class":915},[228,11021,3472],{"class":252},[228,11023,916],{"class":915},[228,11025,11026],{"class":252},"    toggleCheck (i) {",[228,11028,916],{"class":915},[228,11030,11031],{"class":252},"      const arr = (this.checked[this.currentIndex] ?? []).slice()",[228,11033,916],{"class":915},[228,11035,11036],{"class":252},"      arr[i] = !arr[i]",[228,11038,916],{"class":915},[228,11040,11041],{"class":252},"      this.checked = { ...this.checked, [this.currentIndex]: arr }",[228,11043,916],{"class":915},[228,11045,3472],{"class":252},[228,11047,916],{"class":915},[228,11049,11050],{"class":252},"    onImageError (e) {",[228,11052,916],{"class":915},[228,11054,11055],{"class":252},"      if (e?.target && e.target.src !== this.placeholder) {",[228,11057,916],{"class":915},[228,11059,11060],{"class":252},"        e.target.src = this.placeholder",[228,11062,916],{"class":915},[228,11064,10969],{"class":252},[228,11066,916],{"class":915},[228,11068,3472],{"class":252},[228,11070,916],{"class":915},[228,11072,11073],{"class":252},"    goToStep (i) {",[228,11075,916],{"class":915},[228,11077,11078],{"class":252},"      const max = this.steps.length - 1",[228,11080,916],{"class":915},[228,11082,11083],{"class":252},"      this.currentIndex = Math.min(Math.max(i, 0), Math.max(max, 0))",[228,11085,916],{"class":915},[228,11087,11088],{"class":252},"      this.saveStep()",[228,11090,916],{"class":915},[228,11092,3472],{"class":252},[228,11094,916],{"class":915},[228,11096,11097],{"class":252},"    nextStep () {",[228,11099,916],{"class":915},[228,11101,11102],{"class":252},"      if (this.isLastStep) {",[228,11104,916],{"class":915},[228,11106,11107],{"class":252},"        this.send({ payload: { action: 'complete_operation', stepIndex: this.currentIndex } })",[228,11109,916],{"class":915},[228,11111,5445],{"class":252},[228,11113,916],{"class":915},[228,11115,10969],{"class":252},[228,11117,916],{"class":915},[228,11119,11120],{"class":252},"      this.goToStep(this.currentIndex + 1)",[228,11122,916],{"class":915},[228,11124,3472],{"class":252},[228,11126,916],{"class":915},[228,11128,11129],{"class":252},"    prevStep () {",[228,11131,916],{"class":915},[228,11133,11134],{"class":252},"      if (this.currentIndex === 0) return",[228,11136,916],{"class":915},[228,11138,11139],{"class":252},"      this.goToStep(this.currentIndex - 1)",[228,11141,916],{"class":915},[228,11143,3472],{"class":252},[228,11145,916],{"class":915},[228,11147,11148],{"class":252},"    reportDefect () {",[228,11150,916],{"class":915},[228,11152,10983],{"class":252},[228,11154,916],{"class":915},[228,11156,10988],{"class":252},[228,11158,916],{"class":915},[228,11160,11161],{"class":252},"          action: 'Report Issue',",[228,11163,916],{"class":915},[228,11165,4056],{"class":252},[228,11167,916],{"class":915},[228,11169,11017],{"class":252},[228,11171,916],{"class":915},[228,11173,3695],{"class":252},[228,11175,916],{"class":915},[228,11177,10750],{"class":252},[228,11179,916],{"class":915},[228,11181,11182],{"class":252},"  watch: {",[228,11184,916],{"class":915},[228,11186,11187],{"class":252},"    msg: {",[228,11189,916],{"class":915},[228,11191,11192],{"class":252},"      immediate: true,",[228,11194,916],{"class":915},[228,11196,11197],{"class":252},"      handler (m) {",[228,11199,916],{"class":915},[228,11201,11202],{"class":252},"        const pl = m?.payload",[228,11204,916],{"class":915},[228,11206,11207],{"class":252},"        if (!pl) return",[228,11209,916],{"class":915},[228,11211,11212],{"class":252},"        if (Array.isArray(pl.steps)) {",[228,11214,916],{"class":915},[228,11216,11217],{"class":252},"          \u002F\u002F Instruction-set data: cache it so later messages can't wipe it.",[228,11219,916],{"class":915},[228,11221,11222],{"class":252},"          this.instruction = pl",[228,11224,916],{"class":915},[228,11226,11227],{"class":252},"          \u002F\u002F Preload every step image so navigation is instant.",[228,11229,916],{"class":915},[228,11231,11232],{"class":252},"          this.$nextTick(() => this.preloadImages())",[228,11234,916],{"class":915},[228,11236,11237],{"class":252},"        } else if (typeof pl.stepIndex === 'number') {",[228,11239,916],{"class":915},[228,11241,11242],{"class":252},"          \u002F\u002F Resume reply from the tracker: jump to the saved step.",[228,11244,916],{"class":915},[228,11246,11247],{"class":252},"          this.currentIndex = Math.min(",[228,11249,916],{"class":915},[228,11251,11252],{"class":252},"            Math.max(pl.stepIndex, 0),",[228,11254,916],{"class":915},[228,11256,11257],{"class":252},"            Math.max(this.steps.length - 1, 0)",[228,11259,916],{"class":915},[228,11261,11262],{"class":252},"          )",[228,11264,916],{"class":915},[228,11266,4056],{"class":252},[228,11268,916],{"class":915},[228,11270,10969],{"class":252},[228,11272,916],{"class":915},[228,11274,3695],{"class":252},[228,11276,916],{"class":915},[228,11278,10750],{"class":252},[228,11280,916],{"class":915},[228,11282,11283],{"class":252},"  mounted () {",[228,11285,916],{"class":915},[228,11287,11288],{"class":252},"    \u002F\u002F Ask the tracker which step this work order was left on.",[228,11290,916],{"class":915},[228,11292,11293],{"class":252},"    this.send({ payload: { action: 'load_step' } })",[228,11295,916],{"class":915},[228,11297,8254],{"class":252},[228,11299,916],{"class":915},[228,11301,1575],{"class":252},[228,11303,916],{"class":915},[228,11305,8263],{"class":252},[228,11307,922],{"class":915},[228,11309,8268],{"class":252},[228,11311,916],{"class":915},[228,11313,8273],{"class":252},[228,11315,916],{"class":915},[228,11317,8278],{"class":252},[228,11319,916],{"class":915},[228,11321,8283],{"class":252},[228,11323,916],{"class":915},[228,11325,11326],{"class":252},"    padding: 2px;",[228,11328,916],{"class":915},[228,11330,8254],{"class":252},[228,11332,922],{"class":915},[228,11334,11335],{"class":252},"  \u002F* Header *\u002F",[228,11337,916],{"class":915},[228,11339,8297],{"class":252},[228,11341,916],{"class":915},[228,11343,8302],{"class":252},[228,11345,916],{"class":915},[228,11347,8307],{"class":252},[228,11349,916],{"class":915},[228,11351,8312],{"class":252},[228,11353,916],{"class":915},[228,11355,8317],{"class":252},[228,11357,916],{"class":915},[228,11359,8322],{"class":252},[228,11361,916],{"class":915},[228,11363,8327],{"class":252},[228,11365,916],{"class":915},[228,11367,8332],{"class":252},[228,11369,916],{"class":915},[228,11371,8337],{"class":252},[228,11373,916],{"class":915},[228,11375,8342],{"class":252},[228,11377,916],{"class":915},[228,11379,11380],{"class":252},"    padding: 10px 16px;",[228,11382,916],{"class":915},[228,11384,11385],{"class":252},"    margin-bottom: 10px;",[228,11387,916],{"class":915},[228,11389,8254],{"class":252},[228,11391,922],{"class":915},[228,11393,8361],{"class":252},[228,11395,916],{"class":915},[228,11397,8302],{"class":252},[228,11399,916],{"class":915},[228,11401,8370],{"class":252},[228,11403,916],{"class":915},[228,11405,11406],{"class":252},"    line-height: 1.15;",[228,11408,916],{"class":915},[228,11410,8254],{"class":252},[228,11412,922],{"class":915},[228,11414,11415],{"class":252},"  .wi-op-label {",[228,11417,916],{"class":915},[228,11419,8758],{"class":252},[228,11421,916],{"class":915},[228,11423,8394],{"class":252},[228,11425,916],{"class":915},[228,11427,8399],{"class":252},[228,11429,916],{"class":915},[228,11431,8404],{"class":252},[228,11433,916],{"class":915},[228,11435,8254],{"class":252},[228,11437,922],{"class":915},[228,11439,11440],{"class":252},"  .wi-op-name {",[228,11442,916],{"class":915},[228,11444,11445],{"class":252},"    font-size: 21px;",[228,11447,916],{"class":915},[228,11449,8423],{"class":252},[228,11451,916],{"class":915},[228,11453,8428],{"class":252},[228,11455,916],{"class":915},[228,11457,8254],{"class":252},[228,11459,922],{"class":915},[228,11461,11462],{"class":252},"  .wi-op-sub {",[228,11464,916],{"class":915},[228,11466,8389],{"class":252},[228,11468,916],{"class":915},[228,11470,11471],{"class":252},"    color: #94a3b8;",[228,11473,916],{"class":915},[228,11475,8843],{"class":252},[228,11477,916],{"class":915},[228,11479,11480],{"class":252},"    margin-top: 2px;",[228,11482,916],{"class":915},[228,11484,8254],{"class":252},[228,11486,922],{"class":915},[228,11488,11489],{"class":252},"  .wi-timer {",[228,11491,916],{"class":915},[228,11493,8302],{"class":252},[228,11495,916],{"class":915},[228,11497,8307],{"class":252},[228,11499,916],{"class":915},[228,11501,8451],{"class":252},[228,11503,916],{"class":915},[228,11505,11506],{"class":252},"    padding: 8px 14px;",[228,11508,916],{"class":915},[228,11510,8342],{"class":252},[228,11512,916],{"class":915},[228,11514,8712],{"class":252},[228,11516,916],{"class":915},[228,11518,8428],{"class":252},[228,11520,916],{"class":915},[228,11522,8254],{"class":252},[228,11524,922],{"class":915},[228,11526,11527],{"class":252},"  .wi-timer-text {",[228,11529,916],{"class":915},[228,11531,8302],{"class":252},[228,11533,916],{"class":915},[228,11535,8370],{"class":252},[228,11537,916],{"class":915},[228,11539,8375],{"class":252},[228,11541,916],{"class":915},[228,11543,8254],{"class":252},[228,11545,922],{"class":915},[228,11547,11548],{"class":252},"  .wi-timer-label {",[228,11550,916],{"class":915},[228,11552,11553],{"class":252},"    font-size: 10px;",[228,11555,916],{"class":915},[228,11557,8763],{"class":252},[228,11559,916],{"class":915},[228,11561,8404],{"class":252},[228,11563,916],{"class":915},[228,11565,11566],{"class":252},"    opacity: 0.75;",[228,11568,916],{"class":915},[228,11570,8254],{"class":252},[228,11572,922],{"class":915},[228,11574,11575],{"class":252},"  .wi-timer-value {",[228,11577,916],{"class":915},[228,11579,8932],{"class":252},[228,11581,916],{"class":915},[228,11583,8423],{"class":252},[228,11585,916],{"class":915},[228,11587,8433],{"class":252},[228,11589,916],{"class":915},[228,11591,8254],{"class":252},[228,11593,922],{"class":915},[228,11595,11596],{"class":252},"  \u002F* Cards *\u002F",[228,11598,916],{"class":915},[228,11600,8511],{"class":252},[228,11602,916],{"class":915},[228,11604,8516],{"class":252},[228,11606,916],{"class":915},[228,11608,8521],{"class":252},[228,11610,916],{"class":915},[228,11612,8526],{"class":252},[228,11614,916],{"class":915},[228,11616,11617],{"class":252},"    padding: 14px 18px !important;",[228,11619,916],{"class":915},[228,11621,8536],{"class":252},[228,11623,916],{"class":915},[228,11625,11626],{"class":252},"    box-sizing: border-box;",[228,11628,916],{"class":915},[228,11630,8254],{"class":252},[228,11632,922],{"class":915},[228,11634,8573],{"class":252},[228,11636,916],{"class":915},[228,11638,8302],{"class":252},[228,11640,916],{"class":915},[228,11642,8307],{"class":252},[228,11644,916],{"class":915},[228,11646,8586],{"class":252},[228,11648,916],{"class":915},[228,11650,8591],{"class":252},[228,11652,916],{"class":915},[228,11654,8394],{"class":252},[228,11656,916],{"class":915},[228,11658,8423],{"class":252},[228,11660,916],{"class":915},[228,11662,8399],{"class":252},[228,11664,916],{"class":915},[228,11666,11667],{"class":252},"    margin-bottom: 8px;",[228,11669,916],{"class":915},[228,11671,8254],{"class":252},[228,11673,922],{"class":915},[228,11675,11676],{"class":252},"  \u002F* Stepper (compact) *\u002F",[228,11678,916],{"class":915},[228,11680,11681],{"class":252},"  .wi-stepper-card {",[228,11683,916],{"class":915},[228,11685,11385],{"class":252},[228,11687,916],{"class":915},[228,11689,11380],{"class":252},[228,11691,916],{"class":915},[228,11693,8254],{"class":252},[228,11695,922],{"class":915},[228,11697,11698],{"class":252},"  .wi-stepper-head {",[228,11700,916],{"class":915},[228,11702,8302],{"class":252},[228,11704,916],{"class":915},[228,11706,8312],{"class":252},[228,11708,916],{"class":915},[228,11710,11711],{"class":252},"    align-items: baseline;",[228,11713,916],{"class":915},[228,11715,11667],{"class":252},[228,11717,916],{"class":915},[228,11719,8254],{"class":252},[228,11721,922],{"class":915},[228,11723,11724],{"class":252},"  .wi-step-count {",[228,11726,916],{"class":915},[228,11728,11729],{"class":252},"    font-size: 14px;",[228,11731,916],{"class":915},[228,11733,8423],{"class":252},[228,11735,916],{"class":915},[228,11737,8976],{"class":252},[228,11739,916],{"class":915},[228,11741,8428],{"class":252},[228,11743,916],{"class":915},[228,11745,8254],{"class":252},[228,11747,922],{"class":915},[228,11749,11750],{"class":252},"  .wi-step-percent {",[228,11752,916],{"class":915},[228,11754,8389],{"class":252},[228,11756,916],{"class":915},[228,11758,8404],{"class":252},[228,11760,916],{"class":915},[228,11762,8976],{"class":252},[228,11764,916],{"class":915},[228,11766,8399],{"class":252},[228,11768,916],{"class":915},[228,11770,8254],{"class":252},[228,11772,922],{"class":915},[228,11774,11775],{"class":252},"  \u002F* Instruction card *\u002F",[228,11777,916],{"class":915},[228,11779,11780],{"class":252},"  .wi-card-instruction {",[228,11782,916],{"class":915},[228,11784,11785],{"class":252},"    border-left: 5px solid #5e35b1 !important;",[228,11787,916],{"class":915},[228,11789,11790],{"class":252},"    padding: 16px 20px !important;",[228,11792,916],{"class":915},[228,11794,11626],{"class":252},[228,11796,916],{"class":915},[228,11798,8254],{"class":252},[228,11800,922],{"class":915},[228,11802,11803],{"class":252},"  \u002F* Desktop: keep the instruction card a consistent size across every step,",[228,11805,916],{"class":915},[228,11807,11808],{"class":252},"     so navigating between steps does not make the layout jump. The card",[228,11810,916],{"class":915},[228,11812,11813],{"class":252},"     still grows taller when the reference image needs more room. *\u002F",[228,11815,916],{"class":915},[228,11817,11818],{"class":252},"  @media (min-width: 701px) {",[228,11820,916],{"class":915},[228,11822,11823],{"class":252},"    .wi-card-instruction {",[228,11825,916],{"class":915},[228,11827,11828],{"class":252},"      min-height: 360px;",[228,11830,916],{"class":915},[228,11832,3695],{"class":252},[228,11834,916],{"class":915},[228,11836,8254],{"class":252},[228,11838,922],{"class":915},[228,11840,11841],{"class":252},"  .wi-step-title {",[228,11843,916],{"class":915},[228,11845,11846],{"class":252},"    font-size: 19px;",[228,11848,916],{"class":915},[228,11850,8423],{"class":252},[228,11852,916],{"class":915},[228,11854,8428],{"class":252},[228,11856,916],{"class":915},[228,11858,8608],{"class":252},[228,11860,916],{"class":915},[228,11862,11406],{"class":252},[228,11864,916],{"class":915},[228,11866,8254],{"class":252},[228,11868,922],{"class":915},[228,11870,11871],{"class":252},"  .wi-step-instruction {",[228,11873,916],{"class":915},[228,11875,11876],{"class":252},"    font-size: 15px;",[228,11878,916],{"class":915},[228,11880,11881],{"class":252},"    line-height: 1.55;",[228,11883,916],{"class":915},[228,11885,11886],{"class":252},"    color: #334155;",[228,11888,916],{"class":915},[228,11890,11891],{"class":252},"    margin: 0 0 16px;",[228,11893,916],{"class":915},[228,11895,8254],{"class":252},[228,11897,922],{"class":915},[228,11899,11900],{"class":252},"  .wi-checklist-head {",[228,11902,916],{"class":915},[228,11904,11905],{"class":252},"    margin-top: 6px;",[228,11907,916],{"class":915},[228,11909,11910],{"class":252},"    padding-top: 12px;",[228,11912,916],{"class":915},[228,11914,11915],{"class":252},"    border-top: 1px solid #edf2f7;",[228,11917,916],{"class":915},[228,11919,8254],{"class":252},[228,11921,922],{"class":915},[228,11923,11924],{"class":252},"  .wi-checklist {",[228,11926,916],{"class":915},[228,11928,8302],{"class":252},[228,11930,916],{"class":915},[228,11932,8370],{"class":252},[228,11934,916],{"class":915},[228,11936,11937],{"class":252},"    gap: 4px;",[228,11939,916],{"class":915},[228,11941,8254],{"class":252},[228,11943,922],{"class":915},[228,11945,11946],{"class":252},"  .wi-check-row {",[228,11948,916],{"class":915},[228,11950,8302],{"class":252},[228,11952,916],{"class":915},[228,11954,8307],{"class":252},[228,11956,916],{"class":915},[228,11958,11959],{"class":252},"    justify-content: flex-start;",[228,11961,916],{"class":915},[228,11963,8451],{"class":252},[228,11965,916],{"class":915},[228,11967,11968],{"class":252},"    padding: 6px 4px;",[228,11970,916],{"class":915},[228,11972,8717],{"class":252},[228,11974,916],{"class":915},[228,11976,11876],{"class":252},[228,11978,916],{"class":915},[228,11980,8843],{"class":252},[228,11982,916],{"class":915},[228,11984,8283],{"class":252},[228,11986,916],{"class":915},[228,11988,11989],{"class":252},"    cursor: pointer;",[228,11991,916],{"class":915},[228,11993,8254],{"class":252},[228,11995,922],{"class":915},[228,11997,11998],{"class":252},"  .wi-check-row>span {",[228,12000,916],{"class":915},[228,12002,12003],{"class":252},"    flex: 1;",[228,12005,916],{"class":915},[228,12007,12008],{"class":252},"    line-height: 1.35;",[228,12010,916],{"class":915},[228,12012,8254],{"class":252},[228,12014,922],{"class":915},[228,12016,12017],{"class":252},"  .wi-check-row .v-selection-control {",[228,12019,916],{"class":915},[228,12021,12022],{"class":252},"    flex: none;",[228,12024,916],{"class":915},[228,12026,12027],{"class":252},"    min-width: 0;",[228,12029,916],{"class":915},[228,12031,8254],{"class":252},[228,12033,922],{"class":915},[228,12035,12036],{"class":252},"  .wi-check-row-done>span {",[228,12038,916],{"class":915},[228,12040,11471],{"class":252},[228,12042,916],{"class":915},[228,12044,8254],{"class":252},[228,12046,922],{"class":915},[228,12048,12049],{"class":252},"  \u002F* Instruction two-column layout (plain flexbox, no Vuetify grid) *\u002F",[228,12051,916],{"class":915},[228,12053,12054],{"class":252},"  .wi-instruction-flex {",[228,12056,916],{"class":915},[228,12058,8302],{"class":252},[228,12060,916],{"class":915},[228,12062,12063],{"class":252},"    gap: 20px;",[228,12065,916],{"class":915},[228,12067,12068],{"class":252},"    align-items: stretch;",[228,12070,916],{"class":915},[228,12072,12073],{"class":252},"    width: 100%;",[228,12075,916],{"class":915},[228,12077,8536],{"class":252},[228,12079,916],{"class":915},[228,12081,8254],{"class":252},[228,12083,922],{"class":915},[228,12085,12086],{"class":252},"  .wi-img-col {",[228,12088,916],{"class":915},[228,12090,12091],{"class":252},"    flex: 0 0 40%;",[228,12093,916],{"class":915},[228,12095,8302],{"class":252},[228,12097,916],{"class":915},[228,12099,12027],{"class":252},[228,12101,916],{"class":915},[228,12103,8254],{"class":252},[228,12105,922],{"class":915},[228,12107,12108],{"class":252},"  .wi-text-col {",[228,12110,916],{"class":915},[228,12112,12113],{"class":252},"    flex: 1 1 60%;",[228,12115,916],{"class":915},[228,12117,12118],{"class":252},"    padding-top: 4px;",[228,12120,916],{"class":915},[228,12122,12027],{"class":252},[228,12124,916],{"class":915},[228,12126,8254],{"class":252},[228,12128,922],{"class":915},[228,12130,12131],{"class":252},"  \u002F* Reference image (left) *\u002F",[228,12133,916],{"class":915},[228,12135,12136],{"class":252},"  .wi-image-wrap {",[228,12138,916],{"class":915},[228,12140,8342],{"class":252},[228,12142,916],{"class":915},[228,12144,12145],{"class":252},"    overflow: hidden;",[228,12147,916],{"class":915},[228,12149,8712],{"class":252},[228,12151,916],{"class":915},[228,12153,8332],{"class":252},[228,12155,916],{"class":915},[228,12157,12073],{"class":252},[228,12159,916],{"class":915},[228,12161,8536],{"class":252},[228,12163,916],{"class":915},[228,12165,12166],{"class":252},"    min-height: 210px;",[228,12168,916],{"class":915},[228,12170,8302],{"class":252},[228,12172,916],{"class":915},[228,12174,8307],{"class":252},[228,12176,916],{"class":915},[228,12178,12179],{"class":252},"    justify-content: center;",[228,12181,916],{"class":915},[228,12183,8254],{"class":252},[228,12185,922],{"class":915},[228,12187,12188],{"class":252},"  \u002F* Desktop: image box tracks a fixed aspect ratio based on its column",[228,12190,916],{"class":915},[228,12192,12193],{"class":252},"     width, so the card height scales with the image. The text column",[228,12195,916],{"class":915},[228,12197,12198],{"class":252},"     stretches to match via align-items: stretch on the flex container. *\u002F",[228,12200,916],{"class":915},[228,12202,11818],{"class":252},[228,12204,916],{"class":915},[228,12206,12207],{"class":252},"    .wi-image-wrap {",[228,12209,916],{"class":915},[228,12211,12212],{"class":252},"      aspect-ratio: 4 \u002F 3;",[228,12214,916],{"class":915},[228,12216,12217],{"class":252},"      height: auto;",[228,12219,916],{"class":915},[228,12221,12222],{"class":252},"      align-self: flex-start;",[228,12224,916],{"class":915},[228,12226,3695],{"class":252},[228,12228,916],{"class":915},[228,12230,8254],{"class":252},[228,12232,922],{"class":915},[228,12234,12235],{"class":252},"  .wi-image {",[228,12237,916],{"class":915},[228,12239,12073],{"class":252},[228,12241,916],{"class":915},[228,12243,8536],{"class":252},[228,12245,916],{"class":915},[228,12247,12248],{"class":252},"    object-fit: contain;",[228,12250,916],{"class":915},[228,12252,8254],{"class":252},[228,12254,922],{"class":915},[228,12256,12257],{"class":252},"  @media (max-width: 700px) {",[228,12259,916],{"class":915},[228,12261,12262],{"class":252},"    .wi-instruction-flex {",[228,12264,916],{"class":915},[228,12266,12267],{"class":252},"      flex-direction: column;",[228,12269,916],{"class":915},[228,12271,3695],{"class":252},[228,12273,922],{"class":915},[228,12275,12276],{"class":252},"    .wi-img-col {",[228,12278,916],{"class":915},[228,12280,12281],{"class":252},"      flex: none;",[228,12283,916],{"class":915},[228,12285,3695],{"class":252},[228,12287,922],{"class":915},[228,12289,12207],{"class":252},[228,12291,916],{"class":915},[228,12293,12294],{"class":252},"      min-height: 150px;",[228,12296,916],{"class":915},[228,12298,3695],{"class":252},[228,12300,916],{"class":915},[228,12302,8254],{"class":252},[228,12304,922],{"class":915},[228,12306,12307],{"class":252},"  \u002F* Controls *\u002F",[228,12309,916],{"class":915},[228,12311,12312],{"class":252},"  .wi-controls {",[228,12314,916],{"class":915},[228,12316,12317],{"class":252},"    margin-top: 12px;",[228,12319,916],{"class":915},[228,12321,8488],{"class":252},[228,12323,916],{"class":915},[228,12325,8254],{"class":252},[228,12327,922],{"class":915},[228,12329,12330],{"class":252},"  .wi-ctrl-col {",[228,12332,916],{"class":915},[228,12334,12335],{"class":252},"    padding: 6px 8px;",[228,12337,916],{"class":915},[228,12339,8254],{"class":252},[228,12341,922],{"class":915},[228,12343,12344],{"class":252},"  .wi-nav-btn {",[228,12346,916],{"class":915},[228,12348,12349],{"class":252},"    height: 52px !important;",[228,12351,916],{"class":915},[228,12353,12354],{"class":252},"    font-size: 15px !important;",[228,12356,916],{"class":915},[228,12358,8469],{"class":252},[228,12360,916],{"class":915},[228,12362,8474],{"class":252},[228,12364,916],{"class":915},[228,12366,9027],{"class":252},[228,12368,916],{"class":915},[228,12370,8254],{"class":252},[228,12372,922],{"class":915},[228,12374,12375],{"class":252},"  .wi-nav-btn .v-btn__content {",[228,12377,916],{"class":915},[228,12379,8302],{"class":252},[228,12381,916],{"class":915},[228,12383,8307],{"class":252},[228,12385,916],{"class":915},[228,12387,12179],{"class":252},[228,12389,916],{"class":915},[228,12391,8254],{"class":252},[228,12393,922],{"class":915},[228,12395,12396],{"class":252},"  .wi-next-btn {",[228,12398,916],{"class":915},[228,12400,12401],{"class":252},"    font-size: 17px !important;",[228,12403,916],{"class":915},[228,12405,8254],{"class":252},[228,12407,922],{"class":915},[228,12409,12410],{"class":252},"  .wi-hint {",[228,12412,916],{"class":915},[228,12414,8302],{"class":252},[228,12416,916],{"class":915},[228,12418,8307],{"class":252},[228,12420,916],{"class":915},[228,12422,12179],{"class":252},[228,12424,916],{"class":915},[228,12426,8953],{"class":252},[228,12428,916],{"class":915},[228,12430,12431],{"class":252},"    margin-top: 8px;",[228,12433,916],{"class":915},[228,12435,11729],{"class":252},[228,12437,916],{"class":915},[228,12439,8843],{"class":252},[228,12441,916],{"class":915},[228,12443,11471],{"class":252},[228,12445,916],{"class":915},[228,12447,8254],{"class":252},[228,12449,916],{"class":915},[228,12451,9036],{"class":252},[228,12453,238],{"class":234},[228,12455,258],{"class":234},[228,12457,238],{"class":234},[228,12459,9045],{"class":241},[228,12461,238],{"class":234},[228,12463,387],{"class":234},[228,12465,238],{"class":234},[228,12467,9054],{"class":241},[228,12469,238],{"class":234},[228,12471,387],{"class":234},[228,12473,238],{"class":234},[228,12475,9063],{"class":241},[228,12477,238],{"class":234},[228,12479,387],{"class":234},[228,12481,238],{"class":234},[228,12483,9072],{"class":241},[228,12485,238],{"class":234},[228,12487,247],{"class":234},[228,12489,238],{"class":234},[228,12491,12492],{"class":252},"widget:page",[228,12494,238],{"class":234},[228,12496,258],{"class":234},[228,12498,238],{"class":234},[228,12500,9090],{"class":241},[228,12502,238],{"class":234},[228,12504,247],{"class":234},[228,12506,770],{"class":234},[228,12508,258],{"class":234},[228,12510,238],{"class":234},[228,12512,566],{"class":241},[228,12514,238],{"class":234},[228,12516,247],{"class":234},[228,12518,12519],{"class":573},"670",[228,12521,258],{"class":234},[228,12523,238],{"class":234},[228,12525,581],{"class":241},[228,12527,238],{"class":234},[228,12529,247],{"class":234},[228,12531,12532],{"class":573},"780",[228,12534,258],{"class":234},[228,12536,238],{"class":234},[228,12538,802],{"class":241},[228,12540,238],{"class":234},[228,12542,807],{"class":234},[228,12544,238],{"class":234},[228,12546,12547],{"class":252},"c67ea1f6c0580816",[228,12549,238],{"class":234},[228,12551,258],{"class":234},[228,12553,238],{"class":234},[228,12555,12556],{"class":252},"effed3f3a008aef7",[228,12558,238],{"class":234},[228,12560,816],{"class":234},[228,12562,238],{"class":234},[228,12564,242],{"class":241},[228,12566,238],{"class":234},[228,12568,247],{"class":234},[228,12570,238],{"class":234},[228,12572,12573],{"class":252},"e51561215326fafd",[228,12575,238],{"class":234},[228,12577,258],{"class":234},[228,12579,238],{"class":234},[228,12581,263],{"class":241},[228,12583,238],{"class":234},[228,12585,247],{"class":234},[228,12587,238],{"class":234},[228,12589,4748],{"class":252},[228,12591,238],{"class":234},[228,12593,258],{"class":234},[228,12595,238],{"class":234},[228,12597,4757],{"class":241},[228,12599,238],{"class":234},[228,12601,1080],{"class":234},[228,12603,238],{"class":234},[228,12605,4766],{"class":241},[228,12607,238],{"class":234},[228,12609,304],{"class":234},[228,12611,238],{"class":234},[228,12613,98],{"class":309},[228,12615,238],{"class":234},[228,12617,247],{"class":234},[228,12619,238],{"class":234},[228,12621,4783],{"class":252},[228,12623,238],{"class":234},[228,12625,4788],{"class":234},[12,12627,12628,75,12632],{},[21,12629],{"alt":12630,"src":12631},"Placeholder: Work Instruction Widget showing a step with image, checklist, and navigation controls","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Finstructions.png",[26,12633,12634],{},"The Instructions page: step image, checklist, target time, and Previous \u002F Report Issue \u002F Next controls.",[147,12636,12637],{"start":5062},[70,12638,5235,12639,12641],{},[96,12640,845],{}," node named \"Track step (save\u002Fload per user)\":",[219,12643,12645],{"className":5719,"code":12644,"language":5721,"meta":224,"style":224},"\u002F\u002F Remembers the current step per user for the active work order.\n\u002F\u002F Handles two actions from the widget:\n\u002F\u002F   save_step - persist the step the operator is on\n\u002F\u002F   load_step - reply with the saved step so the widget can resume\nconst p = msg.payload || {};\n\n\u002F\u002F Identity comes from this message's own client data first. This is what\n\u002F\u002F keeps two operators using the widget at the same time from reading or\n\u002F\u002F writing each other's progress.\nconst username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\nif (!username) return null;\n\n\u002F\u002F Read the user's saved state\nconst userState = global.get(username, \"persistent\") || {\n    workOrderId: null,\n    stepIndex: 0\n};\n\nswitch (p.action) {\n    case \"save_step\":\n        userState.stepIndex = p.stepIndex ?? 0;\n        global.set(username, userState, \"persistent\");\n        return null;\n\n    case \"load_step\":\n        msg.payload = {\n            workOrderId: userState.workOrderId,\n            stepIndex: userState.stepIndex ?? 0\n        };\n        return msg;\n\n    default:\n        return null;\n}\n",[96,12646,12647,12652,12657,12662,12667,12686,12690,12695,12700,12705,12727,12761,12778,12782,12787,12819,12829,12839,12844,12848,12863,12877,12902,12929,12935,12939,12951,12964,12980,12998,13004,13013,13018,13026,13033],{"__ignoreMap":224},[228,12648,12649],{"class":230,"line":231},[228,12650,12651],{"class":5272},"\u002F\u002F Remembers the current step per user for the active work order.\n",[228,12653,12654],{"class":230,"line":5062},[228,12655,12656],{"class":5272},"\u002F\u002F Handles two actions from the widget:\n",[228,12658,12659],{"class":230,"line":5081},[228,12660,12661],{"class":5272},"\u002F\u002F   save_step - persist the step the operator is on\n",[228,12663,12664],{"class":230,"line":4978},[228,12665,12666],{"class":5272},"\u002F\u002F   load_step - reply with the saved step so the widget can resume\n",[228,12668,12669,12671,12674,12676,12678,12680,12682,12684],{"class":230,"line":5112},[228,12670,5728],{"class":241},[228,12672,12673],{"class":915}," p ",[228,12675,5286],{"class":234},[228,12677,5736],{"class":915},[228,12679,57],{"class":234},[228,12681,6567],{"class":915},[228,12683,6708],{"class":234},[228,12685,6922],{"class":234},[228,12687,12688],{"class":230,"line":5127},[228,12689,5405],{"emptyLinePlaceholder":5404},[228,12691,12692],{"class":230,"line":5142},[228,12693,12694],{"class":5272},"\u002F\u002F Identity comes from this message's own client data first. This is what\n",[228,12696,12697],{"class":230,"line":5382},[228,12698,12699],{"class":5272},"\u002F\u002F keeps two operators using the widget at the same time from reading or\n",[228,12701,12702],{"class":230,"line":5392},[228,12703,12704],{"class":5272},"\u002F\u002F writing each other's progress.\n",[228,12706,12707,12709,12711,12713,12715,12717,12719,12721,12723,12725],{"class":230,"line":5401},[228,12708,5728],{"class":241},[228,12710,5731],{"class":915},[228,12712,5286],{"class":234},[228,12714,5736],{"class":915},[228,12716,57],{"class":234},[228,12718,5741],{"class":915},[228,12720,5744],{"class":234},[228,12722,3290],{"class":915},[228,12724,5744],{"class":234},[228,12726,5751],{"class":915},[228,12728,12729,12731,12733,12735,12737,12739,12741,12743,12745,12747,12749,12751,12753,12755,12757,12759],{"class":230,"line":5408},[228,12730,5756],{"class":234},[228,12732,5759],{"class":915},[228,12734,57],{"class":234},[228,12736,735],{"class":5764},[228,12738,5767],{"class":915},[228,12740,5770],{"class":234},[228,12742,3290],{"class":252},[228,12744,5770],{"class":234},[228,12746,258],{"class":234},[228,12748,5779],{"class":234},[228,12750,940],{"class":252},[228,12752,5770],{"class":234},[228,12754,5786],{"class":915},[228,12756,5744],{"class":234},[228,12758,5086],{"class":915},[228,12760,5499],{"class":234},[228,12762,12763,12765,12768,12771,12774,12776],{"class":230,"line":5418},[228,12764,6027],{"class":5421},[228,12766,12767],{"class":915}," (",[228,12769,12770],{"class":234},"!",[228,12772,12773],{"class":915},"username) ",[228,12775,6107],{"class":5421},[228,12777,6792],{"class":234},[228,12779,12780],{"class":230,"line":5431},[228,12781,5405],{"emptyLinePlaceholder":5404},[228,12783,12784],{"class":230,"line":5442},[228,12785,12786],{"class":5272},"\u002F\u002F Read the user's saved state\n",[228,12788,12789,12791,12794,12796,12798,12800,12802,12805,12807,12809,12811,12813,12815,12817],{"class":230,"line":5463},[228,12790,5728],{"class":241},[228,12792,12793],{"class":915}," userState ",[228,12795,5286],{"class":234},[228,12797,5759],{"class":915},[228,12799,57],{"class":234},[228,12801,735],{"class":5764},[228,12803,12804],{"class":915},"(username",[228,12806,258],{"class":234},[228,12808,6095],{"class":234},[228,12810,940],{"class":252},[228,12812,238],{"class":234},[228,12814,6917],{"class":915},[228,12816,6708],{"class":234},[228,12818,5428],{"class":234},[228,12820,12821,12824,12826],{"class":230,"line":5469},[228,12822,12823],{"class":5263},"    workOrderId",[228,12825,247],{"class":234},[228,12827,12828],{"class":234}," null,\n",[228,12830,12831,12834,12836],{"class":230,"line":5479},[228,12832,12833],{"class":5263},"    stepIndex",[228,12835,247],{"class":234},[228,12837,12838],{"class":573}," 0\n",[228,12840,12841],{"class":230,"line":5485},[228,12842,12843],{"class":234},"};\n",[228,12845,12846],{"class":230,"line":5502},[228,12847,5405],{"emptyLinePlaceholder":5404},[228,12849,12850,12853,12856,12858,12861],{"class":230,"line":5508},[228,12851,12852],{"class":5421},"switch",[228,12854,12855],{"class":915}," (p",[228,12857,57],{"class":234},[228,12859,12860],{"class":915},"action) ",[228,12862,5059],{"class":234},[228,12864,12865,12868,12870,12872,12874],{"class":230,"line":5513},[228,12866,12867],{"class":5421},"    case",[228,12869,6095],{"class":234},[228,12871,9331],{"class":252},[228,12873,238],{"class":234},[228,12875,12876],{"class":234},":\n",[228,12878,12879,12882,12884,12887,12889,12892,12894,12896,12898,12900],{"class":230,"line":5522},[228,12880,12881],{"class":915},"        userState",[228,12883,57],{"class":234},[228,12885,12886],{"class":915},"stepIndex ",[228,12888,5286],{"class":234},[228,12890,12891],{"class":915}," p",[228,12893,57],{"class":234},[228,12895,12886],{"class":915},[228,12897,6724],{"class":234},[228,12899,6602],{"class":573},[228,12901,5499],{"class":234},[228,12903,12904,12907,12909,12911,12913,12915,12917,12919,12921,12923,12925,12927],{"class":230,"line":5527},[228,12905,12906],{"class":915},"        global",[228,12908,57],{"class":234},[228,12910,5673],{"class":5764},[228,12912,12804],{"class":915},[228,12914,258],{"class":234},[228,12916,6894],{"class":915},[228,12918,258],{"class":234},[228,12920,6095],{"class":234},[228,12922,940],{"class":252},[228,12924,238],{"class":234},[228,12926,5786],{"class":915},[228,12928,5499],{"class":234},[228,12930,12931,12933],{"class":230,"line":5536},[228,12932,5445],{"class":5421},[228,12934,6792],{"class":234},[228,12936,12937],{"class":230,"line":5579},[228,12938,5405],{"emptyLinePlaceholder":5404},[228,12940,12941,12943,12945,12947,12949],{"class":230,"line":5612},[228,12942,12867],{"class":5421},[228,12944,6095],{"class":234},[228,12946,9335],{"class":252},[228,12948,238],{"class":234},[228,12950,12876],{"class":234},[228,12952,12953,12956,12958,12960,12962],{"class":230,"line":7033},[228,12954,12955],{"class":915},"        msg",[228,12957,57],{"class":234},[228,12959,6567],{"class":915},[228,12961,5286],{"class":234},[228,12963,5428],{"class":234},[228,12965,12967,12970,12972,12974,12976,12978],{"class":230,"line":12966},28,[228,12968,12969],{"class":5263},"            workOrderId",[228,12971,247],{"class":234},[228,12973,6894],{"class":915},[228,12975,57],{"class":234},[228,12977,6932],{"class":915},[228,12979,5078],{"class":234},[228,12981,12983,12986,12988,12990,12992,12994,12996],{"class":230,"line":12982},29,[228,12984,12985],{"class":5263},"            stepIndex",[228,12987,247],{"class":234},[228,12989,6894],{"class":915},[228,12991,57],{"class":234},[228,12993,12886],{"class":915},[228,12995,6724],{"class":234},[228,12997,12838],{"class":573},[228,12999,13001],{"class":230,"line":13000},30,[228,13002,13003],{"class":234},"        };\n",[228,13005,13007,13009,13011],{"class":230,"line":13006},31,[228,13008,5445],{"class":5421},[228,13010,5736],{"class":915},[228,13012,5499],{"class":234},[228,13014,13016],{"class":230,"line":13015},32,[228,13017,5405],{"emptyLinePlaceholder":5404},[228,13019,13021,13024],{"class":230,"line":13020},33,[228,13022,13023],{"class":5421},"    default",[228,13025,12876],{"class":234},[228,13027,13029,13031],{"class":230,"line":13028},34,[228,13030,5445],{"class":5421},[228,13032,6792],{"class":234},[228,13034,13036],{"class":230,"line":13035},35,[228,13037,5145],{"class":234},[147,13039,13040],{"start":5081},[70,13041,13042,13043,13045],{},"Wire the \"Work Instruction Widget\" output into this node, and wire the node's output back into the widget so the ",[96,13044,9335],{}," reply can jump it to the saved step.",[12,13047,13048,13049,5202,13052,13055,13056,13058,13059,13061,13062,13064],{},"Look at the store key: ",[96,13050,13051],{},"global.get(username, ...)",[96,13053,13054],{},"global.set(username, ...)",". The operator's own username is the storage key, so two operators at the same station never overwrite each other, their progress lives under different keys, and because that key is now sourced from ",[96,13057,197],{}," rather than a shared global, it's always the username of whoever's browser actually sent this particular ",[96,13060,9331],{}," or ",[96,13063,9335],{}," message.",[12,13066,13067],{},"Deploy, walk halfway through an operation, then reload the page. It reopens where you left off, because the step is filed under your name.",[59,13069,13071],{"id":13070},"completing-the-operation-as-the-logged-in-user","Completing the Operation as the Logged-In User",[12,13073,13074,13075,13078],{},"When the operator completes the final instruction, the widget sends ",[96,13076,13077],{},"{ action: \"complete_operation\" }",". The flow looks up the operator's stored work order and builds the payload that will be sent to the API.",[147,13080,13081,13089,13104],{},[70,13082,5235,13083,13085,13086,13088],{},[45,13084,6494],{}," node and connect it to the ",[45,13087,9344],{}," actions link.",[70,13090,5235,13091,5816,13093,13096,13097,13100,13101,57],{},[45,13092,12852],{},[45,13094,13095],{},"Route by Action"," and route messages where ",[96,13098,13099],{},"msg.payload.action"," equals ",[96,13102,13103],{},"complete_operation",[70,13105,5235,13106,5816,13108,13111],{},[45,13107,845],{},[45,13109,13110],{},"Build Complete Payload"," and paste in the following code.",[219,13113,13115],{"className":5719,"code":13114,"language":5721,"meta":224,"style":224},"const username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\n\nif (!username) {\n    node.warn('No logged-in user found — cannot complete operation');\n    return null;\n}\n\nconst stored = global.get(username, 'persistent') || {};\nconst workOrderId = stored.workOrderId || null;\n\nmsg.payload = { workOrderId };\nreturn msg;\n",[96,13116,13117,13139,13173,13177,13189,13212,13219,13223,13227,13258,13279,13283,13299],{"__ignoreMap":224},[228,13118,13119,13121,13123,13125,13127,13129,13131,13133,13135,13137],{"class":230,"line":231},[228,13120,5728],{"class":241},[228,13122,5731],{"class":915},[228,13124,5286],{"class":234},[228,13126,5736],{"class":915},[228,13128,57],{"class":234},[228,13130,5741],{"class":915},[228,13132,5744],{"class":234},[228,13134,3290],{"class":915},[228,13136,5744],{"class":234},[228,13138,5751],{"class":915},[228,13140,13141,13143,13145,13147,13149,13151,13153,13155,13157,13159,13161,13163,13165,13167,13169,13171],{"class":230,"line":5062},[228,13142,5756],{"class":234},[228,13144,5759],{"class":915},[228,13146,57],{"class":234},[228,13148,735],{"class":5764},[228,13150,5767],{"class":915},[228,13152,5770],{"class":234},[228,13154,3290],{"class":252},[228,13156,5770],{"class":234},[228,13158,258],{"class":234},[228,13160,5779],{"class":234},[228,13162,940],{"class":252},[228,13164,5770],{"class":234},[228,13166,5786],{"class":915},[228,13168,5744],{"class":234},[228,13170,5086],{"class":915},[228,13172,5499],{"class":234},[228,13174,13175],{"class":230,"line":5081},[228,13176,5405],{"emptyLinePlaceholder":5404},[228,13178,13179,13181,13183,13185,13187],{"class":230,"line":4978},[228,13180,6027],{"class":5421},[228,13182,12767],{"class":915},[228,13184,12770],{"class":234},[228,13186,12773],{"class":915},[228,13188,5059],{"class":234},[228,13190,13191,13194,13196,13199,13201,13203,13206,13208,13210],{"class":230,"line":5112},[228,13192,13193],{"class":915},"    node",[228,13195,57],{"class":234},[228,13197,13198],{"class":5764},"warn",[228,13200,5767],{"class":5263},[228,13202,5770],{"class":234},[228,13204,13205],{"class":252},"No logged-in user found — cannot complete operation",[228,13207,5770],{"class":234},[228,13209,5786],{"class":5263},[228,13211,5499],{"class":234},[228,13213,13214,13217],{"class":230,"line":5127},[228,13215,13216],{"class":5421},"    return",[228,13218,6792],{"class":234},[228,13220,13221],{"class":230,"line":5142},[228,13222,5145],{"class":234},[228,13224,13225],{"class":230,"line":5382},[228,13226,5405],{"emptyLinePlaceholder":5404},[228,13228,13229,13231,13234,13236,13238,13240,13242,13244,13246,13248,13250,13252,13254,13256],{"class":230,"line":5392},[228,13230,5728],{"class":241},[228,13232,13233],{"class":915}," stored ",[228,13235,5286],{"class":234},[228,13237,5759],{"class":915},[228,13239,57],{"class":234},[228,13241,735],{"class":5764},[228,13243,12804],{"class":915},[228,13245,258],{"class":234},[228,13247,5779],{"class":234},[228,13249,940],{"class":252},[228,13251,5770],{"class":234},[228,13253,6917],{"class":915},[228,13255,6708],{"class":234},[228,13257,6922],{"class":234},[228,13259,13260,13262,13265,13267,13270,13272,13275,13277],{"class":230,"line":5401},[228,13261,5728],{"class":241},[228,13263,13264],{"class":915}," workOrderId ",[228,13266,5286],{"class":234},[228,13268,13269],{"class":915}," stored",[228,13271,57],{"class":234},[228,13273,13274],{"class":915},"workOrderId ",[228,13276,6708],{"class":234},[228,13278,6792],{"class":234},[228,13280,13281],{"class":230,"line":5408},[228,13282,5405],{"emptyLinePlaceholder":5404},[228,13284,13285,13287,13289,13291,13293,13295,13297],{"class":230,"line":5418},[228,13286,6058],{"class":915},[228,13288,57],{"class":234},[228,13290,6567],{"class":915},[228,13292,5286],{"class":234},[228,13294,5448],{"class":234},[228,13296,13264],{"class":915},[228,13298,12843],{"class":234},[228,13300,13301,13303,13305],{"class":230,"line":5431},[228,13302,6107],{"class":5421},[228,13304,5736],{"class":915},[228,13306,5499],{"class":234},[147,13308,13309,13328],{"start":4978},[70,13310,6116,13311,6451,13313,5824,13315,13318,13319,13321,13322,13325,13326,5872],{},[45,13312,5008],{},[45,13314,6454],{},[45,13316,13317],{},"POST",", configure ",[45,13320,6129],{}," authentication using your access token, and set the URL to ",[96,13323,13324],{},"https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders\u002Fcomplete",". Replace ",[96,13327,5871],{},[70,13329,5235,13330,13332,13333,5824,13335,13337,13338,13340],{},[45,13331,5669],{}," node that sets ",[96,13334,5823],{},[96,13336,4836],{},", then connect it to a ",[45,13339,6487],{}," node. This will be used in the next step to reset the operator's state and navigate the operator back to the Home page.",[12,13342,13343],{},"Because the payload is built from the logged-in operator's stored state, keyed off that same operator's per-message identity, the API always completes the correct work order, even when multiple operators are using the dashboard at the same time.",[59,13345,13347],{"id":13346},"reporting-a-defect-as-the-logged-in-operator","Reporting a Defect as the Logged-In Operator",[12,13349,13350,13351,13353],{},"If an operator encounters a defect, they can report it from the ",[45,13352,9344],{},". The report is automatically linked to the work order they're currently performing, so there's no need to enter a work order ID manually.",[12,13355,4916,13356,13358,13359,13362],{},[45,13357,4861],{}," button sends ",[96,13360,13361],{},"{ action: \"Report Issue\" }",". Use that action to open the report form.",[147,13364,13365,13375,13385,13399],{},[70,13366,5235,13367,5816,13369,13372,13373,13088],{},[45,13368,6494],{},[45,13370,13371],{},"Widget Action In"," and connect it to the ",[45,13374,9344],{},[70,13376,5235,13377,5816,13379,13096,13381,13100,13383,57],{},[45,13378,12852],{},[45,13380,13095],{},[96,13382,13099],{},[96,13384,4861],{},[70,13386,5235,13387,13332,13389,5824,13391,13337,13393,13395,13396,13398],{},[45,13388,5669],{},[96,13390,5823],{},[96,13392,4861],{},[45,13394,115],{}," node to navigate to the ",[45,13397,4861],{}," page.",[70,13400,5235,13401,5816,13403,13406,13407,13409,13410,13435,13438],{},[45,13402,109],{},[45,13404,13405],{},"Report Issue Form"," to the ",[45,13408,4861],{}," group with four required fields:",[67,13411,13412,13418,13423,13429],{},[70,13413,13414,13417],{},[45,13415,13416],{},"Issue Type"," (dropdown)",[70,13419,13420,13417],{},[45,13421,13422],{},"Severity",[70,13424,13425,13428],{},[45,13426,13427],{},"Affected Part"," (text)",[70,13430,13431,13434],{},[45,13432,13433],{},"Description"," (multiline)",[13436,13437],"br",{},"Populate the dropdown fields with the issue types and severity levels used in your application.",[12,13440,13441,13445],{},[21,13442],{"alt":13443,"src":13444},"Screenshot: Report Issue form fields showing the Issue Type, Severity, Affected Part, and Description inputs","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fform-elements.png",[26,13446,13447],{},"The Report Issue form collects the defect details before submitting them against the current work order.",[12,13449,13450,13454],{},[21,13451],{"alt":13452,"src":13453},"Screenshot: Configuring the dropdown options for the Issue Type and Severity fields in the ui-form node","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fform-dropdown.png",[26,13455,13456],{},"Configure the Issue Type and Severity dropdowns with the options used in your application.",[147,13458,13459],{"start":5112},[70,13460,5235,13461,5816,13463,13111],{},[45,13462,845],{},[45,13464,13465],{},"Prepare Defect Payload",[219,13467,13470],{"className":5719,"code":13468,"language":5721,"meta":13469,"style":224},"const p = msg.payload || {};\n\nconst username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\n\nif (!username) {\n    node.warn('No logged-in user found — cannot report defect');\n    return null;\n}\n\nconst stored = global.get(username, 'persistent') || {};\nconst workOrderId = stored.workOrderId || null;\n\nconst issueType = p.type;\nconst severity = p.severity;\nconst affectedPart = p['affected-part'];\nconst description = p.description || null;\n\nif (!workOrderId || !issueType || !severity || !affectedPart) {\n    node.warn('Missing required defect fields — defect not sent');\n    return null;\n}\n\nmsg.payload = {\n    workOrderId,\n    issueType,\n    severity,\n    affectedPart,\n    description\n};\n\nreturn msg;\n","id=\"vbv4m6\"",[96,13471,13472,13490,13494,13516,13550,13554,13566,13587,13593,13597,13601,13631,13649,13653,13670,13688,13711,13731,13735,13769,13790,13796,13800,13804,13816,13822,13829,13836,13843,13848,13852,13856],{"__ignoreMap":224},[228,13473,13474,13476,13478,13480,13482,13484,13486,13488],{"class":230,"line":231},[228,13475,5728],{"class":241},[228,13477,12673],{"class":915},[228,13479,5286],{"class":234},[228,13481,5736],{"class":915},[228,13483,57],{"class":234},[228,13485,6567],{"class":915},[228,13487,6708],{"class":234},[228,13489,6922],{"class":234},[228,13491,13492],{"class":230,"line":5062},[228,13493,5405],{"emptyLinePlaceholder":5404},[228,13495,13496,13498,13500,13502,13504,13506,13508,13510,13512,13514],{"class":230,"line":5081},[228,13497,5728],{"class":241},[228,13499,5731],{"class":915},[228,13501,5286],{"class":234},[228,13503,5736],{"class":915},[228,13505,57],{"class":234},[228,13507,5741],{"class":915},[228,13509,5744],{"class":234},[228,13511,3290],{"class":915},[228,13513,5744],{"class":234},[228,13515,5751],{"class":915},[228,13517,13518,13520,13522,13524,13526,13528,13530,13532,13534,13536,13538,13540,13542,13544,13546,13548],{"class":230,"line":4978},[228,13519,5756],{"class":234},[228,13521,5759],{"class":915},[228,13523,57],{"class":234},[228,13525,735],{"class":5764},[228,13527,5767],{"class":915},[228,13529,5770],{"class":234},[228,13531,3290],{"class":252},[228,13533,5770],{"class":234},[228,13535,258],{"class":234},[228,13537,5779],{"class":234},[228,13539,940],{"class":252},[228,13541,5770],{"class":234},[228,13543,5786],{"class":915},[228,13545,5744],{"class":234},[228,13547,5086],{"class":915},[228,13549,5499],{"class":234},[228,13551,13552],{"class":230,"line":5112},[228,13553,5405],{"emptyLinePlaceholder":5404},[228,13555,13556,13558,13560,13562,13564],{"class":230,"line":5127},[228,13557,6027],{"class":5421},[228,13559,12767],{"class":915},[228,13561,12770],{"class":234},[228,13563,12773],{"class":915},[228,13565,5059],{"class":234},[228,13567,13568,13570,13572,13574,13576,13578,13581,13583,13585],{"class":230,"line":5142},[228,13569,13193],{"class":915},[228,13571,57],{"class":234},[228,13573,13198],{"class":5764},[228,13575,5767],{"class":5263},[228,13577,5770],{"class":234},[228,13579,13580],{"class":252},"No logged-in user found — cannot report defect",[228,13582,5770],{"class":234},[228,13584,5786],{"class":5263},[228,13586,5499],{"class":234},[228,13588,13589,13591],{"class":230,"line":5382},[228,13590,13216],{"class":5421},[228,13592,6792],{"class":234},[228,13594,13595],{"class":230,"line":5392},[228,13596,5145],{"class":234},[228,13598,13599],{"class":230,"line":5401},[228,13600,5405],{"emptyLinePlaceholder":5404},[228,13602,13603,13605,13607,13609,13611,13613,13615,13617,13619,13621,13623,13625,13627,13629],{"class":230,"line":5408},[228,13604,5728],{"class":241},[228,13606,13233],{"class":915},[228,13608,5286],{"class":234},[228,13610,5759],{"class":915},[228,13612,57],{"class":234},[228,13614,735],{"class":5764},[228,13616,12804],{"class":915},[228,13618,258],{"class":234},[228,13620,5779],{"class":234},[228,13622,940],{"class":252},[228,13624,5770],{"class":234},[228,13626,6917],{"class":915},[228,13628,6708],{"class":234},[228,13630,6922],{"class":234},[228,13632,13633,13635,13637,13639,13641,13643,13645,13647],{"class":230,"line":5418},[228,13634,5728],{"class":241},[228,13636,13264],{"class":915},[228,13638,5286],{"class":234},[228,13640,13269],{"class":915},[228,13642,57],{"class":234},[228,13644,13274],{"class":915},[228,13646,6708],{"class":234},[228,13648,6792],{"class":234},[228,13650,13651],{"class":230,"line":5431},[228,13652,5405],{"emptyLinePlaceholder":5404},[228,13654,13655,13657,13660,13662,13664,13666,13668],{"class":230,"line":5442},[228,13656,5728],{"class":241},[228,13658,13659],{"class":915}," issueType ",[228,13661,5286],{"class":234},[228,13663,12891],{"class":915},[228,13665,57],{"class":234},[228,13667,263],{"class":915},[228,13669,5499],{"class":234},[228,13671,13672,13674,13677,13679,13681,13683,13686],{"class":230,"line":5463},[228,13673,5728],{"class":241},[228,13675,13676],{"class":915}," severity ",[228,13678,5286],{"class":234},[228,13680,12891],{"class":915},[228,13682,57],{"class":234},[228,13684,13685],{"class":915},"severity",[228,13687,5499],{"class":234},[228,13689,13690,13692,13695,13697,13700,13702,13705,13707,13709],{"class":230,"line":5469},[228,13691,5728],{"class":241},[228,13693,13694],{"class":915}," affectedPart ",[228,13696,5286],{"class":234},[228,13698,13699],{"class":915}," p[",[228,13701,5770],{"class":234},[228,13703,13704],{"class":252},"affected-part",[228,13706,5770],{"class":234},[228,13708,3467],{"class":915},[228,13710,5499],{"class":234},[228,13712,13713,13715,13718,13720,13722,13724,13727,13729],{"class":230,"line":5479},[228,13714,5728],{"class":241},[228,13716,13717],{"class":915}," description ",[228,13719,5286],{"class":234},[228,13721,12891],{"class":915},[228,13723,57],{"class":234},[228,13725,13726],{"class":915},"description ",[228,13728,6708],{"class":234},[228,13730,6792],{"class":234},[228,13732,13733],{"class":230,"line":5485},[228,13734,5405],{"emptyLinePlaceholder":5404},[228,13736,13737,13739,13741,13743,13745,13747,13750,13753,13755,13757,13760,13762,13764,13767],{"class":230,"line":5502},[228,13738,6027],{"class":5421},[228,13740,12767],{"class":915},[228,13742,12770],{"class":234},[228,13744,13274],{"class":915},[228,13746,6708],{"class":234},[228,13748,13749],{"class":234}," !",[228,13751,13752],{"class":915},"issueType ",[228,13754,6708],{"class":234},[228,13756,13749],{"class":234},[228,13758,13759],{"class":915},"severity ",[228,13761,6708],{"class":234},[228,13763,13749],{"class":234},[228,13765,13766],{"class":915},"affectedPart) ",[228,13768,5059],{"class":234},[228,13770,13771,13773,13775,13777,13779,13781,13784,13786,13788],{"class":230,"line":5508},[228,13772,13193],{"class":915},[228,13774,57],{"class":234},[228,13776,13198],{"class":5764},[228,13778,5767],{"class":5263},[228,13780,5770],{"class":234},[228,13782,13783],{"class":252},"Missing required defect fields — defect not sent",[228,13785,5770],{"class":234},[228,13787,5786],{"class":5263},[228,13789,5499],{"class":234},[228,13791,13792,13794],{"class":230,"line":5513},[228,13793,13216],{"class":5421},[228,13795,6792],{"class":234},[228,13797,13798],{"class":230,"line":5522},[228,13799,5145],{"class":234},[228,13801,13802],{"class":230,"line":5527},[228,13803,5405],{"emptyLinePlaceholder":5404},[228,13805,13806,13808,13810,13812,13814],{"class":230,"line":5536},[228,13807,6058],{"class":915},[228,13809,57],{"class":234},[228,13811,6567],{"class":915},[228,13813,5286],{"class":234},[228,13815,5428],{"class":234},[228,13817,13818,13820],{"class":230,"line":5579},[228,13819,12823],{"class":915},[228,13821,5078],{"class":234},[228,13823,13824,13827],{"class":230,"line":5612},[228,13825,13826],{"class":915},"    issueType",[228,13828,5078],{"class":234},[228,13830,13831,13834],{"class":230,"line":7033},[228,13832,13833],{"class":915},"    severity",[228,13835,5078],{"class":234},[228,13837,13838,13841],{"class":230,"line":12966},[228,13839,13840],{"class":915},"    affectedPart",[228,13842,5078],{"class":234},[228,13844,13845],{"class":230,"line":12982},[228,13846,13847],{"class":915},"    description\n",[228,13849,13850],{"class":230,"line":13000},[228,13851,12843],{"class":234},[228,13853,13854],{"class":230,"line":13006},[228,13855,5405],{"emptyLinePlaceholder":5404},[228,13857,13858,13860,13862],{"class":230,"line":13015},[228,13859,6107],{"class":5421},[228,13861,5736],{"class":915},[228,13863,5499],{"class":234},[147,13865,13866,13885],{"start":5127},[70,13867,6116,13868,6451,13870,5824,13872,13318,13874,13321,13876,13325,13879,13881,13882,13884],{},[45,13869,5008],{},[45,13871,6454],{},[45,13873,13317],{},[45,13875,6129],{},[96,13877,13878],{},"https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders\u002Fdefect",[96,13880,5871],{}," with your own FlowFuse instance URL, then connect the request to a ",[45,13883,6487],{}," node so the flow continues to the reset step.",[70,13886,5235,13887,4910,13889,13892,13893,13895,13896,13898],{},[45,13888,112],{},[45,13890,13891],{},"Back to Work Instructions"," to the same group and connect it to a ",[45,13894,115],{}," node that navigates back to the ",[45,13897,4819],{}," page. Since the operator's progress is stored against their username, they return to the same instruction they left.",[12,13900,13901,13905],{},[21,13902],{"alt":13903,"src":13904},"Screenshot: Completed Report Issue page showing the defect reporting form and Back to Work Instructions button","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Freport-issue.png",[26,13906,13907],{},"The completed Report Issue page where operators can submit a defect or return to the work instructions.",[12,13909,13910],{},"The work order ID is retrieved from the logged-in operator's stored state, ensuring every defect report is associated with the correct work order, and the lookup key for that state again comes from this message's own client data, not a value that could have been overwritten by someone else's login in the meantime.",[59,13912,13914],{"id":13913},"clearing-state-when-work-ends","Clearing State When Work Ends",[12,13916,13917,13918,13920],{},"When an operation is completed or a defect is reported, clear the operator's saved progress so the next work order starts from ",[45,13919,9324],{}," instead of resuming a finished one.",[147,13922,13923,13939,13951],{},[70,13924,5235,13925,5816,13927,13372,13930,13932,13933,5202,13935,13938],{},[45,13926,6494],{},[45,13928,13929],{},"Complete \u002F Defect Result In",[45,13931,6487],{}," nodes from the ",[45,13934,9357],{},[45,13936,13937],{},"Report Defect"," flows.",[70,13940,5235,13941,13943,13944,13100,13947,13950],{},[45,13942,12852],{}," node that checks ",[96,13945,13946],{},"msg.statusCode",[96,13948,13949],{},"200",", so the state is only cleared after a successful API response.",[70,13952,5235,13953,5816,13955,13111],{},[45,13954,845],{},[45,13956,13957],{},"Clear User Step State",[219,13959,13962],{"className":5719,"code":13960,"language":5721,"meta":13961,"style":224},"const username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\n\nif (!username) return null;\n\nglobal.set(username, {}, 'persistent');\n\nmsg.payload = \"Home\";\nreturn msg;\n","id=\"6ej1v5\"",[96,13963,13964,13986,14020,14024,14038,14042,14068,14072,14090],{"__ignoreMap":224},[228,13965,13966,13968,13970,13972,13974,13976,13978,13980,13982,13984],{"class":230,"line":231},[228,13967,5728],{"class":241},[228,13969,5731],{"class":915},[228,13971,5286],{"class":234},[228,13973,5736],{"class":915},[228,13975,57],{"class":234},[228,13977,5741],{"class":915},[228,13979,5744],{"class":234},[228,13981,3290],{"class":915},[228,13983,5744],{"class":234},[228,13985,5751],{"class":915},[228,13987,13988,13990,13992,13994,13996,13998,14000,14002,14004,14006,14008,14010,14012,14014,14016,14018],{"class":230,"line":5062},[228,13989,5756],{"class":234},[228,13991,5759],{"class":915},[228,13993,57],{"class":234},[228,13995,735],{"class":5764},[228,13997,5767],{"class":915},[228,13999,5770],{"class":234},[228,14001,3290],{"class":252},[228,14003,5770],{"class":234},[228,14005,258],{"class":234},[228,14007,5779],{"class":234},[228,14009,940],{"class":252},[228,14011,5770],{"class":234},[228,14013,5786],{"class":915},[228,14015,5744],{"class":234},[228,14017,5086],{"class":915},[228,14019,5499],{"class":234},[228,14021,14022],{"class":230,"line":5081},[228,14023,5405],{"emptyLinePlaceholder":5404},[228,14025,14026,14028,14030,14032,14034,14036],{"class":230,"line":4978},[228,14027,6027],{"class":5421},[228,14029,12767],{"class":915},[228,14031,12770],{"class":234},[228,14033,12773],{"class":915},[228,14035,6107],{"class":5421},[228,14037,6792],{"class":234},[228,14039,14040],{"class":230,"line":5112},[228,14041,5405],{"emptyLinePlaceholder":5404},[228,14043,14044,14047,14049,14051,14053,14055,14058,14060,14062,14064,14066],{"class":230,"line":5127},[228,14045,14046],{"class":915},"global",[228,14048,57],{"class":234},[228,14050,5673],{"class":5764},[228,14052,12804],{"class":915},[228,14054,258],{"class":234},[228,14056,14057],{"class":234}," {},",[228,14059,5779],{"class":234},[228,14061,940],{"class":252},[228,14063,5770],{"class":234},[228,14065,5786],{"class":915},[228,14067,5499],{"class":234},[228,14069,14070],{"class":230,"line":5142},[228,14071,5405],{"emptyLinePlaceholder":5404},[228,14073,14074,14076,14078,14080,14082,14084,14086,14088],{"class":230,"line":5382},[228,14075,6058],{"class":915},[228,14077,57],{"class":234},[228,14079,6567],{"class":915},[228,14081,5286],{"class":234},[228,14083,6095],{"class":234},[228,14085,4836],{"class":252},[228,14087,238],{"class":234},[228,14089,5499],{"class":234},[228,14091,14092,14094,14096],{"class":230,"line":5392},[228,14093,6107],{"class":5421},[228,14095,5736],{"class":915},[228,14097,5499],{"class":234},[147,14099,14100],{"start":4978},[70,14101,14102,14103,14105,14106,13398],{},"Connect the function node to a ",[45,14104,115],{}," node to navigate the operator back to the ",[45,14107,4836],{},[12,14109,14110],{},"Because the state is stored and cleared by username, and that username is read from the message that carried the successful API response rather than a shared global, resetting one operator's progress never affects anyone else, even if a second operator has logged in on another screen in between.",[12,14112,14113],{},"Deploy the flow and open the dashboard. After signing in, operators see only the work orders assigned to them. If they leave and return, they resume from the same instruction. Once they complete the operation or report a defect, their progress is cleared and they're returned to the Home page, ready for the next work order.",[59,14115,14117],{"id":14116},"where-to-go-next","Where to Go Next",[12,14119,14120,14121,103,14123,5188,14125,14127],{},"You've built a personalized digital work instructions application that knows who the operator is, what work they're assigned, and where they left off, correctly, even when several operators are on the dashboard at once. Replacing the simulator with a real ERP or MES is simply a matter of pointing the HTTP Request nodes to your production ",[96,14122,717],{},[96,14124,2018],{},[96,14126,1366],{}," endpoints.",[12,14129,14130,14131,57],{},"From there, you can extend the application with production history, quality tracking, role-based experiences, and OEE dashboards, all powered by the same operator identity. To see how FlowFuse fits into modern automotive manufacturing, explore the ",[53,14132,14134],{"href":14133},"\u002Findustries\u002Fautomotive\u002F","Automotive solutions page",[299,14136,14137],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":224,"searchDepth":4978,"depth":4978,"links":14139},[14140,14141,14142,14143,14144,14145,14146,14147,14148,14152,14153,14154,14155,14156,14157,14158,14159],{"id":61,"depth":5062,"text":62},{"id":141,"depth":5062,"text":142},{"id":201,"depth":5062,"text":202},{"id":4798,"depth":5062,"text":4799},{"id":4928,"depth":5062,"text":4929},{"id":5015,"depth":5062,"text":5016},{"id":5220,"depth":5062,"text":5221},{"id":5636,"depth":5062,"text":5637},{"id":5795,"depth":5062,"text":5796,"children":14149},[14150,14151],{"id":5803,"depth":5081,"text":5804},{"id":5843,"depth":5081,"text":5844},{"id":6174,"depth":5062,"text":6175},{"id":6508,"depth":5062,"text":6509},{"id":9286,"depth":5062,"text":9287},{"id":9313,"depth":5062,"text":9314},{"id":13070,"depth":5062,"text":13071},{"id":13346,"depth":5062,"text":13347},{"id":13913,"depth":5062,"text":13914},{"id":14116,"depth":5062,"text":14117},{"type":14161,"title":14162,"description":14163},"contact","Want to connect this to your real ERP or MES?","Talk to our team about integrating digital work instructions with your production systems, adding full traceability, and rolling this out across your shop floor.","2026-07-24","Learn how to build digital work instructions with FlowFuse. Create personalized operator apps with work orders, guided steps, defect reporting, and traceability.","md","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fdigital-instructions-dashboard-flowfuse.png",null,{"excerpt":14170},{"type":9,"value":14171},[14172],[12,14173,14],{},"\u002Fblog\u002F2026\u002F07\u002Fdigital-work-instruction",{"title":5,"description":14165},{"loc":14174},"blog\u002F2026\u002F07\u002Fdigital-work-instruction","Give every operator their own work instructions, progress, and production history.",[14180],"flowfuse","Build a FlowFuse digital work instructions application that authenticates each operator, loads only their assigned work orders, guides them step by step with per-operator progress tracking, and lets them report defects, all tied to their logged-in identity.","--w7bVKJodwn0SSflpM9tjbObJ5eohqBe5Cmci7Q1-M",[],1785930004938]