@rjsf/react-bootstrap
Version:
React Bootstrap theme, fields and widgets for react-jsonschema-form, powered by react-bootstrap
1,021 lines (990 loc) • 38.5 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var index_exports = {};
__export(index_exports, {
Form: () => Form_default,
Templates: () => Templates_default,
Theme: () => Theme_default,
Widgets: () => Widgets_default,
default: () => index_default,
generateForm: () => generateForm,
generateTemplates: () => generateTemplates,
generateTheme: () => generateTheme,
generateWidgets: () => generateWidgets
});
module.exports = __toCommonJS(index_exports);
// src/Form/Form.tsx
var import_core4 = require("@rjsf/core");
// src/AddButton/AddButton.tsx
var import_utils = require("@rjsf/utils");
var import_Button = __toESM(require("react-bootstrap/Button"), 1);
var import_BsPlus = require("@react-icons/all-files/bs/BsPlus");
var import_jsx_runtime = require("react/jsx-runtime");
function AddButton({
uiSchema,
registry,
...props
}) {
const { translateString } = registry;
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
import_Button.default,
{
title: translateString(import_utils.TranslatableString.AddItemButton),
...props,
style: { width: "100%" },
className: `ml-1 ${props.className}`,
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_BsPlus.BsPlus, {})
}
);
}
// src/ArrayFieldItemTemplate/ArrayFieldItemTemplate.tsx
var import_Row = __toESM(require("react-bootstrap/Row"), 1);
var import_Col = __toESM(require("react-bootstrap/Col"), 1);
var import_utils2 = require("@rjsf/utils");
var import_jsx_runtime2 = require("react/jsx-runtime");
function ArrayFieldItemTemplate(props) {
const { children, buttonsProps, displayLabel, hasDescription, hasToolbar, uiSchema, registry } = props;
const uiOptions = (0, import_utils2.getUiOptions)(uiSchema);
const ArrayFieldItemButtonsTemplate = (0, import_utils2.getTemplate)(
"ArrayFieldItemButtonsTemplate",
registry,
uiOptions
);
const btnStyle = {
flex: 1,
paddingLeft: 6,
paddingRight: 6,
fontWeight: "bold"
};
const padding = hasDescription ? "pb-1" : "pt-4 mt-2";
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_Row.default, { className: "mb-2 d-flex align-items-center", children: [
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_Col.default, { xs: "8", md: "9", lg: "10", children }),
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_Col.default, { xs: "4", md: "3", lg: "2", className: displayLabel ? padding : "py-4", children: hasToolbar && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "d-flex flex-row", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ArrayFieldItemButtonsTemplate, { ...buttonsProps, style: btnStyle }) }) })
] }) });
}
// src/ArrayFieldTemplate/ArrayFieldTemplate.tsx
var import_Row2 = __toESM(require("react-bootstrap/Row"), 1);
var import_Col2 = __toESM(require("react-bootstrap/Col"), 1);
var import_Container = __toESM(require("react-bootstrap/Container"), 1);
var import_utils3 = require("@rjsf/utils");
var import_jsx_runtime3 = require("react/jsx-runtime");
function ArrayFieldTemplate(props) {
const {
canAdd,
disabled,
fieldPathId,
uiSchema,
items,
optionalDataControl,
onAddClick,
readonly,
registry,
required,
schema,
title
} = props;
const uiOptions = (0, import_utils3.getUiOptions)(uiSchema);
const ArrayFieldDescriptionTemplate = (0, import_utils3.getTemplate)(
"ArrayFieldDescriptionTemplate",
registry,
uiOptions
);
const ArrayFieldTitleTemplate = (0, import_utils3.getTemplate)(
"ArrayFieldTitleTemplate",
registry,
uiOptions
);
const showOptionalDataControlInTitle = !readonly && !disabled;
const {
ButtonTemplates: { AddButton: AddButton2 }
} = registry.templates;
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_Row2.default, { className: "p-0 m-0", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_Col2.default, { className: "p-0 m-0", children: [
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
ArrayFieldTitleTemplate,
{
fieldPathId,
title: uiOptions.title || title,
schema,
uiSchema,
required,
registry,
optionalDataControl: showOptionalDataControlInTitle ? optionalDataControl : void 0
}
),
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
ArrayFieldDescriptionTemplate,
{
fieldPathId,
description: uiOptions.description || schema.description,
schema,
uiSchema,
registry
}
),
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_Container.default, { fluid: true, className: "p-0 m-0", children: [
!showOptionalDataControlInTitle ? optionalDataControl : void 0,
items,
canAdd && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_Container.default, { className: "", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_Row2.default, { className: "mt-2", children: [
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_Col2.default, { xs: 9, md: 10, lg: 11 }),
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_Col2.default, { xs: 3, md: 2, lg: 1, className: "py-4", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
AddButton2,
{
id: (0, import_utils3.buttonId)(fieldPathId, "add"),
className: "rjsf-array-item-add",
onClick: onAddClick,
disabled: disabled || readonly,
uiSchema,
registry
}
) })
] }) })
] }, `array-item-list-${fieldPathId.$id}`)
] }) }) });
}
// src/BaseInputTemplate/BaseInputTemplate.tsx
var import_react = require("react");
var import_Form = __toESM(require("react-bootstrap/Form"), 1);
var import_utils4 = require("@rjsf/utils");
var import_core = require("@rjsf/core");
var import_jsx_runtime4 = require("react/jsx-runtime");
function BaseInputTemplate({
id,
htmlName,
placeholder,
required,
readonly,
disabled,
type,
value,
onChange,
onChangeOverride,
onBlur,
onFocus,
autofocus,
options,
schema,
rawErrors = [],
children,
extraProps,
registry
}) {
const { ClearButton: ClearButton2 } = registry.templates.ButtonTemplates;
const inputProps = {
...extraProps,
...(0, import_utils4.getInputProps)(schema, type, options)
};
const _onChange = ({ target: { value: value2 } }) => onChange(value2 === "" ? options.emptyValue : value2);
const _onBlur = ({ target }) => onBlur(id, target && target.value);
const _onFocus = ({ target }) => onFocus(id, target && target.value);
const _onClear = (0, import_react.useCallback)(
(e) => {
e.preventDefault();
e.stopPropagation();
onChange(options.emptyValue ?? "");
},
[onChange, options.emptyValue]
);
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
import_Form.default.Control,
{
id,
name: htmlName || id,
placeholder,
autoFocus: autofocus,
required,
disabled,
readOnly: readonly,
className: rawErrors.length > 0 ? "is-invalid" : "",
list: schema.examples ? (0, import_utils4.examplesId)(id) : void 0,
...inputProps,
value: value || value === 0 ? value : "",
onChange: onChangeOverride || _onChange,
onBlur: _onBlur,
onFocus: _onFocus,
"aria-describedby": (0, import_utils4.ariaDescribedByIds)(id, !!schema.examples)
}
),
options.allowClearTextInputs && !readonly && !disabled && value && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ClearButton2, { registry, onClick: _onClear }),
children,
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core.SchemaExamples, { id, schema })
] });
}
// src/DescriptionField/DescriptionField.tsx
var import_core2 = require("@rjsf/core");
var import_jsx_runtime5 = require("react/jsx-runtime");
function DescriptionField({ id, description, registry, uiSchema }) {
if (!description) {
return null;
}
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { id, className: "mb-3", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_core2.RichDescription, { description, registry, uiSchema }) }) });
}
// src/ErrorList/ErrorList.tsx
var import_Card = __toESM(require("react-bootstrap/Card"), 1);
var import_ListGroup = __toESM(require("react-bootstrap/ListGroup"), 1);
var import_utils5 = require("@rjsf/utils");
var import_jsx_runtime6 = require("react/jsx-runtime");
function ErrorList({
errors,
registry
}) {
const { translateString } = registry;
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_Card.default, { border: "danger", className: "mb-4", children: [
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_Card.default.Header, { className: "alert-danger", children: translateString(import_utils5.TranslatableString.ErrorsLabel) }),
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_Card.default.Body, { className: "p-0", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_ListGroup.default, { children: errors.map((error, i) => {
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_ListGroup.default.Item, { className: "border-0", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { children: error.stack }) }, i);
}) }) })
] });
}
// src/IconButton/IconButton.tsx
var import_utils6 = require("@rjsf/utils");
var import_Button2 = __toESM(require("react-bootstrap/Button"), 1);
var import_IoIosCopy = require("@react-icons/all-files/io/IoIosCopy");
var import_IoIosRemove = require("@react-icons/all-files/io/IoIosRemove");
var import_AiOutlineArrowUp = require("@react-icons/all-files/ai/AiOutlineArrowUp");
var import_AiOutlineArrowDown = require("@react-icons/all-files/ai/AiOutlineArrowDown");
var import_IoMdClose = require("@react-icons/all-files/io/IoMdClose");
var import_jsx_runtime7 = require("react/jsx-runtime");
function IconButton(props) {
const { icon, iconType, className, uiSchema, registry, ...otherProps } = props;
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_Button2.default, { ...otherProps, variant: props.variant || "light", size: "sm", children: icon });
}
function CopyButton(props) {
const {
registry: { translateString }
} = props;
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(IconButton, { title: translateString(import_utils6.TranslatableString.CopyButton), ...props, icon: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_IoIosCopy.IoIosCopy, {}) });
}
function MoveDownButton(props) {
const {
registry: { translateString }
} = props;
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(IconButton, { title: translateString(import_utils6.TranslatableString.MoveDownButton), ...props, icon: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_AiOutlineArrowDown.AiOutlineArrowDown, {}) });
}
function MoveUpButton(props) {
const {
registry: { translateString }
} = props;
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(IconButton, { title: translateString(import_utils6.TranslatableString.MoveUpButton), ...props, icon: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_AiOutlineArrowUp.AiOutlineArrowUp, {}) });
}
function RemoveButton(props) {
const {
registry: { translateString }
} = props;
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
IconButton,
{
title: translateString(import_utils6.TranslatableString.RemoveButton),
variant: "danger",
...props,
icon: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_IoIosRemove.IoIosRemove, {})
}
);
}
function ClearButton(props) {
const {
registry: { translateString }
} = props;
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(IconButton, { title: translateString(import_utils6.TranslatableString.ClearButton), ...props, icon: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_IoMdClose.IoMdClose, {}) });
}
// src/FieldErrorTemplate/FieldErrorTemplate.tsx
var import_utils7 = require("@rjsf/utils");
var import_ListGroup2 = __toESM(require("react-bootstrap/ListGroup"), 1);
var import_jsx_runtime8 = require("react/jsx-runtime");
function FieldErrorTemplate(props) {
const { errors = [], fieldPathId } = props;
if (errors.length === 0) {
return null;
}
const id = (0, import_utils7.errorId)(fieldPathId);
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_ListGroup2.default, { as: "ul", id, children: errors.map((error, i) => {
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_ListGroup2.default.Item, { as: "li", className: "border-0 m-0 p-0", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("small", { className: "m-0 text-danger", children: error }) }, i);
}) });
}
// src/FieldHelpTemplate/FieldHelpTemplate.tsx
var import_utils8 = require("@rjsf/utils");
var import_core3 = require("@rjsf/core");
var import_Form2 = __toESM(require("react-bootstrap/Form"), 1);
var import_jsx_runtime9 = require("react/jsx-runtime");
function FieldHelpTemplate(props) {
const { fieldPathId, help, uiSchema, registry, hasErrors } = props;
if (!help) {
return null;
}
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_Form2.default.Text, { id: (0, import_utils8.helpId)(fieldPathId), className: hasErrors ? "text-danger" : "text-muted", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core3.RichHelp, { help, registry, uiSchema }) });
}
// src/FieldTemplate/FieldTemplate.tsx
var import_utils9 = require("@rjsf/utils");
var import_Form3 = __toESM(require("react-bootstrap/Form"), 1);
var import_jsx_runtime10 = require("react/jsx-runtime");
function FieldTemplate({
id,
children,
displayLabel,
rawErrors = [],
errors,
help,
description,
rawDescription,
classNames,
style,
disabled,
label,
hidden,
onKeyRename,
onKeyRenameBlur,
onRemoveProperty,
readonly,
required,
schema,
uiSchema,
registry
}) {
const uiOptions = (0, import_utils9.getUiOptions)(uiSchema);
const WrapIfAdditionalTemplate2 = (0, import_utils9.getTemplate)(
"WrapIfAdditionalTemplate",
registry,
uiOptions
);
if (hidden) {
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "hidden", children });
}
const isCheckbox = uiOptions.widget === "checkbox";
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
WrapIfAdditionalTemplate2,
{
classNames,
style,
disabled,
id,
label,
displayLabel,
rawDescription,
onKeyRename,
onKeyRenameBlur,
onRemoveProperty,
readonly,
required,
schema,
uiSchema,
registry,
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_Form3.default.Group, { children: [
displayLabel && !isCheckbox && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_Form3.default.Label, { htmlFor: id, className: rawErrors.length > 0 ? "text-danger" : "", children: [
label,
required ? "*" : null
] }),
children,
displayLabel && rawDescription && !isCheckbox && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_Form3.default.Text, { className: rawErrors.length > 0 ? "text-danger" : "text-muted", children: description }),
errors,
help
] })
}
);
}
// src/GridTemplate/GridTemplate.tsx
var import_Row3 = __toESM(require("react-bootstrap/Row"), 1);
var import_Col3 = __toESM(require("react-bootstrap/Col"), 1);
var import_jsx_runtime11 = require("react/jsx-runtime");
function GridTemplate(props) {
const { children, column, ...rest } = props;
if (column) {
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_Col3.default, { ...rest, children });
}
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_Row3.default, { ...rest, children });
}
// src/MultiSchemaFieldTemplate/MultiSchemaFieldTemplate.tsx
var import_Card2 = __toESM(require("react-bootstrap/Card"), 1);
var import_jsx_runtime12 = require("react/jsx-runtime");
function MultiSchemaFieldTemplate({ selector, optionSchemaField }) {
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_Card2.default, { style: { marginBottom: "1rem" }, children: [
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_Card2.default.Body, { children: selector }),
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_Card2.default.Body, { children: optionSchemaField })
] });
}
// src/ObjectFieldTemplate/ObjectFieldTemplate.tsx
var import_Row4 = __toESM(require("react-bootstrap/Row"), 1);
var import_Col4 = __toESM(require("react-bootstrap/Col"), 1);
var import_Container2 = __toESM(require("react-bootstrap/Container"), 1);
var import_utils10 = require("@rjsf/utils");
var import_jsx_runtime13 = require("react/jsx-runtime");
function ObjectFieldTemplate({
description,
title,
properties,
required,
uiSchema,
fieldPathId,
schema,
formData,
optionalDataControl,
onAddProperty,
disabled,
readonly,
registry
}) {
const uiOptions = (0, import_utils10.getUiOptions)(uiSchema);
const TitleFieldTemplate = (0, import_utils10.getTemplate)("TitleFieldTemplate", registry, uiOptions);
const DescriptionFieldTemplate = (0, import_utils10.getTemplate)(
"DescriptionFieldTemplate",
registry,
uiOptions
);
const showOptionalDataControlInTitle = !readonly && !disabled;
const {
ButtonTemplates: { AddButton: AddButton2 }
} = registry.templates;
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
title && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
TitleFieldTemplate,
{
id: (0, import_utils10.titleId)(fieldPathId),
title,
required,
schema,
uiSchema,
registry,
optionalDataControl: showOptionalDataControlInTitle ? optionalDataControl : void 0
}
),
description && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
DescriptionFieldTemplate,
{
id: (0, import_utils10.descriptionId)(fieldPathId),
description,
schema,
uiSchema,
registry
}
),
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_Container2.default, { fluid: true, className: "p-0", children: [
!showOptionalDataControlInTitle ? optionalDataControl : void 0,
properties.map((element, index) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_Row4.default, { style: { marginBottom: "10px" }, className: element.hidden ? "d-none" : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_Col4.default, { xs: 12, children: [
" ",
element.content
] }) }, index)),
(0, import_utils10.canExpand)(schema, uiSchema, formData) ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_Row4.default, { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_Col4.default, { xs: { offset: 11, span: 1 }, className: "py-0.5", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
AddButton2,
{
id: (0, import_utils10.buttonId)(fieldPathId, "add"),
onClick: onAddProperty,
disabled: disabled || readonly,
className: "rjsf-object-property-expand",
uiSchema,
registry
}
) }) }) : null
] })
] });
}
// src/OptionalDataControlsTemplate/OptionalDataControlsTemplate.tsx
var import_BsPlus2 = require("@react-icons/all-files/bs/BsPlus");
var import_jsx_runtime14 = require("react/jsx-runtime");
function OptionalDataControlsTemplate(props) {
const { id, registry, label, onAddClick, onRemoveClick } = props;
if (onAddClick) {
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
IconButton,
{
id,
registry,
className: "rjsf-add-optional-data",
icon: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_BsPlus2.BsPlus, {}),
onClick: onAddClick,
title: label,
size: "sm",
variant: "secondary"
}
);
} else if (onRemoveClick) {
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
RemoveButton,
{
id,
registry,
className: "rjsf-remove-optional-data",
onClick: onRemoveClick,
title: label,
size: "sm",
variant: "secondary"
}
);
}
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("em", { id, children: label });
}
// src/SubmitButton/SubmitButton.tsx
var import_Button3 = __toESM(require("react-bootstrap/Button"), 1);
var import_utils11 = require("@rjsf/utils");
var import_jsx_runtime15 = require("react/jsx-runtime");
function SubmitButton(props) {
const { submitText, norender, props: submitButtonProps } = (0, import_utils11.getSubmitButtonOptions)(props.uiSchema);
if (norender) {
return null;
}
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Button3.default, { variant: "primary", type: "submit", ...submitButtonProps, children: submitText }) });
}
// src/TitleField/TitleField.tsx
var import_utils12 = require("@rjsf/utils");
var import_Row5 = __toESM(require("react-bootstrap/Row"), 1);
var import_Col5 = __toESM(require("react-bootstrap/Col"), 1);
var import_Container3 = __toESM(require("react-bootstrap/Container"), 1);
var import_jsx_runtime16 = require("react/jsx-runtime");
function TitleField({
id,
title,
uiSchema,
optionalDataControl
}) {
const uiOptions = (0, import_utils12.getUiOptions)(uiSchema);
let heading = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("h5", { children: uiOptions.title || title });
if (optionalDataControl) {
heading = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_Container3.default, { fluid: true, className: "p-0", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_Row5.default, { children: [
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_Col5.default, { xs: "11", children: heading }),
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_Col5.default, { xs: "1", style: { marginLeft: "-5px" }, children: optionalDataControl })
] }) });
}
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { id, className: "my-1", children: [
heading,
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("hr", { className: "border-0 bg-secondary mt-0", style: { height: "1px" } })
] });
}
// src/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.tsx
var import_utils13 = require("@rjsf/utils");
var import_Row6 = __toESM(require("react-bootstrap/Row"), 1);
var import_Col6 = __toESM(require("react-bootstrap/Col"), 1);
var import_Form4 = __toESM(require("react-bootstrap/Form"), 1);
var import_jsx_runtime17 = require("react/jsx-runtime");
function WrapIfAdditionalTemplate({
classNames,
style,
children,
disabled,
id,
label,
displayLabel,
onRemoveProperty,
onKeyRenameBlur,
rawDescription,
readonly,
required,
schema,
uiSchema,
registry
}) {
const { templates, translateString } = registry;
const { RemoveButton: RemoveButton2 } = templates.ButtonTemplates;
const keyLabel = translateString(import_utils13.TranslatableString.KeyLabel, [label]);
const additional = import_utils13.ADDITIONAL_PROPERTY_FLAG in schema;
const descPadding = rawDescription ? 1 : 0;
const descMargin = rawDescription ? -24 : 0;
if (!additional) {
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: classNames, style, children });
}
const keyId = `${id}-key`;
const margin = displayLabel ? 12 + descMargin : 0;
const padding = displayLabel ? 4 + descPadding : 1;
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_Row6.default, { className: classNames, style, children: [
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_Col6.default, { xs: 5, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_Form4.default.Group, { children: [
displayLabel && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_Form4.default.Label, { htmlFor: keyId, children: keyLabel }),
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
import_Form4.default.Control,
{
required,
defaultValue: label,
disabled: disabled || readonly,
id: keyId,
name: keyId,
onBlur: !readonly ? onKeyRenameBlur : void 0,
type: "text"
}
)
] }) }),
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_Col6.default, { xs: 6, children }),
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_Col6.default, { xs: 1, className: `py-${padding} d-grid gap-2`, style: { marginTop: `${margin}px`, maxHeight: `2.5rem` }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
RemoveButton2,
{
id: (0, import_utils13.buttonId)(id, "remove"),
className: "rjsf-object-property-remove w-100",
disabled: disabled || readonly,
onClick: onRemoveProperty,
uiSchema,
registry
}
) })
] }, keyId);
}
// src/Templates/Templates.ts
function generateTemplates() {
return {
ArrayFieldItemTemplate,
ArrayFieldTemplate,
BaseInputTemplate,
ButtonTemplates: {
AddButton,
CopyButton,
MoveDownButton,
MoveUpButton,
RemoveButton,
SubmitButton,
ClearButton
},
DescriptionFieldTemplate: DescriptionField,
ErrorListTemplate: ErrorList,
FieldErrorTemplate,
FieldHelpTemplate,
FieldTemplate,
GridTemplate,
MultiSchemaFieldTemplate,
ObjectFieldTemplate,
OptionalDataControlsTemplate,
TitleFieldTemplate: TitleField,
WrapIfAdditionalTemplate
};
}
var Templates_default = generateTemplates();
// src/CheckboxWidget/CheckboxWidget.tsx
var import_utils14 = require("@rjsf/utils");
var import_Form5 = __toESM(require("react-bootstrap/Form"), 1);
var import_jsx_runtime18 = require("react/jsx-runtime");
function CheckboxWidget(props) {
const {
id,
htmlName,
value,
disabled,
readonly,
label,
hideLabel,
schema,
autofocus,
options,
onChange,
onBlur,
onFocus,
registry,
uiSchema
} = props;
const required = (0, import_utils14.schemaRequiresTrueValue)(schema);
const DescriptionFieldTemplate = (0, import_utils14.getTemplate)(
"DescriptionFieldTemplate",
registry,
options
);
const _onChange = ({ target: { checked } }) => onChange(checked);
const _onBlur = ({ target }) => onBlur(id, target && target.checked);
const _onFocus = ({ target }) => onFocus(id, target && target.checked);
const description = options.description || schema.description;
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_Form5.default.Group, { className: disabled || readonly ? "disabled" : "", "aria-describedby": (0, import_utils14.ariaDescribedByIds)(id), children: [
!hideLabel && description && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
DescriptionFieldTemplate,
{
id: (0, import_utils14.descriptionId)(id),
description,
schema,
uiSchema,
registry
}
),
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
import_Form5.default.Check,
{
id,
name: htmlName || id,
label: (0, import_utils14.labelValue)(label, hideLabel || !label),
checked: typeof value === "undefined" ? false : value,
required,
disabled: disabled || readonly,
autoFocus: autofocus,
onChange: _onChange,
type: "checkbox",
onBlur: _onBlur,
onFocus: _onFocus
}
)
] });
}
// src/CheckboxesWidget/CheckboxesWidget.tsx
var import_Form6 = __toESM(require("react-bootstrap/Form"), 1);
var import_utils15 = require("@rjsf/utils");
var import_jsx_runtime19 = require("react/jsx-runtime");
function CheckboxesWidget({
id,
htmlName,
disabled,
options,
value,
autofocus,
readonly,
required,
onChange,
onBlur,
onFocus
}) {
const { enumOptions, enumDisabled, inline, emptyValue } = options;
const checkboxesValues = Array.isArray(value) ? value : [value];
const _onChange = (index) => ({ target: { checked } }) => {
if (checked) {
onChange((0, import_utils15.enumOptionsSelectValue)(index, checkboxesValues, enumOptions));
} else {
onChange((0, import_utils15.enumOptionsDeselectValue)(index, checkboxesValues, enumOptions));
}
};
const _onBlur = ({ target }) => onBlur(id, (0, import_utils15.enumOptionsValueForIndex)(target && target.value, enumOptions, emptyValue));
const _onFocus = ({ target }) => onFocus(id, (0, import_utils15.enumOptionsValueForIndex)(target && target.value, enumOptions, emptyValue));
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_Form6.default.Group, { children: Array.isArray(enumOptions) && enumOptions.map((option, index) => {
const checked = (0, import_utils15.enumOptionsIsSelected)(option.value, checkboxesValues);
const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1;
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
import_Form6.default.Check,
{
inline,
required,
checked,
className: "bg-transparent border-0",
type: "checkbox",
id: (0, import_utils15.optionId)(id, index),
name: htmlName || id,
label: option.label,
autoFocus: autofocus && index === 0,
onChange: _onChange(index),
onBlur: _onBlur,
onFocus: _onFocus,
disabled: disabled || itemDisabled || readonly,
"aria-describedby": (0, import_utils15.ariaDescribedByIds)(id)
},
option.value
);
}) });
}
// src/RadioWidget/RadioWidget.tsx
var import_Form7 = __toESM(require("react-bootstrap/Form"), 1);
var import_utils16 = require("@rjsf/utils");
var import_jsx_runtime20 = require("react/jsx-runtime");
function RadioWidget({
id,
htmlName,
options,
value,
required,
disabled,
readonly,
onChange,
onBlur,
onFocus
}) {
const { enumOptions, enumDisabled, emptyValue } = options;
const _onChange = ({ target: { value: value2 } }) => onChange((0, import_utils16.enumOptionsValueForIndex)(value2, enumOptions, emptyValue));
const _onBlur = ({ target }) => onBlur(id, (0, import_utils16.enumOptionsValueForIndex)(target && target.value, enumOptions, emptyValue));
const _onFocus = ({ target }) => onFocus(id, (0, import_utils16.enumOptionsValueForIndex)(target && target.value, enumOptions, emptyValue));
const inline = Boolean(options && options.inline);
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_Form7.default.Group, { className: "mb-0", children: Array.isArray(enumOptions) && enumOptions.map((option, index) => {
const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1;
const checked = (0, import_utils16.enumOptionsIsSelected)(option.value, value);
const radio = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
import_Form7.default.Check,
{
inline,
label: option.label,
id: (0, import_utils16.optionId)(id, index),
name: htmlName || id,
type: "radio",
disabled: disabled || itemDisabled || readonly,
checked,
required,
value: String(index),
onChange: _onChange,
onBlur: _onBlur,
onFocus: _onFocus,
"aria-describedby": (0, import_utils16.ariaDescribedByIds)(id)
},
index
);
return radio;
}) });
}
// src/RangeWidget/RangeWidget.tsx
var import_utils17 = require("@rjsf/utils");
var import_FormRange = __toESM(require("react-bootstrap/FormRange"), 1);
var import_jsx_runtime21 = require("react/jsx-runtime");
function RangeWidget(props) {
const { id, value, disabled, onChange, onBlur, onFocus, schema } = props;
const _onChange = ({ target: { value: value2 } }) => onChange(value2);
const _onBlur = ({ target: { value: value2 } }) => onBlur(id, value2);
const _onFocus = ({ target: { value: value2 } }) => onFocus(id, value2);
const rangeProps = {
value,
id,
name: id,
disabled,
onChange: _onChange,
onBlur: _onBlur,
onFocus: _onFocus,
...(0, import_utils17.rangeSpec)(schema)
};
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_FormRange.default, { ...rangeProps }),
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "range-view", children: value })
] });
}
// src/SelectWidget/SelectWidget.tsx
var import_FormSelect = __toESM(require("react-bootstrap/FormSelect"), 1);
var import_utils18 = require("@rjsf/utils");
var import_jsx_runtime22 = require("react/jsx-runtime");
function SelectWidget({
schema,
id,
htmlName,
options,
required,
disabled,
readonly,
value,
multiple,
autofocus,
onChange,
onBlur,
onFocus,
placeholder,
rawErrors = []
}) {
const { enumOptions, enumDisabled, emptyValue: optEmptyValue } = options;
const emptyValue = multiple ? [] : "";
function getValue(event, multiple2) {
if (multiple2) {
return [].slice.call(event.target.options).filter((o) => o.selected).map((o) => o.value);
} else {
return event.target.value;
}
}
const selectedIndexes = (0, import_utils18.enumOptionsIndexForValue)(value, enumOptions, multiple);
const showPlaceholderOption = !multiple && schema.default === void 0;
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
import_FormSelect.default,
{
id,
name: htmlName || id,
value: typeof selectedIndexes === "undefined" ? emptyValue : selectedIndexes,
required,
multiple,
disabled: disabled || readonly,
autoFocus: autofocus,
className: rawErrors.length > 0 ? "is-invalid" : "",
onBlur: onBlur && ((event) => {
const newValue = getValue(event, multiple);
onBlur(id, (0, import_utils18.enumOptionsValueForIndex)(newValue, enumOptions, optEmptyValue));
}),
onFocus: onFocus && ((event) => {
const newValue = getValue(event, multiple);
onFocus(id, (0, import_utils18.enumOptionsValueForIndex)(newValue, enumOptions, optEmptyValue));
}),
onChange: (event) => {
const newValue = getValue(event, multiple);
onChange((0, import_utils18.enumOptionsValueForIndex)(newValue, enumOptions, optEmptyValue));
},
"aria-describedby": (0, import_utils18.ariaDescribedByIds)(id),
children: [
showPlaceholderOption && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("option", { value: "", children: placeholder }),
enumOptions.map(({ value: value2, label }, i) => {
const disabled2 = Array.isArray(enumDisabled) && enumDisabled.indexOf(value2) != -1;
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("option", { id: label, value: String(i), disabled: disabled2, children: label }, i);
})
]
}
);
}
// src/TextareaWidget/TextareaWidget.tsx
var import_utils19 = require("@rjsf/utils");
var import_FormControl = __toESM(require("react-bootstrap/FormControl"), 1);
var import_InputGroup = __toESM(require("react-bootstrap/InputGroup"), 1);
var import_jsx_runtime23 = require("react/jsx-runtime");
function TextareaWidget({
id,
htmlName,
placeholder,
value,
required,
disabled,
autofocus,
readonly,
onBlur,
onFocus,
onChange,
options
}) {
const _onChange = ({ target: { value: value2 } }) => onChange(value2 === "" ? options.emptyValue : value2);
const _onBlur = ({ target }) => onBlur(id, target && target.value);
const _onFocus = ({ target }) => onFocus(id, target && target.value);
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_InputGroup.default, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
import_FormControl.default,
{
id,
name: htmlName || id,
as: "textarea",
placeholder,
disabled,
readOnly: readonly,
value,
required,
autoFocus: autofocus,
rows: options.rows || 5,
onChange: _onChange,
onBlur: _onBlur,
onFocus: _onFocus,
"aria-describedby": (0, import_utils19.ariaDescribedByIds)(id)
}
) });
}
// src/Widgets/Widgets.ts
function generateWidgets() {
return {
CheckboxWidget,
CheckboxesWidget,
RadioWidget,
RangeWidget,
SelectWidget,
TextareaWidget
};
}
var Widgets_default = generateWidgets();
// src/Theme/Theme.tsx
function generateTheme() {
return {
templates: generateTemplates(),
widgets: generateWidgets()
};
}
var Theme_default = generateTheme();
// src/Form/Form.tsx
function generateForm() {
return (0, import_core4.withTheme)(generateTheme());
}
var Form_default = generateForm();
// src/index.ts
var index_default = Form_default;
//# sourceMappingURL=index.cjs.map