{"context":{"domain":"bazan-playground"},"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":"2022-03-09T02:01:26.213Z"}]}},{"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}],"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":"2025-11-05T19:23:47.135Z","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":"69f0ee4e5e3c7228127bae3f","name":"Vinicius Bazan","domain":"bazan-playground","visibility":"public","updatedAt":"2026-04-28T12:56:41.025Z","createdAt":"2026-04-28T12:56:41.025Z"}]}},{"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":"6a398a2494324073708bb44f","component":"data2-core-types@Component","system":"69f0ee4e5e3c7228127bae3f","params":{"extends":"data2-core-primitives@Block","component":"riachueloApp","package":"bazan-playground","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 CATS = [\n  { label: 'Calças', value: 'masculino/colecao-masculina/calca', type: 'calça', region: 'inferior' },\n  { label: 'Camisetas', value: 'masculino/colecao-masculina/camiseta', type: 'camiseta', region: 'superior' },\n  { label: 'Camisas', value: 'masculino/colecao-masculina/camisa', type: 'camisa', region: 'superior' },\n  { label: 'Polos', value: 'masculino/colecao-masculina/polo', type: 'polo', region: 'superior' }\n]\nfunction esc(s){ return String(s ?? '').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;') }\nfunction slug(s){ return String(s ?? '').toLowerCase().normalize('NFD').replace(/[̀-ͯ]/g,'').replace(/\\s+/g,'-') }\nfunction stripColor(name){ const p = String(name ?? '').split(' - '); return p.length>1 ? p.slice(0,-1).join(' - ') : name }\nfunction brl(p){ const v = p && (p.final ?? p.regular); return v!=null ? 'R$ '+Number(v).toFixed(2).replace('.',',') : '' }\nconst PLACEHOLDER = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent('<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"200\"><rect width=\"100%\" height=\"100%\" fill=\"#ececef\"/><circle cx=\"75\" cy=\"68\" r=\"16\" fill=\"#d6d6dc\"/><rect x=\"48\" y=\"90\" width=\"54\" height=\"72\" rx=\"9\" fill=\"#d6d6dc\"/><text x=\"75\" y=\"186\" font-family=\"sans-serif\" font-size=\"11\" fill=\"#a1a1aa\" text-anchor=\"middle\">sem imagem</text></svg>')\nfunction groupProducts(products){\n  const map = new Map()\n  for (const p of (products||[])){\n    const key = p.skuGroup || p.sku || p.name\n    if(!map.has(key)) map.set(key,{ key, name: stripColor(p.name), price: p.price, variants: [] })\n    const colorSlug = String(p.skuSubGroup||'').split('--')[1] || ''\n    const colorObj = (p.colors||[]).find(c=>slug(c.general)===colorSlug)\n    map.get(key).variants.push({ sku:p.sku, skuSubGroup:p.skuSubGroup, image:(p.images||[])[0]||'', colorName: colorObj?colorObj.general:(colorSlug?colorSlug.replace(/-/g,' '):'Único'), hexa: colorObj?colorObj.hexa:'#cccccc' })\n  }\n  return [...map.values()]\n}\nfunction selectedList(look){\n  const out=[]\n  for(const k of Object.keys(look||{})){\n    const i=+k; const e=look[k]; if(!e||!e.group) continue\n    const variant = e.group.variants[e.variantIndex||0] || e.group.variants[0]\n    out.push({ catIndex:i, catInfo:CATS[i], group:e.group, variant, variantIndex:e.variantIndex||0 })\n  }\n  return out.sort((a,b)=>a.catIndex-b.catIndex)\n}\nfunction garmentDesc(catInfo, a){\n  a = a||{}\n  return [`tipo ${catInfo.type}`, a.fabric?`tecido ${a.fabric}`:'', a.colorDescription?`cor ${a.colorDescription}`:'', a.texture?`textura ${a.texture}`:'', a.fit?`caimento ${a.fit}`:'', a.details?`detalhes: ${a.details}`:''].filter(Boolean).join(', ')\n}\nfunction buildPrompt(catInfo, attrs, scene, mode){\n  const isUpper = catInfo.region === 'superior'\n  const outer = isUpper ? (scene.upperOuter||'') : (scene.lowerOuter||'')\n  const inner = isUpper ? (scene.upperInner||'') : (scene.lowerInner||'')\n  const upperNow = [scene.upperOuter, scene.upperInner].filter(Boolean).join(' por cima de ') || 'não identificado'\n  const lowerNow = scene.lowerInner || 'não identificado'\n  const keepOther = isUpper\n    ? `Mantenha INTACTAS, sem nenhuma alteração: a peça da parte inferior (${lowerNow}) e o calçado (${scene.feet||'atual'}).`\n    : `Mantenha INTACTAS, sem nenhuma alteração: as peças da parte superior (${upperNow}) e o calçado (${scene.feet||'atual'}).`\n  let task\n  if(mode==='with' && outer){ task = `A pessoa usa \"${outer}\" POR CIMA de \"${inner}\". Substitua APENAS a peça de baixo (${inner}) pela nova ${catInfo.type}, e MANTENHA \"${outer}\" por cima, exatamente como está na foto.` }\n  else if(mode==='without' && outer){ task = `A pessoa usa \"${outer}\" por cima de \"${inner}\". REMOVA completamente \"${outer}\" e substitua \"${inner}\" pela nova ${catInfo.type}, deixando a nova peça totalmente visível, sem nenhuma peça por cima.` }\n  else { task = `Substitua APENAS a peça atual da parte ${catInfo.region} do corpo (${inner||'atual'}) pela nova ${catInfo.type}.` }\n  return `Edite a PRIMEIRA imagem (foto da pessoa) para um provador virtual.\n\nPOSE E ENQUADRAMENTO (manter idênticos): ${scene.pose||'pessoa em pé, de frente'}.\nROUPAS ATUAIS NA FOTO: superior = ${upperNow}; inferior = ${lowerNow}; calçado = ${scene.feet||'não identificado'}.\n\nTAREFA: ${task}\nA nova peça (SEGUNDA imagem) deve ficar fiel a: ${garmentDesc(catInfo, attrs)}.\n\nREGRAS OBRIGATÓRIAS:\n- Preserve EXATAMENTE o rosto, cabelo, pele, corpo, mãos, pose, ângulo, enquadramento, fundo e iluminação da foto original.\n- ${keepOther}\n- ${mode==='without'&&outer ? `NÃO deixe nenhuma peça por cima da nova ${catInfo.type}.` : 'Troque somente a peça indicada; não altere mais nenhuma roupa nem o fundo.'}\n- Resultado fotorrealista, mesma pessoa.`\n}\nfunction buildLookPrompt(catInfo, attrs, scene){\n  const isUpper = catInfo.region==='superior'\n  const baseNow = isUpper ? (scene.upperInner||'a camiseta/camisa de base atual') : (scene.lowerInner||'a calça/peça de baixo atual')\n  return `Edite a PRIMEIRA imagem (foto da pessoa) para montar um look.\n\nPOSE E ENQUADRAMENTO (manter idênticos): ${scene.pose||'pessoa em pé, de frente'}.\nTAREFA: substitua a peça de BASE da parte ${catInfo.region} do corpo (${baseNow}) pela nova ${catInfo.type} mostrada na SEGUNDA imagem. A nova peça é a camada de BASE dessa região.\nA nova peça deve ficar fiel a: ${garmentDesc(catInfo, attrs)}.\n\nREGRAS OBRIGATÓRIAS:\n- Preserve EXATAMENTE o rosto, cabelo, pele, corpo, mãos, pose, ângulo, enquadramento, fundo e iluminação.\n- Mantenha INTACTAS as peças da OUTRA região do corpo e o calçado.\n- NÃO mexa em casacos, jaquetas, blazers ou coletes que estejam por cima — eles continuam exatamente como estão, por cima da peça nova.\n- NÃO reordene as camadas: a camiseta/camisa fica no tronco e a calça nas pernas. Troque APENAS a peça de base da parte ${catInfo.region}.\n- Fotorrealista, mesma pessoa.`\n}\nfunction buildRemoveOuterPrompt(outer, scene){\n  return `Edite a imagem: REMOVA completamente a peça \"${outer}\" (peça externa por cima, tipo casaco/jaqueta/blazer/colete), revelando as roupas que estão por baixo.\n\nREGRAS OBRIGATÓRIAS:\n- Preserve EXATAMENTE rosto, cabelo, pele, corpo, mãos, pose, ângulo, enquadramento, fundo e iluminação.\n- Mantenha TODAS as demais roupas (a peça de base do tronco, a calça e o calçado) exatamente como estão, sem reordenar.\n- Apenas remova \"${outer}\". Fotorrealista, mesma pessoa.`\n}\nexport default {\n  css: `\n    :host{display:block;width:100%;height:100%}\n    *{box-sizing:border-box}\n    .app{display:flex;flex-direction:column;height:100%;font-family:Inter,-apple-system,sans-serif;background:#f4f4f6;color:#18181b;position:relative}\n    .top{height:60px;background:#fff;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;padding:0 24px;gap:16px;flex-shrink:0}\n    .brand{font-size:20px;font-weight:800;letter-spacing:3px}.brand .dot{color:#e11d48}\n    .tag{font-size:12px;color:#9ca3af}\n    .body{flex:1;display:flex;min-height:0}\n    .col{height:100%;overflow-y:auto;padding:16px}\n    .left{width:300px;flex-shrink:0;border-right:1px solid #e5e7eb;background:#fff}\n    .center{flex:1;min-width:0}\n    .right{width:370px;flex-shrink:0;border-left:1px solid #e5e7eb;background:#fff}\n    .h{font-size:12px;font-weight:700;letter-spacing:1px;color:#6b7280;text-transform:uppercase;margin-bottom:12px;display:flex;align-items:center;justify-content:space-between}\n    .dbgbtn{font-size:10px;font-weight:600;border:1px solid #e5e7eb;background:#fff;border-radius:7px;padding:4px 8px;cursor:pointer;color:#6b7280}.dbgbtn.on{background:#18181b;color:#fff;border-color:#18181b}\n    .dz{border:2px dashed #d4d4d8;border-radius:14px;padding:28px 12px;display:flex;flex-direction:column;align-items:center;gap:10px;cursor:pointer;background:#fafafa;text-align:center}\n    .dz:hover,.dz.drag{border-color:#6366f1;background:#eef2ff}\n    .dz .ico{font-size:36px}.dz .l{font-size:13px;color:#6b7280}.dz .s{font-size:11px;color:#a1a1aa}\n    .prev{position:relative;border-radius:14px;overflow:hidden;background:#18181b;width:100%;aspect-ratio:3/4;max-height:280px}\n    .prev img{width:100%;height:100%;object-fit:cover;display:block;cursor:zoom-in}\n    .prev .chg{position:absolute;bottom:8px;right:8px;background:rgba(0,0,0,.6);color:#fff;border:none;border-radius:8px;padding:6px 11px;font-size:12px;cursor:pointer}\n    input[type=file]{display:none}\n    .sc{border-radius:14px;padding:14px;margin-top:14px}.sc.blk{background:#fef2f2;border:1px solid #fca5a5}.sc.ok{background:#f0fdf4;border:1px solid #86efac}.sc.warn{background:#fffbeb;border:1px solid #fcd34d}\n    .st{font-size:13px;font-weight:700;margin-bottom:8px}.blk .st{color:#dc2626}.ok .st{color:#16a34a}.warn .st{color:#d97706}\n    .big{font-size:30px;font-weight:800;text-align:center;margin:2px 0 12px}\n    .dr{display:flex;align-items:center;gap:8px;margin-bottom:6px}.dl{font-size:11px;color:#6b7280;width:84px;flex-shrink:0}\n    .bb{flex:1;height:6px;background:#e5e7eb;border-radius:99px;overflow:hidden}.bi{height:100%;border-radius:99px}.dv{font-size:11px;color:#374151;width:22px;text-align:right;font-weight:600}\n    .tips{margin-top:8px;font-size:11px;color:#78350f}.tips ul{margin:3px 0 0;padding-left:15px}\n    .tabs{display:flex;gap:6px;margin-bottom:14px;flex-wrap:wrap}\n    .tab{padding:7px 16px;border-radius:99px;font-size:12px;font-weight:600;cursor:pointer;border:none;background:#fff;color:#6b7280;box-shadow:0 1px 2px rgba(0,0,0,.06)}.tab.on{background:#18181b;color:#fff}\n    .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}\n    .card{background:#fff;border-radius:12px;overflow:hidden;cursor:pointer;border:2px solid transparent;transition:all .15s;box-shadow:0 1px 3px rgba(0,0,0,.07);position:relative}\n    .card:hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(0,0,0,.12)}.card.on{border-color:#6366f1}\n    .card.on::after{content:'✓ no look';position:absolute;top:6px;left:6px;background:#6366f1;color:#fff;font-size:9px;font-weight:700;padding:2px 6px;border-radius:6px}\n    .card .ph{width:100%;aspect-ratio:3/4;object-fit:cover;display:block;background:#f4f4f5}\n    .card .ci{padding:8px 9px}.card .cn{font-size:11px;color:#27272a;line-height:1.3;height:28px;overflow:hidden}.card .cp{font-size:13px;color:#111;font-weight:700;margin-top:3px}\n    .dots{display:flex;gap:3px;margin-top:6px;flex-wrap:wrap}.dot{width:13px;height:13px;border-radius:50%;border:1px solid rgba(0,0,0,.2);cursor:pointer}.dot.onc{box-shadow:0 0 0 2px #6366f1}\n    .center-msg{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:10px;color:#a1a1aa;font-size:13px;text-align:center}\n    .looklist{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}\n    .litem{display:flex;gap:10px;align-items:center;background:#fafafa;border:1px solid #eee;border-radius:12px;padding:8px;position:relative}\n    .litem img{width:42px;height:56px;object-fit:cover;border-radius:8px;border:1px solid #e5e7eb;flex-shrink:0}\n    .litem .li{flex:1;min-width:0}.litem .lt{font-size:9px;font-weight:700;color:#6366f1;text-transform:uppercase;letter-spacing:.5px}.litem .ln{font-size:11px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n    .ldot{width:13px;height:13px;border-radius:50%;border:1px solid rgba(0,0,0,.2);cursor:pointer}.ldot.on{box-shadow:0 0 0 2px #6366f1}\n    .lrm{background:none;border:none;color:#9ca3af;font-size:14px;cursor:pointer;flex-shrink:0}\n    .btn{width:100%;padding:13px;border:none;border-radius:12px;font-size:14px;font-weight:700;cursor:pointer;background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff;letter-spacing:.3px}\n    .btn:hover:not(:disabled){opacity:.93}.btn:disabled{opacity:.45;cursor:not-allowed;background:#a1a1aa}\n    .gate{background:#fef2f2;border:1px solid #fecaca;border-radius:10px;padding:10px;font-size:11px;color:#b91c1c;margin:10px 0;text-align:center}\n    .scene{background:#eef2ff;border:1px solid #c7d2fe;border-radius:10px;padding:10px;font-size:11px;color:#3730a3;margin:10px 0;line-height:1.5}\n    .results{display:flex;flex-direction:column;gap:14px;margin-top:14px}\n    .rc{border-radius:12px;overflow:hidden;border:1px solid #e5e7eb;background:#fafafa}\n    .rh{display:flex;align-items:center;gap:6px;padding:8px 10px;font-size:11px;font-weight:600;color:#374151}.rh .cd{width:12px;height:12px;border-radius:50%;border:1px solid rgba(0,0,0,.15)}\n    .rtabs{display:flex;gap:4px;padding:0 10px 8px}.rtab{flex:1;font-size:10px;font-weight:600;border:1px solid #e5e7eb;background:#fff;border-radius:7px;padding:5px;cursor:pointer;color:#6b7280}.rtab.on{background:#6366f1;color:#fff;border-color:#6366f1}\n    .rimg{width:100%;aspect-ratio:3/4;object-fit:contain;background:#fff;display:block;cursor:zoom-in}\n    .rl{display:flex;flex-direction:column;align-items:center;justify-content:center;aspect-ratio:3/4;gap:8px;color:#8b5cf6;font-size:11px;text-align:center;padding:10px}\n    .sp{width:22px;height:22px;border:2px solid #ddd6fe;border-top-color:#8b5cf6;border-radius:50%;animation:sp .8s linear infinite}.sp.sm{width:15px;height:15px;border-color:#c7d2fe;border-top-color:#6366f1}\n    @keyframes sp{to{transform:rotate(360deg)}}\n    .ld{display:flex;align-items:center;gap:8px;font-size:13px;color:#6366f1;padding:10px 0}\n    .dbg{white-space:pre-wrap;word-break:break-word;font-size:9.5px;line-height:1.4;color:#475569;background:#f1f5f9;border-top:1px solid #e2e8f0;margin:0;padding:8px 10px;max-height:170px;overflow:auto}\n    .lightbox{position:fixed;inset:0;background:rgba(0,0,0,.88);display:flex;align-items:center;justify-content:center;z-index:99999;cursor:zoom-out}\n    .lightbox img{max-width:92%;max-height:92%;object-fit:contain;border-radius:8px}\n    .lbx{position:absolute;top:18px;right:22px;color:#fff;font-size:13px;cursor:pointer;background:rgba(255,255,255,.15);padding:7px 13px;border-radius:8px}\n  `,\n  render(d2){\n    const st = d2.state\n    const photo = st.photoUrl||''\n    const score = st.photoScore||null\n    const safe = score && score.safe\n    const total = score && score.totalScore || 0\n    const canTry = !!photo && safe && total>=50\n    const look = st.look||{}\n    const cat = st.cat||0\n\n    // LEFT\n    let left = ''\n    if(st.scoreBusy){ left = `<div class=\"prev\"><img class=\"prevImg\" src=\"${esc(photo)}\"/></div><div class=\"ld\"><div class=\"sp sm\"></div>Analisando foto…</div>` }\n    else if(!photo){ left = `<label class=\"dz\" id=\"dz\"><div class=\"ico\">📸</div><div class=\"l\">Clique ou arraste sua foto</div><div class=\"s\">Corpo inteiro · pose neutra · fundo neutro</div><input type=\"file\" id=\"fi\" accept=\"image/*\"/></label>` }\n    else {\n      left = `<div class=\"prev\"><img class=\"prevImg\" src=\"${esc(photo)}\"/><button class=\"chg\" id=\"chg\">Trocar</button></div>`\n      if(score){\n        if(!safe){ left += `<div class=\"sc blk\"><div class=\"st\">🚫 Foto não permitida</div><div style=\"font-size:12px;color:#b91c1c\">${esc(score.safeReason||'Conteúdo inapropriado.')}</div></div>` }\n        else {\n          const cls = total>=75?'ok':'warn', em = total>=75?'✅':'⚠️'\n          const bc=(v,m)=>{const p=v/m*100;return p>=75?'#22c55e':p>=50?'#f59e0b':'#ef4444'}\n          const dim=(l,v,m)=>`<div class=\"dr\"><div class=\"dl\">${l}</div><div class=\"bb\"><div class=\"bi\" style=\"width:${Math.round((v||0)/m*100)}%;background:${bc(v||0,m)}\"></div></div><div class=\"dv\">${v||0}</div></div>`\n          const tips=(score.tips||[]).map(t=>`<li>${esc(t)}</li>`).join('')\n          left += `<div class=\"sc ${cls}\"><div class=\"st\">${em} Score de Confiança</div><div class=\"big\" style=\"color:${total>=75?'#16a34a':'#d97706'}\">${total}<span style=\"font-size:14px;font-weight:500\">/100</span></div>${dim('Pose neutra',score.poseScore,33)}${dim('Fundo neutro',score.backgroundScore,33)}${dim('Qualidade',score.qualityScore,34)}${tips?`<div class=\"tips\"><b>Dicas:</b><ul>${tips}</ul></div>`:''}</div>`\n        }\n      }\n    }\n\n    // CENTER\n    const groups = groupProducts(st.products||[])\n    const tabsHtml = `<div class=\"tabs\">${CATS.map((c,i)=>`<button class=\"tab${i===cat?' on':''}\" data-cat=\"${i}\">${c.label}${look[i]?' •':''}</button>`).join('')}</div>`\n    let center\n    if(st.catBusy){ center = tabsHtml + `<div class=\"center-msg\"><div class=\"sp\"></div>Carregando produtos…</div>` }\n    else if(!groups.length){ center = tabsHtml + `<div class=\"center-msg\">😕 Nenhum produto encontrado</div>` }\n    else {\n      const selHere = look[cat]\n      const cards = groups.map(g=>{\n        const on = selHere && selHere.group.key===g.key\n        const img = g.variants[0] && g.variants[0].image || ''\n        const dots = g.variants.slice(0,6).map((v,vi)=>`<div class=\"dot${on&&(selHere.variantIndex||0)===vi?' onc':''}\" data-key=\"${esc(g.key)}\" data-vi=\"${vi}\" style=\"background:${esc(v.hexa)}\" title=\"${esc(v.colorName)}\"></div>`).join('')\n        return `<div class=\"card${on?' on':''}\" data-key=\"${esc(g.key)}\"><img class=\"ph\" src=\"${esc(img)}\" loading=\"lazy\" referrerpolicy=\"no-referrer\" onerror=\"this.onerror=null;this.src=window.__RCHLO_PH\"/><div class=\"ci\"><div class=\"cn\">${esc(g.name)}</div><div class=\"cp\">${brl(g.price)}</div><div class=\"dots\">${dots}</div></div></div>`\n      }).join('')\n      center = tabsHtml + `<div class=\"grid\">${cards}</div>`\n    }\n\n    // RIGHT\n    const sels = selectedList(look)\n    const multi = sels.length>=2\n    let right = `<div class=\"h\"><span>👔 Meu Look</span><button class=\"dbgbtn${st.debug?' on':''}\" id=\"dbgbtn\">🐛 Debug</button></div>`\n    if(!sels.length){ right += `<div class=\"center-msg\" style=\"height:auto;padding:24px 10px\">👗<div>Selecione produtos nas abas para montar seu look (ex: camisa + calça).</div></div>` }\n    else {\n      right += `<div class=\"looklist\">` + sels.map(s=>{\n        const dts = s.group.variants.map((v,vi)=>`<div class=\"ldot${vi===s.variantIndex?' on':''}\" data-cat=\"${s.catIndex}\" data-vi=\"${vi}\" style=\"background:${esc(v.hexa)}\" title=\"${esc(v.colorName)}\"></div>`).join('')\n        return `<div class=\"litem\"><img referrerpolicy=\"no-referrer\" onerror=\"this.onerror=null;this.src=window.__RCHLO_PH\" src=\"${esc(s.variant.image)}\"/><div class=\"li\"><div class=\"lt\">${esc(s.catInfo.label)} · ${esc(s.variant.colorName)}</div><div class=\"ln\">${esc(s.group.name)}</div><div class=\"dots\">${dts}</div></div><button class=\"lrm\" data-cat=\"${s.catIndex}\">✕</button></div>`\n      }).join('') + `</div>`\n      if(!photo) right += `<div class=\"gate\">📸 Envie uma foto para experimentar.</div>`\n      else if(!safe) right += `<div class=\"gate\">🚫 Foto bloqueada — envie uma nova foto.</div>`\n      else if(total<50) right += `<div class=\"gate\">⚠️ Score muito baixo (${total}). Melhore a foto.</div>`\n      const single = sels[0]\n      const label = st.tryBusy ? (st.sceneBusy?'Analisando a foto…':'Gerando…') : (multi?`Experimentar look (${sels.length} peças)`:`Experimentar todas as cores`)\n      right += `<button class=\"btn\" id=\"${multi?'trylook':'trycolors'}\" ${canTry&&!st.tryBusy?'':'disabled'}>${label}</button>`\n      if(!multi){ right += `<div style=\"font-size:10px;color:#9ca3af;margin-top:6px;text-align:center\">1 peça → gera todas as cores. Selecione outra aba para montar um look.</div>` }\n      if(st.debug && st.sceneInfo){ const s=st.sceneInfo; right += `<div class=\"scene\"><b>🔎 Cena detectada</b><br/>Pose: ${esc(s.pose||'?')}<br/>Superior: ${esc([s.upperOuter,s.upperInner].filter(Boolean).join(' / ')||'?')}<br/>Inferior: ${esc(s.lowerInner||'?')}<br/>Calçado: ${esc(s.feet||'?')}</div>` }\n\n      // RESULTS\n      if(st.lookGen){\n        const lg = st.lookGen\n        const url = lg.tab==='without' ? lg.withoutUrl : lg.withUrl\n        const tabsL = lg.hasOverlay ? `<div class=\"rtabs\"><button class=\"rtab ${lg.tab!=='without'?'on':''}\" data-looktab=\"with\">Com sobreposição</button><button class=\"rtab ${lg.tab==='without'?'on':''}\" data-looktab=\"without\">Sem sobreposição</button></div>` : ''\n        let body\n        if(url) body = `<img class=\"rimg\" src=\"${url}\"/>`\n        else if(lg.busy) body = `<div class=\"rl\"><div class=\"sp\"></div>${lg.tab==='without'?'Removendo a sobreposição…':'Montando seu look…'}</div>`\n        else body = `<div class=\"rl\" style=\"color:#ef4444\">⚠️ Falhou</div>`\n        const dbgP = lg.tab==='without' ? lg.withoutPrompts : lg.withPrompts\n        const dbg = st.debug ? `<pre class=\"dbg\">${esc((dbgP||[]).join('\\n\\n— — —\\n\\n')||'(prompt pendente)')}</pre>` : ''\n        right += `<div class=\"results\"><div class=\"rc\"><div class=\"rh\">✨ Look final (${sels.length} peças)</div>${tabsL}${body}${dbg}</div></div>`\n      } else if((st.results||[]).length){\n        const results = st.results\n        right += `<div class=\"results\">` + results.map((r,ri)=>{\n          const g = r.gens[r.tab] || r.gens.with\n          const tabsR = r.hasOverlay ? `<div class=\"rtabs\"><button class=\"rtab ${r.tab==='with'?'on':''}\" data-ri=\"${ri}\" data-tab=\"with\">Com sobreposição</button><button class=\"rtab ${r.tab==='without'?'on':''}\" data-ri=\"${ri}\" data-tab=\"without\">Sem sobreposição</button></div>` : ''\n          let body\n          if(g && g.busy) body = `<div class=\"rl\"><div class=\"sp\"></div>Gerando ${esc(r.colorName)}…</div>`\n          else if(g && g.url) body = `<img class=\"rimg\" src=\"${g.url}\"/>`\n          else body = `<div class=\"rl\" style=\"color:#ef4444\">⚠️ Falhou</div>`\n          const dbg = st.debug ? `<pre class=\"dbg\">${esc((g&&g.prompt)||'(prompt pendente)')}</pre>` : ''\n          return `<div class=\"rc\"><div class=\"rh\"><span class=\"cd\" style=\"background:${esc(r.hexa)}\"></span>${esc(r.colorName)}${r.hasOverlay?' · 2 versões':''}</div>${tabsR}${body}${dbg}</div>`\n        }).join('') + `</div>`\n      }\n    }\n\n    const lb = st.lightbox\n    const lbHtml = lb ? `<div class=\"lightbox\" id=\"lb\"><img src=\"${lb}\"/><div class=\"lbx\" id=\"lbclose\">✕ fechar</div></div>` : ''\n    return `<div class=\"app\"><div class=\"top\"><div class=\"brand\">RIACHUELO<span class=\"dot\">.</span></div><div class=\"tag\">Provador Virtual com IA · monte seu look</div></div><div class=\"body\"><div class=\"col left\">${left}</div><div class=\"col center\">${center}</div><div class=\"col right\">${right}</div></div>${lbHtml}</div>`\n  },\n  mounted(d2){\n    try { window.__RCHLO_PH = PLACEHOLDER } catch(e){}\n    function setGen(i,mode,patch){ const arr=(d2.state.results||[]).slice(); const r=arr[i]; if(!r)return; arr[i]={...r,gens:{...r.gens,[mode]:{...r.gens[mode],...patch}}}; d2.state.results=arr }\n    function setStep(i,patch){ const arr=(d2.state.lookSteps||[]).slice(); if(!arr[i])return; arr[i]={...arr[i],...patch}; d2.state.lookSteps=arr }\n    function clearResults(){ d2.state.results=[]; d2.state.lookGen=null }\n    if(!d2.state.products){ d2.state.cat=0; d2.state.look={}; fetchCat(0) }\n    // photo upload\n    d2.on('#chg','click',()=>{ d2.state.photoUrl=''; d2.state.photoScore=null; d2.state.sceneInfo=null; clearResults() })\n    d2.on(d2.root,'dragover',e=>{ e.preventDefault(); const z=d2.$('#dz'); if(z) z.classList.add('drag') })\n    d2.on(d2.root,'dragleave',()=>{ const z=d2.$('#dz'); if(z) z.classList.remove('drag') })\n    d2.on(d2.root,'drop',e=>{ e.preventDefault(); const z=d2.$('#dz'); if(z) z.classList.remove('drag'); const f=e.dataTransfer&&e.dataTransfer.files[0]; if(f) handlePhoto(f) })\n    d2.on('#fi','change',e=>{ const f=e.target.files&&e.target.files[0]; if(f) handlePhoto(f) })\n    // catalog: tabs persist selection\n    d2.on('.tab','click',e=>{ const i=parseInt(e.target.dataset.cat); d2.state.cat=i; fetchCat(i) })\n    d2.on('.card','click',e=>{ const el=e.target.closest('.card'); if(!el)return; selectProduct(el.dataset.key, null) })\n    d2.on('.dot','click',e=>{ e.stopPropagation(); selectProduct(e.target.dataset.key, +e.target.dataset.vi) })\n    // look panel\n    d2.on('.ldot','click',e=>{ const cat=+e.target.dataset.cat; const vi=+e.target.dataset.vi; const look={...(d2.state.look||{})}; if(look[cat]){ look[cat]={...look[cat],variantIndex:vi}; d2.state.look=look; clearResults() } })\n    d2.on('.lrm','click',e=>{ const cat=+e.target.dataset.cat; const look={...(d2.state.look||{})}; delete look[cat]; d2.state.look=look; clearResults() })\n    // generate + ui\n    d2.on('#trycolors','click',()=>runColors())\n    d2.on('#trylook','click',()=>runLook())\n    d2.on('#dbgbtn','click',()=>{ d2.state.debug=!d2.state.debug })\n    d2.on('.rtab','click',e=>{ const lt=e.target.dataset.looktab; if(lt){ if(d2.state.lookGen) d2.state.lookGen={...d2.state.lookGen,tab:lt}; return } const ri=+e.target.dataset.ri; const tab=e.target.dataset.tab; const arr=(d2.state.results||[]).slice(); if(arr[ri]){ arr[ri]={...arr[ri],tab}; d2.state.results=arr } })\n    d2.on('.rimg','click',e=>{ d2.state.lightbox=e.target.src })\n    d2.on('.prevImg','click',e=>{ d2.state.lightbox=e.target.src })\n    d2.on('#lb','click',()=>{ d2.state.lightbox='' })\n\n    function selectProduct(key, vi){\n      const cat = d2.state.cat||0\n      const groups = groupProducts(d2.state.products||[])\n      const g = groups.find(x=>x.key===key); if(!g) return\n      const look = {...(d2.state.look||{})}\n      if(vi==null && look[cat] && look[cat].group.key===key){ delete look[cat] }\n      else { look[cat] = { group:g, variantIndex: vi!=null?vi:(look[cat]&&look[cat].group.key===key?look[cat].variantIndex:0) } }\n      d2.state.look = look; clearResults()\n    }\n    async function handlePhoto(file){\n      d2.state.scoreBusy=true; d2.state.photoScore=null; d2.state.sceneInfo=null; clearResults()\n      try {\n        const up = await d2.drive(d2.params.driveRef).upload([file]); const url = up && up[0] && up[0].fileUrl\n        if(!url) throw new Error('upload'); d2.state.photoUrl = url\n        const res = await d2.assistant(d2.params.judgeRef).ask('Avalie a PESSOA nesta foto para um provador virtual de roupas. Verifique conteudo seguro (gate de bloqueio), pose neutra, fundo neutro e qualidade tecnica. Retorne SOMENTE o JSON do schema.', { images:[url], json:true })\n        let p; try{ p = typeof res==='object'?res:JSON.parse(res) }catch{ p={safe:false,safeReason:'Erro ao analisar.',poseScore:0,backgroundScore:0,qualityScore:0,totalScore:0,tips:[]} }\n        d2.state.photoScore = p\n      } catch { d2.state.photoScore = {safe:false,safeReason:'Erro ao processar a foto.',poseScore:0,backgroundScore:0,qualityScore:0,totalScore:0,tips:[]} }\n      finally { d2.state.scoreBusy=false }\n    }\n    async function fetchCat(i){\n      d2.state.catBusy=true; d2.state.products=[]\n      try { const res = await d2.rush(d2.params.productsApi).invoke({ category:[CATS[i].value], page:1, attributes:{} }); const data = res && (res.data||res); const items=(data&&data.products)||[]; d2.state.products = Array.isArray(items)?items:[] }\n      catch { d2.state.products=[] } finally { d2.state.catBusy=false }\n    }\n    async function ensureScene(photo){\n      if(d2.state.sceneInfo && d2.state.sceneInfoFor===photo) return\n      d2.state.sceneBusy=true\n      try { const sr=await d2.assistant(d2.params.sceneRef).ask('Analise a foto da pessoa e retorne o JSON do schema (pose, upperOuter, upperInner, lowerOuter, lowerInner, feet).',{images:[photo],json:true}); d2.state.sceneInfo=(typeof sr==='object'?sr:JSON.parse(sr))||{} }\n      catch(e){ d2.state.sceneInfo={} }\n      d2.state.sceneInfoFor=photo; d2.state.sceneBusy=false\n    }\n    async function analyze(catInfo, group, variant){\n      try { const ap=`Analise a peça \"${group.name}\" na cor ${variant.colorName} (tipo: ${catInfo.type}). Retorne SOMENTE JSON com fabric, colorDescription, texture, fit, details.`; const ar=await d2.rush('analyzeGarment').invoke({ variantKey: variant.skuSubGroup||(group.key+'--'+variant.colorName), skuGroup: group.key, name: group.name, garmentType: catInfo.type, bodyRegion: catInfo.region, colorName: variant.colorName, image: variant.image, prompt: ap }); return (ar&&ar.data)||ar||{} }\n      catch(e){ return {} }\n    }\n    async function runColors(){\n      const photo=d2.state.photoUrl; const sels=selectedList(d2.state.look||{}); if(!photo||sels.length!==1) return\n      const sel=sels[0].group, catInfo=sels[0].catInfo\n      d2.state.tryBusy=true; d2.state.lookGen=null\n      await ensureScene(photo); const scene=d2.state.sceneInfo||{}; const isUpper=catInfo.region==='superior'\n      const results=sel.variants.map(v=>{ const outer=isUpper?scene.upperOuter:scene.lowerOuter; const hasOverlay=!!(outer&&String(outer).trim()); return {colorName:v.colorName,hexa:v.hexa,image:v.image,hasOverlay,tab:'with',gens:{with:{url:'',busy:true,prompt:''},without:hasOverlay?{url:'',busy:true,prompt:''}:null}} })\n      d2.state.results=results\n      await Promise.all(sel.variants.map(async(v,i)=>{\n        const a=await analyze(catInfo, sel, v)\n        const modes=results[i].hasOverlay?['with','without']:['with']\n        await Promise.all(modes.map(async mode=>{ const prompt=buildPrompt(catInfo,a,scene,results[i].hasOverlay?mode:'simple'); setGen(i,mode,{prompt}); try{ const dr=await d2.assistant(d2.params.artistRef).draw({prompt,images:[photo,v.image]}); let url=''; if(dr&&dr.data&&dr.data[0])url=dr.data[0].url; setGen(i,mode,{url,busy:false}) }catch(e){ setGen(i,mode,{busy:false,url:''}) } }))\n      }))\n      d2.state.tryBusy=false\n    }\n    async function runLook(){\n      const photo=d2.state.photoUrl; const sels=selectedList(d2.state.look||{}); if(!photo||sels.length<2) return\n      d2.state.tryBusy=true; d2.state.results=[]\n      await ensureScene(photo); const scene=d2.state.sceneInfo||{}\n      sels.sort((a,b)=>(a.catInfo.region==='inferior'?0:1)-(b.catInfo.region==='inferior'?0:1))\n      const touchesUpper=sels.some(s=>s.catInfo.region==='superior')\n      const touchesLower=sels.some(s=>s.catInfo.region==='inferior')\n      let outer=''\n      if(touchesUpper && scene.upperOuter && String(scene.upperOuter).trim()) outer=String(scene.upperOuter).trim()\n      else if(touchesLower && scene.lowerOuter && String(scene.lowerOuter).trim()) outer=String(scene.lowerOuter).trim()\n      const hasOverlay=!!outer\n      const attrsList=await Promise.all(sels.map(s=>analyze(s.catInfo, s.group, s.variant)))\n      const basePrompts=sels.map((s,i)=>`[${s.catInfo.type} ${s.variant.colorName}]\\n`+buildLookPrompt(s.catInfo, attrsList[i], scene))\n      const withPrompts = hasOverlay ? basePrompts.concat([`[manter \"${outer}\" por cima]`]) : basePrompts\n      const withoutPrompts = hasOverlay ? basePrompts.concat([`[remover \"${outer}\"]\\n`+buildRemoveOuterPrompt(outer, scene)]) : []\n      d2.state.lookGen={ busy:true, hasOverlay, tab:'with', withUrl:'', withoutUrl:'', withPrompts, withoutPrompts }\n      // monta o look base: cada peça selecionada vai pra sua região; jaqueta/casaco original é mantido por cima\n      let cur=photo\n      for(let i=0;i<sels.length;i++){ const s=sels[i]; const prompt=buildLookPrompt(s.catInfo, attrsList[i], scene); try{ const dr=await d2.assistant(d2.params.artistRef).draw({prompt, images:[cur, s.variant.image]}); const url=(dr&&dr.data&&dr.data[0]&&dr.data[0].url)||''; if(url) cur=url }catch(e){} }\n      d2.state.lookGen={...d2.state.lookGen, withUrl:cur}\n      // 'sem sobreposição' = remove só a peça externa (jaqueta/casaco) do look pronto\n      if(hasOverlay){ try{ const dr=await d2.assistant(d2.params.artistRef).draw({prompt:buildRemoveOuterPrompt(outer, scene), images:[cur]}); const u=(dr&&dr.data&&dr.data[0]&&dr.data[0].url)||''; d2.state.lookGen={...d2.state.lookGen, withoutUrl:u} }catch(e){ d2.state.lookGen={...d2.state.lookGen, withoutUrl:''} } }\n      d2.state.lookGen={...d2.state.lookGen, busy:false}; d2.state.tryBusy=false\n    }\n  }\n}\n"}},"driveRef":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"driveRef"}}}},"judgeRef":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"judgeRef"}}}},"artistRef":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"artistRef"}}}},"sceneRef":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"sceneRef"}}}},"productsApi":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"productsApi"}}}}}}}}}},{"_id":"5ed9bed7b9e0891ce913e884","component":"data2-core-types@Component","params":{"package":"data2-core","component":"DataSource","renderable":{"dimensions":{"disabled":false,"component":"data2-core-types@Dimensions","params":{"width":1366,"exactWidth":false,"exactHeight":false,"height":768}}}}},{"_id":"5f472ae463c680de4ff296e9","component":"data2-core-types@Component","params":{"package":"data2-core","component":"Data2TableDataSource","extends":"data2-core@DataSource","renderable":{"dimensions":{"disabled":false,"component":"data2-core-types@Dimensions","params":{"width":1366,"exactWidth":false,"exactHeight":false,"height":768}}}}}]}},{"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}}},"reference":"Data2BuilderAuthentication","updatedAt":"2025-10-28T02:48:49.233Z"},{"_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":[{"_id":"6a399a3675d705f1410bcdba","component":"data2-core-ai@Assistant","reference":"sceneAnalyst","system":"69f0ee4e5e3c7228127bae3f","params":{"model":"cerebras","_context":"Você analisa a foto de uma pessoa para um provador virtual. Descreve a pose, o enquadramento e as camadas de roupa por região do corpo, identificando peças sobrepostas (ex: jaqueta por cima de camisa).","behaviour":"Retorne SOMENTE um objeto JSON (sem markdown, sem texto extra), em português, com exatamente estas chaves (todas string):\n{\n  \"pose\": \"pose, ângulo e enquadramento da pessoa (ex: em pé, de frente, corpo inteiro, mão no queixo)\",\n  \"upperOuter\": \"peça MAIS EXTERNA do tronco quando houver camada por cima (jaqueta, paletó, blazer, casaco, cardigã, colete); string vazia se não houver nada por cima\",\n  \"upperInner\": \"peça de baixo do tronco (camisa, camiseta, blusa, polo)\",\n  \"lowerOuter\": \"peça externa da parte inferior se houver (ex: sobretudo longo cobrindo as pernas); string vazia se não houver\",\n  \"lowerInner\": \"peça da parte inferior (calça, bermuda, shorts, saia)\",\n  \"feet\": \"calçado\"\n}\nSe uma região não estiver visível, use string vazia.","creativity":10,"json":true}},{"_id":"6a397fba8509ad09a46326e8","component":"data2-rush@HTTPListener","reference":"buscaProdutosRiachuelo","system":"69f0ee4e5e3c7228127bae3f","params":{"enableExecutionLogs":true,"insertLogsDataSet":{"component":"data2-core-types@DataSetReference","params":{"reference":"buscaProdutosRiachueloLogInsertDataSet"}},"readLogsDataSet":{"component":"data2-core-types@DataSetReference","params":{"reference":"buscaProdutosRiachueloLogReadDataSet"}}}},{"_id":"6a397fb082efcd29e659ec8f","component":"data2-core-ai@Assistant","reference":"tryOnArtist","system":"69f0ee4e5e3c7228127bae3f","params":{"model":"cerebras","_context":"You are an AI fashion try-on specialist. When given a person's photo and a garment image, you generate a photorealistic image of that exact person wearing that exact garment. You MUST preserve the person's body shape, skin tone, facial features, hair, and proportions exactly as they appear in the original photo. Do NOT alter the body in any way.","premisses":"CRITICAL RULES:\n1. Never alter the person's body shape, size, or proportions.\n2. Never change skin tone, facial features, or hair.\n3. Fit the garment naturally onto the person's existing body.\n4. Preserve the original background unless it strongly conflicts with the result.\n5. Maintain photorealistic quality — no illustrations or cartoons.\n6. Show all color details of the selected garment accurately.","creativity":30}},{"_id":"6a397fad65d0c8ad47dd4adb","component":"data2-core-ai@Assistant","reference":"scoreJudge","system":"69f0ee4e5e3c7228127bae3f","params":{"model":"cerebras","_context":"You are a strict photo quality evaluator for a virtual try-on fashion app. You receive a photo URL of a person and evaluate it across multiple criteria. You MUST return a valid JSON object only — no prose, no markdown, no explanation outside the JSON.","behaviour":"Always return ONLY a raw JSON object. No markdown code fences. No extra text. Follow this exact schema:\n{\n  \"safe\": boolean,           // HARD GATE: false if nudity, violence, or inappropriate content detected\n  \"safeReason\": string,      // if safe=false, explain why; if safe=true, leave empty string\n  \"poseScore\": number,       // 0-33: person standing, arms visible, torso unobstructed\n  \"backgroundScore\": number, // 0-33: plain/neutral background, no clutter obscuring silhouette\n  \"qualityScore\": number,    // 0-34: good lighting, person centered, full body visible\n  \"totalScore\": number,      // sum of the three dimension scores (0-100), only set if safe=true\n  \"tips\": string[]           // actionable tips to improve the photo (empty array if totalScore>=75)\n}\nIf safe=false, set all scores to 0 and totalScore to 0.","creativity":10,"json":true}},{"_id":"6a397f9582efcd29e659ec68","component":"data2-core@Drive","reference":"NcFnhqxFRdOAZlT5oS4Tk","system":"69f0ee4e5e3c7228127bae3f","params":{}}]}},{"reference":"ComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a397fbc757b220b2309f762","component":"data2-core-primitives@Artboard","system":"69f0ee4e5e3c7228127bae3f","displayName":"Riachuelo Try-On","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Riachuelo Try-On"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}},"reference":"LxxJul6skk9-YFkMMqh-6"},{"_id":"4e44744401aba8ab06207cb7","parent":"6a397fbc757b220b2309f762","component":"bazan-playground@riachueloApp","system":"69f0ee4e5e3c7228127bae3f","displayName":"RiachueloApp","params":{"driveRef":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NcFnhqxFRdOAZlT5oS4Tk"}},"judgeRef":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"scoreJudge"}},"artistRef":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"tryOnArtist"}},"productsApi":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"buscaProdutosRiachuelo"}},"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}}},"sceneRef":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"sceneAnalyst"}}},"index":0,"reference":"Im5C8R5UK6xAfmLHoD6D1"}]}},{"_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":"6a398655daf76286dc238320","displayName":"Riachuelo Try-On","reference":"9T1VnB0hbSM05y0TFLY-H","params":{"name":{"component":"data2-core-primitives@String","params":{"content":"Riachuelo Try-On"}},"shortName":{"component":"data2-core-primitives@String","params":{"content":"Riachuelo Try-On"}},"domain":{"component":"data2-core-primitives@String","params":{"content":"riachuelo-tryon"}},"serverSideRendering":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"entryPoint":{"component":"data2-core-types@ComponentInstanceReference","params":{"component":"data2-core-primitives@Artboard","reference":"LxxJul6skk9-YFkMMqh-6"}},"responseHeaders":{"X-Frame-Options":{"component":"data2-core-primitives@String","params":{"content":""}},"Content-Security-Policy":{"component":"data2-core-primitives@String","params":{"content":""}},"X-XSS-Protection":{"component":"data2-core-primitives@String","params":{"content":""}}}},"system":"69f0ee4e5e3c7228127bae3f","component":"data2-core-primitives@Application"}]}},{"reference":"DataComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a397fba611f850baaf7cfc7","component":"data2-core@DataSet","system":"69f0ee4e5e3c7228127bae3f","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"d2-rush-http-logs--buscaProdutosRiachuelo"}},"pagination":{"size":20},"sort":{"_id":-1}},"reference":"buscaProdutosRiachueloLogReadDataSet","type":"logs"},{"_id":"6a397fbae94ab39603cb7dc1","component":"data2-core@DataSet","system":"69f0ee4e5e3c7228127bae3f","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"d2-rush-http-logs--buscaProdutosRiachuelo"}},"pagination":{"size":0}},"reference":"buscaProdutosRiachueloLogInsertDataSet","type":"logs"},{"_id":"6a397fb9a337919dc26572d3","component":"data2-core@Data2TableDataSource","system":"69f0ee4e5e3c7228127bae3f","params":{"table":{"component":"data2-core-primitives@String","params":{"content":"d2-rush-http-logs--buscaProdutosRiachuelo"}},"multi":["create"],"useEstimatedDocumentCount":true},"reference":"d2-rush-http-logs--buscaProdutosRiachuelo","type":"logs"}]}},{"reference":"BundlesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}}],"processesParams":{}}}}