spec.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /**
  2. * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  6. */
  7. import { StateTransformer, StateAction } from '../mol-state';
  8. import { StateTransformParameters } from '../mol-plugin-ui/state/common';
  9. import { PluginLayoutStateProps } from './layout';
  10. import { PluginStateAnimation } from '../mol-plugin-state/animation/model';
  11. import { ParamDefinition as PD } from '../mol-util/param-definition';
  12. import { PluginConfigItem } from './config';
  13. export { PluginSpec }
  14. interface PluginSpec {
  15. actions: PluginSpec.Action[],
  16. behaviors: PluginSpec.Behavior[],
  17. animations?: PluginStateAnimation[],
  18. customParamEditors?: [StateAction | StateTransformer, StateTransformParameters.Class][],
  19. layout?: {
  20. initial?: Partial<PluginLayoutStateProps>,
  21. controls?: PluginSpec.LayoutControls
  22. },
  23. components?: {
  24. remoteState?: 'none' | 'default',
  25. structureTools?: React.ComponentClass,
  26. viewport?: React.ComponentClass,
  27. viewportControls?: React.ComponentClass
  28. },
  29. config?: Map<PluginConfigItem, unknown>
  30. }
  31. namespace PluginSpec {
  32. export interface Action {
  33. action: StateAction | StateTransformer,
  34. customControl?: StateTransformParameters.Class,
  35. autoUpdate?: boolean
  36. }
  37. export function Action(action: StateAction | StateTransformer, params?: { customControl?: StateTransformParameters.Class, autoUpdate?: boolean }): Action {
  38. return { action, customControl: params && params.customControl, autoUpdate: params && params.autoUpdate };
  39. }
  40. export interface Behavior {
  41. transformer: StateTransformer,
  42. defaultParams?: any
  43. }
  44. export function Behavior<T extends StateTransformer>(transformer: T, defaultParams: Partial<StateTransformer.Params<T>> = {}): Behavior {
  45. const params = transformer.definition.params
  46. ? PD.getDefaultValues(transformer.definition.params(undefined, undefined))
  47. : {}
  48. return { transformer, defaultParams: { ...params, ...defaultParams } };
  49. }
  50. export interface LayoutControls {
  51. top?: React.ComponentClass | 'none',
  52. left?: React.ComponentClass | 'none',
  53. right?: React.ComponentClass | 'none',
  54. bottom?: React.ComponentClass | 'none'
  55. }
  56. }