{"version":3,"sources":["../node_modules/.pnpm/memoizerific@1.11.3/node_modules/memoizerific/memoizerific.js","../src/preset/manager.ts","../src/constants.ts","../src/Tool.tsx","../src/utils/index.ts","../src/components/ColorIcon.tsx"],"names":["require_memoizerific","__commonJSMin","exports","module","f","g","define","e","t","n","r","s","o","a","__require","i","_dereq_","forceSimilar","Similar","key","index","val","callback","thisArg","val1","val2","MapOrSimilar","limit","cache","lru","fn","memoizerific","currentCache","newMap","fnResult","argsLengthMinusOne","lruPath","isMemoized","moveToMostRecentLru","removeCachedResult","lruLen","lruPathLen","isMatch","ii","isEqual","removedLru","removedLruLen","currentLru","tmp","addons","Addon_TypesEnum","ADDON_ID","TOOL_ID","PARAM_KEY","import_memoizerific","React","useCallback","useEffect","useMemo","useState","useGlobals","IconButton","Icons","TooltipLinkList","WithTooltip","defaultOptions","getConfig","parameters","options","getSelectedThemeName","list","defaultTheme","currentSelectedValue","getSelectedTheme","themeName","name","styled","ColorIcon","background","theme","createThemeSelectorItem","memoize","id","title","color","hasSwatch","change","active","getDisplayableState","props","state","clearable","selectedThemeName","availableThemeSelectorItems","selectedTheme","dataTheme","DataThemeSelector","themeConfig","setThemeConfig","themeToolState","setThemeToolState","themes","updateThemeGlobals","args","onChange","items","prevState","viewMode"],"mappings":"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","sourcesContent":["(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.memoizerific = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\nmodule.exports = function(forceSimilar) {\n\tif (typeof Map !== 'function' || forceSimilar) {\n\t\tvar Similar = _dereq_('./similar');\n\t\treturn new Similar();\n\t}\n\telse {\n\t\treturn new Map();\n\t}\n}\n\n},{\"./similar\":2}],2:[function(_dereq_,module,exports){\nfunction Similar() {\n\tthis.list = [];\n\tthis.lastItem = undefined;\n\tthis.size = 0;\n\n\treturn this;\n}\n\nSimilar.prototype.get = function(key) {\n\tvar index;\n\n\tif (this.lastItem && this.isEqual(this.lastItem.key, key)) {\n\t\treturn this.lastItem.val;\n\t}\n\n\tindex = this.indexOf(key);\n\tif (index >= 0) {\n\t\tthis.lastItem = this.list[index];\n\t\treturn this.list[index].val;\n\t}\n\n\treturn undefined;\n};\n\nSimilar.prototype.set = function(key, val) {\n\tvar index;\n\n\tif (this.lastItem && this.isEqual(this.lastItem.key, key)) {\n\t\tthis.lastItem.val = val;\n\t\treturn this;\n\t}\n\n\tindex = this.indexOf(key);\n\tif (index >= 0) {\n\t\tthis.lastItem = this.list[index];\n\t\tthis.list[index].val = val;\n\t\treturn this;\n\t}\n\n\tthis.lastItem = { key: key, val: val };\n\tthis.list.push(this.lastItem);\n\tthis.size++;\n\n\treturn this;\n};\n\nSimilar.prototype.delete = function(key) {\n\tvar index;\n\n\tif (this.lastItem && this.isEqual(this.lastItem.key, key)) {\n\t\tthis.lastItem = undefined;\n\t}\n\n\tindex = this.indexOf(key);\n\tif (index >= 0) {\n\t\tthis.size--;\n\t\treturn this.list.splice(index, 1)[0];\n\t}\n\n\treturn undefined;\n};\n\n\n// important that has() doesn't use get() in case an existing key has a falsy value, in which case has() would return false\nSimilar.prototype.has = function(key) {\n\tvar index;\n\n\tif (this.lastItem && this.isEqual(this.lastItem.key, key)) {\n\t\treturn true;\n\t}\n\n\tindex = this.indexOf(key);\n\tif (index >= 0) {\n\t\tthis.lastItem = this.list[index];\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\nSimilar.prototype.forEach = function(callback, thisArg) {\n\tvar i;\n\tfor (i = 0; i < this.size; i++) {\n\t\tcallback.call(thisArg || this, this.list[i].val, this.list[i].key, this);\n\t}\n};\n\nSimilar.prototype.indexOf = function(key) {\n\tvar i;\n\tfor (i = 0; i < this.size; i++) {\n\t\tif (this.isEqual(this.list[i].key, key)) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\n// check if the numbers are equal, or whether they are both precisely NaN (isNaN returns true for all non-numbers)\nSimilar.prototype.isEqual = function(val1, val2) {\n\treturn val1 === val2 || (val1 !== val1 && val2 !== val2);\n};\n\nmodule.exports = Similar;\n},{}],3:[function(_dereq_,module,exports){\nvar MapOrSimilar = _dereq_('map-or-similar');\n\nmodule.exports = function (limit) {\n\tvar cache = new MapOrSimilar(undefined === 'true'),\n\t\tlru = [];\n\n\treturn function (fn) {\n\t\tvar memoizerific = function () {\n\t\t\tvar currentCache = cache,\n\t\t\t\tnewMap,\n\t\t\t\tfnResult,\n\t\t\t\targsLengthMinusOne = arguments.length - 1,\n\t\t\t\tlruPath = Array(argsLengthMinusOne + 1),\n\t\t\t\tisMemoized = true,\n\t\t\t\ti;\n\n\t\t\tif ((memoizerific.numArgs || memoizerific.numArgs === 0) && memoizerific.numArgs !== argsLengthMinusOne + 1) {\n\t\t\t\tthrow new Error('Memoizerific functions should always be called with the same number of arguments');\n\t\t\t}\n\n\t\t\t// loop through each argument to traverse the map tree\n\t\t\tfor (i = 0; i < argsLengthMinusOne; i++) {\n\t\t\t\tlruPath[i] = {\n\t\t\t\t\tcacheItem: currentCache,\n\t\t\t\t\targ: arguments[i]\n\t\t\t\t};\n\n\t\t\t\t// climb through the hierarchical map tree until the second-last argument has been found, or an argument is missing.\n\t\t\t\t// if all arguments up to the second-last have been found, this will potentially be a cache hit (determined later)\n\t\t\t\tif (currentCache.has(arguments[i])) {\n\t\t\t\t\tcurrentCache = currentCache.get(arguments[i]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tisMemoized = false;\n\n\t\t\t\t// make maps until last value\n\t\t\t\tnewMap = new MapOrSimilar(undefined === 'true');\n\t\t\t\tcurrentCache.set(arguments[i], newMap);\n\t\t\t\tcurrentCache = newMap;\n\t\t\t}\n\n\t\t\t// we are at the last arg, check if it is really memoized\n\t\t\tif (isMemoized) {\n\t\t\t\tif (currentCache.has(arguments[argsLengthMinusOne])) {\n\t\t\t\t\tfnResult = currentCache.get(arguments[argsLengthMinusOne]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tisMemoized = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!isMemoized) {\n\t\t\t\tfnResult = fn.apply(null, arguments);\n\t\t\t\tcurrentCache.set(arguments[argsLengthMinusOne], fnResult);\n\t\t\t}\n\n\t\t\tif (limit > 0) {\n\t\t\t\tlruPath[argsLengthMinusOne] = {\n\t\t\t\t\tcacheItem: currentCache,\n\t\t\t\t\targ: arguments[argsLengthMinusOne]\n\t\t\t\t};\n\n\t\t\t\tif (isMemoized) {\n\t\t\t\t\tmoveToMostRecentLru(lru, lruPath);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlru.push(lruPath);\n\t\t\t\t}\n\n\t\t\t\tif (lru.length > limit) {\n\t\t\t\t\tremoveCachedResult(lru.shift());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmemoizerific.wasMemoized = isMemoized;\n\t\t\tmemoizerific.numArgs = argsLengthMinusOne + 1;\n\n\t\t\treturn fnResult;\n\t\t};\n\n\t\tmemoizerific.limit = limit;\n\t\tmemoizerific.wasMemoized = false;\n\t\tmemoizerific.cache = cache;\n\t\tmemoizerific.lru = lru;\n\n\t\treturn memoizerific;\n\t};\n};\n\n// move current args to most recent position\nfunction moveToMostRecentLru(lru, lruPath) {\n\tvar lruLen = lru.length,\n\t\tlruPathLen = lruPath.length,\n\t\tisMatch,\n\t\ti, ii;\n\n\tfor (i = 0; i < lruLen; i++) {\n\t\tisMatch = true;\n\t\tfor (ii = 0; ii < lruPathLen; ii++) {\n\t\t\tif (!isEqual(lru[i][ii].arg, lruPath[ii].arg)) {\n\t\t\t\tisMatch = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (isMatch) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tlru.push(lru.splice(i, 1)[0]);\n}\n\n// remove least recently used cache item and all dead branches\nfunction removeCachedResult(removedLru) {\n\tvar removedLruLen = removedLru.length,\n\t\tcurrentLru = removedLru[removedLruLen - 1],\n\t\ttmp,\n\t\ti;\n\n\tcurrentLru.cacheItem.delete(currentLru.arg);\n\n\t// walk down the tree removing dead branches (size 0) along the way\n\tfor (i = removedLruLen - 2; i >= 0; i--) {\n\t\tcurrentLru = removedLru[i];\n\t\ttmp = currentLru.cacheItem.get(currentLru.arg);\n\n\t\tif (!tmp || !tmp.size) {\n\t\t\tcurrentLru.cacheItem.delete(currentLru.arg);\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n// check if the numbers are equal, or whether they are both precisely NaN (isNaN returns true for all non-numbers)\nfunction isEqual(val1, val2) {\n\treturn val1 === val2 || (val1 !== val1 && val2 !== val2);\n}\n},{\"map-or-similar\":1}]},{},[3])(3)\n});","import { addons } from \"@storybook/manager-api\";\nimport { Addon_TypesEnum } from \"@storybook/types\";\n\nimport { ADDON_ID, TOOL_ID } from \"@/constants\";\nimport { DataThemeSelector } from \"@/Tool\";\n\naddons.register(ADDON_ID, () => {\n  // Register the tool\n  addons.add(TOOL_ID, {\n    title: \"Data Theme Switcher\",\n    type: Addon_TypesEnum.TOOL,\n    match: ({ viewMode }) => !!viewMode?.match(/^(story|docs)$/),\n    render: DataThemeSelector,\n  });\n});\n","export const ADDON_ID = \"storybook/addon-data-theme-switcher\";\nexport const TOOL_ID = `${ADDON_ID}/tool`;\nexport const PARAM_KEY = \"dataTheme\";\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useGlobals } from \"@storybook/manager-api\";\nimport {\n  IconButton,\n  Icons,\n  TooltipLinkList,\n  WithTooltip,\n} from \"@storybook/components\";\nimport memoize from \"memoizerific\";\n\nimport { PARAM_KEY, TOOL_ID } from \"@/constants\";\nimport { getConfig, getSelectedTheme, getSelectedThemeName } from \"@/utils\";\nimport { ColorIcon } from \"@/components\";\nimport type {\n  Theme,\n  ThemeConfig,\n  ThemeGlobals,\n  ThemeSelectorItem,\n  UpdateThemeGlobalsFn,\n} from \"@/types\";\n\ninterface ThemeToolState {\n  selected: string | undefined;\n  expanded: boolean;\n}\n\nconst createThemeSelectorItem = memoize(1000)(\n  (\n    id: string,\n    title: string,\n    color: string,\n    hasSwatch: boolean,\n    change: (arg: { selected: string; expanded: boolean }) => void,\n    active: boolean\n  ): ThemeSelectorItem => ({\n    id,\n    title,\n    onClick: () => {\n      change({ selected: id, expanded: false });\n    },\n    value: id,\n    right: hasSwatch ? <ColorIcon background={color} /> : undefined,\n    active,\n  })\n);\n\nconst getDisplayableState = memoize(10)((\n  props: ThemeConfig,\n  state: ThemeToolState,\n  change: (arg: { selected: string; expanded: boolean }) => void\n) => {\n  const { clearable, list, default: defaultTheme } = getConfig(props);\n\n  const selectedThemeName = getSelectedThemeName(\n    list,\n    defaultTheme,\n    state.selected\n  );\n\n  let availableThemeSelectorItems: ThemeSelectorItem[] = [];\n  let selectedTheme: Theme | undefined;\n\n  if (selectedThemeName !== \"none\" && clearable) {\n    availableThemeSelectorItems.push(\n      createThemeSelectorItem(\n        \"none\",\n        \"Clear data-theme\",\n        \"transparent\",\n        false,\n        change,\n        false\n      )\n    );\n  }\n\n  if (list.length) {\n    availableThemeSelectorItems = [\n      ...availableThemeSelectorItems,\n      ...list.map(({ dataTheme, color, name }) =>\n        createThemeSelectorItem(\n          name ?? dataTheme,\n          name ?? dataTheme,\n          color ?? \"transparent\",\n          true,\n          change,\n          name === selectedThemeName\n        )\n      ),\n    ];\n    selectedTheme = getSelectedTheme(list, selectedThemeName);\n  }\n\n  return {\n    items: availableThemeSelectorItems,\n    selectedTheme,\n  };\n});\n\nexport const DataThemeSelector = () => {\n  const [themeConfig, setThemeConfig] = useState<ThemeConfig>({\n    list: [],\n  });\n\n  const [themeToolState, setThemeToolState] = useState<ThemeToolState>({\n    selected: undefined,\n    expanded: false,\n  });\n\n  const [{ dataTheme, dataThemes: themes }, updateThemeGlobals] =\n    useGlobals() as [ThemeGlobals, UpdateThemeGlobalsFn];\n\n  useEffect(() => {\n    setThemeConfig({ default: dataTheme, ...themes });\n  }, [dataTheme, themes, setThemeConfig]);\n\n  // Handle item click and update the global state\n  const change = useCallback(\n    (args: { selected: string; expanded: boolean }) => {\n      setThemeToolState(args);\n\n      const { list } = getConfig(themeConfig);\n      const selectedTheme = getSelectedTheme(list, args.selected);\n      updateThemeGlobals({\n        [PARAM_KEY]: selectedTheme?.dataTheme ?? \"none\",\n      });\n\n      const { onChange } = getConfig(themeConfig);\n      if (typeof onChange === \"function\") {\n        onChange(selectedTheme);\n      }\n    },\n    [themeConfig, updateThemeGlobals]\n  );\n\n  const { items, selectedTheme } = useMemo(\n    () => getDisplayableState(themeConfig, themeToolState, change),\n    [themeConfig, themeToolState, change]\n  );\n\n  return themeConfig.list && themeConfig.list.length > 0 ? (\n    <WithTooltip\n      key={TOOL_ID}\n      placement=\"top\"\n      trigger=\"click\"\n      visible={themeToolState.expanded}\n      tooltip={<TooltipLinkList links={items} />}\n    >\n      <IconButton\n        active={selectedTheme !== undefined}\n        key={TOOL_ID}\n        placeholder={selectedTheme?.name ?? \"none\"}\n        title=\"Change data-theme attribute\"\n        onClick={() =>\n          setThemeToolState((prevState) => ({\n            ...prevState,\n            expanded: !prevState.expanded,\n          }))\n        }\n      >\n        <Icons icon=\"paintbrush\" />\n      </IconButton>\n    </WithTooltip>\n  ) : null;\n};\n","import type { Theme, ThemeConfig } from \"@/types\";\n\nconst defaultOptions: ThemeConfig = {\n  clearable: true,\n  list: [],\n};\n\nexport function getConfig(parameters: ThemeConfig | Theme[]): ThemeConfig {\n  const options =\n    parameters instanceof Array ? { list: parameters } : parameters;\n\n  return {\n    ...defaultOptions,\n    ...options,\n  };\n}\n\nexport function getSelectedThemeName(\n  list: Theme[],\n  defaultTheme?: string,\n  currentSelectedValue?: string\n): string {\n  if (!list.length) {\n    return \"none\";\n  }\n\n  if (currentSelectedValue === \"none\") {\n    return currentSelectedValue;\n  }\n\n  if (\n    currentSelectedValue &&\n    list.find((i) => i.name === currentSelectedValue)\n  ) {\n    return currentSelectedValue;\n  }\n\n  if (defaultTheme && list.find((i) => i.dataTheme === defaultTheme)) {\n    return list.find((i) => i.dataTheme === defaultTheme)?.name ?? \"none\";\n  }\n\n  if (defaultTheme) {\n    return defaultTheme;\n  }\n\n  if (list.find((i) => i.default)) {\n    return list.find((i) => i.default)?.name ?? \"none\";\n  }\n\n  return \"none\";\n}\n\nexport function getSelectedTheme(\n  list: Theme[],\n  themeName: string\n): Theme | undefined {\n  return list.find(({ name }) => name === themeName);\n}\n","import { styled } from \"@storybook/theming\";\n\nexport const ColorIcon = styled.span(\n  ({ background }: { background: string }) => ({\n    borderRadius: \"1rem\",\n    display: \"block\",\n    height: \"1rem\",\n    width: \"1rem\",\n    background,\n  }),\n  ({ theme }) => ({\n    boxShadow: `${theme.appBorderColor} 0 0 0 1px inset`,\n  })\n);\n"]}