@nyaruka/temba-components 0.138.0 → 0.138.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.devcontainer/Dockerfile +0 -9
- package/.devcontainer/devcontainer.json +8 -3
- package/.github/workflows/build.yml +6 -1
- package/.github/workflows/cla.yml +1 -1
- package/.github/workflows/publish.yml +6 -1
- package/CHANGELOG.md +39 -0
- package/dist/locales/es.js +5 -5
- package/dist/locales/es.js.map +1 -1
- package/dist/locales/fr.js +5 -5
- package/dist/locales/fr.js.map +1 -1
- package/dist/locales/locale-codes.js +11 -2
- package/dist/locales/locale-codes.js.map +1 -1
- package/dist/locales/pt.js +5 -5
- package/dist/locales/pt.js.map +1 -1
- package/dist/temba-components.js +131 -98
- package/dist/temba-components.js.map +1 -1
- package/out-tsc/src/display/FloatingTab.js +16 -8
- package/out-tsc/src/display/FloatingTab.js.map +1 -1
- package/out-tsc/src/flow/CanvasMenu.js +33 -15
- package/out-tsc/src/flow/CanvasMenu.js.map +1 -1
- package/out-tsc/src/flow/CanvasNode.js +4 -0
- package/out-tsc/src/flow/CanvasNode.js.map +1 -1
- package/out-tsc/src/flow/Editor.js +279 -55
- package/out-tsc/src/flow/Editor.js.map +1 -1
- package/out-tsc/src/flow/NodeTypeSelector.js +13 -11
- package/out-tsc/src/flow/NodeTypeSelector.js.map +1 -1
- package/out-tsc/src/flow/Plumber.js +1 -1
- package/out-tsc/src/flow/Plumber.js.map +1 -1
- package/out-tsc/src/flow/actions/set_contact_field.js +5 -1
- package/out-tsc/src/flow/actions/set_contact_field.js.map +1 -1
- package/out-tsc/src/list/RunList.js +2 -1
- package/out-tsc/src/list/RunList.js.map +1 -1
- package/out-tsc/src/list/TicketList.js +2 -1
- package/out-tsc/src/list/TicketList.js.map +1 -1
- package/out-tsc/src/live/ContactChat.js +18 -1
- package/out-tsc/src/live/ContactChat.js.map +1 -1
- package/out-tsc/src/locales/es.js +5 -5
- package/out-tsc/src/locales/es.js.map +1 -1
- package/out-tsc/src/locales/fr.js +5 -5
- package/out-tsc/src/locales/fr.js.map +1 -1
- package/out-tsc/src/locales/locale-codes.js +11 -2
- package/out-tsc/src/locales/locale-codes.js.map +1 -1
- package/out-tsc/src/locales/pt.js +5 -5
- package/out-tsc/src/locales/pt.js.map +1 -1
- package/out-tsc/src/store/AppState.js +5 -0
- package/out-tsc/src/store/AppState.js.map +1 -1
- package/out-tsc/test/temba-contact-fields.test.js +3 -3
- package/out-tsc/test/temba-contact-fields.test.js.map +1 -1
- package/out-tsc/test/temba-flow-editor-node.test.js +2 -1
- package/out-tsc/test/temba-flow-editor-node.test.js.map +1 -1
- package/out-tsc/test/temba-select.test.js +1 -0
- package/out-tsc/test/temba-select.test.js.map +1 -1
- package/package.json +1 -1
- package/screenshots/truth/floating-tab/gray.png +0 -0
- package/screenshots/truth/floating-tab/green.png +0 -0
- package/screenshots/truth/floating-tab/purple.png +0 -0
- package/screenshots/truth/node-type-selector/action-mode.png +0 -0
- package/screenshots/truth/node-type-selector/split-mode.png +0 -0
- package/src/display/FloatingTab.ts +18 -8
- package/src/flow/CanvasMenu.ts +38 -16
- package/src/flow/CanvasNode.ts +8 -0
- package/src/flow/Editor.ts +343 -58
- package/src/flow/NodeTypeSelector.ts +13 -11
- package/src/flow/Plumber.ts +1 -1
- package/src/flow/actions/set_contact_field.ts +5 -1
- package/src/list/RunList.ts +2 -1
- package/src/list/TicketList.ts +2 -1
- package/src/live/ContactChat.ts +19 -1
- package/src/locales/es.ts +18 -13
- package/src/locales/fr.ts +18 -13
- package/src/locales/locale-codes.ts +11 -2
- package/src/locales/pt.ts +18 -13
- package/src/store/AppState.ts +5 -0
- package/test/temba-contact-fields.test.ts +8 -3
- package/test/temba-flow-editor-node.test.ts +2 -1
- package/test/temba-select.test.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppState.js","sourceRoot":"","sources":["../../../src/store/AppState.ts"],"names":[],"mappings":"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","sourcesContent":["import { createStore, StoreApi } from 'zustand/vanilla';\nimport { fetchResults, generateUUID } from '../utils';\nimport {\n Action,\n Exit,\n FlowDefinition,\n FlowPosition,\n Node,\n NodeUI,\n Router,\n StickyNote\n} from './flow-definition';\nimport { immer } from 'zustand/middleware/immer';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { property } from 'lit/decorators.js';\nimport { produce } from 'immer';\n\nexport const FLOW_SPEC_VERSION = '14.3';\nconst CANVAS_PADDING = 800;\n\n/**\n * Sorts nodes by their position - first by y (top), then by x (left)\n */\nfunction sortNodesByPosition(\n nodes: Node[],\n nodePositions: Record<string, NodeUI>\n): void {\n nodes.sort((a, b) => {\n const posA = nodePositions[a.uuid]?.position;\n const posB = nodePositions[b.uuid]?.position;\n\n // if either position is missing, maintain current order\n if (!posA || !posB) {\n return 0;\n }\n\n // sort by y (top) first\n if (posA.top !== posB.top) {\n return posA.top - posB.top;\n }\n\n // if y is same, sort by x (left)\n return posA.left - posB.left;\n });\n}\n\nexport interface InfoResult {\n key: string;\n name: string;\n categories: string[];\n node_uuids: string[];\n}\n\nexport interface ObjectRef {\n uuid: string;\n name: string;\n}\n\nexport interface TypedObjectRef extends ObjectRef {\n type: string;\n}\n\nexport interface Language {\n code: string;\n name: string;\n}\n\nexport interface FlowInfo {\n results: InfoResult[];\n dependencies: TypedObjectRef[];\n counts: { nodes: number; languages: number };\n locals: string[];\n}\n\nexport interface FlowContents {\n definition: FlowDefinition;\n info: FlowInfo;\n}\n\nexport interface Workspace {\n anon: boolean;\n country: string;\n date_style: string;\n languages: string[];\n name: string;\n primary_language: string;\n timezone: string;\n uuid: string;\n}\n\nexport interface CanvasPositions {\n [uuid: string]: FlowPosition;\n}\n\nexport interface Activity {\n segments: { [exitToDestinationKey: string]: number };\n nodes: { [nodeUuid: string]: number };\n}\n\nexport interface AppState {\n flowDefinition: FlowDefinition;\n flowInfo: FlowInfo;\n\n languageCode: string;\n languageNames: { [code: string]: Language };\n workspace: Workspace;\n isTranslating: boolean;\n viewingRevision: boolean;\n\n dirtyDate: Date | null;\n\n canvasSize: { width: number; height: number };\n activity: Activity | null;\n simulatorActivity: Activity | null;\n activityEndpoint: string | null;\n simulatorActive: boolean;\n\n getCurrentActivity: () => Activity | null;\n fetchRevision: (endpoint: string, id?: string) => void;\n fetchWorkspace: (endpoint: string) => Promise<void>;\n fetchAllLanguages: (endpoint: string) => Promise<void>;\n fetchActivity: (endpoint: string) => Promise<void>;\n setActivityEndpoint: (endpoint: string) => void;\n updateActivity: (activity: Activity) => void;\n updateSimulatorActivity: (activity: Activity) => void;\n setSimulatorActive: (active: boolean) => void;\n\n getFlowResults: () => InfoResult[];\n getResultByKey(id: any): InfoResult;\n\n setFlowContents: (flow: FlowContents) => void;\n setFlowInfo: (info: FlowInfo) => void;\n setRevision: (revision: number) => void;\n setLanguageCode: (languageCode: string) => void;\n setDirtyDate: (date: Date) => void;\n expandCanvas: (width: number, height: number) => void;\n\n updateNode(\n uuid: string,\n node: { actions: Action[]; uuid: string; exits: Exit[]; router?: Router }\n ): unknown;\n updateNodeUIConfig(uuid: string, config: Record<string, any>): unknown;\n updateConnection(\n nodeUuid: string,\n exitUuid: string,\n destinationNodeUuid: string\n ): unknown;\n updateCanvasPositions: (positions: CanvasPositions) => void;\n removeNodes: (uuids: string[]) => void;\n removeStickyNotes: (uuids: string[]) => void;\n updateStickyNote(uuid: string, sticky: StickyNote): void;\n createStickyNote(position: FlowPosition): string;\n createNode(nodeType: string, position: FlowPosition): string;\n addNode(node: Node, nodeUI: NodeUI): void;\n updateLocalization(\n languageCode: string,\n actionUuid: string,\n localizationData: Record<string, any>\n ): void;\n setTranslationFilters: (filters: { categories: boolean }) => void;\n markAutoTranslated: (\n languageCode: string,\n uuid: string,\n attributes: string[]\n ) => void;\n}\n\nexport const zustand = createStore<AppState>()(\n subscribeWithSelector(\n immer((set, get) => ({\n languageNames: {},\n canvasSize: { width: 0, height: 0 },\n languageCode: '',\n workspace: null,\n flowDefinition: null,\n flowInfo: null,\n isTranslating: false,\n viewingRevision: false,\n dirtyDate: null,\n activity: null,\n simulatorActivity: null,\n activityEndpoint: null,\n simulatorActive: false,\n\n setDirtyDate: (date: Date) => {\n set((state: AppState) => {\n state.dirtyDate = date;\n });\n },\n\n fetchRevision: async (endpoint: string, id: string = null) => {\n const viewingRevision = !!id && id !== 'latest';\n if (!id) {\n id = 'latest';\n }\n const response = await fetch(\n `${endpoint}/${id}/?version=${FLOW_SPEC_VERSION}`\n );\n\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n const data = (await response.json()) as FlowContents;\n set({\n flowInfo: data.info,\n flowDefinition: data.definition,\n viewingRevision\n });\n },\n\n fetchWorkspace: async (endpoint) => {\n const response = await fetch(endpoint);\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n const data = await response.json();\n set({ workspace: data });\n },\n\n fetchAllLanguages: async (endpoint) => {\n const results = await fetchResults(endpoint);\n\n // convert array to map for easier lookup\n const allLanguages = results.reduce(function (\n languages: any,\n result: any\n ) {\n languages[result.value] = result.name;\n return languages;\n },\n {});\n\n set({ languageNames: allLanguages });\n },\n\n setActivityEndpoint: (endpoint: string) => {\n set({ activityEndpoint: endpoint });\n },\n\n fetchActivity: async (endpoint: string) => {\n try {\n const response = await fetch(endpoint);\n if (!response.ok) {\n return;\n }\n const data = await response.json();\n set({ activity: data });\n } catch (error) {\n console.error('Failed to fetch activity:', error);\n }\n },\n\n updateActivity: (activity: Activity) => {\n set({ activity });\n },\n\n updateSimulatorActivity: (activity: Activity) => {\n set({ simulatorActivity: activity });\n },\n\n setSimulatorActive: (active: boolean) => {\n set({ simulatorActive: active });\n },\n\n getCurrentActivity: () => {\n const state = get();\n return state.simulatorActive ? state.simulatorActivity : state.activity;\n },\n\n getFlowResults: () => {\n const state = get();\n return state.flowInfo.results;\n },\n\n getResultByKey: (id: any) => {\n const state = get();\n const results = state.flowInfo.results;\n return results.find((result) => result.key === id);\n },\n\n getLanguage: () => {\n const state = get();\n const languageCode = state.languageCode;\n const languageNames = state.languageNames;\n return { name: languageNames[languageCode], code: languageCode };\n },\n\n // todo: eventually we should be doing the fetching\n setFlowContents: (flow: FlowContents) => {\n set((state: AppState) => {\n const flowLang = flow.definition.language;\n // Clone to ensure mutable for sorting\n state.flowDefinition = {\n ...flow.definition,\n nodes: [...(flow.definition.nodes || [])]\n };\n state.flowInfo = flow.info;\n // Reset to the flow's default language when loading a new flow\n state.languageCode = flowLang;\n state.isTranslating = false;\n\n // Sort nodes by position when loading flow\n if (state.flowDefinition?.nodes && state.flowDefinition?._ui?.nodes) {\n sortNodesByPosition(\n state.flowDefinition.nodes,\n state.flowDefinition._ui.nodes\n );\n }\n });\n },\n\n setFlowInfo: (info: FlowInfo) => {\n set((state: AppState) => {\n state.flowInfo = info;\n });\n },\n\n setRevision: (revision: number) => {\n set((state: AppState) => {\n state.flowDefinition.revision = revision;\n });\n },\n\n setLanguageCode: (languageCode: string) => {\n set((state: AppState) => {\n state.languageCode = languageCode;\n state.isTranslating = state.flowDefinition.language !== languageCode;\n });\n },\n\n expandCanvas: (width: number, height: number) => {\n set((state: AppState) => {\n const minWidth = Math.max(\n state.canvasSize.width,\n width + CANVAS_PADDING\n );\n const minHeight = Math.max(\n state.canvasSize.height,\n height + CANVAS_PADDING\n );\n\n state.canvasSize.width = minWidth;\n state.canvasSize.height = minHeight;\n });\n },\n\n updateCanvasPositions: (positions: CanvasPositions) => {\n set((state: AppState) => {\n for (const uuid in positions) {\n // todo: add nodes that are created and then moved, for now ignore\n if (state.flowDefinition._ui.nodes[uuid]) {\n state.flowDefinition._ui.nodes[uuid].position = positions[uuid];\n }\n\n // otherwise, it might be a sticky\n else if (state.flowDefinition._ui.stickies[uuid]) {\n state.flowDefinition._ui.stickies[uuid].position =\n positions[uuid];\n }\n }\n\n // Sort nodes by position since positions may have changed\n sortNodesByPosition(\n state.flowDefinition.nodes,\n state.flowDefinition._ui.nodes\n );\n\n state.dirtyDate = new Date();\n });\n },\n\n removeNodes: (uuids: string[]) => {\n set((state: AppState) => {\n for (const uuid of uuids) {\n delete state.flowDefinition._ui.nodes[uuid];\n }\n\n state.flowDefinition = produce(state.flowDefinition, (draft) => {\n // For each node being removed, check if we should reroute connections\n uuids.forEach((removedUuid) => {\n const removedNode = draft.nodes.find(\n (n) => n.uuid === removedUuid\n );\n\n if (!removedNode || !removedNode.exits.length) return;\n\n // Get all destinations (filter out null/undefined)\n const destinations = removedNode.exits\n .map((exit) => exit.destination_uuid)\n .filter((dest) => dest);\n\n // Only proceed if all exits have destinations and they all point to the same place\n if (\n destinations.length === removedNode.exits.length &&\n destinations.every((dest) => dest === destinations[0])\n ) {\n const targetDestination = destinations[0];\n // Don't reroute if the target is also being removed\n if (uuids.includes(targetDestination)) return;\n\n // Find all nodes with exits pointing to the node being removed\n draft.nodes.forEach((node) => {\n node.exits.forEach((exit) => {\n if (exit.destination_uuid === removedUuid) {\n // Reroute to the same destination the removed node was going to\n exit.destination_uuid = targetDestination;\n }\n });\n });\n }\n });\n\n // Remove the nodes\n draft.nodes = draft.nodes.filter(\n (node) => !uuids.includes(node.uuid)\n );\n\n // Clear any remaining connections to removed nodes that weren't rerouted\n draft.nodes.forEach((node) => {\n node.exits.forEach((exit) => {\n if (uuids.includes(exit.destination_uuid)) {\n exit.destination_uuid = null;\n }\n });\n });\n\n // Sort nodes by position\n sortNodesByPosition(draft.nodes, draft._ui.nodes);\n });\n\n state.dirtyDate = new Date();\n });\n },\n\n removeStickyNotes: (uuids: string[]) => {\n set((state: AppState) => {\n if (state.flowDefinition._ui?.stickies) {\n for (const uuid of uuids) {\n delete state.flowDefinition._ui.stickies[uuid];\n }\n }\n state.dirtyDate = new Date();\n });\n },\n\n updateNode: (uuid: string, newNode: Node) => {\n set((state: AppState) => {\n const node = state.flowDefinition?.nodes.find((n) => n.uuid === uuid);\n if (node) {\n node.actions = newNode.actions;\n node.uuid = newNode.uuid;\n node.exits = newNode.exits;\n node.router = newNode.router;\n }\n state.dirtyDate = new Date();\n });\n },\n\n updateNodeUIConfig: (uuid: string, config: Record<string, any>) => {\n set((state: AppState) => {\n if (state.flowDefinition._ui.nodes[uuid]) {\n // Handle type separately if provided\n if (config.type !== undefined) {\n state.flowDefinition._ui.nodes[uuid].type = config.type;\n }\n\n // Update config (excluding type)\n if (!state.flowDefinition._ui.nodes[uuid].config) {\n state.flowDefinition._ui.nodes[uuid].config = {};\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { type, ...configWithoutType } = config;\n Object.assign(\n state.flowDefinition._ui.nodes[uuid].config,\n configWithoutType\n );\n }\n state.dirtyDate = new Date();\n });\n },\n\n updateConnection: (\n nodeUuid: string,\n exitUuid: string,\n destinationNodeUuid: string\n ) => {\n set((state: AppState) => {\n // Find the exit with this UUID\n const node = state.flowDefinition.nodes.find(\n (node) => node.uuid === nodeUuid\n );\n\n const exit = node?.exits.find((e) => e.uuid === exitUuid);\n if (exit) {\n // Update the destination\n exit.destination_uuid = destinationNodeUuid;\n state.dirtyDate = new Date();\n }\n });\n },\n\n updateStickyNote: (uuid: string, sticky: StickyNote) => {\n set((state: AppState) => {\n if (!state.flowDefinition._ui.stickies) {\n state.flowDefinition._ui.stickies = {};\n }\n state.flowDefinition._ui.stickies[uuid] = sticky;\n state.dirtyDate = new Date();\n });\n },\n\n createStickyNote: (position: FlowPosition): string => {\n const uuid = generateUUID();\n set((state: AppState) => {\n if (!state.flowDefinition._ui.stickies) {\n state.flowDefinition._ui.stickies = {};\n }\n\n const newSticky: StickyNote = {\n position,\n title: '',\n body: '',\n color: 'yellow'\n };\n\n state.flowDefinition._ui.stickies[uuid] = newSticky;\n state.dirtyDate = new Date();\n });\n return uuid;\n },\n\n createNode: (nodeType: string, position: FlowPosition): string => {\n const uuid = generateUUID();\n const exitUuid = generateUUID();\n\n set((state: AppState) => {\n // Create a basic node with a single exit\n const newNode: Node = {\n uuid,\n actions: [],\n exits: [\n {\n uuid: exitUuid,\n destination_uuid: null\n }\n ]\n };\n\n // Add the node to the flow definition\n state.flowDefinition.nodes.push(newNode);\n\n // Set up UI for the node\n if (!state.flowDefinition._ui.nodes) {\n state.flowDefinition._ui.nodes = {};\n }\n\n state.flowDefinition._ui.nodes[uuid] = {\n position,\n type: nodeType as any,\n config: {}\n };\n\n // Sort nodes by position\n sortNodesByPosition(\n state.flowDefinition.nodes,\n state.flowDefinition._ui.nodes\n );\n\n state.dirtyDate = new Date();\n });\n\n return uuid;\n },\n\n addNode: (node: Node, nodeUI: NodeUI) => {\n set((state: AppState) => {\n // Add the node to the flow definition\n state.flowDefinition.nodes.push(node);\n\n // Set up UI for the node\n if (!state.flowDefinition._ui.nodes) {\n state.flowDefinition._ui.nodes = {};\n }\n\n state.flowDefinition._ui.nodes[node.uuid] = nodeUI;\n\n // Sort nodes by position\n sortNodesByPosition(\n state.flowDefinition.nodes,\n state.flowDefinition._ui.nodes\n );\n\n state.dirtyDate = new Date();\n });\n },\n\n updateLocalization: (\n languageCode: string,\n actionUuid: string,\n localizationData: Record<string, any>\n ) => {\n set((state: AppState) => {\n // Initialize localization structure if it doesn't exist\n if (!state.flowDefinition.localization) {\n state.flowDefinition.localization = {};\n }\n\n if (!state.flowDefinition.localization[languageCode]) {\n state.flowDefinition.localization[languageCode] = {};\n }\n\n // Update or remove the localization for this action\n if (Object.keys(localizationData).length > 0) {\n state.flowDefinition.localization[languageCode][actionUuid] =\n localizationData;\n } else {\n // If no localized values, remove the entry\n delete state.flowDefinition.localization[languageCode][actionUuid];\n }\n\n // Clean up empty language sections\n if (\n Object.keys(state.flowDefinition.localization[languageCode])\n .length === 0\n ) {\n delete state.flowDefinition.localization[languageCode];\n }\n\n // Clean up empty localization object\n if (Object.keys(state.flowDefinition.localization).length === 0) {\n delete state.flowDefinition.localization;\n }\n\n state.dirtyDate = new Date();\n });\n },\n\n setTranslationFilters: (filters: { categories: boolean }) => {\n set((state: AppState) => {\n if (!state.flowDefinition?._ui) {\n return;\n }\n\n const currentFilters = state.flowDefinition._ui\n .translation_filters || {\n categories: false\n };\n\n state.flowDefinition._ui.translation_filters = {\n ...currentFilters,\n categories: !!filters.categories\n };\n\n state.dirtyDate = new Date();\n });\n },\n\n markAutoTranslated: (\n languageCode: string,\n uuid: string,\n attributes: string[]\n ) => {\n set((state: AppState) => {\n if (!state.flowDefinition?._ui) {\n return;\n }\n\n if (!state.flowDefinition._ui.auto_translations) {\n state.flowDefinition._ui.auto_translations = {};\n }\n\n if (!state.flowDefinition._ui.auto_translations[languageCode]) {\n state.flowDefinition._ui.auto_translations[languageCode] = {};\n }\n\n const existing =\n state.flowDefinition._ui.auto_translations[languageCode][uuid] ||\n [];\n\n const merged = Array.from(\n new Set([...existing, ...(attributes || [])])\n );\n\n state.flowDefinition._ui.auto_translations[languageCode][uuid] =\n merged;\n state.dirtyDate = new Date();\n });\n }\n }))\n )\n);\n\ntype SelectorAwareStoreApi<S extends object> = StoreApi<S> & {\n subscribe: <U>(\n selector: (state: S) => U,\n listener: (value: U, previous: U) => void\n ) => () => void;\n};\n\n/**\n * Custom Lit property decorator that binds a property to a Zustand store subscription.\n *\n * @param store - The Zustand store to subscribe to.\n * @param selector - A function selecting the slice of state to bind to the property.\n */\nexport function fromStore<S extends object, V = unknown>(\n store: SelectorAwareStoreApi<S>,\n selector: (state: S) => V\n): PropertyDecorator {\n return (proto: any, name: string | symbol) => {\n property()(proto, name as string);\n\n const connectedKey = 'connectedCallback';\n const disconnectedKey = 'disconnectedCallback';\n\n const userConnected = proto[connectedKey];\n const userDisconnected = proto[disconnectedKey];\n\n proto[connectedKey] = function () {\n this._zustandUnsubscribe ??= {};\n this[name] = selector(store.getState());\n\n this._zustandUnsubscribe[name] = store.subscribe(selector, (val: V) => {\n this[name] = val;\n });\n\n if (userConnected) userConnected.call(this);\n };\n\n proto[disconnectedKey] = function () {\n this._zustandUnsubscribe?.[name]?.();\n if (userDisconnected) userDisconnected.call(this);\n };\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AppState.js","sourceRoot":"","sources":["../../../src/store/AppState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAY,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAWtD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B;;GAEG;AACH,SAAS,mBAAmB,CAC1B,KAAa,EACb,aAAqC;IAErC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;;QAClB,MAAM,IAAI,GAAG,MAAA,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,0CAAE,QAAQ,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAA,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,0CAAE,QAAQ,CAAC;QAE7C,wDAAwD;QACxD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QAC7B,CAAC;QAED,iCAAiC;QACjC,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AA2HD,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,EAAY,CAC5C,qBAAqB,CACnB,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACnB,aAAa,EAAE,EAAE;IACjB,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;IACnC,YAAY,EAAE,EAAE;IAChB,SAAS,EAAE,IAAI;IACf,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,KAAK;IACpB,eAAe,EAAE,KAAK;IACtB,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,IAAI;IACd,iBAAiB,EAAE,IAAI;IACvB,gBAAgB,EAAE,IAAI;IACtB,eAAe,EAAE,KAAK;IAEtB,YAAY,EAAE,CAAC,IAAU,EAAE,EAAE;QAC3B,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;YACtB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,aAAa,EAAE,KAAK,EAAE,QAAgB,EAAE,KAAa,IAAI,EAAE,EAAE;QAC3D,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,QAAQ,CAAC;QAChD,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,EAAE,GAAG,QAAQ,CAAC;QAChB,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,QAAQ,IAAI,EAAE,aAAa,iBAAiB,EAAE,CAClD,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;QACrD,GAAG,CAAC;YACF,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,cAAc,EAAE,IAAI,CAAC,UAAU;YAC/B,eAAe;SAChB,CAAC,CAAC;IACL,CAAC;IAED,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE7C,yCAAyC;QACzC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,UAClC,SAAc,EACd,MAAW;YAEX,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;YACtC,OAAO,SAAS,CAAC;QACnB,CAAC,EACD,EAAE,CAAC,CAAC;QAEJ,GAAG,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,mBAAmB,EAAE,CAAC,QAAgB,EAAE,EAAE;QACxC,GAAG,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,aAAa,EAAE,KAAK,EAAE,QAAgB,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,cAAc,EAAE,CAAC,QAAkB,EAAE,EAAE;QACrC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,uBAAuB,EAAE,CAAC,QAAkB,EAAE,EAAE;QAC9C,GAAG,CAAC,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,kBAAkB,EAAE,CAAC,MAAe,EAAE,EAAE;QACtC,GAAG,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,kBAAkB,EAAE,GAAG,EAAE;QACvB,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC1E,CAAC;IAED,cAAc,EAAE,GAAG,EAAE;QACnB,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,cAAc,EAAE,CAAC,EAAO,EAAE,EAAE;QAC1B,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,WAAW,EAAE,GAAG,EAAE;QAChB,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;QACpB,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QACxC,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IACnE,CAAC;IAED,mDAAmD;IACnD,eAAe,EAAE,CAAC,IAAkB,EAAE,EAAE;QACtC,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC1C,sCAAsC;YACtC,KAAK,CAAC,cAAc,GAAG;gBACrB,GAAG,IAAI,CAAC,UAAU;gBAClB,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;aAC1C,CAAC;YACF,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YAC3B,+DAA+D;YAC/D,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC;YAC9B,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;YAE5B,2CAA2C;YAC3C,IAAI,CAAA,MAAA,KAAK,CAAC,cAAc,0CAAE,KAAK,MAAI,MAAA,MAAA,KAAK,CAAC,cAAc,0CAAE,GAAG,0CAAE,KAAK,CAAA,EAAE,CAAC;gBACpE,mBAAmB,CACjB,KAAK,CAAC,cAAc,CAAC,KAAK,EAC1B,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAC/B,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW,EAAE,CAAC,IAAc,EAAE,EAAE;QAC9B,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;YACtB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW,EAAE,CAAC,QAAgB,EAAE,EAAE;QAChC,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;YACtB,KAAK,CAAC,cAAc,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,eAAe,EAAE,CAAC,YAAoB,EAAE,EAAE;QACxC,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;YACtB,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;YAClC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,KAAK,YAAY,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY,EAAE,CAAC,KAAa,EAAE,MAAc,EAAE,EAAE;QAC9C,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,KAAK,CAAC,UAAU,CAAC,KAAK,EACtB,KAAK,GAAG,cAAc,CACvB,CAAC;YACF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,KAAK,CAAC,UAAU,CAAC,MAAM,EACvB,MAAM,GAAG,cAAc,CACxB,CAAC;YAEF,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC;YAClC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB,EAAE,CAAC,SAA0B,EAAE,EAAE;QACpD,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;YACtB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC7B,kEAAkE;gBAClE,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;gBAClE,CAAC;gBAED,kCAAkC;qBAC7B,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjD,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ;wBAC9C,SAAS,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YAED,0DAA0D;YAC1D,mBAAmB,CACjB,KAAK,CAAC,cAAc,CAAC,KAAK,EAC1B,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAC/B,CAAC;YAEF,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW,EAAE,CAAC,KAAe,EAAE,EAAE;QAC/B,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;YACtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,CAAC;YAED,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC7D,sEAAsE;gBACtE,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;oBAC5B,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAC9B,CAAC;oBAEF,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM;wBAAE,OAAO;oBAEtD,mDAAmD;oBACnD,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK;yBACnC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC;yBACpC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;oBAE1B,mFAAmF;oBACnF,IACE,YAAY,CAAC,MAAM,KAAK,WAAW,CAAC,KAAK,CAAC,MAAM;wBAChD,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,EACtD,CAAC;wBACD,MAAM,iBAAiB,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;wBAC1C,oDAAoD;wBACpD,IAAI,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;4BAAE,OAAO;wBAE9C,+DAA+D;wBAC/D,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;4BAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gCAC1B,IAAI,IAAI,CAAC,gBAAgB,KAAK,WAAW,EAAE,CAAC;oCAC1C,gEAAgE;oCAChE,IAAI,CAAC,gBAAgB,GAAG,iBAAiB,CAAC;gCAC5C,CAAC;4BACH,CAAC,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,mBAAmB;gBACnB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAC9B,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CACrC,CAAC;gBAEF,yEAAyE;gBACzE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;wBAC1B,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;4BAC1C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;wBAC/B,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,yBAAyB;gBACzB,mBAAmB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,EAAE,CAAC,KAAe,EAAE,EAAE;QACrC,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;;YACtB,IAAI,MAAA,KAAK,CAAC,cAAc,CAAC,GAAG,0CAAE,QAAQ,EAAE,CAAC;gBACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,OAAO,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YACD,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,UAAU,EAAE,CAAC,IAAY,EAAE,OAAa,EAAE,EAAE;QAC1C,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;;YACtB,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,cAAc,0CAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACtE,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;gBAC/B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;gBACzB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC3B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC/B,CAAC;YACD,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,EAAE,CAAC,IAAY,EAAE,MAA2B,EAAE,EAAE;QAChE,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;YACtB,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,qCAAqC;gBACrC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC9B,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;gBAC1D,CAAC;gBAED,iCAAiC;gBACjC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;oBACjD,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;gBACnD,CAAC;gBACD,6DAA6D;gBAC7D,MAAM,EAAE,IAAI,EAAE,GAAG,iBAAiB,EAAE,GAAG,MAAM,CAAC;gBAC9C,MAAM,CAAC,MAAM,CACX,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAC3C,iBAAiB,CAClB,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,EAAE,CAChB,QAAgB,EAChB,QAAgB,EAChB,mBAA2B,EAC3B,EAAE;QACF;;;;aAIK;QACL,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;YACtB,+BAA+B;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAC1C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CACjC,CAAC;YAEF,MAAM,IAAI,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YAC1D,IAAI,IAAI,EAAE,CAAC;gBACT,yBAAyB;gBACzB,IAAI,CAAC,gBAAgB,GAAG,mBAAmB,CAAC;gBAC5C,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,EAAE,CAAC,IAAY,EAAE,MAAkB,EAAE,EAAE;QACrD,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACvC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;YACzC,CAAC;YACD,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;YACjD,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,EAAE,CAAC,QAAsB,EAAU,EAAE;QACnD,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;QAC5B,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACvC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;YACzC,CAAC;YAED,MAAM,SAAS,GAAe;gBAC5B,QAAQ;gBACR,KAAK,EAAE,EAAE;gBACT,IAAI,EAAE,EAAE;gBACR,KAAK,EAAE,QAAQ;aAChB,CAAC;YAEF,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;YACpD,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,EAAE,CAAC,QAAgB,EAAE,QAAsB,EAAU,EAAE;QAC/D,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAEhC,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;YACtB,yCAAyC;YACzC,MAAM,OAAO,GAAS;gBACpB,IAAI;gBACJ,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,QAAQ;wBACd,gBAAgB,EAAE,IAAI;qBACvB;iBACF;aACF,CAAC;YAEF,sCAAsC;YACtC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEzC,yBAAyB;YACzB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACpC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;YACtC,CAAC;YAED,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;gBACrC,QAAQ;gBACR,IAAI,EAAE,QAAe;gBACrB,MAAM,EAAE,EAAE;aACX,CAAC;YAEF,yBAAyB;YACzB,mBAAmB,CACjB,KAAK,CAAC,cAAc,CAAC,KAAK,EAC1B,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAC/B,CAAC;YAEF,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,IAAU,EAAE,MAAc,EAAE,EAAE;QACtC,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;YACtB,sCAAsC;YACtC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEtC,yBAAyB;YACzB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACpC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;YACtC,CAAC;YAED,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;YAEnD,yBAAyB;YACzB,mBAAmB,CACjB,KAAK,CAAC,cAAc,CAAC,KAAK,EAC1B,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAC/B,CAAC;YAEF,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,EAAE,CAClB,YAAoB,EACpB,UAAkB,EAClB,gBAAqC,EACrC,EAAE;QACF,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;YACtB,wDAAwD;YACxD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;gBACvC,KAAK,CAAC,cAAc,CAAC,YAAY,GAAG,EAAE,CAAC;YACzC,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrD,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;YACvD,CAAC;YAED,oDAAoD;YACpD,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC;oBACzD,gBAAgB,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,2CAA2C;gBAC3C,OAAO,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,CAAC;YACrE,CAAC;YAED,mCAAmC;YACnC,IACE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;iBACzD,MAAM,KAAK,CAAC,EACf,CAAC;gBACD,OAAO,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YACzD,CAAC;YAED,qCAAqC;YACrC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChE,OAAO,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC;YAC3C,CAAC;YAED,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB,EAAE,CAAC,OAAgC,EAAE,EAAE;QAC1D,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;;YACtB,IAAI,CAAC,CAAA,MAAA,KAAK,CAAC,cAAc,0CAAE,GAAG,CAAA,EAAE,CAAC;gBAC/B,OAAO;YACT,CAAC;YAED,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG;iBAC5C,mBAAmB,IAAI;gBACxB,UAAU,EAAE,KAAK;aAClB,CAAC;YAEF,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,mBAAmB,GAAG;gBAC7C,GAAG,cAAc;gBACjB,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU;aACjC,CAAC;YAEF,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,EAAE,CAClB,YAAoB,EACpB,IAAY,EACZ,UAAoB,EACpB,EAAE;QACF,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;;YACtB,IAAI,CAAC,CAAA,MAAA,KAAK,CAAC,cAAc,0CAAE,GAAG,CAAA,EAAE,CAAC;gBAC/B,OAAO;YACT,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;gBAChD,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAClD,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9D,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;YAChE,CAAC;YAED,MAAM,QAAQ,GACZ,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;gBAC9D,EAAE,CAAC;YAEL,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CACvB,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,CAC9C,CAAC;YAEF,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;gBAC5D,MAAM,CAAC;YACT,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC,CACJ,CACF,CAAC;AASF;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CACvB,KAA+B,EAC/B,QAAyB;IAEzB,OAAO,CAAC,KAAU,EAAE,IAAqB,EAAE,EAAE;QAC3C,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAc,CAAC,CAAC;QAElC,MAAM,YAAY,GAAG,mBAAmB,CAAC;QACzC,MAAM,eAAe,GAAG,sBAAsB,CAAC;QAE/C,MAAM,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,gBAAgB,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;QAEhD,KAAK,CAAC,YAAY,CAAC,GAAG;;YACpB,MAAA,IAAI,CAAC,mBAAmB,oCAAxB,IAAI,CAAC,mBAAmB,GAAK,EAAE,EAAC;YAChC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAExC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAM,EAAE,EAAE;gBACpE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;YACnB,CAAC,CAAC,CAAC;YAEH,IAAI,aAAa;gBAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEF,KAAK,CAAC,eAAe,CAAC,GAAG;;YACvB,MAAA,MAAA,IAAI,CAAC,mBAAmB,0CAAG,IAAI,CAAC,kDAAI,CAAC;YACrC,IAAI,gBAAgB;gBAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { createStore, StoreApi } from 'zustand/vanilla';\nimport { fetchResults, generateUUID } from '../utils';\nimport {\n Action,\n Exit,\n FlowDefinition,\n FlowPosition,\n Node,\n NodeUI,\n Router,\n StickyNote\n} from './flow-definition';\nimport { immer } from 'zustand/middleware/immer';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport { property } from 'lit/decorators.js';\nimport { produce } from 'immer';\n\nexport const FLOW_SPEC_VERSION = '14.3';\nconst CANVAS_PADDING = 800;\n\n/**\n * Sorts nodes by their position - first by y (top), then by x (left)\n */\nfunction sortNodesByPosition(\n nodes: Node[],\n nodePositions: Record<string, NodeUI>\n): void {\n nodes.sort((a, b) => {\n const posA = nodePositions[a.uuid]?.position;\n const posB = nodePositions[b.uuid]?.position;\n\n // if either position is missing, maintain current order\n if (!posA || !posB) {\n return 0;\n }\n\n // sort by y (top) first\n if (posA.top !== posB.top) {\n return posA.top - posB.top;\n }\n\n // if y is same, sort by x (left)\n return posA.left - posB.left;\n });\n}\n\nexport interface InfoResult {\n key: string;\n name: string;\n categories: string[];\n node_uuids: string[];\n}\n\nexport interface ObjectRef {\n uuid: string;\n name: string;\n}\n\nexport interface TypedObjectRef extends ObjectRef {\n type: string;\n}\n\nexport interface Language {\n code: string;\n name: string;\n}\n\nexport interface FlowInfo {\n results: InfoResult[];\n dependencies: TypedObjectRef[];\n counts: { nodes: number; languages: number };\n locals: string[];\n}\n\nexport interface FlowContents {\n definition: FlowDefinition;\n info: FlowInfo;\n}\n\nexport interface Workspace {\n anon: boolean;\n country: string;\n date_style: string;\n languages: string[];\n name: string;\n primary_language: string;\n timezone: string;\n uuid: string;\n}\n\nexport interface CanvasPositions {\n [uuid: string]: FlowPosition;\n}\n\nexport interface Activity {\n segments: { [exitToDestinationKey: string]: number };\n nodes: { [nodeUuid: string]: number };\n}\n\nexport interface AppState {\n flowDefinition: FlowDefinition;\n flowInfo: FlowInfo;\n\n languageCode: string;\n languageNames: { [code: string]: Language };\n workspace: Workspace;\n isTranslating: boolean;\n viewingRevision: boolean;\n\n dirtyDate: Date | null;\n\n canvasSize: { width: number; height: number };\n activity: Activity | null;\n simulatorActivity: Activity | null;\n activityEndpoint: string | null;\n simulatorActive: boolean;\n\n getCurrentActivity: () => Activity | null;\n fetchRevision: (endpoint: string, id?: string) => void;\n fetchWorkspace: (endpoint: string) => Promise<void>;\n fetchAllLanguages: (endpoint: string) => Promise<void>;\n fetchActivity: (endpoint: string) => Promise<void>;\n setActivityEndpoint: (endpoint: string) => void;\n updateActivity: (activity: Activity) => void;\n updateSimulatorActivity: (activity: Activity) => void;\n setSimulatorActive: (active: boolean) => void;\n\n getFlowResults: () => InfoResult[];\n getResultByKey(id: any): InfoResult;\n\n setFlowContents: (flow: FlowContents) => void;\n setFlowInfo: (info: FlowInfo) => void;\n setRevision: (revision: number) => void;\n setLanguageCode: (languageCode: string) => void;\n setDirtyDate: (date: Date) => void;\n expandCanvas: (width: number, height: number) => void;\n\n updateNode(\n uuid: string,\n node: { actions: Action[]; uuid: string; exits: Exit[]; router?: Router }\n ): unknown;\n updateNodeUIConfig(uuid: string, config: Record<string, any>): unknown;\n updateConnection(\n nodeUuid: string,\n exitUuid: string,\n destinationNodeUuid: string\n ): unknown;\n updateCanvasPositions: (positions: CanvasPositions) => void;\n removeNodes: (uuids: string[]) => void;\n removeStickyNotes: (uuids: string[]) => void;\n updateStickyNote(uuid: string, sticky: StickyNote): void;\n createStickyNote(position: FlowPosition): string;\n createNode(nodeType: string, position: FlowPosition): string;\n addNode(node: Node, nodeUI: NodeUI): void;\n updateLocalization(\n languageCode: string,\n actionUuid: string,\n localizationData: Record<string, any>\n ): void;\n setTranslationFilters: (filters: { categories: boolean }) => void;\n markAutoTranslated: (\n languageCode: string,\n uuid: string,\n attributes: string[]\n ) => void;\n}\n\nexport const zustand = createStore<AppState>()(\n subscribeWithSelector(\n immer((set, get) => ({\n languageNames: {},\n canvasSize: { width: 0, height: 0 },\n languageCode: '',\n workspace: null,\n flowDefinition: null,\n flowInfo: null,\n isTranslating: false,\n viewingRevision: false,\n dirtyDate: null,\n activity: null,\n simulatorActivity: null,\n activityEndpoint: null,\n simulatorActive: false,\n\n setDirtyDate: (date: Date) => {\n set((state: AppState) => {\n state.dirtyDate = date;\n });\n },\n\n fetchRevision: async (endpoint: string, id: string = null) => {\n const viewingRevision = !!id && id !== 'latest';\n if (!id) {\n id = 'latest';\n }\n const response = await fetch(\n `${endpoint}/${id}/?version=${FLOW_SPEC_VERSION}`\n );\n\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n const data = (await response.json()) as FlowContents;\n set({\n flowInfo: data.info,\n flowDefinition: data.definition,\n viewingRevision\n });\n },\n\n fetchWorkspace: async (endpoint) => {\n const response = await fetch(endpoint);\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n const data = await response.json();\n set({ workspace: data });\n },\n\n fetchAllLanguages: async (endpoint) => {\n const results = await fetchResults(endpoint);\n\n // convert array to map for easier lookup\n const allLanguages = results.reduce(function (\n languages: any,\n result: any\n ) {\n languages[result.value] = result.name;\n return languages;\n },\n {});\n\n set({ languageNames: allLanguages });\n },\n\n setActivityEndpoint: (endpoint: string) => {\n set({ activityEndpoint: endpoint });\n },\n\n fetchActivity: async (endpoint: string) => {\n try {\n const response = await fetch(endpoint);\n if (!response.ok) {\n return;\n }\n const data = await response.json();\n set({ activity: data });\n } catch (error) {\n console.error('Failed to fetch activity:', error);\n }\n },\n\n updateActivity: (activity: Activity) => {\n set({ activity });\n },\n\n updateSimulatorActivity: (activity: Activity) => {\n set({ simulatorActivity: activity });\n },\n\n setSimulatorActive: (active: boolean) => {\n set({ simulatorActive: active });\n },\n\n getCurrentActivity: () => {\n const state = get();\n return state.simulatorActive ? state.simulatorActivity : state.activity;\n },\n\n getFlowResults: () => {\n const state = get();\n return state.flowInfo.results;\n },\n\n getResultByKey: (id: any) => {\n const state = get();\n const results = state.flowInfo.results;\n return results.find((result) => result.key === id);\n },\n\n getLanguage: () => {\n const state = get();\n const languageCode = state.languageCode;\n const languageNames = state.languageNames;\n return { name: languageNames[languageCode], code: languageCode };\n },\n\n // todo: eventually we should be doing the fetching\n setFlowContents: (flow: FlowContents) => {\n set((state: AppState) => {\n const flowLang = flow.definition.language;\n // Clone to ensure mutable for sorting\n state.flowDefinition = {\n ...flow.definition,\n nodes: [...(flow.definition.nodes || [])]\n };\n state.flowInfo = flow.info;\n // Reset to the flow's default language when loading a new flow\n state.languageCode = flowLang;\n state.isTranslating = false;\n\n // Sort nodes by position when loading flow\n if (state.flowDefinition?.nodes && state.flowDefinition?._ui?.nodes) {\n sortNodesByPosition(\n state.flowDefinition.nodes,\n state.flowDefinition._ui.nodes\n );\n }\n });\n },\n\n setFlowInfo: (info: FlowInfo) => {\n set((state: AppState) => {\n state.flowInfo = info;\n });\n },\n\n setRevision: (revision: number) => {\n set((state: AppState) => {\n state.flowDefinition.revision = revision;\n });\n },\n\n setLanguageCode: (languageCode: string) => {\n set((state: AppState) => {\n state.languageCode = languageCode;\n state.isTranslating = state.flowDefinition.language !== languageCode;\n });\n },\n\n expandCanvas: (width: number, height: number) => {\n set((state: AppState) => {\n const minWidth = Math.max(\n state.canvasSize.width,\n width + CANVAS_PADDING\n );\n const minHeight = Math.max(\n state.canvasSize.height,\n height + CANVAS_PADDING\n );\n\n state.canvasSize.width = minWidth;\n state.canvasSize.height = minHeight;\n });\n },\n\n updateCanvasPositions: (positions: CanvasPositions) => {\n set((state: AppState) => {\n for (const uuid in positions) {\n // todo: add nodes that are created and then moved, for now ignore\n if (state.flowDefinition._ui.nodes[uuid]) {\n state.flowDefinition._ui.nodes[uuid].position = positions[uuid];\n }\n\n // otherwise, it might be a sticky\n else if (state.flowDefinition._ui.stickies[uuid]) {\n state.flowDefinition._ui.stickies[uuid].position =\n positions[uuid];\n }\n }\n\n // Sort nodes by position since positions may have changed\n sortNodesByPosition(\n state.flowDefinition.nodes,\n state.flowDefinition._ui.nodes\n );\n\n state.dirtyDate = new Date();\n });\n },\n\n removeNodes: (uuids: string[]) => {\n set((state: AppState) => {\n for (const uuid of uuids) {\n delete state.flowDefinition._ui.nodes[uuid];\n }\n\n state.flowDefinition = produce(state.flowDefinition, (draft) => {\n // For each node being removed, check if we should reroute connections\n uuids.forEach((removedUuid) => {\n const removedNode = draft.nodes.find(\n (n) => n.uuid === removedUuid\n );\n\n if (!removedNode || !removedNode.exits.length) return;\n\n // Get all destinations (filter out null/undefined)\n const destinations = removedNode.exits\n .map((exit) => exit.destination_uuid)\n .filter((dest) => dest);\n\n // Only proceed if all exits have destinations and they all point to the same place\n if (\n destinations.length === removedNode.exits.length &&\n destinations.every((dest) => dest === destinations[0])\n ) {\n const targetDestination = destinations[0];\n // Don't reroute if the target is also being removed\n if (uuids.includes(targetDestination)) return;\n\n // Find all nodes with exits pointing to the node being removed\n draft.nodes.forEach((node) => {\n node.exits.forEach((exit) => {\n if (exit.destination_uuid === removedUuid) {\n // Reroute to the same destination the removed node was going to\n exit.destination_uuid = targetDestination;\n }\n });\n });\n }\n });\n\n // Remove the nodes\n draft.nodes = draft.nodes.filter(\n (node) => !uuids.includes(node.uuid)\n );\n\n // Clear any remaining connections to removed nodes that weren't rerouted\n draft.nodes.forEach((node) => {\n node.exits.forEach((exit) => {\n if (uuids.includes(exit.destination_uuid)) {\n exit.destination_uuid = null;\n }\n });\n });\n\n // Sort nodes by position\n sortNodesByPosition(draft.nodes, draft._ui.nodes);\n });\n\n state.dirtyDate = new Date();\n });\n },\n\n removeStickyNotes: (uuids: string[]) => {\n set((state: AppState) => {\n if (state.flowDefinition._ui?.stickies) {\n for (const uuid of uuids) {\n delete state.flowDefinition._ui.stickies[uuid];\n }\n }\n state.dirtyDate = new Date();\n });\n },\n\n updateNode: (uuid: string, newNode: Node) => {\n set((state: AppState) => {\n const node = state.flowDefinition?.nodes.find((n) => n.uuid === uuid);\n if (node) {\n node.actions = newNode.actions;\n node.uuid = newNode.uuid;\n node.exits = newNode.exits;\n node.router = newNode.router;\n }\n state.dirtyDate = new Date();\n });\n },\n\n updateNodeUIConfig: (uuid: string, config: Record<string, any>) => {\n set((state: AppState) => {\n if (state.flowDefinition._ui.nodes[uuid]) {\n // Handle type separately if provided\n if (config.type !== undefined) {\n state.flowDefinition._ui.nodes[uuid].type = config.type;\n }\n\n // Update config (excluding type)\n if (!state.flowDefinition._ui.nodes[uuid].config) {\n state.flowDefinition._ui.nodes[uuid].config = {};\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { type, ...configWithoutType } = config;\n Object.assign(\n state.flowDefinition._ui.nodes[uuid].config,\n configWithoutType\n );\n }\n state.dirtyDate = new Date();\n });\n },\n\n updateConnection: (\n nodeUuid: string,\n exitUuid: string,\n destinationNodeUuid: string\n ) => {\n /* console.log('Upating connection:', {\n nodeUuid,\n exitUuid,\n destinationNodeUuid\n });*/\n set((state: AppState) => {\n // Find the exit with this UUID\n const node = state.flowDefinition.nodes.find(\n (node) => node.uuid === nodeUuid\n );\n\n const exit = node?.exits.find((e) => e.uuid === exitUuid);\n if (exit) {\n // Update the destination\n exit.destination_uuid = destinationNodeUuid;\n state.dirtyDate = new Date();\n }\n });\n },\n\n updateStickyNote: (uuid: string, sticky: StickyNote) => {\n set((state: AppState) => {\n if (!state.flowDefinition._ui.stickies) {\n state.flowDefinition._ui.stickies = {};\n }\n state.flowDefinition._ui.stickies[uuid] = sticky;\n state.dirtyDate = new Date();\n });\n },\n\n createStickyNote: (position: FlowPosition): string => {\n const uuid = generateUUID();\n set((state: AppState) => {\n if (!state.flowDefinition._ui.stickies) {\n state.flowDefinition._ui.stickies = {};\n }\n\n const newSticky: StickyNote = {\n position,\n title: '',\n body: '',\n color: 'yellow'\n };\n\n state.flowDefinition._ui.stickies[uuid] = newSticky;\n state.dirtyDate = new Date();\n });\n return uuid;\n },\n\n createNode: (nodeType: string, position: FlowPosition): string => {\n const uuid = generateUUID();\n const exitUuid = generateUUID();\n\n set((state: AppState) => {\n // Create a basic node with a single exit\n const newNode: Node = {\n uuid,\n actions: [],\n exits: [\n {\n uuid: exitUuid,\n destination_uuid: null\n }\n ]\n };\n\n // Add the node to the flow definition\n state.flowDefinition.nodes.push(newNode);\n\n // Set up UI for the node\n if (!state.flowDefinition._ui.nodes) {\n state.flowDefinition._ui.nodes = {};\n }\n\n state.flowDefinition._ui.nodes[uuid] = {\n position,\n type: nodeType as any,\n config: {}\n };\n\n // Sort nodes by position\n sortNodesByPosition(\n state.flowDefinition.nodes,\n state.flowDefinition._ui.nodes\n );\n\n state.dirtyDate = new Date();\n });\n\n return uuid;\n },\n\n addNode: (node: Node, nodeUI: NodeUI) => {\n set((state: AppState) => {\n // Add the node to the flow definition\n state.flowDefinition.nodes.push(node);\n\n // Set up UI for the node\n if (!state.flowDefinition._ui.nodes) {\n state.flowDefinition._ui.nodes = {};\n }\n\n state.flowDefinition._ui.nodes[node.uuid] = nodeUI;\n\n // Sort nodes by position\n sortNodesByPosition(\n state.flowDefinition.nodes,\n state.flowDefinition._ui.nodes\n );\n\n state.dirtyDate = new Date();\n });\n },\n\n updateLocalization: (\n languageCode: string,\n actionUuid: string,\n localizationData: Record<string, any>\n ) => {\n set((state: AppState) => {\n // Initialize localization structure if it doesn't exist\n if (!state.flowDefinition.localization) {\n state.flowDefinition.localization = {};\n }\n\n if (!state.flowDefinition.localization[languageCode]) {\n state.flowDefinition.localization[languageCode] = {};\n }\n\n // Update or remove the localization for this action\n if (Object.keys(localizationData).length > 0) {\n state.flowDefinition.localization[languageCode][actionUuid] =\n localizationData;\n } else {\n // If no localized values, remove the entry\n delete state.flowDefinition.localization[languageCode][actionUuid];\n }\n\n // Clean up empty language sections\n if (\n Object.keys(state.flowDefinition.localization[languageCode])\n .length === 0\n ) {\n delete state.flowDefinition.localization[languageCode];\n }\n\n // Clean up empty localization object\n if (Object.keys(state.flowDefinition.localization).length === 0) {\n delete state.flowDefinition.localization;\n }\n\n state.dirtyDate = new Date();\n });\n },\n\n setTranslationFilters: (filters: { categories: boolean }) => {\n set((state: AppState) => {\n if (!state.flowDefinition?._ui) {\n return;\n }\n\n const currentFilters = state.flowDefinition._ui\n .translation_filters || {\n categories: false\n };\n\n state.flowDefinition._ui.translation_filters = {\n ...currentFilters,\n categories: !!filters.categories\n };\n\n state.dirtyDate = new Date();\n });\n },\n\n markAutoTranslated: (\n languageCode: string,\n uuid: string,\n attributes: string[]\n ) => {\n set((state: AppState) => {\n if (!state.flowDefinition?._ui) {\n return;\n }\n\n if (!state.flowDefinition._ui.auto_translations) {\n state.flowDefinition._ui.auto_translations = {};\n }\n\n if (!state.flowDefinition._ui.auto_translations[languageCode]) {\n state.flowDefinition._ui.auto_translations[languageCode] = {};\n }\n\n const existing =\n state.flowDefinition._ui.auto_translations[languageCode][uuid] ||\n [];\n\n const merged = Array.from(\n new Set([...existing, ...(attributes || [])])\n );\n\n state.flowDefinition._ui.auto_translations[languageCode][uuid] =\n merged;\n state.dirtyDate = new Date();\n });\n }\n }))\n )\n);\n\ntype SelectorAwareStoreApi<S extends object> = StoreApi<S> & {\n subscribe: <U>(\n selector: (state: S) => U,\n listener: (value: U, previous: U) => void\n ) => () => void;\n};\n\n/**\n * Custom Lit property decorator that binds a property to a Zustand store subscription.\n *\n * @param store - The Zustand store to subscribe to.\n * @param selector - A function selecting the slice of state to bind to the property.\n */\nexport function fromStore<S extends object, V = unknown>(\n store: SelectorAwareStoreApi<S>,\n selector: (state: S) => V\n): PropertyDecorator {\n return (proto: any, name: string | symbol) => {\n property()(proto, name as string);\n\n const connectedKey = 'connectedCallback';\n const disconnectedKey = 'disconnectedCallback';\n\n const userConnected = proto[connectedKey];\n const userDisconnected = proto[disconnectedKey];\n\n proto[connectedKey] = function () {\n this._zustandUnsubscribe ??= {};\n this[name] = selector(store.getState());\n\n this._zustandUnsubscribe[name] = store.subscribe(selector, (val: V) => {\n this[name] = val;\n });\n\n if (userConnected) userConnected.call(this);\n };\n\n proto[disconnectedKey] = function () {\n this._zustandUnsubscribe?.[name]?.();\n if (userDisconnected) userDisconnected.call(this);\n };\n };\n}\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { assert, expect } from '@open-wc/testing';
|
|
2
2
|
import { ContactFields } from '../src/live/ContactFields';
|
|
3
|
-
import {
|
|
3
|
+
import { getComponent, loadStore, mockPOST, waitForCondition } from './utils.test';
|
|
4
4
|
const TAG = 'temba-contact-fields';
|
|
5
5
|
const getFields = async (attrs = {}) => {
|
|
6
6
|
attrs['endpoint'] = '/test-assets/contacts/';
|
|
7
7
|
const fields = (await getComponent(TAG, attrs, '', 600));
|
|
8
|
-
// wait for our contact to load
|
|
9
|
-
await
|
|
8
|
+
// wait for our contact data to load
|
|
9
|
+
await waitForCondition(() => fields.data !== undefined);
|
|
10
10
|
return fields;
|
|
11
11
|
};
|
|
12
12
|
describe(TAG, () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temba-contact-fields.test.js","sourceRoot":"","sources":["../../test/temba-contact-fields.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"temba-contact-fields.test.js","sourceRoot":"","sources":["../../test/temba-contact-fields.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EACL,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAEtB,MAAM,GAAG,GAAG,sBAAsB,CAAC;AACnC,MAAM,SAAS,GAAG,KAAK,EAAE,QAAa,EAAE,EAAE,EAAE;IAC1C,KAAK,CAAC,UAAU,CAAC,GAAG,wBAAwB,CAAC;IAC7C,MAAM,MAAM,GAAG,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,CAAkB,CAAC;IAE1E,oCAAoC;IACpC,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAExD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;IACjB,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC/B,+CAA+C;QAC/C,MAAM,SAAS,EAAE,CAAC;QAElB,MAAM,MAAM,GAAkB,MAAM,SAAS,CAAC;YAC5C,OAAO,EAAE,qBAAqB;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACzC,8DAA8D;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,SAAS,EAAE,CAAC;QAClB,MAAM,MAAM,GAAkB,MAAM,SAAS,CAAC;YAC5C,OAAO,EAAE,qBAAqB;SAC/B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5B,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,mDAAmD,EAAE,IAAI,CAAC,CAAC;QAEpE,oBAAoB;QACpB,MAAM,QAAQ,CACZ,qEAAqE,EACrE,IAAI,EACJ,IAAI,EACJ,IAAI,CACL,CAAC;QAEF,+DAA+D;QAC/D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEvD,sEAAsE;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { assert, expect } from '@open-wc/testing';\nimport { ContactFields } from '../src/live/ContactFields';\nimport {\n getComponent,\n loadStore,\n mockPOST,\n waitForCondition\n} from './utils.test';\n\nconst TAG = 'temba-contact-fields';\nconst getFields = async (attrs: any = {}) => {\n attrs['endpoint'] = '/test-assets/contacts/';\n const fields = (await getComponent(TAG, attrs, '', 600)) as ContactFields;\n\n // wait for our contact data to load\n await waitForCondition(() => fields.data !== undefined);\n\n return fields;\n};\n\ndescribe(TAG, () => {\n it('renders default', async () => {\n // we are a StoreElement, so load a store first\n await loadStore();\n\n const fields: ContactFields = await getFields({\n contact: 'contact-dave-active'\n });\n assert.instanceOf(fields, ContactFields);\n // await assertScreenshot('contacts/fields', getClip(fields));\n });\n\n it('handles updated contacts properly', async () => {\n await loadStore();\n const fields: ContactFields = await getFields({\n contact: 'contact-dave-active'\n });\n\n const data = fields.data;\n data.groups.forEach((group) => {\n delete group['is_dynamic'];\n });\n mockPOST(/api\\/v2\\/contacts\\.json\\?uuid=contact-dave-active/, data);\n\n // update our fields\n await typeInto(\n \"temba-contact-fields:temba-contact-field[key='age']:temba-textinput\",\n '62',\n true,\n true\n );\n\n // the updated contact should still have is_dynamic flags added\n expect(fields.data.groups[0].is_dynamic).equals(true);\n expect(fields.data.groups[1].is_dynamic).equals(false);\n\n // await assertScreenshot('contacts/fields-updated', getClip(fields));\n });\n});\n"]}
|