@bsm-form/react-renderer 0.40.0 → 0.41.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/index.cjs CHANGED
@@ -4645,6 +4645,7 @@ function ConfigProvider({
4645
4645
  slots,
4646
4646
  slotCatalog,
4647
4647
  forms,
4648
+ embeddedEnv,
4648
4649
  onEmbeddedValuesChange,
4649
4650
  onEmbeddedSnapshotChange,
4650
4651
  environment,
@@ -4696,6 +4697,7 @@ function ConfigProvider({
4696
4697
  slots,
4697
4698
  slotCatalog,
4698
4699
  forms,
4700
+ embeddedEnv,
4699
4701
  onEmbeddedValuesChange,
4700
4702
  onEmbeddedSnapshotChange,
4701
4703
  environment,
@@ -4740,6 +4742,7 @@ function FormRefRenderer({ node }) {
4740
4742
  const {
4741
4743
  designMode,
4742
4744
  forms,
4745
+ embeddedEnv,
4743
4746
  environment,
4744
4747
  slots,
4745
4748
  slotCatalog,
@@ -4756,6 +4759,7 @@ function FormRefRenderer({ node }) {
4756
4759
  const schemaId = schema.kind === "layout" && schema.type === "form-ref" ? schema.props.schemaId : "";
4757
4760
  const instanceKey = schema.kind === "layout" && schema.type === "form-ref" ? schema.props.instanceKey : "";
4758
4761
  const className = schema.kind === "layout" && schema.type === "form-ref" && typeof schema.props.className === "string" ? schema.props.className : void 0;
4762
+ const [envConfig] = (0, import_react14.useState)(() => structuredClone(embeddedEnv?.[instanceKey]));
4759
4763
  const nestedTree = schemaId ? forms?.[schemaId] : void 0;
4760
4764
  const engine = (0, import_react14.useMemo)(() => {
4761
4765
  if (!nestedTree) {
@@ -4765,8 +4769,8 @@ function FormRefRenderer({ node }) {
4765
4769
  ...environment,
4766
4770
  notify: environment?.notify ?? notifyWithSonner,
4767
4771
  invoke: environment?.invoke ?? {}
4768
- });
4769
- }, [nestedTree, environment, designMode]);
4772
+ }, envConfig);
4773
+ }, [nestedTree, environment, designMode, envConfig]);
4770
4774
  (0, import_react14.useEffect)(() => {
4771
4775
  if (!engine) {
4772
4776
  return;
@@ -4838,6 +4842,7 @@ function FormRefRenderer({ node }) {
4838
4842
  designMode: designMode === true,
4839
4843
  environment,
4840
4844
  forms,
4845
+ embeddedEnv,
4841
4846
  slots,
4842
4847
  slotCatalog,
4843
4848
  invokeCatalog,
@@ -4924,6 +4929,9 @@ var import_sonner2 = require("sonner");
4924
4929
  var import_jsx_runtime47 = require("react/jsx-runtime");
4925
4930
  function FormRenderer({
4926
4931
  tree,
4932
+ envDefinitions,
4933
+ env,
4934
+ embeddedEnv,
4927
4935
  renderWrapper,
4928
4936
  designMode = false,
4929
4937
  environment,
@@ -4936,6 +4944,8 @@ function FormRenderer({
4936
4944
  onValuesChange,
4937
4945
  suppressToaster = false
4938
4946
  }) {
4947
+ const [envConfig] = (0, import_react15.useState)(() => structuredClone({ definitions: envDefinitions, overrides: env }));
4948
+ const [embedConfigs] = (0, import_react15.useState)(() => structuredClone(embeddedEnv));
4939
4949
  const [, forceUpdate] = (0, import_react15.useState)(0);
4940
4950
  const lastSerialized = (0, import_react15.useRef)("");
4941
4951
  const engine = (0, import_react15.useMemo)(
@@ -4943,8 +4953,8 @@ function FormRenderer({
4943
4953
  ...environment,
4944
4954
  notify: environment?.notify ?? notifyWithSonner,
4945
4955
  invoke: environment?.invoke ?? {}
4946
- }),
4947
- [tree, designMode, environment]
4956
+ }, envConfig),
4957
+ [tree, designMode, environment, envConfig]
4948
4958
  );
4949
4959
  (0, import_react15.useEffect)(() => {
4950
4960
  const unsubscribe = engine.subscribe(() => {
@@ -4980,6 +4990,7 @@ function FormRenderer({
4980
4990
  slots,
4981
4991
  slotCatalog,
4982
4992
  forms,
4993
+ embeddedEnv: embedConfigs,
4983
4994
  onEmbeddedValuesChange,
4984
4995
  onEmbeddedSnapshotChange,
4985
4996
  environment,
package/dist/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as _bsm_form_core from '@bsm-form/core';
3
3
  import { RuntimeNode, FormEngineEnvironment, FormEngine, PaginationChangeResult } from '@bsm-form/core';
4
- import { FormSchema, PopoverAlign, PopoverSide, DropdownMenuItemVariant, DropdownMenuSide, DropdownMenuAlign, StepperConnector, StepperOrientation, DialogSize, DrawerSide, Node } from '@bsm-form/schema';
4
+ import { FormSchema, FormEnvDefinitions, FormEnvValues, FormEnvConfig, PopoverAlign, PopoverSide, DropdownMenuItemVariant, DropdownMenuSide, DropdownMenuAlign, StepperConnector, StepperOrientation, DialogSize, DrawerSide, Node } from '@bsm-form/schema';
5
5
  import * as react from 'react';
6
6
  import { ReactNode, HTMLAttributes, ComponentType } from 'react';
7
7
 
@@ -91,6 +91,9 @@ declare function snapshotFromEngine(parts: {
91
91
 
92
92
  type Props$5 = {
93
93
  tree: FormSchema;
94
+ envDefinitions?: FormEnvDefinitions;
95
+ env?: FormEnvValues;
96
+ embeddedEnv?: Readonly<Record<string, FormEnvConfig>>;
94
97
  renderWrapper?: RenderWrapper;
95
98
  designMode?: boolean;
96
99
  environment?: Partial<FormEngineEnvironment>;
@@ -110,7 +113,7 @@ type Props$5 = {
110
113
  /** Skip the root Sonner toaster (nested embeds should pass true). */
111
114
  suppressToaster?: boolean;
112
115
  };
113
- declare function FormRenderer({ tree, renderWrapper, designMode, environment, invokeCatalog, slots, slotCatalog, forms, onEmbeddedValuesChange, onEmbeddedSnapshotChange, onValuesChange, suppressToaster, }: Props$5): react_jsx_runtime.JSX.Element;
116
+ declare function FormRenderer({ tree, envDefinitions, env, embeddedEnv, renderWrapper, designMode, environment, invokeCatalog, slots, slotCatalog, forms, onEmbeddedValuesChange, onEmbeddedSnapshotChange, onValuesChange, suppressToaster, }: Props$5): react_jsx_runtime.JSX.Element;
114
117
 
115
118
  type Props$4 = {
116
119
  node: RuntimeNode;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as _bsm_form_core from '@bsm-form/core';
3
3
  import { RuntimeNode, FormEngineEnvironment, FormEngine, PaginationChangeResult } from '@bsm-form/core';
4
- import { FormSchema, PopoverAlign, PopoverSide, DropdownMenuItemVariant, DropdownMenuSide, DropdownMenuAlign, StepperConnector, StepperOrientation, DialogSize, DrawerSide, Node } from '@bsm-form/schema';
4
+ import { FormSchema, FormEnvDefinitions, FormEnvValues, FormEnvConfig, PopoverAlign, PopoverSide, DropdownMenuItemVariant, DropdownMenuSide, DropdownMenuAlign, StepperConnector, StepperOrientation, DialogSize, DrawerSide, Node } from '@bsm-form/schema';
5
5
  import * as react from 'react';
6
6
  import { ReactNode, HTMLAttributes, ComponentType } from 'react';
7
7
 
@@ -91,6 +91,9 @@ declare function snapshotFromEngine(parts: {
91
91
 
92
92
  type Props$5 = {
93
93
  tree: FormSchema;
94
+ envDefinitions?: FormEnvDefinitions;
95
+ env?: FormEnvValues;
96
+ embeddedEnv?: Readonly<Record<string, FormEnvConfig>>;
94
97
  renderWrapper?: RenderWrapper;
95
98
  designMode?: boolean;
96
99
  environment?: Partial<FormEngineEnvironment>;
@@ -110,7 +113,7 @@ type Props$5 = {
110
113
  /** Skip the root Sonner toaster (nested embeds should pass true). */
111
114
  suppressToaster?: boolean;
112
115
  };
113
- declare function FormRenderer({ tree, renderWrapper, designMode, environment, invokeCatalog, slots, slotCatalog, forms, onEmbeddedValuesChange, onEmbeddedSnapshotChange, onValuesChange, suppressToaster, }: Props$5): react_jsx_runtime.JSX.Element;
116
+ declare function FormRenderer({ tree, envDefinitions, env, embeddedEnv, renderWrapper, designMode, environment, invokeCatalog, slots, slotCatalog, forms, onEmbeddedValuesChange, onEmbeddedSnapshotChange, onValuesChange, suppressToaster, }: Props$5): react_jsx_runtime.JSX.Element;
114
117
 
115
118
  type Props$4 = {
116
119
  node: RuntimeNode;
package/dist/index.js CHANGED
@@ -4557,6 +4557,7 @@ function ConfigProvider({
4557
4557
  slots,
4558
4558
  slotCatalog,
4559
4559
  forms,
4560
+ embeddedEnv,
4560
4561
  onEmbeddedValuesChange,
4561
4562
  onEmbeddedSnapshotChange,
4562
4563
  environment,
@@ -4608,6 +4609,7 @@ function ConfigProvider({
4608
4609
  slots,
4609
4610
  slotCatalog,
4610
4611
  forms,
4612
+ embeddedEnv,
4611
4613
  onEmbeddedValuesChange,
4612
4614
  onEmbeddedSnapshotChange,
4613
4615
  environment,
@@ -4652,6 +4654,7 @@ function FormRefRenderer({ node }) {
4652
4654
  const {
4653
4655
  designMode,
4654
4656
  forms,
4657
+ embeddedEnv,
4655
4658
  environment,
4656
4659
  slots,
4657
4660
  slotCatalog,
@@ -4668,6 +4671,7 @@ function FormRefRenderer({ node }) {
4668
4671
  const schemaId = schema.kind === "layout" && schema.type === "form-ref" ? schema.props.schemaId : "";
4669
4672
  const instanceKey = schema.kind === "layout" && schema.type === "form-ref" ? schema.props.instanceKey : "";
4670
4673
  const className = schema.kind === "layout" && schema.type === "form-ref" && typeof schema.props.className === "string" ? schema.props.className : void 0;
4674
+ const [envConfig] = useState8(() => structuredClone(embeddedEnv?.[instanceKey]));
4671
4675
  const nestedTree = schemaId ? forms?.[schemaId] : void 0;
4672
4676
  const engine = useMemo(() => {
4673
4677
  if (!nestedTree) {
@@ -4677,8 +4681,8 @@ function FormRefRenderer({ node }) {
4677
4681
  ...environment,
4678
4682
  notify: environment?.notify ?? notifyWithSonner,
4679
4683
  invoke: environment?.invoke ?? {}
4680
- });
4681
- }, [nestedTree, environment, designMode]);
4684
+ }, envConfig);
4685
+ }, [nestedTree, environment, designMode, envConfig]);
4682
4686
  useEffect8(() => {
4683
4687
  if (!engine) {
4684
4688
  return;
@@ -4750,6 +4754,7 @@ function FormRefRenderer({ node }) {
4750
4754
  designMode: designMode === true,
4751
4755
  environment,
4752
4756
  forms,
4757
+ embeddedEnv,
4753
4758
  slots,
4754
4759
  slotCatalog,
4755
4760
  invokeCatalog,
@@ -4839,6 +4844,9 @@ import { Toaster } from "sonner";
4839
4844
  import { jsx as jsx47, jsxs as jsxs19 } from "react/jsx-runtime";
4840
4845
  function FormRenderer({
4841
4846
  tree,
4847
+ envDefinitions,
4848
+ env,
4849
+ embeddedEnv,
4842
4850
  renderWrapper,
4843
4851
  designMode = false,
4844
4852
  environment,
@@ -4851,6 +4859,8 @@ function FormRenderer({
4851
4859
  onValuesChange,
4852
4860
  suppressToaster = false
4853
4861
  }) {
4862
+ const [envConfig] = useState9(() => structuredClone({ definitions: envDefinitions, overrides: env }));
4863
+ const [embedConfigs] = useState9(() => structuredClone(embeddedEnv));
4854
4864
  const [, forceUpdate] = useState9(0);
4855
4865
  const lastSerialized = useRef3("");
4856
4866
  const engine = useMemo2(
@@ -4858,8 +4868,8 @@ function FormRenderer({
4858
4868
  ...environment,
4859
4869
  notify: environment?.notify ?? notifyWithSonner,
4860
4870
  invoke: environment?.invoke ?? {}
4861
- }),
4862
- [tree, designMode, environment]
4871
+ }, envConfig),
4872
+ [tree, designMode, environment, envConfig]
4863
4873
  );
4864
4874
  useEffect9(() => {
4865
4875
  const unsubscribe = engine.subscribe(() => {
@@ -4895,6 +4905,7 @@ function FormRenderer({
4895
4905
  slots,
4896
4906
  slotCatalog,
4897
4907
  forms,
4908
+ embeddedEnv: embedConfigs,
4898
4909
  onEmbeddedValuesChange,
4899
4910
  onEmbeddedSnapshotChange,
4900
4911
  environment,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsm-form/react-renderer",
3
- "version": "0.40.0",
3
+ "version": "0.41.0",
4
4
  "description": "React FormRenderer bindings for the BSM form engine",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
@@ -21,8 +21,8 @@
21
21
  "dependencies": {
22
22
  "bsm-design-system": "1.31.0",
23
23
  "sonner": "^2.0.7",
24
- "@bsm-form/core": "0.40.0",
25
- "@bsm-form/schema": "0.40.0"
24
+ "@bsm-form/schema": "0.41.0",
25
+ "@bsm-form/core": "0.41.0"
26
26
  },
27
27
  "peerDependencies": {
28
28
  "react": ">=18",