{"version":3,"file":"ncdot-components.js","sources":["../src/components/_main.ts"],"sourcesContent":["import '@/design/global.scss'\nimport '@/design/branding-contexts/global-www.ncdot.gov.scss'\nimport type {\n  CreateAppFunction as CreateVueAppFunction,\n  ComponentOptions,\n  Plugin,\n} from 'vue'\n\nexport const createComponentsPlugin = async (): Promise<Plugin> => {\n  const { defineAsyncComponent } = await import('vue')\n  return {\n    install: (app) => {\n      app.component(\n        'DotBingMap',\n        defineAsyncComponent(async () => await import('./DotBingMap.vue')),\n      )\n      app.component(\n        'DotBingMapPolygon',\n        defineAsyncComponent(\n          async () => await import('./DotBingMapPolygon.vue'),\n        ),\n      )\n      app.component(\n        'DotBingMapPolyline',\n        defineAsyncComponent(\n          async () => await import('./DotBingMapPolyline.vue'),\n        ),\n      )\n      app.component(\n        'DotBingMapPushpin',\n        defineAsyncComponent(\n          async () => await import('./DotBingMapPushpin.vue'),\n        ),\n      )\n      app.component(\n        'DotCarousel',\n        defineAsyncComponent(async () => await import('./DotCarousel.vue')),\n      )\n      app.component(\n        'DotCarouselFromSharepoint',\n        defineAsyncComponent(\n          async () => await import('./DotCarouselFromSharepoint.vue'),\n        ),\n      )\n      app.component(\n        'DotDataTable',\n        defineAsyncComponent(async () => await import('./DotDataTable.vue')),\n      )\n      app.component(\n        'DotDmvOnlineServices',\n        defineAsyncComponent(\n          async () => await import('./DotDmvOnlineServices.vue'),\n        ),\n      )\n      app.component(\n        'DotFerryRouteStatusTable',\n        defineAsyncComponent(\n          async () => await import('./DotFerryRouteStatusTable.vue'),\n        ),\n      )\n      app.component(\n        'DotIcon',\n        defineAsyncComponent(async () => await import('./DotIcon.vue')),\n      )\n      app.component(\n        'DotImapRoutesMap',\n        defineAsyncComponent(\n          async () => await import('./DotImapRoutesMap.vue'),\n        ),\n      )\n      app.component(\n        'DotImg',\n        defineAsyncComponent(async () => await import('./DotImg.vue')),\n      )\n      app.component(\n        'DotNewsCarousel',\n        defineAsyncComponent(async () => await import('./DotNewsCarousel.vue')),\n      )\n      app.component(\n        'DotScrollPaginationDots',\n        defineAsyncComponent(\n          async () => await import('./DotScrollPaginationDots.vue'),\n        ),\n      )\n      app.component(\n        'DotSharepointList',\n        defineAsyncComponent(\n          async () => await import('./DotSharepointList.vue'),\n        ),\n      )\n      app.component(\n        'DotTabs',\n        defineAsyncComponent(async () => await import('./DotTabs.vue')),\n      )\n      app.component(\n        'DotTrainMap',\n        defineAsyncComponent(async () => await import('./DotTrainMap.vue')),\n      )\n    },\n  }\n}\n\nexport type CreateAppFunction = (\n  options: {\n    el: string\n    scripts?: string[]\n  },\n  rootComponent?: Parameters<CreateVueAppFunction<Element>>[0],\n  rootProps?: Parameters<CreateVueAppFunction<Element>>[1],\n) => Promise<ReturnType<CreateVueAppFunction<Element>> | undefined>\n\nexport const mountComponents: CreateAppFunction = async (\n  options,\n  rootComponent,\n  rootProps,\n) => {\n  const { createApp: createVueApp } = await import('vue')\n  return await new Promise(async (resolve, reject) => {\n    const app = createVueApp(\n      {\n        ...rootComponent,\n        mounted() {\n          resolve(app)\n          ;(rootComponent as ComponentOptions)?.mounted?.call(this)\n        },\n      },\n      rootProps,\n    )\n    app.use(await createComponentsPlugin())\n    app.mount(options.el)\n  })\n}\n\nexport const createApp: CreateAppFunction = async (\n  options,\n  rootComponent,\n  rootProps,\n) => {\n  if (options.scripts?.length) {\n    // Prefetch other scripts\n    for (const src of options.scripts) {\n      const link = document.createElement('link')\n      link.rel = 'preload'\n      link.href = src\n      link.as = 'script'\n      document.head.appendChild(link)\n    }\n  }\n\n  // Check if any DOT components actually exist in the DOM\n  const dotComponentsFound = Array.from(\n    document.querySelectorAll(`${options.el} *`),\n  ).some((el) => el.tagName.startsWith('DOT-'))\n\n  // Mount the Vue app if DOT components are found\n  let app: ReturnType<CreateVueAppFunction<Element>> | undefined\n  if (dotComponentsFound) {\n    app = await mountComponents(options, rootComponent, rootProps)\n  }\n\n  if (options.scripts?.length) {\n    // Load and execute other scripts\n    const loadScripts = async (scripts: string[]): Promise<void> => {\n      await new Promise<void>((resolve, reject) => {\n        // Helper function to load a script\n        const loadScript = async (scriptSrc: string) => {\n          await new Promise<void>((resolve, reject) => {\n            const script = document.createElement('script')\n            script.src = scriptSrc\n            script.onload = () => {\n              resolve()\n            }\n            script.onerror = () => {\n              reject(new Error(`Script load error for ${scriptSrc}`))\n            }\n            document.body.appendChild(script)\n          })\n        }\n\n        const loadScriptsSequentially = async () => {\n          for (const src of scripts) {\n            try {\n              await loadScript(src)\n            } catch (error) {\n              reject(error)\n              return\n            }\n          }\n          resolve()\n        }\n\n        void loadScriptsSequentially()\n      })\n    }\n    await loadScripts(options.scripts)\n  }\n\n  return app\n}\n"],"names":["createComponentsPlugin","defineAsyncComponent","app","mountComponents","options","rootComponent","rootProps","createVueApp","resolve","reject","_a","createApp","_b","src","link","dotComponentsFound","el","scripts","loadScript","scriptSrc","script","error"],"mappings":"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"}