@coorpacademy/components 11.40.18 → 11.40.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/es/molecule/cm-popin/index.d.ts.map +1 -1
  2. package/es/molecule/cm-popin/index.js +6 -1
  3. package/es/molecule/cm-popin/index.js.map +1 -1
  4. package/es/template/app-player/player/index.d.ts +8 -2
  5. package/es/template/app-player/player/index.d.ts.map +1 -1
  6. package/es/template/app-player/player/index.js +6 -1
  7. package/es/template/app-player/player/index.js.map +1 -1
  8. package/es/template/app-player/player/slides/header/index.d.ts +4 -0
  9. package/es/template/app-player/player/slides/header/index.d.ts.map +1 -1
  10. package/es/template/app-player/player/slides/header/index.js +23 -3
  11. package/es/template/app-player/player/slides/header/index.js.map +1 -1
  12. package/es/template/app-player/player/slides/header/style.css +18 -1
  13. package/es/template/app-player/player/slides/index.d.ts +4 -0
  14. package/es/template/app-player/player/slides/index.d.ts.map +1 -1
  15. package/es/template/app-player/player/slides/index.js +4 -1
  16. package/es/template/app-player/player/slides/index.js.map +1 -1
  17. package/es/template/app-player/player/slides/style.css +12 -6
  18. package/es/template/app-player/player/tourguide/index.d.ts +158 -0
  19. package/es/template/app-player/player/tourguide/index.d.ts.map +1 -0
  20. package/es/template/app-player/player/tourguide/index.js +289 -0
  21. package/es/template/app-player/player/tourguide/index.js.map +1 -0
  22. package/es/template/app-player/player/tourguide/style.css +385 -0
  23. package/es/template/app-player/popin-end/index.d.ts +4 -0
  24. package/es/template/app-player/popin-end/summary.js +2 -2
  25. package/es/template/app-player/popin-end/summary.js.map +1 -1
  26. package/es/template/common/search-page/index.js +1 -1
  27. package/es/template/common/search-page/index.js.map +1 -1
  28. package/es/template/my-learning/index.d.ts.map +1 -1
  29. package/es/template/my-learning/index.js +1 -0
  30. package/es/template/my-learning/index.js.map +1 -1
  31. package/es/types/tourguidejs.d.js +2 -0
  32. package/es/types/tourguidejs.d.js.map +1 -0
  33. package/lib/molecule/cm-popin/index.d.ts.map +1 -1
  34. package/lib/molecule/cm-popin/index.js +6 -1
  35. package/lib/molecule/cm-popin/index.js.map +1 -1
  36. package/lib/template/app-player/player/index.d.ts +8 -2
  37. package/lib/template/app-player/player/index.d.ts.map +1 -1
  38. package/lib/template/app-player/player/index.js +8 -1
  39. package/lib/template/app-player/player/index.js.map +1 -1
  40. package/lib/template/app-player/player/slides/header/index.d.ts +4 -0
  41. package/lib/template/app-player/player/slides/header/index.d.ts.map +1 -1
  42. package/lib/template/app-player/player/slides/header/index.js +23 -3
  43. package/lib/template/app-player/player/slides/header/index.js.map +1 -1
  44. package/lib/template/app-player/player/slides/header/style.css +18 -1
  45. package/lib/template/app-player/player/slides/index.d.ts +4 -0
  46. package/lib/template/app-player/player/slides/index.d.ts.map +1 -1
  47. package/lib/template/app-player/player/slides/index.js +4 -1
  48. package/lib/template/app-player/player/slides/index.js.map +1 -1
  49. package/lib/template/app-player/player/slides/style.css +12 -6
  50. package/lib/template/app-player/player/tourguide/index.d.ts +158 -0
  51. package/lib/template/app-player/player/tourguide/index.d.ts.map +1 -0
  52. package/lib/template/app-player/player/tourguide/index.js +294 -0
  53. package/lib/template/app-player/player/tourguide/index.js.map +1 -0
  54. package/lib/template/app-player/player/tourguide/style.css +385 -0
  55. package/lib/template/app-player/popin-end/index.d.ts +4 -0
  56. package/lib/template/app-player/popin-end/summary.js +4 -2
  57. package/lib/template/app-player/popin-end/summary.js.map +1 -1
  58. package/lib/template/common/search-page/index.js +1 -1
  59. package/lib/template/common/search-page/index.js.map +1 -1
  60. package/lib/template/my-learning/index.d.ts.map +1 -1
  61. package/lib/template/my-learning/index.js +1 -0
  62. package/lib/template/my-learning/index.js.map +1 -1
  63. package/lib/types/tourguidejs.d.js +2 -0
  64. package/lib/types/tourguidejs.d.js.map +1 -0
  65. package/package.json +3 -2
