@translation-cms/sync 1.2.16 → 1.2.17

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.
@@ -27,6 +27,7 @@
27
27
  * ```
28
28
  */
29
29
  export type { PreviewListenerOptions } from './internals/types.js';
30
+ export { updateURLDisplay, updateStateDisplay, showNavigationFeedback, } from './internals/ui-indicators.js';
30
31
  import type { PreviewListenerOptions } from './internals/types.js';
31
32
  /**
32
33
  * Initialize the preview listener.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/preview/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAenE,OAAO,KAAK,EAIR,sBAAsB,EACzB,MAAM,sBAAsB,CAAC;AAM9B;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI,CA4B1E;AAED,4DAA4D;AAC5D,wBAAgB,sBAAsB,IAAI,IAAI,CAO7C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/preview/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EACH,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,GACzB,MAAM,8BAA8B,CAAC;AAwBtC,OAAO,KAAK,EAIR,sBAAsB,EACzB,MAAM,sBAAsB,CAAC;AAM9B;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAqC1E;AAED,4DAA4D;AAC5D,wBAAgB,sBAAsB,IAAI,IAAI,CAS7C"}
@@ -26,12 +26,15 @@
26
26
  * <h1 data-cms-key="blog:post.title">{t('blog:post.title')}</h1>
27
27
  * ```
28
28
  */
29
+ export { updateURLDisplay, updateStateDisplay, showNavigationFeedback, } from './internals/ui-indicators.js';
29
30
  // Internal imports
30
31
  import * as state from './internals/state.js';
31
32
  import { highlightTranslationKey, clearHighlights, updateLiveText, } from './internals/highlight.js';
32
33
  import { handleLocaleSwitch } from './internals/locales.js';
33
34
  import { injectInteractionBlocker, removeInteractionBlocker, } from './internals/interactions.js';
34
35
  import { injectStyles } from './internals/styles.js';
36
+ import { initInteractiveMode, cleanupInteractiveMode, } from './internals/interactive.js';
37
+ import { injectUIIndicators, removeUIIndicators, updateURLDisplay, } from './internals/ui-indicators.js';
35
38
  // ---------------------------------------------------------------------------
36
39
  // Public functions
37
40
  // ---------------------------------------------------------------------------
