@jfdevelops/react-layout 0.2.0 → 0.3.0
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/create-config/define-layout.cjs +144 -0
- package/dist/create-config/define-layout.cjs.map +1 -0
- package/dist/create-config/define-layout.d.cts +106 -0
- package/dist/create-config/define-layout.d.cts.map +1 -0
- package/dist/create-config/define-layout.d.mts +106 -0
- package/dist/create-config/define-layout.d.mts.map +1 -0
- package/dist/create-config/define-layout.mjs +144 -0
- package/dist/create-config/define-layout.mjs.map +1 -0
- package/dist/create-config/get-component.cjs +52 -0
- package/dist/create-config/get-component.cjs.map +1 -0
- package/dist/create-config/get-component.d.cts +62 -0
- package/dist/create-config/get-component.d.cts.map +1 -0
- package/dist/create-config/get-component.d.mts +62 -0
- package/dist/create-config/get-component.d.mts.map +1 -0
- package/dist/create-config/get-component.mjs +51 -0
- package/dist/create-config/get-component.mjs.map +1 -0
- package/dist/create-config/index.d.cts +3 -0
- package/dist/create-config/index.d.mts +3 -0
- package/dist/create-config/types.d.cts +42 -0
- package/dist/create-config/types.d.cts.map +1 -0
- package/dist/create-config/types.d.mts +42 -0
- package/dist/create-config/types.d.mts.map +1 -0
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/dist/props.d.cts +2 -2
- package/dist/props.d.cts.map +1 -1
- package/dist/props.d.mts +2 -2
- package/dist/props.d.mts.map +1 -1
- package/dist/resource.cjs.map +1 -1
- package/dist/resource.d.cts +22 -2
- package/dist/resource.d.cts.map +1 -1
- package/dist/resource.d.mts +22 -2
- package/dist/resource.d.mts.map +1 -1
- package/dist/resource.mjs.map +1 -1
- package/dist/utils.cjs +5 -0
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +2 -1
- package/dist/utils.d.cts.map +1 -1
- package/dist/utils.d.mts +2 -1
- package/dist/utils.d.mts.map +1 -1
- package/dist/utils.mjs +5 -1
- package/dist/utils.mjs.map +1 -1
- package/dist/validators/validate-props.cjs +3 -1
- package/dist/validators/validate-props.cjs.map +1 -1
- package/dist/validators/validate-props.mjs +3 -1
- package/dist/validators/validate-props.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/create-config.cjs +0 -101
- package/dist/create-config.cjs.map +0 -1
- package/dist/create-config.d.cts +0 -67
- package/dist/create-config.d.cts.map +0 -1
- package/dist/create-config.d.mts +0 -67
- package/dist/create-config.d.mts.map +0 -1
- package/dist/create-config.mjs +0 -101
- package/dist/create-config.mjs.map +0 -1
package/dist/create-config.mjs
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { pick, resolvePropDefinitionValues } from "./utils.mjs";
|
|
2
|
-
import { makeComposable, resolveLayoutComposables } from "./composable.mjs";
|
|
3
|
-
import { createPrimitivePropBuilder, createProp } from "./validators/builders.mjs";
|
|
4
|
-
import { validateProps } from "./validators/validate-props.mjs";
|
|
5
|
-
import { normalizeResources, toResourceEnum } from "./resource.mjs";
|
|
6
|
-
import { capitalize } from "./utils/capitalize.mjs";
|
|
7
|
-
import { Fragment, jsx } from "react/jsx-runtime";
|
|
8
|
-
|
|
9
|
-
//#region src/create-config.tsx
|
|
10
|
-
function isBuiltPropDefinition(value) {
|
|
11
|
-
return typeof value === "function" && value !== null && "visibility" in value;
|
|
12
|
-
}
|
|
13
|
-
function isSplitLayoutInPropDefinition(value) {
|
|
14
|
-
return value !== null && typeof value === "object" && "render" in value && value.render !== void 0;
|
|
15
|
-
}
|
|
16
|
-
function splitLayoutInProps(inProps) {
|
|
17
|
-
const resolvedInProps = {};
|
|
18
|
-
const splitInProps = {};
|
|
19
|
-
for (const [key, value] of Object.entries(inProps)) {
|
|
20
|
-
if (isBuiltPropDefinition(value)) {
|
|
21
|
-
resolvedInProps[key] = value;
|
|
22
|
-
continue;
|
|
23
|
-
}
|
|
24
|
-
if (isSplitLayoutInPropDefinition(value)) {
|
|
25
|
-
splitInProps[key] = value.render;
|
|
26
|
-
if (value.props && typeof value.props === "object") Object.assign(resolvedInProps, value.props);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return {
|
|
30
|
-
resolvedInProps,
|
|
31
|
-
splitInProps
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
function defineResourceLayout(options) {
|
|
35
|
-
const { options: inProps, resources, layout } = options;
|
|
36
|
-
const normalizedResources = normalizeResources(resources);
|
|
37
|
-
const resourcesEnum = createPrimitivePropBuilder("string").enum(toResourceEnum(normalizedResources));
|
|
38
|
-
const definedResourceLayout = (layoutOptions) => {
|
|
39
|
-
const { name, props: instancePropDefinitions, ...layoutOptionProps } = layoutOptions;
|
|
40
|
-
const createComposableLayout = makeComposable();
|
|
41
|
-
const nameProp = createProp.string().literal(name);
|
|
42
|
-
const { resolvedInProps, splitInProps } = splitLayoutInProps({
|
|
43
|
-
...typeof inProps === "function" ? inProps({
|
|
44
|
-
resource: resourcesEnum,
|
|
45
|
-
name: nameProp
|
|
46
|
-
}) : inProps,
|
|
47
|
-
...instancePropDefinitions,
|
|
48
|
-
...layoutOptionProps
|
|
49
|
-
});
|
|
50
|
-
const { composables, render, props: layoutProps } = layout;
|
|
51
|
-
const customLayoutProps = layoutProps?.custom;
|
|
52
|
-
const includeLayoutProps = layoutProps?.include;
|
|
53
|
-
const resolvedLayoutProps = {
|
|
54
|
-
...pick(resolvedInProps, Object.keys(includeLayoutProps ?? {})),
|
|
55
|
-
...customLayoutProps
|
|
56
|
-
};
|
|
57
|
-
const layoutContext = {
|
|
58
|
-
resource: layoutOptions.resource,
|
|
59
|
-
name,
|
|
60
|
-
capitalize
|
|
61
|
-
};
|
|
62
|
-
const resolvedComposables = composables ? resolveLayoutComposables(composables, layoutContext) : void 0;
|
|
63
|
-
const mergedRenderContext = {
|
|
64
|
-
composables: resolvedComposables,
|
|
65
|
-
resource: layoutContext.resource,
|
|
66
|
-
name: layoutContext.name,
|
|
67
|
-
inProps: splitInProps
|
|
68
|
-
};
|
|
69
|
-
function Component(props) {
|
|
70
|
-
const validatedProps = validateProps(resolvedLayoutProps, props);
|
|
71
|
-
const includedPropKeys = Object.keys(includeLayoutProps ?? {});
|
|
72
|
-
const includedPropDefinitions = pick(resolvedInProps, includedPropKeys);
|
|
73
|
-
const validatedIncludedProps = validateProps(includedPropDefinitions, {
|
|
74
|
-
...resolvePropDefinitionValues(includedPropDefinitions),
|
|
75
|
-
...pick(splitInProps, includedPropKeys),
|
|
76
|
-
...pick(layoutOptionProps, includedPropKeys)
|
|
77
|
-
});
|
|
78
|
-
return /* @__PURE__ */ jsx(Fragment, { children: render({
|
|
79
|
-
...validatedProps,
|
|
80
|
-
...validatedIncludedProps
|
|
81
|
-
}, mergedRenderContext) });
|
|
82
|
-
}
|
|
83
|
-
function createComposition(compositionOptions) {
|
|
84
|
-
if (!compositionOptions.components) return {};
|
|
85
|
-
return { makeComposable: createComposableLayout(compositionOptions) };
|
|
86
|
-
}
|
|
87
|
-
return Object.assign(Component, {
|
|
88
|
-
displayName: name,
|
|
89
|
-
props: void 0,
|
|
90
|
-
...createComposition({
|
|
91
|
-
components: resolvedComposables,
|
|
92
|
-
name
|
|
93
|
-
})
|
|
94
|
-
});
|
|
95
|
-
};
|
|
96
|
-
return definedResourceLayout;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
//#endregion
|
|
100
|
-
export { defineResourceLayout };
|
|
101
|
-
//# sourceMappingURL=create-config.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-config.mjs","names":[],"sources":["../src/create-config.tsx"],"sourcesContent":["import type { JSX } from 'react';\nimport {\n type ComposableComponents,\n type ComposableNameContext,\n type CreateLayoutComposable,\n MakeComposable,\n makeComposable,\n MakeComposableOptions,\n resolveLayoutComposables,\n} from './composable';\nimport {\n type AnyBuiltPropDefinition,\n createPrimitivePropBuilder,\n createProp,\n type ResolveLayoutProps,\n type ResolveProps,\n validateProps,\n} from './validators';\nimport {\n IncludedProps,\n InferredInProps,\n InPropsDefinition,\n InPropsObject,\n LayoutRenderProps,\n} from './props';\nimport {\n normalizeResources,\n toResourceEnum,\n type LayoutResourceKey,\n type NormalizeResources,\n type ResourceDefinition,\n} from './resource';\nimport {\n BaseComponent,\n pick,\n resolvePropDefinitionValues,\n Show,\n} from './utils';\nimport { capitalize } from './utils/capitalize';\n\ntype LayoutProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n IncludeProps extends IncludedProps<InferredInProps<Resources, Options>> = {},\n CustomProps extends InPropsObject = {},\n> = {\n /**\n * Props to include in the layout.\n */\n include?: IncludeProps;\n /**\n * Custom props that the layout will receive.\n */\n custom?: CustomProps;\n};\n\ntype LayoutRenderContext<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Composables extends ComposableComponents,\n> = {\n composables: LayoutRenderComposables<Composables>;\n inProps: Record<string, unknown>;\n resource: LayoutResourceKey<Resources>;\n name: string;\n};\ntype LayoutRenderComposables<Composables extends ComposableComponents> = [\n keyof Composables,\n] extends [never]\n ? undefined\n : Composables;\n\ntype SplitLayoutInPropDefinition<\n Props extends InPropsObject = {},\n Content = unknown,\n> = {\n props?: Props;\n render: ((props: ResolveProps<Props>) => Content) | Content;\n};\n\nfunction isBuiltPropDefinition(\n value: unknown,\n): value is AnyBuiltPropDefinition {\n return typeof value === 'function' && value !== null && 'visibility' in value;\n}\n\nfunction isSplitLayoutInPropDefinition(\n value: unknown,\n): value is SplitLayoutInPropDefinition {\n return (\n value !== null &&\n typeof value === 'object' &&\n 'render' in value &&\n (value as { render?: unknown }).render !== undefined\n );\n}\n\nfunction splitLayoutInProps(inProps: Record<string, unknown>) {\n const resolvedInProps: Record<string, AnyBuiltPropDefinition> = {};\n const splitInProps: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(inProps)) {\n if (isBuiltPropDefinition(value)) {\n resolvedInProps[key] = value;\n continue;\n }\n\n if (isSplitLayoutInPropDefinition(value)) {\n splitInProps[key] = value.render;\n\n if (value.props && typeof value.props === 'object') {\n Object.assign(resolvedInProps, value.props);\n }\n }\n }\n\n return {\n resolvedInProps,\n splitInProps,\n };\n}\n\ntype CreateViewMapOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n IncludeProps extends IncludedProps<InferredInProps<Resources, Options>> = {},\n CustomProps extends InPropsObject = {},\n Composables extends ComposableComponents = {},\n> = {\n /**\n * An array of valid resource names to support.\n */\n resources: Resources;\n /**\n * The options that are passed into the created resource layout.\n */\n options: Options;\n layout: {\n /**\n * The props to pass to the layout.\n */\n props?: LayoutProps<Resources, Options, IncludeProps, CustomProps>;\n /**\n * Components used to compose the layout. Invoked per layout instance with\n * a scoped `create` that resolves composable `name` callbacks using the\n * layout's `resource` and `name`.\n */\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n ) => Composables;\n /**\n * The render function for the layout.\n */\n render: (\n props: LayoutRenderProps<Resources, Options, IncludeProps, CustomProps>,\n context: LayoutRenderContext<Resources, Composables>,\n ) => JSX.Element;\n };\n};\n\ntype ResourceLayoutComposition<\n Name extends string,\n Composables extends ComposableComponents,\n> = [keyof Composables] extends [never]\n ? {}\n : {\n makeComposable: MakeComposable<Composables, Name>;\n };\ntype ResourceLayoutComponent<\n Name extends string,\n Props extends InPropsObject = {},\n Composables extends ComposableComponents = {},\n> = ResourceLayoutComposition<Name, Composables> &\n BaseComponent<Name, ResolveProps<Props>> & {\n (props: Show<ResolveProps<Props>>): JSX.Element;\n };\n\ntype DefinedResourceLayoutOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Name extends string,\n Resource extends LayoutResourceKey<Resources>,\n Props extends InPropsObject = {},\n> = ResolveLayoutProps<InferredInProps<Resources, InProps>> & {\n name: Name;\n resource: Resource;\n props?: Props;\n};\ntype DefinedResourceLayout<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n IncludeProps extends IncludedProps<InferredInProps<Resources, InProps>> = {},\n CustomProps extends InPropsObject = {},\n Composables extends ComposableComponents = {},\n> = <\n Name extends string,\n Resource extends LayoutResourceKey<Resources>,\n Props extends InPropsObject = {},\n>(\n options: DefinedResourceLayoutOptions<\n Resources,\n InProps,\n Name,\n Resource,\n Props\n >,\n) => ResourceLayoutComponent<Name, CustomProps, Composables>;\n\nexport function defineResourceLayout<\n const Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n IncludeProps extends IncludedProps<InferredInProps<Resources, InProps>> = {},\n CustomProps extends InPropsObject = {},\n Composables extends ComposableComponents = {},\n>(\n options: CreateViewMapOptions<\n Resources,\n InProps,\n IncludeProps,\n CustomProps,\n Composables\n >,\n) {\n const { options: inProps, resources, layout } = options;\n const normalizedResources = normalizeResources(resources);\n const resourcesEnum = createPrimitivePropBuilder('string').enum(\n toResourceEnum(normalizedResources),\n );\n const definedResourceLayout: DefinedResourceLayout<\n Resources,\n InProps,\n IncludeProps,\n CustomProps,\n Composables\n > = (layoutOptions) => {\n const {\n name,\n props: instancePropDefinitions,\n ...layoutOptionProps\n } = layoutOptions;\n const createComposableLayout =\n makeComposable<\n LayoutRenderProps<Resources, InProps, IncludeProps, CustomProps>\n >();\n const nameProp = createProp.string().literal(name);\n const rawResolvedOptions =\n typeof inProps === 'function'\n ? inProps({\n resource: resourcesEnum,\n name: nameProp,\n })\n : inProps;\n const { resolvedInProps, splitInProps } = splitLayoutInProps({\n ...(rawResolvedOptions as Record<string, unknown>),\n ...(instancePropDefinitions as Record<string, unknown> | undefined),\n ...layoutOptionProps,\n });\n const { composables, render, props: layoutProps } = layout;\n const customLayoutProps = layoutProps?.custom;\n const includeLayoutProps = layoutProps?.include;\n const resolvedIncludedProps = pick(\n resolvedInProps,\n Object.keys(includeLayoutProps ?? {}),\n );\n const resolvedLayoutProps = {\n ...resolvedIncludedProps,\n ...customLayoutProps,\n };\n const layoutContext: ComposableNameContext<\n LayoutResourceKey<Resources>,\n typeof name\n > = {\n resource: layoutOptions.resource,\n name,\n capitalize,\n };\n const resolvedComposables = composables\n ? resolveLayoutComposables(composables, layoutContext)\n : undefined;\n const mergedRenderContext = {\n composables: resolvedComposables as LayoutRenderComposables<Composables>,\n resource: layoutContext.resource,\n name: layoutContext.name,\n inProps: splitInProps,\n } as LayoutRenderContext<Resources, Composables>;\n\n function Component(props: Show<ResolveProps<CustomProps>>) {\n const validatedProps = validateProps(resolvedLayoutProps, props);\n const includedPropKeys = Object.keys(includeLayoutProps ?? {});\n const includedPropDefinitions = pick(\n resolvedInProps,\n includedPropKeys,\n ) as Record<string, unknown>;\n const includedPropValues = {\n ...resolvePropDefinitionValues(includedPropDefinitions),\n ...pick(\n splitInProps,\n includedPropKeys as (keyof typeof splitInProps)[],\n ),\n ...pick(\n layoutOptionProps,\n includedPropKeys as (keyof typeof layoutOptionProps)[],\n ),\n };\n const validatedIncludedProps = validateProps(\n includedPropDefinitions as Record<string, AnyBuiltPropDefinition>,\n includedPropValues,\n );\n const layoutRenderProps = {\n ...validatedProps,\n ...validatedIncludedProps,\n } as unknown as LayoutRenderProps<\n Resources,\n InProps,\n IncludeProps,\n CustomProps\n >;\n\n return <>{render(layoutRenderProps, mergedRenderContext)}</>;\n }\n\n function createComposition<LayoutName extends string>(\n compositionOptions: MakeComposableOptions<Composables, LayoutName>,\n ) {\n if (!compositionOptions.components) {\n return {} as ResourceLayoutComposition<LayoutName, Composables>;\n }\n\n return {\n makeComposable: createComposableLayout(compositionOptions),\n };\n }\n\n return Object.assign(Component, {\n displayName: name,\n props: undefined as unknown as ResolveProps<CustomProps>,\n ...createComposition({\n components: resolvedComposables as Composables | undefined,\n name,\n }),\n });\n };\n\n return definedResourceLayout;\n}\n"],"mappings":";;;;;;;;;AA+EA,SAAS,sBACP,OACiC;CACjC,OAAO,OAAO,UAAU,cAAc,UAAU,QAAQ,gBAAgB;AAC1E;AAEA,SAAS,8BACP,OACsC;CACtC,OACE,UAAU,QACV,OAAO,UAAU,YACjB,YAAY,SACX,MAA+B,WAAW;AAE/C;AAEA,SAAS,mBAAmB,SAAkC;CAC5D,MAAM,kBAA0D,CAAC;CACjE,MAAM,eAAwC,CAAC;CAE/C,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,GAAG;EAClD,IAAI,sBAAsB,KAAK,GAAG;GAChC,gBAAgB,OAAO;GACvB;EACF;EAEA,IAAI,8BAA8B,KAAK,GAAG;GACxC,aAAa,OAAO,MAAM;GAE1B,IAAI,MAAM,SAAS,OAAO,MAAM,UAAU,UACxC,OAAO,OAAO,iBAAiB,MAAM,KAAK;EAE9C;CACF;CAEA,OAAO;EACL;EACA;CACF;AACF;AAwFA,SAAgB,qBAOd,SAOA;CACA,MAAM,EAAE,SAAS,SAAS,WAAW,WAAW;CAChD,MAAM,sBAAsB,mBAAmB,SAAS;CACxD,MAAM,gBAAgB,2BAA2B,QAAQ,EAAE,KACzD,eAAe,mBAAmB,CACpC;CACA,MAAM,yBAMD,kBAAkB;EACrB,MAAM,EACJ,MACA,OAAO,yBACP,GAAG,sBACD;EACJ,MAAM,yBACJ,eAEE;EACJ,MAAM,WAAW,WAAW,OAAO,EAAE,QAAQ,IAAI;EAQjD,MAAM,EAAE,iBAAiB,iBAAiB,mBAAmB;GAC3D,GAPA,OAAO,YAAY,aACf,QAAQ;IACN,UAAU;IACV,MAAM;GACR,CAAC,IACD;GAGJ,GAAI;GACJ,GAAG;EACL,CAAC;EACD,MAAM,EAAE,aAAa,QAAQ,OAAO,gBAAgB;EACpD,MAAM,oBAAoB,aAAa;EACvC,MAAM,qBAAqB,aAAa;EAKxC,MAAM,sBAAsB;GAC1B,GAL4B,KAC5B,iBACA,OAAO,KAAK,sBAAsB,CAAC,CAAC,CAGb;GACvB,GAAG;EACL;EACA,MAAM,gBAGF;GACF,UAAU,cAAc;GACxB;GACA;EACF;EACA,MAAM,sBAAsB,cACxB,yBAAyB,aAAa,aAAa,IACnD;EACJ,MAAM,sBAAsB;GAC1B,aAAa;GACb,UAAU,cAAc;GACxB,MAAM,cAAc;GACpB,SAAS;EACX;EAEA,SAAS,UAAU,OAAwC;GACzD,MAAM,iBAAiB,cAAc,qBAAqB,KAAK;GAC/D,MAAM,mBAAmB,OAAO,KAAK,sBAAsB,CAAC,CAAC;GAC7D,MAAM,0BAA0B,KAC9B,iBACA,gBACF;GAYA,MAAM,yBAAyB,cAC7B,yBACA;IAZA,GAAG,4BAA4B,uBAAuB;IACtD,GAAG,KACD,cACA,gBACF;IACA,GAAG,KACD,mBACA,gBACF;GAIiB,CACnB;GAWA,OAAO,0CAAG,OAAO;IATf,GAAG;IACH,GAAG;GAQ4B,GAAG,mBAAmB,EAAI;EAC7D;EAEA,SAAS,kBACP,oBACA;GACA,IAAI,CAAC,mBAAmB,YACtB,OAAO,CAAC;GAGV,OAAO,EACL,gBAAgB,uBAAuB,kBAAkB,EAC3D;EACF;EAEA,OAAO,OAAO,OAAO,WAAW;GAC9B,aAAa;GACb,OAAO;GACP,GAAG,kBAAkB;IACnB,YAAY;IACZ;GACF,CAAC;EACH,CAAC;CACH;CAEA,OAAO;AACT"}
|