spec.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 { PluginConfigItem } from './config';
  12. export { PluginSpec };
  13. interface PluginSpec {
  14. actions: PluginSpec.Action[],
  15. behaviors: PluginSpec.Behavior[],
  16. animations?: PluginStateAnimation[],
  17. customParamEditors?: [StateAction | StateTransformer, StateTransformParameters.Class][],
  18. layout?: {
  19. initial?: Partial<PluginLayoutStateProps>,
  20. controls?: PluginSpec.LayoutControls
  21. },
  22. components?: {
  23. remoteState?: 'none' | 'default',
  24. structureTools?: React.ComponentClass,
  25. viewport?: {
  26. view?: React.ComponentClass,
  27. controls?: React.ComponentClass
  28. }
  29. },
  30. config?: Map<PluginConfigItem, unknown>
  31. }
  32. namespace PluginSpec {
  33. export interface Action {
  34. action: StateAction | StateTransformer,
  35. customControl?: StateTransformParameters.Class,
  36. autoUpdate?: boolean
  37. }
  38. export function Action(action: StateAction | StateTransformer, params?: { customControl?: StateTransformParameters.Class, autoUpdate?: boolean }): Action {
  39. return { action, customControl: params && params.customControl, autoUpdate: params && params.autoUpdate };
  40. }
  41. export interface Behavior {
  42. transformer: StateTransformer,
  43. defaultParams?: any
  44. }
  45. export function Behavior<T extends StateTransformer>(transformer: T, defaultParams: Partial<StateTransformer.Params<T>> = {}): Behavior {
  46. return { transformer, defaultParams };
  47. }
  48. export interface LayoutControls {
  49. top?: React.ComponentClass | 'none',
  50. left?: React.ComponentClass | 'none',
  51. right?: React.ComponentClass | 'none',
  52. bottom?: React.ComponentClass | 'none'
  53. }
  54. }