{"context":{"domain":"pedro-playground"},"layers":{"ApplicationLayer":{"reference":"ApplicationLayer","availableInstances":[{"reference":"ComponentsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@DataSet","reference":"SystemsDataSet","params":{"filter":{"domain":"data2"},"pagination":{"size":1},"datasource":{"component":"data2-core-types@ProcessReference","params":{"reference":"SystemsDataSource"}}}},{"reference":"ExternalComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"SystemsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"5e3b796d6228227ca637d0f4","name":"data2","domain":"data2","organization":"62292184611f480b3191c37c","visibility":"public","updatedAt":"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":"67fd353330d0f2317481370b","name":"Pedro`s Playground","domain":"pedro-playground","visibility":"public","settings":{"defaultAccessPolicy":"private"},"updatedAt":"2026-08-14T19:26:29.927Z"}]}},{"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":"6a46ae1db4b15194f566b1b1","component":"data2-core-types@Component","system":"67fd353330d0f2317481370b","params":{"extends":"data2-core-primitives@Block","component":"gnuScreen","package":"pedro-playground","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"const gnuSvg = () => `<svg viewBox=\"0 0 240 274\" xmlns=\"http://www.w3.org/2000/svg\" role=\"img\" aria-label=\"Ilustracao de um gnu\">\n  <defs>\n    <linearGradient id=\"gnuFace\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n      <stop offset=\"0\" stop-color=\"#42566a\"/>\n      <stop offset=\"1\" stop-color=\"#232f3c\"/>\n    </linearGradient>\n    <linearGradient id=\"gnuMuz\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n      <stop offset=\"0\" stop-color=\"#5a6b7d\"/>\n      <stop offset=\"1\" stop-color=\"#36434f\"/>\n    </linearGradient>\n    <linearGradient id=\"gnuHorn\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n      <stop offset=\"0\" stop-color=\"#f2e8cf\"/>\n      <stop offset=\"1\" stop-color=\"#c3ac83\"/>\n    </linearGradient>\n    <linearGradient id=\"gnuBeard\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n      <stop offset=\"0\" stop-color=\"#dfe6ee\"/>\n      <stop offset=\"1\" stop-color=\"#9aa7b5\"/>\n    </linearGradient>\n    <radialGradient id=\"gnuCheek\" cx=\"0.5\" cy=\"0.4\" r=\"0.7\">\n      <stop offset=\"0\" stop-color=\"#54677b\"/>\n      <stop offset=\"1\" stop-color=\"#54677b\" stop-opacity=\"0\"/>\n    </radialGradient>\n  </defs>\n\n  <!-- horns -->\n  <path d=\"M100,90 C 70,74 38,80 28,100 C 24,110 27,120 35,121 C 40,104 57,93 80,94 C 88,94 96,97 102,101 Z\" fill=\"url(#gnuHorn)\" stroke=\"#a68f66\" stroke-width=\"1.5\"/>\n  <path d=\"M140,90 C 170,74 202,80 212,100 C 216,110 213,120 205,121 C 200,104 183,93 160,94 C 152,94 144,97 138,101 Z\" fill=\"url(#gnuHorn)\" stroke=\"#a68f66\" stroke-width=\"1.5\"/>\n\n  <!-- ears -->\n  <path d=\"M80,96 C 66,94 56,106 58,120 C 68,114 78,106 86,100 Z\" fill=\"#2c3a48\"/>\n  <path d=\"M160,96 C 174,94 184,106 182,120 C 172,114 162,106 154,100 Z\" fill=\"#2c3a48\"/>\n\n  <!-- head -->\n  <path d=\"M120,70 C 150,70 170,94 168,128 C 167,162 157,198 142,226 C 133,242 107,242 98,226 C 83,198 73,162 72,128 C 70,94 90,70 120,70 Z\" fill=\"url(#gnuFace)\"/>\n  <ellipse cx=\"120\" cy=\"150\" rx=\"46\" ry=\"60\" fill=\"url(#gnuCheek)\"/>\n\n  <!-- boss -->\n  <ellipse cx=\"120\" cy=\"82\" rx=\"32\" ry=\"14\" fill=\"url(#gnuHorn)\" stroke=\"#a68f66\" stroke-width=\"1.5\"/>\n  <path d=\"M120,70 L120,96\" stroke=\"#a68f66\" stroke-width=\"1.5\" opacity=\".6\"/>\n\n  <!-- forelock tuft -->\n  <path d=\"M112,96 C 114,108 126,108 128,96 C 126,104 114,104 112,96 Z\" fill=\"#1c2732\"/>\n\n  <!-- eyes -->\n  <ellipse cx=\"100\" cy=\"134\" rx=\"10\" ry=\"7\" fill=\"#f4c56a\"/>\n  <ellipse cx=\"140\" cy=\"134\" rx=\"10\" ry=\"7\" fill=\"#f4c56a\"/>\n  <circle cx=\"101\" cy=\"135\" r=\"4.2\" fill=\"#161c22\"/>\n  <circle cx=\"139\" cy=\"135\" r=\"4.2\" fill=\"#161c22\"/>\n  <circle cx=\"102.6\" cy=\"133.4\" r=\"1.5\" fill=\"#fff\"/>\n  <circle cx=\"140.6\" cy=\"133.4\" r=\"1.5\" fill=\"#fff\"/>\n\n  <!-- muzzle -->\n  <path d=\"M104,192 C 99,212 106,232 120,232 C 134,232 141,212 136,192 C 127,186 113,186 104,192 Z\" fill=\"url(#gnuMuz)\"/>\n  <ellipse cx=\"112\" cy=\"214\" rx=\"3.6\" ry=\"5\" fill=\"#12181e\"/>\n  <ellipse cx=\"128\" cy=\"214\" rx=\"3.6\" ry=\"5\" fill=\"#12181e\"/>\n\n  <!-- beard -->\n  <path d=\"M104,226 C 100,240 98,252 101,258 C 104,248 108,238 112,230 Z\" fill=\"url(#gnuBeard)\"/>\n  <path d=\"M114,230 C 112,246 112,256 116,262 C 118,250 120,240 121,232 Z\" fill=\"url(#gnuBeard)\"/>\n  <path d=\"M126,230 C 128,246 128,256 124,262 C 122,250 120,240 119,232 Z\" fill=\"url(#gnuBeard)\"/>\n  <path d=\"M136,226 C 140,240 142,252 139,258 C 136,248 132,238 128,230 Z\" fill=\"url(#gnuBeard)\"/>\n</svg>`\n\nexport default {\n  css: `\n    .stage{\n      position:relative; height:100%; width:100%; display:flex; align-items:center; justify-content:center;\n      font-family:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif;\n      background:radial-gradient(120% 120% at 50% 0%, #ffdfa6 0%, #ff9e6d 28%, #d9557b 60%, #6a3d8f 100%);\n      overflow:hidden;\n    }\n    .sun{ position:absolute; top:12%; left:50%; width:220px; height:220px; transform:translate(-50%,-30%);\n      background:radial-gradient(circle, rgba(255,246,214,.95) 0%, rgba(255,214,150,.5) 45%, rgba(255,214,150,0) 70%);\n      border-radius:50%; }\n    .dust{ position:absolute; border-radius:50%; background:rgba(255,255,255,.5); animation:gnuRise linear infinite; }\n    @keyframes gnuRise{ 0%{ transform:translateY(20px); opacity:0 } 12%{ opacity:.7 } 100%{ transform:translateY(-140px); opacity:0 } }\n    .card{\n      position:relative; z-index:2; width:min(440px,86%); padding:34px 30px 30px;\n      border-radius:28px; text-align:center;\n      background:rgba(30,16,40,.28);\n      backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);\n      border:1px solid rgba(255,255,255,.28);\n      box-shadow:0 30px 70px rgba(40,10,40,.45), inset 0 1px 0 rgba(255,255,255,.35);\n    }\n    .gnu-wrap{ width:190px; height:210px; margin:0 auto 14px; animation:gnuBob 4.5s ease-in-out infinite; }\n    @keyframes gnuBob{ 0%,100%{ transform:translateY(0) } 50%{ transform:translateY(-9px) } }\n    .gnu-wrap svg{ width:100%; height:100%; display:block; overflow:visible; }\n    .title{ margin:2px 0 6px; font-size:40px; font-weight:800; letter-spacing:.14em; color:#fff;\n      text-shadow:0 2px 18px rgba(0,0,0,.35); }\n    .sub{ margin:0; font-size:14px; font-weight:500; letter-spacing:.02em; color:rgba(255,255,255,.86); line-height:1.55; }\n    .pill{ display:inline-block; margin-top:16px; padding:8px 16px; border-radius:999px;\n      font-size:12px; font-weight:600; letter-spacing:.08em; text-transform:uppercase;\n      color:#3a1d2a; background:rgba(255,255,255,.88); box-shadow:0 6px 18px rgba(0,0,0,.2); }\n  `,\n  render(d2){\n    const esc = (v) => (v + '').replace(/</g, '&lt;')\n    const title = esc(d2.param('title', 'GNU'))\n    const subtitle = esc(d2.param('subtitle', 'O gnu observa o pôr do sol na savana.'))\n    const tag = esc(d2.param('tag', 'Pedro Playground'))\n    const seeds = [[12,7,10],[28,5,13],[45,8,9],[63,6,14],[78,7,11],[90,5,12],[20,4,16],[70,4,15]]\n    let dust = ''\n    for (const [left, size, dur] of seeds){\n      dust += `<span class=\"dust\" style=\"left:${left}%; bottom:8%; width:${size}px; height:${size}px; animation-duration:${dur}s; animation-delay:${(left % 5) * 0.6}s\"></span>`\n    }\n    return `\n      <div class=\"stage\">\n        <div class=\"sun\"></div>\n        ${dust}\n        <div class=\"card\">\n          <div class=\"gnu-wrap\">${gnuSvg()}</div>\n          <h1 class=\"title\">${title}</h1>\n          <p class=\"sub\">${subtitle}</p>\n          <span class=\"pill\">${tag}</span>\n        </div>\n      </div>`\n  }\n}"}},"title":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"title"}}}},"subtitle":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"subtitle"}}}},"tag":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tag"}}}}}}}}}},{"_id":"6a46b8005b52bb5fa5327bfe","component":"data2-core-types@Component","system":"67fd353330d0f2317481370b","params":{"extends":"data2-core-primitives@Block","component":"cadastroPaciente","package":"pedro-playground","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"const num = (v) => { const n = parseFloat(String(v == null ? '' : v).replace(',', '.')); return isNaN(n) ? 0 : n }\nconst esc = (v) => String(v == null ? '' : v).replace(/</g, '&lt;').replace(/\"/g, '&quot;')\n\nconst ATIV = { sedentario: 1.2, leve: 1.375, moderado: 1.55, intenso: 1.725, muito_intenso: 1.9 }\n\nconst imcInfo = (imc) => {\n  if (!imc) return { txt: '—', cor: '#8a9a91' }\n  if (imc < 18.5) return { txt: 'Abaixo do peso', cor: '#e8a13a' }\n  if (imc < 25) return { txt: 'Peso normal', cor: '#2fb27a' }\n  if (imc < 30) return { txt: 'Sobrepeso', cor: '#e8a13a' }\n  if (imc < 35) return { txt: 'Obesidade I', cor: '#e2683f' }\n  if (imc < 40) return { txt: 'Obesidade II', cor: '#d64545' }\n  return { txt: 'Obesidade III', cor: '#b5322f' }\n}\n\nexport default {\n  css: `\n    .page{ height:100%; overflow:auto; box-sizing:border-box; padding:26px;\n      font-family:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif; color:#15352a;\n      background:linear-gradient(160deg,#eef6f1 0%,#e3f0ea 100%); }\n    .head{ max-width:1180px; margin:0 auto 20px; }\n    .head h1{ margin:0; font-size:26px; font-weight:800; letter-spacing:-.01em; }\n    .head p{ margin:4px 0 0; font-size:14px; color:#5b6b62; }\n    .grid{ max-width:1180px; margin:0 auto; display:grid; grid-template-columns:1.5fr 1fr; gap:20px; align-items:start; }\n    @media (max-width:920px){ .grid{ grid-template-columns:1fr; } }\n    .card{ background:#fff; border-radius:20px; padding:22px; box-shadow:0 14px 40px rgba(20,53,42,.08); border:1px solid #e4ede8; }\n    .card h2{ margin:0 0 16px; font-size:15px; font-weight:700; text-transform:uppercase; letter-spacing:.06em; color:#2fb27a; }\n    .fg{ display:grid; grid-template-columns:1fr 1fr; gap:14px; }\n    .field{ display:flex; flex-direction:column; gap:6px; }\n    .field.full{ grid-column:1 / -1; }\n    label{ font-size:11px; font-weight:600; color:#6b7b72; text-transform:uppercase; letter-spacing:.05em; }\n    input,select,textarea{ padding:11px 12px; border:1px solid #d9e2dc; border-radius:11px; font-size:14px;\n      font-family:inherit; background:#fbfdfc; color:#15352a; box-sizing:border-box; width:100%; }\n    input:focus,select:focus,textarea:focus{ outline:none; border-color:#2fb27a; box-shadow:0 0 0 3px rgba(47,178,122,.18); }\n    textarea{ resize:vertical; min-height:64px; }\n    .row-actions{ display:flex; align-items:center; gap:12px; margin-top:18px; }\n    .btn{ appearance:none; border:0; cursor:pointer; padding:12px 22px; border-radius:12px; font-size:14px; font-weight:700;\n      color:#fff; background:linear-gradient(135deg,#2fb27a,#1f8f66); box-shadow:0 8px 20px rgba(31,143,102,.32); }\n    .btn[disabled]{ opacity:.55; cursor:default; box-shadow:none; }\n    .msg{ font-size:13px; font-weight:600; }\n    .msg.ok{ color:#1f8f66; } .msg.err{ color:#d64545; }\n    .metrics{ display:grid; grid-template-columns:1fr 1fr; gap:12px; }\n    .stat{ background:#f3f9f5; border:1px solid #e4ede8; border-radius:14px; padding:14px; }\n    .stat .l{ font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.06em; color:#6b7b72; }\n    .stat .v{ font-size:23px; font-weight:800; margin-top:4px; }\n    .stat .u{ font-size:12px; font-weight:600; color:#8a9a91; }\n    .imcbadge{ display:inline-block; margin-top:6px; font-size:11px; font-weight:700; padding:3px 9px; border-radius:999px; color:#fff; }\n    .side h2{ color:#15352a; }\n    .plist{ display:flex; flex-direction:column; gap:10px; margin-top:4px; max-height:320px; overflow:auto; }\n    .pcard{ display:flex; align-items:center; gap:12px; padding:10px 12px; border:1px solid #e4ede8; border-radius:12px; background:#fbfdfc; }\n    .pav{ width:38px; height:38px; border-radius:50%; flex:0 0 auto; display:flex; align-items:center; justify-content:center;\n      font-weight:800; color:#fff; background:linear-gradient(135deg,#2fb27a,#1f8f66); font-size:14px; }\n    .pinfo{ flex:1; min-width:0; }\n    .pinfo .pn{ font-weight:700; font-size:14px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }\n    .pinfo .pm{ font-size:12px; color:#6b7b72; }\n    .pimc{ font-size:13px; font-weight:800; }\n    .empty{ font-size:13px; color:#8a9a91; padding:12px 0; }\n    .hint{ font-size:11px; color:#8a9a91; margin-top:14px; line-height:1.5; }\n  `,\n  render(d2){\n    const f = d2.state.form || {}\n    const alturaM = num(f.altura) / 100\n    const peso = num(f.peso)\n    const imc = (alturaM > 0 && peso > 0) ? peso / (alturaM * alturaM) : 0\n    const info = imcInfo(imc)\n    const idade = num(f.idade)\n    const sexo = f.sexo || ''\n    let tmb = 0\n    if (peso > 0 && f.altura && idade > 0 && sexo){\n      const base = 10 * peso + 6.25 * num(f.altura) - 5 * idade\n      tmb = sexo === 'feminino' ? base - 161 : base + 5\n    }\n    const fator = ATIV[f.atividade] || 0\n    const get = (tmb && fator) ? tmb * fator : 0\n    const cintura = num(f.cintura), quadril = num(f.quadril)\n    const rcq = (cintura > 0 && quadril > 0) ? cintura / quadril : 0\n\n    const opt = (v, cur, txt) => `<option value=\"${v}\" ${cur === v ? 'selected' : ''}>${txt}</option>`\n\n    const ds = d2.data()\n    const pacientes = ds && !ds.loading ? ds.records() : []\n    const lista = pacientes.length ? pacientes.map(p => {\n      const am = num(p.altura_cm) / 100, pk = num(p.peso_kg)\n      const pi = (am > 0 && pk > 0) ? (pk / (am * am)) : 0\n      const ci = imcInfo(pi)\n      const nome = esc(p.nome || 'Sem nome')\n      const ini = (nome.trim()[0] || '?').toUpperCase()\n      return `<div class=\"pcard\" data-key=\"${p._id}\">\n        <div class=\"pav\">${ini}</div>\n        <div class=\"pinfo\">\n          <div class=\"pn\">${nome}</div>\n          <div class=\"pm\">${esc(p.objetivo || 'sem objetivo')} · ${p.peso_kg ? esc(p.peso_kg) + ' kg' : '—'}</div>\n        </div>\n        <div class=\"pimc\" style=\"color:${ci.cor}\">${pi ? pi.toFixed(1) : '—'}</div>\n      </div>`\n    }).join('') : `<div class=\"empty\">Nenhum paciente cadastrado ainda.</div>`\n\n    const saving = d2.state.saving\n    const msg = d2.state.msg\n\n    return `\n    <div class=\"page\">\n      <div style=\"position:sticky;top:0;z-index:30;display:flex;align-items:center;justify-content:space-between;padding:12px 20px;margin:-26px -26px 20px;background:rgba(255,255,255,.78);backdrop-filter:blur(10px);border-bottom:1px solid #e4ede8\">\n        <span style=\"font-weight:800;font-size:15px;color:#15352a\">🥗 NutriApp</span>\n        <div style=\"display:flex;gap:8px\">\n          <span class=\"navtab\" data-go=\"/\" style=\"cursor:pointer;padding:8px 18px;border-radius:999px;font-weight:700;font-size:13px;background:#2fb27a;color:#fff\">Cadastro</span>\n          <span class=\"navtab\" data-go=\"/chat\" style=\"cursor:pointer;padding:8px 18px;border-radius:999px;font-weight:700;font-size:13px;background:#e8f5ee;color:#1f8f66\">NutriBot</span>\n        </div>\n      </div>\n      <div class=\"head\">\n        <h1>🥗 Cadastro de Pacientes</h1>\n        <p>Dados gerais e medidas corporais — IMC, TMB e gasto energético calculados ao vivo.</p>\n      </div>\n      <div class=\"grid\">\n        <div class=\"card\">\n          <h2>Dados do paciente</h2>\n          <div class=\"fg\">\n            <div class=\"field full\"><label>Nome completo *</label><input class=\"f\" data-k=\"nome\" placeholder=\"Ex: Maria Silva\"/></div>\n            <div class=\"field full\"><label>Email *</label><input class=\"f\" data-k=\"email\" type=\"email\" placeholder=\"maria@email.com\"/></div>\n            <div class=\"field\"><label>Idade</label><input class=\"f\" data-k=\"idade\" type=\"number\" min=\"0\" placeholder=\"anos\"/></div>\n            <div class=\"field\"><label>Sexo</label><select class=\"f\" data-k=\"sexo\">\n              ${opt('', sexo, 'Selecione')}${opt('feminino', sexo, 'Feminino')}${opt('masculino', sexo, 'Masculino')}${opt('outro', sexo, 'Outro')}\n            </select></div>\n            <div class=\"field\"><label>Altura (cm)</label><input class=\"f\" data-k=\"altura\" type=\"number\" min=\"0\" placeholder=\"cm\"/></div>\n            <div class=\"field\"><label>Peso (kg)</label><input class=\"f\" data-k=\"peso\" type=\"number\" min=\"0\" placeholder=\"kg\"/></div>\n            <div class=\"field\"><label>Cintura (cm)</label><input class=\"f\" data-k=\"cintura\" type=\"number\" min=\"0\" placeholder=\"cm\"/></div>\n            <div class=\"field\"><label>Quadril (cm)</label><input class=\"f\" data-k=\"quadril\" type=\"number\" min=\"0\" placeholder=\"cm\"/></div>\n            <div class=\"field\"><label>Gordura corporal (%)</label><input class=\"f\" data-k=\"gordura\" type=\"number\" min=\"0\" placeholder=\"%\"/></div>\n            <div class=\"field\"><label>Objetivo</label><select class=\"f\" data-k=\"objetivo\">\n              ${opt('', f.objetivo, 'Selecione')}${opt('perder', f.objetivo, 'Perder peso')}${opt('manter', f.objetivo, 'Manter peso')}${opt('ganhar', f.objetivo, 'Ganhar massa')}\n            </select></div>\n            <div class=\"field full\"><label>Nível de atividade</label><select class=\"f\" data-k=\"atividade\">\n              ${opt('', f.atividade, 'Selecione')}${opt('sedentario', f.atividade, 'Sedentário')}${opt('leve', f.atividade, 'Leve (1-3x/sem)')}${opt('moderado', f.atividade, 'Moderado (3-5x/sem)')}${opt('intenso', f.atividade, 'Intenso (6-7x/sem)')}${opt('muito_intenso', f.atividade, 'Muito intenso (atleta)')}\n            </select></div>\n            <div class=\"field full\"><label>Observações</label><textarea class=\"f\" data-k=\"obs\" placeholder=\"Restrições, alergias, histórico...\"></textarea></div>\n          </div>\n          <div class=\"row-actions\">\n            <button class=\"btn save\" ${saving ? 'disabled' : ''}>${saving ? 'Salvando...' : 'Salvar paciente'}</button>\n            ${msg ? `<span class=\"msg ${msg.type}\">${esc(msg.text)}</span>` : ''}\n          </div>\n        </div>\n\n        <div class=\"card side\">\n          <h2>Métricas ao vivo</h2>\n          <div class=\"metrics\">\n            <div class=\"stat\">\n              <div class=\"l\">IMC</div>\n              <div class=\"v\" style=\"color:${info.cor}\">${imc ? imc.toFixed(1) : '—'}</div>\n              <span class=\"imcbadge\" style=\"background:${info.cor}\">${info.txt}</span>\n            </div>\n            <div class=\"stat\">\n              <div class=\"l\">TMB</div>\n              <div class=\"v\">${tmb ? Math.round(tmb) : '—'}</div>\n              <div class=\"u\">kcal/dia em repouso</div>\n            </div>\n            <div class=\"stat\">\n              <div class=\"l\">Gasto energético</div>\n              <div class=\"v\">${get ? Math.round(get) : '—'}</div>\n              <div class=\"u\">kcal/dia (TMB × atividade)</div>\n            </div>\n            <div class=\"stat\">\n              <div class=\"l\">Relação cintura/quadril</div>\n              <div class=\"v\">${rcq ? rcq.toFixed(2) : '—'}</div>\n              <div class=\"u\">RCQ</div>\n            </div>\n          </div>\n          <div class=\"hint\">TMB via fórmula de Mifflin-St Jeor. Valores são estimativas e não substituem avaliação clínica.</div>\n          <h2 style=\"margin-top:22px\">Pacientes (${pacientes.length})</h2>\n          <div class=\"plist\">${lista}</div>\n        </div>\n      </div>\n    </div>`\n  },\n  mounted(d2){\n    d2.on('.navtab', 'click', (e, el) => { const r = d2.router('nutriRouter'); if (r && r.goTo) r.goTo(el.dataset.go) })\n    const setField = (k, v) => { d2.state.form = { ...(d2.state.form || {}), [k]: v }; if (d2.state.msg) d2.state.msg = null }\n    d2.on('.f', 'input', (e, el) => setField(el.dataset.k, el.value))\n    d2.on('.f', 'change', (e, el) => setField(el.dataset.k, el.value))\n\n    d2.on('.save', 'click', async () => {\n      const f = d2.state.form || {}\n      if (!f.nome || !f.nome.trim()){ d2.state.msg = { type: 'err', text: 'Informe o nome.' }; return }\n      if (!f.email || !f.email.trim()){ d2.state.msg = { type: 'err', text: 'Informe o email.' }; return }\n      d2.state.saving = true\n      const rec = {\n        nome: f.nome.trim(), email: f.email.trim(),\n        idade: num(f.idade), sexo: f.sexo || '',\n        altura_cm: num(f.altura), peso_kg: num(f.peso),\n        cintura_cm: num(f.cintura), quadril_cm: num(f.quadril),\n        gordura_pct: num(f.gordura), objetivo: f.objetivo || '',\n        nivel_atividade: f.atividade || '', observacoes: f.obs || ''\n      }\n      try {\n        await d2.data().create(rec)\n        d2.state.form = {}\n        d2.$$('.f').forEach(el => { el.value = '' })\n        d2.state.msg = { type: 'ok', text: 'Paciente salvo com sucesso!' }\n      } catch (err){\n        d2.state.msg = { type: 'err', text: 'Erro ao salvar. Tente novamente.' }\n        d2.log('cadastro erro', err)\n      } finally {\n        d2.state.saving = false\n      }\n    })\n  }\n}"}},"dataset":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"dataset"}}}}}}}}}},{"_id":"6a46b86920611373d1fc8df2","component":"data2-core-types@Component","system":"67fd353330d0f2317481370b","params":{"extends":"data2-core-primitives@Block","component":"chatbotNutri","package":"pedro-playground","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"const esc = (v) => String(v == null ? '' : v).replace(/</g, '&lt;').replace(/\"/g, '&quot;')\nconst r0 = (n) => (n == null || isNaN(n)) ? 0 : Math.round(n)\nconst r1 = (n) => (n == null || isNaN(n)) ? 0 : Math.round(n * 10) / 10\n\n// Pull the best product with a kcal value out of an Open Food Facts rush payload\nconst pickOff = (payload) => {\n  const p = (payload && (payload.data || payload)) || {}\n  const products = p.products || []\n  for (const prod of products){\n    const n = prod.nutriments || {}\n    const kcal = n['energy-kcal_100g']\n    if (kcal != null && !isNaN(kcal)){\n      return {\n        name: prod.product_name || prod.brands || 'produto',\n        brand: prod.brands || '',\n        kcal100: r0(kcal),\n        prot100: r1(n['proteins_100g']),\n        carb100: r1(n['carbohydrates_100g']),\n        fat100: r1(n['fat_100g'])\n      }\n    }\n  }\n  return null\n}\n\nconst MEALS = [\n  ['Café da manhã', 'cafe'], ['Lanche da manhã', 'lanche_manha'], ['Almoço', 'almoco'],\n  ['Lanche da tarde', 'lanche_tarde'], ['Jantar', 'jantar'], ['Ceia', 'ceia']\n]\n\nexport default {\n  css: `\n    .page{ height:100%; overflow:auto; box-sizing:border-box; padding:26px;\n      font-family:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif; color:#15352a;\n      background:linear-gradient(160deg,#eef6f1 0%,#dcece4 100%); }\n    .wrap{ max-width:860px; margin:0 auto; }\n    .hero{ display:flex; align-items:center; gap:14px; margin-bottom:20px; }\n    .hero .bot{ width:52px; height:52px; border-radius:16px; display:flex; align-items:center; justify-content:center;\n      font-size:28px; background:linear-gradient(135deg,#2fb27a,#1f8f66); box-shadow:0 10px 24px rgba(31,143,102,.3); }\n    .hero h1{ margin:0; font-size:24px; font-weight:800; }\n    .hero p{ margin:2px 0 0; font-size:13px; color:#5b6b62; }\n    .card{ background:#fff; border-radius:20px; padding:20px; box-shadow:0 14px 40px rgba(20,53,42,.08); border:1px solid #e4ede8; }\n    .form{ display:grid; grid-template-columns:1.3fr .8fr auto; gap:12px; align-items:end; }\n    @media (max-width:720px){ .form{ grid-template-columns:1fr; } }\n    .field{ display:flex; flex-direction:column; gap:6px; }\n    label{ font-size:11px; font-weight:700; color:#6b7b72; text-transform:uppercase; letter-spacing:.05em; }\n    input,select{ padding:11px 12px; border:1px solid #d9e2dc; border-radius:11px; font-size:14px; font-family:inherit;\n      background:#fbfdfc; color:#15352a; box-sizing:border-box; width:100%; }\n    input:focus,select:focus{ outline:none; border-color:#2fb27a; box-shadow:0 0 0 3px rgba(47,178,122,.18); }\n    .prefs{ margin-top:12px; }\n    .btn{ appearance:none; border:0; cursor:pointer; padding:12px 20px; border-radius:12px; font-size:14px; font-weight:700;\n      color:#fff; white-space:nowrap; background:linear-gradient(135deg,#2fb27a,#1f8f66); box-shadow:0 8px 20px rgba(31,143,102,.32); }\n    .btn[disabled]{ opacity:.55; cursor:default; box-shadow:none; }\n    .chips{ display:flex; gap:8px; margin-top:12px; flex-wrap:wrap; }\n    .chip{ cursor:pointer; font-size:12px; font-weight:600; padding:6px 12px; border-radius:999px; border:1px solid #cfe0d7;\n      background:#f3f9f5; color:#1f8f66; }\n    .err{ margin-top:14px; color:#d64545; font-weight:600; font-size:13px; }\n    .result{ margin-top:20px; }\n    .mealhead{ display:flex; align-items:baseline; justify-content:space-between; gap:12px; margin-bottom:4px; }\n    .mealhead h2{ margin:0; font-size:19px; font-weight:800; }\n    .mealhead .meta{ font-size:13px; font-weight:700; color:#2fb27a; }\n    .resumo{ font-size:13px; color:#5b6b62; margin:0 0 16px; line-height:1.5; }\n    .item{ padding:14px; border:1px solid #e4ede8; border-radius:14px; margin-bottom:10px; background:#fbfdfc; }\n    .item .top{ display:flex; align-items:center; justify-content:space-between; gap:10px; }\n    .item .nm{ font-weight:700; font-size:15px; }\n    .item .gr{ font-size:12px; font-weight:700; color:#1f8f66; background:#e8f5ee; padding:3px 10px; border-radius:999px; }\n    .macros{ display:flex; gap:14px; margin-top:8px; flex-wrap:wrap; }\n    .macro{ font-size:12px; color:#5b6b62; } .macro b{ color:#15352a; font-size:13px; }\n    .why{ font-size:12px; color:#8a9a91; margin-top:6px; font-style:italic; }\n    .off{ margin-top:10px; padding:8px 10px; border-radius:10px; background:#f1f7f9; border:1px solid #dcebef; font-size:12px; color:#3a6b78; display:flex; gap:8px; align-items:center; }\n    .off .tag{ font-weight:700; color:#2b8fa8; }\n    .off.none{ color:#a0aeb4; background:#f6f8f9; border-color:#e6ebed; }\n    .totals{ margin-top:16px; padding:16px; border-radius:14px; background:linear-gradient(135deg,#eafaf2,#e3f3ea); border:1px solid #cfe7da; }\n    .totals .row{ display:flex; align-items:baseline; justify-content:space-between; }\n    .totals .big{ font-size:22px; font-weight:800; color:#15352a; }\n    .totals .lbl{ font-size:12px; font-weight:700; text-transform:uppercase; letter-spacing:.05em; color:#6b7b72; }\n    .bar{ height:8px; border-radius:999px; background:#d3e7dc; margin-top:10px; overflow:hidden; }\n    .bar > i{ display:block; height:100%; background:linear-gradient(90deg,#2fb27a,#1f8f66); }\n    .tmac{ display:flex; gap:16px; margin-top:10px; }\n    .tmac div{ font-size:12px; color:#5b6b62; } .tmac b{ color:#15352a; }\n    .loading{ margin-top:20px; font-size:14px; color:#1f8f66; font-weight:600; display:flex; align-items:center; gap:8px; }\n    .dot{ width:8px; height:8px; border-radius:50%; background:#2fb27a; animation:pulse 1s infinite; }\n    @keyframes pulse{ 0%,100%{ opacity:.3 } 50%{ opacity:1 } }\n    .placeholder{ margin-top:20px; text-align:center; color:#9aa9a1; font-size:14px; padding:30px 0; }\n  `,\n  render(d2){\n    const busy = d2.state.busy\n    const meal = d2.state.meal\n    const err = d2.state.err\n    const offLoading = d2.state.offLoading\n\n    const mealOpts = MEALS.map(([t, v]) => `<option value=\"${v}\">${t}</option>`).join('')\n\n    let result = ''\n    if (err){\n      result = `<div class=\"err\">⚠️ ${esc(err)}</div>`\n    } else if (busy && !meal){\n      result = `<div class=\"loading\"><span class=\"dot\"></span> NutriBot está montando a refeição...</div>`\n    } else if (meal){\n      const itens = meal.itens || []\n      const totK = itens.reduce((s, it) => s + (Number(it.kcal) || 0), 0)\n      const totP = itens.reduce((s, it) => s + (Number(it.proteina_g) || 0), 0)\n      const totC = itens.reduce((s, it) => s + (Number(it.carbo_g) || 0), 0)\n      const totG = itens.reduce((s, it) => s + (Number(it.gordura_g) || 0), 0)\n      const meta = Number(meal.meta_kcal) || 0\n      const pct = meta > 0 ? Math.min(100, Math.round(totK / meta * 100)) : 0\n\n      const rows = itens.map((it, i) => {\n        let off = ''\n        if (it.offDone){\n          off = it.off\n            ? `<div class=\"off\"><span class=\"tag\">Open Food Facts</span> ${esc(it.off.name)} — <b>${it.off.kcal100} kcal</b>/100g · P ${it.off.prot100}g · C ${it.off.carb100}g · G ${it.off.fat100}g</div>`\n            : `<div class=\"off none\">Sem correspondência no Open Food Facts para “${esc(it.termo_busca)}”.</div>`\n        } else if (offLoading){\n          off = `<div class=\"off none\">Consultando Open Food Facts…</div>`\n        }\n        return `<div class=\"item\" data-key=\"${i}\">\n          <div class=\"top\"><span class=\"nm\">${esc(it.alimento)}</span><span class=\"gr\">${r0(it.gramas)} g</span></div>\n          <div class=\"macros\">\n            <span class=\"macro\"><b>${r0(it.kcal)}</b> kcal</span>\n            <span class=\"macro\">Proteína <b>${r1(it.proteina_g)} g</b></span>\n            <span class=\"macro\">Carbo <b>${r1(it.carbo_g)} g</b></span>\n            <span class=\"macro\">Gordura <b>${r1(it.gordura_g)} g</b></span>\n          </div>\n          ${it.motivo ? `<div class=\"why\">${esc(it.motivo)}</div>` : ''}\n          ${off}\n        </div>`\n      }).join('')\n\n      result = `\n        <div class=\"mealhead\"><h2>🍽️ ${esc(meal.refeicao || 'Refeição')}</h2><span class=\"meta\">meta ${r0(meta)} kcal</span></div>\n        ${meal.resumo ? `<p class=\"resumo\">${esc(meal.resumo)}</p>` : ''}\n        ${rows}\n        <div class=\"totals\">\n          <div class=\"row\"><span class=\"lbl\">Total da refeição</span><span class=\"big\">${r0(totK)} kcal</span></div>\n          <div class=\"bar\"><i style=\"width:${pct}%\"></i></div>\n          <div class=\"tmac\">\n            <div>Proteína <b>${r1(totP)} g</b></div>\n            <div>Carboidrato <b>${r1(totC)} g</b></div>\n            <div>Gordura <b>${r1(totG)} g</b></div>\n          </div>\n        </div>`\n    } else {\n      result = `<div class=\"placeholder\">Escolha a refeição e a meta de calorias, e o NutriBot monta o cardápio pra você. 🥑</div>`\n    }\n\n    return `\n    <div class=\"page\">\n      <div style=\"position:sticky;top:0;z-index:30;display:flex;align-items:center;justify-content:space-between;padding:12px 20px;margin:-26px -26px 20px;background:rgba(255,255,255,.78);backdrop-filter:blur(10px);border-bottom:1px solid #e4ede8\">\n        <span style=\"font-weight:800;font-size:15px;color:#15352a\">🥗 NutriApp</span>\n        <div style=\"display:flex;gap:8px\">\n          <span class=\"navtab\" data-go=\"/\" style=\"cursor:pointer;padding:8px 18px;border-radius:999px;font-weight:700;font-size:13px;background:#e8f5ee;color:#1f8f66\">Cadastro</span>\n          <span class=\"navtab\" data-go=\"/chat\" style=\"cursor:pointer;padding:8px 18px;border-radius:999px;font-weight:700;font-size:13px;background:#2fb27a;color:#fff\">NutriBot</span>\n        </div>\n      </div>\n      <div class=\"wrap\">\n      <div class=\"hero\">\n        <div class=\"bot\">🥑</div>\n        <div><h1>NutriBot</h1><p>Monta refeições por meta de calorias e consulta o Open Food Facts.</p></div>\n      </div>\n      <div class=\"card\">\n        <div class=\"form\">\n          <div class=\"field\"><label>Refeição</label><select class=\"meal\">${mealOpts}</select></div>\n          <div class=\"field\"><label>Meta de calorias (kcal)</label><input class=\"kcal\" type=\"number\" min=\"50\" step=\"50\" value=\"500\"/></div>\n          <button class=\"btn go\" ${busy ? 'disabled' : ''}>${busy ? 'Montando...' : 'Montar refeição'}</button>\n        </div>\n        <div class=\"prefs field\"><label>Preferências / restrições (opcional)</label><input class=\"pref\" placeholder=\"Ex: vegetariano, sem lactose, low carb...\"/></div>\n        <div class=\"chips\">\n          <span class=\"chip\" data-kcal=\"300\">300 kcal</span>\n          <span class=\"chip\" data-kcal=\"500\">500 kcal</span>\n          <span class=\"chip\" data-kcal=\"700\">700 kcal</span>\n          <span class=\"chip\" data-kcal=\"1000\">1000 kcal</span>\n        </div>\n      </div>\n      <div class=\"result\">${result}</div>\n    </div></div>`\n  },\n  mounted(d2){\n    d2.on('.navtab', 'click', (e, el) => { const r = d2.router('nutriRouter'); if (r && r.goTo) r.goTo(el.dataset.go) })\n    d2.on('.chip', 'click', (e, el) => { const k = d2.$('.kcal'); if (k) k.value = el.dataset.kcal })\n\n    d2.on('.go', 'click', async () => {\n      if (d2.state.busy) return\n      const meal = (d2.$('.meal') || {}).value || 'refeição'\n      const mealLabel = (MEALS.find(m => m[1] === meal) || [meal])[0]\n      const kcal = parseInt((d2.$('.kcal') || {}).value, 10) || 500\n      const pref = ((d2.$('.pref') || {}).value || '').trim()\n\n      d2.state.err = null\n      d2.state.meal = null\n      d2.state.offLoading = false\n      d2.state.busy = true\n\n      const prompt = `Refeição: ${mealLabel}. Meta de calorias: ${kcal} kcal.` +\n        (pref ? ` Preferências/restrições: ${pref}.` : '') +\n        ' Componha a refeição respeitando o formato JSON definido.'\n\n      try {\n        const raw = await d2.assistant(d2.params.assistant).ask(prompt, { json: true })\n        const parsed = (typeof raw === 'string') ? JSON.parse(raw) : raw\n        if (!parsed || !Array.isArray(parsed.itens)) throw new Error('resposta inválida')\n        if (!parsed.meta_kcal) parsed.meta_kcal = kcal\n        parsed.itens = parsed.itens.map(it => ({ ...it, offDone: false }))\n        d2.state.meal = parsed\n        d2.state.busy = false\n\n        // Enriquecer com dados reais do Open Food Facts (em paralelo)\n        d2.state.offLoading = true\n        const offs = await Promise.all(parsed.itens.map(it =>\n          d2.rush(d2.params.rush).invoke({ term: it.termo_busca || it.alimento })\n            .then(pickOff).catch(() => null)\n        ))\n        const enriched = { ...parsed, itens: parsed.itens.map((it, i) => ({ ...it, off: offs[i], offDone: true })) }\n        d2.state.offLoading = false\n        d2.state.meal = enriched\n      } catch (err){\n        d2.state.busy = false\n        d2.state.offLoading = false\n        d2.state.err = 'Não consegui montar a refeição agora. Tente novamente em instantes.'\n        d2.log('nutriBot erro', err)\n      }\n    })\n  }\n}"}},"assistant":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"assistant"}}}},"rush":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"rush"}}}}}}}}}},{"_id":"6a553e04d2b3f7e98e86579e","component":"data2-core-types@Component","system":"67fd353330d0f2317481370b","params":{"extends":"data2-core-primitives@Block","component":"Qaeog0YZCEvEApcRHuoa_","package":"pedro-playground","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"function escapeHtml(s) {\n  return String(s == null ? '' : s)\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n}\n\nfunction escapeRegex(s) {\n  return String(s).replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\nfunction hasDataset(d2) {\n  return !!d2.params.dataset\n}\n\nfunction getIdField(d2) {\n  return d2.param('idField', '_id')\n}\n\nfunction getItems(d2) {\n  if (hasDataset(d2)) {\n    const ds = d2.data()\n    return ds ? ds.records() : []\n  }\n  return d2.state.localItems || []\n}\n\nfunction isDatasetLoading(d2) {\n  if (!hasDataset(d2)) return false\n  const ds = d2.data()\n  return !!(ds && ds.loading)\n}\n\nfunction buildDefaultValues(d2) {\n  const fields = d2.param('fields', []) || []\n  const values = {}\n  fields.forEach((f) => {\n    if (f.defaultValue !== undefined) values[f.field] = f.defaultValue\n    else values[f.field] = f.type === 'boolean' ? false : ''\n  })\n  return values\n}\n\nasync function saveItem(d2, values, editingId) {\n  const idField = getIdField(d2)\n  if (hasDataset(d2)) {\n    const ds = d2.data()\n    if (editingId) await ds.update({ ...values, [idField]: editingId })\n    else await ds.create(values)\n  } else {\n    const items = [...(d2.state.localItems || [])]\n    if (editingId) {\n      const idx = items.findIndex((it) => String(it[idField]) === String(editingId))\n      if (idx >= 0) items[idx] = { ...items[idx], ...values }\n    } else {\n      const newId = 'local-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 8)\n      items.push({ ...values, [idField]: newId })\n    }\n    d2.state.localItems = items\n  }\n}\n\nasync function removeItem(d2, id) {\n  const idField = getIdField(d2)\n  if (hasDataset(d2)) {\n    await d2.data().remove(id)\n  } else {\n    d2.state.localItems = (d2.state.localItems || []).filter((it) => String(it[idField]) !== String(id))\n  }\n}\n\nfunction validateValue(fieldDef, value) {\n  const v = fieldDef.validation || {}\n  const label = fieldDef.label || fieldDef.field\n  const isEmpty = value === undefined || value === null || value === ''\n  if (fieldDef.required && isEmpty) {\n    return [v.requiredMessage || (label + ' é obrigatório')]\n  }\n  if (isEmpty) return []\n  const errs = []\n  if (v.pattern) {\n    try {\n      const re = new RegExp(v.pattern)\n      if (!re.test(String(value))) errs.push(v.message || (label + ' em formato inválido'))\n    } catch (e) {}\n  }\n  if (fieldDef.type === 'number') {\n    const num = Number(value)\n    if (Number.isNaN(num)) {\n      errs.push(v.message || (label + ' deve ser numérico'))\n    } else {\n      if (v.min !== undefined && num < v.min) errs.push(v.message || (label + ' deve ser maior ou igual a ' + v.min))\n      if (v.max !== undefined && num > v.max) errs.push(v.message || (label + ' deve ser menor ou igual a ' + v.max))\n    }\n  }\n  if (v.minLength !== undefined && String(value).length < v.minLength) {\n    errs.push(v.message || (label + ' deve ter ao menos ' + v.minLength + ' caracteres'))\n  }\n  if (v.maxLength !== undefined && String(value).length > v.maxLength) {\n    errs.push(v.message || (label + ' deve ter no máximo ' + v.maxLength + ' caracteres'))\n  }\n  return errs\n}\n\nfunction getStaticOptions(fieldDef) {\n  const src = fieldDef.optionsSource || {}\n  return src.options || []\n}\n\nfunction filterOptionsBySearch(options, query, searchCfg) {\n  if (!query) return options\n  const mode = (searchCfg && searchCfg.mode) || 'incremental'\n  if (mode === 'regex' && searchCfg && searchCfg.pattern) {\n    let re\n    try {\n      re = new RegExp(searchCfg.pattern.split('{q}').join(escapeRegex(query)), 'i')\n    } catch (e) {\n      re = new RegExp(escapeRegex(query), 'i')\n    }\n    return options.filter((o) => re.test(String(o.label)))\n  }\n  const q = String(query).toLowerCase()\n  return options.filter((o) => String(o.label).toLowerCase().includes(q))\n}\n\nfunction getDynamicOptions(d2, fieldDef, query) {\n  const src = fieldDef.optionsSource || {}\n  const ds = d2.data(src.datasetRef)\n  if (!ds) return { options: [], loading: false }\n  const labelField = src.labelField || 'label'\n  const valueField = src.valueField || 'value'\n  const searchCfg = src.search || {}\n  const mode = searchCfg.mode || 'incremental'\n\n  if (mode === 'incremental') {\n    ds.search(query || '')\n    const options = ds.records().map((r) => ({ label: r[labelField], value: r[valueField] }))\n    return { options: options, loading: !!ds.fetching }\n  }\n\n  const cache = d2.state.optionsCache || {}\n  let all = cache[fieldDef.field]\n  if (!all) {\n    ds.loadAll().then((recs) => {\n      d2.state.optionsCache = { ...(d2.state.optionsCache || {}), [fieldDef.field]: recs }\n    })\n    all = ds.records()\n  }\n  const options = all.map((r) => ({ label: r[labelField], value: r[valueField] }))\n  if (mode === 'regex') return { options: filterOptionsBySearch(options, query, searchCfg), loading: false }\n  return { options: options, loading: false }\n}\n\nfunction getOptions(d2, fieldDef, query) {\n  const src = fieldDef.optionsSource || {}\n  if (src.mode === 'dynamic') return getDynamicOptions(d2, fieldDef, query)\n  const options = getStaticOptions(fieldDef)\n  const searchCfg = src.search || { mode: 'incremental' }\n  if (searchCfg.mode === 'none') return { options: options, loading: false }\n  return { options: filterOptionsBySearch(options, query, searchCfg), loading: false }\n}\n\nfunction resolveSelectLabel(d2, fieldDef, value) {\n  if (value === undefined || value === null || value === '') return ''\n  const src = fieldDef.optionsSource || {}\n  const labelField = src.labelField || 'label'\n  const valueField = src.valueField || 'value'\n  if (src.mode === 'dynamic' && src.datasetRef) {\n    const ds = d2.data(src.datasetRef)\n    const cache = d2.state.optionsCache || {}\n    const all = cache[fieldDef.field] || (ds ? ds.records() : [])\n    const found = all.find((r) => String(r[valueField]) === String(value))\n    return found ? found[labelField] : String(value)\n  }\n  const opts = getStaticOptions(fieldDef)\n  const found = opts.find((o) => String(o.value) === String(value))\n  return found ? found.label : String(value)\n}\n\nfunction renderCellValue(d2, f, value) {\n  if (value === undefined || value === null || value === '') return '<span class=\"ol-muted\">—</span>'\n  if (f.type === 'select') return escapeHtml(resolveSelectLabel(d2, f, value))\n  if (f.type === 'boolean') return value ? '<span class=\"ol-bool ol-bool-true\">Sim</span>' : '<span class=\"ol-bool ol-bool-false\">Não</span>'\n  if (f.type === 'date') {\n    try { return escapeHtml(d2.fmt.date(value)) } catch (e) { return escapeHtml(value) }\n  }\n  if (f.type === 'number') return escapeHtml(d2.fmt.number(Number(value)))\n  return escapeHtml(value)\n}\n\nfunction renderRow(d2, fields, it) {\n  const idField = getIdField(d2)\n  const id = it[idField]\n  const cells = fields.map((f) => '<td>' + renderCellValue(d2, f, it[f.field]) + '</td>').join('')\n  return '<tr data-key=\"' + escapeHtml(String(id)) + '\">' + cells +\n    '<td class=\"ol-actions\"><button class=\"ol-edit\" data-id=\"' + escapeHtml(String(id)) + '\">Editar</button>' +\n    '<button class=\"ol-del\" data-id=\"' + escapeHtml(String(id)) + '\">Excluir</button></td></tr>'\n}\n\nfunction renderSelectInput(d2, f, val) {\n  const key = f.field\n  const storedQuery = d2.state.query ? d2.state.query[key] : undefined\n  const displayValue = storedQuery !== undefined ? storedQuery : resolveSelectLabel(d2, f, val)\n  const open = d2.state.openSelect === key\n  let optionsHtml = ''\n  if (open) {\n    const q = storedQuery !== undefined ? storedQuery : ''\n    const result = getOptions(d2, f, q)\n    if (result.loading) {\n      optionsHtml = '<div class=\"ol-dd-loading\">Carregando...</div>'\n    } else if (result.options.length) {\n      optionsHtml = result.options.map((o) =>\n        '<div class=\"ol-dd-item\" data-field=\"' + key + '\" data-value=\"' + escapeHtml(String(o.value)) + '\" data-label=\"' + escapeHtml(String(o.label)) + '\">' + escapeHtml(String(o.label)) + '</div>'\n      ).join('')\n    } else {\n      optionsHtml = '<div class=\"ol-dd-empty\">Nenhuma opção encontrada</div>'\n    }\n  }\n  return '<div class=\"ol-select\">' +\n    '<input type=\"text\" class=\"ol-input ol-select-input\" data-field=\"' + key + '\" value=\"' + escapeHtml(displayValue) + '\" placeholder=\"Selecionar / buscar...\" autocomplete=\"off\"/>' +\n    (open ? '<div class=\"ol-dropdown\">' + optionsHtml + '</div>' : '') +\n    '</div>'\n}\n\nfunction renderFormField(d2, f) {\n  const values = d2.state.values || {}\n  const errors = d2.state.errors || {}\n  const val = values[f.field]\n  const err = errors[f.field]\n  const reqMark = f.required ? '<span class=\"ol-req\">*</span>' : ''\n  let inputHtml = ''\n  if (f.type === 'select') {\n    inputHtml = renderSelectInput(d2, f, val)\n  } else if (f.type === 'boolean') {\n    inputHtml = '<input type=\"checkbox\" class=\"ol-checkbox\" data-field=\"' + f.field + '\" ' + (val ? 'checked' : '') + '/>'\n  } else if (f.type === 'number') {\n    inputHtml = '<input type=\"number\" class=\"ol-input\" data-field=\"' + f.field + '\" value=\"' + (val === undefined || val === null ? '' : escapeHtml(val)) + '\"/>'\n  } else if (f.type === 'date') {\n    inputHtml = '<input type=\"date\" class=\"ol-input\" data-field=\"' + f.field + '\" value=\"' + (val ? escapeHtml(val) : '') + '\"/>'\n  } else {\n    inputHtml = '<input type=\"text\" class=\"ol-input\" data-field=\"' + f.field + '\" value=\"' + (val === undefined || val === null ? '' : escapeHtml(val)) + '\"/>'\n  }\n  return '<div class=\"ol-field' + (f.type === 'boolean' ? ' ol-field-inline' : '') + '\">' +\n    '<label class=\"ol-label\">' + escapeHtml(f.label || f.field) + reqMark + '</label>' +\n    inputHtml +\n    (err ? '<div class=\"ol-error\">' + escapeHtml(err) + '</div>' : '') +\n    '</div>'\n}\n\nfunction renderForm(d2, fields) {\n  const editing = !!d2.state.editingId\n  return '<div class=\"ol-form\">' +\n    '<div class=\"ol-form-title\">' + (editing ? 'Editar item' : 'Novo item') + '</div>' +\n    '<div class=\"ol-form-grid\">' + fields.map((f) => renderFormField(d2, f)).join('') + '</div>' +\n    '<div class=\"ol-form-actions\"><button class=\"ol-cancel\">Cancelar</button><button class=\"ol-save\">Salvar</button></div>' +\n    '</div>'\n}\n\nexport default {\n  css: `\n    .ol { display:flex; flex-direction:column; height:100%; font:14px/1.4 -apple-system,Segoe UI,sans-serif; background:#fff; box-sizing:border-box; }\n    .ol-head { display:flex; align-items:center; justify-content:space-between; padding:14px 16px; border-bottom:1px solid #ececf1; }\n    .ol-title { margin:0; font-size:16px; font-weight:700; color:#161618; }\n    .ol-add { background:#7c4dff; color:#fff; border:0; border-radius:8px; padding:8px 14px; font-weight:600; cursor:pointer; }\n    .ol-add:hover { background:#6c3ce8; }\n    .ol-table-wrap { flex:1; overflow:auto; }\n    .ol-table { width:100%; border-collapse:collapse; }\n    .ol-table th { position:sticky; top:0; background:#fafafb; text-align:left; font-size:12px; text-transform:uppercase; letter-spacing:.03em; color:#8a8a97; padding:10px 14px; border-bottom:1px solid #ececf1; }\n    .ol-table td { padding:10px 14px; border-bottom:1px solid #f2f2f5; color:#33333d; font-size:13px; }\n    .ol-actions-col { width:150px; }\n    .ol-actions button { border:0; background:none; cursor:pointer; font-size:12px; font-weight:600; padding:4px 8px; border-radius:6px; }\n    .ol-edit { color:#7c4dff; }\n    .ol-edit:hover { background:#f1ecff; }\n    .ol-del { color:#e5484d; }\n    .ol-del:hover { background:#fdecec; }\n    .ol-empty { text-align:center; color:#9a9aa5; padding:24px; }\n    .ol-muted { color:#c2c2c9; }\n    .ol-form { padding:16px; background:#f8f8fb; border-bottom:1px solid #ececf1; }\n    .ol-form-title { font-weight:700; margin-bottom:10px; color:#161618; }\n    .ol-form-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(200px,1fr)); gap:12px; }\n    .ol-field { display:flex; flex-direction:column; gap:4px; position:relative; }\n    .ol-field-inline { flex-direction:row; align-items:center; gap:8px; }\n    .ol-label { font-size:12px; font-weight:600; color:#5c5c66; }\n    .ol-req { color:#e5484d; margin-left:2px; }\n    .ol-input { padding:7px 9px; border:1px solid #d9d9e2; border-radius:7px; font-size:13px; font-family:inherit; box-sizing:border-box; width:100%; }\n    .ol-input:focus { outline:2px solid #7c4dff33; border-color:#7c4dff; }\n    .ol-error { color:#e5484d; font-size:11px; }\n    .ol-form-actions { display:flex; justify-content:flex-end; gap:8px; margin-top:14px; }\n    .ol-cancel { background:#fff; border:1px solid #d9d9e2; border-radius:8px; padding:8px 14px; cursor:pointer; font-weight:600; color:#5c5c66; }\n    .ol-save { background:#1c9a5b; color:#fff; border:0; border-radius:8px; padding:8px 16px; cursor:pointer; font-weight:600; }\n    .ol-save:hover { background:#158049; }\n    .ol-select { position:relative; }\n    .ol-dropdown { position:absolute; top:calc(100% + 4px); left:0; right:0; z-index:20; background:#fff; border:1px solid #e2e2ea; border-radius:8px; box-shadow:0 8px 24px rgba(20,20,30,.12); max-height:200px; overflow:auto; }\n    .ol-dd-item { padding:8px 10px; font-size:13px; cursor:pointer; }\n    .ol-dd-item:hover { background:#f1ecff; }\n    .ol-dd-loading, .ol-dd-empty { padding:8px 10px; font-size:12px; color:#9a9aa5; }\n    .ol-bool { display:inline-block; padding:2px 8px; border-radius:999px; font-size:11px; font-weight:700; }\n    .ol-bool-true { background:#e6f7ee; color:#1c9a5b; }\n    .ol-bool-false { background:#fdecec; color:#e5484d; }\n  `,\n\n  render(d2) {\n    const fields = d2.param('fields', []) || []\n    const heading = d2.param('heading', 'Lista de Objetos')\n    const addLabel = d2.param('addButtonLabel', '+ Adicionar')\n\n    if (isDatasetLoading(d2)) {\n      return '<div class=\"ol\"><div class=\"ol-head\"><h3 class=\"ol-title\">' + escapeHtml(heading) + '</h3></div>' +\n        '<div class=\"ol-empty\">Carregando...</div></div>'\n    }\n\n    const items = getItems(d2)\n    const formOpen = !!d2.state.formOpen\n\n    const headerCells = fields.map((f) => '<th>' + escapeHtml(f.label || f.field) + '</th>').join('')\n    const bodyRows = items.length\n      ? items.map((it) => renderRow(d2, fields, it)).join('')\n      : '<tr><td class=\"ol-empty\" colspan=\"' + (fields.length + 1) + '\">Nenhum item cadastrado</td></tr>'\n\n    return '<div class=\"ol\">' +\n      '<div class=\"ol-head\"><h3 class=\"ol-title\">' + escapeHtml(heading) + '</h3>' +\n      '<button class=\"ol-add\">' + escapeHtml(addLabel) + '</button></div>' +\n      (formOpen ? renderForm(d2, fields) : '') +\n      '<div class=\"ol-table-wrap\"><table class=\"ol-table\"><thead><tr>' + headerCells + '<th class=\"ol-actions-col\">Ações</th></tr></thead>' +\n      '<tbody>' + bodyRows + '</tbody></table></div>' +\n      '</div>'\n  },\n\n  mounted(d2) {\n    d2.on('.ol-add', 'click', () => {\n      d2.state.formOpen = true\n      d2.state.editingId = null\n      d2.state.values = buildDefaultValues(d2)\n      d2.state.errors = {}\n      d2.state.query = {}\n      d2.state.openSelect = null\n    })\n\n    d2.on('.ol-cancel', 'click', () => {\n      d2.state.formOpen = false\n      d2.state.editingId = null\n      d2.state.values = {}\n      d2.state.errors = {}\n      d2.state.query = {}\n      d2.state.openSelect = null\n    })\n\n    d2.on('.ol-edit', 'click', (e, el) => {\n      const id = el.dataset.id\n      const idField = getIdField(d2)\n      const items = getItems(d2)\n      const rec = items.find((it) => String(it[idField]) === String(id))\n      if (!rec) return\n      d2.state.formOpen = true\n      d2.state.editingId = id\n      d2.state.values = { ...rec }\n      d2.state.errors = {}\n      d2.state.query = {}\n      d2.state.openSelect = null\n    })\n\n    d2.on('.ol-del', 'click', async (e, el) => {\n      const id = el.dataset.id\n      const ok = await d2.dialog.confirm('Remover este item?')\n      if (!ok) return\n      await removeItem(d2, id)\n    })\n\n    d2.on('.ol-save', 'click', async () => {\n      const fields = d2.param('fields', []) || []\n      const values = d2.state.values || {}\n      const errors = {}\n      fields.forEach((f) => {\n        const errs = validateValue(f, values[f.field])\n        if (errs.length) errors[f.field] = errs[0]\n      })\n      d2.state.errors = errors\n      if (Object.keys(errors).length) return\n      const editingId = d2.state.editingId\n      await saveItem(d2, values, editingId)\n      d2.state.formOpen = false\n      d2.state.editingId = null\n      d2.state.values = {}\n      d2.state.query = {}\n      d2.state.openSelect = null\n    })\n\n    d2.on('.ol-input', 'input', (e, el) => {\n      if (el.classList.contains('ol-select-input')) return\n      const key = el.dataset.field\n      d2.state.values = { ...(d2.state.values || {}), [key]: el.value }\n    })\n\n    d2.on('.ol-checkbox', 'change', (e, el) => {\n      const key = el.dataset.field\n      d2.state.values = { ...(d2.state.values || {}), [key]: el.checked }\n    })\n\n    d2.on('.ol-select-input', 'focus', (e, el) => {\n      const key = el.dataset.field\n      const current = d2.state.query || {}\n      if (current[key] === undefined) {\n        d2.state.query = { ...current, [key]: '' }\n      }\n      d2.state.openSelect = key\n    })\n\n    d2.on('.ol-select-input', 'input', (e, el) => {\n      const key = el.dataset.field\n      d2.state.query = { ...(d2.state.query || {}), [key]: el.value }\n      d2.state.values = { ...(d2.state.values || {}), [key]: '' }\n      d2.state.openSelect = key\n    })\n\n    d2.on('.ol-dd-item', 'click', (e, el) => {\n      const key = el.dataset.field\n      const value = el.dataset.value\n      const label = el.dataset.label\n      d2.state.values = { ...(d2.state.values || {}), [key]: value }\n      d2.state.query = { ...(d2.state.query || {}), [key]: label }\n      d2.state.openSelect = null\n    })\n\n    d2.on(window, 'click', (e) => {\n      if (!d2.state.openSelect) return\n      const path = e.composedPath ? e.composedPath() : []\n      const insideSelect = path.some((n) => n && n.classList && n.classList.contains && n.classList.contains('ol-select'))\n      if (!insideSelect) d2.state.openSelect = null\n    })\n\n    d2.on(window, 'keydown', (e) => {\n      if (e.key === 'Escape' && d2.state.openSelect) d2.state.openSelect = null\n    })\n  },\n}\n"}},"fields":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"fields"}}}},"dataset":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"dataset"}}}},"idField":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"idField"}}}},"heading":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"heading"}}}},"addButtonLabel":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"addButtonLabel"}}}}}}}}}},{"_id":"6a987439784e6873cdee5ed1","component":"data2-core-types@Component","system":"67fd353330d0f2317481370b","params":{"extends":"data2-core-primitives@Block","component":"mapaCroqui","package":"pedro-playground","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"const LEAFLET = { name: 'leaflet@1.9.4', css: 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css' };\n\n// ---------- geo helpers (equirectangular local projection — exact enough for talhões) ----------\nconst M_PER_DEG_LAT = 111320;\n\nfunction projector(lat0, lng0) {\n  const k = Math.cos((lat0 * Math.PI) / 180) * M_PER_DEG_LAT;\n  return {\n    toM: (lat, lng) => [(lng - lng0) * k, (lat - lat0) * M_PER_DEG_LAT],\n    toLL: (x, y) => [lat0 + y / M_PER_DEG_LAT, lng0 + x / k],\n  };\n}\n\nfunction centroid(verts) {\n  let la = 0, ln = 0;\n  for (const v of verts) { la += v.lat; ln += v.lng; }\n  return { lat: la / verts.length, lng: ln / verts.length };\n}\n\nfunction areaM2(verts) {\n  if (verts.length < 3) return 0;\n  const c = centroid(verts);\n  const p = projector(c.lat, c.lng);\n  const pts = verts.map((v) => p.toM(v.lat, v.lng));\n  let s = 0;\n  for (let i = 0; i < pts.length; i++) {\n    const a = pts[i], b = pts[(i + 1) % pts.length];\n    s += a[0] * b[1] - b[0] * a[1];\n  }\n  return Math.abs(s) / 2;\n}\n\nfunction perimeterM(verts) {\n  if (verts.length < 2) return 0;\n  const c = centroid(verts);\n  const p = projector(c.lat, c.lng);\n  const pts = verts.map((v) => p.toM(v.lat, v.lng));\n  let d = 0;\n  for (let i = 0; i < pts.length; i++) {\n    const a = pts[i], b = pts[(i + 1) % pts.length];\n    d += Math.hypot(b[0] - a[0], b[1] - a[1]);\n  }\n  return d;\n}\n\n// ray casting on the projected plane\nfunction inside(pt, poly) {\n  let hit = false;\n  for (let i = 0, j = poly.length - 1; i < poly.length; j = i++) {\n    const xi = poly[i][0], yi = poly[i][1], xj = poly[j][0], yj = poly[j][1];\n    if (yi > pt[1] !== yj > pt[1] && pt[0] < ((xj - xi) * (pt[1] - yi)) / (yj - yi) + xi) hit = !hit;\n  }\n  return hit;\n}\n\n// ---------- croqui grid ----------\nfunction buildGrid(verts, espLinha, espPlanta, rotDeg, margemM) {\n  if (verts.length < 3 || espLinha <= 0 || espPlanta <= 0) return [];\n  const c = centroid(verts);\n  const p = projector(c.lat, c.lng);\n  const poly = verts.map((v) => p.toM(v.lat, v.lng));\n\n  const rot = (rotDeg * Math.PI) / 180;\n  const cos = Math.cos(rot), sin = Math.sin(rot);\n  // rotate polygon into grid frame so the grid stays axis-aligned there\n  const polyR = poly.map(([x, y]) => [x * cos + y * sin, -x * sin + y * cos]);\n\n  let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity;\n  for (const [x, y] of polyR) {\n    if (x < minX) minX = x; if (x > maxX) maxX = x;\n    if (y < minY) minY = y; if (y > maxY) maxY = y;\n  }\n\n  const out = [];\n  let linha = 0;\n  for (let y = minY; y <= maxY; y += espLinha) {\n    linha++;\n    let planta = 0;\n    for (let x = minX; x <= maxX; x += espPlanta) {\n      planta++;\n      if (!insideWithMargin([x, y], polyR, margemM)) continue;\n      // un-rotate back to the local metric frame, then to lat/lng\n      const ux = x * cos - y * sin;\n      const uy = x * sin + y * cos;\n      const [lat, lng] = p.toLL(ux, uy);\n      out.push({ lat, lng, linha, planta });\n    }\n  }\n  return out;\n}\n\nfunction insideWithMargin(pt, poly, margemM) {\n  if (!inside(pt, poly)) return false;\n  if (!margemM) return true;\n  // keep the point only if it is at least `margemM` from every edge\n  for (let i = 0, j = poly.length - 1; i < poly.length; j = i++) {\n    if (distToSeg(pt, poly[j], poly[i]) < margemM) return false;\n  }\n  return true;\n}\n\nfunction distToSeg(p, a, b) {\n  const dx = b[0] - a[0], dy = b[1] - a[1];\n  const len2 = dx * dx + dy * dy;\n  if (!len2) return Math.hypot(p[0] - a[0], p[1] - a[1]);\n  let t = ((p[0] - a[0]) * dx + (p[1] - a[1]) * dy) / len2;\n  t = Math.max(0, Math.min(1, t));\n  return Math.hypot(p[0] - (a[0] + t * dx), p[1] - (a[1] + t * dy));\n}\n\nconst TILES = {\n  satelite: {\n    url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',\n    attr: 'Esri World Imagery',\n  },\n  ruas: {\n    url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n    attr: 'OpenStreetMap',\n  },\n};\n\nfunction fmt(n, d) { return Number(n).toFixed(d === undefined ? 2 : d); }\n\nexport default {\n  css: `\n    :host { display:block; }\n    .wrap { display:flex; height:100%; width:100%; font:13px/1.4 system-ui,-apple-system,Segoe UI,sans-serif;\n            color:#e9eef1; background:#0b0f11; border:1px solid #2a343b; border-radius:8px; overflow:hidden; }\n    .map { flex:1 1 auto; min-width:0; height:100%; background:#111; }\n    .side { flex:0 0 320px; height:100%; overflow-y:auto; background:#0f1417; border-left:1px solid #2a343b; padding:14px; box-sizing:border-box; }\n    h3 { margin:0 0 10px; font-size:13px; letter-spacing:.04em; text-transform:uppercase; color:#8fa3ad; font-weight:600; }\n    .sec { padding:12px 0; border-top:1px solid #2a343b; }\n    .sec:first-of-type { border-top:0; padding-top:0; }\n    label { display:block; font-size:11px; color:#8fa3ad; margin:8px 0 3px; }\n    input, select { width:100%; box-sizing:border-box; background:#0b0f11; color:#e9eef1;\n            border:1px solid #2a343b; border-radius:6px; padding:7px 8px; font:inherit; }\n    input:focus, select:focus { outline:none; border-color:#ffb454; }\n    .row { display:flex; gap:8px; }\n    .row > * { flex:1 1 0; min-width:0; }\n    button { background:#1a2226; color:#e9eef1; border:1px solid #2a343b; border-radius:6px;\n            padding:8px 10px; font:inherit; cursor:pointer; width:100%; }\n    button:hover:not(:disabled) { border-color:#4a5a64; background:#212b31; }\n    button:disabled { opacity:.4; cursor:not-allowed; }\n    button.pri { background:#ffb454; border-color:#ffb454; color:#1a1200; font-weight:600; }\n    button.pri:hover:not(:disabled) { background:#ffc274; border-color:#ffc274; }\n    .tabs { display:flex; gap:0; margin-bottom:14px; border:1px solid #2a343b; border-radius:6px; overflow:hidden; }\n    .tabs button { border:0; border-radius:0; background:transparent; color:#8fa3ad; }\n    .tabs button[data-on] { background:#ffb454; color:#1a1200; font-weight:600; }\n    .stat { display:flex; justify-content:space-between; padding:3px 0; font-variant-numeric:tabular-nums; }\n    .stat b { font-weight:600; color:#fff; }\n    .msg { margin-top:10px; font-size:11px; min-height:15px; color:#8fa3ad; }\n    .msg[data-err] { color:#ff8f6b; }\n    .msg[data-ok] { color:#7fd18b; }\n    .vlist { max-height:150px; overflow-y:auto; margin-top:8px; font-size:11px; font-variant-numeric:tabular-nums; }\n    .vlist div { display:flex; justify-content:space-between; padding:2px 0; color:#8fa3ad; border-top:1px solid #1a2226; }\n    .hint { font-size:11px; color:#6b7d87; margin-top:6px; }\n    .mk { background:#ffb454; border:2px solid #0b0f11; border-radius:50%; width:12px; height:12px; box-sizing:border-box; }\n    .leaflet-container { background:#111; font-family:inherit; }\n    .stack > button { margin-top:8px; }\n  `,\n\n  // render only gates the library; it reads nothing else reactive, so it settles after load\n  render(d2) {\n    const L = d2.lib(LEAFLET);\n    if (!L) {\n      const st = d2.lib.state(LEAFLET.name);\n      return st === 'error'\n        ? `<div class=\"wrap\" style=\"padding:20px\">Falha ao carregar Leaflet: ${d2.lib.error(LEAFLET.name)}</div>`\n        : `<div class=\"wrap\" style=\"padding:20px;color:#8fa3ad\">Carregando mapa…</div>`;\n    }\n    return `\n      <div class=\"wrap\">\n        <div class=\"map\" data-d2-static></div>\n        <div class=\"side\">\n          <div class=\"tabs\">\n            <button data-tab=\"area\" data-on>1 · Área</button>\n            <button data-tab=\"plantio\">2 · Plantio</button>\n          </div>\n\n          <div data-pane=\"area\">\n            <div class=\"sec\">\n              <h3>Vértices</h3>\n              <div class=\"hint\">Clique no mapa para add um vértice. Arraste para ajustar.</div>\n              <div class=\"stat\"><span>Pontos</span><b data-o=\"n\">0</b></div>\n              <div class=\"stat\"><span>Área</span><b data-o=\"ha\">—</b></div>\n              <div class=\"stat\"><span>Perímetro</span><b data-o=\"per\">—</b></div>\n              <div class=\"vlist\" data-o=\"vlist\"></div>\n              <div class=\"row\" style=\"margin-top:10px\">\n                <button data-a=\"undo\">Desfazer</button>\n                <button data-a=\"clear\">Limpar</button>\n              </div>\n            </div>\n            <div class=\"sec stack\">\n              <h3>Salvar área</h3>\n              <label>Nome do talhão</label>\n              <input data-i=\"nome\" placeholder=\"ex: Talhão A\" />\n              <label>Cultura</label>\n              <input data-i=\"cultura\" placeholder=\"ex: cacau\" />\n              <button class=\"pri\" data-a=\"save-area\">Salvar área</button>\n              <div class=\"msg\" data-o=\"msg-area\"></div>\n            </div>\n            <div class=\"sec\">\n              <h3>Áreas salvas</h3>\n              <select data-i=\"pick\"><option value=\"\">— nenhuma —</option></select>\n              <div class=\"row\" style=\"margin-top:8px\">\n                <button data-a=\"load\">Carregar</button>\n                <button data-a=\"reload\">Atualizar</button>\n              </div>\n            </div>\n          </div>\n\n          <div data-pane=\"plantio\" hidden>\n            <div class=\"sec\">\n              <h3>Espaçamento</h3>\n              <div class=\"row\">\n                <div><label>Entre linhas (m)</label><input data-i=\"espL\" type=\"number\" value=\"4\" min=\"0.5\" step=\"0.5\" /></div>\n                <div><label>Entre plantas (m)</label><input data-i=\"espP\" type=\"number\" value=\"3\" min=\"0.5\" step=\"0.5\" /></div>\n              </div>\n              <div class=\"row\">\n                <div><label>Rotação (°)</label><input data-i=\"rot\" type=\"number\" value=\"0\" step=\"5\" /></div>\n                <div><label>Recuo da borda (m)</label><input data-i=\"marg\" type=\"number\" value=\"1\" min=\"0\" step=\"0.5\" /></div>\n              </div>\n              <label>Espécie</label>\n              <input data-i=\"especie\" placeholder=\"ex: cacau\" />\n              <button class=\"pri\" data-a=\"gen\" style=\"margin-top:10px\">Gerar croqui</button>\n              <div class=\"stat\" style=\"margin-top:10px\"><span>Plantas</span><b data-o=\"cnt\">0</b></div>\n              <div class=\"stat\"><span>Densidade</span><b data-o=\"dens\">—</b></div>\n              <div class=\"msg\" data-o=\"msg-plot\"></div>\n            </div>\n            <div class=\"sec stack\">\n              <h3>Persistir</h3>\n              <div class=\"hint\">Grava 1 registro por planta na tabela de espécies.</div>\n              <button class=\"pri\" data-a=\"save-plot\">Salvar plantio</button>\n              <button data-a=\"clear-plot\">Limpar croqui</button>\n              <div class=\"msg\" data-o=\"msg-save\"></div>\n            </div>\n          </div>\n        </div>\n      </div>`;\n  },\n\n  updated(d2, root) {\n    const L = d2.lib(LEAFLET);\n    if (!L) return;\n    const host = root.querySelector('.map');\n    if (!host || host._d2map) return; // already wired\n    host._d2map = true;\n\n    // ---------- imperative state (deliberately NOT d2.state: we paint ourselves) ----------\n    const S = { verts: [], plants: [], mode: 'area', areas: [] };\n\n    const $ = (s) => root.querySelector(s);\n    const out = (k) => root.querySelector(`[data-o=\"${k}\"]`);\n    const val = (k) => (root.querySelector(`[data-i=\"${k}\"]`) || {}).value || '';\n    const num = (k, fb) => { const v = parseFloat(val(k)); return isNaN(v) ? fb : v; };\n    const say = (k, txt, kind) => {\n      const el = out(k); if (!el) return;\n      el.textContent = txt || '';\n      el.removeAttribute('data-err'); el.removeAttribute('data-ok');\n      if (kind) el.setAttribute('data-' + kind, '');\n    };\n\n    const tiles = TILES[d2.param('tiles', 'satelite')] || TILES.satelite;\n    const map = L.map(host, { zoomControl: true, attributionControl: false }).setView(\n      [d2.param('centerLat', -2.421), d2.param('centerLng', -48.15)],\n      d2.param('zoom', 16)\n    );\n    L.tileLayer(tiles.url, { maxZoom: 21, maxNativeZoom: 19, attribution: tiles.attr }).addTo(map);\n\n    const gVerts = L.layerGroup().addTo(map);\n    const gPlants = L.layerGroup().addTo(map);\n    let shape = null;\n\n    // Leaflet needs a size kick once it is inside a laid-out container\n    const ro = new ResizeObserver(() => map.invalidateSize());\n    ro.observe(host);\n    d2.onUnmount(() => { ro.disconnect(); map.remove(); });\n\n    // ---------- painting ----------\n    function paintArea() {\n      gVerts.clearLayers();\n      if (shape) { map.removeLayer(shape); shape = null; }\n\n      S.verts.forEach((v, i) => {\n        const m = L.marker([v.lat, v.lng], {\n          draggable: true,\n          icon: L.divIcon({ className: '', html: '<div class=\"mk\"></div>', iconSize: [12, 12], iconAnchor: [6, 6] }),\n        }).addTo(gVerts);\n        m.bindTooltip(String(i + 1), { permanent: true, direction: 'top', offset: [0, -6] });\n        m.on('dragend', (e) => {\n          const ll = e.target.getLatLng();\n          S.verts[i] = { lat: ll.lat, lng: ll.lng };\n          paintArea();\n        });\n      });\n\n      const ll = S.verts.map((v) => [v.lat, v.lng]);\n      if (ll.length >= 3) {\n        shape = L.polygon(ll, { color: '#ffb454', weight: 2, fillColor: '#ffb454', fillOpacity: 0.12 }).addTo(map);\n      } else if (ll.length === 2) {\n        shape = L.polyline(ll, { color: '#ffb454', weight: 2, dashArray: '4,4' }).addTo(map);\n      }\n\n      const a = areaM2(S.verts);\n      out('n').textContent = String(S.verts.length);\n      out('ha').textContent = S.verts.length >= 3 ? fmt(a / 10000, 3) + ' ha' : '—';\n      out('per').textContent = S.verts.length >= 2 ? fmt(perimeterM(S.verts), 1) + ' m' : '—';\n      out('vlist').innerHTML = S.verts\n        .map((v, i) => `<div><span>${i + 1}</span><span>${fmt(v.lat, 6)}, ${fmt(v.lng, 6)}</span></div>`)\n        .join('');\n    }\n\n    function paintPlants() {\n      gPlants.clearLayers();\n      for (const p of S.plants) {\n        L.circleMarker([p.lat, p.lng], {\n          radius: 3, color: '#7fd18b', weight: 1, fillColor: '#7fd18b', fillOpacity: 0.9,\n        }).addTo(gPlants);\n      }\n      out('cnt').textContent = String(S.plants.length);\n      const ha = areaM2(S.verts) / 10000;\n      out('dens').textContent = ha > 0 && S.plants.length ? fmt(S.plants.length / ha, 0) + ' pl/ha' : '—';\n    }\n\n    // ---------- map interaction: THE point of this component ----------\n    map.on('click', (e) => {\n      if (S.mode !== 'area') return;\n      S.verts.push({ lat: e.latlng.lat, lng: e.latlng.lng });\n      say('msg-area', '');\n      paintArea();\n    });\n\n    // ---------- tabs ----------\n    d2.on('[data-tab]', 'click', (e, el) => {\n      S.mode = el.dataset.tab;\n      root.querySelectorAll('[data-tab]').forEach((b) => {\n        if (b.dataset.tab === S.mode) b.setAttribute('data-on', ''); else b.removeAttribute('data-on');\n      });\n      $('[data-pane=\"area\"]').hidden = S.mode !== 'area';\n      $('[data-pane=\"plantio\"]').hidden = S.mode !== 'plantio';\n    });\n\n    // ---------- area actions ----------\n    d2.on('[data-a=\"undo\"]', 'click', () => { S.verts.pop(); paintArea(); });\n    d2.on('[data-a=\"clear\"]', 'click', () => {\n      S.verts = []; S.plants = []; paintArea(); paintPlants(); say('msg-area', '');\n    });\n\n    d2.on('[data-a=\"save-area\"]', 'click', async () => {\n      if (S.verts.length < 3) return say('msg-area', 'Marque ao menos 3 vértices no mapa.', 'err');\n      const nome = val('nome').trim();\n      if (!nome) return say('msg-area', 'Dê um nome ao talhão.', 'err');\n      say('msg-area', 'Salvando…');\n      try {\n        await d2.data('areas').create({\n          nome,\n          cultura: val('cultura').trim(),\n          vertices: S.verts.map((v) => ({ lat: v.lat, lng: v.lng })),\n          area_ha: Number(fmt(areaM2(S.verts) / 10000, 4)),\n          fechada: true,\n        });\n        say('msg-area', `Área \"${nome}\" salva (${fmt(areaM2(S.verts) / 10000, 3)} ha).`, 'ok');\n        await loadAreas();\n      } catch (err) {\n        say('msg-area', 'Erro ao salvar: ' + (err && err.message ? err.message : err), 'err');\n      }\n    });\n\n    async function loadAreas() {\n      try {\n        const h = d2.data('areas');\n        await h.refresh();\n        S.areas = h.records() || [];\n        const sel = root.querySelector('[data-i=\"pick\"]');\n        const keep = sel.value;\n        sel.innerHTML = '<option value=\"\">— nenhuma —</option>' + S.areas\n          .map((a, i) => `<option value=\"${i}\">${a.nome || '(sem nome)'} · ${fmt(a.area_ha || 0, 2)} ha</option>`)\n          .join('');\n        sel.value = keep;\n      } catch (err) { say('msg-area', 'Não consegui listar áreas: ' + err, 'err'); }\n    }\n\n    d2.on('[data-a=\"reload\"]', 'click', loadAreas);\n\n    d2.on('[data-a=\"load\"]', 'click', () => {\n      const i = root.querySelector('[data-i=\"pick\"]').value;\n      if (i === '') return;\n      const a = S.areas[Number(i)];\n      let vs = a && a.vertices;\n      if (typeof vs === 'string') { try { vs = JSON.parse(vs); } catch (e) { vs = null; } }\n      if (!vs || !vs.length) return say('msg-area', 'Essa área não tem vértices gravados.', 'err');\n      S.verts = vs.map((v) => (Array.isArray(v) ? { lat: +v[0], lng: +v[1] } : { lat: +v.lat, lng: +v.lng }));\n      S.plants = [];\n      paintArea(); paintPlants();\n      if (shape) map.fitBounds(shape.getBounds(), { padding: [30, 30] });\n      const inp = root.querySelector('[data-i=\"nome\"]'); if (inp) inp.value = a.nome || '';\n      const cul = root.querySelector('[data-i=\"cultura\"]'); if (cul) cul.value = a.cultura || '';\n      const esp = root.querySelector('[data-i=\"especie\"]'); if (esp && !esp.value) esp.value = a.cultura || '';\n      say('msg-area', `Área \"${a.nome}\" carregada.`, 'ok');\n    });\n\n    // ---------- plantio actions ----------\n    d2.on('[data-a=\"gen\"]', 'click', () => {\n      if (S.verts.length < 3) return say('msg-plot', 'Defina a área primeiro (aba 1).', 'err');\n      const espL = num('espL', 4), espP = num('espP', 3);\n      if (espL <= 0 || espP <= 0) return say('msg-plot', 'Espaçamentos devem ser > 0.', 'err');\n      const pts = buildGrid(S.verts, espL, espP, num('rot', 0), num('marg', 0));\n      if (pts.length > 5000) {\n        S.plants = [];\n        paintPlants();\n        return say('msg-plot', `${pts.length} plantas — espaçamento muito pequeno para a área. Aumente.`, 'err');\n      }\n      const especie = val('especie').trim() || val('cultura').trim() || 'planta';\n      S.plants = pts.map((p) => ({\n        lat: p.lat, lng: p.lng, especie,\n        nome: `${especie} L${p.linha}-P${p.planta}`,\n      }));\n      paintPlants();\n      say('msg-plot', `${S.plants.length} plantas geradas.`, 'ok');\n    });\n\n    d2.on('[data-a=\"clear-plot\"]', 'click', () => {\n      S.plants = []; paintPlants(); say('msg-plot', ''); say('msg-save', '');\n    });\n\n    d2.on('[data-a=\"save-plot\"]', 'click', async () => {\n      if (!S.plants.length) return say('msg-save', 'Gere o croqui antes de salvar.', 'err');\n      const h = d2.data('plantas');\n      say('msg-save', `Salvando 0/${S.plants.length}…`);\n      let done = 0;\n      try {\n        for (let i = 0; i < S.plants.length; i += 25) {\n          const chunk = S.plants.slice(i, i + 25);\n          await Promise.all(chunk.map((p) => h.create({\n            nome: p.nome, especie: p.especie, lat: p.lat, lng: p.lng,\n          })));\n          done += chunk.length;\n          say('msg-save', `Salvando ${done}/${S.plants.length}…`);\n        }\n        say('msg-save', `${done} plantas gravadas.`, 'ok');\n      } catch (err) {\n        say('msg-save', `Falhou após ${done}: ` + (err && err.message ? err.message : err), 'err');\n      }\n    });\n\n    paintArea();\n    paintPlants();\n    loadAreas();\n    setTimeout(() => map.invalidateSize(), 60);\n  },\n};\n"}},"areas":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"areas"}}}},"plantas":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"plantas"}}}},"centerLat":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"centerLat"}}}},"centerLng":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"centerLng"}}}},"zoom":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"zoom"}}}},"tiles":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tiles"}}}}}}}}}},{"_id":"5ecd05ded68ce41360f74b43","component":"data2-core-types@Component","params":{"extendable":{"placeholder":"children"},"component":"Block","package":"data2-core-primitives"}},{"_id":"5f494791a575399a45020f87","component":"data2-core-types@Component","params":{"definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"html@input","params":{"style":{"width":"100%","height":"100%","boxSizing":"border-box","background":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparision-operators@Identical","params":{"subject":{"params":{"reference":"type","source":"VIRTUAL_COMPONENT_PARAMS"},"component":"data2-core-types@Reference"},"comparisonSubject":"checkbox"}}],"then":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparision-operators@Identical","params":{"subject":{"component":"data2-core-types@DataLinkGetter","params":{"dataset":{"component":"data2-core-types@Reference","params":{"reference":"dataset","source":"VIRTUAL_COMPONENT_PARAMS"}},"field":{"component":"data2-core-types@Reference","params":{"reference":"field","source":"VIRTUAL_COMPONENT_PARAMS"}},"record":{"component":"data2-core-types@Reference","params":{"reference":"record","source":"VIRTUAL_COMPONENT_PARAMS"}}}},"comparisonSubject":true}}],"then":{"params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"checkboxFill"}}}},"rgba(0,118,255,1)"]},"component":"data2-core-logical-operators@Or"},"else":{"params":{"content":"none"},"component":"data2-core-primitives@String"}}},"else":{"params":{"content":"none"},"component":"data2-core-primitives@String"}}},"color":{"params":{"reference":"super.textColor"},"component":"data2-core-types@Reference"},"border":"none","outline":"none","appearance":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparision-operators@Identical","params":{"subject":{"params":{"reference":"orient","source":"VIRTUAL_COMPONENT_PARAMS"},"component":"data2-core-types@Reference"},"comparisonSubject":"vertical"}}],"then":"slider-vertical","else":"none"}},"cursor":{"params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"super.cursor"}}}},{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparision-operators@Identical","params":{"subject":{"params":{"reference":"disabled","source":"VIRTUAL_COMPONENT_PARAMS"},"component":"data2-core-types@Reference"},"comparisonSubject":true}}],"then":{"component":"data2-core-primitives@String","params":{"content":"not-allowed"}},"else":{"component":"data2-core-primitives@String","params":{"content":"auto"}}}}]},"component":"data2-core-logical-operators@Or"},"fontWeight":{"component":"data2-core-primitives@String","params":{"content":"inherit"}},"paddingLeft":{"component":"data2-core-flow@If","params":{"compare":[{"params":{"comparisonSubject":{"params":{},"component":"data2-core-primitives@Undefined"},"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"padding.left"}}}}},"component":"data2-core-comparison-operators@Different"}],"then":{"params":{"portions":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"padding.left"}}}},{"component":"data2-core-primitives@String","params":{"content":"px"}}]},"component":"data2-core-functions@StringConcat"}}},"paddingRight":{"component":"data2-core-flow@If","params":{"compare":[{"params":{"comparisonSubject":{"params":{},"component":"data2-core-primitives@Undefined"},"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"padding.right"}}}}},"component":"data2-core-comparison-operators@Different"}],"then":{"params":{"portions":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"padding.right"}}}},{"component":"data2-core-primitives@String","params":{"content":"px"}}]},"component":"data2-core-functions@StringConcat"}}},"caretColor":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"caretColor"}}}},"textAlign":{"params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"super.textFormat.textAlign"}}},"component":"data2-core-types@Reference"}},"tabIndex":{"component":"data2-core-types@Reference","params":{"reference":"tabIndex","source":"VIRTUAL_COMPONENT_PARAMS"}},"step":{"component":"data2-core-types@Reference","params":{"reference":"step","source":"VIRTUAL_COMPONENT_PARAMS"}},"min":{"component":"data2-core-types@Reference","params":{"reference":"min","source":"VIRTUAL_COMPONENT_PARAMS"}},"max":{"component":"data2-core-types@Reference","params":{"reference":"max","source":"VIRTUAL_COMPONENT_PARAMS"}},"maxLength":{"params":{"then":{"params":{},"component":"data2-core-primitives@Undefined"},"compare":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"maxLength","source":"VIRTUAL_COMPONENT_PARAMS"}},"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":""}}},"component":"data2-core-comparison-operators@Equal"}],"else":{"component":"data2-core-types@Reference","params":{"reference":"maxLength","source":"VIRTUAL_COMPONENT_PARAMS"}}},"component":"data2-core-flow@If"},"orient":{"component":"data2-core-types@Reference","params":{"reference":"orient","source":"VIRTUAL_COMPONENT_PARAMS"}},"type":{"component":"data2-core-types@Reference","params":{"reference":"type","source":"VIRTUAL_COMPONENT_PARAMS"}},"placeholder":{"component":"data2-core-logical-operators@Or","params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":"placeholder","source":"VIRTUAL_COMPONENT_PARAMS"}},{"component":"data2-core-types@Reference","params":{"reference":"field","source":"VIRTUAL_COMPONENT_PARAMS"}}]}},"value":{"params":{"expression":{"params":{"content":true},"component":"data2-core-primitives@Boolean"},"defaultCase":{"component":"data2-core-types@DataLinkGetter","params":{"dataset":{"component":"data2-core-types@Reference","params":{"reference":"dataset","source":"VIRTUAL_COMPONENT_PARAMS"}},"field":{"component":"data2-core-types@Reference","params":{"reference":"field","source":"VIRTUAL_COMPONENT_PARAMS"}},"record":{"component":"data2-core-types@Reference","params":{"reference":"record","source":"VIRTUAL_COMPONENT_PARAMS"}},"mask":{"component":"data2-core-types@Reference","params":{"reference":"mask","source":"VIRTUAL_COMPONENT_PARAMS"}}}},"cases":[{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-comparision-operators@Identical","params":{"subject":{"params":{"reference":"type","source":"VIRTUAL_COMPONENT_PARAMS"},"component":"data2-core-types@Reference"},"comparisonSubject":"date"}},"value":{"component":"data2-core-functions@DateFormat","params":{"date":{"component":"data2-core-types@DataLinkGetter","params":{"dataset":{"component":"data2-core-types@Reference","params":{"reference":"dataset","source":"VIRTUAL_COMPONENT_PARAMS"}},"field":{"component":"data2-core-types@Reference","params":{"reference":"field","source":"VIRTUAL_COMPONENT_PARAMS"}},"record":{"component":"data2-core-types@Reference","params":{"reference":"record","source":"VIRTUAL_COMPONENT_PARAMS"}}}},"format":"YYYY-MM-DD"}}}},{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-comparision-operators@Identical","params":{"subject":{"params":{"reference":"type","source":"VIRTUAL_COMPONENT_PARAMS"},"component":"data2-core-types@Reference"},"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":"month"}}}},"value":{"component":"data2-core-functions@DateFormat","params":{"date":{"component":"data2-core-types@DataLinkGetter","params":{"dataset":{"component":"data2-core-types@Reference","params":{"reference":"dataset","source":"VIRTUAL_COMPONENT_PARAMS"}},"field":{"component":"data2-core-types@Reference","params":{"reference":"field","source":"VIRTUAL_COMPONENT_PARAMS"}},"record":{"component":"data2-core-types@Reference","params":{"reference":"record","source":"VIRTUAL_COMPONENT_PARAMS"}}}},"format":{"component":"data2-core-primitives@String","params":{"content":"YYYY-MM"}}}}}},{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-comparision-operators@Identical","params":{"subject":{"params":{"reference":"type","source":"VIRTUAL_COMPONENT_PARAMS"},"component":"data2-core-types@Reference"},"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":"datetime-local"}}}},"value":{"component":"data2-core-functions@DateFormat","params":{"date":{"component":"data2-core-types@DataLinkGetter","params":{"dataset":{"component":"data2-core-types@Reference","params":{"reference":"dataset","source":"VIRTUAL_COMPONENT_PARAMS"}},"field":{"component":"data2-core-types@Reference","params":{"reference":"field","source":"VIRTUAL_COMPONENT_PARAMS"}},"record":{"component":"data2-core-types@Reference","params":{"reference":"record","source":"VIRTUAL_COMPONENT_PARAMS"}}}},"format":{"component":"data2-core-primitives@String","params":{"content":"YYYY-MM-DDTHH:mm"}}}}}}]},"component":"data2-core-flow@Switch"},"onChange":{"component":"data2-core-types@DataLinkSetter","params":{"dataset":{"component":"data2-core-types@Reference","params":{"reference":"dataset","source":"VIRTUAL_COMPONENT_PARAMS"}},"field":{"component":"data2-core-types@Reference","params":{"reference":"field","source":"VIRTUAL_COMPONENT_PARAMS"}},"record":{"component":"data2-core-types@Reference","params":{"reference":"record","source":"VIRTUAL_COMPONENT_PARAMS"}},"recordUpsert":{"component":"data2-core-types@Reference","params":{"reference":"recordUpsert","source":"VIRTUAL_COMPONENT_PARAMS"}},"onChange":{"component":"data2-core-types@Reference","params":{"reference":"onChange","source":"VIRTUAL_COMPONENT_PARAMS"}},"mask":{"component":"data2-core-types@Reference","params":{"reference":"mask","source":"VIRTUAL_COMPONENT_PARAMS"}}}},"defaultChecked":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparision-operators@Identical","params":{"subject":{"params":{"reference":"type","source":"VIRTUAL_COMPONENT_PARAMS"},"component":"data2-core-types@Reference"},"comparisonSubject":"checkbox"}}],"then":{"component":"data2-core-types@DataLinkGetter","params":{"dataset":{"component":"data2-core-types@Reference","params":{"reference":"dataset","source":"VIRTUAL_COMPONENT_PARAMS"}},"field":{"component":"data2-core-types@Reference","params":{"reference":"field","source":"VIRTUAL_COMPONENT_PARAMS"}},"record":{"component":"data2-core-types@Reference","params":{"reference":"record","source":"VIRTUAL_COMPONENT_PARAMS"}}}},"else":""}},"field":{"component":"data2-core-types@Reference","params":{"reference":"field"}},"opacity":{"component":"data2-core-flow@If","params":{"compare":[{"params":{"reference":"disabled","source":"VIRTUAL_COMPONENT_PARAMS"},"component":"data2-core-types@Reference"}],"then":0.38,"else":1}},"disabled":{"params":{"reference":"disabled","source":"VIRTUAL_COMPONENT_PARAMS"},"component":"data2-core-types@Reference"},"autoComplete":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparision-operators@Equal","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"builder"}},"comparisonSubject":true}}],"then":"new-password","else":{"params":{"compare":{"params":{"comparisonSubject":{"params":{"content":true},"component":"data2-core-primitives@Boolean"},"subject":{"params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"autoComplete"}}},"component":"data2-core-types@Reference"}},"component":"data2-core-comparison-operators@Identical"},"else":{"params":{"components":[{"params":{"reference":"autoComplete","source":"VIRTUAL_COMPONENT_PARAMS"},"component":"data2-core-types@Reference"},{"component":"data2-core-primitives@String","params":{"content":"off"}}]},"component":"data2-core-logical-operators@Or"}},"component":"data2-core-flow@If"}}},"data-lpignore":{"component":"data2-core-flow@If","params":{"compare":[{"params":{"reference":"autoComplete","source":"VIRTUAL_COMPONENT_PARAMS"},"component":"data2-core-types@Reference"}],"then":"","else":"true"}},"onFocus":{"component":"data2-core-types@Reference","params":{"reference":"onFocus","source":"VIRTUAL_COMPONENT_PARAMS"}},"onBlur":{"component":"data2-core-types@Reference","params":{"reference":"onBlur","source":"VIRTUAL_COMPONENT_PARAMS"}},"onKeyPress":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"onKeyPress"}}}},"autoCapitalize":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"autoCapitalize"}}}},"spellCheck":{"params":{"expression":{"params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"spellCheck"}}},"component":"data2-core-types@Reference"},"cases":[{"component":"data2-core-flow@Case","params":{"expression":{"params":{"content":true},"component":"data2-core-primitives@Boolean"},"value":{"component":"data2-core-primitives@String","params":{"content":"true"}}}},{"component":"data2-core-flow@Case","params":{"expression":{"params":{"content":false},"component":"data2-core-primitives@Boolean"},"value":{"component":"data2-core-primitives@String","params":{"content":"false"}}}}]},"component":"data2-core-flow@Switch"}}}}},"component":"DataFieldBlock","package":"data2-blocks","extends":"data2-core-primitives@Block"}},{"_id":"5ed531fca99e7f2f648cc2ab","component":"data2-core-types@Component","params":{"definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"params":{"dataset":{"component":"data2-core-types@Reference","params":{"reference":"dataset"}},"latField":{"component":"data2-core-types@Reference","params":{"reference":"latField"}},"lngField":{"component":"data2-core-types@Reference","params":{"reference":"lngField"}},"markerField":{"component":"data2-core-types@Reference","params":{"reference":"markerField"}},"initialCenterLat":{"component":"data2-core-types@Reference","params":{"reference":"initialCenterLat"}},"initialCenterLng":{"component":"data2-core-types@Reference","params":{"reference":"initialCenterLng"}},"initialZoom":{"component":"data2-core-types@Reference","params":{"reference":"initialZoom"}},"provider":{"component":"data2-core-types@Reference","params":{"reference":"provider"}},"style":{"width":"100%","height":"100%"},"polyLineField":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"polyLineField"}}}}},"component":"data2-controls@DataMap"}}},"component":"DataMap","package":"data2-blocks","extends":"data2-core-primitives@Block"}},{"_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":[{"_id":"6a46b754bf38d3828150beea","component":"data2-rush@HTTPListener","reference":"buscaAlimento","system":"67fd353330d0f2317481370b","params":{}},{"_id":"6a46b6e6fd69f89bce091a20","component":"data2-core-ai@Assistant","reference":"nutriBot","system":"67fd353330d0f2317481370b","params":{"model":"cerebras","_context":"Você é uma nutricionista assistente. Dada uma REFEIÇÃO (ex: café da manhã, almoço, lanche, jantar, ceia) e uma META DE CALORIAS (kcal), você compõe uma refeição realista e equilibrada que se aproxime da meta. Considere restrições/preferências informadas. Prefira alimentos comuns e fáceis de encontrar. Nunca dê conselho médico; adicione um lembrete curto de que valores são estimativas.","behaviour":{"component":"data2-core-primitives@String","params":{"content":"Responda SOMENTE com JSON valido, sem markdown, no formato exato: {\"refeicao\": string, \"meta_kcal\": number, \"itens\": [{\"alimento\": string, \"termo_busca\": string, \"gramas\": number, \"kcal\": number, \"proteina_g\": number, \"carbo_g\": number, \"gordura_g\": number, \"motivo\": string}], \"total_kcal\": number, \"resumo\": string}. O campo termo_busca deve ser um termo simples e generico do alimento (1 a 3 palavras, em portugues) bom para buscar em uma base de alimentos. Os campos kcal, proteina_g, carbo_g e gordura_g sao os valores estimados para a PORCAO em gramas daquele item (nao por 100g). Inclua de 3 a 6 itens. As porcoes e valores devem ser realistas e a soma de kcal deve se aproximar de meta_kcal; preencha total_kcal com essa soma."}},"creativity":55,"json":true}},{"_id":"6aad7b0e0aa5a08ba870571c","component":"data2-rush@HTTPListener","reference":"v5-salvar-plantio","system":"67fd353330d0f2317481370b","params":{},"deleteMetadata":{}},{"_id":"6aad73052086c2e4340b878d","component":"data2-rush@HTTPListener","reference":"v5-calcular","system":"67fd353330d0f2317481370b","params":{},"deleteMetadata":{}},{"_id":"6aad72d5850d506c9bd44f9a","component":"data2-rush@HTTPListener","reference":"v5-vertices-set","system":"67fd353330d0f2317481370b","params":{},"deleteMetadata":{}},{"_id":"6aad73354ef0bfdfc9a5eb25","component":"data2-rush@HTTPListener","reference":"v5-area-salvar","system":"67fd353330d0f2317481370b","params":{},"deleteMetadata":{}},{"_id":"6aad73260aa5a08ba8704441","component":"data2-rush@HTTPListener","reference":"v5-gerar-croqui","system":"67fd353330d0f2317481370b","params":{},"deleteMetadata":{}},{"_id":"6aad7330200679cd58b154e0","component":"data2-rush@HTTPListener","reference":"v5-limpar-croqui","system":"67fd353330d0f2317481370b","params":{},"deleteMetadata":{}}]}},{"reference":"ComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a46b8eddb0f6c9b1b2a4f17","component":"data2-core-primitives@Router","system":"67fd353330d0f2317481370b","displayName":"Nutri Router","params":{"routerType":{"component":"data2-core-primitives@String","params":{"content":"browser"}},"routes":[{"component":"data2-core-primitives@Route","params":{"path":"","name":"Cadastro","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"VMgKqpc7pCmM5_k_pDSz8"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/chat","name":"NutriBot","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"mvbnjSWvqD0RWvxn-lk4U"}}}}],"notFound":{"component":"data2-core-types@ArtboardReference","params":{"reference":"VMgKqpc7pCmM5_k_pDSz8"}}},"reference":"nutriRouter"},{"_id":"6aad738a2086c2e4340b88c0","component":"data2-core-primitives@Artboard","system":"67fd353330d0f2317481370b","displayName":"Croqui Nativo V5","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Croqui Nativo V5"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0}}},"reference":"UFlNWarPd0z3fjr2dP5Yl","deleteMetadata":{}},{"_id":"6a46b8b8fb4b5485eb73c215","component":"data2-core-primitives@Artboard","system":"67fd353330d0f2317481370b","displayName":"Nutri — Cadastro","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Nutri — Cadastro"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"position":{"component":"data2-core-types@Position","params":{"x":1200,"y":1048,"exactX":1200,"exactY":1048}}},"reference":"VMgKqpc7pCmM5_k_pDSz8"},{"_id":"6a46b8b95b52bb5fa5327eda","component":"data2-core-primitives@Artboard","system":"67fd353330d0f2317481370b","displayName":"Nutri — NutriBot","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Nutri — NutriBot"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"position":{"component":"data2-core-types@Position","params":{"x":2144,"y":-448,"exactX":2144,"exactY":-448}}},"reference":"mvbnjSWvqD0RWvxn-lk4U"},{"_id":"a92f8d3d4c0b839943b9dbe7","parent":"6aad738a2086c2e4340b88c0","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"Fundo","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":"#EDF1ED"}}}}]}},"index":0},"index":0,"reference":"psUs6IkF7THvJf1OReCfP","deleteMetadata":{}},{"_id":"c3a52e6cab4daf810e5bd515","parent":"6aad738a2086c2e4340b88c0","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"Header","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":56}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#14281C"}}}}]}},"index":3},"index":1,"reference":"UIxR1GEbAPKBbhb0sV8JM","deleteMetadata":{}},{"_id":"c333ba1eaaddf7ea5e1ad905","parent":"6aad738a2086c2e4340b88c0","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"Painel","params":{"position":{"component":"data2-core-types@Position","params":{"x":16,"y":68,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":440,"height":816}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#FFFFFF"}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":14,"width":1,"color":"#D6DED8"}},"scroll":{"component":"data2-core-types@Scroll","params":{}},"index":2},"index":2,"reference":"MvW4tzvB_Jr0mXfkUCf9K","deleteMetadata":{}},{"_id":"b0ccab3cc57602d2336e6137","parent":"6aad738a2086c2e4340b88c0","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"MapaWrap","params":{"position":{"component":"data2-core-types@Position","params":{"x":472,"y":68,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":952,"height":816}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#CFD8D2"}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":14}},"index":1},"index":3,"reference":"MiHsgg0bk8UHXGNWd9g-1","deleteMetadata":{}},{"_id":"a5df8cb021bb87fea4ebe739","parent":"6a46b8b8fb4b5485eb73c215","component":"pedro-playground@cadastroPaciente","system":"67fd353330d0f2317481370b","displayName":"cadastroPaciente","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"pacientesDataSet"}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}}},"reference":"fU6vRAsxQHYYLDuCzPa_D"},{"_id":"db21fbcb1d4db729b9871cac","parent":"6a46b8b95b52bb5fa5327eda","component":"pedro-playground@chatbotNutri","system":"67fd353330d0f2317481370b","displayName":"chatbotNutri","params":{"assistant":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"nutriBot"}},"rush":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"buscaAlimento"}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}}},"reference":"8ZjKVNubKTaniGCDcuO04"},{"_id":"23ccd2a5c2c5338325b3a320","parent":"c3a52e6cab4daf810e5bd515","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"Titulo","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":16,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":520,"height":24}},"text":"Croqui Nativo — área por coordenadas","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#FFFFFF"}},"textSize":17,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":"700","verticalAlignment":"middle"}}},"index":0,"reference":"1HnXGvCeryvfI52YtzGpt","deleteMetadata":{}},{"_id":"2d20e02dcd03cbf9fd27d4e7","parent":"c3a52e6cab4daf810e5bd515","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"Sub","params":{"position":{"component":"data2-core-types@Position","params":{"x":560,"y":19,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":18}},"text":"sem iframe · DataMap nativo · satélite Esri","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#8FB79C"}},"textSize":12,"textFormat":{"component":"data2-core-types@TextFormat","params":{"verticalAlignment":"middle"}}},"index":1,"reference":"K-r_6l6SNQW4CoE4QIUI7","deleteMetadata":{}},{"_id":"a08967d3becea126ddfff2eb","parent":"c3a52e6cab4daf810e5bd515","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"AreaAtual","params":{"position":{"component":"data2-core-types@Position","params":{"x":1000,"y":19,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":420,"height":18}},"text":{"component":"data2-core-functions@StringConcat","params":{"portions":["","talhão: ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.nome"}}," · ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.qtd_vertices"}}," vértices · ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.qtd_plantas"}}," plantas"]}},"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#D7E6DC"}},"textSize":12,"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"right","verticalAlignment":"middle"}}},"index":2,"reference":"MnlWKtWYh2_KbeHHr2FwQ","deleteMetadata":{}},{"_id":"18edbe1c1534ae93d0a6fb6b","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"S1Titulo","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":16,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":16}},"text":"1 · LOCAL","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#1F7A3D"}},"textSize":11,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":"700","letterSpacing":1}}},"index":0,"reference":"DywsnJGM21IT9QxWBDqC-","deleteMetadata":{}},{"_id":"476ee2c75a41465beed521ee","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"S3Titulo","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":486,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":16}},"text":"3 · VÉRTICES DO POLÍGONO","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#1F7A3D"}},"textSize":11,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":"700","letterSpacing":1}}},"index":0,"reference":"sJ-q2wgmNxYH58Wu2ZDn3","deleteMetadata":{}},{"_id":"531723683cb2bc267ecb09af","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"LblPlantas","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":1100,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":200,"height":16}},"text":"Plantas","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":12},"index":0,"reference":"whH80L43dlFViyuDq1TCK","deleteMetadata":{}},{"_id":"9376652d2dc39435f44a68e5","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"ListaUf","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":60,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":110,"height":150}},"childrenMode":"rows","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F7F5"}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":"#D6DED8"}},"scroll":{"component":"data2-core-types@Scroll","params":{}},"repeat":{"component":"data2-core-types@DataSetReference","params":{"reference":"v5-ufsDataSet"}},"repeatReference":{"component":"data2-core-primitives@String","params":{"content":"uf"}},"onVisibleOnScreen":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-ufsDataSet"}},"prop":"paginate","args":[{"size":40}]}},{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-ufsDataSet"}},"prop":"toggleSort","args":["uf"]}},true]}}},"index":0,"reference":"JYO1m_1RGGw_aiSsrTyrP","deleteMetadata":{}},{"_id":"6b8e6075d0f4d7417a487bf3","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"Hint3","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":506,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":30}},"text":"Uma coordenada por linha: lat, lng. Aceita vírgula, ponto-e-vírgula ou espaço. A ordem das linhas é a ordem do contorno.","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":11,"textFormat":{"component":"data2-core-types@TextFormat","params":{"wordWrap":"break-word"}}},"index":1,"reference":"J4XZ5T3Jc3iTu-qoTKL7J","deleteMetadata":{}},{"_id":"87cee458900b289906ad0d64","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"ValPlantas","params":{"position":{"component":"data2-core-types@Position","params":{"x":220,"y":1100,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":200,"height":16}},"text":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.qtd_plantas"}},"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#14281C"}},"textSize":12,"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"right","fontWeight":"700"}}},"index":1,"reference":"5jopugAeZL9jO-j9ZfUwU","deleteMetadata":{}},{"_id":"8a62aec894fa9a8165adeb15","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"LblUf","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":42,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":110,"height":14}},"text":"UF","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":11},"index":1,"reference":"qy4ShcFUh_gcoJZGNekZK","deleteMetadata":{}},{"_id":"b5b62e3b1dfc77b1e83e27f8","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"ListaMun","params":{"position":{"component":"data2-core-types@Position","params":{"x":140,"y":60,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":280,"height":150}},"childrenMode":"rows","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F7F5"}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":"#D6DED8"}},"scroll":{"component":"data2-core-types@Scroll","params":{}},"repeat":{"component":"data2-core-types@DataSetReference","params":{"reference":"v5-municipiosDataSet"}},"repeatReference":{"component":"data2-core-primitives@String","params":{"content":"mun"}},"onVisibleOnScreen":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-municipiosDataSet"}},"prop":"paginate","args":[{"size":80}]}},{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-municipiosDataSet"}},"prop":"toggleSort","args":["nome"]}},true]}}},"index":1,"reference":"suZNia3uySIIwSwxTAEr-","deleteMetadata":{}},{"_id":"a9fadf9864f350aedc3273ec","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-blocks@DataFieldBlock","system":"67fd353330d0f2317481370b","displayName":"InCoords","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"field":"data.texto_coords","type":"textarea","placeholder":{"component":"data2-core-primitives@String","params":{"content":"-2.4200, -48.1550   |   -2.4195, -48.1490   |   uma por linha ou separadas por ponto-e-virgula"}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":542,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":120}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F7F5"}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":"#D6DED8"}},"textSize":12}},"index":2,"reference":"y7jAlrcLpBX8E9tM8Zt4C","deleteMetadata":{}},{"_id":"d91a9175f69c8575165ba3e6","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"LblDens","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":1120,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":200,"height":16}},"text":"Densidade","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":12},"index":2,"reference":"ASS3PhV4-NKNKHzs8Kpvh","deleteMetadata":{}},{"_id":"eb1506cfd78d1ad5cb9a5cc8","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"SelLocal","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":218,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":16}},"text":{"component":"data2-core-functions@StringConcat","params":{"portions":["","selecionado: ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.uf"}}," · ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.municipio"}}]}},"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#1F7A3D"}},"textSize":11,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":"600"}}},"index":2,"reference":"n01MBKeVUc1s0In4xB3zY","deleteMetadata":{}},{"_id":"001b4bcd7a0199cc09bd6f43","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"ValDens","params":{"position":{"component":"data2-core-types@Position","params":{"x":220,"y":1120,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":200,"height":16}},"text":{"component":"data2-core-functions@StringConcat","params":{"portions":["",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.densidade"}}," pl/ha"]}},"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#14281C"}},"textSize":12,"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"right","fontWeight":"700"}}},"index":3,"reference":"9VEsDZkd4aVU8cTMhG-vr","deleteMetadata":{}},{"_id":"587184c4d50b94e422f8ac53","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"LblMun","params":{"position":{"component":"data2-core-types@Position","params":{"x":140,"y":42,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":280,"height":14}},"text":"Município","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":11},"index":3,"reference":"75wZhbb4i2cuEduQoi4Y0","deleteMetadata":{}},{"_id":"5ee0ea78c907b921db0ba34c","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"LblLat","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":672,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":120,"height":14}},"text":"lat","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":11},"index":3,"reference":"ubOby39MIaqHyevjdDZ04","deleteMetadata":{}},{"_id":"138bcb9aa94c9d962f19f86e","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-blocks@DataFieldBlock","system":"67fd353330d0f2317481370b","displayName":"InLat","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"field":"data.novo_lat","placeholder":"-2.4200","super":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":688,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":120,"height":34}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F7F5"}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":"#D6DED8"}},"textSize":13}},"index":4,"reference":"RzqlIa9qdzqfTpucdDrvg","deleteMetadata":{}},{"_id":"eb58c3290bbba618bffc5f3f","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"Div4","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":1148,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":1}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#E6EBE7"}}}}]}}},"index":4,"reference":"O_Fbo1uoyftz91ufV8iYa","deleteMetadata":{}},{"_id":"4de06060bc24b9d3e41bbb0f","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"SubPersistir","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":1162,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":16}},"text":"PERSISTIR","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#1F7A3D"}},"textSize":11,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":"700","letterSpacing":1}}},"index":5,"reference":"WqofvpD1-1TqmCM_fe3_z","deleteMetadata":{}},{"_id":"b7077e73715df94b600742be","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"LblLng","params":{"position":{"component":"data2-core-types@Position","params":{"x":150,"y":672,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":120,"height":14}},"text":"lng","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":11},"index":5,"reference":"qw9VYyprXRZNBAzclWFEC","deleteMetadata":{}},{"_id":"33b5db0dba0c033ee20cfdcf","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"Div1","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":246,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":1}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#E6EBE7"}}}}]}}},"index":6,"reference":"zDoZ-DxbfQeUSzyOh5_2v","deleteMetadata":{}},{"_id":"614183f31ef5c8e99b7fb164","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-blocks@DataFieldBlock","system":"67fd353330d0f2317481370b","displayName":"InLng","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"field":"data.novo_lng","placeholder":"-48.1550","super":{"position":{"component":"data2-core-types@Position","params":{"x":150,"y":688,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":120,"height":34}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F7F5"}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":"#D6DED8"}},"textSize":13}},"index":6,"reference":"uq0dPeXlcSktso_YwRznt","deleteMetadata":{}},{"_id":"adb9f6837561f3ee412da428","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"HintPersistir","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":1182,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":30}},"text":"Gerar desenha o croqui como rascunho no mapa. Salvar confirma o plantio (1 registro por planta).","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":11,"textFormat":{"component":"data2-core-types@TextFormat","params":{"wordWrap":"break-word"}}},"index":6,"reference":"OLVS6FJCuDCyLOlPzc6Kn","deleteMetadata":{}},{"_id":"900d749808bdedaf5f935369","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"S2Titulo","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":260,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":16}},"text":"2 · TALHÃO","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#1F7A3D"}},"textSize":11,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":"700","letterSpacing":1}}},"index":7,"reference":"5wV6sR5zTluqr19YLwbC2","deleteMetadata":{}},{"_id":"de799f90e33b46a5bded8ade","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"BtnSalvarPlantio","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":1220,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":36}},"text":"Salvar plantio","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#1F7A3D"}}}}]}},"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#FFFFFF"}},"textSize":13,"border":{"component":"data2-core-types@Border","params":{"radius":8}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"center","verticalAlignment":"middle","fontWeight":"600"}},"onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-logical-operators@And","params":{"components":[{"component":"data2-core-comparison-operators@Different","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}},"comparisonSubject":null}},{"component":"data2-core-comparison-operators@Different","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}},"comparisonSubject":""}}]}},"resultName":"temArea"}},{"component":"data2-core-flow@If","params":{"compare":{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"temArea"}},"comparisonSubject":false}},"then":{"component":"data2-core-flow@Return","params":{"result":false}}}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-salvar-plantio"}},"prop":"invoke","args":[{"body":{"area":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}}}}]}},"resultName":"r"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Different","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"r.data"}},"comparisonSubject":null}}],"then":{"component":"data2-core-types@Reference","params":{"reference":"r.data"}},"else":{"component":"data2-core-types@Reference","params":{"reference":"r"}}}},"resultName":"d"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"d.ok"}},"comparisonSubject":true}},"resultName":"ok"}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.msg3","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"ok"}}],"then":{"component":"data2-core-functions@StringConcat","params":{"portions":["","Plantio salvo: ",{"component":"data2-core-types@Reference","params":{"reference":"d.confirmadas"}}," plantas gravadas."]}},"else":{"component":"data2-core-types@Reference","params":{"reference":"d.erro"}}}}}},{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-mapaDataSet"}},"prop":"refresh","args":[]}},true]}}},"index":7,"reference":"sl447i_ab2Jf5jnriiyb4","deleteMetadata":{}},{"_id":"e889ae92c249dd9cb616f70a","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"BtnAddPonto","params":{"position":{"component":"data2-core-types@Position","params":{"x":280,"y":688,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":140,"height":34}},"text":"+ adicionar ponto","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#E8F1EA"}}}}]}},"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#1F7A3D"}},"textSize":12,"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":"#1F7A3D"}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"center","verticalAlignment":"middle","fontWeight":"600"}},"onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-functions@StringTrim","params":{"string":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.novo_lat"}}}},"resultName":"la"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-functions@StringTrim","params":{"string":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.novo_lng"}}}},"resultName":"ln"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-logical-operators@And","params":{"components":[{"component":"data2-core-comparison-operators@GreaterThan","params":{"subject":{"component":"data2-core-functions@Count","params":{"subject":{"component":"data2-core-functions@Split","params":{"haystack":{"component":"data2-core-types@Reference","params":{"reference":"la"}},"needle":""}}}},"comparisonSubject":0}},{"component":"data2-core-comparison-operators@GreaterThan","params":{"subject":{"component":"data2-core-functions@Count","params":{"subject":{"component":"data2-core-functions@Split","params":{"haystack":{"component":"data2-core-types@Reference","params":{"reference":"ln"}},"needle":""}}}},"comparisonSubject":0}}]}},"resultName":"temAmbos"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.texto_coords"}},"resultName":"atual"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@LesserThan","params":{"subject":{"component":"data2-core-functions@Count","params":{"subject":{"component":"data2-core-functions@Split","params":{"haystack":{"component":"data2-core-types@Reference","params":{"reference":"atual"}},"needle":""}}}},"comparisonSubject":1}}],"then":"","else":"; "}},"resultName":"sep"}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.texto_coords","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"temAmbos"}}],"then":{"component":"data2-core-functions@StringConcat","params":{"portions":["",{"component":"data2-core-types@Reference","params":{"reference":"atual"}},{"component":"data2-core-types@Reference","params":{"reference":"sep"}},{"component":"data2-core-types@Reference","params":{"reference":"la"}},", ",{"component":"data2-core-types@Reference","params":{"reference":"ln"}}]}},"else":{"component":"data2-core-types@Reference","params":{"reference":"atual"}}}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.novo_lat","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"temAmbos"}}],"then":"","else":{"component":"data2-core-types@Reference","params":{"reference":"la"}}}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.novo_lng","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"temAmbos"}}],"then":"","else":{"component":"data2-core-types@Reference","params":{"reference":"ln"}}}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.msg2","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"temAmbos"}}],"then":"","else":"Preencha lat e lng antes de adicionar."}}}},true]}}},"index":7,"reference":"2WJ28UMV3pyENOp-sUnMo","deleteMetadata":{}},{"_id":"21e2b22b9994590645f21745","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"BtnCalcular","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":736,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":36}},"text":"Salvar vértices e desenhar no mapa","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#1F7A3D"}}}}]}},"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#FFFFFF"}},"textSize":13,"border":{"component":"data2-core-types@Border","params":{"radius":8}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"center","verticalAlignment":"middle","fontWeight":"600"}},"onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-logical-operators@And","params":{"components":[{"component":"data2-core-comparison-operators@Different","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}},"comparisonSubject":null}},{"component":"data2-core-comparison-operators@Different","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}},"comparisonSubject":""}}]}},"resultName":"temArea"}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.msg2","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"temArea"}}],"then":"Calculando...","else":"Salve o talhao primeiro (passo 2)."}}}},{"component":"data2-core-flow@If","params":{"compare":{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"temArea"}},"comparisonSubject":false}},"then":{"component":"data2-core-flow@Return","params":{"result":false}}}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-vertices-set"}},"prop":"invoke","args":[{"body":{"area":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}},"texto":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.texto_coords"}}}}]}},"resultName":"v"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Different","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"v.data"}},"comparisonSubject":null}}],"then":{"component":"data2-core-types@Reference","params":{"reference":"v.data"}},"else":{"component":"data2-core-types@Reference","params":{"reference":"v"}}}},"resultName":"dv"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-calcular"}},"prop":"invoke","args":[{"body":{"area":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}},"nome":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.nome"}}}}]}},"resultName":"c"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Different","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"c.data"}},"comparisonSubject":null}}],"then":{"component":"data2-core-types@Reference","params":{"reference":"c.data"}},"else":{"component":"data2-core-types@Reference","params":{"reference":"c"}}}},"resultName":"dc"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"dc.ok"}},"comparisonSubject":true}},"resultName":"ok"}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.qtd_vertices","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"ok"}}],"then":{"component":"data2-core-types@Reference","params":{"reference":"dc.vertices"}},"else":0}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area_ha","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"ok"}}],"then":{"component":"data2-core-numerical-operators@Divide","params":{"components":[{"component":"data2-core-functions@Round","params":{"value":{"component":"data2-core-numerical-operators@Multiply","params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":"dc.area_ha"}},1000]}}}},1000]}},"else":0}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.perimetro_m","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"ok"}}],"then":{"component":"data2-core-functions@Round","params":{"value":{"component":"data2-core-types@Reference","params":{"reference":"dc.perimetro_m"}}}},"else":0}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.lat","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"ok"}}],"then":{"component":"data2-core-types@Reference","params":{"reference":"dc.centro_lat"}},"else":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.lat"}}}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.lng","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"ok"}}],"then":{"component":"data2-core-types@Reference","params":{"reference":"dc.centro_lng"}},"else":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.lng"}}}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.zoom","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"ok"}}],"then":16,"else":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.zoom"}}}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.msg2","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"ok"}}],"then":"","else":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"dv.ok"}},"comparisonSubject":false}}],"then":{"component":"data2-core-types@Reference","params":{"reference":"dv.erro"}},"else":{"component":"data2-core-types@Reference","params":{"reference":"dc.erro"}}}}}}}},{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-mapaDataSet"}},"prop":"refresh","args":[]}},true]}}},"index":8,"reference":"EHdTOZoAwm7aCqoezgJ4h","deleteMetadata":{}},{"_id":"790567863c943f3328acc8eb","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"LblNome","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":284,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":14}},"text":"Nome do talhão","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":11},"index":8,"reference":"6aaGAaWmMvVO3hDR_I_7P","deleteMetadata":{}},{"_id":"6cf255bdfdf6d017232f8f39","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"Stats2","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":782,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":16}},"text":{"component":"data2-core-functions@StringConcat","params":{"portions":["",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.qtd_vertices"}}," vértices · ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area_ha"}}," ha · perímetro ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.perimetro_m"}}," m"]}},"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#14281C"}},"textSize":12,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":"600"}}},"index":9,"reference":"zTSz98OuCFsXxyDjqXelY","deleteMetadata":{}},{"_id":"dbe4f1740353b68560e34596","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-blocks@DataFieldBlock","system":"67fd353330d0f2317481370b","displayName":"InNome","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"field":"data.nome","placeholder":"ex: Talhão A","super":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":302,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":34}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F7F5"}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":"#D6DED8"}},"textSize":13}},"index":9,"reference":"PZxNIqFCPaEQlrL_HdQ50","deleteMetadata":{}},{"_id":"50c755b408bed5f923f43439","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"LblCultura","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":344,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":14}},"text":"Cultura","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":11},"index":10,"reference":"l0NsNYXhb6qjTe9fsI5Bs","deleteMetadata":{}},{"_id":"a4c7583e23773744fd0b9981","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"Msg2","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":802,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":28}},"text":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.msg2"}},"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#C1440E"}},"textSize":11,"textFormat":{"component":"data2-core-types@TextFormat","params":{"wordWrap":"break-word"}}},"index":10,"reference":"_K8apGH7B1CZ9W44SjZpF","deleteMetadata":{}},{"_id":"37ffa58f32bd85527c1ba7bf","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"Div3","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":838,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":1}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#E6EBE7"}}}}]}}},"index":11,"reference":"gzfbccvxLuLqoQk08saZR","deleteMetadata":{}},{"_id":"d6e59f5bfbcd39fdd6a24892","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-blocks@DataFieldBlock","system":"67fd353330d0f2317481370b","displayName":"InCultura","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"field":"data.cultura","placeholder":"ex: cacau","super":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":362,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":34}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F7F5"}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":"#D6DED8"}},"textSize":13}},"index":11,"reference":"aZvNy48T5bjBmR2DfyvuY","deleteMetadata":{}},{"_id":"406acb8dfd11a7df2ac676f3","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"S4Titulo","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":852,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":16}},"text":"4 · CROQUI DE PLANTIO","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#1F7A3D"}},"textSize":11,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":"700","letterSpacing":1}}},"index":12,"reference":"gkAzHDLn9CF8M8wTlUI0i","deleteMetadata":{}},{"_id":"ee8fa8493caefaedd1bca646","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"LblEspecie","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":992,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":14}},"text":"Espécie","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":11},"index":12,"reference":"dHu-KcSSTy80sFk9VR5rQ","deleteMetadata":{}},{"_id":"011a977934a14f099b44da11","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-blocks@DataFieldBlock","system":"67fd353330d0f2317481370b","displayName":"InEspecie","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"field":"data.especie","placeholder":"ex: cacau","super":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":1008,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":34}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F7F5"}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":"#D6DED8"}},"textSize":13}},"index":13,"reference":"Xb-9Q6Caeh1CG-nPYGawT","deleteMetadata":{}},{"_id":"89d1a8627ca47aa2ff5f4e94","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"LblEspL","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":876,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":195,"height":14}},"text":"entre linhas (m)","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":11},"index":13,"reference":"mPL0tBKUfGMmPv-PxH_3Y","deleteMetadata":{}},{"_id":"72babaec952f6fec3aea35f7","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-blocks@DataFieldBlock","system":"67fd353330d0f2317481370b","displayName":"InEspL","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"field":"data.esp_linhas","type":"number","step":0.5,"min":0.5,"super":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":892,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":195,"height":34}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F7F5"}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":"#D6DED8"}},"textSize":13}},"index":14,"reference":"hg84aWSYhQYQddw6IMeLK","deleteMetadata":{}},{"_id":"b96d47a04323419cb01833cf","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"BtnSalvarArea","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":406,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":36}},"text":"Salvar talhão","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#14281C"}}}}]}},"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#FFFFFF"}},"textSize":13,"border":{"component":"data2-core-types@Border","params":{"radius":8}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"center","verticalAlignment":"middle","fontWeight":"600"}},"onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-area-salvar"}},"prop":"invoke","args":[{"body":{"area":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}},"nome":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.nome"}},"cultura":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.cultura"}},"uf":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.uf"}},"municipio":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.municipio"}},"especie":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.especie"}},"esp_linhas":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.esp_linhas"}},"esp_plantas":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.esp_plantas"}},"rotacao":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.rotacao"}},"recuo":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.recuo"}}}}]}},"resultName":"r"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Different","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"r.data"}},"comparisonSubject":null}}],"then":{"component":"data2-core-types@Reference","params":{"reference":"r.data"}},"else":{"component":"data2-core-types@Reference","params":{"reference":"r"}}}},"resultName":"d"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"d.ok"}},"comparisonSubject":true}},"resultName":"ok"}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"ok"}}],"then":{"component":"data2-core-types@Reference","params":{"reference":"d.area"}},"else":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}}}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.msg","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"ok"}}],"then":{"component":"data2-core-functions@StringConcat","params":{"portions":["","Talhao \"",{"component":"data2-core-types@Reference","params":{"reference":"d.nome"}},"\" salvo. Agora informe os vertices no passo 3."]}},"else":{"component":"data2-core-types@Reference","params":{"reference":"d.erro"}}}}}},true]}}},"index":14,"reference":"OZ0zsTkqmg02H8-gmQ6oA","deleteMetadata":{}},{"_id":"4e4defa31a5d57a4ca4e88c5","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"LblEspP","params":{"position":{"component":"data2-core-types@Position","params":{"x":225,"y":876,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":195,"height":14}},"text":"entre plantas (m)","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":11},"index":15,"reference":"rnEXHAjH_oyYjPY-ULd1f","deleteMetadata":{}},{"_id":"de51663ff4510990175e4839","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"Msg1","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":448,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":16}},"text":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.msg"}},"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#1F7A3D"}},"textSize":11},"index":15,"reference":"NRg0yGCDgffkhkOGRFnek","deleteMetadata":{}},{"_id":"19820064488e35a2ab7e5a5c","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-blocks@DataFieldBlock","system":"67fd353330d0f2317481370b","displayName":"InEspP","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"field":"data.esp_plantas","type":"number","step":0.5,"min":0.5,"super":{"position":{"component":"data2-core-types@Position","params":{"x":225,"y":892,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":195,"height":34}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F7F5"}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":"#D6DED8"}},"textSize":13}},"index":16,"reference":"OpWhHcjs5uFLsTJ10CPsL","deleteMetadata":{}},{"_id":"6824443c7eaf1df0766b3a55","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"Div2","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":472,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":1}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#E6EBE7"}}}}]}}},"index":16,"reference":"TpHyZdUK9DfRBSIbNPLfw","deleteMetadata":{}},{"_id":"d19fcbfc812fd96c23005694","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"LblRot","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":934,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":195,"height":14}},"text":"rotação (graus)","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":11},"index":17,"reference":"4r3Sl_gPvQw8xBWMLuKvj","deleteMetadata":{}},{"_id":"43f2a1f101648b350cd42cc3","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-blocks@DataFieldBlock","system":"67fd353330d0f2317481370b","displayName":"InRot","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"field":"data.rotacao","type":"number","step":5,"min":0,"max":90,"super":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":950,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":195,"height":34}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F7F5"}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":"#D6DED8"}},"textSize":13}},"index":18,"reference":"HG6t0XLs-Rau8aDmt2Apg","deleteMetadata":{}},{"_id":"4cbbf08d5fd47543c0dbe55c","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"LblRecuo","params":{"position":{"component":"data2-core-types@Position","params":{"x":225,"y":934,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":195,"height":14}},"text":"recuo da borda (m)","textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":11},"index":19,"reference":"EI9TurJcgoVbIVbfJEWB6","deleteMetadata":{}},{"_id":"40e00e3481bd300e9c1724ce","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-blocks@DataFieldBlock","system":"67fd353330d0f2317481370b","displayName":"InRecuo","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"field":"data.recuo","type":"number","step":0.5,"min":0,"super":{"position":{"component":"data2-core-types@Position","params":{"x":225,"y":950,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":195,"height":34}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F7F5"}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":"#D6DED8"}},"textSize":13}},"index":20,"reference":"pG_xZYyBch8ipSGDWLCaW","deleteMetadata":{}},{"_id":"4407840db21f147d8cad71c7","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"BtnGerar","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":1052,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":36}},"text":"Gerar croqui","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#C1440E"}}}}]}},"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#FFFFFF"}},"textSize":13,"border":{"component":"data2-core-types@Border","params":{"radius":8}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"center","verticalAlignment":"middle","fontWeight":"600"}},"onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-logical-operators@And","params":{"components":[{"component":"data2-core-comparison-operators@Different","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}},"comparisonSubject":null}},{"component":"data2-core-comparison-operators@Different","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}},"comparisonSubject":""}}]}},"resultName":"temArea"}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.msg3","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"temArea"}}],"then":"Gerando croqui...","else":"Salve o talhao e os vertices primeiro."}}}},{"component":"data2-core-flow@If","params":{"compare":{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"temArea"}},"comparisonSubject":false}},"then":{"component":"data2-core-flow@Return","params":{"result":false}}}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-area-salvar"}},"prop":"invoke","args":[{"body":{"area":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}},"nome":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.nome"}},"cultura":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.cultura"}},"uf":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.uf"}},"municipio":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.municipio"}},"especie":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.especie"}},"esp_linhas":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.esp_linhas"}},"esp_plantas":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.esp_plantas"}},"rotacao":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.rotacao"}},"recuo":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.recuo"}}}}]}},"resultName":"s"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-gerar-croqui"}},"prop":"invoke","args":[{"body":{"area":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}}}}]}},"resultName":"g"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Different","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"g.data"}},"comparisonSubject":null}}],"then":{"component":"data2-core-types@Reference","params":{"reference":"g.data"}},"else":{"component":"data2-core-types@Reference","params":{"reference":"g"}}}},"resultName":"d"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"d.ok"}},"comparisonSubject":true}},"resultName":"ok"}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.qtd_plantas","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"ok"}}],"then":{"component":"data2-core-types@Reference","params":{"reference":"d.plantas"}},"else":0}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.densidade","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"ok"}}],"then":{"component":"data2-core-functions@Round","params":{"value":{"component":"data2-core-types@Reference","params":{"reference":"d.densidade_por_ha"}}}},"else":0}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.msg3","value":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Reference","params":{"reference":"ok"}}],"then":{"component":"data2-core-functions@StringConcat","params":{"portions":["","Rascunho com ",{"component":"data2-core-types@Reference","params":{"reference":"d.plantas"}}," plantas em ",{"component":"data2-core-types@Reference","params":{"reference":"d.linhas"}}," linhas. Confira no mapa e salve."]}},"else":{"component":"data2-core-types@Reference","params":{"reference":"d.erro"}}}}}},{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-mapaDataSet"}},"prop":"refresh","args":[]}},true]}}},"index":21,"reference":"78vWHbtbHimaQVEtl-xx2","deleteMetadata":{}},{"_id":"f11631f3bdf057891f7f54d0","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"BtnLimpar","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":1264,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":36}},"text":"Limpar","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-types@Color","params":{"rgba":"#F4F7F5"}}}}]}},"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#6B7A70"}},"textSize":13,"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":"#D6DED8"}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"center","verticalAlignment":"middle","fontWeight":"600"}},"onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-logical-operators@And","params":{"components":[{"component":"data2-core-comparison-operators@Different","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}},"comparisonSubject":null}},{"component":"data2-core-comparison-operators@Different","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}},"comparisonSubject":""}}]}},"resultName":"temArea"}},{"component":"data2-core-flow@If","params":{"compare":{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"temArea"}},"comparisonSubject":false}},"then":{"component":"data2-core-flow@Return","params":{"result":false}}}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-limpar-croqui"}},"prop":"invoke","args":[{"body":{"area":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.area"}}}}]}},"resultName":"r"}},{"component":"data2-core-flow@Step","params":{"action":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Different","params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":"r.data"}},"comparisonSubject":null}}],"then":{"component":"data2-core-types@Reference","params":{"reference":"r.data"}},"else":{"component":"data2-core-types@Reference","params":{"reference":"r"}}}},"resultName":"d"}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.qtd_plantas","value":0}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.densidade","value":0}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.msg3","value":{"component":"data2-core-functions@StringConcat","params":{"portions":["","Croqui limpo (",{"component":"data2-core-types@Reference","params":{"reference":"d.removidas"}}," plantas removidas)."]}}}},{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-mapaDataSet"}},"prop":"refresh","args":[]}},true]}}},"index":22,"reference":"2USzYXtCwOo7QY64bH0O4","deleteMetadata":{}},{"_id":"a97f0f4baf916721ebe2202c","parent":"c333ba1eaaddf7ea5e1ad905","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"Msg3","params":{"position":{"component":"data2-core-types@Position","params":{"x":20,"y":1308,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":28}},"text":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.msg3"}},"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#C1440E"}},"textSize":11,"textFormat":{"component":"data2-core-types@TextFormat","params":{"wordWrap":"break-word"}}},"index":23,"reference":"9dTSwV_Buufn9Ri7M3Ahi","deleteMetadata":{}},{"_id":"e519770dec4d734d91019c4b","parent":"b0ccab3cc57602d2336e6137","component":"data2-blocks@DataMap","system":"67fd353330d0f2317481370b","displayName":"MapaCroqui","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-mapaDataSet"}},"latField":"lat","lngField":"lng","markerField":"nome","polyLineField":"linha","provider":"Esri.WorldImagery","initialCenterLat":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.lat"}},"initialCenterLng":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.lng"}},"initialZoom":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.zoom"}},"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":952,"height":816}}}},"index":0,"reference":"IREtVhcp44hi9ep4KtRps","deleteMetadata":{}},{"_id":"0662a6a2cb0b79429ba1d4be","parent":"9376652d2dc39435f44a68e5","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"UfRow","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":110,"height":26}},"text":{"component":"data2-core-types@Reference","params":{"reference":"ufRepeater.uf"}},"textSize":12,"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#14281C"}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"center","verticalAlignment":"middle","fontWeight":"600"}},"onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.uf","value":{"component":"data2-core-types@Reference","params":{"reference":"ufRepeater.uf"}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.lat","value":{"component":"data2-core-types@Reference","params":{"reference":"ufRepeater.lat"}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.lng","value":{"component":"data2-core-types@Reference","params":{"reference":"ufRepeater.lng"}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.zoom","value":{"component":"data2-core-types@Reference","params":{"reference":"ufRepeater.zoom"}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.municipio","value":""}},{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5-municipiosDataSet"}},"prop":"filter","args":[{"uf":{"component":"data2-core-types@Reference","params":{"reference":"ufRepeater.uf"}}}]}},true]}}},"index":0,"reference":"N9HHGetMcBqxJqHOQTYu7","deleteMetadata":{}},{"_id":"fa00c38623c5d5e5a1ab2af9","parent":"b5b62e3b1dfc77b1e83e27f8","component":"data2-core-primitives@Block","system":"67fd353330d0f2317481370b","displayName":"MunRow","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":280,"height":26}},"text":{"component":"data2-core-types@Reference","params":{"reference":"munRepeater.nome"}},"textSize":12,"textColor":{"component":"data2-core-types@Color","params":{"rgba":"#14281C"}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"center","verticalAlignment":"middle"}},"onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.municipio","value":{"component":"data2-core-types@Reference","params":{"reference":"munRepeater.nome"}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.uf","value":{"component":"data2-core-types@Reference","params":{"reference":"munRepeater.uf"}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.lat","value":{"component":"data2-core-types@Reference","params":{"reference":"munRepeater.lat"}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.lng","value":{"component":"data2-core-types@Reference","params":{"reference":"munRepeater.lng"}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"v5Store"}},"prop":"data.zoom","value":{"component":"data2-core-types@Reference","params":{"reference":"munRepeater.zoom"}}}},true]}}},"index":0,"reference":"TxLGdSS6NVMUguD98YlSA","deleteMetadata":{}}]}},{"_id":"5fc4faeec8da12be8bf3d08a","component":"data2-core@Data2TableDataSource","system":"5e3b796d6228227ca637d0f4","params":{"paginate":{"default":1000},"super":{},"table":"fileComponentInstances","schema":[{"component":"data2-core-types@Field","params":{"key":"component","title":"Component","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"system","title":"System","component":"data2-core-primitives@ObjectId"}},{"component":"data2-core-types@Field","params":{"key":"displayName","title":"Display Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"params","title":"Params","component":"data2-core-primitives@Object"}},{"component":"data2-core-types@Field","params":{"key":"reference","title":"Reference","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"fileId"}},"title":"File ID","component":"data2-core-primitives@ObjectId"},"break":true}],"hooks":{"before":{"all":[{"hook":"softDelete"}],"find":[{"hook":"useCache","options":{"additionalGroupKeys":["$and.0.system","$and.1.system"],"skipCache":true}}],"create":[{"hook":"timestamp","options":{"fields":["createdAt","updatedAt"]}}],"update":[{"hook":"timestamp","options":{"fields":["updatedAt"]}}],"patch":[{"hook":"timestamp","options":{"fields":["updatedAt"]}}]},"after":{"all":[{"hook":"fileUrl","options":{"downloadField":"params.fileUrl","uploadField":"params.uploadFileUrl","enhanceSchema":false}}],"find":[{"hook":"useCache","options":{"additionalGroupKeys":["$and.0.system","$and.1.system"],"skipCache":true}}],"create":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}],"update":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}],"patch":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}],"remove":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}]}},"multi":["create"],"useEstimatedDocumentCount":true},"reference":"FileComponentInstancesTableDataSource","updatedAt":"2022-12-19T20:42:51.837Z","createdAt":"2020-11-30T13:59:52.294Z"},{"reference":"ApplicationsTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6aad74e62086c2e4340b8b6e","displayName":"Croqui Nativo","reference":"W-Kl_tZlsA5kvpxY87ee7","params":{"domain":{"component":"data2-core-primitives@String","params":{"content":"croqui-nativo"}},"entryPoint":{"component":"data2-core-types@ComponentInstanceReference","params":{"component":"data2-core-primitives@Artboard","reference":"UFlNWarPd0z3fjr2dP5Yl"}}},"system":"67fd353330d0f2317481370b","component":"data2-core-primitives@Application"}]}},{"reference":"DataComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a46b6df8c5c69fa78ef0fa7","component":"data2-core@DataSet","system":"67fd353330d0f2317481370b","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"pacientes"}}},"reference":"pacientesDataSet"},{"_id":"6aad736c01be65c4a08af5eb","component":"data2-core@Store","system":"67fd353330d0f2317481370b","params":{"initialData":{"uf":"PA","municipio":"Tome-Acu","lat":-2.4189,"lng":-48.1522,"zoom":14,"area":"","nome":"","cultura":"","especie":"","esp_linhas":4,"esp_plantas":3,"rotacao":0,"recuo":1,"texto_coords":"","novo_lat":"","novo_lng":"","msg":"","msg2":"","msg3":"","area_ha":0,"perimetro_m":0,"qtd_vertices":0,"qtd_plantas":0,"densidade":0}},"reference":"v5Store","deleteMetadata":{}},{"_id":"6aad71cc0aa5a08ba870419d","component":"data2-core@DataSet","system":"67fd353330d0f2317481370b","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"v5-ufs"}}},"reference":"v5-ufsDataSet","deleteMetadata":{}},{"_id":"6aad71ce2086c2e4340b854b","component":"data2-core@DataSet","system":"67fd353330d0f2317481370b","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"v5-municipios"}}},"reference":"v5-municipiosDataSet","deleteMetadata":{}},{"_id":"6aad71dd4ef0bfdfc9a5e8b3","component":"data2-core@DataSet","system":"67fd353330d0f2317481370b","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"v5-mapa"}}},"reference":"v5-mapaDataSet","deleteMetadata":{}},{"_id":"6a46b6df009d0168e5afc150","component":"data2-core@Data2TableDataSource","system":"67fd353330d0f2317481370b","params":{"table":"pacientes","schema":[{"component":"data2-core-types@Field","params":{"key":"nome","title":"Nome","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"email","title":"Email","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"idade","title":"Idade","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"sexo","title":"Sexo","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"altura_cm","title":"Altura (cm)","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"peso_kg","title":"Peso (kg)","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"cintura_cm","title":"Cintura (cm)","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"quadril_cm","title":"Quadril (cm)","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"gordura_pct","title":"Gordura corporal (%)","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"objetivo","title":"Objetivo","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"nivel_atividade","title":"Nível de atividade","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"observacoes","title":"Observações","component":"data2-core-primitives@String"}}]},"reference":"pacientes"},{"_id":"6aad71cc642c11f78630d696","component":"data2-core@Data2TableDataSource","system":"67fd353330d0f2317481370b","params":{"table":"v5-ufs","schema":[{"component":"data2-core-types@Field","params":{"key":"uf","title":"UF","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"nome","title":"Nome","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"lat","title":"Lat","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"lng","title":"Lng","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"zoom","title":"Zoom","component":"data2-core-primitives@Number"}}]},"reference":"v5-ufs","deleteMetadata":{}},{"_id":"6aad71ce850d506c9bd44d6c","component":"data2-core@Data2TableDataSource","system":"67fd353330d0f2317481370b","params":{"table":"v5-municipios","schema":[{"component":"data2-core-types@Field","params":{"key":"uf","title":"UF","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"nome","title":"Municipio","component":"data2-core-primitives@String","required":true}},{"component":"data2-core-types@Field","params":{"key":"lat","title":"Lat","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"lng","title":"Lng","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"zoom","title":"Zoom","component":"data2-core-primitives@Number"}}]},"reference":"v5-municipios","deleteMetadata":{}},{"_id":"6aad71dd8896e6d9b55adcae","component":"data2-core@Data2TableDataSource","system":"67fd353330d0f2317481370b","params":{"table":"v5-mapa","schema":[{"component":"data2-core-types@Field","params":{"key":"area","title":"Area","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"tipo","title":"Tipo","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"nome","title":"Nome","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"especie","title":"Especie","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"lat","title":"Lat","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"lng","title":"Lng","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"linha","title":"Contorno (polyline)","component":"data2-core-primitives@Array"}},{"component":"data2-core-types@Field","params":{"key":"num_linha","title":"Linha","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"num_planta","title":"Planta","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"status","title":"Status","component":"data2-core-primitives@String"}}]},"reference":"v5-mapa","deleteMetadata":{}}]}},{"reference":"BundlesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}}],"processesParams":{}}}}