json-renderers-build 1.5.2 → 1.7.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.
Files changed (40) hide show
  1. package/package.json +3 -3
  2. package/src/index.js +2 -2
  3. package/src/v5/select/index.js +1 -1
  4. package/src/v5/selectOptionsOnly/index.js +1 -1
  5. package/src/v5/tableHeadCells/index.js +19 -0
  6. package/src/v5/tableHeadCells/skeleton.json +17 -0
  7. package/src/v6/common/deriveColumnsFromData.js +20 -0
  8. package/src/v6/index.js +40 -0
  9. package/src/v6/meta.js +6 -0
  10. package/src/v6/registerGlobal.js +14 -0
  11. package/src/v6/select/index.js +20 -0
  12. package/src/v6/select/skeleton.json +7 -0
  13. package/src/v6/selectOptionsOnly/index.js +19 -0
  14. package/src/v6/selectOptionsOnly/skeleton.json +17 -0
  15. package/src/v6/table/index.js +20 -0
  16. package/src/v6/table/skeleton.json +47 -0
  17. package/src/v6/tableHeadCells/index.js +19 -0
  18. package/src/v6/tableHeadCells/skeleton.json +17 -0
  19. package/src/v7/common/deriveColumnsFromData.js +20 -0
  20. package/src/v7/index.js +47 -0
  21. package/src/v7/meta.js +6 -0
  22. package/src/v7/registerGlobal.js +14 -0
  23. package/src/v7/select/index.js +21 -0
  24. package/src/v7/select/options/index.js +17 -0
  25. package/src/v7/select/options/skeleton.json +17 -0
  26. package/src/v7/select/skeleton.json +7 -0
  27. package/src/v7/table/body/cells/index.js +23 -0
  28. package/src/v7/table/body/cells/skeleton.json +17 -0
  29. package/src/v7/table/body/index.js +15 -0
  30. package/src/v7/table/body/rows/index.js +36 -0
  31. package/src/v7/table/body/rows/skeleton.json +4 -0
  32. package/src/v7/table/body/skeleton.json +4 -0
  33. package/src/v7/table/head/cells/index.js +23 -0
  34. package/src/v7/table/head/cells/skeleton.json +17 -0
  35. package/src/v7/table/head/index.js +15 -0
  36. package/src/v7/table/head/row/index.js +15 -0
  37. package/src/v7/table/head/row/skeleton.json +4 -0
  38. package/src/v7/table/head/skeleton.json +4 -0
  39. package/src/v7/table/index.js +26 -0
  40. package/src/v7/table/skeleton.json +7 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "json-renderers-build",
3
- "version": "1.5.2",
3
+ "version": "1.7.1",
4
4
  "description": "Headless component specification builder for json-renderers, compiling UI skeletons and data into JSON-to-DOM specs using json-to-spec",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -41,7 +41,7 @@
41
41
  "vite": "^5.4.2"
42
42
  },
43
43
  "dependencies": {
44
- "@keshavsoft/json-transformer": "^1.13.2",
44
+ "@keshavsoft/json-transformer": "^1.14.0",
45
45
  "json-to-spec": "^32.1.3"
46
46
  }
47
- }
47
+ }
package/src/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export * from "./v5/index.js";
2
- export { default } from "./v5/index.js";
1
+ export * from "./v7/index.js";
2
+ export { default } from "./v7/index.js";
@@ -12,7 +12,7 @@ const startFunc = ({
12
12
  inData: localData
13
13
  });
14
14
  // console.log("specAsJsonToDom: ", specAsJsonToDom);
15
- skeletonJson.children = localChildren?.children;
15
+ skeletonJson.children = localChildren;
16
16
 
17
17
  return skeletonJson;
18
18
  };
@@ -13,7 +13,7 @@ const startFunc = ({
13
13
  }, skeletonJson);
14
14
  // console.log("specAsJsonToDom: ", specAsJsonToDom);
15
15
 
16
- return specAsJsonToDom;
16
+ return specAsJsonToDom?.children;
17
17
  };
