{"version":3,"file":"index.mjs","sources":["../src/utils.ts","../src/color.ts","../src/parser.ts","../src/plugin.ts"],"sourcesContent":["import Colors from \"color-name\"\n\nimport type { NamedColor } from \"./types\"\n\nconst VALID_HEX = /^#([\\da-f]{3}|[\\da-f]{6})([\\da-f]{2})?/i\nconst VALID_TW_COLOR_CLASS = /^[a-z]+-\\d{2,3}(?![\\w-]+)/i\nconst VALID_COLOR_FORM = `${VALID_HEX.source}|${VALID_TW_COLOR_CLASS.source}`\nconst VALID_ALPHA = /\\/(?=(\\b([1-9]|[1-9]\\d|100)\\b))/i\n\nexport const isParsableString = (value: unknown): value is string =>\n  typeof value === \"string\" &&\n  // No need to parse these as chart.js can readily accept it\n  !/rgba?|hsla?|transparent/i.test(value)\n\nexport const isValidArray = (value: unknown): value is string[] =>\n  Array.isArray(value) && value.every((v) => typeof v === \"string\")\n\nexport const isHex = (value: string): boolean => VALID_HEX.test(value)\nexport const isNamedColor = (value: string): value is NamedColor =>\n  value in Colors\n\n/**\n * Checks first if the color is in a valid form, then\n * checks if it has a valid `alpha` color channel.\n */\nexport const hasValidAlpha = (value: string): boolean =>\n  // TODO There should be room for improvement here\n  (isNamedColor(value.split(\"/\")[0]) && VALID_ALPHA.test(value)) || // named colors\n  new RegExp(`(?:${VALID_COLOR_FORM})${VALID_ALPHA.source}`).test(value)\n","// Color utilities taken from the CSS framework tailwindcss, which is\n// Copyright (c) Tailwind Labs, Inc. (https://tailwindcss.com/)\n// and used under the terms of the MIT license\n// @see https://github.com/tailwindlabs/tailwindcss/blob/main/LICENSE\n\nimport type { RecursiveKeyValuePair } from \"tailwindcss/types/config\"\n\nimport Colors from \"color-name\"\nimport invariant from \"tiny-invariant\"\n\nimport type { Color, TailwindColorGroup, Writeable } from \"./types\"\n\nimport { isNamedColor } from \"./utils\"\n\nconst HEX = /^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})?$/i\nconst SHORT_HEX = /^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])?$/i\n\n// @see https://github.com/tailwindlabs/tailwindcss/blob/main/src/util/flattenColorPalette.js\nexport const flattenColorPalette = (\n  colors: RecursiveKeyValuePair,\n): TailwindColorGroup => {\n  const result: Writeable<TailwindColorGroup> = {}\n  Object.entries(colors).forEach(([color, value]) => {\n    if (typeof value === \"string\") result[color] = value\n    else {\n      const nestedColors = flattenColorPalette(value)\n      Object.entries(nestedColors).forEach(([number, hex]) => {\n        result[`${color}${number === \"DEFAULT\" ? \"\" : `-${number}`}`] = hex\n      })\n    }\n  })\n  return result\n}\n\n// @see https://github.com/tailwindlabs/tailwindcss/blob/main/src/util/color.js\nexport function parseColor(value: string): Color {\n  value = value.trim()\n\n  if (value === \"transparent\") {\n    return { mode: \"rgb\", values: [\"0\", \"0\", \"0\"], alpha: \"0\" }\n  }\n\n  if (isNamedColor(value)) {\n    return {\n      mode: \"rgb\",\n      values: Colors[value].map((v) => v.toString()),\n    }\n  }\n\n  // We already filter out and validate before even trying\n  // to parse, so this should now always match a hex\n  const hex = HEX.exec(\n    // eslint-disable-next-line @typescript-eslint/max-params\n    value.replace(SHORT_HEX, (_, r, g, b, a) =>\n      [\"#\", r, r, g, g, b, b, a ? a + a : \"\"].join(\"\"),\n    ),\n  )\n\n  invariant(hex, `Invalid value: ${value}`)\n\n  return {\n    mode: \"rgb\",\n    values: [\n      Number.parseInt(hex[1], 16),\n      Number.parseInt(hex[2], 16),\n      Number.parseInt(hex[3], 16),\n    ].map((v) => v.toString()),\n    alpha: hex[4] ? (Number.parseInt(hex[4], 16) / 255).toString() : undefined,\n  }\n}\n\nexport function formatColor({ mode, values, alpha }: Color): string {\n  return `${mode}(${values.join(\" \")}${alpha ? ` / ${alpha}` : \"\"})`\n}\n","import type { Config as TailwindConfig } from \"tailwindcss\"\nimport type { RecursiveKeyValuePair } from \"tailwindcss/types/config\"\n\nimport resolveConfig from \"tailwindcss/resolveConfig\"\nimport invariant from \"tiny-invariant\"\n\nimport type {\n  Maybe,\n  TailwindColorGroup,\n  TwColorValidatorOptions,\n} from \"./types\"\n\nimport { flattenColorPalette, formatColor, parseColor } from \"./color\"\nimport * as utils from \"./utils\"\n\nclass TailwindColorsParser {\n  public config: TailwindConfig\n  public colorPalette: TailwindColorGroup\n\n  public constructor(config: TailwindConfig) {\n    const colors = {\n      ...resolveConfig(config).theme.colors,\n    } as Maybe<RecursiveKeyValuePair>\n\n    invariant(colors, \"TailwindCSS theme colors is undefined!\")\n\n    this.colorPalette = flattenColorPalette(colors)\n    this.config = config\n  }\n\n  public parse<T extends string[] | string>(value: T): T\n  public parse(value: string[] | string): string[] | string {\n    if (Array.isArray(value)) {\n      return value.map((v) => this.parse(v))\n    }\n\n    if (!utils.isParsableString(value)) return value\n\n    if (utils.hasValidAlpha(value)) {\n      const [color, alpha] = value.split(\"/\")\n\n      return formatColor({\n        ...parseColor(this.colorPalette[color.trim()] ?? color),\n        alpha: Number.parseInt(alpha, 10) / 100,\n      })\n    }\n\n    return this.colorPalette[value.trim()] ?? formatColor(parseColor(value))\n  }\n\n  /**\n   * Checks if a given color/value is valid, and\n   * whether it should to be parsed.\n   */\n  public isParsable(\n    value: unknown,\n    { strict = false, hex, named }: TwColorValidatorOptions = {},\n  ): value is string[] | string {\n    if (!value) return false\n\n    if (!strict) {\n      // Since some colors are stored in arrays, assuming all values\n      // in the array are strings, the array itself is valid\n      if (utils.isValidArray(value)) return true\n\n      if (!utils.isParsableString(value)) return false\n\n      if (hex) {\n        return utils.isHex(value)\n      }\n\n      if (named) {\n        return utils.isNamedColor(value)\n      }\n\n      // Ignore hex and named colors without a valid alpha\n      return (\n        Object.hasOwn(this.colorPalette, value) || utils.hasValidAlpha(value)\n      )\n    }\n\n    // Strictly from the specified config\n    return (\n      utils.isParsableString(value) && Object.hasOwn(this.colorPalette, value)\n    )\n  }\n}\n\nexport default TailwindColorsParser\n","import type { Plugin } from \"chart.js\"\nimport type { Config as TailwindConfig } from \"tailwindcss\"\n\nimport get from \"lodash/get\"\nimport set from \"lodash/set\"\n\nimport type { ParsableOptions, ValidValues } from \"./types\"\n\nimport TailwindColorsParser from \"./parser\"\n\nconst parsableOptions = [\n  \"color\",\n  \"borderColor\",\n  \"backgroundColor\",\n  \"hoverBorderColor\",\n  \"hoverBackgroundColor\",\n  \"pointBorderColor\",\n  \"pointBackgroundColor\",\n  \"pointHoverBorderColor\",\n  \"pointHoverBackgroundColor\",\n  \"fill.above\",\n  \"fill.below\",\n]\n\nconst twColorsPlugin = (\n  tailwindConfig: TailwindConfig,\n  defaults: Partial<ParsableOptions> = {},\n): Plugin => {\n  const parser = new TailwindColorsParser(tailwindConfig)\n\n  return {\n    id: \"tailwindcss-colors\",\n\n    beforeLayout: (chart): void => {\n      parsableOptions.forEach((parsableOpt) => {\n        const chartDefaultColor = get(chart.options, parsableOpt) as ValidValues\n        const defaultOptColor = defaults[parsableOpt] ?? chartDefaultColor\n\n        if (parser.isParsable(defaultOptColor)) {\n          set(chart.options, parsableOpt, parser.parse(defaultOptColor))\n        }\n\n        chart.config.data.datasets.forEach((dataset) => {\n          const color = get(dataset, parsableOpt, defaultOptColor)\n\n          if (parser.isParsable(color)) {\n            set(dataset, parsableOpt, parser.parse(color))\n          }\n        })\n      })\n    },\n\n    // Handle scriptable options\n    beforeDatasetDraw: (chart, args): void => {\n      parsableOptions.forEach((parsableOpt) => {\n        const chartOptColor = get(chart.options, parsableOpt) as ValidValues\n        const defaultOptColor = defaults[parsableOpt] ?? chartOptColor\n\n        const metaDataset = args.meta.dataset\n\n        if (!metaDataset) return\n\n        const metaDatasetOptionsColor = get(\n          metaDataset.options,\n          parsableOpt,\n          defaultOptColor,\n        )\n\n        if (parser.isParsable(metaDatasetOptionsColor)) {\n          set(\n            metaDataset.options,\n            parsableOpt,\n            parser.parse(metaDatasetOptionsColor),\n          )\n        }\n\n        const currentDataset = chart.data.datasets[args.index]\n\n        currentDataset.data.forEach((_, index) => {\n          const currentElement = args.meta.data[index]\n          const resolvedColor = get(\n            currentElement.options,\n            parsableOpt,\n            defaultOptColor,\n          )\n\n          if (parser.isParsable(resolvedColor)) {\n            set(\n              currentElement.options,\n              parsableOpt,\n              parser.parse(resolvedColor),\n            )\n          }\n        })\n      })\n    },\n  }\n}\n\nexport default twColorsPlugin\n"],"names":["utils.isParsableString","utils.hasValidAlpha","utils.isValidArray","utils.isHex","utils.isNamedColor"],"mappings":"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"}