@react-typed-forms/schemas 10.0.3 → 10.1.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.
@@ -0,0 +1,25 @@
1
+ import { FieldOption } from "../types";
2
+ import { Control } from "@react-typed-forms/core";
3
+ import React from "react";
4
+ export interface CheckRendererOptions {
5
+ className?: string;
6
+ entryClass?: string;
7
+ checkClass?: string;
8
+ labelClass?: string;
9
+ }
10
+ export declare function createRadioRenderer(options?: CheckRendererOptions): import("../renderers").DataRendererRegistration;
11
+ export declare function createCheckListRenderer(options?: CheckRendererOptions): import("../renderers").DataRendererRegistration;
12
+ export declare function CheckButtons({ control, options, labelClass, checkClass, readonly, entryClass, className, id, type, isChecked, setChecked, }: {
13
+ id?: string;
14
+ className?: string;
15
+ options?: FieldOption[] | null;
16
+ control: Control<any>;
17
+ entryClass?: string;
18
+ checkClass?: string;
19
+ labelClass?: string;
20
+ readonly?: boolean;
21
+ type: "checkbox" | "radio";
22
+ isChecked: (c: Control<any>, o: FieldOption) => boolean;
23
+ setChecked: (c: Control<any>, o: FieldOption, checked: boolean) => void;
24
+ }): React.JSX.Element;
25
+ export declare function setIncluded<A>(array: A[], elem: A, included: boolean): A[];
@@ -4,8 +4,8 @@ import { ActionRendererRegistration, AdornmentRendererRegistration, DataRenderer
4
4
  import { CSSProperties, ReactElement, ReactNode } from "react";
5
5
  import { FieldOption, GridRenderer } from "./types";
6
6
  import { SelectRendererOptions } from "./components/SelectDataRenderer";
7
- import { RadioRendererOptions } from "./components/RadioRenderer";
8
7
  import { DefaultArrayRendererOptions } from "./components/DefaultArrayRenderer";
8
+ import { CheckRendererOptions } from "./components/CheckRenderer";
9
9
  export interface DefaultRendererOptions {
10
10
  data?: DefaultDataRendererOptions;
11
11
  display?: DefaultDisplayRendererOptions;
@@ -39,7 +39,9 @@ interface DefaultDataRendererOptions {
39
39
  inputClass?: string;
40
40
  displayOnlyClass?: string;
41
41
  selectOptions?: SelectRendererOptions;
42
- radioOptions?: RadioRendererOptions;
42
+ checkOptions?: CheckRendererOptions;
43
+ radioOptions?: CheckRendererOptions;
44
+ checkListOptions?: CheckRendererOptions;
43
45
  booleanOptions?: FieldOption[];
44
46
  optionRenderer?: DataRendererRegistration;
45
47
  }
package/lib/index.d.ts CHANGED
@@ -13,7 +13,7 @@ export * from "./createFormRenderer";
13
13
  export * from "./components/DefaultDisplay";
14
14
  export * from "./components/ControlInput";
15
15
  export * from "./components/SelectDataRenderer";
16
- export * from "./components/RadioRenderer";
16
+ export * from "./components/CheckRenderer";
17
17
  export * from "./components/DefaultLayout";
18
18
  export * from "./components/DefaultDisplayOnly";
19
19
  export * from "./components/DefaultVisibility";
package/lib/index.js CHANGED
@@ -1751,7 +1751,11 @@ var defaultTailwindTheme = {
1751
1751
  errorClass: "text-sm text-danger-500"
1752
1752
  },
1753
1753
  data: {
1754
- displayOnlyClass: "flex flex-row items-center gap-2"
1754
+ displayOnlyClass: "flex flex-row items-center gap-2",
1755
+ checkOptions: {
1756
+ className: "flex items-center gap-4",
1757
+ entryClass: "flex gap-1 items-center"
1758
+ }
1755
1759
  }
1756
1760
  };
1757
1761
 
@@ -2024,32 +2028,113 @@ function createInputConversion(ft) {
2024
2028
  }
2025
2029
  }
2026
2030
 