@@ -54,13 +57,18 @@ export function initPreviewListener(options) {
54
57
  state.setIsInitialized(true);
55
58
  window.addEventListener('message', handleMessage);
56
59
  injectStyles();
57
- // Only inject the interaction blocker when running inside an iframe
58
- // (i.e. the CMS preview context). Opening the page directly on localhost
59
- // should never have interactions blocked.
60
- if (window.top !== window) {
60
+ // Only inject the interaction blocker when NOT in interactive mode
61
+ // and when running inside an iframe (i.e. the CMS preview context)
62
+ if (window.top !== window && !options?.interactiveMode) {
61
63
  injectInteractionBlocker();
62
64
  }
63
- console.log('%c[CMS Preview] Ready', 'color: #10b981; font-weight: bold;');
65
+ // Initialize interactive mode if enabled
66
+ if (options?.interactiveMode) {
67
+ initInteractiveMode();
68
+ injectUIIndicators();
69
+ updateURLDisplay(window.location.href);
70
+ }
71
+ console.log(`%c[CMS Preview] Ready ${options?.interactiveMode ? '(interactive mode)' : ''}`, 'color: #10b981; font-weight: bold;');
64
72
  }
65
73
  /** Remove the preview listener and clear all highlights. */
66
74
  export function cleanupPreviewListener() {
@@ -68,6 +76,8 @@ export function cleanupPreviewListener() {
68
76
  return;
69
77
  window.removeEventListener('message', handleMessage);
70
78
  removeInteractionBlocker();
79
+ cleanupInteractiveMode();
80
+ removeUIIndicators();
71
81
  clearHighlights();
72
82
  state.resetState();
73
83
  console.log('[CMS Preview] Listener cleaned up');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/preview/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/preview/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Interactive preview mode: allow clicks, form interactions, navigation.
3
+ * Editors can explore the app while seeing translations highlighted.
4
+ */
5
+ /**
6
+ * Initialize interactive mode:
7
+ * - Allow form interactions (typing, selecting)
8
+ * - Intercept navigation to report back to CMS
9
+ * - Capture/restore app state when navigating
10
+ */
11
+ export declare function initInteractiveMode(): void;
12
+ /** Clean up interactive mode event listeners. */
13
+ export declare function cleanupInteractiveMode(): void;
14
+ //# sourceMappingURL=interactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../../src/preview/internals/interactive.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAc1C;AAED,iDAAiD;AACjD,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Interactive preview mode: allow clicks, form interactions, navigation.
3
+ * Editors can explore the app while seeing translations highlighted.
4
+ */
5
+ import * as state from './state.js';
6
+ import { updateURLDisplay, updateStateDisplay, showNavigationFeedback, } from './ui-indicators.js';
7
+ /**
8
+ * Initialize interactive mode:
9
+ * - Allow form interactions (typing, selecting)
10
+ * - Intercept navigation to report back to CMS
11
+ * - Capture/restore app state when navigating
12
+ */
13
+ export function initInteractiveMode() {
14
+ if (!window.top || window.top === window) {
15
+ // Not in an iframe — no need to intercept navigation
16
+ return;
17
+ }
18
+ // Capture state before navigation
19
+ window.addEventListener('click', handleLinkClick, true);
20
+ window.addEventListener('submit', handleFormSubmit, true);
21
+ // Track URL changes (for Single Page Apps)
22
+ trackURLChanges();
23
+ console.log('[CMS Preview] Interactive mode enabled');
24
+ }
25
+ /** Clean up interactive mode event listeners. */
26
+ export function cleanupInteractiveMode() {
27
+ window.removeEventListener('click', handleLinkClick, true);
28
+ window.removeEventListener('submit', handleFormSubmit, true);
29
+ }
30
+ // ---------------------------------------------------------------------------
31
+ // Event handlers
32
+ // ---------------------------------------------------------------------------
33
+ /**
34
+ * Intercept link clicks to:
35
+ * 1. Capture current app state
36
+ * 2. Report navigation to CMS
37
+ * 3. Wait for page load, then restore state
38
+ */
39
+ function handleLinkClick(event) {
40
+ const elem = event.target;
41
+ const link = elem.closest('a');
42
+ if (!link || !link.href)
43
+ return;
44
+ // Don't intercept external links or special links
45
+ if (link.target === '_blank' ||
46
+ link.target === '_parent' ||
47
+ link.target === '_top' ||
48
+ link.hasAttribute('download')) {
49
+ return;
50
+ }
51
+ // Check if it's a navigation link (not anchor-only)
52
+ const url = new URL(link.href);
53
+ const currentUrl = new URL(window.location.href);
54
+ // If it's just an anchor change, don't capture state
55
+ if (url.hostname === currentUrl.hostname &&
56
+ url.pathname === currentUrl.pathname &&
57
+ url.search === currentUrl.search &&
58
+ url.hash !== currentUrl.hash) {
59
+ return;
60
+ }
61
+ // Capture state before navigation
62
+ const appState = state.stateCapture?.();
63
+ // Report navigation to CMS
64
+ reportNavigation(url.href, appState);
65
+ // Set up state restoration after page loads
66
+ if (appState && state.stateRestore) {
67
+ window.addEventListener('load', () => {
68
+ state.stateRestore?.(appState);
69
+ });
70
+ }
71
+ }
72
+ /**
73
+ * Intercept form submissions to report to CMS.
74
+ */
75
+ function handleFormSubmit(event) {
76
+ const form = event.target;
77
+ if (!form || !form.action)
78
+ return;
79
+ const appState = state.stateCapture?.();
80
+ reportNavigation(form.action, appState);
81
+ }
82
+ /**
83
+ * Track URL changes in Single Page Apps (detect history pushes).
84
+ */
85
+ function trackURLChanges() {
86
+ const originalPushState = window.history.pushState;
87
+ const originalReplaceState = window.history.replaceState;
88
+ window.history.pushState = function (state, unused, url) {
89
+ const result = originalPushState.call(window.history, state, unused, url);
90
+ if (url)
91
+ reportNavigation(String(url));
92
+ return result;
93
+ };
94
+ window.history.replaceState = function (state, unused, url) {
95
+ const result = originalReplaceState.call(window.history, state, unused, url);
96
+ if (url)
97
+ reportNavigation(String(url));
98
+ return result;
99
+ };
100
+ }
101
+ // ---------------------------------------------------------------------------
102
+ // Message reporting
103
+ // ---------------------------------------------------------------------------
104
+ /**
105
+ * Send navigation event to CMS.
106
+ * Allows the CMS to know which route/URL we're viewing.
107
+ */
108
+ function reportNavigation(url, appState) {
109
+ if (!window.top || window.top === window)
110
+ return;
111
+ const message = {
112
+ type: 'CMS_NAVIGATE',
113
+ url,
114
+ state: appState,
115
+ };
116
+ // Show navigation feedback
117
+ showNavigationFeedback(window.location.href, url);
118
+ // Update UI displays
119
+ updateURLDisplay(url);
120
+ updateStateDisplay(appState);
121
+ window.top.postMessage(message, '*');
122
+ console.log(`[CMS Preview] Navigated to: ${url}`);
123
+ }
124
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../../src/preview/internals/interactive.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,EACH,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,GACzB,MAAM,oBAAoB,CAAC;AAE5B;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB;IAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;QACvC,qDAAqD;QACrD,OAAO;IACX,CAAC;IAED,kCAAkC;IAClC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAE1D,2CAA2C;IAC3C,eAAe,EAAE,CAAC;IAElB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;AAC1D,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,sBAAsB;IAClC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;;;GAKG;AACH,SAAS,eAAe,CAAC,KAAY;IACjC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAqB,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAsB,CAAC;IAEpD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE,OAAO;IAEhC,kDAAkD;IAClD,IACI,IAAI,CAAC,MAAM,KAAK,QAAQ;QACxB,IAAI,CAAC,MAAM,KAAK,SAAS;QACzB,IAAI,CAAC,MAAM,KAAK,MAAM;QACtB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAC/B,CAAC;QACC,OAAO;IACX,CAAC;IAED,oDAAoD;IACpD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEjD,qDAAqD;IACrD,IACI,GAAG,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ;QACpC,GAAG,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ;QACpC,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM;QAChC,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,EAC9B,CAAC;QACC,OAAO;IACX,CAAC;IAED,kCAAkC;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;IAExC,2BAA2B;IAC3B,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAErC,4CAA4C;IAC5C,IAAI,QAAQ,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACjC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YACjC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,KAAY;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAyB,CAAC;IAC7C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO;IAElC,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;IACxC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,eAAe;IACpB,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;IACnD,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;IAEzD,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,UACvB,KAAU,EACV,MAAc,EACd,GAAyB;QAEzB,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CACjC,MAAM,CAAC,OAAO,EACd,KAAK,EACL,MAAM,EACN,GAAG,CACN,CAAC;QACF,IAAI,GAAG;YAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,UAC1B,KAAU,EACV,MAAc,EACd,GAAyB;QAEzB,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CACpC,MAAM,CAAC,OAAO,EACd,KAAK,EACL,MAAM,EACN,GAAG,CACN,CAAC;QACF,IAAI,GAAG;YAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;AACN,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,gBAAgB,CAAC,GAAW,EAAE,QAA8B;IACjE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM;QAAE,OAAO;IAEjD,MAAM,OAAO,GAAuB;QAChC,IAAI,EAAE,cAAc;QACpB,GAAG;QACH,KAAK,EAAE,QAAQ;KAClB,CAAC;IAEF,2BAA2B;IAC3B,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAElD,qBAAqB;IACrB,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtB,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAE7B,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;AACtD,CAAC"}
@@ -13,6 +13,8 @@ export declare let pendingHighlight: {
13
13
  key: string;
14
14
  value: string;
15
15
  } | null;
16
+ export declare let stateCapture: (() => Record<string, any>) | undefined;
17
+ export declare let stateRestore: ((state: Record<string, any>) => void) | undefined;
16
18
  /**
17
19
  * Reset all state when cleaning up.
18
20
  */
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/preview/internals/state.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,eAAO,IAAI,aAAa,SAAQ,CAAC;AACjC,eAAO,IAAI,mBAAmB,EAAE,WAAW,EAAO,CAAC;AACnD,eAAO,IAAI,IAAI,EAAE,sBAA2B,CAAC;AAC7C,eAAO,IAAI,gBAAgB,EAAE,MAAM,GAAG,IAAW,CAAC;AAClD,eAAO,IAAI,kBAAkB,EAAE,MAAM,GAAG,IAAW,CAAC;AACpD,eAAO,IAAI,YAAY,EAAE,MAAM,GAAG,IAAW,CAAC;AAC9C,eAAO,IAAI,yBAAyB,EAAE,cAAc,GAAG,IAAW,CAAC;AACnE,eAAO,IAAI,gBAAgB,EAAE;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACjB,GAAG,IAAW,CAAC;AAEhB;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CASjC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAUrE;AAGD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAErD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE9D;AAED,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAC7C,IAAI,CAEN;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEhE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAEjE;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAE3D;AAED,wBAAgB,4BAA4B,CACxC,KAAK,EAAE,cAAc,GAAG,IAAI,GAC7B,IAAI,CAEN"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/preview/internals/state.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,eAAO,IAAI,aAAa,SAAQ,CAAC;AACjC,eAAO,IAAI,mBAAmB,EAAE,WAAW,EAAO,CAAC;AACnD,eAAO,IAAI,IAAI,EAAE,sBAA2B,CAAC;AAC7C,eAAO,IAAI,gBAAgB,EAAE,MAAM,GAAG,IAAW,CAAC;AAClD,eAAO,IAAI,kBAAkB,EAAE,MAAM,GAAG,IAAW,CAAC;AACpD,eAAO,IAAI,YAAY,EAAE,MAAM,GAAG,IAAW,CAAC;AAC9C,eAAO,IAAI,yBAAyB,EAAE,cAAc,GAAG,IAAW,CAAC;AACnE,eAAO,IAAI,gBAAgB,EAAE;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACjB,GAAG,IAAW,CAAC;AAGhB,eAAO,IAAI,YAAY,EAAE,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;AACjE,eAAO,IAAI,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;AAE5E;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAWjC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAYrE;AAGD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAErD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE9D;AAED,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAC7C,IAAI,CAEN;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEhE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAEjE;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAE3D;AAED,wBAAgB,4BAA4B,CACxC,KAAK,EAAE,cAAc,GAAG,IAAI,GAC7B,IAAI,CAEN"}
@@ -9,6 +9,9 @@ export let currentSearchValue = null;
9
9
  export let activeLocale = null;
10
10
  export let interactionBlockerOverlay = null;
11
11
  export let pendingHighlight = null;
12
+ // Interactive mode callbacks
13
+ export let stateCapture;
14
+ export let stateRestore;
12
15
  /**
13
16
  * Reset all state when cleaning up.
14
17
  */
@@ -21,12 +24,16 @@ export function resetState() {
21
24
  activeLocale = null;
22
25
  interactionBlockerOverlay = null;
23
26
  pendingHighlight = null;
27
+ stateCapture = undefined;
28
+ stateRestore = undefined;
24
29
  }
25
30
  /**
26
31
  * Initialize state with global values.
27
32
  */
28
33
  export function initializeState(options) {
29
34
  opts = options;
35
+ stateCapture = options.stateCapture;
36
+ stateRestore = options.stateRestore;
30
37
  // Seed activeLocale from the URL's ?locale= param so that the first
31
38
  // CMS_HIGHLIGHT_KEY doesn't needlessly trigger a locale switch (and
32
39
  // re-render) when the iframe already loaded with the correct locale.
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/preview/internals/state.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,IAAI,aAAa,GAAG,KAAK,CAAC;AACjC,MAAM,CAAC,IAAI,mBAAmB,GAAkB,EAAE,CAAC;AACnD,MAAM,CAAC,IAAI,IAAI,GAA2B,EAAE,CAAC;AAC7C,MAAM,CAAC,IAAI,gBAAgB,GAAkB,IAAI,CAAC;AAClD,MAAM,CAAC,IAAI,kBAAkB,GAAkB,IAAI,CAAC;AACpD,MAAM,CAAC,IAAI,YAAY,GAAkB,IAAI,CAAC;AAC9C,MAAM,CAAC,IAAI,yBAAyB,GAA0B,IAAI,CAAC;AACnE,MAAM,CAAC,IAAI,gBAAgB,GAGhB,IAAI,CAAC;AAEhB;;GAEG;AACH,MAAM,UAAU,UAAU;IACtB,aAAa,GAAG,KAAK,CAAC;IACtB,mBAAmB,GAAG,EAAE,CAAC;IACzB,IAAI,GAAG,EAAE,CAAC;IACV,gBAAgB,GAAG,IAAI,CAAC;IACxB,kBAAkB,GAAG,IAAI,CAAC;IAC1B,YAAY,GAAG,IAAI,CAAC;IACpB,yBAAyB,GAAG,IAAI,CAAC;IACjC,gBAAgB,GAAG,IAAI,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC3D,IAAI,GAAG,OAAO,CAAC;IACf,oEAAoE;IACpE,oEAAoE;IACpE,qEAAqE;IACrE,IAAI,CAAC;QACD,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACL,YAAY,GAAG,IAAI,CAAC;IACxB,CAAC;AACL,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC3C,aAAa,GAAG,KAAK,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAoB;IAChD,YAAY,GAAG,KAAK,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAoB;IACpD,gBAAgB,GAAG,KAAK,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAC/B,KAA4C;IAE5C,gBAAgB,GAAG,KAAK,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAoB;IACtD,kBAAkB,GAAG,KAAK,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAoB;IACvD,mBAAmB,GAAG,KAAK,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EAAe;IACjD,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,4BAA4B,CACxC,KAA4B;IAE5B,yBAAyB,GAAG,KAAK,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/preview/internals/state.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,IAAI,aAAa,GAAG,KAAK,CAAC;AACjC,MAAM,CAAC,IAAI,mBAAmB,GAAkB,EAAE,CAAC;AACnD,MAAM,CAAC,IAAI,IAAI,GAA2B,EAAE,CAAC;AAC7C,MAAM,CAAC,IAAI,gBAAgB,GAAkB,IAAI,CAAC;AAClD,MAAM,CAAC,IAAI,kBAAkB,GAAkB,IAAI,CAAC;AACpD,MAAM,CAAC,IAAI,YAAY,GAAkB,IAAI,CAAC;AAC9C,MAAM,CAAC,IAAI,yBAAyB,GAA0B,IAAI,CAAC;AACnE,MAAM,CAAC,IAAI,gBAAgB,GAGhB,IAAI,CAAC;AAEhB,6BAA6B;AAC7B,MAAM,CAAC,IAAI,YAAqD,CAAC;AACjE,MAAM,CAAC,IAAI,YAAgE,CAAC;AAE5E;;GAEG;AACH,MAAM,UAAU,UAAU;IACtB,aAAa,GAAG,KAAK,CAAC;IACtB,mBAAmB,GAAG,EAAE,CAAC;IACzB,IAAI,GAAG,EAAE,CAAC;IACV,gBAAgB,GAAG,IAAI,CAAC;IACxB,kBAAkB,GAAG,IAAI,CAAC;IAC1B,YAAY,GAAG,IAAI,CAAC;IACpB,yBAAyB,GAAG,IAAI,CAAC;IACjC,gBAAgB,GAAG,IAAI,CAAC;IACxB,YAAY,GAAG,SAAS,CAAC;IACzB,YAAY,GAAG,SAAS,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC3D,IAAI,GAAG,OAAO,CAAC;IACf,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IACpC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IACpC,oEAAoE;IACpE,oEAAoE;IACpE,qEAAqE;IACrE,IAAI,CAAC;QACD,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACL,YAAY,GAAG,IAAI,CAAC;IACxB,CAAC;AACL,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC3C,aAAa,GAAG,KAAK,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAoB;IAChD,YAAY,GAAG,KAAK,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAoB;IACpD,gBAAgB,GAAG,KAAK,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAC/B,KAA4C;IAE5C,gBAAgB,GAAG,KAAK,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAoB;IACtD,kBAAkB,GAAG,KAAK,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAoB;IACvD,mBAAmB,GAAG,KAAK,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EAAe;IACjD,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,4BAA4B,CACxC,KAA4B;IAE5B,yBAAyB,GAAG,KAAK,CAAC;AACtC,CAAC"}
@@ -21,6 +21,15 @@ export interface CMSSwitchLocaleMessage {
21
21
  type: 'CMS_SWITCH_LOCALE';
22
22
  locale: string;
23
23
  }
24
+ /**
25
+ * Sent from app to CMS when user navigates in interactive mode.
26
+ * Allows CMS to track which route the editor is viewing.
27
+ */
28
+ export interface CMSNavigateMessage {
29
+ type: 'CMS_NAVIGATE';
30
+ url: string;
31
+ state?: Record<string, any>;
32
+ }
24
33
  export interface PreviewListenerOptions {
25
34
  /**
26
35
  * Custom CSS to apply to highlighted elements.
@@ -45,5 +54,21 @@ export interface PreviewListenerOptions {
45
54
  * When omitted, the listener looks for `window.__cmsSetLocale(locale)`.
46
55
  */
47
56
  onLocaleSwitch?: (locale: string) => void;
57
+ /**
58
+ * Enable interactive mode: allow clicks, form interactions, navigation.
59
+ * When enabled, the preview is fully interactive instead of read-only.
60
+ * @default false
61
+ */
62
+ interactiveMode?: boolean;
63
+ /**
64
+ * Capture the current app state (e.g., open dialogs, form values).
65
+ * Called before navigation to preserve context.
66
+ */
67
+ stateCapture?: () => Record<string, any>;
68
+ /**
69
+ * Restore app state after navigation (e.g., reopen dialogs).
70
+ * Allows editors to maintain their position when clicking through.
71
+ */
72
+ stateRestore?: (state: Record<string, any>) => void;
48
73
  }
49
74
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/preview/internals/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACnC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,sBAAsB;IACnC;;;OAGG;IACH,eAAe,CAAC,EAAE;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/preview/internals/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACnC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAMD,MAAM,WAAW,sBAAsB;IACnC;;;OAGG;IACH,eAAe,CAAC,EAAE;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;CACvD"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * UI Indicators for interactive preview mode.
3
+ * Shows current URL, state, and navigation feedback.
4
+ */
5
+ /**
6
+ * Create and inject the UI breadcrumb bar showing current URL/state.
7
+ */
8
+ export declare function injectUIIndicators(): void;
9
+ /** Remove UI indicators. */
10
+ export declare function removeUIIndicators(): void;
11
+ /**
12
+ * Update the URL display in the breadcrumb bar.
13
+ */
14
+ export declare function updateURLDisplay(url: string): void;
15
+ /**
16
+ * Update the state display (e.g., showing captured state summary).
17
+ */
18
+ export declare function updateStateDisplay(state: Record<string, any> | undefined): void;
19
+ /**
20
+ * Show a temporary navigation feedback indicator.
21
+ */
22
+ export declare function showNavigationFeedback(fromUrl: string, toUrl: string): void;
23
+ //# sourceMappingURL=ui-indicators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-indicators.d.ts","sourceRoot":"","sources":["../../../src/preview/internals/ui-indicators.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CA6DzC;AAED,4BAA4B;AAC5B,wBAAgB,kBAAkB,IAAI,IAAI,CAOzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAUlD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GACvC,IAAI,CAqBN;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAuC3E"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * UI Indicators for interactive preview mode.
3
+ * Shows current URL, state, and navigation feedback.
4
+ */
5
+ /**
6
+ * Create and inject the UI breadcrumb bar showing current URL/state.
7
+ */
8
+ export function injectUIIndicators() {
9
+ // Create container
10
+ const container = document.createElement('div');
11
+ container.id = 'cms-preview-ui-indicators';
12
+ container.setAttribute('data-cms-ui', 'true');
13
+ container.innerHTML = `
14
+ <div style="
15
+ position: fixed;
16
+ top: 0;
17
+ left: 0;
18
+ right: 0;
19
+ height: 40px;
20
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
21
+ color: white;
22
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
23
+ font-size: 12px;
24
+ padding: 8px 16px;
25
+ display: flex;
26
+ align-items: center;
27
+ justify-content: space-between;
28
+ box-shadow: 0 2px 8px rgba(0,0,0,0.15);
29
+ z-index: 2147483647;
30
+ gap: 16px;
31
+ ">
32
+ <div style="flex: 1; display: flex; align-items: center; gap: 8px; overflow: hidden;">
33
+ <span style="
34
+ font-weight: 600;
35
+ padding: 2px 8px;
36
+ background: rgba(255,255,255,0.2);
37
+ border-radius: 4px;
38
+ white-space: nowrap;
39
+ ">CMS Preview</span>
40
+ <code id="cms-ui-url" style="
41
+ flex: 1;
42
+ overflow: hidden;
43
+ text-overflow: ellipsis;
44
+ white-space: nowrap;
45
+ background: rgba(0,0,0,0.1);
46
+ padding: 2px 6px;
47
+ border-radius: 2px;
48
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
49
+ ">...</code>
50
+ </div>
51
+ <div id="cms-ui-state" style="
52
+ font-size: 10px;
53
+ padding: 2px 8px;
54
+ background: rgba(0,0,0,0.1);
55
+ border-radius: 4px;
56
+ max-width: 200px;
57
+ overflow: hidden;
58
+ text-overflow: ellipsis;
59
+ "></div>
60
+ </div>
61
+ `;
62
+ document.body?.insertBefore(container, document.body.firstChild);
63
+ // Adjust body margin to make room for the indicator
64
+ const originalMarginTop = document.body.style.marginTop || '0px';
65
+ document.body.style.marginTop = `calc(${originalMarginTop} + 40px)`;
66
+ console.log('[CMS Preview] UI indicators injected');
67
+ }
68
+ /** Remove UI indicators. */
69
+ export function removeUIIndicators() {
70
+ const container = document.getElementById('cms-preview-ui-indicators');
71
+ if (container) {
72
+ container.remove();
73
+ // Restore body margin
74
+ document.body.style.marginTop = '0px';
75
+ }
76
+ }
77
+ /**
78
+ * Update the URL display in the breadcrumb bar.
79
+ */
80
+ export function updateURLDisplay(url) {
81
+ const urlEl = document.getElementById('cms-ui-url');
82
+ if (urlEl) {
83
+ try {
84
+ const urlObj = new URL(url);
85
+ urlEl.textContent = urlObj.pathname + urlObj.search + urlObj.hash;
86
+ }
87
+ catch {
88
+ urlEl.textContent = url;
89
+ }
90
+ }
91
+ }
92
+ /**
93
+ * Update the state display (e.g., showing captured state summary).
94
+ */
95
+ export function updateStateDisplay(state) {
96
+ const stateEl = document.getElementById('cms-ui-state');
97
+ if (!stateEl)
98
+ return;
99
+ if (!state || Object.keys(state).length === 0) {
100
+ stateEl.textContent = '';
101
+ return;
102
+ }
103
+ // Show a summary of captured state
104
+ const summary = Object.entries(state)
105
+ .map(([key, val]) => {
106
+ if (typeof val === 'number')
107
+ return `${key}: ${val}`;
108
+ if (typeof val === 'boolean')
109
+ return `${key}: ${val}`;
110
+ if (typeof val === 'string')
111
+ return `${key}: "${val.slice(0, 10)}"`;
112
+ return `${key}: …`;
113
+ })
114
+ .slice(0, 3)
115
+ .join(', ');
116
+ stateEl.textContent = `State: ${summary}${Object.keys(state).length > 3 ? '…' : ''}`;
117
+ }
118
+ /**
119
+ * Show a temporary navigation feedback indicator.
120
+ */
121
+ export function showNavigationFeedback(fromUrl, toUrl) {
122
+ const feedback = document.createElement('div');
123
+ feedback.setAttribute('data-cms-feedback', 'true');
124
+ feedback.style.cssText = `
125
+ position: fixed;
126
+ top: 50%;
127
+ left: 50%;
128
+ transform: translate(-50%, -50%);
129
+ background: rgba(102, 126, 234, 0.95);
130
+ color: white;
131
+ padding: 16px 24px;
132
+ border-radius: 8px;
133
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
134
+ font-size: 13px;
135
+ box-shadow: 0 8px 24px rgba(0,0,0,0.25);
136
+ z-index: 2147483648;
137
+ pointer-events: none;
138
+ max-width: 400px;
139
+ text-align: center;
140
+ `;
141
+ const fromUrlObj = new URL(fromUrl);
142
+ const toUrlObj = new URL(toUrl);
143
+ feedback.innerHTML = `
144
+ <div style="font-weight: 600; margin-bottom: 4px;">Navigating</div>
145
+ <div style="font-size: 11px; opacity: 0.9;">
146
+ ${fromUrlObj.pathname} → ${toUrlObj.pathname}
147
+ </div>
148
+ `;
149
+ document.body?.appendChild(feedback);
150
+ // Auto-remove after 1.5 seconds
151
+ setTimeout(() => {
152
+ feedback.style.opacity = '0';
153
+ feedback.style.transition = 'opacity 0.3s ease';
154
+ setTimeout(() => feedback.remove(), 300);
155
+ }, 1500);
156
+ }
157
+ //# sourceMappingURL=ui-indicators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-indicators.js","sourceRoot":"","sources":["../../../src/preview/internals/ui-indicators.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@translation-cms/sync",
3
- "version": "1.2.16",
3
+ "version": "1.2.17",
4
4
  "description": "Scan translation keys in your codebase and sync them to the Translations CMS",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",