@intlayer/editor 8.3.4 → 8.4.0-canary.0
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.
- package/dist/cjs/_virtual/_@oxc-project_runtime@0.115.0/helpers/decorate.cjs +1 -0
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +1 -0
- package/dist/cjs/components/ContentSelector.cjs +41 -1
- package/dist/cjs/components/ContentSelector.cjs.map +1 -0
- package/dist/cjs/components/ContentSelectorWrapper.cjs +15 -0
- package/dist/cjs/components/ContentSelectorWrapper.cjs.map +1 -0
- package/dist/cjs/components/EditedContent.cjs +13 -0
- package/dist/cjs/components/EditedContent.cjs.map +1 -0
- package/dist/cjs/components/IntlayerEditor.cjs +2 -0
- package/dist/cjs/components/IntlayerEditor.cjs.map +1 -0
- package/dist/cjs/components/index.cjs +1 -1
- package/dist/cjs/core/CrossFrameMessenger.cjs +1 -1
- package/dist/cjs/core/CrossFrameMessenger.cjs.map +1 -1
- package/dist/cjs/core/EditorStateManager.cjs +1 -1
- package/dist/cjs/core/EditorStateManager.cjs.map +1 -1
- package/dist/cjs/core/IframeClickInterceptor.cjs +1 -1
- package/dist/cjs/core/IframeClickInterceptor.cjs.map +1 -1
- package/dist/cjs/core/UrlStateManager.cjs +1 -1
- package/dist/cjs/core/UrlStateManager.cjs.map +1 -1
- package/dist/cjs/core/globalManager.cjs +2 -0
- package/dist/cjs/core/globalManager.cjs.map +1 -0
- package/dist/cjs/core/index.cjs +1 -1
- package/dist/cjs/core/initEditorClient.cjs +2 -0
- package/dist/cjs/core/initEditorClient.cjs.map +1 -0
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/isEnabled.cjs +2 -0
- package/dist/cjs/isEnabled.cjs.map +1 -0
- package/dist/cjs/messageKey.cjs +2 -0
- package/dist/cjs/messageKey.cjs.map +1 -0
- package/dist/esm/_virtual/_@oxc-project_runtime@0.115.0/helpers/decorate.mjs +1 -0
- package/dist/esm/components/ContentSelector.mjs +41 -1
- package/dist/esm/components/ContentSelector.mjs.map +1 -0
- package/dist/esm/components/ContentSelectorWrapper.mjs +15 -0
- package/dist/esm/components/ContentSelectorWrapper.mjs.map +1 -0
- package/dist/esm/components/EditedContent.mjs +13 -0
- package/dist/esm/components/EditedContent.mjs.map +1 -0
- package/dist/esm/components/IntlayerEditor.mjs +2 -0
- package/dist/esm/components/IntlayerEditor.mjs.map +1 -0
- package/dist/esm/components/index.mjs +1 -1
- package/dist/esm/core/CrossFrameMessenger.mjs +1 -1
- package/dist/esm/core/CrossFrameMessenger.mjs.map +1 -1
- package/dist/esm/core/EditorStateManager.mjs +1 -1
- package/dist/esm/core/EditorStateManager.mjs.map +1 -1
- package/dist/esm/core/IframeClickInterceptor.mjs +1 -1
- package/dist/esm/core/IframeClickInterceptor.mjs.map +1 -1
- package/dist/esm/core/UrlStateManager.mjs +1 -1
- package/dist/esm/core/UrlStateManager.mjs.map +1 -1
- package/dist/esm/core/globalManager.mjs +2 -0
- package/dist/esm/core/globalManager.mjs.map +1 -0
- package/dist/esm/core/index.mjs +1 -1
- package/dist/esm/core/initEditorClient.mjs +2 -0
- package/dist/esm/core/initEditorClient.mjs.map +1 -0
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/isEnabled.mjs +2 -0
- package/dist/esm/isEnabled.mjs.map +1 -0
- package/dist/esm/messageKey.mjs +2 -0
- package/dist/esm/messageKey.mjs.map +1 -0
- package/dist/types/components/ContentSelector.d.ts +49 -2
- package/dist/types/components/ContentSelector.d.ts.map +1 -0
- package/dist/types/components/ContentSelectorWrapper.d.ts +49 -0
- package/dist/types/components/ContentSelectorWrapper.d.ts.map +1 -0
- package/dist/types/components/EditedContent.d.ts +39 -0
- package/dist/types/components/EditedContent.d.ts.map +1 -0
- package/dist/types/components/IntlayerEditor.d.ts +40 -0
- package/dist/types/components/IntlayerEditor.d.ts.map +1 -0
- package/dist/types/components/index.d.ts +5 -2
- package/dist/types/core/CrossFrameMessenger.d.ts +51 -2
- package/dist/types/core/CrossFrameMessenger.d.ts.map +1 -0
- package/dist/types/core/CrossFrameStateManager.d.ts +44 -2
- package/dist/types/core/CrossFrameStateManager.d.ts.map +1 -0
- package/dist/types/core/EditorStateManager.d.ts +73 -2
- package/dist/types/core/EditorStateManager.d.ts.map +1 -0
- package/dist/types/core/IframeClickInterceptor.d.ts +26 -2
- package/dist/types/core/IframeClickInterceptor.d.ts.map +1 -0
- package/dist/types/core/UrlStateManager.d.ts +21 -2
- package/dist/types/core/UrlStateManager.d.ts.map +1 -0
- package/dist/types/core/globalManager.d.ts +39 -0
- package/dist/types/core/globalManager.d.ts.map +1 -0
- package/dist/types/core/index.d.ts +8 -6
- package/dist/types/core/initEditorClient.d.ts +20 -0
- package/dist/types/core/initEditorClient.d.ts.map +1 -0
- package/dist/types/index.d.ts +13 -8
- package/dist/types/isEnabled.d.ts +5 -0
- package/dist/types/isEnabled.d.ts.map +1 -0
- package/dist/types/messageKey.d.ts +27 -0
- package/dist/types/messageKey.d.ts.map +1 -0
- package/package.json +10 -4
- package/dist/cjs/ContentSelector-BXawqqyE.cjs +0 -41
- package/dist/cjs/ContentSelector-BXawqqyE.cjs.map +0 -1
- package/dist/cjs/messagesKeys.cjs +0 -2
- package/dist/cjs/messagesKeys.cjs.map +0 -1
- package/dist/esm/ContentSelector-QN8BYkA9.mjs +0 -41
- package/dist/esm/ContentSelector-QN8BYkA9.mjs.map +0 -1
- package/dist/esm/messagesKeys.mjs +0 -2
- package/dist/esm/messagesKeys.mjs.map +0 -1
- package/dist/types/ContentSelector-rBO8c1Kp.d.ts +0 -49
- package/dist/types/ContentSelector-rBO8c1Kp.d.ts.map +0 -1
- package/dist/types/CrossFrameMessenger-CAAHntwS.d.ts +0 -48
- package/dist/types/CrossFrameMessenger-CAAHntwS.d.ts.map +0 -1
- package/dist/types/CrossFrameStateManager-DxgxsAmo.d.ts +0 -44
- package/dist/types/CrossFrameStateManager-DxgxsAmo.d.ts.map +0 -1
- package/dist/types/EditorStateManager-Ym8YfMiG.d.ts +0 -57
- package/dist/types/EditorStateManager-Ym8YfMiG.d.ts.map +0 -1
- package/dist/types/IframeClickInterceptor-Dy1raFvk.d.ts +0 -26
- package/dist/types/IframeClickInterceptor-Dy1raFvk.d.ts.map +0 -1
- package/dist/types/UrlStateManager-Bq87v4hY.d.ts +0 -21
- package/dist/types/UrlStateManager-Bq87v4hY.d.ts.map +0 -1
- package/dist/types/messagesKeys.d.ts +0 -16
- package/dist/types/messagesKeys.d.ts.map +0 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
import { IntlayerConfig } from "@intlayer/types/config";
|
|
3
|
+
|
|
4
|
+
//#region src/components/IntlayerEditor.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* <intlayer-editor>
|
|
7
|
+
*
|
|
8
|
+
* A framework-agnostic Lit element that manages the Intlayer editor singleton
|
|
9
|
+
* lifecycle and keeps the current locale in sync with the EditorStateManager.
|
|
10
|
+
*
|
|
11
|
+
* Drop this element once at the root of your application to activate the editor.
|
|
12
|
+
* It renders no UI (display: contents, empty shadow root).
|
|
13
|
+
*
|
|
14
|
+
* @prop {IntlayerConfig} configuration - The Intlayer config (required; set as property, not attribute)
|
|
15
|
+
* @prop {string} locale - The active application locale (attribute/property)
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* // Svelte
|
|
19
|
+
* <intlayer-editor .configuration={config} locale={$locale} />
|
|
20
|
+
*
|
|
21
|
+
* // Vue
|
|
22
|
+
* <intlayer-editor :configuration="config" :locale="currentLocale" />
|
|
23
|
+
*/
|
|
24
|
+
declare class IntlayerEditorElement extends LitElement {
|
|
25
|
+
/** No visible UI — render nothing into the shadow root */
|
|
26
|
+
createRenderRoot(): this;
|
|
27
|
+
configuration?: IntlayerConfig;
|
|
28
|
+
locale?: string;
|
|
29
|
+
private _initialized;
|
|
30
|
+
private _unsubManager;
|
|
31
|
+
connectedCallback(): void;
|
|
32
|
+
disconnectedCallback(): void;
|
|
33
|
+
updated(changedProperties: Map<string | symbol, unknown>): void;
|
|
34
|
+
private _init;
|
|
35
|
+
private _syncLocale;
|
|
36
|
+
}
|
|
37
|
+
declare const defineIntlayerEditorElement: () => void;
|
|
38
|
+
//#endregion
|
|
39
|
+
export { IntlayerEditorElement, defineIntlayerEditorElement };
|
|
40
|
+
//# sourceMappingURL=IntlayerEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IntlayerEditor.d.ts","names":[],"sources":["../../../src/components/IntlayerEditor.ts"],"mappings":";;;;;;AA6BA;;;;;;;;;;;;;;;;;cAAa,qBAAA,SAA8B,UAAA;EA6Bd;EA3B3B,gBAAA,CAAA;EAIgC,aAAA,GAAgB,cAAA;EAEpB,MAAA;EAAA,QAEpB,YAAA;EAAA,QACA,aAAA;EAER,iBAAA,CAAA;EAKA,oBAAA,CAAA;EAWA,OAAA,CAAQ,iBAAA,EAAmB,GAAA;EAAA,QAUnB,KAAA;EAAA,QAaA,WAAA;AAAA;AAAA,cAoBG,2BAAA"}
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { IntlayerContentSelectorElement, defineIntlayerElements } from "./ContentSelector.js";
|
|
2
|
+
import { IntlayerContentSelectorWrapperElement, defineIntlayerContentSelectorWrapper } from "./ContentSelectorWrapper.js";
|
|
3
|
+
import { IntlayerEditedContentElement, defineIntlayerEditedContent } from "./EditedContent.js";
|
|
4
|
+
import { IntlayerEditorElement, defineIntlayerEditorElement } from "./IntlayerEditor.js";
|
|
5
|
+
export { IntlayerContentSelectorElement, IntlayerContentSelectorWrapperElement, IntlayerEditedContentElement, IntlayerEditorElement, defineIntlayerContentSelectorWrapper, defineIntlayerEditedContent, defineIntlayerEditorElement, defineIntlayerElements };
|
|
@@ -1,2 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
//#region src/core/CrossFrameMessenger.d.ts
|
|
2
|
+
type MessagePayload = {
|
|
3
|
+
type: string;
|
|
4
|
+
data?: unknown;
|
|
5
|
+
senderId?: string; /** Unique ID per send() call — used to deduplicate when the same payload arrives via multiple target origins */
|
|
6
|
+
messageId?: string;
|
|
7
|
+
};
|
|
8
|
+
type MessengerConfig = {
|
|
9
|
+
/**
|
|
10
|
+
* Origins allowed to send messages to this instance.
|
|
11
|
+
* Use '*' to allow all origins (not recommended for production).
|
|
12
|
+
*/
|
|
13
|
+
allowedOrigins: string[];
|
|
14
|
+
/**
|
|
15
|
+
* Function used to send messages to other frames.
|
|
16
|
+
* Injected so the messenger is agnostic to the frame topology.
|
|
17
|
+
*/
|
|
18
|
+
postMessageFn: (payload: MessagePayload, origin: string) => void;
|
|
19
|
+
};
|
|
20
|
+
type MessageHandler<T = unknown> = (data: T, senderId?: string) => void;
|
|
21
|
+
/**
|
|
22
|
+
* CrossFrameMessenger manages all cross-frame postMessage communication.
|
|
23
|
+
* It owns a single window message listener and routes incoming messages to
|
|
24
|
+
* type-specific subscribers.
|
|
25
|
+
*
|
|
26
|
+
* Replaces CommunicatorContext + useCrossFrameMessageListener across all frameworks.
|
|
27
|
+
*/
|
|
28
|
+
declare class CrossFrameMessenger {
|
|
29
|
+
readonly senderId: string;
|
|
30
|
+
private readonly _config;
|
|
31
|
+
private readonly _subscribers;
|
|
32
|
+
private _windowHandler;
|
|
33
|
+
/** Tracks recently processed messageIds to discard duplicates (same payload sent to multiple origins) */
|
|
34
|
+
private readonly _seenMessageIds;
|
|
35
|
+
constructor(config: MessengerConfig);
|
|
36
|
+
/** Start listening for incoming messages on window. */
|
|
37
|
+
start(): void;
|
|
38
|
+
/** Stop listening and clean up. */
|
|
39
|
+
stop(): void;
|
|
40
|
+
/** Send a message payload to all configured target origins. */
|
|
41
|
+
send(type: string, data?: unknown): void;
|
|
42
|
+
/**
|
|
43
|
+
* Subscribe to messages of a given type.
|
|
44
|
+
* Returns an unsubscribe function.
|
|
45
|
+
*/
|
|
46
|
+
subscribe<T = unknown>(type: string, handler: MessageHandler<T>): () => void;
|
|
47
|
+
private _handleMessage;
|
|
48
|
+
}
|
|
49
|
+
//#endregion
|
|
50
|
+
export { CrossFrameMessenger, MessagePayload, MessengerConfig };
|
|
51
|
+
//# sourceMappingURL=CrossFrameMessenger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CrossFrameMessenger.d.ts","names":[],"sources":["../../../src/core/CrossFrameMessenger.ts"],"mappings":";KAIY,cAAA;EACV,IAAA;EACA,IAAA;EACA,QAAA,WAHwB;EAKxB,SAAA;AAAA;AAAA,KAGU,eAAA;EAHV;;;AAGF;EAKE,cAAA;;;;;EAKA,aAAA,GAAgB,OAAA,EAAS,cAAA,EAAgB,MAAA;AAAA;AAAA,KAGtC,cAAA,iBAA+B,IAAA,EAAM,CAAA,EAAG,QAAA;;;AAF3C;;;;;cAWW,mBAAA;EAAA,SACF,QAAA;EAAA,iBACQ,OAAA;EAAA,iBACA,YAAA;EAAA,QAET,cAAA;EALG;EAAA,iBAOM,eAAA;cAEL,MAAA,EAAQ,eAAA;EAAA;EAMpB,KAAA,CAAA;EAqC8C;EA3B9C,IAAA,CAAA;EA2B4D;EAnB5D,IAAA,CAAK,IAAA,UAAc,IAAA;EA/BF;;;;EAkDjB,SAAA,aAAA,CAAuB,IAAA,UAAc,OAAA,EAAS,cAAA,CAAe,CAAA;EAAA,QAUrD,cAAA;AAAA"}
|
|
@@ -1,2 +1,44 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { CrossFrameMessenger } from "./CrossFrameMessenger.js";
|
|
2
|
+
|
|
3
|
+
//#region src/core/CrossFrameStateManager.d.ts
|
|
4
|
+
type CrossFrameStateOptions = {
|
|
5
|
+
/** Whether to broadcast state changes to other frames. Default: true */emit?: boolean; /** Whether to listen for state updates from other frames. Default: true */
|
|
6
|
+
receive?: boolean;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* CrossFrameStateManager synchronizes a single named value across frames using
|
|
10
|
+
* the postMessage API via CrossFrameMessenger.
|
|
11
|
+
*
|
|
12
|
+
* Protocol:
|
|
13
|
+
* `{key}/post` — broadcast a new value
|
|
14
|
+
* `{key}/get` — request the current value from other frames
|
|
15
|
+
*
|
|
16
|
+
* Replaces useCrossFrameState across all frameworks.
|
|
17
|
+
*
|
|
18
|
+
* @fires change — CustomEvent<T> dispatched whenever the value changes (local set or received)
|
|
19
|
+
*/
|
|
20
|
+
declare class CrossFrameStateManager<T> extends EventTarget {
|
|
21
|
+
private _value;
|
|
22
|
+
private readonly _key;
|
|
23
|
+
private readonly _messenger;
|
|
24
|
+
private readonly _options;
|
|
25
|
+
private readonly _unsubscribers;
|
|
26
|
+
constructor(key: string, messenger: CrossFrameMessenger, options?: CrossFrameStateOptions & {
|
|
27
|
+
initialValue?: T;
|
|
28
|
+
});
|
|
29
|
+
get value(): T | undefined;
|
|
30
|
+
/** Update the value locally and broadcast it to other frames if emit is enabled. */
|
|
31
|
+
set(newValue: T): void;
|
|
32
|
+
/**
|
|
33
|
+
* Start listening for incoming state updates and responding to /get requests.
|
|
34
|
+
* If receive=true and no initial value is set, sends a /get to request the current value.
|
|
35
|
+
*/
|
|
36
|
+
start(): void;
|
|
37
|
+
/** Stop all listeners. */
|
|
38
|
+
stop(): void;
|
|
39
|
+
/** Broadcast the current value to all frames (useful after reconnect). */
|
|
40
|
+
postCurrentValue(): void;
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { CrossFrameStateManager, CrossFrameStateOptions };
|
|
44
|
+
//# sourceMappingURL=CrossFrameStateManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CrossFrameStateManager.d.ts","names":[],"sources":["../../../src/core/CrossFrameStateManager.ts"],"mappings":";;;KAEY,sBAAA;0EAEV,IAAA,YAFgC;EAIhC,OAAA;AAAA;;AAeF;;;;;;;;;;;cAAa,sBAAA,YAAkC,WAAA;EAAA,QACrC,MAAA;EAAA,iBACS,IAAA;EAAA,iBACA,UAAA;EAAA,iBACA,QAAA;EAAA,iBACA,cAAA;cAGf,GAAA,UACA,SAAA,EAAW,mBAAA,EACX,OAAA,GAAS,sBAAA;IAA2B,YAAA,GAAe,CAAA;EAAA;EAAA,IAcjD,KAAA,CAAA,GAAS,CAAA;EAfX;EAoBF,GAAA,CAAI,QAAA,EAAU,CAAA;EAnBwB;;;;EA+BtC,KAAA,CAAA;EAZA;EA4CA,IAAA,CAAA;EA5CI;EAkDJ,gBAAA,CAAA;AAAA"}
|
|
@@ -1,2 +1,73 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { CrossFrameMessenger, MessengerConfig } from "./CrossFrameMessenger.js";
|
|
2
|
+
import { CrossFrameStateManager } from "./CrossFrameStateManager.js";
|
|
3
|
+
import { IntlayerConfig } from "@intlayer/types/config";
|
|
4
|
+
import { Locale } from "@intlayer/types/allLocales";
|
|
5
|
+
import { ContentNode, Dictionary, LocalDictionaryId } from "@intlayer/types/dictionary";
|
|
6
|
+
import { KeyPath } from "@intlayer/types/keyPath";
|
|
7
|
+
|
|
8
|
+
//#region src/core/EditorStateManager.d.ts
|
|
9
|
+
type DictionaryContent = Record<LocalDictionaryId, Dictionary>;
|
|
10
|
+
type FileContent = {
|
|
11
|
+
dictionaryKey: string;
|
|
12
|
+
dictionaryLocalId?: LocalDictionaryId;
|
|
13
|
+
keyPath?: KeyPath[];
|
|
14
|
+
};
|
|
15
|
+
type EditorStateManagerConfig = {
|
|
16
|
+
/** 'client' = the app running inside the iframe; 'editor' = the editor wrapping the app */mode: 'editor' | 'client'; /** Cross-frame messaging configuration */
|
|
17
|
+
messenger: MessengerConfig; /** Optional initial Intlayer configuration to broadcast */
|
|
18
|
+
configuration?: IntlayerConfig;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* EditorStateManager is the single entry point for all Intlayer editor state.
|
|
22
|
+
* It is framework-agnostic: instantiate one instance at the root of the application
|
|
23
|
+
* and subscribe to its EventTarget-based events from any framework adapter.
|
|
24
|
+
*
|
|
25
|
+
* Replaces all context providers, hooks and store files across React, Preact,
|
|
26
|
+
* Solid, Svelte, and Vue integrations.
|
|
27
|
+
*/
|
|
28
|
+
declare class EditorStateManager {
|
|
29
|
+
readonly messenger: CrossFrameMessenger;
|
|
30
|
+
readonly editorEnabled: CrossFrameStateManager<boolean>;
|
|
31
|
+
readonly focusedContent: CrossFrameStateManager<FileContent | null>;
|
|
32
|
+
readonly localeDictionaries: CrossFrameStateManager<DictionaryContent>;
|
|
33
|
+
readonly editedContent: CrossFrameStateManager<DictionaryContent>;
|
|
34
|
+
readonly configuration: CrossFrameStateManager<IntlayerConfig>;
|
|
35
|
+
readonly currentLocale: CrossFrameStateManager<Locale | undefined>;
|
|
36
|
+
private readonly _urlManager;
|
|
37
|
+
private readonly _iframeInterceptor;
|
|
38
|
+
private readonly _mode;
|
|
39
|
+
private readonly _configuration;
|
|
40
|
+
private _unsubAreYouThere;
|
|
41
|
+
private _unsubActivate;
|
|
42
|
+
private _unsubClientReady;
|
|
43
|
+
constructor(config: EditorStateManagerConfig);
|
|
44
|
+
start(): void;
|
|
45
|
+
stop(): void;
|
|
46
|
+
/**
|
|
47
|
+
* EDITOR mode: re-send ARE_YOU_THERE to attempt re-connection with the client.
|
|
48
|
+
* Call this when the user clicks "Enable Editor" or when the iframe reloads.
|
|
49
|
+
*/
|
|
50
|
+
pingClient(): void;
|
|
51
|
+
setFocusedContentKeyPath(keyPath: KeyPath[]): void;
|
|
52
|
+
setLocaleDictionary(dictionary: Dictionary): void;
|
|
53
|
+
setEditedDictionary(newDict: Dictionary): void;
|
|
54
|
+
setEditedContent(localDictionaryId: LocalDictionaryId, newValue: Dictionary['content']): void;
|
|
55
|
+
addContent(localDictionaryId: LocalDictionaryId, newValue: ContentNode, keyPath?: KeyPath[], overwrite?: boolean): void;
|
|
56
|
+
renameContent(localDictionaryId: LocalDictionaryId, newKey: KeyPath['key'], keyPath?: KeyPath[]): void;
|
|
57
|
+
removeContent(localDictionaryId: LocalDictionaryId, keyPath: KeyPath[]): void;
|
|
58
|
+
restoreContent(localDictionaryId: LocalDictionaryId): void;
|
|
59
|
+
clearContent(localDictionaryId: LocalDictionaryId): void;
|
|
60
|
+
clearAllContent(): void;
|
|
61
|
+
getContentValue(localDictionaryIdOrKey: LocalDictionaryId | string, keyPath: KeyPath[]): ContentNode | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* EDITOR mode: listen for CLIENT_READY and respond with EDITOR_ACTIVATE.
|
|
64
|
+
* Also pings the client immediately in case it loaded before the editor.
|
|
65
|
+
*/
|
|
66
|
+
private _setupEditorHandshake;
|
|
67
|
+
private _setupActivationHandshake;
|
|
68
|
+
private _broadcastData;
|
|
69
|
+
private _loadDictionaries;
|
|
70
|
+
}
|
|
71
|
+
//#endregion
|
|
72
|
+
export { DictionaryContent, EditorStateManager, EditorStateManagerConfig, FileContent };
|
|
73
|
+
//# sourceMappingURL=EditorStateManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditorStateManager.d.ts","names":[],"sources":["../../../src/core/EditorStateManager.ts"],"mappings":";;;;;;;;KAuBY,iBAAA,GAAoB,MAAA,CAAO,iBAAA,EAAmB,UAAA;AAAA,KAE9C,WAAA;EACV,aAAA;EACA,iBAAA,GAAoB,iBAAA;EACpB,OAAA,GAAU,OAAA;AAAA;AAAA,KAGA,wBAAA;EARoB,2FAU9B,IAAA,uBAVoC;EAYpC,SAAA,EAAW,eAAA,EAZ0B;EAcrC,aAAA,GAAgB,cAAA;AAAA;;AAZlB;;;;;;;cAuBa,kBAAA;EAAA,SACF,SAAA,EAAW,mBAAA;EAAA,SACX,aAAA,EAAe,sBAAA;EAAA,SACf,cAAA,EAAgB,sBAAA,CAAuB,WAAA;EAAA,SACvC,kBAAA,EAAoB,sBAAA,CAAuB,iBAAA;EAAA,SAC3C,aAAA,EAAe,sBAAA,CAAuB,iBAAA;EAAA,SACtC,aAAA,EAAe,sBAAA,CAAuB,cAAA;EAAA,SACtC,aAAA,EAAe,sBAAA,CAAuB,MAAA;EAAA,iBAE9B,WAAA;EAAA,iBACA,kBAAA;EAAA,iBACA,KAAA;EAAA,iBACA,cAAA;EAAA,QAGT,iBAAA;EAAA,QACA,cAAA;EAAA,QAEA,iBAAA;cAEI,MAAA,EAAQ,wBAAA;EAoDpB,KAAA,CAAA;EAyBA,IAAA,CAAA;EAhGoB;;;;EAyHpB,UAAA,CAAA;EAQA,wBAAA,CAAyB,OAAA,EAAS,OAAA;EAWlC,mBAAA,CAAoB,UAAA,EAAY,UAAA;EAYhC,mBAAA,CAAoB,OAAA,EAAS,UAAA;EAa7B,gBAAA,CACE,iBAAA,EAAmB,iBAAA,EACnB,QAAA,EAAU,UAAA;EAaZ,UAAA,CACE,iBAAA,EAAmB,iBAAA,EACnB,QAAA,EAAU,WAAA,EACV,OAAA,GAAS,OAAA,IACT,SAAA;EAgDF,aAAA,CACE,iBAAA,EAAmB,iBAAA,EACnB,MAAA,EAAQ,OAAA,SACR,OAAA,GAAS,OAAA;EAmBX,aAAA,CACE,iBAAA,EAAmB,iBAAA,EACnB,OAAA,EAAS,OAAA;EAwBX,cAAA,CAAe,iBAAA,EAAmB,iBAAA;EASlC,YAAA,CAAa,iBAAA,EAAmB,iBAAA;EAShC,eAAA,CAAA;EAIA,eAAA,CACE,sBAAA,EAAwB,iBAAA,WACxB,OAAA,EAAS,OAAA,KACR,WAAA;EA3IkB;;;;EAAA,QAmMb,qBAAA;EAAA,QAcA,yBAAA;EAAA,QAsBA,cAAA;EAAA,QA2BM,iBAAA;AAAA"}
|
|
@@ -1,2 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { CrossFrameMessenger } from "./CrossFrameMessenger.js";
|
|
2
|
+
|
|
3
|
+
//#region src/core/IframeClickInterceptor.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* IframeClickInterceptor handles click events across iframe boundaries.
|
|
6
|
+
*
|
|
7
|
+
* - startInterceptor(): called in the client (iframe) — broadcasts mousedown to parent
|
|
8
|
+
* - startMerger(): called in the editor (parent) — merges received clicks into DOM events
|
|
9
|
+
*
|
|
10
|
+
* Replaces useIframeClickInterceptor / useIframeClickMerger across all frameworks.
|
|
11
|
+
*/
|
|
12
|
+
declare class IframeClickInterceptor {
|
|
13
|
+
private readonly _messenger;
|
|
14
|
+
private _mousedownHandler;
|
|
15
|
+
private _unsubscribeMerge;
|
|
16
|
+
constructor(messenger: CrossFrameMessenger);
|
|
17
|
+
/** Called on the client side (inside iframe). Broadcasts click events to parent. */
|
|
18
|
+
startInterceptor(): void;
|
|
19
|
+
/** Called on the editor side (parent frame). Merges incoming iframe clicks into DOM. */
|
|
20
|
+
startMerger(): void;
|
|
21
|
+
stopInterceptor(): void;
|
|
22
|
+
stopMerger(): void;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { IframeClickInterceptor };
|
|
26
|
+
//# sourceMappingURL=IframeClickInterceptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IframeClickInterceptor.d.ts","names":[],"sources":["../../../src/core/IframeClickInterceptor.ts"],"mappings":";;;;;AAYA;;;;;;cAAa,sBAAA;EAAA,iBACM,UAAA;EAAA,QACT,iBAAA;EAAA,QACA,iBAAA;cAEI,SAAA,EAAW,mBAAA;EAcvB;EATA,gBAAA,CAAA;EAuBA;EAdA,WAAA,CAAA;EAOA,eAAA,CAAA;EAOA,UAAA,CAAA;AAAA"}
|
|
@@ -1,2 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { CrossFrameMessenger } from "./CrossFrameMessenger.js";
|
|
2
|
+
|
|
3
|
+
//#region src/core/UrlStateManager.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* UrlStateManager patches window.history and broadcasts URL path changes
|
|
6
|
+
* across frames via postMessage.
|
|
7
|
+
*
|
|
8
|
+
* Replaces useCrossURLPathSetter / useCrossURLPathState across all frameworks.
|
|
9
|
+
*/
|
|
10
|
+
declare class UrlStateManager {
|
|
11
|
+
private readonly _messenger;
|
|
12
|
+
private _originalPushState;
|
|
13
|
+
private _originalReplaceState;
|
|
14
|
+
private _listeners;
|
|
15
|
+
constructor(messenger: CrossFrameMessenger);
|
|
16
|
+
start(): void;
|
|
17
|
+
stop(): void;
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { UrlStateManager };
|
|
21
|
+
//# sourceMappingURL=UrlStateManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UrlStateManager.d.ts","names":[],"sources":["../../../src/core/UrlStateManager.ts"],"mappings":";;;;;AASA;;;;cAAa,eAAA;EAAA,iBACM,UAAA;EAAA,QACT,kBAAA;EAAA,QACA,qBAAA;EAAA,QACA,UAAA;cAEI,SAAA,EAAW,mBAAA;EAIvB,KAAA,CAAA;EA2CA,IAAA,CAAA;AAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { EditorStateManager } from "./EditorStateManager.js";
|
|
2
|
+
|
|
3
|
+
//#region src/core/globalManager.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Retrieves the global editor state manager instance.
|
|
6
|
+
* Returns null if no manager has been set or in SSR environments where
|
|
7
|
+
* window is undefined.
|
|
8
|
+
*
|
|
9
|
+
* @returns The global EditorStateManager instance or null if not set
|
|
10
|
+
*/
|
|
11
|
+
declare const getGlobalEditorManager: () => EditorStateManager | null;
|
|
12
|
+
/**
|
|
13
|
+
* Sets the global editor state manager instance and notifies all listeners
|
|
14
|
+
* of the change through a CustomEvent.
|
|
15
|
+
*
|
|
16
|
+
* @param manager - The EditorStateManager instance to set globally, or null to clear it
|
|
17
|
+
*/
|
|
18
|
+
declare const setGlobalEditorManager: (manager: EditorStateManager | null) => void;
|
|
19
|
+
/**
|
|
20
|
+
* Registers a callback function to be invoked whenever the global editor
|
|
21
|
+
* manager changes. Useful for reactive updates across the application.
|
|
22
|
+
*
|
|
23
|
+
* @param changeCallback - Function to invoke with the new manager state whenever it changes
|
|
24
|
+
* @returns An unsubscribe function that removes the listener when called
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const unsubscribe = onGlobalEditorManagerChange((manager) => {
|
|
29
|
+
* console.log('Manager updated:', manager);
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* // Later, clean up the listener
|
|
33
|
+
* unsubscribe();
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
declare const onGlobalEditorManagerChange: (changeCallback: (manager: EditorStateManager | null) => void) => (() => void);
|
|
37
|
+
//#endregion
|
|
38
|
+
export { getGlobalEditorManager, onGlobalEditorManagerChange, setGlobalEditorManager };
|
|
39
|
+
//# sourceMappingURL=globalManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globalManager.d.ts","names":[],"sources":["../../../src/core/globalManager.ts"],"mappings":";;;;;AAmDA;;;;;cAAa,sBAAA,QAA6B,kBAAA;;;;;AAiD1C;;cAhCa,sBAAA,GACX,OAAA,EAAS,kBAAA;;;;;;;;;;;;;;;;;;cA+BE,2BAAA,GACX,cAAA,GAAiB,OAAA,EAAS,kBAAA"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
1
|
+
import { CrossFrameMessenger, MessagePayload, MessengerConfig } from "./CrossFrameMessenger.js";
|
|
2
|
+
import { CrossFrameStateManager, CrossFrameStateOptions } from "./CrossFrameStateManager.js";
|
|
3
|
+
import { DictionaryContent, EditorStateManager, EditorStateManagerConfig, FileContent } from "./EditorStateManager.js";
|
|
4
|
+
import { IframeClickInterceptor } from "./IframeClickInterceptor.js";
|
|
5
|
+
import { UrlStateManager } from "./UrlStateManager.js";
|
|
6
|
+
import { getGlobalEditorManager, onGlobalEditorManagerChange, setGlobalEditorManager } from "./globalManager.js";
|
|
7
|
+
import { buildClientMessengerConfig, initEditorClient, stopEditorClient } from "./initEditorClient.js";
|
|
8
|
+
export { CrossFrameMessenger, CrossFrameStateManager, CrossFrameStateOptions, DictionaryContent, EditorStateManager, EditorStateManagerConfig, FileContent, IframeClickInterceptor, MessagePayload, MessengerConfig, UrlStateManager, buildClientMessengerConfig, getGlobalEditorManager, initEditorClient, onGlobalEditorManagerChange, setGlobalEditorManager, stopEditorClient };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { MessengerConfig } from "./CrossFrameMessenger.js";
|
|
2
|
+
import { EditorStateManager } from "./EditorStateManager.js";
|
|
3
|
+
|
|
4
|
+
//#region src/core/initEditorClient.d.ts
|
|
5
|
+
declare const buildClientMessengerConfig: () => MessengerConfig;
|
|
6
|
+
/**
|
|
7
|
+
* Initialize the Intlayer editor client singleton.
|
|
8
|
+
* Safe to call multiple times — returns the existing manager if already initialized.
|
|
9
|
+
* Increments a reference counter so nested providers don't destroy the manager
|
|
10
|
+
* prematurely when the inner provider unmounts.
|
|
11
|
+
*/
|
|
12
|
+
declare const initEditorClient: () => EditorStateManager;
|
|
13
|
+
/**
|
|
14
|
+
* Decrement the reference count and stop the global editor client singleton
|
|
15
|
+
* only when the last provider unmounts.
|
|
16
|
+
*/
|
|
17
|
+
declare const stopEditorClient: () => void;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { buildClientMessengerConfig, initEditorClient, stopEditorClient };
|
|
20
|
+
//# sourceMappingURL=initEditorClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initEditorClient.d.ts","names":[],"sources":["../../../src/core/initEditorClient.ts"],"mappings":";;;;cASa,0BAAA,QAAiC,eAAA;;AAA9C;;;;;cA2Ba,gBAAA,QAAuB,kBAAA;;;;;cAuBvB,gBAAA"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { compareUrls } from "./compareUrls.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
2
|
+
import { IntlayerContentSelectorElement, defineIntlayerElements } from "./components/ContentSelector.js";
|
|
3
|
+
import { IntlayerContentSelectorWrapperElement, defineIntlayerContentSelectorWrapper } from "./components/ContentSelectorWrapper.js";
|
|
4
|
+
import { IntlayerEditedContentElement, defineIntlayerEditedContent } from "./components/EditedContent.js";
|
|
5
|
+
import { IntlayerEditorElement, defineIntlayerEditorElement } from "./components/IntlayerEditor.js";
|
|
6
|
+
import { CrossFrameMessenger, MessagePayload, MessengerConfig } from "./core/CrossFrameMessenger.js";
|
|
7
|
+
import { CrossFrameStateManager, CrossFrameStateOptions } from "./core/CrossFrameStateManager.js";
|
|
8
|
+
import { DictionaryContent, EditorStateManager, EditorStateManagerConfig, FileContent } from "./core/EditorStateManager.js";
|
|
9
|
+
import { IframeClickInterceptor } from "./core/IframeClickInterceptor.js";
|
|
10
|
+
import { UrlStateManager } from "./core/UrlStateManager.js";
|
|
11
|
+
import { getGlobalEditorManager, onGlobalEditorManagerChange, setGlobalEditorManager } from "./core/globalManager.js";
|
|
12
|
+
import { buildClientMessengerConfig, initEditorClient, stopEditorClient } from "./core/initEditorClient.js";
|
|
8
13
|
import { mergeIframeClick } from "./mergeIframeClick.js";
|
|
9
|
-
import { MessageKey } from "./
|
|
10
|
-
export { CrossFrameMessenger, CrossFrameStateManager, CrossFrameStateOptions, DictionaryContent, EditorStateManager, EditorStateManagerConfig, FileContent, IframeClickInterceptor, IntlayerContentSelectorElement, MessageKey, MessagePayload, MessengerConfig, UrlStateManager, compareUrls, defineIntlayerElements, mergeIframeClick };
|
|
14
|
+
import { MessageKey } from "./messageKey.js";
|
|
15
|
+
export { CrossFrameMessenger, CrossFrameStateManager, CrossFrameStateOptions, DictionaryContent, EditorStateManager, EditorStateManagerConfig, FileContent, IframeClickInterceptor, IntlayerContentSelectorElement, IntlayerContentSelectorWrapperElement, IntlayerEditedContentElement, IntlayerEditorElement, MessageKey, MessagePayload, MessengerConfig, UrlStateManager, buildClientMessengerConfig, compareUrls, defineIntlayerContentSelectorWrapper, defineIntlayerEditedContent, defineIntlayerEditorElement, defineIntlayerElements, getGlobalEditorManager, initEditorClient, mergeIframeClick, onGlobalEditorManagerChange, setGlobalEditorManager, stopEditorClient };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isEnabled.d.ts","names":[],"sources":["../../src/isEnabled.ts"],"mappings":";cAEa,SAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/messageKey.d.ts
|
|
2
|
+
declare enum MessageKey {
|
|
3
|
+
/** Client → editor: announces the client is ready (also used as response to ARE_YOU_THERE) */
|
|
4
|
+
INTLAYER_CLIENT_READY = "INTLAYER_CLIENT_READY",
|
|
5
|
+
/** Editor → client: asks if the client is still alive */
|
|
6
|
+
INTLAYER_ARE_YOU_THERE = "INTLAYER_ARE_YOU_THERE",
|
|
7
|
+
/** Editor → client: instructs the client to activate the editor selector */
|
|
8
|
+
INTLAYER_EDITOR_ACTIVATE = "INTLAYER_EDITOR_ACTIVATE",
|
|
9
|
+
/** Client → editor: instructs the editor that the client is enabled */
|
|
10
|
+
INTLAYER_EDITOR_ENABLED = "INTLAYER_EDITOR_ENABLED",
|
|
11
|
+
/** Client → editor: send information related the app */
|
|
12
|
+
INTLAYER_CONFIGURATION = "INTLAYER_CONFIGURATION",
|
|
13
|
+
INTLAYER_CURRENT_LOCALE = "INTLAYER_CURRENT_LOCALE",
|
|
14
|
+
INTLAYER_URL_CHANGE = "INTLAYER_URL_CHANGE",
|
|
15
|
+
/** Client → editor: load and update content */
|
|
16
|
+
INTLAYER_LOCALE_DICTIONARIES_CHANGED = "INTLAYER_LOCALE_DICTIONARIES_CHANGED",
|
|
17
|
+
INTLAYER_DISTANT_DICTIONARIES_CHANGED = "INTLAYER_DISTANT_DICTIONARIES_CHANGED",
|
|
18
|
+
/** Client → editor & Editor → client: Update focus and changed content */
|
|
19
|
+
INTLAYER_HOVERED_CONTENT_CHANGED = "INTLAYER_HOVERED_CONTENT_CHANGED",
|
|
20
|
+
INTLAYER_FOCUSED_CONTENT_CHANGED = "INTLAYER_FOCUSED_CONTENT_CHANGED",
|
|
21
|
+
INTLAYER_EDITED_CONTENT_CHANGED = "INTLAYER_EDITED_CONTENT_CHANGED",
|
|
22
|
+
/** Client → editor: Helper to sync iframe client reactivity on click client */
|
|
23
|
+
INTLAYER_IFRAME_CLICKED = "INTLAYER_IFRAME_CLICKED"
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { MessageKey };
|
|
27
|
+
//# sourceMappingURL=messageKey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageKey.d.ts","names":[],"sources":["../../src/messageKey.ts"],"mappings":";aAAY,UAAA;EAAA;EAEV,qBAAA;;EAEA,sBAAA;EAFA;EAIA,wBAAA;EAAA;EAEA,uBAAA;EAGA;EAAA,sBAAA;EACA,uBAAA;EACA,mBAAA;EAIA;EADA,oCAAA;EACA,qCAAA;EAKA;EAFA,gCAAA;EACA,gCAAA;EACA,+BAAA;;EAGA,uBAAA;AAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intlayer/editor",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.4.0-canary.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Provides the utilities to interface the application with the Intlayer editor and manipulate dictionaries",
|
|
6
6
|
"keywords": [
|
|
@@ -38,6 +38,11 @@
|
|
|
38
38
|
"require": "./dist/cjs/index.cjs",
|
|
39
39
|
"import": "./dist/esm/index.mjs"
|
|
40
40
|
},
|
|
41
|
+
"./isEnabled": {
|
|
42
|
+
"types": "./dist/types/isEnabled.d.ts",
|
|
43
|
+
"require": "./dist/cjs/isEnabled.cjs",
|
|
44
|
+
"import": "./dist/esm/isEnabled.mjs"
|
|
45
|
+
},
|
|
41
46
|
"./package.json": "./package.json"
|
|
42
47
|
},
|
|
43
48
|
"main": "dist/cjs/index.cjs",
|
|
@@ -73,9 +78,10 @@
|
|
|
73
78
|
"typecheck": "tsc --noEmit --project tsconfig.types.json"
|
|
74
79
|
},
|
|
75
80
|
"dependencies": {
|
|
76
|
-
"@intlayer/
|
|
77
|
-
"@intlayer/
|
|
78
|
-
"@intlayer/
|
|
81
|
+
"@intlayer/config": "8.4.0-canary.0",
|
|
82
|
+
"@intlayer/core": "8.4.0-canary.0",
|
|
83
|
+
"@intlayer/types": "8.4.0-canary.0",
|
|
84
|
+
"@intlayer/unmerged-dictionaries-entry": "8.4.0-canary.0",
|
|
79
85
|
"lit": "^3.3.2"
|
|
80
86
|
},
|
|
81
87
|
"devDependencies": {
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
let e=require(`lit`),t=require(`lit/decorators.js`);function n(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var r=class extends e.LitElement{constructor(...e){super(...e),this.isSelecting=!1,this.pressDuration=250,this._isHovered=!1,this._isSelectingState=!1,this._pressTimer=null,this._clickOutsideHandler=null}static{this.styles=e.css`
|
|
2
|
-
:host {
|
|
3
|
-
display: contents;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
.wrapper {
|
|
7
|
-
display: inline-block;
|
|
8
|
-
cursor: pointer;
|
|
9
|
-
user-select: none;
|
|
10
|
-
border-radius: 0.375rem;
|
|
11
|
-
outline-width: 2px;
|
|
12
|
-
outline-offset: 4px;
|
|
13
|
-
outline-style: solid;
|
|
14
|
-
outline-color: transparent;
|
|
15
|
-
transition: all 100ms 50ms ease-in-out;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.wrapper[data-active] {
|
|
19
|
-
outline-color: inherit;
|
|
20
|
-
}
|
|
21
|
-
`}connectedCallback(){super.connectedCallback(),this._clickOutsideHandler=e=>{e.composedPath().includes(this)||(this._isSelectingState=!1,this._dispatch(`intlayer:click-outside`))},document.addEventListener(`mousedown`,this._clickOutsideHandler)}disconnectedCallback(){super.disconnectedCallback(),this._clickOutsideHandler&&=(document.removeEventListener(`mousedown`,this._clickOutsideHandler),null),this._clearPressTimer()}_clearPressTimer(){this._pressTimer!==null&&(clearTimeout(this._pressTimer),this._pressTimer=null)}_dispatch(e){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0}))}_handleMouseDown(){this._clearPressTimer(),this._pressTimer=setTimeout(()=>{this._isSelectingState=!0,this._dispatch(`intlayer:press`)},this.pressDuration)}_handleMouseEnter(){this._isHovered=!0,this._dispatch(`intlayer:hover`)}_handleMouseUpOrLeave(){this._isHovered&&(this._isHovered=!1,this._dispatch(`intlayer:unhover`)),this._clearPressTimer()}_handleClick(e){(this.isSelecting||this._isSelectingState)&&(e.preventDefault(),e.stopPropagation())}_handleBlur(){this._isSelectingState=!1}render(){return e.html`
|
|
22
|
-
<span
|
|
23
|
-
class="wrapper"
|
|
24
|
-
?data-active=${this.isSelecting||this._isSelectingState||this._isHovered}
|
|
25
|
-
role="button"
|
|
26
|
-
tabindex="0"
|
|
27
|
-
@mousedown=${this._handleMouseDown}
|
|
28
|
-
@mouseup=${this._handleMouseUpOrLeave}
|
|
29
|
-
@mouseleave=${this._handleMouseUpOrLeave}
|
|
30
|
-
@mouseenter=${this._handleMouseEnter}
|
|
31
|
-
@click=${this._handleClick}
|
|
32
|
-
@touchstart=${this._handleMouseDown}
|
|
33
|
-
@touchend=${this._handleMouseUpOrLeave}
|
|
34
|
-
@touchcancel=${this._handleMouseUpOrLeave}
|
|
35
|
-
@blur=${this._handleBlur}
|
|
36
|
-
@keyup=${()=>{}}
|
|
37
|
-
>
|
|
38
|
-
<slot></slot>
|
|
39
|
-
</span>
|
|
40
|
-
`}};n([(0,t.property)({type:Boolean,attribute:`is-selecting`})],r.prototype,`isSelecting`,void 0),n([(0,t.property)({type:Number,attribute:`press-duration`})],r.prototype,`pressDuration`,void 0),n([(0,t.state)()],r.prototype,`_isHovered`,void 0),n([(0,t.state)()],r.prototype,`_isSelectingState`,void 0),n([(0,t.query)(`.wrapper`)],r.prototype,`_wrapper`,void 0);const i=()=>{typeof customElements>`u`||customElements.get(`intlayer-content-selector`)||customElements.define(`intlayer-content-selector`,r)};Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}});
|
|
41
|
-
//# sourceMappingURL=ContentSelector-BXawqqyE.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContentSelector-BXawqqyE.cjs","names":["LitElement"],"sources":["../../src/components/ContentSelector.ts"],"sourcesContent":["import { css, html, LitElement } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\n\nconst DEFAULT_PRESS_DURATION = 250;\n\n/**\n * <intlayer-content-selector>\n *\n * A framework-agnostic web component that wraps content with Intlayer editor\n * selection UI (hover outline, long-press to select, click-outside to deselect).\n *\n * Replaces the per-framework ContentSelector components (React, Svelte, Vue, Solid).\n *\n * @fires intlayer:press - Fired after a long press (pressDuration ms). Bubbles.\n * @fires intlayer:hover - Fired on mouseenter. Bubbles.\n * @fires intlayer:unhover - Fired on mouseleave / mouseup. Bubbles.\n * @fires intlayer:click-outside - Fired when a click occurs outside the element. Bubbles.\n *\n * @prop {boolean} isSelecting - Whether this element is currently selected (external state)\n * @prop {number} pressDuration - Long-press threshold in ms. Default: 250\n */\nexport class IntlayerContentSelectorElement extends LitElement {\n static styles = css`\n :host {\n display: contents;\n }\n\n .wrapper {\n display: inline-block;\n cursor: pointer;\n user-select: none;\n border-radius: 0.375rem;\n outline-width: 2px;\n outline-offset: 4px;\n outline-style: solid;\n outline-color: transparent;\n transition: all 100ms 50ms ease-in-out;\n }\n\n .wrapper[data-active] {\n outline-color: inherit;\n }\n `;\n\n @property({ type: Boolean, attribute: 'is-selecting' })\n isSelecting = false;\n\n @property({ type: Number, attribute: 'press-duration' })\n pressDuration = DEFAULT_PRESS_DURATION;\n\n @state() private _isHovered = false;\n @state() private _isSelectingState = false;\n\n @query('.wrapper') private _wrapper!: HTMLSpanElement;\n\n private _pressTimer: ReturnType<typeof setTimeout> | null = null;\n private _clickOutsideHandler: ((e: MouseEvent) => void) | null = null;\n\n connectedCallback(): void {\n super.connectedCallback();\n this._clickOutsideHandler = (e: MouseEvent) => {\n // composedPath() pierces shadow boundaries\n if (!e.composedPath().includes(this)) {\n this._isSelectingState = false;\n this._dispatch('intlayer:click-outside');\n }\n };\n document.addEventListener('mousedown', this._clickOutsideHandler);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n if (this._clickOutsideHandler) {\n document.removeEventListener('mousedown', this._clickOutsideHandler);\n this._clickOutsideHandler = null;\n }\n this._clearPressTimer();\n }\n\n private _clearPressTimer(): void {\n if (this._pressTimer !== null) {\n clearTimeout(this._pressTimer);\n this._pressTimer = null;\n }\n }\n\n private _dispatch(eventName: string): void {\n this.dispatchEvent(\n new CustomEvent(eventName, { bubbles: true, composed: true })\n );\n }\n\n private _handleMouseDown(): void {\n this._clearPressTimer();\n this._pressTimer = setTimeout(() => {\n this._isSelectingState = true;\n this._dispatch('intlayer:press');\n }, this.pressDuration);\n }\n\n private _handleMouseEnter(): void {\n this._isHovered = true;\n this._dispatch('intlayer:hover');\n }\n\n private _handleMouseUpOrLeave(): void {\n if (this._isHovered) {\n this._isHovered = false;\n this._dispatch('intlayer:unhover');\n }\n this._clearPressTimer();\n }\n\n private _handleClick(e: MouseEvent): void {\n if (this.isSelecting || this._isSelectingState) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n private _handleBlur(): void {\n this._isSelectingState = false;\n }\n\n render() {\n const isActive =\n this.isSelecting || this._isSelectingState || this._isHovered;\n return html`\n <span\n class=\"wrapper\"\n ?data-active=${isActive}\n role=\"button\"\n tabindex=\"0\"\n @mousedown=${this._handleMouseDown}\n @mouseup=${this._handleMouseUpOrLeave}\n @mouseleave=${this._handleMouseUpOrLeave}\n @mouseenter=${this._handleMouseEnter}\n @click=${this._handleClick}\n @touchstart=${this._handleMouseDown}\n @touchend=${this._handleMouseUpOrLeave}\n @touchcancel=${this._handleMouseUpOrLeave}\n @blur=${this._handleBlur}\n @keyup=${() => {}}\n >\n <slot></slot>\n </span>\n `;\n }\n}\n\n/**\n * Register the <intlayer-content-selector> custom element.\n * Call this once at application startup (inside IntlayerEditorProvider or similar).\n * Safe to call multiple times — only registers if not already defined.\n */\nexport const defineIntlayerElements = (): void => {\n if (typeof customElements === 'undefined') return;\n if (!customElements.get('intlayer-content-selector')) {\n customElements.define(\n 'intlayer-content-selector',\n IntlayerContentSelectorElement\n );\n }\n};\n"],"mappings":"yXAqBA,IAAa,EAAb,cAAoDA,EAAAA,UAAW,gDAwB/C,sBAGE,oBAEc,0BACO,oBAIuB,+BACK,wBAlCjD,EAAA,GAAG;;;;;;;;;;;;;;;;;;;;IAoCnB,mBAA0B,CACxB,MAAM,mBAAmB,CACzB,KAAK,qBAAwB,GAAkB,CAExC,EAAE,cAAc,CAAC,SAAS,KAAK,GAClC,KAAK,kBAAoB,GACzB,KAAK,UAAU,yBAAyB,GAG5C,SAAS,iBAAiB,YAAa,KAAK,qBAAqB,CAGnE,sBAA6B,CAC3B,MAAM,sBAAsB,CAC5B,AAEE,KAAK,wBADL,SAAS,oBAAoB,YAAa,KAAK,qBAAqB,CACxC,MAE9B,KAAK,kBAAkB,CAGzB,kBAAiC,CAC3B,KAAK,cAAgB,OACvB,aAAa,KAAK,YAAY,CAC9B,KAAK,YAAc,MAIvB,UAAkB,EAAyB,CACzC,KAAK,cACH,IAAI,YAAY,EAAW,CAAE,QAAS,GAAM,SAAU,GAAM,CAAC,CAC9D,CAGH,kBAAiC,CAC/B,KAAK,kBAAkB,CACvB,KAAK,YAAc,eAAiB,CAClC,KAAK,kBAAoB,GACzB,KAAK,UAAU,iBAAiB,EAC/B,KAAK,cAAc,CAGxB,mBAAkC,CAChC,KAAK,WAAa,GAClB,KAAK,UAAU,iBAAiB,CAGlC,uBAAsC,CAChC,KAAK,aACP,KAAK,WAAa,GAClB,KAAK,UAAU,mBAAmB,EAEpC,KAAK,kBAAkB,CAGzB,aAAqB,EAAqB,EACpC,KAAK,aAAe,KAAK,qBAC3B,EAAE,gBAAgB,CAClB,EAAE,iBAAiB,EAIvB,aAA4B,CAC1B,KAAK,kBAAoB,GAG3B,QAAS,CAGP,MAAO,GAAA,IAAI;;;uBADT,KAAK,aAAe,KAAK,mBAAqB,KAAK,WAIzB;;;qBAGX,KAAK,iBAAiB;mBACxB,KAAK,sBAAsB;sBACxB,KAAK,sBAAsB;sBAC3B,KAAK,kBAAkB;iBAC5B,KAAK,aAAa;sBACb,KAAK,iBAAiB;oBACxB,KAAK,sBAAsB;uBACxB,KAAK,sBAAsB;gBAClC,KAAK,YAAY;qBACV,GAAG;;;;0BAlGd,CAAE,KAAM,QAAS,UAAW,eAAgB,CAAC,CAAA,CAAA,EAAA,UAAA,cAAA,IAAA,GAAA,mBAG7C,CAAE,KAAM,OAAQ,UAAW,iBAAkB,CAAC,CAAA,CAAA,EAAA,UAAA,gBAAA,IAAA,GAAA,iBAGhD,CAAA,CAAA,EAAA,UAAA,aAAA,IAAA,GAAA,iBACA,CAAA,CAAA,EAAA,UAAA,oBAAA,IAAA,GAAA,gBAED,WAAW,CAAA,CAAA,EAAA,UAAA,WAAA,IAAA,GAAA,CAsGpB,MAAa,MAAqC,CAC5C,OAAO,eAAmB,KACzB,eAAe,IAAI,4BAA4B,EAClD,eAAe,OACb,4BACA,EACD"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=function(e){return e.INTLAYER_CONFIGURATION=`INTLAYER_CONFIGURATION`,e.INTLAYER_CURRENT_LOCALE=`INTLAYER_CURRENT_LOCALE`,e.INTLAYER_EDITOR_ENABLED=`INTLAYER_EDITOR_ENABLED`,e.INTLAYER_URL_CHANGE=`INTLAYER_URL_CHANGE`,e.INTLAYER_HOVERED_CONTENT_CHANGED=`INTLAYER_HOVERED_CONTENT_CHANGED`,e.INTLAYER_FOCUSED_CONTENT_CHANGED=`INTLAYER_FOCUSED_CONTENT_CHANGED`,e.INTLAYER_LOCALE_DICTIONARIES_CHANGED=`INTLAYER_LOCALE_DICTIONARIES_CHANGED`,e.INTLAYER_DISTANT_DICTIONARIES_CHANGED=`INTLAYER_DISTANT_DICTIONARIES_CHANGED`,e.INTLAYER_EDITED_CONTENT_CHANGED=`INTLAYER_EDITED_CONTENT_CHANGED`,e.INTLAYER_IFRAME_CLICKED=`INTLAYER_IFRAME_CLICKED`,e}({});exports.MessageKey=e;
|
|
2
|
-
//# sourceMappingURL=messagesKeys.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messagesKeys.cjs","names":[],"sources":["../../src/messagesKeys.ts"],"sourcesContent":["export enum MessageKey {\n INTLAYER_CONFIGURATION = 'INTLAYER_CONFIGURATION',\n INTLAYER_CURRENT_LOCALE = 'INTLAYER_CURRENT_LOCALE',\n INTLAYER_EDITOR_ENABLED = 'INTLAYER_EDITOR_ENABLED',\n INTLAYER_URL_CHANGE = 'INTLAYER_URL_CHANGE',\n INTLAYER_HOVERED_CONTENT_CHANGED = 'INTLAYER_HOVERED_CONTENT_CHANGED',\n INTLAYER_FOCUSED_CONTENT_CHANGED = 'INTLAYER_FOCUSED_CONTENT_CHANGED',\n INTLAYER_LOCALE_DICTIONARIES_CHANGED = 'INTLAYER_LOCALE_DICTIONARIES_CHANGED',\n INTLAYER_DISTANT_DICTIONARIES_CHANGED = 'INTLAYER_DISTANT_DICTIONARIES_CHANGED',\n INTLAYER_EDITED_CONTENT_CHANGED = 'INTLAYER_EDITED_CONTENT_CHANGED',\n INTLAYER_IFRAME_CLICKED = 'INTLAYER_IFRAME_CLICKED',\n}\n"],"mappings":"mEAAA,IAAY,EAAL,SAAA,EAAA,OACL,GAAA,uBAAA,yBACA,EAAA,wBAAA,0BACA,EAAA,wBAAA,0BACA,EAAA,oBAAA,sBACA,EAAA,iCAAA,mCACA,EAAA,iCAAA,mCACA,EAAA,qCAAA,uCACA,EAAA,sCAAA,wCACA,EAAA,gCAAA,kCACA,EAAA,wBAAA,gCACD"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import{LitElement as e,css as t,html as n}from"lit";import{property as r,query as i,state as a}from"lit/decorators.js";function o(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var s=class extends e{constructor(...e){super(...e),this.isSelecting=!1,this.pressDuration=250,this._isHovered=!1,this._isSelectingState=!1,this._pressTimer=null,this._clickOutsideHandler=null}static{this.styles=t`
|
|
2
|
-
:host {
|
|
3
|
-
display: contents;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
.wrapper {
|
|
7
|
-
display: inline-block;
|
|
8
|
-
cursor: pointer;
|
|
9
|
-
user-select: none;
|
|
10
|
-
border-radius: 0.375rem;
|
|
11
|
-
outline-width: 2px;
|
|
12
|
-
outline-offset: 4px;
|
|
13
|
-
outline-style: solid;
|
|
14
|
-
outline-color: transparent;
|
|
15
|
-
transition: all 100ms 50ms ease-in-out;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.wrapper[data-active] {
|
|
19
|
-
outline-color: inherit;
|
|
20
|
-
}
|
|
21
|
-
`}connectedCallback(){super.connectedCallback(),this._clickOutsideHandler=e=>{e.composedPath().includes(this)||(this._isSelectingState=!1,this._dispatch(`intlayer:click-outside`))},document.addEventListener(`mousedown`,this._clickOutsideHandler)}disconnectedCallback(){super.disconnectedCallback(),this._clickOutsideHandler&&=(document.removeEventListener(`mousedown`,this._clickOutsideHandler),null),this._clearPressTimer()}_clearPressTimer(){this._pressTimer!==null&&(clearTimeout(this._pressTimer),this._pressTimer=null)}_dispatch(e){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0}))}_handleMouseDown(){this._clearPressTimer(),this._pressTimer=setTimeout(()=>{this._isSelectingState=!0,this._dispatch(`intlayer:press`)},this.pressDuration)}_handleMouseEnter(){this._isHovered=!0,this._dispatch(`intlayer:hover`)}_handleMouseUpOrLeave(){this._isHovered&&(this._isHovered=!1,this._dispatch(`intlayer:unhover`)),this._clearPressTimer()}_handleClick(e){(this.isSelecting||this._isSelectingState)&&(e.preventDefault(),e.stopPropagation())}_handleBlur(){this._isSelectingState=!1}render(){return n`
|
|
22
|
-
<span
|
|
23
|
-
class="wrapper"
|
|
24
|
-
?data-active=${this.isSelecting||this._isSelectingState||this._isHovered}
|
|
25
|
-
role="button"
|
|
26
|
-
tabindex="0"
|
|
27
|
-
@mousedown=${this._handleMouseDown}
|
|
28
|
-
@mouseup=${this._handleMouseUpOrLeave}
|
|
29
|
-
@mouseleave=${this._handleMouseUpOrLeave}
|
|
30
|
-
@mouseenter=${this._handleMouseEnter}
|
|
31
|
-
@click=${this._handleClick}
|
|
32
|
-
@touchstart=${this._handleMouseDown}
|
|
33
|
-
@touchend=${this._handleMouseUpOrLeave}
|
|
34
|
-
@touchcancel=${this._handleMouseUpOrLeave}
|
|
35
|
-
@blur=${this._handleBlur}
|
|
36
|
-
@keyup=${()=>{}}
|
|
37
|
-
>
|
|
38
|
-
<slot></slot>
|
|
39
|
-
</span>
|
|
40
|
-
`}};o([r({type:Boolean,attribute:`is-selecting`})],s.prototype,`isSelecting`,void 0),o([r({type:Number,attribute:`press-duration`})],s.prototype,`pressDuration`,void 0),o([a()],s.prototype,`_isHovered`,void 0),o([a()],s.prototype,`_isSelectingState`,void 0),o([i(`.wrapper`)],s.prototype,`_wrapper`,void 0);const c=()=>{typeof customElements>`u`||customElements.get(`intlayer-content-selector`)||customElements.define(`intlayer-content-selector`,s)};export{c as n,s as t};
|
|
41
|
-
//# sourceMappingURL=ContentSelector-QN8BYkA9.mjs.map
|