@@ -0,0 +1,294 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.shouldStartTour = exports.default = exports.__test__ = exports.TourGuideStepPropType = exports.TourGuideOptionsPropType = exports.TourGuideConfigPropType = void 0;
5
+ var _sortBy2 = _interopRequireDefault(require("lodash/fp/sortBy"));
6
+ var _pipe2 = _interopRequireDefault(require("lodash/fp/pipe"));
7
+ var _map2 = _interopRequireDefault(require("lodash/fp/map"));
8
+ var _keys2 = _interopRequireDefault(require("lodash/fp/keys"));
9
+ var _join2 = _interopRequireDefault(require("lodash/fp/join"));
10
+ var _isString2 = _interopRequireDefault(require("lodash/fp/isString"));
11
+ var _isObject2 = _interopRequireDefault(require("lodash/fp/isObject"));
12
+ var _isFunction2 = _interopRequireDefault(require("lodash/fp/isFunction"));
13
+ var _identity2 = _interopRequireDefault(require("lodash/fp/identity"));
14
+ var _react = require("react");
15
+ var _propTypes = _interopRequireDefault(require("prop-types"));
16
+ var _tourguidejs = require("@sjmc11/tourguidejs");
17
+ require("./style.css");
18
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
+ // Fixed class used to attach our CSS customizations to the TourGuide dialog.
20
+ const TOURGUIDE_DIALOG_CLASS = 'coorp-tourguide-dialog';
21
+
22
+ // Normalize step content for stable serialization:
23
+ // - keep strings as-is
24
+ // - allow objects with a custom toString
25
+ // - otherwise fall back to empty string
26
+ const normalizeStepContent = content => {
27
+ if ((0, _isString2.default)(content)) {
28
+ return content;
29
+ }
30
+ if ((0, _isObject2.default)(content) && (0, _isFunction2.default)(content?.toString)) {
31
+ if (content.toString === Object.prototype.toString) {
32
+ return '';
33
+ }
34
+ return content.toString();
35
+ }
36
+ return '';
37
+ };
38
+
39
+ // Build a deterministic key for steps to avoid re-init on referential changes only.
40
+ // We include target/order/group/content so a real content change triggers a re-init.
41
+ const serializeSteps = steps => (0, _pipe2.default)((0, _map2.default)(step => `${step.target || ''}|${step.order ?? ''}|${step.group || ''}|${normalizeStepContent(step.content)}`), (0, _join2.default)(';;'))(steps || []);
42
+
43
+ // Same idea for options: stable key for effect dependencies.
44
+ // Sorting keys ensures we don't recreate the client due to object key ordering.
45
+ const serializeOptions = options => (0, _pipe2.default)(_keys2.default, (0, _sortBy2.default)(_identity2.default), (0, _map2.default)(key => `${key}:${String(options[key])}`), (0, _join2.default)('|'))(options || {});
46
+ const shouldStartTour = (autoStart, group, client) => autoStart && !client.isFinished(group);
47
+
48
+ // Test-only hooks for unit tests (not used in production code).
49
+ exports.shouldStartTour = shouldStartTour;
50
+ const __test__ = exports.__test__ = {
51
+ normalizeStepContent,
52
+ serializeSteps,
53
+ serializeOptions,
54
+ TOURGUIDE_DIALOG_CLASS,
55
+ shouldStartTour
56
+ };
57
+ const TourGuideStepPropType = exports.TourGuideStepPropType = _propTypes.default.shape({
58
+ title: _propTypes.default.string,
59
+ content: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node]).isRequired,
60
+ target: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object]).isRequired,
61
+ order: _propTypes.default.number,
62
+ group: _propTypes.default.string,
63
+ position: _propTypes.default.string,
64
+ fixed: _propTypes.default.bool,
65
+ buttons: _propTypes.default.arrayOf(_propTypes.default.shape({
66
+ text: _propTypes.default.string,
67
+ type: _propTypes.default.string
68
+ }))
69
+ });
70
+ const TourGuideOptionsPropType = exports.TourGuideOptionsPropType = _propTypes.default.shape({
71
+ autoScroll: _propTypes.default.bool,
72
+ autoScrollSmooth: _propTypes.default.bool,
73
+ autoScrollOffset: _propTypes.default.number,
74
+ backdropAnimate: _propTypes.default.bool,
75
+ backdropClass: _propTypes.default.string,
76
+ backdropColor: _propTypes.default.string,
77
+ dialogAnimate: _propTypes.default.string,
78
+ dialogZ: _propTypes.default.number,
79
+ dialogWidth: _propTypes.default.number,
80
+ dialogMaxWidth: _propTypes.default.number,
81
+ dialogPlacement: _propTypes.default.oneOf(['top', 'right', 'bottom', 'left']),
82
+ targetPadding: _propTypes.default.number,
83
+ hideNext: _propTypes.default.bool,
84
+ hidePrev: _propTypes.default.bool,
85
+ nextLabel: _propTypes.default.string,
86
+ prevLabel: _propTypes.default.string,
87
+ finishLabel: _propTypes.default.string,
88
+ completeOnFinish: _propTypes.default.bool,
89
+ exitOnEscape: _propTypes.default.bool,
90
+ exitOnClickOutside: _propTypes.default.bool,
91
+ keyboardControls: _propTypes.default.bool,
92
+ showStepDots: _propTypes.default.bool,
93
+ stepDotsPlacement: _propTypes.default.oneOf(['footer', 'body']),
94
+ showButtons: _propTypes.default.bool,
95
+ showStepProgress: _propTypes.default.bool,
96
+ progressBar: _propTypes.default.string,
97
+ closeButton: _propTypes.default.bool,
98
+ rememberStep: _propTypes.default.bool,
99
+ propagateEvents: _propTypes.default.bool,
100
+ debug: _propTypes.default.bool
101
+ });
102
+ const TourGuideConfigPropType = exports.TourGuideConfigPropType = _propTypes.default.shape({
103
+ steps: _propTypes.default.arrayOf(TourGuideStepPropType).isRequired,
104
+ options: TourGuideOptionsPropType,
105
+ group: _propTypes.default.string,
106
+ autoStart: _propTypes.default.bool,
107
+ forceStart: _propTypes.default.bool,
108
+ startStep: _propTypes.default.number,
109
+ onStepChange: _propTypes.default.func,
110
+ onStart: _propTypes.default.func,
111
+ onExit: _propTypes.default.func,
112
+ onFinish: _propTypes.default.func,
113
+ testMode: _propTypes.default.bool
114
+ });
115
+
116
+ // TourGuideManager is a React-only controller:
117
+ // - creates/destroys the TourGuide client
118
+ // - starts the tour when allowed
119
+ // - cleans up DOM nodes left by the library
120
+ const TourGuideManager = ({
121
+ steps = [],
122
+ options = {},
123
+ group,
124
+ autoStart = true,
125
+ forceStart = false,
126
+ startStep,
127
+ onStepChange,
128
+ onStart,
129
+ onExit,
130
+ onFinish,
131
+ // Unit-test injection point to avoid using the real TourGuideClient.
132
+ testClientFactory,
133
+ testMode = false
134
+ }) => {
135
+ const clientRef = (0, _react.useRef)(null);
136
+ // Expose refs for unit tests without relying on globals.
137
+ const isTestEnv = Boolean(testMode);
138
+ if (isTestEnv) {
139
+ __test__.__clientRef = clientRef;
140
+ }
141
+ const hasStartedRef = (0, _react.useRef)(false);
142
+ const hasExitedRef = (0, _react.useRef)(false);
143
+ const startStepRef = (0, _react.useRef)(startStep);
144
+ const onStepChangeRef = (0, _react.useRef)(onStepChange);
145
+ const onStartRef = (0, _react.useRef)(onStart);
146
+ const onExitRef = (0, _react.useRef)(onExit);
147
+ const onFinishRef = (0, _react.useRef)(onFinish);
148
+ const sanitizedOptions = (0, _react.useMemo)(() => {
149
+ // We control dialogClass internally; don't let external props override it.
150
+ const cleanOptions = {
151
+ ...options
152
+ };
153
+ delete cleanOptions.dialogClass;
154
+ return cleanOptions;
155
+ }, [options]);
156
+ const optionsKey = serializeOptions(sanitizedOptions);
157
+ const sanitizedOptionsRef = (0, _react.useRef)({
158
+ key: optionsKey,
159
+ value: sanitizedOptions
160
+ });
161
+ if (sanitizedOptionsRef.current.key !== optionsKey) {
162
+ sanitizedOptionsRef.current = {
163
+ key: optionsKey,
164
+ value: sanitizedOptions
165
+ };
166
+ }
167
+ const stableOptions = sanitizedOptionsRef.current.value;
168
+ const stepsKey = serializeSteps(steps);
169
+ // Clone steps because TourGuideJS mutates targets (string -> HTMLElement).
170
+ // Use stepsKey so we only re-clone when the actual content changes.
171
+ const stepsForClientRef = (0, _react.useRef)({
172
+ key: stepsKey,
173
+ value: (steps || []).map(step => ({
174
+ ...step
175
+ }))
176
+ });
177
+ if (stepsForClientRef.current.key !== stepsKey) {
178
+ stepsForClientRef.current = {
179
+ key: stepsKey,
180
+ value: (steps || []).map(step => ({
181
+ ...step
182
+ }))
183
+ };
184
+ }
185
+ const stepsForClient = stepsForClientRef.current.value;
186
+ (0, _react.useEffect)(() => {
187
+ startStepRef.current = startStep;
188
+ onStepChangeRef.current = onStepChange;
189
+ onStartRef.current = onStart;
190
+ onExitRef.current = onExit;
191
+ onFinishRef.current = onFinish;
192
+ }, [startStep, onStepChange, onStart, onExit, onFinish]);
193
+ (0, _react.useEffect)(() => {
194
+ // Avoid client creation on the server or with empty steps.
195
+ if (typeof window === 'undefined' || stepsForClient.length === 0) {
196
+ return undefined;
197
+ }
198
+ if (!_tourguidejs.TourGuideClient && !testClientFactory) {
199
+ return undefined;
200
+ }
201
+ const createClient = testClientFactory || (clientOptions => {
202
+ return new _tourguidejs.TourGuideClient(clientOptions);
203
+ });
204
+ // Create a fresh client when steps/options change and apply our fixed dialog class.
205
+ const client = createClient({
206
+ steps: stepsForClient,
207
+ ...stableOptions,
208
+ dialogClass: TOURGUIDE_DIALOG_CLASS
209
+ });
210
+ clientRef.current = client;
211
+ hasStartedRef.current = false;
212
+ hasExitedRef.current = false;
213
+ if (typeof startStepRef.current === 'number' && startStepRef.current >= 0) {
214
+ client.activeStep = startStepRef.current;
215
+ }
216
+ client._globalAfterChangeCallback = (currentStepIndex, nextStepIndex) => {
217
+ if (onStepChangeRef.current) {
218
+ onStepChangeRef.current(nextStepIndex);
219
+ }
220
+ };
221
+ client._globalAfterExitCallback = () => {
222
+ if (hasExitedRef.current) {
223
+ return;
224
+ }
225
+ hasExitedRef.current = true;
226
+ if (onExitRef.current) {
227
+ onExitRef.current();
228
+ }
229
+ };
230
+ client._globalFinishCallback = () => {
231
+ if (onFinishRef.current) {
232
+ onFinishRef.current();
233
+ }
234
+ };
235
+ return () => {
236
+ // Ensure old DOM nodes are removed; TourGuideJS uses fixed IDs
237
+ // and can otherwise leave stale elements behind.
238
+ const exitPromise = client.isVisible ? client.exit().catch(() => {}) : Promise.resolve();
239
+ exitPromise.finally(() => {
240
+ client.dialog?.remove();
241
+ client.backdrop?.remove();
242
+ }).catch(() => {});
243
+ if (clientRef.current === client) {
244
+ clientRef.current = null;
245
+ }
246
+ };
247
+ }, [stepsKey, optionsKey, stepsForClient, stableOptions, testClientFactory]);
248
+ (0, _react.useEffect)(() => {
249
+ const client = clientRef.current;
250
+ if (!client) {
251
+ return undefined;
252
+ }
253
+ if (autoStart) {
254
+ // Don't restart a tour that was already completed for this group unless explicitly allowed.
255
+ if (!forceStart && group && client.isFinished && client.isFinished(group)) {
256
+ return undefined;
257
+ }
258
+ if (hasStartedRef.current) {
259
+ hasStartedRef.current = false;
260
+ client.exit().catch(() => {});
261
+ }
262
+ const start = () => {
263
+ // Mark as started before calling into the library to avoid double-start.
264
+ hasStartedRef.current = true;
265
+ if (onStartRef.current) {
266
+ onStartRef.current(client.activeStep, group);
267
+ }
268
+ client.start(group).catch(() => {});
269
+ };
270
+ start();
271
+ } else if (!autoStart && hasStartedRef.current) {
272
+ hasStartedRef.current = false;
273
+ client.exit().catch(() => {});
274
+ }
275
+ return undefined;
276
+ }, [autoStart, forceStart, group, stepsKey, optionsKey]);
277
+ return null;
278
+ };
279
+ TourGuideManager.propTypes = {
280
+ steps: _propTypes.default.arrayOf(TourGuideStepPropType),
281
+ options: TourGuideOptionsPropType,
282
+ group: _propTypes.default.string,
283
+ autoStart: _propTypes.default.bool,
284
+ forceStart: _propTypes.default.bool,
285
+ startStep: _propTypes.default.number,
286
+ onStepChange: _propTypes.default.func,
287
+ onStart: _propTypes.default.func,
288
+ onExit: _propTypes.default.func,
289
+ onFinish: _propTypes.default.func,
290
+ testClientFactory: _propTypes.default.func,
291
+ testMode: _propTypes.default.bool
292
+ };
293
+ var _default = exports.default = TourGuideManager;
294
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_react","require","_propTypes","_interopRequireDefault","_tourguidejs","e","__esModule","default","TOURGUIDE_DIALOG_CLASS","normalizeStepContent","content","_isString2","_isObject2","_isFunction2","toString","Object","prototype","serializeSteps","steps","_pipe2","_map2","step","target","order","group","_join2","serializeOptions","options","_keys2","_sortBy2","_identity2","key","String","shouldStartTour","autoStart","client","isFinished","exports","__test__","TourGuideStepPropType","PropTypes","shape","title","string","oneOfType","node","isRequired","object","number","position","fixed","bool","buttons","arrayOf","text","type","TourGuideOptionsPropType","autoScroll","autoScrollSmooth","autoScrollOffset","backdropAnimate","backdropClass","backdropColor","dialogAnimate","dialogZ","dialogWidth","dialogMaxWidth","dialogPlacement","oneOf","targetPadding","hideNext","hidePrev","nextLabel","prevLabel","finishLabel","completeOnFinish","exitOnEscape","exitOnClickOutside","keyboardControls","showStepDots","stepDotsPlacement","showButtons","showStepProgress","progressBar","closeButton","rememberStep","propagateEvents","debug","TourGuideConfigPropType","forceStart","startStep","onStepChange","func","onStart","onExit","onFinish","testMode","TourGuideManager","testClientFactory","clientRef","useRef","isTestEnv","Boolean","__clientRef","hasStartedRef","hasExitedRef","startStepRef","onStepChangeRef","onStartRef","onExitRef","onFinishRef","sanitizedOptions","useMemo","cleanOptions","dialogClass","optionsKey","sanitizedOptionsRef","value","current","stableOptions","stepsKey","stepsForClientRef","map","stepsForClient","useEffect","window","length","undefined","TourGuideClient","createClient","clientOptions","activeStep","_globalAfterChangeCallback","currentStepIndex","nextStepIndex","_globalAfterExitCallback","_globalFinishCallback","exitPromise","isVisible","exit","catch","Promise","resolve","finally","dialog","remove","backdrop","start","propTypes","_default"],"sources":["../../../../../src/template/app-player/player/tourguide/index.js"],"sourcesContent":["import {useEffect, useMemo, useRef} from 'react';\nimport PropTypes from 'prop-types';\nimport {identity, isFunction, isObject, isString, join, keys, map, pipe, sortBy} from 'lodash/fp';\nimport {TourGuideClient} from '@sjmc11/tourguidejs';\nimport './style.css';\n\n// Fixed class used to attach our CSS customizations to the TourGuide dialog.\nconst TOURGUIDE_DIALOG_CLASS = 'coorp-tourguide-dialog';\n\n// Normalize step content for stable serialization:\n// - keep strings as-is\n// - allow objects with a custom toString\n// - otherwise fall back to empty string\nconst normalizeStepContent = content => {\n if (isString(content)) {\n return content;\n }\n\n if (isObject(content) && isFunction(content?.toString)) {\n if (content.toString === Object.prototype.toString) {\n return '';\n }\n return content.toString();\n }\n\n return '';\n};\n\n// Build a deterministic key for steps to avoid re-init on referential changes only.\n// We include target/order/group/content so a real content change triggers a re-init.\nconst serializeSteps = steps =>\n pipe(\n map(\n step =>\n `${step.target || ''}|${step.order ?? ''}|${step.group || ''}|${normalizeStepContent(\n step.content\n )}`\n ),\n join(';;')\n )(steps || []);\n\n// Same idea for options: stable key for effect dependencies.\n// Sorting keys ensures we don't recreate the client due to object key ordering.\nconst serializeOptions = options =>\n pipe(\n keys,\n sortBy(identity),\n map(key => `${key}:${String(options[key])}`),\n join('|')\n )(options || {});\n\nexport const shouldStartTour = (autoStart, group, client) => autoStart && !client.isFinished(group);\n\n// Test-only hooks for unit tests (not used in production code).\nexport const __test__ = {\n normalizeStepContent,\n serializeSteps,\n serializeOptions,\n TOURGUIDE_DIALOG_CLASS,\n shouldStartTour\n};\n\nexport const TourGuideStepPropType = PropTypes.shape({\n title: PropTypes.string,\n content: PropTypes.oneOfType([PropTypes.string, PropTypes.node]).isRequired,\n target: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n order: PropTypes.number,\n group: PropTypes.string,\n position: PropTypes.string,\n fixed: PropTypes.bool,\n buttons: PropTypes.arrayOf(\n PropTypes.shape({\n text: PropTypes.string,\n type: PropTypes.string\n })\n )\n});\n\nexport const TourGuideOptionsPropType = PropTypes.shape({\n autoScroll: PropTypes.bool,\n autoScrollSmooth: PropTypes.bool,\n autoScrollOffset: PropTypes.number,\n backdropAnimate: PropTypes.bool,\n backdropClass: PropTypes.string,\n backdropColor: PropTypes.string,\n dialogAnimate: PropTypes.string,\n dialogZ: PropTypes.number,\n dialogWidth: PropTypes.number,\n dialogMaxWidth: PropTypes.number,\n dialogPlacement: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),\n targetPadding: PropTypes.number,\n hideNext: PropTypes.bool,\n hidePrev: PropTypes.bool,\n nextLabel: PropTypes.string,\n prevLabel: PropTypes.string,\n finishLabel: PropTypes.string,\n completeOnFinish: PropTypes.bool,\n exitOnEscape: PropTypes.bool,\n exitOnClickOutside: PropTypes.bool,\n keyboardControls: PropTypes.bool,\n showStepDots: PropTypes.bool,\n stepDotsPlacement: PropTypes.oneOf(['footer', 'body']),\n showButtons: PropTypes.bool,\n showStepProgress: PropTypes.bool,\n progressBar: PropTypes.string,\n closeButton: PropTypes.bool,\n rememberStep: PropTypes.bool,\n propagateEvents: PropTypes.bool,\n debug: PropTypes.bool\n});\n\nexport const TourGuideConfigPropType = PropTypes.shape({\n steps: PropTypes.arrayOf(TourGuideStepPropType).isRequired,\n options: TourGuideOptionsPropType,\n group: PropTypes.string,\n autoStart: PropTypes.bool,\n forceStart: PropTypes.bool,\n startStep: PropTypes.number,\n onStepChange: PropTypes.func,\n onStart: PropTypes.func,\n onExit: PropTypes.func,\n onFinish: PropTypes.func,\n testMode: PropTypes.bool\n});\n\n// TourGuideManager is a React-only controller:\n// - creates/destroys the TourGuide client\n// - starts the tour when allowed\n// - cleans up DOM nodes left by the library\nconst TourGuideManager = ({\n steps = [],\n options = {},\n group,\n autoStart = true,\n forceStart = false,\n startStep,\n onStepChange,\n onStart,\n onExit,\n onFinish,\n // Unit-test injection point to avoid using the real TourGuideClient.\n testClientFactory,\n testMode = false\n}) => {\n const clientRef = useRef(null);\n // Expose refs for unit tests without relying on globals.\n const isTestEnv = Boolean(testMode);\n if (isTestEnv) {\n __test__.__clientRef = clientRef;\n }\n const hasStartedRef = useRef(false);\n const hasExitedRef = useRef(false);\n const startStepRef = useRef(startStep);\n const onStepChangeRef = useRef(onStepChange);\n const onStartRef = useRef(onStart);\n const onExitRef = useRef(onExit);\n const onFinishRef = useRef(onFinish);\n const sanitizedOptions = useMemo(() => {\n // We control dialogClass internally; don't let external props override it.\n const cleanOptions = {...options};\n delete cleanOptions.dialogClass;\n return cleanOptions;\n }, [options]);\n const optionsKey = serializeOptions(sanitizedOptions);\n const sanitizedOptionsRef = useRef({key: optionsKey, value: sanitizedOptions});\n if (sanitizedOptionsRef.current.key !== optionsKey) {\n sanitizedOptionsRef.current = {key: optionsKey, value: sanitizedOptions};\n }\n const stableOptions = sanitizedOptionsRef.current.value;\n const stepsKey = serializeSteps(steps);\n // Clone steps because TourGuideJS mutates targets (string -> HTMLElement).\n // Use stepsKey so we only re-clone when the actual content changes.\n const stepsForClientRef = useRef({key: stepsKey, value: (steps || []).map(step => ({...step}))});\n if (stepsForClientRef.current.key !== stepsKey) {\n stepsForClientRef.current = {key: stepsKey, value: (steps || []).map(step => ({...step}))};\n }\n const stepsForClient = stepsForClientRef.current.value;\n\n useEffect(() => {\n startStepRef.current = startStep;\n onStepChangeRef.current = onStepChange;\n onStartRef.current = onStart;\n onExitRef.current = onExit;\n onFinishRef.current = onFinish;\n }, [startStep, onStepChange, onStart, onExit, onFinish]);\n\n useEffect(() => {\n // Avoid client creation on the server or with empty steps.\n if (typeof window === 'undefined' || stepsForClient.length === 0) {\n return undefined;\n }\n if (!TourGuideClient && !testClientFactory) {\n return undefined;\n }\n const createClient =\n testClientFactory ||\n (clientOptions => {\n return new TourGuideClient(clientOptions);\n });\n // Create a fresh client when steps/options change and apply our fixed dialog class.\n const client = createClient({\n steps: stepsForClient,\n ...stableOptions,\n dialogClass: TOURGUIDE_DIALOG_CLASS\n });\n\n clientRef.current = client;\n hasStartedRef.current = false;\n hasExitedRef.current = false;\n if (typeof startStepRef.current === 'number' && startStepRef.current >= 0) {\n client.activeStep = startStepRef.current;\n }\n client._globalAfterChangeCallback = (currentStepIndex, nextStepIndex) => {\n if (onStepChangeRef.current) {\n onStepChangeRef.current(nextStepIndex);\n }\n };\n client._globalAfterExitCallback = () => {\n if (hasExitedRef.current) {\n return;\n }\n hasExitedRef.current = true;\n if (onExitRef.current) {\n onExitRef.current();\n }\n };\n client._globalFinishCallback = () => {\n if (onFinishRef.current) {\n onFinishRef.current();\n }\n };\n\n return () => {\n // Ensure old DOM nodes are removed; TourGuideJS uses fixed IDs\n // and can otherwise leave stale elements behind.\n const exitPromise = client.isVisible ? client.exit().catch(() => {}) : Promise.resolve();\n exitPromise\n .finally(() => {\n client.dialog?.remove();\n client.backdrop?.remove();\n })\n .catch(() => {});\n if (clientRef.current === client) {\n clientRef.current = null;\n }\n };\n }, [stepsKey, optionsKey, stepsForClient, stableOptions, testClientFactory]);\n\n useEffect(() => {\n const client = clientRef.current;\n if (!client) {\n return undefined;\n }\n\n if (autoStart) {\n // Don't restart a tour that was already completed for this group unless explicitly allowed.\n if (!forceStart && group && client.isFinished && client.isFinished(group)) {\n return undefined;\n }\n if (hasStartedRef.current) {\n hasStartedRef.current = false;\n client.exit().catch(() => {});\n }\n const start = () => {\n // Mark as started before calling into the library to avoid double-start.\n hasStartedRef.current = true;\n if (onStartRef.current) {\n onStartRef.current(client.activeStep, group);\n }\n client.start(group).catch(() => {});\n };\n start();\n } else if (!autoStart && hasStartedRef.current) {\n hasStartedRef.current = false;\n client.exit().catch(() => {});\n }\n\n return undefined;\n }, [autoStart, forceStart, group, stepsKey, optionsKey]);\n\n return null;\n};\n\nTourGuideManager.propTypes = {\n steps: PropTypes.arrayOf(TourGuideStepPropType),\n options: TourGuideOptionsPropType,\n group: PropTypes.string,\n autoStart: PropTypes.bool,\n forceStart: PropTypes.bool,\n startStep: PropTypes.number,\n onStepChange: PropTypes.func,\n onStart: PropTypes.func,\n onExit: PropTypes.func,\n onFinish: PropTypes.func,\n testClientFactory: PropTypes.func,\n testMode: PropTypes.bool\n};\n\nexport default TourGuideManager;\n"],"mappings":"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","ignoreList":[]}