{"version":3,"file":"OptionsUIBuilders.mjs","sources":["../../../src/utils/OptionsUIBuilders.ts"],"sourcesContent":["import { set, cloneDeep } from 'lodash';\nimport type { JSX } from 'react';\n\nimport {\n  FieldNamePickerConfigSettings,\n  NumberFieldConfigSettings,\n  SelectFieldConfigSettings,\n  SliderFieldConfigSettings,\n  StringFieldConfigSettings,\n  UnitFieldConfigSettings,\n  booleanOverrideProcessor,\n  identityOverrideProcessor,\n  numberOverrideProcessor,\n  selectOverrideProcessor,\n  stringOverrideProcessor,\n  unitOverrideProcessor,\n} from '../field/overrides/processors';\nimport {\n  StandardEditorContext,\n  StandardEditorProps,\n  standardEditorsRegistry,\n} from '../field/standardFieldConfigEditorRegistry';\nimport { PanelOptionsSupplier } from '../panel/PanelPlugin';\nimport { OptionsEditorItem, OptionsUIRegistryBuilder } from '../types/OptionsUIRegistryBuilder';\nimport { isObject } from '../types/data';\nimport { FieldConfigPropertyItem, FieldConfigEditorConfig } from '../types/fieldOverrides';\nimport { PanelOptionsEditorConfig, PanelOptionsEditorItem } from '../types/panel';\n\n/**\n * Fluent API for declarative creation of field config option editors\n */\nexport class FieldConfigEditorBuilder<TOptions> extends OptionsUIRegistryBuilder<\n  TOptions,\n  StandardEditorProps,\n  FieldConfigPropertyItem<TOptions>\n> {\n  addNumberInput<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings & NumberFieldConfigSettings, number>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      override: standardEditorsRegistry.get('number').editor,\n      editor: standardEditorsRegistry.get('number').editor,\n      process: numberOverrideProcessor,\n      shouldApply: config.shouldApply ?? (() => true),\n      settings: config.settings || {},\n    });\n  }\n\n  addSliderInput<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings & SliderFieldConfigSettings, number>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      override: standardEditorsRegistry.get('slider').editor,\n      editor: standardEditorsRegistry.get('slider').editor,\n      process: numberOverrideProcessor,\n      shouldApply: config.shouldApply ?? (() => true),\n      settings: config.settings || {},\n    });\n  }\n\n  addTextInput<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings & StringFieldConfigSettings, string>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      override: standardEditorsRegistry.get('text').editor,\n      editor: standardEditorsRegistry.get('text').editor,\n      process: stringOverrideProcessor,\n      shouldApply: config.shouldApply ?? (() => true),\n      settings: config.settings || {},\n    });\n  }\n\n  addSelect<TOption, TSettings extends SelectFieldConfigSettings<TOption>>(\n    config: FieldConfigEditorConfig<TOptions, TSettings, TOption>\n  ) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      override: standardEditorsRegistry.get('select').editor,\n      editor: standardEditorsRegistry.get('select').editor,\n      process: selectOverrideProcessor,\n      // ???\n      shouldApply: config.shouldApply ? config.shouldApply : () => true,\n      settings: config.settings || { options: [] },\n    });\n  }\n\n  addRadio<TOption, TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings, TOption>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      override: standardEditorsRegistry.get('radio').editor,\n      editor: standardEditorsRegistry.get('radio').editor,\n      process: selectOverrideProcessor,\n      // ???\n      shouldApply: config.shouldApply ? config.shouldApply : () => true,\n      settings: config.settings || { options: [] },\n    });\n  }\n\n  addBooleanSwitch<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings, boolean>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('boolean').editor,\n      override: standardEditorsRegistry.get('boolean').editor,\n      process: booleanOverrideProcessor,\n      shouldApply: config.shouldApply ? config.shouldApply : () => true,\n      settings: config.settings || {},\n    });\n  }\n\n  addColorPicker<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings, string>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('color').editor,\n      override: standardEditorsRegistry.get('color').editor,\n      process: identityOverrideProcessor,\n      shouldApply: config.shouldApply ? config.shouldApply : () => true,\n      settings: config.settings || {},\n    });\n  }\n\n  addUnitPicker<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings & UnitFieldConfigSettings, string>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('unit').editor,\n      override: standardEditorsRegistry.get('unit').editor,\n      process: unitOverrideProcessor,\n      shouldApply: config.shouldApply ? config.shouldApply : () => true,\n      settings: config.settings || {},\n    });\n  }\n\n  addFieldNamePicker<TSettings>(\n    config: FieldConfigEditorConfig<TOptions, TSettings & FieldNamePickerConfigSettings, string>\n  ): this {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('field-name').editor,\n      override: standardEditorsRegistry.get('field-name').editor,\n      process: identityOverrideProcessor,\n      shouldApply: config.shouldApply ? config.shouldApply : () => true,\n      settings: config.settings || {},\n    });\n  }\n\n  addGenericEditor<TSettings>(\n    config: FieldConfigEditorConfig<TOptions, TSettings & any>, // & any... i give up!\n    editor: (props: StandardEditorProps<TSettings>) => JSX.Element\n  ): this {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: editor,\n      override: editor,\n      process: identityOverrideProcessor,\n      shouldApply: config.shouldApply ? config.shouldApply : () => true,\n      settings: config.settings || {},\n    });\n  }\n}\n\nexport interface NestedValueAccess {\n  getValue: (path: string) => any;\n  onChange: (path: string, value: any) => void;\n  getContext?: (parent: StandardEditorContext<any>) => StandardEditorContext<any>;\n}\nexport interface NestedPanelOptions<TSub = any> {\n  path: string;\n  category?: string[];\n  defaultValue?: TSub;\n  build: PanelOptionsSupplier<TSub>;\n  values?: (parent: NestedValueAccess) => NestedValueAccess;\n}\n\nexport class NestedPanelOptionsBuilder<TSub = any> implements OptionsEditorItem<TSub, any, any, any> {\n  path = '';\n  category?: string[];\n  defaultValue?: TSub;\n  id = 'nested-panel-options';\n  name = 'nested';\n  editor = () => null;\n\n  constructor(public cfg: NestedPanelOptions<TSub>) {\n    this.path = cfg.path;\n    this.category = cfg.category;\n    this.defaultValue = this.getDefaultValue(cfg);\n  }\n\n  private getDefaultValue(cfg: NestedPanelOptions<TSub>): TSub {\n    let result = isObject(cfg.defaultValue) ? cloneDeep(cfg.defaultValue) : {};\n\n    const builder = new PanelOptionsEditorBuilder<TSub>();\n    cfg.build(builder, { data: [] });\n\n    for (const item of builder.getItems()) {\n      if (item.defaultValue != null) {\n        set(result, item.path, item.defaultValue);\n      }\n    }\n\n    // TSub is defined as type any and we need to cast it back\n    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n    return result as TSub;\n  }\n\n  getBuilder = () => {\n    return this.cfg.build;\n  };\n\n  getNestedValueAccess = (parent: NestedValueAccess) => {\n    const values = this.cfg.values;\n    if (values) {\n      return values(parent);\n    }\n    // by default prefix the path\n    return {\n      getValue: (path: string) => parent.getValue(`${this.path}.${path}`),\n      onChange: (path: string, value: any) => parent.onChange(`${this.path}.${path}`, value),\n    };\n  };\n}\n\nexport function isNestedPanelOptions(item: unknown): item is NestedPanelOptionsBuilder {\n  return isObject(item) && 'id' in item && item.id === 'nested-panel-options';\n}\n\n/**\n * Fluent API for declarative creation of panel options\n */\nexport class PanelOptionsEditorBuilder<TOptions> extends OptionsUIRegistryBuilder<\n  TOptions,\n  StandardEditorProps,\n  PanelOptionsEditorItem<TOptions>\n> {\n  addNestedOptions<Sub>(opts: NestedPanelOptions<Sub>) {\n    const s = new NestedPanelOptionsBuilder<Sub>(opts);\n    return this.addCustomEditor(s);\n  }\n\n  addNumberInput<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings & NumberFieldConfigSettings, number>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('number').editor,\n    });\n  }\n\n  addSliderInput<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings & SliderFieldConfigSettings, number>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('slider').editor,\n    });\n  }\n\n  addTextInput<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings & StringFieldConfigSettings, string>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('text').editor,\n    });\n  }\n\n  addStringArray<TSettings>(\n    config: PanelOptionsEditorConfig<TOptions, TSettings & StringFieldConfigSettings, string[]>\n  ) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('strings').editor,\n    });\n  }\n\n  addSelect<TOption, TSettings extends SelectFieldConfigSettings<TOption>>(\n    config: PanelOptionsEditorConfig<TOptions, TSettings, TOption>\n  ) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('select').editor,\n    });\n  }\n\n  addMultiSelect<TOption, TSettings extends SelectFieldConfigSettings<TOption>>(\n    config: PanelOptionsEditorConfig<TOptions, TSettings, TOption>\n  ) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('multi-select').editor,\n    });\n  }\n\n  addRadio<TOption, TSettings extends SelectFieldConfigSettings<TOption>>(\n    config: PanelOptionsEditorConfig<TOptions, TSettings, TOption>\n  ) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('radio').editor,\n    });\n  }\n\n  addBooleanSwitch<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings, boolean>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('boolean').editor,\n    });\n  }\n\n  addColorPicker<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings, string>): this {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('color').editor,\n      settings: config.settings || {},\n    });\n  }\n\n  addTimeZonePicker<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings, string>): this {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('timezone').editor,\n      settings: config.settings || {},\n    });\n  }\n\n  addUnitPicker<TSettings>(\n    config: PanelOptionsEditorConfig<TOptions, TSettings & UnitFieldConfigSettings, string>\n  ): this {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('unit').editor,\n    });\n  }\n\n  addFieldNamePicker<TSettings>(\n    config: PanelOptionsEditorConfig<TOptions, TSettings & FieldNamePickerConfigSettings, string>\n  ): this {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('field-name').editor,\n    });\n  }\n\n  addDashboardPicker<TSettings>(\n    config: PanelOptionsEditorConfig<TOptions, TSettings & FieldNamePickerConfigSettings, string>\n  ): this {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('dashboard-uid').editor, // added at runtime\n    });\n  }\n}\n"],"names":[],"mappings":"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"}