{"version":3,"file":"Customizations.js","sourceRoot":"../src/","sources":["customizations/Customizations.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAsBnD,IAAM,uBAAuB,GAAG,gBAAgB,CAAC;AACjD,IAAM,iBAAiB,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;AAE3F,IAAI,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAkB,uBAAuB,EAAE;IACnF,QAAQ,EAAE,EAAE;IACZ,cAAc,EAAE,EAAE;IAClB,mBAAmB,EAAE,KAAK;CAC3B,CAAC,CAAC;AAEH,IAAI,OAAO,GAAmB,EAAE,CAAC;AAEjC;IAAA;IA4EA,CAAC;IAzEe,oBAAK,GAAnB;QACE,YAAY,CAAC,QAAQ,GAAG,EAAE,CAAC;QAC3B,YAAY,CAAC,cAAc,GAAG,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACW,4BAAa,GAA3B,UAA4B,QAAmB;QAC7C,YAAY,CAAC,QAAQ,yBAAQ,YAAY,CAAC,QAAQ,GAAK,QAAQ,CAAE,CAAC;QAClE,cAAc,CAAC,YAAY,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACW,kCAAmB,GAAjC,UAAkC,SAAiB,EAAE,QAAmB;QACtE,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,yBAAQ,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,GAAK,QAAQ,CAAE,CAAC;QACpG,cAAc,CAAC,YAAY,EAAE,CAAC;IAChC,CAAC;IAEa,0BAAW,GAAzB,UACE,UAAoB,EACpB,SAAkB,EAClB,aAAkD;QAAlD,8BAAA,EAAA,iCAAkD;QAGlD,IAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,IAAM,mBAAmB,GAAG,CAAC,SAAS,IAAI,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QACzF,IAAM,oBAAoB,GAAG,CAAC,SAAS,IAAI,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QAEzF,KAAqB,UAAU,EAAV,yBAAU,EAAV,wBAAU,EAAV,IAAU,EAAE;YAA5B,IAAI,QAAQ,mBAAA;YACf,QAAQ,CAAC,QAAQ,CAAC;gBAChB,mBAAmB,CAAC,QAAQ,CAAC;oBAC7B,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAChC,oBAAoB,CAAC,QAAQ,CAAC;oBAC9B,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SACnC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACW,kCAAmB,GAAjC,UAAkC,IAAgB,EAAE,cAAwB;QAC1E,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACvC,IAAI;YACF,IAAI,EAAE,CAAC;SACR;QAAC,WAAM;YACN,gBAAgB;SACjB;QACD,cAAc,CAAC,gBAAgB,GAAG,KAAK,CAAC;QACxC,IAAI,CAAC,cAAc,EAAE;YACnB,cAAc,CAAC,YAAY,EAAE,CAAC;SAC/B;IACH,CAAC;IAEa,sBAAO,GAArB,UAAsB,QAAoB;QACxC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAEa,wBAAS,GAAvB,UAAwB,QAAoB;QAC1C,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,EAAc,IAAK,OAAA,EAAE,KAAK,QAAQ,EAAf,CAAe,CAAC,CAAC;IAChE,CAAC;IAEc,2BAAY,GAA3B;QACE,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE;YACpC,OAAO,CAAC,OAAO,CAAC,UAAC,EAAc,IAAK,OAAA,EAAE,EAAE,EAAJ,CAAI,CAAC,CAAC;SAC3C;IACH,CAAC;IACH,qBAAC;AAAD,CAAC,AA5ED,IA4EC","sourcesContent":["import { GlobalSettings } from '../GlobalSettings';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ISettings = { [key: string]: any };\nexport type ISettingsFunction = (settings: ISettings) => ISettings;\n\n/**\n * @deprecated Use ISettings.\n */\nexport type Settings = ISettings;\n\n/**\n * @deprecated Use ISettingsFunction.\n */\nexport type SettingsFunction = ISettingsFunction;\n\nexport interface ICustomizations {\n  settings: ISettings;\n  scopedSettings: { [key: string]: ISettings };\n  inCustomizerContext?: boolean;\n}\n\nconst CustomizationsGlobalKey = 'customizations';\nconst NO_CUSTOMIZATIONS = { settings: {}, scopedSettings: {}, inCustomizerContext: false };\n\nlet _allSettings = GlobalSettings.getValue<ICustomizations>(CustomizationsGlobalKey, {\n  settings: {},\n  scopedSettings: {},\n  inCustomizerContext: false,\n});\n\nlet _events: (() => void)[] = [];\n\nexport class Customizations {\n  private static _suppressUpdates: boolean;\n\n  public static reset(): void {\n    _allSettings.settings = {};\n    _allSettings.scopedSettings = {};\n  }\n\n  /** Apply global Customization settings.\n   * @example Customizations.applySettings(\\{ theme: \\{...\\} \\});\n   */\n  public static applySettings(settings: ISettings): void {\n    _allSettings.settings = { ..._allSettings.settings, ...settings };\n    Customizations._raiseChange();\n  }\n\n  /** Apply Customizations to a particular named scope, like a component.\n   * @example Customizations.applyScopedSettings('Nav', \\{ styles: () =\\> \\{\\} \\});\n   */\n  public static applyScopedSettings(scopeName: string, settings: ISettings): void {\n    _allSettings.scopedSettings[scopeName] = { ..._allSettings.scopedSettings[scopeName], ...settings };\n    Customizations._raiseChange();\n  }\n\n  public static getSettings(\n    properties: string[],\n    scopeName?: string,\n    localSettings: ICustomizations = NO_CUSTOMIZATIONS,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  ): any {\n    const settings: ISettings = {};\n    const localScopedSettings = (scopeName && localSettings.scopedSettings[scopeName]) || {};\n    const globalScopedSettings = (scopeName && _allSettings.scopedSettings[scopeName]) || {};\n\n    for (let property of properties) {\n      settings[property] =\n        localScopedSettings[property] ||\n        localSettings.settings[property] ||\n        globalScopedSettings[property] ||\n        _allSettings.settings[property];\n    }\n\n    return settings;\n  }\n\n  /** Used to run some code that sets Customizations without triggering an update until the end.\n   * Useful for applying Customizations that don't affect anything currently rendered, or for\n   * applying many customizations at once.\n   * @param suppressUpdate - Do not raise the change event at the end, preventing all updates\n   */\n  public static applyBatchedUpdates(code: () => void, suppressUpdate?: boolean): void {\n    Customizations._suppressUpdates = true;\n    try {\n      code();\n    } catch {\n      /* do nothing */\n    }\n    Customizations._suppressUpdates = false;\n    if (!suppressUpdate) {\n      Customizations._raiseChange();\n    }\n  }\n\n  public static observe(onChange: () => void): void {\n    _events.push(onChange);\n  }\n\n  public static unobserve(onChange: () => void): void {\n    _events = _events.filter((cb: () => void) => cb !== onChange);\n  }\n\n  private static _raiseChange(): void {\n    if (!Customizations._suppressUpdates) {\n      _events.forEach((cb: () => void) => cb());\n    }\n  }\n}\n"]}