@mittwald/flow-react-components 0.2.0-alpha.1006 → 0.2.0-alpha.1007
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/CHANGELOG.md +6 -0
- package/dist/assets/doc-properties.json +11323 -10199
- package/dist/js/internal.mjs +1 -0
- package/dist/js/internal.mjs.map +1 -1
- package/dist/js/packages/components/src/components/ComponentUsageProvider/ComponentUsageProvider.mjs +45 -0
- package/dist/js/packages/components/src/components/ComponentUsageProvider/ComponentUsageProvider.mjs.map +1 -0
- package/dist/js/packages/components/src/lib/componentFactory/flowComponent.mjs +5 -0
- package/dist/js/packages/components/src/lib/componentFactory/flowComponent.mjs.map +1 -1
- package/dist/js/packages/components/src/lib/viewComponentContext/ViewComponentContextProvider.mjs +2 -1
- package/dist/js/packages/components/src/lib/viewComponentContext/ViewComponentContextProvider.mjs.map +1 -1
- package/dist/types/components/ComponentUsageProvider/ComponentUsageProvider.browser.test.d.ts +2 -0
- package/dist/types/components/ComponentUsageProvider/ComponentUsageProvider.browser.test.d.ts.map +1 -0
- package/dist/types/components/ComponentUsageProvider/ComponentUsageProvider.d.ts +14 -0
- package/dist/types/components/ComponentUsageProvider/ComponentUsageProvider.d.ts.map +1 -0
- package/dist/types/components/ComponentUsageProvider/index.d.ts +3 -0
- package/dist/types/components/ComponentUsageProvider/index.d.ts.map +1 -0
- package/dist/types/index/internal.d.ts +1 -0
- package/dist/types/index/internal.d.ts.map +1 -1
- package/dist/types/lib/componentFactory/flowComponent.d.ts.map +1 -1
- package/dist/types/lib/viewComponentContext/ViewComponentContextProvider.d.ts.map +1 -1
- package/package.json +9 -9
package/dist/js/internal.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
/* */
|
|
3
|
+
export { ComponentUsageProvider, ViewCompositionReset, markViewComponents, useReportComponentUsage } from './packages/components/src/components/ComponentUsageProvider/ComponentUsageProvider.mjs';
|
|
3
4
|
export { ControlledNotification } from './packages/components/src/components/NotificationProvider/ControlledNotification.mjs';
|
|
4
5
|
export { isFlowComponentName } from './packages/components/src/lib/propsContext/isFlowComponentName.mjs';
|
|
5
6
|
export { flowComponent } from './packages/components/src/lib/componentFactory/flowComponent.mjs';
|
package/dist/js/internal.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"internal.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
package/dist/js/packages/components/src/components/ComponentUsageProvider/ComponentUsageProvider.mjs
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { createContext, useContext, useEffect, createElement } from 'react';
|
|
5
|
+
|
|
6
|
+
const componentUsageContext = createContext(
|
|
7
|
+
void 0
|
|
8
|
+
);
|
|
9
|
+
const viewCompositionContext = createContext(false);
|
|
10
|
+
const ComponentUsageProvider = (props) => {
|
|
11
|
+
const { children, onUsage } = props;
|
|
12
|
+
return /* @__PURE__ */ jsx(componentUsageContext.Provider, { value: onUsage, children });
|
|
13
|
+
};
|
|
14
|
+
const markedComponents = /* @__PURE__ */ new WeakMap();
|
|
15
|
+
const markViewComposition = (Component) => {
|
|
16
|
+
const cached = markedComponents.get(Component);
|
|
17
|
+
if (cached) {
|
|
18
|
+
return cached;
|
|
19
|
+
}
|
|
20
|
+
const ViewComposition = (props) => /* @__PURE__ */ jsx(viewCompositionContext.Provider, { value: true, children: createElement(Component, props) });
|
|
21
|
+
ViewComposition.displayName = `ViewComposition(${Component.displayName ?? Component.name})`;
|
|
22
|
+
markedComponents.set(Component, ViewComposition);
|
|
23
|
+
return ViewComposition;
|
|
24
|
+
};
|
|
25
|
+
const markViewComponents = (components) => Object.fromEntries(
|
|
26
|
+
Object.entries(components).map(([name, component]) => [
|
|
27
|
+
name,
|
|
28
|
+
markViewComposition(component)
|
|
29
|
+
])
|
|
30
|
+
// Same keys, same props — only the render is wrapped.
|
|
31
|
+
);
|
|
32
|
+
const ViewCompositionReset = ({ children }) => /* @__PURE__ */ jsx(viewCompositionContext.Provider, { value: false, children });
|
|
33
|
+
const useReportComponentUsage = (component) => {
|
|
34
|
+
const onUsage = useContext(componentUsageContext);
|
|
35
|
+
const isViewComposition = useContext(viewCompositionContext);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
if (!isViewComposition) {
|
|
38
|
+
onUsage?.({ component });
|
|
39
|
+
}
|
|
40
|
+
}, [onUsage, component, isViewComposition]);
|
|
41
|
+
return isViewComposition;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export { ComponentUsageProvider, ViewCompositionReset, markViewComponents, useReportComponentUsage };
|
|
45
|
+
//# sourceMappingURL=ComponentUsageProvider.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentUsageProvider.mjs","sources":["../../../../../../../src/components/ComponentUsageProvider/ComponentUsageProvider.tsx"],"sourcesContent":["import {\n createContext,\n createElement,\n useContext,\n useEffect,\n type ComponentType,\n type FC,\n type PropsWithChildren,\n} from \"react\";\n\nexport interface ComponentUsageEvent {\n component: string;\n}\n\nexport type ComponentUsageHandler = (event: ComponentUsageEvent) => void;\n\nconst componentUsageContext = createContext<ComponentUsageHandler | undefined>(\n undefined,\n);\n\nconst viewCompositionContext = createContext(false);\n\nexport interface ComponentUsageProviderProps extends PropsWithChildren {\n onUsage?: ComponentUsageHandler;\n}\n\nexport const ComponentUsageProvider: FC<ComponentUsageProviderProps> = (\n props,\n) => {\n const { children, onUsage } = props;\n\n return (\n <componentUsageContext.Provider value={onUsage}>\n {children}\n </componentUsageContext.Provider>\n );\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst markedComponents = new WeakMap<ComponentType<any>, ComponentType<any>>();\n\nconst markViewComposition = <P extends object>(\n Component: ComponentType<P>,\n): ComponentType<P> => {\n const cached = markedComponents.get(Component);\n if (cached) {\n return cached as ComponentType<P>;\n }\n\n const ViewComposition: FC<P> = (props) => (\n <viewCompositionContext.Provider value={true}>\n {createElement(Component, props)}\n </viewCompositionContext.Provider>\n );\n\n ViewComposition.displayName = `ViewComposition(${Component.displayName ?? Component.name})`;\n\n markedComponents.set(Component, ViewComposition);\n\n return ViewComposition;\n};\n\nexport const markViewComponents = <\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, ComponentType<any>>,\n>(\n components: T,\n): T =>\n Object.fromEntries(\n Object.entries(components).map(([name, component]) => [\n name,\n markViewComposition(component),\n ]),\n // Same keys, same props — only the render is wrapped.\n ) as T;\n\nexport const ViewCompositionReset: FC<PropsWithChildren> = ({ children }) => (\n <viewCompositionContext.Provider value={false}>\n {children}\n </viewCompositionContext.Provider>\n);\n\nexport const useReportComponentUsage = (component: string): boolean => {\n const onUsage = useContext(componentUsageContext);\n const isViewComposition = useContext(viewCompositionContext);\n\n useEffect(() => {\n if (!isViewComposition) {\n onUsage?.({ component });\n }\n }, [onUsage, component, isViewComposition]);\n\n return isViewComposition;\n};\n\nexport default ComponentUsageProvider;\n"],"names":[],"mappings":";;;AAgBA,MAAM,qBAAA,GAAwB,aAAA;AAAA,EAC5B;AACF,CAAA;AAEA,MAAM,sBAAA,GAAyB,cAAc,KAAK,CAAA;AAM3C,MAAM,sBAAA,GAA0D,CACrE,KAAA,KACG;AACH,EAAA,MAAM,EAAE,QAAA,EAAU,OAAA,EAAQ,GAAI,KAAA;AAE9B,EAAA,2BACG,qBAAA,CAAsB,QAAA,EAAtB,EAA+B,KAAA,EAAO,SACpC,QAAA,EACH,CAAA;AAEJ;AAGA,MAAM,gBAAA,uBAAuB,OAAA,EAAgD;AAE7E,MAAM,mBAAA,GAAsB,CAC1B,SAAA,KACqB;AACrB,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,GAAA,CAAI,SAAS,CAAA;AAC7C,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,eAAA,GAAyB,CAAC,KAAA,qBAC9B,GAAA,CAAC,sBAAA,CAAuB,QAAA,EAAvB,EAAgC,KAAA,EAAO,IAAA,EACrC,QAAA,EAAA,aAAA,CAAc,SAAA,EAAW,KAAK,CAAA,EACjC,CAAA;AAGF,EAAA,eAAA,CAAgB,WAAA,GAAc,CAAA,gBAAA,EAAmB,SAAA,CAAU,WAAA,IAAe,UAAU,IAAI,CAAA,CAAA,CAAA;AAExF,EAAA,gBAAA,CAAiB,GAAA,CAAI,WAAW,eAAe,CAAA;AAE/C,EAAA,OAAO,eAAA;AACT,CAAA;AAEO,MAAM,kBAAA,GAAqB,CAIhC,UAAA,KAEA,MAAA,CAAO,WAAA;AAAA,EACL,MAAA,CAAO,QAAQ,UAAU,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,SAAS,CAAA,KAAM;AAAA,IACpD,IAAA;AAAA,IACA,oBAAoB,SAAS;AAAA,GAC9B;AAAA;AAEH;AAEK,MAAM,oBAAA,GAA8C,CAAC,EAAE,QAAA,EAAS,qBACrE,GAAA,CAAC,sBAAA,CAAuB,QAAA,EAAvB,EAAgC,KAAA,EAAO,KAAA,EACrC,QAAA,EACH;AAGK,MAAM,uBAAA,GAA0B,CAAC,SAAA,KAA+B;AACrE,EAAA,MAAM,OAAA,GAAU,WAAW,qBAAqB,CAAA;AAChD,EAAA,MAAM,iBAAA,GAAoB,WAAW,sBAAsB,CAAA;AAE3D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,OAAA,GAAU,EAAE,WAAW,CAAA;AAAA,IACzB;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,SAAA,EAAW,iBAAiB,CAAC,CAAA;AAE1C,EAAA,OAAO,iBAAA;AACT;;;;"}
|
|
@@ -8,6 +8,7 @@ import { useComponentPropsContext } from '../propsContext/propsContext.mjs';
|
|
|
8
8
|
import ClearPropsContextView from '../../views/ClearPropsContextView.mjs';
|
|
9
9
|
import { UiComponentTunnelProvider } from '../../components/UiComponentTunnel/UiComponentTunnelProvider.mjs';
|
|
10
10
|
import { UiComponentTunnelEntry } from '../../components/UiComponentTunnel/UiComponentTunnelEntry.mjs';
|
|
11
|
+
import { useReportComponentUsage, ViewCompositionReset } from '../../components/ComponentUsageProvider/ComponentUsageProvider.mjs';
|
|
11
12
|
import { ComponentPropsContextProvider } from '../propsContext/components/ComponentPropsContextProvider.mjs';
|
|
12
13
|
import { ClearPropsContext } from '../propsContext/components/ClearPropsContext.mjs';
|
|
13
14
|
|
|
@@ -15,6 +16,7 @@ function flowComponent(componentName, ImplementationComponentType, options = {})
|
|
|
15
16
|
const { type = "ui", isRemoteComponent = false } = options;
|
|
16
17
|
const MemoizedImplementationComponentType = memo(ImplementationComponentType);
|
|
17
18
|
function Component(props) {
|
|
19
|
+
const isViewComposition = useReportComponentUsage(componentName);
|
|
18
20
|
const { tunnel, wrapWith, ...propsWithContext } = useProps(
|
|
19
21
|
componentName,
|
|
20
22
|
props
|
|
@@ -43,6 +45,9 @@ function flowComponent(componentName, ImplementationComponentType, options = {})
|
|
|
43
45
|
if (tunnel) {
|
|
44
46
|
element = /* @__PURE__ */ jsx(UiComponentTunnelEntry, { id: tunnel.id, component: tunnel.component, children: element });
|
|
45
47
|
}
|
|
48
|
+
if (isViewComposition) {
|
|
49
|
+
element = /* @__PURE__ */ jsx(ViewCompositionReset, { children: element });
|
|
50
|
+
}
|
|
46
51
|
return element;
|
|
47
52
|
}
|
|
48
53
|
Component.displayName = `FlowComponent(${componentName})`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowComponent.mjs","sources":["../../../../../../../src/lib/componentFactory/flowComponent.tsx"],"sourcesContent":["import type {\n FlowComponentName,\n FlowComponentProps as FlowComponentPropsOfName,\n} from \"@/components/propTypes\";\nimport type {\n ComponentProps,\n ComponentType,\n FunctionComponent,\n ReactElement,\n ReactNode,\n RefAttributes,\n} from \"react\";\nimport { cloneElement, memo } from \"react\";\nimport type { PropsWithTunnel } from \"@/lib/types/props\";\nimport SlotContextProvider from \"@/lib/slotContext/SlotContextProvider\";\nimport { useProps } from \"@/lib/hooks/useProps\";\nimport { useComponentPropsContext } from \"@/lib/propsContext/propsContext\";\nimport { ComponentPropsContextProvider } from \"@/components/ComponentPropsContextProvider\";\nimport { ClearPropsContext } from \"@/components/ClearPropsContext\";\nimport ClearPropsContextView from \"@/views/ClearPropsContextView\";\nimport { UiComponentTunnelProvider } from \"@/components/UiComponentTunnel/UiComponentTunnelProvider\";\nimport { UiComponentTunnelEntry } from \"@/components/UiComponentTunnel/UiComponentTunnelEntry\";\n\ntype RefType<T> = T extends RefAttributes<infer R> ? R : undefined;\n\nexport interface FlowComponentProps<R = HTMLDivElement>\n extends PropsWithTunnel, RefAttributes<R> {\n wrapWith?: ReactElement;\n}\n\nexport type FlowComponentImplementationProps<C extends FlowComponentName> =\n Omit<FlowComponentPropsOfName<C>, keyof FlowComponentProps> &\n RefAttributes<RefType<FlowComponentPropsOfName<C>>>;\n\ntype FlowComponentImplementationType<C extends FlowComponentName> =\n ComponentType<FlowComponentImplementationProps<C>>;\n\ntype FlowComponentType<C extends FlowComponentName> = FunctionComponent<\n FlowComponentPropsOfName<C> &\n RefAttributes<RefType<FlowComponentPropsOfName<C>>>\n>;\n\nexport type FlowComponentProvisionType = \"provider\" | \"ui\" | \"layout\";\n\ninterface Options {\n type?: FlowComponentProvisionType;\n isRemoteComponent?: boolean;\n}\n\nexport function flowComponent<C extends FlowComponentName>(\n componentName: C,\n ImplementationComponentType: FlowComponentImplementationType<C>,\n options: Options = {},\n): FlowComponentType<C> {\n type Props = FlowComponentPropsOfName<C> &\n RefAttributes<RefType<FlowComponentPropsOfName<C>>>;\n\n const { type = \"ui\", isRemoteComponent = false } = options;\n\n const MemoizedImplementationComponentType = memo(ImplementationComponentType);\n\n function Component(props: Props) {\n const { tunnel, wrapWith, ...propsWithContext } = useProps(\n componentName,\n props as FlowComponentPropsOfName<C>,\n ) as FlowComponentProps<RefType<FlowComponentPropsOfName<C>>>;\n\n const implementationTypeProps = propsWithContext as ComponentProps<\n typeof ImplementationComponentType\n >;\n\n const componentProps = useComponentPropsContext(componentName);\n\n ImplementationComponentType.displayName = `FlowComponentImpl(${componentName})`;\n\n let element: ReactNode = (\n <MemoizedImplementationComponentType {...implementationTypeProps} />\n );\n\n if (type === \"ui\" || type === \"layout\") {\n element = (\n <UiComponentTunnelProvider component={componentName}>\n {element}\n </UiComponentTunnelProvider>\n );\n }\n\n element = (\n <ComponentPropsContextProvider componentProps={componentProps}>\n {element}\n </ComponentPropsContextProvider>\n );\n\n if (type === \"ui\") {\n /**\n * Protect the inside of UI components for accidental prop changes through\n * the Props Context.\n */\n if (isRemoteComponent) {\n element = <ClearPropsContext>{element}</ClearPropsContext>;\n } else {\n /**\n * In case of a UI component that does not have a remote counterpart\n * (like the Modal component), the <ClearPropsContext> must be\n * additionally applied on the host side by using the\n * <ClearPropsContextView>.\n *\n * This prevents Props Contexts created by parent components on the host\n * side affecting the children of this UI component.\n */\n element = (\n <ClearPropsContext>\n <ClearPropsContextView>{element}</ClearPropsContextView>\n </ClearPropsContext>\n );\n }\n }\n\n if (\"slot\" in props && !!props.slot && typeof props.slot === \"string\") {\n element = (\n <SlotContextProvider slot={props.slot} component={componentName}>\n {element}\n </SlotContextProvider>\n );\n }\n\n if (wrapWith) {\n element = cloneElement(wrapWith, undefined, element);\n }\n\n if (tunnel) {\n element = (\n <UiComponentTunnelEntry id={tunnel.id} component={tunnel.component}>\n {element}\n </UiComponentTunnelEntry>\n );\n }\n\n return element;\n }\n\n Component.displayName = `FlowComponent(${componentName})`;\n return memo(Component);\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flowComponent.mjs","sources":["../../../../../../../src/lib/componentFactory/flowComponent.tsx"],"sourcesContent":["import type {\n FlowComponentName,\n FlowComponentProps as FlowComponentPropsOfName,\n} from \"@/components/propTypes\";\nimport type {\n ComponentProps,\n ComponentType,\n FunctionComponent,\n ReactElement,\n ReactNode,\n RefAttributes,\n} from \"react\";\nimport { cloneElement, memo } from \"react\";\nimport type { PropsWithTunnel } from \"@/lib/types/props\";\nimport SlotContextProvider from \"@/lib/slotContext/SlotContextProvider\";\nimport { useProps } from \"@/lib/hooks/useProps\";\nimport { useComponentPropsContext } from \"@/lib/propsContext/propsContext\";\nimport { ComponentPropsContextProvider } from \"@/components/ComponentPropsContextProvider\";\nimport { ClearPropsContext } from \"@/components/ClearPropsContext\";\nimport ClearPropsContextView from \"@/views/ClearPropsContextView\";\nimport { UiComponentTunnelProvider } from \"@/components/UiComponentTunnel/UiComponentTunnelProvider\";\nimport { UiComponentTunnelEntry } from \"@/components/UiComponentTunnel/UiComponentTunnelEntry\";\nimport {\n useReportComponentUsage,\n ViewCompositionReset,\n} from \"@/components/ComponentUsageProvider\";\n\ntype RefType<T> = T extends RefAttributes<infer R> ? R : undefined;\n\nexport interface FlowComponentProps<R = HTMLDivElement>\n extends PropsWithTunnel, RefAttributes<R> {\n wrapWith?: ReactElement;\n}\n\nexport type FlowComponentImplementationProps<C extends FlowComponentName> =\n Omit<FlowComponentPropsOfName<C>, keyof FlowComponentProps> &\n RefAttributes<RefType<FlowComponentPropsOfName<C>>>;\n\ntype FlowComponentImplementationType<C extends FlowComponentName> =\n ComponentType<FlowComponentImplementationProps<C>>;\n\ntype FlowComponentType<C extends FlowComponentName> = FunctionComponent<\n FlowComponentPropsOfName<C> &\n RefAttributes<RefType<FlowComponentPropsOfName<C>>>\n>;\n\nexport type FlowComponentProvisionType = \"provider\" | \"ui\" | \"layout\";\n\ninterface Options {\n type?: FlowComponentProvisionType;\n isRemoteComponent?: boolean;\n}\n\nexport function flowComponent<C extends FlowComponentName>(\n componentName: C,\n ImplementationComponentType: FlowComponentImplementationType<C>,\n options: Options = {},\n): FlowComponentType<C> {\n type Props = FlowComponentPropsOfName<C> &\n RefAttributes<RefType<FlowComponentPropsOfName<C>>>;\n\n const { type = \"ui\", isRemoteComponent = false } = options;\n\n const MemoizedImplementationComponentType = memo(ImplementationComponentType);\n\n function Component(props: Props) {\n const isViewComposition = useReportComponentUsage(componentName);\n\n const { tunnel, wrapWith, ...propsWithContext } = useProps(\n componentName,\n props as FlowComponentPropsOfName<C>,\n ) as FlowComponentProps<RefType<FlowComponentPropsOfName<C>>>;\n\n const implementationTypeProps = propsWithContext as ComponentProps<\n typeof ImplementationComponentType\n >;\n\n const componentProps = useComponentPropsContext(componentName);\n\n ImplementationComponentType.displayName = `FlowComponentImpl(${componentName})`;\n\n let element: ReactNode = (\n <MemoizedImplementationComponentType {...implementationTypeProps} />\n );\n\n if (type === \"ui\" || type === \"layout\") {\n element = (\n <UiComponentTunnelProvider component={componentName}>\n {element}\n </UiComponentTunnelProvider>\n );\n }\n\n element = (\n <ComponentPropsContextProvider componentProps={componentProps}>\n {element}\n </ComponentPropsContextProvider>\n );\n\n if (type === \"ui\") {\n /**\n * Protect the inside of UI components for accidental prop changes through\n * the Props Context.\n */\n if (isRemoteComponent) {\n element = <ClearPropsContext>{element}</ClearPropsContext>;\n } else {\n /**\n * In case of a UI component that does not have a remote counterpart\n * (like the Modal component), the <ClearPropsContext> must be\n * additionally applied on the host side by using the\n * <ClearPropsContextView>.\n *\n * This prevents Props Contexts created by parent components on the host\n * side affecting the children of this UI component.\n */\n element = (\n <ClearPropsContext>\n <ClearPropsContextView>{element}</ClearPropsContextView>\n </ClearPropsContext>\n );\n }\n }\n\n if (\"slot\" in props && !!props.slot && typeof props.slot === \"string\") {\n element = (\n <SlotContextProvider slot={props.slot} component={componentName}>\n {element}\n </SlotContextProvider>\n );\n }\n\n if (wrapWith) {\n element = cloneElement(wrapWith, undefined, element);\n }\n\n if (tunnel) {\n element = (\n <UiComponentTunnelEntry id={tunnel.id} component={tunnel.component}>\n {element}\n </UiComponentTunnelEntry>\n );\n }\n\n if (isViewComposition) {\n element = <ViewCompositionReset>{element}</ViewCompositionReset>;\n }\n\n return element;\n }\n\n Component.displayName = `FlowComponent(${componentName})`;\n return memo(Component);\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAqDO,SAAS,aAAA,CACd,aAAA,EACA,2BAAA,EACA,OAAA,GAAmB,EAAC,EACE;AAItB,EAAA,MAAM,EAAE,IAAA,GAAO,IAAA,EAAM,iBAAA,GAAoB,OAAM,GAAI,OAAA;AAEnD,EAAA,MAAM,mCAAA,GAAsC,KAAK,2BAA2B,CAAA;AAE5E,EAAA,SAAS,UAAU,KAAA,EAAc;AAC/B,IAAA,MAAM,iBAAA,GAAoB,wBAAwB,aAAa,CAAA;AAE/D,IAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,EAAU,GAAG,kBAAiB,GAAI,QAAA;AAAA,MAChD,aAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,uBAAA,GAA0B,gBAAA;AAIhC,IAAA,MAAM,cAAA,GAAiB,yBAAyB,aAAa,CAAA;AAE7D,IAAA,2BAAA,CAA4B,WAAA,GAAc,qBAAqB,aAAa,CAAA,CAAA,CAAA;AAE5E,IAAA,IAAI,OAAA,mBACF,GAAA,CAAC,mCAAA,EAAA,EAAqC,GAAG,uBAAA,EAAyB,CAAA;AAGpE,IAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,QAAA,EAAU;AACtC,MAAA,OAAA,mBACE,GAAA,CAAC,yBAAA,EAAA,EAA0B,SAAA,EAAW,aAAA,EACnC,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,IAEJ;AAEA,IAAA,OAAA,mBACE,GAAA,CAAC,6BAAA,EAAA,EAA8B,cAAA,EAC5B,QAAA,EAAA,OAAA,EACH,CAAA;AAGF,IAAA,IAAI,SAAS,IAAA,EAAM;AAKjB,MAAA,IAAI,iBAAA,EAAmB;AACrB,QAAA,OAAA,mBAAU,GAAA,CAAC,qBAAmB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,MACxC,CAAA,MAAO;AAUL,QAAA,OAAA,mBACE,GAAA,CAAC,iBAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,qBAAA,EAAA,EAAuB,mBAAQ,CAAA,EAClC,CAAA;AAAA,MAEJ;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,IAAU,SAAS,CAAC,CAAC,MAAM,IAAA,IAAQ,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU;AACrE,MAAA,OAAA,uBACG,mBAAA,EAAA,EAAoB,IAAA,EAAM,MAAM,IAAA,EAAM,SAAA,EAAW,eAC/C,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,IAEJ;AAEA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAA,GAAU,YAAA,CAAa,QAAA,EAAU,MAAA,EAAW,OAAO,CAAA;AAAA,IACrD;AAEA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAA,mBACE,GAAA,CAAC,0BAAuB,EAAA,EAAI,MAAA,CAAO,IAAI,SAAA,EAAW,MAAA,CAAO,WACtD,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,IAEJ;AAEA,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,OAAA,mBAAU,GAAA,CAAC,wBAAsB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,IAC3C;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,SAAA,CAAU,WAAA,GAAc,iBAAiB,aAAa,CAAA,CAAA,CAAA;AACtD,EAAA,OAAO,KAAK,SAAS,CAAA;AACvB;;;;"}
|
package/dist/js/packages/components/src/lib/viewComponentContext/ViewComponentContextProvider.mjs
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { jsx } from 'react/jsx-runtime';
|
|
4
4
|
import { useContext, useMemo } from 'react';
|
|
5
5
|
import { viewComponentContext } from './viewComponentContext.mjs';
|
|
6
|
+
import { markViewComponents } from '../../components/ComponentUsageProvider/ComponentUsageProvider.mjs';
|
|
6
7
|
|
|
7
8
|
const ViewComponentContextProvider = (props) => {
|
|
8
9
|
const { children, components } = props;
|
|
@@ -10,7 +11,7 @@ const ViewComponentContextProvider = (props) => {
|
|
|
10
11
|
const mergedContext = useMemo(
|
|
11
12
|
() => ({
|
|
12
13
|
...parentContext,
|
|
13
|
-
...components
|
|
14
|
+
...markViewComponents(components)
|
|
14
15
|
}),
|
|
15
16
|
[parentContext, components]
|
|
16
17
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewComponentContextProvider.mjs","sources":["../../../../../../../src/lib/viewComponentContext/ViewComponentContextProvider.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from \"react\";\nimport { useMemo } from \"react\";\nimport { useContext } from \"react\";\nimport { viewComponentContext } from \"@/lib/viewComponentContext/viewComponentContext\";\n\ninterface Props extends PropsWithChildren {\n components: Partial<FlowViewComponents>;\n}\n\nexport const ViewComponentContextProvider: FC<Props> = (props) => {\n const { children, components } = props;\n\n const parentContext = useContext(viewComponentContext);\n\n const mergedContext = useMemo(\n () => ({\n ...parentContext,\n ...components,\n }),\n [parentContext, components],\n );\n\n return (\n <viewComponentContext.Provider value={mergedContext}>\n {children}\n </viewComponentContext.Provider>\n );\n};\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ViewComponentContextProvider.mjs","sources":["../../../../../../../src/lib/viewComponentContext/ViewComponentContextProvider.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from \"react\";\nimport { useMemo } from \"react\";\nimport { useContext } from \"react\";\nimport { viewComponentContext } from \"@/lib/viewComponentContext/viewComponentContext\";\nimport { markViewComponents } from \"@/components/ComponentUsageProvider\";\n\ninterface Props extends PropsWithChildren {\n components: Partial<FlowViewComponents>;\n}\n\nexport const ViewComponentContextProvider: FC<Props> = (props) => {\n const { children, components } = props;\n\n const parentContext = useContext(viewComponentContext);\n\n const mergedContext = useMemo(\n () => ({\n ...parentContext,\n ...markViewComponents(components),\n }),\n [parentContext, components],\n );\n\n return (\n <viewComponentContext.Provider value={mergedContext}>\n {children}\n </viewComponentContext.Provider>\n );\n};\n"],"names":[],"mappings":";;;;;AAUO,MAAM,4BAAA,GAA0C,CAAC,KAAA,KAAU;AAChE,EAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAW,GAAI,KAAA;AAEjC,EAAA,MAAM,aAAA,GAAgB,WAAW,oBAAoB,CAAA;AAErD,EAAA,MAAM,aAAA,GAAgB,OAAA;AAAA,IACpB,OAAO;AAAA,MACL,GAAG,aAAA;AAAA,MACH,GAAG,mBAAmB,UAAU;AAAA,KAClC,CAAA;AAAA,IACA,CAAC,eAAe,UAAU;AAAA,GAC5B;AAEA,EAAA,2BACG,oBAAA,CAAqB,QAAA,EAArB,EAA8B,KAAA,EAAO,eACnC,QAAA,EACH,CAAA;AAEJ;;;;"}
|
package/dist/types/components/ComponentUsageProvider/ComponentUsageProvider.browser.test.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentUsageProvider.browser.test.d.ts","sourceRoot":"","sources":["../../../../src/components/ComponentUsageProvider/ComponentUsageProvider.browser.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ComponentType, FC, PropsWithChildren } from 'react';
|
|
2
|
+
export interface ComponentUsageEvent {
|
|
3
|
+
component: string;
|
|
4
|
+
}
|
|
5
|
+
export type ComponentUsageHandler = (event: ComponentUsageEvent) => void;
|
|
6
|
+
export interface ComponentUsageProviderProps extends PropsWithChildren {
|
|
7
|
+
onUsage?: ComponentUsageHandler;
|
|
8
|
+
}
|
|
9
|
+
export declare const ComponentUsageProvider: FC<ComponentUsageProviderProps>;
|
|
10
|
+
export declare const markViewComponents: <T extends Record<string, ComponentType<any>>>(components: T) => T;
|
|
11
|
+
export declare const ViewCompositionReset: FC<PropsWithChildren>;
|
|
12
|
+
export declare const useReportComponentUsage: (component: string) => boolean;
|
|
13
|
+
export default ComponentUsageProvider;
|
|
14
|
+
//# sourceMappingURL=ComponentUsageProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentUsageProvider.d.ts","sourceRoot":"","sources":["../../../../src/components/ComponentUsageProvider/ComponentUsageProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,EAAE,EACP,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AAEf,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAQzE,MAAM,WAAW,2BAA4B,SAAQ,iBAAiB;IACpE,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CAUlE,CAAC;AA0BF,eAAO,MAAM,kBAAkB,GAE7B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,EAE5C,YAAY,CAAC,KACZ,CAOK,CAAC;AAET,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,iBAAiB,CAItD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,WAAW,MAAM,KAAG,OAW3D,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { ComponentUsageProvider, markViewComponents, useReportComponentUsage, ViewCompositionReset, type ComponentUsageEvent, type ComponentUsageHandler, type ComponentUsageProviderProps, } from './ComponentUsageProvider';
|
|
2
|
+
export { default } from './ComponentUsageProvider';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ComponentUsageProvider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,GACjC,MAAM,4DAA4D,CAAC;AAEpE,OAAO,EAAE,OAAO,EAAE,MAAM,4DAA4D,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export * from '../components/ComponentUsageProvider';
|
|
1
2
|
export { ControlledNotification } from '../components/NotificationProvider/ControlledNotification';
|
|
2
3
|
export { isFlowComponentName } from '../lib/propsContext/isFlowComponentName';
|
|
3
4
|
export * from '../lib/componentFactory/flowComponent';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/index/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0DAA0D,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,cAAc,sCAAsC,CAAC;AACrD,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,mBAAmB,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/index/internal.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0DAA0D,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,cAAc,sCAAsC,CAAC;AACrD,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,mBAAmB,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowComponent.d.ts","sourceRoot":"","sources":["../../../../src/lib/componentFactory/flowComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,IAAI,wBAAwB,EAC/C,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAEV,aAAa,EACb,iBAAiB,EACjB,YAAY,EAEZ,aAAa,EACd,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"flowComponent.d.ts","sourceRoot":"","sources":["../../../../src/lib/componentFactory/flowComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,IAAI,wBAAwB,EAC/C,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAEV,aAAa,EACb,iBAAiB,EACjB,YAAY,EAEZ,aAAa,EACd,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAczD,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,cAAc,CACpD,SAAQ,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,MAAM,gCAAgC,CAAC,CAAC,SAAS,iBAAiB,IACtE,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,MAAM,kBAAkB,CAAC,GACzD,aAAa,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAExD,KAAK,+BAA+B,CAAC,CAAC,SAAS,iBAAiB,IAC9D,aAAa,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC;AAErD,KAAK,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,IAAI,iBAAiB,CACrE,wBAAwB,CAAC,CAAC,CAAC,GACzB,aAAa,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CACtD,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,UAAU,GAAG,IAAI,GAAG,QAAQ,CAAC;AAEtE,UAAU,OAAO;IACf,IAAI,CAAC,EAAE,0BAA0B,CAAC;IAClC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,aAAa,CAAC,CAAC,SAAS,iBAAiB,EACvD,aAAa,EAAE,CAAC,EAChB,2BAA2B,EAAE,+BAA+B,CAAC,CAAC,CAAC,EAC/D,OAAO,GAAE,OAAY,GACpB,iBAAiB,CAAC,CAAC,CAAC,CAgGtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewComponentContextProvider.d.ts","sourceRoot":"","sources":["../../../../src/lib/viewComponentContext/ViewComponentContextProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ViewComponentContextProvider.d.ts","sourceRoot":"","sources":["../../../../src/lib/viewComponentContext/ViewComponentContextProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAMnD,UAAU,KAAM,SAAQ,iBAAiB;IACvC,UAAU,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACzC;AAED,eAAO,MAAM,4BAA4B,EAAE,EAAE,CAAC,KAAK,CAkBlD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mittwald/flow-react-components",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
3
|
+
"version": "0.2.0-alpha.1007",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A React implementation of Flow, mittwald’s design system",
|
|
6
6
|
"homepage": "https://flow.mittwald.de",
|
|
@@ -72,9 +72,9 @@
|
|
|
72
72
|
"@internationalized/string-compiler": "^3.4.1",
|
|
73
73
|
"@lezer/common": "^1.5.2",
|
|
74
74
|
"@lezer/highlight": "^1.2.3",
|
|
75
|
-
"@mittwald/flow-icons": "0.2.0-alpha.
|
|
75
|
+
"@mittwald/flow-icons": "0.2.0-alpha.1007",
|
|
76
76
|
"@mittwald/password-tools-js": "3.0.0-alpha.31",
|
|
77
|
-
"@mittwald/react-tunnel": "0.2.0-alpha.
|
|
77
|
+
"@mittwald/react-tunnel": "0.2.0-alpha.1007",
|
|
78
78
|
"@mittwald/react-use-promise": "^4.2.2",
|
|
79
79
|
"@react-aria/form": "^3.2.1",
|
|
80
80
|
"@react-aria/i18n": "^3.13.1",
|
|
@@ -128,12 +128,12 @@
|
|
|
128
128
|
"@internationalized/date": "^3.12.2",
|
|
129
129
|
"@lezer/generator": "^1.8.0",
|
|
130
130
|
"@lezer/lr": "^1.4.10",
|
|
131
|
-
"@mittwald/flow-core": "0.2.0-alpha.
|
|
132
|
-
"@mittwald/flow-design-tokens": "0.2.0-alpha.
|
|
133
|
-
"@mittwald/flow-icons-base": "0.2.0-alpha.
|
|
131
|
+
"@mittwald/flow-core": "0.2.0-alpha.1007",
|
|
132
|
+
"@mittwald/flow-design-tokens": "0.2.0-alpha.1007",
|
|
133
|
+
"@mittwald/flow-icons-base": "0.2.0-alpha.1007",
|
|
134
134
|
"@mittwald/react-use-promise": "^4.2.2",
|
|
135
135
|
"@mittwald/remote-dom-react": "1.2.2-mittwald.10",
|
|
136
|
-
"@mittwald/typescript-config": "0.2.0-alpha.
|
|
136
|
+
"@mittwald/typescript-config": "0.2.0-alpha.1007",
|
|
137
137
|
"@nx/storybook": "^22.7.6",
|
|
138
138
|
"@storybook/addon-a11y": "^10.4.6",
|
|
139
139
|
"@storybook/addon-actions": "^9.0.8",
|
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
},
|
|
187
187
|
"peerDependencies": {
|
|
188
188
|
"@internationalized/date": "^3.12.2",
|
|
189
|
-
"@mittwald/flow-icons-pro": "0.2.0-alpha.
|
|
189
|
+
"@mittwald/flow-icons-pro": "0.2.0-alpha.1007",
|
|
190
190
|
"@mittwald/react-use-promise": "^4.2.2",
|
|
191
191
|
"next": "^16.2.3",
|
|
192
192
|
"react": "^19.2.0",
|
|
@@ -207,5 +207,5 @@
|
|
|
207
207
|
"optional": true
|
|
208
208
|
}
|
|
209
209
|
},
|
|
210
|
-
"gitHead": "
|
|
210
|
+
"gitHead": "e471545f006ac5cba09a53fa310e2544b7be43d7"
|
|
211
211
|
}
|