{"context":{"domain":"fernando-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":"66f6c624d8a4a0c67041a910","name":"Fernando Moreira","domain":"fernando-playground","visibility":"public","updatedAt":"2024-09-27T12:56:41.025Z","createdAt":"2024-09-27T12: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":"6a42c344fd3c05f6595aa0dc","component":"data2-core-types@Component","system":"66f6c624d8a4a0c67041a910","params":{"extends":"data2-core-primitives@Block","component":"bot-header","package":"fernando-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":"export default {\n  css: `\n    :host { position: absolute; inset: 0; display: block; }\n    .brand {\n      position: absolute; inset: 0;\n      display: flex; align-items: center; gap: 13px;\n      padding: 0 16px 0 26px; box-sizing: border-box;\n      font-family: system-ui, sans-serif;\n      background: #0d0f1a;\n      border-bottom: 1px solid rgba(255,255,255,0.06);\n      transition: background .25s, border-color .25s;\n    }\n    .brand.light { background: #ffffff; border-bottom: 1px solid rgba(0,0,0,0.08); }\n    .logo {\n      width: 40px; height: 40px; border-radius: 12px; flex-shrink: 0;\n      display: flex; align-items: center; justify-content: center;\n      font-size: 22px; line-height: 1;\n      background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 55%, #ec4899 100%);\n      box-shadow: 0 4px 16px rgba(99,102,241,0.45);\n    }\n    .txt { display: flex; flex-direction: column; gap: 1px; line-height: 1.15; min-width: 0; }\n    .name { font-size: 17px; font-weight: 700; letter-spacing: .2px; color: #f5f6f8; transition: color .25s; cursor: text; border-radius: 5px; padding: 0 2px; margin: 0 -2px; }\n    .name:hover { background: rgba(255,255,255,0.07); }\n    .brand.light .name { color: #111827; }\n    .brand.light .name:hover { background: rgba(0,0,0,0.05); }\n    .name-input {\n      font-size: 17px; font-weight: 700; letter-spacing: .2px; color: #f5f6f8;\n      background: rgba(255,255,255,0.12); border: 1px solid rgba(255,255,255,0.28);\n      border-radius: 6px; padding: 1px 7px; outline: none; font-family: inherit;\n      min-width: 140px; max-width: 340px;\n    }\n    .name-input:focus { border-color: #6366f1; }\n    .brand.light .name-input { color: #111827; background: rgba(0,0,0,0.05); border-color: rgba(0,0,0,0.22); }\n    .sub { font-size: 11px; font-weight: 500; color: rgba(255,255,255,0.42); white-space: nowrap; transition: color .25s; }\n    .brand.light .sub { color: rgba(0,0,0,0.45); }\n    .actions { margin-left: auto; display: flex; align-items: center; gap: 8px; flex-shrink: 0; }\n    .lang-btn {\n      display: flex; align-items: center; gap: 7px;\n      height: 40px; padding: 0 12px; border-radius: 20px;\n      border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.06);\n      color: #e5e7eb; cursor: pointer; font-size: 13px; font-weight: 600;\n      font-family: inherit; transition: background .2s, border-color .2s, color .2s;\n    }\n    .lang-btn:hover { background: rgba(255,255,255,0.12); }\n    .lang-btn .flag { font-size: 17px; line-height: 1; }\n    .lang-btn .chev { font-size: 10px; opacity: .6; }\n    .lang-btn > span { display: flex; align-items: center; line-height: 1; }\n    .brand.light .lang-btn { border: 1px solid rgba(0,0,0,0.1); background: rgba(0,0,0,0.04); color: #111827; }\n    .brand.light .lang-btn:hover { background: rgba(0,0,0,0.08); }\n    .theme-btn {\n      flex-shrink: 0; width: 40px; height: 40px; border-radius: 50%;\n      border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.06); color: #e5e7eb;\n      cursor: pointer; font-size: 17px; line-height: 1;\n      display: flex; align-items: center; justify-content: center;\n      transition: background .2s, border-color .2s, color .2s;\n    }\n    .theme-btn:hover { background: rgba(255,255,255,0.12); }\n    .brand.light .theme-btn { border: 1px solid rgba(0,0,0,0.1); background: rgba(0,0,0,0.04); color: #111827; }\n    .brand.light .theme-btn:hover { background: rgba(0,0,0,0.08); }\n  `,\n  render(d2) {\n    const light = d2.store('themeStore').get('mode', 'dark') === 'light'\n    const cs = d2.store('chatStore')\n    const lang = cs.get('lang', 'pt')\n    const I18N = {\n      pt: { sub: 'Atendimento que muda de tom conforme o contexto', light: 'Modo claro', dark: 'Modo escuro', editHint: 'Clique duas vezes para editar o nome' },\n      en: { sub: 'Support that adapts its tone to the context', light: 'Light mode', dark: 'Dark mode', editHint: 'Double-click to edit the name' },\n      es: { sub: 'Atención que adapta el tono al contexto', light: 'Modo claro', dark: 'Modo oscuro', editHint: 'Haz doble clic para editar el nombre' }\n    }\n    const FLAGS = { pt: '🇧🇷', en: '🇺🇸', es: '🇪🇸' }\n    const t = I18N[lang] || I18N.pt\n    const name = (cs.get('botName', '') || '').trim() || 'Bot Adaptativo'\n    const editingName = d2.state.editingName\n    const nameHtml = editingName\n      ? `<input class=\"name-input\" maxlength=\"40\" value=\"${name.replace(/&/g, '&amp;').replace(/\"/g, '&quot;')}\" />`\n      : `<span class=\"name\" title=\"${t.editHint}\">${name.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')}</span>`\n    return `\n      <div class=\"brand${light ? ' light' : ''}\">\n        <div class=\"logo\">🤖</div>\n        <div class=\"txt\">\n          ${nameHtml}\n          <span class=\"sub\">${t.sub}</span>\n        </div>\n        <div class=\"actions\">\n          <button class=\"theme-btn\" id=\"newconv-btn\" type=\"button\" title=\"${lang === 'en' ? 'New conversation' : lang === 'es' ? 'Nueva conversación' : 'Nova conversa'}\">\n            <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 12a9 9 0 1 0 3-6.7L3 8\"/><path d=\"M3 3v5h5\"/></svg>\n          </button>\n          <button class=\"lang-btn\" type=\"button\" title=\"Idioma / Language / Idioma\">\n            <span class=\"flag\">🌐</span>\n            <span>${(lang || 'pt').toUpperCase()}</span>\n            <span class=\"chev\">▼</span>\n          </button>\n          <button class=\"theme-btn\" type=\"button\" title=\"${light ? t.dark : t.light}\">${light ? '🌙' : '☀️'}</button>\n        </div>\n      </div>`\n  },\n  mounted(d2) {\n    const LANGS = [\n      { code: 'pt', flag: '🇧🇷', label: 'Português' },\n      { code: 'en', flag: '🇺🇸', label: 'English' },\n      { code: 'es', flag: '🇪🇸', label: 'Español' }\n    ]\n    let menu = null\n    const closeMenu = () => { if (menu) { menu.remove(); menu = null } }\n\n    const chooseLang = (code) => {\n      const cs = d2.store('chatStore')\n      if (cs.get('lang', 'pt') !== code) {\n        // Troca apenas o idioma dos próximos turnos. Mantém o histórico\n        // visível e a memória (summary) — cada mensagem antiga permanece\n        // no idioma em que foi trocada, sem tradução.\n        cs.set('lang', code)\n      }\n      closeMenu()\n    }\n\n    const openMenu = () => {\n      closeMenu()\n      const btn = d2.$('.lang-btn')\n      if (!btn) return\n      const light = d2.store('themeStore').get('mode', 'dark') === 'light'\n      const cur = d2.store('chatStore').get('lang', 'pt')\n      const bg = light ? '#ffffff' : '#1b2030'\n      const bd = light ? 'rgba(0,0,0,0.12)' : 'rgba(255,255,255,0.12)'\n      const txt = light ? '#111827' : '#e5e7eb'\n      const hov = light ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.08)'\n      const accent = light ? 'rgba(99,102,241,0.12)' : 'rgba(99,102,241,0.25)'\n      menu = document.createElement('div')\n      menu.style.cssText = `position:fixed;z-index:2147483600;background:${bg};border:1px solid ${bd};border-radius:12px;padding:6px;box-shadow:0 10px 34px rgba(0,0,0,0.35);min-width:180px;box-sizing:border-box;font-family:system-ui,sans-serif;`\n      LANGS.forEach(l => {\n        const it = document.createElement('button')\n        it.type = 'button'\n        const isCur = l.code === cur\n        it.innerHTML = `<span style=\"font-size:11px;font-weight:700;opacity:.55;min-width:24px;letter-spacing:.04em\">${l.code.toUpperCase()}</span><span style=\"flex:1;text-align:left\">${l.label}</span>${isCur ? '<span style=\"color:#6366f1;font-weight:700\">✓</span>' : ''}`\n        it.style.cssText = `display:flex;align-items:center;gap:10px;width:100%;border:none;cursor:pointer;font-size:14px;font-weight:${isCur ? '600' : '500'};color:${txt};background:${isCur ? accent : 'transparent'};padding:9px 11px;border-radius:8px;font-family:inherit;`\n        it.addEventListener('mouseenter', () => { if (!isCur) it.style.background = hov })\n        it.addEventListener('mouseleave', () => { if (!isCur) it.style.background = 'transparent' })\n        it.addEventListener('click', (ev) => { ev.stopPropagation(); chooseLang(l.code) })\n        menu.appendChild(it)\n      })\n      document.body.appendChild(menu)\n      const r = btn.getBoundingClientRect()\n      const left = Math.min(r.left, window.innerWidth - menu.offsetWidth - 8)\n      menu.style.left = Math.max(8, left) + 'px'\n      menu.style.top = (r.bottom + 6) + 'px'\n    }\n\n    d2.on('.lang-btn', 'click', (e) => {\n      e.stopPropagation()\n      if (menu) closeMenu()\n      else openMenu()\n    })\n    d2.on('.theme-btn', 'click', () => {\n      const s = d2.store('themeStore')\n      s.set('mode', s.get('mode', 'dark') === 'light' ? 'dark' : 'light')\n    })\n    d2.on('#newconv-btn', 'click', () => {\n      // Limpa só a conversa — mantém idioma, marca (botName), tema e estados.\n      const cs = d2.store('chatStore')\n      cs.set('messages', [])\n      cs.set('summary', '')\n      cs.set('lastBotMessage', '')\n      cs.set('loading', false)\n      cs.set('currentReasoning', '')\n      cs.set('currentState', 'Descoberta')\n      cs.set('currentEmoji', '🧭')\n      cs.set('currentColor', '#6366f1')\n    })\n    d2.on(document, 'click', () => { if (menu) closeMenu() })\n    d2.on(window, 'resize', closeMenu)\n    d2.onUnmount(closeMenu)\n\n    // --- Nome editável (duplo clique) → chatStore.botName ---\n    const commitName = () => {\n      if (!d2.state.editingName) return\n      const inp = d2.$('.name-input')\n      if (inp) d2.store('chatStore').set('botName', (inp.value || '').trim())\n      d2.state.editingName = false\n    }\n    d2.on('.name', 'dblclick', () => { d2.state.editingName = true })\n    d2.on('.name-input', 'keydown', (e) => {\n      if (e.key === 'Enter') { e.preventDefault(); commitName() }\n      else if (e.key === 'Escape') { e.preventDefault(); d2.state.editingName = false }\n    })\n    d2.on('.name-input', 'focusout', commitName)\n  },\n  updated(d2) {\n    if (d2.state.editingName) {\n      const inp = d2.$('.name-input')\n      if (inp && document.activeElement !== inp) { inp.focus(); inp.select() }\n    }\n  }\n}"}}}}}}}},{"_id":"6a41b8fe5de232c667b447f8","component":"data2-core-types@Component","system":"66f6c624d8a4a0c67041a910","params":{"extends":"data2-core-primitives@Block","component":"bot-chat-panel","package":"fernando-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":"export default {\n  css: `\n    :host { position: absolute; inset: 0; overflow: hidden; font-family: system-ui, sans-serif; }\n    .msgs {\n      position: absolute; inset: 0; overflow-y: auto; padding: 16px;\n      display: flex; flex-direction: column; gap: 8px; box-sizing: border-box;\n      --bg: #111827; --text: #e5e7eb; --muted: rgba(255,255,255,0.4); --faint: rgba(255,255,255,0.25); --thumb: rgba(255,255,255,0.15);\n      background: var(--bg); color: var(--text);\n      transition: background .25s, color .25s;\n    }\n    .msgs.light { --bg: #eceff3; --text: #111827; --muted: rgba(0,0,0,0.5); --faint: rgba(0,0,0,0.4); --thumb: rgba(0,0,0,0.2); }\n    .msgs::-webkit-scrollbar { width: 6px; }\n    .msgs::-webkit-scrollbar-track { background: transparent; }\n    .msgs::-webkit-scrollbar-thumb { background: var(--thumb); border-radius: 4px; }\n    .row { display: flex; flex-direction: column; }\n    .row.user { align-items: flex-end; }\n    .row.bot { align-items: flex-start; }\n    .bubble { max-width: 68%; padding: 8px 12px; border-radius: 14px; font-size: 14px; line-height: 1.4; word-break: break-word; white-space: pre-line; }\n    .bubble.user { background: #4f46e5; color: #fff; border-bottom-right-radius: 4px; }\n    .bubble.bot { color: var(--text); border-bottom-left-radius: 4px; }\n    .slabel { font-size: 11px; color: var(--muted); margin-top: 3px; padding: 0 2px; }\n    .dots { display: inline-flex; gap: 4px; align-items: center; }\n    .dots span { width: 7px; height: 7px; border-radius: 50%; background: var(--muted); animation: blink 1.2s infinite; }\n    .dots span:nth-child(2) { animation-delay: .2s; }\n    .dots span:nth-child(3) { animation-delay: .4s; }\n    @keyframes blink { 0%,80%,100%{opacity:.25} 40%{opacity:1} }\n    .empty-state { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; gap: 14px; padding: 32px 24px; }\n    .es-emoji { font-size: 60px; line-height: 1; }\n    .es-title { font-size: 24px; font-weight: 700; color: var(--text); }\n    .es-desc { font-size: 15px; color: var(--muted); max-width: 400px; line-height: 1.55; }\n  `,\n  render(d2) {\n    const light = d2.store('themeStore').get('mode', 'dark') === 'light'\n    const s = d2.store('chatStore')\n    const lang = s.get('lang', 'pt')\n    const HINT = {\n      pt: { t: 'Comece uma conversa!', s: 'O bot adapta o tom conforme o contexto detectado' },\n      en: { t: 'Start a conversation!', s: 'The bot adapts its tone to the detected context' },\n      es: { t: '¡Inicia una conversación!', s: 'El bot adapta el tono según el contexto detectado' }\n    }\n    const SNAME = {\n      en: { Vendas: 'Sales', Entusiasmado: 'Excited', Descoberta: 'Discovery', Suporte: 'Support' },\n      es: { Vendas: 'Ventas', Entusiasmado: 'Entusiasmado', Descoberta: 'Descubrimiento', Suporte: 'Soporte' }\n    }\n    const trName = (n, l) => (l !== 'pt' && SNAME[l] && SNAME[l][n]) ? SNAME[l][n] : n\n    const hint = HINT[lang] || HINT.pt\n    const msgs = s.get('messages', [])\n    const loading = s.get('loading', false)\n    const rows = msgs.length\n      ? msgs.map((m, i) => {\n          const txt = (m.text || '')\n            .replace(/\\r/g, '')\n            .replace(/[ \\t]+\\n/g, '\\n')\n            .replace(/\\n{2,}/g, '\\n')\n            .trim()\n            .replace(/&/g, '&amp;')\n            .replace(/</g, '&lt;')\n            .replace(/>/g, '&gt;')\n          const label = m.stateName ? `${m.emoji || ''} ${trName(m.stateName, m.lang || lang)}`.trim() : (m.stateLabel || '')\n          return `\n          <div class=\"row ${m.role}\" data-key=\"${i}\">\n            <div class=\"bubble ${m.role}\" ${m.role === 'bot' ? `style=\"background:${m.color || '#6366f1'}22;border:1px solid ${m.color || '#6366f1'}40;\"` : ''}>${txt}</div>\n            ${m.role === 'bot' && label ? `<div class=\"slabel\">${label}</div>` : ''}\n          </div>`\n        }).join('')\n      : `<div class=\"empty-state\"><div class=\"es-emoji\">👋</div><div class=\"es-title\">${hint.t}</div><div class=\"es-desc\">${hint.s}</div></div>`\n    const dots = loading ? `\n      <div class=\"row bot\">\n        <div class=\"bubble bot\" style=\"background:${light ? 'rgba(0,0,0,0.05)' : 'rgba(255,255,255,0.05)'};border:1px solid ${light ? 'rgba(0,0,0,0.12)' : 'rgba(255,255,255,0.12)'};\">\n          <div class=\"dots\"><span></span><span></span><span></span></div>\n        </div>\n      </div>` : ''\n    return `<div class=\"msgs${light ? ' light' : ''}\" id=\"msgs\">${rows}${dots}</div>`\n  },\n  updated(d2) {\n    const el = d2.$('#msgs')\n    if (el) requestAnimationFrame(() => { el.scrollTop = el.scrollHeight })\n  }\n}"}}}}}}}},{"_id":"6a42bb40a8e70e8e2bc7d708","component":"data2-core-types@Component","system":"66f6c624d8a4a0c67041a910","params":{"extends":"data2-core-primitives@Block","component":"bot-chat-input","package":"fernando-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":"export default {\n  css: `\n    :host { position: absolute; inset: 0; display: block; }\n    .bar {\n      position: absolute; inset: 0;\n      display: flex; align-items: center; gap: 8px;\n      box-sizing: border-box; padding: 12px 16px;\n      font-family: system-ui, sans-serif;\n      --bar-bg:#0d1320; --field-bg:#1f2937; --field-border:rgba(255,255,255,0.08);\n      --text:#e5e7eb; --ph:rgba(255,255,255,0.3); --icon:rgba(255,255,255,0.55);\n      --icon-hover:#e5e7eb; --icon-hover-bg:rgba(255,255,255,0.08);\n      --thumb:rgba(255,255,255,0.15); --topborder:rgba(255,255,255,0.08);\n      background: var(--bar-bg); border-top: 1px solid var(--topborder);\n      transition: background .25s, border-color .25s;\n    }\n    .bar.light {\n      --bar-bg:#f0f2f5; --field-bg:#ffffff; --field-border:rgba(0,0,0,0.12);\n      --text:#111827; --ph:rgba(0,0,0,0.4); --icon:rgba(0,0,0,0.5);\n      --icon-hover:#111827; --icon-hover-bg:rgba(0,0,0,0.06);\n      --thumb:rgba(0,0,0,0.2); --topborder:rgba(0,0,0,0.08);\n    }\n    .icon-btn {\n      flex-shrink: 0; width: 42px; height: 42px; border: none; border-radius: 50%;\n      background: transparent; color: var(--icon); cursor: pointer;\n      font-size: 22px; line-height: 1; display: flex; align-items: center; justify-content: center;\n      transition: background .2s, color .2s;\n    }\n    .icon-btn:hover { background: var(--icon-hover-bg); color: var(--icon-hover); }\n    .field {\n      flex: 1; display: flex; align-items: center; min-width: 0;\n      background: var(--field-bg); border: 1.5px solid var(--field-border);\n      border-radius: 22px; padding: 4px 16px; transition: border-color .2s, background .25s;\n    }\n    .field:focus-within { border-color: #4f46e5; }\n    textarea.in {\n      flex: 1; width: 100%; border: none; outline: none; background: transparent;\n      color: var(--text); font: 14px/1.5 system-ui, sans-serif; resize: none;\n      height: 24px; max-height: 96px; overflow-y: auto; padding: 4px 0; box-sizing: content-box;\n    }\n    textarea.in::placeholder { color: var(--ph); }\n    textarea.in::-webkit-scrollbar { width: 4px; }\n    textarea.in::-webkit-scrollbar-thumb { background: var(--thumb); border-radius: 4px; }\n    .send {\n      flex-shrink: 0; width: 44px; height: 44px; border: none; border-radius: 50%;\n      background: #4f46e5; color: #fff; cursor: pointer;\n      display: flex; align-items: center; justify-content: center;\n      transition: background .2s, opacity .2s, transform .08s;\n    }\n    .send:hover:not(:disabled) { background: #6366f1; }\n    .send:active:not(:disabled) { transform: scale(0.92); }\n    .send:disabled { opacity: 0.45; cursor: default; }\n    .send svg { width: 20px; height: 20px; display: block; }\n  `,\n  render(d2) {\n    const light = d2.store('themeStore').get('mode', 'dark') === 'light'\n    const lang = d2.store('chatStore').get('lang', 'pt')\n    const PH = { pt: 'Digite uma mensagem', en: 'Type a message', es: 'Escribe un mensaje' }\n    return `\n      <div class=\"bar${light ? ' light' : ''}\">\n        <div class=\"field\">\n          <textarea class=\"in\" rows=\"1\" placeholder=\"${PH[lang] || PH.pt}\"></textarea>\n        </div>\n        <button class=\"emoji-btn icon-btn\" type=\"button\" title=\"Emoji\">😊</button>\n        <button class=\"send\" type=\"button\" title=\"Enviar\">\n          <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M3.4 20.4l17.45-7.48a1 1 0 0 0 0-1.84L3.4 3.6a.993.993 0 0 0-1.39.91L2 9.12c0 .5.37.93.87.99L17 12 2.87 13.88c-.5.07-.87.5-.87 1l.01 4.61c0 .67.68 1.13 1.39.91z\"/></svg>\n        </button>\n      </div>`\n  },\n  mounted(d2) {\n    const EMOJIS = ['😀','😁','😂','🤣','😊','😍','😘','😎','🤩','🥳','😅','😉','🙂','😇','🤔','😴','😭','😡','👍','👎','🙏','👏','🙌','💪','👋','🤝','❤️','🔥','✨','🎉','💰','🚀','✅','❌','💯','🤖','🛟','🧭','😢','😱']\n    const ERR = { pt: '⚠️ Erro ao falar com o bot. Tente novamente.', en: '⚠️ Error talking to the bot. Please try again.', es: '⚠️ Error al hablar con el bot. Inténtalo de nuevo.' }\n\n    const grow = () => {\n      const t = d2.$('.in')\n      if (!t) return\n      t.style.height = 'auto'\n      t.style.height = Math.min(t.scrollHeight, 96) + 'px'\n    }\n\n    const insertEmoji = (em) => {\n      const t = d2.$('.in')\n      if (!t) return\n      const s = t.selectionStart != null ? t.selectionStart : t.value.length\n      const e = t.selectionEnd != null ? t.selectionEnd : t.value.length\n      t.value = t.value.slice(0, s) + em + t.value.slice(e)\n      const pos = s + em.length\n      t.selectionStart = t.selectionEnd = pos\n      t.focus()\n      grow()\n    }\n\n    let pop = null\n    const closePop = () => { if (pop) { pop.remove(); pop = null } }\n    const openPop = () => {\n      closePop()\n      const btn = d2.$('.emoji-btn')\n      if (!btn) return\n      const light = d2.store('themeStore').get('mode', 'dark') === 'light'\n      const bg = light ? '#ffffff' : '#1f2937'\n      const bd = light ? 'rgba(0,0,0,0.12)' : 'rgba(255,255,255,0.12)'\n      const hov = light ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.1)'\n      pop = document.createElement('div')\n      pop.style.cssText = `position:fixed;z-index:2147483600;background:${bg};border:1px solid ${bd};border-radius:14px;padding:10px;display:grid;grid-template-columns:repeat(8,44px);grid-auto-rows:44px;gap:4px;box-shadow:0 10px 34px rgba(0,0,0,0.35);box-sizing:border-box;`\n      EMOJIS.forEach(em => {\n        const b = document.createElement('button')\n        b.type = 'button'\n        b.textContent = em\n        b.style.cssText = 'border:none;background:transparent;cursor:pointer;font-size:23px;line-height:1;padding:0;border-radius:8px;display:flex;align-items:center;justify-content:center;'\n        b.addEventListener('mouseenter', () => { b.style.background = hov })\n        b.addEventListener('mouseleave', () => { b.style.background = 'transparent' })\n        b.addEventListener('click', (ev) => { ev.stopPropagation(); insertEmoji(em) })\n        pop.appendChild(b)\n      })\n      document.body.appendChild(pop)\n      const r = btn.getBoundingClientRect()\n      pop.style.left = Math.min(Math.max(8, r.left), window.innerWidth - pop.offsetWidth - 8) + 'px'\n      pop.style.top = Math.max(8, r.top - pop.offsetHeight - 8) + 'px'\n    }\n\n    const send = async () => {\n      const t = d2.$('.in')\n      const btn = d2.$('.send')\n      if (!t) return\n      const text = t.value.trim()\n      const store = d2.store('chatStore')\n      if (!text || store.get('loading', false)) return\n      const lang = store.get('lang', 'pt')\n      closePop()\n      t.value = ''\n      grow()\n      if (btn) btn.disabled = true\n      const prev = store.get('messages', [])\n      store.set('messages', [...prev, { role: 'user', text }])\n      store.set('loading', true)\n      const summary = store.get('summary', '')\n      const lastBotMessage = store.get('lastBotMessage', '')\n      const states = d2.store('statesStore').get('states', [])\n      const botName = (d2.store('chatStore').get('botName', '') || '').trim()\n      try {\n        const res = await d2.rush('chat-turn').invoke({ userMessage: text, summary, lastBotMessage, lang, states, botName })\n        const r = (res && res.data && (res.data.reply !== undefined || res.data.stateName !== undefined || res.data.error !== undefined)) ? res.data : res\n        if (!r || r.error) throw new Error((r && r.error) || 'empty response')\n        const reply = r.reply || ''\n        const stateName = r.stateName || ''\n        const emoji = r.emoji || '🤖'\n        const color = r.color || '#6366f1'\n        const msgs = store.get('messages', [])\n        store.set('messages', [...msgs, { role: 'bot', text: reply, color, stateName, emoji, lang }])\n        store.set('currentState', stateName)\n        store.set('currentEmoji', emoji)\n        store.set('currentColor', color)\n        store.set('currentReasoning', r.reasoning || '')\n        store.set('summary', r.newSummary || summary)\n        store.set('lastBotMessage', reply)\n      } catch (err) {\n        d2.log('chat-turn error', err)\n        const msgs = store.get('messages', [])\n        store.set('messages', [...msgs, { role: 'bot', text: ERR[lang] || ERR.pt, color: '#ef4444' }])\n      } finally {\n        store.set('loading', false)\n        if (btn) btn.disabled = false\n        const tn = d2.$('.in')\n        if (tn) tn.focus()\n      }\n    }\n\n    d2.on('.emoji-btn', 'click', (e) => {\n      e.stopPropagation()\n      if (pop) closePop()\n      else openPop()\n    })\n    d2.on(document, 'click', () => { if (pop) closePop() })\n    d2.on(window, 'resize', closePop)\n    d2.onUnmount(closePop)\n\n    d2.on('.send', 'click', send)\n    d2.on('.in', 'keydown', (e) => {\n      if (e.key === 'Enter' && !e.shiftKey) {\n        e.preventDefault()\n        send()\n      }\n    })\n    d2.on('.in', 'input', grow)\n  }\n}"}}}}}}}},{"_id":"6a41b914e75b1a017079ce6f","component":"data2-core-types@Component","system":"66f6c624d8a4a0c67041a910","params":{"extends":"data2-core-primitives@Block","component":"bot-state-panel","package":"fernando-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":"export default {\n  css: `\n    :host { position: absolute; inset: 0; overflow: hidden; font-family: system-ui, sans-serif; }\n    .panel {\n      position: absolute; inset: 0; overflow-y: auto; padding: 16px;\n      display: flex; flex-direction: column; gap: 16px; box-sizing: border-box;\n      --bg:#0f1117; --text:#e5e7eb; --muted:rgba(255,255,255,0.3); --faint:rgba(255,255,255,0.35);\n      --reason-bg:rgba(255,255,255,0.05); --reason-text:rgba(255,255,255,0.6); --reason-border:rgba(255,255,255,0.08);\n      --item-bg:rgba(255,255,255,0.04); --item-hover:rgba(255,255,255,0.08);\n      --input-bg:rgba(255,255,255,0.06); --input-border:rgba(255,255,255,0.12);\n      --ghost-bg:rgba(255,255,255,0.08); --thumb:rgba(255,255,255,0.18); --thumb-hover:rgba(255,255,255,0.32);\n      background: var(--bg); color: var(--text);\n      transition: background .25s, color .25s;\n    }\n    .panel.light {\n      --bg:#ffffff; --text:#111827; --muted:rgba(0,0,0,0.42); --faint:rgba(0,0,0,0.4);\n      --reason-bg:rgba(0,0,0,0.04); --reason-text:rgba(0,0,0,0.62); --reason-border:rgba(0,0,0,0.08);\n      --item-bg:rgba(0,0,0,0.03); --item-hover:rgba(0,0,0,0.06);\n      --input-bg:#ffffff; --input-border:rgba(0,0,0,0.15);\n      --ghost-bg:rgba(0,0,0,0.06); --thumb:rgba(0,0,0,0.22); --thumb-hover:rgba(0,0,0,0.4);\n    }\n    .panel::-webkit-scrollbar { width: 4px; }\n    .panel::-webkit-scrollbar-thumb { background: var(--thumb); border-radius: 4px; }\n    .section { display: flex; flex-direction: column; gap: 8px; flex-shrink: 0; }\n    .sec-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n    .sec-label { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; color: var(--muted); }\n    .add-btn { border: 1px solid var(--input-border); background: var(--item-bg); color: var(--text); border-radius: 8px; padding: 5px 11px; cursor: pointer; font-size: 12px; font-weight: 600; font-family: inherit; display: flex; align-items: center; gap: 5px; transition: background .2s, border-color .2s; }\n    .add-btn:hover { background: var(--item-hover); border-color: #4f46e5; }\n    .reasoning-box { padding: 10px 12px; border-radius: 10px; background: var(--reason-bg); font-size: 13px; color: var(--reason-text); line-height: 1.5; border: 1px solid var(--reason-border); }\n    .state-item { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: 10px; border: 1.5px solid transparent; background: var(--item-bg); cursor: pointer; transition: border-color .2s, background .2s; }\n    .state-item:hover { background: var(--item-hover); }\n    .state-item.current { border-color: var(--c); background: var(--c-faint); }\n    .state-item.editing { border-color: var(--c); }\n    .cbar { width: 4px; border-radius: 4px; align-self: stretch; min-height: 40px; flex-shrink: 0; }\n    .semoji { font-size: 19px; line-height: 1; flex-shrink: 0; display: flex; align-items: center; }\n    .info { flex: 1; min-width: 0; }\n    .sname { font-size: 13px; font-weight: 600; color: var(--text); }\n    .strigger { font-size: 11px; color: var(--faint); margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n    .edit-panel { flex-shrink: 0; padding: 14px; border-radius: 12px; background: var(--reason-bg); display: flex; flex-direction: column; gap: 8px; border: 1px solid var(--reason-border); }\n    .edit-title { font-size: 13px; font-weight: 700; color: var(--text); margin-bottom: 2px; }\n    .elabel { font-size: 12px; font-weight: 600; color: var(--muted); }\n    .einp { width: 100%; border: 1.5px solid var(--input-border); border-radius: 8px; padding: 8px 11px; font-size: 13px; background: var(--input-bg); color: var(--text); outline: none; box-sizing: border-box; font-family: inherit; }\n    .einp::placeholder { color: var(--faint); }\n    .einp:focus { border-color: #4f46e5; }\n    .einp::-webkit-scrollbar { width: 9px; }\n    .einp::-webkit-scrollbar-track { background: transparent; margin: 4px 0; }\n    .einp::-webkit-scrollbar-thumb { background: var(--thumb); border-radius: 8px; border: 2px solid transparent; background-clip: padding-box; }\n    .einp::-webkit-scrollbar-thumb:hover { background: var(--thumb-hover); background-clip: padding-box; }\n    .eta { min-height: 88px; resize: vertical; line-height: 1.5; scrollbar-width: thin; scrollbar-color: var(--thumb) transparent; }\n    .erow { display: flex; gap: 8px; }\n    .efield { display: flex; flex-direction: column; gap: 6px; }\n    .efield.emoji { width: 76px; flex-shrink: 0; }\n    .efield.color { width: 92px; flex-shrink: 0; }\n    .einp.eemoji { text-align: center; font-size: 18px; padding: 6px; }\n    .einp.ecolor { padding: 3px; height: 38px; cursor: pointer; }\n    .einp.ecolor::-webkit-color-swatch-wrapper { padding: 0; }\n    .einp.ecolor::-webkit-color-swatch { border: none; border-radius: 6px; }\n    .btns { display: flex; gap: 8px; flex-shrink: 0; margin-top: 4px; align-items: center; }\n    .sbtn { border: none; border-radius: 8px; padding: 8px 16px; cursor: pointer; font-size: 13px; font-weight: 600; transition: opacity .2s, filter .2s; font-family: inherit; }\n    .sbtn:hover { filter: brightness(1.08); }\n    .sbtn-primary { background: #4f46e5; color: #fff; }\n    .sbtn-ghost { background: var(--ghost-bg); color: var(--text); }\n    .sbtn-danger { background: transparent; color: #ef4444; border: 1px solid rgba(239,68,68,0.4); margin-left: auto; }\n    .sbtn-danger:hover { background: rgba(239,68,68,0.12); filter: none; }\n    .empty { color: var(--faint); font-size: 13px; font-style: italic; }\n  `,\n  render(d2) {\n    const light = d2.store('themeStore').get('mode', 'dark') === 'light'\n    const cs = d2.store('chatStore')\n    const lang = cs.get('lang', 'pt')\n    const UI = {\n      pt: { reasoning: 'Raciocínio do bot', states: 'Estados', add: 'Novo', reasoningEmpty: 'Envie uma mensagem para ver o raciocínio', empty: 'Nenhum estado configurado', nome: 'Nome do estado', trig: 'Gatilho de ativação', behav: 'Comportamento do bot', emoji: 'Emoji', cor: 'Cor', save: 'Salvar', cancel: 'Cancelar', del: 'Excluir', newTitle: 'Novo estado', editTitle: 'Editar estado' },\n      en: { reasoning: 'Bot reasoning', states: 'States', add: 'New', reasoningEmpty: 'Send a message to see the reasoning', empty: 'No states configured', nome: 'State name', trig: 'Activation trigger', behav: 'Bot behavior', emoji: 'Emoji', cor: 'Color', save: 'Save', cancel: 'Cancel', del: 'Delete', newTitle: 'New state', editTitle: 'Edit state' },\n      es: { reasoning: 'Razonamiento del bot', states: 'Estados', add: 'Nuevo', reasoningEmpty: 'Envía un mensaje para ver el razonamiento', empty: 'Ningún estado configurado', nome: 'Nombre del estado', trig: 'Disparador de activación', behav: 'Comportamiento del bot', emoji: 'Emoji', cor: 'Color', save: 'Guardar', cancel: 'Cancelar', del: 'Eliminar', newTitle: 'Nuevo estado', editTitle: 'Editar estado' }\n    }\n    const STATES_TR = {\n      en: {\n        Vendas: { name: 'Sales', trigger: 'The user shows interest in buying, upgrading their plan, learning prices, or is evaluating the product.' },\n        Entusiasmado: { name: 'Excited', trigger: 'The user is excited, enthusiastic, praising, or talking about a topic/hobby they clearly enjoy (movie, team, game, series).' },\n        Descoberta: { name: 'Discovery', trigger: 'DEFAULT state. The user asks general questions, explores the product, or there is no clear sign of a complaint or purchase intent yet.' },\n        Suporte: { name: 'Support', trigger: 'The user reports a problem, bug, error, frustration, or complains that something did not work as expected.' }\n      },\n      es: {\n        Vendas: { name: 'Ventas', trigger: 'El usuario muestra interés en comprar, mejorar su plan, conocer precios o evaluar contratar el producto.' },\n        Entusiasmado: { name: 'Entusiasmado', trigger: 'El usuario está animado, entusiasmado, elogiando o hablando de un tema/afición que claramente le gusta (película, equipo, juego, serie).' },\n        Descoberta: { name: 'Descubrimiento', trigger: 'Estado POR DEFECTO. El usuario hace preguntas generales, explora el producto o aún no hay señales claras de queja ni intención de compra.' },\n        Suporte: { name: 'Soporte', trigger: 'El usuario reporta un problema, bug, error, frustración o se queja de que algo no funcionó como esperaba.' }\n      }\n    }\n    const t = UI[lang] || UI.pt\n    const tr = (rec) => (lang !== 'pt' && STATES_TR[lang] && STATES_TR[lang][rec.name]) ? STATES_TR[lang][rec.name] : { name: rec.name || '', trigger: rec.trigger || '' }\n    const reasoning = cs.get('currentReasoning', '')\n    const currentState = cs.get('currentState', '')\n    const editId = d2.state.editId\n    const records = d2.store('statesStore').get('states', []) || []\n    const items = records.map(r => {\n      const isCurrent = r.name === currentState\n      const isEditing = r.id === editId\n      const c = r.color || '#6366f1'\n      const disp = tr(r)\n      return `\n        <div class=\"state-item${isCurrent ? ' current' : ''}${isEditing ? ' editing' : ''}\" data-id=\"${r.id}\" style=\"--c:${c};--c-faint:${c}18;\">\n          <div class=\"cbar\" style=\"background:${c}\"></div>\n          <div class=\"semoji\">${r.emoji || '•'}</div>\n          <div class=\"info\">\n            <div class=\"sname\">${disp.name}</div>\n            <div class=\"strigger\">${disp.trigger}</div>\n          </div>\n        </div>`\n    }).join('')\n    const isNew = editId === '__new__'\n    let rec = null\n    if (isNew) rec = { name: '', trigger: '', behaviorPrompt: '', emoji: '✨', color: '#6366f1', isDefault: false }\n    else if (editId) rec = records.find(r => r.id === editId)\n    let editForm = ''\n    if (rec) {\n      const esc = (v) => (v || '').replace(/&/g, '&amp;').replace(/\"/g, '&quot;')\n      const taEsc = (v) => (v || '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')\n      editForm = `\n        <div class=\"edit-panel\">\n          <div class=\"edit-title\">${isNew ? t.newTitle : t.editTitle}</div>\n          <div class=\"elabel\">${t.nome}</div>\n          <input class=\"einp\" id=\"ename\" value=\"${esc(rec.name)}\" />\n          <div class=\"elabel\">${t.trig}</div>\n          <input class=\"einp\" id=\"etrigger\" value=\"${esc(rec.trigger)}\" />\n          <div class=\"elabel\">${t.behav}</div>\n          <textarea class=\"einp eta\" id=\"ebehavior\">${taEsc(rec.behaviorPrompt)}</textarea>\n          <div class=\"erow\">\n            <div class=\"efield emoji\">\n              <div class=\"elabel\">${t.emoji}</div>\n              <input class=\"einp eemoji\" id=\"eemoji\" maxlength=\"4\" value=\"${esc(rec.emoji)}\" />\n            </div>\n            <div class=\"efield color\">\n              <div class=\"elabel\">${t.cor}</div>\n              <input class=\"einp ecolor\" id=\"ecolor\" type=\"color\" value=\"${rec.color || '#6366f1'}\" />\n            </div>\n          </div>\n          <div class=\"btns\">\n            <button class=\"sbtn sbtn-primary\" id=\"esave\">${t.save}</button>\n            <button class=\"sbtn sbtn-ghost\" id=\"ecancel\">${t.cancel}</button>\n            ${(!isNew && rec && !rec.isDefault) ? `<button class=\"sbtn sbtn-danger\" id=\"edelete\">${t.del}</button>` : ''}\n          </div>\n        </div>`\n    }\n    return `\n      <div class=\"panel${light ? ' light' : ''}\">\n        <div class=\"section\">\n          <div class=\"sec-label\">${t.reasoning}</div>\n          ${reasoning ? `<div class=\"reasoning-box\">${reasoning}</div>` : `<div class=\"empty\">${t.reasoningEmpty}</div>`}\n        </div>\n        <div class=\"section\">\n          <div class=\"sec-head\">\n            <div class=\"sec-label\">${t.states} (${records.length})</div>\n            <button class=\"add-btn\" id=\"enew\" type=\"button\">＋ ${t.add}</button>\n          </div>\n          ${items || `<div class=\"empty\">${t.empty}</div>`}\n        </div>\n        ${editForm}\n      </div>`\n  },\n  mounted(d2) {\n    d2.on('.state-item', 'click', e => {\n      const el = e.target.closest('[data-id]')\n      if (!el) return\n      d2.state.editId = d2.state.editId === el.dataset.id ? null : el.dataset.id\n    })\n    d2.on('#enew', 'click', () => { d2.state.editId = '__new__' })\n    d2.on('#ecancel', 'click', () => { d2.state.editId = null })\n    d2.on('#edelete', 'click', () => {\n      const ss = d2.store('statesStore')\n      const id = d2.state.editId\n      if (!id || id === '__new__') return\n      ss.set('states', (ss.get('states', []) || []).filter(r => r.id !== id))\n      d2.state.editId = null\n    })\n    d2.on('#esave', 'click', () => {\n      const ss = d2.store('statesStore')\n      const arr = ss.get('states', []) || []\n      const nameEl = d2.$('#ename')\n      const name = ((nameEl && nameEl.value) || '').trim()\n      if (!name) { if (nameEl) nameEl.focus(); return }\n      const trigger = ((d2.$('#etrigger') && d2.$('#etrigger').value) || '').trim()\n      const behavior = (d2.$('#ebehavior') && d2.$('#ebehavior').value) || ''\n      const emoji = ((d2.$('#eemoji') && d2.$('#eemoji').value) || '').trim() || '✨'\n      const color = (d2.$('#ecolor') && d2.$('#ecolor').value) || '#6366f1'\n      if (d2.state.editId === '__new__') {\n        const id = 's_' + Date.now()\n        ss.set('states', [...arr, { id, name, trigger, behaviorPrompt: behavior, emoji, color, isDefault: false }])\n      } else {\n        const id = d2.state.editId\n        ss.set('states', arr.map(r => r.id === id ? { ...r, name, trigger, behaviorPrompt: behavior, emoji, color } : r))\n      }\n      d2.state.editId = null\n    })\n  }\n}"}}}}}}}}]}},{"reference":"ExternalComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"_id":"5f060d9b1ca96def42f3c40a","displayName":"Builder AuthStrategy","component":"data2-core@AuthenticationStrategy","system":"5e3b796d6228227ca637d0f4","params":{"credentials":[{"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"status"}}],"verifier":{"component":"data2-core-types@DataSetReference","params":{"reference":"UsersDataSet"}},"sessionShared":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"password":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},"email":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},"resetPassword":{"resetEmail":{"artboard":{"params":{"preventEvaluation":true,"reference":"nR6Q9d7qdaPtZhJ28Q8Dy"},"component":"data2-core-types@ArtboardReference"}},"resetSuccessEmail":{"artboard":{"params":{"preventEvaluation":true,"reference":"yPCJBTKo8q1Mw0B_3Kpwl"},"component":"data2-core-types@ArtboardReference"}}},"session":[{"component":"data2-core-types@DataSetColumnReference","params":{"column":"name"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"status"}}],"sessionMetadata":{"params":{"actions":[{"params":{"compare":{"params":{"subject":{"params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},{"params":{"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":"active"}},"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user.status"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is active user"}]},"component":"data2-core-logical-operators@And","displayName":"is active and has _id"}},"component":"data2-core-logical-operators@Not"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check $user"},{"params":{"action":{"params":{"pattern":{"component":"data2-core-primitives@String","params":{"content":"@data2.app"}},"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user.email"}}}}},"component":"data2-core-functions@Includes","displayName":"isData2User"},"resultName":{"component":"data2-core-primitives@String","params":{"content":"is_data2_user"}}},"component":"data2-core-flow@Step"},{"params":{"action":{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.d2_app"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"management"}}]},"component":"data2-core-functions@Includes","displayName":"isData2App Exception"},"resultName":{"component":"data2-core-primitives@String","params":{"content":"is_data2_app_exception"}}},"component":"data2-core-flow@Step"},{"params":{"resultName":{"component":"data2-core-primitives@String","params":{"content":"has_access"}},"action":{"params":{"compare":{"params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_user"}}}},{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_app_exception"}}}}]},"component":"data2-core-logical-operators@Or"},"else":{"params":{"actions":[{"params":{"actions":[{"params":{"compare":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}},"component":"data2-core-logical-operators@Not"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check $metadata.system"},{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":"filter","args":[{"_id":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}}]},"component":"data2-core-types@Interaction"},{"params":{"compare":{"params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records.length"}}}}},"component":"data2-core-logical-operators@Not","displayName":"systems not found"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check system found"},{"params":{"actions":[{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":"filter","args":[{"user":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},"organization":{"component":"data2-core-types@Getter","params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"cursor.current.organization._id"}}}}}]},"component":"data2-core-types@Interaction"},{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":"filter","args":[{"user":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},"system":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}}]},"component":"data2-core-types@Interaction"}]},"component":"data2-core-flow@Parallel"}]},"component":"data2-core-flow@Series","displayName":"common setup"},{"params":{"then":{"params":{"content":true},"component":"data2-core-primitives@Boolean"},"else":{"params":{"content":false},"component":"data2-core-primitives@Boolean"},"compare":{"params":{"components":{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"mapper":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"system"}}],"body":{"params":{"expression":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.visibility"}}}},"defaultCase":{"params":{"content":false},"component":"data2-core-primitives@Boolean"},"cases":[{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-primitives@String","params":{"content":"public"}},"value":{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"owner"}},{"component":"data2-core-primitives@String","params":{"content":"billing-owner"}},{"component":"data2-core-primitives@String","params":{"content":"admin"}},{"component":"data2-core-primitives@String","params":{"content":"member"}}]},"component":"data2-core-functions@Includes","displayName":"has role with access"}]},"component":"data2-core-logical-operators@And","displayName":"has org member role with access"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is org member"},{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":"collaborator"}}},"component":"data2-core-comparison-operators@Equal","displayName":"is collaborator"}]},"component":"data2-core-logical-operators@And","displayName":"is org member and collaborator"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is collaborator"},{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"access"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"access.system._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"has system access"}]},"component":"data2-core-logical-operators@And","displayName":"is collaborator and has system access"}]},"component":"data2-core-logical-operators@Or"}}},{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-primitives@String","params":{"content":"private"}},"value":{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"owner"}},{"component":"data2-core-primitives@String","params":{"content":"admin"}}]},"component":"data2-core-functions@Includes","displayName":"is owner/admin"}]},"component":"data2-core-logical-operators@And","displayName":"has org member role with access"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is owner/admin"},{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is org member"},{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"access"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"access.system._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"has system access"}]},"component":"data2-core-logical-operators@And","displayName":"is member and has system access"}]},"component":"data2-core-logical-operators@Or","displayName":"is owner/admin or has system access"}}}]},"component":"data2-core-flow@Switch"}}}},"component":"data2-core-functions@ArrayMap"}},"component":"data2-core-logical-operators@And","displayName":"has org member for all systems in request"}},"component":"data2-core-flow@If"}]},"component":"data2-core-flow@Series"},"then":{"params":{"content":true},"component":"data2-core-primitives@Boolean"}},"component":"data2-core-flow@If"}},"component":"data2-core-flow@Step"},{"params":{"then":{"system":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}},"else":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"},"compare":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"has_access"}}}}},"component":"data2-core-flow@If"}]},"component":"data2-core-flow@Series"},"sessionExpiresIn":{"component":"data2-core-primitives@Number","params":{"content":604800}},"sessionRenewal":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"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":[]}},{"reference":"ComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a41b9165de232c667b44814","component":"data2-core-primitives@Artboard","system":"66f6c624d8a4a0c67041a910","displayName":"bot-v2","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"bot-v2"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0}}},"reference":"e4bsa-ftzDQKJWhOlNTOE"},{"_id":"f1ab7113849ab1af7639292a","parent":"6a41b9165de232c667b44814","component":"data2-core-primitives@Block","system":"66f6c624d8a4a0c67041a910","displayName":"Page","params":{"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}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#111827"}}}}]}}},"reference":"Ggh1-_VDwDUiSGZCb2MYc"},{"_id":"5395b879d78e00dbe1b8df4e","parent":"f1ab7113849ab1af7639292a","component":"data2-core-primitives@Block","system":"66f6c624d8a4a0c67041a910","displayName":"Body","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":64,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":836}},"childrenMode":"cols"},"reference":"iBrP2FitCpGyjEYFz1s_B"},{"_id":"bddcc2299eecc6420cf0d74e","parent":"f1ab7113849ab1af7639292a","component":"data2-core-primitives@Block","system":"66f6c624d8a4a0c67041a910","displayName":"Header","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":64}},"childrenMode":"cols","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#0d0f1a"}}}}]}},"gap":16,"verticalAlignment":"center"},"reference":"TMRvu7zlE0gzr-4hcfKc3"},{"_id":"0a13ffd03b1a0e635fe6c47c","parent":"5395b879d78e00dbe1b8df4e","component":"data2-core-primitives@Block","system":"66f6c624d8a4a0c67041a910","displayName":"ChatArea","params":{"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":1008,"height":836}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#111827"}}}}]}},"growH":true},"reference":"ksCKQkO0S61eo-WCmsy-k"},{"_id":"179adee4201f4128f5e34f76","parent":"5395b879d78e00dbe1b8df4e","component":"data2-core-primitives@Block","system":"66f6c624d8a4a0c67041a910","displayName":"SideDivider","params":{"position":{"component":"data2-core-types@Position","params":{"x":1008,"y":0,"freeTransform":true,"left":false,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1,"height":836}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#8b94a83d"}}}}]}}},"reference":"Li45A3R2xLePde78rDMXV"},{"_id":"ff5a49d7d8dbb47aa99b2cd1","parent":"5395b879d78e00dbe1b8df4e","component":"data2-core-primitives@Block","system":"66f6c624d8a4a0c67041a910","displayName":"SideArea","params":{"position":{"component":"data2-core-types@Position","params":{"x":1009,"y":0,"freeTransform":true,"left":false,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":431,"height":836}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#0f1117"}}}}]}}},"reference":"6kMbHiky0QEV__b3tuhv5"},{"_id":"2e1ee6bab69fb8ca6c69ac50","parent":"bddcc2299eecc6420cf0d74e","component":"fernando-playground@bot-header","system":"66f6c624d8a4a0c67041a910","displayName":"HeaderBrand","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":64}}}},"reference":"df50xzjutnJfbtjttP_Zc"},{"_id":"457dfd1f30202da3a370eabd","parent":"0a13ffd03b1a0e635fe6c47c","component":"fernando-playground@bot-chat-panel","system":"66f6c624d8a4a0c67041a910","displayName":"ChatPanel","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1008,"height":760}}}},"reference":"TuZLWOhvdEg3jpTJ9t16L"},{"_id":"a20fb8f122c1d69ae258f8e8","parent":"0a13ffd03b1a0e635fe6c47c","component":"fernando-playground@bot-chat-input","system":"66f6c624d8a4a0c67041a910","displayName":"ChatInputBar","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":760,"freeTransform":true,"left":true,"right":true,"top":false,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1008,"height":76}}}},"reference":"Fb2FleJHpv4t5QEFDhxqq"},{"_id":"34681ce4c9e9470e6f1528c6","parent":"ff5a49d7d8dbb47aa99b2cd1","component":"fernando-playground@bot-state-panel","system":"66f6c624d8a4a0c67041a910","displayName":"StatePanel","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true,"exactX":false,"exactY":false,"growH":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":431,"height":836}}}},"reference":"QIp2E2e2_917nlsXcwLuj"}]}},{"_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":"6a41b29f097719b83c23c11f","displayName":"Bot Adaptativo — demo","reference":"CvJFUxX9UG4tkIitLietW","params":{"name":{"component":"data2-core-primitives@String","params":{"content":"Bot Adaptativo — demo"}},"shortName":{"component":"data2-core-primitives@String","params":{"content":"Bot Adaptativo — demo"}},"domain":{"component":"data2-core-primitives@String","params":{"content":"bot-adaptativo"}},"serverSideRendering":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"entryPoint":{"component":"data2-core-types@ComponentInstanceReference","params":{"component":"data2-core-primitives@Artboard","reference":"e4bsa-ftzDQKJWhOlNTOE"}},"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":"66f6c624d8a4a0c67041a910","component":"data2-core-primitives@Application"}]}},{"reference":"DataComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"BundlesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}}],"processesParams":{}}}}