UNPKG

@eventcatalogtest/visualizer

Version:

ReactFlow nodes and visualizer components for EventCatalog Studio

1 lines 8.44 kB
{"version":3,"sources":["../src/nodes/event/EventNode.tsx","../src/nodes/event/config.ts","../src/index.ts"],"sourcesContent":["import React from 'react';\nimport { Zap } from 'lucide-react';\n\nfunction classNames(...classes: any) {\n return classes.filter(Boolean).join(' ');\n}\n\nexport type EventNodeData = {\n id: string;\n summary: string;\n version: string;\n owners?: string[];\n sends?: string[];\n receives?: string[];\n name: string;\n specifications?: string[];\n repository?: {\n url: string;\n };\n styles?: {\n node: {\n color: string;\n label: string;\n };\n icon: string;\n };\n mode: 'simple' | 'full';\n};\n\nexport interface EventNodeProps {\n id: string;\n data: EventNodeData;\n selected?: boolean;\n}\n\nexport default function EventNode(props: EventNodeProps) {\n const { id, data, selected } = props;\n const { \n version, \n owners = [], \n sends = [], \n receives = [], \n name, \n mode, \n summary \n } = data;\n\n const nodeLabel = 'Event';\n\n return (\n <div className={classNames(\n \"w-full rounded-md border flex justify-start bg-white text-black\",\n selected ? \"border-orange-600 ring-2 ring-orange-500 shadow-lg\" : \"border-orange-400\"\n )}>\n <div\n className={`bg-gradient-to-b from-orange-500 to-orange-700 relative flex items-center w-5 justify-center rounded-l-sm text-orange-100 border-r-[1px] border-orange-500`}\n >\n <Zap className=\"w-4 h-4 opacity-90 text-white absolute top-1\" />\n {mode === 'full' && (\n <span\n className={\"rotate w-1/2 text-center absolute bottom-1 text-[8px] text-white font-bold uppercase tracking-[3px]\"}\n >\n {nodeLabel}\n </span>\n )}\n </div>\n <div className=\"p-1 min-w-60 max-w-[min-content]\">\n <div className={classNames(mode === 'full' ? `border-b border-gray-200` : '')}>\n <span className=\"text-xs font-bold block pt-0.5 pb-0.5\">{name}</span>\n <div className=\"flex justify-between\">\n <span className=\"text-[10px] font-light block pt-0.5 pb-0.5\">v{version}</span>\n {mode === 'simple' && (\n <span className=\"text-[10px] text-gray-500 font-light block pt-0.5 pb-0.5\">{nodeLabel}</span>\n )}\n </div>\n </div>\n {mode === 'full' && (\n <div className=\"divide-y divide-gray-200\">\n <div className=\"leading-3 py-1\">\n <span className=\"text-[8px] font-light\">{summary}</span>\n </div>\n\n <div className=\"grid grid-cols-2 gap-x-4 py-1\">\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Receives messages: {receives.length}\n </span>\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Publishes messages: {sends.length}\n </span>\n <span className=\"text-xs\" style={{ fontSize: '0.2em' }}>\n Owners: {owners.length}\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}","import { Connection, MarkerType } from \"@xyflow/react\";\nimport { Zap } from \"lucide-react\";\nimport { NodeConfiguration } from '../../types';\n\nexport default {\n type: 'event',\n icon: Zap,\n color: 'orange',\n targetCanConnectTo: ['service', 'channel'],\n sourceCanConnectTo: ['service', 'channel'],\n validateConnection: (connection: Connection) => {\n return connection.source !== connection.target;\n },\n getEdgeOptions: (connection: Connection) => {\n if (connection.source === 'event' && connection.target === 'service') {\n return {\n label: 'Publishes',\n markerEnd: { type: MarkerType.ArrowClosed, color: '#000000' },\n };\n }\n return {\n label: 'Subscribes',\n markerEnd: { type: MarkerType.ArrowClosed, color: '#000000' },\n };\n },\n defaultData: {\n name: 'New Event',\n version: '0.0.1',\n summary: 'New event. Click edit to change the details.',\n mode: 'full',\n },\n editor: {\n title: 'Event',\n subtitle: 'Edit the details of the event',\n schema: {\n type: 'object',\n required: ['name', 'version'],\n properties: {\n name: {\n type: 'string',\n title: 'Name',\n default: 'Random value',\n description: 'The name of the event'\n },\n version: {\n type: 'string',\n title: 'Version',\n default: '1.0.0',\n description: 'The version number (e.g., 1.0.0)',\n pattern: '^\\\\d+\\\\.\\\\d+\\\\.\\\\d+(?:-[\\\\w.-]+)?(?:\\\\+[\\\\w.-]+)?$'\n },\n summary: {\n type: 'string',\n title: 'Summary',\n default: '',\n description: 'A brief summary of the event'\n }\n },\n }\n },\n} as NodeConfiguration;","// Types\nexport type { NodeConfiguration, RegisteredNode, NodeCategory } from './types';\n\n// Event Node\nexport { EventNode, eventConfig } from './nodes/event';\nexport type { EventNodeData, EventNodeProps } from './nodes/event';\n\n// Import for internal use\nimport { EventNode } from './nodes/event';\nimport { eventConfig } from './nodes/event';\n\n// Node registry helpers\nexport const nodes = {\n event: {\n component: EventNode,\n config: eventConfig,\n },\n};\n\nexport const nodeConfigs = {\n event: eventConfig,\n};\n\nexport const nodeComponents = {\n event: EventNode,\n};"],"mappings":"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","names":["Zap"]}