{"context":{"domain":"people-le-moura"},"layers":{"ApplicationLayer":{"reference":"ApplicationLayer","availableInstances":[{"reference":"ComponentsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@DataSet","reference":"SystemsDataSet","params":{"filter":{"domain":"data2"},"pagination":{"size":1},"datasource":{"component":"data2-core-types@ProcessReference","params":{"reference":"SystemsDataSource"}}}},{"reference":"ExternalComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"SystemsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"5e3b796d6228227ca637d0f4","name":"data2","domain":"data2","organization":"62292184611f480b3191c37c","visibility":"public","updatedAt":"2026-07-27T14:19:36.810Z"}]}},{"reference":"OrganizationsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"DataComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@DataSet","reference":"OneFileComponentInstancesDataSet","params":{"pagination":{"size":1},"master":{"dataset":{"component":"data2-core-types@ProcessReference","params":{"reference":"SystemsDataSet"}},"localField":"system","masterField":"_id"},"datasource":{"component":"data2-core-types@ProcessReference","params":{"reference":"FileComponentInstancesDataSource"}}}},{"reference":"ApplicationsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"ComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"ServiceComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@Data2TableDataSource","reference":"FileComponentInstancesDataSource","params":{"table":"fileComponentInstances","schema":[{"component":"data2-core-types@Field","params":{"key":"component","title":"Component","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"system","title":"System","component":"data2-core-primitives@ObjectId"}},{"component":"data2-core-types@Field","params":{"key":"displayName","title":"Display Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"params","title":"Params","component":"data2-core-primitives@Object"}},{"component":"data2-core-types@Field","params":{"key":"reference","title":"Reference","component":"data2-core-primitives@String"}}]}},{"component":"data2-core@MemoryDataSource","reference":"EmptyDataSource","params":{"initialData":[]}},{"reference":"ComponentsDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"UserComponentsDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"DataComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ServiceComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ExternalComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ApplicationsDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}}],"processesParams":{}},"HostApplicationLayer":{"reference":"HostApplicationLayer","availableInstances":[{"_id":"5f15ff190528b92601890f71","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"SystemsTableDataSource"}},"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"domain"}}},"pk":"_id","fields":[{"component":"data2-core-types@FieldReference","params":{"key":"_id"}},{"component":"data2-core-types@FieldReference","params":{"key":"name"}},{"component":"data2-core-types@FieldReference","params":{"key":"domain"}},{"component":"data2-core-types@FieldReference","params":{"key":"visibility"}},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"customDomains"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization._id"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization.name"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization.billingStatus"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization.publicTrial.active"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"settings.defaultAccessPolicy"}}},"break":true}],"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":1}}},"staticPagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":1}}},"policies":[{"component":"data2-core-auth@Policy","params":{"allow":{"params":{"actions":[{"params":{"components":[{"params":{"query":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$params.query"}}}},"field":{"component":"data2-core-primitives@String","params":{"content":"_id"}},"fieldType":"string"},"component":"data2@7KkQq0vK4a7D2gg6IVJT7"},{"params":{"query":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$params.query"}}}},"field":{"component":"data2-core-primitives@String","params":{"content":"domain"}},"fieldType":"string"},"component":"data2@7KkQq0vK4a7D2gg6IVJT7"},{"params":{"query":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$params.query"}}}},"field":{"component":"data2-core-primitives@String","params":{"content":"customDomains"}},"fieldType":"string"},"component":"data2@7KkQq0vK4a7D2gg6IVJT7"}]},"component":"data2-core-logical-operators@Or"}]},"component":"data2-core-flow@Series"}}}]},"reference":"SystemsDataSet","updatedAt":"2026-08-07T21:51:24.037Z","createdAt":"2020-07-20T20:31:21.838Z"},{"_id":"5f1601ce0528b92601890f7c","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":1000},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ComponentsTableDataSource"}},"sort":{"params.package":1,"params.component":1},"pk":"_id","autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"staticFilter":{"system":{"exists":{"params":{"content":false},"component":"data2-core-primitives@Boolean"}}},"filter":{"system":{"exists":{"params":{"content":false},"component":"data2-core-primitives@Boolean"}}}},"reference":"ComponentsDataSet","updatedAt":"2025-11-05T19:37:01.935Z","createdAt":"2020-07-20T20:42:54.898Z"},{"_id":"5f9041dbc8da12be8b94aea4","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":2000},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ComponentsTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"UserComponentsDataSet","updatedAt":"2025-11-06T21:06:58.095Z","createdAt":"2020-07-20T20:44:09.350Z"},{"_id":"65d8c4fabc9dbb8f94de8d53","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ExternalComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ExternalComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:23.742Z","createdAt":"2024-02-23T16:17:01.816Z"},{"reference":"SystemsTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"69fe34b018c813c5be7bddd9","name":"Leadro Moura","domain":"people-le-moura","visibility":"private","settings":{"defaultAccessPolicy":"private"},"updatedAt":"2026-08-14T19:35:06.936Z","createdAt":"2026-05-08T19:08:32.496Z"}]}},{"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":"6a4545c9b95d9a763fc42835","component":"data2-core-types@Component","system":"69fe34b018c813c5be7bddd9","params":{"extends":"data2-core-primitives@Block","component":"crm-accounts-view","package":"people-le-moura","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    *{box-sizing:border-box;margin:0;padding:0}\n    .app{display:grid;grid-template-columns:200px 1fr;grid-template-rows:auto auto 1fr;height:100%;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;background:#f5f6fa;overflow:hidden}\n    .sidebar{grid-row:1/4;background:#16192b;display:flex;flex-direction:column}\n    .logo{padding:22px 18px 20px;color:#fff;font-size:15px;font-weight:800;letter-spacing:-.5px}\n    .logo em{color:#7c4dff;font-style:normal}\n    .nav{flex:1;padding:0 8px;display:flex;flex-direction:column;gap:2px}\n    .nav-item{padding:9px 12px;border-radius:8px;color:#7a7d94;font-size:13px;cursor:pointer;display:flex;align-items:center;gap:8px;transition:all .15s;user-select:none}\n    .nav-item:hover{background:rgba(255,255,255,.06);color:#fff}\n    .nav-item.active{background:#7c4dff;color:#fff;font-weight:600}\n    .nav-foot{padding:16px 18px;color:#4a4d6a;font-size:11px;margin-top:auto}\n    .topbar{grid-column:2;background:#fff;border-bottom:1px solid #ecedf5;padding:16px 24px;display:flex;align-items:center;gap:12px}\n    .topbar-title{font-size:17px;font-weight:700;color:#16192b;flex:1}\n    .topbar-sub{font-size:12px;color:#9598ae;font-weight:400;display:block;margin-top:1px}\n    .srch{padding:7px 12px;border:1.5px solid #e4e5ef;border-radius:8px;font-size:13px;width:210px;outline:none;color:#16192b;transition:border .15s;font-family:inherit}\n    .srch:focus{border-color:#7c4dff}\n    .filter-btns{display:flex;gap:6px;flex-wrap:wrap;align-items:center}\n    .fbtn{padding:5px 11px;border:1.5px solid #e4e5ef;border-radius:20px;font-size:12px;cursor:pointer;background:#fff;color:#9598ae;font-weight:500;font-family:inherit;transition:all .15s;white-space:nowrap}\n    .fbtn.active{background:#7c4dff;border-color:#7c4dff;color:#fff;font-weight:700}\n    .kpi-bar{grid-column:2;background:#fff;border-bottom:1px solid #ecedf5;padding:0 24px;display:flex}\n    .kpi{flex:1;padding:12px 0;display:flex;flex-direction:column;gap:2px;border-right:1px solid #ecedf5}\n    .kpi:last-child{border:0}.kpi+.kpi{padding-left:20px}\n    .kv{font-size:21px;font-weight:800;color:#16192b;line-height:1}\n    .kl{font-size:10px;color:#9598ae;text-transform:uppercase;letter-spacing:.07em;font-weight:600}\n    .ks{font-size:12px;font-weight:600;margin-top:2px;color:#7c4dff}\n    .content{grid-column:2;display:flex;overflow:hidden}\n    .list-wrap{flex:1;display:flex;flex-direction:column;padding:16px 24px;overflow:hidden}\n    .list-hd{display:grid;grid-template-columns:1fr 120px 90px 100px 140px 100px;gap:8px;padding:8px 12px;background:#f5f6fa;border-radius:8px 8px 0 0;border:1px solid #ecedf5;border-bottom:0}\n    .list-hd span{font-size:10px;font-weight:700;color:#9598ae;text-transform:uppercase;letter-spacing:.05em}\n    .list-body{flex:1;overflow-y:auto;border:1px solid #ecedf5;border-radius:0 0 8px 8px;background:#fff}\n    .list-row{display:grid;grid-template-columns:1fr 120px 90px 100px 140px 100px;gap:8px;padding:11px 12px;align-items:center;border-bottom:1px solid #f5f6fa;cursor:pointer;transition:background .1s;font-size:13px;color:#16192b}\n    .list-row:last-child{border:0}.list-row:hover,.list-row.sel{background:#f8f7ff}\n    .acct-name{font-weight:700;color:#16192b}\n    .acct-sub{font-size:11px;color:#9598ae;margin-top:1px}\n    .sector-pill{font-size:10px;font-weight:700;padding:3px 8px;border-radius:9px;background:#ede9fe;color:#6d28d9;white-space:nowrap;display:inline-block}\n    .rev{font-weight:700;color:#7c4dff;font-size:13px}\n    .emp{font-size:12px;color:#9598ae}\n    .loc{font-size:12px;color:#9598ae}\n    .opp-count{display:inline-flex;align-items:center;justify-content:center;background:#f0edff;color:#7c4dff;font-size:11px;font-weight:700;border-radius:12px;padding:2px 10px;min-width:28px}\n    .detail{width:320px;flex-shrink:0;background:#fff;border-left:1px solid #ecedf5;display:flex;flex-direction:column;overflow:hidden;transition:width .18s}\n    .detail.hide{width:0;border:0}\n    .det-hd{padding:16px 18px 12px;border-bottom:1px solid #f0f1f8;position:relative}\n    .det-av{width:42px;height:42px;border-radius:10px;background:linear-gradient(135deg,#7c4dff,#4a90d9);color:#fff;font-size:16px;font-weight:800;display:flex;align-items:center;justify-content:center;margin-bottom:10px}\n    .det-title{font-size:15px;font-weight:700;color:#16192b;line-height:1.3;padding-right:22px}\n    .det-sub{font-size:12px;color:#9598ae;margin-top:2px}\n    .cls{position:absolute;top:14px;right:14px;background:none;border:0;font-size:15px;cursor:pointer;color:#9598ae;line-height:1;padding:3px 5px;border-radius:4px;font-family:inherit}\n    .cls:hover{background:#f0f1f8;color:#16192b}\n    .det-body{flex:1;overflow-y:auto;padding:12px 18px;display:flex;flex-direction:column;gap:10px}\n    .sec-title{font-size:11px;font-weight:700;color:#9598ae;text-transform:uppercase;letter-spacing:.07em;margin-top:6px;padding-bottom:6px;border-bottom:1px solid #f0f1f8}\n    .fg{display:flex;flex-direction:column;gap:3px}\n    .fl{font-size:10px;font-weight:700;color:#9598ae;text-transform:uppercase;letter-spacing:.06em}\n    .fi{font-size:13px;padding:7px 10px;border:1.5px solid #e4e5ef;border-radius:7px;outline:none;width:100%;font-family:inherit;color:#16192b;transition:border .15s;background:#fff}\n    .fi:focus{border-color:#7c4dff}\n    .fv{font-size:13px;padding:7px 10px;background:#f8f9ff;border-radius:7px;border:1px solid #ecedf5;color:#16192b;line-height:1.4}\n    .opp-item{background:#f8f9ff;border-radius:8px;padding:9px 11px;border:1px solid #ecedf5;display:flex;flex-direction:column;gap:4px}\n    .opp-id{font-size:10px;color:#9598ae;font-family:monospace}\n    .opp-val{font-size:12px;font-weight:700;color:#7c4dff}\n    .opp-stage{font-size:10px;font-weight:700;padding:2px 7px;border-radius:9px;display:inline-block}\n    .sp-0{background:#dbeafe;color:#1d4ed8}.sp-1{background:#e0e7ff;color:#3730a3}\n    .sp-2{background:#ede9fe;color:#6d28d9}.sp-3{background:#fef3c7;color:#92400e}\n    .sp-4{background:#d1fae5;color:#065f46}.sp-5{background:#fee2e2;color:#991b1b}\n    .sp-x{background:#f3f4f6;color:#374151}\n    .no-opps{font-size:12px;color:#c0c3d4;text-align:center;padding:12px 0}\n    .det-foot{padding:12px 18px;border-top:1px solid #f0f1f8;display:flex;flex-direction:column;gap:7px}\n    .save-btn{width:100%;padding:9px;background:#7c4dff;color:#fff;border:0;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;transition:all .15s;font-family:inherit}\n    .save-btn:hover{background:#6c3fe8}.save-btn:disabled{opacity:.5;cursor:not-allowed}\n    .ok-msg{text-align:center;font-size:12px;color:#00a86b;font-weight:600}\n    .no-data{display:flex;align-items:center;justify-content:center;height:100%;color:#9598ae;font-size:14px}\n    ::-webkit-scrollbar{width:4px;height:4px}\n    ::-webkit-scrollbar-thumb{background:#d4d5e4;border-radius:3px}\n    ::-webkit-scrollbar-track{background:transparent}\n  `,\n  render(d2) {\n    const ds = d2.data('accounts')\n    const pds = d2.data('pipeline')\n    if (!ds || ds.loading) return `<div class=\"app\"><div class=\"sidebar\"><div class=\"logo\">Codex <em>CRM</em></div></div><div class=\"no-data\" style=\"grid-column:2;grid-row:1/4\">A carregar accounts...</div></div>`\n    const esc = s => String(s||'').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;')\n    const fmtM = n => { n=Number(n)||0; return n>=1e9?(n/1e9).toFixed(1)+'B':n>=1e6?(n/1e6).toFixed(1)+'M':n>=1e3?Math.round(n/1e3)+'K':String(Math.round(n)) }\n    const ini = s => (s||'?').split(/\\s+/).map(w=>w[0]||'').join('').slice(0,2).toUpperCase()\n    const STAGES = ['Prospecting','Qualification','Proposal','Negotiation','Closed Won','Closed Lost']\n    const S_CLS = ['sp-0','sp-1','sp-2','sp-3','sp-4','sp-5']\n    const stageCls = s => { const i=STAGES.indexOf(s); return i>=0?S_CLS[i]:'sp-x' }\n    const q = (d2.state.q||'').toLowerCase()\n    const sector = d2.state.sector||'all'\n    const selId = d2.state.selId\n    const edits = d2.state.edits||{}\n    const saving = d2.state.saving\n    const saved = d2.state.saved\n    const all = ds.records()\n    const allPipeline = pds && !pds.loading ? pds.records() : []\n    const sectors = [...new Set(all.map(r=>r.sector).filter(Boolean))].sort()\n    let rows = all\n    if (q) rows = rows.filter(r=>(r.account||'').toLowerCase().includes(q)||(r.sector||'').toLowerCase().includes(q)||(r.office_location||'').toLowerCase().includes(q))\n    if (sector !== 'all') rows = rows.filter(r=>r.sector===sector)\n    const sel = selId ? all.find(r=>r._id===selId) : null\n    const selOpps = sel ? allPipeline.filter(r=>(r.account||'').toLowerCase()===(sel.account||'').toLowerCase()) : []\n    const totalRev = all.reduce((s,r)=>s+(Number(r.revenue)||0),0)\n    const avgEmp = all.length ? Math.round(all.reduce((s,r)=>s+(Number(r.employees)||0),0)/all.length) : 0\n    const sidebar = `<div class=\"sidebar\"><div class=\"logo\">Codex <em>CRM</em></div><div class=\"nav\"><div class=\"nav-item active\">📋 Accounts</div><div class=\"nav-item\" data-nav=\"pipeline\">⚡ Pipeline</div><div class=\"nav-item\" data-nav=\"analytics\">📊 Analytics</div></div><div class=\"nav-foot\">Codex CRM v2</div></div>`\n    const sectorBtns = `<div class=\"filter-btns\"><button class=\"fbtn${sector==='all'?' active':''}\" data-sector=\"all\">Todos</button>${sectors.map(s=>`<button class=\"fbtn${sector===s?' active':''}\" data-sector=\"${esc(s)}\">${esc(s)}</button>`).join('')}</div>`\n    const topbar = `<div class=\"topbar\"><div><span class=\"topbar-sub\">Codex CRM</span><div class=\"topbar-title\">Accounts</div></div><input class=\"srch\" placeholder=\"Pesquisar conta, sector...\" data-search value=\"${esc(d2.state.q||'')}\">${sectorBtns}</div>`\n    const kpiBar = `<div class=\"kpi-bar\"><div class=\"kpi\"><div class=\"kv\">${all.length}</div><div class=\"kl\">Total Accounts</div></div><div class=\"kpi\"><div class=\"kv\">${fmtM(totalRev)}</div><div class=\"kl\">Receita Total</div><div class=\"ks\">Soma revenue</div></div><div class=\"kpi\"><div class=\"kv\">${avgEmp.toLocaleString()}</div><div class=\"kl\">Méd. Funcionários</div></div><div class=\"kpi\"><div class=\"kv\">${sectors.length}</div><div class=\"kl\">Sectores</div></div></div>`\n    const getOppCount = acctName => allPipeline.filter(r=>(r.account||'').toLowerCase()===(acctName||'').toLowerCase()).length\n    const listHtml = `<div class=\"list-wrap\"><div class=\"list-hd\"><span>Empresa</span><span>Sector</span><span>Receita</span><span>Funcionários</span><span>Localização</span><span>Oportunidades</span></div><div class=\"list-body\">${rows.length?rows.map(r=>`<div class=\"list-row${selId===r._id?' sel':''}\" data-key=\"${r._id}\" data-id=\"${r._id}\" data-action=\"select\"><div><div class=\"acct-name\">${esc(r.account||'—')}</div>${r.subsidiary_of?`<div class=\"acct-sub\">Sub de ${esc(r.subsidiary_of)}</div>`:''}</div><span><span class=\"sector-pill\">${esc(r.sector||'—')}</span></span><span class=\"rev\">€${fmtM(r.revenue)}</span><span class=\"emp\">${r.employees?(Number(r.employees)).toLocaleString():'—'}</span><span class=\"loc\">${esc(r.office_location||'—')}</span><span><span class=\"opp-count\">${getOppCount(r.account)}</span></span></div>`).join(''):'<div style=\"padding:32px;text-align:center;color:#c0c3d4;font-size:13px\">Sem resultados</div>'}</div></div>`\n    const ev = (k,fb) => { const v=edits[k]; return v!==undefined?v:(sel?sel[k]:fb)||'' }\n    const detailHtml = sel ? `<div class=\"detail\"><div class=\"det-hd\"><div class=\"det-av\">${ini(sel.account)}</div><div class=\"det-title\">${esc(sel.account||'Account')}</div><div class=\"det-sub\">${esc(sel.sector||'—')} ${sel.year_established?'· Est. '+sel.year_established:''}</div><button class=\"cls\" data-action=\"close\">✕</button></div><div class=\"det-body\"><div class=\"sec-title\">Dados da Empresa</div><div class=\"fg\"><div class=\"fl\">Nome</div><input class=\"fi\" data-edit=\"account\" value=\"${esc(ev('account'))}\"></div><div class=\"fg\"><div class=\"fl\">Sector</div><input class=\"fi\" data-edit=\"sector\" value=\"${esc(ev('sector'))}\"></div><div class=\"fg\"><div class=\"fl\">Receita (€)</div><input class=\"fi\" type=\"number\" data-edit=\"revenue\" value=\"${ev('revenue',0)}\"></div><div class=\"fg\"><div class=\"fl\">Funcionários</div><input class=\"fi\" type=\"number\" data-edit=\"employees\" value=\"${ev('employees',0)}\"></div><div class=\"fg\"><div class=\"fl\">Localização</div><input class=\"fi\" data-edit=\"office_location\" value=\"${esc(ev('office_location'))}\"></div><div class=\"fg\"><div class=\"fl\">Filial de</div><input class=\"fi\" data-edit=\"subsidiary_of\" value=\"${esc(ev('subsidiary_of'))}\"></div><div class=\"sec-title\">Oportunidades (${selOpps.length})</div>${selOpps.length?selOpps.map(o=>`<div class=\"opp-item\"><div class=\"opp-id\">${esc(o.opportunity_id||'—')}</div><div style=\"display:flex;align-items:center;justify-content:space-between;margin-top:3px\"><span class=\"opp-val\">€${fmtM(o.close_value)}</span><span class=\"opp-stage ${stageCls(o.deal_stage)}\">${esc(o.deal_stage||'—')}</span></div>${o.sales_agent?`<div style=\"font-size:11px;color:#9598ae;margin-top:3px\">${esc(o.sales_agent)}</div>`:''}</div>`).join(''):'<div class=\"no-opps\">Sem oportunidades em pipeline</div>'}</div><div class=\"det-foot\">${saved?'<div class=\"ok-msg\">✓ Guardado</div>':''}<button class=\"save-btn\" data-action=\"save\"${saving?' disabled':''} >${saving?'A guardar...':'Guardar Alterações'}</button></div></div>` : '<div class=\"detail hide\"></div>'\n    return `<div class=\"app\">${sidebar}${topbar}${kpiBar}<div class=\"content\">${listHtml}${detailHtml}</div></div>`\n  },\n  mounted(d2) {\n    d2.on('[data-search]','input',(e,el)=>{ d2.state.q=el.value })\n    d2.on('[data-sector]','click',(e,el)=>{ d2.state.sector=el.dataset.sector })\n    d2.on('[data-action=\"select\"]','click',(e,el)=>{\n      const id=el.dataset.id\n      if(d2.state.selId===id){d2.state.selId=null;d2.state.edits={}}\n      else{d2.state.selId=id;d2.state.edits={};d2.state.saved=false}\n    })\n    d2.on('[data-action=\"close\"]','click',()=>{d2.state.selId=null;d2.state.edits={}})\n    d2.on('[data-edit]','input',(e,el)=>{ d2.state.edits={...(d2.state.edits||{}),[el.dataset.edit]:el.value} })\n    d2.on('[data-action=\"save\"]','click',async()=>{\n      const ds=d2.data('accounts'),id=d2.state.selId,edits=d2.state.edits||{}\n      if(!id||!Object.keys(edits).length)return\n      d2.state.saving=true;d2.state.saved=false\n      try{\n        const rec=ds.records().find(r=>r._id===id)\n        if(rec){const u={...rec,...edits};['revenue','employees'].forEach(k=>{if(u[k]!==undefined)u[k]=Number(u[k])||0});await ds.update(u)}\n        d2.state.saved=true;d2.state.edits={}\n        setTimeout(()=>{d2.state.saved=false},3000)\n      }finally{d2.state.saving=false}\n    })\n    d2.on('[data-nav]','click',(e,el)=>{d2.emit('onNavigate',el.dataset.nav)})\n  }\n}"}},"accounts":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"accounts"}}}},"pipeline":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"pipeline"}}}}}}}}}},{"_id":"6a4545772e19654bbce078d6","component":"data2-core-types@Component","system":"69fe34b018c813c5be7bddd9","params":{"extends":"data2-core-primitives@Block","component":"crm-pipeline-view","package":"people-le-moura","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    *{box-sizing:border-box;margin:0;padding:0}\n    .app{display:grid;grid-template-columns:200px 1fr;grid-template-rows:auto auto 1fr;height:100%;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;background:#f5f6fa;overflow:hidden}\n    .sidebar{grid-row:1/4;background:#16192b;display:flex;flex-direction:column}\n    .logo{padding:22px 18px 20px;color:#fff;font-size:15px;font-weight:800;letter-spacing:-.5px}\n    .logo em{color:#7c4dff;font-style:normal}\n    .nav{flex:1;padding:0 8px;display:flex;flex-direction:column;gap:2px}\n    .nav-item{padding:9px 12px;border-radius:8px;color:#7a7d94;font-size:13px;cursor:pointer;display:flex;align-items:center;gap:8px;transition:all .15s;user-select:none}\n    .nav-item:hover{background:rgba(255,255,255,.06);color:#fff}\n    .nav-item.active{background:#7c4dff;color:#fff;font-weight:600}\n    .nav-foot{padding:16px 18px;color:#4a4d6a;font-size:11px;margin-top:auto}\n    .topbar{grid-column:2;background:#fff;border-bottom:1px solid #ecedf5;padding:16px 24px;display:flex;align-items:center;gap:12px}\n    .topbar-title{font-size:17px;font-weight:700;color:#16192b;flex:1}\n    .topbar-sub{font-size:12px;color:#9598ae;font-weight:400;display:block;margin-top:1px}\n    .srch{padding:7px 12px;border:1.5px solid #e4e5ef;border-radius:8px;font-size:13px;width:210px;outline:none;color:#16192b;transition:border .15s;font-family:inherit}\n    .srch:focus{border-color:#7c4dff}\n    .vt{display:flex;background:#f0f1f8;border-radius:8px;padding:2px;gap:1px}\n    .vt-btn{padding:5px 12px;border:0;background:transparent;border-radius:6px;font-size:12px;cursor:pointer;color:#9598ae;font-weight:500;transition:all .15s;font-family:inherit}\n    .vt-btn.active{background:#fff;color:#16192b;font-weight:700;box-shadow:0 1px 3px rgba(0,0,0,.1)}\n    .kpi-bar{grid-column:2;background:#fff;border-bottom:1px solid #ecedf5;padding:0 24px;display:flex}\n    .kpi{flex:1;padding:12px 0;display:flex;flex-direction:column;gap:2px;border-right:1px solid #ecedf5}\n    .kpi:last-child{border:0}.kpi+.kpi{padding-left:20px}\n    .kv{font-size:21px;font-weight:800;color:#16192b;line-height:1}\n    .kl{font-size:10px;color:#9598ae;text-transform:uppercase;letter-spacing:.07em;font-weight:600}\n    .ks{font-size:12px;font-weight:600;margin-top:2px;color:#7c4dff}\n    .kpi.green .kv{color:#00a86b}.kpi.red .kv{color:#e63946}\n    .content{grid-column:2;display:flex;overflow:hidden}\n    .board{flex:1;display:flex;gap:12px;padding:16px 24px;overflow-x:auto;overflow-y:hidden;align-items:flex-start}\n    .lane{width:224px;flex-shrink:0;border-radius:10px;overflow:hidden;display:flex;flex-direction:column;background:#ebebf5}\n    .lane-hd{padding:10px 12px;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.07em;display:flex;align-items:center;gap:6px}\n    .lane-cnt{background:rgba(0,0,0,.13);border-radius:9px;padding:1px 6px;font-size:10px;font-weight:700}\n    .lane-body{flex:1;padding:6px;overflow-y:auto;display:flex;flex-direction:column;gap:7px;min-height:60px;max-height:calc(100vh - 280px)}\n    .lane.dragover .lane-body{background:rgba(124,77,255,.1);outline:2px dashed #7c4dff;outline-offset:-4px;border-radius:8px}\n    .card{background:#fff;border-radius:9px;padding:11px 12px;box-shadow:0 1px 3px rgba(0,0,0,.07);cursor:pointer;border:1.5px solid transparent;transition:all .15s}\n    .card:hover{border-color:#d4c6ff;box-shadow:0 3px 10px rgba(124,77,255,.12)}\n    .card.sel{border-color:#7c4dff;box-shadow:0 3px 10px rgba(124,77,255,.2)}\n    .card[data-drag]{opacity:.35}\n    .card-opp{font-size:10px;color:#b0b3c9;font-weight:600;letter-spacing:.03em;margin-bottom:4px}\n    .card-acct{font-size:13px;font-weight:700;color:#16192b;line-height:1.2;margin-bottom:7px}\n    .card-row{display:flex;align-items:center;justify-content:space-between}\n    .pill{font-size:10px;font-weight:700;padding:2px 7px;border-radius:9px}\n    .card-val{font-size:12px;font-weight:700;color:#7c4dff}\n    .card-foot{display:flex;align-items:center;gap:5px;margin-top:7px}\n    .av{width:17px;height:17px;border-radius:50%;background:#7c4dff;color:#fff;font-size:8px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}\n    .card-ag{font-size:11px;color:#9598ae}\n    .card-pr{font-size:11px;color:#c0c3d4;margin-left:auto;font-style:italic}\n    .empty-lane{padding:20px 0;color:#c0c3d4;font-size:12px;text-align:center}\n    .list-wrap{flex:1;display:flex;flex-direction:column;padding:16px 24px;overflow:hidden}\n    .list-hd{display:grid;grid-template-columns:120px 1fr 130px 100px 80px 110px;gap:8px;padding:8px 12px;background:#f5f6fa;border-radius:8px 8px 0 0;border:1px solid #ecedf5;border-bottom:0}\n    .list-hd span{font-size:10px;font-weight:700;color:#9598ae;text-transform:uppercase;letter-spacing:.05em}\n    .list-body{flex:1;overflow-y:auto;border:1px solid #ecedf5;border-radius:0 0 8px 8px;background:#fff}\n    .list-row{display:grid;grid-template-columns:120px 1fr 130px 100px 80px 110px;gap:8px;padding:10px 12px;align-items:center;border-bottom:1px solid #f5f6fa;cursor:pointer;transition:background .1s;font-size:13px;color:#16192b}\n    .list-row:last-child{border:0}.list-row:hover,.list-row.sel{background:#f8f7ff}\n    .mono{font-family:monospace;font-size:11px;color:#9598ae}\n    .sp{font-size:10px;font-weight:700;padding:3px 8px;border-radius:9px;white-space:nowrap;display:inline-block}\n    .sp-0{background:#dbeafe;color:#1d4ed8}.sp-1{background:#e0e7ff;color:#3730a3}\n    .sp-2{background:#ede9fe;color:#6d28d9}.sp-3{background:#fef3c7;color:#92400e}\n    .sp-4{background:#d1fae5;color:#065f46}.sp-5{background:#fee2e2;color:#991b1b}\n    .sp-x{background:#f3f4f6;color:#374151}\n    .pp-h{background:#fee2e2;color:#991b1b}.pp-m{background:#fef3c7;color:#92400e}\n    .pp-l{background:#d1fae5;color:#065f46}.pp-x{background:#f3f4f6;color:#374151}\n    .detail{width:300px;flex-shrink:0;background:#fff;border-left:1px solid #ecedf5;display:flex;flex-direction:column;overflow:hidden;transition:width .18s}\n    .detail.hide{width:0;border:0}\n    .det-hd{padding:16px 18px 12px;border-bottom:1px solid #f0f1f8;position:relative}\n    .det-opp{font-size:10px;color:#9598ae;font-family:monospace;margin-bottom:3px}\n    .det-title{font-size:14px;font-weight:700;color:#16192b;line-height:1.3;padding-right:22px}\n    .cls{position:absolute;top:14px;right:14px;background:none;border:0;font-size:15px;cursor:pointer;color:#9598ae;line-height:1;padding:3px 5px;border-radius:4px;font-family:inherit}\n    .cls:hover{background:#f0f1f8;color:#16192b}\n    .det-body{flex:1;overflow-y:auto;padding:12px 18px;display:flex;flex-direction:column;gap:10px}\n    .fg{display:flex;flex-direction:column;gap:3px}\n    .fl{font-size:10px;font-weight:700;color:#9598ae;text-transform:uppercase;letter-spacing:.06em}\n    .fi{font-size:13px;padding:7px 10px;border:1.5px solid #e4e5ef;border-radius:7px;outline:none;width:100%;font-family:inherit;color:#16192b;transition:border .15s;background:#fff;resize:vertical}\n    .fi:focus{border-color:#7c4dff}\n    select.fi{cursor:pointer}\n    textarea.fi{min-height:68px;font-size:12px}\n    .det-foot{padding:12px 18px;border-top:1px solid #f0f1f8;display:flex;flex-direction:column;gap:7px}\n    .save-btn{width:100%;padding:9px;background:#7c4dff;color:#fff;border:0;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;transition:all .15s;font-family:inherit}\n    .save-btn:hover{background:#6c3fe8}.save-btn:disabled{opacity:.5;cursor:not-allowed}\n    .ok-msg{text-align:center;font-size:12px;color:#00a86b;font-weight:600}\n    .no-data{display:flex;align-items:center;justify-content:center;height:100%;color:#9598ae;font-size:14px}\n    ::-webkit-scrollbar{width:4px;height:4px}\n    ::-webkit-scrollbar-thumb{background:#d4d5e4;border-radius:3px}\n    ::-webkit-scrollbar-track{background:transparent}\n    .modal-scrim{position:fixed;inset:0;background:rgba(22,25,43,.5);display:flex;align-items:center;justify-content:center;z-index:200}\n    .modal{background:#fff;border-radius:14px;width:500px;max-width:94vw;max-height:90vh;display:flex;flex-direction:column;box-shadow:0 24px 64px rgba(0,0,0,.22)}\n    .modal-hd{padding:20px 22px 16px;border-bottom:1px solid #f0f1f8;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}\n    .modal-title{font-size:16px;font-weight:700;color:#16192b}\n    .modal-cls{background:none;border:0;font-size:16px;cursor:pointer;color:#9598ae;padding:4px 6px;border-radius:4px;font-family:inherit;line-height:1}\n    .modal-cls:hover{background:#f0f1f8;color:#16192b}\n    .modal-body{padding:18px 22px;display:flex;flex-direction:column;gap:12px;overflow-y:auto;flex:1}\n    .modal-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n    .modal-foot{padding:14px 22px;border-top:1px solid #f0f1f8;display:flex;gap:8px;justify-content:flex-end;flex-shrink:0}\n    .btn-cancel{padding:8px 18px;border:1.5px solid #e4e5ef;border-radius:8px;background:#fff;color:#16192b;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s}\n    .btn-cancel:hover{border-color:#b0b3c9}\n    .btn-create{padding:8px 18px;border:0;border-radius:8px;background:#7c4dff;color:#fff;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;transition:all .15s}\n    .btn-create:hover{background:#6c3fe8}.btn-create:disabled{opacity:.5;cursor:not-allowed}\n    .add-btn{padding:7px 16px;background:#7c4dff;color:#fff;border:0;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;white-space:nowrap;transition:all .15s}\n    .add-btn:hover{background:#6c3fe8}\n  `,\n  render(d2) {\n    const ds = d2.data('pipeline')\n    if (!ds || ds.loading) return `<div class=\"app\"><div class=\"sidebar\"><div class=\"logo\">Codex <em>CRM</em></div></div><div class=\"no-data\" style=\"grid-column:2;grid-row:1/4\">A carregar pipeline...</div></div>`\n    const esc = s => String(s||'').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;')\n    const fmtN = n => { n = Number(n)||0; return n>=1e6?(n/1e6).toFixed(1)+'M':n>=1e3?Math.round(n/1e3)+'K':String(Math.round(n)) }\n    const ini = s => (s||'?').split(' ').map(w=>w[0]||'').join('').slice(0,2).toUpperCase()\n    const STAGES = ['Prospecting','Qualification','Proposal','Negotiation','Closed Won','Closed Lost']\n    const S_COLOR = ['#2563eb','#4f46e5','#7c4dff','#d97706','#059669','#dc2626']\n    const S_BG = ['#dbeafe','#e0e7ff','#ede9fe','#fef3c7','#d1fae5','#fee2e2']\n    const S_CLS = ['sp-0','sp-1','sp-2','sp-3','sp-4','sp-5']\n    const stageCls = s => { const i=STAGES.indexOf(s); return i>=0?S_CLS[i]:'sp-x' }\n    const priCls = p => p==='High'?'pp-h':p==='Medium'?'pp-m':p==='Low'?'pp-l':'pp-x'\n    const q = (d2.state.q||'').toLowerCase()\n    const view = d2.state.view||'kanban'\n    const selId = d2.state.selId\n    const edits = d2.state.edits||{}\n    const saving = d2.state.saving\n    const saved = d2.state.saved\n    const all = ds.records()\n    let rows = all\n    if (q) rows = rows.filter(r => (r.account||'').toLowerCase().includes(q)||(r.opportunity_id||'').toLowerCase().includes(q)||(r.product||'').toLowerCase().includes(q)||(r.sales_agent||'').toLowerCase().includes(q))\n    const sel = selId ? all.find(r=>r._id===selId) : null\n    const open = all.filter(r=>r.deal_stage!=='Closed Won'&&r.deal_stage!=='Closed Lost')\n    const won = all.filter(r=>r.deal_stage==='Closed Won')\n    const lost = all.filter(r=>r.deal_stage==='Closed Lost')\n    const openV = open.reduce((s,r)=>s+(Number(r.close_value)||0),0)\n    const wonV = won.reduce((s,r)=>s+(Number(r.close_value)||0),0)\n    const sidebar = `<div class=\"sidebar\"><div class=\"logo\">Codex <em>CRM</em></div><div class=\"nav\"><div class=\"nav-item\" data-nav=\"accounts\">📋 Accounts</div><div class=\"nav-item active\">⚡ Pipeline</div><div class=\"nav-item\" data-nav=\"analytics\">📊 Analytics</div></div><div class=\"nav-foot\">Codex CRM v2</div></div>`\n    const topbar = `<div class=\"topbar\"><div><span class=\"topbar-sub\">Codex CRM</span><div class=\"topbar-title\">Pipeline Comercial</div></div><input class=\"srch\" placeholder=\"Pesquisar conta, produto...\" data-search value=\"${esc(d2.state.q||'')}\"><div class=\"vt\"><button class=\"vt-btn${view==='kanban'?' active':''}\" data-view=\"kanban\">⊞ Kanban</button><button class=\"vt-btn${view==='list'?' active':''}\" data-view=\"list\">≡ Lista</button></div><button class=\"add-btn\" data-action=\"new-lead\">+ Novo Lead</button></div>`\n    const kpiBar = `<div class=\"kpi-bar\"><div class=\"kpi\"><div class=\"kv\">${open.length}</div><div class=\"kl\">Em Pipeline</div><div class=\"ks\">€${fmtN(openV)}</div></div><div class=\"kpi green\"><div class=\"kv\">${won.length}</div><div class=\"kl\">Ganhos</div><div class=\"ks\" style=\"color:#00a86b\">€${fmtN(wonV)}</div></div><div class=\"kpi red\"><div class=\"kv\">${lost.length}</div><div class=\"kl\">Perdidos</div></div><div class=\"kpi\"><div class=\"kv\">${all.length}</div><div class=\"kl\">Total</div></div></div>`\n    const cardHtml = r => `<div class=\"card${selId===r._id?' sel':''}\" draggable=\"true\" data-key=\"${r._id}\" data-id=\"${r._id}\" data-action=\"select\"><div class=\"card-opp\">${esc(r.opportunity_id||'—')}</div><div class=\"card-acct\">${esc(r.account||'Sem conta')}</div><div class=\"card-row\"><span class=\"pill ${priCls(r.priority)}\">${esc(r.priority||'—')}</span><span class=\"card-val\">€${fmtN(r.close_value)}</span></div><div class=\"card-foot\"><span class=\"av\">${ini(r.sales_agent)}</span><span class=\"card-ag\">${esc(r.sales_agent||'—')}</span><span class=\"card-pr\">${esc(r.product||'')}</span></div></div>`\n    const boardHtml = `<div class=\"board\">${STAGES.map((stage,si) => { const lr=rows.filter(r=>r.deal_stage===stage); return `<div class=\"lane\" data-lane=\"${esc(stage)}\"><div class=\"lane-hd\" style=\"background:${S_BG[si]};color:${S_COLOR[si]}\">${esc(stage)}<span class=\"lane-cnt\">${lr.length}</span></div><div class=\"lane-body\">${lr.length?lr.map(cardHtml).join(''):'<div class=\"empty-lane\">○<br>Vazio</div>'}</div></div>` }).join('')}</div>`\n    const listHtml = `<div class=\"list-wrap\"><div class=\"list-hd\"><span>ID</span><span>Conta</span><span>Produto</span><span>Fase</span><span>Valor</span><span>Agente</span></div><div class=\"list-body\">${rows.length?rows.map(r=>`<div class=\"list-row${selId===r._id?' sel':''}\" data-key=\"${r._id}\" data-id=\"${r._id}\" data-action=\"select\"><span class=\"mono\">${esc(r.opportunity_id||'—')}</span><span style=\"font-weight:600\">${esc(r.account||'—')}</span><span style=\"color:#9598ae;font-size:12px\">${esc(r.product||'—')}</span><span><span class=\"sp ${stageCls(r.deal_stage)}\">${esc(r.deal_stage||'—')}</span></span><span style=\"font-weight:700;color:#7c4dff\">€${fmtN(r.close_value)}</span><span style=\"font-size:12px\">${esc(r.sales_agent||'—')}</span></div>`).join(''):'<div style=\"padding:32px;text-align:center;color:#c0c3d4;font-size:13px\">Sem resultados</div>'}</div></div>`\n    const ev = (k,fb) => { const v=edits[k]; return v!==undefined?v:(sel?sel[k]:fb)||'' }\n    const detailHtml = sel ? `<div class=\"detail\"><div class=\"det-hd\"><div class=\"det-opp\">${esc(sel.opportunity_id||'—')}</div><div class=\"det-title\">${esc(sel.account||'Oportunidade')}</div><button class=\"cls\" data-action=\"close\">✕</button></div><div class=\"det-body\"><div class=\"fg\"><div class=\"fl\">Conta</div><input class=\"fi\" data-edit=\"account\" value=\"${esc(ev('account'))}\"></div><div class=\"fg\"><div class=\"fl\">Produto</div><input class=\"fi\" data-edit=\"product\" value=\"${esc(ev('product'))}\"></div><div class=\"fg\"><div class=\"fl\">Fase</div><select class=\"fi\" data-edit=\"deal_stage\">${STAGES.map(s=>`<option${ev('deal_stage')===s?' selected':''}>${esc(s)}</option>`).join('')}</select></div><div class=\"fg\"><div class=\"fl\">Prioridade</div><select class=\"fi\" data-edit=\"priority\">${['High','Medium','Low'].map(p=>`<option${ev('priority')===p?' selected':''}>${p}</option>`).join('')}</select></div><div class=\"fg\"><div class=\"fl\">Valor (€)</div><input class=\"fi\" type=\"number\" data-edit=\"close_value\" value=\"${ev('close_value',0)}\"></div><div class=\"fg\"><div class=\"fl\">Agente</div><input class=\"fi\" data-edit=\"sales_agent\" value=\"${esc(ev('sales_agent'))}\"></div><div class=\"fg\"><div class=\"fl\">Próximo Passo</div><input class=\"fi\" data-edit=\"next_step\" value=\"${esc(ev('next_step'))}\"></div><div class=\"fg\"><div class=\"fl\">Forecast</div><select class=\"fi\" data-edit=\"forecast_category\">${['Commit','Best Case','Pipeline','Omit'].map(f=>`<option${ev('forecast_category')===f?' selected':''}>${f}</option>`).join('')}</select></div><div class=\"fg\"><div class=\"fl\">Notas</div><textarea class=\"fi\" data-edit=\"notes\">${esc(ev('notes'))}</textarea></div></div><div class=\"det-foot\">${saved?'<div class=\"ok-msg\">✓ Guardado</div>':''}<button class=\"save-btn\" data-action=\"save\"${saving?' disabled':''} >${saving?'A guardar...':'Guardar Alterações'}</button></div></div>` : '<div class=\"detail hide\"></div>'\n    const nl=d2.state.newLead||{},showNew=!!d2.state.showNew,creating=!!d2.state.creating\n    const modalHtml=showNew?`<div class=\"modal-scrim\" data-action=\"close-new\"><div class=\"modal\"><div class=\"modal-hd\"><div class=\"modal-title\">Novo Lead</div><button class=\"modal-cls\" data-action=\"close-new\">✕</button></div><div class=\"modal-body\"><div class=\"modal-row\"><div class=\"fg\"><div class=\"fl\">ID Oportunidade</div><input class=\"fi\" data-new=\"opportunity_id\" placeholder=\"OP-2026-...\" value=\"${esc(nl.opportunity_id||'')}\"></div><div class=\"fg\"><div class=\"fl\">Conta *</div><input class=\"fi\" data-new=\"account\" placeholder=\"Nome da empresa\" value=\"${esc(nl.account||'')}\"></div></div><div class=\"modal-row\"><div class=\"fg\"><div class=\"fl\">Produto</div><input class=\"fi\" data-new=\"product\" placeholder=\"Ex: Data2 Suite\" value=\"${esc(nl.product||'')}\"></div><div class=\"fg\"><div class=\"fl\">Agente</div><input class=\"fi\" data-new=\"sales_agent\" placeholder=\"Nome do agente\" value=\"${esc(nl.sales_agent||'')}\"></div></div><div class=\"modal-row\"><div class=\"fg\"><div class=\"fl\">Fase</div><select class=\"fi\" data-new=\"deal_stage\">${STAGES.map(s=>`<option${(nl.deal_stage||'Prospecting')===s?' selected':''}>${esc(s)}</option>`).join('')}</select></div><div class=\"fg\"><div class=\"fl\">Prioridade</div><select class=\"fi\" data-new=\"priority\">${['High','Medium','Low'].map(p=>`<option${(nl.priority||'Medium')===p?' selected':''}>${p}</option>`).join('')}</select></div></div><div class=\"modal-row\"><div class=\"fg\"><div class=\"fl\">Valor (€)</div><input class=\"fi\" type=\"number\" data-new=\"close_value\" placeholder=\"0\" value=\"${nl.close_value||''}\"></div><div class=\"fg\"><div class=\"fl\">Data de Fecho</div><input class=\"fi\" type=\"date\" data-new=\"close_date\" value=\"${nl.close_date||''}\"></div></div><div class=\"fg\"><div class=\"fl\">Notas</div><textarea class=\"fi\" data-new=\"notes\" style=\"min-height:60px\">${esc(nl.notes||'')}</textarea></div></div><div class=\"modal-foot\"><button class=\"btn-cancel\" data-action=\"close-new\">Cancelar</button><button class=\"btn-create\" data-action=\"create-lead\"${creating?' disabled':''}>${creating?'A criar...':'Criar Lead'}</button></div></div></div>`:''\n    return `<div class=\"app\">${sidebar}${topbar}${kpiBar}<div class=\"content\">${view==='kanban'?boardHtml:listHtml}${detailHtml}</div>${modalHtml}</div>`\n  },\n  mounted(d2) {\n    d2.on('[data-search]','input',(e,el)=>{ d2.state.q=el.value })\n    d2.on('[data-view]','click',(e,el)=>{ d2.state.view=el.dataset.view })\n    d2.on('[data-action=\"select\"]','click',(e,el)=>{\n      const id=el.dataset.id\n      if(d2.state.selId===id){d2.state.selId=null;d2.state.edits={}}\n      else{d2.state.selId=id;d2.state.edits={};d2.state.saved=false}\n    })\n    d2.on('[data-action=\"close\"]','click',()=>{d2.state.selId=null;d2.state.edits={}})\n    d2.on('[data-edit]','input',(e,el)=>{ d2.state.edits={...(d2.state.edits||{}),[el.dataset.edit]:el.value} })\n    d2.on('[data-edit]','change',(e,el)=>{ d2.state.edits={...(d2.state.edits||{}),[el.dataset.edit]:el.value} })\n    d2.on('[data-action=\"save\"]','click',async ()=>{\n      const ds=d2.data('pipeline'),id=d2.state.selId,edits=d2.state.edits||{}\n      if(!id||!Object.keys(edits).length)return\n      d2.state.saving=true;d2.state.saved=false\n      try{\n        const rec=ds.records().find(r=>r._id===id)\n        if(rec){const u={...rec,...edits};if(u.close_value!==undefined)u.close_value=Number(u.close_value)||0;await ds.update(u)}\n        d2.state.saved=true;d2.state.edits={}\n        setTimeout(()=>{d2.state.saved=false},3000)\n      }finally{d2.state.saving=false}\n    })\n    d2.on('.card','dragstart',(e,el)=>{e.dataTransfer.setData('text/plain',el.dataset.id);el.setAttribute('data-drag','')})\n    d2.on(document,'dragend',()=>{d2.$$('.card[data-drag]').forEach(el=>el.removeAttribute('data-drag'))})\n    d2.on('.lane','dragover',(e,el)=>{e.preventDefault();el.classList.add('dragover')})\n    d2.on('.lane','dragleave',(e,el)=>el.classList.remove('dragover'))\n    d2.on('.lane','drop',async(e,el)=>{\n      e.preventDefault();el.classList.remove('dragover')\n      const id=e.dataTransfer.getData('text/plain'),lane=el.dataset.lane\n      if(!id||!lane)return\n      const ds=d2.data('pipeline'),rec=ds.records().find(r=>r._id===id)\n      if(rec&&rec.deal_stage!==lane)await ds.update({...rec,deal_stage:lane})\n    })\n    d2.on('[data-nav]','click',(e,el)=>{d2.emit('onNavigate',el.dataset.nav)})\n    d2.on('[data-action=\"new-lead\"]','click',()=>{d2.state.newLead={};d2.state.showNew=true;d2.state.creating=false})\n    d2.on('[data-action=\"close-new\"]','click',(e,el)=>{if(el.classList.contains('modal-scrim')&&e.target!==el)return;d2.state.showNew=false;d2.state.newLead={}})\n    d2.on('[data-new]','input',(e,el)=>{d2.state.newLead={...(d2.state.newLead||{}),[el.dataset.new]:el.value}})\n    d2.on('[data-new]','change',(e,el)=>{d2.state.newLead={...(d2.state.newLead||{}),[el.dataset.new]:el.value}})\n    d2.on('[data-action=\"create-lead\"]','click',async()=>{\n      const nl=d2.state.newLead||{}\n      if(!nl.account)return\n      d2.state.creating=true\n      try{\n        const ts=new Date().toISOString().slice(0,10)\n        const rid=Math.random().toString(36).slice(2,6).toUpperCase()\n        await d2.data('pipeline').create({\n          opportunity_id:nl.opportunity_id||('OP-'+ts+'-'+rid),\n          account:nl.account||'',\n          product:nl.product||'',\n          sales_agent:nl.sales_agent||'',\n          deal_stage:nl.deal_stage||'Prospecting',\n          priority:nl.priority||'Medium',\n          close_value:Number(nl.close_value)||0,\n          close_date:nl.close_date||null,\n          notes:nl.notes||'',\n          forecast_category:'Pipeline'\n        })\n        d2.state.showNew=false\n        d2.state.newLead={}\n      }finally{d2.state.creating=false}\n    })\n  }\n}"}},"pipeline":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"pipeline"}}}}}}}}}},{"_id":"5ed9bed7b9e0891ce913e884","component":"data2-core-types@Component","params":{"package":"data2-core","component":"DataSource","renderable":{"dimensions":{"disabled":false,"component":"data2-core-types@Dimensions","params":{"width":1366,"exactWidth":false,"exactHeight":false,"height":768}}}}},{"_id":"5f472ae463c680de4ff296e9","component":"data2-core-types@Component","params":{"package":"data2-core","component":"Data2TableDataSource","extends":"data2-core@DataSource","renderable":{"dimensions":{"disabled":false,"component":"data2-core-types@Dimensions","params":{"width":1366,"exactWidth":false,"exactHeight":false,"height":768}}}}}]}},{"reference":"ExternalComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"_id":"5f060d9b1ca96def42f3c40a","displayName":"Builder AuthStrategy","component":"data2-core@AuthenticationStrategy","system":"5e3b796d6228227ca637d0f4","params":{"credentials":[{"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"status"}}],"verifier":{"component":"data2-core-types@DataSetReference","params":{"reference":"UsersDataSet"}},"sessionShared":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"password":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},"email":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},"resetPassword":{"resetEmail":{"artboard":{"params":{"preventEvaluation":true,"reference":"nR6Q9d7qdaPtZhJ28Q8Dy"},"component":"data2-core-types@ArtboardReference"}},"resetSuccessEmail":{"artboard":{"params":{"preventEvaluation":true,"reference":"yPCJBTKo8q1Mw0B_3Kpwl"},"component":"data2-core-types@ArtboardReference"}}},"session":[{"component":"data2-core-types@DataSetColumnReference","params":{"column":"name"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"status"}}],"sessionMetadata":{"params":{"actions":[{"params":{"compare":{"params":{"subject":{"params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},{"params":{"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":"active"}},"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user.status"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is active user"}]},"component":"data2-core-logical-operators@And","displayName":"is active and has _id"}},"component":"data2-core-logical-operators@Not"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check $user"},{"params":{"action":{"params":{"pattern":{"component":"data2-core-primitives@String","params":{"content":"@data2.app"}},"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user.email"}}}}},"component":"data2-core-functions@Includes","displayName":"isData2User"},"resultName":{"component":"data2-core-primitives@String","params":{"content":"is_data2_user"}}},"component":"data2-core-flow@Step"},{"params":{"action":{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.d2_app"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"management"}}]},"component":"data2-core-functions@Includes","displayName":"isData2App Exception"},"resultName":{"component":"data2-core-primitives@String","params":{"content":"is_data2_app_exception"}}},"component":"data2-core-flow@Step"},{"params":{"resultName":{"component":"data2-core-primitives@String","params":{"content":"has_access"}},"action":{"params":{"compare":{"params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_user"}}}},{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_app_exception"}}}}]},"component":"data2-core-logical-operators@Or"},"else":{"params":{"actions":[{"params":{"actions":[{"params":{"compare":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}},"component":"data2-core-logical-operators@Not"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check $metadata.system"},{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":"filter","args":[{"_id":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}}]},"component":"data2-core-types@Interaction"},{"params":{"compare":{"params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records.length"}}}}},"component":"data2-core-logical-operators@Not","displayName":"systems not found"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check system found"},{"params":{"actions":[{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":"filter","args":[{"user":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},"organization":{"component":"data2-core-types@Getter","params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"cursor.current.organization._id"}}}}}]},"component":"data2-core-types@Interaction"},{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":"filter","args":[{"user":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},"system":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}}]},"component":"data2-core-types@Interaction"}]},"component":"data2-core-flow@Parallel"}]},"component":"data2-core-flow@Series","displayName":"common setup"},{"params":{"then":{"params":{"content":true},"component":"data2-core-primitives@Boolean"},"else":{"params":{"content":false},"component":"data2-core-primitives@Boolean"},"compare":{"params":{"components":{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"mapper":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"system"}}],"body":{"params":{"expression":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.visibility"}}}},"defaultCase":{"params":{"content":false},"component":"data2-core-primitives@Boolean"},"cases":[{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-primitives@String","params":{"content":"public"}},"value":{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"owner"}},{"component":"data2-core-primitives@String","params":{"content":"billing-owner"}},{"component":"data2-core-primitives@String","params":{"content":"admin"}},{"component":"data2-core-primitives@String","params":{"content":"member"}}]},"component":"data2-core-functions@Includes","displayName":"has role with access"}]},"component":"data2-core-logical-operators@And","displayName":"has org member role with access"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is org member"},{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":"collaborator"}}},"component":"data2-core-comparison-operators@Equal","displayName":"is collaborator"}]},"component":"data2-core-logical-operators@And","displayName":"is org member and collaborator"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is collaborator"},{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"access"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"access.system._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"has system access"}]},"component":"data2-core-logical-operators@And","displayName":"is collaborator and has system access"}]},"component":"data2-core-logical-operators@Or"}}},{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-primitives@String","params":{"content":"private"}},"value":{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"owner"}},{"component":"data2-core-primitives@String","params":{"content":"admin"}}]},"component":"data2-core-functions@Includes","displayName":"is owner/admin"}]},"component":"data2-core-logical-operators@And","displayName":"has org member role with access"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is owner/admin"},{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is org member"},{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"access"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"access.system._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"has system access"}]},"component":"data2-core-logical-operators@And","displayName":"is member and has system access"}]},"component":"data2-core-logical-operators@Or","displayName":"is owner/admin or has system access"}}}]},"component":"data2-core-flow@Switch"}}}},"component":"data2-core-functions@ArrayMap"}},"component":"data2-core-logical-operators@And","displayName":"has org member for all systems in request"}},"component":"data2-core-flow@If"}]},"component":"data2-core-flow@Series"},"then":{"params":{"content":true},"component":"data2-core-primitives@Boolean"}},"component":"data2-core-flow@If"}},"component":"data2-core-flow@Step"},{"params":{"then":{"system":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}},"else":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"},"compare":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"has_access"}}}}},"component":"data2-core-flow@If"}]},"component":"data2-core-flow@Series"},"sessionExpiresIn":{"component":"data2-core-primitives@Number","params":{"content":604800}},"sessionRenewal":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"identityProviders":[{"provider":{"component":"data2-core-primitives@String","params":{"content":"GOOGLE"}},"clientId":{"component":"data2-core-primitives@String","params":{"content":"55470861603-22pvfc1t49lp8cjnbfk71s5ct9hp1q1v.apps.googleusercontent.com"}}}]},"reference":"Data2BuilderAuthentication","updatedAt":"2026-08-06T19:31:23.557Z"},{"_id":"5f060ee51ca96def42f3fbd1","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"UsersTableDataSource"}},"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":1}}}},"reference":"UsersDataSet","updatedAt":"2026-03-04T21:16:40.291Z"},{"_id":"68f938cf5fb002e33752a43d","displayName":"InternalApplicationsAuthenticationStrategy","component":"data2-core@AuthenticationStrategy","system":"5e3b796d6228227ca637d0f4","params":{"resetPassword":{"resetEmail":{"artboard":{"params":{"preventEvaluation":true},"component":"data2-core-types@ArtboardReference"}},"resetSuccessEmail":{"artboard":{"params":{"preventEvaluation":true},"component":"data2-core-types@ArtboardReference"}}},"verifier":{"disabled":false,"component":"data2-core-types@DataSetReference","params":{"reference":"InternalApplicationsVerifierDataSet"}},"password":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"secret"}},"credentials":[{"component":"data2-core-types@FieldReference","params":{"key":"application"}},{"component":"data2-core-types@FieldReference","params":{"key":"secret"}},{"component":"data2-core-types@FieldReference","params":{"key":"status"}}],"session":[{"component":"data2-core-types@FieldReference","params":{"key":"application"}},{"component":"data2-core-types@FieldReference","params":{"key":"secret"}},{"component":"data2-core-types@FieldReference","params":{"key":"status"}}]},"reference":"InternalApplicationsAuthenticationStrategy","updatedAt":"2025-10-22T20:08:54.442Z","createdAt":"2025-10-22T20:04:31.198Z"},{"component":"data2-core@DataSet","reference":"SessionsDataSet","params":{"requiresConfirmation":false,"pk":"key","datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"data2sessionsdatasource"}}}},{"reference":"UsersTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@ServerSessionsDataSource","reference":"data2sessionsdatasource","params":{}},{"_id":"5f1600b70528b92601890f75","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ServiceComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ServiceComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:20.208Z","createdAt":"2020-07-20T20:38:15.436Z"},{"_id":"5f1602190528b92601890f7d","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":40000},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ComponentInstancesTableDataSource"}},"sort":{"_id":1},"pk":"_id","autoEdit":true,"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:07.089Z","createdAt":"2020-07-20T20:44:09.350Z"},{"_id":"5f16017f0528b92601890f7a","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"clientApplicationDomain"}}},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}}},"reference":"FileComponentInstancesDataSet","updatedAt":"2023-08-03T16:08:18.193Z","createdAt":"2020-07-20T20:41:35.797Z"},{"_id":"5f1601990528b92601890f7b","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ApplicationsTableDataSource"}},"pk":"_id","autoEdit":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"params":{"column":"_id"},"component":"data2-core-types@DataSetColumnReference"}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}}},"reference":"ApplicationsDataSet","updatedAt":"2022-12-13T21:51:13.995Z","createdAt":"2020-07-20T20:42:01.657Z"},{"_id":"5f16172a0528b92601890f85","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":10000}}},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"DataComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"DataComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:12.831Z","createdAt":"2020-07-20T22:14:02.097Z"},{"_id":"60ddc1bbda3861ca65407c5a","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"clientApplicationDomain"}}},"pagination":{"size":1},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"}},"reference":"OneFileComponentInstancesDataSet","updatedAt":"2022-02-09T19:44:38.036Z","createdAt":"2020-07-20T20:41:35.797Z"},{"_id":"63ee3d38b8c9838c62fb05fb","displayName":"DriveFileComponentInstancesDataSet","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core@Drive"}}},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}}},"reference":"DriveFileComponentInstancesDataSet","updatedAt":"2025-12-04T21:58:32.367Z","createdAt":"2023-02-16T14:27:07.797Z"},{"reference":"ServiceComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"ComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a34065f23b312eaa4d38bf6","component":"data2-core-primitives@Router","system":"69fe34b018c813c5be7bddd9","displayName":"Codex CRM Router","params":{"routerType":{"component":"data2-core-primitives@String","params":{"content":"browser"}},"routes":[{"component":"data2-core-primitives@Route","params":{"path":"","name":"Pipeline","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"BK9MBkIcQUO3LFifM_5YP"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/accounts","name":"Accounts","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"eApbTzyM4F2tsz741HOYv"}}}}]},"reference":"codex-crm-router"},{"_id":"6a3427e863bd41c6b5be5add","component":"data2-core-primitives@Artboard","system":"69fe34b018c813c5be7bddd9","displayName":"Codex CRM — Accounts","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Codex CRM — Accounts"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"position":{"component":"data2-core-types@Position","params":{"x":9175,"y":-4068,"exactX":9174.86,"exactY":-4067.56}}},"reference":"eApbTzyM4F2tsz741HOYv"},{"_id":"6a34064e01215fafacaa75de","component":"data2-core-primitives@Artboard","system":"69fe34b018c813c5be7bddd9","displayName":"Codex CRM — Pipeline","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Codex CRM — Pipeline"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"position":{"component":"data2-core-types@Position","params":{"x":9218,"y":-3046,"exactX":9218.12,"exactY":-3046.09}}},"reference":"BK9MBkIcQUO3LFifM_5YP"},{"_id":"1e137cc10e1464319c6c082f","parent":"6a3427e863bd41c6b5be5add","component":"data2-core-primitives@Block","system":"69fe34b018c813c5be7bddd9","displayName":"Root","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F6FA"}}}}]}}},"index":0,"reference":"KSpXdih2Txv3l7cjodW_A"},{"_id":"ad05e2103b3c352914d065b6","parent":"6a34064e01215fafacaa75de","component":"data2-core-primitives@Block","system":"69fe34b018c813c5be7bddd9","displayName":"Root","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F6FA"}}}}]}}},"index":0,"reference":"Mt2n-aFW9yobkEMVee5y2"},{"_id":"2cd6d3f55581a3a8c6e6885a","parent":"1e137cc10e1464319c6c082f","component":"people-le-moura@crm-accounts-view","system":"69fe34b018c813c5be7bddd9","displayName":"CRM Accounts App","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}}},"accounts":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"codex-crm-accountsDataSet"}},"pipeline":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"codex-crm-sales-pipelineDataSet"}}},"reference":"uIk5KJxaAqNfQEanApGnf"},{"_id":"0717470aca8235c790ce6209","parent":"ad05e2103b3c352914d065b6","component":"people-le-moura@crm-pipeline-view","system":"69fe34b018c813c5be7bddd9","displayName":"CRM Pipeline App","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":1,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true,"exactX":0.86,"exactY":-0.01}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}},"pipeline":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"codex-crm-sales-pipelineDataSet"}}},"reference":"0oWfDlkH8qB_GienOQ8BR"}]}},{"_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":"6a34066afd2b35b0fa7cb193","displayName":"Codex CRM Comercial","reference":"Xnax2iGXE1jTcJ3uNaEkY","params":{"domain":{"component":"data2-core-primitives@String","params":{"content":"crm-codex-comercial"}},"entryPoint":{"component":"data2-core-types@ComponentInstanceReference","params":{"component":"data2-core-primitives@Router","reference":"codex-crm-router"}}},"system":"69fe34b018c813c5be7bddd9","component":"data2-core-primitives@Application"}]}},{"reference":"DataComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a33fcbc23b312eaa4d36a27","component":"data2-core@DataSet","system":"69fe34b018c813c5be7bddd9","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"codex-crm-sales-pipeline"}}},"reference":"codex-crm-sales-pipelineDataSet"},{"_id":"6a33fcb9ec12023d1cb172a6","component":"data2-core@DataSet","system":"69fe34b018c813c5be7bddd9","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"codex-crm-accounts"}}},"reference":"codex-crm-accountsDataSet"},{"_id":"6a33fcbc9f6e1c7247a05149","component":"data2-core@Data2TableDataSource","system":"69fe34b018c813c5be7bddd9","params":{"table":"codex-crm-sales-pipeline","schema":[{"component":"data2-core-types@Field","params":{"key":"opportunity_id","title":"Opportunity ID","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"sales_agent","title":"Sales Agent","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"product","title":"Product","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"account","title":"Account","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"deal_stage","title":"Deal Stage","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"engage_date","title":"Engage Date","component":"data2-core-primitives@Date"}},{"component":"data2-core-types@Field","params":{"key":"close_date","title":"Close Date","component":"data2-core-primitives@Date"}},{"component":"data2-core-types@Field","params":{"key":"close_value","title":"Close Value","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"notes","title":"Notes","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"next_step","title":"Next Step","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"priority","title":"Priority","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"forecast_category","title":"Forecast Category","component":"data2-core-primitives@String"}}]},"reference":"codex-crm-sales-pipeline"},{"_id":"6a33fcb9926d2ad82264f9b5","component":"data2-core@Data2TableDataSource","system":"69fe34b018c813c5be7bddd9","params":{"table":"codex-crm-accounts","schema":[{"component":"data2-core-types@Field","params":{"key":"account","title":"Account","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"sector","title":"Sector","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"year_established","title":"Year Established","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"revenue","title":"Revenue","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"employees","title":"Employees","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"office_location","title":"Office Location","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"subsidiary_of","title":"Subsidiary Of","component":"data2-core-primitives@String"}}]},"reference":"codex-crm-accounts"}]}},{"reference":"BundlesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}}],"processesParams":{}}}}