{"context":{"domain":"babi-hera-demos"},"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":"66476aae8c3737df2e4efc38","name":"Hera Demos","domain":"babi-hera-demos","visibility":"public","updatedAt":"2024-05-17T14:33:18.477Z","createdAt":"2024-05-17T14:33:18.477Z"}]}},{"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":"6a4a734b89d66fea33a02d23","component":"data2-core-types@Component","system":"66476aae8c3737df2e4efc38","params":{"extends":"data2-core-primitives@Block","component":"cmsLogin","package":"babi-hera-demos","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    .page{display:flex;align-items:center;justify-content:center;min-height:100vh;background:linear-gradient(180deg,#EBEBDE 0%,#FFFEFB 100%);font-family:Inter,sans-serif;color:#1C1C1C;padding:32px;box-sizing:border-box}\n    .card{width:100%;max-width:420px;background:#FFFEFB;border-radius:20px;border:1px solid #EBEBDE;padding:40px 36px;box-shadow:0 20px 80px rgba(28,28,28,.08)}\n    .logo{display:flex;align-items:center;gap:10px;margin-bottom:28px}\n    .logo .dot{width:34px;height:34px;background:#636E49;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#FFBF04;font-weight:800;font-size:18px}\n    .logo .name{font-size:18px;font-weight:700}\n    h1{font-size:26px;font-weight:700;margin:0 0 6px;letter-spacing:-.005em}\n    .sub{font-size:14px;color:#5A5A5A;margin:0 0 28px}\n    .field{margin-bottom:14px}\n    .field label{display:block;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#636E49;margin-bottom:6px}\n    .field input{width:100%;box-sizing:border-box;padding:12px 14px;border:1px solid #EBEBDE;border-radius:10px;font:400 15px Inter,sans-serif;background:#FFFEFB;color:#1C1C1C}\n    .field input:focus{outline:none;border-color:#636E49}\n    .btn{width:100%;padding:13px;border-radius:10px;border:0;background:#1C1C1C;color:#FFFEFB;font:500 15px Inter,sans-serif;cursor:pointer;margin-top:8px;transition:background .15s}\n    .btn:hover{background:#636E49}\n    .btn[disabled]{opacity:.5;cursor:default}\n    .btn.ghost{background:transparent;color:#636E49;margin-top:12px;border:1px solid #EBEBDE}\n    .btn.ghost:hover{background:#EBEBDE}\n    .err{background:#FCEDED;border:1px solid #F4CFCF;color:#B32020;padding:10px 12px;border-radius:8px;font-size:13px;margin-bottom:14px}\n    .toggle{margin-top:20px;text-align:center;font-size:13px;color:#5A5A5A}\n    .toggle a{color:#636E49;font-weight:600;text-decoration:none;cursor:pointer}\n    .toggle a:hover{text-decoration:underline}\n  `,\n  render(d2){\n    const mode = d2.state.mode || 'login'\n    const err = d2.state.err || ''\n    const busy = !!d2.state.busy\n    return `<div class=\"page\">\n      <div class=\"card\">\n        <div class=\"logo\"><div class=\"dot\">H</div><div class=\"name\">Hera CMS</div></div>\n        <h1>${mode==='login'?'Entrar no CMS':'Criar conta'}</h1>\n        <p class=\"sub\">${mode==='login'?'Acesso do time de marketing.':'Primeiro acesso? Cadastre seu email.'}</p>\n        ${err?`<div class=\"err\">${err.replace(/</g,'&lt;')}</div>`:''}\n        ${mode==='register'?`<div class=\"field\"><label>Nome</label><input class=\"i\" data-k=\"name\" placeholder=\"Seu nome\"/></div>`:''}\n        <div class=\"field\"><label>Email</label><input class=\"i\" data-k=\"email\" type=\"email\" placeholder=\"voce@empresa.com\" autocomplete=\"email\"/></div>\n        <div class=\"field\"><label>Senha</label><input class=\"i\" data-k=\"password\" type=\"password\" placeholder=\"••••••••\" autocomplete=\"${mode==='login'?'current-password':'new-password'}\"/></div>\n        <button class=\"btn primary submit\" ${busy?'disabled':''}>${busy?'…':(mode==='login'?'Entrar':'Cadastrar')}</button>\n        <div class=\"toggle\">\n          ${mode==='login'\n            ? `Primeiro acesso? <a class=\"switch\" data-m=\"register\">Criar conta</a>`\n            : `Já tem conta? <a class=\"switch\" data-m=\"login\">Entrar</a>`}\n        </div>\n      </div>\n    </div>`\n  },\n  mounted(d2){\n    if (!d2.state.form) d2.state.form = {email:'', password:'', name:''}\n    d2.on('.i','input',(e,el)=>{ d2.state.form = {...d2.state.form, [el.dataset.k]: el.value} })\n    d2.on('.switch','click',(e,el)=>{ d2.state.mode = el.dataset.m; d2.state.err = '' })\n    const submit = async () => {\n      const f = d2.state.form || {}\n      if (!f.email || !f.password) { d2.state.err = 'Preencha email e senha.'; return }\n      d2.state.err = ''; d2.state.busy = true\n      try {\n        const auth = d2.auth('blogAuth')\n        if ((d2.state.mode || 'login') === 'login') {\n          await auth.login({email: f.email, password: f.password})\n        } else {\n          await auth.register({email: f.email, password: f.password, name: f.name || ''})\n        }\n        d2.state.busy = false\n        d2.router().goTo('/')\n      } catch(err) {\n        d2.state.busy = false\n        d2.state.err = err?.message || 'Falha ao autenticar. Verifique email e senha.'\n      }\n    }\n    d2.on('.submit','click',submit)\n    d2.on('.i','keydown',(e)=>{ if(e.key==='Enter') submit() })\n  },\n}"}}}}}}}},{"_id":"6a4a73296e519b36a6521bef","component":"data2-core-types@Component","system":"66476aae8c3737df2e4efc38","params":{"extends":"data2-core-primitives@Block","component":"cmsSettings","package":"babi-hera-demos","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    .wrap{padding:32px;background:#FFFEFB;font-family:Inter,sans-serif;color:#1C1C1C;box-sizing:border-box;min-height:100%}\n    .head{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}\n    .head h1{font-size:28px;font-weight:700;margin:0}\n    .btn{padding:9px 15px;border-radius:8px;border:1px solid #EBEBDE;background:#FFFEFB;font:500 13px Inter,sans-serif;cursor:pointer;color:#1C1C1C}\n    .btn:hover{background:#EBEBDE}\n    .btn.primary{background:#1C1C1C;color:#FFFEFB;border-color:#1C1C1C}\n    .btn.primary:hover{background:#636E49;border-color:#636E49}\n    .tabs{display:flex;gap:4px;border-bottom:1px solid #EBEBDE;margin-bottom:24px}\n    .tab{padding:12px 20px;font-size:14px;font-weight:500;color:#636E49;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}\n    .tab[data-active]{color:#1C1C1C;border-bottom-color:#1C1C1C}\n    .add{display:grid;grid-template-columns:repeat(4,1fr) auto;gap:8px;padding:16px;background:#FDFBF3;border:1px solid #EBEBDE;border-radius:12px;margin-bottom:20px;align-items:center}\n    .add input{padding:9px 12px;border:1px solid #EBEBDE;border-radius:8px;font:400 13px Inter,sans-serif;background:#FFFEFB;color:#1C1C1C}\n    .add input:focus{outline:none;border-color:#636E49}\n    table{width:100%;border-collapse:collapse;border:1px solid #EBEBDE;border-radius:12px;overflow:hidden;background:#FFFEFB}\n    th{text-align:left;padding:12px 14px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#636E49;background:#FDFBF3;border-bottom:1px solid #EBEBDE}\n    td{padding:12px 14px;border-bottom:1px solid #EBEBDE;font-size:14px;vertical-align:middle}\n    tr:last-child td{border-bottom:0}\n    tr:hover td{background:#FDFBF3}\n    .swatch{display:inline-block;width:14px;height:14px;border-radius:4px;vertical-align:middle;margin-right:8px}\n    .row-actions{display:flex;gap:6px;justify-content:flex-end}\n    .row-actions button{padding:5px 10px;font-size:12px;border:1px solid #EBEBDE;background:#fff;border-radius:6px;cursor:pointer;color:#1C1C1C}\n    .row-actions button:hover{background:#EBEBDE}\n    .row-actions button.danger{color:#B32020;border-color:#F4CFCF}\n    .row-actions button.danger:hover{background:#F9E1E1}\n    .empty{padding:40px;text-align:center;color:#888}\n    @media (max-width:900px){.add{grid-template-columns:1fr}}\n  `,\n  render(d2){\n    const authors = d2.data('blogauthorsDataSet')\n    const cats = d2.data('blogcategoriesDataSet')\n    const mentions = d2.data('blogmentionsDataSet')\n    if (authors.loading || cats.loading || mentions.loading) return `<div class=\"wrap\"><div class=\"empty\">Carregando…</div></div>`\n    const tab = d2.state.tab || 'authors'\n    let body = ''\n    if (tab === 'authors') {\n      const rows = authors.records()\n      const trs = rows.length ? rows.map(a => `<tr data-key=\"${a._id}\">\n        <td><strong>${(a.name||'').replace(/</g,'&lt;')}</strong></td>\n        <td>${(a.role||'').replace(/</g,'&lt;')}</td>\n        <td style=\"color:#5A5A5A;font-size:13px\">${(a.bio||'').replace(/</g,'&lt;')}</td>\n        <td><div class=\"row-actions\"><button class=\"danger delA\" data-id=\"${a._id}\">Excluir</button></div></td>\n      </tr>`).join('') : `<tr><td colspan=\"4\"><div class=\"empty\">Nenhum autor cadastrado.</div></td></tr>`\n      body = `<div class=\"add\">\n        <input class=\"a-name\" placeholder=\"Nome\"/>\n        <input class=\"a-role\" placeholder=\"Cargo\"/>\n        <input class=\"a-bio\" placeholder=\"Bio curta\"/>\n        <input class=\"a-avatar\" placeholder=\"URL avatar (opcional)\"/>\n        <button class=\"btn primary addA\">+ Adicionar</button>\n      </div>\n      <table><thead><tr><th>Nome</th><th>Cargo</th><th>Bio</th><th></th></tr></thead><tbody>${trs}</tbody></table>`\n    } else if (tab === 'categories') {\n      const rows = cats.records()\n      const trs = rows.length ? rows.map(c => `<tr data-key=\"${c._id}\">\n        <td><span class=\"swatch\" style=\"background:${c.color||'#636E49'}\"></span><strong>${(c.name||'').replace(/</g,'&lt;')}</strong></td>\n        <td><code style=\"background:#EBEBDE;padding:2px 6px;border-radius:4px;font-size:12px\">${(c.slug||'').replace(/</g,'&lt;')}</code></td>\n        <td style=\"color:#5A5A5A;font-size:13px\">${(c.description||'').replace(/</g,'&lt;')}</td>\n        <td><div class=\"row-actions\"><button class=\"danger delC\" data-id=\"${c._id}\">Excluir</button></div></td>\n      </tr>`).join('') : `<tr><td colspan=\"4\"><div class=\"empty\">Nenhuma categoria.</div></td></tr>`\n      body = `<div class=\"add\">\n        <input class=\"c-name\" placeholder=\"Nome (ex.: Artigo)\"/>\n        <input class=\"c-slug\" placeholder=\"slug-url\"/>\n        <input class=\"c-color\" placeholder=\"#636E49\" value=\"#636E49\"/>\n        <input class=\"c-desc\" placeholder=\"Descrição\"/>\n        <button class=\"btn primary addC\">+ Adicionar</button>\n      </div>\n      <table><thead><tr><th>Nome</th><th>Slug</th><th>Descrição</th><th></th></tr></thead><tbody>${trs}</tbody></table>`\n    } else {\n      const rows = mentions.records().slice().sort((a,b)=>new Date(b.publishedAt||0)-new Date(a.publishedAt||0))\n      const trs = rows.length ? rows.map(m => `<tr data-key=\"${m._id}\">\n        <td>${m.logoUrl ? `<img src=\"${m.logoUrl}\" alt=\"\" style=\"height:18px;vertical-align:middle;margin-right:8px;filter:grayscale(1)\"/>`:''}<strong>${(m.outlet||'').replace(/</g,'&lt;')}</strong></td>\n        <td style=\"color:#5A5A5A;font-size:13px\">${(m.title||'').replace(/</g,'&lt;')}</td>\n        <td>${m.publishedAt ? d2.fmt.date(new Date(m.publishedAt)) : '—'}</td>\n        <td><a href=\"${m.url||'#'}\" target=\"_blank\" rel=\"noopener\" style=\"color:#636E49;font-size:13px\">Abrir ↗</a></td>\n        <td><div class=\"row-actions\"><button class=\"danger delM\" data-id=\"${m._id}\">Excluir</button></div></td>\n      </tr>`).join('') : `<tr><td colspan=\"5\"><div class=\"empty\">Nenhuma menção.</div></td></tr>`\n      body = `<div class=\"add\">\n        <input class=\"m-outlet\" placeholder=\"Veículo (ex.: Exame)\"/>\n        <input class=\"m-title\" placeholder=\"Título da matéria\"/>\n        <input class=\"m-url\" placeholder=\"https://…\"/>\n        <input class=\"m-logo\" placeholder=\"URL do logo\"/>\n        <button class=\"btn primary addM\">+ Adicionar</button>\n      </div>\n      <table><thead><tr><th>Veículo</th><th>Título</th><th>Data</th><th>Link</th><th></th></tr></thead><tbody>${trs}</tbody></table>`\n    }\n    return `<div class=\"wrap\">\n      <div class=\"head\"><h1>Configurações</h1><button class=\"btn back\">← Voltar</button></div>\n      <div class=\"tabs\">\n        <div class=\"tab\" data-t=\"authors\" ${tab==='authors'?'data-active':''}>Autores</div>\n        <div class=\"tab\" data-t=\"categories\" ${tab==='categories'?'data-active':''}>Categorias</div>\n        <div class=\"tab\" data-t=\"mentions\" ${tab==='mentions'?'data-active':''}>Menções</div>\n      </div>\n      ${body}\n    </div>`\n  },\n  mounted(d2){\n    const $ = (s) => d2.$(s)\n    const val = (s) => ($(s)?.value || '').trim()\n    const slugify = s => (s||'').toLowerCase().normalize('NFD').replace(/[̀-ͯ]/g,'').replace(/[^a-z0-9]+/g,'-').replace(/^-+|-+$/g,'')\n    d2.on('.tab','click',(e,el)=>{ d2.state.tab = el.dataset.t })\n    d2.on('.back','click',()=>d2.router().goTo('/'))\n    d2.on('.addA','click',async()=>{\n      const name = val('.a-name'); if(!name) return\n      await d2.data('blogauthorsDataSet').create({name, role: val('.a-role'), bio: val('.a-bio'), avatarUrl: val('.a-avatar')})\n      ;['.a-name','.a-role','.a-bio','.a-avatar'].forEach(s=>{ const el=$(s); if(el) el.value='' })\n    })\n    d2.on('.delA','click',async(e,el)=>{ if(!await d2.dialog.confirm('Excluir autor?')) return; await d2.data('blogauthorsDataSet').remove(el.dataset.id) })\n    d2.on('.addC','click',async()=>{\n      const name = val('.c-name'); if(!name) return\n      await d2.data('blogcategoriesDataSet').create({name, slug: val('.c-slug')||slugify(name), color: val('.c-color')||'#636E49', description: val('.c-desc')})\n      ;['.c-name','.c-slug','.c-desc'].forEach(s=>{ const el=$(s); if(el) el.value='' })\n      const co = $('.c-color'); if(co) co.value = '#636E49'\n    })\n    d2.on('.delC','click',async(e,el)=>{ if(!await d2.dialog.confirm('Excluir categoria?')) return; await d2.data('blogcategoriesDataSet').remove(el.dataset.id) })\n    d2.on('.addM','click',async()=>{\n      const outlet = val('.m-outlet'); if(!outlet) return\n      await d2.data('blogmentionsDataSet').create({outlet, title: val('.m-title'), url: val('.m-url'), logoUrl: val('.m-logo'), publishedAt: new Date().toISOString()})\n      ;['.m-outlet','.m-title','.m-url','.m-logo'].forEach(s=>{ const el=$(s); if(el) el.value='' })\n    })\n    d2.on('.delM','click',async(e,el)=>{ if(!await d2.dialog.confirm('Excluir menção?')) return; await d2.data('blogmentionsDataSet').remove(el.dataset.id) })\n  },\n}"}}}}}}}},{"_id":"6a4a72ff07dd4a652caae40c","component":"data2-core-types@Component","system":"66476aae8c3737df2e4efc38","params":{"extends":"data2-core-primitives@Block","component":"cmsPostEditor","package":"babi-hera-demos","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    .ed{display:grid;grid-template-columns:1fr 1fr;height:100%;font-family:Inter,sans-serif;color:#1C1C1C;background:#FFFEFB;box-sizing:border-box}\n    .form{padding:32px;overflow-y:auto;border-right:1px solid #EBEBDE;background:#FDFBF3}\n    .preview{padding:32px;overflow-y:auto;background:#FFFEFB}\n    .toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;gap:8px;flex-wrap:wrap}\n    .toolbar h1{font-size:22px;font-weight:700;margin:0;display:flex;align-items:center;gap:10px}\n    .toolbar .grp{display:flex;gap:8px}\n    .btn{padding:9px 15px;border-radius:8px;border:1px solid #EBEBDE;background:#FFFEFB;font:500 13px Inter,sans-serif;cursor:pointer;color:#1C1C1C}\n    .btn:hover{background:#EBEBDE}\n    .btn.primary{background:#1C1C1C;color:#FFFEFB;border-color:#1C1C1C}\n    .btn.primary:hover{background:#636E49;border-color:#636E49}\n    .btn.danger{color:#B32020;border-color:#F4CFCF}\n    .btn.danger:hover{background:#F9E1E1}\n    .field{margin-bottom:18px}\n    .field label{display:block;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#636E49;margin-bottom:6px}\n    .field input,.field textarea,.field select{width:100%;box-sizing:border-box;padding:10px 12px;border:1px solid #EBEBDE;border-radius:8px;font:400 14px Inter,sans-serif;background:#FFFEFB;color:#1C1C1C}\n    .field input:focus,.field textarea:focus,.field select:focus{outline:none;border-color:#636E49}\n    .field textarea.body{min-height:340px;font-family:'JetBrains Mono',ui-monospace,monospace;font-size:14px;resize:vertical;line-height:1.55}\n    .row{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n    .drop{border:2px dashed #C7C7B4;border-radius:10px;padding:24px;text-align:center;color:#888;font-size:13px;cursor:pointer;transition:all .15s;background:#FFFEFB;position:relative}\n    .drop:hover,.drop[data-over]{border-color:#636E49;color:#636E49;background:#FDFBF3}\n    .drop.has{padding:0;height:150px;background-size:cover;background-position:center;border-style:solid;border-color:#EBEBDE;overflow:hidden}\n    .drop .clear{position:absolute;top:8px;right:8px;background:rgba(28,28,28,.8);color:#fff;border:0;padding:5px 10px;border-radius:6px;cursor:pointer;font-size:11px;font-family:inherit}\n    .drop .fi{display:none}\n    .stat{display:inline-block;padding:3px 10px;border-radius:999px;font-size:10px;font-weight:600;text-transform:uppercase}\n    .stat.published{background:#DFE7CE;color:#3F5029}\n    .stat.draft{background:#F4E6C1;color:#7B5A15}\n    .previewLabel{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:#636E49;margin-bottom:16px}\n    .previewCard{background:#FFFEFB;border-radius:14px;border:1px solid #EBEBDE;padding:28px;min-height:400px}\n    .previewCard .cover{width:100%;height:200px;background-size:cover;background-position:center;background-color:#EBEBDE;border-radius:10px;margin-bottom:20px}\n    .previewCard .pill{display:inline-block;padding:4px 10px;border-radius:999px;font-size:10px;font-weight:600;text-transform:uppercase;color:#FFFEFB}\n    .previewCard h1{font-size:30px;font-weight:700;margin:12px 0 8px;line-height:1.2;letter-spacing:-.005em}\n    .previewCard .pmeta{font-size:12px;color:#636E49;margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid #EBEBDE}\n    .md{font-size:15px;line-height:1.7;color:#1C1C1C}\n    .md h1{font-size:24px;margin:1.2em 0 .5em;font-weight:700}\n    .md h2{font-size:20px;margin:1.1em 0 .4em;font-weight:700}\n    .md h3{font-size:17px;margin:1em 0 .3em;font-weight:600}\n    .md p{margin:0 0 .9em}\n    .md ul,.md ol{margin:0 0 .9em;padding-left:1.4em}\n    .md li{margin:.25em 0}\n    .md code{background:#EBEBDE;padding:2px 6px;border-radius:4px;font-size:.9em}\n    .md pre{background:#1C1C1C;color:#FFFEFB;padding:12px;border-radius:8px;overflow:auto;font-size:13px}\n    .md pre code{background:transparent;padding:0;color:inherit}\n    .md a{color:#636E49}\n    .md blockquote{border-left:3px solid #636E49;padding:6px 16px;color:#5A5A5A;margin:1em 0;background:#FDFBF3}\n    @media (max-width:1000px){.ed{grid-template-columns:1fr}.preview{border-top:1px solid #EBEBDE;border-right:0}}\n  `,\n  render(d2){\n    const posts = d2.data('blogpostsDataSet')\n    const cats = d2.data('blogcategoriesDataSet')\n    const authors = d2.data('blogauthorsDataSet')\n    if (posts.loading || cats.loading || authors.loading) return `<div style=\"padding:32px;color:#888;font-family:Inter,sans-serif\">Carregando…</div>`\n    const rid = d2.router().params?.id || null\n    if (d2.state.loadedId !== rid || !d2.state.form) {\n      d2.state.loadedId = rid\n      if (rid) {\n        const rec = posts.records().find(p => p._id === rid) || {}\n        d2.state.form = {\n          _id: rec._id || null,\n          title: rec.title || '', slug: rec.slug || '', excerpt: rec.excerpt || '',\n          body: rec.body || '', coverImageUrl: rec.coverImageUrl || '',\n          categoryId: rec.categoryId || (cats.records()[0]?._id || ''),\n          authorId: rec.authorId || (authors.records()[0]?._id || ''),\n          status: rec.status || 'draft', publishedAt: rec.publishedAt || null,\n          tags: rec.tags || [], readingMinutes: rec.readingMinutes || 0,\n        }\n        d2.state.slugTouched = !!rec.slug\n        d2.state.rmTouched = !!rec.readingMinutes\n      } else {\n        d2.state.form = {\n          _id: null, title:'', slug:'', excerpt:'', body:'', coverImageUrl:'',\n          categoryId: cats.records()[0]?._id || '',\n          authorId: authors.records()[0]?._id || '',\n          status:'draft', publishedAt:null, tags:[], readingMinutes:0,\n        }\n        d2.state.slugTouched = false\n        d2.state.rmTouched = false\n      }\n    }\n    const f = d2.state.form\n    const catOpts = cats.records().map(c => `<option value=\"${c._id}\" ${c._id===f.categoryId?'selected':''}>${(c.name||'').replace(/</g,'&lt;')}</option>`).join('')\n    const authOpts = authors.records().map(a => `<option value=\"${a._id}\" ${a._id===f.authorId?'selected':''}>${(a.name||'').replace(/</g,'&lt;')}</option>`).join('')\n    const cat = cats.records().find(c=>c._id===f.categoryId) || {name:'',color:'#636E49'}\n    const author = authors.records().find(a=>a._id===f.authorId) || {name:'—'}\n    // markdown preview\n    const md = f.body || ''\n    const esc = s => s.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;')\n    const inl = t => t.replace(/`([^`]+)`/g,(m,c)=>`<code>${esc(c)}</code>`).replace(/\\*\\*([^*]+)\\*\\*/g,'<strong>$1</strong>').replace(/\\*([^*]+)\\*/g,'<em>$1</em>').replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g,'<a href=\"$2\">$1</a>')\n    let html='', inList=null, inCode=false, buf=[]\n    const flush=()=>{ if(!buf.length) return; html+=`<p>${inl(buf.join(' '))}</p>`; buf=[] }\n    const closeList=()=>{ if(inList){html+=`</${inList}>`; inList=null} }\n    for (const line of md.split(/\\r?\\n/)) {\n      if (inCode) { if (line.trim().startsWith('```')){ html+='</code></pre>'; inCode=false } else html+=esc(line)+'\\n'; continue }\n      if (line.trim().startsWith('```')){ flush(); closeList(); html+='<pre><code>'; inCode=true; continue }\n      const h=line.match(/^(#{1,3})\\s+(.+)$/)\n      if (h){ flush(); closeList(); html+=`<h${h[1].length}>${esc(h[2])}</h${h[1].length}>`; continue }\n      const ul=line.match(/^\\s*[-*]\\s+(.+)$/), ol=line.match(/^\\s*\\d+\\.\\s+(.+)$/)\n      if (ul||ol){ flush(); const k=ul?'ul':'ol'; if(inList!==k){closeList(); html+=`<${k}>`; inList=k}\n        html+=`<li>${inl(esc(ul?ul[1]:ol[1]))}</li>`; continue }\n      const bq=line.match(/^>\\s?(.*)$/)\n      if (bq){ flush(); closeList(); html+=`<blockquote>${inl(esc(bq[1]))}</blockquote>`; continue }\n      if (!line.trim()){ flush(); closeList(); continue }\n      buf.push(esc(line))\n    }\n    flush(); closeList(); if (inCode) html+='</code></pre>'\n    return `<div class=\"ed\">\n      <div class=\"form\">\n        <div class=\"toolbar\">\n          <h1>${f._id ? 'Editar post' : 'Novo post'} <span class=\"stat ${f.status||'draft'}\">${(f.status||'draft')==='published'?'Publicado':'Rascunho'}</span></h1>\n          <div class=\"grp\">\n            <button class=\"btn back\">← Voltar</button>\n            <button class=\"btn save\">Salvar rascunho</button>\n            <button class=\"btn primary publish\">${(f.status)==='published'?'Atualizar':'Publicar'}</button>\n            ${f._id ? `<button class=\"btn danger del\">Excluir</button>`:''}\n          </div>\n        </div>\n        <div class=\"field\"><label>Título</label><input class=\"i\" data-k=\"title\" value=\"${(f.title||'').replace(/\"/g,'&quot;')}\" placeholder=\"Título do post\"/></div>\n        <div class=\"row\">\n          <div class=\"field\"><label>Slug (URL)</label><input class=\"i\" data-k=\"slug\" value=\"${(f.slug||'').replace(/\"/g,'&quot;')}\" placeholder=\"auto do título\"/></div>\n          <div class=\"field\"><label>Leitura (min)</label><input class=\"i\" type=\"number\" data-k=\"readingMinutes\" value=\"${f.readingMinutes||0}\"/></div>\n        </div>\n        <div class=\"field\"><label>Resumo</label><textarea class=\"i\" data-k=\"excerpt\" rows=\"3\" placeholder=\"1–2 linhas que aparecem nos cards\">${(f.excerpt||'').replace(/</g,'&lt;')}</textarea></div>\n        <div class=\"row\">\n          <div class=\"field\"><label>Categoria</label><select class=\"i\" data-k=\"categoryId\">${catOpts}</select></div>\n          <div class=\"field\"><label>Autor</label><select class=\"i\" data-k=\"authorId\">${authOpts}</select></div>\n        </div>\n        <div class=\"field\">\n          <label>Imagem de capa</label>\n          ${f.coverImageUrl\n            ? `<div class=\"drop has\" style=\"background-image:url(${f.coverImageUrl})\"><button class=\"clear\">Remover</button></div>`\n            : `<div class=\"drop\">Clique ou arraste uma imagem<input type=\"file\" accept=\"image/*\" class=\"fi\"/></div>`}\n        </div>\n        <div class=\"field\"><label>Conteúdo (Markdown)</label><textarea class=\"i body\" data-k=\"body\" placeholder=\"# Título&#10;&#10;Escreva em markdown…\">${(f.body||'').replace(/</g,'&lt;')}</textarea></div>\n      </div>\n      <div class=\"preview\">\n        <div class=\"previewLabel\">Prévia</div>\n        <div class=\"previewCard\">\n          ${f.coverImageUrl ? `<div class=\"cover\" style=\"background-image:url(${f.coverImageUrl})\"></div>` : ''}\n          <span class=\"pill\" style=\"background:${cat.color||'#636E49'}\">${(cat.name||'').replace(/</g,'&lt;')}</span>\n          <h1>${(f.title||'(sem título)').replace(/</g,'&lt;')}</h1>\n          <div class=\"pmeta\">${(author.name||'').replace(/</g,'&lt;')} · ${d2.fmt.date(new Date())} · ${f.readingMinutes||0} min</div>\n          <div class=\"md\">${html || '<p style=\"color:#888\">Prévia do conteúdo aparece aqui…</p>'}</div>\n        </div>\n      </div>\n    </div>`\n  },\n  mounted(d2){\n    const slugify = s => (s||'').toString().toLowerCase().normalize('NFD').replace(/[̀-ͯ]/g,'').replace(/[^a-z0-9]+/g,'-').replace(/^-+|-+$/g,'').slice(0,80)\n    const setForm = (k,v) => { d2.state.form = {...d2.state.form, [k]: v} }\n    d2.on('.i','input',(e,el)=>{\n      const k = el.dataset.k\n      let v = el.value\n      if (k === 'readingMinutes') v = +v || 0\n      setForm(k, v)\n      if (k === 'title' && !d2.state.slugTouched) setForm('slug', slugify(v))\n      if (k === 'body' && !d2.state.rmTouched) {\n        const words = (v||'').split(/\\s+/).filter(Boolean).length\n        setForm('readingMinutes', Math.max(1, Math.ceil(words/200)))\n      }\n      if (k === 'slug') d2.state.slugTouched = true\n      if (k === 'readingMinutes') d2.state.rmTouched = true\n    })\n    d2.on('.i','change',(e,el)=>{ setForm(el.dataset.k, el.value) })\n    d2.on('.back','click',()=>d2.router().goTo('/'))\n    d2.on('.save','click',async()=>{\n      const f = d2.state.form\n      if(!f.title){ await d2.dialog.alert('Informe um título'); return }\n      const ds = d2.data('blogpostsDataSet')\n      const payload = {...f, slug: f.slug || slugify(f.title), status: 'draft'}\n      try {\n        if (f._id) {\n          await ds.update(payload)\n          await d2.dialog.alert('Rascunho salvo!')\n        } else {\n          const rec = await ds.create({...payload, _id: undefined})\n          d2.state.form = {...d2.state.form, _id: rec?._id || null, status:'draft'}\n          await d2.dialog.alert('Rascunho criado!')\n        }\n      } catch(err) { await d2.dialog.alert('Erro ao salvar: ' + (err?.message||err)) }\n    })\n    d2.on('.publish','click',async()=>{\n      const f = d2.state.form\n      if(!f.title){ await d2.dialog.alert('Informe um título'); return }\n      const ds = d2.data('blogpostsDataSet')\n      const payload = {...f, slug: f.slug || slugify(f.title), status:'published', publishedAt: f.publishedAt || new Date().toISOString()}\n      try {\n        if (f._id) await ds.update(payload)\n        else await ds.create({...payload, _id: undefined})\n        d2.router().goTo('/')\n      } catch(err) { await d2.dialog.alert('Erro ao publicar: ' + (err?.message||err)) }\n    })\n    d2.on('.del','click',async()=>{\n      if(!await d2.dialog.confirm('Excluir este post?')) return\n      try { await d2.data('blogpostsDataSet').remove(d2.state.form._id); d2.router().goTo('/') }\n      catch(err) { await d2.dialog.alert('Erro ao excluir: ' + (err?.message||err)) }\n    })\n    d2.on('.clear','click',()=>setForm('coverImageUrl',''))\n    const doUpload = async (files) => {\n      if (!files || !files.length) return\n      try {\n        const out = await d2.drive('blogDrive').uploadFromFiles(files)\n        const url = out?.[0]?.fileUrl\n        if (url) setForm('coverImageUrl', url)\n      } catch(err) { await d2.dialog.alert('Erro no upload: ' + (err?.message||err)) }\n    }\n    d2.on('.drop','click',(e,el)=>{ const inp = el.querySelector('.fi'); if(inp) inp.click() })\n    d2.on('.fi','change',(e,el)=>doUpload(el.files))\n    d2.on('.drop','dragover',(e,el)=>{ e.preventDefault(); el.setAttribute('data-over','') })\n    d2.on('.drop','dragleave',(e,el)=>{ el.removeAttribute('data-over') })\n    d2.on('.drop','drop',(e,el)=>{ e.preventDefault(); el.removeAttribute('data-over'); doUpload(e.dataTransfer?.files) })\n  },\n}"}}}}}}}},{"_id":"6a4a72bb56fff83c3be62171","component":"data2-core-types@Component","system":"66476aae8c3737df2e4efc38","params":{"extends":"data2-core-primitives@Block","component":"cmsPostsTable","package":"babi-hera-demos","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    .wrap{padding:32px;background:#FFFEFB;font-family:Inter,sans-serif;color:#1C1C1C;box-sizing:border-box;min-height:100%}\n    .head{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;gap:16px;flex-wrap:wrap}\n    .head h1{font-size:28px;font-weight:700;margin:0}\n    .actions{display:flex;gap:8px}\n    .btn{padding:10px 18px;border-radius:8px;border:1px solid #EBEBDE;background:#FFFEFB;font:500 14px Inter,sans-serif;cursor:pointer;color:#1C1C1C}\n    .btn:hover{background:#EBEBDE}\n    .btn.primary{background:#1C1C1C;color:#FFFEFB;border-color:#1C1C1C}\n    .btn.primary:hover{background:#636E49;border-color:#636E49}\n    .filters{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap;align-items:center}\n    .search{flex:1;min-width:200px;padding:10px 14px;border:1px solid #EBEBDE;border-radius:8px;font:400 14px Inter,sans-serif;background:#FFFEFB;color:#1C1C1C}\n    .search:focus{outline:none;border-color:#636E49}\n    .chip{padding:8px 14px;border-radius:999px;background:#EBEBDE;color:#636E49;font-size:13px;cursor:pointer;border:1px solid transparent}\n    .chip[data-active]{background:#1C1C1C;color:#FFFEFB}\n    table{width:100%;border-collapse:collapse;background:#FFFEFB;border:1px solid #EBEBDE;border-radius:12px;overflow:hidden}\n    th{text-align:left;padding:14px 16px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#636E49;background:#FDFBF3;border-bottom:1px solid #EBEBDE}\n    td{padding:14px 16px;border-bottom:1px solid #EBEBDE;font-size:14px;vertical-align:middle}\n    tr:last-child td{border-bottom:0}\n    tr:hover td{background:#FDFBF3}\n    .stat{display:inline-block;padding:3px 10px;border-radius:999px;font-size:11px;font-weight:600;text-transform:uppercase}\n    .stat.published{background:#DFE7CE;color:#3F5029}\n    .stat.draft{background:#F4E6C1;color:#7B5A15}\n    .row-actions{display:flex;gap:6px;justify-content:flex-end}\n    .row-actions button{padding:6px 12px;font-size:12px;border:1px solid #EBEBDE;background:#fff;border-radius:6px;cursor:pointer;color:#1C1C1C}\n    .row-actions button:hover{background:#EBEBDE}\n    .row-actions button.danger{color:#B32020;border-color:#F4CFCF}\n    .row-actions button.danger:hover{background:#F9E1E1}\n    .empty{padding:60px;text-align:center;color:#888}\n  `,\n  render(d2){\n    const posts = d2.data('blogpostsDataSet')\n    const cats = d2.data('blogcategoriesDataSet')\n    const authors = d2.data('blogauthorsDataSet')\n    if (posts.loading) return `<div class=\"wrap\"><div class=\"empty\">Carregando…</div></div>`\n    const q = (d2.state.q || '').toLowerCase()\n    const stat = d2.state.stat || 'all'\n    const catMap = Object.fromEntries(cats.records().map(c=>[c._id,c]))\n    const authMap = Object.fromEntries(authors.records().map(a=>[a._id,a]))\n    let rows = posts.records().slice().sort((a,b)=>new Date(b.publishedAt||0)-new Date(a.publishedAt||0))\n    if (stat !== 'all') rows = rows.filter(r => (r.status||'draft') === stat)\n    if (q) rows = rows.filter(r => (r.title||'').toLowerCase().includes(q))\n    const trs = rows.length ? rows.map(r => {\n      const c = catMap[r.categoryId] || {name:'—'}\n      const a = authMap[r.authorId] || {name:'—'}\n      const s = r.status || 'draft'\n      return `<tr data-key=\"${r._id}\">\n        <td><strong>${(r.title||'(sem título)').replace(/</g,'&lt;')}</strong><div style=\"font-size:12px;color:#888;margin-top:2px\">/${(r.slug||'').replace(/</g,'&lt;')}</div></td>\n        <td><span class=\"stat ${s}\">${s==='published'?'Publicado':'Rascunho'}</span></td>\n        <td>${(c.name||'').replace(/</g,'&lt;')}</td>\n        <td>${(a.name||'').replace(/</g,'&lt;')}</td>\n        <td>${r.publishedAt ? d2.fmt.date(new Date(r.publishedAt)) : '—'}</td>\n        <td><div class=\"row-actions\">\n          <button class=\"edit\" data-id=\"${r._id}\">Editar</button>\n          <button class=\"toggle\" data-id=\"${r._id}\">${s==='published'?'Despublicar':'Publicar'}</button>\n          <button class=\"danger del\" data-id=\"${r._id}\">Excluir</button>\n        </div></td>\n      </tr>`\n    }).join('') : `<tr><td colspan=\"6\"><div class=\"empty\">Nenhum post encontrado.</div></td></tr>`\n    return `<div class=\"wrap\">\n      <div class=\"head\">\n        <h1>Posts</h1>\n        <div class=\"actions\">\n          <button class=\"btn settings\">Configurações</button>\n          <button class=\"btn logout\">Sair</button>\n          <button class=\"btn primary new\">+ Novo post</button>\n        </div>\n      </div>\n      <div class=\"filters\">\n        <input class=\"search\" placeholder=\"Buscar por título…\" value=\"${(d2.state.q||'').replace(/\"/g,'&quot;')}\"/>\n        <div class=\"chip\" data-stat=\"all\" ${stat==='all'?'data-active':''}>Todos</div>\n        <div class=\"chip\" data-stat=\"published\" ${stat==='published'?'data-active':''}>Publicados</div>\n        <div class=\"chip\" data-stat=\"draft\" ${stat==='draft'?'data-active':''}>Rascunhos</div>\n      </div>\n      <table>\n        <thead><tr><th>Título</th><th>Status</th><th>Categoria</th><th>Autor</th><th>Publicado</th><th></th></tr></thead>\n        <tbody>${trs}</tbody>\n      </table>\n    </div>`\n  },\n  mounted(d2){\n    d2.on('.new','click',()=>d2.router().goTo('/editor'))\n    d2.on('.edit','click',(e,el)=>d2.router().goTo(`/editor/${el.dataset.id}`))\n    d2.on('.settings','click',()=>d2.router().goTo('/settings'))\n    d2.on('.search','input',(e,el)=>{d2.state.q = el.value})\n    d2.on('.chip','click',(e,el)=>{d2.state.stat = el.dataset.stat})\n    d2.on('.logout','click',async()=>{ try{ await d2.auth('blogAuth').logout() }catch(e){} d2.router().goTo('/login') })\n    d2.on('.toggle','click',async(e,el)=>{\n      const ds = d2.data('blogpostsDataSet')\n      const rec = ds.records().find(r=>r._id===el.dataset.id); if(!rec) return\n      const next = rec.status === 'published' ? 'draft' : 'published'\n      await ds.update({...rec, status: next, publishedAt: next==='published' && !rec.publishedAt ? new Date().toISOString() : rec.publishedAt})\n    })\n    d2.on('.del','click',async(e,el)=>{\n      const ok = await d2.dialog.confirm('Excluir este post?'); if(!ok) return\n      await d2.data('blogpostsDataSet').remove(el.dataset.id)\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":"6a4a750ca0abd1615d7d30fe","component":"data2-core-primitives@Router","system":"66476aae8c3737df2e4efc38","displayName":"CMS Router","params":{"routerType":{"component":"data2-core-primitives@String","params":{"content":"browser"}},"routes":[{"component":"data2-core-primitives@Route","params":{"path":"/login","name":"Entrar","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"y_h_dgyVzkMbpAw4IamM7"}}}},{"component":"data2-core-primitives@Route","params":{"path":"","name":"Posts","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"qzHpMP_-Nps61CouFFSZf"}},"policies":[{"component":"data2-core-types@PolicyReference","params":{"authenticationStrategy":{"reference":"blogAuth"}}}]}},{"component":"data2-core-primitives@Route","params":{"path":"/editor","name":"Novo post","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"n_jlOJdToCskq4vCctsDq"}},"policies":[{"component":"data2-core-types@PolicyReference","params":{"authenticationStrategy":{"reference":"blogAuth"}}}]}},{"component":"data2-core-primitives@Route","params":{"path":"/editor/:id","name":"Editar post","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"n_jlOJdToCskq4vCctsDq"}},"policies":[{"component":"data2-core-types@PolicyReference","params":{"authenticationStrategy":{"reference":"blogAuth"}}}]}},{"component":"data2-core-primitives@Route","params":{"path":"/settings","name":"Configurações","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"gUnJYNHJkZGhcs64Tc9y5"}},"policies":[{"component":"data2-core-types@PolicyReference","params":{"authenticationStrategy":{"reference":"blogAuth"}}}]}}],"login":{"component":"data2-core-types@ArtboardReference","params":{"reference":"y_h_dgyVzkMbpAw4IamM7"}}},"reference":"cmsRouter"},{"_id":"6a4a738a08850cd753ebe96a","component":"data2-core-primitives@Artboard","system":"66476aae8c3737df2e4efc38","displayName":"CMS - Login","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"CMS - Login"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}},"reference":"y_h_dgyVzkMbpAw4IamM7"},{"_id":"6a4a739856fff83c3be62299","component":"data2-core-primitives@Artboard","system":"66476aae8c3737df2e4efc38","displayName":"CMS - Settings","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"CMS - Settings"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}},"reference":"gUnJYNHJkZGhcs64Tc9y5"},{"_id":"6a4a7392a0abd1615d7d2d1f","component":"data2-core-primitives@Artboard","system":"66476aae8c3737df2e4efc38","displayName":"CMS - Post Editor","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"CMS - Post Editor"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}},"reference":"n_jlOJdToCskq4vCctsDq"},{"_id":"6a4a738e74078e31396f5f7e","component":"data2-core-primitives@Artboard","system":"66476aae8c3737df2e4efc38","displayName":"CMS - Dashboard","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"CMS - Dashboard"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}},"reference":"qzHpMP_-Nps61CouFFSZf"},{"_id":"003ca3b3e742205c8f621ebc","parent":"6a4a738a08850cd753ebe96a","component":"babi-hera-demos@cmsLogin","system":"66476aae8c3737df2e4efc38","displayName":"Login","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}}},"reference":"NoB4WYVLdRkUWBuwoqHQk"},{"_id":"6a27b1ed312b7e48ab37efb3","parent":"6a4a739856fff83c3be62299","component":"babi-hera-demos@cmsSettings","system":"66476aae8c3737df2e4efc38","displayName":"SettingsTabs","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}}},"reference":"syKmeNdOFIjdzj6zYj3Af"},{"_id":"2155bb35c92ad8ddf7943dd2","parent":"6a4a7392a0abd1615d7d2d1f","component":"babi-hera-demos@cmsPostEditor","system":"66476aae8c3737df2e4efc38","displayName":"PostEditor","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}}},"reference":"bT35mubTw9il1ukpjVULd"},{"_id":"4254140e63caf94d6beb75be","parent":"6a4a738e74078e31396f5f7e","component":"babi-hera-demos@cmsPostsTable","system":"66476aae8c3737df2e4efc38","displayName":"PostsTable","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}}},"reference":"nr1PLMizPq4XT9T5xX1wu"}]}},{"_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":"6a4a751608850cd753ebedf8","displayName":"Hera Blog CMS","reference":"EK8j1zFxZKH-WTDG2rmzP","params":{"name":{"component":"data2-core-primitives@String","params":{"content":"Hera Blog CMS"}},"shortName":{"component":"data2-core-primitives@String","params":{"content":"Hera Blog CMS"}},"domain":{"component":"data2-core-primitives@String","params":{"content":"hera-blog-cms"}},"serverSideRendering":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"entryPoint":{"component":"data2-core-types@ComponentInstanceReference","params":{"component":"data2-core-primitives@Router","reference":"cmsRouter"}},"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":"66476aae8c3737df2e4efc38","component":"data2-core-primitives@Application"}]}},{"reference":"DataComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"BundlesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}}],"processesParams":{}}}}