{"version":3,"file":"IconsUI.chunk-DdUiBmDN.js","sources":["../../shared/utils/emittable.ts","../../Journeys/Enums.ts","../../shared/utils/ListingsController.ts","../../Journeys/utils/buildSegmentsFromNodes.ts","../../Journeys/journeys.d.ts","../../Journeys/components/GraphData.ts","../../Journeys/Journeys.viewmodel.ts","../../shared/assets/vector/ui/IconsUI.tsx"],"sourcesContent":["/** emit functionality similar to navite events and event listeneres\r\n ***/\r\nexport class Emittable {\r\n #listeners: {\r\n [key in string]: Array<(p: unknown) => unknown>;\r\n } = {};\r\n #subscribers: {\r\n [key in string]: {\r\n id: string;\r\n methods: { [key: string]: Array<(p: unknown) => unknown> };\r\n el?: HTMLElement;\r\n };\r\n } = {};\r\n #library: { [key: string]: any } = {};\r\n\r\n constructor() {}\r\n\r\n emit(method: string, ...payload: unknown[]): void {\r\n if (!this.#listeners[method]) return console.debug('EVENT EMIT IGNORED! [', method, '] - is not registered');\r\n Object.values(this.#listeners[method])?.forEach((c: (...payload: unknown[]) => unknown) => c(...payload));\r\n }\r\n\r\n emitLib(method: string, libraryKey: string, ...payload: unknown[]): void {\r\n if (!this.#listeners[method]) return console.debug('EVENT EMIT IGNORED!', method, '- is not registered');\r\n\r\n Object.values(this.#listeners[method])?.forEach((c: (...payload: unknown[]) => unknown) => c(this.#library[libraryKey], ...payload));\r\n }\r\n\r\n addListener(method: string, callback: any, options: any = {}): void {\r\n this.#listeners[method] ||= [];\r\n this.#listeners[method].push(callback);\r\n\r\n // this.#subscribers[subscriber] ||= {\r\n // id: subscriber,\r\n // methods: {}\r\n // }\r\n // this.#subscribers[subscriber].methods[method] ||= []\r\n // this.#subscribers[subscriber].methods[method].push(callback)\r\n }\r\n\r\n removeListener(method: string): void {\r\n delete this.#listeners[method];\r\n }\r\n\r\n reset(): void {\r\n this.#listeners = {};\r\n }\r\n\r\n addToLibrary(data: any): void {\r\n Object.assign(this.#library, data);\r\n }\r\n}\r\n\r\nexport const emittable = (o?: T): Emittable & (T | typeof o) => Object.assign(new Emittable(), typeof o === 'function' ? o() : o);\r\n\r\nexport type EmittableConstructor = typeof emittable;\r\n","export enum NodeType {\r\n // Placeholder = 0,\r\n Segment = 1,\r\n Task = 2,\r\n Condition = 3,\r\n Text = 4,\r\n Page = 5,\r\n}\r\nexport enum NodeSegmentVariation {\r\n Placeholder = 0, // NULL (might require user input)\r\n Segment = 1,\r\n}\r\nexport enum NodeTaskVariation {\r\n Placeholder = 0, // NULL (might require user input)\r\n Email = 1,\r\n Event = 2,\r\n Survey = 3,\r\n Sms = 4,\r\n}\r\nexport enum NodeConditionVariation {\r\n Placeholder = 0, // NULL (might require user input)\r\n Delay = 1,\r\n Condition = 2,\r\n Bounced = 3,\r\n Opened = 4,\r\n Unsubscribed = 5,\r\n Clicked = 6,\r\n EventRegistered = 7,\r\n EventInvited = 8,\r\n EventWaitlist = 9,\r\n EventAccepted = 10,\r\n EventDeclined = 11,\r\n EventCancelled = 12,\r\n EventAttended = 13,\r\n EventNoShow = 14,\r\n}\r\n\r\nexport enum NodeOrdinalPrefix {\r\n Segment = 'S',\r\n List = 'L',\r\n Survey = 'F',\r\n Task = 'M',\r\n}\r\n\r\nexport enum StepTypes {\r\n Email = 1,\r\n Survey = 2,\r\n Event = 3,\r\n Form = 4,\r\n Sms = 5,\r\n}\r\n\r\nexport enum ConditionDelayMultiplier {\r\n Days = 1,\r\n Weeks = 7,\r\n Months = 30,\r\n}\r\n\r\nexport enum JourneyStatus {\r\n Draft = 1,\r\n Active = 2,\r\n Ended = 3,\r\n Template = 4,\r\n PublicTemplate = 5,\r\n}\r\n\r\nexport enum PositionalAxis {\r\n X = 1,\r\n Y = 2,\r\n Z = 3,\r\n}\r\n\r\nexport enum ColorProp {\r\n // hsl\r\n Hue = 0,\r\n Saturation = 1,\r\n Lightness = 2,\r\n\r\n // rgb\r\n Red = 0,\r\n Green = 1,\r\n Blue = 2,\r\n\r\n Alpha = 3,\r\n}\r\n\r\nexport enum TextNodeAlign {\r\n Left = 0,\r\n Center = 1,\r\n Right = 2,\r\n}\r\n\r\nexport enum TextNodeVariation {\r\n Normal = 0,\r\n Italic = 1,\r\n}\r\n","import { reactive, watch } from 'vue';\r\n\r\n// import { IssueStatus } from './issueStatus';\r\n// import { Category } from './category';\r\n// import { UserReference } from './userReference';\r\n// import { TagReference } from './tagReference';\r\n\r\n// export interface IssueListing {\r\n// issueId: string;\r\n// status: IssueStatus;\r\n// subject: string;\r\n// issueName: string;\r\n// description: string;\r\n// category: Category;\r\n// lastModified: string | Date;\r\n// lastModifiedBy: UserReference;\r\n// surveyId?: string;\r\n// eventId?: string;\r\n// journeyId?: string;\r\n// tags: TagReference[];\r\n// }\r\n\r\ntype GetListingsOptions = { query?: Record | null; processors?: Func[]; force_fetch?: boolean | 'clean' };\r\ntype AddListingsOptions = { query?: Record | null; apiGet?: Func; map_key?: string; processors?: Func[]; eager?: boolean };\r\n\r\nexport default class ListingsController {\r\n default_threshold = 20; //mins\r\n fetch_rate_limit = 10000; // sec\r\n catalog: {\r\n [key: string]: {\r\n timestamp: number;\r\n default_query?: Record;\r\n apiGet: Func;\r\n data: any;\r\n map_key: string | undefined;\r\n map: Record;\r\n processors?: Func[];\r\n // proc: Func | null,\r\n // proc_data: any,\r\n\r\n status: string;\r\n promise: Promise | null;\r\n };\r\n } = {};\r\n threshold: number;\r\n\r\n defaultApiGet: Func = (endpoint: string) => {\r\n console.warn('ListingsController:', 'fetch get method not set for', endpoint);\r\n };\r\n\r\n constructor(options?: { threshold?: number; apiGet?: Func }) {\r\n this.threshold = (options?.threshold || this.default_threshold) * 60000;\r\n\r\n if (options?.apiGet) this.defaultApiGet = options.apiGet;\r\n }\r\n\r\n private mapper(data: Record | any[], map_key: string, catalog: any) {\r\n data.forEach((listing: any) => (catalog.map[listing[map_key]] = listing));\r\n\r\n let i = 0;\r\n for (let key in catalog.map) catalog.data[i++] = catalog.map[key];\r\n }\r\n\r\n get(endpoint: string, { query, force_fetch, processors }: GetListingsOptions = { force_fetch: false }) {\r\n if (!this.catalog[endpoint]) {\r\n console.debug(`ListingsController: catalog for endpoint '${endpoint}' is not registered, registering an unmapped catalog`);\r\n this.add(endpoint, { query, eager: true });\r\n return this.catalog[endpoint].data;\r\n }\r\n\r\n if (force_fetch === 'clean' || this.catalog[endpoint].timestamp === 0) {\r\n this.catalog[endpoint].data.length = 0;\r\n this.catalog[endpoint].map;\r\n for (let key in this.catalog[endpoint].map) {\r\n if (this.catalog[endpoint].map.hasOwnProperty(key)) {\r\n delete this.catalog[endpoint].map[key];\r\n }\r\n }\r\n return this.apiGet(endpoint, query, processors);\r\n }\r\n return this.catalog[endpoint].data;\r\n }\r\n\r\n markDirty(endpoint: string) {\r\n if (this.catalog[endpoint]) this.catalog[endpoint].timestamp = 0;\r\n }\r\n\r\n getListing(endpoint: string, key: string) {\r\n return this.catalog[endpoint]?.map[key];\r\n }\r\n\r\n getMap(endpoint: string) {\r\n if (!this.catalog[endpoint]) {\r\n console.warn(`ListingsController: unable to return a map for unregistered catalog '${endpoint}'. Registering an unmapped catalog.`);\r\n\r\n this.add(endpoint, { eager: true });\r\n }\r\n return this.catalog[endpoint].map;\r\n }\r\n\r\n async apiGet(endpoint: string, query?: Record | null, processors?: Func[]) {\r\n if (this.catalog[endpoint].timestamp || Date.now() - this.catalog[endpoint].timestamp < this.fetch_rate_limit) {\r\n return this.catalog[endpoint].data;\r\n }\r\n\r\n let q: URLSearchParams;\r\n\r\n if (query === undefined && this.catalog[endpoint].default_query) q = new URLSearchParams(this.catalog[endpoint].default_query);\r\n else if (query !== null) q = new URLSearchParams(query);\r\n else q = new URLSearchParams();\r\n\r\n if (this.catalog[endpoint].timestamp) q.set('Modified', new Date(this.catalog[endpoint].timestamp).toISOString());\r\n\r\n if (this.catalog[endpoint].promise === null) {\r\n this.catalog[endpoint].status = 'pending';\r\n this.catalog[endpoint].promise = this.catalog[endpoint].apiGet('?' + q);\r\n }\r\n\r\n let result = await this.catalog[endpoint].promise;\r\n\r\n if (result) {\r\n this.catalog[endpoint].data.splice(0, this.catalog[endpoint].data.length, ...result);\r\n\r\n this.catalog[endpoint].processors?.forEach((fn: Func) => {\r\n fn(result);\r\n });\r\n processors?.forEach((fn: Func) => {\r\n fn(result);\r\n });\r\n\r\n if (this.catalog[endpoint].map_key) this.mapper(result, this.catalog[endpoint].map_key!, this.catalog[endpoint]);\r\n\r\n this.catalog[endpoint].status = 'done';\r\n this.catalog[endpoint].promise = null;\r\n this.catalog[endpoint].timestamp = Date.now();\r\n }\r\n return this.catalog[endpoint].data;\r\n }\r\n\r\n addListing(endpoint: string, listing: any) {\r\n this.catalog[endpoint].data.push(listing);\r\n\r\n if (this.catalog[endpoint].map_key) this.catalog[endpoint].map[this.catalog[endpoint].map_key!] = listing;\r\n }\r\n\r\n add(endpoint: string, { query, apiGet, processors, eager, map_key }: AddListingsOptions): any {\r\n this.catalog[endpoint] = reactive({\r\n timestamp: 0,\r\n default_query: query ?? undefined,\r\n apiGet: apiGet ?? ((q: string) => this.defaultApiGet(endpoint, q)),\r\n data: [],\r\n map_key,\r\n map: {},\r\n processors,\r\n status: 'init',\r\n promise: null,\r\n });\r\n\r\n if (!eager) return true;\r\n\r\n this.apiGet(endpoint, query);\r\n\r\n if (map_key) return this.catalog[endpoint].map;\r\n else return this.catalog[endpoint].data;\r\n }\r\n}\r\n\r\nexport const listingsProcessor_reduce = (data: any[], key: string) => data.reduce((acc: any, listing: any) => ((acc[listing[key]] = listing), acc), {});\r\n","import { SegmentDefinition } from '@cwd/Views/Segments/interfaces';\r\nimport { NodeType } from '@journeys/Enums';\r\nimport { JourneyNode, JourneyStep, LinkObject } from '@journeys/Journeys.viewmodel';\r\nimport { deepClone } from '@shared/utils';\r\nimport { toRaw } from 'vue';\r\n\r\nexport function updateLinkDelays(link: LinkObject, item: JourneyNode) {\r\n link.delay_d += item.data.delay_d || 0;\r\n link.delay_h += item.data.delay_h || 0;\r\n link.delay_m += item.data.delay_m || 0;\r\n}\r\n\r\nexport function updateSegmentWithObjectId(item: JourneyNode, link: LinkObject, list: Map) {\r\n if (item.data.segment.Segments && item.data.segment.Segments.length > 0 && item.data.segment.Segments[0]?.Type === 'InteractionSegment') {\r\n const firstNodeId = link.chain[0];\r\n const firstNode = list.get(firstNodeId)?.node;\r\n\r\n if (firstNode && firstNode.data.type === NodeType.Task && (firstNode.data.IssueId || firstNode.data.SmsMessageId)) {\r\n item.data.segment.Segments[0] = {\r\n ...item.data.segment.Segments[0],\r\n ObjectId: firstNode.data.IssueId || firstNode.data.SmsMessageId,\r\n };\r\n }\r\n }\r\n}\r\n\r\nexport function updateConditionWithEventId(item: JourneyNode, previousNode: JourneyNode | null) {\r\n if (item.data.type === NodeType.Condition && previousNode && previousNode.data.EventId) {\r\n item.data.segment.Segments[0] = {\r\n ...item.data.segment.Segments[0],\r\n EventId: previousNode.data.EventId,\r\n ObjectId: previousNode.data.EventId,\r\n };\r\n }\r\n}\r\nexport function createNewStep(item: JourneyNode, link: LinkObject, inherits: SegmentDefinition[] | [], steps: JourneyStep[]) {\r\n const segmentType = item.data.IssueId ? 'RecipientSegment' : 'SmsRecipientSegment';\r\n\r\n const segmentData = {\r\n Name: null,\r\n Type: segmentType,\r\n IssueId: item.data.IssueId || null,\r\n SmsMessageId: item.data.SmsMessageId || null,\r\n ReceivedMailing: !!item.data.IssueId ? false : undefined,\r\n Received: !!item.data.SmsMessageId ? false : undefined,\r\n EventId: item.data.EventId || null,\r\n Date: null,\r\n TimeSpanSince: item.data.TimeSpanSince ? `${item.data.TimeSpanSince}.${'0'.padStart(2, '0')}:${'0'.padStart(2, '0')}:00` : null,\r\n Operator: item.data.TimeSpanSince ? 2 : null,\r\n };\r\n\r\n steps[item.id] = {\r\n data: {\r\n Name: `${item.data.title}`,\r\n SegmentId: item.data.SegmentId!,\r\n TaskId: item.data.TaskId || null,\r\n SegmentDefinition: {\r\n Name: item.data.title,\r\n Type: 'SegmentGroup',\r\n Bool: 1,\r\n Segments: [segmentData, ...toRaw(item.data.conditions), ...link.segments, ...inherits, ...toRaw(item.data.segment?.Segments)]?.filter(\r\n (s) => !(!s.SmsMessageId && s.Type === 'SmsRecipientSegment')\r\n ),\r\n },\r\n IssueId: item.data.IssueId || null,\r\n SmsMessageId: item.data.SmsMessageId || null,\r\n CopyIssue: null,\r\n CopySms: null,\r\n SurveyId: null,\r\n },\r\n segments: [\r\n {\r\n inherited: inherits,\r\n link_segments: link.segments,\r\n },\r\n ],\r\n origins: [link.chain[0]],\r\n nodeId: item.id,\r\n propagate: item.data.propagate,\r\n chain: [...link.chain],\r\n delay_d: link.delay_d,\r\n delay_h: link.delay_h,\r\n delay_m: link.delay_m,\r\n };\r\n\r\n if (item.data.IssueId) {\r\n steps[item.id].data.IssueId = item.data.IssueId;\r\n } else if (item.data.SmsMessageId) {\r\n steps[item.id].data.SmsMessageId = item.data.SmsMessageId;\r\n }\r\n}\r\n\r\nexport function updateExistingStep(item: JourneyNode, link: LinkObject, inherits: SegmentDefinition[] | [], steps: JourneyStep[]) {\r\n steps[item.id].chain.push(...link.chain);\r\n steps[item.id].origins.push(link.chain[0]);\r\n steps[item.id].segments.push({\r\n inherited: inherits,\r\n link_segments: link.segments,\r\n });\r\n steps[item.id].delay_d = link.delay_d;\r\n steps[item.id].delay_h = link.delay_h;\r\n steps[item.id].delay_m = link.delay_m;\r\n steps[item.id].data.SegmentDefinition.Segments = [\r\n {\r\n Name: null,\r\n Type: 'RecipientSegment',\r\n IssueId: item.data.IssueId,\r\n ReceivedMailing: false,\r\n Date: null,\r\n TimeSpanSince: null,\r\n Operator: null,\r\n },\r\n ...toRaw(item.data.conditions),\r\n ...toRaw(item.data.segment?.Segments),\r\n {\r\n Name: null,\r\n Type: 'SegmentGroup',\r\n Bool: 2,\r\n Segments: steps[item.id].segments.map((s: any) => {\r\n if (s.link_delay_d && (steps[item.id]?.data?.SegmentDefinition?.Segments?.length ?? 0) > 0) {\r\n steps[item.id].data.SegmentDefinition.Segments![0].TimeSpanSince ||= '0';\r\n steps[item.id].data.SegmentDefinition.Segments![0].Operator = 2;\r\n steps[item.id].data.SegmentDefinition.Segments![0].TimeSpanSince += s.link_delay_d;\r\n }\r\n return {\r\n Name: null,\r\n Type: 'SegmentGroup',\r\n Bool: 1,\r\n Segments: [...s.link_segments, ...s.inherited],\r\n };\r\n }),\r\n },\r\n ];\r\n}\r\n\r\nexport function processInherits(link: LinkObject, sequenceFromRoot: boolean, steps: JourneyStep[]): SegmentDefinition[] | [] {\r\n if (sequenceFromRoot) {\r\n return deepClone(steps[link.chain[0]]?.data.SegmentDefinition.Segments ?? []) || [];\r\n } else {\r\n return deepClone(steps[link.chain[0]]?.data.SegmentDefinition.Segments?.slice(0, 1) ?? []) || [];\r\n }\r\n}\r\n\r\nexport function connectToPreviousActionNode(inherits: SegmentDefinition[], link: LinkObject) {\r\n if (inherits[0]) {\r\n if (inherits[0].IssueId) inherits[0].ReceivedMailing = true;\r\n else if (inherits[0].SmsMessageId) inherits[0].Received = true;\r\n\r\n if (link.delay_d || link.delay_h || link.delay_m) {\r\n let minutes = link.delay_m % 60,\r\n hourOverflow = (link.delay_m - minutes) / 60,\r\n hours = (link.delay_h + hourOverflow) % 24,\r\n dayOverflow = (link.delay_h + hourOverflow - hours) / 24,\r\n days = link.delay_d + dayOverflow;\r\n\r\n inherits[0].TimeSpanSince = `${days}.${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:00`;\r\n inherits[0].Operator = 1;\r\n } else {\r\n inherits[0].TimeSpanSince = null;\r\n inherits[0].Operator = null;\r\n }\r\n }\r\n}\r\n","// enums\r\n//\r\n/** trigonometric func to calc start/end points for lines\r\n * that are connected to a node\r\n */\r\nexport enum RelVertexFunc {\r\n Null = 0,\r\n Rect = 1,\r\n RotatedRect = 2,\r\n Circ = 3,\r\n}\r\n\r\nexport enum CanvasItemType {\r\n All = 0,\r\n Node = 1,\r\n Line = 2,\r\n}\r\n\r\nexport enum GraphEdgeType {\r\n Unweighted = 0,\r\n Weighted = 1,\r\n}\r\n\r\nexport enum AdjesantListType {\r\n Digraph = 1,\r\n Bidirectional = 2,\r\n Sequenced,\r\n}\r\n\r\nexport enum SequencedListEdgeDirection {\r\n NotSpecific = 0,\r\n Forward = 1,\r\n Backward = 2,\r\n}\r\n\r\nexport type ListProperties = {\r\n direction: ListDirection.Sequenced;\r\n path_prop: PropertyKey[];\r\n key?: PropertyKey; // no prop === path key value holds data\r\n type?: number; // 2 or more different types\r\n};\r\nexport type ListArguments = Array<{ list: Mapped; properties?: ListProperties }>;\r\n\r\nexport interface UngappedJourney {\r\n journeyID: string;\r\n title: string;\r\n description: string;\r\n status: number;\r\n tags: any[];\r\n content: number[];\r\n nodes: { [key: string]: JourneyNode };\r\n lines: { [key: string]: JourneyLine };\r\n itmCount: number;\r\n startingNode: number;\r\n}\r\n\r\nexport interface Line {\r\n id: number;\r\n to: number;\r\n fr: number;\r\n x: number;\r\n y: number;\r\n ex: number;\r\n ey: number;\r\n points: number[];\r\n runtime: LineRuntime;\r\n}\r\n\r\nexport interface LineRuntime {\r\n toVertex: string;\r\n frVertex: string;\r\n}\r\n\r\ntype NodeLine = { [key: string]: { id: string } };\r\n\r\nexport interface Node {\r\n id: number;\r\n x: number;\r\n y: number;\r\n h: number;\r\n w: number;\r\n i: number;\r\n ic: number;\r\n f: number;\r\n fc: number;\r\n data: Data;\r\n lnto: NodeLine;\r\n lnfr: NodeLine;\r\n runtime: NodeRuntime;\r\n}\r\n\r\nexport interface Data {\r\n title: string;\r\n description: string;\r\n type: number;\r\n delay: number;\r\n delayM: number;\r\n conditions: Condition[];\r\n isInitial?: boolean;\r\n startingSegment?: Segment;\r\n task?: Task;\r\n}\r\n\r\nexport interface NodeRuntime {\r\n cache: Cache;\r\n nx: number;\r\n ny: number;\r\n segments?: Segment[];\r\n}\r\n\r\nexport interface Cache {}\r\n","import {\r\n connectToPreviousActionNode,\r\n createNewStep,\r\n processInherits,\r\n updateConditionWithEventId,\r\n updateExistingStep,\r\n updateLinkDelays,\r\n updateSegmentWithObjectId,\r\n} from '@journeys/utils/buildSegmentsFromNodes';\r\nimport { NodeTaskVariation, NodeType } from '../Enums';\r\nimport { JourneyNode, JourneyStep, LinkObject, tmp_uuidv4 } from '../Journeys.viewmodel';\r\nimport { deepClone } from './../../shared/utils';\r\nimport { AdjesantListType, GraphEdgeType } from './../journeys.d';\r\n\r\nimport { toRaw } from 'vue';\r\n\r\nenum BoolEnum {\r\n False = 0,\r\n True = 1,\r\n ItsKindaCompmlicated = 2,\r\n}\r\n\r\ntype GraphConstructorArgs = {\r\n list?: Map;\r\n startingNode?: number;\r\n graph_size?: number;\r\n sequenceFromRoot: boolean;\r\n};\r\n\r\n// wont bother with matrix right now\r\n// TODO: get this to O(1), but there is not a lot of data so fine atm\r\n// TODO: oh and a shitton try/catch blocks & test stuff\r\nexport default class GraphData {\r\n protected graph_type: number = AdjesantListType.Digraph;\r\n protected edge_type: number = GraphEdgeType.Unweighted;\r\n\r\n protected rooted: number = BoolEnum.False;\r\n\r\n // 0 - no limit\r\n graph_size: number;\r\n\r\n startingNode: number = 0;\r\n startingStep: number | null = 0;\r\n // visited: any\r\n queue: any;\r\n queue_stack: any[] = [];\r\n\r\n list: Map = new Map();\r\n // list: Map> = new Map()\r\n #item_info: any = new Map();\r\n // #item_info: Map = new Map()\r\n\r\n #sequenceFromRoot: boolean = false;\r\n\r\n // #base_bidi: typeof BidirectionalIterator\r\n\r\n // **** constructor\r\n /** aggregate data through a Graph data model */\r\n constructor(options?: GraphConstructorArgs) {\r\n // super()\r\n // this.#base_bidi = BidirectionalIterator\r\n\r\n let { list = null, graph_size = 0, startingNode, sequenceFromRoot = false } = options || {};\r\n this.graph_size = graph_size;\r\n this.#sequenceFromRoot = sequenceFromRoot;\r\n\r\n // **\r\n this.queue = new QueueData();\r\n list && this.setList(list!, startingNode);\r\n }\r\n\r\n setRoot(id: number = 0) {\r\n this.startingNode = id;\r\n this.rooted = id && BoolEnum.True;\r\n }\r\n\r\n steps: any = {};\r\n //startingDateTime: Date | null = null\r\n setList(list: Map, startingNode?: number) {\r\n // }, startingDateTime: Date | null = null) {\r\n\r\n this.setRoot(startingNode);\r\n this.queue_stack = []; // depth traversal (path and relation definition)\r\n\r\n //if (startingDateTime) {\r\n // let date = new Date(startingDateTime)\r\n // this.startingDateTime = date\r\n //}\r\n\r\n this.list = list;\r\n\r\n // this.#base_bidi.setData([...this.list.keys()])\r\n\r\n // console.debug('Graph:', 'mapped adjesant list & reset iterator',\r\n // // `(${ this.list.size })`,\r\n // '\\n', this.list)\r\n }\r\n\r\n // key_nodes: any = {}\r\n sequenceSteps() {\r\n this.startingStep = null;\r\n this.queue?.clear(); // breadth traversal (serialization of segments)\r\n let visited: any = {};\r\n\r\n this.steps = {} as JourneyStep;\r\n\r\n const sequence = (next: number, link: LinkObject) => {\r\n let item: JourneyNode = this.list.get(next).node;\r\n\r\n const previousNodeId = link.chain[link.chain.length - 1];\r\n const previousNode: JourneyNode = this.list.get(previousNodeId)?.node;\r\n\r\n link.chain.push(item.id);\r\n\r\n updateLinkDelays(link, item);\r\n\r\n updateSegmentWithObjectId(item, link, this.list);\r\n\r\n updateConditionWithEventId(item, previousNode);\r\n\r\n if (item.data.type === NodeType.Task && (item.data.var === NodeTaskVariation.Email || item.data.var === NodeTaskVariation.Sms)) {\r\n item.data.SegmentId ||= tmp_uuidv4();\r\n\r\n const inherits = processInherits(link, this.#sequenceFromRoot, this.steps);\r\n connectToPreviousActionNode(inherits, link);\r\n if (!this.steps[item.id]) {\r\n createNewStep(item, link, inherits, this.steps);\r\n } else {\r\n updateExistingStep(item, link, inherits, this.steps);\r\n }\r\n\r\n if (!visited[next]) {\r\n visited[next] = true;\r\n\r\n this.queue.insert(\r\n this.list.get(next).to.map((n: number, idx: number, arr: any) => {\r\n return {\r\n next: n,\r\n link: {\r\n segments: [],\r\n chain: [next],\r\n // to accumulate delay through the whole journey use\r\n // delay: link.delay\r\n delay_d: 0,\r\n delay_h: 0,\r\n delay_m: 0,\r\n },\r\n };\r\n })\r\n );\r\n }\r\n } else {\r\n // If there's only one segment just add it straight to the list but for multiple segments we need to keep the group.\r\n if (item.data.segment?.Segments?.length == 1) \r\n {\r\n link.segments.push(...item.data.segment.Segments);\r\n }\r\n else if (item.data.segment?.Segments?.length > 1) \r\n {\r\n // Keep the name for clarity\r\n item.data.segment.Name = item.data.title;\r\n link.segments.push(item.data.segment);\r\n }\r\n\r\n this.queue.insert(this.list.get(next).to.map((n: number) => ({ next: n, link: deepClone(link) })));\r\n }\r\n\r\n let nq = this.queue.remove()[0];\r\n while (!nq?.next && !this.queue.isEmpty()) nq = this.queue.remove()[0];\r\n\r\n nq?.next && sequence(nq.next, nq.link);\r\n };\r\n\r\n let startingEntry = this.list.get(this.startingNode),\r\n startingNode: JourneyNode = startingEntry.node;\r\n\r\n this.queue.insert(\r\n startingEntry.to.map((n: number, idx: number, arr: any) => {\r\n return {\r\n next: n,\r\n link: {\r\n segments: [...(startingNode.data.segment?.Segments?.length ? [toRaw(startingNode.data.segment)] : [])]\r\n .concat(\r\n startingNode.data.ListIds?.map((listId: string) => ({\r\n Name: null,\r\n Type: 'MemberSegment',\r\n ListId: listId,\r\n InList: true,\r\n Date: null,\r\n TimeSpanSince: null,\r\n }))\r\n )\r\n .concat(\r\n startingNode.data.SegmentIds?.map((segmentId: string) => ({\r\n Name: null,\r\n Type: 'SegmentMemberSegment',\r\n SegmentId: segmentId,\r\n InSegment: true,\r\n }))\r\n ),\r\n\r\n chain: [this.startingNode],\r\n delay_d: startingNode.data.delay_d || 0,\r\n delay_h: startingNode.data.delay_h || 0,\r\n delay_m: startingNode.data.delay_m || 0,\r\n },\r\n };\r\n })\r\n );\r\n\r\n let nq = this.queue.remove()[0];\r\n nq?.next && sequence(nq.next, nq.link);\r\n }\r\n\r\n // TODO: more methods are for live data manipulation which is not needed atm\r\n getMap() {\r\n // console.debug('Graph adjesant list:',\r\n // '\\n', this.list,\r\n // '\\n', 'reactive list:')\r\n\r\n return this.list;\r\n }\r\n\r\n clearMap() {\r\n this.setRoot();\r\n this.list.clear();\r\n // this.#base_bidi.setData([])\r\n\r\n // console.debug('Graph:', '=> map cleared')\r\n }\r\n}\r\n\r\n// for future implementation\r\n// to achieve O(1)/el runtime complecity, useful for typed arrays\r\n// maybe better to make a separate class for that\r\nconst pointerFactory = (data: unknown) => ({\r\n data,\r\n next: null,\r\n prev: null,\r\n});\r\n// a simple Queue\r\nexport class QueueData {\r\n max_size: number;\r\n protected q: Array;\r\n // protected pointer = pointerFactory\r\n // protected traversal_pointer = pointerFactory\r\n\r\n // **** constructor\r\n /**\r\n *\r\n * @param max_size set size limit (0 - no limit)\r\n */\r\n constructor(max_size: number = 0) {\r\n this.max_size = max_size;\r\n\r\n this.q = [];\r\n }\r\n\r\n insert(items: unknown | unknown[], index: number = 0) {\r\n let arr = Array.isArray(items) ? items : [items];\r\n\r\n this.isFull(arr.length) || this.q.splice(index, 0, ...arr);\r\n }\r\n\r\n // maybe also do ids? not now anyway.. also fix mass insert..\r\n // easy, but need some safeguards\r\n remove(count: number = 1, index: number = this.q.length - 1) {\r\n return this.isEmpty() ? [] : this.q.splice(index, count);\r\n }\r\n\r\n getFirst(count: number = 1) {\r\n return this.q.slice(0, count);\r\n }\r\n\r\n getLast(count: number = 1) {\r\n return this.q.slice(this.q.length - 1 - count, count);\r\n }\r\n\r\n getAll() {\r\n return this.q;\r\n }\r\n\r\n isEmpty() {\r\n return this.q.length === 0;\r\n }\r\n\r\n isFull(count: number = 0) {\r\n return this.max_size !== 0 && this.q.length >= this.max_size + count;\r\n }\r\n\r\n clear() {\r\n this.q = [];\r\n }\r\n\r\n size() {\r\n return this.q.length;\r\n }\r\n}\r\n","import { debounce, deepClone, requestFrame } from '../shared/utils';\r\nimport { Emittable, emittable } from '@shared/utils/emittable';\r\nimport { JourneyStatus, NodeType } from './Enums';\r\n\r\nimport { api } from '@cwd/lib/main';\r\nimport ListingsController from '@shared/utils/ListingsController';\r\nimport { TaskSchedule, TaskScheduleController } from '@shared/utils/RecuringEditor/CronProperties';\r\nimport { bitshift } from '@utils';\r\nimport { computed, ComputedRef, reactive, toRaw, watch } from 'vue';\r\nimport GraphData from './components/GraphData';\r\nimport { SegmentDefinition } from '@cwd/Views/Segments/interfaces';\r\nimport { Tag } from '@shared/components/Tags/Tags.access';\r\n\r\nexport enum ZDist {\r\n Close = 'ZD_CLOSE',\r\n Middle = 'ZD_MIDDLE',\r\n Far = 'ZD_FAR',\r\n Space = 'ZD_SPACE',\r\n}\r\n\r\nexport enum LineType {\r\n Solid = 1,\r\n Dashed = 2,\r\n Dotted = 3,\r\n}\r\n\r\ninterface EditorCanvasSettings {\r\n h: ComputedRef;\r\n w: ComputedRef;\r\n rh: number;\r\n rw: number;\r\n sh: number;\r\n sw: number;\r\n el?: HTMLElement;\r\n ext: {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n };\r\n sections: {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n };\r\n}\r\n\r\ninterface EditorViewport {\r\n rect: DOMRect;\r\n dims: {\r\n h: number;\r\n w: number;\r\n };\r\n computed: ComputedRef<{\r\n half_h: number;\r\n half_w: number;\r\n raw_pws: number;\r\n }>; // TODO: <-\r\n el?: HTMLElement;\r\n updateData: () => void;\r\n quickmenu: {\r\n show: boolean;\r\n x: number;\r\n y: number;\r\n h: number;\r\n w: number;\r\n containerRect: DOMRect;\r\n container: {\r\n h: number;\r\n w: number;\r\n };\r\n };\r\n contextmenu: {\r\n show: boolean;\r\n x: number;\r\n y: number;\r\n h: number;\r\n w: number;\r\n containerRect: DOMRect;\r\n nodeId: string;\r\n container: {\r\n h: number;\r\n w: number;\r\n };\r\n };\r\n closeMenu(menu: string): void;\r\n contextMenuTargets: { [k: number]: number | string };\r\n}\r\n\r\ninterface JourneysViewModel {\r\n nav: EditorNavigation;\r\n canvas: EditorCanvasSettings;\r\n viewport: EditorViewport;\r\n editor: EditorProperties;\r\n settings: EditorSettings;\r\n activeJourney: UngappedJourney;\r\n account: JourneyAccountData;\r\n journeysMeta: JourneysMeta;\r\n startMenu: StartMenu;\r\n toast: Emittable & { els: any; groups: any; time: any };\r\n session: {\r\n changes: {\r\n settings: boolean;\r\n };\r\n };\r\n}\r\n\r\nclass PersistantState {\r\n ls_key: string = 'NA';\r\n cache: {\r\n [k: string]: any;\r\n } = {};\r\n\r\n //** constructor\r\n constructor() {}\r\n setup(key: string, watch?: any, onDispose?: Func) {\r\n this.ls_key = key;\r\n this.getStorage();\r\n\r\n if (watch) this.add(watch, onDispose);\r\n }\r\n\r\n getStorage(key: string = this.ls_key) {\r\n let data = localStorage.getItem(key);\r\n if (data) this.cache = JSON.parse(data);\r\n }\r\n setStorage(key: string = this.ls_key, data: typeof this.cache = this.cache) {\r\n localStorage.setItem(key, JSON.stringify(data));\r\n return true;\r\n }\r\n\r\n watchTargets: any = {};\r\n watcher: any;\r\n add(targets: any, onDispose?: Func) {\r\n for (let key in targets) {\r\n if (this.cache[key]) {\r\n console.log('loaded persistent state for', key);\r\n Object.assign(targets[key].target, this.cache[key]);\r\n }\r\n let watchTargets = this.watchTargets;\r\n watchTargets[key] = {\r\n props: targets[key].watch_props,\r\n watcher: watch(targets[key].watch_props, (val) => {\r\n debounce(\r\n () => {\r\n console.log('storing persistent state for', key);\r\n this.cache[key] = val;\r\n this.setStorage();\r\n },\r\n { delay: 2000 }\r\n );\r\n }),\r\n dispose() {\r\n onDispose && onDispose();\r\n this.watcher();\r\n\r\n if (watchTargets[key]) delete watchTargets[key];\r\n },\r\n };\r\n }\r\n }\r\n\r\n del(keys: string[]) {\r\n for (let key of keys) {\r\n this.watchTargets[key].dispose();\r\n }\r\n }\r\n\r\n disposeAll() {\r\n for (let key in this.watchTargets) {\r\n this.watchTargets[key].dispose();\r\n }\r\n }\r\n}\r\n\r\n// WIP\r\ninterface EditorProperties {\r\n // activeTool: Ref\r\n // activeMenu: Ref\r\n // showPropertyWindow: Ref\r\n init: Func;\r\n persistantState: PersistantState;\r\n state: {\r\n listings_view: string;\r\n moving: boolean;\r\n selecting: boolean;\r\n busy: boolean;\r\n activeTool: string;\r\n activeLineStyle: {\r\n t: number;\r\n c: number;\r\n };\r\n activeMenu: string | null;\r\n showNodeMenu: boolean;\r\n showPropertyWindow: boolean;\r\n nodeSettingsTab: string;\r\n nodeArea: any;\r\n nodeObserver: any;\r\n };\r\n nodeAreaCalcProps: Array<{ k: string; d: string }>;\r\n calcNodeArea(): void;\r\n tools: {\r\n seq_iid: () => number;\r\n pointer: Func;\r\n line: Func;\r\n\r\n sel_areaPadding: number;\r\n sel_keyObj: number | null;\r\n sel_count: number;\r\n sel_dims: {\r\n x: number;\r\n y: number;\r\n h: number;\r\n w: number;\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n };\r\n sel_nodes: Indexable;\r\n sel_lines: Indexable;\r\n sel_points: Indexable<\r\n PropertyKey,\r\n {\r\n id: number;\r\n cid: string;\r\n idx: number | string | undefined;\r\n x: number;\r\n y: number;\r\n }\r\n >;\r\n clipboard: any; // temp\r\n highlight: any; // temp\r\n\r\n // align & spread\r\n spread_margin: number;\r\n };\r\n events: Emittable & { els: any; groups: any; time: any };\r\n\r\n history: any;\r\n\r\n /**** dev tools */\r\n dev?: any;\r\n\r\n segmentGraph: GraphData;\r\n}\r\n\r\nconst temp_var_history_len: number = 50;\r\nconst editor: EditorProperties = {\r\n segmentGraph: new GraphData(),\r\n\r\n init: () => {},\r\n persistantState: new PersistantState(),\r\n state: reactive({\r\n listings_view: 'list',\r\n moving: false,\r\n selecting: false,\r\n busy: false,\r\n activeTool: 'pointer',\r\n activeLineStyle: {\r\n t: LineType.Solid,\r\n c: 159,\r\n },\r\n activeMenu: 'nodelists',\r\n showNodeMenu: true,\r\n showPropertyWindow: true,\r\n nodeSettingsTab: 'data',\r\n nodeArea: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n h: 0,\r\n w: 0,\r\n },\r\n nodeObserver: {},\r\n }),\r\n // make a directive out of this ->\r\n nodeAreaCalcProps: [\r\n { k: 't', d: 'h' },\r\n { k: 'r', d: 'w' },\r\n { k: 'b', d: 'h' },\r\n { k: 'l', d: 'w' },\r\n ],\r\n calcNodeArea() {\r\n let c: { [k in string]: number } = { h: 0, w: 0 };\r\n for (let { k, d } of this.nodeAreaCalcProps) {\r\n let v = this.state.nodeObserver[k].scrollWidth;\r\n this.state.nodeArea[k] = v;\r\n this.state.nodeArea[d] = c[d] += v;\r\n }\r\n\r\n activeJourney.content = this.state.nodeArea;\r\n\r\n if (this.state.nodeArea.t > canvas.ext.t) {\r\n canvas.sections.t += 1;\r\n canvas.ext.t += canvas.sh;\r\n } else if (canvas.sections.t > 2 && this.state.nodeArea.t < canvas.ext.t - canvas.sh) {\r\n canvas.sections.t -= 1;\r\n canvas.ext.t -= canvas.sh;\r\n }\r\n\r\n if (this.state.nodeArea.b > canvas.ext.b) {\r\n canvas.sections.b += 1;\r\n canvas.ext.b += canvas.sh;\r\n } else if (canvas.sections.b > 2 && this.state.nodeArea.b < canvas.ext.b - canvas.sh) {\r\n canvas.sections.b -= 1;\r\n canvas.ext.b -= canvas.sh;\r\n }\r\n\r\n if (this.state.nodeArea.l > canvas.ext.l) {\r\n canvas.sections.l += 1;\r\n canvas.ext.l += canvas.sw;\r\n } else if (canvas.sections.l > 2 && this.state.nodeArea.l < canvas.ext.l - canvas.sw) {\r\n canvas.sections.l -= 1;\r\n canvas.ext.l -= canvas.sw;\r\n }\r\n\r\n if (this.state.nodeArea.r > canvas.ext.r) {\r\n canvas.sections.r += 1;\r\n canvas.ext.r += canvas.sw;\r\n } else if (canvas.sections.r > 2 && this.state.nodeArea.r < canvas.ext.r - canvas.sw) {\r\n canvas.sections.r -= 1;\r\n canvas.ext.r -= canvas.sw;\r\n }\r\n },\r\n // -> end directive\r\n\r\n tools: reactive({\r\n seq_iid: () => activeJourney.itm_count++,\r\n pointer: () => {},\r\n line: () => {},\r\n\r\n sel_areaPadding: 10,\r\n sel_keyObj: null,\r\n sel_count: 0,\r\n sel_dims: { x: 0, y: 0, h: 0, w: 0, t: 0, r: 0, b: 0, l: 0 },\r\n sel_nodes: {},\r\n sel_lines: {},\r\n sel_points: {},\r\n clipboard: {},\r\n highlight: {},\r\n\r\n // align & spread\r\n spread_margin: 40,\r\n }),\r\n events: emittable(null),\r\n\r\n history: {\r\n len: temp_var_history_len,\r\n idx: 0,\r\n used: 0,\r\n list: Array(temp_var_history_len),\r\n cache: {},\r\n\r\n getChangedData(keys: any) {\r\n let changes: any = {\r\n nodes: {},\r\n lines: {},\r\n };\r\n for (let key of keys) {\r\n changes.nodes[key] = (this.cache as any).journey.nodes[key];\r\n }\r\n\r\n this.list[this.idx++] = deepClone(changes);\r\n },\r\n\r\n add(changes: any) {\r\n if (this.idx < this.used) this.remove(this.idx, this.used); // TODO: proper removal handling of abandoned tasks, segments, issues & so on\r\n\r\n // TODO: add filter for deepClone to return the chosen part/structure of object with original(current or before change) values\r\n this.list[this.used++] = deepClone(activeJourney);\r\n this.idx++;\r\n },\r\n\r\n remove(from: number, to: number, callback?: Func) {\r\n let abandoned = this.list.splice(from, to);\r\n\r\n if (callback) callback(abandoned);\r\n },\r\n\r\n next() {},\r\n\r\n prev() {},\r\n },\r\n};\r\n\r\nexport interface EditorNavigation {\r\n x: number;\r\n y: number;\r\n z: number;\r\n zmin: number;\r\n zmax: number;\r\n zstep: number;\r\n p: number;\r\n zscale_up(val: number): number;\r\n zscale_down(val: number): number;\r\n zmod: number;\r\n sensitivity: number;\r\n active: boolean;\r\n}\r\n\r\n// viewmodel is attached to app instance global properties.\r\n// the viewmodel still needs to be imported when using the composition api but,\r\n// can be used without the import in markup or default component data declaration\r\n\r\n/**\r\n * @param canvas.rh Raw canvas height\r\n * @param canvas.rw Raw canvas width\r\n * @param canvas.sw section width\r\n * @param canvas.sh section height\r\n * @param canvas.ext extends (px, reactive)\r\n */\r\nconst canvas: EditorCanvasSettings = {\r\n el: undefined,\r\n h: computed(() => canvas.rh + canvas.ext.t + canvas.ext.b),\r\n w: computed(() => canvas.rw + canvas.ext.l + canvas.ext.r),\r\n /** raw height */\r\n rh: 2000,\r\n /** raw width */\r\n rw: 2000,\r\n sh: 1000, // canvas.rh / 4\r\n sw: 1000, // canvas.rw / 4\r\n ext: reactive({\r\n t: 2000,\r\n r: 2000,\r\n b: 2000,\r\n l: 2000,\r\n }),\r\n sections: {\r\n t: 3,\r\n r: 3,\r\n b: 3,\r\n l: 3,\r\n },\r\n },\r\n nav: EditorNavigation = reactive({\r\n x: 0,\r\n y: 0,\r\n z: 0, // p + z = distance\r\n p: 1000, // perspective\r\n zmin: 800, // closest to canvas absolute\r\n zmax: -1500, // farther from canvas\r\n zstep: 700,\r\n zscale_up: (val: number) => bitshift.round(val * ((nav.p - nav.z) / nav.p)),\r\n // zscale_down: (val:number) => bitshift.round(val/nav.p*(nav.p-nav.z)),\r\n zscale_down: (val: number) => bitshift.round(val * (nav.p / (nav.p - nav.z))),\r\n zmod: computed(() => bitshift.round_d((nav.z - nav.zmax) / (nav.zmin - nav.zmax), 2)),\r\n sensitivity: 600, // 1-1000\r\n active: false,\r\n }),\r\n viewport: EditorViewport = {\r\n rect: {} as DOMRect,\r\n dims: reactive({\r\n h: 0,\r\n w: 0,\r\n }),\r\n computed: computed(function () {\r\n let pw_leftJut = 0.4,\r\n raw_pws = viewModel.settings.ui.propertyWindowSize * viewModel.settings.ui.rem;\r\n return {\r\n half_h: viewport.dims.h / 2,\r\n half_w: viewport.dims.w / 2,\r\n /** raw property window size */\r\n raw_pws,\r\n pw_leftJut,\r\n };\r\n }),\r\n updateData: () => undefined,\r\n quickmenu: reactive({\r\n show: false,\r\n x: 0,\r\n y: 0,\r\n h: 380,\r\n w: 300,\r\n containerRect: {} as DOMRect,\r\n container: {\r\n h: 0,\r\n w: 0,\r\n },\r\n }),\r\n contextmenu: reactive({\r\n show: false,\r\n x: 0,\r\n y: 0,\r\n h: 140,\r\n w: 130,\r\n nodeId: '',\r\n containerRect: {} as DOMRect,\r\n container: {\r\n h: 0,\r\n w: 0,\r\n },\r\n }),\r\n closeMenu(menu: string) {\r\n if (/quickmenu|all/g.test(menu)) {\r\n this.quickmenu.show = false;\r\n }\r\n if (/contextmenu|all/g.test(menu)) {\r\n this.contextmenu.show = false;\r\n this.contextmenu.nodeId = '';\r\n }\r\n if (/contextmenu|all/g.test(menu)) {\r\n for (let id in this.contextMenuTargets) editor.events.emit('closecontextmenu', id);\r\n }\r\n },\r\n contextMenuTargets: {},\r\n };\r\n\r\n/** Account and user data ********************************************************/\r\n\r\n// -- begin temp typing\r\n\r\ninterface JourneyNodeTask {\r\n Type: number;\r\n TaskId: string | null;\r\n ObjectId: string | null;\r\n}\r\ninterface JourneyNodeCondition {\r\n Type: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport type LineConnection = {\r\n id: number;\r\n};\r\ntype LineConnectionList = {\r\n [id: number]: LineConnection;\r\n};\r\n\r\nexport interface JourneyTextNode {\r\n id: number;\r\n x: number;\r\n y: number;\r\n h: number;\r\n w: number;\r\n fs: number; // font size\r\n fc: HSLArray; // font color\r\n fw: number; // font weight\r\n fv: 0 | 1; // font variation [0 == normal, 1 == italic]\r\n fa: 0 | 1 | 2; // align [0 == left, 1 == center, 2 == right]\r\n\r\n data: {\r\n type: NodeType.Text;\r\n text: string;\r\n };\r\n runtime?: {\r\n show: Func;\r\n h: number;\r\n w: number;\r\n el: HTMLElement;\r\n };\r\n}\r\n\r\nexport interface JourneyNodeData {\r\n title: string;\r\n name: string;\r\n description: string;\r\n delay_d: number;\r\n delay_h: number;\r\n delay_m: number;\r\n type: NodeType;\r\n var: number; //Should be nodevariation?\r\n\r\n isInitial?: boolean;\r\n resendToExistingRecipients?: boolean;\r\n TimeSpanSince?: number;\r\n propagate?: boolean;\r\n SegmentId?: string | null;\r\n IssueId?: string | null;\r\n SmsMessageId?: string | null; // Nytt OU/DR\r\n TaskId?: string | null;\r\n ListId?: string | null;\r\n EventId?: string | null;\r\n Schedule?: TaskSchedule;\r\n startingSegment?: any;\r\n ListIds?: string[];\r\n SegmentIds?: string[];\r\n\r\n conditions: Array;\r\n segment: any;\r\n ordinal?: string;\r\n}\r\n\r\nexport interface JourneyNode {\r\n id: number;\r\n x: number;\r\n y: number;\r\n h: number;\r\n w: number;\r\n i: number;\r\n ic: number;\r\n f: number;\r\n fc: number;\r\n lnto: LineConnectionList;\r\n lnfr: LineConnectionList;\r\n data: JourneyNodeData;\r\n runtime: {\r\n show: Func;\r\n chain?: Array;\r\n\r\n ordinal?: any;\r\n\r\n Segments?: any;\r\n relVertexFunc?: (point: LineVertex, node: JourneyNode, zero?: number) => { x: number; y: number };\r\n nx?: number;\r\n ny?: number;\r\n issue?: any; // TODO: type\r\n segment?: any; // TODO: type\r\n cache?: {};\r\n };\r\n}\r\n\r\nexport interface LinkObject {\r\n segments: SegmentDefinition[];\r\n chain: number[];\r\n delay_d: number;\r\n delay_h: number;\r\n delay_m: number;\r\n}\r\n\r\nexport type JourneyLineHitbox = {\r\n x: number;\r\n y: number;\r\n ex: number;\r\n ey: number;\r\n};\r\n\r\nexport type LineVertex = {\r\n [k in 'x' | 'y' | 'mdx' | 'mdy']: number;\r\n};\r\n\r\nexport interface JourneyLine {\r\n [k: symbol]: {};\r\n id: number;\r\n x: number;\r\n y: number;\r\n ex: number;\r\n ey: number;\r\n points: Array<{\r\n x: number;\r\n y: number;\r\n }>;\r\n to: number | null;\r\n fr: number | null;\r\n\r\n runtime: {\r\n show: Func;\r\n el?: SVGPathElement | undefined;\r\n hitboxes: Array;\r\n // to: string | null,\r\n // fr: string | null,\r\n toVertex: any;\r\n frVertex: any;\r\n toVertexMod: {\r\n x: number;\r\n y: number;\r\n };\r\n frVertexMod: {\r\n x: number;\r\n y: number;\r\n };\r\n };\r\n t?: number;\r\n c?: number;\r\n}\r\n\r\ntype StatusProps = 'busy' | 'list';\r\n\r\ninterface NodeRuntimeProps {\r\n status: Indexable;\r\n}\r\n\r\n// TODO: change name to something like ..nodeList/..lineList\r\nexport interface JourneyNodes {\r\n [key: string]: JourneyNode | JourneyTextNode;\r\n}\r\nexport interface JourneyLines {\r\n [key: string]: JourneyLine;\r\n}\r\nexport interface NodeRuntime {\r\n [key: string]: NodeRuntimeProps;\r\n}\r\nexport interface JourneyData {\r\n [key: string]: any;\r\n}\r\n\r\n// -- end temp typing\r\n\r\ninterface JourneyVisualData {\r\n content: {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n h: number;\r\n w: number;\r\n };\r\n nodes: Indexable;\r\n lines: Indexable;\r\n}\r\n\r\ntype JourneyOwnedObjects = Record<'issues' | 'segments' | 'tasks' | 'surveys' | 'events' | 'sms', { [k: string]: string }>;\r\n\r\nexport type JourneyStep = {\r\n data: {\r\n Name: string;\r\n SegmentId: string;\r\n IssueId: string | null;\r\n SmsMessageId: string | null;\r\n TaskId: string | null;\r\n SegmentDefinition: SegmentDefinition;\r\n CopyIssue: string | null;\r\n CopySms: string | null;\r\n SurveyId: string | null;\r\n };\r\n segments: unknown[];\r\n propagate: unknown | null;\r\n origins: number[];\r\n nodeId: number;\r\n chain: number[];\r\n delay_d: number;\r\n delay_h: number;\r\n delay_m: number;\r\n};\r\n\r\ntype JourneySteps = Record;\r\n\r\ninterface JourneyOperationalData {\r\n itm_count: number; // item count\r\n startingNode: number | null;\r\n startingStep: number | null;\r\n //startDateTime: Date | string | null\r\n nodes: Indexable;\r\n lines: Indexable;\r\n steps: JourneySteps;\r\n scheduleController: TaskScheduleController;\r\n ownedObjects: JourneyOwnedObjects;\r\n}\r\n\r\nexport interface Journey {\r\n JourneyId: string;\r\n AccountId: string;\r\n Title: string;\r\n Description: string;\r\n Status: number;\r\n GraphicalData: string;\r\n OperationalData: string;\r\n LastModified: string;\r\n LastModifiedBy: {\r\n FirstName: string;\r\n LastName: string;\r\n Name: string;\r\n UserId: string;\r\n UserName: string;\r\n };\r\n SmsMessages: any[];\r\n Issues: any[];\r\n Segments: any[];\r\n Tags: Tag[];\r\n}\r\n\r\nexport interface UngappedJourney extends JourneyVisualData, JourneyOperationalData {\r\n JourneyId: string | null;\r\n Title: string;\r\n Description: string;\r\n Status: number;\r\n Tags: Array<{ TagId: string; Title: string }>;\r\n Version: number;\r\n}\r\n\r\nexport enum OwnedObjectState {\r\n Inactive = 0,\r\n Active = 1,\r\n Abandoned = 3,\r\n}\r\n\r\nconst journeyVisualData: JourneyVisualData = {\r\n content: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n h: 0,\r\n w: 0,\r\n },\r\n nodes: {},\r\n lines: {},\r\n};\r\n\r\nexport const ownedObjects: JourneyOwnedObjects = {\r\n issues: {},\r\n segments: {},\r\n tasks: {},\r\n surveys: {},\r\n events: {},\r\n sms: {},\r\n};\r\nconst journeyOperationalData: JourneyOperationalData = {\r\n itm_count: 1,\r\n startingNode: null,\r\n startingStep: null,\r\n //startDateTime: null,\r\n nodes: {},\r\n lines: {},\r\n steps: {} as JourneySteps,\r\n\r\n scheduleController: {\r\n startingStep: null,\r\n Scheduled: null,\r\n TaskStatus: null,\r\n IsRecurring: true,\r\n TimeZone: '',\r\n CronExpression: '',\r\n TaskType: 'SendIssue',\r\n activeTasks: {},\r\n },\r\n ownedObjects,\r\n};\r\n\r\nconst activeJourney: UngappedJourney = reactive({\r\n JourneyId: null,\r\n Title: '',\r\n Description: '',\r\n Status: 1,\r\n Tags: [],\r\n Version: 0,\r\n\r\n ...journeyVisualData,\r\n ...journeyOperationalData,\r\n});\r\n\r\ninterface JourneyAccountData {\r\n nodePresets: { [key: string]: any };\r\n journeyTemplates: { [key: string]: any };\r\n lists: {\r\n journeys: Indexable;\r\n issues: {\r\n all: Indexable;\r\n 10: Indexable;\r\n 50: Indexable;\r\n };\r\n contactLists: Indexable;\r\n segments: Indexable;\r\n tags: Indexable;\r\n surveys: Indexable;\r\n };\r\n listings: ListingsController;\r\n}\r\n\r\nconst account: JourneyAccountData = {\r\n nodePresets: reactive({}),\r\n journeyTemplates: reactive({}),\r\n lists: {\r\n journeys: {},\r\n issues: {\r\n all: {},\r\n 10: {},\r\n 50: {},\r\n },\r\n contactLists: {},\r\n segments: {},\r\n tags: {},\r\n surveys: {},\r\n },\r\n\r\n listings: new ListingsController({\r\n apiGet: (path: string, query?: string) => api.get(path + (query ?? '')),\r\n }),\r\n};\r\n\r\nexport interface JourneysMeta {\r\n [key: number]: {\r\n [key: string]: {\r\n title: string;\r\n timestamp: string;\r\n userId: string;\r\n };\r\n };\r\n}\r\n\r\nconst journeysMeta: JourneysMeta = reactive({\r\n [JourneyStatus.Draft]: {},\r\n [JourneyStatus.Active]: {},\r\n [JourneyStatus.Ended]: {},\r\n [JourneyStatus.Template]: {},\r\n [JourneyStatus.PublicTemplate]: {},\r\n});\r\n\r\ninterface StartMenu {\r\n selected: string[];\r\n}\r\n\r\nconst startMenu = reactive({\r\n selected: [],\r\n});\r\n\r\nconst toast: any = emittable({\r\n sc: 0,\r\n time: {\r\n stay: 10000,\r\n linger: 2000,\r\n queue: 200,\r\n },\r\n timestamp: 0,\r\n els: {},\r\n queue: [],\r\n groups: reactive({\r\n 'top-left': {},\r\n 'top-center': {},\r\n 'bottom-left': {},\r\n 'bottom-center': {},\r\n }),\r\n post(data: any) {\r\n if (!data) return;\r\n let now = Date.now(),\r\n elapsed = now - this.timestamp;\r\n\r\n if (now - this.timestamp < this.time.queue) {\r\n this.queue.push(data);\r\n\r\n setTimeout(\r\n () => {\r\n let i = this.queue.shift();\r\n\r\n i.sc = ++this.sc;\r\n this.groups[i.pos][i.sc] = i;\r\n },\r\n this.queue.length * this.time.queue - elapsed\r\n );\r\n } else {\r\n data.sc = ++this.sc;\r\n this.timestamp = now;\r\n this.groups[data.pos][this.sc] = data;\r\n }\r\n },\r\n});\r\n\r\ntoast.addListener('note', toast.post.bind(toast));\r\n\r\nexport enum GridType {\r\n None = 0,\r\n Pattern = 1,\r\n Solid = 2,\r\n Dot = 3,\r\n}\r\n\r\ninterface PersistentAppState {\r\n cache: {\r\n [k: string]: any;\r\n };\r\n getStorage: Func;\r\n setStorage: Func;\r\n snap: Func;\r\n}\r\n\r\ninterface EditorSettings {\r\n tools: {\r\n // history_len: number\r\n };\r\n ui: {\r\n propertyWindowSize: number;\r\n rem: number;\r\n darkTheme: boolean;\r\n setREM(val: number, replace?: boolean): void;\r\n };\r\n grid: {\r\n [k: string]: any;\r\n // spacing: number\r\n // strokeWidth: number\r\n // color: string\r\n // snap: boolean\r\n // snap_m: number\r\n set: (...args: any) => void;\r\n };\r\n canvas: {\r\n p_mod: ComputedRef;\r\n relVertexMargin: number;\r\n selectSensitivity: number;\r\n doubleClickThreshold: number;\r\n };\r\n editor: {\r\n textNode: {\r\n minFontSize: number;\r\n maxFontSize: number;\r\n };\r\n incrementDragSensitivity: number;\r\n };\r\n}\r\n\r\nconst viewModel: JourneysViewModel = {\r\n nav,\r\n canvas,\r\n viewport,\r\n editor,\r\n activeJourney,\r\n account,\r\n journeysMeta,\r\n startMenu,\r\n toast,\r\n settings: {\r\n tools: {\r\n // history_len: 50\r\n },\r\n ui: reactive({\r\n propertyWindowSize: 28,\r\n rem: 16,\r\n darkTheme: false,\r\n setREM(val: number, set: boolean = false) {\r\n this.rem = set ? val : this.rem + val;\r\n\r\n requestFrame(() => (document.documentElement.style.fontSize = `${this.rem}px`));\r\n },\r\n }),\r\n grid: reactive({\r\n spacing: 20, // small, large = small*10\r\n strokeWidth: 2, // large, small = large/2\r\n color: '#dedede', // small has hardcoded opacity of .7\r\n dotColor: '#94cbce',\r\n centerLineColor: '#d6d1da',\r\n snap: true, // if true, snaps to #smallGrid spacing\r\n snap_m: 2, // snap multiple\r\n\r\n set(this: any, prop, val) {\r\n this[prop] = val;\r\n },\r\n type: GridType.Solid,\r\n }),\r\n canvas: {\r\n /** perspective modifier */\r\n p_mod: computed(() => 1 - viewModel.nav.z / viewModel.nav.p),\r\n relVertexMargin: 40, // dist fr line -> node\r\n selectSensitivity: 200, // ms\r\n doubleClickThreshold: 550, // ms\r\n },\r\n editor: {\r\n textNode: {\r\n minFontSize: 16,\r\n maxFontSize: 66,\r\n },\r\n incrementDragSensitivity: 20,\r\n },\r\n },\r\n session: {\r\n changes: {\r\n settings: false,\r\n },\r\n },\r\n};\r\n\r\nexport default viewModel;\r\n\r\n// #base_bidi: typeof BidirectionalIterator\r\n\r\nexport const exitToStartMenu = () => {\r\n saveCurrentJourney();\r\n resetActiveJourney();\r\n};\r\n\r\nexport const resetActiveJourney = () => {\r\n activeJourney.JourneyId = null;\r\n activeJourney.Title = '';\r\n activeJourney.Description = '';\r\n activeJourney.Status = JourneyStatus.Draft;\r\n activeJourney.Tags = [];\r\n\r\n activeJourney.itm_count = 1;\r\n activeJourney.startingNode = null;\r\n activeJourney.startingStep = null;\r\n\r\n activeJourney.nodes = {};\r\n activeJourney.lines = {};\r\n activeJourney.steps = {} as JourneySteps;\r\n\r\n activeJourney.content = {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n h: 0,\r\n w: 0,\r\n };\r\n\r\n activeJourney.scheduleController = {\r\n startingStep: null,\r\n Scheduled: null,\r\n TimeZone: '',\r\n TaskStatus: null,\r\n IsRecurring: true,\r\n CronExpression: '',\r\n TaskType: 'SendIssue',\r\n activeTasks: {},\r\n };\r\n\r\n activeJourney.ownedObjects = {\r\n issues: {},\r\n segments: {},\r\n tasks: {},\r\n surveys: {},\r\n events: {},\r\n sms: {},\r\n };\r\n};\r\n\r\ntype StructJourneyDataOptions = {\r\n spacing?: number;\r\n};\r\n\r\nconst structJourneyToJSON = (data: UngappedJourney, { spacing = 0 }: StructJourneyDataOptions = {}) => {\r\n let op_data: any = {\r\n JourneyId: data.JourneyId,\r\n startingNode: data.startingNode,\r\n startingStep: data.startingStep,\r\n nodes: {},\r\n };\r\n\r\n const replacer = function (this: any, key: any, val: any): any {\r\n if (['hitboxes', 'runtime', 'IssueListing', 'SegmentListing'].indexOf(key) !== -1) return undefined;\r\n\r\n if (val === undefined || key === 'JourneyId') val = null;\r\n\r\n if (key === 'data') {\r\n let clonable = deepClone(val, {\r\n replacer: (key: string, val: any) => {\r\n if (/(Id|Ids)$/.test(key)) return Array.isArray(val) ? [] : null;\r\n\r\n return val;\r\n },\r\n }),\r\n operational: any = {};\r\n\r\n for (let key in val) {\r\n if (/^(startingSegment|Schedule|segment|.*(Id|Ids))$/.test(key)) operational[key] = val[key];\r\n }\r\n\r\n op_data.nodes[this.id] = operational;\r\n\r\n return clonable;\r\n }\r\n\r\n if (/^(scheduleController|ownedObjects)$/.test(key)) {\r\n op_data[key] = val;\r\n return undefined;\r\n }\r\n\r\n if (key === 'steps') {\r\n // op_data.steps = val\r\n op_data.steps = Object.values(val).reduce(\r\n (acc: { [k: string]: number }, step: any) => (step?.nodeId ? (acc[step.nodeId] = step.nodeId) : !isNaN(step) && (acc[step] = step), acc),\r\n {}\r\n );\r\n return undefined;\r\n }\r\n\r\n return val;\r\n };\r\n\r\n return {\r\n gr_data: JSON.stringify(data, replacer, spacing),\r\n op_data: JSON.stringify(\r\n op_data,\r\n (k: string, v) => {\r\n if (v === undefined) return null;\r\n\r\n if (/^(IssueListing|SegmentListing)$/.test(k)) return undefined;\r\n\r\n return v;\r\n },\r\n spacing\r\n ),\r\n };\r\n};\r\n\r\n// main joruney parsers\r\nexport const saveCurrentJourney = () => {\r\n let { gr_data, op_data } = structJourneyToJSON(activeJourney);\r\n\r\n api.post('/Journeys/' + activeJourney.JourneyId, {\r\n JourneyId: activeJourney.JourneyId,\r\n Title: activeJourney.Title,\r\n Description: activeJourney.Description,\r\n Status: activeJourney.Status,\r\n Tags: toRaw(activeJourney.Tags),\r\n GraphicalData: gr_data,\r\n OperationalData: op_data,\r\n })\r\n .then(() => {\r\n toast.emit('note', {\r\n pos: 'top-center',\r\n type: 'success',\r\n message: { head: $Resources.AlertSuccessHeading, body: $Resources.AlertSavedJourneyBody, break: true },\r\n });\r\n })\r\n .catch((err: any) => {\r\n toast.emit('note', {\r\n pos: 'top-center',\r\n type: 'error',\r\n message: {\r\n head: 'Failed to save journey',\r\n body: `Message: ${err}`,\r\n break: true,\r\n },\r\n });\r\n });\r\n};\r\n\r\n// export const saveCurrentJourney = () => {\r\n// viewModel.journeysMeta[viewModel.activeJourney.Status][viewModel.activeJourney.JourneyId!] = {\r\n// title: viewModel.activeJourney.Title,\r\n// timestamp: new Date().toLocaleString(),\r\n// userId: 'userid -> username'\r\n// }\r\n// setLocalStorageItem('journeysMeta', viewModel.journeysMeta, true, { encodeTarget: 'json', jsonWhiteSpace: 0 })\r\n\r\n// viewModel.activeJourney.content = [ // for clarity for now\r\n// editor.state.nodeArea.t,\r\n// editor.state.nodeArea.r,\r\n// editor.state.nodeArea.b,\r\n// editor.state.nodeArea.l,\r\n// editor.state.nodeArea.h,\r\n// editor.state.nodeArea.w\r\n// ]\r\n// setLocalStorageItem(viewModel.activeJourney.JourneyId!, viewModel.activeJourney, true, { encodeTarget: 'json', jsonFilter: 'parseSaveData', jsonWhiteSpace: 0 })\r\n// }\r\n\r\n// main joruney parsers\r\nexport const saveAsTemplate = (title: string, guid: string, description: string = '') => {\r\n viewModel.journeysMeta[JourneyStatus.Template][guid] = {\r\n title,\r\n timestamp: new Date().toISOString(),\r\n userId: 'userid -> username',\r\n };\r\n setLocalStorageItem('journeysMeta', viewModel.journeysMeta, true, { encodeTarget: 'json', jsonWhiteSpace: 0 });\r\n\r\n let template = JSON.parse(JSON.stringify(viewModel.activeJourney));\r\n template.status = JourneyStatus.Template;\r\n template.description = description;\r\n template.id = guid;\r\n template.content = [\r\n // for clarity for now\r\n editor.state.nodeArea.t,\r\n editor.state.nodeArea.r,\r\n editor.state.nodeArea.b,\r\n editor.state.nodeArea.l,\r\n editor.state.nodeArea.h,\r\n editor.state.nodeArea.w,\r\n ];\r\n setLocalStorageItem(guid, template, true, { encodeTarget: 'json', jsonFilter: 'parseSaveData', jsonWhiteSpace: 0 });\r\n};\r\n\r\nexport const handleSaveTemplate = (journeyId: string, title: string, description: string) => {\r\n if (!title) return;\r\n\r\n api.post(`/Journeys/Template/Save/${journeyId}?title=${title}${description ? '&description=' + description : ''}`, {}).then(() => {\r\n toast.emit('note', {\r\n pos: 'top-center',\r\n type: 'success',\r\n message: { head: $Resources.SaveJourneyAsTemplateAlertHeading, body: $Resources.SaveJourneyAsTemplateAlertHeading, break: true },\r\n });\r\n });\r\n};\r\n\r\n/**\r\n * TODO: keep track of session changes and use that object to parse only the data edited/added or removed\r\n * this simple test worked like a charm =)\r\n * @param name obj key\r\n * @param val obj value\r\n * @returns\r\n */\r\nconst jsonFilters: { [key: string]: ((this: any, key: string, value: any) => any) | undefined } = {\r\n simpleTest: (key: any, val: any): any => {\r\n // exclude entries with given keys\r\n if (['x0y0', 'darkTheme'].indexOf(key) !== -1) return undefined;\r\n\r\n // and functions\r\n if (typeof val === 'function') return undefined;\r\n\r\n return val; // return rest\r\n },\r\n parseSaveData: (key: any, val: any): any => {\r\n if (['hitboxes', 'el'].indexOf(key) !== -1) return undefined;\r\n if (key === 'runtime' && (val.toVertex || val.fromVertex)) return { toVertex: val.toVertex, fromVertex: val.fromVertex };\r\n\r\n return val;\r\n },\r\n};\r\n\r\nexport const setLocalStorageItem = (\r\n key: string,\r\n obj: any,\r\n encode?: boolean,\r\n encodeOptions?: { encodeTarget: string; jsonFilter?: string; jsonWhiteSpace?: number }\r\n): boolean => {\r\n let data = obj;\r\n if (encode && encodeOptions) {\r\n let { encodeTarget, jsonFilter, jsonWhiteSpace = 2 } = encodeOptions,\r\n replacerFunction = jsonFilter ? jsonFilters[jsonFilter] : undefined;\r\n\r\n switch (encodeTarget) {\r\n case 'json':\r\n data = JSON.stringify(data, replacerFunction, jsonWhiteSpace);\r\n break;\r\n }\r\n }\r\n\r\n localStorage.setItem(key, data);\r\n return true;\r\n};\r\n\r\nexport const getLocalStorageItem = (key: string, options?: { target?: any; decode?: string }): unknown | any => {\r\n let data = localStorage.getItem(key);\r\n if (data && options) {\r\n let { target, decode } = options;\r\n if (decode)\r\n return new Promise((res: any, rej: any) => {\r\n res(JSON.parse(data!));\r\n }).then((res: any) => {\r\n if (!res) return {};\r\n if (target) return Object.assign(target, res);\r\n return res;\r\n });\r\n }\r\n\r\n return data;\r\n};\r\n\r\nexport const removeLocalStorageItem = (key: string): boolean => {\r\n localStorage.removeItem(key);\r\n return true;\r\n};\r\n\r\nexport const clearLocalStorage = (): boolean => {\r\n localStorage.clear();\r\n return true;\r\n};\r\n\r\nexport const tmp_uuidv4 = () => {\r\n return ([1e7].join() + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c: any) =>\r\n (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16)\r\n );\r\n};\r\n\r\n/********************************* DEV TOOLS and helpers .. extends the editor object for now */\r\n\r\ninterface devtools {\r\n [key: string]: any;\r\n}\r\n\r\nconst dev = {\r\n workers: {},\r\n props: reactive({\r\n sel_x: 0,\r\n sel_y: 0,\r\n }),\r\n canvas: reactive({\r\n boundScroll: true,\r\n boundZ: true,\r\n }),\r\n show: reactive({\r\n admin_tools: false,\r\n hitboxes: false,\r\n nodeArea: false,\r\n pseudoHelpers: false,\r\n canvasGrid: false,\r\n renderLatency: false,\r\n }),\r\n v: {\r\n ev_ts: 0,\r\n },\r\n};\r\n\r\neditor.dev = dev;\r\n","import { LineType } from '@journeys/Journeys.viewmodel'\r\n\r\nimport './icons-ui.css'\r\n\r\n/**\r\n * Floppy disc icon\r\n * @returns Vector asset\r\n **/\r\nexport const SaveSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Circular arrow\r\n * @returns Vector asset\r\n **/\r\nexport const CircularArrowSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Folder icon\r\n * @returns Vector asset\r\n **/\r\nexport const FolderSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Gear icon\r\n * @returns Vector asset\r\n **/\r\nexport const SettingsSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Nodes icon\r\n * @returns Vector asset\r\n **/\r\nexport const NodesSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Save template icon\r\n * @returns Vector asset\r\n **/\r\nexport const SaveTemplateSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Globe icon\r\n * @returns Vector asset\r\n **/\r\nexport const GlobeSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Globe icon\r\n * @returns Vector asset\r\n **/\r\nexport const GlobeAltSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Pointer icon\r\n * @returns Vector asset\r\n **/\r\nexport const PointerSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Navigation icon\r\n * @returns Vector asset\r\n **/\r\nexport const NavigationSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Line tool icon\r\n * @returns Vector asset\r\n **/\r\nexport const LineToolSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Line type variable\r\n * @returns Vector asset\r\n **/\r\nexport const LineTypeSVG = ({ type }: { type: LineType }) => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Light mode icon\r\n * @returns Vector asset\r\n **/\r\nexport const LightThemeSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Dark mode icon\r\n * @returns Vector asset\r\n **/\r\nexport const DarkThemeSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Grid icon\r\n * @returns Vector asset\r\n **/\r\nexport const GridSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Options switch icon\r\n * @returns Vector asset\r\n **/\r\nexport const OptionsSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Paste icon\r\n * @returns Vector asset\r\n **/\r\nexport const PasteSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Copy icon\r\n * @returns Vector asset\r\n **/\r\nexport const CopySVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Magnet and grid icon\r\n * @returns Vector asset\r\n **/\r\nexport const GridSnapSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Gears icon\r\n * @returns Vector asset\r\n **/\r\nexport const GearsSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Text icon\r\n * @returns Vector asset\r\n **/\r\nexport const TextSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Magnet icon\r\n * @returns Vector asset\r\n **/\r\nexport const MagnetSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Prview eye icon\r\n * @returns Vector asset\r\n **/\r\nexport const PreviewSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Double arrows right icon\r\n * @returns Vector asset\r\n **/\r\nexport const DoubleArrowsRightSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Double arrows left icon\r\n * @returns Vector asset\r\n **/\r\nexport const DoubleArrowsLeftSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Arrow left icon\r\n * @returns Vector asset\r\n **/\r\nexport const ArrowLeftSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Arrow left icon\r\n * @returns Vector asset\r\n **/\r\nexport const ArrowRightSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Small arrow down icon\r\n * @returns Vector asset\r\n **/\r\nexport const SmallArrowDownSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Small arrow up icon\r\n * @returns Vector asset\r\n **/\r\nexport const SmallArrowUpSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Single arrow left icon\r\n * @returns Vector asset\r\n **/\r\nexport const SingleArrowLeftSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Single arrow right icon\r\n * @returns Vector asset\r\n **/\r\nexport const SingleArrowRightSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Single arrow top icon\r\n * @returns Vector asset\r\n **/\r\nexport const SingleArrowUpSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Single arrow top icon\r\n * @returns Vector asset\r\n **/\r\nexport const SingleArrowDownSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Cross icon\r\n * @returns Vector asset\r\n **/\r\nexport const CrossSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Cross icon, thinner and longer\r\n * @returns Vector asset\r\n **/\r\nexport const ThinCrossSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Color bucket icon\r\n * @returns Vector asset\r\n **/\r\nexport const ColorBucketSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Color wheel icon\r\n * @returns Vector asset\r\n **/\r\nexport const ColorWheelSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Heart icon\r\n * @returns Vector asset\r\n **/\r\nexport const HeartSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Align vertical icon\r\n * @returns Vector asset\r\n **/\r\nexport const AlignVerticalSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Align horizontal icon\r\n * @returns Vector asset\r\n **/\r\nexport const AlignHorizontalSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Trashcan icon\r\n * @returns Vector asset\r\n **/\r\nexport const TrashSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Trashcan outlined icon\r\n * @returns Vector asset\r\n **/\r\nexport const TrashOutlineSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Scale icon\r\n * @returns Vector asset\r\n **/\r\nexport const ScaleSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Connect to icon\r\n * @returns Vector asset\r\n **/\r\nexport const ConnectToSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Connect from icon\r\n * @returns Vector asset\r\n **/\r\nexport const ConnectFromSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Journey tiny icon\r\n * @returns Vector asset\r\n **/\r\nexport const JourneySVG = () => (\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * info icon\r\n * @returns Vector asset\r\n **/\r\nexport const InfoSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * warning icon\r\n * @returns Vector asset\r\n **/\r\nexport const WarningSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * error icon\r\n * @returns Vector asset\r\n **/\r\nexport const ErrorSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * tiny clock icon\r\n * @returns Vector asset\r\n **/\r\nexport const TinyClockSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * check mark in circle icon\r\n * @returns Vector asset\r\n **/\r\nexport const CheckSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * magnifying glass - thin\r\n * @returns Vector asset\r\n **/\r\nexport const MagnifyingGlassThinSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * magnifying glass - regular\r\n * @returns Vector asset\r\n **/\r\nexport const MagnifyingGlassSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * calendar - regular\r\n * @returns Vector asset\r\n **/\r\nexport const CalendarSVG = () => (\r\n\t\r\n\t\t{/* \r\n \r\n \r\n \r\n \r\n */}\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * clock - simple\r\n * @returns Vector asset\r\n **/\r\nexport const ClockSimpleSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * user legacy\r\n * @returns Vector asset\r\n **/\r\nexport const UserLegacySVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * trash outline legacy\r\n * @returns Vector asset\r\n **/\r\nexport const TrashLegacyOutlineSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * trash solid legacy\r\n * @returns Vector asset\r\n **/\r\nexport const TrashLegacySVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * droplet solid\r\n * @returns Vector asset\r\n **/\r\nexport const DropletSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * plus solid\r\n * @returns Vector asset\r\n **/\r\nexport const PlusSolidSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * grid solid\r\n * @returns Vector asset\r\n **/\r\nexport const GridSolidSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * grid none\r\n * @returns Vector asset\r\n **/\r\nexport const GridNoneSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * grid patterened\r\n * @returns Vector asset\r\n **/\r\nexport const GridPatternSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * grid dot\r\n * @returns Vector asset\r\n **/\r\nexport const GridDotSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * grid dot xs\r\n * @returns Vector asset\r\n **/\r\nexport const GridDotSmallSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * alignment boxes\r\n * @returns Vector asset\r\n **/\r\nexport const AlignCenterSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * distribute boxes\r\n * @returns Vector asset\r\n **/\r\nexport const DistributeSpaceSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * sent issue small outlined\r\n * @returns Vector asset\r\n **/\r\nexport const SentIssueOutlineSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * user small outlined\r\n * @returns Vector asset\r\n **/\r\nexport const UserOutlineSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * list view svg\r\n * @returns Vector asset\r\n **/\r\nexport const ListViewSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * grid view svg\r\n * @returns Vector asset\r\n **/\r\nexport const GridViewSVG = () => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Font style bold svg\r\n * @returns Vector asset\r\n **/\r\nexport const FontStyleBoldSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * Font style italic svg\r\n * @returns Vector asset\r\n **/\r\nexport const FontStyleItalicSVG = () => (\r\n\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * text align left svg\r\n * @returns Vector asset\r\n **/\r\nexport const TextAlignLeftSVG = ({ color = '#8F8D91' }) => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t{color}\r\n\t\r\n)\r\n\r\n/**\r\n * text align center svg\r\n * @returns Vector asset\r\n **/\r\nexport const TextAlignCenterSVG = ({ color = '#8F8D91' }) => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n\r\n/**\r\n * text align right svg\r\n * @returns Vector asset\r\n **/\r\nexport const TextAlignRightSVG = ({ color = '#8F8D91' }) => (\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n)\r\n"],"names":["reactive","toRaw","deepClone","computed","bitshift","requestFrame","watch","debounce","createVNode","api","_listeners","_subscribers","_library","Emittable","__privateAdd","method","payload","_a","__privateGet","c","libraryKey","callback","options","__privateSet","data","emittable","o","NodeType","NodeSegmentVariation","NodeTaskVariation","NodeConditionVariation","JourneyStatus","TextNodeAlign","TextNodeVariation","ListingsController","__publicField","endpoint","map_key","catalog","listing","i","key","query","force_fetch","processors","q","result","fn","apiGet","eager","updateLinkDelays","link","item","updateSegmentWithObjectId","list","_b","firstNodeId","firstNode","updateConditionWithEventId","previousNode","createNewStep","inherits","steps","segmentData","s","updateExistingStep","_c","_d","_e","processInherits","sequenceFromRoot","connectToPreviousActionNode","minutes","hourOverflow","hours","dayOverflow","days","RelVertexFunc","GraphEdgeType","AdjesantListType","AdjesantListType2","_item_info","_sequenceFromRoot","GraphData","graph_size","startingNode","QueueData","id","visited","sequence","next","_f","previousNodeId","tmp_uuidv4","n","idx","arr","nq","startingEntry","listId","segmentId","max_size","items","index","count","ZDist","LineType","PersistantState","onDispose","targets","watchTargets","val","keys","temp_var_history_len","editor","k","d","v","activeJourney","canvas","changes","from","to","abandoned","nav","viewport","pw_leftJut","raw_pws","viewModel","menu","journeyVisualData","ownedObjects","journeyOperationalData","account","path","journeysMeta","startMenu","toast","now","elapsed","GridType","set","prop","exitToStartMenu","saveCurrentJourney","resetActiveJourney","structJourneyToJSON","spacing","op_data","clonable","operational","acc","step","gr_data","err","handleSaveTemplate","journeyId","title","description","jsonFilters","setLocalStorageItem","obj","encode","encodeOptions","encodeTarget","jsonFilter","jsonWhiteSpace","replacerFunction","dev","SaveSVG","_createVNode","CircularArrowSVG","SettingsSVG","NodesSVG","SaveTemplateSVG","GlobeAltSVG","PointerSVG","NavigationSVG","LineToolSVG","LineTypeSVG","type","Dotted","Dashed","LightThemeSVG","DarkThemeSVG","OptionsSVG","CopySVG","TextSVG","DoubleArrowsRightSVG","DoubleArrowsLeftSVG","ArrowLeftSVG","ArrowRightSVG","SmallArrowDownSVG","SmallArrowUpSVG","SingleArrowLeftSVG","SingleArrowRightSVG","SingleArrowUpSVG","SingleArrowDownSVG","CrossSVG","ThinCrossSVG","TrashSVG","ConnectToSVG","ConnectFromSVG","InfoSVG","WarningSVG","ErrorSVG","CheckSVG","CalendarSVG","ClockSimpleSVG","TrashLegacySVG","GridSolidSVG","GridNoneSVG","GridPatternSVG","GridDotSVG","AlignCenterSVG","DistributeSpaceSVG","SentIssueOutlineSVG","UserOutlineSVG","ListViewSVG","GridViewSVG","FontStyleBoldSVG","FontStyleItalicSVG","TextAlignLeftSVG","color","transition","TextAlignCenterSVG","TextAlignRightSVG"],"mappings":"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"}