@translation-cms/sync 1.2.15 → 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.
@@ -1 +1 @@
1
- {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/core/cache-internals/params.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA2CpD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,MAAM,EAAE,GACjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAexC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAU3E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC/C,IAAI,CAUN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC9C,kBAAkB,EAAE,MAAM,GAC3B,IAAI,CAoCN"}
1
+ {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/core/cache-internals/params.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAyDpD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,MAAM,EAAE,GACjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAexC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAU3E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC/C,IAAI,CAUN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC9C,kBAAkB,EAAE,MAAM,GAC3B,IAAI,CAoCN"}
@@ -1,6 +1,6 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
- import { randomUUID } from 'crypto';
3
+ import { createHash } from 'crypto';
4
4
  /**
5
5
  * Extract dynamic parameter names from a route string.
6
6
  * E.g. "/[locale]/blog/[slug]" → ["locale", "slug"]
@@ -9,21 +9,34 @@ function extractParamNames(route) {
9
9
  const matches = route.match(/\[(\w+)\]/g) ?? [];
10
10
  return matches.map(m => m.slice(1, -1));
11
11
  }
12
+ /**
13
+ * Generate a deterministic UUID for a param ID.
14
+ * Same param name always produces the same UUID (for consistency).
15
+ * Uses MD5 hash of the param name to create a v4-like UUID.
16
+ */
17
+ function generateDeterministicUUID(paramName) {
18
+ const hash = createHash('md5').update(`cms-param:${paramName}`).digest('hex');
19
+ // Format as UUID v4-like: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
20
+ return `${hash.slice(0, 8)}-${hash.slice(8, 12)}-${hash.slice(12, 16)}-${hash.slice(16, 20)}-${hash.slice(20, 32)}`;
21
+ }
12
22
  /**
13
23
  * Generate a sensible default value for any dynamic route param name.
14
24
  *
15
25
  * Matches by suffix/pattern so it works generically — e.g. `productId`,
16
26
  * `orderId`, `articleSlug`, `teamName` — without hardcoding every variant.
17
27
  *
28
+ * For IDs: generates a deterministic UUID so the same param always produces
29
+ * the same value (important for caching and consistency).
30
+ *
18
31
  * Fallback: converts the param name from camelCase to kebab-case, which is
19
32
  * both human-readable and a valid value for slug-style params.
20
33
  * e.g. `articleSlug` → `"article-slug"`, `teamName` → `"team-name"`
21
34
  */
22
35
  function generateDefaultParamValue(paramName) {
23
36
  const lower = paramName.toLowerCase();
24
- // Any param ending in "id" (userId, productId, orderId, …) → UUID
37
+ // Any param ending in "id" (userId, productId, orderId, …) → deterministic UUID
25
38
  if (lower.endsWith('id'))
26
- return randomUUID();
39
+ return generateDeterministicUUID(paramName);
27
40
  // Email addresses
28
41
  if (lower.includes('email'))
29
42
  return 'demo@example.com';
@@ -1 +1 @@
1
- {"version":3,"file":"params.js","sourceRoot":"","sources":["../../../src/core/cache-internals/params.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"params.js","sourceRoot":"","sources":["../../../src/core/cache-internals/params.ts"],"names":[],"mappings":"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"}
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,EACH,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,GACzB,MAAM,8BAA8B,CAAC;AAEtC,mBAAmB;AACnB,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EACH,uBAAuB,EACvB,eAAe,EACf,cAAc,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EACH,wBAAwB,EACxB,wBAAwB,GAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EACH,mBAAmB,EACnB,sBAAsB,GACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACH,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACnB,MAAM,8BAA8B,CAAC;AAQtC,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgC;IAChE,IAAI,KAAK,CAAC,aAAa;QAAE,OAAO;IAEhC,MAAM,KAAK,GACP,OAAO,MAAM,KAAK,WAAW;QAC7B,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,WAAW;YACrC,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,WAAW;YACxC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IAEzD,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO;IACX,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACrC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAClD,YAAY,EAAE,CAAC;IAEf,mEAAmE;IACnE,mEAAmE;IACnE,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC;QACrD,wBAAwB,EAAE,CAAC;IAC/B,CAAC;IAED,yCAAyC;IACzC,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;QAC3B,mBAAmB,EAAE,CAAC;QACtB,kBAAkB,EAAE,CAAC;QACrB,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,GAAG,CACP,yBAAyB,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,EAC/E,oCAAoC,CACvC,CAAC;AACN,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,sBAAsB;IAClC,IAAI,CAAC,KAAK,CAAC,aAAa;QAAE,OAAO;IACjC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACrD,wBAAwB,EAAE,CAAC;IAC3B,sBAAsB,EAAE,CAAC;IACzB,kBAAkB,EAAE,CAAC;IACrB,eAAe,EAAE,CAAC;IAClB,KAAK,CAAC,UAAU,EAAE,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AACrD,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,aAAa,CAAC,KAAmB;IACtC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAsB,CAAC;IAEzD,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,IAA2B,CAAC;QACjE,OAAO,CAAC,GAAG,CACP,+BAA+B,GAAG,KAAK,MAAM,QAAQ,KAAK,GAAG,CAChE,CAAC;QACF,yEAAyE;QACzE,sEAAsE;QACtE,+DAA+D;QAC/D,IAAI,MAAM,IAAI,MAAM,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC;YAC1C,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC9B,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QACD,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAChC,KAAK,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,uBAAuB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACpC,yEAAyE;QACzE,0DAA0D;QAC1D,IAAI,KAAK,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,UAAU,CAAC,GAAG,EAAE;gBACZ,IAAI,KAAK,CAAC,gBAAgB,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;oBACtC,OAAO,CAAC,GAAG,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;oBAC5D,uBAAuB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACxC,CAAC;YACL,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,CAAC;IACL,CAAC;SAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACpC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,IAA4B,CAAC;QAClE,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;SAAM,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACtC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,IAA8B,CAAC;QACxD,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC9B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;AACL,CAAC"}
@@ -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":"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"}
@@ -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":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAC9B,mBAAmB;IACnB,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,GAAG,2BAA2B,CAAC;IAC3C,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC9C,SAAS,CAAC,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgDrB,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEjE,oDAAoD;IACpD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC;IACjE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,iBAAiB,UAAU,CAAC;IAEpE,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;AACxD,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,kBAAkB;IAC9B,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,2BAA2B,CAAC,CAAC;IACvE,IAAI,SAAS,EAAE,CAAC;QACZ,SAAS,CAAC,MAAM,EAAE,CAAC;QACnB,sBAAsB;QACtB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;IAC1C,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACL,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC;QAC5B,CAAC;IACL,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAC9B,KAAsC;IAEtC,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACxD,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC;QACzB,OAAO;IACX,CAAC;IAED,mCAAmC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;QAChB,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC;QACrD,IAAI,OAAO,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC;QACtD,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;QACpE,OAAO,GAAG,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhB,OAAO,CAAC,WAAW,GAAG,UAAU,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACzF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,KAAa;IACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/C,QAAQ,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG;;;;;;;;;;;;;;;;KAgBxB,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAEhC,QAAQ,CAAC,SAAS,GAAG;;;cAGX,UAAU,CAAC,QAAQ,MAAM,QAAQ,CAAC,QAAQ;;KAEnD,CAAC;IAEF,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAErC,gCAAgC;IAChC,UAAU,CAAC,GAAG,EAAE;QACZ,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QAC7B,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,mBAAmB,CAAC;QAChD,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,EAAE,IAAI,CAAC,CAAC;AACb,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@translation-cms/sync",
3
- "version": "1.2.15",
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",