@form-engine-ts/mui 4.3.1 → 4.4.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/README.md CHANGED
@@ -3,6 +3,21 @@
3
3
  Official Material UI v6/v7 integration layer for `@form-engine-ts/react`. `MuiFormBuilder` applies MUI controls and
4
4
  layout slots together, disables the React builder CSS classes, and propagates common size and variant settings.
5
5
 
6
+ `MuiChoiceGroupSlot` is an exported renderer slot for grouped choice questions. It uses MUI `Paper`, `FormControl`,
7
+ `FormLabel`, and `FormHelperText`, so error state and theme colors follow the active MUI theme:
8
+
9
+ ```tsx
10
+ import { FormRenderer } from "@form-engine-ts/react";
11
+ import { MuiChoiceGroupSlot } from "@form-engine-ts/mui";
12
+
13
+ <FormRenderer
14
+ appearance={{ choiceField: { radio: "grouped" } }}
15
+ slots={{ renderChoiceGroup: MuiChoiceGroupSlot }}
16
+ schema={schema}
17
+ onSubmit={save}
18
+ />
19
+ ```
20
+
6
21
  ```tsx
7
22
  import { MuiFormBuilder } from "@form-engine-ts/mui";
8
23
 
package/dist/index.cjs CHANGED
@@ -24,6 +24,7 @@ __export(index_exports, {
24
24
  MUI_LOCALIZATION_SECTION_ORDERS: () => MUI_LOCALIZATION_SECTION_ORDERS,
25
25
  MuiButtonAdapter: () => MuiButtonAdapter,
26
26
  MuiCheckboxAdapter: () => MuiCheckboxAdapter,
27
+ MuiChoiceGroupSlot: () => MuiChoiceGroupSlot,
27
28
  MuiErrorMessageAdapter: () => MuiErrorMessageAdapter,
28
29
  MuiFieldEditorSlot: () => MuiFieldEditorSlot,
29
30
  MuiFieldsetAdapter: () => MuiFieldsetAdapter,
@@ -1625,6 +1626,39 @@ function createMuiLocalizationSlot(options) {
1625
1626
  }
1626
1627
  var MuiLocalizationSlot = createMuiLocalizationSlot();
1627
1628
 
1629
+ // src/slots/MuiChoiceGroupSlot.tsx
1630
+ var import_material14 = require("@mui/material");
1631
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1632
+ function MuiChoiceGroupSlot({
1633
+ title,
1634
+ description,
1635
+ required,
1636
+ error,
1637
+ disabled,
1638
+ children,
1639
+ className
1640
+ }) {
1641
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1642
+ import_material14.Paper,
1643
+ {
1644
+ className,
1645
+ variant: "outlined",
1646
+ sx: {
1647
+ borderColor: error === void 0 ? "divider" : "error.main",
1648
+ borderRadius: 2,
1649
+ mb: 2,
1650
+ p: 2
1651
+ },
1652
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_material14.FormControl, { component: "fieldset", error: error !== void 0, fullWidth: true, required, disabled, children: [
1653
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_material14.FormLabel, { component: "legend", sx: { fontWeight: "bold", mb: description === void 0 ? 1 : 0.5 }, children: title }),
1654
+ description === void 0 ? null : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_material14.FormHelperText, { sx: { mt: 0, mb: 1 }, children: description }),
1655
+ children,
1656
+ error === void 0 ? null : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_material14.FormHelperText, { error: true, children: error.message })
1657
+ ] })
1658
+ }
1659
+ );
1660
+ }
1661
+
1628
1662
  // src/slots/index.ts
1629
1663
  var muiBuilderSlots = {
1630
1664
  sectionOrder: DEFAULT_MUI_SECTION_ORDER,
@@ -1656,7 +1690,7 @@ function createMuiBuilderProps(options, overrides = {}) {
1656
1690
  // src/MuiFormBuilder.tsx
1657
1691
  var import_react4 = require("@form-engine-ts/react");
1658
1692
  var import_react5 = require("react");
1659
- var import_jsx_runtime15 = require("react/jsx-runtime");
1693
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1660
1694
  function MuiFormBuilder({
1661
1695
  muiOptions,
1662
1696
  layoutOptions,
@@ -1680,7 +1714,7 @@ function MuiFormBuilder({
1680
1714
  const slots = (0, import_react5.useMemo)(() => ({ ...muiBuilderSlots, ...customSlots }), [customSlots]);
1681
1715
  const placement = contextOptions.localizationOptions?.placement;
1682
1716
  const resolvedSectionOrder = sectionOrder ?? (placement === void 0 ? contextOptions.layoutOptions?.sectionOrder : MUI_LOCALIZATION_SECTION_ORDERS[placement]);
1683
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(MuiFormBuilderContext.Provider, { value: contextValue, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1717
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(MuiFormBuilderContext.Provider, { value: contextValue, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1684
1718
  import_react4.FormBuilder,
1685
1719
  {
1686
1720
  ...props,
@@ -1697,6 +1731,7 @@ function MuiFormBuilder({
1697
1731
  MUI_LOCALIZATION_SECTION_ORDERS,
1698
1732
  MuiButtonAdapter,
1699
1733
  MuiCheckboxAdapter,
1734
+ MuiChoiceGroupSlot,
1700
1735
  MuiErrorMessageAdapter,
1701
1736
  MuiFieldEditorSlot,
1702
1737
  MuiFieldsetAdapter,
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { BuilderActionIconType, FieldPropertyControlMode, QuestionType, FieldEditorControlsConfig, FieldTypeSelectOptionsConfig, LocalizationSummaryContext, BuilderButtonProps, BuilderCheckboxProps, BuilderErrorMessageProps, BuilderFieldsetProps, BuilderIconButtonProps, BuilderSectionProps, BuilderSelectProps, BuilderTextAreaProps, BuilderTextInputProps, FormBuilderComponents, FormBuilderSlots, FormBuilderProps, BuilderFieldEditorSlotProps, BuilderLocalizationSlotProps, BuilderOptionEditorSlotProps, BuilderToolbarSlotProps } from '@form-engine-ts/react';
1
+ import { BuilderActionIconType, FieldPropertyControlMode, QuestionType, FieldEditorControlsConfig, FieldTypeSelectOptionsConfig, LocalizationSummaryContext, BuilderButtonProps, BuilderCheckboxProps, BuilderErrorMessageProps, BuilderFieldsetProps, BuilderIconButtonProps, BuilderSectionProps, BuilderSelectProps, BuilderTextAreaProps, BuilderTextInputProps, FormBuilderComponents, FormBuilderSlots, FormBuilderProps, BuilderFieldEditorSlotProps, BuilderLocalizationSlotProps, ChoiceGroupSlotProps, BuilderOptionEditorSlotProps, BuilderToolbarSlotProps } from '@form-engine-ts/react';
2
2
  import * as react from 'react';
3
3
  import { ReactNode, ComponentType, ReactElement } from 'react';
4
4
  import { CardProps, PaperProps, AccordionProps, StackProps, TextFieldProps, SelectProps, MenuProps, CheckboxProps, ButtonProps, IconButtonProps } from '@mui/material';
@@ -177,6 +177,8 @@ declare const MuiFieldEditorSlot: NonNullable<FormBuilderSlots["fieldEditor"]>;
177
177
  declare function createMuiLocalizationSlot(options?: MuiAdapterOptions): ComponentType<BuilderLocalizationSlotProps>;
178
178
  declare const MuiLocalizationSlot: NonNullable<FormBuilderSlots["localization"]>;
179
179
 
180
+ declare function MuiChoiceGroupSlot({ title, description, required, error, disabled, children, className }: ChoiceGroupSlotProps): react.JSX.Element;
181
+
180
182
  declare function createMuiOptionEditorSlot(options?: MuiAdapterOptions): ComponentType<BuilderOptionEditorSlotProps>;
181
183
  declare const MuiOptionEditorSlot: NonNullable<FormBuilderSlots["optionEditor"]>;
182
184
 
@@ -186,4 +188,4 @@ declare const MuiToolbarSlot: NonNullable<FormBuilderSlots["toolbar"]>;
186
188
  declare const muiBuilderSlots: FormBuilderSlots;
187
189
  declare function createMuiBuilderSlots(options?: MuiAdapterOptions, customOverrides?: Partial<FormBuilderSlots>): FormBuilderSlots;
188
190
 
189
- export { type BuilderSectionName, DEFAULT_MUI_SECTION_ORDER, type LocaleOptionItem, type LocalizationSectionPlacement, MUI_LOCALIZATION_SECTION_ORDERS, type MuiAdapterOptions, type MuiBuilderOverrides, type MuiBuilderSlotProps, MuiButtonAdapter, type MuiButtonVariant, MuiCheckboxAdapter, MuiErrorMessageAdapter, type MuiFieldEditorOptions, MuiFieldEditorSlot, MuiFieldsetAdapter, MuiFormBuilder, MuiFormBuilderContext, type MuiFormBuilderContextValue, type MuiFormBuilderProps, MuiIconButtonAdapter, type MuiLayoutOptions, type MuiLocalizationOptions, MuiLocalizationSlot, MuiOptionEditorSlot, MuiSectionAdapter, MuiSelectAdapter, type MuiSlotProps, MuiTextAreaAdapter, MuiTextInputAdapter, MuiToolbarSlot, type ResolvedMuiAdapterOptions, createMuiBuilderComponents, createMuiBuilderProps, createMuiBuilderSlots, createMuiButtonAdapter, createMuiCheckboxAdapter, createMuiErrorMessageAdapter, createMuiFieldEditorSlot, createMuiFieldsetAdapter, createMuiIconButtonAdapter, createMuiLocalizationSlot, createMuiOptionEditorSlot, createMuiSectionAdapter, createMuiSelectAdapter, createMuiTextAreaAdapter, createMuiTextInputAdapter, createMuiToolbarSlot, mergeMuiAdapterOptions, muiBuilderComponents, muiBuilderSlots, muiDefaultFieldTypeIcon, muiDefaultIconResolver, resolveMuiAdapterOptions, useResolvedMuiAdapterOptions };
191
+ export { type BuilderSectionName, DEFAULT_MUI_SECTION_ORDER, type LocaleOptionItem, type LocalizationSectionPlacement, MUI_LOCALIZATION_SECTION_ORDERS, type MuiAdapterOptions, type MuiBuilderOverrides, type MuiBuilderSlotProps, MuiButtonAdapter, type MuiButtonVariant, MuiCheckboxAdapter, MuiChoiceGroupSlot, MuiErrorMessageAdapter, type MuiFieldEditorOptions, MuiFieldEditorSlot, MuiFieldsetAdapter, MuiFormBuilder, MuiFormBuilderContext, type MuiFormBuilderContextValue, type MuiFormBuilderProps, MuiIconButtonAdapter, type MuiLayoutOptions, type MuiLocalizationOptions, MuiLocalizationSlot, MuiOptionEditorSlot, MuiSectionAdapter, MuiSelectAdapter, type MuiSlotProps, MuiTextAreaAdapter, MuiTextInputAdapter, MuiToolbarSlot, type ResolvedMuiAdapterOptions, createMuiBuilderComponents, createMuiBuilderProps, createMuiBuilderSlots, createMuiButtonAdapter, createMuiCheckboxAdapter, createMuiErrorMessageAdapter, createMuiFieldEditorSlot, createMuiFieldsetAdapter, createMuiIconButtonAdapter, createMuiLocalizationSlot, createMuiOptionEditorSlot, createMuiSectionAdapter, createMuiSelectAdapter, createMuiTextAreaAdapter, createMuiTextInputAdapter, createMuiToolbarSlot, mergeMuiAdapterOptions, muiBuilderComponents, muiBuilderSlots, muiDefaultFieldTypeIcon, muiDefaultIconResolver, resolveMuiAdapterOptions, useResolvedMuiAdapterOptions };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { BuilderActionIconType, FieldPropertyControlMode, QuestionType, FieldEditorControlsConfig, FieldTypeSelectOptionsConfig, LocalizationSummaryContext, BuilderButtonProps, BuilderCheckboxProps, BuilderErrorMessageProps, BuilderFieldsetProps, BuilderIconButtonProps, BuilderSectionProps, BuilderSelectProps, BuilderTextAreaProps, BuilderTextInputProps, FormBuilderComponents, FormBuilderSlots, FormBuilderProps, BuilderFieldEditorSlotProps, BuilderLocalizationSlotProps, BuilderOptionEditorSlotProps, BuilderToolbarSlotProps } from '@form-engine-ts/react';
1
+ import { BuilderActionIconType, FieldPropertyControlMode, QuestionType, FieldEditorControlsConfig, FieldTypeSelectOptionsConfig, LocalizationSummaryContext, BuilderButtonProps, BuilderCheckboxProps, BuilderErrorMessageProps, BuilderFieldsetProps, BuilderIconButtonProps, BuilderSectionProps, BuilderSelectProps, BuilderTextAreaProps, BuilderTextInputProps, FormBuilderComponents, FormBuilderSlots, FormBuilderProps, BuilderFieldEditorSlotProps, BuilderLocalizationSlotProps, ChoiceGroupSlotProps, BuilderOptionEditorSlotProps, BuilderToolbarSlotProps } from '@form-engine-ts/react';
2
2
  import * as react from 'react';
3
3
  import { ReactNode, ComponentType, ReactElement } from 'react';
4
4
  import { CardProps, PaperProps, AccordionProps, StackProps, TextFieldProps, SelectProps, MenuProps, CheckboxProps, ButtonProps, IconButtonProps } from '@mui/material';
@@ -177,6 +177,8 @@ declare const MuiFieldEditorSlot: NonNullable<FormBuilderSlots["fieldEditor"]>;
177
177
  declare function createMuiLocalizationSlot(options?: MuiAdapterOptions): ComponentType<BuilderLocalizationSlotProps>;
178
178
  declare const MuiLocalizationSlot: NonNullable<FormBuilderSlots["localization"]>;
179
179
 
180
+ declare function MuiChoiceGroupSlot({ title, description, required, error, disabled, children, className }: ChoiceGroupSlotProps): react.JSX.Element;
181
+
180
182
  declare function createMuiOptionEditorSlot(options?: MuiAdapterOptions): ComponentType<BuilderOptionEditorSlotProps>;
181
183
  declare const MuiOptionEditorSlot: NonNullable<FormBuilderSlots["optionEditor"]>;
182
184
 
@@ -186,4 +188,4 @@ declare const MuiToolbarSlot: NonNullable<FormBuilderSlots["toolbar"]>;
186
188
  declare const muiBuilderSlots: FormBuilderSlots;
187
189
  declare function createMuiBuilderSlots(options?: MuiAdapterOptions, customOverrides?: Partial<FormBuilderSlots>): FormBuilderSlots;
188
190
 
189
- export { type BuilderSectionName, DEFAULT_MUI_SECTION_ORDER, type LocaleOptionItem, type LocalizationSectionPlacement, MUI_LOCALIZATION_SECTION_ORDERS, type MuiAdapterOptions, type MuiBuilderOverrides, type MuiBuilderSlotProps, MuiButtonAdapter, type MuiButtonVariant, MuiCheckboxAdapter, MuiErrorMessageAdapter, type MuiFieldEditorOptions, MuiFieldEditorSlot, MuiFieldsetAdapter, MuiFormBuilder, MuiFormBuilderContext, type MuiFormBuilderContextValue, type MuiFormBuilderProps, MuiIconButtonAdapter, type MuiLayoutOptions, type MuiLocalizationOptions, MuiLocalizationSlot, MuiOptionEditorSlot, MuiSectionAdapter, MuiSelectAdapter, type MuiSlotProps, MuiTextAreaAdapter, MuiTextInputAdapter, MuiToolbarSlot, type ResolvedMuiAdapterOptions, createMuiBuilderComponents, createMuiBuilderProps, createMuiBuilderSlots, createMuiButtonAdapter, createMuiCheckboxAdapter, createMuiErrorMessageAdapter, createMuiFieldEditorSlot, createMuiFieldsetAdapter, createMuiIconButtonAdapter, createMuiLocalizationSlot, createMuiOptionEditorSlot, createMuiSectionAdapter, createMuiSelectAdapter, createMuiTextAreaAdapter, createMuiTextInputAdapter, createMuiToolbarSlot, mergeMuiAdapterOptions, muiBuilderComponents, muiBuilderSlots, muiDefaultFieldTypeIcon, muiDefaultIconResolver, resolveMuiAdapterOptions, useResolvedMuiAdapterOptions };
191
+ export { type BuilderSectionName, DEFAULT_MUI_SECTION_ORDER, type LocaleOptionItem, type LocalizationSectionPlacement, MUI_LOCALIZATION_SECTION_ORDERS, type MuiAdapterOptions, type MuiBuilderOverrides, type MuiBuilderSlotProps, MuiButtonAdapter, type MuiButtonVariant, MuiCheckboxAdapter, MuiChoiceGroupSlot, MuiErrorMessageAdapter, type MuiFieldEditorOptions, MuiFieldEditorSlot, MuiFieldsetAdapter, MuiFormBuilder, MuiFormBuilderContext, type MuiFormBuilderContextValue, type MuiFormBuilderProps, MuiIconButtonAdapter, type MuiLayoutOptions, type MuiLocalizationOptions, MuiLocalizationSlot, MuiOptionEditorSlot, MuiSectionAdapter, MuiSelectAdapter, type MuiSlotProps, MuiTextAreaAdapter, MuiTextInputAdapter, MuiToolbarSlot, type ResolvedMuiAdapterOptions, createMuiBuilderComponents, createMuiBuilderProps, createMuiBuilderSlots, createMuiButtonAdapter, createMuiCheckboxAdapter, createMuiErrorMessageAdapter, createMuiFieldEditorSlot, createMuiFieldsetAdapter, createMuiIconButtonAdapter, createMuiLocalizationSlot, createMuiOptionEditorSlot, createMuiSectionAdapter, createMuiSelectAdapter, createMuiTextAreaAdapter, createMuiTextInputAdapter, createMuiToolbarSlot, mergeMuiAdapterOptions, muiBuilderComponents, muiBuilderSlots, muiDefaultFieldTypeIcon, muiDefaultIconResolver, resolveMuiAdapterOptions, useResolvedMuiAdapterOptions };
package/dist/index.js CHANGED
@@ -1598,6 +1598,39 @@ function createMuiLocalizationSlot(options) {
1598
1598
  }
1599
1599
  var MuiLocalizationSlot = createMuiLocalizationSlot();
1600
1600
 
1601
+ // src/slots/MuiChoiceGroupSlot.tsx
1602
+ import { FormControl as FormControl3, FormHelperText as FormHelperText3, FormLabel, Paper as Paper2 } from "@mui/material";
1603
+ import { jsx as jsx15, jsxs as jsxs9 } from "react/jsx-runtime";
1604
+ function MuiChoiceGroupSlot({
1605
+ title,
1606
+ description,
1607
+ required,
1608
+ error,
1609
+ disabled,
1610
+ children,
1611
+ className
1612
+ }) {
1613
+ return /* @__PURE__ */ jsx15(
1614
+ Paper2,
1615
+ {
1616
+ className,
1617
+ variant: "outlined",
1618
+ sx: {
1619
+ borderColor: error === void 0 ? "divider" : "error.main",
1620
+ borderRadius: 2,
1621
+ mb: 2,
1622
+ p: 2
1623
+ },
1624
+ children: /* @__PURE__ */ jsxs9(FormControl3, { component: "fieldset", error: error !== void 0, fullWidth: true, required, disabled, children: [
1625
+ /* @__PURE__ */ jsx15(FormLabel, { component: "legend", sx: { fontWeight: "bold", mb: description === void 0 ? 1 : 0.5 }, children: title }),
1626
+ description === void 0 ? null : /* @__PURE__ */ jsx15(FormHelperText3, { sx: { mt: 0, mb: 1 }, children: description }),
1627
+ children,
1628
+ error === void 0 ? null : /* @__PURE__ */ jsx15(FormHelperText3, { error: true, children: error.message })
1629
+ ] })
1630
+ }
1631
+ );
1632
+ }
1633
+
1601
1634
  // src/slots/index.ts
1602
1635
  var muiBuilderSlots = {
1603
1636
  sectionOrder: DEFAULT_MUI_SECTION_ORDER,
@@ -1631,7 +1664,7 @@ import {
1631
1664
  FormBuilder
1632
1665
  } from "@form-engine-ts/react";
1633
1666
  import { useMemo } from "react";
1634
- import { jsx as jsx15 } from "react/jsx-runtime";
1667
+ import { jsx as jsx16 } from "react/jsx-runtime";
1635
1668
  function MuiFormBuilder({
1636
1669
  muiOptions,
1637
1670
  layoutOptions,
@@ -1655,7 +1688,7 @@ function MuiFormBuilder({
1655
1688
  const slots = useMemo(() => ({ ...muiBuilderSlots, ...customSlots }), [customSlots]);
1656
1689
  const placement = contextOptions.localizationOptions?.placement;
1657
1690
  const resolvedSectionOrder = sectionOrder ?? (placement === void 0 ? contextOptions.layoutOptions?.sectionOrder : MUI_LOCALIZATION_SECTION_ORDERS[placement]);
1658
- return /* @__PURE__ */ jsx15(MuiFormBuilderContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx15(
1691
+ return /* @__PURE__ */ jsx16(MuiFormBuilderContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx16(
1659
1692
  FormBuilder,
1660
1693
  {
1661
1694
  ...props,
@@ -1671,6 +1704,7 @@ export {
1671
1704
  MUI_LOCALIZATION_SECTION_ORDERS,
1672
1705
  MuiButtonAdapter,
1673
1706
  MuiCheckboxAdapter,
1707
+ MuiChoiceGroupSlot,
1674
1708
  MuiErrorMessageAdapter,
1675
1709
  MuiFieldEditorSlot,
1676
1710
  MuiFieldsetAdapter,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@form-engine-ts/mui",
3
- "version": "4.3.1",
3
+ "version": "4.4.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -46,8 +46,8 @@
46
46
  "@mui/material": "^6.0.0 || ^7.0.0",
47
47
  "react": "^18.0.0 || ^19.0.0",
48
48
  "react-dom": "^18.0.0 || ^19.0.0",
49
- "@form-engine-ts/react": "4.3.1",
50
- "@form-engine-ts/core": "4.3.1"
49
+ "@form-engine-ts/core": "4.4.0",
50
+ "@form-engine-ts/react": "4.4.0"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@emotion/react": "^11.14.0",
@@ -58,8 +58,8 @@
58
58
  "@types/react-dom": "^19.2.4",
59
59
  "react": "^19.2.8",
60
60
  "react-dom": "^19.2.8",
61
- "@form-engine-ts/react": "4.3.1",
62
- "@form-engine-ts/core": "4.3.1"
61
+ "@form-engine-ts/core": "4.4.0",
62
+ "@form-engine-ts/react": "4.4.0"
63
63
  },
64
64
  "scripts": {
65
65
  "build": "tsup src/index.ts --format esm,cjs --dts --clean --external @emotion/react --external @emotion/styled --external @form-engine-ts/core --external @form-engine-ts/react --external @mui/icons-material --external @mui/material --external react --external react-dom",