@webiny/react-properties 0.0.0-unstable.7f63ea0744 → 0.0.0-unstable.81ae05e56b
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/DevToolsSection.d.ts +40 -0
- package/DevToolsSection.js +70 -0
- package/DevToolsSection.js.map +1 -0
- package/Properties.d.ts +20 -4
- package/Properties.js +153 -153
- package/Properties.js.map +1 -1
- package/PropertyPriority.d.ts +8 -0
- package/PropertyPriority.js +15 -0
- package/PropertyPriority.js.map +1 -0
- package/README.md +7 -61
- package/createConfigurableComponent.d.ts +15 -0
- package/createConfigurableComponent.js +112 -0
- package/createConfigurableComponent.js.map +1 -0
- package/domain/PropertyStore.d.ts +51 -0
- package/domain/PropertyStore.js +229 -0
- package/domain/PropertyStore.js.map +1 -0
- package/domain/index.d.ts +1 -0
- package/domain/index.js +3 -0
- package/domain/index.js.map +1 -0
- package/index.d.ts +7 -2
- package/index.js +8 -26
- package/index.js.map +1 -1
- package/package.json +12 -15
- package/useDebugConfig.d.ts +32 -0
- package/useDebugConfig.js +53 -0
- package/useDebugConfig.js.map +1 -0
- package/useIdGenerator.d.ts +1 -0
- package/useIdGenerator.js +14 -0
- package/useIdGenerator.js.map +1 -0
- package/utils.d.ts +2 -2
- package/utils.js +37 -33
- package/utils.js.map +1 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Property } from "./Properties.js";
|
|
2
|
+
interface WebinyDevtoolsConfig {
|
|
3
|
+
properties: Array<{
|
|
4
|
+
id: string;
|
|
5
|
+
parent: string;
|
|
6
|
+
name: string;
|
|
7
|
+
value?: unknown;
|
|
8
|
+
array?: boolean;
|
|
9
|
+
}>;
|
|
10
|
+
config: unknown;
|
|
11
|
+
updatedAt: number;
|
|
12
|
+
}
|
|
13
|
+
interface WebinyDevtoolsSection {
|
|
14
|
+
data: unknown;
|
|
15
|
+
group: string;
|
|
16
|
+
views: string[];
|
|
17
|
+
updatedAt: number;
|
|
18
|
+
}
|
|
19
|
+
interface WebinyDevtoolsHook {
|
|
20
|
+
revision: number;
|
|
21
|
+
configs: Record<string, WebinyDevtoolsConfig>;
|
|
22
|
+
sections: Record<string, WebinyDevtoolsSection>;
|
|
23
|
+
}
|
|
24
|
+
declare global {
|
|
25
|
+
interface Window {
|
|
26
|
+
__debugConfigs: Record<string, () => void>;
|
|
27
|
+
__WEBINY_DEVTOOLS_HOOK__?: WebinyDevtoolsHook;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export declare function getHook(): WebinyDevtoolsHook;
|
|
31
|
+
export declare function useDebugConfig(name: string, properties: Property[]): void;
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { toObject } from "./utils.js";
|
|
3
|
+
export function getHook() {
|
|
4
|
+
if (!window.__WEBINY_DEVTOOLS_HOOK__) {
|
|
5
|
+
window.__WEBINY_DEVTOOLS_HOOK__ = {
|
|
6
|
+
revision: 0,
|
|
7
|
+
configs: {},
|
|
8
|
+
sections: {}
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
return window.__WEBINY_DEVTOOLS_HOOK__;
|
|
12
|
+
}
|
|
13
|
+
export function useDebugConfig(name, properties) {
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (process.env.NODE_ENV !== "development") {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Legacy console.log support
|
|
20
|
+
const configs = window.__debugConfigs ?? {};
|
|
21
|
+
configs[name] = () => console.log(toObject(properties));
|
|
22
|
+
window.__debugConfigs = configs;
|
|
23
|
+
|
|
24
|
+
// DevTools hook: structured data for the Chrome extension
|
|
25
|
+
const hook = getHook();
|
|
26
|
+
hook.configs[name] = {
|
|
27
|
+
properties: properties.map(p => ({
|
|
28
|
+
id: p.id,
|
|
29
|
+
parent: p.parent,
|
|
30
|
+
name: p.name,
|
|
31
|
+
value: p.value,
|
|
32
|
+
array: p.array
|
|
33
|
+
})),
|
|
34
|
+
config: toObject(properties),
|
|
35
|
+
updatedAt: Date.now()
|
|
36
|
+
};
|
|
37
|
+
hook.revision++;
|
|
38
|
+
return () => {
|
|
39
|
+
// Legacy cleanup
|
|
40
|
+
const configs = window.__debugConfigs ?? {};
|
|
41
|
+
delete configs[name];
|
|
42
|
+
window.__debugConfigs = configs;
|
|
43
|
+
|
|
44
|
+
// DevTools hook cleanup
|
|
45
|
+
if (window.__WEBINY_DEVTOOLS_HOOK__) {
|
|
46
|
+
delete window.__WEBINY_DEVTOOLS_HOOK__.configs[name];
|
|
47
|
+
window.__WEBINY_DEVTOOLS_HOOK__.revision++;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}, [properties]);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=useDebugConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","toObject","getHook","window","__WEBINY_DEVTOOLS_HOOK__","revision","configs","sections","useDebugConfig","name","properties","process","env","NODE_ENV","__debugConfigs","console","log","hook","map","p","id","parent","value","array","config","updatedAt","Date","now"],"sources":["useDebugConfig.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport type { Property } from \"./Properties.js\";\nimport { toObject } from \"./utils.js\";\n\ninterface WebinyDevtoolsConfig {\n properties: Array<{\n id: string;\n parent: string;\n name: string;\n value?: unknown;\n array?: boolean;\n }>;\n config: unknown;\n updatedAt: number;\n}\n\ninterface WebinyDevtoolsSection {\n data: unknown;\n group: string;\n views: string[];\n updatedAt: number;\n}\n\ninterface WebinyDevtoolsHook {\n revision: number;\n configs: Record<string, WebinyDevtoolsConfig>;\n sections: Record<string, WebinyDevtoolsSection>;\n}\n\ndeclare global {\n interface Window {\n __debugConfigs: Record<string, () => void>;\n __WEBINY_DEVTOOLS_HOOK__?: WebinyDevtoolsHook;\n }\n}\n\nexport function getHook(): WebinyDevtoolsHook {\n if (!window.__WEBINY_DEVTOOLS_HOOK__) {\n window.__WEBINY_DEVTOOLS_HOOK__ = { revision: 0, configs: {}, sections: {} };\n }\n return window.__WEBINY_DEVTOOLS_HOOK__;\n}\n\nexport function useDebugConfig(name: string, properties: Property[]) {\n useEffect(() => {\n if (process.env.NODE_ENV !== \"development\") {\n return;\n }\n\n // Legacy console.log support\n const configs = window.__debugConfigs ?? {};\n configs[name] = () => console.log(toObject(properties));\n window.__debugConfigs = configs;\n\n // DevTools hook: structured data for the Chrome extension\n const hook = getHook();\n hook.configs[name] = {\n properties: properties.map(p => ({\n id: p.id,\n parent: p.parent,\n name: p.name,\n value: p.value,\n array: p.array\n })),\n config: toObject(properties),\n updatedAt: Date.now()\n };\n hook.revision++;\n\n return () => {\n // Legacy cleanup\n const configs = window.__debugConfigs ?? {};\n delete configs[name];\n window.__debugConfigs = configs;\n\n // DevTools hook cleanup\n if (window.__WEBINY_DEVTOOLS_HOOK__) {\n delete window.__WEBINY_DEVTOOLS_HOOK__.configs[name];\n window.__WEBINY_DEVTOOLS_HOOK__.revision++;\n }\n };\n }, [properties]);\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AAEjC,SAASC,QAAQ;AAkCjB,OAAO,SAASC,OAAOA,CAAA,EAAuB;EAC1C,IAAI,CAACC,MAAM,CAACC,wBAAwB,EAAE;IAClCD,MAAM,CAACC,wBAAwB,GAAG;MAAEC,QAAQ,EAAE,CAAC;MAAEC,OAAO,EAAE,CAAC,CAAC;MAAEC,QAAQ,EAAE,CAAC;IAAE,CAAC;EAChF;EACA,OAAOJ,MAAM,CAACC,wBAAwB;AAC1C;AAEA,OAAO,SAASI,cAAcA,CAACC,IAAY,EAAEC,UAAsB,EAAE;EACjEV,SAAS,CAAC,MAAM;IACZ,IAAIW,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;MACxC;IACJ;;IAEA;IACA,MAAMP,OAAO,GAAGH,MAAM,CAACW,cAAc,IAAI,CAAC,CAAC;IAC3CR,OAAO,CAACG,IAAI,CAAC,GAAG,MAAMM,OAAO,CAACC,GAAG,CAACf,QAAQ,CAACS,UAAU,CAAC,CAAC;IACvDP,MAAM,CAACW,cAAc,GAAGR,OAAO;;IAE/B;IACA,MAAMW,IAAI,GAAGf,OAAO,CAAC,CAAC;IACtBe,IAAI,CAACX,OAAO,CAACG,IAAI,CAAC,GAAG;MACjBC,UAAU,EAAEA,UAAU,CAACQ,GAAG,CAACC,CAAC,KAAK;QAC7BC,EAAE,EAAED,CAAC,CAACC,EAAE;QACRC,MAAM,EAAEF,CAAC,CAACE,MAAM;QAChBZ,IAAI,EAAEU,CAAC,CAACV,IAAI;QACZa,KAAK,EAAEH,CAAC,CAACG,KAAK;QACdC,KAAK,EAAEJ,CAAC,CAACI;MACb,CAAC,CAAC,CAAC;MACHC,MAAM,EAAEvB,QAAQ,CAACS,UAAU,CAAC;MAC5Be,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC;IACxB,CAAC;IACDV,IAAI,CAACZ,QAAQ,EAAE;IAEf,OAAO,MAAM;MACT;MACA,MAAMC,OAAO,GAAGH,MAAM,CAACW,cAAc,IAAI,CAAC,CAAC;MAC3C,OAAOR,OAAO,CAACG,IAAI,CAAC;MACpBN,MAAM,CAACW,cAAc,GAAGR,OAAO;;MAE/B;MACA,IAAIH,MAAM,CAACC,wBAAwB,EAAE;QACjC,OAAOD,MAAM,CAACC,wBAAwB,CAACE,OAAO,CAACG,IAAI,CAAC;QACpDN,MAAM,CAACC,wBAAwB,CAACC,QAAQ,EAAE;MAC9C;IACJ,CAAC;EACL,CAAC,EAAE,CAACK,UAAU,CAAC,CAAC;AACpB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useIdGenerator(name: string): (...parts: string[]) => string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
import { useParentProperty } from "./Properties.js";
|
|
3
|
+
const keywords = ["$first", "$last"];
|
|
4
|
+
export function useIdGenerator(name) {
|
|
5
|
+
const parentProperty = useParentProperty();
|
|
6
|
+
return useCallback((...parts) => {
|
|
7
|
+
if (keywords.includes(parts[0])) {
|
|
8
|
+
return parts[0];
|
|
9
|
+
}
|
|
10
|
+
return [parentProperty?.id, name, ...parts].filter(Boolean).join(":");
|
|
11
|
+
}, [name, parentProperty]);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=useIdGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useParentProperty","keywords","useIdGenerator","name","parentProperty","parts","includes","id","filter","Boolean","join"],"sources":["useIdGenerator.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useParentProperty } from \"~/Properties.js\";\n\nconst keywords = [\"$first\", \"$last\"];\n\nexport function useIdGenerator(name: string) {\n const parentProperty = useParentProperty();\n\n return useCallback(\n (...parts: string[]) => {\n if (keywords.includes(parts[0])) {\n return parts[0];\n }\n return [parentProperty?.id, name, ...parts].filter(Boolean).join(\":\");\n },\n [name, parentProperty]\n );\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,iBAAiB;AAE1B,MAAMC,QAAQ,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;AAEpC,OAAO,SAASC,cAAcA,CAACC,IAAY,EAAE;EACzC,MAAMC,cAAc,GAAGJ,iBAAiB,CAAC,CAAC;EAE1C,OAAOD,WAAW,CACd,CAAC,GAAGM,KAAe,KAAK;IACpB,IAAIJ,QAAQ,CAACK,QAAQ,CAACD,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;MAC7B,OAAOA,KAAK,CAAC,CAAC,CAAC;IACnB;IACA,OAAO,CAACD,cAAc,EAAEG,EAAE,EAAEJ,IAAI,EAAE,GAAGE,KAAK,CAAC,CAACG,MAAM,CAACC,OAAO,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC;EACzE,CAAC,EACD,CAACP,IAAI,EAAEC,cAAc,CACzB,CAAC;AACL","ignoreList":[]}
|
package/utils.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { Property } from "./Properties";
|
|
1
|
+
import type { Property } from "./Properties.js";
|
|
2
2
|
export declare function toObject<T = unknown>(properties: Property[]): T;
|
|
3
|
-
export declare function getUniqueId(): string;
|
|
3
|
+
export declare function getUniqueId(length?: number): string;
|
package/utils.js
CHANGED
|
@@ -1,43 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import { customAlphabet } from "nanoid";
|
|
2
|
+
const nanoid = customAlphabet("1234567890abcdef");
|
|
3
|
+
const sortPropertiesToTheTop = (a, b) => {
|
|
4
|
+
if (a.$isFirst && b.$isFirst) {
|
|
5
|
+
return -1;
|
|
6
|
+
}
|
|
7
|
+
return Number(b.$isFirst) - Number(a.$isFirst);
|
|
8
|
+
};
|
|
9
|
+
const sortPropertiesToTheBottom = (a, b) => {
|
|
10
|
+
if (a.$isLast && b.$isLast) {
|
|
11
|
+
return 1;
|
|
12
|
+
}
|
|
13
|
+
return Number(a.$isLast) - Number(b.$isLast);
|
|
14
|
+
};
|
|
15
|
+
const sortProperties = properties => {
|
|
16
|
+
return properties.sort(sortPropertiesToTheTop).sort(sortPropertiesToTheBottom);
|
|
17
|
+
};
|
|
14
18
|
function buildRoots(roots, properties) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
const sortedRoots = sortProperties(roots);
|
|
20
|
+
const obj = sortedRoots.reduce((acc, item) => {
|
|
21
|
+
const isArray = item.array === true || sortedRoots.filter(r => r.name === item.name).length > 1;
|
|
22
|
+
return {
|
|
23
|
+
...acc,
|
|
24
|
+
[item.name]: isArray ? [] : {}
|
|
25
|
+
};
|
|
20
26
|
}, {});
|
|
21
|
-
|
|
22
|
-
|
|
27
|
+
sortedRoots.forEach(root => {
|
|
28
|
+
const isArray = root.array === true || Array.isArray(obj[root.name]);
|
|
23
29
|
if (root.value !== undefined) {
|
|
24
|
-
obj[root.name] = isArray ? [
|
|
30
|
+
obj[root.name] = isArray ? [...obj[root.name], root.value] : root.value;
|
|
25
31
|
return;
|
|
26
32
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
var value = buildRoots(nextRoots, properties);
|
|
31
|
-
obj[root.name] = isArray ? [].concat((0, _toConsumableArray2.default)(obj[root.name]), [value]) : value;
|
|
33
|
+
const nextRoots = properties.filter(p => p.parent === root.id);
|
|
34
|
+
const value = buildRoots(nextRoots, properties);
|
|
35
|
+
obj[root.name] = isArray ? [...obj[root.name], value] : value;
|
|
32
36
|
});
|
|
33
37
|
return obj;
|
|
34
38
|
}
|
|
35
|
-
function toObject(properties) {
|
|
36
|
-
|
|
37
|
-
return prop.parent === "";
|
|
38
|
-
});
|
|
39
|
+
export function toObject(properties) {
|
|
40
|
+
const roots = properties.filter(prop => prop.parent === "");
|
|
39
41
|
return buildRoots(roots, properties);
|
|
40
42
|
}
|
|
41
|
-
function getUniqueId() {
|
|
42
|
-
return nanoid();
|
|
43
|
-
}
|
|
43
|
+
export function getUniqueId(length = 12) {
|
|
44
|
+
return nanoid(length);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=utils.js.map
|
package/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["nanoid","
|
|
1
|
+
{"version":3,"names":["customAlphabet","nanoid","sortPropertiesToTheTop","a","b","$isFirst","Number","sortPropertiesToTheBottom","$isLast","sortProperties","properties","sort","buildRoots","roots","sortedRoots","obj","reduce","acc","item","isArray","array","filter","r","name","length","forEach","root","Array","value","undefined","nextRoots","p","parent","id","toObject","prop","getUniqueId"],"sources":["utils.ts"],"sourcesContent":["import { customAlphabet } from \"nanoid\";\nconst nanoid = customAlphabet(\"1234567890abcdef\");\nimport type { Property } from \"./Properties.js\";\n\nconst sortPropertiesToTheTop = (a: Property, b: Property) => {\n if (a.$isFirst && b.$isFirst) {\n return -1;\n }\n\n return Number(b.$isFirst) - Number(a.$isFirst);\n};\n\nconst sortPropertiesToTheBottom = (a: Property, b: Property) => {\n if (a.$isLast && b.$isLast) {\n return 1;\n }\n\n return Number(a.$isLast) - Number(b.$isLast);\n};\n\nconst sortProperties = (properties: Property[]) => {\n return properties.sort(sortPropertiesToTheTop).sort(sortPropertiesToTheBottom);\n};\n\nfunction buildRoots(roots: Property[], properties: Property[]) {\n const sortedRoots = sortProperties(roots);\n const obj: Record<string, unknown> = sortedRoots.reduce((acc, item) => {\n const isArray =\n item.array === true || sortedRoots.filter(r => r.name === item.name).length > 1;\n return { ...acc, [item.name]: isArray ? [] : {} };\n }, {});\n\n sortedRoots.forEach(root => {\n const isArray = root.array === true || Array.isArray(obj[root.name]);\n if (root.value !== undefined) {\n obj[root.name] = isArray ? [...(obj[root.name] as Array<any>), root.value] : root.value;\n return;\n }\n\n const nextRoots = properties.filter(p => p.parent === root.id);\n const value = buildRoots(nextRoots, properties);\n obj[root.name] = isArray ? [...(obj[root.name] as Property[]), value] : value;\n });\n\n return obj;\n}\n\nexport function toObject<T = unknown>(properties: Property[]): T {\n const roots = properties.filter(prop => prop.parent === \"\");\n return buildRoots(roots, properties) as T;\n}\n\nexport function getUniqueId(length = 12) {\n return nanoid(length);\n}\n"],"mappings":"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","ignoreList":[]}
|