File size: 2,244 Bytes
b8874fd aa3b624 7fbff02 3833190 7fbff02 63b089b 66a740c 6770eb3 836d49f aa3b624 8480986 aa3b624 66a740c 63b089b aa3b624 9bde4cc 4c98241 9bde4cc aa3b624 3833190 63b089b d0e0b03 aa3b624 215369d c7a3398 9bde4cc aa3b624 b8874fd aa3b624 63b089b 836d49f 215369d c7a3398 215369d c7a3398 215369d c7a3398 215369d aa3b624 ff5f16d 40c6a95 7fbff02 40c6a95 aa3b624 40c6a95 d656141 fe7906f d656141 40c6a95 aa3b624 |
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
import { destroyPopover, Popover } from "./popover";
import { destroyStage } from "./stage";
import { destroyEvents, initEvents, requireRefresh } from "./events";
import { Config, configure, getConfig } from "./config";
import { destroyHighlight, highlight } from "./highlight";
import { destroyEmitter, listen } from "./emitter";
import "./style.css";
import { getState, resetState, setState } from "./state";
export type DriveStep = {
element?: string | Element;
popover?: Popover;
};
export function driver(options: Config = {}) {
configure(options);
function handleClose() {
if (!getConfig("allowClose")) {
return;
}
destroy();
}
function init() {
if (getState("isInitialized")) {
return;
}
setState("isInitialized", true);
document.body.classList.add("driver-active", getConfig("animate") ? "driver-fade" : "driver-simple");
initEvents();
listen("overlayClick", handleClose);
listen("escapePress", handleClose);
}
function destroy() {
const activeElement = getState("activeElement");
const activeStep = getState("activeStep");
const onDeselected = getConfig("onDeselected");
const onDestroyed = getConfig("onDestroyed");
document.body.classList.remove("driver-active", "driver-fade", "driver-simple");
destroyEvents();
destroyPopover();
destroyHighlight();
destroyStage();
destroyEmitter();
resetState();
if (activeElement && activeStep) {
const isActiveDummyElement = activeElement.id === "driver-dummy-element";
if (onDeselected) {
onDeselected(isActiveDummyElement ? undefined : activeElement, activeStep);
}
if (onDestroyed) {
onDestroyed(isActiveDummyElement ? undefined : activeElement, activeStep);
}
}
}
return {
isActive: () => getState("isInitialized") || false,
refresh: () => {
requireRefresh();
},
drive: (steps: DriveStep[]) => console.log(steps),
highlight: (step: DriveStep) => {
init();
highlight({
...step,
popover: step.popover
? {
showButtons: [],
...step.popover!,
}
: undefined,
});
},
destroy,
};
}
|