[{"data":1,"prerenderedAt":14190},["ShallowReactive",2],{"blog-\u002Fblog\u002F2026\u002F07\u002Fdigital-work-instruction":3,"blog-all-for-related":14189},{"id":4,"title":5,"authors":6,"body":8,"cta":14166,"date":14170,"description":14171,"extension":14172,"image":14173,"lastUpdated":14174,"meta":14175,"navigation":5405,"path":14180,"seo":14181,"sitemap":14182,"stem":14183,"subtitle":14184,"tags":14185,"tldr":14187,"video":14174,"__hash__":14188},"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":14144},"minimark",[11,15,18,28,36,39,49,58,63,66,130,140,144,147,172,175,178,200,204,207,215,4790,4797,4801,4822,4915,4924,4927,4931,4934,4941,4962,4971,4974,4977,4999,5014,5018,5021,5045,5051,5147,5161,5193,5207,5219,5223,5232,5250,5620,5626,5635,5639,5642,5653,5659,5715,5718,5794,5798,5801,5806,5842,5846,5874,6113,6151,6164,6173,6177,6180,6202,6446,6497,6507,6511,6514,6529,7039,7044,7060,9207,9227,9236,9246,9255,9276,9285,9289,9292,9312,9316,9327,9338,9359,9370,12627,12636,12643,13039,13047,13066,13069,13073,13080,13113,13308,13342,13345,13349,13355,13364,13440,13449,13458,13467,13865,13900,13909,13912,13916,13922,13959,14099,14109,14112,14115,14119,14129,14141],[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],"live-demo-link",{"href":55,"label":56},"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,84,90,124],"ul",{},[70,71,72,75,76,83],"li",{},[45,73,74],{},"A FlowFuse account."," ",[77,78,82],"a",{"href":79,"rel":80},"https:\u002F\u002Fapp.flowfuse.com\u002Faccount\u002Fcreate",[81],"nofollow","Sign up"," for FlowFuse Cloud, or use a self-hosted instance.",[70,85,86,89],{},[45,87,88],{},"A FlowFuse instance up and running."," If you don't have one yet, create a new instance from your FlowFuse Platform.",[70,91,92,95,96,100,101,104,105,104,108,104,111,104,114,104,117,104,120,123],{},[45,93,94],{},"FlowFuse Dashboard installed."," This tutorial uses ",[97,98,99],"code",{},"@flowfuse\u002Fnode-red-dashboard"," nodes (",[97,102,103],{},"ui-template",", ",[97,106,107],{},"ui-table",[97,109,110],{},"ui-form",[97,112,113],{},"ui-button",[97,115,116],{},"ui-control",[97,118,119],{},"ui-event",[97,121,122],{},"ui-text",") to build the operator interface. Install it from the Palette Manager if it isn't already in your instance.",[70,125,126,129],{},[45,127,128],{},"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,131,132],{},[12,133,134,135,139],{},"Note: The Multi-User addon is available to Teams and Enterprise Self-Hosted customers. If you're on a different tier, ",[77,136,138],{"href":137},"\u002Fcontact-us\u002F","contact us"," for the configuration to get started.",[59,141,143],{"id":142},"how-the-application-works","How the Application Works",[12,145,146],{},"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.",[148,149,150,160,166],"ol",{},[70,151,152,155,156,159],{},[45,153,154],{},"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,157,158],{},"Start Work Order"," opens the instructions.",[70,161,162,165],{},[45,163,164],{},"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,167,168,171],{},[45,169,170],{},"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,173,174],{},"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,176,177],{},"There are two different questions the app has to answer, and it's worth keeping them separate from the start:",[67,179,180,190],{},[70,181,182,185,186,189],{},[45,183,184],{},"\"Where is this operator's data stored?\""," — under a persistent global key named after their username, e.g. ",[97,187,188],{},"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,191,192,195,196,199],{},[45,193,194],{},"\"Who is acting right now, in this message?\""," — this must be read fresh from the message that triggered the flow (",[97,197,198],{},"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,201,203],{"id":202},"importing-the-simulated-flow","Importing the Simulated Flow",[12,205,206],{},"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.",[148,208,209],{},[70,210,211,212,57],{},"Import the following flow into FlowFuse and click ",[45,213,214],{},"Deploy",[216,217,219],"render-flow",{":height":218},"300",[220,221,226],"pre",{"className":222,"code":223,"language":224,"meta":225,"style":225},"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","",[97,227,228],{"__ignoreMap":225},[229,230,233,237,240,244,246,249,251,255,257,260,262,265,267,269,271,274,276,278,280,283,285,287,289,292,294,296,298,301,303,306,308,312,314,316,318,321,323,325,327,330,332,334,336,339,341,343,345,348,350,352,354,357,359,361,363,366,368,370,372,375,377,379,381,384,386,389,391,394,396,398,400,403,405,407,409,412,414,416,418,421,423,426,428,431,433,436,438,441,443,445,447,450,452,454,456,459,461,463,465,468,470,472,474,477,479,481,483,486,488,490,492,495,497,499,501,504,506,508,510,513,515,517,519,522,524,526,528,531,533,535,537,540,542,544,546,549,551,553,555,558,560,563,565,568,570,572,576,578,580,583,585,587,590,592,594,597,599,601,604,606,608,611,613,615,618,621,623,625,627,629,631,633,635,637,639,641,643,645,647,650,652,654,656,658,660,662,664,666,668,670,672,675,677,679,681,683,685,687,689,692,694,696,698,701,703,705,707,710,712,714,716,719,721,723,725,728,730,732,734,737,739,741,743,746,748,751,753,756,758,760,762,765,767,769,772,774,776,778,780,782,785,787,789,791,793,795,797,799,801,804,806,809,811,813,815,818,820,822,824,826,828,830,832,834,836,838,840,842,844,847,849,851,853,855,857,859,861,863,865,867,869,871,873,875,877,879,881,883,885,887,889,891,893,896,898,900,902,905,907,909,911,914,918,921,924,927,930,933,935,937,939,942,944,947,949,952,954,957,959,962,964,967,969,972,974,977,979,981,983,986,989,992,994,997,999,1002,1004,1006,1008,1011,1013,1015,1017,1019,1021,1024,1026,1028,1030,1032,1034,1037,1039,1041,1044,1046,1048,1051,1053,1055,1057,1059,1061,1064,1066,1068,1070,1072,1074,1077,1079,1082,1084,1086,1088,1090,1093,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1133,1135,1137,1139,1141,1143,1145,1147,1149,1152,1154,1156,1158,1160,1162,1164,1166,1168,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198,1200,1202,1205,1207,1209,1211,1213,1215,1218,1220,1222,1224,1227,1229,1231,1233,1236,1238,1240,1242,1244,1246,1248,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1274,1276,1278,1280,1282,1284,1286,1288,1290,1292,1294,1296,1298,1300,1302,1304,1306,1308,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1351,1353,1355,1357,1359,1361,1363,1365,1368,1370,1372,1374,1376,1378,1380,1382,1385,1387,1389,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435,1437,1440,1442,1444,1446,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478,1480,1482,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512,1514,1516,1518,1520,1522,1524,1526,1528,1530,1532,1535,1537,1539,1541,1543,1545,1547,1549,1552,1554,1557,1559,1562,1564,1567,1569,1572,1574,1577,1579,1582,1584,1587,1589,1592,1594,1597,1599,1602,1604,1606,1608,1610,1612,1615,1617,1620,1622,1625,1627,1630,1632,1635,1637,1640,1642,1645,1647,1650,1652,1655,1657,1660,1662,1665,1667,1669,1671,1673,1675,1677,1679,1681,1683,1685,1687,1689,1691,1693,1695,1697,1699,1701,1703,1705,1707,1709,1711,1713,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737,1739,1741,1743,1745,1747,1749,1752,1754,1756,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782,1784,1786,1788,1790,1792,1794,1796,1798,1800,1802,1804,1806,1808,1810,1812,1814,1816,1818,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840,1842,1844,1846,1848,1850,1852,1854,1856,1858,1860,1862,1864,1866,1868,1870,1872,1874,1876,1878,1880,1882,1884,1886,1888,1890,1892,1894,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918,1920,1922,1924,1926,1928,1930,1932,1934,1936,1938,1940,1942,1944,1946,1948,1950,1952,1954,1956,1958,1960,1962,1964,1966,1968,1970,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000,2003,2005,2007,2009,2011,2013,2015,2017,2020,2022,2024,2026,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046,2048,2050,2052,2054,2056,2058,2060,2062,2064,2066,2068,2070,2072,2074,2076,2079,2081,2083,2085,2087,2089,2092,2094,2096,2098,2100,2102,2104,2106,2108,2110,2112,2114,2116,2118,2120,2122,2124,2126,2128,2130,2132,2134,2136,2138,2140,2142,2144,2146,2148,2150,2152,2154,2156,2158,2160,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2182,2184,2187,2189,2191,2193,2195,2197,2199,2201,2204,2206,2209,2211,2213,2215,2218,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,2244,2246,2248,2250,2252,2254,2256,2259,2261,2264,2266,2268,2270,2272,2274,2276,2278,2280,2282,2284,2286,2288,2290,2292,2294,2296,2298,2300,2302,2304,2306,2308,2310,2312,2314,2316,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344,2346,2348,2350,2352,2354,2356,2358,2360,2363,2365,2367,2369,2371,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391,2393,2395,2397,2399,2401,2403,2405,2407,2409,2411,2413,2415,2417,2419,2421,2423,2425,2427,2429,2431,2433,2435,2437,2439,2441,2443,2445,2447,2449,2451,2453,2455,2457,2459,2461,2463,2465,2467,2469,2471,2473,2475,2477,2479,2481,2483,2485,2487,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513,2516,2518,2520,2522,2524,2526,2528,2530,2532,2534,2536,2538,2540,2542,2544,2546,2548,2550,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570,2572,2574,2576,2578,2580,2582,2584,2586,2588,2590,2592,2594,2596,2598,2600,2602,2604,2606,2608,2610,2612,2615,2617,2619,2621,2623,2625,2627,2629,2632,2634,2636,2638,2640,2642,2644,2646,2648,2650,2652,2654,2656,2658,2660,2662,2664,2666,2668,2670,2672,2674,2676,2678,2680,2682,2684,2686,2688,2691,2693,2695,2697,2699,2701,2704,2706,2708,2710,2712,2714,2716,2718,2720,2722,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742,2744,2746,2748,2750,2752,2754,2756,2758,2760,2762,2764,2766,2768,2770,2772,2774,2776,2778,2780,2782,2784,2786,2788,2790,2792,2794,2796,2799,2801,2803,2805,2807,2809,2811,2813,2815,2817,2820,2822,2824,2826,2828,2830,2833,2835,2838,2840,2843,2845,2848,2850,2853,2855,2858,2860,2862,2864,2867,2869,2872,2874,2876,2878,2880,2882,2885,2887,2890,2892,2895,2897,2900,2902,2904,2906,2909,2911,2914,2916,2919,2921,2924,2926,2929,2931,2933,2935,2937,2939,2941,2943,2945,2947,2949,2951,2953,2955,2957,2959,2961,2963,2965,2967,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987,2989,2991,2993,2995,2997,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041,3043,3045,3047,3049,3051,3053,3055,3057,3059,3061,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109,3111,3113,3115,3117,3119,3121,3123,3125,3127,3129,3131,3133,3135,3137,3139,3141,3143,3145,3147,3149,3151,3153,3155,3157,3159,3161,3163,3165,3167,3169,3171,3173,3175,3177,3179,3181,3183,3185,3187,3189,3191,3193,3195,3197,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227,3229,3231,3233,3235,3237,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267,3270,3272,3274,3276,3278,3280,3282,3284,3287,3289,3292,3294,3296,3298,3300,3302,3304,3306,3309,3311,3314,3316,3319,3321,3324,3326,3329,3331,3334,3336,3339,3342,3344,3346,3348,3350,3353,3355,3357,3359,3361,3364,3366,3368,3370,3372,3375,3377,3380,3382,3385,3387,3390,3392,3395,3397,3400,3402,3404,3406,3409,3411,3414,3416,3418,3420,3423,3425,3427,3429,3432,3434,3436,3438,3441,3443,3446,3448,3450,3452,3455,3457,3459,3461,3464,3466,3469,3471,3474,3476,3478,3480,3482,3484,3487,3489,3491,3493,3495,3497,3500,3502,3504,3506,3508,3510,3512,3514,3516,3518,3520,3522,3524,3526,3529,3531,3533,3535,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3566,3568,3570,3572,3574,3576,3578,3580,3582,3584,3587,3589,3591,3593,3595,3597,3600,3602,3604,3606,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629,3631,3633,3635,3638,3640,3642,3644,3646,3648,3650,3652,3654,3656,3658,3660,3662,3664,3666,3668,3671,3673,3675,3677,3680,3682,3684,3686,3688,3690,3692,3694,3697,3699,3701,3703,3706,3708,3710,3712,3715,3717,3720,3722,3724,3726,3729,3731,3734,3736,3738,3740,3743,3745,3748,3750,3752,3754,3757,3759,3761,3763,3765,3767,3769,3771,3774,3776,3778,3780,3782,3784,3787,3789,3791,3793,3795,3797,3800,3802,3804,3806,3808,3810,3812,3814,3816,3818,3821,3823,3826,3828,3830,3832,3835,3837,3839,3841,3844,3846,3848,3850,3853,3855,3857,3859,3862,3864,3867,3869,3871,3873,3876,3878,3880,3882,3885,3887,3889,3891,3894,3896,3899,3901,3903,3905,3908,3910,3913,3915,3917,3919,3921,3923,3925,3927,3929,3931,3934,3936,3939,3941,3944,3946,3949,3951,3954,3956,3959,3961,3964,3966,3969,3971,3974,3976,3979,3981,3983,3985,3988,3990,3993,3995,3998,4000,4003,4005,4008,4010,4013,4015,4018,4020,4023,4025,4028,4030,4033,4035,4038,4040,4043,4045,4048,4050,4053,4055,4058,4060,4063,4065,4067,4069,4072,4074,4077,4079,4081,4083,4086,4088,4090,4092,4094,4096,4099,4101,4103,4105,4107,4109,4111,4113,4115,4117,4119,4121,4123,4125,4127,4129,4131,4133,4135,4137,4139,4141,4143,4145,4147,4149,4151,4153,4155,4157,4159,4161,4163,4165,4167,4169,4171,4173,4175,4177,4179,4181,4183,4186,4188,4190,4192,4194,4196,4199,4201,4203,4205,4207,4210,4212,4214,4216,4218,4220,4222,4224,4226,4228,4230,4232,4234,4236,4238,4240,4242,4244,4246,4248,4250,4252,4254,4256,4258,4260,4262,4264,4266,4268,4270,4272,4274,4276,4279,4281,4283,4285,4288,4290,4292,4294,4296,4298,4300,4302,4304,4306,4308,4310,4312,4314,4316,4318,4320,4322,4324,4326,4328,4330,4332,4334,4336,4338,4340,4342,4344,4346,4348,4350,4352,4354,4356,4358,4360,4362,4364,4366,4368,4370,4373,4375,4377,4379,4381,4383,4385,4387,4390,4392,4394,4396,4399,4401,4403,4405,4408,4410,4412,4414,4417,4419,4421,4423,4425,4427,4430,4432,4434,4436,4439,4441,4443,4445,4448,4450,4452,4454,4456,4458,4460,4462,4464,4466,4468,4470,4472,4474,4476,4478,4480,4482,4484,4486,4489,4491,4493,4495,4498,4500,4502,4504,4507,4509,4511,4513,4515,4517,4519,4521,4524,4526,4528,4530,4533,4535,4537,4539,4542,4544,4546,4548,4551,4553,4555,4557,4559,4561,4563,4565,4568,4570,4572,4574,4577,4579,4581,4583,4586,4588,4590,4592,4595,4597,4599,4601,4604,4606,4608,4610,4613,4615,4617,4619,4622,4624,4626,4628,4631,4633,4635,4637,4640,4642,4644,4646,4649,4651,4653,4655,4658,4660,4662,4664,4667,4669,4671,4673,4675,4677,4679,4681,4684,4686,4688,4690,4693,4695,4697,4699,4701,4703,4706,4708,4710,4712,4715,4717,4720,4722,4724,4726,4728,4730,4733,4735,4737,4739,4741,4743,4745,4747,4750,4752,4754,4756,4759,4761,4763,4765,4768,4770,4772,4774,4776,4778,4780,4782,4785,4787],"span",{"class":231,"line":232},"line",1,[229,234,236],{"class":235},"sMK4o","[{",[229,238,239],{"class":235},"\"",[229,241,243],{"class":242},"spNyl","id",[229,245,239],{"class":235},[229,247,248],{"class":235},":",[229,250,239],{"class":235},[229,252,254],{"class":253},"sfazB","83cd1b1c4cc8e310",[229,256,239],{"class":235},[229,258,259],{"class":235},",",[229,261,239],{"class":235},[229,263,264],{"class":242},"type",[229,266,239],{"class":235},[229,268,248],{"class":235},[229,270,239],{"class":235},[229,272,273],{"class":253},"group",[229,275,239],{"class":235},[229,277,259],{"class":235},[229,279,239],{"class":235},[229,281,282],{"class":242},"z",[229,284,239],{"class":235},[229,286,248],{"class":235},[229,288,239],{"class":235},[229,290,291],{"class":253},"3012f9c2796b5b41",[229,293,239],{"class":235},[229,295,259],{"class":235},[229,297,239],{"class":235},[229,299,300],{"class":242},"style",[229,302,239],{"class":235},[229,304,305],{"class":235},":{",[229,307,239],{"class":235},[229,309,311],{"class":310},"sBMFI","stroke",[229,313,239],{"class":235},[229,315,248],{"class":235},[229,317,239],{"class":235},[229,319,320],{"class":253},"#b2b3bd",[229,322,239],{"class":235},[229,324,259],{"class":235},[229,326,239],{"class":235},[229,328,329],{"class":310},"stroke-opacity",[229,331,239],{"class":235},[229,333,248],{"class":235},[229,335,239],{"class":235},[229,337,338],{"class":253},"1",[229,340,239],{"class":235},[229,342,259],{"class":235},[229,344,239],{"class":235},[229,346,347],{"class":310},"fill",[229,349,239],{"class":235},[229,351,248],{"class":235},[229,353,239],{"class":235},[229,355,356],{"class":253},"#f2f3fb",[229,358,239],{"class":235},[229,360,259],{"class":235},[229,362,239],{"class":235},[229,364,365],{"class":310},"fill-opacity",[229,367,239],{"class":235},[229,369,248],{"class":235},[229,371,239],{"class":235},[229,373,374],{"class":253},"0.5",[229,376,239],{"class":235},[229,378,259],{"class":235},[229,380,239],{"class":235},[229,382,383],{"class":310},"label",[229,385,239],{"class":235},[229,387,388],{"class":235},":true,",[229,390,239],{"class":235},[229,392,393],{"class":310},"label-position",[229,395,239],{"class":235},[229,397,248],{"class":235},[229,399,239],{"class":235},[229,401,402],{"class":253},"nw",[229,404,239],{"class":235},[229,406,259],{"class":235},[229,408,239],{"class":235},[229,410,411],{"class":310},"color",[229,413,239],{"class":235},[229,415,248],{"class":235},[229,417,239],{"class":235},[229,419,420],{"class":253},"#32333b",[229,422,239],{"class":235},[229,424,425],{"class":235},"},",[229,427,239],{"class":235},[229,429,430],{"class":242},"nodes",[229,432,239],{"class":235},[229,434,435],{"class":235},":[",[229,437,239],{"class":235},[229,439,440],{"class":253},"5a2c1cb7932accb9",[229,442,239],{"class":235},[229,444,259],{"class":235},[229,446,239],{"class":235},[229,448,449],{"class":253},"f2334a5d527a684a",[229,451,239],{"class":235},[229,453,259],{"class":235},[229,455,239],{"class":235},[229,457,458],{"class":253},"f65db363fdde0eba",[229,460,239],{"class":235},[229,462,259],{"class":235},[229,464,239],{"class":235},[229,466,467],{"class":253},"cdda81f6a2701b7c",[229,469,239],{"class":235},[229,471,259],{"class":235},[229,473,239],{"class":235},[229,475,476],{"class":253},"8554ad9dfdb36f54",[229,478,239],{"class":235},[229,480,259],{"class":235},[229,482,239],{"class":235},[229,484,485],{"class":253},"6dd109a105da5dd5",[229,487,239],{"class":235},[229,489,259],{"class":235},[229,491,239],{"class":235},[229,493,494],{"class":253},"439862e5c86675cd",[229,496,239],{"class":235},[229,498,259],{"class":235},[229,500,239],{"class":235},[229,502,503],{"class":253},"9d853fad37785bec",[229,505,239],{"class":235},[229,507,259],{"class":235},[229,509,239],{"class":235},[229,511,512],{"class":253},"3506d88cd094d44c",[229,514,239],{"class":235},[229,516,259],{"class":235},[229,518,239],{"class":235},[229,520,521],{"class":253},"wo_stats_http_in",[229,523,239],{"class":235},[229,525,259],{"class":235},[229,527,239],{"class":235},[229,529,530],{"class":253},"wo_stats_func",[229,532,239],{"class":235},[229,534,259],{"class":235},[229,536,239],{"class":235},[229,538,539],{"class":253},"wo_stats_response",[229,541,239],{"class":235},[229,543,259],{"class":235},[229,545,239],{"class":235},[229,547,548],{"class":253},"6d1644eabb9a5bf5",[229,550,239],{"class":235},[229,552,259],{"class":235},[229,554,239],{"class":235},[229,556,557],{"class":253},"62760b81dea503c2",[229,559,239],{"class":235},[229,561,562],{"class":235},"],",[229,564,239],{"class":235},[229,566,567],{"class":242},"x",[229,569,239],{"class":235},[229,571,248],{"class":235},[229,573,575],{"class":574},"sbssI","44",[229,577,259],{"class":235},[229,579,239],{"class":235},[229,581,582],{"class":242},"y",[229,584,239],{"class":235},[229,586,248],{"class":235},[229,588,589],{"class":574},"59",[229,591,259],{"class":235},[229,593,239],{"class":235},[229,595,596],{"class":242},"w",[229,598,239],{"class":235},[229,600,248],{"class":235},[229,602,603],{"class":574},"652",[229,605,259],{"class":235},[229,607,239],{"class":235},[229,609,610],{"class":242},"h",[229,612,239],{"class":235},[229,614,248],{"class":235},[229,616,617],{"class":574},"482",[229,619,620],{"class":235},"},{",[229,622,239],{"class":235},[229,624,243],{"class":242},[229,626,239],{"class":235},[229,628,248],{"class":235},[229,630,239],{"class":235},[229,632,440],{"class":253},[229,634,239],{"class":235},[229,636,259],{"class":235},[229,638,239],{"class":235},[229,640,264],{"class":242},[229,642,239],{"class":235},[229,644,248],{"class":235},[229,646,239],{"class":235},[229,648,649],{"class":253},"http in",[229,651,239],{"class":235},[229,653,259],{"class":235},[229,655,239],{"class":235},[229,657,282],{"class":242},[229,659,239],{"class":235},[229,661,248],{"class":235},[229,663,239],{"class":235},[229,665,291],{"class":253},[229,667,239],{"class":235},[229,669,259],{"class":235},[229,671,239],{"class":235},[229,673,674],{"class":242},"g",[229,676,239],{"class":235},[229,678,248],{"class":235},[229,680,239],{"class":235},[229,682,254],{"class":253},[229,684,239],{"class":235},[229,686,259],{"class":235},[229,688,239],{"class":235},[229,690,691],{"class":242},"name",[229,693,239],{"class":235},[229,695,248],{"class":235},[229,697,239],{"class":235},[229,699,700],{"class":253},"GET Work Orders",[229,702,239],{"class":235},[229,704,259],{"class":235},[229,706,239],{"class":235},[229,708,709],{"class":242},"url",[229,711,239],{"class":235},[229,713,248],{"class":235},[229,715,239],{"class":235},[229,717,718],{"class":253},"\u002Fworkorders",[229,720,239],{"class":235},[229,722,259],{"class":235},[229,724,239],{"class":235},[229,726,727],{"class":242},"method",[229,729,239],{"class":235},[229,731,248],{"class":235},[229,733,239],{"class":235},[229,735,736],{"class":253},"get",[229,738,239],{"class":235},[229,740,259],{"class":235},[229,742,239],{"class":235},[229,744,745],{"class":242},"upload",[229,747,239],{"class":235},[229,749,750],{"class":235},":false,",[229,752,239],{"class":235},[229,754,755],{"class":242},"skipBodyParsing",[229,757,239],{"class":235},[229,759,750],{"class":235},[229,761,239],{"class":235},[229,763,764],{"class":242},"swaggerDoc",[229,766,239],{"class":235},[229,768,248],{"class":235},[229,770,771],{"class":235},"\"\"",[229,773,259],{"class":235},[229,775,239],{"class":235},[229,777,567],{"class":242},[229,779,239],{"class":235},[229,781,248],{"class":235},[229,783,784],{"class":574},"160",[229,786,259],{"class":235},[229,788,239],{"class":235},[229,790,582],{"class":242},[229,792,239],{"class":235},[229,794,248],{"class":235},[229,796,218],{"class":574},[229,798,259],{"class":235},[229,800,239],{"class":235},[229,802,803],{"class":242},"wires",[229,805,239],{"class":235},[229,807,808],{"class":235},":[[",[229,810,239],{"class":235},[229,812,449],{"class":253},[229,814,239],{"class":235},[229,816,817],{"class":235},"]]},{",[229,819,239],{"class":235},[229,821,243],{"class":242},[229,823,239],{"class":235},[229,825,248],{"class":235},[229,827,239],{"class":235},[229,829,449],{"class":253},[229,831,239],{"class":235},[229,833,259],{"class":235},[229,835,239],{"class":235},[229,837,264],{"class":242},[229,839,239],{"class":235},[229,841,248],{"class":235},[229,843,239],{"class":235},[229,845,846],{"class":253},"function",[229,848,239],{"class":235},[229,850,259],{"class":235},[229,852,239],{"class":235},[229,854,282],{"class":242},[229,856,239],{"class":235},[229,858,248],{"class":235},[229,860,239],{"class":235},[229,862,291],{"class":253},[229,864,239],{"class":235},[229,866,259],{"class":235},[229,868,239],{"class":235},[229,870,674],{"class":242},[229,872,239],{"class":235},[229,874,248],{"class":235},[229,876,239],{"class":235},[229,878,254],{"class":253},[229,880,239],{"class":235},[229,882,259],{"class":235},[229,884,239],{"class":235},[229,886,691],{"class":242},[229,888,239],{"class":235},[229,890,248],{"class":235},[229,892,239],{"class":235},[229,894,895],{"class":253},"Generate Work Orders",[229,897,239],{"class":235},[229,899,259],{"class":235},[229,901,239],{"class":235},[229,903,904],{"class":242},"func",[229,906,239],{"class":235},[229,908,248],{"class":235},[229,910,239],{"class":235},[229,912,913],{"class":253},"const stationId = msg.req.query.stationId;",[229,915,917],{"class":916},"sTEyZ","\\n",[229,919,920],{"class":253},"const username = msg.req.query.username;",[229,922,923],{"class":916},"\\n\\n",[229,925,926],{"class":253},"const workOrders = global.get(",[229,928,929],{"class":916},"\\\"",[229,931,932],{"class":253},"workOrders",[229,934,929],{"class":916},[229,936,104],{"class":253},[229,938,929],{"class":916},[229,940,941],{"class":253},"persistent",[229,943,929],{"class":916},[229,945,946],{"class":253},") || [];",[229,948,923],{"class":916},[229,950,951],{"class":253},"const result = workOrders.filter(w =>",[229,953,917],{"class":916},[229,955,956],{"class":253},"    w.stationId === stationId &&",[229,958,917],{"class":916},[229,960,961],{"class":253},"    w.assignedTo === username &&",[229,963,917],{"class":916},[229,965,966],{"class":253},"    w.status !== ",[229,968,929],{"class":916},[229,970,971],{"class":253},"defect",[229,973,929],{"class":916},[229,975,976],{"class":253}," &&",[229,978,917],{"class":916},[229,980,966],{"class":253},[229,982,929],{"class":916},[229,984,985],{"class":253},"completed",[229,987,988],{"class":916},"\\\"\\n",[229,990,991],{"class":253},");",[229,993,923],{"class":916},[229,995,996],{"class":253},"msg.payload = result;",[229,998,923],{"class":916},[229,1000,1001],{"class":253},"return msg;",[229,1003,239],{"class":235},[229,1005,259],{"class":235},[229,1007,239],{"class":235},[229,1009,1010],{"class":242},"outputs",[229,1012,239],{"class":235},[229,1014,248],{"class":235},[229,1016,338],{"class":574},[229,1018,259],{"class":235},[229,1020,239],{"class":235},[229,1022,1023],{"class":242},"timeout",[229,1025,239],{"class":235},[229,1027,248],{"class":235},[229,1029,771],{"class":235},[229,1031,259],{"class":235},[229,1033,239],{"class":235},[229,1035,1036],{"class":242},"noerr",[229,1038,239],{"class":235},[229,1040,248],{"class":235},[229,1042,1043],{"class":574},"0",[229,1045,259],{"class":235},[229,1047,239],{"class":235},[229,1049,1050],{"class":242},"initialize",[229,1052,239],{"class":235},[229,1054,248],{"class":235},[229,1056,771],{"class":235},[229,1058,259],{"class":235},[229,1060,239],{"class":235},[229,1062,1063],{"class":242},"finalize",[229,1065,239],{"class":235},[229,1067,248],{"class":235},[229,1069,771],{"class":235},[229,1071,259],{"class":235},[229,1073,239],{"class":235},[229,1075,1076],{"class":242},"libs",[229,1078,239],{"class":235},[229,1080,1081],{"class":235},":[],",[229,1083,239],{"class":235},[229,1085,567],{"class":242},[229,1087,239],{"class":235},[229,1089,248],{"class":235},[229,1091,1092],{"class":574},"420",[229,1094,259],{"class":235},[229,1096,239],{"class":235},[229,1098,582],{"class":242},[229,1100,239],{"class":235},[229,1102,248],{"class":235},[229,1104,218],{"class":574},[229,1106,259],{"class":235},[229,1108,239],{"class":235},[229,1110,803],{"class":242},[229,1112,239],{"class":235},[229,1114,808],{"class":235},[229,1116,239],{"class":235},[229,1118,458],{"class":253},[229,1120,239],{"class":235},[229,1122,817],{"class":235},[229,1124,239],{"class":235},[229,1126,243],{"class":242},[229,1128,239],{"class":235},[229,1130,248],{"class":235},[229,1132,239],{"class":235},[229,1134,458],{"class":253},[229,1136,239],{"class":235},[229,1138,259],{"class":235},[229,1140,239],{"class":235},[229,1142,264],{"class":242},[229,1144,239],{"class":235},[229,1146,248],{"class":235},[229,1148,239],{"class":235},[229,1150,1151],{"class":253},"http response",[229,1153,239],{"class":235},[229,1155,259],{"class":235},[229,1157,239],{"class":235},[229,1159,282],{"class":242},[229,1161,239],{"class":235},[229,1163,248],{"class":235},[229,1165,239],{"class":235},[229,1167,291],{"class":253},[229,1169,239],{"class":235},[229,1171,259],{"class":235},[229,1173,239],{"class":235},[229,1175,674],{"class":242},[229,1177,239],{"class":235},[229,1179,248],{"class":235},[229,1181,239],{"class":235},[229,1183,254],{"class":253},[229,1185,239],{"class":235},[229,1187,259],{"class":235},[229,1189,239],{"class":235},[229,1191,691],{"class":242},[229,1193,239],{"class":235},[229,1195,248],{"class":235},[229,1197,771],{"class":235},[229,1199,259],{"class":235},[229,1201,239],{"class":235},[229,1203,1204],{"class":242},"statusCode",[229,1206,239],{"class":235},[229,1208,248],{"class":235},[229,1210,771],{"class":235},[229,1212,259],{"class":235},[229,1214,239],{"class":235},[229,1216,1217],{"class":242},"headers",[229,1219,239],{"class":235},[229,1221,305],{"class":235},[229,1223,239],{"class":235},[229,1225,1226],{"class":310},"Content-Type",[229,1228,239],{"class":235},[229,1230,248],{"class":235},[229,1232,239],{"class":235},[229,1234,1235],{"class":253},"application\u002Fjson",[229,1237,239],{"class":235},[229,1239,425],{"class":235},[229,1241,239],{"class":235},[229,1243,567],{"class":242},[229,1245,239],{"class":235},[229,1247,248],{"class":235},[229,1249,1250],{"class":574},"610",[229,1252,259],{"class":235},[229,1254,239],{"class":235},[229,1256,582],{"class":242},[229,1258,239],{"class":235},[229,1260,248],{"class":235},[229,1262,218],{"class":574},[229,1264,259],{"class":235},[229,1266,239],{"class":235},[229,1268,803],{"class":242},[229,1270,239],{"class":235},[229,1272,1273],{"class":235},":[]},{",[229,1275,239],{"class":235},[229,1277,243],{"class":242},[229,1279,239],{"class":235},[229,1281,248],{"class":235},[229,1283,239],{"class":235},[229,1285,467],{"class":253},[229,1287,239],{"class":235},[229,1289,259],{"class":235},[229,1291,239],{"class":235},[229,1293,264],{"class":242},[229,1295,239],{"class":235},[229,1297,248],{"class":235},[229,1299,239],{"class":235},[229,1301,649],{"class":253},[229,1303,239],{"class":235},[229,1305,259],{"class":235},[229,1307,239],{"class":235},[229,1309,282],{"class":242},[229,1311,239],{"class":235},[229,1313,248],{"class":235},[229,1315,239],{"class":235},[229,1317,291],{"class":253},[229,1319,239],{"class":235},[229,1321,259],{"class":235},[229,1323,239],{"class":235},[229,1325,674],{"class":242},[229,1327,239],{"class":235},[229,1329,248],{"class":235},[229,1331,239],{"class":235},[229,1333,254],{"class":253},[229,1335,239],{"class":235},[229,1337,259],{"class":235},[229,1339,239],{"class":235},[229,1341,691],{"class":242},[229,1343,239],{"class":235},[229,1345,248],{"class":235},[229,1347,239],{"class":235},[229,1349,1350],{"class":253},"POST Mark Defect",[229,1352,239],{"class":235},[229,1354,259],{"class":235},[229,1356,239],{"class":235},[229,1358,709],{"class":242},[229,1360,239],{"class":235},[229,1362,248],{"class":235},[229,1364,239],{"class":235},[229,1366,1367],{"class":253},"\u002Fworkorders\u002Fdefect",[229,1369,239],{"class":235},[229,1371,259],{"class":235},[229,1373,239],{"class":235},[229,1375,727],{"class":242},[229,1377,239],{"class":235},[229,1379,248],{"class":235},[229,1381,239],{"class":235},[229,1383,1384],{"class":253},"post",[229,1386,239],{"class":235},[229,1388,259],{"class":235},[229,1390,239],{"class":235},[229,1392,745],{"class":242},[229,1394,239],{"class":235},[229,1396,750],{"class":235},[229,1398,239],{"class":235},[229,1400,755],{"class":242},[229,1402,239],{"class":235},[229,1404,750],{"class":235},[229,1406,239],{"class":235},[229,1408,764],{"class":242},[229,1410,239],{"class":235},[229,1412,248],{"class":235},[229,1414,771],{"class":235},[229,1416,259],{"class":235},[229,1418,239],{"class":235},[229,1420,567],{"class":242},[229,1422,239],{"class":235},[229,1424,248],{"class":235},[229,1426,784],{"class":574},[229,1428,259],{"class":235},[229,1430,239],{"class":235},[229,1432,582],{"class":242},[229,1434,239],{"class":235},[229,1436,248],{"class":235},[229,1438,1439],{"class":574},"400",[229,1441,259],{"class":235},[229,1443,239],{"class":235},[229,1445,803],{"class":242},[229,1447,239],{"class":235},[229,1449,808],{"class":235},[229,1451,239],{"class":235},[229,1453,476],{"class":253},[229,1455,239],{"class":235},[229,1457,817],{"class":235},[229,1459,239],{"class":235},[229,1461,243],{"class":242},[229,1463,239],{"class":235},[229,1465,248],{"class":235},[229,1467,239],{"class":235},[229,1469,476],{"class":253},[229,1471,239],{"class":235},[229,1473,259],{"class":235},[229,1475,239],{"class":235},[229,1477,264],{"class":242},[229,1479,239],{"class":235},[229,1481,248],{"class":235},[229,1483,239],{"class":235},[229,1485,846],{"class":253},[229,1487,239],{"class":235},[229,1489,259],{"class":235},[229,1491,239],{"class":235},[229,1493,282],{"class":242},[229,1495,239],{"class":235},[229,1497,248],{"class":235},[229,1499,239],{"class":235},[229,1501,291],{"class":253},[229,1503,239],{"class":235},[229,1505,259],{"class":235},[229,1507,239],{"class":235},[229,1509,674],{"class":242},[229,1511,239],{"class":235},[229,1513,248],{"class":235},[229,1515,239],{"class":235},[229,1517,254],{"class":253},[229,1519,239],{"class":235},[229,1521,259],{"class":235},[229,1523,239],{"class":235},[229,1525,691],{"class":242},[229,1527,239],{"class":235},[229,1529,248],{"class":235},[229,1531,239],{"class":235},[229,1533,1534],{"class":253},"Mark Defect",[229,1536,239],{"class":235},[229,1538,259],{"class":235},[229,1540,239],{"class":235},[229,1542,904],{"class":242},[229,1544,239],{"class":235},[229,1546,248],{"class":235},[229,1548,239],{"class":235},[229,1550,1551],{"class":253},"const { workOrderId, issueType, severity, affectedPart, description } = msg.payload || {};",[229,1553,923],{"class":916},[229,1555,1556],{"class":253},"if (!workOrderId || !issueType || !severity || !affectedPart) {",[229,1558,917],{"class":916},[229,1560,1561],{"class":253},"    msg.statusCode = 400;",[229,1563,917],{"class":916},[229,1565,1566],{"class":253},"    msg.payload = { error: 'workOrderId, issueType, severity, and affectedPart are required' };",[229,1568,917],{"class":916},[229,1570,1571],{"class":253},"    return msg;",[229,1573,917],{"class":916},[229,1575,1576],{"class":253},"}",[229,1578,923],{"class":916},[229,1580,1581],{"class":253},"const workOrders = global.get('workOrders', 'persistent') || [];",[229,1583,917],{"class":916},[229,1585,1586],{"class":253},"const idx = workOrders.findIndex(w => w.workOrderId === workOrderId);",[229,1588,923],{"class":916},[229,1590,1591],{"class":253},"if (idx === -1) {",[229,1593,917],{"class":916},[229,1595,1596],{"class":253},"    msg.statusCode = 404;",[229,1598,917],{"class":916},[229,1600,1601],{"class":253},"    msg.payload = { error: 'Work order not found' };",[229,1603,917],{"class":916},[229,1605,1571],{"class":253},[229,1607,917],{"class":916},[229,1609,1576],{"class":253},[229,1611,923],{"class":916},[229,1613,1614],{"class":253},"workOrders[idx].status = 'defect';",[229,1616,917],{"class":916},[229,1618,1619],{"class":253},"workOrders[idx].defect = {",[229,1621,917],{"class":916},[229,1623,1624],{"class":253},"    issueType,",[229,1626,917],{"class":916},[229,1628,1629],{"class":253},"    severity,",[229,1631,917],{"class":916},[229,1633,1634],{"class":253},"    affectedPart,",[229,1636,917],{"class":916},[229,1638,1639],{"class":253},"    description: description || null,",[229,1641,917],{"class":916},[229,1643,1644],{"class":253},"    reportedAt: new Date().toISOString()",[229,1646,917],{"class":916},[229,1648,1649],{"class":253},"};",[229,1651,923],{"class":916},[229,1653,1654],{"class":253},"global.set('workOrders', workOrders, 'persistent');",[229,1656,923],{"class":916},[229,1658,1659],{"class":253},"msg.statusCode = 200;",[229,1661,917],{"class":916},[229,1663,1664],{"class":253},"msg.payload = { success: true, workOrder: workOrders[idx] };",[229,1666,917],{"class":916},[229,1668,1001],{"class":253},[229,1670,239],{"class":235},[229,1672,259],{"class":235},[229,1674,239],{"class":235},[229,1676,1010],{"class":242},[229,1678,239],{"class":235},[229,1680,248],{"class":235},[229,1682,338],{"class":574},[229,1684,259],{"class":235},[229,1686,239],{"class":235},[229,1688,1023],{"class":242},[229,1690,239],{"class":235},[229,1692,248],{"class":235},[229,1694,771],{"class":235},[229,1696,259],{"class":235},[229,1698,239],{"class":235},[229,1700,1036],{"class":242},[229,1702,239],{"class":235},[229,1704,248],{"class":235},[229,1706,1043],{"class":574},[229,1708,259],{"class":235},[229,1710,239],{"class":235},[229,1712,1050],{"class":242},[229,1714,239],{"class":235},[229,1716,248],{"class":235},[229,1718,771],{"class":235},[229,1720,259],{"class":235},[229,1722,239],{"class":235},[229,1724,1063],{"class":242},[229,1726,239],{"class":235},[229,1728,248],{"class":235},[229,1730,771],{"class":235},[229,1732,259],{"class":235},[229,1734,239],{"class":235},[229,1736,1076],{"class":242},[229,1738,239],{"class":235},[229,1740,1081],{"class":235},[229,1742,239],{"class":235},[229,1744,567],{"class":242},[229,1746,239],{"class":235},[229,1748,248],{"class":235},[229,1750,1751],{"class":574},"390",[229,1753,259],{"class":235},[229,1755,239],{"class":235},[229,1757,582],{"class":242},[229,1759,239],{"class":235},[229,1761,248],{"class":235},[229,1763,1439],{"class":574},[229,1765,259],{"class":235},[229,1767,239],{"class":235},[229,1769,803],{"class":242},[229,1771,239],{"class":235},[229,1773,808],{"class":235},[229,1775,239],{"class":235},[229,1777,485],{"class":253},[229,1779,239],{"class":235},[229,1781,817],{"class":235},[229,1783,239],{"class":235},[229,1785,243],{"class":242},[229,1787,239],{"class":235},[229,1789,248],{"class":235},[229,1791,239],{"class":235},[229,1793,485],{"class":253},[229,1795,239],{"class":235},[229,1797,259],{"class":235},[229,1799,239],{"class":235},[229,1801,264],{"class":242},[229,1803,239],{"class":235},[229,1805,248],{"class":235},[229,1807,239],{"class":235},[229,1809,1151],{"class":253},[229,1811,239],{"class":235},[229,1813,259],{"class":235},[229,1815,239],{"class":235},[229,1817,282],{"class":242},[229,1819,239],{"class":235},[229,1821,248],{"class":235},[229,1823,239],{"class":235},[229,1825,291],{"class":253},[229,1827,239],{"class":235},[229,1829,259],{"class":235},[229,1831,239],{"class":235},[229,1833,674],{"class":242},[229,1835,239],{"class":235},[229,1837,248],{"class":235},[229,1839,239],{"class":235},[229,1841,254],{"class":253},[229,1843,239],{"class":235},[229,1845,259],{"class":235},[229,1847,239],{"class":235},[229,1849,691],{"class":242},[229,1851,239],{"class":235},[229,1853,248],{"class":235},[229,1855,771],{"class":235},[229,1857,259],{"class":235},[229,1859,239],{"class":235},[229,1861,1204],{"class":242},[229,1863,239],{"class":235},[229,1865,248],{"class":235},[229,1867,771],{"class":235},[229,1869,259],{"class":235},[229,1871,239],{"class":235},[229,1873,1217],{"class":242},[229,1875,239],{"class":235},[229,1877,305],{"class":235},[229,1879,239],{"class":235},[229,1881,1226],{"class":310},[229,1883,239],{"class":235},[229,1885,248],{"class":235},[229,1887,239],{"class":235},[229,1889,1235],{"class":253},[229,1891,239],{"class":235},[229,1893,425],{"class":235},[229,1895,239],{"class":235},[229,1897,567],{"class":242},[229,1899,239],{"class":235},[229,1901,248],{"class":235},[229,1903,1250],{"class":574},[229,1905,259],{"class":235},[229,1907,239],{"class":235},[229,1909,582],{"class":242},[229,1911,239],{"class":235},[229,1913,248],{"class":235},[229,1915,1439],{"class":574},[229,1917,259],{"class":235},[229,1919,239],{"class":235},[229,1921,803],{"class":242},[229,1923,239],{"class":235},[229,1925,1273],{"class":235},[229,1927,239],{"class":235},[229,1929,243],{"class":242},[229,1931,239],{"class":235},[229,1933,248],{"class":235},[229,1935,239],{"class":235},[229,1937,494],{"class":253},[229,1939,239],{"class":235},[229,1941,259],{"class":235},[229,1943,239],{"class":235},[229,1945,264],{"class":242},[229,1947,239],{"class":235},[229,1949,248],{"class":235},[229,1951,239],{"class":235},[229,1953,649],{"class":253},[229,1955,239],{"class":235},[229,1957,259],{"class":235},[229,1959,239],{"class":235},[229,1961,282],{"class":242},[229,1963,239],{"class":235},[229,1965,248],{"class":235},[229,1967,239],{"class":235},[229,1969,291],{"class":253},[229,1971,239],{"class":235},[229,1973,259],{"class":235},[229,1975,239],{"class":235},[229,1977,674],{"class":242},[229,1979,239],{"class":235},[229,1981,248],{"class":235},[229,1983,239],{"class":235},[229,1985,254],{"class":253},[229,1987,239],{"class":235},[229,1989,259],{"class":235},[229,1991,239],{"class":235},[229,1993,691],{"class":242},[229,1995,239],{"class":235},[229,1997,248],{"class":235},[229,1999,239],{"class":235},[229,2001,2002],{"class":253},"POST Complete Order",[229,2004,239],{"class":235},[229,2006,259],{"class":235},[229,2008,239],{"class":235},[229,2010,709],{"class":242},[229,2012,239],{"class":235},[229,2014,248],{"class":235},[229,2016,239],{"class":235},[229,2018,2019],{"class":253},"\u002Fworkorders\u002Fcomplete",[229,2021,239],{"class":235},[229,2023,259],{"class":235},[229,2025,239],{"class":235},[229,2027,727],{"class":242},[229,2029,239],{"class":235},[229,2031,248],{"class":235},[229,2033,239],{"class":235},[229,2035,1384],{"class":253},[229,2037,239],{"class":235},[229,2039,259],{"class":235},[229,2041,239],{"class":235},[229,2043,745],{"class":242},[229,2045,239],{"class":235},[229,2047,750],{"class":235},[229,2049,239],{"class":235},[229,2051,755],{"class":242},[229,2053,239],{"class":235},[229,2055,750],{"class":235},[229,2057,239],{"class":235},[229,2059,764],{"class":242},[229,2061,239],{"class":235},[229,2063,248],{"class":235},[229,2065,771],{"class":235},[229,2067,259],{"class":235},[229,2069,239],{"class":235},[229,2071,567],{"class":242},[229,2073,239],{"class":235},[229,2075,248],{"class":235},[229,2077,2078],{"class":574},"170",[229,2080,259],{"class":235},[229,2082,239],{"class":235},[229,2084,582],{"class":242},[229,2086,239],{"class":235},[229,2088,248],{"class":235},[229,2090,2091],{"class":574},"500",[229,2093,259],{"class":235},[229,2095,239],{"class":235},[229,2097,803],{"class":242},[229,2099,239],{"class":235},[229,2101,808],{"class":235},[229,2103,239],{"class":235},[229,2105,503],{"class":253},[229,2107,239],{"class":235},[229,2109,817],{"class":235},[229,2111,239],{"class":235},[229,2113,243],{"class":242},[229,2115,239],{"class":235},[229,2117,248],{"class":235},[229,2119,239],{"class":235},[229,2121,503],{"class":253},[229,2123,239],{"class":235},[229,2125,259],{"class":235},[229,2127,239],{"class":235},[229,2129,264],{"class":242},[229,2131,239],{"class":235},[229,2133,248],{"class":235},[229,2135,239],{"class":235},[229,2137,846],{"class":253},[229,2139,239],{"class":235},[229,2141,259],{"class":235},[229,2143,239],{"class":235},[229,2145,282],{"class":242},[229,2147,239],{"class":235},[229,2149,248],{"class":235},[229,2151,239],{"class":235},[229,2153,291],{"class":253},[229,2155,239],{"class":235},[229,2157,259],{"class":235},[229,2159,239],{"class":235},[229,2161,674],{"class":242},[229,2163,239],{"class":235},[229,2165,248],{"class":235},[229,2167,239],{"class":235},[229,2169,254],{"class":253},[229,2171,239],{"class":235},[229,2173,259],{"class":235},[229,2175,239],{"class":235},[229,2177,691],{"class":242},[229,2179,239],{"class":235},[229,2181,248],{"class":235},[229,2183,239],{"class":235},[229,2185,2186],{"class":253},"Complete Work Order",[229,2188,239],{"class":235},[229,2190,259],{"class":235},[229,2192,239],{"class":235},[229,2194,904],{"class":242},[229,2196,239],{"class":235},[229,2198,248],{"class":235},[229,2200,239],{"class":235},[229,2202,2203],{"class":253},"const { workOrderId } = msg.payload || {};",[229,2205,923],{"class":916},[229,2207,2208],{"class":253},"if (!workOrderId) {",[229,2210,917],{"class":916},[229,2212,1561],{"class":253},[229,2214,917],{"class":916},[229,2216,2217],{"class":253},"    msg.payload = { error: 'workOrderId is required' };",[229,2219,917],{"class":916},[229,2221,1571],{"class":253},[229,2223,917],{"class":916},[229,2225,1576],{"class":253},[229,2227,923],{"class":916},[229,2229,1581],{"class":253},[229,2231,917],{"class":916},[229,2233,1586],{"class":253},[229,2235,923],{"class":916},[229,2237,1591],{"class":253},[229,2239,917],{"class":916},[229,2241,1596],{"class":253},[229,2243,917],{"class":916},[229,2245,1601],{"class":253},[229,2247,917],{"class":916},[229,2249,1571],{"class":253},[229,2251,917],{"class":916},[229,2253,1576],{"class":253},[229,2255,923],{"class":916},[229,2257,2258],{"class":253},"workOrders[idx].status = 'completed';",[229,2260,917],{"class":916},[229,2262,2263],{"class":253},"workOrders[idx].completedAt = new Date().toISOString();",[229,2265,923],{"class":916},[229,2267,1654],{"class":253},[229,2269,923],{"class":916},[229,2271,1659],{"class":253},[229,2273,917],{"class":916},[229,2275,1664],{"class":253},[229,2277,917],{"class":916},[229,2279,1001],{"class":253},[229,2281,239],{"class":235},[229,2283,259],{"class":235},[229,2285,239],{"class":235},[229,2287,1010],{"class":242},[229,2289,239],{"class":235},[229,2291,248],{"class":235},[229,2293,338],{"class":574},[229,2295,259],{"class":235},[229,2297,239],{"class":235},[229,2299,1023],{"class":242},[229,2301,239],{"class":235},[229,2303,248],{"class":235},[229,2305,771],{"class":235},[229,2307,259],{"class":235},[229,2309,239],{"class":235},[229,2311,1036],{"class":242},[229,2313,239],{"class":235},[229,2315,248],{"class":235},[229,2317,1043],{"class":574},[229,2319,259],{"class":235},[229,2321,239],{"class":235},[229,2323,1050],{"class":242},[229,2325,239],{"class":235},[229,2327,248],{"class":235},[229,2329,771],{"class":235},[229,2331,259],{"class":235},[229,2333,239],{"class":235},[229,2335,1063],{"class":242},[229,2337,239],{"class":235},[229,2339,248],{"class":235},[229,2341,771],{"class":235},[229,2343,259],{"class":235},[229,2345,239],{"class":235},[229,2347,1076],{"class":242},[229,2349,239],{"class":235},[229,2351,1081],{"class":235},[229,2353,239],{"class":235},[229,2355,567],{"class":242},[229,2357,239],{"class":235},[229,2359,248],{"class":235},[229,2361,2362],{"class":574},"410",[229,2364,259],{"class":235},[229,2366,239],{"class":235},[229,2368,582],{"class":242},[229,2370,239],{"class":235},[229,2372,248],{"class":235},[229,2374,2091],{"class":574},[229,2376,259],{"class":235},[229,2378,239],{"class":235},[229,2380,803],{"class":242},[229,2382,239],{"class":235},[229,2384,808],{"class":235},[229,2386,239],{"class":235},[229,2388,512],{"class":253},[229,2390,239],{"class":235},[229,2392,817],{"class":235},[229,2394,239],{"class":235},[229,2396,243],{"class":242},[229,2398,239],{"class":235},[229,2400,248],{"class":235},[229,2402,239],{"class":235},[229,2404,512],{"class":253},[229,2406,239],{"class":235},[229,2408,259],{"class":235},[229,2410,239],{"class":235},[229,2412,264],{"class":242},[229,2414,239],{"class":235},[229,2416,248],{"class":235},[229,2418,239],{"class":235},[229,2420,1151],{"class":253},[229,2422,239],{"class":235},[229,2424,259],{"class":235},[229,2426,239],{"class":235},[229,2428,282],{"class":242},[229,2430,239],{"class":235},[229,2432,248],{"class":235},[229,2434,239],{"class":235},[229,2436,291],{"class":253},[229,2438,239],{"class":235},[229,2440,259],{"class":235},[229,2442,239],{"class":235},[229,2444,674],{"class":242},[229,2446,239],{"class":235},[229,2448,248],{"class":235},[229,2450,239],{"class":235},[229,2452,254],{"class":253},[229,2454,239],{"class":235},[229,2456,259],{"class":235},[229,2458,239],{"class":235},[229,2460,691],{"class":242},[229,2462,239],{"class":235},[229,2464,248],{"class":235},[229,2466,771],{"class":235},[229,2468,259],{"class":235},[229,2470,239],{"class":235},[229,2472,1204],{"class":242},[229,2474,239],{"class":235},[229,2476,248],{"class":235},[229,2478,771],{"class":235},[229,2480,259],{"class":235},[229,2482,239],{"class":235},[229,2484,1217],{"class":242},[229,2486,239],{"class":235},[229,2488,305],{"class":235},[229,2490,239],{"class":235},[229,2492,1226],{"class":310},[229,2494,239],{"class":235},[229,2496,248],{"class":235},[229,2498,239],{"class":235},[229,2500,1235],{"class":253},[229,2502,239],{"class":235},[229,2504,425],{"class":235},[229,2506,239],{"class":235},[229,2508,567],{"class":242},[229,2510,239],{"class":235},[229,2512,248],{"class":235},[229,2514,2515],{"class":574},"620",[229,2517,259],{"class":235},[229,2519,239],{"class":235},[229,2521,582],{"class":242},[229,2523,239],{"class":235},[229,2525,248],{"class":235},[229,2527,2091],{"class":574},[229,2529,259],{"class":235},[229,2531,239],{"class":235},[229,2533,803],{"class":242},[229,2535,239],{"class":235},[229,2537,1273],{"class":235},[229,2539,239],{"class":235},[229,2541,243],{"class":242},[229,2543,239],{"class":235},[229,2545,248],{"class":235},[229,2547,239],{"class":235},[229,2549,521],{"class":253},[229,2551,239],{"class":235},[229,2553,259],{"class":235},[229,2555,239],{"class":235},[229,2557,264],{"class":242},[229,2559,239],{"class":235},[229,2561,248],{"class":235},[229,2563,239],{"class":235},[229,2565,649],{"class":253},[229,2567,239],{"class":235},[229,2569,259],{"class":235},[229,2571,239],{"class":235},[229,2573,282],{"class":242},[229,2575,239],{"class":235},[229,2577,248],{"class":235},[229,2579,239],{"class":235},[229,2581,291],{"class":253},[229,2583,239],{"class":235},[229,2585,259],{"class":235},[229,2587,239],{"class":235},[229,2589,674],{"class":242},[229,2591,239],{"class":235},[229,2593,248],{"class":235},[229,2595,239],{"class":235},[229,2597,254],{"class":253},[229,2599,239],{"class":235},[229,2601,259],{"class":235},[229,2603,239],{"class":235},[229,2605,691],{"class":242},[229,2607,239],{"class":235},[229,2609,248],{"class":235},[229,2611,239],{"class":235},[229,2613,2614],{"class":253},"GET Work Order Stats",[229,2616,239],{"class":235},[229,2618,259],{"class":235},[229,2620,239],{"class":235},[229,2622,709],{"class":242},[229,2624,239],{"class":235},[229,2626,248],{"class":235},[229,2628,239],{"class":235},[229,2630,2631],{"class":253},"\u002Fworkorders\u002Fstats",[229,2633,239],{"class":235},[229,2635,259],{"class":235},[229,2637,239],{"class":235},[229,2639,727],{"class":242},[229,2641,239],{"class":235},[229,2643,248],{"class":235},[229,2645,239],{"class":235},[229,2647,736],{"class":253},[229,2649,239],{"class":235},[229,2651,259],{"class":235},[229,2653,239],{"class":235},[229,2655,745],{"class":242},[229,2657,239],{"class":235},[229,2659,750],{"class":235},[229,2661,239],{"class":235},[229,2663,755],{"class":242},[229,2665,239],{"class":235},[229,2667,750],{"class":235},[229,2669,239],{"class":235},[229,2671,764],{"class":242},[229,2673,239],{"class":235},[229,2675,248],{"class":235},[229,2677,771],{"class":235},[229,2679,259],{"class":235},[229,2681,239],{"class":235},[229,2683,567],{"class":242},[229,2685,239],{"class":235},[229,2687,248],{"class":235},[229,2689,2690],{"class":574},"180",[229,2692,259],{"class":235},[229,2694,239],{"class":235},[229,2696,582],{"class":242},[229,2698,239],{"class":235},[229,2700,248],{"class":235},[229,2702,2703],{"class":574},"220",[229,2705,259],{"class":235},[229,2707,239],{"class":235},[229,2709,803],{"class":242},[229,2711,239],{"class":235},[229,2713,808],{"class":235},[229,2715,239],{"class":235},[229,2717,530],{"class":253},[229,2719,239],{"class":235},[229,2721,817],{"class":235},[229,2723,239],{"class":235},[229,2725,243],{"class":242},[229,2727,239],{"class":235},[229,2729,248],{"class":235},[229,2731,239],{"class":235},[229,2733,530],{"class":253},[229,2735,239],{"class":235},[229,2737,259],{"class":235},[229,2739,239],{"class":235},[229,2741,264],{"class":242},[229,2743,239],{"class":235},[229,2745,248],{"class":235},[229,2747,239],{"class":235},[229,2749,846],{"class":253},[229,2751,239],{"class":235},[229,2753,259],{"class":235},[229,2755,239],{"class":235},[229,2757,282],{"class":242},[229,2759,239],{"class":235},[229,2761,248],{"class":235},[229,2763,239],{"class":235},[229,2765,291],{"class":253},[229,2767,239],{"class":235},[229,2769,259],{"class":235},[229,2771,239],{"class":235},[229,2773,674],{"class":242},[229,2775,239],{"class":235},[229,2777,248],{"class":235},[229,2779,239],{"class":235},[229,2781,254],{"class":253},[229,2783,239],{"class":235},[229,2785,259],{"class":235},[229,2787,239],{"class":235},[229,2789,691],{"class":242},[229,2791,239],{"class":235},[229,2793,248],{"class":235},[229,2795,239],{"class":235},[229,2797,2798],{"class":253},"Compute Stats",[229,2800,239],{"class":235},[229,2802,259],{"class":235},[229,2804,239],{"class":235},[229,2806,904],{"class":242},[229,2808,239],{"class":235},[229,2810,248],{"class":235},[229,2812,239],{"class":235},[229,2814,1581],{"class":253},[229,2816,917],{"class":916},[229,2818,2819],{"class":253},"node.warn(msg.req.query);",[229,2821,917],{"class":916},[229,2823,913],{"class":253},[229,2825,917],{"class":916},[229,2827,920],{"class":253},[229,2829,923],{"class":916},[229,2831,2832],{"class":253},"\u002F\u002F Filter only by station",[229,2834,917],{"class":916},[229,2836,2837],{"class":253},"const stationWorkOrders = stationId",[229,2839,917],{"class":916},[229,2841,2842],{"class":253},"    ? workOrders.filter(w => w.stationId === stationId)",[229,2844,917],{"class":916},[229,2846,2847],{"class":253},"    : workOrders;",[229,2849,923],{"class":916},[229,2851,2852],{"class":253},"const total = stationWorkOrders.length;",[229,2854,917],{"class":916},[229,2856,2857],{"class":253},"const completed = stationWorkOrders.filter(w => w.status === ",[229,2859,929],{"class":916},[229,2861,985],{"class":253},[229,2863,929],{"class":916},[229,2865,2866],{"class":253},").length;",[229,2868,917],{"class":916},[229,2870,2871],{"class":253},"const defected = stationWorkOrders.filter(w => w.status === ",[229,2873,929],{"class":916},[229,2875,971],{"class":253},[229,2877,929],{"class":916},[229,2879,2866],{"class":253},[229,2881,923],{"class":916},[229,2883,2884],{"class":253},"\u002F\u002F Filter by user within the station",[229,2886,917],{"class":916},[229,2888,2889],{"class":253},"const assignedToMe = username",[229,2891,917],{"class":916},[229,2893,2894],{"class":253},"    ? stationWorkOrders.filter(w => w.assignedTo === username).length",[229,2896,917],{"class":916},[229,2898,2899],{"class":253},"    : 0;",[229,2901,923],{"class":916},[229,2903,1659],{"class":253},[229,2905,917],{"class":916},[229,2907,2908],{"class":253},"msg.payload = {",[229,2910,917],{"class":916},[229,2912,2913],{"class":253},"    total,",[229,2915,917],{"class":916},[229,2917,2918],{"class":253},"    completed,",[229,2920,917],{"class":916},[229,2922,2923],{"class":253},"    defected,",[229,2925,917],{"class":916},[229,2927,2928],{"class":253},"    assignedToMe",[229,2930,917],{"class":916},[229,2932,1649],{"class":253},[229,2934,923],{"class":916},[229,2936,1001],{"class":253},[229,2938,239],{"class":235},[229,2940,259],{"class":235},[229,2942,239],{"class":235},[229,2944,1010],{"class":242},[229,2946,239],{"class":235},[229,2948,248],{"class":235},[229,2950,338],{"class":574},[229,2952,259],{"class":235},[229,2954,239],{"class":235},[229,2956,1023],{"class":242},[229,2958,239],{"class":235},[229,2960,248],{"class":235},[229,2962,771],{"class":235},[229,2964,259],{"class":235},[229,2966,239],{"class":235},[229,2968,1036],{"class":242},[229,2970,239],{"class":235},[229,2972,248],{"class":235},[229,2974,1043],{"class":574},[229,2976,259],{"class":235},[229,2978,239],{"class":235},[229,2980,1050],{"class":242},[229,2982,239],{"class":235},[229,2984,248],{"class":235},[229,2986,771],{"class":235},[229,2988,259],{"class":235},[229,2990,239],{"class":235},[229,2992,1063],{"class":242},[229,2994,239],{"class":235},[229,2996,248],{"class":235},[229,2998,771],{"class":235},[229,3000,259],{"class":235},[229,3002,239],{"class":235},[229,3004,1076],{"class":242},[229,3006,239],{"class":235},[229,3008,1081],{"class":235},[229,3010,239],{"class":235},[229,3012,567],{"class":242},[229,3014,239],{"class":235},[229,3016,248],{"class":235},[229,3018,1439],{"class":574},[229,3020,259],{"class":235},[229,3022,239],{"class":235},[229,3024,582],{"class":242},[229,3026,239],{"class":235},[229,3028,248],{"class":235},[229,3030,2703],{"class":574},[229,3032,259],{"class":235},[229,3034,239],{"class":235},[229,3036,803],{"class":242},[229,3038,239],{"class":235},[229,3040,808],{"class":235},[229,3042,239],{"class":235},[229,3044,539],{"class":253},[229,3046,239],{"class":235},[229,3048,817],{"class":235},[229,3050,239],{"class":235},[229,3052,243],{"class":242},[229,3054,239],{"class":235},[229,3056,248],{"class":235},[229,3058,239],{"class":235},[229,3060,539],{"class":253},[229,3062,239],{"class":235},[229,3064,259],{"class":235},[229,3066,239],{"class":235},[229,3068,264],{"class":242},[229,3070,239],{"class":235},[229,3072,248],{"class":235},[229,3074,239],{"class":235},[229,3076,1151],{"class":253},[229,3078,239],{"class":235},[229,3080,259],{"class":235},[229,3082,239],{"class":235},[229,3084,282],{"class":242},[229,3086,239],{"class":235},[229,3088,248],{"class":235},[229,3090,239],{"class":235},[229,3092,291],{"class":253},[229,3094,239],{"class":235},[229,3096,259],{"class":235},[229,3098,239],{"class":235},[229,3100,674],{"class":242},[229,3102,239],{"class":235},[229,3104,248],{"class":235},[229,3106,239],{"class":235},[229,3108,254],{"class":253},[229,3110,239],{"class":235},[229,3112,259],{"class":235},[229,3114,239],{"class":235},[229,3116,691],{"class":242},[229,3118,239],{"class":235},[229,3120,248],{"class":235},[229,3122,771],{"class":235},[229,3124,259],{"class":235},[229,3126,239],{"class":235},[229,3128,1204],{"class":242},[229,3130,239],{"class":235},[229,3132,248],{"class":235},[229,3134,771],{"class":235},[229,3136,259],{"class":235},[229,3138,239],{"class":235},[229,3140,1217],{"class":242},[229,3142,239],{"class":235},[229,3144,305],{"class":235},[229,3146,239],{"class":235},[229,3148,1226],{"class":310},[229,3150,239],{"class":235},[229,3152,248],{"class":235},[229,3154,239],{"class":235},[229,3156,1235],{"class":253},[229,3158,239],{"class":235},[229,3160,425],{"class":235},[229,3162,239],{"class":235},[229,3164,567],{"class":242},[229,3166,239],{"class":235},[229,3168,248],{"class":235},[229,3170,1250],{"class":574},[229,3172,259],{"class":235},[229,3174,239],{"class":235},[229,3176,582],{"class":242},[229,3178,239],{"class":235},[229,3180,248],{"class":235},[229,3182,2703],{"class":574},[229,3184,259],{"class":235},[229,3186,239],{"class":235},[229,3188,803],{"class":242},[229,3190,239],{"class":235},[229,3192,1273],{"class":235},[229,3194,239],{"class":235},[229,3196,243],{"class":242},[229,3198,239],{"class":235},[229,3200,248],{"class":235},[229,3202,239],{"class":235},[229,3204,548],{"class":253},[229,3206,239],{"class":235},[229,3208,259],{"class":235},[229,3210,239],{"class":235},[229,3212,264],{"class":242},[229,3214,239],{"class":235},[229,3216,248],{"class":235},[229,3218,239],{"class":235},[229,3220,846],{"class":253},[229,3222,239],{"class":235},[229,3224,259],{"class":235},[229,3226,239],{"class":235},[229,3228,282],{"class":242},[229,3230,239],{"class":235},[229,3232,248],{"class":235},[229,3234,239],{"class":235},[229,3236,291],{"class":253},[229,3238,239],{"class":235},[229,3240,259],{"class":235},[229,3242,239],{"class":235},[229,3244,674],{"class":242},[229,3246,239],{"class":235},[229,3248,248],{"class":235},[229,3250,239],{"class":235},[229,3252,254],{"class":253},[229,3254,239],{"class":235},[229,3256,259],{"class":235},[229,3258,239],{"class":235},[229,3260,691],{"class":242},[229,3262,239],{"class":235},[229,3264,248],{"class":235},[229,3266,239],{"class":235},[229,3268,3269],{"class":253},"Generate Mock Work Orders",[229,3271,239],{"class":235},[229,3273,259],{"class":235},[229,3275,239],{"class":235},[229,3277,904],{"class":242},[229,3279,239],{"class":235},[229,3281,248],{"class":235},[229,3283,239],{"class":235},[229,3285,3286],{"class":253},"const user = global.get(",[229,3288,929],{"class":916},[229,3290,3291],{"class":253},"user",[229,3293,929],{"class":916},[229,3295,104],{"class":253},[229,3297,929],{"class":916},[229,3299,941],{"class":253},[229,3301,929],{"class":916},[229,3303,991],{"class":253},[229,3305,917],{"class":916},[229,3307,3308],{"class":253},"const currentUser = user?.username || ",[229,3310,929],{"class":916},[229,3312,3313],{"class":253},"operator1",[229,3315,929],{"class":916},[229,3317,3318],{"class":253},";",[229,3320,923],{"class":916},[229,3322,3323],{"class":253},"\u002F\u002F Pool of 5 operators (logged-in user + 4 others)",[229,3325,917],{"class":916},[229,3327,3328],{"class":253},"const operators = [",[229,3330,917],{"class":916},[229,3332,3333],{"class":253},"    currentUser,",[229,3335,917],{"class":916},[229,3337,3338],{"class":916},"    \\\"",[229,3340,3341],{"class":253},"operator2",[229,3343,929],{"class":916},[229,3345,259],{"class":253},[229,3347,917],{"class":916},[229,3349,3338],{"class":916},[229,3351,3352],{"class":253},"operator3",[229,3354,929],{"class":916},[229,3356,259],{"class":253},[229,3358,917],{"class":916},[229,3360,3338],{"class":916},[229,3362,3363],{"class":253},"operator4",[229,3365,929],{"class":916},[229,3367,259],{"class":253},[229,3369,917],{"class":916},[229,3371,3338],{"class":916},[229,3373,3374],{"class":253},"operator5",[229,3376,988],{"class":916},[229,3378,3379],{"class":253},"];",[229,3381,923],{"class":916},[229,3383,3384],{"class":253},"const vehicles = [",[229,3386,917],{"class":916},[229,3388,3389],{"class":253},"    {",[229,3391,917],{"class":916},[229,3393,3394],{"class":253},"        model: ",[229,3396,929],{"class":916},[229,3398,3399],{"class":253},"Sedan X",[229,3401,929],{"class":916},[229,3403,259],{"class":253},[229,3405,917],{"class":916},[229,3407,3408],{"class":253},"        variants: [",[229,3410,929],{"class":916},[229,3412,3413],{"class":253},"Standard",[229,3415,929],{"class":916},[229,3417,104],{"class":253},[229,3419,929],{"class":916},[229,3421,3422],{"class":253},"Premium",[229,3424,929],{"class":916},[229,3426,104],{"class":253},[229,3428,929],{"class":916},[229,3430,3431],{"class":253},"Sport",[229,3433,929],{"class":916},[229,3435,562],{"class":253},[229,3437,917],{"class":916},[229,3439,3440],{"class":253},"        colors: [",[229,3442,929],{"class":916},[229,3444,3445],{"class":253},"White",[229,3447,929],{"class":916},[229,3449,104],{"class":253},[229,3451,929],{"class":916},[229,3453,3454],{"class":253},"Black",[229,3456,929],{"class":916},[229,3458,104],{"class":253},[229,3460,929],{"class":916},[229,3462,3463],{"class":253},"Red",[229,3465,929],{"class":916},[229,3467,3468],{"class":253},"]",[229,3470,917],{"class":916},[229,3472,3473],{"class":253},"    },",[229,3475,917],{"class":916},[229,3477,3389],{"class":253},[229,3479,917],{"class":916},[229,3481,3394],{"class":253},[229,3483,929],{"class":916},[229,3485,3486],{"class":253},"SUV Y",[229,3488,929],{"class":916},[229,3490,259],{"class":253},[229,3492,917],{"class":916},[229,3494,3408],{"class":253},[229,3496,929],{"class":916},[229,3498,3499],{"class":253},"Base",[229,3501,929],{"class":916},[229,3503,104],{"class":253},[229,3505,929],{"class":916},[229,3507,3422],{"class":253},[229,3509,929],{"class":916},[229,3511,104],{"class":253},[229,3513,929],{"class":916},[229,3515,3431],{"class":253},[229,3517,929],{"class":916},[229,3519,562],{"class":253},[229,3521,917],{"class":916},[229,3523,3440],{"class":253},[229,3525,929],{"class":916},[229,3527,3528],{"class":253},"Grey",[229,3530,929],{"class":916},[229,3532,104],{"class":253},[229,3534,929],{"class":916},[229,3536,3445],{"class":253},[229,3538,929],{"class":916},[229,3540,104],{"class":253},[229,3542,929],{"class":916},[229,3544,3454],{"class":253},[229,3546,929],{"class":916},[229,3548,3468],{"class":253},[229,3550,917],{"class":916},[229,3552,3473],{"class":253},[229,3554,917],{"class":916},[229,3556,3389],{"class":253},[229,3558,917],{"class":916},[229,3560,3394],{"class":253},[229,3562,929],{"class":916},[229,3564,3565],{"class":253},"Truck Z",[229,3567,929],{"class":916},[229,3569,259],{"class":253},[229,3571,917],{"class":916},[229,3573,3408],{"class":253},[229,3575,929],{"class":916},[229,3577,3413],{"class":253},[229,3579,929],{"class":916},[229,3581,104],{"class":253},[229,3583,929],{"class":916},[229,3585,3586],{"class":253},"Heavy Duty",[229,3588,929],{"class":916},[229,3590,562],{"class":253},[229,3592,917],{"class":916},[229,3594,3440],{"class":253},[229,3596,929],{"class":916},[229,3598,3599],{"class":253},"Blue",[229,3601,929],{"class":916},[229,3603,104],{"class":253},[229,3605,929],{"class":916},[229,3607,3608],{"class":253},"Green",[229,3610,929],{"class":916},[229,3612,104],{"class":253},[229,3614,929],{"class":916},[229,3616,3445],{"class":253},[229,3618,929],{"class":916},[229,3620,3468],{"class":253},[229,3622,917],{"class":916},[229,3624,3473],{"class":253},[229,3626,917],{"class":916},[229,3628,3389],{"class":253},[229,3630,917],{"class":916},[229,3632,3394],{"class":253},[229,3634,929],{"class":916},[229,3636,3637],{"class":253},"Hatchback W",[229,3639,929],{"class":916},[229,3641,259],{"class":253},[229,3643,917],{"class":916},[229,3645,3408],{"class":253},[229,3647,929],{"class":916},[229,3649,3499],{"class":253},[229,3651,929],{"class":916},[229,3653,104],{"class":253},[229,3655,929],{"class":916},[229,3657,3431],{"class":253},[229,3659,929],{"class":916},[229,3661,562],{"class":253},[229,3663,917],{"class":916},[229,3665,3440],{"class":253},[229,3667,929],{"class":916},[229,3669,3670],{"class":253},"Silver",[229,3672,929],{"class":916},[229,3674,104],{"class":253},[229,3676,929],{"class":916},[229,3678,3679],{"class":253},"Yellow",[229,3681,929],{"class":916},[229,3683,104],{"class":253},[229,3685,929],{"class":916},[229,3687,3463],{"class":253},[229,3689,929],{"class":916},[229,3691,3468],{"class":253},[229,3693,917],{"class":916},[229,3695,3696],{"class":253},"    }",[229,3698,917],{"class":916},[229,3700,3379],{"class":253},[229,3702,923],{"class":916},[229,3704,3705],{"class":253},"const operations = [",[229,3707,917],{"class":916},[229,3709,3389],{"class":253},[229,3711,917],{"class":916},[229,3713,3714],{"class":253},"        operationId: ",[229,3716,929],{"class":916},[229,3718,3719],{"class":253},"OP_WHEEL_FL",[229,3721,929],{"class":916},[229,3723,259],{"class":253},[229,3725,917],{"class":916},[229,3727,3728],{"class":253},"        name: ",[229,3730,929],{"class":916},[229,3732,3733],{"class":253},"Install Front Left Wheel",[229,3735,929],{"class":916},[229,3737,259],{"class":253},[229,3739,917],{"class":916},[229,3741,3742],{"class":253},"        instructionSetId: ",[229,3744,929],{"class":916},[229,3746,3747],{"class":253},"INS001",[229,3749,929],{"class":916},[229,3751,259],{"class":253},[229,3753,917],{"class":916},[229,3755,3756],{"class":253},"        estimatedCycleTime: 45",[229,3758,917],{"class":916},[229,3760,3473],{"class":253},[229,3762,917],{"class":916},[229,3764,3389],{"class":253},[229,3766,917],{"class":916},[229,3768,3714],{"class":253},[229,3770,929],{"class":916},[229,3772,3773],{"class":253},"OP_WHEEL_FR",[229,3775,929],{"class":916},[229,3777,259],{"class":253},[229,3779,917],{"class":916},[229,3781,3728],{"class":253},[229,3783,929],{"class":916},[229,3785,3786],{"class":253},"Install Front Right Wheel",[229,3788,929],{"class":916},[229,3790,259],{"class":253},[229,3792,917],{"class":916},[229,3794,3742],{"class":253},[229,3796,929],{"class":916},[229,3798,3799],{"class":253},"INS002",[229,3801,929],{"class":916},[229,3803,259],{"class":253},[229,3805,917],{"class":916},[229,3807,3756],{"class":253},[229,3809,917],{"class":916},[229,3811,3696],{"class":253},[229,3813,917],{"class":916},[229,3815,3379],{"class":253},[229,3817,923],{"class":916},[229,3819,3820],{"class":253},"const priorities = [",[229,3822,929],{"class":916},[229,3824,3825],{"class":253},"Critical",[229,3827,929],{"class":916},[229,3829,104],{"class":253},[229,3831,929],{"class":916},[229,3833,3834],{"class":253},"High",[229,3836,929],{"class":916},[229,3838,104],{"class":253},[229,3840,929],{"class":916},[229,3842,3843],{"class":253},"Normal",[229,3845,929],{"class":916},[229,3847,104],{"class":253},[229,3849,929],{"class":916},[229,3851,3852],{"class":253},"Low",[229,3854,929],{"class":916},[229,3856,3379],{"class":253},[229,3858,917],{"class":916},[229,3860,3861],{"class":253},"const statuses = [",[229,3863,929],{"class":916},[229,3865,3866],{"class":253},"Ready",[229,3868,929],{"class":916},[229,3870,104],{"class":253},[229,3872,929],{"class":916},[229,3874,3875],{"class":253},"Waiting",[229,3877,929],{"class":916},[229,3879,104],{"class":253},[229,3881,929],{"class":916},[229,3883,3884],{"class":253},"Queued",[229,3886,929],{"class":916},[229,3888,3379],{"class":253},[229,3890,923],{"class":916},[229,3892,3893],{"class":253},"function random(arr) {",[229,3895,917],{"class":916},[229,3897,3898],{"class":253},"    return arr[Math.floor(Math.random() * arr.length)];",[229,3900,917],{"class":916},[229,3902,1576],{"class":253},[229,3904,923],{"class":916},[229,3906,3907],{"class":253},"\u002F\u002F Read existing work orders",[229,3909,917],{"class":916},[229,3911,3912],{"class":253},"const existingWorkOrders = global.get(",[229,3914,929],{"class":916},[229,3916,932],{"class":253},[229,3918,929],{"class":916},[229,3920,104],{"class":253},[229,3922,929],{"class":916},[229,3924,941],{"class":253},[229,3926,929],{"class":916},[229,3928,946],{"class":253},[229,3930,923],{"class":916},[229,3932,3933],{"class":253},"\u002F\u002F Start IDs after the existing ones",[229,3935,917],{"class":916},[229,3937,3938],{"class":253},"let nextId = 10245 + existingWorkOrders.length;",[229,3940,923],{"class":916},[229,3942,3943],{"class":253},"\u002F\u002F Generate 20 new work orders",[229,3945,917],{"class":916},[229,3947,3948],{"class":253},"for (let i = 0; i \u003C 20; i++) {",[229,3950,917],{"class":916},[229,3952,3953],{"class":253},"    const vehicle = random(vehicles);",[229,3955,917],{"class":916},[229,3957,3958],{"class":253},"    const operation = random(operations);",[229,3960,923],{"class":916},[229,3962,3963],{"class":253},"    existingWorkOrders.push({",[229,3965,917],{"class":916},[229,3967,3968],{"class":253},"        workOrderId: `WO-${nextId++}`,",[229,3970,917],{"class":916},[229,3972,3973],{"class":253},"        stationId: ",[229,3975,929],{"class":916},[229,3977,3978],{"class":253},"ST12",[229,3980,929],{"class":916},[229,3982,259],{"class":253},[229,3984,917],{"class":916},[229,3986,3987],{"class":253},"        status: random(statuses),",[229,3989,917],{"class":916},[229,3991,3992],{"class":253},"        priority: random(priorities),",[229,3994,917],{"class":916},[229,3996,3997],{"class":253},"        assignedTo: random(operators),",[229,3999,917],{"class":916},[229,4001,4002],{"class":253},"        vehicle: {",[229,4004,917],{"class":916},[229,4006,4007],{"class":253},"            vin: `MH01AB${1234567890 + existingWorkOrders.length}`,",[229,4009,917],{"class":916},[229,4011,4012],{"class":253},"            model: vehicle.model,",[229,4014,917],{"class":916},[229,4016,4017],{"class":253},"            variant: random(vehicle.variants),",[229,4019,917],{"class":916},[229,4021,4022],{"class":253},"            color: random(vehicle.colors)",[229,4024,917],{"class":916},[229,4026,4027],{"class":253},"        },",[229,4029,917],{"class":916},[229,4031,4032],{"class":253},"        operation: {",[229,4034,917],{"class":916},[229,4036,4037],{"class":253},"            operationId: operation.operationId,",[229,4039,917],{"class":916},[229,4041,4042],{"class":253},"            name: operation.name,",[229,4044,917],{"class":916},[229,4046,4047],{"class":253},"            estimatedCycleTime: operation.estimatedCycleTime,",[229,4049,917],{"class":916},[229,4051,4052],{"class":253},"            instructionSetId: operation.instructionSetId",[229,4054,917],{"class":916},[229,4056,4057],{"class":253},"        }",[229,4059,917],{"class":916},[229,4061,4062],{"class":253},"    });",[229,4064,917],{"class":916},[229,4066,1576],{"class":253},[229,4068,923],{"class":916},[229,4070,4071],{"class":253},"\u002F\u002F Save updated list",[229,4073,917],{"class":916},[229,4075,4076],{"class":253},"global.set(",[229,4078,929],{"class":916},[229,4080,932],{"class":253},[229,4082,929],{"class":916},[229,4084,4085],{"class":253},", existingWorkOrders, ",[229,4087,929],{"class":916},[229,4089,941],{"class":253},[229,4091,929],{"class":916},[229,4093,991],{"class":253},[229,4095,923],{"class":916},[229,4097,4098],{"class":253},"msg.payload = existingWorkOrders;",[229,4100,917],{"class":916},[229,4102,1001],{"class":253},[229,4104,239],{"class":235},[229,4106,259],{"class":235},[229,4108,239],{"class":235},[229,4110,1010],{"class":242},[229,4112,239],{"class":235},[229,4114,248],{"class":235},[229,4116,338],{"class":574},[229,4118,259],{"class":235},[229,4120,239],{"class":235},[229,4122,1023],{"class":242},[229,4124,239],{"class":235},[229,4126,248],{"class":235},[229,4128,1043],{"class":574},[229,4130,259],{"class":235},[229,4132,239],{"class":235},[229,4134,1036],{"class":242},[229,4136,239],{"class":235},[229,4138,248],{"class":235},[229,4140,1043],{"class":574},[229,4142,259],{"class":235},[229,4144,239],{"class":235},[229,4146,1050],{"class":242},[229,4148,239],{"class":235},[229,4150,248],{"class":235},[229,4152,771],{"class":235},[229,4154,259],{"class":235},[229,4156,239],{"class":235},[229,4158,1063],{"class":242},[229,4160,239],{"class":235},[229,4162,248],{"class":235},[229,4164,771],{"class":235},[229,4166,259],{"class":235},[229,4168,239],{"class":235},[229,4170,1076],{"class":242},[229,4172,239],{"class":235},[229,4174,1081],{"class":235},[229,4176,239],{"class":235},[229,4178,567],{"class":242},[229,4180,239],{"class":235},[229,4182,248],{"class":235},[229,4184,4185],{"class":574},"440",[229,4187,259],{"class":235},[229,4189,239],{"class":235},[229,4191,582],{"class":242},[229,4193,239],{"class":235},[229,4195,248],{"class":235},[229,4197,4198],{"class":574},"100",[229,4200,259],{"class":235},[229,4202,239],{"class":235},[229,4204,803],{"class":242},[229,4206,239],{"class":235},[229,4208,4209],{"class":235},":[[]]},{",[229,4211,239],{"class":235},[229,4213,243],{"class":242},[229,4215,239],{"class":235},[229,4217,248],{"class":235},[229,4219,239],{"class":235},[229,4221,557],{"class":253},[229,4223,239],{"class":235},[229,4225,259],{"class":235},[229,4227,239],{"class":235},[229,4229,264],{"class":242},[229,4231,239],{"class":235},[229,4233,248],{"class":235},[229,4235,239],{"class":235},[229,4237,119],{"class":253},[229,4239,239],{"class":235},[229,4241,259],{"class":235},[229,4243,239],{"class":235},[229,4245,282],{"class":242},[229,4247,239],{"class":235},[229,4249,248],{"class":235},[229,4251,239],{"class":235},[229,4253,291],{"class":253},[229,4255,239],{"class":235},[229,4257,259],{"class":235},[229,4259,239],{"class":235},[229,4261,674],{"class":242},[229,4263,239],{"class":235},[229,4265,248],{"class":235},[229,4267,239],{"class":235},[229,4269,254],{"class":253},[229,4271,239],{"class":235},[229,4273,259],{"class":235},[229,4275,239],{"class":235},[229,4277,4278],{"class":242},"ui",[229,4280,239],{"class":235},[229,4282,248],{"class":235},[229,4284,239],{"class":235},[229,4286,4287],{"class":253},"37b66bc5b4d6d3d3",[229,4289,239],{"class":235},[229,4291,259],{"class":235},[229,4293,239],{"class":235},[229,4295,691],{"class":242},[229,4297,239],{"class":235},[229,4299,248],{"class":235},[229,4301,771],{"class":235},[229,4303,259],{"class":235},[229,4305,239],{"class":235},[229,4307,567],{"class":242},[229,4309,239],{"class":235},[229,4311,248],{"class":235},[229,4313,784],{"class":574},[229,4315,259],{"class":235},[229,4317,239],{"class":235},[229,4319,582],{"class":242},[229,4321,239],{"class":235},[229,4323,248],{"class":235},[229,4325,4198],{"class":574},[229,4327,259],{"class":235},[229,4329,239],{"class":235},[229,4331,803],{"class":242},[229,4333,239],{"class":235},[229,4335,808],{"class":235},[229,4337,239],{"class":235},[229,4339,548],{"class":253},[229,4341,239],{"class":235},[229,4343,817],{"class":235},[229,4345,239],{"class":235},[229,4347,243],{"class":242},[229,4349,239],{"class":235},[229,4351,248],{"class":235},[229,4353,239],{"class":235},[229,4355,4287],{"class":253},[229,4357,239],{"class":235},[229,4359,259],{"class":235},[229,4361,239],{"class":235},[229,4363,264],{"class":242},[229,4365,239],{"class":235},[229,4367,248],{"class":235},[229,4369,239],{"class":235},[229,4371,4372],{"class":253},"ui-base",[229,4374,239],{"class":235},[229,4376,259],{"class":235},[229,4378,239],{"class":235},[229,4380,691],{"class":242},[229,4382,239],{"class":235},[229,4384,248],{"class":235},[229,4386,239],{"class":235},[229,4388,4389],{"class":253},"My Dashboard",[229,4391,239],{"class":235},[229,4393,259],{"class":235},[229,4395,239],{"class":235},[229,4397,4398],{"class":242},"path",[229,4400,239],{"class":235},[229,4402,248],{"class":235},[229,4404,239],{"class":235},[229,4406,4407],{"class":253},"\u002Fdashboard",[229,4409,239],{"class":235},[229,4411,259],{"class":235},[229,4413,239],{"class":235},[229,4415,4416],{"class":242},"appIcon",[229,4418,239],{"class":235},[229,4420,248],{"class":235},[229,4422,771],{"class":235},[229,4424,259],{"class":235},[229,4426,239],{"class":235},[229,4428,4429],{"class":242},"includeClientData",[229,4431,239],{"class":235},[229,4433,388],{"class":235},[229,4435,239],{"class":235},[229,4437,4438],{"class":242},"acceptsClientConfig",[229,4440,239],{"class":235},[229,4442,435],{"class":235},[229,4444,239],{"class":235},[229,4446,4447],{"class":253},"ui-notification",[229,4449,239],{"class":235},[229,4451,259],{"class":235},[229,4453,239],{"class":235},[229,4455,116],{"class":253},[229,4457,239],{"class":235},[229,4459,259],{"class":235},[229,4461,239],{"class":235},[229,4463,103],{"class":253},[229,4465,239],{"class":235},[229,4467,259],{"class":235},[229,4469,239],{"class":235},[229,4471,110],{"class":253},[229,4473,239],{"class":235},[229,4475,259],{"class":235},[229,4477,239],{"class":235},[229,4479,107],{"class":253},[229,4481,239],{"class":235},[229,4483,259],{"class":235},[229,4485,239],{"class":235},[229,4487,4488],{"class":253},"ui-text-input",[229,4490,239],{"class":235},[229,4492,259],{"class":235},[229,4494,239],{"class":235},[229,4496,4497],{"class":253},"ui-number-input",[229,4499,239],{"class":235},[229,4501,259],{"class":235},[229,4503,239],{"class":235},[229,4505,4506],{"class":253},"ui-file-input",[229,4508,239],{"class":235},[229,4510,259],{"class":235},[229,4512,239],{"class":235},[229,4514,113],{"class":253},[229,4516,239],{"class":235},[229,4518,259],{"class":235},[229,4520,239],{"class":235},[229,4522,4523],{"class":253},"ui-button-group",[229,4525,239],{"class":235},[229,4527,259],{"class":235},[229,4529,239],{"class":235},[229,4531,4532],{"class":253},"ui-dropdown",[229,4534,239],{"class":235},[229,4536,259],{"class":235},[229,4538,239],{"class":235},[229,4540,4541],{"class":253},"ui-radio-group",[229,4543,239],{"class":235},[229,4545,259],{"class":235},[229,4547,239],{"class":235},[229,4549,4550],{"class":253},"ui-slider",[229,4552,239],{"class":235},[229,4554,259],{"class":235},[229,4556,239],{"class":235},[229,4558,122],{"class":253},[229,4560,239],{"class":235},[229,4562,259],{"class":235},[229,4564,239],{"class":235},[229,4566,4567],{"class":253},"ui-switch",[229,4569,239],{"class":235},[229,4571,259],{"class":235},[229,4573,239],{"class":235},[229,4575,4576],{"class":253},"ui-chart",[229,4578,239],{"class":235},[229,4580,259],{"class":235},[229,4582,239],{"class":235},[229,4584,4585],{"class":253},"ui-audio",[229,4587,239],{"class":235},[229,4589,259],{"class":235},[229,4591,239],{"class":235},[229,4593,4594],{"class":253},"ui-markdown",[229,4596,239],{"class":235},[229,4598,259],{"class":235},[229,4600,239],{"class":235},[229,4602,4603],{"class":253},"ui-progress",[229,4605,239],{"class":235},[229,4607,259],{"class":235},[229,4609,239],{"class":235},[229,4611,4612],{"class":253},"ui-gauge",[229,4614,239],{"class":235},[229,4616,562],{"class":235},[229,4618,239],{"class":235},[229,4620,4621],{"class":242},"showPathInSidebar",[229,4623,239],{"class":235},[229,4625,750],{"class":235},[229,4627,239],{"class":235},[229,4629,4630],{"class":242},"headerContent",[229,4632,239],{"class":235},[229,4634,248],{"class":235},[229,4636,239],{"class":235},[229,4638,4639],{"class":253},"page",[229,4641,239],{"class":235},[229,4643,259],{"class":235},[229,4645,239],{"class":235},[229,4647,4648],{"class":242},"navigationStyle",[229,4650,239],{"class":235},[229,4652,248],{"class":235},[229,4654,239],{"class":235},[229,4656,4657],{"class":253},"default",[229,4659,239],{"class":235},[229,4661,259],{"class":235},[229,4663,239],{"class":235},[229,4665,4666],{"class":242},"titleBarStyle",[229,4668,239],{"class":235},[229,4670,248],{"class":235},[229,4672,239],{"class":235},[229,4674,4657],{"class":253},[229,4676,239],{"class":235},[229,4678,259],{"class":235},[229,4680,239],{"class":235},[229,4682,4683],{"class":242},"showReconnectNotification",[229,4685,239],{"class":235},[229,4687,388],{"class":235},[229,4689,239],{"class":235},[229,4691,4692],{"class":242},"notificationDisplayTime",[229,4694,239],{"class":235},[229,4696,248],{"class":235},[229,4698,338],{"class":574},[229,4700,259],{"class":235},[229,4702,239],{"class":235},[229,4704,4705],{"class":242},"showDisconnectNotification",[229,4707,239],{"class":235},[229,4709,388],{"class":235},[229,4711,239],{"class":235},[229,4713,4714],{"class":242},"allowInstall",[229,4716,239],{"class":235},[229,4718,4719],{"class":235},":false},{",[229,4721,239],{"class":235},[229,4723,243],{"class":242},[229,4725,239],{"class":235},[229,4727,248],{"class":235},[229,4729,239],{"class":235},[229,4731,4732],{"class":253},"4b583d9b76bf5cf2",[229,4734,239],{"class":235},[229,4736,259],{"class":235},[229,4738,239],{"class":235},[229,4740,264],{"class":242},[229,4742,239],{"class":235},[229,4744,248],{"class":235},[229,4746,239],{"class":235},[229,4748,4749],{"class":253},"global-config",[229,4751,239],{"class":235},[229,4753,259],{"class":235},[229,4755,239],{"class":235},[229,4757,4758],{"class":242},"env",[229,4760,239],{"class":235},[229,4762,1081],{"class":235},[229,4764,239],{"class":235},[229,4766,4767],{"class":242},"modules",[229,4769,239],{"class":235},[229,4771,305],{"class":235},[229,4773,239],{"class":235},[229,4775,99],{"class":310},[229,4777,239],{"class":235},[229,4779,248],{"class":235},[229,4781,239],{"class":235},[229,4783,4784],{"class":253},"1.30.2",[229,4786,239],{"class":235},[229,4788,4789],{"class":235},"}}]\n",[12,4791,4792,4793,4796],{},"The flow initializes a set of sample work orders and exposes REST APIs that the Digital Work Instructions application uses throughout this tutorial. The ",[97,4794,4795],{},"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,4798,4800],{"id":4799},"setting-up-the-dashboard-layout","Setting Up the Dashboard Layout",[12,4802,4803,4804,4809,4810,4813,4814,4817,4818,4821],{},"The application consists of three pages. Most widgets are placed inside named groups, while a few are scoped differently. See the ",[77,4805,4808],{"href":4806,"rel":4807},"https:\u002F\u002Fdashboard.flowfuse.com\u002Fgetting-started",[81],"Dashboard layout docs"," if you're new to how pages, groups, and bases relate. The app bar greeting is ",[45,4811,4812],{},"UI-scoped",", and the work instruction widget is ",[45,4815,4816],{},"page-scoped",", allowing it to fill the entire ",[45,4819,4820],{},"Instructions"," page without requiring a group. Before adding any widgets, create the dashboard structure by setting up the pages and groups.",[148,4823,4824,4869,4872,4904],{},[70,4825,4826,4827,4830,4831],{},"Create three ",[45,4828,4829],{},"ui-page"," nodes. The Dashboard automatically creates a base dashboard the first time you add a Dashboard node to the canvas.",[67,4832,4833,4847,4858],{},[70,4834,4835,4838,4839,4842,4843,4846],{},[45,4836,4837],{},"Home"," (path: ",[97,4840,4841],{},"\u002Fhome",") – The operator's landing page after login. Set the layout to ",[45,4844,4845],{},"Notebook"," to match the demo application.",[70,4848,4849,4838,4851,4854,4855,57],{},[45,4850,4820],{},[97,4852,4853],{},"\u002Finstructions",") – Displays the step-by-step work instructions. Set the layout to ",[45,4856,4857],{},"Grid",[70,4859,4860,4838,4863,4866,4867,57],{},[45,4861,4862],{},"Report Issue",[97,4864,4865],{},"\u002Freport-issue",") – Contains the defect reporting form. Set the layout to ",[45,4868,4857],{},[70,4870,4871],{},"Configure the theme for each page as desired.",[70,4873,4874,4875,4877,4878,4881,4882],{},"On the ",[45,4876,4837],{}," page, create four ",[45,4879,4880],{},"ui-group"," nodes:",[67,4883,4884,4889,4894,4899],{},[70,4885,4886],{},[45,4887,4888],{},"Current Station",[70,4890,4891],{},[45,4892,4893],{},"Stats",[70,4895,4896],{},[45,4897,4898],{},"Current Work Order",[70,4900,4901],{},[45,4902,4903],{},"Up Next",[70,4905,4874,4906,4908,4909,4911,4912,4914],{},[45,4907,4862],{}," page, create a single ",[45,4910,4880],{}," named ",[45,4913,4862],{},". This group will contain the issue reporting form and its action buttons.",[12,4916,4917,4918,4920,4921,4923],{},"The ",[45,4919,4820],{}," page does not require a ",[45,4922,4880],{}," because the work instruction widget is page-scoped and automatically occupies the full page.",[12,4925,4926],{},"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,4928,4930],{"id":4929},"enabling-flowfuse-user-authentication","Enabling FlowFuse User Authentication",[12,4932,4933],{},"Everything starts with a login. Without authentication, the dashboard cannot identify who is using it, so every visitor sees the same experience.",[40,4935,4936],{},[12,4937,4938,4940],{},[45,4939,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.",[148,4942,4943,4949,4956],{},[70,4944,4945,4946,57],{},"Open your FlowFuse instance ",[45,4947,4948],{},"Settings",[70,4950,4951,4952,4955],{},"Select the ",[45,4953,4954],{},"Security"," tab.",[70,4957,4958,4959,57],{},"Enable ",[45,4960,4961],{},"FlowFuse User Authentication",[12,4963,4964,4968],{},[21,4965],{"alt":4966,"src":4967},"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,4969,4970],{},"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,4972,4973],{},"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,4975,4976],{},"Because this tutorial also interacts with the FlowFuse API, you'll need to create a Personal Access Token:",[148,4978,4980,4989,4992],{"start":4979},4,[70,4981,4982,4983,4985,4986,57],{},"In the same ",[45,4984,4954],{}," tab, click ",[45,4987,4988],{},"Add Token",[70,4990,4991],{},"Enter a name for the token and choose an expiration date.",[70,4993,4994,4995,4998],{},"Click ",[45,4996,4997],{},"Create",", then copy the generated token and save it somewhere secure. You will need it later in the tutorial.",[40,5000,5001],{},[12,5002,5003,5006,5007,5010,5011,5013],{},[45,5004,5005],{},"Security note:"," Every ",[97,5008,5009],{},"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 ",[97,5012,5009],{}," node's auth config instead, so the raw token never sits in exported flow JSON or version control.",[59,5015,5017],{"id":5016},"installing-the-user-addon","Installing the User Addon",[12,5019,5020],{},"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.",[148,5022,5023,5029,5035,5041],{},[70,5024,5025,5026,57],{},"Open ",[45,5027,5028],{},"Manage Palette",[70,5030,5031,5032,4955],{},"Go to the ",[45,5033,5034],{},"Install",[70,5036,5037,5038,57],{},"Search for ",[97,5039,5040],{},"@flowfuse\u002Fnode-red-dashboard-2-user-addon",[70,5042,4994,5043,57],{},[45,5044,5034],{},[12,5046,5047,5048,5050],{},"After installation, every Dashboard message includes a ",[97,5049,198],{}," object:",[220,5052,5054],{"className":222,"code":5053,"language":224,"meta":225,"style":225},"{\n  \"userId\": \"\",\n  \"username\": \"\",\n  \"email\": \"\",\n  \"name\": \"\",\n  \"image\": \"\"\n}\n",[97,5055,5056,5061,5080,5096,5111,5126,5141],{"__ignoreMap":225},[229,5057,5058],{"class":231,"line":232},[229,5059,5060],{"class":235},"{\n",[229,5062,5064,5067,5070,5072,5074,5077],{"class":231,"line":5063},2,[229,5065,5066],{"class":235},"  \"",[229,5068,5069],{"class":242},"userId",[229,5071,239],{"class":235},[229,5073,248],{"class":235},[229,5075,5076],{"class":235}," \"\"",[229,5078,5079],{"class":235},",\n",[229,5081,5083,5085,5088,5090,5092,5094],{"class":231,"line":5082},3,[229,5084,5066],{"class":235},[229,5086,5087],{"class":242},"username",[229,5089,239],{"class":235},[229,5091,248],{"class":235},[229,5093,5076],{"class":235},[229,5095,5079],{"class":235},[229,5097,5098,5100,5103,5105,5107,5109],{"class":231,"line":4979},[229,5099,5066],{"class":235},[229,5101,5102],{"class":242},"email",[229,5104,239],{"class":235},[229,5106,248],{"class":235},[229,5108,5076],{"class":235},[229,5110,5079],{"class":235},[229,5112,5114,5116,5118,5120,5122,5124],{"class":231,"line":5113},5,[229,5115,5066],{"class":235},[229,5117,691],{"class":242},[229,5119,239],{"class":235},[229,5121,248],{"class":235},[229,5123,5076],{"class":235},[229,5125,5079],{"class":235},[229,5127,5129,5131,5134,5136,5138],{"class":231,"line":5128},6,[229,5130,5066],{"class":235},[229,5132,5133],{"class":242},"image",[229,5135,239],{"class":235},[229,5137,248],{"class":235},[229,5139,5140],{"class":235}," \"\"\n",[229,5142,5144],{"class":231,"line":5143},7,[229,5145,5146],{"class":235},"}\n",[12,5148,5149,5150,5152,5153,5156,5157,5160],{},"The same information is available in a ",[45,5151,103],{}," using ",[97,5154,5155],{},"setup.socketio.auth.user"," (or ",[97,5158,5159],{},"this.setup.socketio.auth.user"," in the script).",[148,5162,5163,5174],{},[70,5164,5165,5166,5169,5170,5173],{},"In the ",[45,5167,5168],{},"FF Auth"," sidebar tab, ensure ",[45,5171,5172],{},"Include Client Data"," is enabled.",[70,5175,5176,5177,5180,5181,104,5183,104,5185,104,5187,5189,5190,5192],{},"Also enable ",[45,5178,5179],{},"Accept Client Data"," for ",[45,5182,103],{},[45,5184,116],{},[45,5186,119],{},[45,5188,110],{},", and ",[45,5191,107],{}," so each browser session is handled independently and operators don't affect each other's dashboard.",[12,5194,5195,5199],{},[21,5196],{"alt":5197,"src":5198},"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,5200,4958,5201,5203,5204,5206],{},[45,5202,5172],{}," and ",[45,5205,5179],{}," to make Dashboard interactions user-specific.",[12,5208,5209,5210,5212,5213,5215,5216,5218],{},"This is the setting that matters most in this tutorial, and it's worth being explicit about why. With ",[45,5211,5179],{}," enabled, every message a widget sends carries ",[97,5214,198],{}," 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 ",[97,5217,198],{}," as the source of truth for \"who is acting right now\" in every function node from here on, rather than a global variable.",[59,5220,5222],{"id":5221},"greeting-the-logged-in-operator","Greeting the Logged-In Operator",[12,5224,5225,5226,5231],{},"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 ",[77,5227,5230],{"href":5228,"rel":5229},"https:\u002F\u002Fdashboard.flowfuse.com\u002Fnodes\u002Fwidgets\u002Fui-template.html#teleports",[81],"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.",[148,5233,5234,5240,5247],{},[70,5235,5236,5237,5239],{},"Add a ",[97,5238,103],{}," node and name it \"App Bar User Info\".",[70,5241,5242,5243,5246],{},"Set its type to ",[45,5244,5245],{},"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,5248,5249],{},"Paste in the snippet below:",[220,5251,5255],{"className":5252,"code":5253,"language":5254,"meta":225,"style":225},"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",[97,5256,5257,5269,5275,5309,5331,5353,5372,5381,5391,5400,5407,5417,5430,5441,5462,5468,5478,5484,5501,5507,5512,5521,5526,5535,5578,5611],{"__ignoreMap":225},[229,5258,5259,5262,5266],{"class":231,"line":232},[229,5260,5261],{"class":235},"\u003C",[229,5263,5265],{"class":5264},"swJcz","template",[229,5267,5268],{"class":235},">\n",[229,5270,5271],{"class":231,"line":5063},[229,5272,5274],{"class":5273},"sHwdD","    \u003C!-- Teleport into #app-bar-actions, the action bar's right-hand corner -->\n",[229,5276,5277,5280,5282,5285,5288,5290,5293,5295,5298,5300,5302,5305,5307],{"class":231,"line":5082},[229,5278,5279],{"class":235},"    \u003C",[229,5281,5230],{"class":5264},[229,5283,5284],{"class":242}," v-if",[229,5286,5287],{"class":235},"=",[229,5289,239],{"class":235},[229,5291,5292],{"class":253},"loaded",[229,5294,239],{"class":235},[229,5296,5297],{"class":242}," to",[229,5299,5287],{"class":235},[229,5301,239],{"class":235},[229,5303,5304],{"class":253},"#app-bar-actions",[229,5306,239],{"class":235},[229,5308,5268],{"class":235},[229,5310,5311,5314,5317,5320,5322,5324,5327,5329],{"class":231,"line":4979},[229,5312,5313],{"class":235},"        \u003C",[229,5315,5316],{"class":5264},"div",[229,5318,5319],{"class":242}," class",[229,5321,5287],{"class":235},[229,5323,239],{"class":235},[229,5325,5326],{"class":253},"user-info",[229,5328,239],{"class":235},[229,5330,5268],{"class":235},[229,5332,5333,5336,5338,5341,5343,5345,5348,5350],{"class":231,"line":5113},[229,5334,5335],{"class":235},"            \u003C",[229,5337,21],{"class":5264},[229,5339,5340],{"class":242}," :src",[229,5342,5287],{"class":235},[229,5344,239],{"class":235},[229,5346,5347],{"class":253},"setup.socketio.auth.user.image",[229,5349,239],{"class":235},[229,5351,5352],{"class":235}," \u002F>\n",[229,5354,5355,5357,5359,5362,5365,5368,5370],{"class":231,"line":5128},[229,5356,5335],{"class":235},[229,5358,229],{"class":5264},[229,5360,5361],{"class":235},">",[229,5363,5364],{"class":916},"Hi, {{ setup.socketio.auth.user.name }}",[229,5366,5367],{"class":235},"\u003C\u002F",[229,5369,229],{"class":5264},[229,5371,5268],{"class":235},[229,5373,5374,5377,5379],{"class":231,"line":5143},[229,5375,5376],{"class":235},"        \u003C\u002F",[229,5378,5316],{"class":5264},[229,5380,5268],{"class":235},[229,5382,5384,5387,5389],{"class":231,"line":5383},8,[229,5385,5386],{"class":235},"    \u003C\u002F",[229,5388,5230],{"class":5264},[229,5390,5268],{"class":235},[229,5392,5394,5396,5398],{"class":231,"line":5393},9,[229,5395,5367],{"class":235},[229,5397,5265],{"class":5264},[229,5399,5268],{"class":235},[229,5401,5403],{"class":231,"line":5402},10,[229,5404,5406],{"emptyLinePlaceholder":5405},true,"\n",[229,5408,5410,5412,5415],{"class":231,"line":5409},11,[229,5411,5261],{"class":235},[229,5413,5414],{"class":5264},"script",[229,5416,5268],{"class":235},[229,5418,5420,5424,5427],{"class":231,"line":5419},12,[229,5421,5423],{"class":5422},"s7zQu","export",[229,5425,5426],{"class":5422}," default",[229,5428,5429],{"class":235}," {\n",[229,5431,5433,5436,5439],{"class":231,"line":5432},13,[229,5434,5435],{"class":5264},"    data",[229,5437,5438],{"class":235},"()",[229,5440,5429],{"class":235},[229,5442,5444,5447,5450,5453,5455,5459],{"class":231,"line":5443},14,[229,5445,5446],{"class":5422},"        return",[229,5448,5449],{"class":235}," {",[229,5451,5452],{"class":5264}," loaded",[229,5454,248],{"class":235},[229,5456,5458],{"class":5457},"sfNiH"," false",[229,5460,5461],{"class":235}," };\n",[229,5463,5465],{"class":231,"line":5464},15,[229,5466,5467],{"class":235},"    },\n",[229,5469,5471,5474,5476],{"class":231,"line":5470},16,[229,5472,5473],{"class":5264},"    mounted",[229,5475,5438],{"class":235},[229,5477,5429],{"class":235},[229,5479,5481],{"class":231,"line":5480},17,[229,5482,5483],{"class":5273},"        \u002F\u002F Wait for mount so #app-bar-actions exists before teleporting into it.\n",[229,5485,5487,5490,5492,5495,5498],{"class":231,"line":5486},18,[229,5488,5489],{"class":235},"        this.",[229,5491,5292],{"class":916},[229,5493,5494],{"class":235}," =",[229,5496,5497],{"class":5457}," true",[229,5499,5500],{"class":235},";\n",[229,5502,5504],{"class":231,"line":5503},19,[229,5505,5506],{"class":235},"    }\n",[229,5508,5510],{"class":231,"line":5509},20,[229,5511,5146],{"class":235},[229,5513,5515,5517,5519],{"class":231,"line":5514},21,[229,5516,5367],{"class":235},[229,5518,5414],{"class":5264},[229,5520,5268],{"class":235},[229,5522,5524],{"class":231,"line":5523},22,[229,5525,5406],{"emptyLinePlaceholder":5405},[229,5527,5529,5531,5533],{"class":231,"line":5528},23,[229,5530,5261],{"class":235},[229,5532,300],{"class":5264},[229,5534,5268],{"class":235},[229,5536,5538,5540,5542,5544,5548,5550,5553,5555,5558,5560,5563,5565,5568,5570,5573,5575],{"class":231,"line":5537},24,[229,5539,57],{"class":235},[229,5541,5326],{"class":310},[229,5543,5449],{"class":235},[229,5545,5547],{"class":5546},"sqsOY"," display",[229,5549,248],{"class":235},[229,5551,5552],{"class":916}," flex",[229,5554,3318],{"class":235},[229,5556,5557],{"class":5546}," align-items",[229,5559,248],{"class":235},[229,5561,5562],{"class":916}," center",[229,5564,3318],{"class":235},[229,5566,5567],{"class":5546}," gap",[229,5569,248],{"class":235},[229,5571,5572],{"class":574}," 8px",[229,5574,3318],{"class":235},[229,5576,5577],{"class":235}," }\n",[229,5579,5581,5583,5585,5588,5590,5593,5595,5598,5600,5603,5605,5607,5609],{"class":231,"line":5580},25,[229,5582,57],{"class":235},[229,5584,5326],{"class":310},[229,5586,5587],{"class":310}," img",[229,5589,5449],{"class":235},[229,5591,5592],{"class":5546}," width",[229,5594,248],{"class":235},[229,5596,5597],{"class":574}," 24px",[229,5599,3318],{"class":235},[229,5601,5602],{"class":5546}," height",[229,5604,248],{"class":235},[229,5606,5597],{"class":574},[229,5608,3318],{"class":235},[229,5610,5577],{"class":235},[229,5612,5614,5616,5618],{"class":231,"line":5613},26,[229,5615,5367],{"class":235},[229,5617,300],{"class":5264},[229,5619,5268],{"class":235},[12,5621,5622,5623,5625],{},"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 (",[97,5624,5155],{},"), so it's already per-operator by construction, no shared state involved.",[12,5627,5628,75,5632],{},[21,5629],{"alt":5630,"src":5631},"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,5633,5634],{},"The signed-in operator greeted by name and avatar in the app bar, rendered from a single UI-scoped widget.",[59,5636,5638],{"id":5637},"seeding-the-operator-into-context-on-login","Seeding the Operator into Context on Login",[12,5640,5641],{},"Greeting the operator is the visible half. The other half is making their identity available to every function node, not just the widgets.",[12,5643,5644,5645,5648,5649,5652],{},"You might reach for a single shared global here, ",[97,5646,5647],{},"global.set('user', msg._client.user, 'persistent')"," on connect, then read it everywhere. ",[45,5650,5651],{},"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,5654,5655,5656,5658],{},"Instead, read ",[97,5657,198],{}," 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.",[148,5660,5661,5666,5712],{},[70,5662,5236,5663,5665],{},[97,5664,119],{}," node named \"Client connected\" and select the \"My Dashboard\" ui-base. It fires when a browser session connects.",[70,5667,5236,5668,5671,5672,5675,5676],{},[97,5669,5670],{},"change"," node named \"Seed globals\" with these ",[97,5673,5674],{},"set"," rules, in order:\n",[67,5677,5678,5690,5699,5707],{},[70,5679,5680,5682,5683,5685,5686,5689],{},[97,5681,3291],{}," (global, persistent) → ",[97,5684,198],{},". ",[45,5687,5688],{},"Bootstrap fallback only",", not the source of truth elsewhere.",[70,5691,5692,5695,5696,57],{},[97,5693,5694],{},"StationContext.stationName"," (global) → your station's name, e.g. ",[97,5697,5698],{},"Wheel Assembly Station 12",[70,5700,5701,5704,5705,57],{},[97,5702,5703],{},"StationContext.stationId"," (global, persistent) → this station's ID, e.g. ",[97,5706,3978],{},[70,5708,5709,5711],{},[97,5710,4820],{}," (global, persistent) → the instruction set (steps, images, target times, checklists), cached so the Instructions page loads instantly.",[70,5713,5714],{},"Wire \"Client connected\" into \"Seed globals\".",[12,5716,5717],{},"From here on, every function node that needs the current operator uses this pattern, per-session identity first, bootstrap global only as a fallback:",[220,5719,5723],{"className":5720,"code":5721,"language":5722,"meta":225,"style":225},"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",[97,5724,5725,5753],{"__ignoreMap":225},[229,5726,5727,5730,5733,5735,5738,5740,5743,5746,5748,5750],{"class":231,"line":232},[229,5728,5729],{"class":242},"const",[229,5731,5732],{"class":916}," username ",[229,5734,5287],{"class":235},[229,5736,5737],{"class":916}," msg",[229,5739,57],{"class":235},[229,5741,5742],{"class":916},"_client",[229,5744,5745],{"class":235},"?.",[229,5747,3291],{"class":916},[229,5749,5745],{"class":235},[229,5751,5752],{"class":916},"username\n",[229,5754,5755,5758,5761,5763,5766,5769,5772,5774,5776,5778,5781,5783,5785,5788,5790,5792],{"class":231,"line":5063},[229,5756,5757],{"class":235},"    ||",[229,5759,5760],{"class":916}," global",[229,5762,57],{"class":235},[229,5764,736],{"class":5765},"s2Zo4",[229,5767,5768],{"class":916},"(",[229,5770,5771],{"class":235},"'",[229,5773,3291],{"class":253},[229,5775,5771],{"class":235},[229,5777,259],{"class":235},[229,5779,5780],{"class":235}," '",[229,5782,941],{"class":253},[229,5784,5771],{"class":235},[229,5786,5787],{"class":916},")",[229,5789,5745],{"class":235},[229,5791,5087],{"class":916},[229,5793,5500],{"class":235},[59,5795,5797],{"id":5796},"showing-the-station-and-stats-on-the-home-page","Showing the Station and Stats on the Home Page",[12,5799,5800],{},"The Home page shows the current station and a quick summary of work order statistics. Both update whenever the page opens.",[5802,5803,5805],"h3",{"id":5804},"display-the-station-name","Display the Station Name",[148,5807,5808,5829],{},[70,5809,5810,5811,5814,5815,5817,5818,5821,5822,5825,5826,57],{},"From the ",[45,5812,5813],{},"Client connected"," event, add a ",[45,5816,5670],{}," node named ",[45,5819,5820],{},"Read station name"," and set ",[97,5823,5824],{},"msg.payload"," to ",[97,5827,5828],{},"global.StationContext.stationName",[70,5830,5831,5832,5817,5834,5836,5837,5839,5840,57],{},"Connect it to a ",[45,5833,122],{},[45,5835,4888],{}," in the ",[45,5838,4888],{}," group. Set the value to ",[97,5841,5824],{},[5802,5843,5845],{"id":5844},"display-the-stats","Display the Stats",[148,5847,5848,5859],{},[70,5849,5236,5850,5817,5852,5855,5856,5858],{},[45,5851,116],{},[45,5853,5854],{},"Page changed",", set its event to ",[45,5857,5670],{},", and select your dashboard.",[70,5860,5236,5861,5817,5863,5866,5867],{},[45,5862,846],{},[45,5864,5865],{},"Build \u002Fstats request URL"," and paste in the following code. ",[45,5868,5869,5870,5873],{},"Replace ",[97,5871,5872],{},"https:\u002F\u002Fyour-instance.flowfuse.cloud"," with your own FlowFuse instance URL.",[220,5875,5877],{"className":5720,"code":5876,"language":5722,"meta":225,"style":225},"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",[97,5878,5879,5915,5937,5971,5975,5994,6024,6051,6055,6083,6104],{"__ignoreMap":225},[229,5880,5881,5883,5886,5888,5890,5892,5894,5896,5898,5901,5903,5905,5907,5909,5911,5913],{"class":231,"line":232},[229,5882,5729],{"class":242},[229,5884,5885],{"class":916}," StationContext ",[229,5887,5287],{"class":235},[229,5889,5760],{"class":916},[229,5891,57],{"class":235},[229,5893,736],{"class":5765},[229,5895,5768],{"class":916},[229,5897,5771],{"class":235},[229,5899,5900],{"class":253},"StationContext",[229,5902,5771],{"class":235},[229,5904,259],{"class":235},[229,5906,5780],{"class":235},[229,5908,941],{"class":253},[229,5910,5771],{"class":235},[229,5912,5787],{"class":916},[229,5914,5500],{"class":235},[229,5916,5917,5919,5921,5923,5925,5927,5929,5931,5933,5935],{"class":231,"line":5063},[229,5918,5729],{"class":242},[229,5920,5732],{"class":916},[229,5922,5287],{"class":235},[229,5924,5737],{"class":916},[229,5926,57],{"class":235},[229,5928,5742],{"class":916},[229,5930,5745],{"class":235},[229,5932,3291],{"class":916},[229,5934,5745],{"class":235},[229,5936,5752],{"class":916},[229,5938,5939,5941,5943,5945,5947,5949,5951,5953,5955,5957,5959,5961,5963,5965,5967,5969],{"class":231,"line":5082},[229,5940,5757],{"class":235},[229,5942,5760],{"class":916},[229,5944,57],{"class":235},[229,5946,736],{"class":5765},[229,5948,5768],{"class":916},[229,5950,5771],{"class":235},[229,5952,3291],{"class":253},[229,5954,5771],{"class":235},[229,5956,259],{"class":235},[229,5958,5780],{"class":235},[229,5960,941],{"class":253},[229,5962,5771],{"class":235},[229,5964,5787],{"class":916},[229,5966,5745],{"class":235},[229,5968,5087],{"class":916},[229,5970,5500],{"class":235},[229,5972,5973],{"class":231,"line":4979},[229,5974,5406],{"emptyLinePlaceholder":5405},[229,5976,5977,5979,5982,5984,5987,5990,5992],{"class":231,"line":5113},[229,5978,5729],{"class":242},[229,5980,5981],{"class":916}," params ",[229,5983,5287],{"class":235},[229,5985,5986],{"class":235}," new",[229,5988,5989],{"class":5765}," URLSearchParams",[229,5991,5438],{"class":916},[229,5993,5500],{"class":235},[229,5995,5996,5999,6001,6003,6005,6007,6010,6012,6014,6017,6019,6022],{"class":231,"line":5128},[229,5997,5998],{"class":916},"params",[229,6000,57],{"class":235},[229,6002,5674],{"class":5765},[229,6004,5768],{"class":916},[229,6006,5771],{"class":235},[229,6008,6009],{"class":253},"stationId",[229,6011,5771],{"class":235},[229,6013,259],{"class":235},[229,6015,6016],{"class":916}," StationContext",[229,6018,57],{"class":235},[229,6020,6021],{"class":916},"stationId)",[229,6023,5500],{"class":235},[229,6025,6026,6029,6032,6034,6036,6038,6040,6042,6044,6046,6049],{"class":231,"line":5143},[229,6027,6028],{"class":5422},"if",[229,6030,6031],{"class":916}," (username) params",[229,6033,57],{"class":235},[229,6035,5674],{"class":5765},[229,6037,5768],{"class":916},[229,6039,5771],{"class":235},[229,6041,5087],{"class":253},[229,6043,5771],{"class":235},[229,6045,259],{"class":235},[229,6047,6048],{"class":916}," username)",[229,6050,5500],{"class":235},[229,6052,6053],{"class":231,"line":5383},[229,6054,5406],{"emptyLinePlaceholder":5405},[229,6056,6057,6060,6062,6065,6067,6070,6073,6076,6078,6081],{"class":231,"line":5393},[229,6058,6059],{"class":916},"msg",[229,6061,57],{"class":235},[229,6063,6064],{"class":916},"url ",[229,6066,5287],{"class":235},[229,6068,6069],{"class":235}," `",[229,6071,6072],{"class":253},"https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders\u002Fstats?",[229,6074,6075],{"class":235},"${",[229,6077,5998],{"class":916},[229,6079,6080],{"class":235},"}`",[229,6082,5500],{"class":235},[229,6084,6085,6087,6089,6092,6094,6097,6100,6102],{"class":231,"line":5402},[229,6086,6059],{"class":916},[229,6088,57],{"class":235},[229,6090,6091],{"class":916},"method ",[229,6093,5287],{"class":235},[229,6095,6096],{"class":235}," \"",[229,6098,6099],{"class":253},"GET",[229,6101,239],{"class":235},[229,6103,5500],{"class":235},[229,6105,6106,6109,6111],{"class":231,"line":5409},[229,6107,6108],{"class":5422},"return",[229,6110,5737],{"class":916},[229,6112,5500],{"class":235},[148,6114,6115,6132,6135,6145],{"start":5082},[70,6116,6117,6118,6120,6121,5203,6124,6127,6128,6131],{},"Add an ",[45,6119,5009],{}," node that uses ",[97,6122,6123],{},"msg.method",[97,6125,6126],{},"msg.url",", returns a parsed JSON object, and uses ",[45,6129,6130],{},"Bearer"," authentication.",[70,6133,6134],{},"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,6136,5236,6137,4911,6139,5836,6142,6144],{},[45,6138,103],{},[45,6140,6141],{},"Stats Cards",[45,6143,4893],{}," group and paste in the template below.",[70,6146,6147,6148,57],{},"Wire the nodes: ",[45,6149,6150],{},"Page changed → Build \u002Fstats request URL → HTTP Request → Stats Cards",[12,6152,6153,6154,6157,6158,6160,6161,6163],{},"The request includes the logged-in username, so the ",[45,6155,6156],{},"Assigned to me"," count is personalized for each operator, and because ",[97,6159,116],{}," is client-data-aware, ",[97,6162,198],{}," reflects whichever operator's browser triggered the page change.",[12,6165,6166,6170],{},[21,6167],{"alt":6168,"src":6169},"Placeholder: Stats Cards widget rendered on the Home page","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fstats-and-station.png",[26,6171,6172],{},"The Home page displays station statistics, including total, assigned to me, completed, and defected work orders.",[59,6174,6176],{"id":6175},"loading-the-operators-work-orders","Loading the Operator's Work Orders",[12,6178,6179],{},"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.",[148,6181,6182,6192],{},[70,6183,5236,6184,5817,6186,6188,6189,6191],{},[45,6185,116],{},[45,6187,5854],{},", select your dashboard, and set the event to ",[45,6190,5670],{},". It fires whenever the operator navigates to the Home page, triggering the work order request.",[70,6193,5236,6194,5817,6196,6199,6200,5873],{},[45,6195,846],{},[45,6197,6198],{},"Build \u002Fworkorders request URL",", paste in the code below, and replace ",[97,6201,5872],{},[220,6203,6206],{"className":5720,"code":6204,"language":5722,"meta":6205,"style":225},"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\"",[97,6207,6208,6242,6264,6298,6302,6319,6323,6339,6362,6386,6390,6420,6438],{"__ignoreMap":225},[229,6209,6210,6212,6214,6216,6218,6220,6222,6224,6226,6228,6230,6232,6234,6236,6238,6240],{"class":231,"line":232},[229,6211,5729],{"class":242},[229,6213,5885],{"class":916},[229,6215,5287],{"class":235},[229,6217,5760],{"class":916},[229,6219,57],{"class":235},[229,6221,736],{"class":5765},[229,6223,5768],{"class":916},[229,6225,5771],{"class":235},[229,6227,5900],{"class":253},[229,6229,5771],{"class":235},[229,6231,259],{"class":235},[229,6233,5780],{"class":235},[229,6235,941],{"class":253},[229,6237,5771],{"class":235},[229,6239,5787],{"class":916},[229,6241,5500],{"class":235},[229,6243,6244,6246,6248,6250,6252,6254,6256,6258,6260,6262],{"class":231,"line":5063},[229,6245,5729],{"class":242},[229,6247,5732],{"class":916},[229,6249,5287],{"class":235},[229,6251,5737],{"class":916},[229,6253,57],{"class":235},[229,6255,5742],{"class":916},[229,6257,5745],{"class":235},[229,6259,3291],{"class":916},[229,6261,5745],{"class":235},[229,6263,5752],{"class":916},[229,6265,6266,6268,6270,6272,6274,6276,6278,6280,6282,6284,6286,6288,6290,6292,6294,6296],{"class":231,"line":5082},[229,6267,5757],{"class":235},[229,6269,5760],{"class":916},[229,6271,57],{"class":235},[229,6273,736],{"class":5765},[229,6275,5768],{"class":916},[229,6277,5771],{"class":235},[229,6279,3291],{"class":253},[229,6281,5771],{"class":235},[229,6283,259],{"class":235},[229,6285,5780],{"class":235},[229,6287,941],{"class":253},[229,6289,5771],{"class":235},[229,6291,5787],{"class":916},[229,6293,5745],{"class":235},[229,6295,5087],{"class":916},[229,6297,5500],{"class":235},[229,6299,6300],{"class":231,"line":4979},[229,6301,5406],{"emptyLinePlaceholder":5405},[229,6303,6304,6306,6309,6311,6313,6315,6317],{"class":231,"line":5113},[229,6305,5729],{"class":242},[229,6307,6308],{"class":916}," stationId ",[229,6310,5287],{"class":235},[229,6312,6016],{"class":916},[229,6314,5745],{"class":235},[229,6316,6009],{"class":916},[229,6318,5500],{"class":235},[229,6320,6321],{"class":231,"line":5128},[229,6322,5406],{"emptyLinePlaceholder":5405},[229,6324,6325,6327,6329,6331,6333,6335,6337],{"class":231,"line":5143},[229,6326,5729],{"class":242},[229,6328,5981],{"class":916},[229,6330,5287],{"class":235},[229,6332,5986],{"class":235},[229,6334,5989],{"class":5765},[229,6336,5438],{"class":916},[229,6338,5500],{"class":235},[229,6340,6341,6343,6345,6347,6349,6351,6353,6355,6357,6360],{"class":231,"line":5383},[229,6342,5998],{"class":916},[229,6344,57],{"class":235},[229,6346,5674],{"class":5765},[229,6348,5768],{"class":916},[229,6350,5771],{"class":235},[229,6352,6009],{"class":253},[229,6354,5771],{"class":235},[229,6356,259],{"class":235},[229,6358,6359],{"class":916}," stationId)",[229,6361,5500],{"class":235},[229,6363,6364,6366,6368,6370,6372,6374,6376,6378,6380,6382,6384],{"class":231,"line":5393},[229,6365,6028],{"class":5422},[229,6367,6031],{"class":916},[229,6369,57],{"class":235},[229,6371,5674],{"class":5765},[229,6373,5768],{"class":916},[229,6375,5771],{"class":235},[229,6377,5087],{"class":253},[229,6379,5771],{"class":235},[229,6381,259],{"class":235},[229,6383,6048],{"class":916},[229,6385,5500],{"class":235},[229,6387,6388],{"class":231,"line":5402},[229,6389,5406],{"emptyLinePlaceholder":5405},[229,6391,6392,6394,6396,6398,6400,6402,6405,6407,6409,6411,6414,6416,6418],{"class":231,"line":5409},[229,6393,6059],{"class":916},[229,6395,57],{"class":235},[229,6397,6064],{"class":916},[229,6399,5287],{"class":235},[229,6401,6069],{"class":235},[229,6403,6404],{"class":253},"https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders?",[229,6406,6075],{"class":235},[229,6408,5998],{"class":916},[229,6410,57],{"class":235},[229,6412,6413],{"class":5765},"toString",[229,6415,5438],{"class":916},[229,6417,6080],{"class":235},[229,6419,5500],{"class":235},[229,6421,6422,6424,6426,6428,6430,6432,6434,6436],{"class":231,"line":5419},[229,6423,6059],{"class":916},[229,6425,57],{"class":235},[229,6427,6091],{"class":916},[229,6429,5287],{"class":235},[229,6431,5780],{"class":235},[229,6433,6099],{"class":253},[229,6435,5771],{"class":235},[229,6437,5500],{"class":235},[229,6439,6440,6442,6444],{"class":231,"line":5432},[229,6441,6108],{"class":5422},[229,6443,5737],{"class":916},[229,6445,5500],{"class":235},[148,6447,6448,6480],{"start":5082},[70,6449,6117,6450,6452,6453,5825,6456,6461,6462,6465,6466,6468,6469,6472,6473,6476,6477,6479],{},[45,6451,5009],{}," node, set the ",[45,6454,6455],{},"Method",[45,6457,6458,6459],{},"Use ",[97,6460,6123],{},", leave the ",[45,6463,6464],{},"URL"," field blank so it uses ",[97,6467,6126],{},", set the ",[45,6470,6471],{},"Return"," type to a ",[45,6474,6475],{},"parsed JSON object",", and configure ",[45,6478,6130],{}," 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,6481,6482,6483,6485,6486,5817,6489,6492,6493,6496],{},"Connect the ",[45,6484,5009],{}," node to a ",[45,6487,6488],{},"link out",[45,6490,6491],{},"Work Orders Out",". The widgets that display the work orders will connect to this node using their own ",[45,6494,6495],{},"link in"," nodes, allowing the same API response to be reused without stretching wires across the canvas.",[12,6498,6499,6500,6502,6503,6506],{},"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 ",[97,6501,116],{}," event carries their own ",[97,6504,6505],{},"_client.user",", not a shared one.",[59,6508,6510],{"id":6509},"splitting-the-current-order-from-the-queue","Splitting the Current Order From the Queue",[12,6512,6513],{},"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.",[148,6515,6516,6521],{},[70,6517,5236,6518,6520],{},[97,6519,6495],{}," node named \"link in 6\" and point it at the \"work orders out\" link.",[70,6522,5236,6523,6525,6526,248],{},[97,6524,846],{}," node named \"split current vs queue (by priority)\" with ",[45,6527,6528],{},"2 outputs",[220,6530,6532],{"className":5720,"code":6531,"language":5722,"meta":225,"style":225},"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",[97,6533,6534,6576,6580,6585,6655,6681,6732,6762,6768,6772,6794,6798,6803,6808,6813,6835,6869,6873,6888,6924,6945,6974,6978,6982,6989,7005,7032],{"__ignoreMap":225},[229,6535,6536,6538,6541,6543,6546,6548,6551,6554,6556,6559,6562,6564,6566,6569,6571,6574],{"class":231,"line":232},[229,6537,5729],{"class":242},[229,6539,6540],{"class":916}," orders ",[229,6542,5287],{"class":235},[229,6544,6545],{"class":916}," Array",[229,6547,57],{"class":235},[229,6549,6550],{"class":5765},"isArray",[229,6552,6553],{"class":916},"(msg",[229,6555,57],{"class":235},[229,6557,6558],{"class":916},"payload) ",[229,6560,6561],{"class":235},"?",[229,6563,5737],{"class":916},[229,6565,57],{"class":235},[229,6567,6568],{"class":916},"payload ",[229,6570,248],{"class":235},[229,6572,6573],{"class":916}," []",[229,6575,5500],{"class":235},[229,6577,6578],{"class":231,"line":5063},[229,6579,5406],{"emptyLinePlaceholder":5405},[229,6581,6582],{"class":231,"line":5082},[229,6583,6584],{"class":5273},"\u002F\u002F Sort by priority (Critical\u002FUrgent -> High -> Medium -> Normal -> Low)\n",[229,6586,6587,6589,6592,6594,6596,6599,6601,6604,6606,6609,6611,6613,6615,6618,6620,6623,6625,6628,6630,6633,6635,6638,6640,6643,6645,6648,6650,6653],{"class":231,"line":4979},[229,6588,5729],{"class":242},[229,6590,6591],{"class":916}," priorityOrder ",[229,6593,5287],{"class":235},[229,6595,5449],{"class":235},[229,6597,6598],{"class":5264}," critical",[229,6600,248],{"class":235},[229,6602,6603],{"class":574}," 0",[229,6605,259],{"class":235},[229,6607,6608],{"class":5264}," urgent",[229,6610,248],{"class":235},[229,6612,6603],{"class":574},[229,6614,259],{"class":235},[229,6616,6617],{"class":5264}," high",[229,6619,248],{"class":235},[229,6621,6622],{"class":574}," 1",[229,6624,259],{"class":235},[229,6626,6627],{"class":5264}," medium",[229,6629,248],{"class":235},[229,6631,6632],{"class":574}," 2",[229,6634,259],{"class":235},[229,6636,6637],{"class":5264}," normal",[229,6639,248],{"class":235},[229,6641,6642],{"class":574}," 3",[229,6644,259],{"class":235},[229,6646,6647],{"class":5264}," low",[229,6649,248],{"class":235},[229,6651,6652],{"class":574}," 4",[229,6654,5461],{"class":235},[229,6656,6657,6659,6662,6664,6667,6670,6673,6675,6678],{"class":231,"line":5113},[229,6658,5729],{"class":242},[229,6660,6661],{"class":916}," sorted ",[229,6663,5287],{"class":235},[229,6665,6666],{"class":916}," [",[229,6668,6669],{"class":235},"...",[229,6671,6672],{"class":916},"orders]",[229,6674,57],{"class":235},[229,6676,6677],{"class":5765},"sort",[229,6679,6680],{"class":916},"(\n",[229,6682,6683,6686,6689,6691,6694,6696,6699,6702,6704,6707,6710,6713,6715,6717,6720,6723,6726,6729],{"class":231,"line":5128},[229,6684,6685],{"class":235},"    (",[229,6687,77],{"class":6688},"sHdIc",[229,6690,259],{"class":235},[229,6692,6693],{"class":6688}," b",[229,6695,5787],{"class":235},[229,6697,6698],{"class":242}," =>",[229,6700,6701],{"class":916}," (priorityOrder[(a",[229,6703,57],{"class":235},[229,6705,6706],{"class":916},"priority ",[229,6708,6709],{"class":235},"||",[229,6711,6712],{"class":235}," ''",[229,6714,5787],{"class":916},[229,6716,57],{"class":235},[229,6718,6719],{"class":5765},"toLowerCase",[229,6721,6722],{"class":916},"()] ",[229,6724,6725],{"class":235},"??",[229,6727,6728],{"class":574}," 5",[229,6730,6731],{"class":916},")\n",[229,6733,6734,6737,6740,6742,6744,6746,6748,6750,6752,6754,6756,6758,6760],{"class":231,"line":5143},[229,6735,6736],{"class":235},"            -",[229,6738,6739],{"class":916}," (priorityOrder[(b",[229,6741,57],{"class":235},[229,6743,6706],{"class":916},[229,6745,6709],{"class":235},[229,6747,6712],{"class":235},[229,6749,5787],{"class":916},[229,6751,57],{"class":235},[229,6753,6719],{"class":5765},[229,6755,6722],{"class":916},[229,6757,6725],{"class":235},[229,6759,6728],{"class":574},[229,6761,6731],{"class":916},[229,6763,6764,6766],{"class":231,"line":5383},[229,6765,5787],{"class":916},[229,6767,5500],{"class":235},[229,6769,6770],{"class":231,"line":5393},[229,6771,5406],{"emptyLinePlaceholder":5405},[229,6773,6774,6776,6779,6781,6784,6786,6789,6791],{"class":231,"line":5402},[229,6775,5729],{"class":242},[229,6777,6778],{"class":916}," currentWorkOrder ",[229,6780,5287],{"class":235},[229,6782,6783],{"class":916}," sorted[",[229,6785,1043],{"class":574},[229,6787,6788],{"class":916},"] ",[229,6790,6709],{"class":235},[229,6792,6793],{"class":235}," null;\n",[229,6795,6796],{"class":231,"line":5409},[229,6797,5406],{"emptyLinePlaceholder":5405},[229,6799,6800],{"class":231,"line":5419},[229,6801,6802],{"class":5273},"\u002F\u002F Record which work order the current operator is about to see\u002Fstart.\n",[229,6804,6805],{"class":231,"line":5432},[229,6806,6807],{"class":5273},"\u002F\u002F Identity comes from the triggering message's client data, not a shared global,\n",[229,6809,6810],{"class":231,"line":5443},[229,6811,6812],{"class":5273},"\u002F\u002F so this is always attributed to the operator whose browser fetched this list.\n",[229,6814,6815,6817,6819,6821,6823,6825,6827,6829,6831,6833],{"class":231,"line":5464},[229,6816,5729],{"class":242},[229,6818,5732],{"class":916},[229,6820,5287],{"class":235},[229,6822,5737],{"class":916},[229,6824,57],{"class":235},[229,6826,5742],{"class":916},[229,6828,5745],{"class":235},[229,6830,3291],{"class":916},[229,6832,5745],{"class":235},[229,6834,5752],{"class":916},[229,6836,6837,6839,6841,6843,6845,6847,6849,6851,6853,6855,6857,6859,6861,6863,6865,6867],{"class":231,"line":5470},[229,6838,5757],{"class":235},[229,6840,5760],{"class":916},[229,6842,57],{"class":235},[229,6844,736],{"class":5765},[229,6846,5768],{"class":916},[229,6848,5771],{"class":235},[229,6850,3291],{"class":253},[229,6852,5771],{"class":235},[229,6854,259],{"class":235},[229,6856,5780],{"class":235},[229,6858,941],{"class":253},[229,6860,5771],{"class":235},[229,6862,5787],{"class":916},[229,6864,5745],{"class":235},[229,6866,5087],{"class":916},[229,6868,5500],{"class":235},[229,6870,6871],{"class":231,"line":5480},[229,6872,5406],{"emptyLinePlaceholder":5405},[229,6874,6875,6877,6880,6883,6886],{"class":231,"line":5486},[229,6876,6028],{"class":5422},[229,6878,6879],{"class":916}," (username ",[229,6881,6882],{"class":235},"&&",[229,6884,6885],{"class":916}," currentWorkOrder) ",[229,6887,5060],{"class":235},[229,6889,6890,6893,6896,6898,6900,6902,6904,6906,6908,6910,6912,6914,6916,6919,6921],{"class":231,"line":5503},[229,6891,6892],{"class":242},"    const",[229,6894,6895],{"class":916}," userState",[229,6897,5494],{"class":235},[229,6899,5760],{"class":916},[229,6901,57],{"class":235},[229,6903,736],{"class":5765},[229,6905,5768],{"class":5264},[229,6907,5087],{"class":916},[229,6909,259],{"class":235},[229,6911,5780],{"class":235},[229,6913,941],{"class":253},[229,6915,5771],{"class":235},[229,6917,6918],{"class":5264},") ",[229,6920,6709],{"class":235},[229,6922,6923],{"class":235}," {};\n",[229,6925,6926,6929,6931,6934,6936,6939,6941,6943],{"class":231,"line":5509},[229,6927,6928],{"class":916},"    userState",[229,6930,57],{"class":235},[229,6932,6933],{"class":916},"workOrderId",[229,6935,5494],{"class":235},[229,6937,6938],{"class":916}," currentWorkOrder",[229,6940,57],{"class":235},[229,6942,6933],{"class":916},[229,6944,5500],{"class":235},[229,6946,6947,6950,6952,6954,6956,6958,6960,6962,6964,6966,6968,6970,6972],{"class":231,"line":5514},[229,6948,6949],{"class":916},"    global",[229,6951,57],{"class":235},[229,6953,5674],{"class":5765},[229,6955,5768],{"class":5264},[229,6957,5087],{"class":916},[229,6959,259],{"class":235},[229,6961,6895],{"class":916},[229,6963,259],{"class":235},[229,6965,5780],{"class":235},[229,6967,941],{"class":253},[229,6969,5771],{"class":235},[229,6971,5787],{"class":5264},[229,6973,5500],{"class":235},[229,6975,6976],{"class":231,"line":5523},[229,6977,5146],{"class":235},[229,6979,6980],{"class":231,"line":5528},[229,6981,5406],{"emptyLinePlaceholder":5405},[229,6983,6984,6986],{"class":231,"line":5537},[229,6985,6108],{"class":5422},[229,6987,6988],{"class":916}," [\n",[229,6990,6991,6993,6996,6998,7000,7002],{"class":231,"line":5580},[229,6992,3389],{"class":235},[229,6994,6995],{"class":5264}," payload",[229,6997,248],{"class":235},[229,6999,6778],{"class":916},[229,7001,425],{"class":235},[229,7003,7004],{"class":5273},"  \u002F\u002F output 1: current order (for card)\n",[229,7006,7007,7009,7011,7013,7016,7018,7021,7023,7025,7027,7029],{"class":231,"line":5613},[229,7008,3389],{"class":235},[229,7010,6995],{"class":5264},[229,7012,248],{"class":235},[229,7014,7015],{"class":916}," sorted",[229,7017,57],{"class":235},[229,7019,7020],{"class":5765},"slice",[229,7022,5768],{"class":916},[229,7024,338],{"class":574},[229,7026,6918],{"class":916},[229,7028,1576],{"class":235},[229,7030,7031],{"class":5273},"    \u002F\u002F output 2: remaining orders (queue)\n",[229,7033,7035,7037],{"class":231,"line":7034},27,[229,7036,3468],{"class":916},[229,7038,5500],{"class":235},[148,7040,7041],{"start":5082},[70,7042,7043],{},"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,7045,7046],{},[12,7047,7048,7051,7052,7056,7057,7059],{},[45,7049,7050],{},"Tip:"," Whenever you need a custom Dashboard widget, you don't have to write the Vue code yourself. Use ",[77,7053,7055],{"href":7054},"\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 ",[97,7058,103],{}," for you.",[216,7061,7062],{":height":218},[220,7063,7065],{"className":222,"code":7064,"language":224,"meta":225,"style":225},"[{\"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",[97,7066,7067],{"__ignoreMap":225},[229,7068,7069,7071,7073,7075,7077,7079,7081,7084,7086,7088,7090,7092,7094,7096,7098,7100,7102,7104,7106,7108,7110,7112,7114,7117,7119,7121,7123,7125,7127,7129,7131,7134,7136,7138,7140,7142,7144,7146,7148,7150,7152,7154,7156,7158,7160,7162,7164,7166,7168,7170,7172,7174,7176,7178,7180,7182,7184,7187,7189,7191,7193,7196,7198,7200,7202,7204,7206,7209,7211,7213,7215,7217,7219,7222,7224,7226,7228,7230,7232,7235,7237,7239,7241,7243,7245,7248,7250,7252,7254,7257,7259,7262,7264,7267,7269,7271,7273,7276,7278,7281,7283,7286,7288,7290,7292,7295,7297,7300,7302,7304,7306,7309,7311,7314,7316,7319,7321,7323,7325,7328,7330,7333,7335,7338,7340,7342,7344,7347,7349,7351,7353,7356,7358,7361,7363,7366,7368,7371,7373,7376,7378,7381,7383,7386,7388,7391,7393,7395,7397,7400,7402,7405,7407,7410,7412,7415,7417,7420,7422,7424,7426,7429,7431,7434,7436,7439,7441,7443,7445,7448,7450,7453,7455,7458,7460,7463,7465,7468,7470,7472,7474,7477,7479,7481,7483,7486,7488,7491,7493,7495,7497,7500,7502,7505,7507,7509,7511,7514,7516,7519,7521,7524,7526,7529,7531,7533,7535,7538,7540,7543,7545,7547,7549,7552,7554,7557,7559,7562,7564,7567,7569,7572,7574,7576,7578,7580,7582,7584,7586,7588,7590,7593,7595,7597,7599,7601,7603,7605,7607,7610,7612,7614,7616,7618,7620,7623,7625,7627,7629,7632,7634,7636,7638,7640,7642,7645,7647,7649,7651,7653,7655,7658,7660,7662,7664,7667,7669,7671,7673,7676,7678,7681,7683,7685,7687,7690,7692,7695,7697,7700,7702,7704,7706,7709,7711,7713,7715,7718,7720,7723,7725,7728,7730,7732,7734,7737,7739,7742,7744,7747,7749,7751,7753,7755,7757,7759,7761,7764,7766,7768,7770,7772,7774,7776,7778,7780,7782,7785,7787,7789,7791,7793,7795,7797,7799,7801,7803,7805,7807,7810,7812,7814,7816,7818,7820,7822,7824,7827,7829,7831,7833,7835,7837,7840,7842,7844,7846,7849,7851,7853,7855,7857,7859,7862,7864,7866,7868,7871,7873,7875,7877,7880,7882,7885,7887,7889,7891,7894,7896,7898,7900,7903,7905,7907,7909,7911,7913,7916,7918,7921,7923,7925,7927,7930,7932,7935,7937,7940,7942,7944,7946,7949,7951,7953,7955,7958,7960,7963,7965,7968,7970,7973,7975,7977,7979,7981,7983,7985,7987,7989,7991,7993,7995,7997,7999,8001,8003,8005,8007,8009,8011,8013,8015,8018,8020,8022,8024,8027,8029,8031,8033,8036,8038,8041,8043,8046,8048,8051,8053,8056,8058,8061,8063,8066,8068,8071,8073,8076,8078,8080,8082,8084,8086,8088,8090,8093,8095,8097,8099,8101,8103,8106,8108,8111,8113,8116,8118,8121,8123,8126,8128,8131,8133,8135,8137,8140,8142,8145,8147,8150,8152,8155,8157,8160,8162,8164,8166,8169,8171,8174,8176,8178,8180,8183,8185,8187,8189,8192,8194,8197,8199,8202,8204,8207,8209,8212,8214,8217,8219,8222,8224,8227,8229,8232,8234,8237,8239,8242,8244,8247,8249,8251,8253,8256,8258,8260,8262,8265,8267,8270,8272,8275,8277,8280,8282,8285,8287,8290,8292,8294,8296,8299,8301,8304,8306,8309,8311,8314,8316,8319,8321,8324,8326,8329,8331,8334,8336,8339,8341,8344,8346,8349,8351,8354,8356,8358,8360,8363,8365,8367,8369,8372,8374,8377,8379,8381,8383,8386,8388,8391,8393,8396,8398,8401,8403,8406,8408,8410,8412,8415,8417,8420,8422,8425,8427,8430,8432,8435,8437,8439,8441,8444,8446,8448,8450,8453,8455,8457,8459,8461,8463,8466,8468,8471,8473,8476,8478,8480,8482,8485,8487,8490,8492,8494,8496,8499,8501,8504,8506,8508,8510,8513,8515,8518,8520,8523,8525,8528,8530,8533,8535,8538,8540,8542,8544,8547,8549,8552,8554,8556,8558,8561,8563,8566,8568,8570,8572,8575,8577,8579,8581,8583,8585,8588,8590,8593,8595,8597,8599,8601,8603,8605,8607,8610,8612,8614,8616,8619,8621,8624,8626,8628,8630,8633,8635,8638,8640,8642,8644,8646,8648,8651,8653,8656,8658,8661,8663,8665,8667,8670,8672,8675,8677,8679,8681,8683,8685,8688,8690,8692,8694,8697,8699,8701,8703,8705,8707,8709,8711,8714,8716,8719,8721,8724,8726,8728,8730,8733,8735,8737,8739,8741,8743,8746,8748,8750,8752,8755,8757,8760,8762,8765,8767,8769,8771,8773,8775,8777,8779,8782,8784,8787,8789,8791,8793,8795,8797,8799,8801,8803,8805,8808,8810,8813,8815,8817,8819,8821,8823,8826,8828,8830,8832,8835,8837,8840,8842,8845,8847,8850,8852,8855,8857,8859,8861,8864,8866,8868,8870,8872,8874,8877,8879,8881,8883,8885,8887,8890,8892,8894,8896,8899,8901,8903,8905,8907,8909,8911,8913,8915,8917,8920,8922,8924,8926,8929,8931,8934,8936,8938,8940,8942,8944,8946,8948,8950,8952,8955,8957,8959,8961,8964,8966,8969,8971,8973,8975,8978,8980,8982,8984,8987,8989,8992,8994,8996,8998,9001,9003,9006,9008,9011,9013,9016,9018,9020,9022,9024,9026,9029,9031,9033,9035,9038,9040,9042,9044,9047,9049,9051,9053,9056,9058,9060,9062,9065,9067,9069,9071,9074,9076,9078,9080,9083,9085,9087,9089,9092,9094,9096,9098,9100,9102,9104,9106,9108,9111,9113,9115,9117,9119,9121,9123,9125,9127,9129,9131,9133,9135,9138,9140,9142,9144,9146,9148,9150,9152,9155,9157,9159,9161,9163,9165,9167,9169,9171,9173,9175,9177,9179,9181,9183,9185,9187,9189,9191,9193,9195,9197,9199,9201,9203,9205],{"class":231,"line":232},[229,7070,236],{"class":235},[229,7072,239],{"class":235},[229,7074,243],{"class":242},[229,7076,239],{"class":235},[229,7078,248],{"class":235},[229,7080,239],{"class":235},[229,7082,7083],{"class":253},"eb41d1ba8e4bfb01",[229,7085,239],{"class":235},[229,7087,259],{"class":235},[229,7089,239],{"class":235},[229,7091,264],{"class":242},[229,7093,239],{"class":235},[229,7095,248],{"class":235},[229,7097,239],{"class":235},[229,7099,103],{"class":253},[229,7101,239],{"class":235},[229,7103,259],{"class":235},[229,7105,239],{"class":235},[229,7107,282],{"class":242},[229,7109,239],{"class":235},[229,7111,248],{"class":235},[229,7113,239],{"class":235},[229,7115,7116],{"class":253},"c50b1b501a74c081",[229,7118,239],{"class":235},[229,7120,259],{"class":235},[229,7122,239],{"class":235},[229,7124,674],{"class":242},[229,7126,239],{"class":235},[229,7128,248],{"class":235},[229,7130,239],{"class":235},[229,7132,7133],{"class":253},"3e9b1176168ca254",[229,7135,239],{"class":235},[229,7137,259],{"class":235},[229,7139,239],{"class":235},[229,7141,273],{"class":242},[229,7143,239],{"class":235},[229,7145,248],{"class":235},[229,7147,771],{"class":235},[229,7149,259],{"class":235},[229,7151,239],{"class":235},[229,7153,4639],{"class":242},[229,7155,239],{"class":235},[229,7157,248],{"class":235},[229,7159,771],{"class":235},[229,7161,259],{"class":235},[229,7163,239],{"class":235},[229,7165,4278],{"class":242},[229,7167,239],{"class":235},[229,7169,248],{"class":235},[229,7171,771],{"class":235},[229,7173,259],{"class":235},[229,7175,239],{"class":235},[229,7177,691],{"class":242},[229,7179,239],{"class":235},[229,7181,248],{"class":235},[229,7183,239],{"class":235},[229,7185,7186],{"class":253},"Current Work Order Card",[229,7188,239],{"class":235},[229,7190,259],{"class":235},[229,7192,239],{"class":235},[229,7194,7195],{"class":242},"order",[229,7197,239],{"class":235},[229,7199,248],{"class":235},[229,7201,338],{"class":574},[229,7203,259],{"class":235},[229,7205,239],{"class":235},[229,7207,7208],{"class":242},"width",[229,7210,239],{"class":235},[229,7212,248],{"class":235},[229,7214,1043],{"class":574},[229,7216,259],{"class":235},[229,7218,239],{"class":235},[229,7220,7221],{"class":242},"height",[229,7223,239],{"class":235},[229,7225,248],{"class":235},[229,7227,1043],{"class":574},[229,7229,259],{"class":235},[229,7231,239],{"class":235},[229,7233,7234],{"class":242},"head",[229,7236,239],{"class":235},[229,7238,248],{"class":235},[229,7240,771],{"class":235},[229,7242,259],{"class":235},[229,7244,239],{"class":235},[229,7246,7247],{"class":242},"format",[229,7249,239],{"class":235},[229,7251,248],{"class":235},[229,7253,239],{"class":235},[229,7255,7256],{"class":253},"\u003Ctemplate>",[229,7258,917],{"class":916},[229,7260,7261],{"class":253},"  \u003Cdiv class=",[229,7263,929],{"class":916},[229,7265,7266],{"class":253},"wi-root",[229,7268,929],{"class":916},[229,7270,5361],{"class":253},[229,7272,917],{"class":916},[229,7274,7275],{"class":253},"    \u003C!-- Top status bar -->",[229,7277,917],{"class":916},[229,7279,7280],{"class":253},"    \u003Cdiv class=",[229,7282,929],{"class":916},[229,7284,7285],{"class":253},"wi-topbar",[229,7287,929],{"class":916},[229,7289,5361],{"class":253},[229,7291,917],{"class":916},[229,7293,7294],{"class":253},"      \u003Cdiv class=",[229,7296,929],{"class":916},[229,7298,7299],{"class":253},"wi-topbar-left",[229,7301,929],{"class":916},[229,7303,5361],{"class":253},[229,7305,917],{"class":916},[229,7307,7308],{"class":253},"        \u003Cspan class=",[229,7310,929],{"class":916},[229,7312,7313],{"class":253},"wi-wo-label",[229,7315,929],{"class":916},[229,7317,7318],{"class":253},">WORK ORDER\u003C\u002Fspan>",[229,7320,917],{"class":916},[229,7322,7308],{"class":253},[229,7324,929],{"class":916},[229,7326,7327],{"class":253},"wi-wo-id",[229,7329,929],{"class":916},[229,7331,7332],{"class":253},">{{ msg?.payload?.workOrderId ?? '—' }}\u003C\u002Fspan>",[229,7334,917],{"class":916},[229,7336,7337],{"class":253},"      \u003C\u002Fdiv>",[229,7339,917],{"class":916},[229,7341,7294],{"class":253},[229,7343,929],{"class":916},[229,7345,7346],{"class":253},"wi-topbar-right",[229,7348,929],{"class":916},[229,7350,5361],{"class":253},[229,7352,917],{"class":916},[229,7354,7355],{"class":253},"        \u003Cv-chip size=",[229,7357,929],{"class":916},[229,7359,7360],{"class":253},"large",[229,7362,929],{"class":916},[229,7364,7365],{"class":253}," variant=",[229,7367,929],{"class":916},[229,7369,7370],{"class":253},"flat",[229,7372,929],{"class":916},[229,7374,7375],{"class":253}," label :color=",[229,7377,929],{"class":916},[229,7379,7380],{"class":253},"priorityColor",[229,7382,929],{"class":916},[229,7384,7385],{"class":253}," class=",[229,7387,929],{"class":916},[229,7389,7390],{"class":253},"wi-chip",[229,7392,929],{"class":916},[229,7394,5361],{"class":253},[229,7396,917],{"class":916},[229,7398,7399],{"class":253},"          \u003Cv-icon start icon=",[229,7401,929],{"class":916},[229,7403,7404],{"class":253},"mdi-flag",[229,7406,929],{"class":916},[229,7408,7409],{"class":253},">\u003C\u002Fv-icon>",[229,7411,917],{"class":916},[229,7413,7414],{"class":253},"          {{ (msg?.payload?.priority ?? 'Normal').toUpperCase() }} PRIORITY",[229,7416,917],{"class":916},[229,7418,7419],{"class":253},"        \u003C\u002Fv-chip>",[229,7421,917],{"class":916},[229,7423,7337],{"class":253},[229,7425,917],{"class":916},[229,7427,7428],{"class":253},"    \u003C\u002Fdiv>",[229,7430,923],{"class":916},[229,7432,7433],{"class":253},"    \u003Cv-row no-gutters class=",[229,7435,929],{"class":916},[229,7437,7438],{"class":253},"wi-body",[229,7440,929],{"class":916},[229,7442,5361],{"class":253},[229,7444,917],{"class":916},[229,7446,7447],{"class":253},"      \u003C!-- Left: Station + Operation -->",[229,7449,917],{"class":916},[229,7451,7452],{"class":253},"      \u003Cv-col cols=",[229,7454,929],{"class":916},[229,7456,7457],{"class":253},"12",[229,7459,929],{"class":916},[229,7461,7462],{"class":253}," md=",[229,7464,929],{"class":916},[229,7466,7467],{"class":253},"5",[229,7469,929],{"class":916},[229,7471,7385],{"class":253},[229,7473,929],{"class":916},[229,7475,7476],{"class":253},"wi-col",[229,7478,929],{"class":916},[229,7480,5361],{"class":253},[229,7482,917],{"class":916},[229,7484,7485],{"class":253},"        \u003Cv-card flat class=",[229,7487,929],{"class":916},[229,7489,7490],{"class":253},"wi-card wi-card-station",[229,7492,929],{"class":916},[229,7494,5361],{"class":253},[229,7496,917],{"class":916},[229,7498,7499],{"class":253},"          \u003Cdiv class=",[229,7501,929],{"class":916},[229,7503,7504],{"class":253},"wi-card-head",[229,7506,929],{"class":916},[229,7508,5361],{"class":253},[229,7510,917],{"class":916},[229,7512,7513],{"class":253},"            \u003Cv-icon icon=",[229,7515,929],{"class":916},[229,7517,7518],{"class":253},"mdi-map-marker-radius",[229,7520,929],{"class":916},[229,7522,7523],{"class":253}," size=",[229,7525,929],{"class":916},[229,7527,7528],{"class":253},"22",[229,7530,929],{"class":916},[229,7532,7409],{"class":253},[229,7534,917],{"class":916},[229,7536,7537],{"class":253},"            \u003Cspan>STATION\u003C\u002Fspan>",[229,7539,917],{"class":916},[229,7541,7542],{"class":253},"          \u003C\u002Fdiv>",[229,7544,917],{"class":916},[229,7546,7499],{"class":253},[229,7548,929],{"class":916},[229,7550,7551],{"class":253},"wi-station-id",[229,7553,929],{"class":916},[229,7555,7556],{"class":253},">{{ msg?.payload?.stationId ?? '—' }}\u003C\u002Fdiv>",[229,7558,923],{"class":916},[229,7560,7561],{"class":253},"          \u003Cv-divider class=",[229,7563,929],{"class":916},[229,7565,7566],{"class":253},"wi-divider",[229,7568,929],{"class":916},[229,7570,7571],{"class":253},">\u003C\u002Fv-divider>",[229,7573,923],{"class":916},[229,7575,7499],{"class":253},[229,7577,929],{"class":916},[229,7579,7504],{"class":253},[229,7581,929],{"class":916},[229,7583,5361],{"class":253},[229,7585,917],{"class":916},[229,7587,7513],{"class":253},[229,7589,929],{"class":916},[229,7591,7592],{"class":253},"mdi-clipboard-text-outline",[229,7594,929],{"class":916},[229,7596,7523],{"class":253},[229,7598,929],{"class":916},[229,7600,7528],{"class":253},[229,7602,929],{"class":916},[229,7604,7409],{"class":253},[229,7606,917],{"class":916},[229,7608,7609],{"class":253},"            \u003Cspan>OPERATION\u003C\u002Fspan>",[229,7611,917],{"class":916},[229,7613,7542],{"class":253},[229,7615,917],{"class":916},[229,7617,7499],{"class":253},[229,7619,929],{"class":916},[229,7621,7622],{"class":253},"wi-operation-name",[229,7624,929],{"class":916},[229,7626,5361],{"class":253},[229,7628,917],{"class":916},[229,7630,7631],{"class":253},"            {{ msg?.payload?.operation?.name ?? 'Awaiting operation' }}",[229,7633,917],{"class":916},[229,7635,7542],{"class":253},[229,7637,923],{"class":916},[229,7639,7499],{"class":253},[229,7641,929],{"class":916},[229,7643,7644],{"class":253},"wi-cycle",[229,7646,929],{"class":916},[229,7648,5361],{"class":253},[229,7650,917],{"class":916},[229,7652,7513],{"class":253},[229,7654,929],{"class":916},[229,7656,7657],{"class":253},"mdi-timer-outline",[229,7659,929],{"class":916},[229,7661,7523],{"class":253},[229,7663,929],{"class":916},[229,7665,7666],{"class":253},"26",[229,7668,929],{"class":916},[229,7670,7409],{"class":253},[229,7672,917],{"class":916},[229,7674,7675],{"class":253},"            \u003Cdiv class=",[229,7677,929],{"class":916},[229,7679,7680],{"class":253},"wi-cycle-text",[229,7682,929],{"class":916},[229,7684,5361],{"class":253},[229,7686,917],{"class":916},[229,7688,7689],{"class":253},"              \u003Cspan class=",[229,7691,929],{"class":916},[229,7693,7694],{"class":253},"wi-cycle-label",[229,7696,929],{"class":916},[229,7698,7699],{"class":253},">ESTIMATED CYCLE TIME\u003C\u002Fspan>",[229,7701,917],{"class":916},[229,7703,7689],{"class":253},[229,7705,929],{"class":916},[229,7707,7708],{"class":253},"wi-cycle-value",[229,7710,929],{"class":916},[229,7712,5361],{"class":253},[229,7714,917],{"class":916},[229,7716,7717],{"class":253},"                {{ msg?.payload?.operation?.estimatedCycleTime ?? '—' }}",[229,7719,917],{"class":916},[229,7721,7722],{"class":253},"              \u003C\u002Fspan>",[229,7724,917],{"class":916},[229,7726,7727],{"class":253},"            \u003C\u002Fdiv>",[229,7729,917],{"class":916},[229,7731,7542],{"class":253},[229,7733,917],{"class":916},[229,7735,7736],{"class":253},"        \u003C\u002Fv-card>",[229,7738,917],{"class":916},[229,7740,7741],{"class":253},"      \u003C\u002Fv-col>",[229,7743,923],{"class":916},[229,7745,7746],{"class":253},"      \u003C!-- Right: Vehicle -->",[229,7748,917],{"class":916},[229,7750,7452],{"class":253},[229,7752,929],{"class":916},[229,7754,7457],{"class":253},[229,7756,929],{"class":916},[229,7758,7462],{"class":253},[229,7760,929],{"class":916},[229,7762,7763],{"class":253},"7",[229,7765,929],{"class":916},[229,7767,7385],{"class":253},[229,7769,929],{"class":916},[229,7771,7476],{"class":253},[229,7773,929],{"class":916},[229,7775,5361],{"class":253},[229,7777,917],{"class":916},[229,7779,7485],{"class":253},[229,7781,929],{"class":916},[229,7783,7784],{"class":253},"wi-card wi-card-vehicle",[229,7786,929],{"class":916},[229,7788,5361],{"class":253},[229,7790,917],{"class":916},[229,7792,7499],{"class":253},[229,7794,929],{"class":916},[229,7796,7504],{"class":253},[229,7798,929],{"class":916},[229,7800,5361],{"class":253},[229,7802,917],{"class":916},[229,7804,7513],{"class":253},[229,7806,929],{"class":916},[229,7808,7809],{"class":253},"mdi-car-side",[229,7811,929],{"class":916},[229,7813,7523],{"class":253},[229,7815,929],{"class":916},[229,7817,7528],{"class":253},[229,7819,929],{"class":916},[229,7821,7409],{"class":253},[229,7823,917],{"class":916},[229,7825,7826],{"class":253},"            \u003Cspan>VEHICLE\u003C\u002Fspan>",[229,7828,917],{"class":916},[229,7830,7542],{"class":253},[229,7832,923],{"class":916},[229,7834,7499],{"class":253},[229,7836,929],{"class":916},[229,7838,7839],{"class":253},"wi-vehicle-model",[229,7841,929],{"class":916},[229,7843,5361],{"class":253},[229,7845,917],{"class":916},[229,7847,7848],{"class":253},"            {{ msg?.payload?.vehicle?.model ?? 'Unknown model' }}",[229,7850,917],{"class":916},[229,7852,7542],{"class":253},[229,7854,917],{"class":916},[229,7856,7499],{"class":253},[229,7858,929],{"class":916},[229,7860,7861],{"class":253},"wi-vehicle-variant",[229,7863,929],{"class":916},[229,7865,5361],{"class":253},[229,7867,917],{"class":916},[229,7869,7870],{"class":253},"            {{ msg?.payload?.vehicle?.variant ?? '' }}",[229,7872,917],{"class":916},[229,7874,7542],{"class":253},[229,7876,923],{"class":916},[229,7878,7879],{"class":253},"          \u003Cv-row no-gutters class=",[229,7881,929],{"class":916},[229,7883,7884],{"class":253},"wi-spec-grid",[229,7886,929],{"class":916},[229,7888,5361],{"class":253},[229,7890,917],{"class":916},[229,7892,7893],{"class":253},"            \u003Cv-col cols=",[229,7895,929],{"class":916},[229,7897,7457],{"class":253},[229,7899,929],{"class":916},[229,7901,7902],{"class":253}," sm=",[229,7904,929],{"class":916},[229,7906,7763],{"class":253},[229,7908,929],{"class":916},[229,7910,5361],{"class":253},[229,7912,917],{"class":916},[229,7914,7915],{"class":253},"              \u003Cdiv class=",[229,7917,929],{"class":916},[229,7919,7920],{"class":253},"wi-spec",[229,7922,929],{"class":916},[229,7924,5361],{"class":253},[229,7926,917],{"class":916},[229,7928,7929],{"class":253},"                \u003Cspan class=",[229,7931,929],{"class":916},[229,7933,7934],{"class":253},"wi-spec-label",[229,7936,929],{"class":916},[229,7938,7939],{"class":253},">VIN\u003C\u002Fspan>",[229,7941,917],{"class":916},[229,7943,7929],{"class":253},[229,7945,929],{"class":916},[229,7947,7948],{"class":253},"wi-spec-value wi-vin",[229,7950,929],{"class":916},[229,7952,5361],{"class":253},[229,7954,917],{"class":916},[229,7956,7957],{"class":253},"                  {{ msg?.payload?.vehicle?.vin ?? '—' }}",[229,7959,917],{"class":916},[229,7961,7962],{"class":253},"                \u003C\u002Fspan>",[229,7964,917],{"class":916},[229,7966,7967],{"class":253},"              \u003C\u002Fdiv>",[229,7969,917],{"class":916},[229,7971,7972],{"class":253},"            \u003C\u002Fv-col>",[229,7974,917],{"class":916},[229,7976,7893],{"class":253},[229,7978,929],{"class":916},[229,7980,7457],{"class":253},[229,7982,929],{"class":916},[229,7984,7902],{"class":253},[229,7986,929],{"class":916},[229,7988,7467],{"class":253},[229,7990,929],{"class":916},[229,7992,5361],{"class":253},[229,7994,917],{"class":916},[229,7996,7915],{"class":253},[229,7998,929],{"class":916},[229,8000,7920],{"class":253},[229,8002,929],{"class":916},[229,8004,5361],{"class":253},[229,8006,917],{"class":916},[229,8008,7929],{"class":253},[229,8010,929],{"class":916},[229,8012,7934],{"class":253},[229,8014,929],{"class":916},[229,8016,8017],{"class":253},">COLOR\u003C\u002Fspan>",[229,8019,917],{"class":916},[229,8021,7929],{"class":253},[229,8023,929],{"class":916},[229,8025,8026],{"class":253},"wi-spec-value",[229,8028,929],{"class":916},[229,8030,5361],{"class":253},[229,8032,917],{"class":916},[229,8034,8035],{"class":253},"                  \u003Cv-icon",[229,8037,917],{"class":916},[229,8039,8040],{"class":253},"                    icon=",[229,8042,929],{"class":916},[229,8044,8045],{"class":253},"mdi-circle",[229,8047,988],{"class":916},[229,8049,8050],{"class":253},"                    size=",[229,8052,929],{"class":916},[229,8054,8055],{"class":253},"18",[229,8057,988],{"class":916},[229,8059,8060],{"class":253},"                    class=",[229,8062,929],{"class":916},[229,8064,8065],{"class":253},"wi-color-dot",[229,8067,988],{"class":916},[229,8069,8070],{"class":253},"                  >\u003C\u002Fv-icon>",[229,8072,917],{"class":916},[229,8074,8075],{"class":253},"                  {{ msg?.payload?.vehicle?.color ?? '—' }}",[229,8077,917],{"class":916},[229,8079,7962],{"class":253},[229,8081,917],{"class":916},[229,8083,7967],{"class":253},[229,8085,917],{"class":916},[229,8087,7972],{"class":253},[229,8089,917],{"class":916},[229,8091,8092],{"class":253},"          \u003C\u002Fv-row>",[229,8094,917],{"class":916},[229,8096,7736],{"class":253},[229,8098,917],{"class":916},[229,8100,7741],{"class":253},[229,8102,917],{"class":916},[229,8104,8105],{"class":253},"    \u003C\u002Fv-row>",[229,8107,923],{"class":916},[229,8109,8110],{"class":253},"    \u003C!-- Start button -->",[229,8112,917],{"class":916},[229,8114,8115],{"class":253},"    \u003Cv-btn block size=",[229,8117,929],{"class":916},[229,8119,8120],{"class":253},"x-large",[229,8122,929],{"class":916},[229,8124,8125],{"class":253}," color=",[229,8127,929],{"class":916},[229,8129,8130],{"class":253},"green-darken-1",[229,8132,929],{"class":916},[229,8134,7385],{"class":253},[229,8136,929],{"class":916},[229,8138,8139],{"class":253},"wi-start-btn",[229,8141,929],{"class":916},[229,8143,8144],{"class":253}," :disabled=",[229,8146,929],{"class":916},[229,8148,8149],{"class":253},"!msg?.payload?.workOrderId",[229,8151,988],{"class":916},[229,8153,8154],{"class":253},"      @click=",[229,8156,929],{"class":916},[229,8158,8159],{"class":253},"send({ payload: { action: 'start', workOrderId: msg?.payload?.workOrderId, stationId: msg?.payload?.stationId } })",[229,8161,929],{"class":916},[229,8163,5361],{"class":253},[229,8165,917],{"class":916},[229,8167,8168],{"class":253},"      \u003Cv-icon start icon=",[229,8170,929],{"class":916},[229,8172,8173],{"class":253},"mdi-play-circle",[229,8175,929],{"class":916},[229,8177,7523],{"class":253},[229,8179,929],{"class":916},[229,8181,8182],{"class":253},"34",[229,8184,929],{"class":916},[229,8186,7409],{"class":253},[229,8188,917],{"class":916},[229,8190,8191],{"class":253},"      START WORK ORDER",[229,8193,917],{"class":916},[229,8195,8196],{"class":253},"    \u003C\u002Fv-btn>",[229,8198,917],{"class":916},[229,8200,8201],{"class":253},"  \u003C\u002Fdiv>",[229,8203,917],{"class":916},[229,8205,8206],{"class":253},"\u003C\u002Ftemplate>",[229,8208,923],{"class":916},[229,8210,8211],{"class":253},"\u003Cscript>",[229,8213,917],{"class":916},[229,8215,8216],{"class":253},"  export default {",[229,8218,917],{"class":916},[229,8220,8221],{"class":253},"  computed: {",[229,8223,917],{"class":916},[229,8225,8226],{"class":253},"    priorityColor () {",[229,8228,917],{"class":916},[229,8230,8231],{"class":253},"      const p = (this.msg?.payload?.priority ?? '').toLowerCase()",[229,8233,917],{"class":916},[229,8235,8236],{"class":253},"      if (p === 'high' || p === 'urgent' || p === 'critical') return 'red-darken-1'",[229,8238,917],{"class":916},[229,8240,8241],{"class":253},"      if (p === 'medium') return 'amber-darken-2'",[229,8243,917],{"class":916},[229,8245,8246],{"class":253},"      return 'blue-grey-darken-1'",[229,8248,917],{"class":916},[229,8250,3696],{"class":253},[229,8252,917],{"class":916},[229,8254,8255],{"class":253},"  }",[229,8257,917],{"class":916},[229,8259,1576],{"class":253},[229,8261,917],{"class":916},[229,8263,8264],{"class":253},"\u003C\u002Fscript>",[229,8266,923],{"class":916},[229,8268,8269],{"class":253},"\u003Cstyle>",[229,8271,917],{"class":916},[229,8273,8274],{"class":253},"  .wi-root {",[229,8276,917],{"class":916},[229,8278,8279],{"class":253},"    font-family: 'Roboto', system-ui, sans-serif;",[229,8281,917],{"class":916},[229,8283,8284],{"class":253},"    color: #1f2933;",[229,8286,917],{"class":916},[229,8288,8289],{"class":253},"    padding: 4px;",[229,8291,917],{"class":916},[229,8293,8255],{"class":253},[229,8295,923],{"class":916},[229,8297,8298],{"class":253},"  .wi-topbar {",[229,8300,917],{"class":916},[229,8302,8303],{"class":253},"    display: flex;",[229,8305,917],{"class":916},[229,8307,8308],{"class":253},"    align-items: center;",[229,8310,917],{"class":916},[229,8312,8313],{"class":253},"    justify-content: space-between;",[229,8315,917],{"class":916},[229,8317,8318],{"class":253},"    flex-wrap: wrap;",[229,8320,917],{"class":916},[229,8322,8323],{"class":253},"    gap: 12px;",[229,8325,917],{"class":916},[229,8327,8328],{"class":253},"    background: #ffffff;",[229,8330,917],{"class":916},[229,8332,8333],{"class":253},"    border: 1px solid #e2e8f0;",[229,8335,917],{"class":916},[229,8337,8338],{"class":253},"    border-left: 6px solid #1565c0;",[229,8340,917],{"class":916},[229,8342,8343],{"class":253},"    border-radius: 10px;",[229,8345,917],{"class":916},[229,8347,8348],{"class":253},"    padding: 14px 20px;",[229,8350,917],{"class":916},[229,8352,8353],{"class":253},"    margin-bottom: 14px;",[229,8355,917],{"class":916},[229,8357,8255],{"class":253},[229,8359,923],{"class":916},[229,8361,8362],{"class":253},"  .wi-topbar-left {",[229,8364,917],{"class":916},[229,8366,8303],{"class":253},[229,8368,917],{"class":916},[229,8370,8371],{"class":253},"    flex-direction: column;",[229,8373,917],{"class":916},[229,8375,8376],{"class":253},"    line-height: 1.1;",[229,8378,917],{"class":916},[229,8380,8255],{"class":253},[229,8382,923],{"class":916},[229,8384,8385],{"class":253},"  .wi-wo-label {",[229,8387,917],{"class":916},[229,8389,8390],{"class":253},"    font-size: 12px;",[229,8392,917],{"class":916},[229,8394,8395],{"class":253},"    letter-spacing: 2px;",[229,8397,917],{"class":916},[229,8399,8400],{"class":253},"    color: #64748b;",[229,8402,917],{"class":916},[229,8404,8405],{"class":253},"    font-weight: 600;",[229,8407,917],{"class":916},[229,8409,8255],{"class":253},[229,8411,923],{"class":916},[229,8413,8414],{"class":253},"  .wi-wo-id {",[229,8416,917],{"class":916},[229,8418,8419],{"class":253},"    font-size: 30px;",[229,8421,917],{"class":916},[229,8423,8424],{"class":253},"    font-weight: 700;",[229,8426,917],{"class":916},[229,8428,8429],{"class":253},"    color: #0f172a;",[229,8431,917],{"class":916},[229,8433,8434],{"class":253},"    font-variant-numeric: tabular-nums;",[229,8436,917],{"class":916},[229,8438,8255],{"class":253},[229,8440,923],{"class":916},[229,8442,8443],{"class":253},"  .wi-topbar-right {",[229,8445,917],{"class":916},[229,8447,8303],{"class":253},[229,8449,917],{"class":916},[229,8451,8452],{"class":253},"    gap: 10px;",[229,8454,917],{"class":916},[229,8456,8318],{"class":253},[229,8458,917],{"class":916},[229,8460,8255],{"class":253},[229,8462,923],{"class":916},[229,8464,8465],{"class":253},"  .wi-chip {",[229,8467,917],{"class":916},[229,8469,8470],{"class":253},"    font-weight: 700 !important;",[229,8472,917],{"class":916},[229,8474,8475],{"class":253},"    letter-spacing: 0.5px;",[229,8477,917],{"class":916},[229,8479,8255],{"class":253},[229,8481,923],{"class":916},[229,8483,8484],{"class":253},"  .wi-body {",[229,8486,917],{"class":916},[229,8488,8489],{"class":253},"    gap: 0;",[229,8491,917],{"class":916},[229,8493,8255],{"class":253},[229,8495,923],{"class":916},[229,8497,8498],{"class":253},"  .wi-col {",[229,8500,917],{"class":916},[229,8502,8503],{"class":253},"    padding: 6px;",[229,8505,917],{"class":916},[229,8507,8255],{"class":253},[229,8509,923],{"class":916},[229,8511,8512],{"class":253},"  .wi-card {",[229,8514,917],{"class":916},[229,8516,8517],{"class":253},"    background: #ffffff !important;",[229,8519,917],{"class":916},[229,8521,8522],{"class":253},"    border: 1px solid #e2e8f0 !important;",[229,8524,917],{"class":916},[229,8526,8527],{"class":253},"    border-radius: 10px !important;",[229,8529,917],{"class":916},[229,8531,8532],{"class":253},"    padding: 20px 22px;",[229,8534,917],{"class":916},[229,8536,8537],{"class":253},"    height: 100%;",[229,8539,917],{"class":916},[229,8541,8255],{"class":253},[229,8543,923],{"class":916},[229,8545,8546],{"class":253},"  .wi-card-vehicle {",[229,8548,917],{"class":916},[229,8550,8551],{"class":253},"    border-left: 6px solid #00897b !important;",[229,8553,917],{"class":916},[229,8555,8255],{"class":253},[229,8557,923],{"class":916},[229,8559,8560],{"class":253},"  .wi-card-station {",[229,8562,917],{"class":916},[229,8564,8565],{"class":253},"    border-left: 6px solid #5e35b1 !important;",[229,8567,917],{"class":916},[229,8569,8255],{"class":253},[229,8571,923],{"class":916},[229,8573,8574],{"class":253},"  .wi-card-head {",[229,8576,917],{"class":916},[229,8578,8303],{"class":253},[229,8580,917],{"class":916},[229,8582,8308],{"class":253},[229,8584,917],{"class":916},[229,8586,8587],{"class":253},"    gap: 8px;",[229,8589,917],{"class":916},[229,8591,8592],{"class":253},"    font-size: 13px;",[229,8594,917],{"class":916},[229,8596,8395],{"class":253},[229,8598,917],{"class":916},[229,8600,8424],{"class":253},[229,8602,917],{"class":916},[229,8604,8400],{"class":253},[229,8606,917],{"class":916},[229,8608,8609],{"class":253},"    margin-bottom: 6px;",[229,8611,917],{"class":916},[229,8613,8255],{"class":253},[229,8615,923],{"class":916},[229,8617,8618],{"class":253},"  .wi-station-id {",[229,8620,917],{"class":916},[229,8622,8623],{"class":253},"    font-size: 44px;",[229,8625,917],{"class":916},[229,8627,8424],{"class":253},[229,8629,917],{"class":916},[229,8631,8632],{"class":253},"    color: #4527a0;",[229,8634,917],{"class":916},[229,8636,8637],{"class":253},"    line-height: 1;",[229,8639,917],{"class":916},[229,8641,8609],{"class":253},[229,8643,917],{"class":916},[229,8645,8255],{"class":253},[229,8647,923],{"class":916},[229,8649,8650],{"class":253},"  .wi-divider {",[229,8652,917],{"class":916},[229,8654,8655],{"class":253},"    margin: 16px 0;",[229,8657,917],{"class":916},[229,8659,8660],{"class":253},"    border-color: #edf2f7 !important;",[229,8662,917],{"class":916},[229,8664,8255],{"class":253},[229,8666,923],{"class":916},[229,8668,8669],{"class":253},"  .wi-operation-name {",[229,8671,917],{"class":916},[229,8673,8674],{"class":253},"    font-size: 24px;",[229,8676,917],{"class":916},[229,8678,8405],{"class":253},[229,8680,917],{"class":916},[229,8682,8429],{"class":253},[229,8684,917],{"class":916},[229,8686,8687],{"class":253},"    margin-bottom: 18px;",[229,8689,917],{"class":916},[229,8691,8255],{"class":253},[229,8693,923],{"class":916},[229,8695,8696],{"class":253},"  .wi-cycle {",[229,8698,917],{"class":916},[229,8700,8303],{"class":253},[229,8702,917],{"class":916},[229,8704,8308],{"class":253},[229,8706,917],{"class":916},[229,8708,8323],{"class":253},[229,8710,917],{"class":916},[229,8712,8713],{"class":253},"    background: #f1f5f9;",[229,8715,917],{"class":916},[229,8717,8718],{"class":253},"    border-radius: 8px;",[229,8720,917],{"class":916},[229,8722,8723],{"class":253},"    padding: 12px 16px;",[229,8725,917],{"class":916},[229,8727,8255],{"class":253},[229,8729,923],{"class":916},[229,8731,8732],{"class":253},"  .wi-cycle-text {",[229,8734,917],{"class":916},[229,8736,8303],{"class":253},[229,8738,917],{"class":916},[229,8740,8371],{"class":253},[229,8742,917],{"class":916},[229,8744,8745],{"class":253},"    line-height: 1.2;",[229,8747,917],{"class":916},[229,8749,8255],{"class":253},[229,8751,923],{"class":916},[229,8753,8754],{"class":253},"  .wi-cycle-label {",[229,8756,917],{"class":916},[229,8758,8759],{"class":253},"    font-size: 11px;",[229,8761,917],{"class":916},[229,8763,8764],{"class":253},"    letter-spacing: 1.5px;",[229,8766,917],{"class":916},[229,8768,8405],{"class":253},[229,8770,917],{"class":916},[229,8772,8400],{"class":253},[229,8774,917],{"class":916},[229,8776,8255],{"class":253},[229,8778,923],{"class":916},[229,8780,8781],{"class":253},"  .wi-cycle-value {",[229,8783,917],{"class":916},[229,8785,8786],{"class":253},"    font-size: 22px;",[229,8788,917],{"class":916},[229,8790,8424],{"class":253},[229,8792,917],{"class":916},[229,8794,8429],{"class":253},[229,8796,917],{"class":916},[229,8798,8434],{"class":253},[229,8800,917],{"class":916},[229,8802,8255],{"class":253},[229,8804,923],{"class":916},[229,8806,8807],{"class":253},"  .wi-vehicle-model {",[229,8809,917],{"class":916},[229,8811,8812],{"class":253},"    font-size: 34px;",[229,8814,917],{"class":916},[229,8816,8424],{"class":253},[229,8818,917],{"class":916},[229,8820,8429],{"class":253},[229,8822,917],{"class":916},[229,8824,8825],{"class":253},"    line-height: 1.05;",[229,8827,917],{"class":916},[229,8829,8255],{"class":253},[229,8831,923],{"class":916},[229,8833,8834],{"class":253},"  .wi-vehicle-variant {",[229,8836,917],{"class":916},[229,8838,8839],{"class":253},"    font-size: 18px;",[229,8841,917],{"class":916},[229,8843,8844],{"class":253},"    font-weight: 500;",[229,8846,917],{"class":916},[229,8848,8849],{"class":253},"    color: #00695c;",[229,8851,917],{"class":916},[229,8853,8854],{"class":253},"    margin-bottom: 20px;",[229,8856,917],{"class":916},[229,8858,8255],{"class":253},[229,8860,923],{"class":916},[229,8862,8863],{"class":253},"  .wi-spec-grid {",[229,8865,917],{"class":916},[229,8867,8489],{"class":253},[229,8869,917],{"class":916},[229,8871,8255],{"class":253},[229,8873,923],{"class":916},[229,8875,8876],{"class":253},"  .wi-spec {",[229,8878,917],{"class":916},[229,8880,8303],{"class":253},[229,8882,917],{"class":916},[229,8884,8371],{"class":253},[229,8886,917],{"class":916},[229,8888,8889],{"class":253},"    padding: 10px 0;",[229,8891,917],{"class":916},[229,8893,8255],{"class":253},[229,8895,923],{"class":916},[229,8897,8898],{"class":253},"  .wi-spec-label {",[229,8900,917],{"class":916},[229,8902,8759],{"class":253},[229,8904,917],{"class":916},[229,8906,8764],{"class":253},[229,8908,917],{"class":916},[229,8910,8405],{"class":253},[229,8912,917],{"class":916},[229,8914,8400],{"class":253},[229,8916,917],{"class":916},[229,8918,8919],{"class":253},"    margin-bottom: 2px;",[229,8921,917],{"class":916},[229,8923,8255],{"class":253},[229,8925,923],{"class":916},[229,8927,8928],{"class":253},"  .wi-spec-value {",[229,8930,917],{"class":916},[229,8932,8933],{"class":253},"    font-size: 20px;",[229,8935,917],{"class":916},[229,8937,8405],{"class":253},[229,8939,917],{"class":916},[229,8941,8429],{"class":253},[229,8943,917],{"class":916},[229,8945,8303],{"class":253},[229,8947,917],{"class":916},[229,8949,8308],{"class":253},[229,8951,917],{"class":916},[229,8953,8954],{"class":253},"    gap: 6px;",[229,8956,917],{"class":916},[229,8958,8255],{"class":253},[229,8960,923],{"class":916},[229,8962,8963],{"class":253},"  .wi-vin {",[229,8965,917],{"class":916},[229,8967,8968],{"class":253},"    font-family: 'Roboto Mono', monospace;",[229,8970,917],{"class":916},[229,8972,8839],{"class":253},[229,8974,917],{"class":916},[229,8976,8977],{"class":253},"    letter-spacing: 1px;",[229,8979,917],{"class":916},[229,8981,8255],{"class":253},[229,8983,923],{"class":916},[229,8985,8986],{"class":253},"  .wi-color-dot {",[229,8988,917],{"class":916},[229,8990,8991],{"class":253},"    color: #cbd5e1;",[229,8993,917],{"class":916},[229,8995,8255],{"class":253},[229,8997,923],{"class":916},[229,8999,9000],{"class":253},"  .wi-start-btn {",[229,9002,917],{"class":916},[229,9004,9005],{"class":253},"    margin-top: 16px;",[229,9007,917],{"class":916},[229,9009,9010],{"class":253},"    height: 84px !important;",[229,9012,917],{"class":916},[229,9014,9015],{"class":253},"    font-size: 24px !important;",[229,9017,917],{"class":916},[229,9019,8470],{"class":253},[229,9021,917],{"class":916},[229,9023,8977],{"class":253},[229,9025,917],{"class":916},[229,9027,9028],{"class":253},"    border-radius: 12px !important;",[229,9030,917],{"class":916},[229,9032,8255],{"class":253},[229,9034,917],{"class":916},[229,9036,9037],{"class":253},"\u003C\u002Fstyle>",[229,9039,239],{"class":235},[229,9041,259],{"class":235},[229,9043,239],{"class":235},[229,9045,9046],{"class":242},"storeOutMessages",[229,9048,239],{"class":235},[229,9050,388],{"class":235},[229,9052,239],{"class":235},[229,9054,9055],{"class":242},"passthru",[229,9057,239],{"class":235},[229,9059,750],{"class":235},[229,9061,239],{"class":235},[229,9063,9064],{"class":242},"resendOnRefresh",[229,9066,239],{"class":235},[229,9068,388],{"class":235},[229,9070,239],{"class":235},[229,9072,9073],{"class":242},"templateScope",[229,9075,239],{"class":235},[229,9077,248],{"class":235},[229,9079,239],{"class":235},[229,9081,9082],{"class":253},"local",[229,9084,239],{"class":235},[229,9086,259],{"class":235},[229,9088,239],{"class":235},[229,9090,9091],{"class":242},"className",[229,9093,239],{"class":235},[229,9095,248],{"class":235},[229,9097,771],{"class":235},[229,9099,259],{"class":235},[229,9101,239],{"class":235},[229,9103,567],{"class":242},[229,9105,239],{"class":235},[229,9107,248],{"class":235},[229,9109,9110],{"class":574},"570",[229,9112,259],{"class":235},[229,9114,239],{"class":235},[229,9116,582],{"class":242},[229,9118,239],{"class":235},[229,9120,248],{"class":235},[229,9122,2515],{"class":574},[229,9124,259],{"class":235},[229,9126,239],{"class":235},[229,9128,803],{"class":242},[229,9130,239],{"class":235},[229,9132,808],{"class":235},[229,9134,239],{"class":235},[229,9136,9137],{"class":253},"455c7536a9adcfe6",[229,9139,239],{"class":235},[229,9141,817],{"class":235},[229,9143,239],{"class":235},[229,9145,243],{"class":242},[229,9147,239],{"class":235},[229,9149,248],{"class":235},[229,9151,239],{"class":235},[229,9153,9154],{"class":253},"77ecf88a48f8c4f0",[229,9156,239],{"class":235},[229,9158,259],{"class":235},[229,9160,239],{"class":235},[229,9162,264],{"class":242},[229,9164,239],{"class":235},[229,9166,248],{"class":235},[229,9168,239],{"class":235},[229,9170,4749],{"class":253},[229,9172,239],{"class":235},[229,9174,259],{"class":235},[229,9176,239],{"class":235},[229,9178,4758],{"class":242},[229,9180,239],{"class":235},[229,9182,1081],{"class":235},[229,9184,239],{"class":235},[229,9186,4767],{"class":242},[229,9188,239],{"class":235},[229,9190,305],{"class":235},[229,9192,239],{"class":235},[229,9194,99],{"class":310},[229,9196,239],{"class":235},[229,9198,248],{"class":235},[229,9200,239],{"class":235},[229,9202,4784],{"class":253},[229,9204,239],{"class":235},[229,9206,4789],{"class":235},[148,9208,9209],{"start":4979},[70,9210,9211,9212,9215,9216,5836,9218,9220,9221,9223,9224,57],{},"Wire ",[45,9213,9214],{},"output 1"," to the \"Current Work Order Card\" ",[97,9217,103],{},[45,9219,4898],{}," 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,9222,158],{}," button. On click, the button sends ",[97,9225,9226],{},"{ action: 'start', workOrderId, stationId }",[12,9228,9229,75,9233],{},[21,9230],{"alt":9231,"src":9232},"Placeholder: Current Work Order Card rendered on the Home page","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fcurrent-work-order.png",[26,9234,9235],{},"The Current Work Order card: work order ID, priority chip, station, operation, vehicle details, and the Start button.",[148,9237,9238],{"start":5113},[70,9239,5236,9240,9242,9243,9245],{},[97,9241,107],{}," node and assign it to the ",[45,9244,4903],{}," 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,9247,9248,75,9252],{},[21,9249],{"alt":9250,"src":9251},"Placeholder: Up Next table listing queued work orders","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fup-next.png",[26,9253,9254],{},"The Up Next table showing the remaining queued work orders with their priority.",[148,9256,9257],{"start":5128},[70,9258,9259,9260,9262,9263,9266,9267,9269,9270,9272,9273,9275],{},"From the card, wire a ",[97,9261,5670],{}," node named \"go to Instructions\" that sets ",[97,9264,9265],{},"payload"," (msg) to ",[97,9268,4820],{},", then into a ",[97,9271,116],{}," node with its event set to ",[45,9274,5670],{}," to switch the page.",[12,9277,9278,9279,9281,9282,9284],{},"When the operator taps ",[45,9280,158],{},", the card sends them to the Instructions page. Because the split function already saved this operator's ",[97,9283,6933],{}," 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,9286,9288],{"id":9287},"loading-the-cached-instruction-set","Loading the Cached Instruction Set",[12,9290,9291],{},"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.",[148,9293,9294,9299,9309],{},[70,9295,5236,9296,9298],{},[97,9297,119],{}," node named \"Page opened\" for the Instructions page.",[70,9300,5236,9301,9303,9304,9306,9307,57],{},[97,9302,5670],{}," node named \"Load cached instruction set\". Set ",[97,9305,9265],{}," (msg) to the persistent global ",[97,9308,4820],{},[70,9310,9311],{},"Wire \"Page opened\" into it, and its output into the \"Work Instruction Widget\" you build next.",[59,9313,9315],{"id":9314},"remembering-each-operators-step","Remembering Each Operator's Step",[12,9317,9318,9319,9322,9323,9326],{},"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,9320,9321],{},"step 3",", not start again at ",[45,9324,9325],{},"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,9328,9329,9330,9333,9334,9337],{},"The instruction widget emits two housekeeping actions: ",[97,9331,9332],{},"save_step"," whenever the operator moves between steps, and ",[97,9335,9336],{},"load_step"," when the page opens and needs to know where to resume. One function node handles both.",[148,9339,9340],{},[70,9341,9342,9343,75,9346,9348,9349,9351,9352,9355,9356,57],{},"Import the ",[45,9344,9345],{},"Work Instruction Widget",[97,9347,103],{}," below, assign it to the ",[45,9350,4820],{}," page, and set its scope to ",[45,9353,9354],{},"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,9357,9358],{},"Complete Operation",[40,9360,9361],{},[12,9362,9363,7051,9365,7056,9368,7059],{},[45,9364,7050],{},[77,9366,7055],{"href":9367},"\u002Fdocs\u002Fuser\u002Fexpert\u002Fnode-red-embedded-ai\u002F?utm_source=chatgpt.com#css-and-html-generation-for-flowfuse-dashboard",[97,9369,103],{},[216,9371,9372],{":height":218},[220,9373,9375],{"className":222,"code":9374,"language":224,"meta":225,"style":225},"[{\"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",[97,9376,9377],{"__ignoreMap":225},[229,9378,9379,9381,9383,9385,9387,9389,9391,9394,9396,9398,9400,9402,9404,9406,9408,9410,9412,9414,9416,9418,9420,9422,9424,9426,9428,9430,9432,9434,9436,9438,9440,9443,9445,9447,9449,9451,9453,9455,9457,9459,9461,9463,9465,9467,9469,9471,9473,9475,9477,9479,9481,9483,9485,9487,9489,9491,9493,9495,9497,9499,9501,9503,9505,9507,9509,9511,9513,9515,9517,9519,9521,9523,9525,9527,9529,9531,9533,9535,9537,9539,9541,9543,9545,9547,9549,9551,9553,9555,9557,9559,9561,9563,9565,9567,9569,9571,9573,9576,9578,9580,9582,9584,9586,9588,9590,9592,9594,9596,9598,9600,9602,9604,9606,9609,9611,9614,9616,9618,9620,9623,9625,9628,9630,9632,9634,9637,9639,9641,9643,9646,9648,9651,9653,9655,9657,9659,9661,9663,9665,9667,9669,9672,9674,9677,9679,9681,9683,9686,9688,9690,9692,9694,9696,9698,9700,9702,9704,9706,9708,9711,9713,9715,9717,9720,9722,9725,9727,9730,9732,9734,9736,9739,9741,9744,9746,9748,9750,9753,9755,9757,9759,9761,9763,9766,9768,9771,9773,9776,9778,9780,9782,9784,9786,9789,9791,9793,9795,9797,9799,9802,9804,9806,9808,9811,9813,9815,9817,9819,9821,9824,9826,9829,9831,9833,9835,9838,9840,9843,9845,9847,9849,9851,9853,9856,9858,9861,9863,9866,9868,9871,9873,9876,9878,9880,9882,9885,9887,9889,9891,9893,9895,9898,9900,9902,9904,9907,9909,9911,9913,9916,9918,9920,9922,9924,9926,9929,9931,9933,9935,9938,9940,9943,9945,9948,9950,9953,9955,9958,9960,9963,9965,9968,9970,9973,9975,9978,9980,9983,9985,9987,9989,9991,9993,9996,9998,10000,10002,10005,10007,10009,10011,10013,10015,10017,10019,10021,10023,10025,10027,10029,10031,10033,10035,10038,10040,10042,10044,10047,10049,10051,10053,10055,10057,10060,10062,10065,10067,10070,10072,10075,10077,10080,10082,10084,10086,10089,10091,10093,10095,10097,10099,10102,10104,10106,10108,10110,10112,10114,10116,10119,10121,10123,10125,10127,10129,10132,10134,10136,10138,10141,10143,10146,10148,10151,10153,10156,10158,10161,10163,10165,10167,10170,10172,10175,10177,10180,10182,10185,10187,10190,10192,10195,10197,10200,10202,10205,10207,10209,10211,10214,10216,10219,10221,10224,10226,10229,10231,10234,10236,10239,10241,10244,10246,10248,10250,10252,10254,10256,10258,10260,10262,10265,10267,10269,10271,10274,10276,10278,10280,10282,10284,10286,10288,10290,10292,10295,10297,10299,10301,10304,10306,10308,10310,10313,10315,10317,10319,10321,10323,10326,10328,10330,10332,10335,10337,10339,10341,10344,10346,10349,10351,10354,10356,10359,10361,10364,10366,10368,10370,10372,10374,10377,10379,10381,10383,10386,10388,10390,10392,10395,10397,10400,10402,10404,10406,10408,10410,10412,10414,10416,10418,10420,10422,10424,10426,10428,10430,10432,10434,10436,10438,10440,10442,10444,10446,10448,10450,10452,10454,10457,10459,10461,10463,10465,10467,10469,10471,10474,10476,10478,10480,10482,10484,10487,10489,10491,10493,10496,10498,10500,10502,10505,10507,10509,10511,10513,10515,10517,10519,10521,10523,10525,10527,10530,10532,10534,10536,10538,10540,10542,10544,10546,10548,10550,10552,10554,10556,10558,10560,10563,10565,10568,10570,10573,10575,10578,10580,10582,10584,10587,10589,10591,10593,10596,10598,10600,10602,10605,10607,10610,10612,10614,10616,10618,10620,10622,10624,10627,10629,10631,10633,10635,10637,10639,10641,10644,10646,10648,10650,10652,10654,10657,10659,10661,10663,10666,10668,10671,10673,10675,10677,10679,10681,10683,10685,10688,10690,10692,10694,10696,10698,10700,10702,10704,10706,10708,10710,10713,10715,10718,10720,10723,10725,10728,10730,10733,10735,10738,10740,10743,10745,10747,10749,10752,10754,10756,10758,10761,10763,10766,10768,10770,10772,10775,10777,10780,10782,10784,10786,10789,10791,10794,10796,10798,10800,10803,10805,10808,10810,10812,10814,10817,10819,10822,10824,10827,10829,10831,10833,10836,10838,10841,10843,10845,10847,10850,10852,10855,10857,10860,10862,10865,10867,10870,10872,10874,10876,10879,10881,10884,10886,10888,10890,10892,10894,10897,10899,10902,10904,10907,10909,10912,10915,10918,10920,10923,10925,10928,10930,10932,10934,10937,10939,10942,10944,10947,10949,10952,10954,10957,10959,10962,10964,10966,10968,10971,10973,10975,10977,10980,10982,10985,10987,10990,10992,10995,10997,11000,11002,11005,11007,11010,11012,11014,11016,11019,11021,11023,11025,11028,11030,11033,11035,11038,11040,11043,11045,11047,11049,11052,11054,11057,11059,11062,11064,11066,11068,11070,11072,11075,11077,11080,11082,11085,11087,11090,11092,11094,11096,11099,11101,11104,11106,11109,11111,11113,11115,11117,11119,11122,11124,11126,11128,11131,11133,11136,11138,11141,11143,11145,11147,11150,11152,11154,11156,11158,11160,11163,11165,11167,11169,11171,11173,11175,11177,11179,11181,11184,11186,11189,11191,11194,11196,11199,11201,11204,11206,11209,11211,11214,11216,11219,11221,11224,11226,11229,11231,11234,11236,11239,11241,11244,11246,11249,11251,11254,11256,11259,11261,11264,11266,11268,11270,11272,11274,11276,11278,11280,11282,11285,11287,11290,11292,11295,11297,11299,11301,11303,11305,11307,11309,11311,11313,11315,11317,11319,11321,11323,11325,11328,11330,11332,11334,11337,11339,11341,11343,11345,11347,11349,11351,11353,11355,11357,11359,11361,11363,11365,11367,11369,11371,11373,11375,11377,11379,11382,11384,11387,11389,11391,11393,11395,11397,11399,11401,11403,11405,11408,11410,11412,11414,11417,11419,11421,11423,11425,11427,11429,11431,11433,11435,11437,11439,11442,11444,11447,11449,11451,11453,11455,11457,11459,11461,11464,11466,11468,11470,11473,11475,11477,11479,11482,11484,11486,11488,11491,11493,11495,11497,11499,11501,11503,11505,11508,11510,11512,11514,11516,11518,11520,11522,11524,11526,11529,11531,11533,11535,11537,11539,11541,11543,11545,11547,11550,11552,11555,11557,11559,11561,11563,11565,11568,11570,11572,11574,11577,11579,11581,11583,11585,11587,11589,11591,11593,11595,11598,11600,11602,11604,11606,11608,11610,11612,11614,11616,11619,11621,11623,11625,11628,11630,11632,11634,11636,11638,11640,11642,11644,11646,11648,11650,11652,11654,11656,11658,11660,11662,11664,11666,11669,11671,11673,11675,11678,11680,11683,11685,11687,11689,11691,11693,11695,11697,11700,11702,11704,11706,11708,11710,11713,11715,11717,11719,11721,11723,11726,11728,11731,11733,11735,11737,11739,11741,11743,11745,11747,11749,11752,11754,11756,11758,11760,11762,11764,11766,11768,11770,11772,11774,11777,11779,11782,11784,11787,11789,11792,11794,11796,11798,11800,11802,11805,11807,11810,11812,11815,11817,11820,11822,11825,11827,11830,11832,11834,11836,11838,11840,11843,11845,11848,11850,11852,11854,11856,11858,11860,11862,11864,11866,11868,11870,11873,11875,11878,11880,11883,11885,11888,11890,11893,11895,11897,11899,11902,11904,11907,11909,11912,11914,11917,11919,11921,11923,11926,11928,11930,11932,11934,11936,11939,11941,11943,11945,11948,11950,11952,11954,11956,11958,11961,11963,11965,11967,11970,11972,11974,11976,11978,11980,11982,11984,11986,11988,11991,11993,11995,11997,12000,12002,12005,12007,12010,12012,12014,12016,12019,12021,12024,12026,12029,12031,12033,12035,12038,12040,12042,12044,12046,12048,12051,12053,12056,12058,12060,12062,12065,12067,12070,12072,12075,12077,12079,12081,12083,12085,12088,12090,12093,12095,12097,12099,12101,12103,12105,12107,12110,12112,12115,12117,12120,12122,12124,12126,12128,12130,12133,12135,12138,12140,12142,12144,12147,12149,12151,12153,12155,12157,12159,12161,12163,12165,12168,12170,12172,12174,12176,12178,12181,12183,12185,12187,12190,12192,12195,12197,12200,12202,12204,12206,12209,12211,12214,12216,12219,12221,12224,12226,12228,12230,12232,12234,12237,12239,12241,12243,12245,12247,12250,12252,12254,12256,12259,12261,12264,12266,12269,12271,12273,12275,12278,12280,12283,12285,12287,12289,12291,12293,12296,12298,12300,12302,12304,12306,12309,12311,12314,12316,12319,12321,12323,12325,12327,12329,12332,12334,12337,12339,12341,12343,12346,12348,12351,12353,12356,12358,12360,12362,12364,12366,12368,12370,12372,12374,12377,12379,12381,12383,12385,12387,12389,12391,12393,12395,12398,12400,12403,12405,12407,12409,12412,12414,12416,12418,12420,12422,12424,12426,12428,12430,12433,12435,12437,12439,12441,12443,12445,12447,12449,12451,12453,12455,12457,12459,12461,12463,12465,12467,12469,12471,12473,12475,12477,12479,12481,12483,12485,12487,12489,12491,12494,12496,12498,12500,12502,12504,12506,12508,12510,12512,12514,12516,12518,12521,12523,12525,12527,12529,12531,12534,12536,12538,12540,12542,12544,12546,12549,12551,12553,12555,12558,12560,12562,12564,12566,12568,12570,12572,12575,12577,12579,12581,12583,12585,12587,12589,12591,12593,12595,12597,12599,12601,12603,12605,12607,12609,12611,12613,12615,12617,12619,12621,12623,12625],{"class":231,"line":232},[229,9380,236],{"class":235},[229,9382,239],{"class":235},[229,9384,243],{"class":242},[229,9386,239],{"class":235},[229,9388,248],{"class":235},[229,9390,239],{"class":235},[229,9392,9393],{"class":253},"d3492b9665d71f27",[229,9395,239],{"class":235},[229,9397,259],{"class":235},[229,9399,239],{"class":235},[229,9401,264],{"class":242},[229,9403,239],{"class":235},[229,9405,248],{"class":235},[229,9407,239],{"class":235},[229,9409,103],{"class":253},[229,9411,239],{"class":235},[229,9413,259],{"class":235},[229,9415,239],{"class":235},[229,9417,282],{"class":242},[229,9419,239],{"class":235},[229,9421,248],{"class":235},[229,9423,239],{"class":235},[229,9425,7116],{"class":253},[229,9427,239],{"class":235},[229,9429,259],{"class":235},[229,9431,239],{"class":235},[229,9433,674],{"class":242},[229,9435,239],{"class":235},[229,9437,248],{"class":235},[229,9439,239],{"class":235},[229,9441,9442],{"class":253},"96f12d35d68b430e",[229,9444,239],{"class":235},[229,9446,259],{"class":235},[229,9448,239],{"class":235},[229,9450,273],{"class":242},[229,9452,239],{"class":235},[229,9454,248],{"class":235},[229,9456,771],{"class":235},[229,9458,259],{"class":235},[229,9460,239],{"class":235},[229,9462,4639],{"class":242},[229,9464,239],{"class":235},[229,9466,248],{"class":235},[229,9468,771],{"class":235},[229,9470,259],{"class":235},[229,9472,239],{"class":235},[229,9474,4278],{"class":242},[229,9476,239],{"class":235},[229,9478,248],{"class":235},[229,9480,771],{"class":235},[229,9482,259],{"class":235},[229,9484,239],{"class":235},[229,9486,691],{"class":242},[229,9488,239],{"class":235},[229,9490,248],{"class":235},[229,9492,239],{"class":235},[229,9494,9345],{"class":253},[229,9496,239],{"class":235},[229,9498,259],{"class":235},[229,9500,239],{"class":235},[229,9502,7195],{"class":242},[229,9504,239],{"class":235},[229,9506,248],{"class":235},[229,9508,338],{"class":574},[229,9510,259],{"class":235},[229,9512,239],{"class":235},[229,9514,7208],{"class":242},[229,9516,239],{"class":235},[229,9518,248],{"class":235},[229,9520,1043],{"class":574},[229,9522,259],{"class":235},[229,9524,239],{"class":235},[229,9526,7221],{"class":242},[229,9528,239],{"class":235},[229,9530,248],{"class":235},[229,9532,1043],{"class":574},[229,9534,259],{"class":235},[229,9536,239],{"class":235},[229,9538,7234],{"class":242},[229,9540,239],{"class":235},[229,9542,248],{"class":235},[229,9544,771],{"class":235},[229,9546,259],{"class":235},[229,9548,239],{"class":235},[229,9550,7247],{"class":242},[229,9552,239],{"class":235},[229,9554,248],{"class":235},[229,9556,239],{"class":235},[229,9558,7256],{"class":253},[229,9560,917],{"class":916},[229,9562,7261],{"class":253},[229,9564,929],{"class":916},[229,9566,7266],{"class":253},[229,9568,929],{"class":916},[229,9570,5361],{"class":253},[229,9572,917],{"class":916},[229,9574,9575],{"class":253},"    \u003C!-- Context header with live timer -->",[229,9577,917],{"class":916},[229,9579,7280],{"class":253},[229,9581,929],{"class":916},[229,9583,7285],{"class":253},[229,9585,929],{"class":916},[229,9587,5361],{"class":253},[229,9589,917],{"class":916},[229,9591,7294],{"class":253},[229,9593,929],{"class":916},[229,9595,7299],{"class":253},[229,9597,929],{"class":916},[229,9599,5361],{"class":253},[229,9601,917],{"class":916},[229,9603,7308],{"class":253},[229,9605,929],{"class":916},[229,9607,9608],{"class":253},"wi-op-label",[229,9610,929],{"class":916},[229,9612,9613],{"class":253},">OPERATION\u003C\u002Fspan>",[229,9615,917],{"class":916},[229,9617,7308],{"class":253},[229,9619,929],{"class":916},[229,9621,9622],{"class":253},"wi-op-name",[229,9624,929],{"class":916},[229,9626,9627],{"class":253},">{{ payload?.operation ?? 'Work Instruction' }}\u003C\u002Fspan>",[229,9629,917],{"class":916},[229,9631,7308],{"class":253},[229,9633,929],{"class":916},[229,9635,9636],{"class":253},"wi-op-sub",[229,9638,929],{"class":916},[229,9640,5361],{"class":253},[229,9642,917],{"class":916},[229,9644,9645],{"class":253},"          {{ payload?.instructionSetId ?? '—' }} &nbsp;·&nbsp; v{{ payload?.version ?? '—' }}",[229,9647,917],{"class":916},[229,9649,9650],{"class":253},"        \u003C\u002Fspan>",[229,9652,917],{"class":916},[229,9654,7337],{"class":253},[229,9656,917],{"class":916},[229,9658,7294],{"class":253},[229,9660,929],{"class":916},[229,9662,7346],{"class":253},[229,9664,929],{"class":916},[229,9666,5361],{"class":253},[229,9668,917],{"class":916},[229,9670,9671],{"class":253},"        \u003Cdiv class=",[229,9673,929],{"class":916},[229,9675,9676],{"class":253},"wi-timer",[229,9678,929],{"class":916},[229,9680,5361],{"class":253},[229,9682,917],{"class":916},[229,9684,9685],{"class":253},"          \u003Cv-icon icon=",[229,9687,929],{"class":916},[229,9689,7657],{"class":253},[229,9691,929],{"class":916},[229,9693,7523],{"class":253},[229,9695,929],{"class":916},[229,9697,7666],{"class":253},[229,9699,929],{"class":916},[229,9701,7409],{"class":253},[229,9703,917],{"class":916},[229,9705,7499],{"class":253},[229,9707,929],{"class":916},[229,9709,9710],{"class":253},"wi-timer-text",[229,9712,929],{"class":916},[229,9714,5361],{"class":253},[229,9716,917],{"class":916},[229,9718,9719],{"class":253},"            \u003Cspan class=",[229,9721,929],{"class":916},[229,9723,9724],{"class":253},"wi-timer-label",[229,9726,929],{"class":916},[229,9728,9729],{"class":253},">TARGET TIME\u003C\u002Fspan>",[229,9731,917],{"class":916},[229,9733,9719],{"class":253},[229,9735,929],{"class":916},[229,9737,9738],{"class":253},"wi-timer-value",[229,9740,929],{"class":916},[229,9742,9743],{"class":253},">{{ currentStep?.estimatedTime ?? '—' }}s\u003C\u002Fspan>",[229,9745,917],{"class":916},[229,9747,7542],{"class":253},[229,9749,917],{"class":916},[229,9751,9752],{"class":253},"        \u003C\u002Fdiv>",[229,9754,917],{"class":916},[229,9756,7337],{"class":253},[229,9758,917],{"class":916},[229,9760,7428],{"class":253},[229,9762,923],{"class":916},[229,9764,9765],{"class":253},"    \u003C!-- Step progress -->",[229,9767,917],{"class":916},[229,9769,9770],{"class":253},"    \u003Cv-card flat class=",[229,9772,929],{"class":916},[229,9774,9775],{"class":253},"wi-card wi-stepper-card",[229,9777,929],{"class":916},[229,9779,5361],{"class":253},[229,9781,917],{"class":916},[229,9783,7294],{"class":253},[229,9785,929],{"class":916},[229,9787,9788],{"class":253},"wi-stepper-head",[229,9790,929],{"class":916},[229,9792,5361],{"class":253},[229,9794,917],{"class":916},[229,9796,7308],{"class":253},[229,9798,929],{"class":916},[229,9800,9801],{"class":253},"wi-step-count",[229,9803,929],{"class":916},[229,9805,5361],{"class":253},[229,9807,917],{"class":916},[229,9809,9810],{"class":253},"          STEP {{ (currentIndex + 1) }} OF {{ steps.length }}",[229,9812,917],{"class":916},[229,9814,9650],{"class":253},[229,9816,917],{"class":916},[229,9818,7308],{"class":253},[229,9820,929],{"class":916},[229,9822,9823],{"class":253},"wi-step-percent",[229,9825,929],{"class":916},[229,9827,9828],{"class":253},">{{ progressPercent }}% COMPLETE\u003C\u002Fspan>",[229,9830,917],{"class":916},[229,9832,7337],{"class":253},[229,9834,917],{"class":916},[229,9836,9837],{"class":253},"      \u003Cv-progress-linear :model-value=",[229,9839,929],{"class":916},[229,9841,9842],{"class":253},"progressPercent",[229,9844,929],{"class":916},[229,9846,8125],{"class":253},[229,9848,929],{"class":916},[229,9850,8130],{"class":253},[229,9852,929],{"class":916},[229,9854,9855],{"class":253}," height=",[229,9857,929],{"class":916},[229,9859,9860],{"class":253},"8",[229,9862,929],{"class":916},[229,9864,9865],{"class":253}," rounded>\u003C\u002Fv-progress-linear>",[229,9867,917],{"class":916},[229,9869,9870],{"class":253},"    \u003C\u002Fv-card>",[229,9872,923],{"class":916},[229,9874,9875],{"class":253},"    \u003C!-- Main instruction pane: image left, instruction + checklist right -->",[229,9877,917],{"class":916},[229,9879,9770],{"class":253},[229,9881,929],{"class":916},[229,9883,9884],{"class":253},"wi-card wi-card-instruction",[229,9886,929],{"class":916},[229,9888,5361],{"class":253},[229,9890,917],{"class":916},[229,9892,7294],{"class":253},[229,9894,929],{"class":916},[229,9896,9897],{"class":253},"wi-instruction-flex",[229,9899,929],{"class":916},[229,9901,5361],{"class":253},[229,9903,917],{"class":916},[229,9905,9906],{"class":253},"        \u003C!-- Reference image (left) -->",[229,9908,917],{"class":916},[229,9910,9671],{"class":253},[229,9912,929],{"class":916},[229,9914,9915],{"class":253},"wi-img-col",[229,9917,929],{"class":916},[229,9919,5361],{"class":253},[229,9921,917],{"class":916},[229,9923,7499],{"class":253},[229,9925,929],{"class":916},[229,9927,9928],{"class":253},"wi-image-wrap",[229,9930,929],{"class":916},[229,9932,5361],{"class":253},[229,9934,917],{"class":916},[229,9936,9937],{"class":253},"            \u003Cimg",[229,9939,917],{"class":916},[229,9941,9942],{"class":253},"              :src=",[229,9944,929],{"class":916},[229,9946,9947],{"class":253},"stepImage",[229,9949,988],{"class":916},[229,9951,9952],{"class":253},"              :alt=",[229,9954,929],{"class":916},[229,9956,9957],{"class":253},"currentStep?.title",[229,9959,988],{"class":916},[229,9961,9962],{"class":253},"              class=",[229,9964,929],{"class":916},[229,9966,9967],{"class":253},"wi-image",[229,9969,988],{"class":916},[229,9971,9972],{"class":253},"              @error=",[229,9974,929],{"class":916},[229,9976,9977],{"class":253},"onImageError",[229,9979,988],{"class":916},[229,9981,9982],{"class":253},"            \u002F>",[229,9984,917],{"class":916},[229,9986,7542],{"class":253},[229,9988,917],{"class":916},[229,9990,9752],{"class":253},[229,9992,923],{"class":916},[229,9994,9995],{"class":253},"        \u003C!-- Instruction + checklist (right) -->",[229,9997,917],{"class":916},[229,9999,9671],{"class":253},[229,10001,929],{"class":916},[229,10003,10004],{"class":253},"wi-text-col",[229,10006,929],{"class":916},[229,10008,5361],{"class":253},[229,10010,917],{"class":916},[229,10012,7499],{"class":253},[229,10014,929],{"class":916},[229,10016,7504],{"class":253},[229,10018,929],{"class":916},[229,10020,5361],{"class":253},[229,10022,917],{"class":916},[229,10024,7513],{"class":253},[229,10026,929],{"class":916},[229,10028,7592],{"class":253},[229,10030,929],{"class":916},[229,10032,7523],{"class":253},[229,10034,929],{"class":916},[229,10036,10037],{"class":253},"20",[229,10039,929],{"class":916},[229,10041,7409],{"class":253},[229,10043,917],{"class":916},[229,10045,10046],{"class":253},"            \u003Cspan>INSTRUCTION\u003C\u002Fspan>",[229,10048,917],{"class":916},[229,10050,7542],{"class":253},[229,10052,917],{"class":916},[229,10054,7499],{"class":253},[229,10056,929],{"class":916},[229,10058,10059],{"class":253},"wi-step-title",[229,10061,929],{"class":916},[229,10063,10064],{"class":253},">{{ currentStep?.title ?? '—' }}\u003C\u002Fdiv>",[229,10066,917],{"class":916},[229,10068,10069],{"class":253},"          \u003Cp class=",[229,10071,929],{"class":916},[229,10073,10074],{"class":253},"wi-step-instruction",[229,10076,929],{"class":916},[229,10078,10079],{"class":253},">{{ currentStep?.instruction ?? '' }}\u003C\u002Fp>",[229,10081,923],{"class":916},[229,10083,7499],{"class":253},[229,10085,929],{"class":916},[229,10087,10088],{"class":253},"wi-card-head wi-checklist-head",[229,10090,929],{"class":916},[229,10092,5361],{"class":253},[229,10094,917],{"class":916},[229,10096,7513],{"class":253},[229,10098,929],{"class":916},[229,10100,10101],{"class":253},"mdi-format-list-checks",[229,10103,929],{"class":916},[229,10105,7523],{"class":253},[229,10107,929],{"class":916},[229,10109,10037],{"class":253},[229,10111,929],{"class":916},[229,10113,7409],{"class":253},[229,10115,917],{"class":916},[229,10117,10118],{"class":253},"            \u003Cspan>CHECKLIST\u003C\u002Fspan>",[229,10120,917],{"class":916},[229,10122,7542],{"class":253},[229,10124,917],{"class":916},[229,10126,7499],{"class":253},[229,10128,929],{"class":916},[229,10130,10131],{"class":253},"wi-checklist",[229,10133,929],{"class":916},[229,10135,5361],{"class":253},[229,10137,917],{"class":916},[229,10139,10140],{"class":253},"            \u003Clabel",[229,10142,917],{"class":916},[229,10144,10145],{"class":253},"              v-for=",[229,10147,929],{"class":916},[229,10149,10150],{"class":253},"(item, i) in (currentStep?.checklist ?? [])",[229,10152,988],{"class":916},[229,10154,10155],{"class":253},"              :key=",[229,10157,929],{"class":916},[229,10159,10160],{"class":253},"i",[229,10162,988],{"class":916},[229,10164,9962],{"class":253},[229,10166,929],{"class":916},[229,10168,10169],{"class":253},"wi-check-row",[229,10171,988],{"class":916},[229,10173,10174],{"class":253},"              :class=",[229,10176,929],{"class":916},[229,10178,10179],{"class":253},"{ 'wi-check-row-done': checkedState[i] }",[229,10181,988],{"class":916},[229,10183,10184],{"class":253},"            >",[229,10186,917],{"class":916},[229,10188,10189],{"class":253},"              \u003Cv-checkbox-btn",[229,10191,917],{"class":916},[229,10193,10194],{"class":253},"                :model-value=",[229,10196,929],{"class":916},[229,10198,10199],{"class":253},"checkedState[i]",[229,10201,988],{"class":916},[229,10203,10204],{"class":253},"                color=",[229,10206,929],{"class":916},[229,10208,8130],{"class":253},[229,10210,988],{"class":916},[229,10212,10213],{"class":253},"                density=",[229,10215,929],{"class":916},[229,10217,10218],{"class":253},"comfortable",[229,10220,988],{"class":916},[229,10222,10223],{"class":253},"                @update:model-value=",[229,10225,929],{"class":916},[229,10227,10228],{"class":253},"toggleCheck(i)",[229,10230,988],{"class":916},[229,10232,10233],{"class":253},"              >\u003C\u002Fv-checkbox-btn>",[229,10235,917],{"class":916},[229,10237,10238],{"class":253},"              \u003Cspan>{{ item }}\u003C\u002Fspan>",[229,10240,917],{"class":916},[229,10242,10243],{"class":253},"            \u003C\u002Flabel>",[229,10245,917],{"class":916},[229,10247,7542],{"class":253},[229,10249,917],{"class":916},[229,10251,9752],{"class":253},[229,10253,917],{"class":916},[229,10255,7337],{"class":253},[229,10257,917],{"class":916},[229,10259,9870],{"class":253},[229,10261,923],{"class":916},[229,10263,10264],{"class":253},"    \u003C!-- Controls -->",[229,10266,917],{"class":916},[229,10268,7433],{"class":253},[229,10270,929],{"class":916},[229,10272,10273],{"class":253},"wi-controls",[229,10275,929],{"class":916},[229,10277,5361],{"class":253},[229,10279,917],{"class":916},[229,10281,7452],{"class":253},[229,10283,929],{"class":916},[229,10285,7457],{"class":253},[229,10287,929],{"class":916},[229,10289,7902],{"class":253},[229,10291,929],{"class":916},[229,10293,10294],{"class":253},"3",[229,10296,929],{"class":916},[229,10298,7385],{"class":253},[229,10300,929],{"class":916},[229,10302,10303],{"class":253},"wi-ctrl-col",[229,10305,929],{"class":916},[229,10307,5361],{"class":253},[229,10309,917],{"class":916},[229,10311,10312],{"class":253},"        \u003Cv-btn block size=",[229,10314,929],{"class":916},[229,10316,8120],{"class":253},[229,10318,929],{"class":916},[229,10320,7365],{"class":253},[229,10322,929],{"class":916},[229,10324,10325],{"class":253},"outlined",[229,10327,929],{"class":916},[229,10329,8125],{"class":253},[229,10331,929],{"class":916},[229,10333,10334],{"class":253},"blue-grey-darken-1",[229,10336,929],{"class":916},[229,10338,7385],{"class":253},[229,10340,929],{"class":916},[229,10342,10343],{"class":253},"wi-nav-btn",[229,10345,988],{"class":916},[229,10347,10348],{"class":253},"          :disabled=",[229,10350,929],{"class":916},[229,10352,10353],{"class":253},"currentIndex === 0",[229,10355,929],{"class":916},[229,10357,10358],{"class":253}," @click=",[229,10360,929],{"class":916},[229,10362,10363],{"class":253},"prevStep",[229,10365,929],{"class":916},[229,10367,5361],{"class":253},[229,10369,917],{"class":916},[229,10371,7399],{"class":253},[229,10373,929],{"class":916},[229,10375,10376],{"class":253},"mdi-chevron-left",[229,10378,929],{"class":916},[229,10380,7523],{"class":253},[229,10382,929],{"class":916},[229,10384,10385],{"class":253},"30",[229,10387,929],{"class":916},[229,10389,7409],{"class":253},[229,10391,917],{"class":916},[229,10393,10394],{"class":253},"          PREVIOUS",[229,10396,917],{"class":916},[229,10398,10399],{"class":253},"        \u003C\u002Fv-btn>",[229,10401,917],{"class":916},[229,10403,7741],{"class":253},[229,10405,923],{"class":916},[229,10407,7452],{"class":253},[229,10409,929],{"class":916},[229,10411,7457],{"class":253},[229,10413,929],{"class":916},[229,10415,7902],{"class":253},[229,10417,929],{"class":916},[229,10419,10294],{"class":253},[229,10421,929],{"class":916},[229,10423,7385],{"class":253},[229,10425,929],{"class":916},[229,10427,10303],{"class":253},[229,10429,929],{"class":916},[229,10431,5361],{"class":253},[229,10433,917],{"class":916},[229,10435,10312],{"class":253},[229,10437,929],{"class":916},[229,10439,8120],{"class":253},[229,10441,929],{"class":916},[229,10443,7365],{"class":253},[229,10445,929],{"class":916},[229,10447,7370],{"class":253},[229,10449,929],{"class":916},[229,10451,8125],{"class":253},[229,10453,929],{"class":916},[229,10455,10456],{"class":253},"red-darken-1",[229,10458,929],{"class":916},[229,10460,7385],{"class":253},[229,10462,929],{"class":916},[229,10464,10343],{"class":253},[229,10466,929],{"class":916},[229,10468,10358],{"class":253},[229,10470,929],{"class":916},[229,10472,10473],{"class":253},"reportDefect",[229,10475,929],{"class":916},[229,10477,5361],{"class":253},[229,10479,917],{"class":916},[229,10481,7399],{"class":253},[229,10483,929],{"class":916},[229,10485,10486],{"class":253},"mdi-alert-octagon-outline",[229,10488,929],{"class":916},[229,10490,7523],{"class":253},[229,10492,929],{"class":916},[229,10494,10495],{"class":253},"28",[229,10497,929],{"class":916},[229,10499,7409],{"class":253},[229,10501,917],{"class":916},[229,10503,10504],{"class":253},"          REPORT ISSUE",[229,10506,917],{"class":916},[229,10508,10399],{"class":253},[229,10510,917],{"class":916},[229,10512,7741],{"class":253},[229,10514,923],{"class":916},[229,10516,7452],{"class":253},[229,10518,929],{"class":916},[229,10520,7457],{"class":253},[229,10522,929],{"class":916},[229,10524,7902],{"class":253},[229,10526,929],{"class":916},[229,10528,10529],{"class":253},"6",[229,10531,929],{"class":916},[229,10533,7385],{"class":253},[229,10535,929],{"class":916},[229,10537,10303],{"class":253},[229,10539,929],{"class":916},[229,10541,5361],{"class":253},[229,10543,917],{"class":916},[229,10545,10312],{"class":253},[229,10547,929],{"class":916},[229,10549,8120],{"class":253},[229,10551,929],{"class":916},[229,10553,7365],{"class":253},[229,10555,929],{"class":916},[229,10557,7370],{"class":253},[229,10559,929],{"class":916},[229,10561,10562],{"class":253}," :color=",[229,10564,929],{"class":916},[229,10566,10567],{"class":253},"isLastStep ? 'green-darken-2' : 'green-darken-1'",[229,10569,988],{"class":916},[229,10571,10572],{"class":253},"          class=",[229,10574,929],{"class":916},[229,10576,10577],{"class":253},"wi-nav-btn wi-next-btn",[229,10579,929],{"class":916},[229,10581,8144],{"class":253},[229,10583,929],{"class":916},[229,10585,10586],{"class":253},"!allChecked",[229,10588,929],{"class":916},[229,10590,10358],{"class":253},[229,10592,929],{"class":916},[229,10594,10595],{"class":253},"nextStep",[229,10597,929],{"class":916},[229,10599,5361],{"class":253},[229,10601,917],{"class":916},[229,10603,10604],{"class":253},"          \u003Cv-icon start :icon=",[229,10606,929],{"class":916},[229,10608,10609],{"class":253},"isLastStep ? 'mdi-check-circle' : 'mdi-chevron-right'",[229,10611,929],{"class":916},[229,10613,7523],{"class":253},[229,10615,929],{"class":916},[229,10617,10385],{"class":253},[229,10619,929],{"class":916},[229,10621,7409],{"class":253},[229,10623,917],{"class":916},[229,10625,10626],{"class":253},"          {{ isLastStep ? 'COMPLETE OPERATION' : 'NEXT STEP' }}",[229,10628,917],{"class":916},[229,10630,10399],{"class":253},[229,10632,917],{"class":916},[229,10634,7741],{"class":253},[229,10636,917],{"class":916},[229,10638,8105],{"class":253},[229,10640,923],{"class":916},[229,10642,10643],{"class":253},"    \u003Cdiv v-if=",[229,10645,929],{"class":916},[229,10647,10586],{"class":253},[229,10649,929],{"class":916},[229,10651,7385],{"class":253},[229,10653,929],{"class":916},[229,10655,10656],{"class":253},"wi-hint",[229,10658,929],{"class":916},[229,10660,5361],{"class":253},[229,10662,917],{"class":916},[229,10664,10665],{"class":253},"      \u003Cv-icon icon=",[229,10667,929],{"class":916},[229,10669,10670],{"class":253},"mdi-information-outline",[229,10672,929],{"class":916},[229,10674,7523],{"class":253},[229,10676,929],{"class":916},[229,10678,8055],{"class":253},[229,10680,929],{"class":916},[229,10682,7409],{"class":253},[229,10684,917],{"class":916},[229,10686,10687],{"class":253},"      Complete all checklist items to continue.",[229,10689,917],{"class":916},[229,10691,7428],{"class":253},[229,10693,917],{"class":916},[229,10695,8201],{"class":253},[229,10697,917],{"class":916},[229,10699,8206],{"class":253},[229,10701,923],{"class":916},[229,10703,8211],{"class":253},[229,10705,917],{"class":916},[229,10707,8216],{"class":253},[229,10709,917],{"class":916},[229,10711,10712],{"class":253},"  data () {",[229,10714,917],{"class":916},[229,10716,10717],{"class":253},"    return {",[229,10719,917],{"class":916},[229,10721,10722],{"class":253},"      currentIndex: 0,",[229,10724,917],{"class":916},[229,10726,10727],{"class":253},"      checked: {},",[229,10729,917],{"class":916},[229,10731,10732],{"class":253},"      assetBase: '\u002Fassets\u002F',",[229,10734,917],{"class":916},[229,10736,10737],{"class":253},"      placeholder: 'https:\u002F\u002Fplacehold.co\u002F800x600\u002Feef2f7\u002F475569?text=Step+Reference',",[229,10739,917],{"class":916},[229,10741,10742],{"class":253},"      instruction: null",[229,10744,917],{"class":916},[229,10746,3696],{"class":253},[229,10748,917],{"class":916},[229,10750,10751],{"class":253},"  },",[229,10753,917],{"class":916},[229,10755,8221],{"class":253},[229,10757,917],{"class":916},[229,10759,10760],{"class":253},"    payload () {",[229,10762,917],{"class":916},[229,10764,10765],{"class":253},"      return this.instruction ?? {}",[229,10767,917],{"class":916},[229,10769,3473],{"class":253},[229,10771,917],{"class":916},[229,10773,10774],{"class":253},"    steps () {",[229,10776,917],{"class":916},[229,10778,10779],{"class":253},"      return this.instruction?.steps ?? []",[229,10781,917],{"class":916},[229,10783,3473],{"class":253},[229,10785,917],{"class":916},[229,10787,10788],{"class":253},"    currentStep () {",[229,10790,917],{"class":916},[229,10792,10793],{"class":253},"      return this.steps[this.currentIndex] ?? null",[229,10795,917],{"class":916},[229,10797,3473],{"class":253},[229,10799,917],{"class":916},[229,10801,10802],{"class":253},"    isLastStep () {",[229,10804,917],{"class":916},[229,10806,10807],{"class":253},"      return this.currentIndex === this.steps.length - 1",[229,10809,917],{"class":916},[229,10811,3473],{"class":253},[229,10813,917],{"class":916},[229,10815,10816],{"class":253},"    progressPercent () {",[229,10818,917],{"class":916},[229,10820,10821],{"class":253},"      if (!this.steps.length) return 0",[229,10823,917],{"class":916},[229,10825,10826],{"class":253},"      return Math.round((this.currentIndex \u002F this.steps.length) * 100)",[229,10828,917],{"class":916},[229,10830,3473],{"class":253},[229,10832,917],{"class":916},[229,10834,10835],{"class":253},"    checkedState () {",[229,10837,917],{"class":916},[229,10839,10840],{"class":253},"      return this.checked[this.currentIndex] ?? []",[229,10842,917],{"class":916},[229,10844,3473],{"class":253},[229,10846,917],{"class":916},[229,10848,10849],{"class":253},"    allChecked () {",[229,10851,917],{"class":916},[229,10853,10854],{"class":253},"      const list = this.currentStep?.checklist ?? []",[229,10856,917],{"class":916},[229,10858,10859],{"class":253},"      if (!list.length) return true",[229,10861,917],{"class":916},[229,10863,10864],{"class":253},"      const state = this.checkedState",[229,10866,917],{"class":916},[229,10868,10869],{"class":253},"      return list.every((_, i) => state[i])",[229,10871,917],{"class":916},[229,10873,3473],{"class":253},[229,10875,917],{"class":916},[229,10877,10878],{"class":253},"    stepImage () {",[229,10880,917],{"class":916},[229,10882,10883],{"class":253},"      return this.resolveImage(this.currentStep?.image)",[229,10885,917],{"class":916},[229,10887,3696],{"class":253},[229,10889,917],{"class":916},[229,10891,10751],{"class":253},[229,10893,917],{"class":916},[229,10895,10896],{"class":253},"  methods: {",[229,10898,917],{"class":916},[229,10900,10901],{"class":253},"    resolveImage (img) {",[229,10903,917],{"class":916},[229,10905,10906],{"class":253},"      if (!img) return this.placeholder",[229,10908,917],{"class":916},[229,10910,10911],{"class":253},"      if (\u002F^https?:",[229,10913,10914],{"class":916},"\\\\",[229,10916,10917],{"class":253},"\u002F",[229,10919,10914],{"class":916},[229,10921,10922],{"class":253},"\u002F\u002F.test(img) || img.startsWith('\u002F')) return img",[229,10924,917],{"class":916},[229,10926,10927],{"class":253},"      return this.assetBase + img",[229,10929,917],{"class":916},[229,10931,3473],{"class":253},[229,10933,917],{"class":916},[229,10935,10936],{"class":253},"    preloadImages () {",[229,10938,917],{"class":916},[229,10940,10941],{"class":253},"      for (const step of this.steps) {",[229,10943,917],{"class":916},[229,10945,10946],{"class":253},"        const url = this.resolveImage(step?.image)",[229,10948,917],{"class":916},[229,10950,10951],{"class":253},"        if (url && url !== this.placeholder) {",[229,10953,917],{"class":916},[229,10955,10956],{"class":253},"          const im = new Image()",[229,10958,917],{"class":916},[229,10960,10961],{"class":253},"          im.src = url",[229,10963,917],{"class":916},[229,10965,4057],{"class":253},[229,10967,917],{"class":916},[229,10969,10970],{"class":253},"      }",[229,10972,917],{"class":916},[229,10974,3473],{"class":253},[229,10976,917],{"class":916},[229,10978,10979],{"class":253},"    saveStep () {",[229,10981,917],{"class":916},[229,10983,10984],{"class":253},"      this.send({",[229,10986,917],{"class":916},[229,10988,10989],{"class":253},"        payload: {",[229,10991,917],{"class":916},[229,10993,10994],{"class":253},"          action: 'save_step',",[229,10996,917],{"class":916},[229,10998,10999],{"class":253},"          stepIndex: this.currentIndex,",[229,11001,917],{"class":916},[229,11003,11004],{"class":253},"          stepName: this.currentStep?.title ?? null,",[229,11006,917],{"class":916},[229,11008,11009],{"class":253},"          stepId: this.currentStep?.stepId ?? null",[229,11011,917],{"class":916},[229,11013,4057],{"class":253},[229,11015,917],{"class":916},[229,11017,11018],{"class":253},"      })",[229,11020,917],{"class":916},[229,11022,3473],{"class":253},[229,11024,917],{"class":916},[229,11026,11027],{"class":253},"    toggleCheck (i) {",[229,11029,917],{"class":916},[229,11031,11032],{"class":253},"      const arr = (this.checked[this.currentIndex] ?? []).slice()",[229,11034,917],{"class":916},[229,11036,11037],{"class":253},"      arr[i] = !arr[i]",[229,11039,917],{"class":916},[229,11041,11042],{"class":253},"      this.checked = { ...this.checked, [this.currentIndex]: arr }",[229,11044,917],{"class":916},[229,11046,3473],{"class":253},[229,11048,917],{"class":916},[229,11050,11051],{"class":253},"    onImageError (e) {",[229,11053,917],{"class":916},[229,11055,11056],{"class":253},"      if (e?.target && e.target.src !== this.placeholder) {",[229,11058,917],{"class":916},[229,11060,11061],{"class":253},"        e.target.src = this.placeholder",[229,11063,917],{"class":916},[229,11065,10970],{"class":253},[229,11067,917],{"class":916},[229,11069,3473],{"class":253},[229,11071,917],{"class":916},[229,11073,11074],{"class":253},"    goToStep (i) {",[229,11076,917],{"class":916},[229,11078,11079],{"class":253},"      const max = this.steps.length - 1",[229,11081,917],{"class":916},[229,11083,11084],{"class":253},"      this.currentIndex = Math.min(Math.max(i, 0), Math.max(max, 0))",[229,11086,917],{"class":916},[229,11088,11089],{"class":253},"      this.saveStep()",[229,11091,917],{"class":916},[229,11093,3473],{"class":253},[229,11095,917],{"class":916},[229,11097,11098],{"class":253},"    nextStep () {",[229,11100,917],{"class":916},[229,11102,11103],{"class":253},"      if (this.isLastStep) {",[229,11105,917],{"class":916},[229,11107,11108],{"class":253},"        this.send({ payload: { action: 'complete_operation', stepIndex: this.currentIndex } })",[229,11110,917],{"class":916},[229,11112,5446],{"class":253},[229,11114,917],{"class":916},[229,11116,10970],{"class":253},[229,11118,917],{"class":916},[229,11120,11121],{"class":253},"      this.goToStep(this.currentIndex + 1)",[229,11123,917],{"class":916},[229,11125,3473],{"class":253},[229,11127,917],{"class":916},[229,11129,11130],{"class":253},"    prevStep () {",[229,11132,917],{"class":916},[229,11134,11135],{"class":253},"      if (this.currentIndex === 0) return",[229,11137,917],{"class":916},[229,11139,11140],{"class":253},"      this.goToStep(this.currentIndex - 1)",[229,11142,917],{"class":916},[229,11144,3473],{"class":253},[229,11146,917],{"class":916},[229,11148,11149],{"class":253},"    reportDefect () {",[229,11151,917],{"class":916},[229,11153,10984],{"class":253},[229,11155,917],{"class":916},[229,11157,10989],{"class":253},[229,11159,917],{"class":916},[229,11161,11162],{"class":253},"          action: 'Report Issue',",[229,11164,917],{"class":916},[229,11166,4057],{"class":253},[229,11168,917],{"class":916},[229,11170,11018],{"class":253},[229,11172,917],{"class":916},[229,11174,3696],{"class":253},[229,11176,917],{"class":916},[229,11178,10751],{"class":253},[229,11180,917],{"class":916},[229,11182,11183],{"class":253},"  watch: {",[229,11185,917],{"class":916},[229,11187,11188],{"class":253},"    msg: {",[229,11190,917],{"class":916},[229,11192,11193],{"class":253},"      immediate: true,",[229,11195,917],{"class":916},[229,11197,11198],{"class":253},"      handler (m) {",[229,11200,917],{"class":916},[229,11202,11203],{"class":253},"        const pl = m?.payload",[229,11205,917],{"class":916},[229,11207,11208],{"class":253},"        if (!pl) return",[229,11210,917],{"class":916},[229,11212,11213],{"class":253},"        if (Array.isArray(pl.steps)) {",[229,11215,917],{"class":916},[229,11217,11218],{"class":253},"          \u002F\u002F Instruction-set data: cache it so later messages can't wipe it.",[229,11220,917],{"class":916},[229,11222,11223],{"class":253},"          this.instruction = pl",[229,11225,917],{"class":916},[229,11227,11228],{"class":253},"          \u002F\u002F Preload every step image so navigation is instant.",[229,11230,917],{"class":916},[229,11232,11233],{"class":253},"          this.$nextTick(() => this.preloadImages())",[229,11235,917],{"class":916},[229,11237,11238],{"class":253},"        } else if (typeof pl.stepIndex === 'number') {",[229,11240,917],{"class":916},[229,11242,11243],{"class":253},"          \u002F\u002F Resume reply from the tracker: jump to the saved step.",[229,11245,917],{"class":916},[229,11247,11248],{"class":253},"          this.currentIndex = Math.min(",[229,11250,917],{"class":916},[229,11252,11253],{"class":253},"            Math.max(pl.stepIndex, 0),",[229,11255,917],{"class":916},[229,11257,11258],{"class":253},"            Math.max(this.steps.length - 1, 0)",[229,11260,917],{"class":916},[229,11262,11263],{"class":253},"          )",[229,11265,917],{"class":916},[229,11267,4057],{"class":253},[229,11269,917],{"class":916},[229,11271,10970],{"class":253},[229,11273,917],{"class":916},[229,11275,3696],{"class":253},[229,11277,917],{"class":916},[229,11279,10751],{"class":253},[229,11281,917],{"class":916},[229,11283,11284],{"class":253},"  mounted () {",[229,11286,917],{"class":916},[229,11288,11289],{"class":253},"    \u002F\u002F Ask the tracker which step this work order was left on.",[229,11291,917],{"class":916},[229,11293,11294],{"class":253},"    this.send({ payload: { action: 'load_step' } })",[229,11296,917],{"class":916},[229,11298,8255],{"class":253},[229,11300,917],{"class":916},[229,11302,1576],{"class":253},[229,11304,917],{"class":916},[229,11306,8264],{"class":253},[229,11308,923],{"class":916},[229,11310,8269],{"class":253},[229,11312,917],{"class":916},[229,11314,8274],{"class":253},[229,11316,917],{"class":916},[229,11318,8279],{"class":253},[229,11320,917],{"class":916},[229,11322,8284],{"class":253},[229,11324,917],{"class":916},[229,11326,11327],{"class":253},"    padding: 2px;",[229,11329,917],{"class":916},[229,11331,8255],{"class":253},[229,11333,923],{"class":916},[229,11335,11336],{"class":253},"  \u002F* Header *\u002F",[229,11338,917],{"class":916},[229,11340,8298],{"class":253},[229,11342,917],{"class":916},[229,11344,8303],{"class":253},[229,11346,917],{"class":916},[229,11348,8308],{"class":253},[229,11350,917],{"class":916},[229,11352,8313],{"class":253},[229,11354,917],{"class":916},[229,11356,8318],{"class":253},[229,11358,917],{"class":916},[229,11360,8323],{"class":253},[229,11362,917],{"class":916},[229,11364,8328],{"class":253},[229,11366,917],{"class":916},[229,11368,8333],{"class":253},[229,11370,917],{"class":916},[229,11372,8338],{"class":253},[229,11374,917],{"class":916},[229,11376,8343],{"class":253},[229,11378,917],{"class":916},[229,11380,11381],{"class":253},"    padding: 10px 16px;",[229,11383,917],{"class":916},[229,11385,11386],{"class":253},"    margin-bottom: 10px;",[229,11388,917],{"class":916},[229,11390,8255],{"class":253},[229,11392,923],{"class":916},[229,11394,8362],{"class":253},[229,11396,917],{"class":916},[229,11398,8303],{"class":253},[229,11400,917],{"class":916},[229,11402,8371],{"class":253},[229,11404,917],{"class":916},[229,11406,11407],{"class":253},"    line-height: 1.15;",[229,11409,917],{"class":916},[229,11411,8255],{"class":253},[229,11413,923],{"class":916},[229,11415,11416],{"class":253},"  .wi-op-label {",[229,11418,917],{"class":916},[229,11420,8759],{"class":253},[229,11422,917],{"class":916},[229,11424,8395],{"class":253},[229,11426,917],{"class":916},[229,11428,8400],{"class":253},[229,11430,917],{"class":916},[229,11432,8405],{"class":253},[229,11434,917],{"class":916},[229,11436,8255],{"class":253},[229,11438,923],{"class":916},[229,11440,11441],{"class":253},"  .wi-op-name {",[229,11443,917],{"class":916},[229,11445,11446],{"class":253},"    font-size: 21px;",[229,11448,917],{"class":916},[229,11450,8424],{"class":253},[229,11452,917],{"class":916},[229,11454,8429],{"class":253},[229,11456,917],{"class":916},[229,11458,8255],{"class":253},[229,11460,923],{"class":916},[229,11462,11463],{"class":253},"  .wi-op-sub {",[229,11465,917],{"class":916},[229,11467,8390],{"class":253},[229,11469,917],{"class":916},[229,11471,11472],{"class":253},"    color: #94a3b8;",[229,11474,917],{"class":916},[229,11476,8844],{"class":253},[229,11478,917],{"class":916},[229,11480,11481],{"class":253},"    margin-top: 2px;",[229,11483,917],{"class":916},[229,11485,8255],{"class":253},[229,11487,923],{"class":916},[229,11489,11490],{"class":253},"  .wi-timer {",[229,11492,917],{"class":916},[229,11494,8303],{"class":253},[229,11496,917],{"class":916},[229,11498,8308],{"class":253},[229,11500,917],{"class":916},[229,11502,8452],{"class":253},[229,11504,917],{"class":916},[229,11506,11507],{"class":253},"    padding: 8px 14px;",[229,11509,917],{"class":916},[229,11511,8343],{"class":253},[229,11513,917],{"class":916},[229,11515,8713],{"class":253},[229,11517,917],{"class":916},[229,11519,8429],{"class":253},[229,11521,917],{"class":916},[229,11523,8255],{"class":253},[229,11525,923],{"class":916},[229,11527,11528],{"class":253},"  .wi-timer-text {",[229,11530,917],{"class":916},[229,11532,8303],{"class":253},[229,11534,917],{"class":916},[229,11536,8371],{"class":253},[229,11538,917],{"class":916},[229,11540,8376],{"class":253},[229,11542,917],{"class":916},[229,11544,8255],{"class":253},[229,11546,923],{"class":916},[229,11548,11549],{"class":253},"  .wi-timer-label {",[229,11551,917],{"class":916},[229,11553,11554],{"class":253},"    font-size: 10px;",[229,11556,917],{"class":916},[229,11558,8764],{"class":253},[229,11560,917],{"class":916},[229,11562,8405],{"class":253},[229,11564,917],{"class":916},[229,11566,11567],{"class":253},"    opacity: 0.75;",[229,11569,917],{"class":916},[229,11571,8255],{"class":253},[229,11573,923],{"class":916},[229,11575,11576],{"class":253},"  .wi-timer-value {",[229,11578,917],{"class":916},[229,11580,8933],{"class":253},[229,11582,917],{"class":916},[229,11584,8424],{"class":253},[229,11586,917],{"class":916},[229,11588,8434],{"class":253},[229,11590,917],{"class":916},[229,11592,8255],{"class":253},[229,11594,923],{"class":916},[229,11596,11597],{"class":253},"  \u002F* Cards *\u002F",[229,11599,917],{"class":916},[229,11601,8512],{"class":253},[229,11603,917],{"class":916},[229,11605,8517],{"class":253},[229,11607,917],{"class":916},[229,11609,8522],{"class":253},[229,11611,917],{"class":916},[229,11613,8527],{"class":253},[229,11615,917],{"class":916},[229,11617,11618],{"class":253},"    padding: 14px 18px !important;",[229,11620,917],{"class":916},[229,11622,8537],{"class":253},[229,11624,917],{"class":916},[229,11626,11627],{"class":253},"    box-sizing: border-box;",[229,11629,917],{"class":916},[229,11631,8255],{"class":253},[229,11633,923],{"class":916},[229,11635,8574],{"class":253},[229,11637,917],{"class":916},[229,11639,8303],{"class":253},[229,11641,917],{"class":916},[229,11643,8308],{"class":253},[229,11645,917],{"class":916},[229,11647,8587],{"class":253},[229,11649,917],{"class":916},[229,11651,8592],{"class":253},[229,11653,917],{"class":916},[229,11655,8395],{"class":253},[229,11657,917],{"class":916},[229,11659,8424],{"class":253},[229,11661,917],{"class":916},[229,11663,8400],{"class":253},[229,11665,917],{"class":916},[229,11667,11668],{"class":253},"    margin-bottom: 8px;",[229,11670,917],{"class":916},[229,11672,8255],{"class":253},[229,11674,923],{"class":916},[229,11676,11677],{"class":253},"  \u002F* Stepper (compact) *\u002F",[229,11679,917],{"class":916},[229,11681,11682],{"class":253},"  .wi-stepper-card {",[229,11684,917],{"class":916},[229,11686,11386],{"class":253},[229,11688,917],{"class":916},[229,11690,11381],{"class":253},[229,11692,917],{"class":916},[229,11694,8255],{"class":253},[229,11696,923],{"class":916},[229,11698,11699],{"class":253},"  .wi-stepper-head {",[229,11701,917],{"class":916},[229,11703,8303],{"class":253},[229,11705,917],{"class":916},[229,11707,8313],{"class":253},[229,11709,917],{"class":916},[229,11711,11712],{"class":253},"    align-items: baseline;",[229,11714,917],{"class":916},[229,11716,11668],{"class":253},[229,11718,917],{"class":916},[229,11720,8255],{"class":253},[229,11722,923],{"class":916},[229,11724,11725],{"class":253},"  .wi-step-count {",[229,11727,917],{"class":916},[229,11729,11730],{"class":253},"    font-size: 14px;",[229,11732,917],{"class":916},[229,11734,8424],{"class":253},[229,11736,917],{"class":916},[229,11738,8977],{"class":253},[229,11740,917],{"class":916},[229,11742,8429],{"class":253},[229,11744,917],{"class":916},[229,11746,8255],{"class":253},[229,11748,923],{"class":916},[229,11750,11751],{"class":253},"  .wi-step-percent {",[229,11753,917],{"class":916},[229,11755,8390],{"class":253},[229,11757,917],{"class":916},[229,11759,8405],{"class":253},[229,11761,917],{"class":916},[229,11763,8977],{"class":253},[229,11765,917],{"class":916},[229,11767,8400],{"class":253},[229,11769,917],{"class":916},[229,11771,8255],{"class":253},[229,11773,923],{"class":916},[229,11775,11776],{"class":253},"  \u002F* Instruction card *\u002F",[229,11778,917],{"class":916},[229,11780,11781],{"class":253},"  .wi-card-instruction {",[229,11783,917],{"class":916},[229,11785,11786],{"class":253},"    border-left: 5px solid #5e35b1 !important;",[229,11788,917],{"class":916},[229,11790,11791],{"class":253},"    padding: 16px 20px !important;",[229,11793,917],{"class":916},[229,11795,11627],{"class":253},[229,11797,917],{"class":916},[229,11799,8255],{"class":253},[229,11801,923],{"class":916},[229,11803,11804],{"class":253},"  \u002F* Desktop: keep the instruction card a consistent size across every step,",[229,11806,917],{"class":916},[229,11808,11809],{"class":253},"     so navigating between steps does not make the layout jump. The card",[229,11811,917],{"class":916},[229,11813,11814],{"class":253},"     still grows taller when the reference image needs more room. *\u002F",[229,11816,917],{"class":916},[229,11818,11819],{"class":253},"  @media (min-width: 701px) {",[229,11821,917],{"class":916},[229,11823,11824],{"class":253},"    .wi-card-instruction {",[229,11826,917],{"class":916},[229,11828,11829],{"class":253},"      min-height: 360px;",[229,11831,917],{"class":916},[229,11833,3696],{"class":253},[229,11835,917],{"class":916},[229,11837,8255],{"class":253},[229,11839,923],{"class":916},[229,11841,11842],{"class":253},"  .wi-step-title {",[229,11844,917],{"class":916},[229,11846,11847],{"class":253},"    font-size: 19px;",[229,11849,917],{"class":916},[229,11851,8424],{"class":253},[229,11853,917],{"class":916},[229,11855,8429],{"class":253},[229,11857,917],{"class":916},[229,11859,8609],{"class":253},[229,11861,917],{"class":916},[229,11863,11407],{"class":253},[229,11865,917],{"class":916},[229,11867,8255],{"class":253},[229,11869,923],{"class":916},[229,11871,11872],{"class":253},"  .wi-step-instruction {",[229,11874,917],{"class":916},[229,11876,11877],{"class":253},"    font-size: 15px;",[229,11879,917],{"class":916},[229,11881,11882],{"class":253},"    line-height: 1.55;",[229,11884,917],{"class":916},[229,11886,11887],{"class":253},"    color: #334155;",[229,11889,917],{"class":916},[229,11891,11892],{"class":253},"    margin: 0 0 16px;",[229,11894,917],{"class":916},[229,11896,8255],{"class":253},[229,11898,923],{"class":916},[229,11900,11901],{"class":253},"  .wi-checklist-head {",[229,11903,917],{"class":916},[229,11905,11906],{"class":253},"    margin-top: 6px;",[229,11908,917],{"class":916},[229,11910,11911],{"class":253},"    padding-top: 12px;",[229,11913,917],{"class":916},[229,11915,11916],{"class":253},"    border-top: 1px solid #edf2f7;",[229,11918,917],{"class":916},[229,11920,8255],{"class":253},[229,11922,923],{"class":916},[229,11924,11925],{"class":253},"  .wi-checklist {",[229,11927,917],{"class":916},[229,11929,8303],{"class":253},[229,11931,917],{"class":916},[229,11933,8371],{"class":253},[229,11935,917],{"class":916},[229,11937,11938],{"class":253},"    gap: 4px;",[229,11940,917],{"class":916},[229,11942,8255],{"class":253},[229,11944,923],{"class":916},[229,11946,11947],{"class":253},"  .wi-check-row {",[229,11949,917],{"class":916},[229,11951,8303],{"class":253},[229,11953,917],{"class":916},[229,11955,8308],{"class":253},[229,11957,917],{"class":916},[229,11959,11960],{"class":253},"    justify-content: flex-start;",[229,11962,917],{"class":916},[229,11964,8452],{"class":253},[229,11966,917],{"class":916},[229,11968,11969],{"class":253},"    padding: 6px 4px;",[229,11971,917],{"class":916},[229,11973,8718],{"class":253},[229,11975,917],{"class":916},[229,11977,11877],{"class":253},[229,11979,917],{"class":916},[229,11981,8844],{"class":253},[229,11983,917],{"class":916},[229,11985,8284],{"class":253},[229,11987,917],{"class":916},[229,11989,11990],{"class":253},"    cursor: pointer;",[229,11992,917],{"class":916},[229,11994,8255],{"class":253},[229,11996,923],{"class":916},[229,11998,11999],{"class":253},"  .wi-check-row>span {",[229,12001,917],{"class":916},[229,12003,12004],{"class":253},"    flex: 1;",[229,12006,917],{"class":916},[229,12008,12009],{"class":253},"    line-height: 1.35;",[229,12011,917],{"class":916},[229,12013,8255],{"class":253},[229,12015,923],{"class":916},[229,12017,12018],{"class":253},"  .wi-check-row .v-selection-control {",[229,12020,917],{"class":916},[229,12022,12023],{"class":253},"    flex: none;",[229,12025,917],{"class":916},[229,12027,12028],{"class":253},"    min-width: 0;",[229,12030,917],{"class":916},[229,12032,8255],{"class":253},[229,12034,923],{"class":916},[229,12036,12037],{"class":253},"  .wi-check-row-done>span {",[229,12039,917],{"class":916},[229,12041,11472],{"class":253},[229,12043,917],{"class":916},[229,12045,8255],{"class":253},[229,12047,923],{"class":916},[229,12049,12050],{"class":253},"  \u002F* Instruction two-column layout (plain flexbox, no Vuetify grid) *\u002F",[229,12052,917],{"class":916},[229,12054,12055],{"class":253},"  .wi-instruction-flex {",[229,12057,917],{"class":916},[229,12059,8303],{"class":253},[229,12061,917],{"class":916},[229,12063,12064],{"class":253},"    gap: 20px;",[229,12066,917],{"class":916},[229,12068,12069],{"class":253},"    align-items: stretch;",[229,12071,917],{"class":916},[229,12073,12074],{"class":253},"    width: 100%;",[229,12076,917],{"class":916},[229,12078,8537],{"class":253},[229,12080,917],{"class":916},[229,12082,8255],{"class":253},[229,12084,923],{"class":916},[229,12086,12087],{"class":253},"  .wi-img-col {",[229,12089,917],{"class":916},[229,12091,12092],{"class":253},"    flex: 0 0 40%;",[229,12094,917],{"class":916},[229,12096,8303],{"class":253},[229,12098,917],{"class":916},[229,12100,12028],{"class":253},[229,12102,917],{"class":916},[229,12104,8255],{"class":253},[229,12106,923],{"class":916},[229,12108,12109],{"class":253},"  .wi-text-col {",[229,12111,917],{"class":916},[229,12113,12114],{"class":253},"    flex: 1 1 60%;",[229,12116,917],{"class":916},[229,12118,12119],{"class":253},"    padding-top: 4px;",[229,12121,917],{"class":916},[229,12123,12028],{"class":253},[229,12125,917],{"class":916},[229,12127,8255],{"class":253},[229,12129,923],{"class":916},[229,12131,12132],{"class":253},"  \u002F* Reference image (left) *\u002F",[229,12134,917],{"class":916},[229,12136,12137],{"class":253},"  .wi-image-wrap {",[229,12139,917],{"class":916},[229,12141,8343],{"class":253},[229,12143,917],{"class":916},[229,12145,12146],{"class":253},"    overflow: hidden;",[229,12148,917],{"class":916},[229,12150,8713],{"class":253},[229,12152,917],{"class":916},[229,12154,8333],{"class":253},[229,12156,917],{"class":916},[229,12158,12074],{"class":253},[229,12160,917],{"class":916},[229,12162,8537],{"class":253},[229,12164,917],{"class":916},[229,12166,12167],{"class":253},"    min-height: 210px;",[229,12169,917],{"class":916},[229,12171,8303],{"class":253},[229,12173,917],{"class":916},[229,12175,8308],{"class":253},[229,12177,917],{"class":916},[229,12179,12180],{"class":253},"    justify-content: center;",[229,12182,917],{"class":916},[229,12184,8255],{"class":253},[229,12186,923],{"class":916},[229,12188,12189],{"class":253},"  \u002F* Desktop: image box tracks a fixed aspect ratio based on its column",[229,12191,917],{"class":916},[229,12193,12194],{"class":253},"     width, so the card height scales with the image. The text column",[229,12196,917],{"class":916},[229,12198,12199],{"class":253},"     stretches to match via align-items: stretch on the flex container. *\u002F",[229,12201,917],{"class":916},[229,12203,11819],{"class":253},[229,12205,917],{"class":916},[229,12207,12208],{"class":253},"    .wi-image-wrap {",[229,12210,917],{"class":916},[229,12212,12213],{"class":253},"      aspect-ratio: 4 \u002F 3;",[229,12215,917],{"class":916},[229,12217,12218],{"class":253},"      height: auto;",[229,12220,917],{"class":916},[229,12222,12223],{"class":253},"      align-self: flex-start;",[229,12225,917],{"class":916},[229,12227,3696],{"class":253},[229,12229,917],{"class":916},[229,12231,8255],{"class":253},[229,12233,923],{"class":916},[229,12235,12236],{"class":253},"  .wi-image {",[229,12238,917],{"class":916},[229,12240,12074],{"class":253},[229,12242,917],{"class":916},[229,12244,8537],{"class":253},[229,12246,917],{"class":916},[229,12248,12249],{"class":253},"    object-fit: contain;",[229,12251,917],{"class":916},[229,12253,8255],{"class":253},[229,12255,923],{"class":916},[229,12257,12258],{"class":253},"  @media (max-width: 700px) {",[229,12260,917],{"class":916},[229,12262,12263],{"class":253},"    .wi-instruction-flex {",[229,12265,917],{"class":916},[229,12267,12268],{"class":253},"      flex-direction: column;",[229,12270,917],{"class":916},[229,12272,3696],{"class":253},[229,12274,923],{"class":916},[229,12276,12277],{"class":253},"    .wi-img-col {",[229,12279,917],{"class":916},[229,12281,12282],{"class":253},"      flex: none;",[229,12284,917],{"class":916},[229,12286,3696],{"class":253},[229,12288,923],{"class":916},[229,12290,12208],{"class":253},[229,12292,917],{"class":916},[229,12294,12295],{"class":253},"      min-height: 150px;",[229,12297,917],{"class":916},[229,12299,3696],{"class":253},[229,12301,917],{"class":916},[229,12303,8255],{"class":253},[229,12305,923],{"class":916},[229,12307,12308],{"class":253},"  \u002F* Controls *\u002F",[229,12310,917],{"class":916},[229,12312,12313],{"class":253},"  .wi-controls {",[229,12315,917],{"class":916},[229,12317,12318],{"class":253},"    margin-top: 12px;",[229,12320,917],{"class":916},[229,12322,8489],{"class":253},[229,12324,917],{"class":916},[229,12326,8255],{"class":253},[229,12328,923],{"class":916},[229,12330,12331],{"class":253},"  .wi-ctrl-col {",[229,12333,917],{"class":916},[229,12335,12336],{"class":253},"    padding: 6px 8px;",[229,12338,917],{"class":916},[229,12340,8255],{"class":253},[229,12342,923],{"class":916},[229,12344,12345],{"class":253},"  .wi-nav-btn {",[229,12347,917],{"class":916},[229,12349,12350],{"class":253},"    height: 52px !important;",[229,12352,917],{"class":916},[229,12354,12355],{"class":253},"    font-size: 15px !important;",[229,12357,917],{"class":916},[229,12359,8470],{"class":253},[229,12361,917],{"class":916},[229,12363,8475],{"class":253},[229,12365,917],{"class":916},[229,12367,9028],{"class":253},[229,12369,917],{"class":916},[229,12371,8255],{"class":253},[229,12373,923],{"class":916},[229,12375,12376],{"class":253},"  .wi-nav-btn .v-btn__content {",[229,12378,917],{"class":916},[229,12380,8303],{"class":253},[229,12382,917],{"class":916},[229,12384,8308],{"class":253},[229,12386,917],{"class":916},[229,12388,12180],{"class":253},[229,12390,917],{"class":916},[229,12392,8255],{"class":253},[229,12394,923],{"class":916},[229,12396,12397],{"class":253},"  .wi-next-btn {",[229,12399,917],{"class":916},[229,12401,12402],{"class":253},"    font-size: 17px !important;",[229,12404,917],{"class":916},[229,12406,8255],{"class":253},[229,12408,923],{"class":916},[229,12410,12411],{"class":253},"  .wi-hint {",[229,12413,917],{"class":916},[229,12415,8303],{"class":253},[229,12417,917],{"class":916},[229,12419,8308],{"class":253},[229,12421,917],{"class":916},[229,12423,12180],{"class":253},[229,12425,917],{"class":916},[229,12427,8954],{"class":253},[229,12429,917],{"class":916},[229,12431,12432],{"class":253},"    margin-top: 8px;",[229,12434,917],{"class":916},[229,12436,11730],{"class":253},[229,12438,917],{"class":916},[229,12440,8844],{"class":253},[229,12442,917],{"class":916},[229,12444,11472],{"class":253},[229,12446,917],{"class":916},[229,12448,8255],{"class":253},[229,12450,917],{"class":916},[229,12452,9037],{"class":253},[229,12454,239],{"class":235},[229,12456,259],{"class":235},[229,12458,239],{"class":235},[229,12460,9046],{"class":242},[229,12462,239],{"class":235},[229,12464,388],{"class":235},[229,12466,239],{"class":235},[229,12468,9055],{"class":242},[229,12470,239],{"class":235},[229,12472,388],{"class":235},[229,12474,239],{"class":235},[229,12476,9064],{"class":242},[229,12478,239],{"class":235},[229,12480,388],{"class":235},[229,12482,239],{"class":235},[229,12484,9073],{"class":242},[229,12486,239],{"class":235},[229,12488,248],{"class":235},[229,12490,239],{"class":235},[229,12492,12493],{"class":253},"widget:page",[229,12495,239],{"class":235},[229,12497,259],{"class":235},[229,12499,239],{"class":235},[229,12501,9091],{"class":242},[229,12503,239],{"class":235},[229,12505,248],{"class":235},[229,12507,771],{"class":235},[229,12509,259],{"class":235},[229,12511,239],{"class":235},[229,12513,567],{"class":242},[229,12515,239],{"class":235},[229,12517,248],{"class":235},[229,12519,12520],{"class":574},"670",[229,12522,259],{"class":235},[229,12524,239],{"class":235},[229,12526,582],{"class":242},[229,12528,239],{"class":235},[229,12530,248],{"class":235},[229,12532,12533],{"class":574},"780",[229,12535,259],{"class":235},[229,12537,239],{"class":235},[229,12539,803],{"class":242},[229,12541,239],{"class":235},[229,12543,808],{"class":235},[229,12545,239],{"class":235},[229,12547,12548],{"class":253},"c67ea1f6c0580816",[229,12550,239],{"class":235},[229,12552,259],{"class":235},[229,12554,239],{"class":235},[229,12556,12557],{"class":253},"effed3f3a008aef7",[229,12559,239],{"class":235},[229,12561,817],{"class":235},[229,12563,239],{"class":235},[229,12565,243],{"class":242},[229,12567,239],{"class":235},[229,12569,248],{"class":235},[229,12571,239],{"class":235},[229,12573,12574],{"class":253},"e51561215326fafd",[229,12576,239],{"class":235},[229,12578,259],{"class":235},[229,12580,239],{"class":235},[229,12582,264],{"class":242},[229,12584,239],{"class":235},[229,12586,248],{"class":235},[229,12588,239],{"class":235},[229,12590,4749],{"class":253},[229,12592,239],{"class":235},[229,12594,259],{"class":235},[229,12596,239],{"class":235},[229,12598,4758],{"class":242},[229,12600,239],{"class":235},[229,12602,1081],{"class":235},[229,12604,239],{"class":235},[229,12606,4767],{"class":242},[229,12608,239],{"class":235},[229,12610,305],{"class":235},[229,12612,239],{"class":235},[229,12614,99],{"class":310},[229,12616,239],{"class":235},[229,12618,248],{"class":235},[229,12620,239],{"class":235},[229,12622,4784],{"class":253},[229,12624,239],{"class":235},[229,12626,4789],{"class":235},[12,12628,12629,75,12633],{},[21,12630],{"alt":12631,"src":12632},"Placeholder: Work Instruction Widget showing a step with image, checklist, and navigation controls","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Finstructions.png",[26,12634,12635],{},"The Instructions page: step image, checklist, target time, and Previous \u002F Report Issue \u002F Next controls.",[148,12637,12638],{"start":5063},[70,12639,5236,12640,12642],{},[97,12641,846],{}," node named \"Track step (save\u002Fload per user)\":",[220,12644,12646],{"className":5720,"code":12645,"language":5722,"meta":225,"style":225},"\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",[97,12647,12648,12653,12658,12663,12668,12687,12691,12696,12701,12706,12728,12762,12779,12783,12788,12820,12830,12840,12845,12849,12864,12878,12903,12930,12936,12940,12952,12965,12981,12999,13005,13014,13019,13027,13034],{"__ignoreMap":225},[229,12649,12650],{"class":231,"line":232},[229,12651,12652],{"class":5273},"\u002F\u002F Remembers the current step per user for the active work order.\n",[229,12654,12655],{"class":231,"line":5063},[229,12656,12657],{"class":5273},"\u002F\u002F Handles two actions from the widget:\n",[229,12659,12660],{"class":231,"line":5082},[229,12661,12662],{"class":5273},"\u002F\u002F   save_step - persist the step the operator is on\n",[229,12664,12665],{"class":231,"line":4979},[229,12666,12667],{"class":5273},"\u002F\u002F   load_step - reply with the saved step so the widget can resume\n",[229,12669,12670,12672,12675,12677,12679,12681,12683,12685],{"class":231,"line":5113},[229,12671,5729],{"class":242},[229,12673,12674],{"class":916}," p ",[229,12676,5287],{"class":235},[229,12678,5737],{"class":916},[229,12680,57],{"class":235},[229,12682,6568],{"class":916},[229,12684,6709],{"class":235},[229,12686,6923],{"class":235},[229,12688,12689],{"class":231,"line":5128},[229,12690,5406],{"emptyLinePlaceholder":5405},[229,12692,12693],{"class":231,"line":5143},[229,12694,12695],{"class":5273},"\u002F\u002F Identity comes from this message's own client data first. This is what\n",[229,12697,12698],{"class":231,"line":5383},[229,12699,12700],{"class":5273},"\u002F\u002F keeps two operators using the widget at the same time from reading or\n",[229,12702,12703],{"class":231,"line":5393},[229,12704,12705],{"class":5273},"\u002F\u002F writing each other's progress.\n",[229,12707,12708,12710,12712,12714,12716,12718,12720,12722,12724,12726],{"class":231,"line":5402},[229,12709,5729],{"class":242},[229,12711,5732],{"class":916},[229,12713,5287],{"class":235},[229,12715,5737],{"class":916},[229,12717,57],{"class":235},[229,12719,5742],{"class":916},[229,12721,5745],{"class":235},[229,12723,3291],{"class":916},[229,12725,5745],{"class":235},[229,12727,5752],{"class":916},[229,12729,12730,12732,12734,12736,12738,12740,12742,12744,12746,12748,12750,12752,12754,12756,12758,12760],{"class":231,"line":5409},[229,12731,5757],{"class":235},[229,12733,5760],{"class":916},[229,12735,57],{"class":235},[229,12737,736],{"class":5765},[229,12739,5768],{"class":916},[229,12741,5771],{"class":235},[229,12743,3291],{"class":253},[229,12745,5771],{"class":235},[229,12747,259],{"class":235},[229,12749,5780],{"class":235},[229,12751,941],{"class":253},[229,12753,5771],{"class":235},[229,12755,5787],{"class":916},[229,12757,5745],{"class":235},[229,12759,5087],{"class":916},[229,12761,5500],{"class":235},[229,12763,12764,12766,12769,12772,12775,12777],{"class":231,"line":5419},[229,12765,6028],{"class":5422},[229,12767,12768],{"class":916}," (",[229,12770,12771],{"class":235},"!",[229,12773,12774],{"class":916},"username) ",[229,12776,6108],{"class":5422},[229,12778,6793],{"class":235},[229,12780,12781],{"class":231,"line":5432},[229,12782,5406],{"emptyLinePlaceholder":5405},[229,12784,12785],{"class":231,"line":5443},[229,12786,12787],{"class":5273},"\u002F\u002F Read the user's saved state\n",[229,12789,12790,12792,12795,12797,12799,12801,12803,12806,12808,12810,12812,12814,12816,12818],{"class":231,"line":5464},[229,12791,5729],{"class":242},[229,12793,12794],{"class":916}," userState ",[229,12796,5287],{"class":235},[229,12798,5760],{"class":916},[229,12800,57],{"class":235},[229,12802,736],{"class":5765},[229,12804,12805],{"class":916},"(username",[229,12807,259],{"class":235},[229,12809,6096],{"class":235},[229,12811,941],{"class":253},[229,12813,239],{"class":235},[229,12815,6918],{"class":916},[229,12817,6709],{"class":235},[229,12819,5429],{"class":235},[229,12821,12822,12825,12827],{"class":231,"line":5470},[229,12823,12824],{"class":5264},"    workOrderId",[229,12826,248],{"class":235},[229,12828,12829],{"class":235}," null,\n",[229,12831,12832,12835,12837],{"class":231,"line":5480},[229,12833,12834],{"class":5264},"    stepIndex",[229,12836,248],{"class":235},[229,12838,12839],{"class":574}," 0\n",[229,12841,12842],{"class":231,"line":5486},[229,12843,12844],{"class":235},"};\n",[229,12846,12847],{"class":231,"line":5503},[229,12848,5406],{"emptyLinePlaceholder":5405},[229,12850,12851,12854,12857,12859,12862],{"class":231,"line":5509},[229,12852,12853],{"class":5422},"switch",[229,12855,12856],{"class":916}," (p",[229,12858,57],{"class":235},[229,12860,12861],{"class":916},"action) ",[229,12863,5060],{"class":235},[229,12865,12866,12869,12871,12873,12875],{"class":231,"line":5514},[229,12867,12868],{"class":5422},"    case",[229,12870,6096],{"class":235},[229,12872,9332],{"class":253},[229,12874,239],{"class":235},[229,12876,12877],{"class":235},":\n",[229,12879,12880,12883,12885,12888,12890,12893,12895,12897,12899,12901],{"class":231,"line":5523},[229,12881,12882],{"class":916},"        userState",[229,12884,57],{"class":235},[229,12886,12887],{"class":916},"stepIndex ",[229,12889,5287],{"class":235},[229,12891,12892],{"class":916}," p",[229,12894,57],{"class":235},[229,12896,12887],{"class":916},[229,12898,6725],{"class":235},[229,12900,6603],{"class":574},[229,12902,5500],{"class":235},[229,12904,12905,12908,12910,12912,12914,12916,12918,12920,12922,12924,12926,12928],{"class":231,"line":5528},[229,12906,12907],{"class":916},"        global",[229,12909,57],{"class":235},[229,12911,5674],{"class":5765},[229,12913,12805],{"class":916},[229,12915,259],{"class":235},[229,12917,6895],{"class":916},[229,12919,259],{"class":235},[229,12921,6096],{"class":235},[229,12923,941],{"class":253},[229,12925,239],{"class":235},[229,12927,5787],{"class":916},[229,12929,5500],{"class":235},[229,12931,12932,12934],{"class":231,"line":5537},[229,12933,5446],{"class":5422},[229,12935,6793],{"class":235},[229,12937,12938],{"class":231,"line":5580},[229,12939,5406],{"emptyLinePlaceholder":5405},[229,12941,12942,12944,12946,12948,12950],{"class":231,"line":5613},[229,12943,12868],{"class":5422},[229,12945,6096],{"class":235},[229,12947,9336],{"class":253},[229,12949,239],{"class":235},[229,12951,12877],{"class":235},[229,12953,12954,12957,12959,12961,12963],{"class":231,"line":7034},[229,12955,12956],{"class":916},"        msg",[229,12958,57],{"class":235},[229,12960,6568],{"class":916},[229,12962,5287],{"class":235},[229,12964,5429],{"class":235},[229,12966,12968,12971,12973,12975,12977,12979],{"class":231,"line":12967},28,[229,12969,12970],{"class":5264},"            workOrderId",[229,12972,248],{"class":235},[229,12974,6895],{"class":916},[229,12976,57],{"class":235},[229,12978,6933],{"class":916},[229,12980,5079],{"class":235},[229,12982,12984,12987,12989,12991,12993,12995,12997],{"class":231,"line":12983},29,[229,12985,12986],{"class":5264},"            stepIndex",[229,12988,248],{"class":235},[229,12990,6895],{"class":916},[229,12992,57],{"class":235},[229,12994,12887],{"class":916},[229,12996,6725],{"class":235},[229,12998,12839],{"class":574},[229,13000,13002],{"class":231,"line":13001},30,[229,13003,13004],{"class":235},"        };\n",[229,13006,13008,13010,13012],{"class":231,"line":13007},31,[229,13009,5446],{"class":5422},[229,13011,5737],{"class":916},[229,13013,5500],{"class":235},[229,13015,13017],{"class":231,"line":13016},32,[229,13018,5406],{"emptyLinePlaceholder":5405},[229,13020,13022,13025],{"class":231,"line":13021},33,[229,13023,13024],{"class":5422},"    default",[229,13026,12877],{"class":235},[229,13028,13030,13032],{"class":231,"line":13029},34,[229,13031,5446],{"class":5422},[229,13033,6793],{"class":235},[229,13035,13037],{"class":231,"line":13036},35,[229,13038,5146],{"class":235},[148,13040,13041],{"start":5082},[70,13042,13043,13044,13046],{},"Wire the \"Work Instruction Widget\" output into this node, and wire the node's output back into the widget so the ",[97,13045,9336],{}," reply can jump it to the saved step.",[12,13048,13049,13050,5203,13053,13056,13057,13059,13060,13062,13063,13065],{},"Look at the store key: ",[97,13051,13052],{},"global.get(username, ...)",[97,13054,13055],{},"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 ",[97,13058,198],{}," rather than a shared global, it's always the username of whoever's browser actually sent this particular ",[97,13061,9332],{}," or ",[97,13064,9336],{}," message.",[12,13067,13068],{},"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,13070,13072],{"id":13071},"completing-the-operation-as-the-logged-in-user","Completing the Operation as the Logged-In User",[12,13074,13075,13076,13079],{},"When the operator completes the final instruction, the widget sends ",[97,13077,13078],{},"{ action: \"complete_operation\" }",". The flow looks up the operator's stored work order and builds the payload that will be sent to the API.",[148,13081,13082,13090,13105],{},[70,13083,5236,13084,13086,13087,13089],{},[45,13085,6495],{}," node and connect it to the ",[45,13088,9345],{}," actions link.",[70,13091,5236,13092,5817,13094,13097,13098,13101,13102,57],{},[45,13093,12853],{},[45,13095,13096],{},"Route by Action"," and route messages where ",[97,13099,13100],{},"msg.payload.action"," equals ",[97,13103,13104],{},"complete_operation",[70,13106,5236,13107,5817,13109,13112],{},[45,13108,846],{},[45,13110,13111],{},"Build Complete Payload"," and paste in the following code.",[220,13114,13116],{"className":5720,"code":13115,"language":5722,"meta":225,"style":225},"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",[97,13117,13118,13140,13174,13178,13190,13213,13220,13224,13228,13259,13280,13284,13300],{"__ignoreMap":225},[229,13119,13120,13122,13124,13126,13128,13130,13132,13134,13136,13138],{"class":231,"line":232},[229,13121,5729],{"class":242},[229,13123,5732],{"class":916},[229,13125,5287],{"class":235},[229,13127,5737],{"class":916},[229,13129,57],{"class":235},[229,13131,5742],{"class":916},[229,13133,5745],{"class":235},[229,13135,3291],{"class":916},[229,13137,5745],{"class":235},[229,13139,5752],{"class":916},[229,13141,13142,13144,13146,13148,13150,13152,13154,13156,13158,13160,13162,13164,13166,13168,13170,13172],{"class":231,"line":5063},[229,13143,5757],{"class":235},[229,13145,5760],{"class":916},[229,13147,57],{"class":235},[229,13149,736],{"class":5765},[229,13151,5768],{"class":916},[229,13153,5771],{"class":235},[229,13155,3291],{"class":253},[229,13157,5771],{"class":235},[229,13159,259],{"class":235},[229,13161,5780],{"class":235},[229,13163,941],{"class":253},[229,13165,5771],{"class":235},[229,13167,5787],{"class":916},[229,13169,5745],{"class":235},[229,13171,5087],{"class":916},[229,13173,5500],{"class":235},[229,13175,13176],{"class":231,"line":5082},[229,13177,5406],{"emptyLinePlaceholder":5405},[229,13179,13180,13182,13184,13186,13188],{"class":231,"line":4979},[229,13181,6028],{"class":5422},[229,13183,12768],{"class":916},[229,13185,12771],{"class":235},[229,13187,12774],{"class":916},[229,13189,5060],{"class":235},[229,13191,13192,13195,13197,13200,13202,13204,13207,13209,13211],{"class":231,"line":5113},[229,13193,13194],{"class":916},"    node",[229,13196,57],{"class":235},[229,13198,13199],{"class":5765},"warn",[229,13201,5768],{"class":5264},[229,13203,5771],{"class":235},[229,13205,13206],{"class":253},"No logged-in user found — cannot complete operation",[229,13208,5771],{"class":235},[229,13210,5787],{"class":5264},[229,13212,5500],{"class":235},[229,13214,13215,13218],{"class":231,"line":5128},[229,13216,13217],{"class":5422},"    return",[229,13219,6793],{"class":235},[229,13221,13222],{"class":231,"line":5143},[229,13223,5146],{"class":235},[229,13225,13226],{"class":231,"line":5383},[229,13227,5406],{"emptyLinePlaceholder":5405},[229,13229,13230,13232,13235,13237,13239,13241,13243,13245,13247,13249,13251,13253,13255,13257],{"class":231,"line":5393},[229,13231,5729],{"class":242},[229,13233,13234],{"class":916}," stored ",[229,13236,5287],{"class":235},[229,13238,5760],{"class":916},[229,13240,57],{"class":235},[229,13242,736],{"class":5765},[229,13244,12805],{"class":916},[229,13246,259],{"class":235},[229,13248,5780],{"class":235},[229,13250,941],{"class":253},[229,13252,5771],{"class":235},[229,13254,6918],{"class":916},[229,13256,6709],{"class":235},[229,13258,6923],{"class":235},[229,13260,13261,13263,13266,13268,13271,13273,13276,13278],{"class":231,"line":5402},[229,13262,5729],{"class":242},[229,13264,13265],{"class":916}," workOrderId ",[229,13267,5287],{"class":235},[229,13269,13270],{"class":916}," stored",[229,13272,57],{"class":235},[229,13274,13275],{"class":916},"workOrderId ",[229,13277,6709],{"class":235},[229,13279,6793],{"class":235},[229,13281,13282],{"class":231,"line":5409},[229,13283,5406],{"emptyLinePlaceholder":5405},[229,13285,13286,13288,13290,13292,13294,13296,13298],{"class":231,"line":5419},[229,13287,6059],{"class":916},[229,13289,57],{"class":235},[229,13291,6568],{"class":916},[229,13293,5287],{"class":235},[229,13295,5449],{"class":235},[229,13297,13265],{"class":916},[229,13299,12844],{"class":235},[229,13301,13302,13304,13306],{"class":231,"line":5432},[229,13303,6108],{"class":5422},[229,13305,5737],{"class":916},[229,13307,5500],{"class":235},[148,13309,13310,13329],{"start":4979},[70,13311,6117,13312,6452,13314,5825,13316,13319,13320,13322,13323,13326,13327,5873],{},[45,13313,5009],{},[45,13315,6455],{},[45,13317,13318],{},"POST",", configure ",[45,13321,6130],{}," authentication using your access token, and set the URL to ",[97,13324,13325],{},"https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders\u002Fcomplete",". Replace ",[97,13328,5872],{},[70,13330,5236,13331,13333,13334,5825,13336,13338,13339,13341],{},[45,13332,5670],{}," node that sets ",[97,13335,5824],{},[97,13337,4837],{},", then connect it to a ",[45,13340,6488],{}," 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,13343,13344],{},"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,13346,13348],{"id":13347},"reporting-a-defect-as-the-logged-in-operator","Reporting a Defect as the Logged-In Operator",[12,13350,13351,13352,13354],{},"If an operator encounters a defect, they can report it from the ",[45,13353,9345],{},". 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,13356,4917,13357,13359,13360,13363],{},[45,13358,4862],{}," button sends ",[97,13361,13362],{},"{ action: \"Report Issue\" }",". Use that action to open the report form.",[148,13365,13366,13376,13386,13400],{},[70,13367,5236,13368,5817,13370,13373,13374,13089],{},[45,13369,6495],{},[45,13371,13372],{},"Widget Action In"," and connect it to the ",[45,13375,9345],{},[70,13377,5236,13378,5817,13380,13097,13382,13101,13384,57],{},[45,13379,12853],{},[45,13381,13096],{},[97,13383,13100],{},[97,13385,4862],{},[70,13387,5236,13388,13333,13390,5825,13392,13338,13394,13396,13397,13399],{},[45,13389,5670],{},[97,13391,5824],{},[97,13393,4862],{},[45,13395,116],{}," node to navigate to the ",[45,13398,4862],{}," page.",[70,13401,5236,13402,5817,13404,13407,13408,13410,13411,13436,13439],{},[45,13403,110],{},[45,13405,13406],{},"Report Issue Form"," to the ",[45,13409,4862],{}," group with four required fields:",[67,13412,13413,13419,13424,13430],{},[70,13414,13415,13418],{},[45,13416,13417],{},"Issue Type"," (dropdown)",[70,13420,13421,13418],{},[45,13422,13423],{},"Severity",[70,13425,13426,13429],{},[45,13427,13428],{},"Affected Part"," (text)",[70,13431,13432,13435],{},[45,13433,13434],{},"Description"," (multiline)",[13437,13438],"br",{},"Populate the dropdown fields with the issue types and severity levels used in your application.",[12,13441,13442,13446],{},[21,13443],{"alt":13444,"src":13445},"Screenshot: Report Issue form fields showing the Issue Type, Severity, Affected Part, and Description inputs","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fform-elements.png",[26,13447,13448],{},"The Report Issue form collects the defect details before submitting them against the current work order.",[12,13450,13451,13455],{},[21,13452],{"alt":13453,"src":13454},"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,13456,13457],{},"Configure the Issue Type and Severity dropdowns with the options used in your application.",[148,13459,13460],{"start":5113},[70,13461,5236,13462,5817,13464,13112],{},[45,13463,846],{},[45,13465,13466],{},"Prepare Defect Payload",[220,13468,13471],{"className":5720,"code":13469,"language":5722,"meta":13470,"style":225},"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\"",[97,13472,13473,13491,13495,13517,13551,13555,13567,13588,13594,13598,13602,13632,13650,13654,13671,13689,13712,13732,13736,13770,13791,13797,13801,13805,13817,13823,13830,13837,13844,13849,13853,13857],{"__ignoreMap":225},[229,13474,13475,13477,13479,13481,13483,13485,13487,13489],{"class":231,"line":232},[229,13476,5729],{"class":242},[229,13478,12674],{"class":916},[229,13480,5287],{"class":235},[229,13482,5737],{"class":916},[229,13484,57],{"class":235},[229,13486,6568],{"class":916},[229,13488,6709],{"class":235},[229,13490,6923],{"class":235},[229,13492,13493],{"class":231,"line":5063},[229,13494,5406],{"emptyLinePlaceholder":5405},[229,13496,13497,13499,13501,13503,13505,13507,13509,13511,13513,13515],{"class":231,"line":5082},[229,13498,5729],{"class":242},[229,13500,5732],{"class":916},[229,13502,5287],{"class":235},[229,13504,5737],{"class":916},[229,13506,57],{"class":235},[229,13508,5742],{"class":916},[229,13510,5745],{"class":235},[229,13512,3291],{"class":916},[229,13514,5745],{"class":235},[229,13516,5752],{"class":916},[229,13518,13519,13521,13523,13525,13527,13529,13531,13533,13535,13537,13539,13541,13543,13545,13547,13549],{"class":231,"line":4979},[229,13520,5757],{"class":235},[229,13522,5760],{"class":916},[229,13524,57],{"class":235},[229,13526,736],{"class":5765},[229,13528,5768],{"class":916},[229,13530,5771],{"class":235},[229,13532,3291],{"class":253},[229,13534,5771],{"class":235},[229,13536,259],{"class":235},[229,13538,5780],{"class":235},[229,13540,941],{"class":253},[229,13542,5771],{"class":235},[229,13544,5787],{"class":916},[229,13546,5745],{"class":235},[229,13548,5087],{"class":916},[229,13550,5500],{"class":235},[229,13552,13553],{"class":231,"line":5113},[229,13554,5406],{"emptyLinePlaceholder":5405},[229,13556,13557,13559,13561,13563,13565],{"class":231,"line":5128},[229,13558,6028],{"class":5422},[229,13560,12768],{"class":916},[229,13562,12771],{"class":235},[229,13564,12774],{"class":916},[229,13566,5060],{"class":235},[229,13568,13569,13571,13573,13575,13577,13579,13582,13584,13586],{"class":231,"line":5143},[229,13570,13194],{"class":916},[229,13572,57],{"class":235},[229,13574,13199],{"class":5765},[229,13576,5768],{"class":5264},[229,13578,5771],{"class":235},[229,13580,13581],{"class":253},"No logged-in user found — cannot report defect",[229,13583,5771],{"class":235},[229,13585,5787],{"class":5264},[229,13587,5500],{"class":235},[229,13589,13590,13592],{"class":231,"line":5383},[229,13591,13217],{"class":5422},[229,13593,6793],{"class":235},[229,13595,13596],{"class":231,"line":5393},[229,13597,5146],{"class":235},[229,13599,13600],{"class":231,"line":5402},[229,13601,5406],{"emptyLinePlaceholder":5405},[229,13603,13604,13606,13608,13610,13612,13614,13616,13618,13620,13622,13624,13626,13628,13630],{"class":231,"line":5409},[229,13605,5729],{"class":242},[229,13607,13234],{"class":916},[229,13609,5287],{"class":235},[229,13611,5760],{"class":916},[229,13613,57],{"class":235},[229,13615,736],{"class":5765},[229,13617,12805],{"class":916},[229,13619,259],{"class":235},[229,13621,5780],{"class":235},[229,13623,941],{"class":253},[229,13625,5771],{"class":235},[229,13627,6918],{"class":916},[229,13629,6709],{"class":235},[229,13631,6923],{"class":235},[229,13633,13634,13636,13638,13640,13642,13644,13646,13648],{"class":231,"line":5419},[229,13635,5729],{"class":242},[229,13637,13265],{"class":916},[229,13639,5287],{"class":235},[229,13641,13270],{"class":916},[229,13643,57],{"class":235},[229,13645,13275],{"class":916},[229,13647,6709],{"class":235},[229,13649,6793],{"class":235},[229,13651,13652],{"class":231,"line":5432},[229,13653,5406],{"emptyLinePlaceholder":5405},[229,13655,13656,13658,13661,13663,13665,13667,13669],{"class":231,"line":5443},[229,13657,5729],{"class":242},[229,13659,13660],{"class":916}," issueType ",[229,13662,5287],{"class":235},[229,13664,12892],{"class":916},[229,13666,57],{"class":235},[229,13668,264],{"class":916},[229,13670,5500],{"class":235},[229,13672,13673,13675,13678,13680,13682,13684,13687],{"class":231,"line":5464},[229,13674,5729],{"class":242},[229,13676,13677],{"class":916}," severity ",[229,13679,5287],{"class":235},[229,13681,12892],{"class":916},[229,13683,57],{"class":235},[229,13685,13686],{"class":916},"severity",[229,13688,5500],{"class":235},[229,13690,13691,13693,13696,13698,13701,13703,13706,13708,13710],{"class":231,"line":5470},[229,13692,5729],{"class":242},[229,13694,13695],{"class":916}," affectedPart ",[229,13697,5287],{"class":235},[229,13699,13700],{"class":916}," p[",[229,13702,5771],{"class":235},[229,13704,13705],{"class":253},"affected-part",[229,13707,5771],{"class":235},[229,13709,3468],{"class":916},[229,13711,5500],{"class":235},[229,13713,13714,13716,13719,13721,13723,13725,13728,13730],{"class":231,"line":5480},[229,13715,5729],{"class":242},[229,13717,13718],{"class":916}," description ",[229,13720,5287],{"class":235},[229,13722,12892],{"class":916},[229,13724,57],{"class":235},[229,13726,13727],{"class":916},"description ",[229,13729,6709],{"class":235},[229,13731,6793],{"class":235},[229,13733,13734],{"class":231,"line":5486},[229,13735,5406],{"emptyLinePlaceholder":5405},[229,13737,13738,13740,13742,13744,13746,13748,13751,13754,13756,13758,13761,13763,13765,13768],{"class":231,"line":5503},[229,13739,6028],{"class":5422},[229,13741,12768],{"class":916},[229,13743,12771],{"class":235},[229,13745,13275],{"class":916},[229,13747,6709],{"class":235},[229,13749,13750],{"class":235}," !",[229,13752,13753],{"class":916},"issueType ",[229,13755,6709],{"class":235},[229,13757,13750],{"class":235},[229,13759,13760],{"class":916},"severity ",[229,13762,6709],{"class":235},[229,13764,13750],{"class":235},[229,13766,13767],{"class":916},"affectedPart) ",[229,13769,5060],{"class":235},[229,13771,13772,13774,13776,13778,13780,13782,13785,13787,13789],{"class":231,"line":5509},[229,13773,13194],{"class":916},[229,13775,57],{"class":235},[229,13777,13199],{"class":5765},[229,13779,5768],{"class":5264},[229,13781,5771],{"class":235},[229,13783,13784],{"class":253},"Missing required defect fields — defect not sent",[229,13786,5771],{"class":235},[229,13788,5787],{"class":5264},[229,13790,5500],{"class":235},[229,13792,13793,13795],{"class":231,"line":5514},[229,13794,13217],{"class":5422},[229,13796,6793],{"class":235},[229,13798,13799],{"class":231,"line":5523},[229,13800,5146],{"class":235},[229,13802,13803],{"class":231,"line":5528},[229,13804,5406],{"emptyLinePlaceholder":5405},[229,13806,13807,13809,13811,13813,13815],{"class":231,"line":5537},[229,13808,6059],{"class":916},[229,13810,57],{"class":235},[229,13812,6568],{"class":916},[229,13814,5287],{"class":235},[229,13816,5429],{"class":235},[229,13818,13819,13821],{"class":231,"line":5580},[229,13820,12824],{"class":916},[229,13822,5079],{"class":235},[229,13824,13825,13828],{"class":231,"line":5613},[229,13826,13827],{"class":916},"    issueType",[229,13829,5079],{"class":235},[229,13831,13832,13835],{"class":231,"line":7034},[229,13833,13834],{"class":916},"    severity",[229,13836,5079],{"class":235},[229,13838,13839,13842],{"class":231,"line":12967},[229,13840,13841],{"class":916},"    affectedPart",[229,13843,5079],{"class":235},[229,13845,13846],{"class":231,"line":12983},[229,13847,13848],{"class":916},"    description\n",[229,13850,13851],{"class":231,"line":13001},[229,13852,12844],{"class":235},[229,13854,13855],{"class":231,"line":13007},[229,13856,5406],{"emptyLinePlaceholder":5405},[229,13858,13859,13861,13863],{"class":231,"line":13016},[229,13860,6108],{"class":5422},[229,13862,5737],{"class":916},[229,13864,5500],{"class":235},[148,13866,13867,13886],{"start":5128},[70,13868,6117,13869,6452,13871,5825,13873,13319,13875,13322,13877,13326,13880,13882,13883,13885],{},[45,13870,5009],{},[45,13872,6455],{},[45,13874,13318],{},[45,13876,6130],{},[97,13878,13879],{},"https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders\u002Fdefect",[97,13881,5872],{}," with your own FlowFuse instance URL, then connect the request to a ",[45,13884,6488],{}," node so the flow continues to the reset step.",[70,13887,5236,13888,4911,13890,13893,13894,13896,13897,13899],{},[45,13889,113],{},[45,13891,13892],{},"Back to Work Instructions"," to the same group and connect it to a ",[45,13895,116],{}," node that navigates back to the ",[45,13898,4820],{}," page. Since the operator's progress is stored against their username, they return to the same instruction they left.",[12,13901,13902,13906],{},[21,13903],{"alt":13904,"src":13905},"Screenshot: Completed Report Issue page showing the defect reporting form and Back to Work Instructions button","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Freport-issue.png",[26,13907,13908],{},"The completed Report Issue page where operators can submit a defect or return to the work instructions.",[12,13910,13911],{},"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,13913,13915],{"id":13914},"clearing-state-when-work-ends","Clearing State When Work Ends",[12,13917,13918,13919,13921],{},"When an operation is completed or a defect is reported, clear the operator's saved progress so the next work order starts from ",[45,13920,9325],{}," instead of resuming a finished one.",[148,13923,13924,13940,13952],{},[70,13925,5236,13926,5817,13928,13373,13931,13933,13934,5203,13936,13939],{},[45,13927,6495],{},[45,13929,13930],{},"Complete \u002F Defect Result In",[45,13932,6488],{}," nodes from the ",[45,13935,9358],{},[45,13937,13938],{},"Report Defect"," flows.",[70,13941,5236,13942,13944,13945,13101,13948,13951],{},[45,13943,12853],{}," node that checks ",[97,13946,13947],{},"msg.statusCode",[97,13949,13950],{},"200",", so the state is only cleared after a successful API response.",[70,13953,5236,13954,5817,13956,13112],{},[45,13955,846],{},[45,13957,13958],{},"Clear User Step State",[220,13960,13963],{"className":5720,"code":13961,"language":5722,"meta":13962,"style":225},"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\"",[97,13964,13965,13987,14021,14025,14039,14043,14069,14073,14091],{"__ignoreMap":225},[229,13966,13967,13969,13971,13973,13975,13977,13979,13981,13983,13985],{"class":231,"line":232},[229,13968,5729],{"class":242},[229,13970,5732],{"class":916},[229,13972,5287],{"class":235},[229,13974,5737],{"class":916},[229,13976,57],{"class":235},[229,13978,5742],{"class":916},[229,13980,5745],{"class":235},[229,13982,3291],{"class":916},[229,13984,5745],{"class":235},[229,13986,5752],{"class":916},[229,13988,13989,13991,13993,13995,13997,13999,14001,14003,14005,14007,14009,14011,14013,14015,14017,14019],{"class":231,"line":5063},[229,13990,5757],{"class":235},[229,13992,5760],{"class":916},[229,13994,57],{"class":235},[229,13996,736],{"class":5765},[229,13998,5768],{"class":916},[229,14000,5771],{"class":235},[229,14002,3291],{"class":253},[229,14004,5771],{"class":235},[229,14006,259],{"class":235},[229,14008,5780],{"class":235},[229,14010,941],{"class":253},[229,14012,5771],{"class":235},[229,14014,5787],{"class":916},[229,14016,5745],{"class":235},[229,14018,5087],{"class":916},[229,14020,5500],{"class":235},[229,14022,14023],{"class":231,"line":5082},[229,14024,5406],{"emptyLinePlaceholder":5405},[229,14026,14027,14029,14031,14033,14035,14037],{"class":231,"line":4979},[229,14028,6028],{"class":5422},[229,14030,12768],{"class":916},[229,14032,12771],{"class":235},[229,14034,12774],{"class":916},[229,14036,6108],{"class":5422},[229,14038,6793],{"class":235},[229,14040,14041],{"class":231,"line":5113},[229,14042,5406],{"emptyLinePlaceholder":5405},[229,14044,14045,14048,14050,14052,14054,14056,14059,14061,14063,14065,14067],{"class":231,"line":5128},[229,14046,14047],{"class":916},"global",[229,14049,57],{"class":235},[229,14051,5674],{"class":5765},[229,14053,12805],{"class":916},[229,14055,259],{"class":235},[229,14057,14058],{"class":235}," {},",[229,14060,5780],{"class":235},[229,14062,941],{"class":253},[229,14064,5771],{"class":235},[229,14066,5787],{"class":916},[229,14068,5500],{"class":235},[229,14070,14071],{"class":231,"line":5143},[229,14072,5406],{"emptyLinePlaceholder":5405},[229,14074,14075,14077,14079,14081,14083,14085,14087,14089],{"class":231,"line":5383},[229,14076,6059],{"class":916},[229,14078,57],{"class":235},[229,14080,6568],{"class":916},[229,14082,5287],{"class":235},[229,14084,6096],{"class":235},[229,14086,4837],{"class":253},[229,14088,239],{"class":235},[229,14090,5500],{"class":235},[229,14092,14093,14095,14097],{"class":231,"line":5393},[229,14094,6108],{"class":5422},[229,14096,5737],{"class":916},[229,14098,5500],{"class":235},[148,14100,14101],{"start":4979},[70,14102,14103,14104,14106,14107,13399],{},"Connect the function node to a ",[45,14105,116],{}," node to navigate the operator back to the ",[45,14108,4837],{},[12,14110,14111],{},"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,14113,14114],{},"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,14116,14118],{"id":14117},"where-to-go-next","Where to Go Next",[12,14120,14121,14122,104,14124,5189,14126,14128],{},"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 ",[97,14123,718],{},[97,14125,2019],{},[97,14127,1367],{}," endpoints.",[12,14130,14131,14132,14136,14137,57],{},"From there, you can extend the application with production history, quality tracking, role-based experiences, and the ",[77,14133,14135],{"href":14134},"\u002Fblog\u002F2026\u002F08\u002Fmanufacturing-dashboard-examples\u002F","OEE, downtime, and quality dashboards"," that run alongside it, all powered by the same operator identity. To see how FlowFuse fits into modern automotive manufacturing, explore the ",[77,14138,14140],{"href":14139},"\u002Findustries\u002Fautomotive\u002F","Automotive solutions page",[300,14142,14143],{},"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":225,"searchDepth":4979,"depth":4979,"links":14145},[14146,14147,14148,14149,14150,14151,14152,14153,14154,14158,14159,14160,14161,14162,14163,14164,14165],{"id":61,"depth":5063,"text":62},{"id":142,"depth":5063,"text":143},{"id":202,"depth":5063,"text":203},{"id":4799,"depth":5063,"text":4800},{"id":4929,"depth":5063,"text":4930},{"id":5016,"depth":5063,"text":5017},{"id":5221,"depth":5063,"text":5222},{"id":5637,"depth":5063,"text":5638},{"id":5796,"depth":5063,"text":5797,"children":14155},[14156,14157],{"id":5804,"depth":5082,"text":5805},{"id":5844,"depth":5082,"text":5845},{"id":6175,"depth":5063,"text":6176},{"id":6509,"depth":5063,"text":6510},{"id":9287,"depth":5063,"text":9288},{"id":9314,"depth":5063,"text":9315},{"id":13071,"depth":5063,"text":13072},{"id":13347,"depth":5063,"text":13348},{"id":13914,"depth":5063,"text":13915},{"id":14117,"depth":5063,"text":14118},{"type":14167,"title":14168,"description":14169},"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":14176},{"type":9,"value":14177},[14178],[12,14179,14],{},"\u002Fblog\u002F2026\u002F07\u002Fdigital-work-instruction",{"title":5,"description":14171},{"loc":14180},"blog\u002F2026\u002F07\u002Fdigital-work-instruction","Give every operator their own work instructions, progress, and production history.",[14186],"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.","rCdxQc7LCjcAe10b-DD_wemHQHEzCzoRbcr0rx_BDMk",[],1786395969192]