MCPcopy
hub / github.com/shipshapecode/shepherd / createShepherdModal

Function createShepherdModal

shepherd.js/src/components/shepherd-modal.ts:48–302  ·  view source on GitHub ↗
(container: HTMLElement)

Source from the content-addressed store, hash-verified

46}
47
48export function createShepherdModal(container: HTMLElement): ShepherdModalAPI {
49 let rafId: number | undefined;
50 let openingProperties: OpeningProperty[] = [
51 { width: 0, height: 0, x: 0, y: 0, r: 0 }
52 ];
53
54 // Build SVG elements
55 const pathEl = svgEl('path');
56 const element = svgEl(
57 'svg',
58 { class: 'shepherd-modal-overlay-container' },
59 pathEl
60 );
61
62 element.addEventListener('touchmove', _preventModalOverlayTouch);
63
64 // Initial render
65 _updatePath();
66
67 container.append(element);
68
69 function _updatePath() {
70 pathEl.setAttribute('d', makeOverlayPath(openingProperties));
71 }
72
73 function closeModalOpening() {
74 openingProperties = [{ width: 0, height: 0, x: 0, y: 0, r: 0 }];
75 _updatePath();
76 }
77
78 function hide() {
79 element.classList.remove('shepherd-modal-is-visible');
80 _cleanupStepEventListeners();
81 }
82
83 function show() {
84 element.classList.add('shepherd-modal-is-visible');
85 }
86
87 function positionModal(
88 modalOverlayOpeningPadding = 0,
89 modalOverlayOpeningRadius: ModalRadiusType = 0,
90 modalOverlayOpeningXOffset = 0,
91 modalOverlayOpeningYOffset = 0,
92 scrollParent?: HTMLElement | null,
93 targetElement?: HTMLElement | null,
94 extraHighlights?: HTMLElement[]
95 ) {
96 if (targetElement) {
97 const elementsToHighlight = [targetElement, ...(extraHighlights || [])];
98 const newOpenings: OpeningProperty[] = [];
99
100 for (const el of elementsToHighlight) {
101 if (!el) continue;
102
103 // Skip duplicate elements
104 if (
105 elementsToHighlight.indexOf(el) !==

Callers 2

setupModalMethod · 0.90

Calls 2

svgElFunction · 0.90
_updatePathFunction · 0.85

Tested by

no test coverage detected