2031
+ function createDefaultArrayRenderer(options) {
2032
+ return {
2033
+ render: function render(props, _ref) {
2034
+ var renderAction = _ref.renderAction;
2035
+ return /*#__PURE__*/React__default["default"].createElement(DefaultArrayRenderer, _extends({}, props, options, {
2036
+ renderAction: renderAction
2037
+ }));
2038
+ },
2039
+ type: "array"
2040
+ };
2041
+ }
2042
+ function DefaultArrayRenderer(props) {
2043
+ var _effect = core.useComponentTracking();
2044
+ try {
2045
+ var renderElement = props.renderElement,
2046
+ className = props.className,
2047
+ removableClass = props.removableClass,
2048
+ childClass = props.childClass,
2049
+ removableChildClass = props.removableChildClass,
2050
+ removeActionClass = props.removeActionClass,
2051
+ addActionClass = props.addActionClass,
2052
+ arrayControl = props.arrayControl,
2053
+ renderAction = props.renderAction,
2054
+ style = props.style;
2055
+ var _applyArrayLengthRest = applyArrayLengthRestrictions(props),
2056
+ addAction = _applyArrayLengthRest.addAction,
2057
+ removeAction = _applyArrayLengthRest.removeAction;
2058
+ return /*#__PURE__*/React__default["default"].createElement("div", {
2059
+ style: style
2060
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
2061
+ className: clsx__default["default"](className, removeAction && removableClass)
2062
+ }, /*#__PURE__*/React__default["default"].createElement(core.RenderElements, {
2063
+ control: arrayControl
2064
+ }, function (_, x) {
2065
+ return removeAction ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
2066
+ className: clsx__default["default"](childClass, removableChildClass)
2067
+ }, renderElement(x)), /*#__PURE__*/React__default["default"].createElement("div", {
2068
+ className: removeActionClass
2069
+ }, renderAction(removeAction(x)))) : /*#__PURE__*/React__default["default"].createElement("div", {
2070
+ className: childClass
2071
+ }, renderElement(x));
2072
+ })), addAction && /*#__PURE__*/React__default["default"].createElement("div", {
2073
+ className: addActionClass
2074
+ }, renderAction(addAction)));
2075
+ } finally {
2076
+ _effect();
2077
+ }
2078
+ }
2079
+
2027
2080
  function createRadioRenderer(options) {
2028
2081
  if (options === void 0) {
2029
2082
  options = {};
2030
2083
  }
2031
2084
  return createDataRenderer(function (p) {
2032
- return /*#__PURE__*/React__default["default"].createElement(RadioButtons, _extends({}, options, p, {
2085
+ return /*#__PURE__*/React__default["default"].createElement(CheckButtons, _extends({}, options, p, {
2033
2086
  className: rendererClass(p.className, options.className),
2034
- control: p.control
2087
+ isChecked: function isChecked(control, o) {
2088
+ return control.value == o.value;
2089
+ },
2090
+ setChecked: function setChecked(c, o) {
2091
+ return c.value = o.value;
2092
+ },
2093
+ control: p.control,
2094
+ type: "radio"
2035
2095
  }));
2036
2096
  }, {
2037
2097
  renderType: exports.DataRenderType.Radio
2038
2098
  });
2039
2099
  }
2040
- function RadioButtons(_ref) {
2100
+ function createCheckListRenderer(options) {
2101
+ if (options === void 0) {
2102
+ options = {};
2103
+ }
2104
+ return createDataRenderer(function (p) {
2105
+ return /*#__PURE__*/React__default["default"].createElement(CheckButtons, _extends({}, options, p, {
2106
+ className: rendererClass(p.className, options.className),
2107
+ isChecked: function isChecked(control, o) {
2108
+ var v = control.value;
2109
+ return Array.isArray(v) ? v.includes(o.value) : false;
2110
+ },
2111
+ setChecked: function setChecked(c, o, checked) {
2112
+ c.setValue(function (x) {
2113
+ return setIncluded(x != null ? x : [], o.value, checked);
2114
+ });
2115
+ },
2116
+ control: p.control,
2117
+ type: "checkbox"
2118
+ }));
2119
+ }, {
2120
+ renderType: exports.DataRenderType.CheckList
2121
+ });
2122
+ }
2123
+ function CheckButtons(_ref) {
2041
2124
  var _effect = core.useComponentTracking();
2042
2125
  try {
2043
2126
  var control = _ref.control,
2044
2127
  options = _ref.options,
2045
2128
  labelClass = _ref.labelClass,
2046
- radioClass = _ref.radioClass,
2129
+ checkClass = _ref.checkClass,
2047
2130
  readonly = _ref.readonly,
2048
2131
  entryClass = _ref.entryClass,
2049
2132
  className = _ref.className,
2050
- id = _ref.id;
2133
+ id = _ref.id,
2134
+ type = _ref.type,
2135
+ isChecked = _ref.isChecked,
2136
+ setChecked = _ref.setChecked;
2051
2137
  var disabled = control.disabled;
2052
- var canChange = !disabled && !readonly;
2053
2138
  var name = "r" + control.uniqueId;
2054
2139
  return /*#__PURE__*/React__default["default"].createElement("div", {
2055
2140
  className: className,
@@ -2059,19 +2144,22 @@ function RadioButtons(_ref) {
2059
2144
  return x.value != null;
2060
2145
  })
2061
2146
  }, function (o, i) {
2147
+ var checked = core.useComputed(function () {
2148
+ return isChecked(control, o);
2149
+ }).value;
2062
2150
  return /*#__PURE__*/React__default["default"].createElement("div", {
2063
2151
  key: i,
2064
2152
  className: entryClass
2065
2153
  }, /*#__PURE__*/React__default["default"].createElement("input", {
2066
2154
  id: name + "_" + i,
2067
- className: radioClass,
2068
- type: "radio",
2155
+ className: checkClass,
2156
+ type: type,
2069
2157
  name: name,
2070
2158
  readOnly: readonly,
2071
2159
  disabled: disabled,
2072
- checked: control.value == o.value,
2160
+ checked: checked,
2073
2161
  onChange: function onChange(x) {
2074
- return control.value = o.value;
2162
+ return setChecked(control, o, x.target.checked);
2075
2163
  }
2076
2164
  }), /*#__PURE__*/React__default["default"].createElement("label", {
2077
2165
  className: labelClass,
@@ -2082,54 +2170,17 @@ function RadioButtons(_ref) {
2082
2170
  _effect();
2083
2171
  }
2084
2172
  }
2085
-
2086
- function createDefaultArrayRenderer(options) {
2087
- return {
2088
- render: function render(props, _ref) {
2089
- var renderAction = _ref.renderAction;
2090
- return /*#__PURE__*/React__default["default"].createElement(DefaultArrayRenderer, _extends({}, props, options, {
2091
- renderAction: renderAction
2092
- }));
2093
- },
2094
- type: "array"
2095
- };
2096
- }
2097
- function DefaultArrayRenderer(props) {
2098
- var _effect = core.useComponentTracking();
2099
- try {
2100
- var renderElement = props.renderElement,
2101
- className = props.className,
2102
- removableClass = props.removableClass,
2103
- childClass = props.childClass,
2104
- removableChildClass = props.removableChildClass,
2105
- removeActionClass = props.removeActionClass,
2106
- addActionClass = props.addActionClass,
2107
- arrayControl = props.arrayControl,
2108
- renderAction = props.renderAction,
2109
- style = props.style;
2110
- var _applyArrayLengthRest = applyArrayLengthRestrictions(props),
2111
- addAction = _applyArrayLengthRest.addAction,
2112
- removeAction = _applyArrayLengthRest.removeAction;
2113
- return /*#__PURE__*/React__default["default"].createElement("div", {
2114
- style: style
2115
- }, /*#__PURE__*/React__default["default"].createElement("div", {
2116
- className: clsx__default["default"](className, removeAction && removableClass)
2117
- }, /*#__PURE__*/React__default["default"].createElement(core.RenderElements, {
2118
- control: arrayControl
2119
- }, function (_, x) {
2120
- return removeAction ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
2121
- className: clsx__default["default"](childClass, removableChildClass)
2122
- }, renderElement(x)), /*#__PURE__*/React__default["default"].createElement("div", {
2123
- className: removeActionClass
2124
- }, renderAction(removeAction(x)))) : /*#__PURE__*/React__default["default"].createElement("div", {
2125
- className: childClass
2126
- }, renderElement(x));
2127
- })), addAction && /*#__PURE__*/React__default["default"].createElement("div", {
2128
- className: addActionClass
2129
- }, renderAction(addAction)));
2130
- } finally {
2131
- _effect();
2173
+ function setIncluded(array, elem, included) {
2174
+ var already = array.includes(elem);
2175
+ if (included === already) {
2176
+ return array;
2177
+ }
2178
+ if (included) {
2179
+ return [].concat(array, [elem]);
2132
2180
  }
2181
+ return array.filter(function (e) {
2182
+ return e !== elem;
2183
+ });
2133
2184
  }
2134
2185
 
2135
2186
  function createDefaultActionRenderer(options) {
@@ -2214,11 +2265,13 @@ var DefaultBoolOptions = [{
2214
2265
  value: false
2215
2266
  }];
2216
2267
  function createDefaultDataRenderer(options) {
2268
+ var _options$radioOptions, _options$checkListOpt;
2217
2269
  if (options === void 0) {
2218
2270
  options = {};
2219
2271
  }
2220
2272
  var selectRenderer = createSelectRenderer(options.selectOptions);
2221
- var radioRenderer = createRadioRenderer(options.radioOptions);
2273
+ var radioRenderer = createRadioRenderer((_options$radioOptions = options.radioOptions) != null ? _options$radioOptions : options.checkOptions);
2274
+ var checkListRenderer = createCheckListRenderer((_options$checkListOpt = options.checkListOptions) != null ? _options$checkListOpt : options.checkOptions);
2222
2275
  var _optionRenderer$boole = _extends({
2223
2276
  optionRenderer: selectRenderer,
2224
2277
  booleanOptions: DefaultBoolOptions
@@ -2229,14 +2282,15 @@ function createDefaultDataRenderer(options) {
2229
2282
  displayOnlyClass = _optionRenderer$boole.displayOnlyClass;
2230
2283
  return createDataRenderer(function (props, renderers) {
2231
2284
  var fieldType = props.field.type;
2232
- if (props.toArrayProps) {
2285
+ var renderOptions = props.renderOptions;
2286
+ var renderType = renderOptions.type;
2287
+ if (props.toArrayProps && renderType !== exports.DataRenderType.CheckList) {
2233
2288
  return function (p) {
2234
2289
  return _extends({}, p, {
2235
2290
  children: renderers.renderArray(props.toArrayProps())
2236
2291
  });
2237
2292
  };
2238
2293
  }
2239
- var renderOptions = props.renderOptions;
2240
2294
  if (fieldType === exports.FieldType.Compound) {
2241
2295
  var _ref5;
2242
2296
  var groupOptions = (_ref5 = isDataGroupRenderer(renderOptions) ? renderOptions.groupOptions : undefined) != null ? _ref5 : {
@@ -2247,7 +2301,6 @@ function createDefaultDataRenderer(options) {
2247
2301
  renderOptions: groupOptions
2248
2302
  }));
2249
2303
  }
2250
- var renderType = renderOptions.type;
2251
2304
  if (fieldType == exports.FieldType.Any) return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, "No control for Any");
2252
2305
  if (isDisplayOnlyRenderer(renderOptions)) return function (p) {
2253
2306
  return _extends({}, p, {
@@ -2272,6 +2325,8 @@ function createDefaultDataRenderer(options) {
2272
2325
  return optionRenderer.render(props, renderers);
2273
2326
  }
2274
2327
  switch (renderType) {
2328
+ case exports.DataRenderType.CheckList:
2329
+ return checkListRenderer.render(props, renderers);
2275
2330
  case exports.DataRenderType.Dropdown:
2276
2331
  return selectRenderer.render(props, renderers);
2277
2332
  case exports.DataRenderType.Radio:
@@ -2530,6 +2585,7 @@ function isArrayRegistration(x) {
2530
2585
  }
2531
2586
 
2532
2587
  exports.AppendAdornmentPriority = AppendAdornmentPriority;
2588
+ exports.CheckButtons = CheckButtons;
2533
2589
  exports.ControlInput = ControlInput;
2534
2590
  exports.ControlRenderer = ControlRenderer;
2535
2591
  exports.DefaultBoolOptions = DefaultBoolOptions;
@@ -2538,7 +2594,6 @@ exports.DefaultDisplayOnly = DefaultDisplayOnly;
2538
2594
  exports.DefaultLayout = DefaultLayout;
2539
2595
  exports.DefaultSchemaInterface = DefaultSchemaInterface;
2540
2596
  exports.DefaultVisibility = DefaultVisibility;
2541
- exports.RadioButtons = RadioButtons;
2542
2597
  exports.SelectDataRenderer = SelectDataRenderer;
2543
2598
  exports.WrapAdornmentPriority = WrapAdornmentPriority;
2544
2599
  exports.addFieldOption = addFieldOption;
@@ -2561,6 +2616,7 @@ exports.controlTitle = controlTitle;
2561
2616
  exports.createAction = createAction;
2562
2617
  exports.createAdornmentRenderer = createAdornmentRenderer;
2563
2618
  exports.createArrayRenderer = createArrayRenderer;
2619
+ exports.createCheckListRenderer = createCheckListRenderer;
2564
2620
  exports.createDataRenderer = createDataRenderer;
2565
2621
  exports.createDefaultActionRenderer = createDefaultActionRenderer;
2566
2622
  exports.createDefaultAdornmentRenderer = createDefaultAdornmentRenderer;
@@ -2646,6 +2702,7 @@ exports.renderControlLayout = renderControlLayout;
2646
2702
  exports.renderLayoutParts = renderLayoutParts;
2647
2703
  exports.rendererClass = rendererClass;
2648
2704
  exports.resolveSchemas = resolveSchemas;
2705
+ exports.setIncluded = setIncluded;
2649
2706
  exports.stringField = stringField;
2650
2707
  exports.stringOptionsField = stringOptionsField;
2651
2708
  exports.textDisplayControl = textDisplayControl;