{"version":3,"file":"index.cjs","sources":["../src/hooks/useLoadScript.ts","../src/hooks/useLoadGoogleCharts.ts","../src/default-props.ts","../src/components/GoogleChartControls.tsx","../src/generate-unique-id.ts","../src/utils/GoogleChartControlsInternal.ts","../src/hooks/internal/useGoogleChartControls.tsx","../src/hooks/internal/useChartId.ts","../src/constants.ts","../src/load-data-table-from-spreadsheet.ts","../src/utils/GoogleChartInternal.ts","../src/hooks/internal/useGoogleChartDataTable.ts","../src/hooks/internal/useGoogleChartEvents.ts","../src/components/GoogleChart.tsx","../src/Context.tsx","../src/Chart.tsx","../src/types.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\n/**\n * Hook to load external script.\n * @param src - Source url to load.\n * @param onLoad - Success callback.\n * @param onError - Error callback.\n */\nexport function useLoadScript(src: string) {\n  const [isLoading, setIsLoading] = useState(true);\n  const [error, setError] = useState<Error | null>(null);\n  const [isSuccess, setIsSuccess] = useState(false);\n  const onLoad = () => {\n    setIsLoading(false);\n    setIsSuccess(true);\n  };\n  useEffect(() => {\n    if (!document) {\n      const error = new Error(\n        `[ScriptLoadingError] document not defined when attempting to load ${src}`,\n      );\n      setError(error);\n      return;\n    }\n\n    // Find script tag with same src in DOM.\n    const foundScript = document.querySelector<HTMLScriptElement>(\n      `script[src=\"${src}\"]`,\n    );\n\n    // Call onLoad if script marked as loaded.\n    if (foundScript?.dataset.loaded) {\n      onLoad();\n      return;\n    }\n\n    // Create or get existed tag.\n    const script = foundScript || document.createElement(\"script\");\n\n    // Set src if no script was found.\n    if (!foundScript) {\n      script.src = src;\n    }\n\n    // Mark script as loaded on load event.\n    const onLoadWithMarker = () => {\n      script.dataset.loaded = \"1\";\n      onLoad();\n    };\n\n    script.addEventListener(\"load\", onLoadWithMarker);\n\n    script.addEventListener(\"error\", (err) => {\n      console.error(\"Failed to load script:\", src, err);\n      const error = new Error(\n        `[ScriptLoadingError] Failed to load script: ${src}`,\n      );\n      setError(error);\n    });\n\n    // Add to DOM if not yet added.\n    if (!foundScript) {\n      document.head.append(script);\n    }\n  }, []);\n  return {\n    isLoading,\n    error,\n    isSuccess,\n  };\n}\n","import { useState, useEffect } from \"react\";\nimport {\n  GoogleChartVersion,\n  GoogleChartPackages,\n  GoogleViz,\n  ReactGoogleChartProps,\n} from \"../types\";\nimport { useLoadScript } from \"./useLoadScript\";\n\nexport interface IUseLoadGoogleChartsParams {\n  chartVersion?: GoogleChartVersion;\n  chartPackages?: GoogleChartPackages[];\n  chartLanguage?: string;\n  mapsApiKey?: string;\n}\n\nconst isGoogleReady = (google?: GoogleViz) => {\n  return google && google.charts;\n};\n\nconst isGoogleChartsReady = (\n  props: ReactGoogleChartProps,\n  google?: GoogleViz,\n) => {\n  const { controls, toolbarItems, getChartEditor } = props;\n  return (\n    google &&\n    google.charts &&\n    google.visualization &&\n    google.visualization.ChartWrapper &&\n    google.visualization.Dashboard &&\n    (!controls || google.visualization.ChartWrapper) &&\n    (!getChartEditor || google.visualization.ChartEditor) &&\n    (!toolbarItems || google.visualization.drawToolbar)\n  );\n};\n\nconst getGoogleInstanceFromWindow = (props: ReactGoogleChartProps) => {\n  // @ts-expect-error Getting object from global namespace.\n  const google = window.google as GoogleViz;\n  return google;\n};\n\n/**\n * Hook to load Google Charts JS API.\n * @param params - Load parameters.\n * @param [params.chartVersion] - Chart version to load.\n * @param [params.chartPackages] - Packages to load.\n * @param [params.chartLanguage] - Languages to load.\n * @param [params.mapsApiKey] - Google Maps api key.\n * @returns\n */\nexport function useLoadGoogleCharts(props: ReactGoogleChartProps) {\n  const {\n    chartVersion = \"current\",\n    chartPackages = [\"corechart\", \"controls\"],\n    chartLanguage = \"en\",\n    mapsApiKey,\n  } = props;\n  const [googleCharts, setGoogleCharts] = useState<GoogleViz | null>(null);\n  const [scriptInitializationError, setScriptInitializationError] =\n    useState<Error | null>(null);\n  const [googleChartsInitializationError, setGoogleChartsInitializationError] =\n    useState<Error | null>(null);\n  const {\n    isLoading,\n    error: scriptLoadingError,\n    isSuccess,\n  } = useLoadScript(\n    props.chartLoaderScriptUrl || \"https://www.gstatic.com/charts/loader.js\",\n  );\n\n  useEffect(() => {\n    if (!isSuccess) {\n      return;\n    }\n    const google = getGoogleInstanceFromWindow(props);\n    if (!isGoogleReady(google)) {\n      const error = new Error(\n        \"[ScriptInitializationError] Script loaded but Google not attached to window.\",\n      );\n      setScriptInitializationError(error);\n      return;\n    }\n    if (isGoogleChartsReady(props, google)) {\n      setGoogleCharts(google);\n      return;\n    }\n    google.charts.load(chartVersion, {\n      packages: chartPackages,\n      language: chartLanguage,\n      mapsApiKey,\n    });\n    google.charts.setOnLoadCallback(() => {\n      if (!isGoogleChartsReady(props, google)) {\n        const error = new Error(\n          \"[GoogleChartsInitializationError] Google Charts not ready after load callback.\",\n        );\n        console.error(error);\n        setGoogleChartsInitializationError(error);\n        return;\n      }\n      setGoogleCharts(google);\n    });\n  }, [isSuccess]);\n  return {\n    error:\n      scriptLoadingError ||\n      scriptInitializationError ||\n      googleChartsInitializationError,\n    isLoading,\n    google: googleCharts,\n  };\n}\n\nexport interface ILoadGoogleChartsProps extends IUseLoadGoogleChartsParams {\n  onLoad?(googleCharts: GoogleViz): void;\n  onError?(): void;\n}\n","import { ReactGoogleChartProps } from \"./types\";\n\nexport const chartDefaultProps: Partial<ReactGoogleChartProps> = {\n  // <DEPRECATED_PROPS>\n  legend_toggle: false,\n  // </DEPRECATED_PROPS>\n  options: {},\n  legendToggle: false,\n  getChartWrapper: () => {},\n  spreadSheetQueryParameters: {\n    headers: 1,\n    gid: 1,\n  },\n  rootProps: {},\n  chartWrapperParams: {},\n  chartLoaderScriptUrl: \"https://www.gstatic.com/charts/loader.js\",\n};\n","import React from \"react\";\nimport { GoogleChartControlAndProp } from \"../hooks/internal/useGoogleChartControls\";\n\nexport type FilterControl = (control: GoogleChartControlAndProp) => boolean;\n\ntype Props = {\n  isReady: boolean;\n  chartControls: GoogleChartControlAndProp[] | null;\n  filter?: FilterControl;\n};\nexport const GoogleChartControls = (props: Props) => {\n  const { isReady, chartControls, filter } = props;\n  if (!isReady || !chartControls || !chartControls?.length) {\n    return null;\n  }\n  return (\n    <>\n      {chartControls\n        .filter(({ controlProp, control }) => {\n          return filter ? filter({ control, controlProp }) : true;\n        })\n        .map(({ control }) => {\n          return (\n            <div key={control.getContainerId()} id={control.getContainerId()} />\n          );\n        })}\n    </>\n  );\n};\n","let uniqueID = 0;\nexport const generateUniqueID = () => {\n  uniqueID += 1;\n  return `reactgooglegraph-${uniqueID}`;\n};\n","import {\n  GoogleViz,\n  ReactGoogleChartProps,\n  GoogleChartControlProp,\n  GoogleChartControl,\n  UseChartControlsParams,\n} from \"../types\";\nimport { generateUniqueID } from \"../generate-unique-id\";\n\nexport type Props = ReactGoogleChartProps & {\n  google: GoogleViz;\n};\n\nexport type GoogleChartControlAndProp = {\n  controlProp: GoogleChartControlProp;\n  control: GoogleChartControl;\n};\n\n/**\n * An internal helper class for creating and managing Google Charts controls.\n * Offers high-level methods to interact with the Google Chart Controls.\n */\nexport class GoogleChartControlsInternal {\n  /**\n   * Initialize the controls once chart is ready\n   */\n  private static initializeControls = (\n    googleChartControls: GoogleChartControlAndProp[],\n  ) => {\n    for (let i = 0; i < googleChartControls.length; i += 1) {\n      const { controlType, options, controlWrapperParams } =\n        googleChartControls[i].controlProp;\n      if (controlWrapperParams && \"state\" in controlWrapperParams) {\n        googleChartControls[i].control.setState(controlWrapperParams[\"state\"]);\n      }\n      googleChartControls[i].control.setOptions(options);\n      googleChartControls[i].control.setControlType(controlType);\n    }\n  };\n\n  /**\n   * listen to the control events (ready, statechange, error) specified in the controlEvents prop\n   */\n  public static listenToControlEvents = (\n    googleChartControls: GoogleChartControlAndProp[],\n    props: UseChartControlsParams,\n  ) => {\n    const { google } = props;\n    return googleChartControls.flatMap((chartControl) => {\n      const { control, controlProp } = chartControl;\n      const { controlEvents = [] } = controlProp;\n      return controlEvents.map((event) => {\n        const { callback, eventName } = event;\n        return google.visualization.events.addListener(\n          control,\n          eventName,\n          (...args) => {\n            callback({\n              chartWrapper: null,\n              controlWrapper: control,\n              props: props,\n              google: google,\n              eventArgs: args,\n            });\n          },\n        );\n      });\n    });\n  };\n\n  /**\n   * If controlID is not provided, generate a unique controlID\n   */\n  private static createControlId = (id: undefined | string) => {\n    let controlID: string;\n    if (typeof id === \"undefined\") {\n      controlID = `googlechart-control-${generateUniqueID()}`;\n    } else {\n      controlID = id;\n    }\n    return controlID;\n  };\n\n  /**\n   * Map the control props to Google Chart Controls\n   */\n  private static createChartControls = (props: UseChartControlsParams) => {\n    const { controls, google } = props;\n    if (!controls) {\n      return null;\n    }\n\n    return controls.map((control, i) => {\n      const {\n        controlID: controlIDMaybe,\n        controlType,\n        options: controlOptions,\n        controlWrapperParams,\n      } = control;\n      const controlID = this.createControlId(controlIDMaybe);\n      return {\n        controlProp: control,\n        control: new google.visualization.ControlWrapper({\n          containerId: controlID,\n          controlType,\n          options: controlOptions,\n          ...controlWrapperParams,\n        }),\n      };\n    });\n  };\n\n  static addControls = (props: UseChartControlsParams) => {\n    const { chartWrapper, chartDashboard } = props;\n    const googleChartControls = this.createChartControls(props);\n    if (!googleChartControls || !chartDashboard || !chartWrapper) {\n      return null;\n    }\n    chartDashboard.bind(\n      googleChartControls.map(({ control }) => control),\n      chartWrapper,\n    );\n    this.initializeControls(googleChartControls);\n    return googleChartControls;\n  };\n}\n","import * as React from \"react\";\nimport {\n  GoogleViz,\n  ReactGoogleChartProps,\n  GoogleChartControlProp,\n  GoogleChartControl,\n  UseChartControlsParams,\n} from \"../../types\";\nimport {\n  FilterControl,\n  GoogleChartControls,\n} from \"../../components/GoogleChartControls\";\nimport { GoogleChartControlsInternal } from \"../../utils/GoogleChartControlsInternal\";\n\nconst useCreateChartControls = (\n  controls: ReactGoogleChartProps[\"controls\"],\n) => {\n  const [chartControls, setChartControls] = React.useState<\n    GoogleChartControl[] | null\n  >(null);\n\n  const controlAndProp = React.useMemo(() => {\n    if (!chartControls || !controls) return null;\n\n    return controls\n      .map((controlProp, i): GoogleChartControlAndProp | undefined => {\n        const control: GoogleChartControl | undefined = chartControls[i];\n        return control ? { controlProp, control } : undefined;\n      })\n      .flatMap((controlAndProp) => (controlAndProp ? [controlAndProp] : []));\n  }, [chartControls, controls]);\n\n  return [controlAndProp, setChartControls] as const;\n};\n\nconst useListenToControlEvents = (\n  chartControls: GoogleChartControlAndProp[],\n  props: UseChartControlsParams,\n) => {\n  React.useEffect(() => {\n    const listeners = GoogleChartControlsInternal.listenToControlEvents(\n      chartControls ?? [],\n      props,\n    );\n\n    return () => {\n      listeners.forEach((listener) => {\n        props.google.visualization.events.removeListener(listener);\n      });\n    };\n  }, [chartControls, props]);\n};\n\nexport type Props = ReactGoogleChartProps & {\n  google: GoogleViz;\n};\n\nexport type GoogleChartControlAndProp = {\n  controlProp: GoogleChartControlProp;\n  control: GoogleChartControl;\n};\n\nexport const useChartControls = (props: UseChartControlsParams) => {\n  const [chartControls, setChartControls] = useCreateChartControls(\n    props.controls,\n  );\n\n  useListenToControlEvents(chartControls ?? [], props);\n\n  /**\n   * Render the container divs for the controls\n   */\n  const renderControl = (filter: FilterControl) => {\n    const { chartWrapper, chartDashboard } = props;\n    return (\n      <GoogleChartControls\n        {...props}\n        isReady={Boolean(chartWrapper && chartDashboard)}\n        chartControls={chartControls}\n        filter={filter}\n      />\n    );\n  };\n\n  return {\n    addControls: (props: UseChartControlsParams) => {\n      const controls = GoogleChartControlsInternal.addControls(props);\n      setChartControls(controls?.map((control) => control.control) ?? null);\n    },\n    renderControl,\n  };\n};\n","import * as React from \"react\";\nimport { ReactGoogleChartProps } from \"../../types\";\nimport { generateUniqueID } from \"../../generate-unique-id\";\n\nexport const useChartId = (\n  props: Pick<ReactGoogleChartProps, \"graphID\" | \"graph_id\">,\n) => {\n  const chartIdRef = React.useRef<string | null>(null);\n  const getChartId = (): string => {\n    const { graphID, graph_id } = props;\n    const chartIdFromProps = graphID || graph_id;\n    let currentChartId: string;\n    if (chartIdFromProps) {\n      currentChartId = chartIdFromProps as string;\n    } else {\n      currentChartId = chartIdRef.current || generateUniqueID();\n    }\n    chartIdRef.current = currentChartId;\n    return chartIdRef.current as string;\n  };\n  const chartId = getChartId();\n  return { chartId };\n};\n","export const DEFAULT_CHART_COLORS = [\n  \"#3366CC\",\n  \"#DC3912\",\n  \"#FF9900\",\n  \"#109618\",\n  \"#990099\",\n  \"#3B3EAC\",\n  \"#0099C6\",\n  \"#DD4477\",\n  \"#66AA00\",\n  \"#B82E2E\",\n  \"#316395\",\n  \"#994499\",\n  \"#22AA99\",\n  \"#AAAA11\",\n  \"#6633CC\",\n  \"#E67300\",\n  \"#8B0707\",\n  \"#329262\",\n  \"#5574A6\",\n  \"#3B3EAC\",\n];\n","import { GoogleViz } from \"./types\";\n\nexport const loadDataTableFromSpreadSheet = async (\n  googleViz: GoogleViz,\n  spreadSheetUrl: string,\n  urlParams: {\n    headers?: number;\n    gid?: any;\n    sheet?: string;\n    query?: string;\n    access_token?: string;\n  } = {},\n) => {\n  return new Promise((resolve, reject) => {\n    const headers = `${\n      urlParams.headers ? `headers=${urlParams.headers}` : `headers=0`\n    }`;\n    const queryString = `${\n      urlParams.query ? `&tq=${encodeURIComponent(urlParams.query)}` : ``\n    }`;\n    const gid = `${urlParams.gid ? `&gid=${urlParams.gid}` : \"\"}`;\n    const sheet = `${urlParams.sheet ? `&sheet=${urlParams.sheet}` : \"\"}`;\n    const access_token = `${\n      urlParams.access_token ? `&access_token=${urlParams.access_token}` : \"\"\n    }`;\n    const urlQueryString = `${headers}${gid}${sheet}${queryString}${access_token}`;\n    const urlToSpreadSheet = `${spreadSheetUrl}/gviz/tq?${urlQueryString}`; //&tq=${queryString}`;\n    const query = new googleViz.visualization.Query(urlToSpreadSheet);\n    query.send((response: any) => {\n      if (response.isError()) {\n        reject(\n          `Error in query:  ${response.getMessage()} ${response.getDetailedMessage()}`,\n        );\n      } else {\n        resolve(response.getDataTable());\n      }\n    });\n  });\n};\n","import { DEFAULT_CHART_COLORS } from \"../constants\";\nimport { UseGoogleChartDataTableParams } from \"../hooks/internal/useGoogleChartDataTable\";\nimport { loadDataTableFromSpreadSheet } from \"../load-data-table-from-spreadsheet\";\nimport { ApplyFormattersParams, GoogleDataTable } from \"../types\";\n\nconst GRAY_COLOR = \"#CCCCCC\";\n\n/**\n * An internal helper class around the Google Chart API.\n * Offers high-level methods to interact with the Google Chart API.\n */\nexport class GoogleChartInternal {\n  private static grayOutHiddenColumnsLabel = (\n    props: UseGoogleChartDataTableParams,\n    hiddenColumns: string[],\n  ) => {\n    const { googleChartWrapper, options } = props;\n    if (!googleChartWrapper) {\n      console.error(\"googleChartWrapper is not defined\");\n      return;\n    }\n    const dataTable = googleChartWrapper.getDataTable();\n    if (!dataTable) return;\n    const columnCount = dataTable.getNumberOfColumns();\n    const hasAHiddenColumn = hiddenColumns.length > 0;\n    if (hasAHiddenColumn === false) return;\n    const colors = Array.from({ length: columnCount - 1 }).map(\n      (_dontcare, i) => {\n        const columnID = this.getColumnId(dataTable, i + 1);\n        if (hiddenColumns.includes(columnID)) {\n          return GRAY_COLOR;\n        } else if (options && options.colors) {\n          return options.colors[i];\n        } else {\n          return DEFAULT_CHART_COLORS[i];\n        }\n      },\n    );\n    googleChartWrapper.setOptions({\n      ...options,\n      colors,\n    });\n    googleChartWrapper.draw();\n  };\n  /**\n   * Listens to user clicking on the legend to toggle the visibility of a column.\n   * When a user clicks on a legend item, the column id is added to / removed from the hiddenColumns state.\n   */\n  public static listenToLegendToggle = (\n    props: UseGoogleChartDataTableParams,\n    hiddenColumnsState: [\n      string[],\n      React.Dispatch<React.SetStateAction<string[]>>,\n    ],\n  ) => {\n    const [hiddenColumns, setHiddenColumns] = hiddenColumnsState;\n    const { google, googleChartWrapper } = props;\n    if (!googleChartWrapper) {\n      console.error(\"googleChartWrapper is not defined\");\n      return;\n    }\n    return google.visualization.events.addListener(\n      googleChartWrapper,\n      \"select\",\n      () => {\n        const chart = googleChartWrapper.getChart();\n        const selection = chart.getSelection();\n        const dataTable = googleChartWrapper.getDataTable();\n        if (\n          selection.length === 0 ||\n          // We want to listen to when a whole row is selected. This is the case only when row === null\n          selection[0].row !== null ||\n          !dataTable\n        ) {\n          return;\n        }\n\n        const columnIndex = selection[0].column;\n        const columnID = this.getColumnId(dataTable, columnIndex);\n        // If the column is hidden remove it from state, otherwise add it\n        if (hiddenColumns?.includes(columnID)) {\n          setHiddenColumns((state) => [\n            ...state.filter((colID) => colID !== columnID),\n          ]);\n        } else {\n          setHiddenColumns((state) => [...state, columnID]);\n        }\n      },\n    );\n  };\n\n  /**\n   * (Re-)Draw a Google Chart with the given data, options, and chart type.\n   */\n  public static draw = async (\n    props: UseGoogleChartDataTableParams & { hiddenColumns: string[] },\n  ) => {\n    const {\n      data,\n      diffdata,\n      rows,\n      columns,\n      options,\n      chartType,\n      formatters,\n      spreadSheetUrl,\n      spreadSheetQueryParameters,\n      googleChartDashboard,\n      googleChartWrapper,\n      google,\n      hiddenColumns,\n      legendToggle,\n      legend_toggle,\n    } = props;\n    if (!googleChartWrapper) {\n      console.error(\"draw was called with googleChartWrapper = null\");\n      return;\n    }\n    let dataTable: GoogleDataTable;\n    let chartDiff = null;\n    if (diffdata) {\n      const oldData = google.visualization.arrayToDataTable(diffdata.old);\n      const newData = google.visualization.arrayToDataTable(diffdata.new);\n      chartDiff = google.visualization[chartType].prototype.computeDiff(\n        oldData,\n        newData,\n      );\n    }\n    if (data) {\n      if (data instanceof google.visualization.DataTable) {\n        dataTable = data;\n      } else if (Array.isArray(data)) {\n        dataTable = google.visualization.arrayToDataTable(data);\n      } else {\n        dataTable = new google.visualization.DataTable(data);\n      }\n    } else if (rows && columns) {\n      dataTable = google.visualization.arrayToDataTable([columns, ...rows]);\n    } else if (spreadSheetUrl) {\n      dataTable = (await loadDataTableFromSpreadSheet(\n        google,\n        spreadSheetUrl,\n        spreadSheetQueryParameters,\n      )) as GoogleDataTable;\n    } else {\n      dataTable = google.visualization.arrayToDataTable([]);\n    }\n    const columnCount = dataTable.getNumberOfColumns();\n\n    const viewColumns = Array(columnCount)\n      .fill(0)\n      .map((_c, i) => {\n        const columnID = this.getColumnId(dataTable, i);\n        if (hiddenColumns.includes(columnID)) {\n          return {\n            label: dataTable.getColumnLabel(i),\n            type: dataTable.getColumnType(i),\n            calc: () => null,\n          };\n        } else {\n          return i;\n        }\n      });\n    const chart = googleChartWrapper.getChart();\n    if (googleChartWrapper.getChartType() === \"Timeline\") {\n      chart && chart.clearChart();\n    }\n    googleChartWrapper.setChartType(chartType);\n    googleChartWrapper.setOptions(options || {});\n    const viewTable = new google.visualization.DataView(dataTable);\n    viewTable.setColumns(viewColumns);\n    googleChartWrapper.setDataTable(viewTable);\n    googleChartWrapper.draw();\n    if (googleChartDashboard) {\n      googleChartDashboard.draw(dataTable);\n    }\n\n    if (chartDiff) {\n      googleChartWrapper.setDataTable(chartDiff);\n      googleChartWrapper.draw();\n    }\n    if (formatters) {\n      this.applyFormatters({ dataTable, formatters, google });\n      googleChartWrapper.setDataTable(dataTable);\n      googleChartWrapper.draw();\n    }\n    if (legendToggle === true || legend_toggle === true) {\n      this.grayOutHiddenColumnsLabel(props, hiddenColumns);\n    }\n    return;\n  };\n  /**\n   * Get the column ID of a column in a GoogleDataTable.\n   * If the column has an ID, return the ID, otherwise return the label.\n   */\n  private static getColumnId = (\n    dataTable: GoogleDataTable,\n    columnIndex: number,\n  ) => {\n    return (\n      dataTable.getColumnId(columnIndex) ||\n      dataTable.getColumnLabel(columnIndex)\n    );\n  };\n\n  /**\n   * Apply Chart Formatters passed under the formatters prop to the GoogleDataTable\n   */\n  private static applyFormatters = ({\n    dataTable,\n    formatters,\n    google,\n  }: ApplyFormattersParams) => {\n    for (let formatter of formatters) {\n      switch (formatter.type) {\n        case \"ArrowFormat\": {\n          const vizFormatter = new google.visualization.ArrowFormat(\n            formatter.options,\n          );\n          vizFormatter.format(dataTable, formatter.column);\n          return;\n        }\n        case \"BarFormat\": {\n          const vizFormatter = new google.visualization.BarFormat(\n            formatter.options,\n          );\n          vizFormatter.format(dataTable, formatter.column);\n          return;\n        }\n        case \"ColorFormat\": {\n          const vizFormatter = new google.visualization.ColorFormat(\n            formatter.options,\n          );\n          const { ranges } = formatter;\n          if (ranges) {\n            for (let range of ranges) {\n              vizFormatter.addRange(...range);\n            }\n          }\n          vizFormatter.format(dataTable, formatter.column);\n          return;\n        }\n        case \"DateFormat\": {\n          const vizFormatter = new google.visualization.DateFormat(\n            formatter.options,\n          );\n          vizFormatter.format(dataTable, formatter.column);\n          return;\n        }\n        case \"NumberFormat\": {\n          const vizFormatter = new google.visualization.NumberFormat(\n            formatter.options,\n          );\n          vizFormatter.format(dataTable, formatter.column);\n          return;\n        }\n        case \"PatternFormat\": {\n          const vizFormatter = new google.visualization.PatternFormat(\n            formatter.options,\n          );\n          vizFormatter.format(dataTable, formatter.column);\n          return;\n        }\n        default: {\n          console.warn(`Unknown formatter type: ${formatter.type}`);\n          return;\n        }\n      }\n    }\n  };\n}\n","import * as React from \"react\";\nimport {\n  GoogleViz,\n  GoogleChartWrapper,\n  ReactGoogleChartProps,\n  GoogleChartDashboard,\n  GoogleVizEventListener,\n} from \"../../types\";\nimport { GoogleChartInternal } from \"../../utils\";\n\nexport type ChartDrawArgs = {\n  data: ReactGoogleChartProps[\"data\"];\n};\n\nexport type UseGoogleChartDataTableParams = ReactGoogleChartProps & {\n  googleChartWrapper?: GoogleChartWrapper | null;\n  google: GoogleViz;\n  googleChartDashboard?: GoogleChartDashboard | null;\n};\n\nexport const useGoogleChartDataTable = (\n  props: UseGoogleChartDataTableParams,\n) => {\n  const { google, googleChartWrapper, googleChartDashboard } = props;\n  const [hiddenColumns, setHiddenColumns] = React.useState<string[]>([]);\n  // Re-draw the chart when hiddenColumns change\n  React.useEffect(() => {\n    if (!googleChartWrapper) {\n      return;\n    }\n    GoogleChartInternal.draw({\n      ...props,\n      hiddenColumns,\n      googleChartWrapper,\n      googleChartDashboard,\n      google,\n    });\n  }, [\n    hiddenColumns,\n    props.data,\n    props.rows,\n    props.columns,\n    props.options,\n    props.chartLoaderScriptUrl,\n    props.chartType,\n    props.formatters,\n    props.spreadSheetUrl,\n    props.spreadSheetQueryParameters,\n    props.legendToggle,\n    props.legend_toggle,\n  ]);\n\n  // Re-draw the chart when the window is resized\n  const onResize = () => {\n    const { googleChartWrapper } = props;\n    if (!googleChartWrapper) {\n      return;\n    }\n    googleChartWrapper.draw();\n  };\n\n  // Draw the chart when the google charts wrapper is ready and when the hiddenColumns change\n  const initialize = (googleChartWrapper: GoogleChartWrapper) => {\n    const listeners: GoogleVizEventListener[] = [];\n\n    const { legendToggle, legend_toggle } = props;\n    GoogleChartInternal.draw({\n      ...props,\n      hiddenColumns,\n      googleChartWrapper,\n      googleChartDashboard,\n      google,\n    });\n    window.addEventListener(\"resize\", onResize);\n    if (legend_toggle || legendToggle) {\n      const listener = GoogleChartInternal.listenToLegendToggle(props, [\n        hiddenColumns,\n        setHiddenColumns,\n      ]);\n\n      if (listener) listeners.push(listener);\n    }\n\n    return listeners;\n  };\n\n  // Remove event listeners and clear the chart when the component is unmounted\n  const destroy = (\n    googleChartWrapper: GoogleChartWrapper,\n    listeners: GoogleVizEventListener[],\n  ) => {\n    window.removeEventListener(\"resize\", onResize);\n    listeners.forEach((listener) => {\n      google.visualization.events.removeListener(listener);\n    });\n    if (googleChartWrapper.getChartType() === \"Timeline\") {\n      googleChartWrapper.getChart() &&\n        googleChartWrapper.getChart().clearChart();\n    }\n  };\n\n  React.useEffect(() => {\n    if (!googleChartWrapper) {\n      return;\n    }\n    const listeners = initialize(googleChartWrapper);\n    return () => {\n      destroy(googleChartWrapper, listeners);\n    };\n  }, [googleChartWrapper, initialize, destroy]);\n};\n","import { useEffect } from \"react\";\nimport {\n  GoogleChartWrapper,\n  GoogleViz,\n  ReactGoogleChartProps,\n} from \"../../types\";\n\nexport type GoogleChartEventsParams = ReactGoogleChartProps & {\n  googleChartWrapper?: GoogleChartWrapper | null;\n  google: GoogleViz;\n};\n\nconst listenToEvents = (props: GoogleChartEventsParams) => {\n  const { chartEvents, google, googleChartWrapper } = props;\n  if (!chartEvents) {\n    return;\n  }\n  if (!googleChartWrapper) {\n    console.warn(\"listenToEvents was called before chart wrapper ready.\");\n    return;\n  }\n  return chartEvents.map(({ eventName, callback }) => {\n    return google.visualization.events.addListener(\n      googleChartWrapper,\n      eventName,\n      (...args) => {\n        callback({\n          chartWrapper: googleChartWrapper,\n          props,\n          google: google,\n          eventArgs: args,\n        });\n      },\n    );\n  });\n};\n\nexport const useGoogleChartEvents = (props: GoogleChartEventsParams) => {\n  useEffect(() => {\n    if (!props.googleChartWrapper) return;\n\n    const listeners = listenToEvents(props);\n\n    return () => {\n      listeners?.forEach((listener) => {\n        props.google.visualization.events.removeListener(listener);\n      });\n    };\n  }, [props]);\n};\n","import * as React from \"react\";\nimport {\n  GoogleViz,\n  GoogleChartWrapper,\n  ReactGoogleChartProps,\n  GoogleChartDashboard,\n  GoogleChartEditor,\n} from \"../types\";\nimport { useChartControls } from \"../hooks/internal/useGoogleChartControls\";\nimport { useChartId } from \"../hooks/internal/useChartId\";\nimport { useGoogleChartDataTable } from \"../hooks/internal/useGoogleChartDataTable\";\nimport { useGoogleChartEvents } from \"../hooks/internal/useGoogleChartEvents\";\n\ntype Props = ReactGoogleChartProps & {\n  google: GoogleViz;\n};\n\nexport const GoogleChart: React.FC<Props> = (props) => {\n  const [googleChartWrapper, setGoogleChartWrapper] =\n    React.useState<GoogleChartWrapper | null>(null);\n  // const [isReady, setIsReady] = React.useState<boolean>(false);\n  const [googleChartDashboard, setGoogleChartDashboard] =\n    React.useState<GoogleChartDashboard | null>(null);\n\n  const { addControls, renderControl } = useChartControls({\n    ...props,\n    chartDashboard: googleChartDashboard,\n    chartWrapper: googleChartWrapper,\n  });\n  useGoogleChartEvents({\n    ...props,\n    googleChartWrapper,\n  });\n  const { chartId } = useChartId(props);\n  const dashboardRef = React.useRef<HTMLDivElement>(null);\n  const toolbarRef = React.useRef<HTMLDivElement>(null);\n\n  React.useEffect(() => {\n    const {\n      options,\n      google,\n      chartType,\n      chartWrapperParams,\n      toolbarItems,\n      getChartEditor,\n      getChartWrapper,\n      onLoad,\n    } = props;\n\n    const chartConfig = {\n      chartType,\n      options,\n      containerId: chartId,\n      ...chartWrapperParams,\n    };\n    // Create ChartWrapper instance, pass it to the user and store it in state\n    const chartWrapper = new google.visualization.ChartWrapper(chartConfig);\n    chartWrapper.setOptions(options || {});\n    getChartWrapper?.(chartWrapper, google);\n\n    // Create Dashboard instance, needed for controls\n    const chartDashboard = new google.visualization.Dashboard(\n      dashboardRef.current,\n    );\n\n    // Create toolbar if needed\n    if (toolbarItems) {\n      google.visualization.drawToolbar(\n        toolbarRef.current as HTMLDivElement,\n        toolbarItems,\n      );\n    }\n\n    // Create ChartEditor instance if needed and pass it to the user\n    let chartEditor: GoogleChartEditor | null = null;\n    if (getChartEditor) {\n      chartEditor = new google.visualization.ChartEditor();\n      getChartEditor({\n        chartEditor,\n        chartWrapper,\n        google,\n      });\n    }\n    // Create and add controls to the chart / dashboard\n    addControls({ ...props, chartDashboard, chartWrapper });\n    setGoogleChartWrapper(chartWrapper);\n    setGoogleChartDashboard(chartDashboard);\n    onLoad?.(google, {\n      google,\n      chartWrapper,\n      chartEditor,\n      chartDashboard,\n    });\n  }, []);\n\n  useGoogleChartDataTable({\n    ...props,\n    googleChartWrapper,\n    googleChartDashboard,\n  });\n  const renderChart = () => {\n    const { width, height, options, style, className, rootProps, google } =\n      props;\n\n    const divStyle = {\n      height: height || (options && options.height),\n      width: width || (options && options.width),\n      ...style,\n    };\n    return (\n      <div id={chartId} style={divStyle} className={className} {...rootProps} />\n    );\n  };\n\n  const renderToolBar = () => {\n    if (!props.toolbarItems) return null;\n    return <div ref={toolbarRef} />;\n  };\n\n  const { width, height, options, style } = props;\n\n  const divStyle = {\n    height: height || (options && options.height),\n    width: width || (options && options.width),\n    ...style,\n  };\n\n  // If render prop is provided, give the user full control over the rendering by passing renderChart, renderControl and renderToolbar functions\n  if (props.render) {\n    return (\n      <div ref={dashboardRef} style={divStyle}>\n        <div ref={toolbarRef} id=\"toolbar\" />\n        {props.render({\n          renderChart,\n          renderControl,\n          renderToolbar: renderToolBar,\n        })}\n      </div>\n    );\n  } else {\n    return (\n      <div ref={dashboardRef} style={divStyle}>\n        {renderControl(\n          ({ controlProp }) => controlProp.controlPosition !== \"bottom\",\n        )}\n        {renderChart()}\n        {renderControl(\n          ({ controlProp }) => controlProp.controlPosition === \"bottom\",\n        )}\n        {renderToolBar()}\n      </div>\n    );\n  }\n};\n\nexport default GoogleChart;\n","import * as React from \"react\";\nimport { chartDefaultProps } from \"./default-props\";\nimport { ReactGoogleChartProps } from \"./types\";\n\nexport const ChartContext = React.createContext(chartDefaultProps);\n\nexport const ContextProvider = ({\n  children,\n  value,\n}: {\n  children: any;\n  value: ReactGoogleChartProps;\n}) => {\n  return (\n    <ChartContext.Provider value={value}>{children}</ChartContext.Provider>\n  );\n};\n","import React from \"react\";\nimport { ReactGoogleChartProps } from \"./types\";\nimport { useLoadGoogleCharts } from \"./hooks\";\nimport { chartDefaultProps } from \"./default-props\";\nimport { GoogleChart } from \"./components/GoogleChart\";\nimport { ContextProvider } from \"./Context\";\n\n/**\n * Loads Google Charts JS and renders the GoogleChart component.\n */\nconst ChartView: React.FC<ReactGoogleChartProps> = (props) => {\n  const { google, isLoading, error } = useLoadGoogleCharts(props);\n  if (isLoading) {\n    return props.loader ?? null;\n  }\n  if (error) {\n    return props.errorElement ?? null;\n  }\n  if (google) {\n    return <GoogleChart google={google} {...props} />;\n  }\n  return null;\n};\n\n/**\n * Updates the context with the props and renders ChartView.\n */\nexport const Chart: React.FC<ReactGoogleChartProps> = (userProps) => {\n  const props = { ...chartDefaultProps, ...userProps };\n  return (\n    <ContextProvider value={props}>\n      <ChartView {...props} />\n    </ContextProvider>\n  );\n};\n\nexport default Chart;\n","// Complete Google Charts Type Definition : https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/google.visualization/index.d.ts\n\nexport type GoogleVizDrawToolbar = (\n  toolbarContainer: HTMLDivElement,\n  components: GoogleChartToolbarItem[],\n) => any;\n\nexport type GoogleViz = {\n  charts: GoogleChartLoader;\n  visualization: {\n    ChartWrapper: GoogleChartWrapper;\n    ControlWrapper: GoogleChartControl;\n    ChartEditor: GoogleChartEditor;\n    DataTable: GoogleDataTable;\n    events: GoogleVizEvents;\n    arrayToDataTable: GoogleArrayToDataTable;\n    drawToolbar: GoogleVizDrawToolbar;\n    [otherKeys: string]: any;\n  };\n};\n\nexport type GoogleChartTicks = (number | Date)[];\n\nexport type GoogleChartEditor = {\n  new (): GoogleChartEditor;\n  openDialog: (\n    chartWrapper: GoogleChartWrapper,\n    chartEditorOptions?: {\n      dataSourceInput?: any;\n      [otherKeyMaybe: string]: any;\n    },\n  ) => null;\n  getChartWrapper: () => GoogleChartWrapper;\n  setChartWrapper: (chartWrapper: GoogleChartWrapper) => GoogleChartWrapper;\n  closeDialog: () => null;\n};\n\nexport type GoogleChartLoaderOptions = {\n  packages?: GoogleChartPackages[];\n  language?: string;\n  mapsApiKey?: string;\n};\nexport type GoogleChartLoader = {\n  load: (\n    version: GoogleChartVersion,\n    googleChartOptions: GoogleChartLoaderOptions,\n  ) => void;\n  setOnLoadCallback: (callback: () => void) => void;\n};\nexport interface ChartWrapperProps {\n  chartType: GoogleChartWrapperChartType;\n  containerId?: string;\n  options?: {\n    width?: number;\n    height?: number;\n    is3D?: boolean;\n    title?: string;\n    backgroundColor: string;\n  };\n  dataTable?: {};\n  dataSourceUrl?: string;\n  query?: string;\n  refreshInterval?: number;\n  view?: any[] | {};\n  render?: (props: ChartWrapperProps, chartWrapper: GoogleChartWrapper) => any;\n  children?: (\n    props: ChartWrapperProps,\n    chartWrapper: GoogleChartWrapper,\n  ) => any;\n}\n\nexport type VizEventsProps = {\n  chartWrapper: GoogleChartWrapper;\n  onReady?: (chartWrapper: GoogleChartWrapper) => any;\n  onError?: (chartWrapper: GoogleChartWrapper) => any;\n  onSelect?: (selection: Array<{ row?: any; column?: any }>) => any;\n  render?: (props: VizEventsProps, chartWrapper: GoogleChartWrapper) => any;\n  children?: (props: VizEventsProps, chartWrapper: GoogleChartWrapper) => any;\n};\n\n/*\n *\n * <GoogleChartsTypes>\n *\n */\n\n/*\n *\n * Reference + Docs:\n * https://developers.google.com/chart/interactive/docs/reference#constructor_3\n * https://developers.google.com/chart/interactive/docs/reference#google.visualization.drawchart\n *\n */\nexport type GoogleChartWrapperChartType =\n  | \"AnnotationChart\"\n  | \"AreaChart\"\n  | \"BarChart\"\n  | \"BubbleChart\"\n  | \"Calendar\"\n  | \"CandlestickChart\"\n  | \"ColumnChart\"\n  | \"ComboChart\"\n  | \"DiffChart\"\n  | \"DonutChart\"\n  | \"Gantt\"\n  | \"Gauge\"\n  | \"GeoChart\"\n  | \"Histogram\"\n  | \"LineChart\"\n  | \"Line\"\n  | \"Bar\"\n  | \"Map\"\n  | \"OrgChart\"\n  | \"PieChart\"\n  | \"Sankey\"\n  | \"ScatterChart\"\n  | \"Scatter\"\n  | \"SteppedAreaChart\"\n  | \"Table\"\n  | \"Timeline\"\n  | \"TreeMap\"\n  | \"WaterfallChart\"\n  | \"WordTree\";\n\n// https://developers.google.com/chart/interactive/docs/reference#google.visualization.drawchart\nexport interface ChartWrapperOptions {\n  chartType: string;\n  containerId: string;\n  options: Partial<{\n    width: number;\n    height: number;\n    is3D: boolean;\n    title: string;\n    backgroundColor:\n      | string\n      | { fill: string; stroke: string; strokeWidth: number };\n    hAxis?: {\n      minValue?: any;\n      maxValue?: any;\n      ticks?: GoogleChartTicks;\n      title?: string;\n      viewWindow?: { max?: any; min?: any };\n      [otherOptionKey: string]: any;\n    };\n    vAxis?: {\n      minValue?: any;\n      maxValue?: any;\n      ticks?: GoogleChartTicks;\n      title?: string;\n      viewWindow?: { max?: any; min?: any };\n      [otherOptionKey: string]: any;\n    };\n    legend: any;\n    colors: string[];\n    [otherOptionKey: string]: any;\n  }>;\n  dataTable?: GoogleDataTable;\n  dataSourceUrl?: string;\n  query?: string;\n  refreshInterval?: number;\n  view: any[] | {};\n  [otherOptionKey: string]: any;\n}\n\nexport type GoogleChartAction = {\n  id: string;\n  text: string;\n  action: (chartWrapper: GoogleChartWrapper) => void;\n};\n\nexport type GoogleChartControlProp = {\n  controlType:\n    | \"CategoryFilter\"\n    | \"ChartRangeFilter\"\n    | \"DateRangeFilter\"\n    | \"NumberRangeFilter\"\n    | \"StringFilter\";\n  options: {};\n  controlWrapperParams?: {};\n  controlID?: string;\n  controlPosition?: \"top\" | \"bottom\";\n  controlEvents?: ReactGoogleChartEvent[];\n};\n\nexport type GoogleChartWrapper = {\n  new (chartWrapperOptions: Partial<ChartWrapperOptions>): GoogleChartWrapper;\n  draw: (chartArgs?: ChartWrapperProps) => any;\n  toJSON: () => string;\n  clone: () => GoogleChartWrapper;\n  getDataSourceUrl: () => string;\n  getDataTable: () => GoogleDataTable | null; // null if datasourceurl set or ref to DataTable\n  getChartType: () => GoogleChartWrapperChartType;\n  getChartName: () => string;\n  getChart: () => {\n    removeAction: (actionID: string) => void;\n    getSelection: () => { row?: any; column?: any }[];\n    setAction: (ChartAction: GoogleChartAction) => void;\n    getImageURI: () => void;\n    clearChart: () => void; // Clears the chart, and releases all of its allocated resources.\n  }; // ref to chart\n  getContainerId: () => string;\n  getQuery: () => string;\n  getRefreshInterval: () => number;\n  getOption: (key: string, opt_default_value?: any) => any; // returns opt_default_value if key not found\n  getOptions: () => {};\n  getSelection: () => { row?: any; column?: any }[];\n  getView: () => {} | any[]; // Same format as toJSON\n\n  setDataSourceUrl: (url: string) => void;\n  setDataTable: (table: any) => void;\n  setChartType: (chartType: GoogleChartWrapperChartType) => void;\n  setChartName: (name: string) => void; // Sets an arbitrary name for the chart. This is not shown anywhere on the chart, unless a custom chart is explicitly designed to use it.\n  setContainerId: (id: string) => void; // Sets the ID of the containing DOM element for the chart.\n  setQuery: (query_string: string) => void; // Sets a query string, if this chart queries a data source. You must also set the data source URL if specifying this value.\n  setRefreshInterval: (interval: number) => void; // Sets the refresh interval for this chart, if it queries a data source. You must also set a data source URL if specifying this value. Zero indicates no refresh.\n  setOption: (key: string, value: any) => void; // \tSets a single chart option value, where key is the option name and value is the value. To unset an option, pass in null for the value. Note that key may be a qualified name, such as 'vAxis.title'.\n  setOptions: (options_obj: Partial<ChartWrapperOptions[\"options\"]>) => void; //\n};\n\nexport type GoogleVizEventListener = {\n  key: Record<string, unknown>;\n};\n\nexport type GoogleVizEventName =\n  | \"ready\"\n  | \"error\"\n  | \"select\"\n  | \"animationfinish\"\n  | \"statechange\"\n  | \"ok\"\n  | \"cancel\"\n  | \"animationstart\";\n\nexport type GoogleVizEvents = {\n  addListener: (\n    chartWrapper: GoogleChartWrapper | GoogleChartControl | GoogleChartEditor,\n    name: GoogleVizEventName,\n    onEvent: (chartWrapper: GoogleChartWrapper) => any,\n  ) => GoogleVizEventListener;\n  removeListener: (eventListener: GoogleVizEventListener) => any;\n  removeAllListeners: (chartWrapper: GoogleChartWrapper) => any;\n};\n\nexport type GoogleChartPackages =\n  | \"corechart\"\n  | \"charteditor\"\n  | \"controls\"\n  | \"calendar\"\n  | \"gantt\"\n  | \"gauge\"\n  | \"geochart\"\n  | \"map\"\n  | \"orgchart\"\n  | \"sankey\"\n  | \"table\"\n  | \"timeline\"\n  | \"treemap\"\n  | \"wordtree\";\n\nexport type GoogleChartVersion = \"current\" | \"upcoming\" | string;\n\nexport type GoogleDataTableColumnType =\n  | \"string\"\n  | \"number\"\n  | \"boolean\"\n  | \"date\"\n  | \"datetime\"\n  | \"timeofday\";\n\n// export type GoogleDataTable = {\n//   addColumn: (type: GoogleDataTableColumnType) => number;\n// };\n\n// Reference https://developers.google.com/chart/interactive/docs/roles\nexport enum GoogleDataTableColumnRoleType {\n  annotation = \"annotation\",\n  annotationText = \"annotationText\",\n  certainty = \"certainty\",\n  emphasis = \"emphasis\",\n  interval = \"interval\",\n  scope = \"scope\",\n  style = \"style\",\n  tooltip = \"tooltip\",\n  domain = \"domain\",\n}\n\nexport type GoogleDataTableColumn =\n  | {\n      type: GoogleDataTableColumnType;\n      label?: string; //  A label for the column.\n      role?: GoogleDataTableColumnRoleType;\n      pattern?: string;\n      p?: {};\n      id?: string;\n    }\n  | string;\n\n// Ref : https://developers.google.com/chart/interactive/docs/reference#dataparam\n\nexport type GoogleDataTableCell =\n  | {\n      v?: any; // The cell value. Type should match DataTableColumn type field\n      f?: string; // A string version of the v value, formatted for display.\n      p?: {};\n    }\n  | string\n  | number\n  | boolean\n  | Date\n  | null;\n\nexport type GoogleDataTableRow = GoogleDataTableCell[];\n\nexport type GoogleDataTableJS = {\n  cols: GoogleDataTableColumn[];\n  rows: {\n    c: GoogleDataTableRow;\n  }[];\n  p?: {};\n};\n\n// Reference : https://developers.google.com/chart/interactive/docs/reference#DataTable\n\nexport type GoogleDataTableRowFilter = {\n  column: number;\n  value: any;\n  minValue?: any;\n  maxValue?: any;\n};\n\nexport type GoogleDataTableSortColumns =\n  | number\n  | {\n      column: number;\n      desc: boolean;\n    }\n  | number[]\n  | {\n      column: number;\n      desc: boolean;\n    }[];\n\nexport type GoogleDataTable = {\n  // https://developers.google.com/chart/interactive/docs/reference#dataparam\n  new (dataParam: any): GoogleDataTable;\n  addColumn: (column: GoogleDataTableColumn) => number;\n  addRow: (row?: GoogleDataTableRow) => number;\n  addRows: (rows?: GoogleDataTableRow[] | number[] | any[]) => number;\n  clone: () => GoogleDataTable;\n\n  getColumnId: (columnIndex: number) => string;\n  getColumnLabel: (columnIndex: number) => string;\n  getColumnPattern: (columnIndex: number) => string;\n  getColumnProperties: (columnIndex: number) => {};\n  getColumnProperty: (columnIndex: number, name: string) => any;\n  getColumnRange: (columnIndex: number) => {\n    min: number | null;\n    max: number | null;\n  };\n  getColumnRole: (columnIndex: number) => GoogleDataTableColumnRoleType;\n  getColumnType: (columnIndex: number) => GoogleDataTableColumnType;\n  getDistinctValues: (columnIndex: number) => any[];\n  getFilteredRows: (filters: GoogleDataTableRowFilter[]) => number[];\n  getFormattedValue: (rowIndex: number, columnIndex: number) => string;\n  getNumberOfColumns: () => number;\n  getNumberOfRows: () => number;\n  getProperties: (rowIndex: number, columnIndex: number) => {};\n  getProperty: (rowIndex: number, columnIndex: number, name: string) => any;\n  getRowProperties: (rowIndex: number) => {};\n  getRowProperty: (rowIndex: number, name: string) => any;\n  getSortedRows: (sortColumns: GoogleDataTableSortColumns) => number[];\n  getTableProperties: () => {};\n  getTableProperty: (name: string) => any;\n  getValue: (\n    rowIndex: number,\n    columnIndex: number,\n  ) => boolean | string | number | Date | number[] | null;\n  insertColumn: (\n    columnIndex: number,\n    type: GoogleDataTableColumnType,\n    label?: string,\n    id?: string,\n  ) => void;\n  insertRows: (\n    rowIndex: number,\n    numberOrArray: GoogleDataTableRow[] | number,\n  ) => void;\n  removeColumn: (columnIndex: number) => void;\n  removeColumns: (columnIndex: number, numberOfColumns: number) => void;\n  removeRow: (rowIndex: number) => void;\n  removeRows: (rowIndex: number, numberOfColumns: number) => void;\n  setCell: (\n    rowIndex: number,\n    columnIndex: number,\n    value?: any,\n    formattedValue?: string,\n    properties?: {},\n  ) => {};\n  setColumnLabel: (columnIndex: number, label: string) => void;\n  setColumnProperty: (columnIndex: number, name: string, value: any) => void;\n  setColumnProperties: (columnIndex: number, properties: {} | null) => void;\n  setFormattedValue: (\n    rowIndex: number,\n    columnIndex: number,\n    formattedValue: string,\n  ) => void;\n  setProperty: (\n    rowIndex: number,\n    columnIndex: number,\n    name: string,\n    value: any,\n  ) => void;\n  setProperties: (\n    rowIndex: number,\n    columnIndex: number,\n    properties: {} | null,\n  ) => void;\n\n  setRowProperty: (rowIndex: number, name: string, value: any) => void;\n  setRowProperties: (rowIndex: number, properties: {} | null) => void;\n  setTableProperties: (properties: {} | null) => void;\n  setValue: (rowIndex: number, columnIndex: number, value: boolean | string | number | Date | number[] | null) => void;\n  sort: (sortColumns: GoogleDataTableSortColumns) => void;\n  toJSON: () => string; // GoogleDataTableJS\n};\n\nexport type GoogleArrayToDataTable = (\n  data: any[][],\n  isFirstRowLabels?: boolean,\n) => GoogleDataTable;\n\nexport type GoogleChartOptions = {\n  width?: number;\n  height?: number;\n  is3D?: boolean;\n  backgroundColor: string;\n\n  title?: string;\n  hAxis?: {\n    minValue?: any;\n    maxValue?: any;\n    ticks?: GoogleChartTicks;\n    title?: string;\n    viewWindow?: { max?: any; min?: any; [otherOptionKey: string]: any };\n    [otherOptionKey: string]: any;\n  };\n  vAxis?: {\n    minValue?: any;\n    maxValue?: any;\n    ticks?: GoogleChartTicks;\n    title?: string;\n    viewWindow?: { max?: any; min?: any; [otherOptionKey: string]: any };\n    [otherOptionKey: string]: any;\n  };\n  bubble?: {};\n  pieHole?: number;\n  redColor?: string;\n  redFrom?: number;\n  redTo?: number;\n  yellowColor?: string;\n  yellowFrom?: number;\n  yellowTo?: number;\n  greenColor?: string;\n  greenFrom?: number;\n  greenTo?: number;\n  minorTicks?: number;\n  majorTicks?: string[];\n  legend?:\n    | string\n    | {\n        position?: string;\n        maxLines?: number;\n        [otherOptionKey: string]: any;\n      };\n  curveType?: string;\n  showTooltip?: boolean;\n  showInfoWindow?: boolean;\n  allowHtml?: boolean;\n  isStacked?: string | boolean;\n  minColor?: string;\n  midColor?: string;\n  maxColor?: string;\n  headerHeight?: number;\n  fontColor?: string;\n  showScale?: boolean;\n  bar?: { groupWidth?: string }; // Remove space between bars.\n  candlestick?: {\n    fallingColor?: { strokeWidth?: number; fill?: string }; // red\n    risingColor?: { strokeWidth?: number; fill?: string }; // green\n    [otherOptionKey: string]: any;\n  };\n  wordtree?: {\n    format?: string;\n    word?: string;\n    [otherOptionKey: string]: any;\n  };\n  [otherOptionKey: string]: any;\n};\n\n/*\n *\n * </GoogleChartsTypes>\n *\n */\n\nexport type WindowWithMaybeGoogle = Window & { google?: any };\n\nexport type ReactGoogleChartEvent = {\n  eventName: GoogleVizEventName;\n  callback: (eventCallbackArgs: {\n    chartWrapper: GoogleChartWrapper | null;\n    controlWrapper?: GoogleChartControl;\n    props: ReactGoogleChartProps;\n    google: GoogleViz;\n    eventArgs: any;\n  }) => void;\n};\n\nexport type GoogleChartToolbarItem = {\n  type: \"igoogle\" | \"html\" | \"csv\" | \"htmlcode\";\n  datasource: string;\n  gadget?: string;\n  userPrefs?: {\n    \"3d\": number;\n    [otherKeyMaybe: string]: any;\n  };\n};\n\nexport type GoogleChartFormatter = {\n  column: number | number[];\n  type:\n    | \"ArrowFormat\"\n    | \"BarFormat\"\n    | \"ColorFormat\"\n    | \"DateFormat\"\n    | \"NumberFormat\"\n    | \"PatternFormat\";\n  options?: {};\n  ranges?: [\n    // from\n    any,\n    // to\n    any,\n    // color\n    string,\n    // bgcolor\n    string,\n  ][];\n};\n\nexport type ReactGoogleChartProps = {\n  height?: string | number;\n  width?: string | number;\n  graphID?: string;\n  chartType: GoogleChartWrapperChartType;\n  diffdata?: {\n    old: any;\n    new: any;\n  };\n  options?: ChartWrapperOptions[\"options\"];\n  loader?: JSX.Element;\n  errorElement?: JSX.Element;\n  data?: any[] | {};\n  rows?: GoogleDataTableRow[];\n  columns?: GoogleDataTableColumn[];\n  chartActions?: GoogleChartAction[];\n  chartEvents?: ReactGoogleChartEvent[];\n  chartVersion?: GoogleChartVersion;\n  chartPackages?: GoogleChartPackages[];\n  chartLanguage?: string;\n  mapsApiKey?: string;\n  graph_id?: string;\n  legendToggle?: boolean;\n  legend_toggle?: boolean;\n  onLoad?: (\n    google: GoogleViz,\n    paramsV2: {\n      google: GoogleViz;\n      chartWrapper: GoogleChartWrapper;\n      chartDashboard: GoogleChartDashboard;\n      chartEditor?: GoogleChartEditor | null;\n    },\n  ) => void;\n  getChartWrapper?: (\n    chartWrapper: GoogleChartWrapper,\n    google: GoogleViz,\n  ) => void;\n  getChartEditor?: (args: {\n    chartEditor: GoogleChartEditor;\n    chartWrapper: GoogleChartWrapper;\n    google: GoogleViz;\n  }) => void;\n  className?: string;\n  style?: React.CSSProperties;\n  formatters?: GoogleChartFormatter[];\n  spreadSheetUrl?: string;\n  spreadSheetQueryParameters?: {\n    headers: number;\n    gid?: number | string;\n    sheet?: string;\n    query?: string;\n    access_token?: string;\n  };\n  rootProps?: any;\n  controls?: GoogleChartControlProp[];\n  render?: ReactGoogleChartDashboardRender;\n  //https://developers.google.com/chart/interactive/docs/gallery/toolbar#example_1\n  toolbarItems?: GoogleChartToolbarItem[];\n  toolbarID?: string;\n  chartWrapperParams?: any;\n  /**\n   * URL of the chart loader script. Defaults to https://www.gstatic.com/charts/loader.js\n   * Added to support loading from a different CDN in China to optimize performance\n   */\n  chartLoaderScriptUrl?: string;\n};\n\nexport type GoogleChartDashboard = {\n  draw: (data: GoogleDataTable) => void;\n  bind: (\n    controlWrapperOrWrappers: GoogleChartControl | GoogleChartControl[],\n    chartWrapper: GoogleChartWrapper,\n  ) => void;\n};\n\nexport type ReactGoogleChartDashboardRender = ({\n  renderControl,\n  renderChart,\n  renderToolbar,\n}: {\n  renderControl: (\n    filter: ({\n      control,\n      controlProp,\n    }: {\n      control: GoogleChartControl;\n      controlProp: GoogleChartControlProp;\n    }) => boolean,\n  ) => any;\n  renderChart: () => any;\n  renderToolbar: () => any;\n}) => any;\nexport type GoogleChartControlOptions = any;\nexport type GoogleChartControl = {\n  new (chartWrapperOptions: GoogleChartControlOptions): GoogleChartControl;\n  getContainerId: () => string;\n  getOptions: () => GoogleChartControlOptions;\n  getState: () => any;\n  setState: (state: any) => void;\n  setOptions: (options: GoogleChartControlOptions) => void;\n  setControlType: (controlType: string) => void;\n};\n\nexport type ReactGoogleChartState = {\n  loadingStatus: \"loading\" | \"errored\" | \"ready\";\n  google: null | GoogleViz;\n  // hiddenColumns: string[];\n};\n\nexport type ReactGoogleChartContext = {\n  data: ReactGoogleChartProps[\"data\"];\n  rows: ReactGoogleChartProps[\"rows\"] | null;\n  columns: ReactGoogleChartProps[\"columns\"] | null;\n  diffdata: ReactGoogleChartProps[\"diffdata\"] | null;\n  options: ReactGoogleChartProps[\"options\"] | null;\n  legend_toggle: ReactGoogleChartProps[\"legend_toggle\"] | null;\n  legendToggle: ReactGoogleChartProps[\"legendToggle\"] | null;\n  chartType: ReactGoogleChartProps[\"chartType\"] | null;\n  formatters: ReactGoogleChartProps[\"formatters\"] | null;\n  spreadSheetUrl: ReactGoogleChartProps[\"spreadSheetUrl\"] | null;\n  spreadSheetQueryParameters:\n    | ReactGoogleChartProps[\"spreadSheetQueryParameters\"]\n    | null;\n};\n\nexport interface ApplyFormattersParams {\n  dataTable: GoogleDataTable;\n  formatters: GoogleChartFormatter[];\n  google: GoogleViz;\n}\n\nexport type GoogleChartControlAndProp = {\n  controlProp: GoogleChartControlProp;\n  control: GoogleChartControl;\n};\n\nexport type UseChartControlsParams = ReactGoogleChartProps & {\n  google: GoogleViz;\n  chartWrapper: GoogleChartWrapper | null;\n  chartDashboard: GoogleChartDashboard | null;\n};\n"],"names":["useLoadScript","src","isLoading","setIsLoading","useState","error","setError","isSuccess","setIsSuccess","onLoad","useEffect","document","Error","foundScript","querySelector","dataset","loaded","script","createElement","onLoadWithMarker","addEventListener","err","console","head","append","isGoogleReady","google","charts","isGoogleChartsReady","props","controls","toolbarItems","getChartEditor","visualization","ChartWrapper","Dashboard","ChartEditor","drawToolbar","getGoogleInstanceFromWindow","window","useLoadGoogleCharts","chartVersion","chartPackages","chartLanguage","mapsApiKey","googleCharts","setGoogleCharts","scriptInitializationError","setScriptInitializationError","googleChartsInitializationError","setGoogleChartsInitializationError","scriptLoadingError","chartLoaderScriptUrl","load","packages","language","setOnLoadCallback","chartDefaultProps","legend_toggle","options","legendToggle","getChartWrapper","spreadSheetQueryParameters","headers","gid","rootProps","chartWrapperParams","GoogleChartControls","isReady","chartControls","filter","length","controlProp","control","map","div","key","getContainerId","id","uniqueID","generateUniqueID","GoogleChartControlsInternal","initializeControls","googleChartControls","i","controlType","controlWrapperParams","setState","setOptions","setControlType","listenToControlEvents","flatMap","chartControl","controlEvents","event","callback","eventName","events","addListener","args","chartWrapper","controlWrapper","eventArgs","createControlId","controlID","createChartControls","controlIDMaybe","controlOptions","ControlWrapper","containerId","addControls","chartDashboard","bind","useCreateChartControls","setChartControls","React","controlAndProp","useMemo","undefined","useListenToControlEvents","listeners","forEach","listener","removeListener","useChartControls","renderControl","Boolean","useChartId","chartIdRef","useRef","getChartId","graphID","graph_id","chartIdFromProps","currentChartId","current","chartId","DEFAULT_CHART_COLORS","loadDataTableFromSpreadSheet","googleViz","spreadSheetUrl","urlParams","Promise","resolve","reject","queryString","query","encodeURIComponent","sheet","access_token","urlQueryString","urlToSpreadSheet","Query","send","response","isError","getMessage","getDetailedMessage","getDataTable","GRAY_COLOR","GoogleChartInternal","grayOutHiddenColumnsLabel","hiddenColumns","googleChartWrapper","dataTable","columnCount","getNumberOfColumns","hasAHiddenColumn","colors","Array","from","_dontcare","columnID","getColumnId","includes","draw","listenToLegendToggle","hiddenColumnsState","setHiddenColumns","chart","getChart","selection","getSelection","row","columnIndex","column","state","colID","data","diffdata","rows","columns","chartType","formatters","googleChartDashboard","chartDiff","oldData","arrayToDataTable","old","newData","new","prototype","computeDiff","DataTable","isArray","viewColumns","fill","_c","label","getColumnLabel","type","getColumnType","calc","getChartType","clearChart","setChartType","viewTable","DataView","setColumns","setDataTable","applyFormatters","formatter","vizFormatter","ArrowFormat","format","BarFormat","ColorFormat","ranges","range","addRange","DateFormat","NumberFormat","PatternFormat","warn","useGoogleChartDataTable","onResize","initialize","push","destroy","removeEventListener","listenToEvents","chartEvents","useGoogleChartEvents","GoogleChart","setGoogleChartWrapper","setGoogleChartDashboard","dashboardRef","toolbarRef","chartConfig","chartEditor","renderChart","width","height","style","className","divStyle","renderToolBar","ref","render","renderToolbar","controlPosition","ChartContext","createContext","ContextProvider","children","value","Provider","ChartView","loader","errorElement","Chart","userProps","GoogleDataTableColumnRoleType"],"mappings":"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"}