nodoku-core 0.1.7 → 0.2.1
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/esm/bin/mustache/visual-schema.json.hbs +1 -1
- package/esm/content/nd-content.js +1 -1
- package/esm/core/dummy-comp.jsx +7 -7
- package/esm/core/rendering-page-props.js +3 -3
- package/esm/core/rendering-page.jsx +39 -18
- package/esm/index.js +8 -3
- package/esm/providers/content/content-markdown-provider.js +9 -9
- package/esm/skin/nd-skin.js +3 -7
- package/esm/theme-utils/extended-theme-style.js +1 -4
- package/esm/theme-utils/image-style.js +1 -0
- package/esm/theme-utils/row-style.js +9 -0
- package/esm/theme-utils/theme-style.js +1 -8
- package/package.json +1 -1
- package/schemas/skin-common-schema.json +41 -0
- package/types/content/nd-content.d.ts +0 -1
- package/types/core/providers.d.ts +8 -1
- package/types/core/rendering-page-props.d.ts +3 -3
- package/types/index.d.ts +8 -4
- package/types/skin/nd-skin.d.ts +5 -5
- package/types/theme-utils/extended-theme-style.d.ts +2 -2
- package/types/theme-utils/image-style.d.ts +4 -0
- package/types/theme-utils/row-style.d.ts +6 -0
- package/types/theme-utils/theme-style.d.ts +2 -3
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"type": "object",
|
|
10
10
|
"properties": {
|
|
11
11
|
"theme": {
|
|
12
|
-
"$ref": "../node_modules/nodoku-core/schemas/skin-common-schema.json#/definitions/
|
|
12
|
+
"$ref": "../node_modules/nodoku-core/schemas/skin-common-schema.json#/definitions/RowThemeStyle",
|
|
13
13
|
"additionalProperties": false
|
|
14
14
|
},
|
|
15
15
|
"maxCols": {
|
package/esm/core/dummy-comp.jsx
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { NdCode, NdTranslatableText } from "../content/nd-content";
|
|
2
|
-
// import {CodeComp} from "./code-comp";
|
|
3
2
|
export async function DummyComp(props) {
|
|
4
3
|
// console.log("content dummy comp", props.theme)
|
|
5
4
|
const { content, i18nextProvider, lng, rowIndex, componentIndex } = props;
|
|
@@ -7,13 +6,14 @@ export async function DummyComp(props) {
|
|
|
7
6
|
return <div>{await render(rowIndex, componentIndex, content[0], t)}</div>;
|
|
8
7
|
}
|
|
9
8
|
async function render(rowIndex, componentIndex, block, t) {
|
|
10
|
-
var style = {};
|
|
11
|
-
if (block.bgImageUrl) {
|
|
12
|
-
|
|
13
|
-
}
|
|
9
|
+
// var style = {};
|
|
10
|
+
// if (block.bgImageUrl) {
|
|
11
|
+
// style = {backgroundImage: `url(${t(block.bgImageUrl)})`}
|
|
12
|
+
// }
|
|
14
13
|
return (<div className={"w-full w-full flex flex-col items-left justify-left border border-4 border-red-200 relative pb-10"}>
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
{/*<div className={"top-0 bottom-0 left-0 right-0 absolute bg-cover bg-no-repeat"}*/}
|
|
15
|
+
{/* style={{...style, zIndex: -11}}>*/}
|
|
16
|
+
{/*</div>*/}
|
|
17
17
|
<div className={"top-0 bottom-0 left-0 right-0 absolute bg-white "} style={{ zIndex: -5, opacity: 0.7 }}>
|
|
18
18
|
</div>
|
|
19
19
|
<div className={"p-5 w-full bg-red-400 text-center"}>dummy component<h3><b>{`ns-${block.namespace}-row-${rowIndex}-i-${componentIndex}`}</b></h3></div>
|
|
@@ -21,15 +21,15 @@ export class RenderingPageProps {
|
|
|
21
21
|
skin = undefined;
|
|
22
22
|
renderingPriority = RenderingPriority.content_first;
|
|
23
23
|
componentResolver = undefined;
|
|
24
|
-
|
|
24
|
+
imageProvider = undefined;
|
|
25
25
|
i18nextProvider = undefined;
|
|
26
|
-
constructor(lng, content, componentResolver, skin = undefined, renderingPriority = RenderingPriority.content_first,
|
|
26
|
+
constructor(lng, content, componentResolver, skin = undefined, renderingPriority = RenderingPriority.content_first, imageProvider = undefined, i18nextProvider = undefined) {
|
|
27
27
|
this.lng = lng;
|
|
28
28
|
this.renderingPriority = renderingPriority;
|
|
29
29
|
this.content = content;
|
|
30
30
|
this.componentResolver = componentResolver;
|
|
31
31
|
this.skin = skin;
|
|
32
|
-
this.
|
|
32
|
+
this.imageProvider = imageProvider;
|
|
33
33
|
this.i18nextProvider = i18nextProvider;
|
|
34
34
|
}
|
|
35
35
|
}
|
|
@@ -5,15 +5,17 @@ import { DummyComp } from "./dummy-comp";
|
|
|
5
5
|
import yaml from "js-yaml";
|
|
6
6
|
import fs from "node:fs";
|
|
7
7
|
import { mergeTheme } from "../theme-utils/theme-merger";
|
|
8
|
+
import { defaultRowThemeImpl } from "../theme-utils/row-style";
|
|
8
9
|
async function defaultComponentResolver() {
|
|
9
10
|
const compoDef = new NdComponentDefinition("unlimited", undefined, {});
|
|
10
11
|
return { compo: DummyComp, compoDef: compoDef };
|
|
11
12
|
}
|
|
12
|
-
async function
|
|
13
|
-
|
|
13
|
+
async function defaultImageProvider(imageProps) {
|
|
14
|
+
const { imageStyle, url, alt } = imageProps;
|
|
15
|
+
return <img className={`${imageStyle?.base} ${imageStyle?.decoration}`} src={url} alt={alt}/>;
|
|
14
16
|
}
|
|
15
17
|
async function RenderingPage(props) {
|
|
16
|
-
const { lng, renderingPriority, content, componentResolver, skin,
|
|
18
|
+
const { lng, renderingPriority, content, componentResolver, skin, imageProvider, i18nextProvider } = props;
|
|
17
19
|
const actualComponentResolver = componentResolver ? componentResolver : defaultComponentResolver;
|
|
18
20
|
let l;
|
|
19
21
|
if (skin) {
|
|
@@ -23,10 +25,10 @@ async function RenderingPage(props) {
|
|
|
23
25
|
}
|
|
24
26
|
// console.log(" >>> this is my content <<< ", content)
|
|
25
27
|
// console.log(" >>> this is my skin <<< ", JSON.stringify(blockSkin))
|
|
26
|
-
l = await Promise.all(blockSkin.rows.map(async (row, iRow) => await createRow(row, iRow, content, lng,
|
|
28
|
+
l = await Promise.all(blockSkin.rows.map(async (row, iRow) => await createRow(row, iRow, content, lng, imageProvider, i18nextProvider, actualComponentResolver)));
|
|
27
29
|
}
|
|
28
30
|
else {
|
|
29
|
-
l = [await createRow(undefined, 0, content, lng,
|
|
31
|
+
l = [await createRow(undefined, 0, content, lng, imageProvider, i18nextProvider, actualComponentResolver)];
|
|
30
32
|
}
|
|
31
33
|
return <div className={`${skin?.renderingPage?.base} ${skin?.renderingPage?.decoration}`}>{l}</div>;
|
|
32
34
|
}
|
|
@@ -35,7 +37,7 @@ function generateSkinByContentBlocks(blocks, skin) {
|
|
|
35
37
|
let currentRow = undefined;
|
|
36
38
|
const res = new NdPageSkin();
|
|
37
39
|
let rowIndex = 0;
|
|
38
|
-
blocks.map((b
|
|
40
|
+
blocks.map((b) => {
|
|
39
41
|
if (!rendered.has(b.id)) {
|
|
40
42
|
const bRows = skin.rows.filter(r => r.components.filter(c => c.selector.match(b)).length > 0);
|
|
41
43
|
if (bRows.length > 0) {
|
|
@@ -62,66 +64,85 @@ function generateSkinByContentBlocks(blocks, skin) {
|
|
|
62
64
|
// console.log("generated skin", JSON.stringify(res))
|
|
63
65
|
return res;
|
|
64
66
|
}
|
|
65
|
-
async function createRow(row, iRow, blocks, lng,
|
|
67
|
+
async function createRow(row, iRow, blocks, lng, imageProvider, i18nProvider, componentResolver) {
|
|
66
68
|
let l;
|
|
67
69
|
if (row) {
|
|
68
|
-
l = await Promise.all(row.components.map(async (visualSection, iComp) => await createRowComponents(iRow, iComp, visualSection, blocks, lng,
|
|
70
|
+
l = await Promise.all(row.components.map(async (visualSection, iComp) => await createRowComponents(iRow, iComp, visualSection, blocks, lng, imageProvider, i18nProvider, componentResolver)));
|
|
69
71
|
}
|
|
70
72
|
else {
|
|
71
|
-
l = await Promise.all(blocks.map(async (block, iComp) => await createRowComponents(iRow, iComp, undefined, [block], lng,
|
|
73
|
+
l = await Promise.all(blocks.map(async (block, iComp) => await createRowComponents(iRow, iComp, undefined, [block], lng, imageProvider, i18nProvider, componentResolver)));
|
|
72
74
|
}
|
|
73
75
|
const rowComponents = l.flatMap((p) => p);
|
|
74
76
|
if (rowComponents.length == 0) {
|
|
75
77
|
return <></>;
|
|
76
78
|
}
|
|
77
79
|
const numComponents = rowComponents.length;
|
|
78
|
-
const rowEffectiveTheme = mergeTheme(row?.theme,
|
|
80
|
+
const rowEffectiveTheme = mergeTheme(row?.theme, defaultRowThemeImpl);
|
|
79
81
|
const maxCols = row?.maxCols ? row.maxCols : 3;
|
|
80
82
|
const numCols = numComponents <= maxCols ? numComponents : maxCols;
|
|
81
83
|
let gridCols = "grid-cols-1";
|
|
84
|
+
let flexBasis = "basis-full";
|
|
82
85
|
switch (numCols) {
|
|
83
86
|
case 1:
|
|
84
87
|
gridCols = "lg:grid-cols-1";
|
|
88
|
+
flexBasis = "lg:basis-full";
|
|
85
89
|
break;
|
|
86
90
|
case 2:
|
|
87
91
|
gridCols = "lg:grid-cols-2";
|
|
92
|
+
flexBasis = "lg:basis-1/2";
|
|
88
93
|
break;
|
|
89
94
|
case 3:
|
|
90
95
|
gridCols = "lg:grid-cols-3";
|
|
96
|
+
flexBasis = "lg:basis-1/3";
|
|
91
97
|
break;
|
|
92
98
|
case 4:
|
|
93
99
|
gridCols = "lg:grid-cols-4";
|
|
100
|
+
flexBasis = "lg:basis-1/4";
|
|
94
101
|
break;
|
|
95
102
|
case 5:
|
|
96
103
|
gridCols = "lg:grid-cols-5";
|
|
104
|
+
flexBasis = "lg:basis-1/5";
|
|
97
105
|
break;
|
|
98
106
|
case 6:
|
|
99
107
|
gridCols = "lg:grid-cols-6";
|
|
108
|
+
flexBasis = "lg:basis-1/6";
|
|
100
109
|
break;
|
|
101
110
|
case 7:
|
|
102
111
|
gridCols = "lg:grid-cols-7";
|
|
112
|
+
flexBasis = "lg:basis-1/7";
|
|
103
113
|
break;
|
|
104
114
|
case 8:
|
|
105
115
|
gridCols = "lg:grid-cols-8";
|
|
116
|
+
flexBasis = "lg:basis-1/8";
|
|
106
117
|
break;
|
|
107
118
|
case 9:
|
|
108
119
|
gridCols = "lg:grid-cols-9";
|
|
120
|
+
flexBasis = "lg:basis-1/9";
|
|
109
121
|
break;
|
|
110
122
|
case 10:
|
|
111
123
|
gridCols = "lg:grid-cols-10";
|
|
124
|
+
flexBasis = "lg:basis-1/10";
|
|
112
125
|
break;
|
|
113
126
|
case 11:
|
|
114
127
|
gridCols = "lg:grid-cols-11";
|
|
128
|
+
flexBasis = "lg:basis-1/11";
|
|
115
129
|
break;
|
|
116
130
|
case 12:
|
|
117
131
|
gridCols = "lg:grid-cols-12";
|
|
132
|
+
flexBasis = "lg:basis-1/12";
|
|
118
133
|
break;
|
|
119
134
|
}
|
|
120
|
-
|
|
121
|
-
|
|
135
|
+
let rowDisplay = `grid ${gridCols}`;
|
|
136
|
+
if (rowEffectiveTheme.rowDisplay == "flex") {
|
|
137
|
+
rowDisplay = "flex flex-row justify-center flex-wrap flex-1";
|
|
138
|
+
}
|
|
139
|
+
return (<div key={`row-${iRow}`} className={`${rowDisplay} ${rowEffectiveTheme?.base} ${rowEffectiveTheme?.decoration} class-row-${iRow}`}>
|
|
140
|
+
{rowComponents.map((c) => <div className={`nd-component-holder ${flexBasis} ${rowEffectiveTheme.componentHolder?.base} ${rowEffectiveTheme.componentHolder?.decoration}`}>
|
|
141
|
+
{c}
|
|
142
|
+
</div>)}
|
|
122
143
|
</div>);
|
|
123
144
|
}
|
|
124
|
-
async function createRowComponents(rowIndex, blockIndex, skinComponent, pageContent, lng,
|
|
145
|
+
async function createRowComponents(rowIndex, blockIndex, skinComponent, pageContent, lng, imageProvider, i18nProvider, componentResolver) {
|
|
125
146
|
// console.log("before component", skinComponent)
|
|
126
147
|
const filteredBlocks = skinComponent ? skinComponent.selector.filterBlocks(pageContent) : pageContent;
|
|
127
148
|
if (filteredBlocks.length == 0) {
|
|
@@ -147,14 +168,14 @@ async function createRowComponents(rowIndex, blockIndex, skinComponent, pageCont
|
|
|
147
168
|
const blocks = filteredBlocks.slice(start, end);
|
|
148
169
|
const compIndex = blockIndex * filteredBlocks.length + i;
|
|
149
170
|
// console.log("calculated compo index ", compIndex, "filteredBlocks.length", filteredBlocks.length, "blockIndex", blockIndex)
|
|
150
|
-
res.push(await renderSingleComponent(rowIndex, compIndex, compo, blocks, skinComponent?.defaultThemeName || "light", compoDef.defaultTheme, skinComponent?.themeHierarchy, lng,
|
|
171
|
+
res.push(await renderSingleComponent(rowIndex, compIndex, compo, blocks, skinComponent?.defaultThemeName || "light", compoDef.defaultTheme, skinComponent?.themeHierarchy, lng, imageProvider, i18nProvider));
|
|
151
172
|
}
|
|
152
173
|
start = end;
|
|
153
174
|
++i;
|
|
154
175
|
} while (end < filteredBlocks.length);
|
|
155
176
|
return res;
|
|
156
177
|
}
|
|
157
|
-
async function renderSingleComponent(rowIndex, componentIndex, component, blocks, defaultThemeName, defaultTheme, themeHierarchy, lng,
|
|
178
|
+
async function renderSingleComponent(rowIndex, componentIndex, component, blocks, defaultThemeName, defaultTheme, themeHierarchy, lng, imageProvider, i18nextProvider) {
|
|
158
179
|
let actualI18nextProvider;
|
|
159
180
|
if (lng == blocks[0].lng || !i18nextProvider) {
|
|
160
181
|
actualI18nextProvider = async (lng) => {
|
|
@@ -167,7 +188,7 @@ async function renderSingleComponent(rowIndex, componentIndex, component, blocks
|
|
|
167
188
|
else {
|
|
168
189
|
actualI18nextProvider = i18nextProvider;
|
|
169
190
|
}
|
|
170
|
-
const
|
|
191
|
+
const actualImageProvider = imageProvider ? imageProvider : defaultImageProvider;
|
|
171
192
|
// if (themeHierarchy) {
|
|
172
193
|
// console.log("themeHierarchy", themeHierarchy)
|
|
173
194
|
// }
|
|
@@ -182,12 +203,12 @@ async function renderSingleComponent(rowIndex, componentIndex, component, blocks
|
|
|
182
203
|
themes: effectiveThemes,
|
|
183
204
|
options: effectiveOptions,
|
|
184
205
|
lng: lng,
|
|
185
|
-
|
|
206
|
+
imageProvider: actualImageProvider,
|
|
186
207
|
i18nextProvider: actualI18nextProvider
|
|
187
208
|
};
|
|
188
209
|
// console.log("start rendering page with props", props);
|
|
189
210
|
const res = await component(props);
|
|
190
211
|
// console.log("end rendering page with props", props);
|
|
191
|
-
return
|
|
212
|
+
return res;
|
|
192
213
|
}
|
|
193
214
|
export { RenderingPage };
|
package/esm/index.js
CHANGED
|
@@ -3,11 +3,16 @@ import { NdSkinComponent, NdRow, NdPageSkin, NdSkinComponentProps, NdContentSele
|
|
|
3
3
|
import { RenderingPageProps, RenderingPriority } from "./core/rendering-page-props";
|
|
4
4
|
import { RenderingPage } from "./core/rendering-page";
|
|
5
5
|
import { mergeTheme } from "./theme-utils/theme-merger";
|
|
6
|
-
import {
|
|
7
|
-
import { ExtendedThemeStyle } from "./theme-utils/extended-theme-style";
|
|
6
|
+
import { defaultRowThemeImpl } from "./theme-utils/row-style";
|
|
8
7
|
export { NdContentImage, NdTranslatableText, NdList, NdCode, NdContentBlock, NdSkinComponent, NdRow, NdPageSkin, NdSkinComponentProps, NdContentSelector, NdComponentDefinition, NdThemeHierarchy };
|
|
9
8
|
export { RenderingPageProps, RenderingPriority, RenderingPage };
|
|
10
|
-
export { mergeTheme
|
|
9
|
+
export { mergeTheme };
|
|
11
10
|
export { DummyComp } from "./core/dummy-comp";
|
|
12
11
|
export { contentMarkdownProvider, parseMarkdownAsContent } from "./providers/content/content-markdown-provider";
|
|
13
12
|
export { skinYamlProvider, parseYamlContentAsSkin } from "./providers/skin/skin-yaml-provider";
|
|
13
|
+
export const ts = function (t, key) {
|
|
14
|
+
const themeStyle = t[key];
|
|
15
|
+
const k = key;
|
|
16
|
+
return k + " " + themeStyle?.base + " " + themeStyle?.decoration;
|
|
17
|
+
};
|
|
18
|
+
export const defaultRowTheme = defaultRowThemeImpl;
|
|
@@ -250,9 +250,10 @@ class BlockHolder {
|
|
|
250
250
|
if (this.blockContent.footer && this.blockContent.footer.trim().length > 0) {
|
|
251
251
|
newBlock.footer = new NdTranslatableText(this.ns, `${blockId}.footer`, this.blockContent.footer);
|
|
252
252
|
}
|
|
253
|
-
if (this.blockContent.bgImage && this.blockContent.bgImage.getAttribute("src")) {
|
|
254
|
-
|
|
255
|
-
|
|
253
|
+
// if (this.blockContent.bgImage && this.blockContent.bgImage.getAttribute("src")) {
|
|
254
|
+
// newBlock.bgImageUrl = new NdTranslatableText(this.ns, `${blockId}.bgImageUrl`,
|
|
255
|
+
// this.blockContent.bgImage.getAttribute("src") as string, true);
|
|
256
|
+
// }
|
|
256
257
|
// console.log("added block", newBlock)
|
|
257
258
|
return newBlock;
|
|
258
259
|
}
|
|
@@ -348,12 +349,11 @@ export function parseMarkdownAsContent(fileContents, contentLng, ns) {
|
|
|
348
349
|
childNode.childNodes.filter(cn => cn.rawTagName == "img")
|
|
349
350
|
.forEach((cn) => {
|
|
350
351
|
const l = cn;
|
|
351
|
-
if (l.getAttribute("alt") === "bg-image") {
|
|
352
|
-
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
}
|
|
352
|
+
// if (l.getAttribute("alt") === "bg-image") {
|
|
353
|
+
// currentBlock.blockContent.bgImage = l;
|
|
354
|
+
// } else {
|
|
355
|
+
currentBlock.addImage(cn);
|
|
356
|
+
// }
|
|
357
357
|
});
|
|
358
358
|
}
|
|
359
359
|
else {
|
package/esm/skin/nd-skin.js
CHANGED
|
@@ -72,10 +72,6 @@ export class NdRow {
|
|
|
72
72
|
constructor(rowIndex) {
|
|
73
73
|
this.rowIndex = rowIndex;
|
|
74
74
|
}
|
|
75
|
-
static defaultRowTheme = {
|
|
76
|
-
base: "md:grid-cols-1",
|
|
77
|
-
decoration: "gap-4"
|
|
78
|
-
};
|
|
79
75
|
}
|
|
80
76
|
export class NdPageSkin {
|
|
81
77
|
renderingPage;
|
|
@@ -121,9 +117,9 @@ export class NdSkinComponentProps {
|
|
|
121
117
|
themes;
|
|
122
118
|
options;
|
|
123
119
|
lng;
|
|
124
|
-
|
|
120
|
+
imageProvider;
|
|
125
121
|
i18nextProvider;
|
|
126
|
-
constructor(rowIndex, componentIndex, content, defaultThemeName, theme, themes, options, lng,
|
|
122
|
+
constructor(rowIndex, componentIndex, content, defaultThemeName, theme, themes, options, lng, imageProvider, i18nextProvider) {
|
|
127
123
|
this.rowIndex = rowIndex;
|
|
128
124
|
this.componentIndex = componentIndex;
|
|
129
125
|
this.content = content;
|
|
@@ -132,7 +128,7 @@ export class NdSkinComponentProps {
|
|
|
132
128
|
this.themes = themes.slice();
|
|
133
129
|
this.options = options;
|
|
134
130
|
this.lng = lng;
|
|
135
|
-
this.
|
|
131
|
+
this.imageProvider = imageProvider;
|
|
136
132
|
this.i18nextProvider = i18nextProvider;
|
|
137
133
|
}
|
|
138
134
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -48,6 +48,47 @@
|
|
|
48
48
|
]
|
|
49
49
|
},
|
|
50
50
|
|
|
51
|
+
"ImageStyle": {
|
|
52
|
+
"allOf": [
|
|
53
|
+
{
|
|
54
|
+
"$ref": "#/definitions/ThemeStyle"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"type": "object",
|
|
58
|
+
"properties": {
|
|
59
|
+
"imageWidth": {
|
|
60
|
+
"type": "string"
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"additionalProperties": false
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"additionalProperties": false
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
"RowThemeStyle": {
|
|
71
|
+
"allOf": [
|
|
72
|
+
{
|
|
73
|
+
"$ref": "#/definitions/ThemeStyle"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"type": "object",
|
|
77
|
+
"properties": {
|
|
78
|
+
"rowDisplay": {
|
|
79
|
+
"type": "string",
|
|
80
|
+
"enum": ["flex", "grid"]
|
|
81
|
+
},
|
|
82
|
+
"componentHolder": {
|
|
83
|
+
"$ref": "#/definitions/ThemeStyle"
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"additionalProperties": false
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
"additionalProperties": false
|
|
90
|
+
},
|
|
91
|
+
|
|
51
92
|
|
|
52
93
|
|
|
53
94
|
"Selector": {
|
|
@@ -40,7 +40,6 @@ export declare class NdContentBlock {
|
|
|
40
40
|
h6?: NdTranslatableText;
|
|
41
41
|
footer?: NdTranslatableText;
|
|
42
42
|
paragraphs: (NdTranslatableText | NdList | NdCode)[];
|
|
43
|
-
bgImageUrl?: NdTranslatableText;
|
|
44
43
|
images: NdContentImage[];
|
|
45
44
|
htmlElements: {
|
|
46
45
|
htmlElem: HTMLElement;
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { JSX } from "react";
|
|
2
2
|
import { NdComponentDefinition, NdSkinComponentProps } from "../skin/nd-skin";
|
|
3
3
|
import { NdTranslatableText } from "../content/nd-content";
|
|
4
|
+
import { ImageStyle } from "../theme-utils/image-style";
|
|
5
|
+
export type NdImageProps = {
|
|
6
|
+
url: string;
|
|
7
|
+
alt?: string;
|
|
8
|
+
title?: string;
|
|
9
|
+
imageStyle?: ImageStyle;
|
|
10
|
+
};
|
|
4
11
|
export type AsyncFunctionComponent = (props: NdSkinComponentProps) => Promise<JSX.Element>;
|
|
5
12
|
export type ComponentResolver = (componentName: string) => Promise<{
|
|
6
13
|
compo: AsyncFunctionComponent;
|
|
@@ -9,4 +16,4 @@ export type ComponentResolver = (componentName: string) => Promise<{
|
|
|
9
16
|
export type I18nextProvider = (lng: string) => Promise<{
|
|
10
17
|
t: (text: NdTranslatableText) => string;
|
|
11
18
|
}>;
|
|
12
|
-
export type
|
|
19
|
+
export type ImageProvider = (imageProps: NdImageProps) => Promise<JSX.Element>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ComponentResolver, I18nextProvider,
|
|
1
|
+
import { ComponentResolver, I18nextProvider, ImageProvider } from "./providers";
|
|
2
2
|
import { NdContentBlock } from "../content/nd-content";
|
|
3
3
|
import { NdPageSkin } from "../skin/nd-skin";
|
|
4
4
|
export declare enum RenderingPriority {
|
|
@@ -11,7 +11,7 @@ export declare class RenderingPageProps {
|
|
|
11
11
|
skin: NdPageSkin | undefined;
|
|
12
12
|
renderingPriority: RenderingPriority;
|
|
13
13
|
componentResolver: ComponentResolver | undefined;
|
|
14
|
-
|
|
14
|
+
imageProvider: ImageProvider | undefined;
|
|
15
15
|
i18nextProvider: I18nextProvider | undefined;
|
|
16
|
-
constructor(lng: string, content: NdContentBlock[], componentResolver: ComponentResolver | undefined, skin?: NdPageSkin | undefined, renderingPriority?: RenderingPriority,
|
|
16
|
+
constructor(lng: string, content: NdContentBlock[], componentResolver: ComponentResolver | undefined, skin?: NdPageSkin | undefined, renderingPriority?: RenderingPriority, imageProvider?: ImageProvider | undefined, i18nextProvider?: I18nextProvider | undefined);
|
|
17
17
|
}
|
package/types/index.d.ts
CHANGED
|
@@ -2,14 +2,18 @@ import { NdContentImage, NdTranslatableText, NdList, NdCode, NdContentBlock } fr
|
|
|
2
2
|
import { NdSkinComponent, NdRow, NdPageSkin, NdSkinComponentProps, NdContentSelector, NdComponentDefinition, NdThemeHierarchy, NdDefaultThemeName } from "./skin/nd-skin";
|
|
3
3
|
import { RenderingPageProps, RenderingPriority } from "./core/rendering-page-props";
|
|
4
4
|
import { RenderingPage } from "./core/rendering-page";
|
|
5
|
-
import { I18nextProvider, AsyncFunctionComponent,
|
|
5
|
+
import { I18nextProvider, AsyncFunctionComponent, ImageProvider, NdImageProps } from "./core/providers";
|
|
6
6
|
import { mergeTheme } from "./theme-utils/theme-merger";
|
|
7
7
|
import { ThemeStyle } from "./theme-utils/theme-style";
|
|
8
8
|
import { ExtendedThemeStyle } from "./theme-utils/extended-theme-style";
|
|
9
|
-
|
|
9
|
+
import { ImageStyle } from "./theme-utils/image-style";
|
|
10
|
+
import { RowStyle } from "./theme-utils/row-style";
|
|
11
|
+
export { NdContentImage, NdTranslatableText, NdList, NdCode, NdContentBlock, NdSkinComponent, NdRow, NdPageSkin, NdSkinComponentProps, NdContentSelector, NdComponentDefinition, NdThemeHierarchy, type NdDefaultThemeName, type NdImageProps };
|
|
10
12
|
export { RenderingPageProps, RenderingPriority, RenderingPage };
|
|
11
|
-
export { mergeTheme, ThemeStyle, ExtendedThemeStyle };
|
|
12
|
-
export type { I18nextProvider, AsyncFunctionComponent,
|
|
13
|
+
export { mergeTheme, type ThemeStyle, type ExtendedThemeStyle, type ImageStyle };
|
|
14
|
+
export type { I18nextProvider, AsyncFunctionComponent, ImageProvider };
|
|
13
15
|
export { DummyComp } from "./core/dummy-comp";
|
|
14
16
|
export { contentMarkdownProvider, parseMarkdownAsContent } from "./providers/content/content-markdown-provider";
|
|
15
17
|
export { skinYamlProvider, parseYamlContentAsSkin } from "./providers/skin/skin-yaml-provider";
|
|
18
|
+
export declare const ts: <T>(t: T, key: keyof T) => string;
|
|
19
|
+
export declare const defaultRowTheme: RowStyle;
|
package/types/skin/nd-skin.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { I18nextProvider,
|
|
1
|
+
import { I18nextProvider, ImageProvider } from "../core/providers";
|
|
2
2
|
import { NdContentBlock } from "../content/nd-content";
|
|
3
3
|
import { ThemeStyle } from "../theme-utils/theme-style";
|
|
4
|
+
import { RowStyle } from "../theme-utils/row-style";
|
|
4
5
|
export type NdDefaultThemeName = "light" | "dark";
|
|
5
6
|
export declare class NdThemeHierarchy {
|
|
6
7
|
defaultThemeName: NdDefaultThemeName;
|
|
@@ -31,10 +32,9 @@ export declare class NdSkinComponent {
|
|
|
31
32
|
export declare class NdRow {
|
|
32
33
|
rowIndex: number;
|
|
33
34
|
maxCols?: number;
|
|
34
|
-
theme
|
|
35
|
+
theme?: RowStyle;
|
|
35
36
|
components: NdSkinComponent[];
|
|
36
37
|
constructor(rowIndex: number);
|
|
37
|
-
static defaultRowTheme: ThemeStyle;
|
|
38
38
|
}
|
|
39
39
|
export declare class NdPageSkin {
|
|
40
40
|
renderingPage: ThemeStyle | undefined;
|
|
@@ -69,7 +69,7 @@ export declare class NdSkinComponentProps<TComponentTheme = any, TComponentOptio
|
|
|
69
69
|
themes: TComponentTheme[];
|
|
70
70
|
options: TComponentOptions | undefined;
|
|
71
71
|
lng: string;
|
|
72
|
-
|
|
72
|
+
imageProvider: ImageProvider;
|
|
73
73
|
i18nextProvider: I18nextProvider;
|
|
74
|
-
constructor(rowIndex: number, componentIndex: number, content: NdContentBlock[], defaultThemeName: NdDefaultThemeName, theme: TComponentTheme, themes: TComponentTheme[], options: TComponentOptions, lng: string,
|
|
74
|
+
constructor(rowIndex: number, componentIndex: number, content: NdContentBlock[], defaultThemeName: NdDefaultThemeName, theme: TComponentTheme, themes: TComponentTheme[], options: TComponentOptions, lng: string, imageProvider: ImageProvider, i18nextProvider: I18nextProvider);
|
|
75
75
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { CSSProperties } from "react";
|
|
2
2
|
import { ThemeStyle } from "./theme-style";
|
|
3
|
-
export
|
|
3
|
+
export type ExtendedThemeStyle = ThemeStyle & {
|
|
4
4
|
css?: {
|
|
5
5
|
light: CSSProperties;
|
|
6
6
|
dark: CSSProperties;
|
|
7
7
|
};
|
|
8
|
-
}
|
|
8
|
+
};
|