{"context":{"domain":"cubbo-app"},"layers":{"ApplicationLayer":{"reference":"ApplicationLayer","availableInstances":[{"reference":"ComponentsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@DataSet","reference":"SystemsDataSet","params":{"filter":{"domain":"data2"},"pagination":{"size":1},"datasource":{"component":"data2-core-types@ProcessReference","params":{"reference":"SystemsDataSource"}}}},{"reference":"ExternalComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"SystemsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"5e3b796d6228227ca637d0f4","name":"data2","domain":"data2","organization":"62292184611f480b3191c37c","visibility":"public","updatedAt":"2026-07-27T14:19:36.810Z"}]}},{"reference":"OrganizationsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"DataComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@DataSet","reference":"OneFileComponentInstancesDataSet","params":{"pagination":{"size":1},"master":{"dataset":{"component":"data2-core-types@ProcessReference","params":{"reference":"SystemsDataSet"}},"localField":"system","masterField":"_id"},"datasource":{"component":"data2-core-types@ProcessReference","params":{"reference":"FileComponentInstancesDataSource"}}}},{"reference":"ApplicationsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"ComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"ServiceComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@Data2TableDataSource","reference":"FileComponentInstancesDataSource","params":{"table":"fileComponentInstances","schema":[{"component":"data2-core-types@Field","params":{"key":"component","title":"Component","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"system","title":"System","component":"data2-core-primitives@ObjectId"}},{"component":"data2-core-types@Field","params":{"key":"displayName","title":"Display Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"params","title":"Params","component":"data2-core-primitives@Object"}},{"component":"data2-core-types@Field","params":{"key":"reference","title":"Reference","component":"data2-core-primitives@String"}}]}},{"component":"data2-core@MemoryDataSource","reference":"EmptyDataSource","params":{"initialData":[]}},{"reference":"ComponentsDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"UserComponentsDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"DataComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ServiceComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ExternalComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ApplicationsDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}}],"processesParams":{}},"HostApplicationLayer":{"reference":"HostApplicationLayer","availableInstances":[{"_id":"5f15ff190528b92601890f71","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"SystemsTableDataSource"}},"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"domain"}}},"pk":"_id","fields":[{"component":"data2-core-types@FieldReference","params":{"key":"_id"}},{"component":"data2-core-types@FieldReference","params":{"key":"name"}},{"component":"data2-core-types@FieldReference","params":{"key":"domain"}},{"component":"data2-core-types@FieldReference","params":{"key":"visibility"}},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"customDomains"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization._id"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization.name"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization.billingStatus"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization.publicTrial.active"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"settings.defaultAccessPolicy"}}},"break":true}],"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":1}}},"staticPagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":1}}},"policies":[{"component":"data2-core-auth@Policy","params":{"allow":{"params":{"actions":[{"params":{"components":[{"params":{"query":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$params.query"}}}},"field":{"component":"data2-core-primitives@String","params":{"content":"_id"}},"fieldType":"string"},"component":"data2@7KkQq0vK4a7D2gg6IVJT7"},{"params":{"query":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$params.query"}}}},"field":{"component":"data2-core-primitives@String","params":{"content":"domain"}},"fieldType":"string"},"component":"data2@7KkQq0vK4a7D2gg6IVJT7"},{"params":{"query":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$params.query"}}}},"field":{"component":"data2-core-primitives@String","params":{"content":"customDomains"}},"fieldType":"string"},"component":"data2@7KkQq0vK4a7D2gg6IVJT7"}]},"component":"data2-core-logical-operators@Or"}]},"component":"data2-core-flow@Series"}}}]},"reference":"SystemsDataSet","updatedAt":"2026-08-07T21:51:24.037Z","createdAt":"2020-07-20T20:31:21.838Z"},{"_id":"5f1601ce0528b92601890f7c","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":1000},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ComponentsTableDataSource"}},"sort":{"params.package":1,"params.component":1},"pk":"_id","autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"staticFilter":{"system":{"exists":{"params":{"content":false},"component":"data2-core-primitives@Boolean"}}},"filter":{"system":{"exists":{"params":{"content":false},"component":"data2-core-primitives@Boolean"}}}},"reference":"ComponentsDataSet","updatedAt":"2025-11-05T19:37:01.935Z","createdAt":"2020-07-20T20:42:54.898Z"},{"_id":"5f9041dbc8da12be8b94aea4","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":2000},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ComponentsTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"UserComponentsDataSet","updatedAt":"2025-11-06T21:06:58.095Z","createdAt":"2020-07-20T20:44:09.350Z"},{"_id":"65d8c4fabc9dbb8f94de8d53","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ExternalComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ExternalComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:23.742Z","createdAt":"2024-02-23T16:17:01.816Z"},{"reference":"SystemsTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a7ca6cb11f8a5ec77c18b42","name":"app","domain":"cubbo-app","visibility":"public","updatedAt":"2026-08-12T17:00:59.517Z","createdAt":"2026-08-12T17:00:59.517Z"}]}},{"reference":"ComponentsTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"5f52a278a575399a45d239b4","component":"data2-core-types@Component","params":{"package":"data2-core-primitives","component":"Router","interactions":{"component":"data2-core-types@FieldSet","params":{"fields":{"goBack":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-types@Function"}},"definition":{"component":"data2-core-functions@Function","params":{"body":{"preventEvaluation":true,"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@This","params":{}},"prop":"history.goBack","args":[]}}}},"icon":{"component":"data2-core-primitives@String","params":{"content":"arrow-left"}},"visibility":"public"}},"goTo":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"definition":{"component":"data2-core-functions@Function","params":{"body":{"preventEvaluation":true,"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@This","params":{}},"prop":"history.push","args":[{"component":"data2-core-types@Reference","params":{"reference":"url"}},{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"preserveQuery"}}}}]}},"parameters":[{"component":"data2-core-primitives@String","params":{"content":"url"}},{"component":"data2-core-primitives@String","params":{"content":"preserveQuery"}}]},"break":true},"icon":{"component":"data2-core-primitives@String","params":{"content":"share"}},"visibility":"public","arguments":[{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Path to route"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Path to redirect user"}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2-core-types@ComponentParameter"},{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Boolean"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Preserve Query"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Preserve query string parameters  preserve query parameters on navigating."}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2-core-types@ComponentParameter"}]}},"open":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-types@Function"}},"definition":{"component":"data2-core-functions@Function","params":{"body":{"preventEvaluation":true,"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@This","params":{}},"prop":"history.push","args":[{"pathname":{"component":"data2-core-types@Reference","params":{"reference":"value"}}}]}},"parameters":["value"]}},"icon":{"component":"data2-core-primitives@String","params":{"content":"share"}},"visibility":"public","arguments":[{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Link to open"}},"description":{"component":"data2-core-primitives@String","params":{"content":""}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2-core-types@ComponentParameter"},{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Target"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Where to open the link"}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"oneOf":[{"params":{"content":"_blank"},"component":"data2-core-primitives@String"},{"params":{"content":"_self"},"component":"data2-core-primitives@String"},{"params":{"content":"_parent"},"component":"data2-core-primitives@String"},{"params":{"content":"_top"},"component":"data2-core-primitives@String"}]},"component":"data2-core-types@ComponentParameter"}]}},"close":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-types@Function"}},"definition":{"component":"data2-core-functions@Function","params":{"body":{"preventEvaluation":true,"component":"data2-core-types@Getter","params":{"module":{"params":{},"component":"data2-core-web@Window"},"prop":"close"}},"parameters":["value"]}},"icon":{"component":"data2-core-primitives@String","params":{"content":"times"}},"visibility":"public","arguments":[{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Link to open"}},"description":{"component":"data2-core-primitives@String","params":{"content":""}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2-core-types@ComponentParameter"},{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Target"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Where to open the link"}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"oneOf":[{"params":{"content":"_blank"},"component":"data2-core-primitives@String"},{"params":{"content":"_self"},"component":"data2-core-primitives@String"},{"params":{"content":"_parent"},"component":"data2-core-primitives@String"},{"params":{"content":"_top"},"component":"data2-core-primitives@String"}]},"component":"data2-core-types@ComponentParameter"}],"description":{"component":"data2-core-primitives@String","params":{"content":"Closes a window that was opened via router.open."}}}}}}}}},{"_id":"620d28658271aa4129919d89","component":"data2-core-types@Component","params":{"package":"data2-interface-services","component":"DeviceController","interactions":{"params":{"fields":{"postMessage":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":"data2-core-primitives@String","title":{"component":"data2-core-primitives@String","params":{"content":"data"}}}}]},"component":"data2-core-types@ComponentParameter"},"print":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Object"}},"flat":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"parameters":{"zoom":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Number"}},"title":{"component":"data2-core-primitives@String","params":{"content":"zoom"}},"visibility":"public"}}},"visibility":"public"},"component":"data2-core-types@ComponentParameter"}],"visibility":"public"},"component":"data2-core-types@ComponentParameter"},"share":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}}},"component":"data2-core-types@ComponentParameter"},"clipboard.copy":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}}}}]},"component":"data2-core-types@ComponentParameter"},"clipboard.paste":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}}}}]},"component":"data2-core-types@ComponentParameter"},"download":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"public","arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Filename"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Content"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Object"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Options"}},"parameters":{"params":{"fields":{"type":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Mimetype"}}}}}},"component":"data2-core-types@FieldSet"}}}]},"component":"data2-core-types@ComponentParameter"},"downloadUrl":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"public","arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Filename"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Url"}}}}]},"component":"data2-core-types@ComponentParameter"},"promptFiles":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":"data2-core-primitives@Object","flat":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"parameters":{"params":{"fields":{"multiple":{"component":"data2-core-types@ComponentParameter","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Multiple"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Whether or not to allow selecting multiple files"}},"component":"data2-core-primitives@Boolean"}},"acceptedFormats":{"component":"data2-core-types@ComponentParameter","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Accepted Formats"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Accepted file formats"}},"component":"data2-core-primitives@String","list":{"component":"data2-core-primitives@Boolean","params":{"content":true}}}},"timeout":{"component":"data2-core-types@ComponentParameter","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Timeout"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Max milliseconds to wait for file upload"}},"component":"data2-core-primitives@Number"}}}},"component":"data2-core-types@FieldSet"}}}],"visibility":"public"},"component":"data2-core-types@ComponentParameter"},"meetingRecord":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"public","definition":{"params":{"actions":[{"params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"meeting"}},"script":{"component":"data2-core-primitives@String","params":{"content":"(function() {\n  let mediaRecorder;\n  let audioChunks = [];\n  let combinedStream;\n  let audioContext;\n  \n  window.meetingCapture = async function() {\n    try {\n      // Solicitar acesso ao áudio da guia (e vídeo, que será ignorado depois)\n      const tabStream = await navigator.mediaDevices.getDisplayMedia({ \n        video: true, // Necessário para alguns navegadores\n        audio: true\n      });\n      \n      // Remover a trilha de vídeo\n      const tabAudioTrack = tabStream.getAudioTracks()[0];\n      \n      // Solicitar acesso ao microfone\n      const micStream = await navigator.mediaDevices.getUserMedia({ audio: true });\n      const micAudioTrack = micStream.getAudioTracks()[0];\n      \n      // Criar um novo MediaStream com ambas as trilhas de áudio\n      combinedStream = new MediaStream([tabAudioTrack, micAudioTrack]);\n      \n      // Criar um contexto de áudio para misturar os streams\n      audioContext = new AudioContext();\n      const destination = audioContext.createMediaStreamDestination();\n      \n      // Conectar a trilha de áudio da guia\n      const tabSource = audioContext.createMediaStreamSource(new MediaStream([tabAudioTrack]));\n      tabSource.connect(destination);\n      \n      // Conectar a trilha de áudio do microfone\n      const micSource = audioContext.createMediaStreamSource(new MediaStream([micAudioTrack]));\n      micSource.connect(destination);\n      \n      // Iniciar gravação com o stream misturado\n      mediaRecorder = new MediaRecorder(destination.stream);\n      audioChunks = [];\n      mediaRecorder.ondataavailable = (e) => audioChunks.push(e.data);\n      mediaRecorder.start();\n      \n      console.log('Gravação iniciada. Chame meetingCaptureStop() para finalizar.');\n    } catch (error) {\n      console.error('Erro ao iniciar a captura:', error);\n    }\n  };\n  \n  window.meetingCaptureStop = function() {\n    return new Promise((resolve, reject) => {\n      if (!mediaRecorder) {\n        reject('Nenhuma gravação em andamento.');\n        return;\n      }\n      \n      mediaRecorder.onstop = () => {\n        const audioBlob = new Blob(audioChunks, { type: 'audio/webm' });\n        combinedStream.getTracks().forEach(track => track.stop());\n        audioContext.close();\n        \n        resolve(audioBlob);\n        console.log('Gravação finalizada. O arquivo de áudio está pronto para upload.');\n      };\n      \n      mediaRecorder.stop();\n    });\n  };\n})();"}}},"component":"data2-core-web@Script"},{"component":"data2-core-types@Getter","params":{"module":{"params":{},"component":"data2-core-web@Window"},"prop":{"component":"data2-core-primitives@String","params":{"content":"meetingCapture"}}}}]},"component":"data2-core-flow@Series"}},"component":"data2-core-types@ComponentParameter"},"meetingRecordStop":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"public","arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Filename"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Content"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Object"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Options"}},"parameters":{"params":{"fields":{"type":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Mimetype"}}}}}},"component":"data2-core-types@FieldSet"}}}],"definition":{"params":{"actions":[{"component":"data2-core-types@Getter","params":{"module":{"params":{},"component":"data2-core-web@Window"},"prop":{"component":"data2-core-primitives@String","params":{"content":"meetingCaptureStop"}}}}]},"component":"data2-core-flow@Series"}},"component":"data2-core-types@ComponentParameter"},"notify":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"private","arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":"data2-core-primitives@Object","parameters":{"title":{"params":{"component":"data2-core-primitives@String","index":{"component":"data2-core-primitives@Number","params":{"content":0}},"title":{"component":"data2-core-primitives@String","params":{"content":"title"}}},"component":"data2-core-types@ComponentParameter"},"sound":{"params":{"component":"data2-core-types@FileComponentUrlReference","index":{"component":"data2-core-primitives@Number","params":{"content":1}},"title":{"component":"data2-core-primitives@String","params":{"content":"sound"}}},"component":"data2-core-types@ComponentParameter"}},"flat":{"component":"data2-core-primitives@Boolean","params":{"content":true}}}}]},"component":"data2-core-types@ComponentParameter"}}},"component":"data2-core-types@FieldSet"}}},{"_id":"6a900eee104245c77f31beb1","component":"data2-core-types@Component","system":"6a7ca6cb11f8a5ec77c18b42","params":{"extends":"data2-core-primitives@Block","component":"cubbo-picking-station","package":"cubbo-app","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"const GATE_PASSWORD = 'democubodata2';\nconst DRIVE_REF = 'JYUlmIJ1l58RmOJo0q161';\n\nconst LOGO_SVG = (color, h) => `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 91 32\" height=\"${h}\" style=\"color:${color}\"><path d=\"M56.6655 8.91406C57.5045 8.91406 58.2671 8.91406 59.106 8.91406C59.106 8.99025 59.106 9.14263 59.106 9.21882C59.106 10.6664 59.106 12.1141 59.106 13.6379C59.106 13.7141 59.106 13.7903 59.106 13.9426C59.1823 13.8664 59.2586 13.8664 59.2586 13.7903C59.945 13.0283 60.8601 12.6474 61.8516 12.5712C62.6905 12.495 63.5294 12.6474 64.2921 13.0283C65.5124 13.7141 66.4275 14.7807 66.8089 16.1522C67.1902 17.5998 67.1139 18.9712 66.3513 20.2664C65.7412 21.3331 64.9022 22.1712 63.682 22.5522C62.7668 22.8569 61.8516 22.8569 60.9364 22.5522C60.3263 22.3998 59.7924 22.0188 59.3348 21.5617C59.2586 21.4855 59.2586 21.4093 59.106 21.3331C59.0298 21.7141 59.106 22.095 59.106 22.476C58.2671 22.476 57.5045 22.476 56.6655 22.476C56.6655 18.0569 56.6655 13.4855 56.6655 8.91406ZM61.9279 20.495C62.6905 20.495 63.4532 20.1903 63.987 19.4283C64.3684 18.895 64.5209 18.2093 64.5209 17.5236C64.5209 16.9141 64.2921 16.3807 63.9108 15.9236C63.3007 15.1617 62.4617 14.8569 61.5465 15.0093C60.4788 15.0855 59.5636 15.8474 59.2586 16.9141C59.1823 17.295 59.106 17.676 59.1823 18.1331C59.3348 19.5045 60.4025 20.495 61.9279 20.495Z\" fill=\"currentColor\"/><path d=\"M68.8682 8.91406C69.6308 8.91406 70.4697 8.91406 71.3087 8.91406C71.3087 9.14263 71.3087 9.4474 71.3087 9.75216C71.3087 10.0569 71.3087 10.2855 71.3087 10.5903C71.3087 10.895 71.3087 11.1236 71.3087 11.4283C71.3087 11.7331 71.3087 11.9617 71.3087 12.2664C71.3087 12.5712 71.3087 12.7998 71.3087 13.1045C71.3087 13.4093 71.3087 13.6379 71.3087 13.9426C71.3849 13.8664 71.4612 13.7903 71.4612 13.7903C72.1476 13.0283 72.9865 12.6474 74.0542 12.5712C74.8932 12.495 75.7321 12.6474 76.4947 13.0283C77.9438 13.7903 78.7827 15.0093 79.0878 16.6855C79.3166 17.7522 79.2403 18.895 78.7827 19.8855C78.2489 21.1045 77.4099 22.0188 76.1134 22.5522C74.8932 23.0093 73.6729 23.0093 72.5289 22.3998C72.1476 22.2474 71.8425 21.9426 71.5375 21.6379C71.4612 21.5617 71.4612 21.5617 71.3087 21.4093C71.3087 21.7903 71.3087 22.1712 71.3087 22.476C71.0799 22.5522 69.3258 22.5522 68.8682 22.476C68.8682 22.3998 68.8682 9.21882 68.8682 8.91406ZM76.7235 17.676C76.7235 16.9903 76.4947 16.3045 75.9609 15.7712C75.427 15.2379 74.7406 14.9331 73.978 15.0093C73.2916 15.0093 72.6815 15.2379 72.1476 15.695C71.1561 16.6093 71.0799 18.2093 71.6137 19.1998C72.0713 20.0379 72.834 20.495 73.8254 20.5712C74.5118 20.6474 75.1982 20.4188 75.7321 19.9617C76.4185 19.3522 76.7235 18.5903 76.7235 17.676Z\" fill=\"currentColor\"/><path d=\"M43.7765 11.8858C43.0139 12.3429 42.2512 12.8001 41.4885 13.181C41.4885 13.1048 41.4123 13.1048 41.4123 13.1048C40.8021 12.1144 39.9632 11.581 38.8955 11.3525C37.904 11.1239 36.9126 11.2001 35.9974 11.6572C34.9297 12.1905 34.167 13.0286 33.7857 14.1715C33.4806 15.2382 33.4044 16.3048 33.7857 17.3715C34.3195 19.0477 35.5398 19.962 37.2939 20.1905C38.1328 20.2667 38.9718 20.1905 39.7344 19.8858C40.4208 19.581 41.0309 19.1239 41.4123 18.4382C41.4123 18.362 41.4885 18.362 41.4885 18.2858C42.2512 18.7429 43.0139 19.1239 43.7765 19.581C43.7002 19.6572 43.7002 19.7334 43.624 19.8096C42.7851 21.1048 41.5648 22.0191 40.0395 22.4763C38.0566 23.0858 36.1499 22.9334 34.3958 21.9429C32.4892 20.8763 31.3452 19.2001 30.9639 16.9905C30.7351 15.6191 30.8113 14.2477 31.4214 12.9525C32.4129 10.6667 34.0908 9.29531 36.5313 8.76198C38.0566 8.45721 39.5819 8.60959 40.9547 9.29531C42.0224 9.82864 42.9376 10.5905 43.624 11.581C43.624 11.6572 43.7002 11.7334 43.7765 11.8858Z\" fill=\"currentColor\"/><path d=\"M90.7561 17.7523C90.7561 20.6475 88.4682 22.9332 85.5701 22.857C82.7482 22.857 80.4603 20.4951 80.5365 17.5999C80.5365 14.7808 82.9008 12.4951 85.7226 12.4951C88.3919 12.5713 90.7561 14.857 90.7561 17.7523ZM88.2394 17.7523C88.2394 17.1427 88.0868 16.6094 87.7818 16.1523C87.1716 15.3142 86.409 15.0094 85.4175 15.0094C84.5023 15.0856 83.8159 15.4665 83.2821 16.3046C82.977 16.838 82.9008 17.4475 82.977 18.057C83.2058 20.1904 85.4175 21.0285 86.9428 20.1142C87.858 19.5808 88.2394 18.7427 88.2394 17.7523Z\" fill=\"currentColor\"/><path d=\"M47.8186 12.876C47.8186 13.0284 47.8186 13.1046 47.8186 13.1808C47.8186 14.9332 47.8186 16.6855 47.8186 18.3617C47.8186 18.5903 47.8186 18.8951 47.8949 19.1236C48.0474 19.9617 48.6575 20.4951 49.5727 20.4951C49.8778 20.4951 50.1829 20.4951 50.4117 20.4189C51.1743 20.2665 51.6319 19.7332 51.7844 18.9713C51.8607 18.6665 51.8607 18.2855 51.8607 17.9808C51.8607 16.3808 51.8607 14.7808 51.8607 13.1046C51.8607 13.0284 51.8607 12.876 51.8607 12.7998C52.0132 12.7236 53.9199 12.7236 54.3012 12.7998C54.3775 12.9522 54.3775 22.1713 54.3012 22.476C54.1487 22.5522 52.1658 22.5522 51.8607 22.476C51.8607 22.1713 51.8607 21.7903 51.8607 21.4093C51.7844 21.4855 51.7082 21.5617 51.7082 21.5617C51.1743 22.2474 50.4879 22.5522 49.5727 22.7046C48.9626 22.7808 48.3525 22.7808 47.7424 22.5522C46.5221 22.1713 45.7594 21.257 45.3781 20.0379C45.3019 19.657 45.2256 19.1998 45.2256 18.8189C45.2256 16.8379 45.2256 14.9332 45.2256 12.9522C45.2256 12.876 45.2256 12.7998 45.2256 12.7236C46.1408 12.876 46.9797 12.876 47.8186 12.876Z\" fill=\"currentColor\"/><path d=\"M12.8892 21.2572V31.5429L25.3968 26.0572V15.8477L12.8892 21.2572Z\" fill=\"currentColor\"/><path d=\"M12.2788 0.0761719L0 5.4857V15.7714L12.2788 10.2857V0.0761719Z\" fill=\"currentColor\"/><path d=\"M12.8892 0V10.2857L20.5157 13.4095V3.27619L12.8892 0Z\" fill=\"currentColor\"/><path d=\"M12.2788 21.2572L0 15.8477V26.1334L12.2788 31.6191V21.2572Z\" fill=\"currentColor\"/></svg>`;\n\nconst FIRST_NAMES = ['Ana','Beatriz','Camila','Daniela','Eduarda','Fernanda','Gabriela','Helena','Isabela','Juliana','Larissa','Mariana','Natalia','Patricia','Rafaela','Sofia','Tatiane','Valentina','Bruno','Carlos','Diego','Eduardo','Felipe','Gustavo','Henrique','Igor','Joao','Lucas','Marcelo','Rafael'];\nconst LAST_NAMES = ['Silva','Souza','Oliveira','Santos','Pereira','Costa','Rodrigues','Almeida','Nascimento','Lima','Araujo','Fernandes','Carvalho','Gomes','Martins','Rocha','Ribeiro','Barbosa','Cardoso','Teixeira'];\nconst CITIES = [['Sao Paulo','SP'],['Rio de Janeiro','RJ'],['Belo Horizonte','MG'],['Curitiba','PR'],['Porto Alegre','RS'],['Salvador','BA'],['Recife','PE'],['Fortaleza','CE'],['Brasilia','DF'],['Campinas','SP']];\nconst PRODUCTS = [\n  { sku: 'NAT-3311', name: 'Perfume Essencial Feminino 100ml' },\n  { sku: 'NAT-2207', name: 'Creme Hidratante Corporal Tododia' },\n  { sku: 'NAT-4410', name: 'Shampoo Ekos Castanha 300ml' },\n  { sku: 'NAT-5521', name: 'Batom Matte Una' },\n  { sku: 'NAT-1180', name: 'Desodorante Aerosol Luna' },\n  { sku: 'NAT-6690', name: 'Sabonete Liquido Tododia Flor de Lis' },\n  { sku: 'NAT-7702', name: 'Protetor Solar Facial Chronos FPS60' },\n  { sku: 'NAT-8813', name: 'Kit Presente Essencial Elixir' },\n  { sku: 'NAT-9924', name: 'Oleo Corporal Ekos Andiroba' },\n  { sku: 'NAT-1035', name: 'Mascara Capilar Lumina' },\n];\nconst STREETS = ['Rua das Palmeiras','Av. Paulista','Rua Augusta','Rua Oscar Freire','Av. Brasil','Rua XV de Novembro','Rua das Flores','Av. Atlantica','Rua Sete de Setembro','Rua Barao do Rio Branco'];\nconst CARRIERS = ['Cubbo Last Mile','Jadlog Expresso','Correios PAC','Loggi'];\n\nfunction hashStr(s) {\n  let h = 2166136261;\n  for (let i = 0; i < s.length; i++) { h ^= s.charCodeAt(i); h = Math.imul(h, 16777619); }\n  return h >>> 0;\n}\nfunction mulberry32(seed) {\n  return function () {\n    seed |= 0; seed = (seed + 0x6D2B79F5) | 0;\n    let t = Math.imul(seed ^ (seed >>> 15), 1 | seed);\n    t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n  };\n}\nfunction generateOrder(code) {\n  const seed = hashStr(code);\n  const rand = mulberry32(seed);\n  const pick = (arr) => arr[Math.floor(rand() * arr.length)];\n  const first = pick(FIRST_NAMES), last1 = pick(LAST_NAMES), last2 = pick(LAST_NAMES);\n  const customerName = `${first} ${last1} ${last2}`;\n  const [city, state] = pick(CITIES);\n  const numItems = 1 + Math.floor(rand() * 3);\n  const items = [];\n  let qtyTotal = 0;\n  for (let i = 0; i < numItems; i++) {\n    const p = pick(PRODUCTS);\n    const qty = 1 + Math.floor(rand() * 2);\n    items.push({ sku: p.sku, name: p.name, qty });\n    qtyTotal += qty;\n  }\n  const orderCode = 'NAT-' + (100000 + (seed % 900000));\n  const customerCode = 'CLI-' + (10000 + (Math.floor(seed / 7) % 90000));\n  const declaredWeightKg = Math.round((qtyTotal * 0.18 + rand() * 0.25 + 0.15) * 100) / 100;\n  const phone = `(11) 9${String(1000 + (seed % 9000)).padStart(4, '0')}-${String(1000 + (Math.floor(seed / 13) % 9000)).padStart(4, '0')}`;\n  const email = `${first}.${last1}@example.com`.toLowerCase();\n  const address = `${pick(STREETS)}, ${100 + (seed % 900)}`;\n  const carrier = pick(CARRIERS);\n  const now = new Date();\n  const receivedAt = new Date(now.getTime() - (2 + Math.floor(rand() * 4)) * 3600 * 1000).toISOString();\n  return {\n    boxCode: code, orderCode, customerCode, customerName, customerEmail: email, customerPhone: phone,\n    shippingAddress: address, city, state, items, itemsCount: qtyTotal, declaredWeightKg, carrier,\n    trackingEvents: [{ status: 'Pedido recebido no CD Cubbo', location: 'CD Cubbo — Cajamar/SP', timestamp: receivedAt }],\n  };\n}\nfunction fmtDateTime(iso) {\n  try { return new Date(iso).toLocaleString('pt-BR'); } catch (e) { return iso; }\n}\nfunction esc(s) {\n  return String(s == null ? '' : s).replace(/[&<>\"']/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[c]));\n}\n\nexport default {\n  css: `\n    :host { display:block; height:100%; width:100%; font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Inter,Roboto,sans-serif; }\n    .app { height:100%; width:100%; background:#F4F5FA; display:flex; flex-direction:column; }\n    .topbar { background:#0B1120; color:#fff; padding:14px 24px; display:flex; align-items:center; justify-content:space-between; flex-shrink:0; }\n    .topbar-left { display:flex; align-items:center; gap:14px; }\n    .topbar-title { font-size:14px; font-weight:600; color:#C7CBE0; letter-spacing:.02em; border-left:1px solid #2A2F45; padding-left:14px; }\n    .operator-badge { font-size:12px; color:#9CA3D4; background:#161B2E; border:1px solid #262B45; padding:5px 12px; border-radius:999px; }\n    .gate-wrap { flex:1; display:flex; align-items:center; justify-content:center; padding:24px; }\n    .gate-card { background:#fff; border:1px solid #E4E6F0; border-radius:16px; padding:40px; width:100%; max-width:380px; text-align:center; }\n    .logo-chip { display:inline-flex; align-items:center; justify-content:center; background:#0B1120; border-radius:10px; padding:10px 16px; }\n    .gate-card input { width:100%; box-sizing:border-box; padding:12px 14px; border-radius:10px; border:1px solid #D6D9EA; font-size:15px; margin-top:18px; text-align:center; letter-spacing:.05em; }\n    .gate-card input:focus { outline:none; border-color:#4338CA; }\n    .btn { background:#4338CA; color:#fff; border:none; border-radius:10px; padding:12px 20px; font-size:14px; font-weight:600; cursor:pointer; }\n    .btn:hover { background:#3730A3; }\n    .btn:disabled { background:#C7CBE0; cursor:not-allowed; }\n    .btn-secondary { background:#fff; color:#4338CA; border:1px solid #4338CA; }\n    .btn-secondary:hover { background:#EEF0FE; }\n    .gate-error { color:#DC2626; font-size:13px; margin-top:10px; min-height:16px; }\n    .main { flex:1; display:grid; grid-template-columns:1fr 380px; gap:0; overflow:hidden; }\n    .video-pane { background:#000; position:relative; display:flex; align-items:center; justify-content:center; overflow:hidden; }\n    .video-pane video { display:none; }\n    .video-pane canvas { width:100%; height:100%; object-fit:cover; display:block; }\n    .video-hint { position:absolute; bottom:20px; left:50%; transform:translateX(-50%); background:rgba(11,17,32,.75); color:#fff; padding:8px 16px; border-radius:999px; font-size:13px; }\n    .side { background:#fff; border-left:1px solid #E4E6F0; padding:24px; overflow-y:auto; display:flex; flex-direction:column; gap:16px; }\n    .side h3 { margin:0; font-size:13px; text-transform:uppercase; letter-spacing:.06em; color:#8B8FA8; }\n    .field label { display:block; font-size:12px; color:#5B5F78; margin-bottom:6px; font-weight:600; }\n    .field input { width:100%; box-sizing:border-box; padding:10px 12px; border-radius:8px; border:1px solid #D6D9EA; font-size:14px; }\n    .field input:focus { outline:none; border-color:#4338CA; }\n    .manual-row { display:flex; gap:8px; }\n    .manual-row input { flex:1; }\n    .divider { height:1px; background:#EEF0F5; margin:4px 0; }\n    .spinner { width:28px; height:28px; border-radius:50%; border:3px solid #E4E6F0; border-top-color:#4338CA; animation:spin 0.8s linear infinite; margin:0 auto; }\n    @keyframes spin { to { transform:rotate(360deg); } }\n    .center-msg { text-align:center; color:#5B5F78; font-size:13px; padding:20px 0; }\n    .order-card { background:#F8F8FC; border:1px solid #E4E6F0; border-radius:12px; padding:16px; }\n    .order-card .name { font-size:15px; font-weight:700; color:#0B1120; }\n    .order-card .code { font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:12px; color:#4338CA; margin-top:2px; }\n    .order-card .meta { font-size:12.5px; color:#5B5F78; margin-top:8px; line-height:1.6; }\n    .items-list { font-size:12.5px; color:#333750; margin-top:8px; padding-left:16px; }\n    .weight-box { background:#0B1120; border-radius:12px; padding:18px; text-align:center; }\n    .weight-box .lbl { font-size:11px; color:#9CA3D4; text-transform:uppercase; letter-spacing:.08em; }\n    .weight-box .val { font-size:34px; font-weight:800; color:#fff; margin:4px 0; font-variant-numeric:tabular-nums; }\n    .weight-box input[type=range] { width:100%; margin-top:10px; accent-color:#818CF8; }\n    .status-chip { display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:600; padding:5px 10px; border-radius:999px; }\n    .status-chip.rec { background:#FEE2E2; color:#B91C1C; }\n    .status-chip.ok { background:#DCFCE7; color:#15803D; }\n    .dot { width:7px; height:7px; border-radius:50%; background:currentColor; }\n    .rec-pulse { animation:pulse 1.2s ease-in-out infinite; }\n    @keyframes pulse { 0%,100%{opacity:1} 50%{opacity:.35} }\n    .done-card { text-align:center; padding:12px 0; }\n    .done-card .check { width:52px; height:52px; border-radius:50%; background:#DCFCE7; color:#15803D; display:flex; align-items:center; justify-content:center; margin:0 auto 12px; font-size:26px; }\n    .link-row { margin-top:14px; }\n    .link-row a { color:#4338CA; font-size:13px; font-weight:600; text-decoration:none; }\n    .link-row a:hover { text-decoration:underline; }\n    .err-box { background:#FEF2F2; border:1px solid #FCA5A5; color:#B91C1C; border-radius:10px; padding:12px; font-size:13px; }\n  `,\n  render(d2) {\n    const s = d2.state;\n    if (!s.unlocked) {\n      return `\n        <div class=\"app\">\n          <div class=\"gate-wrap\">\n            <div class=\"gate-card\">\n              <div class=\"logo-chip\">${LOGO_SVG('#fff', 26)}</div>\n              <div style=\"margin-top:14px;font-size:14px;color:#5B5F78;\">Estacao de Picking &mdash; acesso restrito</div>\n              <input class=\"js-gate-input\" type=\"password\" placeholder=\"Senha de acesso\" />\n              <div class=\"gate-error\">${esc(s.gateError || '')}</div>\n              <div style=\"margin-top:6px;\"><button class=\"btn js-gate-submit\" style=\"width:100%;\">Entrar</button></div>\n            </div>\n          </div>\n        </div>`;\n    }\n\n    const stage = s.stage || 'idle';\n    let sidePanel = '';\n\n    if (stage === 'idle') {\n      sidePanel = `\n        <h3>Operador</h3>\n        <div class=\"field\"><label>Nome do operador</label><input class=\"js-operator-input\" type=\"text\" placeholder=\"Digite seu nome\" value=\"${esc(s.operatorName || '')}\" /></div>\n        <div class=\"divider\"></div>\n        <h3>Leitura da caixa</h3>\n        <div class=\"center-msg\">Aponte a camera para o codigo de barras da caixa. A leitura inicia o picking automaticamente.</div>\n        <div class=\"manual-row\">\n          <input class=\"js-manual-code\" type=\"text\" placeholder=\"ou digite o codigo manualmente\" />\n          <button class=\"btn btn-secondary js-manual-scan\">Ler</button>\n        </div>\n        ${s.cameraError ? `<div class=\"err-box\">${esc(s.cameraError)}</div>` : ''}\n      `;\n    } else if (stage === 'looking-up') {\n      sidePanel = `<div class=\"spinner\"></div><div class=\"center-msg\">Consultando pedido na Natura...</div>`;\n    } else if (stage === 'recording' || stage === 'order-found') {\n      const o = s.order || {};\n      const itemsHtml = (o.items || []).map((it) => `<li>${it.qty}x ${esc(it.name)}</li>`).join('');\n      sidePanel = `\n        <div class=\"status-chip rec\"><span class=\"dot rec-pulse\"></span> GRAVANDO</div>\n        <div class=\"order-card\">\n          <div class=\"name\">${esc(o.customerName)}</div>\n          <div class=\"code\">${esc(o.orderCode)} &middot; caixa ${esc(o.boxCode)}</div>\n          <div class=\"meta\">${esc(o.shippingAddress)}<br/>${esc(o.city)}/${esc(o.state)} &middot; ${esc(o.carrier)}</div>\n          <ul class=\"items-list\">${itemsHtml}</ul>\n        </div>\n        <div class=\"weight-box\">\n          <div class=\"lbl\">Peso da balanca</div>\n          <div class=\"val\"><span class=\"js-weight-display\">0.00</span> kg</div>\n          <input class=\"js-weight-slider\" type=\"range\" min=\"0\" max=\"5\" step=\"0.05\" value=\"0\" />\n        </div>\n        <button class=\"btn js-finish-btn\" style=\"width:100%;\">Finalizar Picking</button>\n      `;\n    } else if (stage === 'uploading') {\n      sidePanel = `<div class=\"spinner\"></div><div class=\"center-msg\">Enviando video e salvando o registro...</div>`;\n    } else if (stage === 'done') {\n      sidePanel = `\n        <div class=\"done-card\">\n          <div class=\"check\">&#10003;</div>\n          <div style=\"font-weight:700;font-size:15px;\">Picking registrado</div>\n          <div class=\"center-msg\" style=\"margin-top:4px;\">Caixa ${esc(s.order && s.order.boxCode)} &middot; ${esc(s.order && s.order.orderCode)}</div>\n          <div class=\"link-row\">${s.lastVideoUrl ? `<a href=\"${esc(s.lastVideoUrl)}\" target=\"_blank\" rel=\"noopener\">Abrir video no Drive &rarr;</a>` : '<span style=\"font-size:12px;color:#8B8FA8;\">Video local (drive indisponivel no momento)</span>'}</div>\n        </div>\n        <button class=\"btn btn-secondary js-reset-btn\" style=\"width:100%;\">Novo Picking</button>\n      `;\n    } else if (stage === 'error') {\n      sidePanel = `<div class=\"err-box\">${esc(s.errorMsg || 'Ocorreu um erro.')}</div><button class=\"btn btn-secondary js-reset-btn\" style=\"width:100%;margin-top:10px;\">Tentar novamente</button>`;\n    }\n\n    return `\n      <div class=\"app\">\n        <div class=\"topbar\">\n          <div class=\"topbar-left\">\n            ${LOGO_SVG('#fff', 22)}\n            <div class=\"topbar-title\">Estacao de Picking</div>\n          </div>\n          ${s.operatorName ? `<div class=\"operator-badge\">${esc(s.operatorName)}</div>` : ''}\n        </div>\n        <div class=\"main\">\n          <div class=\"video-pane\" data-d2-static>\n            <video class=\"js-video\" autoplay playsinline muted></video>\n            <canvas class=\"js-canvas\"></canvas>\n            ${stage === 'idle' || stage === 'looking-up' ? '<div class=\"video-hint\">Aguardando leitura da caixa...</div>' : ''}\n          </div>\n          <div class=\"side\">${sidePanel}</div>\n        </div>\n      </div>\n    `;\n  },\n  mounted(d2, root) {\n    let cameraInitialized = false;\n    let stream = null;\n    let currentWeight = 0;\n    let recordingActive = false;\n    let recordingStartedAtIso = null;\n    let recordingStartedAtMs = 0;\n    let elapsedInterval = null;\n    let mediaRecorder = null;\n    let chunks = [];\n    let mimeType = 'video/webm';\n    let currentOrder = null;\n\n    d2.on('.js-operator-input', 'change', (e) => { d2.setState({ operatorName: e.target.value }); });\n\n    function drawLoop() {\n      const videoEl = d2.$('.js-video');\n      const canvasEl = d2.$('.js-canvas');\n      if (videoEl && canvasEl && videoEl.videoWidth) {\n        if (canvasEl.width !== videoEl.videoWidth) {\n          canvasEl.width = videoEl.videoWidth;\n          canvasEl.height = videoEl.videoHeight;\n        }\n        const ctx = canvasEl.getContext('2d');\n        ctx.drawImage(videoEl, 0, 0, canvasEl.width, canvasEl.height);\n\n        if (recordingActive) {\n          const w = canvasEl.width, h = canvasEl.height;\n          const pad = Math.max(16, w * 0.02);\n          const bw = w * 0.26, bh = h * 0.16;\n          ctx.fillStyle = 'rgba(11,17,32,0.72)';\n          roundRect(ctx, pad, h - bh - pad, bw, bh, 12);\n          ctx.fill();\n          ctx.fillStyle = '#9CA3D4';\n          ctx.font = `${Math.max(11, bh * 0.14)}px sans-serif`;\n          ctx.fillText('PESO DA BALANCA', pad + 14, h - bh - pad + bh * 0.28);\n          ctx.fillStyle = '#fff';\n          ctx.font = `bold ${Math.max(20, bh * 0.42)}px sans-serif`;\n          ctx.fillText(`${currentWeight.toFixed(2)} kg`, pad + 14, h - bh - pad + bh * 0.75);\n\n          const elapsed = Math.max(0, Math.floor((Date.now() - recordingStartedAtMs) / 1000));\n          const mm = String(Math.floor(elapsed / 60)).padStart(2, '0');\n          const ss = String(elapsed % 60).padStart(2, '0');\n          ctx.fillStyle = 'rgba(11,17,32,0.72)';\n          roundRect(ctx, pad, pad, w * 0.22, h * 0.07, 10);\n          ctx.fill();\n          ctx.fillStyle = '#EF4444';\n          ctx.beginPath();\n          ctx.arc(pad + 16, pad + (h * 0.07) / 2, 6, 0, Math.PI * 2);\n          ctx.fill();\n          ctx.fillStyle = '#fff';\n          ctx.font = `bold ${Math.max(13, h * 0.03)}px sans-serif`;\n          ctx.fillText(`REC ${mm}:${ss}`, pad + 30, pad + (h * 0.07) / 2 + 5);\n\n          if (currentOrder) {\n            const label = `${currentOrder.boxCode} · ${currentOrder.orderCode}`;\n            ctx.font = `${Math.max(12, h * 0.025)}px monospace`;\n            const tw = ctx.measureText(label).width;\n            ctx.fillStyle = 'rgba(11,17,32,0.72)';\n            roundRect(ctx, w - tw - pad - 24, pad, tw + 24, h * 0.055, 8);\n            ctx.fill();\n            ctx.fillStyle = '#fff';\n            ctx.fillText(label, w - tw - pad - 12, pad + (h * 0.055) * 0.68);\n          }\n        }\n      }\n      return true;\n    }\n    function roundRect(ctx, x, y, w, h, r) {\n      ctx.beginPath();\n      ctx.moveTo(x + r, y);\n      ctx.arcTo(x + w, y, x + w, y + h, r);\n      ctx.arcTo(x + w, y + h, x, y + h, r);\n      ctx.arcTo(x, y + h, x, y, r);\n      ctx.arcTo(x, y, x + w, y, r);\n      ctx.closePath();\n    }\n\n    let detectInterval = null;\n    let detector = null;\n\n    async function initCamera() {\n      if (cameraInitialized) return;\n      cameraInitialized = true;\n      try {\n        stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' }, audio: false });\n      } catch (e1) {\n        try { stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: false }); }\n        catch (e2) { d2.setState({ cameraError: 'Nao foi possivel acessar a camera: ' + (e2 && e2.message ? e2.message : e2) }); return; }\n      }\n      const videoEl = d2.$('.js-video');\n      if (videoEl) { videoEl.srcObject = stream; await videoEl.play().catch(() => {}); }\n      d2.raf(drawLoop);\n\n      if ('BarcodeDetector' in window) {\n        try {\n          detector = new window.BarcodeDetector({ formats: ['qr_code', 'code_128', 'ean_13', 'ean_8', 'code_39', 'upc_a', 'upc_e'] });\n        } catch (e) { detector = null; }\n      }\n      if (detector) {\n        detectInterval = setInterval(async () => {\n          if (recordingActive) return;\n          const videoEl2 = d2.$('.js-video');\n          if (!videoEl2 || !videoEl2.videoWidth) return;\n          try {\n            const codes = await detector.detect(videoEl2);\n            if (codes && codes.length) onScanned(codes[0].rawValue);\n          } catch (e) { /* ignore transient detect errors */ }\n        }, 450);\n      }\n      d2.onUnmount(() => {\n        if (detectInterval) clearInterval(detectInterval);\n        if (elapsedInterval) clearInterval(elapsedInterval);\n        if (stream) stream.getTracks().forEach((t) => t.stop());\n        if (mediaRecorder && mediaRecorder.state === 'recording') mediaRecorder.stop();\n      });\n    }\n\n    async function onScanned(code) {\n      const operatorName = (d2.$('.js-operator-input') && d2.$('.js-operator-input').value) || d2.state.operatorName;\n      if (!operatorName) { d2.setState({ cameraError: 'Informe o nome do operador antes de escanear.' }); return; }\n      d2.setState({ operatorName, stage: 'looking-up', cameraError: '' });\n      try {\n        const generated = generateOrder(code);\n        const res = await d2.rush('cubbo-order-lookup').invoke({ body: generated });\n        const order = res && res.data ? res.data : generated;\n        currentOrder = order;\n        startRecording(order);\n      } catch (e) {\n        d2.setState({ stage: 'error', errorMsg: 'Falha ao consultar o pedido: ' + (e && e.message ? e.message : e) });\n      }\n    }\n\n    function startRecording(order) {\n      currentWeight = 0;\n      recordingActive = true;\n      recordingStartedAtMs = Date.now();\n      recordingStartedAtIso = new Date().toISOString();\n      chunks = [];\n      const canvasEl = d2.$('.js-canvas');\n      const canvasStream = canvasEl.captureStream(30);\n      mimeType = (window.MediaRecorder && MediaRecorder.isTypeSupported('video/webm;codecs=vp9')) ? 'video/webm;codecs=vp9' : 'video/webm';\n      try {\n        mediaRecorder = new MediaRecorder(canvasStream, { mimeType });\n      } catch (e) {\n        mediaRecorder = new MediaRecorder(canvasStream);\n      }\n      mediaRecorder.ondataavailable = (e) => { if (e.data && e.data.size > 0) chunks.push(e.data); };\n      mediaRecorder.start(1000);\n      d2.setState({ stage: 'recording', order });\n\n      setTimeout(() => {\n        const slider = d2.$('.js-weight-slider');\n        const display = d2.$('.js-weight-display');\n        if (slider) {\n          slider.addEventListener('input', () => {\n            currentWeight = parseFloat(slider.value) || 0;\n            if (display) display.textContent = currentWeight.toFixed(2);\n          });\n        }\n      }, 50);\n    }\n\n    d2.on('.js-manual-scan', 'click', () => {\n      const el = d2.$('.js-manual-code');\n      const val = el && el.value.trim();\n      if (val) onScanned(val);\n    });\n    d2.on('.js-manual-code', 'keydown', (e) => { if (e.key === 'Enter') d2.$('.js-manual-scan').click(); });\n\n    d2.on('.js-finish-btn', 'click', () => {\n      recordingActive = false;\n      d2.setState({ stage: 'uploading' });\n      if (!mediaRecorder) return;\n      mediaRecorder.onstop = async () => {\n        try {\n          const blob = new Blob(chunks, { type: mimeType });\n          const finishedAt = new Date().toISOString();\n          const durationSec = Math.max(1, Math.round((Date.now() - recordingStartedAtMs) / 1000));\n          let videoUrl = '';\n          try {\n            const file = new File([blob], `picking-${currentOrder.boxCode}-${Date.now()}.webm`, { type: mimeType });\n            const uploaded = await d2.drive(DRIVE_REF).uploadFromFiles([file]);\n            videoUrl = (uploaded && uploaded[0] && uploaded[0].fileUrl) || '';\n          } catch (driveErr) {\n            videoUrl = '';\n          }\n          const newEvents = (currentOrder.trackingEvents || []).concat([\n            { status: 'Separado e embalado', location: 'CD Cubbo — Cajamar/SP', timestamp: finishedAt },\n            { status: 'Coletado pela transportadora', location: 'CD Cubbo — Cajamar/SP', timestamp: new Date(Date.now() + 40 * 60000).toISOString() },\n            { status: 'Em rota de entrega', location: `${currentOrder.city}/${currentOrder.state}`, timestamp: new Date(Date.now() + 180 * 60000).toISOString() },\n          ]);\n          const res = await d2.rush('cubbo-picking-finish').invoke({\n            body: {\n              boxCode: currentOrder.boxCode, orderCode: currentOrder.orderCode, customerCode: currentOrder.customerCode,\n              operatorName: d2.state.operatorName, measuredWeightKg: currentWeight, videoUrl,\n              startedAt: recordingStartedAtIso, finishedAt, durationSec, trackingEvents: newEvents,\n            },\n          });\n          d2.setState({ stage: 'done', lastVideoUrl: videoUrl, lastRecordId: res && res.data && res.data.recordId });\n        } catch (e) {\n          d2.setState({ stage: 'error', errorMsg: 'Falha ao finalizar o picking: ' + (e && e.message ? e.message : e) });\n        }\n      };\n      mediaRecorder.stop();\n    });\n\n    d2.on('.js-reset-btn', 'click', () => {\n      currentOrder = null;\n      d2.setState({ stage: 'idle', order: null, lastVideoUrl: '', errorMsg: '', cameraError: '' });\n    });\n\n    d2.on('.js-gate-submit', 'click', () => {\n      const val = d2.$('.js-gate-input') ? d2.$('.js-gate-input').value : '';\n      if (val === GATE_PASSWORD) {\n        sessionStorage.setItem('cubboGateOk', '1');\n        d2.setState({ unlocked: true, stage: 'idle', gateError: '' });\n        setTimeout(() => initCamera(), 0);\n      } else {\n        d2.setState({ gateError: 'Senha incorreta.' });\n      }\n    });\n    d2.on('.js-gate-input', 'keydown', (e) => { if (e.key === 'Enter') d2.$('.js-gate-submit').click(); });\n\n    if (sessionStorage.getItem('cubboGateOk') === '1') {\n      d2.setState({ unlocked: true, stage: 'idle' });\n      setTimeout(() => initCamera(), 0);\n    }\n  },\n};"}}}}}}}}]}},{"reference":"ExternalComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"_id":"5f060d9b1ca96def42f3c40a","displayName":"Builder AuthStrategy","component":"data2-core@AuthenticationStrategy","system":"5e3b796d6228227ca637d0f4","params":{"credentials":[{"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"status"}}],"verifier":{"component":"data2-core-types@DataSetReference","params":{"reference":"UsersDataSet"}},"sessionShared":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"password":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},"email":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},"resetPassword":{"resetEmail":{"artboard":{"params":{"preventEvaluation":true,"reference":"nR6Q9d7qdaPtZhJ28Q8Dy"},"component":"data2-core-types@ArtboardReference"}},"resetSuccessEmail":{"artboard":{"params":{"preventEvaluation":true,"reference":"yPCJBTKo8q1Mw0B_3Kpwl"},"component":"data2-core-types@ArtboardReference"}}},"session":[{"component":"data2-core-types@DataSetColumnReference","params":{"column":"name"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"status"}}],"sessionMetadata":{"params":{"actions":[{"params":{"compare":{"params":{"subject":{"params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},{"params":{"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":"active"}},"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user.status"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is active user"}]},"component":"data2-core-logical-operators@And","displayName":"is active and has _id"}},"component":"data2-core-logical-operators@Not"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check $user"},{"params":{"action":{"params":{"pattern":{"component":"data2-core-primitives@String","params":{"content":"@data2.app"}},"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user.email"}}}}},"component":"data2-core-functions@Includes","displayName":"isData2User"},"resultName":{"component":"data2-core-primitives@String","params":{"content":"is_data2_user"}}},"component":"data2-core-flow@Step"},{"params":{"action":{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.d2_app"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"management"}}]},"component":"data2-core-functions@Includes","displayName":"isData2App Exception"},"resultName":{"component":"data2-core-primitives@String","params":{"content":"is_data2_app_exception"}}},"component":"data2-core-flow@Step"},{"params":{"resultName":{"component":"data2-core-primitives@String","params":{"content":"has_access"}},"action":{"params":{"compare":{"params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_user"}}}},{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_app_exception"}}}}]},"component":"data2-core-logical-operators@Or"},"else":{"params":{"actions":[{"params":{"actions":[{"params":{"compare":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}},"component":"data2-core-logical-operators@Not"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check $metadata.system"},{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":"filter","args":[{"_id":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}}]},"component":"data2-core-types@Interaction"},{"params":{"compare":{"params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records.length"}}}}},"component":"data2-core-logical-operators@Not","displayName":"systems not found"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check system found"},{"params":{"actions":[{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":"filter","args":[{"user":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},"organization":{"component":"data2-core-types@Getter","params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"cursor.current.organization._id"}}}}}]},"component":"data2-core-types@Interaction"},{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":"filter","args":[{"user":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},"system":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}}]},"component":"data2-core-types@Interaction"}]},"component":"data2-core-flow@Parallel"}]},"component":"data2-core-flow@Series","displayName":"common setup"},{"params":{"then":{"params":{"content":true},"component":"data2-core-primitives@Boolean"},"else":{"params":{"content":false},"component":"data2-core-primitives@Boolean"},"compare":{"params":{"components":{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"mapper":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"system"}}],"body":{"params":{"expression":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.visibility"}}}},"defaultCase":{"params":{"content":false},"component":"data2-core-primitives@Boolean"},"cases":[{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-primitives@String","params":{"content":"public"}},"value":{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"owner"}},{"component":"data2-core-primitives@String","params":{"content":"billing-owner"}},{"component":"data2-core-primitives@String","params":{"content":"admin"}},{"component":"data2-core-primitives@String","params":{"content":"member"}}]},"component":"data2-core-functions@Includes","displayName":"has role with access"}]},"component":"data2-core-logical-operators@And","displayName":"has org member role with access"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is org member"},{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":"collaborator"}}},"component":"data2-core-comparison-operators@Equal","displayName":"is collaborator"}]},"component":"data2-core-logical-operators@And","displayName":"is org member and collaborator"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is collaborator"},{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"access"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"access.system._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"has system access"}]},"component":"data2-core-logical-operators@And","displayName":"is collaborator and has system access"}]},"component":"data2-core-logical-operators@Or"}}},{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-primitives@String","params":{"content":"private"}},"value":{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"owner"}},{"component":"data2-core-primitives@String","params":{"content":"admin"}}]},"component":"data2-core-functions@Includes","displayName":"is owner/admin"}]},"component":"data2-core-logical-operators@And","displayName":"has org member role with access"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is owner/admin"},{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is org member"},{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"access"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"access.system._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"has system access"}]},"component":"data2-core-logical-operators@And","displayName":"is member and has system access"}]},"component":"data2-core-logical-operators@Or","displayName":"is owner/admin or has system access"}}}]},"component":"data2-core-flow@Switch"}}}},"component":"data2-core-functions@ArrayMap"}},"component":"data2-core-logical-operators@And","displayName":"has org member for all systems in request"}},"component":"data2-core-flow@If"}]},"component":"data2-core-flow@Series"},"then":{"params":{"content":true},"component":"data2-core-primitives@Boolean"}},"component":"data2-core-flow@If"}},"component":"data2-core-flow@Step"},{"params":{"then":{"system":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}},"else":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"},"compare":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"has_access"}}}}},"component":"data2-core-flow@If"}]},"component":"data2-core-flow@Series"},"sessionExpiresIn":{"component":"data2-core-primitives@Number","params":{"content":604800}},"sessionRenewal":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"identityProviders":[{"provider":{"component":"data2-core-primitives@String","params":{"content":"GOOGLE"}},"clientId":{"component":"data2-core-primitives@String","params":{"content":"55470861603-22pvfc1t49lp8cjnbfk71s5ct9hp1q1v.apps.googleusercontent.com"}}}]},"reference":"Data2BuilderAuthentication","updatedAt":"2026-08-06T19:31:23.557Z"},{"_id":"5f060ee51ca96def42f3fbd1","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"UsersTableDataSource"}},"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":1}}}},"reference":"UsersDataSet","updatedAt":"2026-03-04T21:16:40.291Z"},{"_id":"68f938cf5fb002e33752a43d","displayName":"InternalApplicationsAuthenticationStrategy","component":"data2-core@AuthenticationStrategy","system":"5e3b796d6228227ca637d0f4","params":{"resetPassword":{"resetEmail":{"artboard":{"params":{"preventEvaluation":true},"component":"data2-core-types@ArtboardReference"}},"resetSuccessEmail":{"artboard":{"params":{"preventEvaluation":true},"component":"data2-core-types@ArtboardReference"}}},"verifier":{"disabled":false,"component":"data2-core-types@DataSetReference","params":{"reference":"InternalApplicationsVerifierDataSet"}},"password":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"secret"}},"credentials":[{"component":"data2-core-types@FieldReference","params":{"key":"application"}},{"component":"data2-core-types@FieldReference","params":{"key":"secret"}},{"component":"data2-core-types@FieldReference","params":{"key":"status"}}],"session":[{"component":"data2-core-types@FieldReference","params":{"key":"application"}},{"component":"data2-core-types@FieldReference","params":{"key":"secret"}},{"component":"data2-core-types@FieldReference","params":{"key":"status"}}]},"reference":"InternalApplicationsAuthenticationStrategy","updatedAt":"2025-10-22T20:08:54.442Z","createdAt":"2025-10-22T20:04:31.198Z"},{"component":"data2-core@DataSet","reference":"SessionsDataSet","params":{"requiresConfirmation":false,"pk":"key","datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"data2sessionsdatasource"}}}},{"reference":"UsersTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@ServerSessionsDataSource","reference":"data2sessionsdatasource","params":{}},{"_id":"5f1600b70528b92601890f75","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ServiceComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ServiceComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:20.208Z","createdAt":"2020-07-20T20:38:15.436Z"},{"_id":"5f1602190528b92601890f7d","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":40000},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ComponentInstancesTableDataSource"}},"sort":{"_id":1},"pk":"_id","autoEdit":true,"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:07.089Z","createdAt":"2020-07-20T20:44:09.350Z"},{"_id":"5f16017f0528b92601890f7a","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"clientApplicationDomain"}}},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}}},"reference":"FileComponentInstancesDataSet","updatedAt":"2023-08-03T16:08:18.193Z","createdAt":"2020-07-20T20:41:35.797Z"},{"_id":"5f1601990528b92601890f7b","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ApplicationsTableDataSource"}},"pk":"_id","autoEdit":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"params":{"column":"_id"},"component":"data2-core-types@DataSetColumnReference"}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}}},"reference":"ApplicationsDataSet","updatedAt":"2022-12-13T21:51:13.995Z","createdAt":"2020-07-20T20:42:01.657Z"},{"_id":"5f16172a0528b92601890f85","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":10000}}},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"DataComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"DataComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:12.831Z","createdAt":"2020-07-20T22:14:02.097Z"},{"_id":"60ddc1bbda3861ca65407c5a","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"clientApplicationDomain"}}},"pagination":{"size":1},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"}},"reference":"OneFileComponentInstancesDataSet","updatedAt":"2022-02-09T19:44:38.036Z","createdAt":"2020-07-20T20:41:35.797Z"},{"_id":"63ee3d38b8c9838c62fb05fb","displayName":"DriveFileComponentInstancesDataSet","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core@Drive"}}},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}}},"reference":"DriveFileComponentInstancesDataSet","updatedAt":"2025-12-04T21:58:32.367Z","createdAt":"2023-02-16T14:27:07.797Z"},{"reference":"ServiceComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"ComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a900bba42a2cc71dcbd2a62","component":"data2-core-primitives@Artboard","system":"6a7ca6cb11f8a5ec77c18b42","displayName":"🔐 Cubbo Picking — Gate","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"🔐 Cubbo Picking — Gate"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0}}},"reference":"H739u-e30aO8eXwrHJtm4","deleteMetadata":{}},{"_id":"493111ef0a330f71998d3c17","parent":"6a900bba42a2cc71dcbd2a62","component":"cubbo-app@cubbo-picking-station","system":"6a7ca6cb11f8a5ec77c18b42","displayName":"Picking Station","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}}},"reference":"WEkWezhel9cJFdXBjEqQU","deleteMetadata":{}}]}},{"_id":"5fc4faeec8da12be8bf3d08a","component":"data2-core@Data2TableDataSource","system":"5e3b796d6228227ca637d0f4","params":{"paginate":{"default":1000},"super":{},"table":"fileComponentInstances","schema":[{"component":"data2-core-types@Field","params":{"key":"component","title":"Component","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"system","title":"System","component":"data2-core-primitives@ObjectId"}},{"component":"data2-core-types@Field","params":{"key":"displayName","title":"Display Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"params","title":"Params","component":"data2-core-primitives@Object"}},{"component":"data2-core-types@Field","params":{"key":"reference","title":"Reference","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"fileId"}},"title":"File ID","component":"data2-core-primitives@ObjectId"},"break":true}],"hooks":{"before":{"all":[{"hook":"softDelete"}],"find":[{"hook":"useCache","options":{"additionalGroupKeys":["$and.0.system","$and.1.system"],"skipCache":true}}],"create":[{"hook":"timestamp","options":{"fields":["createdAt","updatedAt"]}}],"update":[{"hook":"timestamp","options":{"fields":["updatedAt"]}}],"patch":[{"hook":"timestamp","options":{"fields":["updatedAt"]}}]},"after":{"all":[{"hook":"fileUrl","options":{"downloadField":"params.fileUrl","uploadField":"params.uploadFileUrl","enhanceSchema":false}}],"find":[{"hook":"useCache","options":{"additionalGroupKeys":["$and.0.system","$and.1.system"],"skipCache":true}}],"create":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}],"update":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}],"patch":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}],"remove":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}]}},"multi":["create"],"useEstimatedDocumentCount":true},"reference":"FileComponentInstancesTableDataSource","updatedAt":"2022-12-19T20:42:51.837Z","createdAt":"2020-11-30T13:59:52.294Z"},{"reference":"ApplicationsTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a900f09104245c77f31bec9","displayName":"Cubbo Picking — Estação","reference":"iE7m57aN7FX_30UWczRys","params":{"domain":{"component":"data2-core-primitives@String","params":{"content":"picking"}},"entryPoint":{"component":"data2-core-types@ComponentInstanceReference","params":{"component":"data2-core-primitives@Artboard","reference":"H739u-e30aO8eXwrHJtm4"}}},"system":"6a7ca6cb11f8a5ec77c18b42","component":"data2-core-primitives@Application"}]}},{"reference":"DataComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"BundlesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}}],"processesParams":{}}}}