18
18
 
19
19
  export default startFunc;
@@ -0,0 +1,19 @@
1
+ import jsonTransform from "@keshavsoft/json-transformer";
2
+
3
+ import skeletonJson from './skeleton.json' with { type: 'json' };
4
+
5
+ // --- Story of Table Render ---
6
+ const startFunc = ({
7
+ inData,
8
+ } = {}) => {
9
+ const localData = inData ?? [];
10
+
11
+ let thAsArray = jsonTransform({
12
+ children: localData
13
+ }, skeletonJson);
14
+ // console.log("specAsJsonToDom: ", specAsJsonToDom);
15
+
16
+ return thAsArray?.children;
17
+ };
18
+
19
+ export default startFunc;
@@ -0,0 +1,17 @@
1
+ {
2
+ "transform": {
3
+ "children": ""
4
+ },
5
+ "operation": {
6
+ "children": {
7
+ "operationType": "loopArray",
8
+ "template": {
9
+ "tagName": "th",
10
+ "attributes": {
11
+ "value": "${}"
12
+ },
13
+ "textContent": "${}"
14
+ }
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,20 @@
1
+ const deriveColumnsFromData = ({ inData = [] } = {}) => {
2
+ const localData = inData;
3
+
4
+ if (!Array.isArray(localData) || localData.length === 0) {
5
+ return [];
6
+ }
7
+
8
+ const firstRow = localData[0];
9
+ if (!firstRow || typeof firstRow !== "object") {
10
+ return [];
11
+ }
12
+
13
+ return Object.keys(firstRow).map(key => ({
14
+ key,
15
+ label: key
16
+ }));
17
+ };
18
+
19
+ export { deriveColumnsFromData };
20
+ export default deriveColumnsFromData;
@@ -0,0 +1,40 @@
1
+ import registerGlobal from "./registerGlobal.js";
2
+
3
+ import renderTable from "./table/index.js";
4
+ import renderSelect from "./select/index.js";
5
+ import renderSelectOptionsOnly from "./selectOptionsOnly/index.js";
6
+
7
+ const RENDERER_MAP = {
8
+ table: renderTable,
9
+ select: renderSelect,
10
+ selectOptionsOnly: renderSelectOptionsOnly
11
+ };
12
+
13
+ const render = ({
14
+ type = "table",
15
+ data,
16
+ columns
17
+ } = {}) => {
18
+ const rawType = type;
19
+ const renderer = RENDERER_MAP[rawType];
20
+
21
+ if (!renderer) {
22
+ console.error(
23
+ `[Renderer] Unknown renderer type "${rawType}". Available types: ${Object.keys(RENDERER_MAP).join(", ")}`
24
+ );
25
+ return null;
26
+ }
27
+
28
+ const localData = data;
29
+ const localColumns = columns;
30
+
31
+ // Default to table renderer
32
+ return renderer({
33
+ inColumns: localColumns,
34
+ inData: localData
35
+ });
36
+ };
37
+
38
+ registerGlobal(render);
39
+
40
+ export default render;
package/src/v6/meta.js ADDED
@@ -0,0 +1,6 @@
1
+ export const meta = {
2
+ version: "v4.0.0",
3
+ description: "build table from store data and render to DOM uses json-to-spec, json-to-dom under the hood"
4
+ };
5
+
6
+ export default meta;
@@ -0,0 +1,14 @@
1
+ import meta from "./meta.js";
2
+
3
+ export const registerGlobal = (inFuncDefinition) => {
4
+ if (typeof globalThis === "undefined" || !inFuncDefinition) return;
5
+
6
+ globalThis.ks ??= {};
7
+
8
+ globalThis.ks.jsonRenderersBuild ??= {
9
+ meta,
10
+ renderToDom: inFuncDefinition
11
+ };
12
+ };
13
+
14
+ export default registerGlobal;
@@ -0,0 +1,20 @@
1
+ import selectOptionsOnly from "../selectOptionsOnly/index.js";
2
+
3
+ import skeletonJson from './skeleton.json' with { type: 'json' };
4
+
5
+ // --- Story of Table Render ---
6
+ const startFunc = ({
7
+ inData,
8
+ } = {}) => {
9
+ const localData = inData ?? [];
10
+
11
+ let localChildren = selectOptionsOnly({
12
+ inData: localData
13
+ });
14
+ // console.log("specAsJsonToDom: ", specAsJsonToDom);
15
+ skeletonJson.children = localChildren;
16
+
17
+ return skeletonJson;
18
+ };
19
+
20
+ export default startFunc;
@@ -0,0 +1,7 @@
1
+ {
2
+ "tagName": "select",
3
+ "attributes": {
4
+ "id": "LedgerName"
5
+ },
6
+ "children": []
7
+ }
@@ -0,0 +1,19 @@
1
+ import jsonTransform from "@keshavsoft/json-transformer";
2
+
3
+ import skeletonJson from './skeleton.json' with { type: 'json' };
4
+
5
+ // --- Story of Table Render ---
6
+ const startFunc = ({
7
+ inData,
8
+ } = {}) => {
9
+ const localData = inData ?? [];
10
+
11
+ let specAsJsonToDom = jsonTransform({
12
+ children: localData
13
+ }, skeletonJson);
14
+ // console.log("specAsJsonToDom: ", specAsJsonToDom);
15
+
16
+ return specAsJsonToDom?.children;
17
+ };
18
+
19
+ export default startFunc;
@@ -0,0 +1,17 @@
1
+ {
2
+ "transform": {
3
+ "children": ""
4
+ },
5
+ "operation": {
6
+ "children": {
7
+ "operationType": "loopArray",
8
+ "template": {
9
+ "tagName": "option",
10
+ "attributes": {
11
+ "value": "${}"
12
+ },
13
+ "textContent": "${}"
14
+ }
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,20 @@
1
+ import jsonToSpec from "json-to-spec";
2
+
3
+ import skeletonJson from './skeleton.json' with { type: 'json' };
4
+
5
+ // --- Story of Table Render ---
6
+ const startFunc = ({
7
+ inColumns,
8
+ inData,
9
+ } = {}) => {
10
+ const localData = inData ?? [];
11
+ const localColumns = inColumns;
12
+
13
+ let specAsJsonToDom = jsonToSpec(skeletonJson.default, {
14
+ columns: localColumns, data: localData
15
+ });
16
+
17
+ return specAsJsonToDom;
18
+ };
19
+
20
+ export default startFunc;
@@ -0,0 +1,47 @@
1
+ {
2
+ "default": {
3
+ "tagName": "table",
4
+ "attributes": {
5
+ "class": "table table-hover table-striped mb-0"
6
+ },
7
+ "children": [
8
+ {
9
+ "tagName": "thead",
10
+ "children": [
11
+ {
12
+ "tagName": "tr",
13
+ "jsonToSpec": {
14
+ "operation": "loopCollection",
15
+ "source": "columns",
16
+ "template": {
17
+ "tagName": "th",
18
+ "textContent": "${title}"
19
+ }
20
+ },
21
+ "children": []
22
+ }
23
+ ]
24
+ },
25
+ {
26
+ "tagName": "tbody",
27
+ "jsonToSpec": {
28
+ "operation": "loopCollection",
29
+ "source": "data",
30
+ "template": {
31
+ "tagName": "tr",
32
+ "jsonToSpec": {
33
+ "operation": "loopObject",
34
+ "source": "data",
35
+ "template": {
36
+ "tagName": "td",
37
+ "textContent": "${value}"
38
+ }
39
+ },
40
+ "children": []
41
+ }
42
+ },
43
+ "children": []
44
+ }
45
+ ]
46
+ }
47
+ }
@@ -0,0 +1,19 @@
1
+ import jsonTransform from "@keshavsoft/json-transformer";
2
+
3
+ import skeletonJson from './skeleton.json' with { type: 'json' };
4
+
5
+ // --- Story of Table Render ---
6
+ const startFunc = ({
7
+ inData,
8
+ } = {}) => {
9
+ const localData = inData ?? [];
10
+
11
+ let thAsArray = jsonTransform({
12
+ children: localData
13
+ }, skeletonJson);
14
+ // console.log("specAsJsonToDom: ", specAsJsonToDom);
15
+
16
+ return thAsArray?.children;
17
+ };
18
+
19
+ export default startFunc;
@@ -0,0 +1,17 @@
1
+ {
2
+ "transform": {
3
+ "children": ""
4
+ },
5
+ "operation": {
6
+ "children": {
7
+ "operationType": "loopArray",
8
+ "template": {
9
+ "tagName": "th",
10
+ "attributes": {
11
+ "value": "${}"
12
+ },
13
+ "textContent": "${}"
14
+ }
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,20 @@
1
+ const deriveColumnsFromData = ({ inData = [] } = {}) => {
2
+ const localData = inData;
3
+
4
+ if (!Array.isArray(localData) || localData.length === 0) {
5
+ return [];
6
+ }
7
+
8
+ const firstRow = localData[0];
9
+ if (!firstRow || typeof firstRow !== "object") {
10
+ return [];
11
+ }
12
+
13
+ return Object.keys(firstRow).map(key => ({
14
+ key,
15
+ label: key
16
+ }));
17
+ };
18
+
19
+ export { deriveColumnsFromData };
20
+ export default deriveColumnsFromData;
@@ -0,0 +1,47 @@
1
+ import registerGlobal from "./registerGlobal.js";
2
+
3
+ import renderTable, { renderTableHead, renderTableBody } from "./table/index.js";
4
+ import renderSelect, { renderSelectOptions } from "./select/index.js";
5
+
6
+ const RENDERER_MAP = {
7
+ table: renderTable,
8
+ select: renderSelect,
9
+ selectOptionsOnly: renderSelectOptions,
10
+ tableHead: renderTableHead,
11
+ tableBody: renderTableBody
12
+ };
13
+
14
+ const render = ({
15
+ type = "table",
16
+ data,
17
+ columns
18
+ } = {}) => {
19
+ const rawType = type;
20
+ const renderer = RENDERER_MAP[rawType];
21
+
22
+ if (!renderer) {
23
+ console.error(
24
+ `[Renderer] Unknown renderer type "${rawType}". Available types: ${Object.keys(RENDERER_MAP).join(", ")}`
25
+ );
26
+ return null;
27
+ }
28
+
29
+ const localData = data;
30
+ const localColumns = columns;
31
+
32
+ return renderer({
33
+ inColumns: localColumns,
34
+ inData: localData
35
+ });
36
+ };
37
+
38
+ registerGlobal(render);
39
+
40
+ export {
41
+ renderTable,
42
+ renderTableHead,
43
+ renderTableBody,
44
+ renderSelect,
45
+ renderSelectOptions
46
+ };
47
+ export default render;
package/src/v7/meta.js ADDED
@@ -0,0 +1,6 @@
1
+ export const meta = {
2
+ version: "v4.0.0",
3
+ description: "build table from store data and render to DOM uses json-to-spec, json-to-dom under the hood"
4
+ };
5
+
6
+ export default meta;
@@ -0,0 +1,14 @@
1
+ import meta from "./meta.js";
2
+
3
+ export const registerGlobal = (inFuncDefinition) => {
4
+ if (typeof globalThis === "undefined" || !inFuncDefinition) return;
5
+
6
+ globalThis.ks ??= {};
7
+
8
+ globalThis.ks.jsonRenderersBuild ??= {
9
+ meta,
10
+ renderToDom: inFuncDefinition
11
+ };
12
+ };
13
+
14
+ export default registerGlobal;
@@ -0,0 +1,21 @@
1
+ import renderSelectOptions from "./options/index.js";
2
+
3
+ import skeletonJson from './skeleton.json' with { type: 'json' };
4
+
5
+ const startFunc = ({
6
+ inData,
7
+ } = {}) => {
8
+ const localData = inData ?? [];
9
+
10
+ let localChildren = renderSelectOptions({
11
+ inData: localData
12
+ });
13
+
14
+ const select = structuredClone(skeletonJson);
15
+ select.children = localChildren;
16
+
17
+ return select;
18
+ };
19
+
20
+ export { renderSelectOptions };
21
+ export default startFunc;
@@ -0,0 +1,17 @@
1
+ import jsonTransform from "@keshavsoft/json-transformer";
2
+
3
+ import skeletonJson from './skeleton.json' with { type: 'json' };
4
+
5
+ const startFunc = ({
6
+ inData,
7
+ } = {}) => {
8
+ const localData = inData ?? [];
9
+
10
+ let specAsJsonToDom = jsonTransform({
11
+ children: localData
12
+ }, skeletonJson);
13
+
14
+ return specAsJsonToDom?.children ?? [];
15
+ };
16
+
17
+ export default startFunc;
@@ -0,0 +1,17 @@
1
+ {
2
+ "transform": {
3
+ "children": ""
4
+ },
5
+ "operation": {
6
+ "children": {
7
+ "operationType": "loopArray",
8
+ "template": {
9
+ "tagName": "option",
10
+ "attributes": {
11
+ "value": "${}"
12
+ },
13
+ "textContent": "${}"
14
+ }
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "tagName": "select",
3
+ "attributes": {
4
+ "id": "LedgerName"
5
+ },
6
+ "children": []
7
+ }
@@ -0,0 +1,23 @@
1
+ import jsonTransform from "@keshavsoft/json-transformer";
2
+
3
+ import skeletonJson from './skeleton.json' with { type: 'json' };
4
+
5
+ const startFunc = ({
6
+ inData,
7
+ } = {}) => {
8
+ const rawData = inData ?? [];
9
+ const localData = rawData.map(val => {
10
+ if (typeof val === "object" && val !== null) {
11
+ return JSON.stringify(val);
12
+ }
13
+ return String(val ?? "");
14
+ });
15
+
16
+ const tdAsArray = jsonTransform({
17
+ children: localData
18
+ }, skeletonJson);
19
+
20
+ return tdAsArray?.children ?? [];
21
+ };
22
+
23
+ export default startFunc;
@@ -0,0 +1,17 @@
1
+ {
2
+ "transform": {
3
+ "children": ""
4
+ },
5
+ "operation": {
6
+ "children": {
7
+ "operationType": "loopArray",
8
+ "template": {
9
+ "tagName": "td",
10
+ "attributes": {
11
+ "value": "${}"
12
+ },
13
+ "textContent": "${}"
14
+ }
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,15 @@
1
+ import bodyRows from "./rows/index.js";
2
+ import skeletonJson from './skeleton.json' with { type: 'json' };
3
+
4
+ const startFunc = ({
5
+ inData,
6
+ inColumns
7
+ } = {}) => {
8
+ const tbody = structuredClone(skeletonJson);
9
+
10
+ tbody.children = bodyRows({ inData, inColumns });
11
+
12
+ return tbody;
13
+ };
14
+
15
+ export default startFunc;
@@ -0,0 +1,36 @@
1
+ import bodyCells from "../cells/index.js";
2
+ import skeletonJson from './skeleton.json' with { type: 'json' };
3
+
4
+ const startFunc = ({
5
+ inData,
6
+ inColumns
7
+ } = {}) => {
8
+ const localData = inData ?? [];
9
+ const localColumns = inColumns;
10
+
11
+ return localData.map(row => {
12
+ let cellValues;
13
+
14
+ if (Array.isArray(row)) {
15
+ cellValues = row;
16
+ } else if (typeof row === "object" && row !== null) {
17
+ if (Array.isArray(localColumns) && localColumns.length > 0) {
18
+ cellValues = localColumns.map(col => {
19
+ const key = typeof col === "object" ? (col.key || col.dataKey || col.title || col.name) : col;
20
+ return row[key] ?? "";
21
+ });
22
+ } else {
23
+ cellValues = Object.values(row);
24
+ }
25
+ } else {
26
+ cellValues = [row];
27
+ }
28
+
29
+ const tr = structuredClone(skeletonJson);
30
+ tr.children = bodyCells({ inData: cellValues });
31
+
32
+ return tr;
33
+ });
34
+ };
35
+
36
+ export default startFunc;
@@ -0,0 +1,4 @@
1
+ {
2
+ "tagName": "tr",
3
+ "children": []
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "tagName": "tbody",
3
+ "children": []
4
+ }
@@ -0,0 +1,23 @@
1
+ import jsonTransform from "@keshavsoft/json-transformer";
2
+
3
+ import skeletonJson from './skeleton.json' with { type: 'json' };
4
+
5
+ const startFunc = ({
6
+ inData,
7
+ } = {}) => {
8
+ const rawData = inData ?? [];
9
+ const localData = rawData.map(col => {
10
+ if (typeof col === "object" && col !== null) {
11
+ return col.title || col.name || col.key || "";
12
+ }
13
+ return String(col);
14
+ });
15
+
16
+ const thAsArray = jsonTransform({
17
+ children: localData
18
+ }, skeletonJson);
19
+
20
+ return thAsArray?.children ?? [];
21
+ };
22
+
23
+ export default startFunc;
@@ -0,0 +1,17 @@
1
+ {
2
+ "transform": {
3
+ "children": ""
4
+ },
5
+ "operation": {
6
+ "children": {
7
+ "operationType": "loopArray",
8
+ "template": {
9
+ "tagName": "th",
10
+ "attributes": {
11
+ "value": "${}"
12
+ },
13
+ "textContent": "${}"
14
+ }
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,15 @@
1
+ import headRow from "./row/index.js";
2
+ import skeletonJson from './skeleton.json' with { type: 'json' };
3
+
4
+ const startFunc = ({
5
+ inData,
6
+ } = {}) => {
7
+ const localData = inData ?? [];
8
+ const thead = structuredClone(skeletonJson);
9
+
10
+ thead.children = [headRow({ inData: localData })];
11
+
12
+ return thead;
13
+ };
14
+
15
+ export default startFunc;
@@ -0,0 +1,15 @@
1
+ import headCells from "../cells/index.js";
2
+ import skeletonJson from './skeleton.json' with { type: 'json' };
3
+
4
+ const startFunc = ({
5
+ inData,
6
+ } = {}) => {
7
+ const localData = inData ?? [];
8
+ const row = structuredClone(skeletonJson);
9
+
10
+ row.children = headCells({ inData: localData });
11
+
12
+ return row;
13
+ };
14
+
15
+ export default startFunc;
@@ -0,0 +1,4 @@
1
+ {
2
+ "tagName": "tr",
3
+ "children": []
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "tagName": "thead",
3
+ "children": []
4
+ }
@@ -0,0 +1,26 @@
1
+ import renderTableHead from "./head/index.js";
2
+ import renderTableBody from "./body/index.js";
3
+ import skeletonJson from './skeleton.json' with { type: 'json' };
4
+
5
+ const startFunc = ({
6
+ inColumns,
7
+ inData
8
+ } = {}) => {
9
+ const localColumns = inColumns ?? [];
10
+ const localData = inData ?? [];
11
+
12
+ const table = structuredClone(skeletonJson);
13
+
14
+ table.children = [
15
+ renderTableHead({ inData: localColumns }),
16
+ renderTableBody({ inData: localData, inColumns: localColumns })
17
+ ];
18
+
19
+ return table;
20
+ };
21
+
22
+ export {
23
+ renderTableHead,
24
+ renderTableBody
25
+ };
26
+ export default startFunc;
@@ -0,0 +1,7 @@
1
+ {
2
+ "tagName": "table",
3
+ "attributes": {
4
+ "class": "table table-hover table-striped mb-0"
5
+ },
6
+ "children": []
7
+ }