spec.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /**
  2. * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. */
  6. import { StateTransformer, StateAction } from 'mol-state';
  7. import { StateTransformParameters } from './ui/state/common';
  8. import { PluginLayoutStateProps } from './layout';
  9. import { PluginStateAnimation } from './state/animation/model';
  10. export { PluginSpec }
  11. interface PluginSpec {
  12. actions: PluginSpec.Action[],
  13. behaviors: PluginSpec.Behavior[],
  14. animations?: PluginStateAnimation[],
  15. customParamEditors?: [StateAction | StateTransformer, StateTransformParameters.Class][],
  16. layout?: {
  17. initial?: Partial<PluginLayoutStateProps>,
  18. controls?: {
  19. left?: React.ComponentClass | 'none',
  20. right?: React.ComponentClass | 'none',
  21. bottom?: React.ComponentClass | 'none'
  22. }
  23. }
  24. }
  25. namespace PluginSpec {
  26. export interface Action {
  27. action: StateAction | StateTransformer,
  28. customControl?: StateTransformParameters.Class,
  29. autoUpdate?: boolean
  30. }
  31. export function Action(action: StateAction | StateTransformer, params?: { customControl?: StateTransformParameters.Class, autoUpdate?: boolean }): Action {
  32. return { action, customControl: params && params.customControl, autoUpdate: params && params.autoUpdate };
  33. }
  34. export interface Behavior {
  35. transformer: StateTransformer,
  36. defaultParams?: any
  37. }
  38. export function Behavior<T extends StateTransformer>(transformer: T, defaultParams?: StateTransformer.Params<T>): Behavior {
  39. return { transformer, defaultParams };
  40. }
  41. export interface LayoutControls {
  42. left?: React.ComponentClass | 'none',
  43. right?: React.ComponentClass | 'none',
  44. bottom?: React.ComponentClass | 'none'
  45. }
  46. }