File size: 2,010 Bytes
70d8f15
28ba7df
70d8f15
66a740c
6aa2828
 
66a740c
a688e23
82a88c5
4c98241
e3d3deb
edd7dca
 
c7a3398
 
1d5e713
 
9bde4cc
fe7906f
6aa2828
70d8f15
93af367
 
 
 
6aa2828
93af367
28ba7df
 
 
9a49612
e0443d1
eb375ea
 
 
e0443d1
9a49612
 
 
d0e0b03
9a49612
66a740c
 
 
 
 
 
 
4c98241
e3d3deb
c38b220
edd7dca
 
9bde4cc
9a49612
6aa2828
a688e23
66a740c
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import { DriveStep } from "./driver";
import {AllowedButtons, PopoverDOM} from "./popover";

export type Config = {
  steps?: DriveStep[];

  animate?: boolean;
  backdropColor?: string;
  smoothScroll?: boolean;
  allowClose?: boolean;
  opacity?: number;
  stagePadding?: number;
  stageRadius?: number;
  allowKeyboardControl?: boolean;

  // Popover specific configuration
  popoverClass?: string;
  popoverOffset?: number;
  showButtons?: AllowedButtons[];
  disableButtons?: AllowedButtons[];

  // Button texts
  nextBtnText?: string;
  prevBtnText?: string;
  closeBtnText?: string;
  doneBtnText?: string;

  // Called after the popover is rendered
  onPopoverRendered?: (popover: PopoverDOM) => void;

  // State based callbacks, called upon state changes
  onOverlayClick?: (element: Element | undefined, step: DriveStep) => void;
  onHighlightStarted?: (element: Element | undefined, step: DriveStep) => void;
  onHighlighted?: (element: Element | undefined, step: DriveStep) => void;
  onDeselected?: (element: Element | undefined, step: DriveStep) => void;
  onDestroyed?: (element: Element | undefined, step: DriveStep) => void;

  // Event based callbacks, called upon events
  onNextClick?: (element: Element | undefined, step: DriveStep) => void;
  onPrevClick?: (element: Element | undefined, step: DriveStep) => void;
  onCloseClick?: (element: Element | undefined, step: DriveStep) => void;
};

let currentConfig: Config = {};

export function configure(config: Config = {}) {
  currentConfig = {
    animate: true,
    allowClose: true,
    opacity: 0.7,
    smoothScroll: false,
    stagePadding: 10,
    stageRadius: 5,
    popoverOffset: 10,
    showButtons: ["next", "previous", "close"],
    disableButtons: [],
    backdropColor: "#000",
    ...config,
  };
}

export function getConfig(): Config;
export function getConfig<K extends keyof Config>(key: K): Config[K];
export function getConfig<K extends keyof Config>(key?: K) {
  return key ? currentConfig[key] : currentConfig;
}