@localess/react 3.0.1-dev.20260405094412 → 3.0.1-dev.20260408170501
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/index.d.mts +13 -10
- package/dist/index.d.ts +13 -10
- package/dist/index.js +120 -89
- package/dist/index.mjs +112 -82
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
|
+
import { ContentData, Links, References, LocalessClientOptions, ContentFetchParams, Content, ContentLink, ContentRichText, LocalessClient, ContentAsset } from '@localess/client';
|
|
2
|
+
export { Content, ContentAsset, ContentData, ContentDataField, ContentDataSchema, ContentLink, ContentMetadata, ContentReference, ContentRichText, EventCallback, EventToApp, EventToAppType, Links, LocalessClient, LocalessSync, References, Translations, isBrowser, isIframe, isServer, localessEditable, localessEditableField } from '@localess/client';
|
|
1
3
|
import * as React from 'react';
|
|
2
4
|
import React__default from 'react';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
+
|
|
6
|
+
type LocalessComponentProps<T extends ContentData = ContentData> = {
|
|
7
|
+
data: T;
|
|
8
|
+
links?: Links;
|
|
9
|
+
references?: References;
|
|
10
|
+
};
|
|
11
|
+
declare const LocalessComponent: React.ForwardRefExoticComponent<LocalessComponentProps<ContentData> & React.RefAttributes<HTMLElement>>;
|
|
5
12
|
|
|
6
13
|
type LocalessOptions = LocalessClientOptions & {
|
|
7
14
|
/**
|
|
@@ -18,14 +25,10 @@ type LocalessOptions = LocalessClientOptions & {
|
|
|
18
25
|
enableSync?: boolean;
|
|
19
26
|
};
|
|
20
27
|
|
|
21
|
-
|
|
28
|
+
type UseLocalessOptions = ContentFetchParams & {};
|
|
29
|
+
declare const useLocaless: <T extends ContentData = ContentData>(slug: string | string[], options?: UseLocalessOptions) => Content<T> | undefined;
|
|
22
30
|
|
|
23
|
-
|
|
24
|
-
data: T;
|
|
25
|
-
links?: Links;
|
|
26
|
-
references?: References;
|
|
27
|
-
};
|
|
28
|
-
declare const LocalessComponent: React.ForwardRefExoticComponent<LocalessComponentProps<ContentData> & React.RefAttributes<HTMLElement>>;
|
|
31
|
+
declare function findLink(links: Links | undefined, link: ContentLink): string;
|
|
29
32
|
|
|
30
33
|
/**
|
|
31
34
|
* Render Localess Rich Text content to React elements
|
|
@@ -88,4 +91,4 @@ declare function isSyncEnabled(): boolean;
|
|
|
88
91
|
*/
|
|
89
92
|
declare function resolveAsset(asset: ContentAsset): string;
|
|
90
93
|
|
|
91
|
-
export { LocalessComponent, type LocalessComponentProps, type LocalessOptions, findLink, getComponent, getFallbackComponent, getLocalessClient, isSyncEnabled, localessInit, registerComponent, renderRichTextToReact, resolveAsset, setComponents, setFallbackComponent, unregisterComponent };
|
|
94
|
+
export { LocalessComponent, type LocalessComponentProps, type LocalessOptions, type UseLocalessOptions, findLink, getComponent, getFallbackComponent, getLocalessClient, isSyncEnabled, localessInit, registerComponent, renderRichTextToReact, resolveAsset, setComponents, setFallbackComponent, unregisterComponent, useLocaless };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
|
+
import { ContentData, Links, References, LocalessClientOptions, ContentFetchParams, Content, ContentLink, ContentRichText, LocalessClient, ContentAsset } from '@localess/client';
|
|
2
|
+
export { Content, ContentAsset, ContentData, ContentDataField, ContentDataSchema, ContentLink, ContentMetadata, ContentReference, ContentRichText, EventCallback, EventToApp, EventToAppType, Links, LocalessClient, LocalessSync, References, Translations, isBrowser, isIframe, isServer, localessEditable, localessEditableField } from '@localess/client';
|
|
1
3
|
import * as React from 'react';
|
|
2
4
|
import React__default from 'react';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
+
|
|
6
|
+
type LocalessComponentProps<T extends ContentData = ContentData> = {
|
|
7
|
+
data: T;
|
|
8
|
+
links?: Links;
|
|
9
|
+
references?: References;
|
|
10
|
+
};
|
|
11
|
+
declare const LocalessComponent: React.ForwardRefExoticComponent<LocalessComponentProps<ContentData> & React.RefAttributes<HTMLElement>>;
|
|
5
12
|
|
|
6
13
|
type LocalessOptions = LocalessClientOptions & {
|
|
7
14
|
/**
|
|
@@ -18,14 +25,10 @@ type LocalessOptions = LocalessClientOptions & {
|
|
|
18
25
|
enableSync?: boolean;
|
|
19
26
|
};
|
|
20
27
|
|
|
21
|
-
|
|
28
|
+
type UseLocalessOptions = ContentFetchParams & {};
|
|
29
|
+
declare const useLocaless: <T extends ContentData = ContentData>(slug: string | string[], options?: UseLocalessOptions) => Content<T> | undefined;
|
|
22
30
|
|
|
23
|
-
|
|
24
|
-
data: T;
|
|
25
|
-
links?: Links;
|
|
26
|
-
references?: References;
|
|
27
|
-
};
|
|
28
|
-
declare const LocalessComponent: React.ForwardRefExoticComponent<LocalessComponentProps<ContentData> & React.RefAttributes<HTMLElement>>;
|
|
31
|
+
declare function findLink(links: Links | undefined, link: ContentLink): string;
|
|
29
32
|
|
|
30
33
|
/**
|
|
31
34
|
* Render Localess Rich Text content to React elements
|
|
@@ -88,4 +91,4 @@ declare function isSyncEnabled(): boolean;
|
|
|
88
91
|
*/
|
|
89
92
|
declare function resolveAsset(asset: ContentAsset): string;
|
|
90
93
|
|
|
91
|
-
export { LocalessComponent, type LocalessComponentProps, type LocalessOptions, findLink, getComponent, getFallbackComponent, getLocalessClient, isSyncEnabled, localessInit, registerComponent, renderRichTextToReact, resolveAsset, setComponents, setFallbackComponent, unregisterComponent };
|
|
94
|
+
export { LocalessComponent, type LocalessComponentProps, type LocalessOptions, type UseLocalessOptions, findLink, getComponent, getFallbackComponent, getLocalessClient, isSyncEnabled, localessInit, registerComponent, renderRichTextToReact, resolveAsset, setComponents, setFallbackComponent, unregisterComponent, useLocaless };
|
package/dist/index.js
CHANGED
|
@@ -25,54 +25,89 @@ __export(index_exports, {
|
|
|
25
25
|
getComponent: () => getComponent,
|
|
26
26
|
getFallbackComponent: () => getFallbackComponent,
|
|
27
27
|
getLocalessClient: () => getLocalessClient,
|
|
28
|
-
isBrowser: () =>
|
|
29
|
-
isIframe: () =>
|
|
30
|
-
isServer: () =>
|
|
28
|
+
isBrowser: () => import_client4.isBrowser,
|
|
29
|
+
isIframe: () => import_client4.isIframe,
|
|
30
|
+
isServer: () => import_client4.isServer,
|
|
31
31
|
isSyncEnabled: () => isSyncEnabled,
|
|
32
|
-
localessEditable: () =>
|
|
33
|
-
localessEditableField: () =>
|
|
32
|
+
localessEditable: () => import_client4.localessEditable,
|
|
33
|
+
localessEditableField: () => import_client4.localessEditableField,
|
|
34
34
|
localessInit: () => localessInit,
|
|
35
35
|
registerComponent: () => registerComponent,
|
|
36
36
|
renderRichTextToReact: () => renderRichTextToReact,
|
|
37
37
|
resolveAsset: () => resolveAsset,
|
|
38
38
|
setComponents: () => setComponents,
|
|
39
39
|
setFallbackComponent: () => setFallbackComponent,
|
|
40
|
-
unregisterComponent: () => unregisterComponent
|
|
40
|
+
unregisterComponent: () => unregisterComponent,
|
|
41
|
+
useLocaless: () => useLocaless
|
|
41
42
|
});
|
|
42
43
|
module.exports = __toCommonJS(index_exports);
|
|
44
|
+
var import_client4 = require("@localess/client");
|
|
45
|
+
|
|
46
|
+
// src/components/localess-component.tsx
|
|
47
|
+
var import_react = require("react");
|
|
43
48
|
var import_client2 = require("@localess/client");
|
|
44
49
|
|
|
45
50
|
// src/console.ts
|
|
46
51
|
var FONT_BOLD = "font-weight: bold";
|
|
47
52
|
var FONT_NORMAL = "font-weight: normal";
|
|
48
53
|
|
|
49
|
-
// src/
|
|
50
|
-
var
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
54
|
+
// src/state.ts
|
|
55
|
+
var import_client = require("@localess/client");
|
|
56
|
+
var _client = void 0;
|
|
57
|
+
var _components = {};
|
|
58
|
+
var _fallbackComponent = void 0;
|
|
59
|
+
var _enableSync = false;
|
|
60
|
+
var _assetPathPrefix = "";
|
|
61
|
+
function localessInit(options) {
|
|
62
|
+
console.log("localessInit", options);
|
|
63
|
+
const { components, fallbackComponent, enableSync, ...restOptions } = options;
|
|
64
|
+
_client = (0, import_client.localessClient)(restOptions);
|
|
65
|
+
_assetPathPrefix = `${options.origin}/api/v1/spaces/${options.spaceId}/assets/`;
|
|
66
|
+
_components = components || {};
|
|
67
|
+
_fallbackComponent = fallbackComponent;
|
|
68
|
+
if (enableSync) {
|
|
69
|
+
_enableSync = true;
|
|
70
|
+
(0, import_client.loadLocalessSync)(restOptions.origin);
|
|
71
|
+
}
|
|
72
|
+
return _client;
|
|
73
|
+
}
|
|
74
|
+
function getLocalessClient() {
|
|
75
|
+
if (!_client) {
|
|
76
|
+
console.error("[Localess] No client found. Please check if the Localess is initialized.");
|
|
77
|
+
throw new Error("[Localess] No client found.");
|
|
70
78
|
}
|
|
79
|
+
return _client;
|
|
80
|
+
}
|
|
81
|
+
function registerComponent(key, component) {
|
|
82
|
+
_components[key] = component;
|
|
83
|
+
}
|
|
84
|
+
function unregisterComponent(key) {
|
|
85
|
+
delete _components[key];
|
|
86
|
+
}
|
|
87
|
+
function setComponents(components) {
|
|
88
|
+
_components = components;
|
|
89
|
+
}
|
|
90
|
+
function getComponent(key) {
|
|
91
|
+
if (Object.hasOwn(_components, key)) {
|
|
92
|
+
return _components[key];
|
|
93
|
+
}
|
|
94
|
+
console.error(`[Localess] component %c${key}%c can't be found.`, FONT_BOLD, FONT_NORMAL);
|
|
95
|
+
return void 0;
|
|
96
|
+
}
|
|
97
|
+
function setFallbackComponent(fallbackComponent) {
|
|
98
|
+
_fallbackComponent = fallbackComponent;
|
|
99
|
+
}
|
|
100
|
+
function getFallbackComponent() {
|
|
101
|
+
return _fallbackComponent;
|
|
102
|
+
}
|
|
103
|
+
function isSyncEnabled() {
|
|
104
|
+
return _enableSync;
|
|
105
|
+
}
|
|
106
|
+
function resolveAsset(asset) {
|
|
107
|
+
return `${_assetPathPrefix}${asset.uri}`;
|
|
71
108
|
}
|
|
72
109
|
|
|
73
|
-
// src/localess-
|
|
74
|
-
var import_react = require("react");
|
|
75
|
-
var import_client = require("@localess/client");
|
|
110
|
+
// src/components/localess-component.tsx
|
|
76
111
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
77
112
|
var LocalessComponent = (0, import_react.forwardRef)(({ data, links, references, ...restProps }, ref) => {
|
|
78
113
|
if (!data) {
|
|
@@ -85,7 +120,7 @@ var LocalessComponent = (0, import_react.forwardRef)(({ data, links, references,
|
|
|
85
120
|
}
|
|
86
121
|
const Comp = getComponent(data._schema);
|
|
87
122
|
if (Comp) {
|
|
88
|
-
const attr = isSyncEnabled() ? (0,
|
|
123
|
+
const attr = isSyncEnabled() ? (0, import_client2.localessEditable)(data) : {};
|
|
89
124
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Comp, { ref, data, links, references, ...attr, ...restProps });
|
|
90
125
|
}
|
|
91
126
|
const FallbackComponent = getFallbackComponent();
|
|
@@ -102,8 +137,58 @@ var LocalessComponent = (0, import_react.forwardRef)(({ data, links, references,
|
|
|
102
137
|
] });
|
|
103
138
|
});
|
|
104
139
|
|
|
140
|
+
// src/hooks/use-localess.ts
|
|
141
|
+
var import_react2 = require("react");
|
|
142
|
+
var import_client3 = require("@localess/client");
|
|
143
|
+
var useLocaless = (slug, options = {}) => {
|
|
144
|
+
const [document, setDocument] = (0, import_react2.useState)();
|
|
145
|
+
const client = getLocalessClient();
|
|
146
|
+
let normalizedSlug;
|
|
147
|
+
if (Array.isArray(slug)) {
|
|
148
|
+
normalizedSlug = slug.join("/");
|
|
149
|
+
} else {
|
|
150
|
+
normalizedSlug = slug;
|
|
151
|
+
}
|
|
152
|
+
(0, import_react2.useEffect)(() => {
|
|
153
|
+
async function loadDocument() {
|
|
154
|
+
const document2 = await client.getContentBySlug(normalizedSlug, options);
|
|
155
|
+
setDocument(document2);
|
|
156
|
+
if (isSyncEnabled() && (0, import_client3.isBrowser)()) {
|
|
157
|
+
window.localess?.on(["input", "change"], (event) => {
|
|
158
|
+
if (event.type === "change" || event.type === "input") {
|
|
159
|
+
setDocument({ ...document2, data: event.data });
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
loadDocument();
|
|
165
|
+
}, [slug, options, client]);
|
|
166
|
+
return document;
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
// src/utils/link.util.ts
|
|
170
|
+
function findLink(links, link) {
|
|
171
|
+
switch (link.type) {
|
|
172
|
+
case "content": {
|
|
173
|
+
if (links) {
|
|
174
|
+
const path = links[link.uri];
|
|
175
|
+
if (path) {
|
|
176
|
+
return "/" + path.fullSlug;
|
|
177
|
+
} else {
|
|
178
|
+
return "/not-found";
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return "/not-found";
|
|
182
|
+
}
|
|
183
|
+
case "url":
|
|
184
|
+
return link.uri;
|
|
185
|
+
default:
|
|
186
|
+
return "no-type";
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
105
190
|
// src/richtext.ts
|
|
106
|
-
var
|
|
191
|
+
var import_react3 = require("@tiptap/static-renderer/pm/react");
|
|
107
192
|
var import_extension_document = require("@tiptap/extension-document");
|
|
108
193
|
var import_extension_text = require("@tiptap/extension-text");
|
|
109
194
|
var import_extension_paragraph = require("@tiptap/extension-paragraph");
|
|
@@ -120,7 +205,7 @@ var import_extension_code = require("@tiptap/extension-code");
|
|
|
120
205
|
var import_extension_code_block_lowlight = require("@tiptap/extension-code-block-lowlight");
|
|
121
206
|
var import_extension_link = require("@tiptap/extension-link");
|
|
122
207
|
function renderRichTextToReact(content) {
|
|
123
|
-
return (0,
|
|
208
|
+
return (0, import_react3.renderToReactElement)({
|
|
124
209
|
content,
|
|
125
210
|
extensions: [
|
|
126
211
|
import_extension_document.Document,
|
|
@@ -143,61 +228,6 @@ function renderRichTextToReact(content) {
|
|
|
143
228
|
]
|
|
144
229
|
});
|
|
145
230
|
}
|
|
146
|
-
|
|
147
|
-
// src/index.ts
|
|
148
|
-
var _client = void 0;
|
|
149
|
-
var _components = {};
|
|
150
|
-
var _fallbackComponent = void 0;
|
|
151
|
-
var _enableSync = false;
|
|
152
|
-
var _assetPathPrefix = "";
|
|
153
|
-
function localessInit(options) {
|
|
154
|
-
console.log("localessInit", options);
|
|
155
|
-
const { components, fallbackComponent, enableSync, ...restOptions } = options;
|
|
156
|
-
_client = (0, import_client2.localessClient)(restOptions);
|
|
157
|
-
_assetPathPrefix = `${options.origin}/api/v1/spaces/${options.spaceId}/assets/`;
|
|
158
|
-
_components = components || {};
|
|
159
|
-
_fallbackComponent = fallbackComponent;
|
|
160
|
-
if (enableSync) {
|
|
161
|
-
_enableSync = true;
|
|
162
|
-
(0, import_client2.loadLocalessSync)(restOptions.origin);
|
|
163
|
-
}
|
|
164
|
-
return _client;
|
|
165
|
-
}
|
|
166
|
-
function getLocalessClient() {
|
|
167
|
-
if (!_client) {
|
|
168
|
-
console.error("[Localess] No client found. Please check if the Localess is initialized.");
|
|
169
|
-
throw new Error("[Localess] No client found.");
|
|
170
|
-
}
|
|
171
|
-
return _client;
|
|
172
|
-
}
|
|
173
|
-
function registerComponent(key, component) {
|
|
174
|
-
_components[key] = component;
|
|
175
|
-
}
|
|
176
|
-
function unregisterComponent(key) {
|
|
177
|
-
delete _components[key];
|
|
178
|
-
}
|
|
179
|
-
function setComponents(components) {
|
|
180
|
-
_components = components;
|
|
181
|
-
}
|
|
182
|
-
function getComponent(key) {
|
|
183
|
-
if (Object.hasOwn(_components, key)) {
|
|
184
|
-
return _components[key];
|
|
185
|
-
}
|
|
186
|
-
console.error(`[Localess] component %c${key}%c can't be found.`, FONT_BOLD, FONT_NORMAL);
|
|
187
|
-
return void 0;
|
|
188
|
-
}
|
|
189
|
-
function setFallbackComponent(fallbackComponent) {
|
|
190
|
-
_fallbackComponent = fallbackComponent;
|
|
191
|
-
}
|
|
192
|
-
function getFallbackComponent() {
|
|
193
|
-
return _fallbackComponent;
|
|
194
|
-
}
|
|
195
|
-
function isSyncEnabled() {
|
|
196
|
-
return _enableSync;
|
|
197
|
-
}
|
|
198
|
-
function resolveAsset(asset) {
|
|
199
|
-
return `${_assetPathPrefix}${asset.uri}`;
|
|
200
|
-
}
|
|
201
231
|
// Annotate the CommonJS export names for ESM import in node:
|
|
202
232
|
0 && (module.exports = {
|
|
203
233
|
LocalessComponent,
|
|
@@ -217,5 +247,6 @@ function resolveAsset(asset) {
|
|
|
217
247
|
resolveAsset,
|
|
218
248
|
setComponents,
|
|
219
249
|
setFallbackComponent,
|
|
220
|
-
unregisterComponent
|
|
250
|
+
unregisterComponent,
|
|
251
|
+
useLocaless
|
|
221
252
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -1,37 +1,71 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
|
-
import {
|
|
2
|
+
import { localessEditable as localessEditable2, localessEditableField, isBrowser as isBrowser2, isServer, isIframe } from "@localess/client";
|
|
3
|
+
|
|
4
|
+
// src/components/localess-component.tsx
|
|
5
|
+
import { forwardRef } from "react";
|
|
6
|
+
import { localessEditable } from "@localess/client";
|
|
3
7
|
|
|
4
8
|
// src/console.ts
|
|
5
9
|
var FONT_BOLD = "font-weight: bold";
|
|
6
10
|
var FONT_NORMAL = "font-weight: normal";
|
|
7
11
|
|
|
8
|
-
// src/
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
case "url":
|
|
26
|
-
return link.uri;
|
|
27
|
-
default:
|
|
28
|
-
return "no-type";
|
|
12
|
+
// src/state.ts
|
|
13
|
+
import { loadLocalessSync, localessClient } from "@localess/client";
|
|
14
|
+
var _client = void 0;
|
|
15
|
+
var _components = {};
|
|
16
|
+
var _fallbackComponent = void 0;
|
|
17
|
+
var _enableSync = false;
|
|
18
|
+
var _assetPathPrefix = "";
|
|
19
|
+
function localessInit(options) {
|
|
20
|
+
console.log("localessInit", options);
|
|
21
|
+
const { components, fallbackComponent, enableSync, ...restOptions } = options;
|
|
22
|
+
_client = localessClient(restOptions);
|
|
23
|
+
_assetPathPrefix = `${options.origin}/api/v1/spaces/${options.spaceId}/assets/`;
|
|
24
|
+
_components = components || {};
|
|
25
|
+
_fallbackComponent = fallbackComponent;
|
|
26
|
+
if (enableSync) {
|
|
27
|
+
_enableSync = true;
|
|
28
|
+
loadLocalessSync(restOptions.origin);
|
|
29
29
|
}
|
|
30
|
+
return _client;
|
|
31
|
+
}
|
|
32
|
+
function getLocalessClient() {
|
|
33
|
+
if (!_client) {
|
|
34
|
+
console.error("[Localess] No client found. Please check if the Localess is initialized.");
|
|
35
|
+
throw new Error("[Localess] No client found.");
|
|
36
|
+
}
|
|
37
|
+
return _client;
|
|
38
|
+
}
|
|
39
|
+
function registerComponent(key, component) {
|
|
40
|
+
_components[key] = component;
|
|
41
|
+
}
|
|
42
|
+
function unregisterComponent(key) {
|
|
43
|
+
delete _components[key];
|
|
44
|
+
}
|
|
45
|
+
function setComponents(components) {
|
|
46
|
+
_components = components;
|
|
47
|
+
}
|
|
48
|
+
function getComponent(key) {
|
|
49
|
+
if (Object.hasOwn(_components, key)) {
|
|
50
|
+
return _components[key];
|
|
51
|
+
}
|
|
52
|
+
console.error(`[Localess] component %c${key}%c can't be found.`, FONT_BOLD, FONT_NORMAL);
|
|
53
|
+
return void 0;
|
|
54
|
+
}
|
|
55
|
+
function setFallbackComponent(fallbackComponent) {
|
|
56
|
+
_fallbackComponent = fallbackComponent;
|
|
57
|
+
}
|
|
58
|
+
function getFallbackComponent() {
|
|
59
|
+
return _fallbackComponent;
|
|
60
|
+
}
|
|
61
|
+
function isSyncEnabled() {
|
|
62
|
+
return _enableSync;
|
|
63
|
+
}
|
|
64
|
+
function resolveAsset(asset) {
|
|
65
|
+
return `${_assetPathPrefix}${asset.uri}`;
|
|
30
66
|
}
|
|
31
67
|
|
|
32
|
-
// src/localess-
|
|
33
|
-
import { forwardRef } from "react";
|
|
34
|
-
import { localessEditable } from "@localess/client";
|
|
68
|
+
// src/components/localess-component.tsx
|
|
35
69
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
36
70
|
var LocalessComponent = forwardRef(({ data, links, references, ...restProps }, ref) => {
|
|
37
71
|
if (!data) {
|
|
@@ -61,6 +95,56 @@ var LocalessComponent = forwardRef(({ data, links, references, ...restProps }, r
|
|
|
61
95
|
] });
|
|
62
96
|
});
|
|
63
97
|
|
|
98
|
+
// src/hooks/use-localess.ts
|
|
99
|
+
import { useEffect, useState } from "react";
|
|
100
|
+
import { isBrowser } from "@localess/client";
|
|
101
|
+
var useLocaless = (slug, options = {}) => {
|
|
102
|
+
const [document, setDocument] = useState();
|
|
103
|
+
const client = getLocalessClient();
|
|
104
|
+
let normalizedSlug;
|
|
105
|
+
if (Array.isArray(slug)) {
|
|
106
|
+
normalizedSlug = slug.join("/");
|
|
107
|
+
} else {
|
|
108
|
+
normalizedSlug = slug;
|
|
109
|
+
}
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
async function loadDocument() {
|
|
112
|
+
const document2 = await client.getContentBySlug(normalizedSlug, options);
|
|
113
|
+
setDocument(document2);
|
|
114
|
+
if (isSyncEnabled() && isBrowser()) {
|
|
115
|
+
window.localess?.on(["input", "change"], (event) => {
|
|
116
|
+
if (event.type === "change" || event.type === "input") {
|
|
117
|
+
setDocument({ ...document2, data: event.data });
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
loadDocument();
|
|
123
|
+
}, [slug, options, client]);
|
|
124
|
+
return document;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
// src/utils/link.util.ts
|
|
128
|
+
function findLink(links, link) {
|
|
129
|
+
switch (link.type) {
|
|
130
|
+
case "content": {
|
|
131
|
+
if (links) {
|
|
132
|
+
const path = links[link.uri];
|
|
133
|
+
if (path) {
|
|
134
|
+
return "/" + path.fullSlug;
|
|
135
|
+
} else {
|
|
136
|
+
return "/not-found";
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return "/not-found";
|
|
140
|
+
}
|
|
141
|
+
case "url":
|
|
142
|
+
return link.uri;
|
|
143
|
+
default:
|
|
144
|
+
return "no-type";
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
64
148
|
// src/richtext.ts
|
|
65
149
|
import { renderToReactElement } from "@tiptap/static-renderer/pm/react";
|
|
66
150
|
import { Document } from "@tiptap/extension-document";
|
|
@@ -102,68 +186,13 @@ function renderRichTextToReact(content) {
|
|
|
102
186
|
]
|
|
103
187
|
});
|
|
104
188
|
}
|
|
105
|
-
|
|
106
|
-
// src/index.ts
|
|
107
|
-
var _client = void 0;
|
|
108
|
-
var _components = {};
|
|
109
|
-
var _fallbackComponent = void 0;
|
|
110
|
-
var _enableSync = false;
|
|
111
|
-
var _assetPathPrefix = "";
|
|
112
|
-
function localessInit(options) {
|
|
113
|
-
console.log("localessInit", options);
|
|
114
|
-
const { components, fallbackComponent, enableSync, ...restOptions } = options;
|
|
115
|
-
_client = localessClient(restOptions);
|
|
116
|
-
_assetPathPrefix = `${options.origin}/api/v1/spaces/${options.spaceId}/assets/`;
|
|
117
|
-
_components = components || {};
|
|
118
|
-
_fallbackComponent = fallbackComponent;
|
|
119
|
-
if (enableSync) {
|
|
120
|
-
_enableSync = true;
|
|
121
|
-
loadLocalessSync(restOptions.origin);
|
|
122
|
-
}
|
|
123
|
-
return _client;
|
|
124
|
-
}
|
|
125
|
-
function getLocalessClient() {
|
|
126
|
-
if (!_client) {
|
|
127
|
-
console.error("[Localess] No client found. Please check if the Localess is initialized.");
|
|
128
|
-
throw new Error("[Localess] No client found.");
|
|
129
|
-
}
|
|
130
|
-
return _client;
|
|
131
|
-
}
|
|
132
|
-
function registerComponent(key, component) {
|
|
133
|
-
_components[key] = component;
|
|
134
|
-
}
|
|
135
|
-
function unregisterComponent(key) {
|
|
136
|
-
delete _components[key];
|
|
137
|
-
}
|
|
138
|
-
function setComponents(components) {
|
|
139
|
-
_components = components;
|
|
140
|
-
}
|
|
141
|
-
function getComponent(key) {
|
|
142
|
-
if (Object.hasOwn(_components, key)) {
|
|
143
|
-
return _components[key];
|
|
144
|
-
}
|
|
145
|
-
console.error(`[Localess] component %c${key}%c can't be found.`, FONT_BOLD, FONT_NORMAL);
|
|
146
|
-
return void 0;
|
|
147
|
-
}
|
|
148
|
-
function setFallbackComponent(fallbackComponent) {
|
|
149
|
-
_fallbackComponent = fallbackComponent;
|
|
150
|
-
}
|
|
151
|
-
function getFallbackComponent() {
|
|
152
|
-
return _fallbackComponent;
|
|
153
|
-
}
|
|
154
|
-
function isSyncEnabled() {
|
|
155
|
-
return _enableSync;
|
|
156
|
-
}
|
|
157
|
-
function resolveAsset(asset) {
|
|
158
|
-
return `${_assetPathPrefix}${asset.uri}`;
|
|
159
|
-
}
|
|
160
189
|
export {
|
|
161
190
|
LocalessComponent,
|
|
162
191
|
findLink,
|
|
163
192
|
getComponent,
|
|
164
193
|
getFallbackComponent,
|
|
165
194
|
getLocalessClient,
|
|
166
|
-
isBrowser,
|
|
195
|
+
isBrowser2 as isBrowser,
|
|
167
196
|
isIframe,
|
|
168
197
|
isServer,
|
|
169
198
|
isSyncEnabled,
|
|
@@ -175,5 +204,6 @@ export {
|
|
|
175
204
|
resolveAsset,
|
|
176
205
|
setComponents,
|
|
177
206
|
setFallbackComponent,
|
|
178
|
-
unregisterComponent
|
|
207
|
+
unregisterComponent,
|
|
208
|
+
useLocaless
|
|
179
209
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@localess/react",
|
|
3
|
-
"version": "3.0.1-dev.
|
|
3
|
+
"version": "3.0.1-dev.20260408170501",
|
|
4
4
|
"description": "ReactJS JavaScript/TypeScript SDK for Localess's API.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"localess",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"react-dom": "^17 || ^18 || ^19"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@localess/client": "3.0.1-dev.
|
|
49
|
+
"@localess/client": "3.0.1-dev.20260408170501",
|
|
50
50
|
"@tiptap/static-renderer": "^3.20.1",
|
|
51
51
|
"@tiptap/html": "^3.20.1",
|
|
52
52
|
"@tiptap/extension-bold": "^3.20.1",
|