{"context":{"domain":"gabz-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":"6863d782e78450ee0fd57fc7","name":"Gabz Playground","domain":"gabz-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":"6a2ec1892ae3e526cfd27564","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"ant-input","package":"gabz-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 ANT_DEFAULTS = { colorPrimary:'#1677ff', colorPrimaryHover:'#4096ff', colorPrimaryActive:'#0958d9', colorPrimaryBg:'#e6f4ff', colorSuccess:'#52c41a', colorSuccessBg:'#f6ffed', colorWarning:'#faad14', colorWarningBg:'#fffbe6', colorError:'#ff4d4f', colorErrorBg:'#fff2f0', colorInfo:'#1677ff', colorInfoBg:'#e6f4ff', colorText:'rgba(0,0,0,0.88)', colorTextSecondary:'rgba(0,0,0,0.65)', colorTextTertiary:'rgba(0,0,0,0.45)', colorTextDisabled:'rgba(0,0,0,0.25)', colorTextLightSolid:'#ffffff', colorBorder:'#d9d9d9', colorBorderSecondary:'#f0f0f0', colorBgContainer:'#ffffff', colorBgContainerDisabled:'rgba(0,0,0,0.04)', colorFillTertiary:'rgba(0,0,0,0.04)', colorFillSecondary:'rgba(0,0,0,0.06)', colorFill:'rgba(0,0,0,0.15)', borderRadius:6, borderRadiusSM:4, borderRadiusLG:8, controlHeight:32, controlHeightSM:24, controlHeightLG:40, fontSize:14, fontSizeSM:12, fontSizeLG:16, lineWidth:1, fontFamily:\"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif\" };\n\nfunction resolveTokens(p){ const tk=(p.tokens&&typeof p.tokens==='object')?p.tokens:{}; let sem=tk; if(tk.semanticsLight||tk.semanticsDark){ sem=tk.darkMode?(tk.semanticsDark||{}):(tk.semanticsLight||{}); } const D=Object.assign({},ANT_DEFAULTS); for(const k in sem){ let v=sem[k]; if(v==null||v==='')continue; if(typeof v==='object')v=v.rgba||v.hex||v.value||v.color; if(v!=null&&v!=='')D[k]=v; } if(tk.fontFamily)D.fontFamily=tk.fontFamily; if((tk.density||'comfortable')==='compact'){D.controlHeight=28;D.controlHeightSM=22;D.controlHeightLG=36;} return D; }\n\nfunction esc(s){ return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;'); }\n\nexport default {\n  css: `\n    @import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css');\n    .ant-input-wrap{ box-sizing:border-box; display:inline-flex; align-items:center; gap:8px; width:100%;\n      height:var(--h); padding:0 11px; font-size:var(--fs); font-family:var(--ff); color:var(--fg);\n      background:var(--bg); border:var(--bw) solid var(--bc); border-radius:var(--radius);\n      transition:all .2s; cursor:text; }\n    .ant-input-wrap.borderless{ border-color:transparent; background:transparent; }\n    .ant-input-wrap:not(.disabled):hover{ border-color:var(--bc-h); }\n    .ant-input-wrap:not(.disabled):focus-within{ border-color:var(--bc-f); box-shadow:0 0 0 2px var(--ring); }\n    .ant-input-wrap.borderless:focus-within{ box-shadow:none; }\n    .ant-input-wrap.disabled{ background:var(--bg-dis); color:var(--fg-dis); cursor:not-allowed; }\n    .ant-input-wrap .ant-input-el{ flex:1 1 auto; min-width:0; border:none; outline:none; background:transparent;\n      font-size:inherit; font-family:inherit; color:inherit; line-height:1.5; padding:0; margin:0; height:100%; }\n    .ant-input-wrap.disabled .ant-input-el{ cursor:not-allowed; }\n    .ant-input-wrap .ant-input-el::placeholder{ color:var(--fg-ph); }\n    .ant-input-wrap .ic{ display:inline-flex; align-items:center; justify-content:center; font-size:1em; line-height:0; color:var(--fg-tert); flex:none; }\n    .ant-input-wrap .ant-act{ cursor:pointer; color:var(--fg-tert); transition:color .2s; flex:none; display:inline-flex; align-items:center; }\n    .ant-input-wrap .ant-act:hover{ color:var(--fg-sec); }\n  `,\n  render(d2){\n    const p = d2.params || {};\n    const D = resolveTokens(p);\n    const size = p.size || 'middle';\n    const variant = p.variant || 'outlined';\n    const status = p.status || '';\n    const disabled = !!p.disabled;\n    const allowClear = !!p.allowClear;\n    const password = !!p.password;\n\n    if(d2.state.value === undefined){ d2.state.value = p.value != null ? String(p.value) : ''; }\n    const val = d2.state.value;\n\n    const SZ = ({ small:{h:D.controlHeightSM,fs:D.fontSizeSM,r:D.borderRadiusSM}, large:{h:D.controlHeightLG,fs:D.fontSizeLG,r:D.borderRadiusLG}, middle:{h:D.controlHeight,fs:D.fontSize,r:D.borderRadius} })[size] || { h:D.controlHeight, fs:D.fontSize, r:D.borderRadius };\n\n    let bc = D.colorBorder, bch = D.colorPrimaryHover, bcf = D.colorPrimary, ring = 'rgba(5,145,255,0.1)';\n    if(status === 'error'){ bc = D.colorError; bch = D.colorError; bcf = D.colorError; ring = 'rgba(255,38,5,0.06)'; }\n    else if(status === 'warning'){ bc = D.colorWarning; bch = D.colorWarning; bcf = D.colorWarning; ring = 'rgba(255,215,5,0.1)'; }\n\n    let bg = D.colorBgContainer, bw = D.lineWidth;\n    if(variant === 'filled'){ bg = D.colorFillTertiary; if(!status) bc = 'transparent'; }\n    else if(variant === 'borderless'){ bg = 'transparent'; bw = 0; }\n\n    const style = [\n      '--h:'+SZ.h+'px', '--fs:'+SZ.fs+'px', '--radius:'+SZ.r+'px',\n      '--bw:'+bw+'px', '--bc:'+bc, '--bc-h:'+bch, '--bc-f:'+bcf, '--ring:'+ring,\n      '--bg:'+bg, '--fg:'+D.colorText, '--fg-ph:'+D.colorTextTertiary, '--fg-tert:'+D.colorTextTertiary,\n      '--fg-sec:'+D.colorTextSecondary, '--bg-dis:'+D.colorBgContainerDisabled, '--fg-dis:'+D.colorTextDisabled,\n      '--ff:'+D.fontFamily\n    ].join(';');\n\n    const cls = ['ant-input-wrap'];\n    if(variant === 'borderless') cls.push('borderless');\n    if(disabled) cls.push('disabled');\n\n    function iconHtml(glyph){\n      if(!glyph) return '';\n      if(String(glyph).trim().charAt(0) === '<') return '<span class=\"ic\">'+glyph+'</span>';\n      const isFa = /(^|\\s)fa[srlbd]?(\\s|-)/.test(glyph);\n      return isFa ? '<span class=\"ic\"><i class=\"'+esc(glyph)+'\"></i></span>' : '<span class=\"ic\">'+esc(glyph)+'</span>';\n    }\n\n    const prefix = iconHtml(p.prefixGlyph);\n\n    let suffix = '';\n    if(allowClear && val && !disabled){\n      suffix += '<span class=\"ant-act ant-clear\" title=\"clear\"><i class=\"fa fa-times-circle\"></i></span>';\n    }\n    if(password){\n      const revealed = !!d2.state.reveal;\n      suffix += '<span class=\"ant-act ant-eye\"><i class=\"fa '+(revealed?'fa-eye':'fa-eye-slash')+'\"></i></span>';\n    }\n    if(p.suffixGlyph) suffix += iconHtml(p.suffixGlyph);\n\n    const inputType = (password && !d2.state.reveal) ? 'password' : 'text';\n    const maxAttr = (p.maxLength != null && p.maxLength !== '') ? ' maxlength=\"'+esc(p.maxLength)+'\"' : '';\n\n    const inputEl = '<input class=\"ant-input-el\" type=\"'+inputType+'\" value=\"'+esc(val)+'\"'\n      + ' placeholder=\"'+esc(p.placeholder != null ? p.placeholder : '')+'\"'\n      + (disabled?' disabled':'') + maxAttr + ' />';\n\n    return '<div class=\"'+cls.join(' ')+'\" style=\"'+style+'\">'+prefix+inputEl+suffix+'</div>';\n  },\n  mounted(d2){\n    d2.on('.ant-input-el','input',(e,el)=>{\n      d2.state.value = el.value;\n      d2.emit('onChange', el.value);\n    });\n    d2.on('.ant-input-el','keydown',(e,el)=>{\n      if(e.key === 'Enter'){ d2.emit('onPressEnter', el.value); }\n    });\n    d2.on('.ant-clear','click',(e)=>{\n      e.stopPropagation();\n      d2.state.value = '';\n      d2.emit('onChange', '');\n      const inp = d2.$('.ant-input-el'); if(inp) inp.focus();\n    });\n    d2.on('.ant-eye','click',(e)=>{\n      e.stopPropagation();\n      d2.state.reveal = !d2.state.reveal;\n    });\n    d2.on('.ant-input-wrap','mousedown',(e,el)=>{\n      if(e.target.closest('.ant-act')) return;\n      if(e.target.classList && e.target.classList.contains('ant-input-el')) return;\n      e.preventDefault();\n      const inp = d2.$('.ant-input-el'); if(inp && !d2.params.disabled) inp.focus();\n    });\n  }\n};"}},"value":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"value"}}}},"placeholder":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"placeholder"}}}},"size":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"size"}}}},"variant":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"variant"}}}},"status":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"status"}}}},"disabled":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"disabled"}}}},"allowClear":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"allowClear"}}}},"prefixGlyph":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"prefixGlyph"}}}},"suffixGlyph":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"suffixGlyph"}}}},"password":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"password"}}}},"maxLength":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"maxLength"}}}},"onChange":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"onChange"}}}},"onPressEnter":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"onPressEnter"}}}},"tokens":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tokens"}}}}}}}}}},{"_id":"6a4693c6bf38d382814feb4c","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"component":"crm-tokens","package":"gabz-playground","definition":{"darkMode":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}},"density":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.density"}},"fontFamily":"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif","semanticsLight":{"colorPrimary":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}},"colorPrimaryHover":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 72%, white)"]}},"colorPrimaryActive":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 80%, black)"]}},"colorPrimaryBg":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 8%, white)"]}},"colorPrimaryBgHover":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 16%, white)"]}},"colorSuccess":"#22c55e","colorSuccessHover":"color-mix(in srgb, #22c55e 72%, white)","colorSuccessActive":"color-mix(in srgb, #22c55e 80%, black)","colorSuccessBg":"color-mix(in srgb, #22c55e 8%, white)","colorSuccessBgHover":"color-mix(in srgb, #22c55e 16%, white)","colorWarning":"#f59e0b","colorWarningHover":"color-mix(in srgb, #f59e0b 72%, white)","colorWarningActive":"color-mix(in srgb, #f59e0b 80%, black)","colorWarningBg":"color-mix(in srgb, #f59e0b 8%, white)","colorWarningBgHover":"color-mix(in srgb, #f59e0b 16%, white)","colorError":"#ef4444","colorErrorHover":"color-mix(in srgb, #ef4444 72%, white)","colorErrorActive":"color-mix(in srgb, #ef4444 80%, black)","colorErrorBg":"color-mix(in srgb, #ef4444 8%, white)","colorErrorBgHover":"color-mix(in srgb, #ef4444 16%, white)","colorInfo":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}},"colorInfoHover":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 72%, white)"]}},"colorInfoActive":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 80%, black)"]}},"colorInfoBg":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 8%, white)"]}},"colorInfoBgHover":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 16%, white)"]}},"colorText":"rgba(0,0,0,0.88)","colorTextSecondary":"rgba(0,0,0,0.65)","colorTextTertiary":"rgba(0,0,0,0.45)","colorTextDisabled":"rgba(0,0,0,0.25)","colorTextLightSolid":"#ffffff","colorBorder":"#d9d9d9","colorBorderSecondary":"#f0f0f0","colorBgContainer":"#ffffff","colorBgLayout":"#f5f5f5","colorBgContainerDisabled":"rgba(0,0,0,0.04)","colorBgSolid":"rgba(0,0,0,0.88)","colorBgSolidHover":"rgba(0,0,0,0.75)","colorBgSolidActive":"#000000","colorFillTertiary":"rgba(0,0,0,0.04)","colorFillSecondary":"rgba(0,0,0,0.06)","colorFill":"rgba(0,0,0,0.15)","colorBgTextHover":"rgba(0,0,0,0.06)","colorBgTextActive":"rgba(0,0,0,0.15)"},"semanticsDark":{"colorPrimary":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 86%, white)"]}},"colorPrimaryHover":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 66%, white)"]}},"colorPrimaryActive":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 78%, black)"]}},"colorPrimaryBg":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 22%, black)"]}},"colorPrimaryBgHover":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 32%, black)"]}},"colorSuccess":"color-mix(in srgb, #22c55e 86%, white)","colorSuccessHover":"color-mix(in srgb, #22c55e 66%, white)","colorSuccessActive":"color-mix(in srgb, #22c55e 78%, black)","colorSuccessBg":"color-mix(in srgb, #22c55e 22%, black)","colorSuccessBgHover":"color-mix(in srgb, #22c55e 32%, black)","colorWarning":"color-mix(in srgb, #f59e0b 86%, white)","colorWarningHover":"color-mix(in srgb, #f59e0b 66%, white)","colorWarningActive":"color-mix(in srgb, #f59e0b 78%, black)","colorWarningBg":"color-mix(in srgb, #f59e0b 22%, black)","colorWarningBgHover":"color-mix(in srgb, #f59e0b 32%, black)","colorError":"color-mix(in srgb, #ef4444 86%, white)","colorErrorHover":"color-mix(in srgb, #ef4444 66%, white)","colorErrorActive":"color-mix(in srgb, #ef4444 78%, black)","colorErrorBg":"color-mix(in srgb, #ef4444 22%, black)","colorErrorBgHover":"color-mix(in srgb, #ef4444 32%, black)","colorInfo":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 86%, white)"]}},"colorInfoHover":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 66%, white)"]}},"colorInfoActive":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 78%, black)"]}},"colorInfoBg":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 22%, black)"]}},"colorInfoBgHover":{"component":"data2-core-functions@StringConcat","params":{"portions":["","color-mix(in srgb, ",{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.accent"}}," 32%, black)"]}},"colorText":"rgba(255,255,255,0.85)","colorTextSecondary":"rgba(255,255,255,0.65)","colorTextTertiary":"rgba(255,255,255,0.45)","colorTextDisabled":"rgba(255,255,255,0.25)","colorTextLightSolid":"#ffffff","colorBorder":"#424242","colorBorderSecondary":"#303030","colorBgContainer":"#141414","colorBgLayout":"#0f0f0f","colorBgContainerDisabled":"rgba(255,255,255,0.08)","colorBgSolid":"rgba(255,255,255,0.85)","colorBgSolidHover":"rgba(255,255,255,0.95)","colorBgSolidActive":"#ffffff","colorFillTertiary":"rgba(255,255,255,0.08)","colorFillSecondary":"rgba(255,255,255,0.12)","colorFill":"rgba(255,255,255,0.18)","colorBgTextHover":"rgba(255,255,255,0.08)","colorBgTextActive":"rgba(255,255,255,0.15)"}}}},{"_id":"6a2ec14c9307b10171573747","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"ant-switch","package":"gabz-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 ANT_DEFAULTS = { colorPrimary:'#1677ff', colorPrimaryHover:'#4096ff', colorPrimaryActive:'#0958d9', colorPrimaryBg:'#e6f4ff', colorSuccess:'#52c41a', colorSuccessBg:'#f6ffed', colorWarning:'#faad14', colorWarningBg:'#fffbe6', colorError:'#ff4d4f', colorErrorBg:'#fff2f0', colorInfo:'#1677ff', colorInfoBg:'#e6f4ff', colorText:'rgba(0,0,0,0.88)', colorTextSecondary:'rgba(0,0,0,0.65)', colorTextTertiary:'rgba(0,0,0,0.45)', colorTextDisabled:'rgba(0,0,0,0.25)', colorTextLightSolid:'#ffffff', colorBorder:'#d9d9d9', colorBorderSecondary:'#f0f0f0', colorBgContainer:'#ffffff', colorBgContainerDisabled:'rgba(0,0,0,0.04)', colorFillTertiary:'rgba(0,0,0,0.04)', colorFillSecondary:'rgba(0,0,0,0.06)', colorFill:'rgba(0,0,0,0.15)', borderRadius:6, borderRadiusSM:4, borderRadiusLG:8, controlHeight:32, controlHeightSM:24, controlHeightLG:40, fontSize:14, fontSizeSM:12, fontSizeLG:16, lineWidth:1, fontFamily:\"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif\" };\nfunction resolveTokens(p){ const tk=(p.tokens&&typeof p.tokens==='object')?p.tokens:{}; let sem=tk; if(tk.semanticsLight||tk.semanticsDark){ sem=tk.darkMode?(tk.semanticsDark||{}):(tk.semanticsLight||{}); } const D=Object.assign({},ANT_DEFAULTS); for(const k in sem){ let v=sem[k]; if(v==null||v==='')continue; if(typeof v==='object')v=v.rgba||v.hex||v.value||v.color; if(v!=null&&v!=='')D[k]=v; } if(tk.fontFamily)D.fontFamily=tk.fontFamily; if((tk.density||'comfortable')==='compact'){D.controlHeight=28;D.controlHeightSM=22;D.controlHeightLG=36;} return D; }\nfunction esc(s){ return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;'); }\n\nexport default {\n  css: `\n    .ant-switch{ box-sizing:border-box; display:inline-flex; align-items:center; position:relative;\n      border:0; outline:none; cursor:pointer; user-select:none; vertical-align:middle; padding:0;\n      transition:background .2s,opacity .2s; }\n    .ant-switch.disabled{ opacity:.4; cursor:not-allowed; }\n    .ant-switch.loading{ cursor:default; }\n    .ant-switch .knob{ position:absolute; top:2px; background:#fff; border-radius:50%;\n      transition:left .2s cubic-bezier(.4,0,.2,1),right .2s cubic-bezier(.4,0,.2,1);\n      box-shadow:0 2px 4px 0 rgba(0,35,11,.2); display:flex; align-items:center; justify-content:center; }\n    .ant-switch .inner{ color:#fff; font-size:12px; line-height:1; white-space:nowrap; }\n    .ant-switch .spin{ border:2px solid currentColor; border-top-color:transparent; border-radius:50%;\n      display:inline-block; animation:antswspin .8s linear infinite; }\n    @keyframes antswspin{ to{ transform:rotate(360deg); } }\n  `,\n  render(d2){\n    const p = d2.params || {};\n    const D = resolveTokens(p);\n    const small = (p.size || 'default') === 'small';\n    const disabled = !!p.disabled;\n    const loading = !!p.loading;\n    // Controlled: always mirror the `checked` prop so external state (e.g. store) drives the switch in BOTH directions.\n    d2.state.checked = !!p.checked;\n    const on = !!d2.state.checked;\n\n    const W = small ? 28 : 44;\n    const H = small ? 16 : 22;\n    const K = small ? 12 : 18;\n    const trackBg = on ? D.colorPrimary : 'rgba(0,0,0,0.25)';\n    const knobLeft = on ? (W - K - 2) : 2;\n    const knobColor = on ? D.colorPrimary : 'rgba(0,0,0,0.45)';\n\n    const classes = ['ant-switch'];\n    if(disabled) classes.push('disabled');\n    if(loading) classes.push('loading');\n\n    const style = 'min-width:'+W+'px;width:'+W+'px;height:'+H+'px;border-radius:'+H+'px;background:'+trackBg+';font-family:'+D.fontFamily+';';\n\n    const label = on ? p.checkedLabel : p.uncheckedLabel;\n    let innerHtml = '';\n    if(label != null && label !== ''){\n      const padOn = '0 '+(K + 4)+'px 0 0';\n      const padOff = '0 0 0 '+(K + 4)+'px';\n      innerHtml = '<span class=\"inner\" style=\"font-size:12px;padding:'+(on?padOn:padOff)+';\">'+esc(label)+'</span>';\n    }\n\n    const spinSz = small ? 8 : 12;\n    const knobInner = loading ? '<span class=\"spin\" style=\"width:'+spinSz+'px;height:'+spinSz+'px;color:'+knobColor+';\"></span>' : '';\n    const knobStyle = 'width:'+K+'px;height:'+K+'px;left:'+knobLeft+'px;';\n\n    return '<button type=\"button\" role=\"switch\" aria-checked=\"'+on+'\" class=\"'+classes.join(' ')+'\" style=\"'+style+'\"'+(disabled?' disabled':'')+'>'+innerHtml+'<span class=\"knob\" style=\"'+knobStyle+'\">'+knobInner+'</span></button>';\n  },\n  mounted(d2){\n    d2.on('.ant-switch','click',()=>{\n      const p = d2.params || {};\n      if(p.disabled || p.loading) return;\n      d2.state.checked = !d2.state.checked;\n      d2.emit('onChange', d2.state.checked);\n    });\n  }\n};"}},"checked":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"checked"}}}},"disabled":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"disabled"}}}},"size":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"size"}}}},"checkedLabel":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"checkedLabel"}}}},"uncheckedLabel":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"uncheckedLabel"}}}},"loading":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"loading"}}}},"onChange":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"onChange"}}}},"tokens":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tokens"}}}}}}}}}},{"_id":"6a2ec148ed769e0c58256ae8","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"ant-avatar","package":"gabz-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 ANT_DEFAULTS = { colorPrimary:'#1677ff', colorPrimaryHover:'#4096ff', colorPrimaryActive:'#0958d9', colorPrimaryBg:'#e6f4ff', colorSuccess:'#52c41a', colorSuccessBg:'#f6ffed', colorWarning:'#faad14', colorWarningBg:'#fffbe6', colorError:'#ff4d4f', colorErrorBg:'#fff2f0', colorInfo:'#1677ff', colorInfoBg:'#e6f4ff', colorText:'rgba(0,0,0,0.88)', colorTextSecondary:'rgba(0,0,0,0.65)', colorTextTertiary:'rgba(0,0,0,0.45)', colorTextDisabled:'rgba(0,0,0,0.25)', colorTextLightSolid:'#ffffff', colorBorder:'#d9d9d9', colorBorderSecondary:'#f0f0f0', colorBgContainer:'#ffffff', colorBgContainerDisabled:'rgba(0,0,0,0.04)', colorFillTertiary:'rgba(0,0,0,0.04)', colorFillSecondary:'rgba(0,0,0,0.06)', colorFill:'rgba(0,0,0,0.15)', borderRadius:6, borderRadiusSM:4, borderRadiusLG:8, controlHeight:32, controlHeightSM:24, controlHeightLG:40, fontSize:14, fontSizeSM:12, fontSizeLG:16, lineWidth:1, fontFamily:\"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif\" };\nfunction resolveTokens(p){ const tk=(p.tokens&&typeof p.tokens==='object')?p.tokens:{}; let sem=tk; if(tk.semanticsLight||tk.semanticsDark){ sem=tk.darkMode?(tk.semanticsDark||{}):(tk.semanticsLight||{}); } const D=Object.assign({},ANT_DEFAULTS); for(const k in sem){ let v=sem[k]; if(v==null||v==='')continue; if(typeof v==='object')v=v.rgba||v.hex||v.value||v.color; if(v!=null&&v!=='')D[k]=v; } if(tk.fontFamily)D.fontFamily=tk.fontFamily; if((tk.density||'comfortable')==='compact'){D.controlHeight=28;D.controlHeightSM=22;D.controlHeightLG=36;} return D; }\nfunction esc(s){ return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;'); }\n\nexport default {\n  css: `\n    @import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css');\n    .ant-avatar{ box-sizing:border-box; display:inline-flex; align-items:center; justify-content:center; overflow:hidden; flex:0 0 auto; vertical-align:middle; font-family:var(--ff); width:var(--sz); height:var(--sz); border-radius:var(--radius); background:var(--bg); color:#fff; font-size:var(--fs); line-height:1; white-space:nowrap; user-select:none; }\n    .ant-avatar img{ display:block; width:100%; height:100%; object-fit:cover; }\n    .ant-avatar .av-ic{ font-size:1em; line-height:0; display:inline-flex; align-items:center; justify-content:center; }\n  `,\n  render(d2){\n    const p = d2.params || {};\n    const D = resolveTokens(p);\n\n    const size = p.size || 'default';\n    const shape = p.shape || 'circle';\n    const sizePx = ({ small:24, large:40, 'default':32 })[size] || 32;\n    const radius = shape === 'square' ? (D.borderRadius + 'px') : '50%';\n\n    let bg = p.bg;\n    if(bg && typeof bg === 'object') bg = bg.rgba || bg.hex || bg.value || bg.color || '';\n    bg = (bg == null || bg === '') ? D.colorTextTertiary : String(bg).trim();\n\n    const fs = Math.round(sizePx * 0.45);\n    const style = '--ff:'+D.fontFamily+';--sz:'+sizePx+'px;--radius:'+radius+';--bg:'+esc(bg)+';--fs:'+fs+'px';\n\n    let src = p.src;\n    if(src && typeof src === 'object') src = src.url || src.fileUrl || src.value || '';\n    src = (src == null) ? '' : String(src).trim();\n\n    const glyph = p.glyph ? String(p.glyph) : '';\n    const label = p.label != null ? String(p.label) : '';\n\n    let inner;\n    if(src){\n      inner = '<img src=\"'+esc(src)+'\" alt=\"'+esc(label)+'\">';\n    } else if(glyph){\n      const isFa = /(^|\\s)fa[srlbd]?(\\s|-)/.test(glyph);\n      inner = isFa ? '<i class=\"av-ic '+esc(glyph)+'\"></i>' : '<span class=\"av-ic\">'+esc(glyph)+'</span>';\n    } else {\n      inner = '<span class=\"av-lbl\">'+esc(label)+'</span>';\n    }\n\n    return '<span class=\"ant-avatar\" style=\"'+style+'\">'+inner+'</span>';\n  }\n};"}},"size":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"size"}}}},"shape":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"shape"}}}},"src":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"src"}}}},"glyph":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"glyph"}}}},"label":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"label"}}}},"bg":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"bg"}}}},"tokens":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tokens"}}}}}}}}}},{"_id":"6a2efd7c75a8dfffb1d251d2","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"ant-drawer","package":"gabz-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 ANT_DEFAULTS = { colorPrimary:'#1677ff', colorPrimaryHover:'#4096ff', colorPrimaryActive:'#0958d9', colorPrimaryBg:'#e6f4ff', colorSuccess:'#52c41a', colorSuccessBg:'#f6ffed', colorWarning:'#faad14', colorWarningBg:'#fffbe6', colorError:'#ff4d4f', colorErrorBg:'#fff2f0', colorInfo:'#1677ff', colorInfoBg:'#e6f4ff', colorText:'rgba(0,0,0,0.88)', colorTextSecondary:'rgba(0,0,0,0.65)', colorTextTertiary:'rgba(0,0,0,0.45)', colorTextDisabled:'rgba(0,0,0,0.25)', colorTextLightSolid:'#ffffff', colorBorder:'#d9d9d9', colorBorderSecondary:'#f0f0f0', colorBgContainer:'#ffffff', colorBgContainerDisabled:'rgba(0,0,0,0.04)', colorFillTertiary:'rgba(0,0,0,0.04)', colorFillSecondary:'rgba(0,0,0,0.06)', colorFill:'rgba(0,0,0,0.15)', borderRadius:6, borderRadiusSM:4, borderRadiusLG:8, controlHeight:32, controlHeightSM:24, controlHeightLG:40, fontSize:14, fontSizeSM:12, fontSizeLG:16, lineWidth:1, fontFamily:\"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif\" };\nfunction resolveTokens(p){ const tk=(p.tokens&&typeof p.tokens==='object')?p.tokens:{}; let sem=tk; if(tk.semanticsLight||tk.semanticsDark){ sem=tk.darkMode?(tk.semanticsDark||{}):(tk.semanticsLight||{}); } const D=Object.assign({},ANT_DEFAULTS); for(const k in sem){ let v=sem[k]; if(v==null||v==='')continue; if(typeof v==='object')v=v.rgba||v.hex||v.value||v.color; if(v!=null&&v!=='')D[k]=v; } if(tk.fontFamily)D.fontFamily=tk.fontFamily; if((tk.density||'comfortable')==='compact'){D.controlHeight=28;D.controlHeightSM=22;D.controlHeightLG=36;} return D; }\nfunction esc(s){ return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;'); }\n\nexport default {\n  css: `\n    @import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css');\n    .ad-mask{ position:fixed; inset:0; background:rgba(0,0,0,.45); z-index:1000; }\n    .ad-panel{ position:fixed; box-sizing:border-box; background:var(--bg); display:flex; flex-direction:column; font-family:var(--ff); box-shadow:0 6px 16px 0 rgba(0,0,0,.08),0 3px 6px -4px rgba(0,0,0,.12),0 9px 28px 8px rgba(0,0,0,.05); transition:transform .3s cubic-bezier(.4,0,.2,1); }\n    .ad-panel.right{ top:0; right:0; height:100%; transform:translateX(0); }\n    .ad-panel.left{ top:0; left:0; height:100%; transform:translateX(0); }\n    .ad-panel.top{ top:0; left:0; width:100%; transform:translateY(0); }\n    .ad-panel.bottom{ bottom:0; left:0; width:100%; transform:translateY(0); }\n    .ad-head{ display:flex; align-items:center; gap:12px; padding:16px 24px; border-bottom:1px solid var(--border2); flex:0 0 auto; }\n    .ad-title{ font-size:16px; font-weight:600; color:var(--text); line-height:1.5; flex:1 1 auto; word-wrap:break-word; }\n    .ad-close{ width:22px; height:22px; display:inline-flex; align-items:center; justify-content:center; border:none; background:transparent; color:var(--text3); cursor:pointer; border-radius:4px; font-size:16px; line-height:1; transition:color .2s,background .2s; flex:0 0 auto; }\n    .ad-close:hover{ color:var(--text); background:var(--fill3); }\n    .ad-body{ padding:24px; color:var(--text); font-size:14px; line-height:1.5715; word-wrap:break-word; overflow:auto; flex:1 1 auto; }\n  `,\n  render(d2){\n    const p = d2.params || {};\n    let _open = p.open;\n    if(p.openStore && p.openKey){ try{ _open = !!d2.store(p.openStore).get(p.openKey); }catch(e){ _open = !!p.open; } }\n    if(!_open) return '';\n    const D = resolveTokens(p);\n    const allowed = ['top','right','bottom','left'];\n    const placement = allowed.indexOf(p.placement) >= 0 ? p.placement : 'right';\n    const width = (typeof p.width === 'number' && p.width > 0) ? p.width : 378;\n    const height = (typeof p.height === 'number' && p.height > 0) ? p.height : 378;\n    const closable = p.closable !== false;\n    const title = p.title != null ? String(p.title) : '';\n    const content = p.content != null ? String(p.content) : '';\n\n    const style = [\n      '--bg:'+D.colorBgContainer, '--text:'+D.colorText, '--text3:'+D.colorTextTertiary,\n      '--border2:'+D.colorBorderSecondary, '--fill3:'+D.colorFillTertiary, '--ff:'+D.fontFamily\n    ].join(';');\n\n    let panelSize = '';\n    if(placement === 'right' || placement === 'left') panelSize = 'width:'+Math.min(width, window.innerWidth || width)+'px;max-width:100vw';\n    else panelSize = 'height:'+Math.min(height, window.innerHeight || height)+'px;max-height:100vh';\n\n    const closeHtml = closable ? '<button type=\"button\" class=\"ad-close\" data-act=\"close\" aria-label=\"Close\"><i class=\"fa fa-times\"></i></button>' : '';\n    const titleHtml = '<div class=\"ad-title\">'+esc(title)+'</div>';\n    const headHtml = '<div class=\"ad-head\">'+closeHtml+titleHtml+'</div>';\n    let bodyInner;\n    if(Array.isArray(p.slots) && p.slots.length){\n      bodyInner = p.slots.map((s,i)=> d2.render(s.type||s.component, s.props||s.params||{}, {key:s.key||('ds'+i), style:'height:auto;display:block'})).join('');\n    } else {\n      bodyInner = esc(content);\n    }\n    const bodyHtml = '<div class=\"ad-body\">'+bodyInner+'</div>';\n\n    const panel = '<div class=\"ad-panel '+placement+'\" data-role=\"panel\" style=\"'+panelSize+'\">'+headHtml+bodyHtml+'</div>';\n    return '<div class=\"ad-mask\" data-act=\"mask\" style=\"'+style+'\">'+panel+'</div>';\n  },\n  mounted(d2){\n    d2.on('.ad-panel','click',(e)=>{ e.stopPropagation(); });\n    d2.on('[data-act=\"mask\"]','click',(e)=>{\n      if(e.target && e.target.closest && e.target.closest('.ad-panel')) return;\n      d2.emit('onClose', {});\n    });\n    d2.on('[data-act=\"close\"]','click',(e)=>{\n      e.stopPropagation();\n      d2.emit('onClose', {});\n    });\n  }\n};"}},"open":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"open"}}}},"openStore":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"openStore"}}}},"openKey":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"openKey"}}}},"title":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"title"}}}},"content":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"content"}}}},"placement":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"placement"}}}},"width":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"width"}}}},"height":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"height"}}}},"closable":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"closable"}}}},"slots":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"slots"}}}},"onClose":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"onClose"}}}},"tokens":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tokens"}}}}}}}}}},{"_id":"6a2efd65ccdaee8ef640b144","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"ant-modal","package":"gabz-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 ANT_DEFAULTS = { colorPrimary:'#1677ff', colorPrimaryHover:'#4096ff', colorPrimaryActive:'#0958d9', colorPrimaryBg:'#e6f4ff', colorSuccess:'#52c41a', colorSuccessBg:'#f6ffed', colorWarning:'#faad14', colorWarningBg:'#fffbe6', colorError:'#ff4d4f', colorErrorBg:'#fff2f0', colorErrorHover:'#ff7875', colorErrorActive:'#d9363e', colorInfo:'#1677ff', colorInfoBg:'#e6f4ff', colorText:'rgba(0,0,0,0.88)', colorTextSecondary:'rgba(0,0,0,0.65)', colorTextTertiary:'rgba(0,0,0,0.45)', colorTextDisabled:'rgba(0,0,0,0.25)', colorTextLightSolid:'#ffffff', colorBorder:'#d9d9d9', colorBorderSecondary:'#f0f0f0', colorBgContainer:'#ffffff', colorBgContainerDisabled:'rgba(0,0,0,0.04)', colorFillTertiary:'rgba(0,0,0,0.04)', colorFillSecondary:'rgba(0,0,0,0.06)', colorFill:'rgba(0,0,0,0.15)', borderRadius:6, borderRadiusSM:4, borderRadiusLG:8, controlHeight:32, controlHeightSM:24, controlHeightLG:40, fontSize:14, fontSizeSM:12, fontSizeLG:16, lineWidth:1, fontFamily:\"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif\" };\nfunction resolveTokens(p){ const tk=(p.tokens&&typeof p.tokens==='object')?p.tokens:{}; let sem=tk; if(tk.semanticsLight||tk.semanticsDark){ sem=tk.darkMode?(tk.semanticsDark||{}):(tk.semanticsLight||{}); } const D=Object.assign({},ANT_DEFAULTS); for(const k in sem){ let v=sem[k]; if(v==null||v==='')continue; if(typeof v==='object')v=v.rgba||v.hex||v.value||v.color; if(v!=null&&v!=='')D[k]=v; } if(tk.fontFamily)D.fontFamily=tk.fontFamily; if((tk.density||'comfortable')==='compact'){D.controlHeight=28;D.controlHeightSM=22;D.controlHeightLG=36;} return D; }\nfunction esc(s){ return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;'); }\n\nexport default {\n  css: `\n    @import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css');\n    .am-mask{ position:fixed; inset:0; background:rgba(0,0,0,.45); z-index:1000; display:flex; justify-content:center; }\n    .am-mask.top{ align-items:flex-start; padding-top:100px; }\n    .am-mask.centered{ align-items:center; }\n    .am-dialog{ box-sizing:border-box; background:var(--bg); border-radius:var(--radius); box-shadow:0 6px 16px 0 rgba(0,0,0,.08),0 3px 6px -4px rgba(0,0,0,.12),0 9px 28px 8px rgba(0,0,0,.05); max-width:90vw; max-height:calc(100vh - 120px); display:flex; flex-direction:column; font-family:var(--ff); overflow:hidden; }\n    .am-head{ position:relative; padding:16px 24px 0 24px; }\n    .am-title{ font-size:16px; font-weight:600; color:var(--text); line-height:1.5; padding-right:24px; word-wrap:break-word; }\n    .am-close{ position:absolute; top:16px; right:16px; width:22px; height:22px; display:inline-flex; align-items:center; justify-content:center; border:none; background:transparent; color:var(--text3); cursor:pointer; border-radius:4px; font-size:16px; line-height:1; transition:color .2s,background .2s; }\n    .am-close:hover{ color:var(--text); background:var(--fill3); }\n    .am-body{ padding:8px 24px 24px 24px; color:var(--text); font-size:14px; line-height:1.5715; word-wrap:break-word; overflow:auto; }\n    .am-foot{ padding:0 24px 16px 24px; display:flex; justify-content:flex-end; gap:8px; }\n    .am-btn{ box-sizing:border-box; display:inline-flex; align-items:center; justify-content:center; gap:8px; height:32px; padding:0 15px; font-size:14px; font-family:var(--ff); font-weight:400; line-height:1; border-radius:var(--bradius); cursor:pointer; user-select:none; outline:none; transition:all .2s cubic-bezier(.4,0,.2,1); }\n    .am-btn-default{ background:var(--bg); color:var(--text); border:1px solid var(--border); }\n    .am-btn-default:hover{ color:var(--primaryH); border-color:var(--primaryH); }\n    .am-btn-primary{ background:var(--primary); color:#fff; border:1px solid var(--primary); }\n    .am-btn-primary:hover{ background:var(--primaryH); border-color:var(--primaryH); }\n    .am-btn-danger{ background:var(--error); color:#fff; border:1px solid var(--error); }\n    .am-btn-danger:hover{ background:var(--errorH); border-color:var(--errorH); }\n    .am-btn.is-loading{ cursor:default; pointer-events:none; opacity:.85; }\n    .am-spin{ width:14px; height:14px; border:2px solid currentColor; border-top-color:transparent; border-radius:50%; display:inline-block; animation:amspin .8s linear infinite; }\n    @keyframes amspin{ to{ transform:rotate(360deg); } }\n  `,\n  render(d2){\n    const p = d2.params || {};\n    let _open = p.open;\n    if(p.openStore && p.openKey){ try{ _open = !!d2.store(p.openStore).get(p.openKey); }catch(e){ _open = !!p.open; } }\n    if(!_open) return '';\n    const D = resolveTokens(p);\n    const width = (typeof p.width === 'number' && p.width > 0) ? p.width : 520;\n    const centered = !!p.centered;\n    const closable = p.closable !== false;\n    const confirmLoading = !!p.confirmLoading;\n    const okDanger = !!p.okDanger;\n    const title = p.title != null ? String(p.title) : '';\n    const content = p.content != null ? String(p.content) : '';\n    const okText = p.okText != null && p.okText !== '' ? String(p.okText) : 'OK';\n    const cancelText = p.cancelText != null && p.cancelText !== '' ? String(p.cancelText) : 'Cancel';\n\n    const style = [\n      '--bg:'+D.colorBgContainer, '--text:'+D.colorText, '--text3:'+D.colorTextTertiary,\n      '--border:'+D.colorBorder, '--primary:'+D.colorPrimary, '--primaryH:'+D.colorPrimaryHover,\n      '--error:'+D.colorError, '--errorH:'+D.colorErrorHover,\n      '--fill3:'+D.colorFillTertiary, '--radius:'+D.borderRadiusLG+'px', '--bradius:'+D.borderRadius+'px',\n      '--ff:'+D.fontFamily\n    ].join(';');\n\n    const closeHtml = closable ? '<button type=\"button\" class=\"am-close\" data-act=\"cancel\" aria-label=\"Close\"><i class=\"fa fa-times\"></i></button>' : '';\n    const titleHtml = title ? '<div class=\"am-title\">'+esc(title)+'</div>' : '';\n    const headHtml = (titleHtml || closeHtml) ? '<div class=\"am-head\">'+titleHtml+closeHtml+'</div>' : '';\n    let bodyInner;\n    if(Array.isArray(p.slots) && p.slots.length){\n      bodyInner = p.slots.map((s,i)=> d2.render(s.type||s.component, s.props||s.params||{}, {key:s.key||('ms'+i), style:'height:auto;display:block'})).join('');\n    } else {\n      bodyInner = esc(content);\n    }\n    const bodyHtml = '<div class=\"am-body\">'+bodyInner+'</div>';\n\n    const showFoot = !(Array.isArray(p.slots) && p.slots.length);\n    let footHtml = '';\n    if(showFoot){\n      const okClasses = 'am-btn ' + (okDanger ? 'am-btn-danger' : 'am-btn-primary') + (confirmLoading ? ' is-loading' : '');\n      const okInner = (confirmLoading ? '<span class=\"am-spin\"></span>' : '') + '<span>'+esc(okText)+'</span>';\n      footHtml = '<div class=\"am-foot\">'\n        + '<button type=\"button\" class=\"am-btn am-btn-default\" data-act=\"cancel\">'+esc(cancelText)+'</button>'\n        + '<button type=\"button\" class=\"'+okClasses+'\" data-act=\"ok\"'+(confirmLoading?' disabled':'')+'>'+okInner+'</button>'\n        + '</div>';\n    }\n\n    const dialog = '<div class=\"am-dialog\" data-role=\"dialog\" style=\"width:'+width+'px\">'+headHtml+bodyHtml+footHtml+'</div>';\n    const maskClass = 'am-mask ' + (centered ? 'centered' : 'top');\n    return '<div class=\"'+maskClass+'\" data-act=\"mask\" style=\"'+style+'\">'+dialog+'</div>';\n  },\n  mounted(d2){\n    d2.on('.am-dialog','click',(e)=>{ e.stopPropagation(); });\n    d2.on('[data-act=\"mask\"]','click',(e)=>{\n      if(e.target && e.target.closest && e.target.closest('.am-dialog')) return;\n      d2.emit('onCancel', {});\n    });\n    d2.on('[data-act=\"cancel\"]','click',(e)=>{\n      e.stopPropagation();\n      d2.emit('onCancel', {});\n    });\n    d2.on('[data-act=\"ok\"]','click',(e)=>{\n      e.stopPropagation();\n      const p = d2.params || {};\n      if(p.confirmLoading) return;\n      d2.emit('onOk', {});\n    });\n  }\n};"}},"open":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"open"}}}},"openStore":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"openStore"}}}},"openKey":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"openKey"}}}},"title":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"title"}}}},"content":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"content"}}}},"okText":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"okText"}}}},"cancelText":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"cancelText"}}}},"okDanger":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"okDanger"}}}},"width":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"width"}}}},"centered":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"centered"}}}},"closable":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"closable"}}}},"confirmLoading":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"confirmLoading"}}}},"slots":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"slots"}}}},"onOk":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"onOk"}}}},"onCancel":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"onCancel"}}}},"tokens":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tokens"}}}}}}}}}},{"_id":"6a2efe342ae3e526cfd2b277","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"ant-table","package":"gabz-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 ANT_DEFAULTS = { colorPrimary:'#1677ff', colorText:'rgba(0,0,0,0.88)', colorTextSecondary:'rgba(0,0,0,0.65)', colorTextTertiary:'rgba(0,0,0,0.45)', colorBorder:'#d9d9d9', colorBorderSecondary:'#f0f0f0', colorBgContainer:'#ffffff', colorFillTertiary:'rgba(0,0,0,0.04)', colorFillSecondary:'rgba(0,0,0,0.06)', colorFillAlter:'rgba(0,0,0,0.02)', borderRadius:6, borderRadiusLG:8, fontSize:14, lineWidth:1, controlHeight:32, fontFamily:\"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif\" };\n\nfunction resolveTokens(p){ const tk=(p.tokens&&typeof p.tokens==='object')?p.tokens:{}; let sem=tk; if(tk.semanticsLight||tk.semanticsDark){ sem=tk.darkMode?(tk.semanticsDark||{}):(tk.semanticsLight||{}); } const D=Object.assign({},ANT_DEFAULTS); for(const k in sem){ let v=sem[k]; if(v==null||v==='')continue; if(typeof v==='object')v=v.rgba||v.hex||v.value||v.color; if(v!=null&&v!=='')D[k]=v; } if(tk.fontFamily)D.fontFamily=tk.fontFamily; return D; }\nfunction esc(s){ return String(s==null?'':s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;'); }\nfunction rowKey(row, i){ return (row && row.key!=null && row.key!=='') ? String(row.key) : (row && row._id!=null ? String(row._id) : String(i)); }\nfunction svg(inner, size){ return '<svg width=\"'+(size||14)+'\" height=\"'+(size||14)+'\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">'+inner+'</svg>'; }\nconst SVG_FILTER = svg('<polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"/>', 12);\nconst SVG_DOTS = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><circle cx=\"12\" cy=\"5\" r=\"1.6\"/><circle cx=\"12\" cy=\"12\" r=\"1.6\"/><circle cx=\"12\" cy=\"19\" r=\"1.6\"/></svg>';\nconst SVG_PREV = svg('<path d=\"m15 18-6-6 6-6\"/>', 14);\nconst SVG_NEXT = svg('<path d=\"m9 18 6-6-6-6\"/>', 14);\nconst SVG_UP = svg('<path d=\"m18 15-6-6-6 6\"/>', 13);\nconst SVG_DOWN = svg('<path d=\"m6 9 6 6 6-6\"/>', 13);\nconst SVG_UPDOWN = svg('<path d=\"m7 15 5 5 5-5\"/><path d=\"m7 9 5-5 5 5\"/>', 13);\nconst SVG_CHECK = svg('<path d=\"M20 6 9 17l-5-5\"/>', 14);\nconst cleanNum = s => String(s==null?'':s).replace(/[^0-9.\\-]/g,'');\n\nexport default {\n  css: `\n    .att-wrap{ box-sizing:border-box; width:100%; font-family:var(--ff); position:relative; color:var(--ct); }\n    .att-toolbar{ display:flex; align-items:center; gap:10px; margin-bottom:10px; }\n    .att-search{ width:240px; max-width:60%; padding:6px 11px; border:var(--bw) solid var(--cbs); border-radius:var(--radius); font-size:var(--fs); outline:none; background:var(--bg); color:var(--ct); }\n    .att-search:focus{ border-color:var(--cp); }\n    .att-count{ margin-left:auto; font-size:12px; color:var(--ctt); }\n    .att-table-box{ border:var(--bw) solid transparent; border-radius:var(--radius); overflow-x:hidden; overflow-y:auto; max-height:560px; }\n    .att-table-box table.att thead th{ position:sticky; top:0; z-index:1; }\n    .att-table-box.bordered{ border-color:var(--cbs); }\n    table.att{ border-collapse:collapse; width:100%; font-size:var(--fs); color:var(--ct); background:var(--bg); }\n    table.att th{ background:var(--cfa); color:var(--ct); font-weight:600; text-align:left; padding:var(--pad); border-bottom:var(--bw) solid var(--cbs); white-space:nowrap; }\n    table.att td{ padding:var(--pad); border-bottom:var(--bw) solid var(--cbs); color:var(--ct); }\n    table.att tbody tr{ transition:background .15s; }\n    table.att tbody tr.clickable{ cursor:pointer; }\n    table.att tbody tr:hover{ background:var(--cft); }\n    .att-table-box.bordered table.att th, .att-table-box.bordered table.att td{ border-right:var(--bw) solid var(--cbs); }\n    .att-table-box.bordered table.att th:last-child, .att-table-box.bordered table.att td:last-child{ border-right:none; }\n    .att-empty td{ text-align:center; color:var(--ctt); padding:32px 16px; }\n    .att-th-inner{ display:inline-flex; align-items:center; gap:5px; }\n    .att-th-inner.sortable{ cursor:pointer; user-select:none; }\n    .att-th-inner.sortable:hover{ color:var(--cp); }\n    .att-sort{ display:inline-flex; opacity:.3; }\n    .att-sort.on{ opacity:1; color:var(--cp); }\n    .att-funnel{ cursor:pointer; opacity:.4; border:0; background:none; color:var(--ct); padding:0 2px; display:inline-flex; }\n    .att-funnel:hover, .att-funnel.on{ opacity:1; color:var(--cp); }\n    .att-funnel svg, .att-sort svg, .att-kebab svg, .att-pg svg{ display:block; }\n    .att-actcell{ width:44px; text-align:center; }\n    .att-kebab{ cursor:pointer; border:0; background:none; color:var(--ctt); padding:2px 6px; border-radius:6px; display:inline-flex; }\n    .att-kebab:hover{ background:var(--cft); color:var(--ct); }\n    .att-pop{ position:fixed; z-index:9999; background:var(--bg); border:var(--bw) solid var(--cbs); border-radius:8px; box-shadow:0 8px 28px rgba(0,0,0,.18); padding:4px; min-width:170px; }\n    .att-pop button{ display:flex; align-items:center; gap:8px; width:100%; text-align:left; border:0; background:none; padding:8px 10px; font:inherit; font-size:13px; color:var(--ct); cursor:pointer; border-radius:6px; }\n    .att-pop button:hover{ background:var(--cft); }\n    .att-pop button.danger{ color:#cf1322; }\n    .att-pop .att-aci{ display:inline-flex; align-items:center; }\n    .att-filter{ position:fixed; z-index:9999; background:var(--bg); border:var(--bw) solid var(--cbs); border-radius:8px; box-shadow:0 8px 28px rgba(0,0,0,.18); padding:6px; min-width:180px; max-height:280px; overflow:auto; }\n    .att-fopt{ display:flex; align-items:center; gap:8px; padding:7px 8px; font-size:13px; cursor:pointer; border-radius:6px; color:var(--ct); }\n    .att-fopt:hover{ background:var(--cft); }\n    .att-fopt.on{ color:var(--cp); font-weight:600; }\n    .att-fck{ width:16px; height:16px; display:inline-flex; align-items:center; justify-content:center; color:var(--cp); }\n    .att-filter-foot{ display:flex; justify-content:space-between; border-top:var(--bw) solid var(--cbs); margin-top:4px; padding-top:6px; }\n    .att-filter-foot button{ border:0; background:none; font-size:12px; color:var(--cp); cursor:pointer; }\n    .att-pager{ display:flex; align-items:center; gap:6px; justify-content:flex-end; margin-top:12px; }\n    .att-pg{ min-width:30px; height:30px; padding:0 8px; display:inline-flex; align-items:center; justify-content:center; border:var(--bw) solid var(--cbs); background:var(--bg); color:var(--ct); border-radius:6px; cursor:pointer; font-size:13px; }\n    .att-pg:hover:not(:disabled){ border-color:var(--cp); color:var(--cp); }\n    .att-pg.on{ border-color:var(--cp); color:var(--cp); font-weight:600; }\n    .att-pg:disabled{ opacity:.4; cursor:not-allowed; }\n  `,\n\n  render(d2){\n    const p = d2.params || {};\n    const D = resolveTokens(p);\n    const size = p.size || 'default';\n    const bordered = !!p.bordered;\n    const showHeader = p.showHeader !== false;\n    const searchable = !!p.searchable;\n    const sortableDefault = p.sortable !== false;\n    const cols = Array.isArray(p.columns) ? p.columns : [];\n    const actions = Array.isArray(p.rowActions) ? p.rowActions : [];\n\n    let all = Array.isArray(p.dataSource) ? p.dataSource : [];\n    if(all.length === 0 && typeof d2.data === 'function'){ try{ const recs = d2.data().records(); if(Array.isArray(recs)) all = recs; }catch(e){} }\n\n    const padMap = { small:'8px 8px', large:'16px 16px', middle:'12px 8px' };\n    const pad = padMap[size] || padMap.middle;\n\n    const q = (d2.state.q || '').toLowerCase();\n    let filtered = all;\n    if(searchable && q){ filtered = filtered.filter(row => cols.some(c => c.dataIndex!=null && String(row[c.dataIndex]==null?'':row[c.dataIndex]).toLowerCase().indexOf(q)!==-1)); }\n    const cf = d2.state.colFilters || {};\n    cols.forEach(c => { const selv = cf[c.dataIndex]; if(selv && selv.length){ filtered = filtered.filter(row => selv.indexOf(String(row[c.dataIndex])) !== -1); } });\n\n    // sort\n    if(d2.state.sortBy != null && d2.state.sortBy !== ''){\n      const sb = d2.state.sortBy, dir = d2.state.sortDir === 'desc' ? -1 : 1;\n      filtered = filtered.slice().sort((a,b)=>{\n        const ax = a[sb], bx = b[sb]; const ca = cleanNum(ax), cb = cleanNum(bx);\n        if(ca!=='' && cb!=='' && !isNaN(parseFloat(ca)) && !isNaN(parseFloat(cb))) return (parseFloat(ca)-parseFloat(cb))*dir;\n        const sa = String(ax==null?'':ax).toLowerCase(), sbv = String(bx==null?'':bx).toLowerCase();\n        return (sa<sbv?-1:sa>sbv?1:0)*dir;\n      });\n    }\n\n    const total = filtered.length;\n    let ps = (p.pageSize!=null && p.pageSize!=='') ? Math.floor(Number(p.pageSize)) : 8;\n    if(!(ps > 0)) ps = 8;\n    const pages = Math.max(1, Math.ceil(total / ps));\n    let page = Math.min(Math.max(1, d2.state.page || 1), pages);\n    const showPager = total > ps;\n    const pageRows = filtered.slice((page-1)*ps, (page-1)*ps + ps);\n\n    const style = [ '--ff:'+D.fontFamily, '--fs:'+D.fontSize+'px', '--ct:'+D.colorText, '--ctt:'+D.colorTextTertiary, '--cbs:'+D.colorBorderSecondary, '--cft:'+D.colorFillTertiary, '--cfa:'+D.colorFillAlter, '--bg:'+D.colorBgContainer, '--cp:'+D.colorPrimary, '--bw:'+D.lineWidth+'px', '--radius:'+D.borderRadius+'px', '--pad:'+pad ].join(';');\n    const colCount = cols.length + (actions.length ? 1 : 0) || 1;\n\n    let toolbar = '';\n    if(searchable){ toolbar = '<div class=\"att-toolbar\"><input class=\"att-search\" placeholder=\"'+esc(p.searchPlaceholder||'Search…')+'\" value=\"'+esc(d2.state.q||'')+'\" /><span class=\"att-count\">'+total+' items</span></div>'; }\n\n    let head = '';\n    if(showHeader && cols.length){\n      head += '<thead><tr>';\n      for(let c=0;c<cols.length;c++){\n        const col = cols[c] || {};\n        const align = col.align ? 'text-align:'+esc(col.align)+';' : '';\n        const w = (col.width!=null && col.width!=='') ? 'width:'+esc(typeof col.width==='number'?col.width+'px':col.width)+';' : '';\n        const st = (align||w) ? ' style=\"'+align+w+'\"' : '';\n        const canSort = col.sortable!==false && sortableDefault && col.dataIndex!=null;\n        const isActive = d2.state.sortBy === col.dataIndex;\n        const sortIco = canSort ? '<span class=\"att-sort '+(isActive?'on':'')+'\">'+(isActive ? (d2.state.sortDir==='desc'?SVG_DOWN:SVG_UP) : SVG_UPDOWN)+'</span>' : '';\n        const hasFilter = (Array.isArray(col.filters) && col.filters.length) || col.filterable;\n        const active = cf[col.dataIndex] && cf[col.dataIndex].length;\n        const funnel = hasFilter ? '<button class=\"att-funnel '+(active?'on':'')+'\" data-act=\"filter\" data-col=\"'+c+'\" data-fcol=\"'+c+'\">'+SVG_FILTER+'</button>' : '';\n        head += '<th'+st+'><span class=\"att-th-inner '+(canSort?'sortable':'')+'\" '+(canSort?'data-act=\"sort\" data-col=\"'+c+'\"':'')+'>'+esc(col.title)+sortIco+funnel+'</span></th>';\n      }\n      if(actions.length) head += '<th class=\"att-actcell\"></th>';\n      head += '</tr></thead>';\n    }\n\n    let body = '<tbody>';\n    if(pageRows.length === 0){ body += '<tr class=\"att-empty\"><td colspan=\"'+colCount+'\">No data</td></tr>'; }\n    else {\n      for(let r=0;r<pageRows.length;r++){\n        const row = pageRows[r] || {};\n        const rk = rowKey(row, (page-1)*ps + r);\n        body += '<tr class=\"clickable\" data-act=\"row\" data-rk=\"'+esc(rk)+'\">';\n        for(let c=0;c<cols.length;c++){ const col = cols[c] || {}; const align = col.align ? ' style=\"text-align:'+esc(col.align)+';\"' : ''; const cell = col.dataIndex!=null ? row[col.dataIndex] : ''; body += '<td'+align+'>'+esc(cell)+'</td>'; }\n        if(actions.length){ body += '<td class=\"att-actcell\"><button class=\"att-kebab\" data-act=\"rowmenu\" data-rk=\"'+esc(rk)+'\" data-rmk=\"'+esc(rk)+'\">'+SVG_DOTS+'</button></td>'; }\n        body += '</tr>';\n      }\n    }\n    body += '</tbody>';\n\n    let pops = '';\n    if(d2.state.menuFor != null && actions.length){\n      pops += '<div class=\"att-pop\">' + actions.map(a => '<button data-act=\"rowaction\" data-rk=\"'+esc(d2.state.menuFor)+'\" data-ak=\"'+esc(a.key)+'\" class=\"'+(a.danger?'danger':'')+'\">'+(a.glyph?'<span class=\"att-aci\">'+a.glyph+'</span>':'')+esc(a.label)+'</button>').join('') + '</div>';\n    }\n    if(d2.state.filterFor != null){\n      const ci = Number(d2.state.filterFor); const col = cols[ci] || {};\n      let opts = Array.isArray(col.filters) && col.filters.length ? col.filters.map(f => ({text:f.text, value:String(f.value)})) : [];\n      if(!opts.length){ const seen={}; const arr=[]; all.forEach(rw=>{ const v=String(rw[col.dataIndex]==null?'':rw[col.dataIndex]); if(v!=='' && !seen[v]){ seen[v]=1; arr.push({text:v, value:v}); } }); opts = arr; }\n      const cur = (cf[col.dataIndex]||[]);\n      pops += '<div class=\"att-filter\">' + opts.map(o => '<div class=\"att-fopt '+(cur.indexOf(o.value)!==-1?'on':'')+'\" data-act=\"filteropt\" data-col=\"'+ci+'\" data-val=\"'+esc(o.value)+'\"><span class=\"att-fck\">'+(cur.indexOf(o.value)!==-1?SVG_CHECK:'')+'</span>'+esc(o.text)+'</div>').join('') + '<div class=\"att-filter-foot\"><button data-act=\"filterreset\" data-col=\"'+ci+'\">Reset</button><button data-act=\"filterclose\">Done</button></div></div>';\n    }\n\n    let pager = '';\n    if(showPager){\n      let btns = '<button class=\"att-pg\" data-act=\"page\" data-p=\"'+(page-1)+'\" '+(page<=1?'disabled':'')+'>'+SVG_PREV+'</button>';\n      const win = []; for(let i=1;i<=pages;i++){ if(i===1||i===pages||(i>=page-1&&i<=page+1)) win.push(i); }\n      let last=0; win.forEach(i => { if(last && i-last>1) btns += '<span class=\"att-pg\" style=\"border:none;cursor:default\">…</span>'; btns += '<button class=\"att-pg '+(i===page?'on':'')+'\" data-act=\"page\" data-p=\"'+i+'\">'+i+'</button>'; last=i; });\n      btns += '<button class=\"att-pg\" data-act=\"page\" data-p=\"'+(page+1)+'\" '+(page>=pages?'disabled':'')+'>'+SVG_NEXT+'</button>';\n      pager = '<div class=\"att-pager\"><span class=\"att-count\" style=\"margin-right:auto\">'+total+' items</span>'+btns+'</div>';\n    }\n\n    return '<div class=\"att-wrap\" style=\"'+style+'\">'+toolbar+'<div class=\"att-table-box '+(bordered?'bordered':'')+'\"><table class=\"att\">'+head+body+'</table></div>'+pager+pops+'</div>';\n  },\n\n  mounted(d2){\n    if(typeof d2.data === 'function'){ try{ const ds=d2.data(); if(ds && typeof ds.records==='function' && ds.records().length===0 && typeof ds.refresh==='function') ds.refresh(); }catch(e){} }\n    const cols = () => Array.isArray(d2.params.columns) ? d2.params.columns : [];\n    const findRow = (rk) => { const p=d2.params||{}; let all=Array.isArray(p.dataSource)?p.dataSource:[]; if(all.length===0&&typeof d2.data==='function'){ try{all=d2.data().records()||[];}catch(e){} } for(let i=0;i<all.length;i++){ if(rowKey(all[i],i)===String(rk)) return all[i]; } return null; };\n    const writeSelection = (ak, rk, row) => { try{ const sref=(d2.params&&d2.params.selectionStore)?d2.params.selectionStore:null; if(!sref) return; let s=null; try{ s=d2.store(sref); }catch(e2){} if(s){ s.set('actionType', ak); s.set('actionKey', String(rk)); s.set('actionRow', row?JSON.stringify(row):''); if(row&&typeof row==='object'){ for(const k in row){ const v=row[k]; if(v==null||typeof v==='object')continue; s.set('draft_'+k, v); } } } }catch(e){} };\n\n    d2.on('.att-search','input',(e)=>{ d2.state._focus=true; d2.state.q=e.target.value; d2.state.page=1; });\n\n    d2.on('[data-act=\"sort\"]','click',(e,el)=>{\n      if(e.target.closest('[data-act=\"filter\"]')) return;\n      const ci = Number(el.getAttribute('data-col')); const di = (cols()[ci]||{}).dataIndex; if(di==null) return;\n      if(d2.state.sortBy !== di){ d2.state.sortBy = di; d2.state.sortDir = 'asc'; }\n      else if(d2.state.sortDir === 'asc'){ d2.state.sortDir = 'desc'; }\n      else { d2.state.sortBy = null; d2.state.sortDir = null; }\n    });\n\n    d2.on('tr[data-act=\"row\"]','click',(e,el)=>{ if(e.target.closest('[data-act=\"rowmenu\"]')) return; const rk = el.getAttribute('data-rk'); const row=findRow(rk); writeSelection('row', rk, row); d2.emit('onRowClick', { row: row, key: rk }); });\n\n    d2.on('[data-act=\"rowmenu\"]','click',(e,el)=>{ const rk = el.getAttribute('data-rk'); d2.state.filterFor=null; d2.state.menuFor = (String(d2.state.menuFor)===String(rk)) ? null : rk; });\n    d2.on('[data-act=\"rowaction\"]','click',(e,el)=>{ const rk=el.getAttribute('data-rk'), ak=el.getAttribute('data-ak'); d2.state.menuFor=null; const row=findRow(rk); writeSelection(ak, rk, row); d2.emit('onAction', { action:ak, key:rk, row:row }); });\n\n    d2.on('[data-act=\"filter\"]','click',(e,el)=>{ const ci=el.getAttribute('data-col'); d2.state.menuFor=null; d2.state.filterFor = (String(d2.state.filterFor)===String(ci)) ? null : ci; });\n    d2.on('[data-act=\"filteropt\"]','click',(e,el)=>{\n      const ci = Number(el.getAttribute('data-col')); const di = (cols()[ci]||{}).dataIndex; const val = el.getAttribute('data-val');\n      const c = Object.assign({}, d2.state.colFilters||{}); const arr = (c[di]||[]).slice(); const idx = arr.indexOf(val);\n      if(idx===-1) arr.push(val); else arr.splice(idx,1);\n      c[di] = arr; d2.state.colFilters = c; d2.state.page = 1;\n    });\n    d2.on('[data-act=\"filterreset\"]','click',(e,el)=>{ const ci=Number(el.getAttribute('data-col')); const di=(cols()[ci]||{}).dataIndex; const c=Object.assign({},d2.state.colFilters||{}); delete c[di]; d2.state.colFilters=c; d2.state.filterFor=null; d2.state.page=1; });\n    d2.on('[data-act=\"filterclose\"]','click',()=>{ d2.state.filterFor=null; });\n\n    d2.on('[data-act=\"page\"]','click',(e,el)=>{ const pg=parseInt(el.getAttribute('data-p'),10); if(!isNaN(pg)) d2.state.page=pg; });\n\n    d2.on(document,'click',(e)=>{\n      if(d2.state.menuFor==null && d2.state.filterFor==null) return;\n      const path = e.composedPath ? e.composedPath() : [];\n      for(let i=0;i<path.length;i++){ const n=path[i]; if(n && n.getAttribute){ const a=n.getAttribute('data-act'); if(a==='rowmenu'||a==='filter'||a==='rowaction'||a==='filteropt'||a==='filterreset') return; } if(n && n.classList && (n.classList.contains('att-pop')||n.classList.contains('att-filter'))) return; }\n      d2.state.menuFor=null; d2.state.filterFor=null;\n    });\n  },\n\n  updated(d2, root){\n    if(d2.state._focus){ const el=root.querySelector('.att-search'); if(el && document.activeElement!==el){ el.focus(); const n=el.value.length; el.setSelectionRange(n,n); } }\n    const place = (trigSel, popSel) => { const t=root.querySelector(trigSel), m=root.querySelector(popSel); if(t&&m){ const r=t.getBoundingClientRect(); let left=r.left; const mw=m.offsetWidth||180; if(left+mw > window.innerWidth-8) left=window.innerWidth-mw-8; m.style.top=(r.bottom+4)+'px'; m.style.left=Math.max(8,left)+'px'; } };\n    if(d2.state.menuFor != null) place('[data-rmk=\"'+d2.state.menuFor+'\"]', '.att-pop');\n    if(d2.state.filterFor != null) place('[data-fcol=\"'+d2.state.filterFor+'\"]', '.att-filter');\n  }\n};"}},"columns":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"columns"}}}},"dataSource":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"dataSource"}}}},"dataset":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"dataset"}}}},"size":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"size"}}}},"bordered":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"bordered"}}}},"showHeader":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"showHeader"}}}},"pageSize":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"pageSize"}}}},"searchable":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"searchable"}}}},"searchPlaceholder":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"searchPlaceholder"}}}},"sortable":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"sortable"}}}},"rowActions":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"rowActions"}}}},"onRowClick":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"onRowClick"}}}},"onAction":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"onAction"}}}},"selectionStore":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"selectionStore"}}}},"tokens":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tokens"}}}}}}}}}},{"_id":"6a466b5352c2becc94e21167","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"crm-convert","package":"gabz-playground","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n    .crmcv{ display:block; font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; font-size:12px; }\n    .crmcv-msg{ color:rgba(0,0,0,0.45); }\n  `,\n  async runConvert(d2, leadId){\n    const leadsDs = d2.data('leads');\n    const accountsDs = d2.data('accounts');\n    const contactsDs = d2.data('contacts');\n    const dealsDs = d2.data('deals');\n    // Fetch the lead by id\n    const rows = await leadsDs.query({ _id: leadId });\n    const lead = Array.isArray(rows) ? rows.find(function(r){ return String(r._id)===String(leadId); }) || rows[0] : null;\n    if(!lead){ throw new Error('lead not found: '+leadId); }\n    // 1. Account\n    const acct = await accountsDs.create({\n      name: lead.company,\n      industry: '',\n      size: '',\n      website: '',\n      annualRevenue: 0,\n      ownerId: lead.ownerId,\n      status: 'prospect',\n      createdAt: new Date().toISOString()\n    });\n    const acctId = acct && (acct._id || (acct.record && acct.record._id));\n    // 2. Contact (split name)\n    const parts = String(lead.name || '').trim().split(/\\s+/);\n    const firstName = parts.shift() || '';\n    const lastName = parts.join(' ');\n    const contact = await contactsDs.create({\n      firstName: firstName,\n      lastName: lastName,\n      email: lead.email,\n      phone: lead.phone,\n      title: '',\n      accountId: acctId,\n      isPrimary: true\n    });\n    const contactId = contact && (contact._id || (contact.record && contact.record._id));\n    // 3. Deal\n    const deal = await dealsDs.create({\n      name: lead.company + ' — New Opportunity',\n      accountId: acctId,\n      contactId: contactId,\n      amount: 0,\n      stage: 'Prospecting',\n      probability: 10,\n      expectedCloseDate: '',\n      ownerId: lead.ownerId,\n      createdAt: new Date().toISOString()\n    });\n    const dealId = deal && (deal._id || (deal.record && deal.record._id));\n    // 4. Update lead status\n    await leadsDs.update({ _id: leadId, status: 'Converted' });\n    return { acctId: acctId, contactId: contactId, dealId: dealId };\n  },\n  render(d2){\n    const s = d2.store('crm-ui');\n    const pending = s ? s.get('convertPending') : '';\n    const busy = !!d2.state.busy;\n    const last = d2.state.lastMsg || '';\n    if(pending && !busy && String(pending) !== String(d2.state.handledId || '')){\n      d2.state.busy = true;\n      d2.state.handledId = String(pending);\n      const self = this;\n      const leadId = String(pending);\n      (async function(){\n        try{\n          const res = await self.runConvert(d2, leadId);\n          d2.state.lastMsg = 'Converted '+leadId+' → acct '+res.acctId+', contact '+res.contactId+', deal '+res.dealId;\n        }catch(err){\n          d2.state.lastMsg = 'Convert failed: '+(err && err.message ? err.message : err);\n        }finally{\n          if(s){ s.set('convertPending', ''); s.set('convertResult', d2.state.lastMsg); }\n          d2.state.busy = false;\n        }\n      })();\n    }\n    return '<div class=\"crmcv\"><span class=\"crmcv-msg\">'+(busy?'Converting…':(last?'':''))+'</span></div>';\n  }\n};"}},"leads":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"leads"}}}},"accounts":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"accounts"}}}},"contacts":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"contacts"}}}},"deals":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"deals"}}}}}}}}}},{"_id":"6a2efd78ccdaee8ef640b154","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"ant-tabs","package":"gabz-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 ANT_DEFAULTS = { colorPrimary:'#1677ff', colorPrimaryHover:'#4096ff', colorPrimaryActive:'#0958d9', colorPrimaryBg:'#e6f4ff', colorSuccess:'#52c41a', colorSuccessBg:'#f6ffed', colorWarning:'#faad14', colorWarningBg:'#fffbe6', colorError:'#ff4d4f', colorErrorBg:'#fff2f0', colorInfo:'#1677ff', colorInfoBg:'#e6f4ff', colorText:'rgba(0,0,0,0.88)', colorTextSecondary:'rgba(0,0,0,0.65)', colorTextTertiary:'rgba(0,0,0,0.45)', colorTextDisabled:'rgba(0,0,0,0.25)', colorTextLightSolid:'#ffffff', colorBorder:'#d9d9d9', colorBorderSecondary:'#f0f0f0', colorBgContainer:'#ffffff', colorBgContainerDisabled:'rgba(0,0,0,0.04)', colorFillTertiary:'rgba(0,0,0,0.04)', colorFillSecondary:'rgba(0,0,0,0.06)', colorFill:'rgba(0,0,0,0.15)', borderRadius:6, borderRadiusSM:4, borderRadiusLG:8, controlHeight:32, controlHeightSM:24, controlHeightLG:40, fontSize:14, fontSizeSM:12, fontSizeLG:16, lineWidth:1, fontFamily:\"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif\" };\nfunction resolveTokens(p){ const tk=(p.tokens&&typeof p.tokens==='object')?p.tokens:{}; let sem=tk; if(tk.semanticsLight||tk.semanticsDark){ sem=tk.darkMode?(tk.semanticsDark||{}):(tk.semanticsLight||{}); } const D=Object.assign({},ANT_DEFAULTS); for(const k in sem){ let v=sem[k]; if(v==null||v==='')continue; if(typeof v==='object')v=v.rgba||v.hex||v.value||v.color; if(v!=null&&v!=='')D[k]=v; } if(tk.fontFamily)D.fontFamily=tk.fontFamily; if((tk.density||'comfortable')==='compact'){D.controlHeight=28;D.controlHeightSM=22;D.controlHeightLG=36;} return D; }\nfunction esc(s){ return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;'); }\nfunction asArr(x){ if(Array.isArray(x))return x; if(x==null)return []; return [x]; }\n\nexport default {\n  css: `\n    @import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css');\n    .ant-tabs{ box-sizing:border-box; font-family:var(--ff); font-size:var(--fs); color:var(--c-text); width:100%; }\n    .ant-tabs *{ box-sizing:border-box; }\n    .ant-tabs-bar{ display:flex; align-items:flex-end; gap:var(--gap); }\n    .ant-tabs-bar.centered{ justify-content:center; }\n    .ant-tabs.line .ant-tabs-bar{ border-bottom:var(--bw) solid var(--c-border2); }\n    .ant-tabs-tab{ display:inline-flex; align-items:center; gap:8px; cursor:pointer; user-select:none;\n      transition:color .2s, background .2s, border-color .2s; white-space:nowrap; line-height:1; }\n    .ant-tabs.line .ant-tabs-tab{ padding:var(--tabpad); color:var(--c-text); position:relative; }\n    .ant-tabs.line .ant-tabs-tab:hover{ color:var(--c-primary-h); }\n    .ant-tabs.line .ant-tabs-tab.active{ color:var(--c-primary); }\n    .ant-tabs.line .ant-tabs-tab.active::after{ content:''; position:absolute; left:0; right:0; bottom:calc(-1 * var(--bw));\n      height:2px; background:var(--c-primary); }\n    .ant-tabs.card .ant-tabs-bar{ gap:2px; }\n    .ant-tabs.card .ant-tabs-tab{ padding:var(--tabpad); border:var(--bw) solid var(--c-border2);\n      border-radius:var(--radius) var(--radius) 0 0; background:var(--c-fill3); color:var(--c-text);\n      margin-bottom:calc(-1 * var(--bw)); }\n    .ant-tabs.card .ant-tabs-tab:hover{ color:var(--c-primary-h); }\n    .ant-tabs.card .ant-tabs-tab.active{ background:var(--c-bg); border-bottom-color:var(--c-bg); color:var(--c-primary); }\n    .ant-tabs.card{ }\n    .ant-tabs.card .ant-tabs-bar{ border-bottom:var(--bw) solid var(--c-border2); }\n    .ant-tabs-tab.disabled{ color:var(--c-disabled); cursor:not-allowed; }\n    .ant-tabs-tab.disabled:hover{ color:var(--c-disabled); }\n    .ant-tabs-tab .ic{ display:inline-flex; align-items:center; font-size:1em; }\n    .ant-tabs-panel{ padding:16px 0; color:var(--c-text); white-space:pre-wrap; line-height:1.5715; }\n  `,\n  render(d2){\n    const p = d2.params || {};\n    const D = resolveTokens(p);\n    const items = asArr(p.items).filter(it=>it && typeof it==='object');\n    const type = p.type || 'line';\n    const size = p.size || 'middle';\n    const centered = !!p.centered;\n\n    if(d2.state.activeKey == null){\n      const ak = (p.activeKey!=null && p.activeKey!=='') ? String(p.activeKey) : (items.length ? String(items[0].key!=null?items[0].key:0) : '');\n      d2.state.activeKey = ak;\n    }\n    let activeKey = String(d2.state.activeKey);\n    const keys = items.map((it,i)=> String(it.key!=null?it.key:i));\n    if(keys.length && keys.indexOf(activeKey)===-1){ activeKey = keys[0]; d2.state.activeKey = activeKey; }\n\n    const fs = size==='large'?D.fontSizeLG:(size==='small'?D.fontSizeSM:D.fontSize);\n    const tabPad = size==='large'?'12px 0':(size==='small'?'6px 0':'9px 0');\n    const cardPad = size==='large'?'10px 16px':(size==='small'?'5px 12px':'7px 16px');\n    const radius = size==='large'?D.borderRadiusLG:(size==='small'?D.borderRadiusSM:D.borderRadius);\n\n    const style = [\n      '--ff:'+D.fontFamily, '--fs:'+fs+'px', '--bw:'+D.lineWidth+'px',\n      '--c-text:'+D.colorText, '--c-primary:'+D.colorPrimary, '--c-primary-h:'+D.colorPrimaryHover,\n      '--c-border2:'+D.colorBorderSecondary, '--c-bg:'+D.colorBgContainer, '--c-fill3:'+D.colorFillTertiary,\n      '--c-disabled:'+D.colorTextDisabled, '--radius:'+radius+'px',\n      '--gap:'+(type==='card'?'2px':'24px'),\n      '--tabpad:'+(type==='card'?cardPad:tabPad)\n    ].join(';');\n\n    const tabsHtml = items.map((it,i)=>{\n      const k = String(it.key!=null?it.key:i);\n      const disabled = !!it.disabled;\n      const cls = ['ant-tabs-tab']; if(k===activeKey) cls.push('active'); if(disabled) cls.push('disabled');\n      const glyph = it.glyph || '';\n      const isFa = /(^|\\s)fa[srlbd]?(\\s|-)/.test(glyph);\n      const ic = glyph ? (isFa ? '<i class=\"ic '+esc(glyph)+'\"></i>' : '<span class=\"ic\">'+esc(glyph)+'</span>') : '';\n      const lbl = it.label!=null ? esc(it.label) : '';\n      return '<div class=\"'+cls.join(' ')+'\" data-key=\"'+esc(k)+'\">'+ic+'<span>'+lbl+'</span></div>';\n    }).join('');\n\n    let panel = '';\n    const act = items.find((it,i)=> String(it.key!=null?it.key:i)===activeKey);\n    if(act){\n      let inner;\n      if(Array.isArray(act.slots) && act.slots.length){\n        inner = act.slots.map((s,i)=> d2.render(s.type||s.component, s.props||s.params||{}, {key:s.key||('ts'+i), style:'height:auto;display:block'})).join('');\n      } else {\n        inner = esc(act.content!=null?act.content:'');\n      }\n      panel = '<div class=\"ant-tabs-panel\">'+inner+'</div>';\n    }\n\n    const barCls = ['ant-tabs-bar']; if(centered) barCls.push('centered');\n    return '<div class=\"ant-tabs '+esc(type)+'\" style=\"'+style+'\"><div class=\"'+barCls.join(' ')+'\">'+tabsHtml+'</div>'+panel+'</div>';\n  },\n  mounted(d2){\n    d2.on('.ant-tabs-tab','click',(e,el)=>{\n      if(el.classList.contains('disabled')) return;\n      const k = el.getAttribute('data-key');\n      if(k==null) return;\n      d2.state.activeKey = k;\n      d2.emit('onChange', k);\n    });\n  }\n};"}},"items":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"items"}}}},"activeKey":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"activeKey"}}}},"type":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"type"}}}},"size":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"size"}}}},"centered":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"centered"}}}},"onChange":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"onChange"}}}},"tokens":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tokens"}}}}}}}}}},{"_id":"6a2d926558bb101c909482da","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"ant-button","package":"gabz-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 defaults = {\n  colorPrimary:'#1677ff', colorPrimaryHover:'#4096ff', colorPrimaryActive:'#0958d9', colorPrimaryBg:'#e6f4ff', colorPrimaryBgHover:'#bae0ff',\n  colorSuccess:'#52c41a', colorSuccessHover:'#73d13d', colorSuccessActive:'#389e0d', colorSuccessBg:'#f6ffed', colorSuccessBgHover:'#d9f7be',\n  colorWarning:'#faad14', colorWarningHover:'#ffc53d', colorWarningActive:'#d48806', colorWarningBg:'#fffbe6', colorWarningBgHover:'#fff1b8',\n  colorError:'#ff4d4f', colorErrorHover:'#ff7875', colorErrorActive:'#d9363e', colorErrorBg:'#fff2f0', colorErrorBgHover:'#ffece8',\n  colorInfo:'#1677ff', colorInfoHover:'#4096ff', colorInfoActive:'#0958d9', colorInfoBg:'#e6f4ff', colorInfoBgHover:'#bae0ff',\n  colorText:'rgba(0,0,0,0.88)', colorTextLightSolid:'#ffffff', colorTextDisabled:'rgba(0,0,0,0.25)',\n  colorBorder:'#d9d9d9',\n  colorBgContainer:'#ffffff', colorBgContainerDisabled:'rgba(0,0,0,0.04)',\n  colorBgSolid:'rgba(0,0,0,0.88)', colorBgSolidHover:'rgba(0,0,0,0.75)', colorBgSolidActive:'rgba(0,0,0,1)',\n  colorFillTertiary:'rgba(0,0,0,0.04)', colorFillSecondary:'rgba(0,0,0,0.06)', colorFill:'rgba(0,0,0,0.15)',\n  colorBgTextHover:'rgba(0,0,0,0.06)', colorBgTextActive:'rgba(0,0,0,0.15)',\n  borderRadius:6, borderRadiusSM:4, borderRadiusLG:8,\n  controlHeight:32, controlHeightSM:24, controlHeightLG:40,\n  fontSize:14, fontSizeLG:16,\n  paddingInline:15, paddingInlineSM:7, paddingInlineLG:15,\n  lineWidth:1,\n  fontFamily:\"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif\",\n};\n\nfunction statusPal(D, color){\n  const map = {\n    primary:['colorPrimary','colorPrimaryHover','colorPrimaryActive','colorPrimaryBg','colorPrimaryBgHover'],\n    success:['colorSuccess','colorSuccessHover','colorSuccessActive','colorSuccessBg','colorSuccessBgHover'],\n    warning:['colorWarning','colorWarningHover','colorWarningActive','colorWarningBg','colorWarningBgHover'],\n    error:['colorError','colorErrorHover','colorErrorActive','colorErrorBg','colorErrorBgHover'],\n    info:['colorInfo','colorInfoHover','colorInfoActive','colorInfoBg','colorInfoBgHover'],\n  }[color];\n  if(!map) return null;\n  return { main:D[map[0]], hover:D[map[1]], active:D[map[2]], bg:D[map[3]], bgHover:D[map[4]] };\n}\n\nfunction clamp(x){ return Math.max(0, Math.min(255, Math.round(x))); }\nfunction parseColor(c){\n  if(c == null) return null;\n  if(typeof c === 'object'){ c = c.rgba || c.hex || c.value || c.color || ''; }\n  c = String(c).trim();\n  let m = c.match(/^#([0-9a-fA-F]{3})$/);\n  if(m){ const h=m[1]; return { r:parseInt(h[0]+h[0],16), g:parseInt(h[1]+h[1],16), b:parseInt(h[2]+h[2],16) }; }\n  m = c.match(/^#([0-9a-fA-F]{6})$/);\n  if(m){ const h=m[1]; return { r:parseInt(h.slice(0,2),16), g:parseInt(h.slice(2,4),16), b:parseInt(h.slice(4,6),16) }; }\n  m = c.match(/^rgba?\\(([^)]+)\\)$/i);\n  if(m){ const p=m[1].split(',').map(s=>parseFloat(s)); return { r:p[0], g:p[1], b:p[2] }; }\n  return null;\n}\nfunction rgbStr(o){ return 'rgb('+clamp(o.r)+','+clamp(o.g)+','+clamp(o.b)+')'; }\nfunction mix(a,b,w){ return { r:a.r+(b.r-a.r)*w, g:a.g+(b.g-a.g)*w, b:a.b+(b.b-a.b)*w }; }\nfunction derivePal(rgb){\n  const W={r:255,g:255,b:255}, B={r:0,g:0,b:0};\n  return { main:rgbStr(rgb), hover:rgbStr(mix(rgb,W,0.18)), active:rgbStr(mix(rgb,B,0.13)),\n           bg:rgbStr(mix(rgb,W,0.9)), bgHover:rgbStr(mix(rgb,W,0.82)) };\n}\n\nfunction resolve(D, pal, variant, disabled){\n  const white = D.colorTextLightSolid;\n  const v = { bw:D.lineWidth, bs:'solid', bc:'transparent', bch:'transparent', bca:'transparent',\n              bg:'transparent', bgh:'transparent', bga:'transparent',\n              fg:D.colorText, fgh:D.colorText, fga:D.colorText };\n  if(!pal){\n    if(variant==='solid'){ v.bg=D.colorBgSolid; v.bgh=D.colorBgSolidHover; v.bga=D.colorBgSolidActive; v.fg=v.fgh=v.fga=white; v.bc=v.bg; v.bch=v.bgh; v.bca=v.bga; }\n    else if(variant==='dashed'){ v.bs='dashed'; v.bg=v.bgh=v.bga=D.colorBgContainer; v.fg=D.colorText; v.fgh=D.colorPrimaryHover; v.fga=D.colorPrimaryActive; v.bc=D.colorBorder; v.bch=D.colorPrimaryHover; v.bca=D.colorPrimaryActive; }\n    else if(variant==='filled'){ v.bg=D.colorFillTertiary; v.bgh=D.colorFillSecondary; v.bga=D.colorFill; v.fg=v.fgh=v.fga=D.colorText; }\n    else if(variant==='text'){ v.bgh=D.colorBgTextHover; v.bga=D.colorBgTextActive; v.fg=v.fgh=v.fga=D.colorText; }\n    else if(variant==='link'){ v.fg=D.colorText; v.fgh=D.colorPrimaryHover; v.fga=D.colorPrimaryActive; }\n    else { v.bg=v.bgh=v.bga=D.colorBgContainer; v.fg=D.colorText; v.fgh=D.colorPrimaryHover; v.fga=D.colorPrimaryActive; v.bc=D.colorBorder; v.bch=D.colorPrimaryHover; v.bca=D.colorPrimaryActive; }\n  } else {\n    const p = pal;\n    if(variant==='solid'){ v.bg=p.main; v.bgh=p.hover; v.bga=p.active; v.fg=v.fgh=v.fga=white; v.bc=p.main; v.bch=p.hover; v.bca=p.active; }\n    else if(variant==='dashed'){ v.bs='dashed'; v.bg=v.bgh=v.bga=D.colorBgContainer; v.fg=p.main; v.fgh=p.hover; v.fga=p.active; v.bc=p.main; v.bch=p.hover; v.bca=p.active; }\n    else if(variant==='filled'){ v.bg=p.bg; v.bgh=p.bgHover; v.bga=p.bgHover; v.fg=p.main; v.fgh=p.main; v.fga=p.active; }\n    else if(variant==='text'){ v.bgh=D.colorBgTextHover; v.bga=D.colorBgTextActive; v.fg=v.fgh=v.fga=p.main; }\n    else if(variant==='link'){ v.fg=p.main; v.fgh=p.hover; v.fga=p.active; }\n    else { v.bg=v.bgh=v.bga=D.colorBgContainer; v.fg=p.main; v.fgh=p.hover; v.fga=p.active; v.bc=p.main; v.bch=p.hover; v.bca=p.active; }\n  }\n  if(disabled){\n    v.fg=v.fgh=v.fga=D.colorTextDisabled;\n    if(variant==='solid'||variant==='filled'){ v.bg=v.bgh=v.bga=D.colorBgContainerDisabled; } else { v.bg=v.bgh=v.bga='transparent'; }\n    if(variant==='outlined'||variant==='dashed'||!variant){ v.bc=v.bch=v.bca=D.colorBorder; } else { v.bc=v.bch=v.bca='transparent'; }\n  }\n  return v;\n}\n\nfunction esc(s){ return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;'); }\n\nexport default {\n  css: `\n    @import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css');\n    .ant-btn{ box-sizing:border-box; display:inline-flex; align-items:center; justify-content:center; gap:8px;\n      height:var(--h); padding:0 var(--pad); font-size:var(--fs); font-family:var(--ff); font-weight:400;\n      line-height:1; white-space:nowrap; border-radius:var(--radius); border:var(--bw) var(--bs) var(--bc);\n      background:var(--bg); color:var(--fg); cursor:pointer; user-select:none; outline:none;\n      transition:all .2s cubic-bezier(.4,0,.2,1); vertical-align:middle; text-decoration:none; }\n    .ant-btn:hover{ background:var(--bg-h); color:var(--fg-h); border-color:var(--bc-h); }\n    .ant-btn:active{ background:var(--bg-a); color:var(--fg-a); border-color:var(--bc-a); }\n    .ant-btn.block{ width:100%; }\n    .ant-btn.disabled{ cursor:not-allowed; }\n    .ant-btn.loading{ cursor:default; pointer-events:none; }\n    .ant-btn.icon-only{ padding:0; width:var(--h); }\n    .ant-btn.is-link{ height:auto; padding:0; border-width:0; }\n    .ant-btn .ic{ display:inline-flex; align-items:center; justify-content:center; font-size:1em; line-height:0; }\n    .ant-btn .spin{ width:1em; height:1em; border:2px solid currentColor; border-top-color:transparent;\n      border-radius:50%; display:inline-block; animation:antspin .8s linear infinite; }\n    @keyframes antspin{ to{ transform:rotate(360deg); } }\n  `,\n  render(d2){\n    const p = d2.params || {};\n    const variant = p.variant || 'outlined';\n    const size = p.size || 'middle';\n    const shape = p.shape || 'default';\n    const label = p.label != null ? String(p.label) : '';\n    const glyph = p.glyph || '';\n    const iconPos = p.iconPosition || 'start';\n    const loading = !!p.loading;\n    const disabled = !!p.disabled;\n    const block = !!p.block;\n\n    // ---- token resolution: accept the AntDesignTokens shape (semanticsLight/Dark + state) OR a flat token object\n    const tk = (p.tokens && typeof p.tokens === 'object') ? p.tokens : {};\n    let sem = tk;\n    if(tk.semanticsLight || tk.semanticsDark){ sem = tk.darkMode ? (tk.semanticsDark || {}) : (tk.semanticsLight || {}); }\n    const T = {};\n    for(const k in sem){ let val = sem[k]; if(val == null || val === '') continue; if(typeof val === 'object') val = val.rgba || val.hex || val.value || val.color; if(val != null && val !== '') T[k] = val; }\n    const D = Object.assign({}, defaults, T);\n    if(tk.fontFamily) D.fontFamily = tk.fontFamily;\n    if((tk.density || 'comfortable') === 'compact'){ D.controlHeight=28; D.controlHeightSM=22; D.controlHeightLG=36; D.paddingInline=12; D.paddingInlineSM=6; D.paddingInlineLG=12; }\n    ['Primary','Success','Warning','Error','Info'].forEach(function(C){\n      const bk = 'color'+C;\n      if(T[bk] && !T[bk+'Hover']){ const rgb = parseColor(T[bk]); if(rgb){ const dp = derivePal(rgb); D[bk+'Hover']=dp.hover; D[bk+'Active']=dp.active; D[bk+'Bg']=dp.bg; D[bk+'BgHover']=dp.bgHover; } }\n    });\n\n    let colorRaw = p.color;\n    if(colorRaw && typeof colorRaw === 'object') colorRaw = colorRaw.rgba || colorRaw.hex || colorRaw.value || colorRaw.color || '';\n    let color = (colorRaw == null || colorRaw === '') ? 'default' : String(colorRaw).trim();\n    if(color === 'danger') color = 'error';\n    let pal = null;\n    if(color !== 'default'){\n      pal = statusPal(D, color);\n      if(!pal){ const rgb = parseColor(color); pal = rgb ? derivePal(rgb) : null; }\n    }\n\n    const v = resolve(D, pal, variant, disabled);\n    const SZ = ({\n      small:{ h:D.controlHeightSM, fs:D.fontSize, pad:D.paddingInlineSM, r:D.borderRadiusSM },\n      large:{ h:D.controlHeightLG, fs:D.fontSizeLG, pad:D.paddingInlineLG, r:D.borderRadiusLG },\n      middle:{ h:D.controlHeight, fs:D.fontSize, pad:D.paddingInline, r:D.borderRadius },\n    })[size] || { h:D.controlHeight, fs:D.fontSize, pad:D.paddingInline, r:D.borderRadius };\n\n    let radius = SZ.r + 'px';\n    if(shape==='round') radius = (SZ.h/2) + 'px';\n    if(shape==='circle') radius = '50%';\n    const iconOnly = !label && (!!glyph || shape==='circle');\n    const isLink = variant==='link';\n\n    const style = [\n      '--h:'+SZ.h+'px', '--pad:'+SZ.pad+'px', '--fs:'+SZ.fs+'px', '--radius:'+radius,\n      '--bw:'+v.bw+'px', '--bs:'+v.bs,\n      '--bc:'+v.bc, '--bc-h:'+v.bch, '--bc-a:'+v.bca,\n      '--bg:'+v.bg, '--bg-h:'+v.bgh, '--bg-a:'+v.bga,\n      '--fg:'+v.fg, '--fg-h:'+v.fgh, '--fg-a:'+v.fga,\n      '--ff:'+D.fontFamily\n    ].join(';');\n\n    const classes = ['ant-btn'];\n    if(block) classes.push('block');\n    if(disabled) classes.push('disabled');\n    if(loading) classes.push('loading');\n    if(iconOnly) classes.push('icon-only');\n    if(isLink) classes.push('is-link');\n\n    const isFa = /(^|\\s)fa[srlbd]?(\\s|-)/.test(glyph);\n    const iconHtml = glyph ? (String(glyph).charAt(0)==='<' ? '<span class=\"ic\">'+glyph+'</span>' : (isFa ? '<i class=\"ic '+esc(glyph)+'\"></i>' : '<span class=\"ic\">'+esc(glyph)+'</span>')) : '';\n    const spinHtml = '<span class=\"spin\"></span>';\n    const lead = loading ? spinHtml : (iconPos==='start' ? iconHtml : '');\n    const trail = (!loading && iconPos==='end') ? iconHtml : '';\n    const labelHtml = label ? '<span class=\"lbl\">'+esc(label)+'</span>' : '';\n\n    return '<button type=\"button\" class=\"'+classes.join(' ')+'\" style=\"'+style+'\"'+(disabled?' disabled':'')+'>'+lead+labelHtml+trail+'</button>';\n  },\n  mounted(d2){\n    d2.on('.ant-btn','click',(e)=>{\n      const p = d2.params || {};\n      if(p.disabled || p.loading) return;\n      d2.emit('onClick', {});\n    });\n  }\n};"}},"color":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"color"}}}},"variant":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"variant"}}}},"size":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"size"}}}},"shape":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"shape"}}}},"iconPosition":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"iconPosition"}}}},"label":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"label"}}}},"glyph":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"glyph"}}}},"loading":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"loading"}}}},"disabled":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"disabled"}}}},"block":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"block"}}}},"tokens":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tokens"}}}},"onClick":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"onClick"}}}}}}}}}},{"_id":"6a46562a7c6927a846978db9","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"crm-kanban","package":"gabz-playground","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `.kb{display:flex;gap:12px;height:100%;box-sizing:border-box;padding:14px;overflow:auto;align-items:stretch}\n    .kanban-column{flex:1;min-width:200px;display:flex;flex-direction:column;border-radius:12px;\n      background:var(--col-bg);border:1px solid var(--stroke);box-sizing:border-box;overflow:hidden;transition:background .15s,border-color .15s}\n    .kanban-column[data-over]{border-color:var(--accent);background:var(--col-over)}\n    .col-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 14px;border-bottom:1px solid var(--stroke)}\n    .col-title{font-size:13px;font-weight:700;letter-spacing:.02em}\n    .col-dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:7px;vertical-align:middle}\n    .col-count{font-size:12px;font-weight:600;min-width:22px;text-align:center;padding:1px 8px;border-radius:999px;background:var(--pill-bg);color:var(--pill-text)}\n    .col-body{flex:1;padding:10px;display:flex;flex-direction:column;gap:9px;overflow:auto;min-height:60px}\n    .kanban-card{position:relative;padding:11px 12px;border-radius:10px;background:var(--card-bg);border:1px solid var(--stroke);\n      cursor:grab;box-shadow:0 1px 2px rgba(0,0,0,.05);transition:box-shadow .15s,opacity .15s,transform .1s}\n    .kanban-card:hover{box-shadow:0 3px 10px rgba(0,0,0,.10)}\n    .kanban-card[data-drag]{opacity:.45}\n    .card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}\n    .card-name{font-size:14px;font-weight:700;line-height:1.25;word-break:break-word}\n    .card-company{font-size:12px;opacity:.62;margin-top:1px;word-break:break-word}\n    .card-meta{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px}\n    .score{font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;background:var(--score-bg);color:var(--score-text);white-space:nowrap}\n    .owner{display:flex;align-items:center;gap:6px;font-size:11px;opacity:.75;min-width:0}\n    .avatar{width:20px;height:20px;border-radius:50%;object-fit:cover;flex:0 0 auto;background:var(--pill-bg)}\n    .avatar-i{width:20px;height:20px;border-radius:50%;flex:0 0 auto;display:flex;align-items:center;justify-content:center;\n      font-size:9px;font-weight:700;background:var(--accent);color:#fff}\n    .owner-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n    .menu-btn{flex:0 0 auto;width:24px;height:24px;border:0;border-radius:6px;background:transparent;color:var(--text);\n      cursor:pointer;font-size:16px;line-height:1;opacity:.55}\n    .menu-btn:hover{opacity:1;background:var(--pill-bg)}\n    .menu{position:absolute;top:34px;right:8px;z-index:20;min-width:150px;padding:5px;border-radius:10px;\n      background:var(--card-bg);border:1px solid var(--stroke);box-shadow:0 8px 28px rgba(0,0,0,.22)}\n    .menu-item{display:block;width:100%;text-align:left;padding:8px 10px;border:0;border-radius:7px;background:transparent;\n      color:var(--text);font-size:13px;cursor:pointer}\n    .menu-item:hover{background:var(--pill-bg)}\n    .col-empty{font-size:12px;opacity:.4;padding:14px 6px;text-align:center}\n    .kb-loading{padding:24px;font-size:13px;opacity:.6}`,\n\n  render(d2) {\n    const tokens = d2.param('tokens', {}) || {};\n    const dark = !!tokens.darkMode;\n    const sem = (dark ? tokens.semanticsDark : tokens.semanticsLight) || {};\n    const accent = sem.colorPrimary || '#1677ff';\n    const text = sem.colorText || (dark ? 'rgba(255,255,255,0.85)' : 'rgba(0,0,0,0.88)');\n    const surface = sem.colorBgContainer || (dark ? '#141414' : '#ffffff');\n    const layout = sem.colorBgLayout || (dark ? '#000000' : '#f5f5f5');\n    const font = tokens.fontFamily || \"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif\";\n\n    const colBg = dark ? 'rgba(255,255,255,0.03)' : 'rgba(0,0,0,0.025)';\n    const colOver = dark ? 'rgba(255,255,255,0.07)' : 'rgba(0,0,0,0.045)';\n    const stroke = dark ? 'rgba(255,255,255,0.12)' : 'rgba(0,0,0,0.09)';\n    const pillBg = dark ? 'rgba(255,255,255,0.10)' : 'rgba(0,0,0,0.06)';\n    const scoreBg = 'color-mix(in srgb, ' + accent + ' 16%, transparent)';\n\n    const esc = (s) => String(s == null ? '' : s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n\n    const COLUMNS = [\n      { key: 'New', dot: '#8c8c8c' },\n      { key: 'Contacted', dot: '#1677ff' },\n      { key: 'Qualified', dot: '#faad14' },\n      { key: 'Converted', dot: '#52c41a' }\n    ];\n\n    const rootStyle = 'background:' + layout + ';color:' + text + ';font-family:' + font +\n      ';--text:' + text + ';--accent:' + accent + ';--col-bg:' + colBg + ';--col-over:' + colOver +\n      ';--card-bg:' + surface + ';--stroke:' + stroke + ';--pill-bg:' + pillBg +\n      ';--pill-text:' + text + ';--score-bg:' + scoreBg + ';--score-text:' + accent + '';\n\n    const ds = d2.data('leads');\n    if (ds && ds.loading) {\n      return '<div class=\"kb\" style=\"' + rootStyle + '\"><div class=\"kb-loading\">Loading leads…</div></div>';\n    }\n    const rows = (ds ? ds.records() : []) || [];\n\n    // Resolve owners (optional dataset param) into an id -> {name, avatar} map.\n    const owners = {};\n    const od = d2.data('owners');\n    const orows = (od && !od.loading ? od.records() : []) || [];\n    orows.forEach((o) => { if (o && o._id) owners[o._id] = o; });\n\n    const openId = d2.state.menuOpen || null;\n\n    const columnHtml = COLUMNS.map((col) => {\n      const cards = rows.filter((r) => (r && r.status) === col.key);\n      const cardsHtml = cards.length\n        ? cards.map((r) => {\n            const owner = r.ownerId && owners[r.ownerId] ? owners[r.ownerId] : null;\n            const ownerName = owner ? (owner.name || '') : '';\n            const avatarUrl = owner ? (owner.avatar || '') : '';\n            const inits = ownerName ? d2.fmt.initials(ownerName, 2) : '';\n            const ownerBlock = ownerName\n              ? '<div class=\"owner\">' +\n                  (avatarUrl\n                    ? '<img class=\"avatar\" src=\"' + esc(avatarUrl) + '\" alt=\"\"/>'\n                    : '<span class=\"avatar-i\">' + esc(inits) + '</span>') +\n                  '<span class=\"owner-name\">' + esc(ownerName) + '</span></div>'\n              : '<div class=\"owner\"></div>';\n            const isOpen = openId === r._id;\n            const menu = isOpen\n              ? '<div class=\"menu\" data-menu=\"' + esc(r._id) + '\">' +\n                  '<button class=\"menu-item\" data-act=\"edit\" data-id=\"' + esc(r._id) + '\">Edit</button>' +\n                  '<button class=\"menu-item\" data-act=\"followup\" data-id=\"' + esc(r._id) + '\">Log follow-up</button>' +\n                  '<button class=\"menu-item\" data-act=\"convert\" data-id=\"' + esc(r._id) + '\">Convert</button>' +\n                '</div>'\n              : '';\n            const score = Number(r.score) || 0;\n            return '<div class=\"kanban-card\" draggable=\"true\" data-key=\"' + esc(r._id) + '\" data-id=\"' + esc(r._id) + '\">' +\n                '<div class=\"card-top\">' +\n                  '<div style=\"min-width:0\">' +\n                    '<div class=\"card-name\">' + esc(r.name) + '</div>' +\n                    '<div class=\"card-company\">' + esc(r.company) + '</div>' +\n                  '</div>' +\n                  '<button class=\"menu-btn\" data-menu-toggle=\"' + esc(r._id) + '\" aria-label=\"Actions\">⋯</button>' +\n                '</div>' +\n                '<div class=\"card-meta\">' +\n                  '<span class=\"score\">Score ' + score + '</span>' +\n                  ownerBlock +\n                '</div>' +\n                menu +\n              '</div>';\n          }).join('')\n        : '<div class=\"col-empty\">No leads</div>';\n\n      return '<div class=\"kanban-column\" data-status=\"' + col.key + '\">' +\n          '<div class=\"col-head\">' +\n            '<span class=\"col-title\"><span class=\"col-dot\" style=\"background:' + col.dot + '\"></span>' + col.key + '</span>' +\n            '<span class=\"col-count\">' + cards.length + '</span>' +\n          '</div>' +\n          '<div class=\"col-body\" data-status=\"' + col.key + '\">' + cardsHtml + '</div>' +\n        '</div>';\n    }).join('');\n\n    return '<div class=\"kb\" style=\"' + rootStyle + '\">' + columnHtml + '</div>';\n  },\n\n  mounted(d2) {\n    // --- Card actions (menu) ---\n    d2.on('.menu-btn', 'click', (e, el) => {\n      e.stopPropagation();\n      const id = el.getAttribute('data-menu-toggle');\n      d2.state.menuOpen = d2.state.menuOpen === id ? null : id;\n    });\n\n    d2.on('.menu-item', 'click', (e, el) => {\n      e.stopPropagation();\n      const id = el.getAttribute('data-id');\n      const act = el.getAttribute('data-act');\n      const ds = d2.data('leads');\n      const rec = (ds ? ds.records() : []).find((r) => r && r._id === id) || { _id: id };\n      d2.state.menuOpen = null;\n      if (act === 'edit') {\n        // store-driven edit (emit payloads are uncapturable in handlers — Task 16); fan the lead into draft_* and open the edit drawer\n        try {\n          const s = d2.store('crm-ui');\n          if (s) {\n            s.set('editType', 'leads');\n            s.set('editId', String(id));\n            s.set('draft_name', (rec && rec.name) || '');\n            s.set('draft_company', (rec && rec.company) || '');\n            s.set('draft_email', (rec && rec.email) || '');\n            s.set('draft_phone', (rec && rec.phone) || '');\n            s.set('draft_source', (rec && rec.source) || '');\n            s.set('draft_status', (rec && rec.status) || '');\n            s.set('draft_score', (rec && rec.score != null) ? String(rec.score) : '');\n            s.set('draft_ownerId', (rec && rec.ownerId) || '');\n            s.set('draft_notes', (rec && rec.notes) || '');\n            s.set('editOpen', true);\n          }\n        } catch (_e) {}\n        d2.emit('onEdit', rec);\n      }\n      else if (act === 'followup') {\n        // store-driven follow-up (emit payloads are uncapturable in handlers — Task 16); scope to this lead\n        try {\n          const s = d2.store('crm-ui');\n          if (s) {\n            ['type','subject','notes','dueDate'].forEach((k) => s.set('f_'+k, ''));\n            s.set('followupType', 'lead');\n            s.set('followupRelatedId', String(id));\n            s.set('followupOwnerId', (rec && rec.ownerId) || '');\n            s.set('followupOpen', true);\n          }\n        } catch (_e) {}\n        d2.emit('onFollowUp', rec);\n      }\n      else if (act === 'convert') { try { d2.store('crm-ui').set('convertPending', id); } catch (_e) {} d2.emit('onConvert', rec); }\n    });\n\n    // Close any open menu on outside click.\n    d2.on(document, 'click', () => { if (d2.state.menuOpen) d2.state.menuOpen = null; });\n\n    // --- HTML5 drag & drop (cards draggable, columns are drop targets) ---\n    d2.on('.kanban-card', 'dragstart', (e, el) => {\n      const id = el.getAttribute('data-id');\n      if (e.dataTransfer) {\n        e.dataTransfer.setData('text/plain', id);\n        e.dataTransfer.effectAllowed = 'move';\n      }\n      el.setAttribute('data-drag', '');\n    });\n    d2.on('.kanban-card', 'dragend', (e, el) => el.removeAttribute('data-drag'));\n\n    d2.on('.kanban-column', 'dragover', (e, el) => {\n      e.preventDefault();\n      if (e.dataTransfer) e.dataTransfer.dropEffect = 'move';\n      el.setAttribute('data-over', '');\n    });\n    d2.on('.kanban-column', 'dragleave', (e, el) => {\n      // Only clear when leaving the column entirely (not moving between its children).\n      if (!el.contains(e.relatedTarget)) el.removeAttribute('data-over');\n    });\n\n    d2.on('.kanban-column', 'drop', async (e, el) => {\n      e.preventDefault();\n      el.removeAttribute('data-over');\n      const id = e.dataTransfer ? e.dataTransfer.getData('text/plain') : '';\n      const target = el.getAttribute('data-status');\n      if (!id || !target) return;\n      const ds = d2.data('leads');\n      if (!ds) return;\n      const rec = (ds.records() || []).find((r) => r && r._id === id);\n      if (!rec) return;\n      if (rec.status === target) return; // same column - no-op\n      // PERSIST: patch the crm_leads record's status; reactive re-read updates the board.\n      await ds.update({ ...rec, status: target });\n    });\n  }\n};"}},"leads":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"leads"}}}},"owners":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"owners"}}}},"tokens":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tokens"}}}},"onEdit":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"onEdit"}}}},"onFollowUp":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"onFollowUp"}}}},"onConvert":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"onConvert"}}}}}}}}}},{"_id":"6a466f54bf38d382814f3b68","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"crm-detail","package":"gabz-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 ANT_DEFAULTS = { colorPrimary:'#1677ff', colorSuccess:'#52c41a', colorWarning:'#faad14', colorError:'#ff4d4f', colorText:'rgba(0,0,0,0.88)', colorTextSecondary:'rgba(0,0,0,0.65)', colorTextTertiary:'rgba(0,0,0,0.45)', colorBorderSecondary:'#f0f0f0', colorBgContainer:'#ffffff', fontFamily:\"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif\" };\nfunction resolveTokens(p){ const tk=(p&&typeof p==='object')?p:{}; let sem=tk; if(tk.semanticsLight||tk.semanticsDark){ sem=tk.darkMode?(tk.semanticsDark||{}):(tk.semanticsLight||{}); } const D=Object.assign({},ANT_DEFAULTS); for(const k in sem){ let v=sem[k]; if(v==null||v==='')continue; if(typeof v==='object')v=v.rgba||v.hex||v.value||v.color; if(v!=null&&v!=='')D[k]=v; } if(tk.fontFamily)D.fontFamily=tk.fontFamily; return D; }\nfunction esc(s){ return String(s==null?'':s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;'); }\n\nconst TYPES = {\n  lead: {\n    ds: 'leads', label: 'Lead', titleField: 'name',\n    fields: [\n      { k:'name', label:'Name' }, { k:'company', label:'Company' },\n      { k:'email', label:'Email' }, { k:'phone', label:'Phone' },\n      { k:'source', label:'Source' }, { k:'status', label:'Status' },\n      { k:'score', label:'Score' }, { k:'ownerId', label:'Owner ID' },\n      { k:'notes', label:'Notes', span:2 }\n    ]\n  },\n  deal: {\n    ds: 'deals', label: 'Deal', titleField: 'name',\n    fields: [\n      { k:'name', label:'Name', span:2 }, { k:'amount', label:'Amount', money:true },\n      { k:'stage', label:'Stage' }, { k:'probability', label:'Probability', pct:true },\n      { k:'expectedCloseDate', label:'Expected Close', date:true },\n      { k:'accountId', label:'Account ID' }, { k:'contactId', label:'Contact ID' },\n      { k:'ownerId', label:'Owner ID' }\n    ]\n  },\n  account: {\n    ds: 'accounts', label: 'Account', titleField: 'name',\n    fields: [\n      { k:'name', label:'Name', span:2 }, { k:'industry', label:'Industry' },\n      { k:'size', label:'Size (employees)' }, { k:'website', label:'Website' },\n      { k:'annualRevenue', label:'Annual Revenue', money:true },\n      { k:'status', label:'Status' }, { k:'ownerId', label:'Owner ID' }\n    ]\n  },\n  contact: {\n    ds: 'contacts', label: 'Contact', titleField: null,\n    fields: [\n      { k:'firstName', label:'First Name' }, { k:'lastName', label:'Last Name' },\n      { k:'email', label:'Email' }, { k:'phone', label:'Phone' },\n      { k:'title', label:'Title' }, { k:'accountId', label:'Account ID' },\n      { k:'isPrimary', label:'Primary Contact' }\n    ]\n  }\n};\n\nfunction fmtVal(d2, f, rec){\n  let v = rec ? rec[f.k] : null;\n  if (v == null || v === '') return '—';\n  try {\n    if (f.money) return d2.fmt.currency(Number(v));\n    if (f.pct) return String(v) + '%';\n    if (f.date) return d2.fmt.date(v);\n    if (typeof v === 'boolean') return v ? 'Yes' : 'No';\n  } catch(e) {}\n  return String(v);\n}\n\nfunction recordTitle(cfg, rec){\n  if (!rec) return '';\n  if (cfg.titleField && rec[cfg.titleField]) return String(rec[cfg.titleField]);\n  const nm = [rec.firstName, rec.lastName].filter(Boolean).join(' ');\n  return nm || String(rec._id || '');\n}\n\nexport default {\n  css: `\n    .cd{ box-sizing:border-box; font-family:var(--ff); color:var(--c-text); width:100%; height:100%; overflow:auto; padding:4px; }\n    .cd *{ box-sizing:border-box; }\n    .cd-head{ display:flex; align-items:flex-start; justify-content:space-between; gap:16px; margin-bottom:20px; }\n    .cd-title{ font-size:24px; font-weight:600; color:var(--c-text); line-height:1.2; }\n    .cd-sub{ font-size:13px; color:var(--c-sec); margin-top:4px; }\n    .cd-editbtn{ height:36px; padding:0 18px; font-size:14px; border-radius:6px; cursor:pointer; border:1px solid var(--cp); background:var(--cp); color:#fff; transition:opacity .2s; white-space:nowrap; }\n    .cd-editbtn:hover{ opacity:.9; }\n    .cd-editbtn[disabled]{ opacity:.4; cursor:not-allowed; }\n    .cd-headbtns{ display:flex; gap:10px; flex-shrink:0; }\n    .cd-followbtn{ height:36px; padding:0 18px; font-size:14px; border-radius:6px; cursor:pointer; border:1px solid var(--cp); background:transparent; color:var(--cp); transition:all .2s; white-space:nowrap; }\n    .cd-followbtn:hover{ background:var(--cp); color:#fff; }\n    .cd-followbtn[disabled]{ opacity:.4; cursor:not-allowed; }\n    .cd-cols{ display:flex; gap:24px; align-items:flex-start; }\n    .cd-left{ flex:1 1 60%; min-width:0; }\n    .cd-right{ flex:1 1 40%; min-width:0; }\n    .cd-sec-title{ font-size:15px; font-weight:600; color:var(--c-text); margin:0 0 12px; }\n    .cd-desc{ border:1px solid var(--c-line); border-radius:8px; overflow:hidden; }\n    .cd-desc-row{ display:flex; border-bottom:1px solid var(--c-line); }\n    .cd-desc-row:last-child{ border-bottom:none; }\n    .cd-desc-cell{ display:flex; flex:1 1 0; min-width:0; border-right:1px solid var(--c-line); }\n    .cd-desc-cell:last-child{ border-right:none; }\n    .cd-desc-cell.span2{ flex:2 2 0; }\n    .cd-desc-lbl{ flex:0 0 130px; padding:10px 14px; background:var(--c-lblbg); font-weight:500; color:var(--c-sec); font-size:13px; }\n    .cd-desc-val{ flex:1 1 auto; padding:10px 14px; color:var(--c-text); font-size:14px; word-break:break-word; }\n    .cd-tl{ list-style:none; margin:0; padding:0; }\n    .cd-tl .tl-item{ position:relative; display:flex; padding-bottom:20px; }\n    .cd-tl .tl-item:last-child{ padding-bottom:0; }\n    .cd-tl .tl-rail{ position:relative; flex:0 0 auto; width:12px; display:flex; flex-direction:column; align-items:center; }\n    .cd-tl .tl-dot{ position:relative; z-index:1; width:10px; height:10px; border-radius:50%; box-sizing:border-box; border:2px solid var(--dot,var(--cp)); background:transparent; margin-top:4px; }\n    .cd-tl .tl-line{ position:absolute; top:6px; bottom:-20px; left:50%; transform:translateX(-50%); width:2px; background:var(--c-line); }\n    .cd-tl .tl-item:last-child .tl-line{ display:none; }\n    .cd-tl .tl-content{ flex:1 1 auto; padding-left:14px; padding-bottom:2px; }\n    .cd-tl .tl-label{ color:var(--c-sec); font-size:13px; margin-bottom:2px; }\n    .cd-tl .tl-body{ color:var(--c-text); }\n    .cd-empty{ color:var(--c-sec); font-size:13px; padding:8px 0; }\n    .cd-count{ font-size:12px; color:var(--c-sec); font-weight:400; margin-left:6px; }\n  `,\n  render(d2){\n    const tokens = d2.param('tokens', {}) || {};\n    const D = resolveTokens(tokens);\n\n    let type = '', id = '';\n    try {\n      const r = d2.router('crm-router');\n      const rp = (r && r.params) || {};\n      type = rp.type || ''; id = rp.id || '';\n    } catch(e) {}\n    const store = d2.store('crm-ui');\n    if (!type && store) type = store.get('detailType') || '';\n    if (!id && store) id = store.get('detailId') || '';\n    type = String(type || '').toLowerCase();\n\n    const dark = !!((tokens && tokens.darkMode) || (store && store.get('darkMode')));\n    // colorText IS set per-mode by the recipe; secondary/tertiary/line are NOT, so derive them from `dark`.\n    const cText = D.colorText || (dark?'rgba(255,255,255,0.85)':'rgba(0,0,0,0.88)');\n    const cSec = dark ? 'rgba(255,255,255,0.55)' : 'rgba(0,0,0,0.55)';\n    const cLine = dark ? '#303030' : (D.colorBorderSecondary||'#f0f0f0');\n    const cp = D.colorPrimary || (store && store.get('accent')) || '#4f46e5';\n    const lblBg = dark ? 'rgba(255,255,255,0.04)' : '#fafafa';\n    const style = [\n      '--ff:'+D.fontFamily, '--c-text:'+cText, '--c-sec:'+cSec,\n      '--c-line:'+cLine, '--cp:'+cp, '--c-lblbg:'+lblBg\n    ].join(';');\n\n    const cfg = TYPES[type];\n    if (!cfg) {\n      return '<div class=\"cd\" style=\"'+style+'\"><div class=\"cd-empty\">No record selected. Expected a /record/:type/:id route (type = lead | deal | account | contact).</div></div>';\n    }\n\n    const ds = d2.data(cfg.ds);\n    const dsLoading = ds && ds.loading;\n    const rows = (ds && !dsLoading) ? (ds.records() || []) : [];\n    let rec = null;\n    for (let i=0;i<rows.length;i++){ if (rows[i] && String(rows[i]._id) === String(id)) { rec = rows[i]; break; } }\n\n    const acts = d2.data('activities');\n    const actLoading = acts && acts.loading;\n    const allActs = (acts && !actLoading) ? (acts.records() || []) : [];\n    const mine = allActs.filter(function(a){ return a && String(a.relatedId) === String(id); })\n      .sort(function(a,b){ const da=new Date((a&&a.createdAt)||0).getTime()||0; const db=new Date((b&&b.createdAt)||0).getTime()||0; return db-da; });\n\n    const title = rec ? recordTitle(cfg, rec) : (dsLoading ? 'Loading…' : 'Record not found');\n    const sub = cfg.label + (id ? ' · ' + id : '');\n    const canEdit = (type === 'lead' && !!rec);\n    const editBtn = '<button class=\"cd-editbtn\" data-act=\"edit\"'+(canEdit?'':' disabled title=\"Edit available for leads\"')+'>Edit '+esc(cfg.label)+'</button>';\n    const canFollow = !!rec;\n    const followBtn = '<button class=\"cd-followbtn\" data-act=\"followup\"'+(canFollow?'':' disabled')+'>Log follow-up</button>';\n    const head = '<div class=\"cd-head\"><div><div class=\"cd-title\">'+esc(title)+'</div><div class=\"cd-sub\">'+esc(sub)+'</div></div><div class=\"cd-headbtns\">'+followBtn+editBtn+'</div></div>';\n\n    let descHtml;\n    if (!rec) {\n      descHtml = '<div class=\"cd-empty\">'+(dsLoading?'Loading record…':'No '+cfg.label.toLowerCase()+' found for id '+esc(id))+'</div>';\n    } else {\n      const cells = cfg.fields.map(function(f){\n        const span = f.span===2;\n        return '<div class=\"cd-desc-cell'+(span?' span2':'')+'\"><div class=\"cd-desc-lbl\">'+esc(f.label)+'</div><div class=\"cd-desc-val\">'+esc(fmtVal(d2,f,rec))+'</div></div>';\n      });\n      const rowsOut = []; let buf = []; let units = 0;\n      for (let i=0;i<cfg.fields.length;i++){\n        const f = cfg.fields[i]; const u = f.span===2 ? 2 : 1;\n        if (units + u > 2){ rowsOut.push('<div class=\"cd-desc-row\">'+buf.join('')+'</div>'); buf=[]; units=0; }\n        buf.push(cells[i]); units += u;\n        if (units === 2){ rowsOut.push('<div class=\"cd-desc-row\">'+buf.join('')+'</div>'); buf=[]; units=0; }\n      }\n      if (buf.length){ rowsOut.push('<div class=\"cd-desc-row\">'+buf.join('')+'</div>'); }\n      descHtml = '<div class=\"cd-desc\">'+rowsOut.join('')+'</div>';\n    }\n\n    const NAMED = { blue:D.colorPrimary, green:D.colorSuccess, red:D.colorError, gray:D.colorTextTertiary };\n    const TYPECOLOR = { call:'blue', email:'green', meeting:'blue', task:'gray', note:'gray' };\n    let tlHtml;\n    if (actLoading) { tlHtml = '<div class=\"cd-empty\">Loading activity…</div>'; }\n    else if (!mine.length) { tlHtml = '<div class=\"cd-empty\">No follow-up activity for this record.</div>'; }\n    else {\n      tlHtml = '<ul class=\"cd-tl\">'+mine.map(function(r){\n        const t = (r&&r.type!=null)?String(r.type):'';\n        const subj = (r&&r.subject!=null)?String(r.subject):'';\n        let label=''; if(r&&r.createdAt){ try{ label=d2.fmt.date(r.createdAt);}catch(e){label=String(r.createdAt);} }\n        const dot = NAMED[TYPECOLOR[t.toLowerCase()]||'blue'] || cp;\n        const body = (t?t+': ':'')+subj;\n        return '<li class=\"tl-item\"><span class=\"tl-rail\"><span class=\"tl-dot\" style=\"--dot:'+esc(dot)+'\"></span><span class=\"tl-line\"></span></span>'+\n          '<div class=\"tl-content\">'+(label?'<div class=\"tl-label\">'+esc(label)+'</div>':'')+'<div class=\"tl-body\">'+esc(body)+'</div></div></li>';\n      }).join('')+'</ul>';\n    }\n    const tlCount = mine.length ? '<span class=\"cd-count\">('+mine.length+')</span>' : '';\n\n    const left = '<div class=\"cd-left\"><div class=\"cd-sec-title\">Details</div>'+descHtml+'</div>';\n    const right = '<div class=\"cd-right\"><div class=\"cd-sec-title\">Follow-up Timeline'+tlCount+'</div>'+tlHtml+'</div>';\n\n    return '<div class=\"cd\" style=\"'+style+'\">'+head+'<div class=\"cd-cols\">'+left+right+'</div></div>';\n  },\n  mounted(d2){\n    d2.on('[data-act=\"edit\"]','click',function(){\n      const s = d2.store('crm-ui');\n      if (!s) return;\n      let type='', id='';\n      try { const r=d2.router('crm-router'); const rp=(r&&r.params)||{}; type=rp.type||''; id=rp.id||''; } catch(e){}\n      if (!type) type = s.get('detailType')||'';\n      if (!id) id = s.get('detailId')||'';\n      type = String(type||'').toLowerCase();\n      const cfg = TYPES[type];\n      if (type !== 'lead' || !cfg) return;\n      const ds = d2.data(cfg.ds);\n      const rows = (ds && !ds.loading) ? (ds.records()||[]) : [];\n      let rec=null; for(let i=0;i<rows.length;i++){ if(rows[i]&&String(rows[i]._id)===String(id)){ rec=rows[i]; break; } }\n      if (!rec) return;\n      ['name','company','email','phone','source','status','score','ownerId','notes'].forEach(function(k){\n        s.set('draft_'+k, rec[k]==null?'':rec[k]);\n      });\n      s.set('editType','leads');\n      s.set('editId', String(rec._id));\n      s.set('addOpen', false);\n      s.set('editOpen', true);\n    });\n    d2.on('[data-act=\"followup\"]','click',function(){\n      const s = d2.store('crm-ui');\n      if (!s) return;\n      let type='', id='';\n      try { const r=d2.router('crm-router'); const rp=(r&&r.params)||{}; type=rp.type||''; id=rp.id||''; } catch(e){}\n      if (!type) type = s.get('detailType')||'';\n      if (!id) id = s.get('detailId')||'';\n      type = String(type||'').toLowerCase();\n      const cfg = TYPES[type];\n      if (!cfg || !id) return;\n      // resolve the record's owner (falls back to a default owner in the form)\n      let ownerId = '';\n      const ds = d2.data(cfg.ds);\n      const rows = (ds && !ds.loading) ? (ds.records()||[]) : [];\n      for(let i=0;i<rows.length;i++){ if(rows[i]&&String(rows[i]._id)===String(id)){ ownerId = rows[i].ownerId||''; break; } }\n      // clear the draft + scope the follow-up to THIS record (store-driven, Task 16 pattern)\n      ['type','subject','notes','dueDate'].forEach(function(k){ s.set('f_'+k, ''); });\n      s.set('followupType', type);\n      s.set('followupRelatedId', String(id));\n      s.set('followupOwnerId', ownerId);\n      s.set('editOpen', false);\n      s.set('followupOpen', true);\n    });\n  }\n};"}},"leads":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"leads"}}}},"deals":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"deals"}}}},"accounts":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"accounts"}}}},"contacts":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"contacts"}}}},"activities":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"activities"}}}},"tokens":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tokens"}}}}}}}}}},{"_id":"6a4651f352c2becc94e1a72c","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"crm-kpi","package":"gabz-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 ANT_DEFAULTS = { colorText:'rgba(0,0,0,0.88)', colorTextSecondary:'rgba(0,0,0,0.65)', fontSize:14, fontSizeLG:16, fontFamily:\"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif\" };\nfunction resolveTokens(p){ const tk=(p&&typeof p==='object')?p:{}; let sem=tk; if(tk.semanticsLight||tk.semanticsDark){ sem=tk.darkMode?(tk.semanticsDark||{}):(tk.semanticsLight||{}); } const D=Object.assign({},ANT_DEFAULTS); for(const k in sem){ let v=sem[k]; if(v==null||v==='')continue; if(typeof v==='object')v=v.rgba||v.hex||v.value||v.color; if(v!=null&&v!=='')D[k]=v; } if(tk.fontFamily)D.fontFamily=tk.fontFamily; return D; }\nfunction esc(s){ return String(s==null?'':s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;'); }\n\nexport default {\n  css: `\n    .ant-stat{ box-sizing:border-box; display:inline-block; font-family:var(--ff); line-height:1.4; }\n    .ant-stat .stat-title{ font-size:var(--fs); color:var(--c-sec); margin-bottom:4px; }\n    .ant-stat .stat-value{ display:inline-flex; align-items:baseline; gap:4px; font-size:24px; color:var(--c-val); font-variant-numeric:tabular-nums; }\n    .ant-stat .stat-prefix{ font-size:var(--fs-lg); color:var(--c-sec); }\n    .ant-stat .stat-suffix{ font-size:var(--fs); color:var(--c-sec); }\n    .ant-stat .stat-main{ font-size:24px; }\n  `,\n  render(d2) {\n    const metric = d2.param('metric', '');\n    const tokens = d2.param('tokens', {}) || {};\n    const D = resolveTokens(tokens);\n\n    const usesLeads = metric === 'newLeads';\n    const ds = usesLeads ? d2.data('leads') : d2.data('deals');\n    const rows = (ds && ds.records) ? (ds.records() || []) : [];\n    const loading = ds ? ds.loading : false;\n\n    const CLOSED = { Won: true, Lost: true };\n    let raw = 0;\n    if (metric === 'openPipeline') {\n      rows.forEach((r) => { const st = r && r.stage; if (!CLOSED[st]) raw += Number(r && r.amount) || 0; });\n    } else if (metric === 'dealsWon') {\n      raw = rows.filter((r) => r && r.stage === 'Won').length;\n    } else if (metric === 'conversion') {\n      const won = rows.filter((r) => r && r.stage === 'Won').length;\n      const lost = rows.filter((r) => r && r.stage === 'Lost').length;\n      raw = (won + lost) > 0 ? Math.round((won / (won + lost)) * 100) : 0;\n    } else if (metric === 'newLeads') {\n      raw = rows.filter((r) => r && r.status === 'New').length;\n    }\n\n    let display;\n    if (rows.length === 0 && loading) {\n      display = '…';\n    } else {\n      try { display = d2.fmt.number(raw); } catch (e) { display = String(raw).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ','); }\n    }\n\n    const valueColor = d2.param('valueColor', '') || D.colorText;\n    const prefix = d2.param('prefix', '');\n    const suffix = d2.param('suffix', '');\n    const title = d2.param('title', '');\n\n    const style = ['--ff:'+D.fontFamily,'--fs:'+D.fontSize+'px','--fs-lg:'+D.fontSizeLG+'px','--c-sec:'+D.colorTextSecondary,'--c-val:'+valueColor].join(';');\n    const prefixHtml = prefix ? '<span class=\"stat-prefix\">'+esc(prefix)+'</span>' : '';\n    const suffixHtml = suffix ? '<span class=\"stat-suffix\">'+esc(suffix)+'</span>' : '';\n    const titleHtml = title ? '<div class=\"stat-title\">'+esc(title)+'</div>' : '';\n\n    return '<div class=\"ant-stat\" style=\"'+style+'\">'+titleHtml+\n      '<div class=\"stat-value\">'+prefixHtml+'<span class=\"stat-main\">'+esc(display)+'</span>'+suffixHtml+'</div></div>';\n  }\n};"}},"deals":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"deals"}}}},"leads":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"leads"}}}},"metric":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"metric"}}}},"title":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"title"}}}},"prefix":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"prefix"}}}},"suffix":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"suffix"}}}},"valueColor":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"valueColor"}}}},"glyph":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"glyph"}}}},"tokens":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tokens"}}}}}}}}}},{"_id":"6a2ec1c156f919e5230ee31c","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"ant-card","package":"gabz-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 ANT_DEFAULTS = { colorPrimary:'#1677ff', colorPrimaryHover:'#4096ff', colorPrimaryActive:'#0958d9', colorPrimaryBg:'#e6f4ff', colorSuccess:'#52c41a', colorSuccessBg:'#f6ffed', colorWarning:'#faad14', colorWarningBg:'#fffbe6', colorError:'#ff4d4f', colorErrorBg:'#fff2f0', colorInfo:'#1677ff', colorInfoBg:'#e6f4ff', colorText:'rgba(0,0,0,0.88)', colorTextSecondary:'rgba(0,0,0,0.65)', colorTextTertiary:'rgba(0,0,0,0.45)', colorTextDisabled:'rgba(0,0,0,0.25)', colorTextLightSolid:'#ffffff', colorBorder:'#d9d9d9', colorBorderSecondary:'#f0f0f0', colorBgContainer:'#ffffff', colorBgContainerDisabled:'rgba(0,0,0,0.04)', colorFillTertiary:'rgba(0,0,0,0.04)', colorFillSecondary:'rgba(0,0,0,0.06)', colorFill:'rgba(0,0,0,0.15)', borderRadius:6, borderRadiusSM:4, borderRadiusLG:8, controlHeight:32, controlHeightSM:24, controlHeightLG:40, fontSize:14, fontSizeSM:12, fontSizeLG:16, lineWidth:1, fontFamily:\"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif\" };\nfunction resolveTokens(p){ const tk=(p.tokens&&typeof p.tokens==='object')?p.tokens:{}; let sem=tk; if(tk.semanticsLight||tk.semanticsDark){ sem=tk.darkMode?(tk.semanticsDark||{}):(tk.semanticsLight||{}); } const D=Object.assign({},ANT_DEFAULTS); for(const k in sem){ let v=sem[k]; if(v==null||v==='')continue; if(typeof v==='object')v=v.rgba||v.hex||v.value||v.color; if(v!=null&&v!=='')D[k]=v; } if(tk.fontFamily)D.fontFamily=tk.fontFamily; if((tk.density||'comfortable')==='compact'){D.controlHeight=28;D.controlHeightSM=22;D.controlHeightLG=36;} return D; }\nfunction esc(s){ return String(s==null?'':s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;'); }\n\nexport default {\n  css: `\n    .ant-card{ box-sizing:border-box; background:var(--bg); border-radius:var(--radius); overflow:hidden;\n      font-family:var(--ff); color:var(--fg); position:relative; transition:box-shadow .2s,border-color .2s; }\n    .ant-card.bordered{ border:var(--bw) solid var(--bc); }\n    .ant-card.hoverable{ cursor:pointer; }\n    .ant-card.hoverable:hover{ box-shadow:0 1px 2px -2px rgba(0,0,0,.16),0 3px 6px 0 rgba(0,0,0,.12),0 5px 12px 4px rgba(0,0,0,.09); border-color:transparent; }\n    .ant-card .ac-cover{ display:block; }\n    .ant-card .ac-cover img{ display:block; width:100%; height:160px; object-fit:cover; }\n    .ant-card .ac-head{ display:flex; align-items:center; justify-content:space-between; gap:8px;\n      padding:var(--head-pad); border-bottom:var(--bw) solid var(--bcsec); min-height:var(--head-h); }\n    .ant-card .ac-title{ font-weight:600; color:var(--fg); font-size:var(--title-fs);\n      overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n    .ant-card .ac-extra{ color:var(--primary); font-size:var(--fs); white-space:nowrap; }\n    .ant-card .ac-body{ padding:var(--body-pad); color:var(--fg); font-size:var(--fs); line-height:1.5715; white-space:pre-wrap; }\n  `,\n  render(d2){\n    const p = d2.params || {};\n    const D = resolveTokens(p);\n    const small = p.size === 'small';\n    const bordered = p.bordered !== false;\n    const hoverable = !!p.hoverable;\n    const title = p.title != null ? String(p.title) : '';\n    const extra = p.extra != null ? String(p.extra) : '';\n    const content = p.content != null ? String(p.content) : '';\n    const cover = p.coverSrc ? String(p.coverSrc) : '';\n    const hasHead = !!(title || extra);\n\n    const style = ['--ff:'+D.fontFamily,'--fs:'+D.fontSize+'px','--fg:'+D.colorText,\n      '--primary:'+D.colorPrimary,'--bg:'+D.colorBgContainer,'--bc:'+D.colorBorderSecondary,\n      '--bcsec:'+D.colorBorderSecondary,'--bw:'+D.lineWidth+'px','--radius:'+D.borderRadiusLG+'px',\n      '--head-pad:'+(small?'8px 16px':'16px 24px'),'--head-h:'+(small?'38px':'48px'),\n      '--title-fs:'+(small?'14px':'16px'),'--body-pad:'+(small?'12px 16px':'24px')].join(';');\n\n    const classes = ['ant-card'];\n    if(bordered) classes.push('bordered');\n    if(hoverable) classes.push('hoverable');\n\n    const coverHtml = cover ? '<div class=\"ac-cover\"><img src=\"'+esc(cover)+'\" alt=\"\"/></div>' : '';\n    const headHtml = hasHead\n      ? '<div class=\"ac-head\"><div class=\"ac-title\">'+esc(title)+'</div>'+(extra?'<div class=\"ac-extra\">'+esc(extra)+'</div>':'')+'</div>'\n      : '';\n    let body;\n    if(Array.isArray(p.slots) && p.slots.length){\n      body = p.slots.map((s,i)=> d2.render(s.type||s.component, s.props||s.params||{}, {key:s.key||('cs'+i), style:'height:auto;display:block'})).join('');\n    } else {\n      body = esc(content);\n    }\n    const bodyHtml = '<div class=\"ac-body\">'+body+'</div>';\n\n    return '<div class=\"'+classes.join(' ')+'\" style=\"'+style+'\">'+coverHtml+headHtml+bodyHtml+'</div>';\n  }\n};"}},"title":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"title"}}}},"extra":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"extra"}}}},"content":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"content"}}}},"size":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"size"}}}},"bordered":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"bordered"}}}},"hoverable":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"hoverable"}}}},"coverSrc":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"coverSrc"}}}},"slots":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"slots"}}}},"tokens":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tokens"}}}}}}}}}},{"_id":"6a46504c8c5c69fa78ed082f","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"crm-funnel","package":"gabz-playground","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `.funnel{display:flex;flex-direction:column;align-items:center;gap:6px;height:100%;box-sizing:border-box;padding:18px 16px;overflow:auto}\n    .funnel-title{width:100%;font-size:13px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;opacity:.6;margin:0 0 6px}\n    .funnel-band{display:flex;align-items:center;justify-content:center;min-height:38px;border-radius:8px;\n      color:#fff;font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\n      padding:0 12px;box-sizing:border-box;transition:width .25s ease}\n    .funnel-empty{opacity:.6;font-size:13px;padding:24px 0}\n    .funnel-foot{margin-top:10px;font-size:12px;opacity:.55;display:flex;align-items:center;gap:6px}\n    .funnel-foot .dot{width:8px;height:8px;border-radius:50%;display:inline-block}`,\n  render(d2) {\n    const tokens = d2.param('tokens', {}) || {};\n    const dark = !!tokens.darkMode;\n    const sem = (dark ? tokens.semanticsDark : tokens.semanticsLight) || {};\n    const accent = sem.colorPrimary || '#1677ff';\n    const text = sem.colorText || (dark ? 'rgba(255,255,255,0.85)' : 'rgba(0,0,0,0.88)');\n    const surface = sem.colorBgContainer || (dark ? '#141414' : '#ffffff');\n    const errorC = sem.colorError || '#ef4444';\n    const font = tokens.fontFamily || \"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif\";\n\n    const nfmt = (n) => {\n      try { return d2.fmt.number(n); } catch (e) { return String(n).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ','); }\n    };\n\n    const ds = d2.data('deals');\n    if (ds && ds.loading) {\n      return `<div class=\"funnel\" style=\"background:${surface};color:${text};font-family:${font}\">\n        <div class=\"funnel-empty\">Loading…</div></div>`;\n    }\n    const rows = ds ? ds.records() : [];\n\n    const ORDER = ['Prospecting', 'Qualification', 'Proposal', 'Negotiation', 'Won'];\n    const agg = {};\n    ORDER.forEach((s) => { agg[s] = { count: 0, sum: 0 }; });\n    let lostCount = 0, lostSum = 0;\n    (rows || []).forEach((r) => {\n      const stage = r && r.stage;\n      const amt = Number(r && r.amount) || 0;\n      if (stage === 'Lost') { lostCount += 1; lostSum += amt; return; }\n      if (agg[stage]) { agg[stage].count += 1; agg[stage].sum += amt; }\n    });\n\n    const maxCount = Math.max(1, ...ORDER.map((s) => agg[s].count));\n    const total = ORDER.reduce((acc, s) => acc + agg[s].count, 0);\n\n    if (total === 0 && lostCount === 0) {\n      return `<div class=\"funnel\" style=\"background:${surface};color:${text};font-family:${font}\">\n        <div class=\"funnel-empty\">No deals to display</div></div>`;\n    }\n\n    const bands = ORDER.map((stage, i) => {\n      const { count, sum } = agg[stage];\n      const widthPct = Math.round((count / maxCount) * 100);\n      // Top band = full accent; lower bands blend progressively lighter (funnel tint).\n      // In dark mode blend toward white (keep visible on dark bg); in light mode toward black\n      // so white band-text stays legible on every tint.\n      const blend = Math.round((i / (ORDER.length - 1)) * 42); // 0 -> 42%\n      const mixTo = dark ? 'white' : 'black';\n      const bg = `color-mix(in srgb, ${accent} ${100 - blend}%, ${mixTo})`;\n      const label = `${stage} · ${count} · $${nfmt(sum)}`;\n      return `<div class=\"funnel-band\" data-key=\"${stage}\" data-stage=\"${stage}\"\n        style=\"width:${widthPct}%;background:${bg}\">${label}</div>`;\n    }).join('');\n\n    const foot = lostCount > 0\n      ? `<div class=\"funnel-foot\"><span class=\"dot\" style=\"background:${errorC}\"></span>Lost · ${lostCount} · $${nfmt(lostSum)}</div>`\n      : '';\n\n    return `<div class=\"funnel\" style=\"background:${surface};color:${text};font-family:${font}\">\n      <p class=\"funnel-title\">Sales Funnel</p>\n      ${bands}\n      ${foot}\n    </div>`;\n  },\n};\n"}},"deals":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"deals"}}}},"tokens":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tokens"}}}}}}}}}},{"_id":"6a4652877c6927a8469780c4","component":"data2-core-types@Component","system":"6863d782e78450ee0fd57fc7","params":{"extends":"data2-core-primitives@Block","component":"crm-activity-timeline","package":"gabz-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 ANT_DEFAULTS = { colorPrimary:'#1677ff', colorSuccess:'#52c41a', colorWarning:'#faad14', colorError:'#ff4d4f', colorText:'rgba(0,0,0,0.88)', colorTextSecondary:'rgba(0,0,0,0.65)', colorTextTertiary:'rgba(0,0,0,0.45)', colorBorderSecondary:'#f0f0f0', fontFamily:\"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif\" };\nfunction resolveTokens(p){ const tk=(p&&typeof p==='object')?p:{}; let sem=tk; if(tk.semanticsLight||tk.semanticsDark){ sem=tk.darkMode?(tk.semanticsDark||{}):(tk.semanticsLight||{}); } const D=Object.assign({},ANT_DEFAULTS); for(const k in sem){ let v=sem[k]; if(v==null||v==='')continue; if(typeof v==='object')v=v.rgba||v.hex||v.value||v.color; if(v!=null&&v!=='')D[k]=v; } if(tk.fontFamily)D.fontFamily=tk.fontFamily; return D; }\nfunction esc(s){ return String(s==null?'':s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;'); }\n\nexport default {\n  css: `\n    .ant-tl{ box-sizing:border-box; font-family:var(--ff); font-size:var(--fs); color:var(--c-text); list-style:none; margin:0; padding:0; width:100%; height:100%; overflow:auto; }\n    .ant-tl .tl-item{ position:relative; display:flex; padding-bottom:20px; }\n    .ant-tl .tl-item:last-child{ padding-bottom:0; }\n    .ant-tl .tl-rail{ position:relative; flex:0 0 auto; width:12px; display:flex; flex-direction:column; align-items:center; }\n    .ant-tl .tl-dot{ position:relative; z-index:1; width:10px; height:10px; border-radius:50%; box-sizing:border-box; border:2px solid var(--dot); background:transparent; margin-top:4px; }\n    .ant-tl .tl-line{ position:absolute; top:6px; bottom:-20px; left:50%; transform:translateX(-50%); width:2px; background:var(--c-line); }\n    .ant-tl .tl-item:last-child .tl-line{ display:none; }\n    .ant-tl .tl-content{ flex:1 1 auto; padding-left:14px; padding-bottom:2px; }\n    .ant-tl .tl-label{ color:var(--c-sec); font-size:13px; margin-bottom:2px; }\n    .ant-tl .tl-body{ color:var(--c-text); }\n    .ant-tl .tl-empty{ color:var(--c-sec); font-size:13px; padding:8px 0; }\n  `,\n  render(d2) {\n    const tokens = d2.param('tokens', {}) || {};\n    const D = resolveTokens(tokens);\n    const style = ['--ff:'+D.fontFamily,'--fs:'+D.fontSize+'px','--c-text:'+D.colorText,'--c-sec:'+D.colorTextSecondary,'--c-line:'+D.colorBorderSecondary].join(';');\n\n    const ds = d2.data('activities');\n    const loading = ds && ds.loading;\n    const rows = (ds && !loading) ? (ds.records() || []) : [];\n\n    if (loading) {\n      return '<ul class=\"ant-tl\" style=\"'+style+'\"><li class=\"tl-empty\">Loading…</li></ul>';\n    }\n    if (!rows.length) {\n      return '<ul class=\"ant-tl\" style=\"'+style+'\"><li class=\"tl-empty\">No recent activity</li></ul>';\n    }\n\n    const sorted = rows.slice().sort((a, b) => {\n      const da = new Date((a && a.createdAt) || 0).getTime() || 0;\n      const db = new Date((b && b.createdAt) || 0).getTime() || 0;\n      return db - da;\n    }).slice(0, 8);\n\n    const NAMED = { blue:D.colorPrimary, green:D.colorSuccess, red:D.colorError, gray:D.colorTextTertiary };\n    const TYPECOLOR = { call:'blue', email:'green', meeting:'blue', task:'gray', note:'gray' };\n\n    const rowsHtml = sorted.map((r) => {\n      const type = (r && r.type != null) ? String(r.type) : '';\n      const subject = (r && r.subject != null) ? String(r.subject) : '';\n      let label = '';\n      if (r && r.createdAt) { try { label = d2.fmt.date(r.createdAt); } catch (e) { label = String(r.createdAt); } }\n      const dot = NAMED[TYPECOLOR[type.toLowerCase()] || 'blue'];\n      const body = (type ? type + ': ' : '') + subject;\n      return '<li class=\"tl-item\">'+\n        '<span class=\"tl-rail\"><span class=\"tl-dot\" style=\"--dot:'+esc(dot)+'\"></span><span class=\"tl-line\"></span></span>'+\n        '<div class=\"tl-content\">'+\n          (label ? '<div class=\"tl-label\">'+esc(label)+'</div>' : '')+\n          '<div class=\"tl-body\">'+esc(body)+'</div>'+\n        '</div></li>';\n    }).join('');\n\n    return '<ul class=\"ant-tl\" style=\"'+style+'\">'+rowsHtml+'</ul>';\n  }\n};"}},"activities":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"activities"}}}},"tokens":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"tokens"}}}}}}}}}},{"_id":"5ed9bed7b9e0891ce913e884","component":"data2-core-types@Component","params":{"package":"data2-core","component":"DataSource","renderable":{"dimensions":{"disabled":false,"component":"data2-core-types@Dimensions","params":{"width":1366,"exactWidth":false,"exactHeight":false,"height":768}}}}},{"_id":"5f472ae463c680de4ff296e9","component":"data2-core-types@Component","params":{"package":"data2-core","component":"Data2TableDataSource","extends":"data2-core@DataSource","renderable":{"dimensions":{"disabled":false,"component":"data2-core-types@Dimensions","params":{"width":1366,"exactWidth":false,"exactHeight":false,"height":768}}}}}]}},{"reference":"ExternalComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"_id":"5f060d9b1ca96def42f3c40a","displayName":"Builder AuthStrategy","component":"data2-core@AuthenticationStrategy","system":"5e3b796d6228227ca637d0f4","params":{"credentials":[{"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"status"}}],"verifier":{"component":"data2-core-types@DataSetReference","params":{"reference":"UsersDataSet"}},"sessionShared":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"password":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},"email":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},"resetPassword":{"resetEmail":{"artboard":{"params":{"preventEvaluation":true,"reference":"nR6Q9d7qdaPtZhJ28Q8Dy"},"component":"data2-core-types@ArtboardReference"}},"resetSuccessEmail":{"artboard":{"params":{"preventEvaluation":true,"reference":"yPCJBTKo8q1Mw0B_3Kpwl"},"component":"data2-core-types@ArtboardReference"}}},"session":[{"component":"data2-core-types@DataSetColumnReference","params":{"column":"name"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"status"}}],"sessionMetadata":{"params":{"actions":[{"params":{"compare":{"params":{"subject":{"params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},{"params":{"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":"active"}},"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user.status"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is active user"}]},"component":"data2-core-logical-operators@And","displayName":"is active and has _id"}},"component":"data2-core-logical-operators@Not"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check $user"},{"params":{"action":{"params":{"pattern":{"component":"data2-core-primitives@String","params":{"content":"@data2.app"}},"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user.email"}}}}},"component":"data2-core-functions@Includes","displayName":"isData2User"},"resultName":{"component":"data2-core-primitives@String","params":{"content":"is_data2_user"}}},"component":"data2-core-flow@Step"},{"params":{"action":{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.d2_app"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"management"}}]},"component":"data2-core-functions@Includes","displayName":"isData2App Exception"},"resultName":{"component":"data2-core-primitives@String","params":{"content":"is_data2_app_exception"}}},"component":"data2-core-flow@Step"},{"params":{"resultName":{"component":"data2-core-primitives@String","params":{"content":"has_access"}},"action":{"params":{"compare":{"params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_user"}}}},{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_app_exception"}}}}]},"component":"data2-core-logical-operators@Or"},"else":{"params":{"actions":[{"params":{"actions":[{"params":{"compare":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}},"component":"data2-core-logical-operators@Not"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check $metadata.system"},{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":"filter","args":[{"_id":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}}]},"component":"data2-core-types@Interaction"},{"params":{"compare":{"params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records.length"}}}}},"component":"data2-core-logical-operators@Not","displayName":"systems not found"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check system found"},{"params":{"actions":[{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":"filter","args":[{"user":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},"organization":{"component":"data2-core-types@Getter","params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"cursor.current.organization._id"}}}}}]},"component":"data2-core-types@Interaction"},{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":"filter","args":[{"user":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},"system":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}}]},"component":"data2-core-types@Interaction"}]},"component":"data2-core-flow@Parallel"}]},"component":"data2-core-flow@Series","displayName":"common setup"},{"params":{"then":{"params":{"content":true},"component":"data2-core-primitives@Boolean"},"else":{"params":{"content":false},"component":"data2-core-primitives@Boolean"},"compare":{"params":{"components":{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"mapper":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"system"}}],"body":{"params":{"expression":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.visibility"}}}},"defaultCase":{"params":{"content":false},"component":"data2-core-primitives@Boolean"},"cases":[{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-primitives@String","params":{"content":"public"}},"value":{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"owner"}},{"component":"data2-core-primitives@String","params":{"content":"billing-owner"}},{"component":"data2-core-primitives@String","params":{"content":"admin"}},{"component":"data2-core-primitives@String","params":{"content":"member"}}]},"component":"data2-core-functions@Includes","displayName":"has role with access"}]},"component":"data2-core-logical-operators@And","displayName":"has org member role with access"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is org member"},{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":"collaborator"}}},"component":"data2-core-comparison-operators@Equal","displayName":"is collaborator"}]},"component":"data2-core-logical-operators@And","displayName":"is org member and collaborator"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is collaborator"},{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"access"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"access.system._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"has system access"}]},"component":"data2-core-logical-operators@And","displayName":"is collaborator and has system access"}]},"component":"data2-core-logical-operators@Or"}}},{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-primitives@String","params":{"content":"private"}},"value":{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"owner"}},{"component":"data2-core-primitives@String","params":{"content":"admin"}}]},"component":"data2-core-functions@Includes","displayName":"is owner/admin"}]},"component":"data2-core-logical-operators@And","displayName":"has org member role with access"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is owner/admin"},{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is org member"},{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"access"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"access.system._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"has system access"}]},"component":"data2-core-logical-operators@And","displayName":"is member and has system access"}]},"component":"data2-core-logical-operators@Or","displayName":"is owner/admin or has system access"}}}]},"component":"data2-core-flow@Switch"}}}},"component":"data2-core-functions@ArrayMap"}},"component":"data2-core-logical-operators@And","displayName":"has org member for all systems in request"}},"component":"data2-core-flow@If"}]},"component":"data2-core-flow@Series"},"then":{"params":{"content":true},"component":"data2-core-primitives@Boolean"}},"component":"data2-core-flow@If"}},"component":"data2-core-flow@Step"},{"params":{"then":{"system":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}},"else":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"},"compare":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"has_access"}}}}},"component":"data2-core-flow@If"}]},"component":"data2-core-flow@Series"},"sessionExpiresIn":{"component":"data2-core-primitives@Number","params":{"content":604800}},"sessionRenewal":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"identityProviders":[{"provider":{"component":"data2-core-primitives@String","params":{"content":"GOOGLE"}},"clientId":{"component":"data2-core-primitives@String","params":{"content":"55470861603-22pvfc1t49lp8cjnbfk71s5ct9hp1q1v.apps.googleusercontent.com"}}}]},"reference":"Data2BuilderAuthentication","updatedAt":"2026-08-06T19:31:23.557Z"},{"_id":"5f060ee51ca96def42f3fbd1","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"UsersTableDataSource"}},"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":1}}}},"reference":"UsersDataSet","updatedAt":"2026-03-04T21:16:40.291Z"},{"_id":"68f938cf5fb002e33752a43d","displayName":"InternalApplicationsAuthenticationStrategy","component":"data2-core@AuthenticationStrategy","system":"5e3b796d6228227ca637d0f4","params":{"resetPassword":{"resetEmail":{"artboard":{"params":{"preventEvaluation":true},"component":"data2-core-types@ArtboardReference"}},"resetSuccessEmail":{"artboard":{"params":{"preventEvaluation":true},"component":"data2-core-types@ArtboardReference"}}},"verifier":{"disabled":false,"component":"data2-core-types@DataSetReference","params":{"reference":"InternalApplicationsVerifierDataSet"}},"password":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"secret"}},"credentials":[{"component":"data2-core-types@FieldReference","params":{"key":"application"}},{"component":"data2-core-types@FieldReference","params":{"key":"secret"}},{"component":"data2-core-types@FieldReference","params":{"key":"status"}}],"session":[{"component":"data2-core-types@FieldReference","params":{"key":"application"}},{"component":"data2-core-types@FieldReference","params":{"key":"secret"}},{"component":"data2-core-types@FieldReference","params":{"key":"status"}}]},"reference":"InternalApplicationsAuthenticationStrategy","updatedAt":"2025-10-22T20:08:54.442Z","createdAt":"2025-10-22T20:04:31.198Z"},{"component":"data2-core@DataSet","reference":"SessionsDataSet","params":{"requiresConfirmation":false,"pk":"key","datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"data2sessionsdatasource"}}}},{"reference":"UsersTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@ServerSessionsDataSource","reference":"data2sessionsdatasource","params":{}},{"_id":"5f1600b70528b92601890f75","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ServiceComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ServiceComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:20.208Z","createdAt":"2020-07-20T20:38:15.436Z"},{"_id":"5f1602190528b92601890f7d","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":40000},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ComponentInstancesTableDataSource"}},"sort":{"_id":1},"pk":"_id","autoEdit":true,"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:07.089Z","createdAt":"2020-07-20T20:44:09.350Z"},{"_id":"5f16017f0528b92601890f7a","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"clientApplicationDomain"}}},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}}},"reference":"FileComponentInstancesDataSet","updatedAt":"2023-08-03T16:08:18.193Z","createdAt":"2020-07-20T20:41:35.797Z"},{"_id":"5f1601990528b92601890f7b","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ApplicationsTableDataSource"}},"pk":"_id","autoEdit":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"params":{"column":"_id"},"component":"data2-core-types@DataSetColumnReference"}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}}},"reference":"ApplicationsDataSet","updatedAt":"2022-12-13T21:51:13.995Z","createdAt":"2020-07-20T20:42:01.657Z"},{"_id":"5f16172a0528b92601890f85","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":10000}}},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"DataComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"DataComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:12.831Z","createdAt":"2020-07-20T22:14:02.097Z"},{"_id":"60ddc1bbda3861ca65407c5a","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"clientApplicationDomain"}}},"pagination":{"size":1},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"}},"reference":"OneFileComponentInstancesDataSet","updatedAt":"2022-02-09T19:44:38.036Z","createdAt":"2020-07-20T20:41:35.797Z"},{"_id":"63ee3d38b8c9838c62fb05fb","displayName":"DriveFileComponentInstancesDataSet","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core@Drive"}}},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}}},"reference":"DriveFileComponentInstancesDataSet","updatedAt":"2025-12-04T21:58:32.367Z","createdAt":"2023-02-16T14:27:07.797Z"},{"reference":"ServiceComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"ComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a464ea1b0a857d0aa5cbf48","component":"data2-core-primitives@Router","system":"6863d782e78450ee0fd57fc7","displayName":"CRM Frame Router","params":{"routerType":{"component":"data2-core-primitives@String","params":{"content":"browser"}},"routes":[{"component":"data2-core-primitives@Route","params":{"path":"","name":"Sales CRM","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"tviKijOe44zfmZ0nMf99d"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/pipeline","name":"Sales CRM","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"tviKijOe44zfmZ0nMf99d"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/records","name":"Sales CRM","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"tviKijOe44zfmZ0nMf99d"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/record/:type/:id","name":"Sales CRM","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"tviKijOe44zfmZ0nMf99d"}}}}]},"reference":"crm-frame-router"},{"_id":"6a464affbf38d382814ea0cf","component":"data2-core-primitives@Artboard","system":"6863d782e78450ee0fd57fc7","displayName":"CRM - Shell","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"CRM - Shell"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0}}},"reference":"tviKijOe44zfmZ0nMf99d"},{"_id":"d58277fd79f5cc20bd34f1d3","parent":"6a464affbf38d382814ea0cf","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Shell Root","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"childrenMode":"cols","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#0f0f0f"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#ffffff"}}}}}}]}}},"index":0,"reference":"NRgnApgr2SWx5oZalIClY"},{"_id":"621d2290d95e1b7b2215a227","parent":"d58277fd79f5cc20bd34f1d3","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Nav Column","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":false,"left":true,"right":false,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":240,"height":900}},"childrenMode":"rows","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#141414"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#ffffff"}}}}}}]}}},"index":0,"reference":"mISd-SrA-GQG3y1IYimhB"},{"_id":"d1da0302e0b19531f02cac78","parent":"d58277fd79f5cc20bd34f1d3","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Main Column","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":false,"left":false,"right":false,"top":true,"bottom":true,"growH":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1200,"height":900}},"childrenMode":"rows","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#0f0f0f"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#ffffff"}}}}}}]}}},"index":1,"reference":"x6HAERS7aZ7GcwTDn6c9v"},{"_id":"273ebb4f3e3eaf2c4812de51","parent":"621d2290d95e1b7b2215a227","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Nav Header","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":240,"height":64}},"childrenMode":"cols","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#141414"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#ffffff"}}}}}}]}},"border":{"component":"data2-core-types@Border","params":{"width":{"bottom":"1"},"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#424242"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#f0f0f0"}}}}}}},"index":0,"reference":"coBP7QHncahYUfmfXmm_w"},{"_id":"f81fd8eb5416920aa844307a","parent":"621d2290d95e1b7b2215a227","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Nav Item Dashboard","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":8,"freeTransform":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":240,"height":44}},"childrenMode":"cols","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/"}}],"then":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":"color-mix(in srgb, #4f46e5 22%, black)","else":"color-mix(in srgb, #4f46e5 8%, white)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0)"}}}}}}]}},"border":{"component":"data2-core-types@Border","params":{"width":{"right":"3"},"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#4f46e5"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0)"}}}}}},"onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav","value":"/"}},{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-routerInterface"}},"prop":"goTo","args":["/"]}}]}},"cursor":"pointer"},"index":1,"reference":"_qh1p-KUCpVCNVIKNBSeZ"},{"_id":"8d35ad8a53eba7b31a58ee2f","parent":"621d2290d95e1b7b2215a227","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Nav Item Pipeline","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":240,"height":44}},"childrenMode":"cols","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/pipeline"}}],"then":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":"color-mix(in srgb, #4f46e5 22%, black)","else":"color-mix(in srgb, #4f46e5 8%, white)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0)"}}}}}}]}},"border":{"component":"data2-core-types@Border","params":{"width":{"right":"3"},"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/pipeline"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#4f46e5"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0)"}}}}}},"onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav","value":"/pipeline"}},{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-routerInterface"}},"prop":"goTo","args":["/pipeline"]}}]}},"cursor":"pointer"},"index":2,"reference":"NTjiCoAp6S42TABVh5ktN"},{"_id":"a39475c66cc42512949f7c53","parent":"621d2290d95e1b7b2215a227","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Nav Item Records","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":240,"height":44}},"childrenMode":"cols","fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/records"}}],"then":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":"color-mix(in srgb, #4f46e5 22%, black)","else":"color-mix(in srgb, #4f46e5 8%, white)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0)"}}}}}}]}},"border":{"component":"data2-core-types@Border","params":{"width":{"right":"3"},"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/records"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#4f46e5"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0)"}}}}}},"onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav","value":"/records"}},{"component":"data2-core-types@Interaction","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-routerInterface"}},"prop":"goTo","args":["/records"]}}]}},"cursor":"pointer"},"index":3,"reference":"iBR5jaV0CiQN0Tg3mnhXx"},{"_id":"6a464b847c6927a846976d10","parent":"d1da0302e0b19531f02cac78","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Top Bar","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":false,"left":true,"right":true,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1200,"height":64}},"childrenMode":{"component":"data2-core-primitives@String","params":{"content":"free"}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#141414"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#ffffff"}}}}}}]}}},"index":0,"reference":"xqqcWUhB2h2SP29AW618v"},{"_id":"6a464b858c5c69fa78ecfa35","parent":"d1da0302e0b19531f02cac78","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Router Outlet","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":false,"left":false,"right":false,"top":false,"bottom":false,"growH":true,"growV":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1200,"height":836}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#141414"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#f5f5f5"}}}}}}]}},"childrenMode":"reference","childrenReference":{"component":"data2-core-types@ComponentInstanceReference","params":{"component":"data2-core-primitives@Router","reference":"crm-router"}}},"index":1,"reference":"x6lLCaDGRWDdxGpish4bO"},{"_id":"3c0aaeec8eb47dcc8ce0d3fb","parent":"273ebb4f3e3eaf2c4812de51","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Nav Header Logo","params":{"position":{"component":"data2-core-types@Position","params":{"x":16,"y":0,"freeTransform":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":40,"height":64}},"text":"","textSize":22,"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"center","verticalAlignment":"middle"}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"image":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%234f46e5%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%229%22%2F%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%224.5%22%2F%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%221%22%20fill%3D%22%234f46e5%22%2F%3E%3C%2Fsvg%3E","size":"contain","repeat":"no-repeat","positionX":"center","positionY":"center"}}]}}},"index":0,"reference":"FBzjPD3NTT2oQCz90KdTx"},{"_id":"352a11e460e8bd5607dde1cc","parent":"273ebb4f3e3eaf2c4812de51","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Nav Header Title","params":{"position":{"component":"data2-core-types@Position","params":{"x":4,"y":0,"freeTransform":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":160,"height":64}},"text":"Sales CRM","textSize":18,"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.85)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.88)"}}}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"left","verticalAlignment":"middle","fontWeight":"700"}}},"index":1,"reference":"nznVIZJp5T7zd-3Eys5lS"},{"_id":"bd93d060482b76c0fda2b81a","parent":"f81fd8eb5416920aa844307a","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Nav Item Dashboard Icon","params":{"position":{"component":"data2-core-types@Position","params":{"x":16,"y":0,"freeTransform":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":24,"height":44}},"textSize":14,"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#4f46e5"}},"else":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.65)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.65)"}}}}}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"center","verticalAlignment":"middle"}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"image":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/"}}],"then":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%234f46e5%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M3%2010.5%2012%203l9%207.5%22%2F%3E%3Cpath%20d%3D%22M5%209.5V21h14V9.5%22%2F%3E%3Cpath%20d%3D%22M9%2021v-6h6v6%22%2F%3E%3C%2Fsvg%3E","else":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23b0b0b0%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M3%2010.5%2012%203l9%207.5%22%2F%3E%3Cpath%20d%3D%22M5%209.5V21h14V9.5%22%2F%3E%3Cpath%20d%3D%22M9%2021v-6h6v6%22%2F%3E%3C%2Fsvg%3E","else":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23595959%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M3%2010.5%2012%203l9%207.5%22%2F%3E%3Cpath%20d%3D%22M5%209.5V21h14V9.5%22%2F%3E%3Cpath%20d%3D%22M9%2021v-6h6v6%22%2F%3E%3C%2Fsvg%3E"}}}},"size":"contain","repeat":"no-repeat","positionX":"center","positionY":"center"}}]}}},"index":0,"reference":"xGHTdsrcLfyT3wV0E1kfz"},{"_id":"3492f82c1aa53812db608886","parent":"f81fd8eb5416920aa844307a","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Nav Item Dashboard Label","params":{"position":{"component":"data2-core-types@Position","params":{"x":10,"y":0,"freeTransform":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":170,"height":44}},"text":"Dashboard","textSize":14,"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#4f46e5"}},"else":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.65)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.88)"}}}}}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"left","verticalAlignment":"middle"}}},"index":1,"reference":"KGZOJYh8JNXjE1UNc7IgC"},{"_id":"e98e3f5957599a4ba88ac225","parent":"8d35ad8a53eba7b31a58ee2f","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Nav Item Pipeline Icon","params":{"position":{"component":"data2-core-types@Position","params":{"x":16,"y":0,"freeTransform":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":24,"height":44}},"textSize":14,"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/pipeline"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#4f46e5"}},"else":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.65)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.65)"}}}}}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"center","verticalAlignment":"middle"}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"image":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/pipeline"}}],"then":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%234f46e5%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M3%205h18l-7%208v6l-4%202v-8Z%22%2F%3E%3C%2Fsvg%3E","else":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23b0b0b0%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M3%205h18l-7%208v6l-4%202v-8Z%22%2F%3E%3C%2Fsvg%3E","else":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23595959%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M3%205h18l-7%208v6l-4%202v-8Z%22%2F%3E%3C%2Fsvg%3E"}}}},"size":"contain","repeat":"no-repeat","positionX":"center","positionY":"center"}}]}}},"index":0,"reference":"Ec7lY2MC1Lpyi8FJI9i08"},{"_id":"e474965efcb2ebd54bbde417","parent":"8d35ad8a53eba7b31a58ee2f","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Nav Item Pipeline Label","params":{"position":{"component":"data2-core-types@Position","params":{"x":10,"y":0,"freeTransform":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":170,"height":44}},"text":"Pipeline","textSize":14,"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/pipeline"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#4f46e5"}},"else":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.65)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.88)"}}}}}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"left","verticalAlignment":"middle"}}},"index":1,"reference":"T4hdZ6dX4efzQL-ZQHBeU"},{"_id":"c4c75ad2d190e01387857855","parent":"a39475c66cc42512949f7c53","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Nav Item Records Icon","params":{"position":{"component":"data2-core-types@Position","params":{"x":16,"y":0,"freeTransform":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":24,"height":44}},"textSize":14,"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/records"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#4f46e5"}},"else":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.65)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.65)"}}}}}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"center","verticalAlignment":"middle"}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"image":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/records"}}],"then":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%234f46e5%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%224%22%20width%3D%2218%22%20height%3D%2216%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22M3%209h18M3%2014h18M9%204v16%22%2F%3E%3C%2Fsvg%3E","else":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23b0b0b0%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%224%22%20width%3D%2218%22%20height%3D%2216%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22M3%209h18M3%2014h18M9%204v16%22%2F%3E%3C%2Fsvg%3E","else":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23595959%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%224%22%20width%3D%2218%22%20height%3D%2216%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22M3%209h18M3%2014h18M9%204v16%22%2F%3E%3C%2Fsvg%3E"}}}},"size":"contain","repeat":"no-repeat","positionX":"center","positionY":"center"}}]}}},"index":0,"reference":"HyXYsypsIoEX5dZzSx_Rh"},{"_id":"49eab4573e0bcd5e5329a5b8","parent":"a39475c66cc42512949f7c53","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Nav Item Records Label","params":{"position":{"component":"data2-core-types@Position","params":{"x":10,"y":0,"freeTransform":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":170,"height":44}},"text":"Records","textSize":14,"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeNav"}}],"comparisonSubject":"/records"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#4f46e5"}},"else":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.65)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.88)"}}}}}},"textFormat":{"component":"data2-core-types@TextFormat","params":{"horizontalAlignment":"left","verticalAlignment":"middle"}}},"index":1,"reference":"yD6vKG0d1-8ftBJnYeB7G"},{"_id":"6a464b91c53088741c518bcb","parent":"6a464b847c6927a846976d10","component":"gabz-playground@ant-input","system":"6863d782e78450ee0fd57fc7","displayName":"Search","params":{"placeholder":"Search leads, deals, accounts…","prefixGlyph":"fa fa-search","allowClear":true,"tokens":{"component":"gabz-playground@crm-tokens","params":{}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":16,"y":14,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":320,"height":36}}}},"index":1,"reference":"77Ha5S6Lm2Bpc69cNGrgt"},{"_id":"6a464b92c4f6a718285268f1","parent":"6a464b847c6927a846976d10","component":"gabz-playground@ant-switch","system":"6863d782e78450ee0fd57fc7","displayName":"Dark Mode Switch","params":{"checkedLabel":"","uncheckedLabel":"","checked":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}},"tokens":{"component":"gabz-playground@crm-tokens","params":{}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":1092,"y":20,"freeTransform":true,"left":false,"right":true,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":44,"height":24}}},"onChange":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode","value":{"component":"data2-core-logical-operators@Not","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}}}}}]}}},"index":1.75,"reference":"keYGw_bhq3EhaL813yjx4"},{"_id":"6a464b92b0a857d0aa5cb851","parent":"6a464b847c6927a846976d10","component":"gabz-playground@ant-avatar","system":"6863d782e78450ee0fd57fc7","displayName":"User Avatar","params":{"src":"https://i.pravatar.cc/64?img=12","size":"default","shape":"circle","label":"GA","tokens":{"component":"gabz-playground@crm-tokens","params":{}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":1152,"y":16,"freeTransform":true,"left":false,"right":true,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":32,"height":32}}}},"index":2,"reference":"QJPzREKW_MER4eQ5JqUBE"},{"_id":"6cfe3058537e9d7eebb909ac","parent":"6a464b847c6927a846976d10","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Sun Icon","params":{"position":{"component":"data2-core-types@Position","params":{"x":1058,"y":23,"freeTransform":true,"left":false,"right":true,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":18,"height":18}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"image":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%235a5a5a%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%224%22%2F%3E%3Cpath%20d%3D%22M12%202v2M12%2020v2M2%2012h2M20%2012h2M4.9%204.9l1.4%201.4M17.7%2017.7l1.4%201.4M19.1%204.9l-1.4%201.4M6.3%2017.7l-1.4%201.4%22%2F%3E%3C%2Fsvg%3E","else":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23faad14%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%224%22%2F%3E%3Cpath%20d%3D%22M12%202v2M12%2020v2M2%2012h2M20%2012h2M4.9%204.9l1.4%201.4M17.7%2017.7l1.4%201.4M19.1%204.9l-1.4%201.4M6.3%2017.7l-1.4%201.4%22%2F%3E%3C%2Fsvg%3E"}},"size":"contain","repeat":"no-repeat","positionX":"center","positionY":"center"}}]}}},"reference":"ZRBnYs7unLXO8vsm9FWiV"},{"_id":"baa130b452f79d295a38e083","parent":"6a464b847c6927a846976d10","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Moon Icon","params":{"position":{"component":"data2-core-types@Position","params":{"x":1146,"y":23,"freeTransform":true,"left":false,"right":true,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":18,"height":18}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"image":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23a5b4fc%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M21%2012.8A9%209%200%201%201%2011.2%203a7%207%200%200%200%209.8%209.8Z%22%2F%3E%3C%2Fsvg%3E","else":"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23c8c8c8%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M21%2012.8A9%209%200%201%201%2011.2%203a7%207%200%200%200%209.8%209.8Z%22%2F%3E%3C%2Fsvg%3E"}},"size":"contain","repeat":"no-repeat","positionX":"center","positionY":"center"}}]}}},"reference":"zPj3poLuwiKoT6NseygEy"},{"_id":"6a464cf2209db9c3663931ce","component":"data2-core-primitives@Router","system":"6863d782e78450ee0fd57fc7","displayName":"CRM Router","params":{"routerType":{"component":"data2-core-primitives@String","params":{"content":"browser"}},"routes":[{"component":"data2-core-primitives@Route","params":{"path":"","name":"Dashboard","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"HCqw6W4BCcQBQf5JjTKJc"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/pipeline","name":"Pipeline","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"ugdNM0z8ZHI_g8A7_3Mgq"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/records","name":"Records","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"RbZOaVZx40Tme4EA5JKIB"}}}},{"component":"data2-core-primitives@Route","params":{"path":"/record/:type/:id","name":"Detail","content":{"component":"data2-core-types@ArtboardReference","params":{"reference":"spI24dqM7WMOcTT3bXpWA"}}}}]},"reference":"crm-router"},{"_id":"6a466f5a1035c33534235f70","component":"data2-core-primitives@Artboard","system":"6863d782e78450ee0fd57fc7","displayName":"CRM - Detail","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"CRM - Detail"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1200,"height":836}},"position":{"component":"data2-core-types@Position","params":{"x":2364,"y":799,"exactX":2363.73,"exactY":798.71}}},"reference":"spI24dqM7WMOcTT3bXpWA"},{"_id":"6a465aa0c4f6a71828529f00","component":"data2-core-primitives@Artboard","system":"6863d782e78450ee0fd57fc7","displayName":"CRM - Records","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"CRM - Records"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1200,"height":836}},"position":{"component":"data2-core-types@Position","params":{"x":1840,"y":-2806,"exactX":1840.27,"exactY":-2806.3}}},"reference":"RbZOaVZx40Tme4EA5JKIB"},{"_id":"6a465851fd69f89bce073f58","component":"data2-core-primitives@Artboard","system":"6863d782e78450ee0fd57fc7","displayName":"CRM - Pipeline","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"CRM - Pipeline"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1200,"height":836}},"position":{"component":"data2-core-types@Position","params":{"x":124,"y":-2974,"exactX":124.13,"exactY":-2973.58}}},"reference":"ugdNM0z8ZHI_g8A7_3Mgq"},{"_id":"6a4651fefb4b5485eb71b444","component":"data2-core-primitives@Artboard","system":"6863d782e78450ee0fd57fc7","displayName":"CRM - Dashboard","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"CRM - Dashboard"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1200,"height":836}},"position":{"component":"data2-core-types@Position","params":{"x":3206,"y":-836,"exactX":3205.61,"exactY":-836.5}}},"reference":"HCqw6W4BCcQBQf5JjTKJc"},{"_id":"b81badfd5212bd46d9e49342","parent":"6a466f5a1035c33534235f70","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Detail Root","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1200,"height":836}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#141414"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#f4f6f8"}}}}}}]}}},"reference":"mC-q5F5bZ3rxPrXn7iH4U"},{"_id":"ec0fa8fdd46583db8630f064","parent":"6a465aa0c4f6a71828529f00","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Records Root","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1200,"height":836}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#0f0f0f"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#f4f6f8"}}}}}}]}}},"reference":"Qd3QPpD4wXagLaPkUX1t2"},{"_id":"74b438c6222d7521339a3076","parent":"6a465851fd69f89bce073f58","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Pipeline Root","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1200,"height":836}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#0f0f0f"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#f4f6f8"}}}}}}]}}},"reference":"FAWIRyMr2cAhOPrRD3cZa"},{"_id":"c949a2af9dd9491e0c3e8a66","parent":"6a4651fefb4b5485eb71b444","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Dashboard Root","params":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1200,"height":836}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#0f0f0f"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#f4f6f8"}}}}}}]}}},"index":0,"reference":"4HaEFVLA3n2nEeBWeSHd2"},{"_id":"03af2da3c708ee2becec99bd","parent":"b81badfd5212bd46d9e49342","component":"gabz-playground@ant-drawer","system":"6863d782e78450ee0fd57fc7","displayName":"Edit Drawer","params":{"title":"Edit Lead","placement":"right","width":440,"closable":true,"open":false,"tokens":{"component":"gabz-playground@crm-tokens","params":{}},"openStore":"crm-ui","openKey":"editOpen","slots":[{"type":"gabz-playground@crm-lead-form","props":{"leads":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"5oU4u3o2nj4O709bIEU03DataSet"}}}}],"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":10,"height":10}}},"onClose":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.editOpen","value":false}}]}}},"reference":"Gwd6ApB7BjHD0ERuSDe3s"},{"_id":"2f53bb183d84d6b206cb84cb","parent":"b81badfd5212bd46d9e49342","component":"gabz-playground@ant-modal","system":"6863d782e78450ee0fd57fc7","displayName":"Follow-up Modal","params":{"title":"Log Follow-up","centered":true,"closable":true,"width":460,"open":false,"openStore":"crm-ui","openKey":"followupOpen","tokens":{"component":"gabz-playground@crm-tokens","params":{}},"slots":[{"type":"gabz-playground@crm-followup-form","props":{"activities":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"aNFrXXtt76NFND6IZ3RiVDataSet"}}}}],"onCancel":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupOpen","value":false}}]}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":200,"height":50}}}},"reference":"jz_wzOatTNiZPrZvEB3kE"},{"_id":"654c9bcfca59b1a5ebb165a7","parent":"b81badfd5212bd46d9e49342","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Detail Panel","params":{"position":{"component":"data2-core-types@Position","params":{"x":32,"y":32,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1136,"height":772}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#1f1f1f"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#ffffff"}}}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":12}}},"reference":"U0w_RIiFvI4BGQTUF80TC"},{"_id":"13393138b0bfa8c64438d35c","parent":"ec0fa8fdd46583db8630f064","component":"gabz-playground@ant-modal","system":"6863d782e78450ee0fd57fc7","displayName":"Follow-up Modal","params":{"title":"Log Follow-up","centered":true,"closable":true,"width":460,"open":false,"openStore":"crm-ui","openKey":"followupOpen","tokens":{"component":"gabz-playground@crm-tokens","params":{}},"slots":[{"type":"gabz-playground@crm-followup-form","props":{"activities":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"aNFrXXtt76NFND6IZ3RiVDataSet"}}}}],"onCancel":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupOpen","value":false}}]}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":200,"height":50}}}},"reference":"rGrq_GiH1W5hlKQ1oP0NU"},{"_id":"17ae3d5fe1a57156e656b535","parent":"ec0fa8fdd46583db8630f064","component":"gabz-playground@ant-table","system":"6863d782e78450ee0fd57fc7","displayName":"Accounts Table","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"4TS0LqYhG0LaNTd5ucvoZDataSet"}},"searchable":true,"sortable":true,"bordered":true,"pageSize":15,"searchPlaceholder":"Search accounts…","columns":[{"key":"name","title":"Name","dataIndex":"name"},{"key":"industry","title":"Industry","dataIndex":"industry","filterable":true},{"key":"size","title":"Size","dataIndex":"size","align":"right"},{"key":"status","title":"Status","dataIndex":"status","filterable":true},{"key":"annualRevenue","title":"Annual Revenue","dataIndex":"annualRevenue","align":"right"}],"rowActions":[{"key":"edit","label":"Edit"}],"tokens":{"component":"gabz-playground@crm-tokens","params":{}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":32,"y":132,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1136,"height":688}},"hide":{"component":"data2-core-comparison-operators@Different","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}}],"comparisonSubject":"accounts"}}}},"reference":"JsJbhEQtyYtHP9_a4rmHI"},{"_id":"2309c5c5e742ae2fd1b739c9","parent":"ec0fa8fdd46583db8630f064","component":"gabz-playground@crm-convert","system":"6863d782e78450ee0fd57fc7","displayName":"Convert Watcher","params":{"leads":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"5oU4u3o2nj4O709bIEU03DataSet"}},"accounts":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"4TS0LqYhG0LaNTd5ucvoZDataSet"}},"contacts":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"arn7JIj2wlGm39IPOxXSuDataSet"}},"deals":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"4uPM8-nCj6UT29zmMAt6FDataSet"}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":32,"y":8,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":200,"height":20}}}},"reference":"vSlNloBFzEZlrWIKbquDh"},{"_id":"27839958d6e3b8cab34906e4","parent":"ec0fa8fdd46583db8630f064","component":"gabz-playground@ant-tabs","system":"6863d782e78450ee0fd57fc7","displayName":"Records Tabs","params":{"items":[{"key":"leads","label":"Leads"},{"key":"deals","label":"Deals"},{"key":"accounts","label":"Accounts"},{"key":"contacts","label":"Contacts"}],"activeKey":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}},"onChange":{"component":"data2-core-flow@Series","params":{"actions":[]}},"tokens":{"component":"gabz-playground@crm-tokens","params":{}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":32,"y":76,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1136,"height":48}}}},"reference":"OAirDEy0RcElhBGaQAnxO"},{"_id":"344bd61366b5c69b398b2d93","parent":"ec0fa8fdd46583db8630f064","component":"gabz-playground@ant-button","system":"6863d782e78450ee0fd57fc7","displayName":"New Lead Btn","params":{"label":"+ New Lead","color":"primary","variant":"solid","tokens":{"component":"gabz-playground@crm-tokens","params":{}},"super":{"hide":{"component":"data2-core-comparison-operators@Different","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}}],"comparisonSubject":"leads"}},"position":{"component":"data2-core-types@Position","params":{"x":1010,"y":24,"freeTransform":true,"left":false,"right":true,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":130,"height":36}}},"onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.editId","value":""}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.draft_name","value":""}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.draft_company","value":""}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.draft_email","value":""}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.draft_phone","value":""}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.draft_source","value":""}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.draft_status","value":"New"}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.draft_score","value":""}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.draft_ownerId","value":""}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.draft_notes","value":""}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.addType","value":"leads"}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.addOpen","value":true}}]}}},"reference":"-NR-ykNoj8VUoeuwePB88"},{"_id":"40d5039d3684f8ee6f29c955","parent":"ec0fa8fdd46583db8630f064","component":"gabz-playground@ant-drawer","system":"6863d782e78450ee0fd57fc7","displayName":"Edit Drawer","params":{"title":"Edit Lead","placement":"right","width":440,"closable":true,"open":false,"tokens":{"component":"gabz-playground@crm-tokens","params":{}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":10,"height":10}}},"onClose":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.editOpen","value":false}}]}},"slots":[{"type":"gabz-playground@crm-lead-form","props":{"leads":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"5oU4u3o2nj4O709bIEU03DataSet"}}}}],"openStore":"crm-ui","openKey":"editOpen"},"reference":"_upMVQdOhWsY85uBW7lcg"},{"_id":"4f6477cb2fc363f84329bbd9","parent":"ec0fa8fdd46583db8630f064","component":"gabz-playground@ant-table","system":"6863d782e78450ee0fd57fc7","displayName":"Leads Table","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"5oU4u3o2nj4O709bIEU03DataSet"}},"searchable":true,"sortable":true,"bordered":true,"pageSize":20,"searchPlaceholder":"Search leads…","columns":[{"key":"name","title":"Name","dataIndex":"name"},{"key":"company","title":"Company","dataIndex":"company"},{"key":"status","title":"Status","dataIndex":"status","filterable":true},{"key":"score","title":"Score","dataIndex":"score","align":"right"},{"key":"source","title":"Source","dataIndex":"source","filterable":true}],"rowActions":[{"key":"edit","label":"Edit"},{"key":"followup","label":"Follow-up"},{"key":"convert","label":"Convert"}],"tokens":{"component":"gabz-playground@crm-tokens","params":{}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":32,"y":132,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1136,"height":688}},"hide":{"component":"data2-core-comparison-operators@Different","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}}],"comparisonSubject":"leads"}}},"selectionStore":"crm-ui","onAction":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.editId","value":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.actionKey"}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.editType","value":"leads"}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.editOpen","value":{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.actionType"}}],"comparisonSubject":"edit"}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.convertPending","value":{"component":"data2-core-flow@If","params":{"compare":{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.actionType"}}],"comparisonSubject":"convert"}},"then":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.actionKey"}},"else":""}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupType","value":"lead"}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupRelatedId","value":{"component":"data2-core-flow@If","params":{"compare":{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.actionType"}}],"comparisonSubject":"followup"}},"then":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.actionKey"}},"else":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupRelatedId"}}}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupOwnerId","value":{"component":"data2-core-flow@If","params":{"compare":{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.actionType"}}],"comparisonSubject":"followup"}},"then":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.draft_ownerId"}},"else":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupOwnerId"}}}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupOpen","value":{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.actionType"}}],"comparisonSubject":"followup"}}}}]}}},"reference":"4rYEBuZ4cx0jPzRqkHOcR"},{"_id":"533badaf579faca82a5276bb","parent":"ec0fa8fdd46583db8630f064","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Tab Contacts","params":{"position":{"component":"data2-core-types@Position","params":{"x":230,"y":76,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":66,"height":32}},"cursor":"pointer","onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab","value":"contacts"}}]}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#0f0f0f"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#f4f6f8"}}}}}}]}},"text":{"component":"data2-core-primitives@String","params":{"content":"Contacts"}},"textSize":14,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}},"comparisonSubject":"contacts"}}],"then":600,"else":400}},"horizontalAlignment":"center","verticalAlignment":"middle"}},"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}}],"comparisonSubject":"contacts"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#1677ff"}},"else":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.65)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.88)"}}}}}},"border":{"component":"data2-core-types@Border","params":{"width":{"bottom":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}},"comparisonSubject":"contacts"}}],"then":2,"else":0}}},"color":{"component":"data2-core-types@Color","params":{"rgba":"#1677ff"}}}}},"reference":"kRAdiUIkulu0FJCIqxptR"},{"_id":"7ec287977a10551be97c4534","parent":"ec0fa8fdd46583db8630f064","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Tab Accounts","params":{"position":{"component":"data2-core-types@Position","params":{"x":148,"y":76,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":66,"height":32}},"cursor":"pointer","onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab","value":"accounts"}}]}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#0f0f0f"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#f4f6f8"}}}}}}]}},"text":{"component":"data2-core-primitives@String","params":{"content":"Accounts"}},"textSize":14,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}},"comparisonSubject":"accounts"}}],"then":600,"else":400}},"horizontalAlignment":"center","verticalAlignment":"middle"}},"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}}],"comparisonSubject":"accounts"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#1677ff"}},"else":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.65)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.88)"}}}}}},"border":{"component":"data2-core-types@Border","params":{"width":{"bottom":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}},"comparisonSubject":"accounts"}}],"then":2,"else":0}}},"color":{"component":"data2-core-types@Color","params":{"rgba":"#1677ff"}}}}},"reference":"UpOWM4Tb2pqpzWBEPrUWz"},{"_id":"93f7732e17f71560844d56f4","parent":"ec0fa8fdd46583db8630f064","component":"gabz-playground@ant-modal","system":"6863d782e78450ee0fd57fc7","displayName":"Add Modal","params":{"title":"New Lead","width":520,"centered":true,"closable":true,"open":false,"openStore":"crm-ui","openKey":"addOpen","slots":[{"type":"gabz-playground@crm-lead-form","props":{"leads":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"5oU4u3o2nj4O709bIEU03DataSet"}}}}],"tokens":{"component":"gabz-playground@crm-tokens","params":{}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":10,"height":10}}},"onCancel":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.addOpen","value":false}}]}}},"reference":"giKwMljop15gjPcYlUlBp"},{"_id":"a9a9281a7b122c405d9b4772","parent":"ec0fa8fdd46583db8630f064","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Tab Leads","params":{"position":{"component":"data2-core-types@Position","params":{"x":28,"y":76,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":56,"height":32}},"cursor":"pointer","onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab","value":"leads"}}]}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#0f0f0f"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#f4f6f8"}}}}}}]}},"text":{"component":"data2-core-primitives@String","params":{"content":"Leads"}},"textSize":14,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}},"comparisonSubject":"leads"}}],"then":600,"else":400}},"horizontalAlignment":"center","verticalAlignment":"middle"}},"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}}],"comparisonSubject":"leads"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#1677ff"}},"else":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.65)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.88)"}}}}}},"border":{"component":"data2-core-types@Border","params":{"width":{"bottom":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}},"comparisonSubject":"leads"}}],"then":2,"else":0}}},"color":{"component":"data2-core-types@Color","params":{"rgba":"#1677ff"}}}}},"reference":"N0jfMZXpbkwVQ3HvhWJ4S"},{"_id":"ac4af8d04f04ece12703a273","parent":"ec0fa8fdd46583db8630f064","component":"gabz-playground@ant-table","system":"6863d782e78450ee0fd57fc7","displayName":"Contacts Table","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"arn7JIj2wlGm39IPOxXSuDataSet"}},"searchable":true,"sortable":true,"bordered":true,"pageSize":25,"searchPlaceholder":"Search contacts…","columns":[{"key":"firstName","title":"First Name","dataIndex":"firstName"},{"key":"lastName","title":"Last Name","dataIndex":"lastName"},{"key":"title","title":"Title","dataIndex":"title"},{"key":"email","title":"Email","dataIndex":"email"},{"key":"phone","title":"Phone","dataIndex":"phone"}],"rowActions":[{"key":"edit","label":"Edit"}],"tokens":{"component":"gabz-playground@crm-tokens","params":{}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":32,"y":132,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1136,"height":688}},"hide":{"component":"data2-core-comparison-operators@Different","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}}],"comparisonSubject":"contacts"}}}},"reference":"iFL5idaDYphvphCaU2wvc"},{"_id":"ba882431e4d1dbd0f2e4a131","parent":"ec0fa8fdd46583db8630f064","component":"gabz-playground@ant-table","system":"6863d782e78450ee0fd57fc7","displayName":"Deals Table","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"4uPM8-nCj6UT29zmMAt6FDataSet"}},"searchable":true,"sortable":true,"bordered":true,"pageSize":20,"searchPlaceholder":"Search deals…","columns":[{"key":"name","title":"Name","dataIndex":"name"},{"key":"amount","title":"Amount","dataIndex":"amount","align":"right"},{"key":"stage","title":"Stage","dataIndex":"stage","filterable":true},{"key":"probability","title":"Probability","dataIndex":"probability","align":"right"},{"key":"expectedCloseDate","title":"Expected Close","dataIndex":"expectedCloseDate"}],"rowActions":[{"key":"edit","label":"Edit"},{"key":"followup","label":"Follow-up"}],"tokens":{"component":"gabz-playground@crm-tokens","params":{}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":32,"y":132,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1136,"height":688}},"hide":{"component":"data2-core-comparison-operators@Different","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}}],"comparisonSubject":"deals"}},"scroll":{"params":{"y":true},"component":"data2-core-types@Scroll"}},"selectionStore":"crm-ui","onAction":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupType","value":"deal"}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupRelatedId","value":{"component":"data2-core-flow@If","params":{"compare":{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.actionType"}}],"comparisonSubject":"followup"}},"then":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.actionKey"}},"else":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupRelatedId"}}}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupOwnerId","value":{"component":"data2-core-flow@If","params":{"compare":{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.actionType"}}],"comparisonSubject":"followup"}},"then":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.draft_ownerId"}},"else":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupOwnerId"}}}}}},{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupOpen","value":{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.actionType"}}],"comparisonSubject":"followup"}}}}]}}},"reference":"veI8iB_nO_EhgZjap2OJD"},{"_id":"df578dbb7555de54d44c5c1f","parent":"ec0fa8fdd46583db8630f064","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Header Title","params":{"position":{"component":"data2-core-types@Position","params":{"x":32,"y":24,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":34}},"text":{"component":"data2-core-primitives@String","params":{"content":"Records"}},"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.85)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.88)"}}}},"textSize":26,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":700}}},"reference":"woztGoSOWj0HPgvGhO19l"},{"_id":"f85bfd065eee619acefade58","parent":"ec0fa8fdd46583db8630f064","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Tab Deals","params":{"position":{"component":"data2-core-types@Position","params":{"x":88,"y":76,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":54,"height":32}},"cursor":"pointer","onClick":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab","value":"deals"}}]}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#0f0f0f"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#f4f6f8"}}}}}}]}},"text":{"component":"data2-core-primitives@String","params":{"content":"Deals"}},"textSize":14,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}},"comparisonSubject":"deals"}}],"then":600,"else":400}},"horizontalAlignment":"center","verticalAlignment":"middle"}},"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}}],"comparisonSubject":"deals"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#1677ff"}},"else":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.65)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.88)"}}}}}},"border":{"component":"data2-core-types@Border","params":{"width":{"bottom":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-comparison-operators@Equal","params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.activeTab"}},"comparisonSubject":"deals"}}],"then":2,"else":0}}},"color":{"component":"data2-core-types@Color","params":{"rgba":"#1677ff"}}}}},"reference":"iYJZHnxvtrbfTMwlMqQZK"},{"_id":"ecbf9c3593fdba926d02a728","parent":"74b438c6222d7521339a3076","component":"gabz-playground@crm-kanban","system":"6863d782e78450ee0fd57fc7","displayName":"Kanban Board","params":{"leads":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"5oU4u3o2nj4O709bIEU03DataSet"}},"owners":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"y-Fj_8O1Q8SwET7oPpFu8DataSet"}},"tokens":{"component":"gabz-playground@crm-tokens","params":{}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":70,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1200,"height":766}}}},"index":0,"reference":"-GfMOEUt4z3GIDczJ8lQE"},{"_id":"eff44d980c048bce2cee0c62","parent":"74b438c6222d7521339a3076","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Header Title","params":{"position":{"component":"data2-core-types@Position","params":{"x":32,"y":24,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":34}},"text":{"component":"data2-core-primitives@String","params":{"content":"Pipeline"}},"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.85)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.88)"}}}},"textSize":26,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":700}},"tokens":{"component":"gabz-playground@crm-tokens","params":{}}},"index":0,"reference":"UphEND1gw63wvDrLP51Y_"},{"_id":"021bf16dec5d1add803b43d9","parent":"74b438c6222d7521339a3076","component":"gabz-playground@crm-convert","system":"6863d782e78450ee0fd57fc7","displayName":"Convert Watcher","params":{"leads":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"5oU4u3o2nj4O709bIEU03DataSet"}},"accounts":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"4TS0LqYhG0LaNTd5ucvoZDataSet"}},"contacts":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"arn7JIj2wlGm39IPOxXSuDataSet"}},"deals":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"4uPM8-nCj6UT29zmMAt6FDataSet"}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":8,"y":8,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":180,"height":18}}}},"reference":"3CiSTpM8RZXPsgUDBQl1I"},{"_id":"5f290aeb13a266b67a9f86e9","parent":"74b438c6222d7521339a3076","component":"gabz-playground@ant-modal","system":"6863d782e78450ee0fd57fc7","displayName":"Follow-up Modal","params":{"title":"Log Follow-up","centered":true,"closable":true,"width":460,"open":false,"openStore":"crm-ui","openKey":"followupOpen","tokens":{"component":"gabz-playground@crm-tokens","params":{}},"slots":[{"type":"gabz-playground@crm-followup-form","props":{"activities":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"aNFrXXtt76NFND6IZ3RiVDataSet"}}}}],"onCancel":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.followupOpen","value":false}}]}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":200,"height":50}}}},"reference":"hIes5RbWiUiS7GjKLcHlI"},{"_id":"e4384d9937e29c44b9792cd2","parent":"74b438c6222d7521339a3076","component":"gabz-playground@ant-drawer","system":"6863d782e78450ee0fd57fc7","displayName":"Edit Drawer","params":{"title":"Edit Lead","placement":"right","width":440,"closable":true,"open":false,"tokens":{"component":"gabz-playground@crm-tokens","params":{}},"onClose":{"component":"data2-core-flow@Series","params":{"actions":[{"component":"data2-core-types@Setter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.editOpen","value":false}}]}},"slots":[{"type":"gabz-playground@crm-lead-form","props":{"leads":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"5oU4u3o2nj4O709bIEU03DataSet"}}}}],"openStore":"crm-ui","openKey":"editOpen","super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":10,"height":10}}}},"reference":"vKkKDW5oLAEESZv5wyseA"},{"_id":"318329d718056df64f111953","parent":"c949a2af9dd9491e0c3e8a66","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Header Title","params":{"position":{"component":"data2-core-types@Position","params":{"x":32,"y":24,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":34}},"text":{"component":"data2-core-primitives@String","params":{"content":"Dashboard"}},"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.85)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.88)"}}}},"textSize":26,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":700}}},"index":0,"reference":"GrYNv83JnWnzut63FyRHE"},{"_id":"6decd0f57d1761a052e23b41","parent":"c949a2af9dd9491e0c3e8a66","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"KPI Card 1","params":{"position":{"component":"data2-core-types@Position","params":{"x":32,"y":76,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":272,"height":140}}},"index":1,"reference":"M_8QMJOi-jZXQp9kwkr07"},{"_id":"551a464f0294f3e1ea9c37bb","parent":"c949a2af9dd9491e0c3e8a66","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"KPI Card 2","params":{"position":{"component":"data2-core-types@Position","params":{"x":320,"y":76,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":272,"height":140}}},"index":2,"reference":"iLD0TmKYManrFmVJsijYw"},{"_id":"e3335ef796e4df922c84da84","parent":"c949a2af9dd9491e0c3e8a66","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"KPI Card 3","params":{"position":{"component":"data2-core-types@Position","params":{"x":608,"y":76,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":272,"height":140}}},"index":3,"reference":"31OI2HIdM3-BjI8suErjS"},{"_id":"9c01885bfeed8e666344a1fd","parent":"c949a2af9dd9491e0c3e8a66","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"KPI Card 4","params":{"position":{"component":"data2-core-types@Position","params":{"x":896,"y":76,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":272,"height":120}}},"index":4,"reference":"-GfC1nCfp88wZR5pp6dOU"},{"_id":"36ff1b399be2f4dca63f9783","parent":"c949a2af9dd9491e0c3e8a66","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Funnel Section","params":{"position":{"component":"data2-core-types@Position","params":{"x":32,"y":216,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":688,"height":588}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#1f1f1f"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#ffffff"}}}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#303030"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#f0f0f0"}}}}}}},"index":5,"reference":"NcAXERhj0Eqv-d6XRBRd7"},{"_id":"81a8cc8b8ddb52196e79baec","parent":"c949a2af9dd9491e0c3e8a66","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Activity Section","params":{"position":{"component":"data2-core-types@Position","params":{"x":736,"y":216,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":432,"height":588}},"fill":{"component":"data2-core-types@Fill","params":{"backgrounds":[{"component":"data2-core-types@Background","params":{"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#1f1f1f"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#ffffff"}}}}}}]}},"border":{"component":"data2-core-types@Border","params":{"radius":8,"width":1,"color":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"#303030"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"#f0f0f0"}}}}}}},"index":6,"reference":"9awEoBhIPeSPYyn2z3bZl"},{"_id":"70a5d353896424cc81ebaab6","parent":"654c9bcfca59b1a5ebb165a7","component":"gabz-playground@crm-detail","system":"6863d782e78450ee0fd57fc7","displayName":"Detail Instance","params":{"leads":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"5oU4u3o2nj4O709bIEU03DataSet"}},"deals":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"4uPM8-nCj6UT29zmMAt6FDataSet"}},"accounts":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"4TS0LqYhG0LaNTd5ucvoZDataSet"}},"contacts":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"arn7JIj2wlGm39IPOxXSuDataSet"}},"activities":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"aNFrXXtt76NFND6IZ3RiVDataSet"}},"tokens":{"component":"gabz-playground@crm-tokens","params":{}},"super":{"position":{"component":"data2-core-types@Position","params":{"x":28,"y":24,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1080,"height":724}}}},"reference":"HDJbze4k4yqzN79x39NZx"},{"_id":"0251637ea865341b7ea29837","parent":"6decd0f57d1761a052e23b41","component":"gabz-playground@crm-kpi","system":"6863d782e78450ee0fd57fc7","displayName":"KPI1 OpenPipeline","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":24,"y":66,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":240,"height":60}}},"metric":"openPipeline","title":"","prefix":"$","deals":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"4uPM8-nCj6UT29zmMAt6FDataSet"}},"tokens":{"component":"gabz-playground@crm-tokens","params":{}}},"index":0,"reference":"UMd2h3s79y4gXKkaVwHBH"},{"_id":"3c08b9f9b7ab808dcbc54598","parent":"6decd0f57d1761a052e23b41","component":"gabz-playground@ant-card","system":"6863d782e78450ee0fd57fc7","displayName":"Card1 Ant","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":272,"height":140}}},"title":"Open Pipeline","tokens":{"component":"gabz-playground@crm-tokens","params":{}}},"index":0,"reference":"_ZVjn30g2x_OzY26NZqEg"},{"_id":"1f444cae7a98f22c19c9d35b","parent":"551a464f0294f3e1ea9c37bb","component":"gabz-playground@ant-card","system":"6863d782e78450ee0fd57fc7","displayName":"Card2 Ant","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":272,"height":140}}},"title":"Deals Won","tokens":{"component":"gabz-playground@crm-tokens","params":{}}},"index":0,"reference":"S7ZYSYKMtdKjo8fHGghRp"},{"_id":"26a83ab4bd788f2c3e9d42b0","parent":"551a464f0294f3e1ea9c37bb","component":"gabz-playground@crm-kpi","system":"6863d782e78450ee0fd57fc7","displayName":"KPI2 DealsWon","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":24,"y":66,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":240,"height":60}}},"metric":"dealsWon","title":"","deals":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"4uPM8-nCj6UT29zmMAt6FDataSet"}},"tokens":{"component":"gabz-playground@crm-tokens","params":{}}},"index":0,"reference":"ZZMzu8S8JdB2JMTmO8nAy"},{"_id":"303ad959f121d79faa861e35","parent":"e3335ef796e4df922c84da84","component":"gabz-playground@crm-kpi","system":"6863d782e78450ee0fd57fc7","displayName":"KPI3 Conversion","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":24,"y":66,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":240,"height":60}}},"metric":"conversion","title":"","suffix":"%","deals":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"4uPM8-nCj6UT29zmMAt6FDataSet"}},"tokens":{"component":"gabz-playground@crm-tokens","params":{}}},"index":0,"reference":"o0S2nLvaK_JE34mKlXZnC"},{"_id":"d6160a2aa3bc2bde64e88309","parent":"e3335ef796e4df922c84da84","component":"gabz-playground@ant-card","system":"6863d782e78450ee0fd57fc7","displayName":"Card3 Ant","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":272,"height":140}}},"title":"Conversion Rate","tokens":{"component":"gabz-playground@crm-tokens","params":{}}},"index":0,"reference":"TmbqfzvZxmY9Fg6_F5_bQ"},{"_id":"661aeb88de491e36a4dffc5d","parent":"9c01885bfeed8e666344a1fd","component":"gabz-playground@crm-kpi","system":"6863d782e78450ee0fd57fc7","displayName":"KPI4 NewLeads","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":24,"y":66,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":240,"height":60}}},"metric":"newLeads","title":"","leads":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"5oU4u3o2nj4O709bIEU03DataSet"}},"tokens":{"component":"gabz-playground@crm-tokens","params":{}}},"index":0,"reference":"j2VwvzYH6MufAYV8WdeA3"},{"_id":"7e256b896a5f1714bb1d2be0","parent":"9c01885bfeed8e666344a1fd","component":"gabz-playground@ant-card","system":"6863d782e78450ee0fd57fc7","displayName":"Card4 Ant","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":272,"height":140}}},"title":"New Leads","tokens":{"component":"gabz-playground@crm-tokens","params":{}}},"index":0,"reference":"oXsVlZJas_gHvPpUCLry6"},{"_id":"c18da9151ee2e5a2b917c5e0","parent":"36ff1b399be2f4dca63f9783","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Funnel Heading","params":{"position":{"component":"data2-core-types@Position","params":{"x":24,"y":20,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":400,"height":24}},"text":{"component":"data2-core-primitives@String","params":{"content":"Sales Funnel"}},"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.85)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.88)"}}}},"textSize":16,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":600}}},"index":0,"reference":"U01KHDE33CsmTRDUXxd-v"},{"_id":"70b144055a0cff8fa1718ffc","parent":"36ff1b399be2f4dca63f9783","component":"gabz-playground@crm-funnel","system":"6863d782e78450ee0fd57fc7","displayName":"Funnel Instance","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":24,"y":56,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":640,"height":512}}},"deals":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"4uPM8-nCj6UT29zmMAt6FDataSet"}},"tokens":{"component":"gabz-playground@crm-tokens","params":{}}},"index":1,"reference":"4SVOlJ5F6fsyfKNeYyL7A"},{"_id":"ee02eafae42c08f1fd959be0","parent":"81a8cc8b8ddb52196e79baec","component":"data2-core-primitives@Block","system":"6863d782e78450ee0fd57fc7","displayName":"Activity Heading","params":{"position":{"component":"data2-core-types@Position","params":{"x":24,"y":20,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":380,"height":24}},"text":{"component":"data2-core-primitives@String","params":{"content":"Recent Activity"}},"textColor":{"component":"data2-core-flow@If","params":{"compare":[{"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"crm-ui"}},"prop":"data.darkMode"}}],"then":{"component":"data2-core-types@Color","params":{"rgba":"rgba(255,255,255,0.85)"}},"else":{"component":"data2-core-types@Color","params":{"rgba":"rgba(0,0,0,0.88)"}}}},"textSize":16,"textFormat":{"component":"data2-core-types@TextFormat","params":{"fontWeight":600}}},"index":0,"reference":"uH7hXohzwAIY6GgBmanBy"},{"_id":"bedbfc56ddd8c10fd182aad9","parent":"81a8cc8b8ddb52196e79baec","component":"gabz-playground@crm-activity-timeline","system":"6863d782e78450ee0fd57fc7","displayName":"Timeline Instance","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":24,"y":56,"freeTransform":true,"left":true,"right":false,"top":true,"bottom":false}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":384,"height":512}}},"activities":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"aNFrXXtt76NFND6IZ3RiVDataSet"}},"tokens":{"component":"gabz-playground@crm-tokens","params":{}}},"index":1,"reference":"cvZ-mrAtjpJPpp48WtIsN"}]}},{"_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":"6a464d3c8c5c69fa78ecfe71","displayName":"Sales CRM","reference":"eThY-YbIAiAhGiHhi87Ey","params":{"domain":{"component":"data2-core-primitives@String","params":{"content":"sales-crm"}},"entryPoint":{"component":"data2-core-types@ComponentInstanceReference","params":{"component":"data2-core-primitives@Router","reference":"crm-frame-router"}}},"system":"6863d782e78450ee0fd57fc7","component":"data2-core-primitives@Application"}]}},{"reference":"DataComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a46477eb0a857d0aa5caec9","component":"data2-core@Store","system":"6863d782e78450ee0fd57fc7","params":{"initialData":{"darkMode":false,"accent":"#4f46e5","density":"default","activeTab":"leads","actionType":"","actionKey":"","actionRow":"","editOpen":false,"editType":"leads","editId":"","addOpen":false,"addType":"leads","draft_name":"","draft_company":"","draft_email":"","draft_phone":"","draft_source":"","draft_status":"","draft_score":"","draft_ownerId":"","draft_notes":"","detailType":"","detailId":"","followupOpen":false,"followupType":"","followupRelatedId":"","followupOwnerId":"","f_type":"","f_subject":"","f_notes":"","f_dueDate":"","convertPending":"","f_name":"","f_email":"","f_phone":"","f_company":"","f_source":"","f_status":"","f_score":"","f_ownerId":"","activeNav":"/"}},"reference":"crm-ui"},{"_id":"6a45880eb0a857d0aa5b37bb","component":"data2-core@DataSet","system":"6863d782e78450ee0fd57fc7","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"5oU4u3o2nj4O709bIEU03"}}},"reference":"5oU4u3o2nj4O709bIEU03DataSet"},{"_id":"6a458b5ec53088741c501b11","component":"data2-core@DataSet","system":"6863d782e78450ee0fd57fc7","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"aNFrXXtt76NFND6IZ3RiV"}}},"reference":"aNFrXXtt76NFND6IZ3RiVDataSet"},{"_id":"6a458601209db9c36637a819","component":"data2-core@DataSet","system":"6863d782e78450ee0fd57fc7","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"4TS0LqYhG0LaNTd5ucvoZ"}}},"reference":"4TS0LqYhG0LaNTd5ucvoZDataSet"},{"_id":"6a4589568c5c69fa78eb6955","component":"data2-core@DataSet","system":"6863d782e78450ee0fd57fc7","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"4uPM8-nCj6UT29zmMAt6F"}}},"reference":"4uPM8-nCj6UT29zmMAt6FDataSet"},{"_id":"6a458752c53088741c50076c","component":"data2-core@DataSet","system":"6863d782e78450ee0fd57fc7","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"arn7JIj2wlGm39IPOxXSu"}}},"reference":"arn7JIj2wlGm39IPOxXSuDataSet"},{"_id":"6a4585668c5c69fa78eb5594","component":"data2-core@DataSet","system":"6863d782e78450ee0fd57fc7","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"y-Fj_8O1Q8SwET7oPpFu8"}}},"reference":"y-Fj_8O1Q8SwET7oPpFu8DataSet"},{"_id":"6a45880db4c0b0805461e645","component":"data2-core@Data2TableDataSource","system":"6863d782e78450ee0fd57fc7","params":{"table":"5oU4u3o2nj4O709bIEU03","schema":[{"component":"data2-core-types@Field","params":{"key":"name","title":"Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"company","title":"Company","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"email","title":"Email","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"phone","title":"Phone","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"source","title":"Source","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"status","title":"Status","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"score","title":"Score","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"ownerId","title":"Owner ID","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"notes","title":"Notes","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"createdAt","title":"Created At","component":"data2-core-primitives@Date"}}]},"reference":"5oU4u3o2nj4O709bIEU03"},{"_id":"6a458b5eb0a857d0aa5b48e1","component":"data2-core@Data2TableDataSource","system":"6863d782e78450ee0fd57fc7","params":{"table":"aNFrXXtt76NFND6IZ3RiV","schema":[{"component":"data2-core-types@Field","params":{"key":"type","title":"type","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"subject","title":"subject","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"notes","title":"notes","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"dueDate","title":"dueDate","component":"data2-core-primitives@Date"}},{"component":"data2-core-types@Field","params":{"key":"completed","title":"completed","component":"data2-core-primitives@Boolean"}},{"component":"data2-core-types@Field","params":{"key":"relatedType","title":"relatedType","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"relatedId","title":"relatedId","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"ownerId","title":"ownerId","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"createdAt","title":"createdAt","component":"data2-core-primitives@Date"}}]},"reference":"aNFrXXtt76NFND6IZ3RiV"},{"_id":"6a458600e03c48ad27d15701","component":"data2-core@Data2TableDataSource","system":"6863d782e78450ee0fd57fc7","params":{"table":"4TS0LqYhG0LaNTd5ucvoZ","schema":[{"component":"data2-core-types@Field","params":{"key":"name","title":"Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"industry","title":"Industry","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"size","title":"Size","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"website","title":"Website","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"annualRevenue","title":"Annual Revenue","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"ownerId","title":"Owner ID","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"status","title":"Status","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"createdAt","title":"Created At","component":"data2-core-primitives@Date"}}]},"reference":"4TS0LqYhG0LaNTd5ucvoZ"},{"_id":"6a458956209db9c36637b816","component":"data2-core@Data2TableDataSource","system":"6863d782e78450ee0fd57fc7","params":{"table":"4uPM8-nCj6UT29zmMAt6F","schema":[{"component":"data2-core-types@Field","params":{"key":"name","title":"Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"accountId","title":"Account ID","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"contactId","title":"Contact ID","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"amount","title":"Amount","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"stage","title":"Stage","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"probability","title":"Probability","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"expectedCloseDate","title":"Expected Close Date","component":"data2-core-primitives@Date"}},{"component":"data2-core-types@Field","params":{"key":"ownerId","title":"Owner ID","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"createdAt","title":"Created At","component":"data2-core-primitives@Date"}}]},"reference":"4uPM8-nCj6UT29zmMAt6F"},{"_id":"6a4587528c5c69fa78eb602c","component":"data2-core@Data2TableDataSource","system":"6863d782e78450ee0fd57fc7","params":{"table":"arn7JIj2wlGm39IPOxXSu","schema":[{"component":"data2-core-types@Field","params":{"key":"firstName","title":"First Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"lastName","title":"Last Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"email","title":"Email","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"phone","title":"Phone","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"title","title":"Title","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"accountId","title":"Account ID","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"isPrimary","title":"Is Primary","component":"data2-core-primitives@Boolean"}}]},"reference":"arn7JIj2wlGm39IPOxXSu"},{"_id":"6a458566022f39b9563001d5","component":"data2-core@Data2TableDataSource","system":"6863d782e78450ee0fd57fc7","params":{"table":"y-Fj_8O1Q8SwET7oPpFu8","schema":[{"component":"data2-core-types@Field","params":{"key":"name","title":"name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"email","title":"email","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"avatar","title":"avatar","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"role","title":"role","component":"data2-core-primitives@String"}}]},"reference":"y-Fj_8O1Q8SwET7oPpFu8"}]}},{"reference":"BundlesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}}],"processesParams":{}}}}