@jfdevelops/react-layout 0.1.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/dist/composable.cjs +72 -0
- package/dist/composable.cjs.map +1 -0
- package/dist/composable.d.cts +42 -0
- package/dist/composable.d.cts.map +1 -0
- package/dist/composable.d.mts +42 -0
- package/dist/composable.d.mts.map +1 -0
- package/dist/composable.mjs +70 -0
- package/dist/composable.mjs.map +1 -0
- package/dist/create-config.cjs +98 -0
- package/dist/create-config.cjs.map +1 -0
- package/dist/create-config.d.cts +67 -0
- package/dist/create-config.d.cts.map +1 -0
- package/dist/create-config.d.mts +67 -0
- package/dist/create-config.d.mts.map +1 -0
- package/dist/create-config.mjs +98 -0
- package/dist/create-config.mjs.map +1 -0
- package/dist/create-value.cjs +417 -0
- package/dist/create-value.cjs.map +1 -0
- package/dist/create-value.d.cts +348 -0
- package/dist/create-value.d.cts.map +1 -0
- package/dist/create-value.d.mts +348 -0
- package/dist/create-value.d.mts.map +1 -0
- package/dist/create-value.mjs +414 -0
- package/dist/create-value.mjs.map +1 -0
- package/dist/index.cjs +17 -0
- package/dist/index.d.cts +7 -0
- package/dist/index.d.mts +7 -0
- package/dist/index.mjs +7 -0
- package/dist/props.d.cts +21 -0
- package/dist/props.d.cts.map +1 -0
- package/dist/props.d.mts +21 -0
- package/dist/props.d.mts.map +1 -0
- package/dist/resource.cjs +29 -0
- package/dist/resource.cjs.map +1 -0
- package/dist/resource.d.cts +47 -0
- package/dist/resource.d.cts.map +1 -0
- package/dist/resource.d.mts +47 -0
- package/dist/resource.d.mts.map +1 -0
- package/dist/resource.mjs +26 -0
- package/dist/resource.mjs.map +1 -0
- package/dist/utils.cjs +25 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.cts +19 -0
- package/dist/utils.d.cts.map +1 -0
- package/dist/utils.d.mts +19 -0
- package/dist/utils.d.mts.map +1 -0
- package/dist/utils.mjs +23 -0
- package/dist/utils.mjs.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/resource.ts
|
|
3
|
+
function normalizeResourceTree(resource) {
|
|
4
|
+
if (typeof resource === "string") return { [resource]: { subResources: {} } };
|
|
5
|
+
const { value, subResources } = resource;
|
|
6
|
+
return { [value]: { subResources: normalizeResourcesTree(subResources) } };
|
|
7
|
+
}
|
|
8
|
+
function normalizeResourcesTree(resources) {
|
|
9
|
+
const normalizedResources = {};
|
|
10
|
+
for (const resource of resources) Object.assign(normalizedResources, normalizeResourceTree(resource));
|
|
11
|
+
return normalizedResources;
|
|
12
|
+
}
|
|
13
|
+
function normalizeResource(resource) {
|
|
14
|
+
return normalizeResourceTree(resource);
|
|
15
|
+
}
|
|
16
|
+
function normalizeResources(resources) {
|
|
17
|
+
return normalizeResourcesTree(resources);
|
|
18
|
+
}
|
|
19
|
+
function toResourceEnum(resources) {
|
|
20
|
+
const keys = Object.keys(resources);
|
|
21
|
+
if (keys.length === 0) throw new Error("No resources provided");
|
|
22
|
+
return keys;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
exports.normalizeResource = normalizeResource;
|
|
27
|
+
exports.normalizeResources = normalizeResources;
|
|
28
|
+
exports.toResourceEnum = toResourceEnum;
|
|
29
|
+
//# sourceMappingURL=resource.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.cjs","names":[],"sources":["../src/resource.ts"],"sourcesContent":["import { ReactNode } from 'react';\r\nimport { NonEmptyReadonlyArray } from './create-value';\r\nimport { MergeIntersection, UnionToIntersection } from './utils';\r\n\r\nexport type ResourceDefinition =\r\n | string\r\n | {\r\n value: string;\r\n subResources: ReadonlyArray<\r\n ResourceDefinition & {\r\n /**\r\n * Whether to allow any string as a sub resource.\r\n *\r\n * @default false\r\n */\r\n allowAnyString?: boolean;\r\n }\r\n >;\r\n };\r\n\r\nexport type ResourceTree = Record<\r\n string,\r\n {\r\n subResources: ResourceTree;\r\n }\r\n>;\r\n\r\nexport type NormalizeResource<Resource extends ResourceDefinition> =\r\n Resource extends string\r\n ? {\r\n [Key in Resource]: {\r\n subResources: {};\r\n };\r\n }\r\n : Resource extends {\r\n value: infer Value extends string;\r\n subResources: infer SubResources extends\r\n ReadonlyArray<ResourceDefinition>;\r\n }\r\n ? {\r\n [Key in Value]: {\r\n subResources: NormalizeResources<SubResources>;\r\n };\r\n }\r\n : never;\r\n\r\nexport type NormalizeResources<\r\n Resources extends ReadonlyArray<ResourceDefinition>,\r\n> = MergeIntersection<\r\n UnionToIntersection<NormalizeResource<Resources[number]>>\r\n>;\r\nexport type ResourceLayoutComponentProps = {\r\n children: ReactNode;\r\n};\r\n\r\nfunction normalizeResourceTree(resource: ResourceDefinition): ResourceTree {\r\n if (typeof resource === 'string') {\r\n return {\r\n [resource]: {\r\n subResources: {},\r\n },\r\n };\r\n }\r\n\r\n const { value, subResources } = resource;\r\n\r\n return {\r\n [value]: {\r\n subResources: normalizeResourcesTree(subResources),\r\n },\r\n };\r\n}\r\n\r\nfunction normalizeResourcesTree(\r\n resources: ReadonlyArray<ResourceDefinition>,\r\n): ResourceTree {\r\n const normalizedResources: ResourceTree = {};\r\n\r\n for (const resource of resources) {\r\n Object.assign(normalizedResources, normalizeResourceTree(resource));\r\n }\r\n\r\n return normalizedResources;\r\n}\r\n\r\nexport function normalizeResource(resource: ResourceDefinition): ResourceTree {\r\n return normalizeResourceTree(resource);\r\n}\r\n\r\nexport function normalizeResources<\r\n Resources extends ReadonlyArray<ResourceDefinition>,\r\n>(resources: Resources): NormalizeResources<Resources> {\r\n return normalizeResourcesTree(resources) as NormalizeResources<Resources>;\r\n}\r\n\r\ntype ResourceDefinitionValue<Resource extends ResourceDefinition> =\r\n Resource extends string\r\n ? Resource\r\n : Resource extends { value: infer Value extends string }\r\n ? Value\r\n : never;\r\n\r\n/**\r\n * Top-level resource names declared in a `resources` array. Preserves string\r\n * literal unions for const resource definitions (unlike `keyof` on the\r\n * normalized resource tree, which tends to widen to `string` in hovers).\r\n */\r\nexport type LayoutResourceKey<\r\n Resources extends ReadonlyArray<ResourceDefinition>,\r\n> = ResourceDefinitionValue<Resources[number]>;\r\n\r\nexport type ResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>> =\r\n NonEmptyReadonlyArray<LayoutResourceKey<Resources>>;\r\nexport function toResourceEnum<\r\n Resources extends ReadonlyArray<ResourceDefinition>,\r\n>(resources: NormalizeResources<Resources>) {\r\n const keys = Object.keys(resources);\r\n\r\n if (keys.length === 0) {\r\n throw new Error('No resources provided');\r\n }\r\n\r\n return keys as unknown as ResourceEnum<Resources>;\r\n}\r\n"],"mappings":";;AAuDA,SAAS,sBAAsB,UAA4C;CACzE,IAAI,OAAO,aAAa,UACtB,OAAO,GACJ,WAAW,EACV,cAAc,CAAC,EACjB,EACF;CAGF,MAAM,EAAE,OAAO,iBAAiB;CAEhC,OAAO,GACJ,QAAQ,EACP,cAAc,uBAAuB,YAAY,EACnD,EACF;AACF;AAEA,SAAS,uBACP,WACc;CACd,MAAM,sBAAoC,CAAC;CAE3C,KAAK,MAAM,YAAY,WACrB,OAAO,OAAO,qBAAqB,sBAAsB,QAAQ,CAAC;CAGpE,OAAO;AACT;AAEA,SAAgB,kBAAkB,UAA4C;CAC5E,OAAO,sBAAsB,QAAQ;AACvC;AAEA,SAAgB,mBAEd,WAAqD;CACrD,OAAO,uBAAuB,SAAS;AACzC;AAoBA,SAAgB,eAEd,WAA0C;CAC1C,MAAM,OAAO,OAAO,KAAK,SAAS;CAElC,IAAI,KAAK,WAAW,GAClB,MAAM,IAAI,MAAM,uBAAuB;CAGzC,OAAO;AACT"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { NonEmptyReadonlyArray } from "./create-value.cjs";
|
|
2
|
+
import { MergeIntersection, UnionToIntersection } from "./utils.cjs";
|
|
3
|
+
import { ReactNode } from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/resource.d.ts
|
|
6
|
+
type ResourceDefinition = string | {
|
|
7
|
+
value: string;
|
|
8
|
+
subResources: ReadonlyArray<ResourceDefinition & {
|
|
9
|
+
/**
|
|
10
|
+
* Whether to allow any string as a sub resource.
|
|
11
|
+
*
|
|
12
|
+
* @default false
|
|
13
|
+
*/
|
|
14
|
+
allowAnyString?: boolean;
|
|
15
|
+
}>;
|
|
16
|
+
};
|
|
17
|
+
type ResourceTree = Record<string, {
|
|
18
|
+
subResources: ResourceTree;
|
|
19
|
+
}>;
|
|
20
|
+
type NormalizeResource<Resource extends ResourceDefinition> = Resource extends string ? { [Key in Resource]: {
|
|
21
|
+
subResources: {};
|
|
22
|
+
} } : Resource extends {
|
|
23
|
+
value: infer Value extends string;
|
|
24
|
+
subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;
|
|
25
|
+
} ? { [Key in Value]: {
|
|
26
|
+
subResources: NormalizeResources<SubResources>;
|
|
27
|
+
} } : never;
|
|
28
|
+
type NormalizeResources<Resources extends ReadonlyArray<ResourceDefinition>> = MergeIntersection<UnionToIntersection<NormalizeResource<Resources[number]>>>;
|
|
29
|
+
type ResourceLayoutComponentProps = {
|
|
30
|
+
children: ReactNode;
|
|
31
|
+
};
|
|
32
|
+
declare function normalizeResource(resource: ResourceDefinition): ResourceTree;
|
|
33
|
+
declare function normalizeResources<Resources extends ReadonlyArray<ResourceDefinition>>(resources: Resources): NormalizeResources<Resources>;
|
|
34
|
+
type ResourceDefinitionValue<Resource extends ResourceDefinition> = Resource extends string ? Resource : Resource extends {
|
|
35
|
+
value: infer Value extends string;
|
|
36
|
+
} ? Value : never;
|
|
37
|
+
/**
|
|
38
|
+
* Top-level resource names declared in a `resources` array. Preserves string
|
|
39
|
+
* literal unions for const resource definitions (unlike `keyof` on the
|
|
40
|
+
* normalized resource tree, which tends to widen to `string` in hovers).
|
|
41
|
+
*/
|
|
42
|
+
type LayoutResourceKey<Resources extends ReadonlyArray<ResourceDefinition>> = ResourceDefinitionValue<Resources[number]>;
|
|
43
|
+
type ResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>> = NonEmptyReadonlyArray<LayoutResourceKey<Resources>>;
|
|
44
|
+
declare function toResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>>(resources: NormalizeResources<Resources>): ResourceEnum<Resources>;
|
|
45
|
+
//#endregion
|
|
46
|
+
export { LayoutResourceKey, NormalizeResource, NormalizeResources, ResourceDefinition, ResourceEnum, ResourceLayoutComponentProps, ResourceTree, normalizeResource, normalizeResources, toResourceEnum };
|
|
47
|
+
//# sourceMappingURL=resource.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.d.cts","names":[],"sources":["../src/resource.ts"],"mappings":";;;;;KAIY,kBAAA;EAGN,KAAA;EACA,YAAA,EAAc,aAAa,CACzB,kBAAA;IALsB;;;;;IAWpB,cAAA;EAAA;AAAA;AAAA,KAKE,YAAA,GAAe,MAAM;EAG7B,YAAA,EAAc,YAAA;AAAA;AAAA,KAIN,iBAAA,kBAAmC,kBAAA,IAC7C,QAAA,4BAEc,QAAA;EACN,YAAA;AAAA,MAGJ,QAAA;EACI,KAAA;EACA,YAAA,6BACE,aAAA,CAAc,kBAAA;AAAA,cAGR,KAAA;EACN,YAAA,EAAc,kBAAA,CAAmB,YAAA;AAAA;AAAA,KAKjC,kBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,iBAAA,CACF,mBAAA,CAAoB,iBAAA,CAAkB,SAAA;AAAA,KAE5B,4BAAA;EACV,QAAA,EAAU,SAAS;AAAA;AAAA,iBAiCL,iBAAA,CAAkB,QAAA,EAAU,kBAAA,GAAqB,YAAY;AAAA,iBAI7D,kBAAA,mBACI,aAAA,CAAc,kBAAA,GAChC,SAAA,EAAW,SAAA,GAAY,kBAAA,CAAmB,SAAA;AAAA,KAIvC,uBAAA,kBAAyC,kBAAA,IAC5C,QAAA,kBACI,QAAA,GACA,QAAA;EAAmB,KAAA;AAAA,IACjB,KAAA;;;;;;KAQI,iBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,uBAAA,CAAwB,SAAA;AAAA,KAEhB,YAAA,mBAA+B,aAAA,CAAc,kBAAA,KACvD,qBAAA,CAAsB,iBAAA,CAAkB,SAAA;AAAA,iBAC1B,cAAA,mBACI,aAAA,CAAc,kBAAA,GAChC,SAAA,EAAW,kBAAA,CAAmB,SAAA,IAOJ,YAAA,CAAa,SAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { NonEmptyReadonlyArray } from "./create-value.mjs";
|
|
2
|
+
import { MergeIntersection, UnionToIntersection } from "./utils.mjs";
|
|
3
|
+
import { ReactNode } from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/resource.d.ts
|
|
6
|
+
type ResourceDefinition = string | {
|
|
7
|
+
value: string;
|
|
8
|
+
subResources: ReadonlyArray<ResourceDefinition & {
|
|
9
|
+
/**
|
|
10
|
+
* Whether to allow any string as a sub resource.
|
|
11
|
+
*
|
|
12
|
+
* @default false
|
|
13
|
+
*/
|
|
14
|
+
allowAnyString?: boolean;
|
|
15
|
+
}>;
|
|
16
|
+
};
|
|
17
|
+
type ResourceTree = Record<string, {
|
|
18
|
+
subResources: ResourceTree;
|
|
19
|
+
}>;
|
|
20
|
+
type NormalizeResource<Resource extends ResourceDefinition> = Resource extends string ? { [Key in Resource]: {
|
|
21
|
+
subResources: {};
|
|
22
|
+
} } : Resource extends {
|
|
23
|
+
value: infer Value extends string;
|
|
24
|
+
subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;
|
|
25
|
+
} ? { [Key in Value]: {
|
|
26
|
+
subResources: NormalizeResources<SubResources>;
|
|
27
|
+
} } : never;
|
|
28
|
+
type NormalizeResources<Resources extends ReadonlyArray<ResourceDefinition>> = MergeIntersection<UnionToIntersection<NormalizeResource<Resources[number]>>>;
|
|
29
|
+
type ResourceLayoutComponentProps = {
|
|
30
|
+
children: ReactNode;
|
|
31
|
+
};
|
|
32
|
+
declare function normalizeResource(resource: ResourceDefinition): ResourceTree;
|
|
33
|
+
declare function normalizeResources<Resources extends ReadonlyArray<ResourceDefinition>>(resources: Resources): NormalizeResources<Resources>;
|
|
34
|
+
type ResourceDefinitionValue<Resource extends ResourceDefinition> = Resource extends string ? Resource : Resource extends {
|
|
35
|
+
value: infer Value extends string;
|
|
36
|
+
} ? Value : never;
|
|
37
|
+
/**
|
|
38
|
+
* Top-level resource names declared in a `resources` array. Preserves string
|
|
39
|
+
* literal unions for const resource definitions (unlike `keyof` on the
|
|
40
|
+
* normalized resource tree, which tends to widen to `string` in hovers).
|
|
41
|
+
*/
|
|
42
|
+
type LayoutResourceKey<Resources extends ReadonlyArray<ResourceDefinition>> = ResourceDefinitionValue<Resources[number]>;
|
|
43
|
+
type ResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>> = NonEmptyReadonlyArray<LayoutResourceKey<Resources>>;
|
|
44
|
+
declare function toResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>>(resources: NormalizeResources<Resources>): ResourceEnum<Resources>;
|
|
45
|
+
//#endregion
|
|
46
|
+
export { LayoutResourceKey, NormalizeResource, NormalizeResources, ResourceDefinition, ResourceEnum, ResourceLayoutComponentProps, ResourceTree, normalizeResource, normalizeResources, toResourceEnum };
|
|
47
|
+
//# sourceMappingURL=resource.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.d.mts","names":[],"sources":["../src/resource.ts"],"mappings":";;;;;KAIY,kBAAA;EAGN,KAAA;EACA,YAAA,EAAc,aAAa,CACzB,kBAAA;IALsB;;;;;IAWpB,cAAA;EAAA;AAAA;AAAA,KAKE,YAAA,GAAe,MAAM;EAG7B,YAAA,EAAc,YAAA;AAAA;AAAA,KAIN,iBAAA,kBAAmC,kBAAA,IAC7C,QAAA,4BAEc,QAAA;EACN,YAAA;AAAA,MAGJ,QAAA;EACI,KAAA;EACA,YAAA,6BACE,aAAA,CAAc,kBAAA;AAAA,cAGR,KAAA;EACN,YAAA,EAAc,kBAAA,CAAmB,YAAA;AAAA;AAAA,KAKjC,kBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,iBAAA,CACF,mBAAA,CAAoB,iBAAA,CAAkB,SAAA;AAAA,KAE5B,4BAAA;EACV,QAAA,EAAU,SAAS;AAAA;AAAA,iBAiCL,iBAAA,CAAkB,QAAA,EAAU,kBAAA,GAAqB,YAAY;AAAA,iBAI7D,kBAAA,mBACI,aAAA,CAAc,kBAAA,GAChC,SAAA,EAAW,SAAA,GAAY,kBAAA,CAAmB,SAAA;AAAA,KAIvC,uBAAA,kBAAyC,kBAAA,IAC5C,QAAA,kBACI,QAAA,GACA,QAAA;EAAmB,KAAA;AAAA,IACjB,KAAA;;;;;;KAQI,iBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,uBAAA,CAAwB,SAAA;AAAA,KAEhB,YAAA,mBAA+B,aAAA,CAAc,kBAAA,KACvD,qBAAA,CAAsB,iBAAA,CAAkB,SAAA;AAAA,iBAC1B,cAAA,mBACI,aAAA,CAAc,kBAAA,GAChC,SAAA,EAAW,kBAAA,CAAmB,SAAA,IAOJ,YAAA,CAAa,SAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/resource.ts
|
|
2
|
+
function normalizeResourceTree(resource) {
|
|
3
|
+
if (typeof resource === "string") return { [resource]: { subResources: {} } };
|
|
4
|
+
const { value, subResources } = resource;
|
|
5
|
+
return { [value]: { subResources: normalizeResourcesTree(subResources) } };
|
|
6
|
+
}
|
|
7
|
+
function normalizeResourcesTree(resources) {
|
|
8
|
+
const normalizedResources = {};
|
|
9
|
+
for (const resource of resources) Object.assign(normalizedResources, normalizeResourceTree(resource));
|
|
10
|
+
return normalizedResources;
|
|
11
|
+
}
|
|
12
|
+
function normalizeResource(resource) {
|
|
13
|
+
return normalizeResourceTree(resource);
|
|
14
|
+
}
|
|
15
|
+
function normalizeResources(resources) {
|
|
16
|
+
return normalizeResourcesTree(resources);
|
|
17
|
+
}
|
|
18
|
+
function toResourceEnum(resources) {
|
|
19
|
+
const keys = Object.keys(resources);
|
|
20
|
+
if (keys.length === 0) throw new Error("No resources provided");
|
|
21
|
+
return keys;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//#endregion
|
|
25
|
+
export { normalizeResource, normalizeResources, toResourceEnum };
|
|
26
|
+
//# sourceMappingURL=resource.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.mjs","names":[],"sources":["../src/resource.ts"],"sourcesContent":["import { ReactNode } from 'react';\r\nimport { NonEmptyReadonlyArray } from './create-value';\r\nimport { MergeIntersection, UnionToIntersection } from './utils';\r\n\r\nexport type ResourceDefinition =\r\n | string\r\n | {\r\n value: string;\r\n subResources: ReadonlyArray<\r\n ResourceDefinition & {\r\n /**\r\n * Whether to allow any string as a sub resource.\r\n *\r\n * @default false\r\n */\r\n allowAnyString?: boolean;\r\n }\r\n >;\r\n };\r\n\r\nexport type ResourceTree = Record<\r\n string,\r\n {\r\n subResources: ResourceTree;\r\n }\r\n>;\r\n\r\nexport type NormalizeResource<Resource extends ResourceDefinition> =\r\n Resource extends string\r\n ? {\r\n [Key in Resource]: {\r\n subResources: {};\r\n };\r\n }\r\n : Resource extends {\r\n value: infer Value extends string;\r\n subResources: infer SubResources extends\r\n ReadonlyArray<ResourceDefinition>;\r\n }\r\n ? {\r\n [Key in Value]: {\r\n subResources: NormalizeResources<SubResources>;\r\n };\r\n }\r\n : never;\r\n\r\nexport type NormalizeResources<\r\n Resources extends ReadonlyArray<ResourceDefinition>,\r\n> = MergeIntersection<\r\n UnionToIntersection<NormalizeResource<Resources[number]>>\r\n>;\r\nexport type ResourceLayoutComponentProps = {\r\n children: ReactNode;\r\n};\r\n\r\nfunction normalizeResourceTree(resource: ResourceDefinition): ResourceTree {\r\n if (typeof resource === 'string') {\r\n return {\r\n [resource]: {\r\n subResources: {},\r\n },\r\n };\r\n }\r\n\r\n const { value, subResources } = resource;\r\n\r\n return {\r\n [value]: {\r\n subResources: normalizeResourcesTree(subResources),\r\n },\r\n };\r\n}\r\n\r\nfunction normalizeResourcesTree(\r\n resources: ReadonlyArray<ResourceDefinition>,\r\n): ResourceTree {\r\n const normalizedResources: ResourceTree = {};\r\n\r\n for (const resource of resources) {\r\n Object.assign(normalizedResources, normalizeResourceTree(resource));\r\n }\r\n\r\n return normalizedResources;\r\n}\r\n\r\nexport function normalizeResource(resource: ResourceDefinition): ResourceTree {\r\n return normalizeResourceTree(resource);\r\n}\r\n\r\nexport function normalizeResources<\r\n Resources extends ReadonlyArray<ResourceDefinition>,\r\n>(resources: Resources): NormalizeResources<Resources> {\r\n return normalizeResourcesTree(resources) as NormalizeResources<Resources>;\r\n}\r\n\r\ntype ResourceDefinitionValue<Resource extends ResourceDefinition> =\r\n Resource extends string\r\n ? Resource\r\n : Resource extends { value: infer Value extends string }\r\n ? Value\r\n : never;\r\n\r\n/**\r\n * Top-level resource names declared in a `resources` array. Preserves string\r\n * literal unions for const resource definitions (unlike `keyof` on the\r\n * normalized resource tree, which tends to widen to `string` in hovers).\r\n */\r\nexport type LayoutResourceKey<\r\n Resources extends ReadonlyArray<ResourceDefinition>,\r\n> = ResourceDefinitionValue<Resources[number]>;\r\n\r\nexport type ResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>> =\r\n NonEmptyReadonlyArray<LayoutResourceKey<Resources>>;\r\nexport function toResourceEnum<\r\n Resources extends ReadonlyArray<ResourceDefinition>,\r\n>(resources: NormalizeResources<Resources>) {\r\n const keys = Object.keys(resources);\r\n\r\n if (keys.length === 0) {\r\n throw new Error('No resources provided');\r\n }\r\n\r\n return keys as unknown as ResourceEnum<Resources>;\r\n}\r\n"],"mappings":";AAuDA,SAAS,sBAAsB,UAA4C;CACzE,IAAI,OAAO,aAAa,UACtB,OAAO,GACJ,WAAW,EACV,cAAc,CAAC,EACjB,EACF;CAGF,MAAM,EAAE,OAAO,iBAAiB;CAEhC,OAAO,GACJ,QAAQ,EACP,cAAc,uBAAuB,YAAY,EACnD,EACF;AACF;AAEA,SAAS,uBACP,WACc;CACd,MAAM,sBAAoC,CAAC;CAE3C,KAAK,MAAM,YAAY,WACrB,OAAO,OAAO,qBAAqB,sBAAsB,QAAQ,CAAC;CAGpE,OAAO;AACT;AAEA,SAAgB,kBAAkB,UAA4C;CAC5E,OAAO,sBAAsB,QAAQ;AACvC;AAEA,SAAgB,mBAEd,WAAqD;CACrD,OAAO,uBAAuB,SAAS;AACzC;AAoBA,SAAgB,eAEd,WAA0C;CAC1C,MAAM,OAAO,OAAO,KAAK,SAAS;CAElC,IAAI,KAAK,WAAW,GAClB,MAAM,IAAI,MAAM,uBAAuB;CAGzC,OAAO;AACT"}
|
package/dist/utils.cjs
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/utils.ts
|
|
3
|
+
function isPropDefinitionShape(value) {
|
|
4
|
+
return typeof value === "function" && value !== null && "visibility" in value;
|
|
5
|
+
}
|
|
6
|
+
function resolvePropDefinitionValues(input) {
|
|
7
|
+
const out = {};
|
|
8
|
+
for (const key of Object.keys(input)) {
|
|
9
|
+
const value = input[key];
|
|
10
|
+
out[key] = isPropDefinitionShape(value) ? value._baseProp?.value : value;
|
|
11
|
+
}
|
|
12
|
+
return out;
|
|
13
|
+
}
|
|
14
|
+
function pick(obj, keys) {
|
|
15
|
+
if (keys.length === 0) return {};
|
|
16
|
+
return keys.reduce((acc, key) => {
|
|
17
|
+
if (key in obj) acc[key] = obj[key];
|
|
18
|
+
return acc;
|
|
19
|
+
}, {});
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.pick = pick;
|
|
24
|
+
exports.resolvePropDefinitionValues = resolvePropDefinitionValues;
|
|
25
|
+
//# sourceMappingURL=utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.cjs","names":[],"sources":["../src/utils.ts"],"sourcesContent":["export type Show<T> = T extends (...args: infer A) => infer R\n ? (...args: A) => R\n : { [K in keyof T]: T[K] } & {};\nexport type MergeIntersection<T> = {\r\n [Key in keyof T]: T[Key];\r\n};\r\n\r\nexport type UnionToIntersection<Union> = (\r\n Union extends unknown ? (value: Union) => void : never\r\n) extends (value: infer Intersection) => void\r\n ? Intersection\r\n : never;\r\n\r\nexport interface BaseComponent<Name extends string, Props = {}> {\n /**\r\n * The name of the component. Useful for debugging and error messages.\r\n */\r\n displayName: Name;\r\n /**\r\n * A type only property to get the type of the props. At runtime,\r\n * this is `undefined`.\r\n */\r\n props: Props;\n}\n\ntype ValueBackedDefinition = {\n _baseProp?: {\n value?: unknown;\n };\n};\n\nexport function isPropDefinitionShape(value: unknown): value is {\n visibility: unknown;\n} {\n return typeof value === 'function' && value !== null && 'visibility' in value;\n}\n\nexport function resolvePropDefinitionValues(\n input: Record<string, unknown>,\n) {\n const out: Record<string, unknown> = {};\n\n for (const key of Object.keys(input)) {\n const value = input[key];\n out[key] = isPropDefinitionShape(value)\n ? (value as ValueBackedDefinition)._baseProp?.value\n : value;\n }\n\n return out;\n}\n\nexport function pick<T extends object, K extends keyof T>(obj: T, keys: K[]) {\n if (keys.length === 0) {\n return {} as Pick<T, K>;\n }\n\r\n return keys.reduce(\r\n (acc, key) => {\r\n if (key in obj) acc[key] = obj[key];\r\n\r\n return acc;\r\n },\r\n {} as Pick<T, K>,\r\n );\r\n}\r\n"],"mappings":";;AA+BA,SAAgB,sBAAsB,OAEpC;CACA,OAAO,OAAO,UAAU,cAAc,UAAU,QAAQ,gBAAgB;AAC1E;AAEA,SAAgB,4BACd,OACA;CACA,MAAM,MAA+B,CAAC;CAEtC,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,GAAG;EACpC,MAAM,QAAQ,MAAM;EACpB,IAAI,OAAO,sBAAsB,KAAK,IACjC,MAAgC,WAAW,QAC5C;CACN;CAEA,OAAO;AACT;AAEA,SAAgB,KAA0C,KAAQ,MAAW;CAC3E,IAAI,KAAK,WAAW,GAClB,OAAO,CAAC;CAGV,OAAO,KAAK,QACT,KAAK,QAAQ;EACZ,IAAI,OAAO,KAAK,IAAI,OAAO,IAAI;EAE/B,OAAO;CACT,GACA,CAAC,CACH;AACF"}
|
package/dist/utils.d.cts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/utils.d.ts
|
|
2
|
+
type Show<T> = T extends ((...args: infer A) => infer R) ? (...args: A) => R : { [K in keyof T]: T[K] } & {};
|
|
3
|
+
type MergeIntersection<T> = { [Key in keyof T]: T[Key] };
|
|
4
|
+
type UnionToIntersection<Union> = (Union extends unknown ? (value: Union) => void : never) extends ((value: infer Intersection) => void) ? Intersection : never;
|
|
5
|
+
interface BaseComponent<Name extends string, Props = {}> {
|
|
6
|
+
/**
|
|
7
|
+
* The name of the component. Useful for debugging and error messages.
|
|
8
|
+
*/
|
|
9
|
+
displayName: Name;
|
|
10
|
+
/**
|
|
11
|
+
* A type only property to get the type of the props. At runtime,
|
|
12
|
+
* this is `undefined`.
|
|
13
|
+
*/
|
|
14
|
+
props: Props;
|
|
15
|
+
}
|
|
16
|
+
declare function pick<T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { BaseComponent, MergeIntersection, Show, UnionToIntersection, pick };
|
|
19
|
+
//# sourceMappingURL=utils.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.cts","names":[],"sources":["../src/utils.ts"],"mappings":";KAAY,IAAA,MAAU,CAAA,cAAc,IAAA,6BAC5B,IAAA,EAAM,CAAA,KAAM,CAAA,iBACF,CAAA,GAAI,CAAA,CAAE,CAAA;AAAA,KACZ,iBAAA,sBACI,CAAA,GAAI,CAAA,CAAE,GAAA;AAAA,KAGV,mBAAA,WACV,KAAA,oBAAyB,KAAA,EAAO,KAAK,6BAC5B,KAAA,iCACP,YAAA;AAAA,UAGa,aAAA;EAXK;;;EAepB,WAAA,EAAa,IAAA;EAjBE;;;;EAsBf,KAAA,EAAO,KAAK;AAAA;AAAA,iBA8BE,IAAA,mCAAuC,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,CAAA,KAAG,IAAA,CAAA,CAAA,EAAA,CAAA"}
|
package/dist/utils.d.mts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/utils.d.ts
|
|
2
|
+
type Show<T> = T extends ((...args: infer A) => infer R) ? (...args: A) => R : { [K in keyof T]: T[K] } & {};
|
|
3
|
+
type MergeIntersection<T> = { [Key in keyof T]: T[Key] };
|
|
4
|
+
type UnionToIntersection<Union> = (Union extends unknown ? (value: Union) => void : never) extends ((value: infer Intersection) => void) ? Intersection : never;
|
|
5
|
+
interface BaseComponent<Name extends string, Props = {}> {
|
|
6
|
+
/**
|
|
7
|
+
* The name of the component. Useful for debugging and error messages.
|
|
8
|
+
*/
|
|
9
|
+
displayName: Name;
|
|
10
|
+
/**
|
|
11
|
+
* A type only property to get the type of the props. At runtime,
|
|
12
|
+
* this is `undefined`.
|
|
13
|
+
*/
|
|
14
|
+
props: Props;
|
|
15
|
+
}
|
|
16
|
+
declare function pick<T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { BaseComponent, MergeIntersection, Show, UnionToIntersection, pick };
|
|
19
|
+
//# sourceMappingURL=utils.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.mts","names":[],"sources":["../src/utils.ts"],"mappings":";KAAY,IAAA,MAAU,CAAA,cAAc,IAAA,6BAC5B,IAAA,EAAM,CAAA,KAAM,CAAA,iBACF,CAAA,GAAI,CAAA,CAAE,CAAA;AAAA,KACZ,iBAAA,sBACI,CAAA,GAAI,CAAA,CAAE,GAAA;AAAA,KAGV,mBAAA,WACV,KAAA,oBAAyB,KAAA,EAAO,KAAK,6BAC5B,KAAA,iCACP,YAAA;AAAA,UAGa,aAAA;EAXK;;;EAepB,WAAA,EAAa,IAAA;EAjBE;;;;EAsBf,KAAA,EAAO,KAAK;AAAA;AAAA,iBA8BE,IAAA,mCAAuC,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,CAAA,KAAG,IAAA,CAAA,CAAA,EAAA,CAAA"}
|
package/dist/utils.mjs
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/utils.ts
|
|
2
|
+
function isPropDefinitionShape(value) {
|
|
3
|
+
return typeof value === "function" && value !== null && "visibility" in value;
|
|
4
|
+
}
|
|
5
|
+
function resolvePropDefinitionValues(input) {
|
|
6
|
+
const out = {};
|
|
7
|
+
for (const key of Object.keys(input)) {
|
|
8
|
+
const value = input[key];
|
|
9
|
+
out[key] = isPropDefinitionShape(value) ? value._baseProp?.value : value;
|
|
10
|
+
}
|
|
11
|
+
return out;
|
|
12
|
+
}
|
|
13
|
+
function pick(obj, keys) {
|
|
14
|
+
if (keys.length === 0) return {};
|
|
15
|
+
return keys.reduce((acc, key) => {
|
|
16
|
+
if (key in obj) acc[key] = obj[key];
|
|
17
|
+
return acc;
|
|
18
|
+
}, {});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
//#endregion
|
|
22
|
+
export { pick, resolvePropDefinitionValues };
|
|
23
|
+
//# sourceMappingURL=utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.mjs","names":[],"sources":["../src/utils.ts"],"sourcesContent":["export type Show<T> = T extends (...args: infer A) => infer R\n ? (...args: A) => R\n : { [K in keyof T]: T[K] } & {};\nexport type MergeIntersection<T> = {\r\n [Key in keyof T]: T[Key];\r\n};\r\n\r\nexport type UnionToIntersection<Union> = (\r\n Union extends unknown ? (value: Union) => void : never\r\n) extends (value: infer Intersection) => void\r\n ? Intersection\r\n : never;\r\n\r\nexport interface BaseComponent<Name extends string, Props = {}> {\n /**\r\n * The name of the component. Useful for debugging and error messages.\r\n */\r\n displayName: Name;\r\n /**\r\n * A type only property to get the type of the props. At runtime,\r\n * this is `undefined`.\r\n */\r\n props: Props;\n}\n\ntype ValueBackedDefinition = {\n _baseProp?: {\n value?: unknown;\n };\n};\n\nexport function isPropDefinitionShape(value: unknown): value is {\n visibility: unknown;\n} {\n return typeof value === 'function' && value !== null && 'visibility' in value;\n}\n\nexport function resolvePropDefinitionValues(\n input: Record<string, unknown>,\n) {\n const out: Record<string, unknown> = {};\n\n for (const key of Object.keys(input)) {\n const value = input[key];\n out[key] = isPropDefinitionShape(value)\n ? (value as ValueBackedDefinition)._baseProp?.value\n : value;\n }\n\n return out;\n}\n\nexport function pick<T extends object, K extends keyof T>(obj: T, keys: K[]) {\n if (keys.length === 0) {\n return {} as Pick<T, K>;\n }\n\r\n return keys.reduce(\r\n (acc, key) => {\r\n if (key in obj) acc[key] = obj[key];\r\n\r\n return acc;\r\n },\r\n {} as Pick<T, K>,\r\n );\r\n}\r\n"],"mappings":";AA+BA,SAAgB,sBAAsB,OAEpC;CACA,OAAO,OAAO,UAAU,cAAc,UAAU,QAAQ,gBAAgB;AAC1E;AAEA,SAAgB,4BACd,OACA;CACA,MAAM,MAA+B,CAAC;CAEtC,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,GAAG;EACpC,MAAM,QAAQ,MAAM;EACpB,IAAI,OAAO,sBAAsB,KAAK,IACjC,MAAgC,WAAW,QAC5C;CACN;CAEA,OAAO;AACT;AAEA,SAAgB,KAA0C,KAAQ,MAAW;CAC3E,IAAI,KAAK,WAAW,GAClB,OAAO,CAAC;CAGV,OAAO,KAAK,QACT,KAAK,QAAQ;EACZ,IAAI,OAAO,KAAK,IAAI,OAAO,IAAI;EAE/B,OAAO;CACT,GACA,CAAC,CACH;AACF"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jfdevelops/react-layout",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "A React library for creating layout components.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist"
|
|
8
|
+
],
|
|
9
|
+
"sideEffects": false,
|
|
10
|
+
"main": "./dist/index.cjs",
|
|
11
|
+
"module": "./dist/index.mjs",
|
|
12
|
+
"types": "./dist/index.d.cts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"import": "./dist/index.mjs",
|
|
16
|
+
"require": "./dist/index.cjs"
|
|
17
|
+
},
|
|
18
|
+
"./package.json": "./package.json"
|
|
19
|
+
},
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"dev": "vite",
|
|
25
|
+
"build": "tsdown",
|
|
26
|
+
"typecheck": "tsc --noEmit",
|
|
27
|
+
"test": "vitest run",
|
|
28
|
+
"test:watch": "vitest",
|
|
29
|
+
"test:ui": "vitest --ui",
|
|
30
|
+
"test:coverage": "vitest run --coverage",
|
|
31
|
+
"preview": "vite preview"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"react": ">=18",
|
|
35
|
+
"react-dom": ">=18"
|
|
36
|
+
},
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public",
|
|
39
|
+
"provenance": true
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@vitest/coverage-v8": "4.1.5",
|
|
43
|
+
"@vitest/ui": "4.1.5",
|
|
44
|
+
"@testing-library/jest-dom": "6.9.1",
|
|
45
|
+
"@testing-library/react": "16.3.2",
|
|
46
|
+
"@types/node": "24.10.1",
|
|
47
|
+
"@types/react": "18.3.28",
|
|
48
|
+
"@types/react-dom": "18.3.7",
|
|
49
|
+
"@vitejs/plugin-react": "6.0.1",
|
|
50
|
+
"jsdom": "29.0.2",
|
|
51
|
+
"react": "18.3.1",
|
|
52
|
+
"react-dom": "18.3.1",
|
|
53
|
+
"tsdown": "0.22.1",
|
|
54
|
+
"unrun": "0.3.0",
|
|
55
|
+
"typescript": "6.0.3",
|
|
56
|
+
"vite": "8.0.10",
|
|
57
|
+
"vitest": "4.1.5"
|
|
58
|
+
}
|
|
59
|
+
}
|