@jsonforms/material-renderers 3.0.0-alpha.1 → 3.0.0-beta.1

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.
Files changed (373) hide show
  1. package/docs/assets/js/search.json +1 -1
  2. package/docs/classes/combinatorproperties.html +2 -5
  3. package/docs/classes/materialanyofstringorenumcontrol.html +6 -9
  4. package/docs/classes/materialtablecontrol.html +4 -7
  5. package/docs/globals.html +878 -423
  6. package/docs/index.html +68 -59
  7. package/docs/interfaces/ajvprops.html +1 -4
  8. package/docs/interfaces/arraylayouttoolbarprops.html +5 -8
  9. package/docs/interfaces/categorizationstate.html +1 -4
  10. package/docs/interfaces/categorizationstepperstate.html +0 -3
  11. package/docs/interfaces/combinatorpropertiesprops.html +0 -3
  12. package/docs/interfaces/deletedialogprops.html +0 -3
  13. package/docs/interfaces/dispatchpropsofexpandpanel.html +3 -6
  14. package/docs/interfaces/emptytableprops.html +0 -3
  15. package/docs/interfaces/expandpanelprops.html +19 -22
  16. package/docs/interfaces/jsonformstheme.html +39 -49
  17. package/docs/interfaces/materialcategorizationlayoutrendererprops.html +5 -8
  18. package/docs/interfaces/materialcategorizationstepperlayoutrendererprops.html +1 -4
  19. package/docs/interfaces/materiallayoutrendererprops.html +0 -3
  20. package/docs/interfaces/materialtabletoolbarprops.html +9 -12
  21. package/docs/interfaces/muitextinputprops.html +2 -5
  22. package/docs/interfaces/nonemptycellcomponentprops.html +266 -0
  23. package/docs/interfaces/nonemptycellprops.html +0 -3
  24. package/docs/interfaces/nonemptyrowprops.html +80 -27
  25. package/docs/interfaces/ownoneofprops.html +0 -3
  26. package/docs/interfaces/ownpropsofexpandpanel.html +14 -17
  27. package/docs/interfaces/ownpropsofnonemptycell.html +0 -3
  28. package/docs/interfaces/statepropsofexpandpanel.html +16 -19
  29. package/docs/interfaces/tableheadercellprops.html +0 -3
  30. package/docs/interfaces/tablerowsprop.html +9 -12
  31. package/docs/interfaces/validationprops.html +2 -5
  32. package/docs/interfaces/withdeletedialogsupport.html +0 -3
  33. package/docs/interfaces/withinput.html +1 -4
  34. package/docs/interfaces/withoptionlabel.html +7 -7
  35. package/example/index.ts +7 -23
  36. package/lib/additional/ListWithDetailMasterItem.d.ts +3 -3
  37. package/lib/additional/MaterialLabelRenderer.d.ts +13 -13
  38. package/lib/additional/MaterialListWithDetailRenderer.d.ts +6 -6
  39. package/lib/additional/index.d.ts +4 -4
  40. package/lib/cells/CustomizableCells.d.ts +9 -9
  41. package/lib/cells/MaterialBooleanCell.d.ts +6 -6
  42. package/lib/cells/MaterialBooleanToggleCell.d.ts +6 -6
  43. package/lib/cells/MaterialDateCell.d.ts +6 -6
  44. package/lib/cells/MaterialEnumCell.d.ts +10 -10
  45. package/lib/cells/MaterialIntegerCell.d.ts +6 -6
  46. package/lib/cells/MaterialNumberCell.d.ts +10 -10
  47. package/lib/cells/MaterialNumberFormatCell.d.ts +10 -10
  48. package/lib/cells/MaterialOneOfEnumCell.d.ts +10 -10
  49. package/lib/cells/MaterialTextCell.d.ts +10 -10
  50. package/lib/cells/MaterialTimeCell.d.ts +6 -6
  51. package/lib/cells/index.d.ts +13 -13
  52. package/lib/complex/CombinatorProperties.d.ts +12 -12
  53. package/lib/complex/DeleteDialog.d.ts +11 -11
  54. package/lib/complex/MaterialAllOfRenderer.d.ts +6 -5
  55. package/lib/complex/MaterialAnyOfRenderer.d.ts +6 -5
  56. package/lib/complex/MaterialArrayControlRenderer.d.ts +5 -5
  57. package/lib/complex/MaterialEnumArrayRenderer.d.ts +6 -6
  58. package/lib/complex/MaterialObjectRenderer.d.ts +6 -5
  59. package/lib/complex/MaterialOneOfRenderer.d.ts +9 -8
  60. package/lib/complex/MaterialTableControl.d.ts +25 -10
  61. package/lib/complex/NoBorderTableCell.d.ts +3 -3
  62. package/lib/complex/TableToolbar.d.ts +15 -15
  63. package/lib/complex/ValidationIcon.d.ts +7 -11
  64. package/lib/complex/index.d.ts +19 -19
  65. package/lib/controls/MaterialAnyOfStringOrEnumControl.d.ts +9 -9
  66. package/lib/controls/MaterialBooleanControl.d.ts +6 -6
  67. package/lib/controls/MaterialBooleanToggleControl.d.ts +6 -6
  68. package/lib/controls/MaterialDateControl.d.ts +6 -9
  69. package/lib/controls/MaterialDateTimeControl.d.ts +6 -9
  70. package/lib/controls/MaterialEnumControl.d.ts +7 -6
  71. package/lib/controls/MaterialInputControl.d.ts +6 -9
  72. package/lib/controls/MaterialIntegerControl.d.ts +6 -6
  73. package/lib/controls/MaterialNativeControl.d.ts +6 -9
  74. package/lib/controls/MaterialNumberControl.d.ts +6 -6
  75. package/lib/controls/MaterialOneOfEnumControl.d.ts +7 -6
  76. package/lib/controls/MaterialOneOfRadioGroupControl.d.ts +6 -6
  77. package/lib/controls/MaterialRadioGroup.d.ts +3 -6
  78. package/lib/controls/MaterialRadioGroupControl.d.ts +6 -6
  79. package/lib/controls/MaterialSliderControl.d.ts +6 -9
  80. package/lib/controls/MaterialTextControl.d.ts +6 -6
  81. package/lib/controls/MaterialTimeControl.d.ts +6 -9
  82. package/lib/controls/index.d.ts +35 -35
  83. package/lib/index.d.ts +9 -9
  84. package/lib/jsonforms-react-material.cjs.js +1489 -0
  85. package/lib/jsonforms-react-material.cjs.js.map +1 -0
  86. package/lib/jsonforms-react-material.esm.js +1221 -0
  87. package/lib/jsonforms-react-material.esm.js.map +1 -0
  88. package/lib/layouts/ArrayToolbar.d.ts +9 -9
  89. package/lib/layouts/ExpandPanelRenderer.d.ts +51 -51
  90. package/lib/layouts/MaterialArrayLayout.d.ts +3 -13
  91. package/lib/layouts/MaterialArrayLayoutRenderer.d.ts +6 -6
  92. package/lib/layouts/MaterialCategorizationLayout.d.ts +17 -25
  93. package/lib/layouts/MaterialCategorizationStepperLayout.d.ts +13 -20
  94. package/lib/layouts/MaterialGroupLayout.d.ts +7 -7
  95. package/lib/layouts/MaterialHorizontalLayout.d.ts +10 -10
  96. package/lib/layouts/MaterialVerticalLayout.d.ts +10 -10
  97. package/lib/layouts/index.d.ts +6 -6
  98. package/lib/mui-controls/MuiAutocomplete.d.ts +9 -0
  99. package/lib/mui-controls/MuiCheckbox.d.ts +3 -3
  100. package/lib/mui-controls/MuiInputInteger.d.ts +3 -3
  101. package/lib/mui-controls/MuiInputNumber.d.ts +3 -3
  102. package/lib/mui-controls/MuiInputNumberFormat.d.ts +3 -3
  103. package/lib/mui-controls/MuiInputText.d.ts +9 -9
  104. package/lib/mui-controls/MuiInputTime.d.ts +3 -3
  105. package/lib/mui-controls/MuiSelect.d.ts +3 -3
  106. package/lib/mui-controls/MuiToggle.d.ts +3 -3
  107. package/lib/mui-controls/index.d.ts +7 -7
  108. package/lib/util/datejs.d.ts +3 -3
  109. package/lib/util/debounce.d.ts +1 -0
  110. package/lib/util/focus.d.ts +1 -0
  111. package/lib/util/index.d.ts +5 -3
  112. package/lib/util/layout.d.ts +15 -13
  113. package/lib/util/theme.d.ts +10 -10
  114. package/package.json +34 -28
  115. package/rollup.config.js +51 -0
  116. package/src/additional/ListWithDetailMasterItem.tsx +3 -6
  117. package/src/additional/MaterialLabelRenderer.tsx +1 -1
  118. package/src/additional/MaterialListWithDetailRenderer.tsx +1 -1
  119. package/src/cells/MaterialDateCell.tsx +1 -1
  120. package/src/cells/MaterialTimeCell.tsx +1 -0
  121. package/src/complex/CombinatorProperties.tsx +2 -2
  122. package/src/complex/DeleteDialog.tsx +2 -2
  123. package/src/complex/MaterialAllOfRenderer.tsx +3 -2
  124. package/src/complex/MaterialAnyOfRenderer.tsx +3 -2
  125. package/src/complex/MaterialArrayControlRenderer.tsx +1 -1
  126. package/src/complex/MaterialEnumArrayRenderer.tsx +4 -3
  127. package/src/complex/MaterialObjectRenderer.tsx +3 -2
  128. package/src/complex/MaterialOneOfRenderer.tsx +7 -7
  129. package/src/complex/MaterialTableControl.tsx +45 -37
  130. package/src/complex/NoBorderTableCell.tsx +10 -12
  131. package/src/complex/TableToolbar.tsx +9 -7
  132. package/src/complex/ValidationIcon.tsx +12 -19
  133. package/src/controls/MaterialAnyOfStringOrEnumControl.tsx +17 -14
  134. package/src/controls/MaterialBooleanControl.tsx +1 -1
  135. package/src/controls/MaterialBooleanToggleControl.tsx +1 -1
  136. package/src/controls/MaterialDateControl.tsx +87 -93
  137. package/src/controls/MaterialDateTimeControl.tsx +88 -96
  138. package/src/controls/MaterialEnumControl.tsx +12 -3
  139. package/src/controls/MaterialInputControl.tsx +65 -71
  140. package/src/controls/MaterialNativeControl.tsx +55 -59
  141. package/src/controls/MaterialOneOfEnumControl.tsx +13 -4
  142. package/src/controls/MaterialOneOfRadioGroupControl.tsx +4 -4
  143. package/src/controls/MaterialRadioGroup.tsx +73 -73
  144. package/src/controls/MaterialRadioGroupControl.tsx +1 -1
  145. package/src/controls/MaterialSliderControl.tsx +93 -88
  146. package/src/controls/MaterialTimeControl.tsx +87 -85
  147. package/src/layouts/ArrayToolbar.tsx +11 -7
  148. package/src/layouts/ExpandPanelRenderer.tsx +28 -32
  149. package/src/layouts/MaterialArrayLayout.tsx +73 -82
  150. package/src/layouts/MaterialArrayLayoutRenderer.tsx +1 -1
  151. package/src/layouts/MaterialCategorizationLayout.tsx +50 -67
  152. package/src/layouts/MaterialCategorizationStepperLayout.tsx +80 -88
  153. package/src/layouts/MaterialGroupLayout.tsx +1 -1
  154. package/src/{extended → mui-controls}/MuiAutocomplete.tsx +11 -9
  155. package/src/mui-controls/MuiCheckbox.tsx +2 -3
  156. package/src/mui-controls/MuiInputInteger.tsx +13 -10
  157. package/src/mui-controls/MuiInputNumber.tsx +10 -7
  158. package/src/mui-controls/MuiInputNumberFormat.tsx +9 -12
  159. package/src/mui-controls/MuiInputText.tsx +30 -21
  160. package/src/mui-controls/MuiInputTime.tsx +7 -5
  161. package/src/mui-controls/MuiSelect.tsx +4 -5
  162. package/src/mui-controls/MuiToggle.tsx +2 -3
  163. package/{lib/cells/MaterialNumberCell.js → src/util/debounce.ts} +20 -16
  164. package/{lib/util/index.js → src/util/focus.ts} +9 -7
  165. package/src/util/index.ts +2 -0
  166. package/src/util/layout.tsx +7 -8
  167. package/src/util/theme.ts +1 -1
  168. package/stats.html +3279 -0
  169. package/test/renderers/MaterialAllOfRenderer.test.tsx +1 -1
  170. package/test/renderers/MaterialAnyOfRenderer.test.tsx +15 -9
  171. package/test/renderers/MaterialAnyOfStringOrEnumControl.test.tsx +1 -1
  172. package/test/renderers/MaterialArrayControl.test.tsx +1 -1
  173. package/test/renderers/MaterialArrayLayout.test.tsx +39 -32
  174. package/test/renderers/MaterialBooleanCell.test.tsx +1 -1
  175. package/test/renderers/MaterialBooleanToggleCell.test.tsx +3 -2
  176. package/test/renderers/MaterialBooleanToggleControl.test.tsx +3 -2
  177. package/test/renderers/MaterialCategorizationLayout.test.tsx +76 -3
  178. package/test/renderers/MaterialCategorizationStepperLayout.test.tsx +79 -6
  179. package/test/renderers/MaterialDateCell.test.tsx +1 -1
  180. package/test/renderers/MaterialDateControl.test.tsx +5 -3
  181. package/test/renderers/MaterialDateTimeControl.test.tsx +5 -3
  182. package/test/renderers/MaterialEnumArrayRenderer.test.tsx +15 -7
  183. package/test/renderers/MaterialEnumCell.test.tsx +1 -1
  184. package/test/renderers/MaterialGroupLayout.test.tsx +1 -1
  185. package/test/renderers/MaterialInputControl.test.tsx +4 -4
  186. package/test/renderers/MaterialIntegerCell.test.tsx +42 -21
  187. package/test/renderers/MaterialLabelRenderer.test.tsx +1 -1
  188. package/test/renderers/MaterialLayouts.test.tsx +1 -1
  189. package/test/renderers/MaterialListWithDetailRenderer.test.tsx +2 -2
  190. package/test/renderers/MaterialNativeControl.test.tsx +2 -2
  191. package/test/renderers/MaterialNumberCell.test.tsx +46 -25
  192. package/test/renderers/MaterialObjectControl.test.tsx +1 -1
  193. package/test/renderers/MaterialOneOfEnumCell.test.tsx +1 -1
  194. package/test/renderers/MaterialOneOfRadioGroupControl.test.tsx +1 -1
  195. package/test/renderers/MaterialOneOfRenderer.test.tsx +17 -11
  196. package/test/renderers/MaterialRadioGroupControl.test.tsx +1 -1
  197. package/test/renderers/MaterialSliderControl.test.tsx +2 -2
  198. package/test/renderers/MaterialTextCell.test.tsx +47 -33
  199. package/test/renderers/MaterialTextControl.test.tsx +8 -4
  200. package/test/renderers/MaterialTimeCell.test.tsx +42 -21
  201. package/test/renderers/MaterialTimeControl.test.tsx +8 -6
  202. package/tsconfig.json +1 -2
  203. package/tsconfig.test.json +7 -0
  204. package/docs/classes/materialarraylayout.html +0 -777
  205. package/docs/classes/materialcategorizationlayoutrenderer.html +0 -786
  206. package/docs/classes/materialcategorizationstepperlayoutrenderer.html +0 -762
  207. package/docs/classes/materialdatecontrol.html +0 -825
  208. package/docs/classes/materialdatetimecontrol.html +0 -825
  209. package/docs/classes/materialinputcontrol.html +0 -825
  210. package/docs/classes/materialnativecontrol.html +0 -825
  211. package/docs/classes/materialradiogroup.html +0 -825
  212. package/docs/classes/materialslidercontrol.html +0 -825
  213. package/docs/classes/materialtimecontrol.html +0 -825
  214. package/docs/interfaces/materialarraylayoutstate.html +0 -157
  215. package/example/CustomAutocomplete.tsx +0 -54
  216. package/lib/additional/ListWithDetailMasterItem.js +0 -19
  217. package/lib/additional/ListWithDetailMasterItem.js.map +0 -1
  218. package/lib/additional/MaterialLabelRenderer.js +0 -47
  219. package/lib/additional/MaterialLabelRenderer.js.map +0 -1
  220. package/lib/additional/MaterialListWithDetailRenderer.js +0 -64
  221. package/lib/additional/MaterialListWithDetailRenderer.js.map +0 -1
  222. package/lib/additional/index.js +0 -34
  223. package/lib/additional/index.js.map +0 -1
  224. package/lib/cells/CustomizableCells.js +0 -45
  225. package/lib/cells/CustomizableCells.js.map +0 -1
  226. package/lib/cells/MaterialBooleanCell.js +0 -37
  227. package/lib/cells/MaterialBooleanCell.js.map +0 -1
  228. package/lib/cells/MaterialBooleanToggleCell.js +0 -38
  229. package/lib/cells/MaterialBooleanToggleCell.js.map +0 -1
  230. package/lib/cells/MaterialDateCell.js +0 -40
  231. package/lib/cells/MaterialDateCell.js.map +0 -1
  232. package/lib/cells/MaterialEnumCell.js +0 -39
  233. package/lib/cells/MaterialEnumCell.js.map +0 -1
  234. package/lib/cells/MaterialIntegerCell.js +0 -35
  235. package/lib/cells/MaterialIntegerCell.js.map +0 -1
  236. package/lib/cells/MaterialNumberCell.js.map +0 -1
  237. package/lib/cells/MaterialNumberFormatCell.js +0 -39
  238. package/lib/cells/MaterialNumberFormatCell.js.map +0 -1
  239. package/lib/cells/MaterialOneOfEnumCell.js +0 -39
  240. package/lib/cells/MaterialOneOfEnumCell.js.map +0 -1
  241. package/lib/cells/MaterialTextCell.js +0 -39
  242. package/lib/cells/MaterialTextCell.js.map +0 -1
  243. package/lib/cells/MaterialTimeCell.js +0 -35
  244. package/lib/cells/MaterialTimeCell.js.map +0 -1
  245. package/lib/cells/index.js +0 -60
  246. package/lib/cells/index.js.map +0 -1
  247. package/lib/complex/CombinatorProperties.js +0 -57
  248. package/lib/complex/CombinatorProperties.js.map +0 -1
  249. package/lib/complex/DeleteDialog.js +0 -41
  250. package/lib/complex/DeleteDialog.js.map +0 -1
  251. package/lib/complex/MaterialAllOfRenderer.js +0 -45
  252. package/lib/complex/MaterialAllOfRenderer.js.map +0 -1
  253. package/lib/complex/MaterialAnyOfRenderer.js +0 -49
  254. package/lib/complex/MaterialAnyOfRenderer.js.map +0 -1
  255. package/lib/complex/MaterialArrayControlRenderer.js +0 -55
  256. package/lib/complex/MaterialArrayControlRenderer.js.map +0 -1
  257. package/lib/complex/MaterialEnumArrayRenderer.js +0 -45
  258. package/lib/complex/MaterialEnumArrayRenderer.js.map +0 -1
  259. package/lib/complex/MaterialObjectRenderer.js +0 -49
  260. package/lib/complex/MaterialObjectRenderer.js.map +0 -1
  261. package/lib/complex/MaterialOneOfRenderer.js +0 -77
  262. package/lib/complex/MaterialOneOfRenderer.js.map +0 -1
  263. package/lib/complex/MaterialTableControl.js +0 -190
  264. package/lib/complex/MaterialTableControl.js.map +0 -1
  265. package/lib/complex/NoBorderTableCell.js +0 -41
  266. package/lib/complex/NoBorderTableCell.js.map +0 -1
  267. package/lib/complex/TableToolbar.js +0 -58
  268. package/lib/complex/TableToolbar.js.map +0 -1
  269. package/lib/complex/ValidationIcon.js +0 -48
  270. package/lib/complex/ValidationIcon.js.map +0 -1
  271. package/lib/complex/index.js +0 -47
  272. package/lib/complex/index.js.map +0 -1
  273. package/lib/controls/MaterialAnyOfStringOrEnumControl.js +0 -80
  274. package/lib/controls/MaterialAnyOfStringOrEnumControl.js.map +0 -1
  275. package/lib/controls/MaterialBooleanControl.js +0 -41
  276. package/lib/controls/MaterialBooleanControl.js.map +0 -1
  277. package/lib/controls/MaterialBooleanToggleControl.js +0 -41
  278. package/lib/controls/MaterialBooleanToggleControl.js.map +0 -1
  279. package/lib/controls/MaterialDateControl.js +0 -69
  280. package/lib/controls/MaterialDateControl.js.map +0 -1
  281. package/lib/controls/MaterialDateTimeControl.js +0 -71
  282. package/lib/controls/MaterialDateTimeControl.js.map +0 -1
  283. package/lib/controls/MaterialEnumControl.js +0 -36
  284. package/lib/controls/MaterialEnumControl.js.map +0 -1
  285. package/lib/controls/MaterialInputControl.js +0 -61
  286. package/lib/controls/MaterialInputControl.js.map +0 -1
  287. package/lib/controls/MaterialIntegerControl.js +0 -36
  288. package/lib/controls/MaterialIntegerControl.js.map +0 -1
  289. package/lib/controls/MaterialNativeControl.js +0 -55
  290. package/lib/controls/MaterialNativeControl.js.map +0 -1
  291. package/lib/controls/MaterialNumberControl.js +0 -36
  292. package/lib/controls/MaterialNumberControl.js.map +0 -1
  293. package/lib/controls/MaterialOneOfEnumControl.js +0 -36
  294. package/lib/controls/MaterialOneOfEnumControl.js.map +0 -1
  295. package/lib/controls/MaterialOneOfRadioGroupControl.js +0 -37
  296. package/lib/controls/MaterialOneOfRadioGroupControl.js.map +0 -1
  297. package/lib/controls/MaterialRadioGroup.js +0 -55
  298. package/lib/controls/MaterialRadioGroup.js.map +0 -1
  299. package/lib/controls/MaterialRadioGroupControl.js +0 -37
  300. package/lib/controls/MaterialRadioGroupControl.js.map +0 -1
  301. package/lib/controls/MaterialSliderControl.js +0 -74
  302. package/lib/controls/MaterialSliderControl.js.map +0 -1
  303. package/lib/controls/MaterialTextControl.js +0 -36
  304. package/lib/controls/MaterialTextControl.js.map +0 -1
  305. package/lib/controls/MaterialTimeControl.js +0 -66
  306. package/lib/controls/MaterialTimeControl.js.map +0 -1
  307. package/lib/controls/index.js +0 -91
  308. package/lib/controls/index.js.map +0 -1
  309. package/lib/extended/MaterialAutocompleteEnumControl.d.ts +0 -7
  310. package/lib/extended/MaterialAutocompleteEnumControl.js +0 -42
  311. package/lib/extended/MaterialAutocompleteEnumControl.js.map +0 -1
  312. package/lib/extended/MaterialAutocompleteOneOfEnumControl.d.ts +0 -7
  313. package/lib/extended/MaterialAutocompleteOneOfEnumControl.js +0 -42
  314. package/lib/extended/MaterialAutocompleteOneOfEnumControl.js.map +0 -1
  315. package/lib/extended/MuiAutocomplete.d.ts +0 -10
  316. package/lib/extended/MuiAutocomplete.js +0 -45
  317. package/lib/extended/MuiAutocomplete.js.map +0 -1
  318. package/lib/extended/index.d.ts +0 -10
  319. package/lib/extended/index.js +0 -48
  320. package/lib/extended/index.js.map +0 -1
  321. package/lib/index.js +0 -89
  322. package/lib/index.js.map +0 -1
  323. package/lib/jsonforms-material.js +0 -86
  324. package/lib/jsonforms-material.js.map +0 -1
  325. package/lib/layouts/ArrayToolbar.js +0 -27
  326. package/lib/layouts/ArrayToolbar.js.map +0 -1
  327. package/lib/layouts/ExpandPanelRenderer.js +0 -113
  328. package/lib/layouts/ExpandPanelRenderer.js.map +0 -1
  329. package/lib/layouts/MaterialArrayLayout.js +0 -66
  330. package/lib/layouts/MaterialArrayLayout.js.map +0 -1
  331. package/lib/layouts/MaterialArrayLayoutRenderer.js +0 -43
  332. package/lib/layouts/MaterialArrayLayoutRenderer.js.map +0 -1
  333. package/lib/layouts/MaterialCategorizationLayout.js +0 -88
  334. package/lib/layouts/MaterialCategorizationLayout.js.map +0 -1
  335. package/lib/layouts/MaterialCategorizationStepperLayout.js +0 -89
  336. package/lib/layouts/MaterialCategorizationStepperLayout.js.map +0 -1
  337. package/lib/layouts/MaterialGroupLayout.js +0 -52
  338. package/lib/layouts/MaterialGroupLayout.js.map +0 -1
  339. package/lib/layouts/MaterialHorizontalLayout.js +0 -51
  340. package/lib/layouts/MaterialHorizontalLayout.js.map +0 -1
  341. package/lib/layouts/MaterialVerticalLayout.js +0 -51
  342. package/lib/layouts/MaterialVerticalLayout.js.map +0 -1
  343. package/lib/layouts/index.js +0 -43
  344. package/lib/layouts/index.js.map +0 -1
  345. package/lib/mui-controls/MuiCheckbox.js +0 -40
  346. package/lib/mui-controls/MuiCheckbox.js.map +0 -1
  347. package/lib/mui-controls/MuiInputInteger.js +0 -41
  348. package/lib/mui-controls/MuiInputInteger.js.map +0 -1
  349. package/lib/mui-controls/MuiInputNumber.js +0 -41
  350. package/lib/mui-controls/MuiInputNumber.js.map +0 -1
  351. package/lib/mui-controls/MuiInputNumberFormat.js +0 -50
  352. package/lib/mui-controls/MuiInputNumberFormat.js.map +0 -1
  353. package/lib/mui-controls/MuiInputText.js +0 -64
  354. package/lib/mui-controls/MuiInputText.js.map +0 -1
  355. package/lib/mui-controls/MuiInputTime.js +0 -37
  356. package/lib/mui-controls/MuiInputTime.js.map +0 -1
  357. package/lib/mui-controls/MuiSelect.js +0 -38
  358. package/lib/mui-controls/MuiSelect.js.map +0 -1
  359. package/lib/mui-controls/MuiToggle.js +0 -39
  360. package/lib/mui-controls/MuiToggle.js.map +0 -1
  361. package/lib/mui-controls/index.js +0 -35
  362. package/lib/mui-controls/index.js.map +0 -1
  363. package/lib/util/datejs.js +0 -26
  364. package/lib/util/datejs.js.map +0 -1
  365. package/lib/util/index.js.map +0 -1
  366. package/lib/util/layout.js +0 -54
  367. package/lib/util/layout.js.map +0 -1
  368. package/lib/util/theme.js +0 -3
  369. package/lib/util/theme.js.map +0 -1
  370. package/src/extended/MaterialAutocompleteEnumControl.tsx +0 -55
  371. package/src/extended/MaterialAutocompleteOneOfEnumControl.tsx +0 -55
  372. package/src/extended/index.ts +0 -56
  373. package/webpack/webpack.build.js +0 -21
@@ -0,0 +1,1221 @@
1
+ import { createDefaultValue, Resolve, Paths, formatErrorMessage, errorsAt, rankWith, isObjectControl, findUISchema, isAllOfControl, resolveSubSchemas, findMatchingUISchema, createCombinatorRenderInfos, Generate, isAnyOfControl, isOneOfControl, getAjv, and, uiTypeIs, schemaMatches, hasType, schemaSubPathMatches, or, isObjectArrayControl, isPrimitiveArrayControl, isObjectArray, computeLabel, composePaths, isBooleanControl, optionIs, isDescriptionHidden, showAsRequired, isEnumControl, isDateControl, isTimeControl, isDateTimeControl, isRangeControl, isIntegerControl, isNumberControl, isStringControl, isOneOfEnumControl, withIncreasedRank, isVisible, update, moveUp, moveDown, getFirstPrimitiveProp, createId, removeId, isObjectArrayWithNesting, isNumberFormatControl, categorizationHasCategory } from '@jsonforms/core';
2
+ import React, { useMemo, Fragment, useState, useCallback, useEffect } from 'react';
3
+ import { DispatchCell, useJsonForms, withJsonFormsArrayLayoutProps, withJsonFormsDetailProps, JsonFormsDispatch, withJsonFormsAllOfProps, withJsonFormsAnyOfProps, withJsonFormsOneOfProps, withJsonFormsMultiEnumProps, withJsonFormsLayoutProps, withJsonFormsMasterListItemProps, withJsonFormsControlProps, withJsonFormsEnumProps, Control, withJsonFormsOneOfEnumProps, withJsonFormsContext, withJsonFormsCellProps, withJsonFormsEnumCellProps, withJsonFormsOneOfEnumCellProps } from '@jsonforms/react';
4
+ import isEmpty from 'lodash/isEmpty';
5
+ import union from 'lodash/union';
6
+ import startCase from 'lodash/startCase';
7
+ import range from 'lodash/range';
8
+ import { TableCell, styled as styled$1, Badge, Tooltip, TableRow, Grid, Typography, Hidden, IconButton, FormHelperText, Table, TableHead, TableBody, Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button, Tabs, Tab, Checkbox, Select, MenuItem, Input, useTheme, InputAdornment, FormControl, FormGroup, FormControlLabel, Toolbar, ListItem, ListItemAvatar, Avatar, ListItemText, ListItemSecondaryAction, List, Switch, InputLabel, Autocomplete, TextField, FormLabel, Slider, RadioGroup, Radio, Card, CardHeader, CardContent, AppBar, Accordion, AccordionSummary, AccordionDetails, Stepper, Step, StepButton } from '@mui/material';
9
+ import DeleteIcon from '@mui/icons-material/Delete';
10
+ import ArrowDownward from '@mui/icons-material/ArrowDownward';
11
+ import ArrowUpward from '@mui/icons-material/ArrowUpward';
12
+ import { styled } from '@mui/material/styles';
13
+ import AddIcon from '@mui/icons-material/Add';
14
+ import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';
15
+ import merge from 'lodash/merge';
16
+ import omit from 'lodash/omit';
17
+ import dayjs from 'dayjs';
18
+ import customParsing from 'dayjs/plugin/customParseFormat';
19
+ import debounce from 'lodash/debounce';
20
+ import Close from '@mui/icons-material/Close';
21
+ import map from 'lodash/map';
22
+ import { LocalizationProvider, DatePicker, DateTimePicker, TimePicker } from '@mui/lab';
23
+ import AdapterDayjs from '@mui/lab/AdapterDayjs';
24
+ import get from 'lodash/get';
25
+ import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
26
+ import Input$1 from '@mui/material/Input';
27
+
28
+ const StyledTableCell = styled(TableCell)({
29
+ borderBottom: 'none'
30
+ });
31
+ const NoBorderTableCell = ({ children, ...otherProps }) => (React.createElement(StyledTableCell, Object.assign({}, otherProps), children));
32
+
33
+ const StyledBadge = styled$1(Badge)(({ theme }) => ({
34
+ color: theme.palette.error.main
35
+ }));
36
+ const ValidationIcon = ({ errorMessages, id }) => {
37
+ return (React.createElement(Tooltip, { id: id, title: errorMessages },
38
+ React.createElement(StyledBadge, { badgeContent: errorMessages.split('\n').length },
39
+ React.createElement(ErrorOutlineIcon, { color: 'inherit' }))));
40
+ };
41
+
42
+ const fixedCellSmall = {
43
+ paddingLeft: 0,
44
+ paddingRight: 0,
45
+ };
46
+ const TableToolbar = React.memo(({ numColumns, errors, label, path, addItem, schema, enabled }) => (React.createElement(TableRow, null,
47
+ React.createElement(NoBorderTableCell, { colSpan: numColumns },
48
+ React.createElement(Grid, { container: true, justifyContent: 'flex-start', alignItems: 'center', spacing: 2 },
49
+ React.createElement(Grid, { item: true },
50
+ React.createElement(Typography, { variant: 'h6' }, label)),
51
+ React.createElement(Grid, { item: true },
52
+ React.createElement(Hidden, { smUp: errors.length === 0 },
53
+ React.createElement(Grid, { item: true },
54
+ React.createElement(ValidationIcon, { id: 'tooltip-validation', errorMessages: errors })))))),
55
+ enabled ? (React.createElement(NoBorderTableCell, { align: 'right', style: fixedCellSmall },
56
+ React.createElement(Tooltip, { id: 'tooltip-add', title: `Add to ${label}`, placement: 'bottom' },
57
+ React.createElement(IconButton, { "aria-label": `Add to ${label}`, onClick: addItem(path, createDefaultValue(schema)), size: 'large' },
58
+ React.createElement(AddIcon, null))))) : null)));
59
+
60
+ const styles = {
61
+ fixedCell: {
62
+ width: '150px',
63
+ height: '50px',
64
+ paddingLeft: 0,
65
+ paddingRight: 0,
66
+ textAlign: 'center'
67
+ },
68
+ fixedCellSmall: {
69
+ width: '50px',
70
+ height: '50px',
71
+ paddingLeft: 0,
72
+ paddingRight: 0,
73
+ textAlign: 'center'
74
+ }
75
+ };
76
+ const generateCells = (Cell, schema, rowPath, enabled, cells) => {
77
+ if (schema.type === 'object') {
78
+ return getValidColumnProps(schema).map(prop => {
79
+ const cellPath = Paths.compose(rowPath, prop);
80
+ const props = {
81
+ propName: prop,
82
+ schema,
83
+ title: schema.properties?.[prop]?.title ?? startCase(prop),
84
+ rowPath,
85
+ cellPath,
86
+ enabled,
87
+ cells
88
+ };
89
+ return React.createElement(Cell, Object.assign({ key: cellPath }, props));
90
+ });
91
+ }
92
+ else {
93
+ const props = {
94
+ schema,
95
+ rowPath,
96
+ cellPath: rowPath,
97
+ enabled
98
+ };
99
+ return React.createElement(Cell, Object.assign({ key: rowPath }, props));
100
+ }
101
+ };
102
+ const getValidColumnProps = (scopedSchema) => {
103
+ if (scopedSchema.type === 'object' && typeof scopedSchema.properties === 'object') {
104
+ return Object.keys(scopedSchema.properties).filter(prop => scopedSchema.properties[prop].type !== 'array');
105
+ }
106
+ return [''];
107
+ };
108
+ const EmptyTable = ({ numColumns }) => (React.createElement(TableRow, null,
109
+ React.createElement(NoBorderTableCell, { colSpan: numColumns },
110
+ React.createElement(Typography, { align: 'center' }, "No data"))));
111
+ const TableHeaderCell = React.memo(({ title }) => (React.createElement(TableCell, null, title)));
112
+ const ctxToNonEmptyCellProps = (ctx, ownProps) => {
113
+ const path = ownProps.rowPath +
114
+ (ownProps.schema.type === 'object' ? '.' + ownProps.propName : '');
115
+ const errors = formatErrorMessage(union(errorsAt(path, ownProps.schema, p => p === path)(ctx.core.errors).map((error) => error.message)));
116
+ return {
117
+ rowPath: ownProps.rowPath,
118
+ propName: ownProps.propName,
119
+ schema: ownProps.schema,
120
+ rootSchema: ctx.core.schema,
121
+ errors,
122
+ path,
123
+ enabled: ownProps.enabled,
124
+ cells: ownProps.cells || ctx.cells,
125
+ renderers: ownProps.renderers || ctx.renderers
126
+ };
127
+ };
128
+ const controlWithoutLabel = (scope) => ({
129
+ type: 'Control',
130
+ scope: scope,
131
+ label: false
132
+ });
133
+ const NonEmptyCellComponent = React.memo(({ path, propName, schema, rootSchema, errors, enabled, renderers, cells, isValid }) => {
134
+ return (React.createElement(NoBorderTableCell, null,
135
+ schema.properties ? (React.createElement(DispatchCell, { schema: Resolve.schema(schema, `#/properties/${propName}`, rootSchema), uischema: controlWithoutLabel(`#/properties/${propName}`), path: path, enabled: enabled, renderers: renderers, cells: cells })) : (React.createElement(DispatchCell, { schema: schema, uischema: controlWithoutLabel('#'), path: path, enabled: enabled, renderers: renderers, cells: cells })),
136
+ React.createElement(FormHelperText, { error: !isValid }, !isValid && errors)));
137
+ });
138
+ const NonEmptyCell = (ownProps) => {
139
+ const ctx = useJsonForms();
140
+ const emptyCellProps = ctxToNonEmptyCellProps(ctx, ownProps);
141
+ const isValid = isEmpty(emptyCellProps.errors);
142
+ return React.createElement(NonEmptyCellComponent, Object.assign({}, emptyCellProps, { isValid: isValid }));
143
+ };
144
+ const NonEmptyRowComponent = ({ childPath, schema, rowIndex, openDeleteDialog, moveUpCreator, moveDownCreator, enableUp, enableDown, showSortButtons, enabled, cells, path }) => {
145
+ const moveUp = useMemo(() => moveUpCreator(path, rowIndex), [moveUpCreator, path, rowIndex]);
146
+ const moveDown = useMemo(() => moveDownCreator(path, rowIndex), [moveDownCreator, path, rowIndex]);
147
+ return (React.createElement(TableRow, { key: childPath, hover: true },
148
+ generateCells(NonEmptyCell, schema, childPath, enabled, cells),
149
+ enabled ? (React.createElement(NoBorderTableCell, { style: showSortButtons ? styles.fixedCell : styles.fixedCellSmall },
150
+ React.createElement(Grid, { container: true, direction: 'row', justifyContent: 'flex-end', alignItems: 'center' },
151
+ showSortButtons ? (React.createElement(Fragment, null,
152
+ React.createElement(Grid, { item: true },
153
+ React.createElement(IconButton, { "aria-label": `Move up`, onClick: moveUp, disabled: !enableUp, size: 'large' },
154
+ React.createElement(ArrowUpward, null))),
155
+ React.createElement(Grid, { item: true },
156
+ React.createElement(IconButton, { "aria-label": `Move down`, onClick: moveDown, disabled: !enableDown, size: 'large' },
157
+ React.createElement(ArrowDownward, null))))) : null,
158
+ React.createElement(Grid, { item: true },
159
+ React.createElement(IconButton, { "aria-label": `Delete`, onClick: () => openDeleteDialog(childPath, rowIndex), size: 'large' },
160
+ React.createElement(DeleteIcon, null)))))) : null));
161
+ };
162
+ const NonEmptyRow = React.memo(NonEmptyRowComponent);
163
+ const TableRows = ({ data, path, schema, openDeleteDialog, moveUp, moveDown, uischema, config, enabled, cells }) => {
164
+ const isEmptyTable = data === 0;
165
+ if (isEmptyTable) {
166
+ return React.createElement(EmptyTable, { numColumns: getValidColumnProps(schema).length + 1 });
167
+ }
168
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
169
+ return (React.createElement(React.Fragment, null, range(data).map((index) => {
170
+ const childPath = Paths.compose(path, `${index}`);
171
+ return (React.createElement(NonEmptyRow, { key: childPath, childPath: childPath, rowIndex: index, schema: schema, openDeleteDialog: openDeleteDialog, moveUpCreator: moveUp, moveDownCreator: moveDown, enableUp: index !== 0, enableDown: index !== data - 1, showSortButtons: appliedUiSchemaOptions.showSortButtons, enabled: enabled, cells: cells, path: path }));
172
+ })));
173
+ };
174
+ class MaterialTableControl extends React.Component {
175
+ constructor() {
176
+ super(...arguments);
177
+ this.addItem = (path, value) => this.props.addItem(path, value);
178
+ }
179
+ render() {
180
+ const { label, path, schema, rootSchema, uischema, errors, openDeleteDialog, visible, enabled, cells } = this.props;
181
+ const controlElement = uischema;
182
+ const isObjectSchema = schema.type === 'object';
183
+ const headerCells = isObjectSchema
184
+ ? generateCells(TableHeaderCell, schema, path, enabled, cells)
185
+ : undefined;
186
+ return (React.createElement(Hidden, { xsUp: !visible },
187
+ React.createElement(Table, null,
188
+ React.createElement(TableHead, null,
189
+ React.createElement(TableToolbar, { errors: errors, label: label, addItem: this.addItem, numColumns: isObjectSchema ? headerCells.length : 1, path: path, uischema: controlElement, schema: schema, rootSchema: rootSchema, enabled: enabled }),
190
+ isObjectSchema && (React.createElement(TableRow, null,
191
+ headerCells,
192
+ enabled ? React.createElement(TableCell, null) : null))),
193
+ React.createElement(TableBody, null,
194
+ React.createElement(TableRows, Object.assign({ openDeleteDialog: openDeleteDialog }, this.props))))));
195
+ }
196
+ }
197
+
198
+ const DeleteDialog = React.memo(({ open, onClose, onConfirm, onCancel }) => {
199
+ return (React.createElement(Dialog, { open: open, keepMounted: true, onClose: onClose, "aria-labelledby": 'alert-dialog-confirmdelete-title', "aria-describedby": 'alert-dialog-confirmdelete-description' },
200
+ React.createElement(DialogTitle, { id: 'alert-dialog-confirmdelete-title' }, 'Confirm Deletion'),
201
+ React.createElement(DialogContent, null,
202
+ React.createElement(DialogContentText, { id: 'alert-dialog-confirmdelete-description' }, "Are you sure you want to delete the selected entry?")),
203
+ React.createElement(DialogActions, null,
204
+ React.createElement(Button, { onClick: onCancel, color: 'primary' }, "No"),
205
+ React.createElement(Button, { onClick: onConfirm, color: 'primary' }, "Yes"))));
206
+ });
207
+
208
+ const MaterialArrayControlRenderer = (props) => {
209
+ const [open, setOpen] = useState(false);
210
+ const [path, setPath] = useState(undefined);
211
+ const [rowData, setRowData] = useState(undefined);
212
+ const { removeItems, visible } = props;
213
+ const openDeleteDialog = useCallback((p, rowIndex) => {
214
+ setOpen(true);
215
+ setPath(p);
216
+ setRowData(rowIndex);
217
+ }, [setOpen, setPath, setRowData]);
218
+ const deleteCancel = useCallback(() => setOpen(false), [setOpen]);
219
+ const deleteConfirm = useCallback(() => {
220
+ const p = path.substring(0, path.lastIndexOf(('.')));
221
+ removeItems(p, [rowData])();
222
+ setOpen(false);
223
+ }, [setOpen, path, rowData]);
224
+ const deleteClose = useCallback(() => setOpen(false), [setOpen]);
225
+ return (React.createElement(Hidden, { xsUp: !visible },
226
+ React.createElement(MaterialTableControl, Object.assign({}, props, { openDeleteDialog: openDeleteDialog })),
227
+ React.createElement(DeleteDialog, { open: open, onCancel: deleteCancel, onConfirm: deleteConfirm, onClose: deleteClose })));
228
+ };
229
+ var MaterialArrayControlRenderer$1 = withJsonFormsArrayLayoutProps(MaterialArrayControlRenderer);
230
+
231
+ const MaterialObjectRenderer = ({ renderers, cells, uischemas, schema, label, path, visible, enabled, uischema, rootSchema }) => {
232
+ const detailUiSchema = useMemo(() => findUISchema(uischemas, schema, uischema.scope, path, 'Group', uischema, rootSchema), [uischemas, schema, uischema.scope, path, uischema, rootSchema]);
233
+ if (isEmpty(path)) {
234
+ detailUiSchema.type = 'VerticalLayout';
235
+ }
236
+ else {
237
+ detailUiSchema.label = label;
238
+ }
239
+ return (React.createElement(Hidden, { xsUp: !visible },
240
+ React.createElement(JsonFormsDispatch, { visible: visible, enabled: enabled, schema: schema, uischema: detailUiSchema, path: path, renderers: renderers, cells: cells })));
241
+ };
242
+ const materialObjectControlTester = rankWith(2, isObjectControl);
243
+ var MaterialObjectRenderer$1 = withJsonFormsDetailProps(MaterialObjectRenderer);
244
+
245
+ const MaterialAllOfRenderer = ({ schema, rootSchema, visible, renderers, cells, path, uischemas, uischema }) => {
246
+ const _schema = resolveSubSchemas(schema, rootSchema, 'allOf');
247
+ const delegateUISchema = findMatchingUISchema(uischemas)(_schema, uischema.scope, path);
248
+ if (delegateUISchema) {
249
+ return (React.createElement(Hidden, { xsUp: !visible },
250
+ React.createElement(JsonFormsDispatch, { schema: _schema, uischema: delegateUISchema, path: path, renderers: renderers, cells: cells })));
251
+ }
252
+ const allOfRenderInfos = createCombinatorRenderInfos(_schema.allOf, rootSchema, 'allOf', uischema, path, uischemas);
253
+ return (React.createElement(Hidden, { xsUp: !visible }, allOfRenderInfos.map((allOfRenderInfo, allOfIndex) => (React.createElement(JsonFormsDispatch, { key: allOfIndex, schema: allOfRenderInfo.schema, uischema: allOfRenderInfo.uischema, path: path, renderers: renderers, cells: cells })))));
254
+ };
255
+ const materialAllOfControlTester = rankWith(3, isAllOfControl);
256
+ var MaterialAllOfRenderer$1 = withJsonFormsAllOfProps(MaterialAllOfRenderer);
257
+
258
+ const isLayout = (uischema) => uischema.hasOwnProperty('elements');
259
+ class CombinatorProperties extends React.Component {
260
+ render() {
261
+ const { schema, combinatorKeyword, path } = this.props;
262
+ const otherProps = omit(schema, combinatorKeyword);
263
+ const foundUISchema = Generate.uiSchema(otherProps, 'VerticalLayout');
264
+ let isLayoutWithElements = false;
265
+ if (foundUISchema !== null && isLayout(foundUISchema)) {
266
+ isLayoutWithElements = foundUISchema.elements.length > 0;
267
+ }
268
+ if (isLayoutWithElements) {
269
+ return (React.createElement(JsonFormsDispatch, { schema: otherProps, path: path, uischema: foundUISchema }));
270
+ }
271
+ return null;
272
+ }
273
+ }
274
+
275
+ const MaterialAnyOfRenderer = ({ schema, rootSchema, indexOfFittingSchema, visible, path, renderers, cells, uischema, uischemas }) => {
276
+ const [selectedAnyOf, setSelectedAnyOf] = useState(indexOfFittingSchema || 0);
277
+ const handleChange = useCallback((_ev, value) => setSelectedAnyOf(value), [setSelectedAnyOf]);
278
+ const anyOf = 'anyOf';
279
+ const _schema = resolveSubSchemas(schema, rootSchema, anyOf);
280
+ const anyOfRenderInfos = createCombinatorRenderInfos(_schema.anyOf, rootSchema, anyOf, uischema, path, uischemas);
281
+ return (React.createElement(Hidden, { xsUp: !visible },
282
+ React.createElement(CombinatorProperties, { schema: _schema, combinatorKeyword: 'anyOf', path: path }),
283
+ React.createElement(Tabs, { value: selectedAnyOf, onChange: handleChange }, anyOfRenderInfos.map(anyOfRenderInfo => (React.createElement(Tab, { key: anyOfRenderInfo.label, label: anyOfRenderInfo.label })))),
284
+ anyOfRenderInfos.map((anyOfRenderInfo, anyOfIndex) => selectedAnyOf === anyOfIndex && (React.createElement(JsonFormsDispatch, { key: anyOfIndex, schema: anyOfRenderInfo.schema, uischema: anyOfRenderInfo.uischema, path: path, renderers: renderers, cells: cells })))));
285
+ };
286
+ const materialAnyOfControlTester = rankWith(3, isAnyOfControl);
287
+ var MaterialAnyOfRenderer$1 = withJsonFormsAnyOfProps(MaterialAnyOfRenderer);
288
+
289
+ const MaterialOneOfRenderer = ({ handleChange, schema, path, renderers, cells, rootSchema, id, visible, indexOfFittingSchema, uischema, uischemas, data }) => {
290
+ const [open, setOpen] = useState(false);
291
+ const [selectedIndex, setSelectedIndex] = useState(indexOfFittingSchema || 0);
292
+ const [newSelectedIndex, setNewSelectedIndex] = useState(0);
293
+ const handleClose = useCallback(() => setOpen(false), [setOpen]);
294
+ const cancel = useCallback(() => {
295
+ setOpen(false);
296
+ }, [setOpen]);
297
+ const _schema = resolveSubSchemas(schema, rootSchema, 'oneOf');
298
+ const oneOfRenderInfos = createCombinatorRenderInfos(_schema.oneOf, rootSchema, 'oneOf', uischema, path, uischemas);
299
+ const openNewTab = (newIndex) => {
300
+ handleChange(path, createDefaultValue(schema.oneOf[newIndex]));
301
+ setSelectedIndex(newIndex);
302
+ };
303
+ const confirm = useCallback(() => {
304
+ openNewTab(newSelectedIndex);
305
+ setOpen(false);
306
+ }, [handleChange, createDefaultValue, newSelectedIndex]);
307
+ const handleTabChange = useCallback((_event, newOneOfIndex) => {
308
+ setNewSelectedIndex(newOneOfIndex);
309
+ if (isEmpty(data)) {
310
+ openNewTab(newOneOfIndex);
311
+ }
312
+ else {
313
+ setOpen(true);
314
+ }
315
+ }, [setOpen, setSelectedIndex, data]);
316
+ return (React.createElement(Hidden, { xsUp: !visible },
317
+ React.createElement(CombinatorProperties, { schema: _schema, combinatorKeyword: 'oneOf', path: path }),
318
+ React.createElement(Tabs, { value: selectedIndex, onChange: handleTabChange }, oneOfRenderInfos.map(oneOfRenderInfo => React.createElement(Tab, { key: oneOfRenderInfo.label, label: oneOfRenderInfo.label }))),
319
+ oneOfRenderInfos.map((oneOfRenderInfo, oneOfIndex) => (selectedIndex === oneOfIndex && (React.createElement(JsonFormsDispatch, { key: oneOfIndex, schema: oneOfRenderInfo.schema, uischema: oneOfRenderInfo.uischema, path: path, renderers: renderers, cells: cells })))),
320
+ React.createElement(Dialog, { open: open, onClose: handleClose, "aria-labelledby": 'alert-dialog-title', "aria-describedby": 'alert-dialog-description' },
321
+ React.createElement(DialogTitle, { id: 'alert-dialog-title' }, 'Clear form?'),
322
+ React.createElement(DialogContent, null,
323
+ React.createElement(DialogContentText, { id: 'alert-dialog-description' }, "Your data will be cleared if you navigate away from this tab. Do you want to proceed?")),
324
+ React.createElement(DialogActions, null,
325
+ React.createElement(Button, { onClick: cancel, color: 'primary' }, "No"),
326
+ React.createElement(Button, { onClick: confirm, color: 'primary', autoFocus: true, id: `oneOf-${id}-confirm-yes` }, "Yes")))));
327
+ };
328
+ const materialOneOfControlTester = rankWith(3, isOneOfControl);
329
+ var MaterialOneOfRenderer$1 = withJsonFormsOneOfProps(MaterialOneOfRenderer);
330
+
331
+ const MuiCheckbox = React.memo((props) => {
332
+ const { data, className, id, enabled, uischema, path, handleChange, config } = props;
333
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
334
+ const inputProps = { autoFocus: !!appliedUiSchemaOptions.focus };
335
+ const checked = !!data;
336
+ return (React.createElement(Checkbox, { checked: checked, onChange: (_ev, isChecked) => handleChange(path, isChecked), className: className, id: id, disabled: !enabled, inputProps: inputProps }));
337
+ });
338
+
339
+ const MuiSelect = React.memo((props) => {
340
+ const { data, className, id, enabled, uischema, path, handleChange, options, config } = props;
341
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
342
+ return (React.createElement(Select, { className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, value: data !== undefined ? data : '', onChange: ev => handleChange(path, ev.target.value), fullWidth: true, variant: 'standard' }, [React.createElement(MenuItem, { value: '', key: 'empty' })].concat(options.map(optionValue => (React.createElement(MenuItem, { value: optionValue.value, key: optionValue.value }, optionValue.label))))));
343
+ });
344
+
345
+ dayjs.extend(customParsing);
346
+ const createOnChangeHandler = (path, handleChange, saveFormat) => (time) => {
347
+ if (!time) {
348
+ handleChange(path, undefined);
349
+ return;
350
+ }
351
+ const result = dayjs(time).format(saveFormat);
352
+ handleChange(path, result === 'Invalid Date' ? undefined : result);
353
+ };
354
+ const getData = (data, saveFormat) => {
355
+ if (!data) {
356
+ return null;
357
+ }
358
+ const dayjsData = dayjs(data, saveFormat);
359
+ if (dayjsData.toString() === 'Invalid Date') {
360
+ return null;
361
+ }
362
+ return dayjsData;
363
+ };
364
+
365
+ const renderLayoutElements = (elements, schema, path, enabled, renderers, cells) => {
366
+ return elements.map((child, index) => (React.createElement(Grid, { item: true, key: `${path}-${index}`, xs: true },
367
+ React.createElement(JsonFormsDispatch, { uischema: child, schema: schema, path: path, enabled: enabled, renderers: renderers, cells: cells }))));
368
+ };
369
+ const MaterialLayoutRendererComponent = ({ visible, elements, schema, path, enabled, direction, renderers, cells }) => {
370
+ if (isEmpty(elements)) {
371
+ return null;
372
+ }
373
+ else {
374
+ return (React.createElement(Hidden, { xsUp: !visible },
375
+ React.createElement(Grid, { container: true, direction: direction, spacing: direction === 'row' ? 2 : 0 }, renderLayoutElements(elements, schema, path, enabled, renderers, cells))));
376
+ }
377
+ };
378
+ const MaterialLayoutRenderer = React.memo(MaterialLayoutRendererComponent);
379
+ const withAjvProps = (Component) => (props) => {
380
+ const ctx = useJsonForms();
381
+ const ajv = getAjv({ jsonforms: { ...ctx } });
382
+ return (React.createElement(Component, Object.assign({}, props, { ajv: ajv })));
383
+ };
384
+
385
+ const eventToValue$2 = (ev) => ev.target.value;
386
+ const useDebouncedChange = (handleChange, defaultValue, data, path, eventToValueFunction = eventToValue$2, timeout = 300) => {
387
+ const [input, setInput] = useState(data ?? defaultValue);
388
+ useEffect(() => {
389
+ setInput(data ?? defaultValue);
390
+ }, [data]);
391
+ const debouncedUpdate = useCallback(debounce((newValue) => handleChange(path, newValue), timeout), [handleChange, path, timeout]);
392
+ const onChange = useCallback((ev) => {
393
+ const newValue = eventToValueFunction(ev);
394
+ setInput(newValue ?? defaultValue);
395
+ debouncedUpdate(newValue);
396
+ }, [debouncedUpdate, eventToValueFunction]);
397
+ const onClear = useCallback(() => { setInput(defaultValue); handleChange(path, undefined); }, [defaultValue, handleChange, path]);
398
+ return [input, onChange, onClear];
399
+ };
400
+
401
+ const useFocus = () => {
402
+ const [focused, setFocused] = useState(false);
403
+ const onFocus = useCallback(() => setFocused(true), []);
404
+ const onBlur = useCallback(() => setFocused(false), []);
405
+ return [focused, onFocus, onBlur];
406
+ };
407
+
408
+ const toNumber$1 = (value) => value === '' ? undefined : parseInt(value, 10);
409
+ const eventToValue$1 = (ev) => toNumber$1(ev.target.value);
410
+ const MuiInputInteger = React.memo((props) => {
411
+ const { data, className, id, enabled, uischema, path, handleChange, config } = props;
412
+ const inputProps = { step: '1' };
413
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
414
+ const [inputValue, onChange] = useDebouncedChange(handleChange, '', data, path, eventToValue$1);
415
+ return (React.createElement(Input, { type: 'number', value: inputValue, onChange: onChange, className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, inputProps: inputProps, fullWidth: true }));
416
+ });
417
+
418
+ const toNumber = (value) => value === '' ? undefined : parseFloat(value);
419
+ const eventToValue = (ev) => toNumber(ev.target.value);
420
+ const MuiInputNumber = React.memo((props) => {
421
+ const { data, className, id, enabled, uischema, path, handleChange, config } = props;
422
+ const inputProps = { step: '0.1' };
423
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
424
+ const [inputValue, onChange] = useDebouncedChange(handleChange, '', data, path, eventToValue);
425
+ return (React.createElement(Input, { type: 'number', value: inputValue, onChange: onChange, className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, inputProps: inputProps, fullWidth: true }));
426
+ });
427
+
428
+ const MuiInputNumberFormat = React.memo((props) => {
429
+ const { className, id, enabled, uischema, isValid, path, handleChange, schema, config } = props;
430
+ const maxLength = schema.maxLength;
431
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
432
+ let inputProps;
433
+ if (appliedUiSchemaOptions.restrict) {
434
+ inputProps = { maxLength: maxLength };
435
+ }
436
+ else {
437
+ inputProps = {};
438
+ }
439
+ const formattedNumber = props.toFormatted(props.data);
440
+ const validStringNumber = useCallback((ev) => props.fromFormatted(ev.currentTarget.value), [props.fromFormatted]);
441
+ const [inputValue, onChange] = useDebouncedChange(handleChange, '', formattedNumber, path, validStringNumber);
442
+ return (React.createElement(Input, { type: 'text', value: inputValue, onChange: onChange, className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, multiline: appliedUiSchemaOptions.multi, fullWidth: !appliedUiSchemaOptions.trim || maxLength === undefined, inputProps: inputProps, error: !isValid }));
443
+ });
444
+
445
+ const MuiInputText = React.memo((props) => {
446
+ const [showAdornment, setShowAdornment] = useState(false);
447
+ const { data, config, className, id, enabled, uischema, isValid, path, handleChange, schema, muiInputProps, inputComponent } = props;
448
+ const maxLength = schema.maxLength;
449
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
450
+ let inputProps;
451
+ if (appliedUiSchemaOptions.restrict) {
452
+ inputProps = { maxLength: maxLength };
453
+ }
454
+ else {
455
+ inputProps = {};
456
+ }
457
+ inputProps = merge(inputProps, muiInputProps);
458
+ if (appliedUiSchemaOptions.trim && maxLength !== undefined) {
459
+ inputProps.size = maxLength;
460
+ }
461
+ const [inputText, onChange, onClear] = useDebouncedChange(handleChange, '', data, path);
462
+ const onPointerEnter = () => setShowAdornment(true);
463
+ const onPointerLeave = () => setShowAdornment(false);
464
+ const theme = useTheme();
465
+ const closeStyle = {
466
+ background: theme.jsonforms?.input?.delete?.background || theme.palette.background.default,
467
+ borderRadius: '50%'
468
+ };
469
+ return (React.createElement(Input, { type: appliedUiSchemaOptions.format === 'password' ? 'password' : 'text', value: inputText, onChange: onChange, className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, multiline: appliedUiSchemaOptions.multi, fullWidth: !appliedUiSchemaOptions.trim || maxLength === undefined, inputProps: inputProps, error: !isValid, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, endAdornment: React.createElement(InputAdornment, { position: 'end', style: {
470
+ display: !showAdornment || !enabled || data === undefined ? 'none' : 'flex',
471
+ position: 'absolute',
472
+ right: 0
473
+ } },
474
+ React.createElement(IconButton, { "aria-label": 'Clear input field', onClick: onClear, size: 'large' },
475
+ React.createElement(Close, { style: closeStyle }))), inputComponent: inputComponent }));
476
+ });
477
+
478
+ const MuiInputTime = React.memo((props) => {
479
+ const { data, className, id, enabled, uischema, path, handleChange, config } = props;
480
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
481
+ const [inputValue, onChange] = useDebouncedChange(handleChange, '', data, path);
482
+ return (React.createElement(Input, { type: 'time', value: inputValue, onChange: onChange, className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, fullWidth: true }));
483
+ });
484
+
485
+ const MaterialEnumArrayRenderer = ({ schema, visible, errors, path, options, data, addItem, removeItem, handleChange, ...otherProps }) => {
486
+ return (React.createElement(Hidden, { xlUp: !visible },
487
+ React.createElement(FormControl, { component: 'fieldset' },
488
+ React.createElement(FormGroup, { row: true }, options.map((option, index) => {
489
+ const optionPath = Paths.compose(path, `${index}`);
490
+ const checkboxValue = data?.includes(option.value)
491
+ ? option.value
492
+ : undefined;
493
+ return (React.createElement(FormControlLabel, { id: option.value, key: option.value, control: React.createElement(MuiCheckbox, Object.assign({ key: 'checkbox-' + option.value, isValid: isEmpty(errors), path: optionPath, handleChange: (_childPath, newValue) => newValue
494
+ ? addItem(path, option.value)
495
+ : removeItem(path, option.value), data: checkboxValue, errors: errors, schema: schema, visible: visible }, otherProps)), label: startCase(option.label) }));
496
+ })),
497
+ React.createElement(FormHelperText, { error: true }, errors))));
498
+ };
499
+ const hasOneOfItems = (schema) => schema.oneOf !== undefined &&
500
+ schema.oneOf.length > 0 &&
501
+ schema.oneOf.every((entry) => {
502
+ return entry.const !== undefined;
503
+ });
504
+ const hasEnumItems = (schema) => schema.type === 'string' && schema.enum !== undefined;
505
+ const materialEnumArrayRendererTester = rankWith(5, and(uiTypeIs('Control'), and(schemaMatches(schema => hasType(schema, 'array') &&
506
+ !Array.isArray(schema.items) &&
507
+ schema.uniqueItems === true), schemaSubPathMatches('items', schema => {
508
+ return hasOneOfItems(schema) || hasEnumItems(schema);
509
+ }))));
510
+ var MaterialEnumArrayRenderer$1 = withJsonFormsMultiEnumProps(MaterialEnumArrayRenderer);
511
+
512
+ const materialArrayControlTester = rankWith(3, or(isObjectArrayControl, isPrimitiveArrayControl));
513
+
514
+ const materialLabelRendererTester = rankWith(1, uiTypeIs('Label'));
515
+ const MaterialLabelRenderer = ({ uischema, visible }) => {
516
+ const labelElement = uischema;
517
+ return (React.createElement(Hidden, { xsUp: !visible },
518
+ React.createElement(Typography, { variant: 'h6' }, labelElement.text !== undefined && labelElement.text !== null && labelElement.text)));
519
+ };
520
+ var MaterialLabelRenderer$1 = withJsonFormsLayoutProps(MaterialLabelRenderer);
521
+
522
+ const ArrayLayoutToolbar = React.memo(({ label, errors, addItem, path, createDefault }) => {
523
+ return (React.createElement(Toolbar, { disableGutters: true },
524
+ React.createElement(Grid, { container: true, alignItems: 'center', justifyContent: 'space-between' },
525
+ React.createElement(Grid, { item: true },
526
+ React.createElement(Typography, { variant: 'h6' }, label)),
527
+ React.createElement(Hidden, { smUp: errors.length === 0 },
528
+ React.createElement(Grid, { item: true },
529
+ React.createElement(ValidationIcon, { id: 'tooltip-validation', errorMessages: errors }))),
530
+ React.createElement(Grid, { item: true },
531
+ React.createElement(Grid, { container: true },
532
+ React.createElement(Grid, { item: true },
533
+ React.createElement(Tooltip, { id: 'tooltip-add', title: `Add to ${label}`, placement: 'bottom' },
534
+ React.createElement(IconButton, { "aria-label": `Add to ${label}`, onClick: addItem(path, createDefault()), size: 'large' },
535
+ React.createElement(AddIcon, null)))))))));
536
+ });
537
+
538
+ const ListWithDetailMasterItem = ({ index, childLabel, selected, handleSelect, removeItem, path }) => {
539
+ return (React.createElement(ListItem, { button: true, selected: selected, onClick: handleSelect(index) },
540
+ React.createElement(ListItemAvatar, null,
541
+ React.createElement(Avatar, { "aria-label": 'Index' }, index + 1)),
542
+ React.createElement(ListItemText, { primary: childLabel }),
543
+ React.createElement(ListItemSecondaryAction, null,
544
+ React.createElement(IconButton, { "aria-label": 'Delete', onClick: removeItem(path, index), size: 'large' },
545
+ React.createElement(DeleteIcon, null)))));
546
+ };
547
+ var ListWithDetailMasterItem$1 = withJsonFormsMasterListItemProps(ListWithDetailMasterItem);
548
+
549
+ const MaterialListWithDetailRenderer = ({ uischemas, schema, uischema, path, errors, visible, label, required, removeItems, addItem, data, renderers, cells, config }) => {
550
+ const [selectedIndex, setSelectedIndex] = useState(undefined);
551
+ const handleRemoveItem = useCallback((p, value) => () => {
552
+ removeItems(p, [value])();
553
+ if (selectedIndex === value) {
554
+ setSelectedIndex(undefined);
555
+ }
556
+ else if (selectedIndex > value) {
557
+ setSelectedIndex(selectedIndex - 1);
558
+ }
559
+ }, [removeItems, setSelectedIndex]);
560
+ const handleListItemClick = useCallback((index) => () => setSelectedIndex(index), [setSelectedIndex]);
561
+ const handleCreateDefaultValue = useCallback(() => createDefaultValue(schema), [createDefaultValue]);
562
+ const foundUISchema = useMemo(() => findUISchema(uischemas, schema, uischema.scope, path, undefined, uischema), [uischemas, schema, uischema.scope, path, uischema]);
563
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
564
+ return (React.createElement(Hidden, { xsUp: !visible },
565
+ React.createElement(ArrayLayoutToolbar, { label: computeLabel(label, required, appliedUiSchemaOptions.hideRequiredAsterisk), errors: errors, path: path, addItem: addItem, createDefault: handleCreateDefaultValue }),
566
+ React.createElement(Grid, { container: true, direction: 'row', spacing: 2 },
567
+ React.createElement(Grid, { item: true, xs: 3 },
568
+ React.createElement(List, null, data > 0 ? (map(range(data), index => (React.createElement(ListWithDetailMasterItem$1, { index: index, path: path, schema: schema, handleSelect: handleListItemClick, removeItem: handleRemoveItem, selected: selectedIndex === index, key: index })))) : (React.createElement("p", null, "No data")))),
569
+ React.createElement(Grid, { item: true, xs: true }, selectedIndex !== undefined ? (React.createElement(JsonFormsDispatch, { renderers: renderers, cells: cells, visible: visible, schema: schema, uischema: foundUISchema, path: composePaths(path, `${selectedIndex}`) })) : (React.createElement(Typography, { variant: 'h6' }, "No Selection"))))));
570
+ };
571
+ const materialListWithDetailTester = rankWith(4, and(uiTypeIs('ListWithDetail'), isObjectArray));
572
+ var MaterialListWithDetailRenderer$1 = withJsonFormsArrayLayoutProps(MaterialListWithDetailRenderer);
573
+
574
+ const MaterialBooleanControl = ({ data, visible, label, id, enabled, uischema, schema, rootSchema, handleChange, errors, path, config }) => {
575
+ return (React.createElement(Hidden, { xsUp: !visible },
576
+ React.createElement(FormControlLabel, { label: label, id: id, control: React.createElement(MuiCheckbox, { id: `${id}-input`, isValid: isEmpty(errors), data: data, enabled: enabled, visible: visible, path: path, uischema: uischema, schema: schema, rootSchema: rootSchema, handleChange: handleChange, errors: errors, config: config }) })));
577
+ };
578
+ const materialBooleanControlTester = rankWith(2, isBooleanControl);
579
+ var MaterialBooleanControl$1 = withJsonFormsControlProps(MaterialBooleanControl);
580
+
581
+ const MuiToggle = React.memo((props) => {
582
+ const { data, className, id, enabled, uischema, path, handleChange, config } = props;
583
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
584
+ const inputProps = { autoFocus: !!appliedUiSchemaOptions.focus };
585
+ const checked = !!data;
586
+ return (React.createElement(Switch, { checked: checked, onChange: (_ev, isChecked) => handleChange(path, isChecked), className: className, id: id, disabled: !enabled, inputProps: inputProps }));
587
+ });
588
+
589
+ const MaterialBooleanToggleControl = ({ data, visible, label, id, enabled, uischema, schema, rootSchema, handleChange, errors, path, config }) => {
590
+ return (React.createElement(Hidden, { xsUp: !visible },
591
+ React.createElement(FormControlLabel, { label: label, id: id, control: React.createElement(MuiToggle, { id: `${id}-input`, isValid: isEmpty(errors), data: data, enabled: enabled, visible: visible, path: path, uischema: uischema, schema: schema, rootSchema: rootSchema, handleChange: handleChange, errors: errors, config: config }) })));
592
+ };
593
+ const materialBooleanToggleControlTester = rankWith(3, and(isBooleanControl, optionIs('toggle', true)));
594
+ var MaterialBooleanToggleControl$1 = withJsonFormsControlProps(MaterialBooleanToggleControl);
595
+
596
+ const MaterialInputControl = (props) => {
597
+ const [focused, onFocus, onBlur] = useFocus();
598
+ const { id, description, errors, label, uischema, visible, required, config, input } = props;
599
+ const isValid = errors.length === 0;
600
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
601
+ const showDescription = !isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
602
+ const firstFormHelperText = showDescription
603
+ ? description
604
+ : !isValid
605
+ ? errors
606
+ : null;
607
+ const secondFormHelperText = showDescription && !isValid ? errors : null;
608
+ const InnerComponent = input;
609
+ return (React.createElement(Hidden, { xsUp: !visible },
610
+ React.createElement(FormControl, { fullWidth: !appliedUiSchemaOptions.trim, onFocus: onFocus, onBlur: onBlur, id: id, variant: 'standard' },
611
+ React.createElement(InputLabel, { htmlFor: id + '-input', error: !isValid, required: showAsRequired(required, appliedUiSchemaOptions.hideRequiredAsterisk) }, label),
612
+ React.createElement(InnerComponent, Object.assign({}, props, { id: id + '-input', isValid: isValid, visible: visible })),
613
+ React.createElement(FormHelperText, { error: !isValid && !showDescription }, firstFormHelperText),
614
+ React.createElement(FormHelperText, { error: !isValid }, secondFormHelperText))));
615
+ };
616
+
617
+ const MuiAutocomplete = (props) => {
618
+ const { data, className, id, enabled, uischema, path, handleChange, options, config, getOptionLabel, renderOption, filterOptions } = props;
619
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
620
+ const [inputValue, setInputValue] = React.useState(data ?? '');
621
+ const findOption = options.find(o => o.value === data) ?? null;
622
+ return (React.createElement(Autocomplete, { className: className, id: id, disabled: !enabled, value: findOption, onChange: (_event, newValue) => {
623
+ handleChange(path, newValue?.value);
624
+ }, inputValue: inputValue, onInputChange: (_event, newInputValue) => {
625
+ setInputValue(newInputValue);
626
+ }, autoHighlight: true, autoSelect: true, autoComplete: true, fullWidth: true, options: options, getOptionLabel: getOptionLabel || (option => option?.label), style: { marginTop: 16 }, renderInput: params => (React.createElement(Input, { style: { width: '100%' }, type: 'text', inputProps: params.inputProps, inputRef: params.InputProps.ref, autoFocus: appliedUiSchemaOptions.focus, disabled: !enabled })), renderOption: renderOption, filterOptions: filterOptions }));
627
+ };
628
+
629
+ const MaterialEnumControl = (props) => {
630
+ const { config, uischema } = props;
631
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
632
+ return (React.createElement(MaterialInputControl, Object.assign({}, props, { input: appliedUiSchemaOptions.autocomplete === false ? MuiSelect : MuiAutocomplete })));
633
+ };
634
+ const materialEnumControlTester = rankWith(2, isEnumControl);
635
+ var MaterialEnumControl$1 = withJsonFormsEnumProps(MaterialEnumControl);
636
+
637
+ const MaterialNativeControl = (props) => {
638
+ const [focused, onFocus, onBlur] = useFocus();
639
+ const { id, errors, label, schema, description, enabled, visible, required, path, handleChange, data, config } = props;
640
+ const isValid = errors.length === 0;
641
+ const appliedUiSchemaOptions = merge({}, config, props.uischema.options);
642
+ const [inputValue, onChange] = useDebouncedChange(handleChange, '', data, path);
643
+ const fieldType = appliedUiSchemaOptions.format ?? schema.format;
644
+ const showDescription = !isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
645
+ return (React.createElement(Hidden, { xsUp: !visible },
646
+ React.createElement(TextField, { required: showAsRequired(required, appliedUiSchemaOptions.hideRequiredAsterisk), id: id + '-input', label: label, type: fieldType, error: !isValid, disabled: !enabled, fullWidth: !appliedUiSchemaOptions.trim, onFocus: onFocus, onBlur: onBlur, helperText: !isValid ? errors : showDescription ? description : null, InputLabelProps: { shrink: true }, value: inputValue, onChange: onChange })));
647
+ };
648
+ const materialNativeControlTester = rankWith(2, or(isDateControl, isTimeControl));
649
+ var MaterialNativeControl$1 = withJsonFormsControlProps(MaterialNativeControl);
650
+
651
+ const MaterialDateControl = (props) => {
652
+ const [focused, onFocus, onBlur] = useFocus();
653
+ const { description, id, errors, label, uischema, visible, enabled, required, path, handleChange, data, config } = props;
654
+ const isValid = errors.length === 0;
655
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
656
+ const showDescription = !isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
657
+ const format = appliedUiSchemaOptions.dateFormat ?? 'YYYY-MM-DD';
658
+ const saveFormat = appliedUiSchemaOptions.dateSaveFormat ?? 'YYYY-MM-DD';
659
+ const firstFormHelperText = showDescription
660
+ ? description
661
+ : !isValid
662
+ ? errors
663
+ : null;
664
+ const secondFormHelperText = showDescription && !isValid ? errors : null;
665
+ const onChange = useMemo(() => createOnChangeHandler(path, handleChange, saveFormat), [path, handleChange, saveFormat]);
666
+ return (React.createElement(Hidden, { xsUp: !visible },
667
+ React.createElement(LocalizationProvider, { dateAdapter: AdapterDayjs },
668
+ React.createElement(DatePicker, { label: label, value: getData(data, saveFormat), clearable: true, onChange: onChange, inputFormat: format, disableMaskedInput: true, views: appliedUiSchemaOptions.views, disabled: !enabled, cancelText: appliedUiSchemaOptions.cancelLabel, clearText: appliedUiSchemaOptions.clearLabel, okText: appliedUiSchemaOptions.okLabel, renderInput: params => (React.createElement(TextField, Object.assign({}, params, { id: id + '-input', required: required && !appliedUiSchemaOptions.hideRequiredAsterisk, autoFocus: appliedUiSchemaOptions.focus, error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, inputProps: { ...params.inputProps, type: 'text' }, InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))) }),
669
+ React.createElement(FormHelperText, { error: !isValid && !showDescription }, firstFormHelperText),
670
+ React.createElement(FormHelperText, { error: !isValid }, secondFormHelperText))));
671
+ };
672
+ const materialDateControlTester = rankWith(4, isDateControl);
673
+ var MaterialDateControl$1 = withJsonFormsControlProps(MaterialDateControl);
674
+
675
+ const MaterialDateTimeControl = (props) => {
676
+ const [focused, onFocus, onBlur] = useFocus();
677
+ const { id, description, errors, label, uischema, visible, enabled, required, path, handleChange, data, config } = props;
678
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
679
+ const isValid = errors.length === 0;
680
+ const showDescription = !isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
681
+ const format = appliedUiSchemaOptions.dateTimeFormat ?? 'YYYY-MM-DD HH:mm';
682
+ const saveFormat = appliedUiSchemaOptions.dateTimeSaveFormat ?? undefined;
683
+ const firstFormHelperText = showDescription
684
+ ? description
685
+ : !isValid
686
+ ? errors
687
+ : null;
688
+ const secondFormHelperText = showDescription && !isValid ? errors : null;
689
+ const onChange = useMemo(() => createOnChangeHandler(path, handleChange, saveFormat), [path, handleChange, saveFormat]);
690
+ return (React.createElement(Hidden, { xsUp: !visible },
691
+ React.createElement(LocalizationProvider, { dateAdapter: AdapterDayjs },
692
+ React.createElement(DateTimePicker, { label: label, value: getData(data, saveFormat), clearable: true, onChange: onChange, inputFormat: format, disableMaskedInput: true, ampm: !!appliedUiSchemaOptions.ampm, views: appliedUiSchemaOptions.views, disabled: !enabled, cancelText: appliedUiSchemaOptions.cancelLabel, clearText: appliedUiSchemaOptions.clearLabel, okText: appliedUiSchemaOptions.okLabel, renderInput: params => (React.createElement(TextField, Object.assign({}, params, { id: id + '-input', required: required && !appliedUiSchemaOptions.hideRequiredAsterisk, autoFocus: appliedUiSchemaOptions.focus, error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, inputProps: { ...params.inputProps, type: 'text' }, InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))) }),
693
+ React.createElement(FormHelperText, { error: !isValid && !showDescription }, firstFormHelperText),
694
+ React.createElement(FormHelperText, { error: !isValid }, secondFormHelperText))));
695
+ };
696
+ const materialDateTimeControlTester = rankWith(2, isDateTimeControl);
697
+ var MaterialDateTimeControl$1 = withJsonFormsControlProps(MaterialDateTimeControl);
698
+
699
+ const MaterialTimeControl = (props) => {
700
+ const [focused, onFocus, onBlur] = useFocus();
701
+ const { id, description, errors, label, uischema, visible, enabled, required, path, handleChange, data, config } = props;
702
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
703
+ const isValid = errors.length === 0;
704
+ const showDescription = !isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
705
+ const format = appliedUiSchemaOptions.timeFormat ?? 'HH:mm';
706
+ const saveFormat = appliedUiSchemaOptions.timeSaveFormat ?? 'HH:mm:ss';
707
+ const firstFormHelperText = showDescription
708
+ ? description
709
+ : !isValid
710
+ ? errors
711
+ : null;
712
+ const secondFormHelperText = showDescription && !isValid ? errors : null;
713
+ const onChange = useMemo(() => createOnChangeHandler(path, handleChange, saveFormat), [path, handleChange, saveFormat]);
714
+ return (React.createElement(Hidden, { xsUp: !visible },
715
+ React.createElement(LocalizationProvider, { dateAdapter: AdapterDayjs },
716
+ React.createElement(TimePicker, { label: label, value: getData(data, saveFormat), clearable: true, onChange: onChange, inputFormat: format, disableMaskedInput: true, ampm: !!appliedUiSchemaOptions.ampm, views: appliedUiSchemaOptions.views, disabled: !enabled, cancelText: appliedUiSchemaOptions.cancelLabel, clearText: appliedUiSchemaOptions.clearLabel, okText: appliedUiSchemaOptions.okLabel, renderInput: params => (React.createElement(TextField, Object.assign({}, params, { id: id + '-input', required: required && !appliedUiSchemaOptions.hideRequiredAsterisk, autoFocus: appliedUiSchemaOptions.focus, error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, inputProps: { ...params.inputProps, type: 'text' }, InputLabelProps: data ? { shrink: true } : undefined, onFocus: onFocus, onBlur: onBlur, variant: 'standard' }))) }),
717
+ React.createElement(FormHelperText, { error: !isValid && !showDescription }, firstFormHelperText),
718
+ React.createElement(FormHelperText, { error: !isValid }, secondFormHelperText))));
719
+ };
720
+ const materialTimeControlTester = rankWith(4, isTimeControl);
721
+ var MaterialTimeControl$1 = withJsonFormsControlProps(MaterialTimeControl);
722
+
723
+ const MaterialSliderControl = (props) => {
724
+ const [focused, onFocus, onBlur] = useFocus();
725
+ const { id, data, description, enabled, errors, label, schema, handleChange, visible, path, required, config } = props;
726
+ const isValid = errors.length === 0;
727
+ const appliedUiSchemaOptions = merge({}, config, props.uischema.options);
728
+ const labelStyle = {
729
+ whiteSpace: 'nowrap',
730
+ overflow: 'hidden',
731
+ textOverflow: 'ellipsis',
732
+ width: '100%'
733
+ };
734
+ const rangeContainerStyle = {
735
+ display: 'flex'
736
+ };
737
+ const rangeItemStyle = {
738
+ flexGrow: '1'
739
+ };
740
+ const sliderStyle = {
741
+ marginTop: '7px'
742
+ };
743
+ const showDescription = !isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
744
+ const onChange = useCallback((_ev, value) => handleChange(path, Number(value)), [path, handleChange]);
745
+ return (React.createElement(Hidden, { xsUp: !visible },
746
+ React.createElement(FormControl, { fullWidth: !appliedUiSchemaOptions.trim, onFocus: onFocus, onBlur: onBlur, id: id },
747
+ React.createElement(FormLabel, { htmlFor: id, error: !isValid, component: 'legend', required: showAsRequired(required, appliedUiSchemaOptions.hideRequiredAsterisk) },
748
+ React.createElement(Typography, { id: id + '-typo', style: labelStyle, variant: 'caption' }, label)),
749
+ React.createElement("div", { style: rangeContainerStyle },
750
+ React.createElement(Typography, { style: rangeItemStyle, variant: 'caption', align: 'left' }, schema.minimum),
751
+ React.createElement(Typography, { style: rangeItemStyle, variant: 'caption', align: 'right' }, schema.maximum)),
752
+ React.createElement(Slider, { style: sliderStyle, min: schema.minimum, max: schema.maximum, value: Number(data || schema.default), onChange: onChange, id: id + '-input', disabled: !enabled, step: schema.multipleOf || 1 }),
753
+ React.createElement(FormHelperText, { error: !isValid }, !isValid ? errors : showDescription ? description : null))));
754
+ };
755
+ const materialSliderControlTester = rankWith(4, isRangeControl);
756
+ var MaterialSliderControl$1 = withJsonFormsControlProps(MaterialSliderControl);
757
+
758
+ const MaterialRadioGroup = (props) => {
759
+ const [focused, onFocus, onBlur] = useFocus();
760
+ const { config, id, label, required, description, errors, data, visible, options, handleChange, path, enabled } = props;
761
+ const isValid = errors.length === 0;
762
+ const appliedUiSchemaOptions = merge({}, config, props.uischema.options);
763
+ const showDescription = !isDescriptionHidden(visible, description, focused, appliedUiSchemaOptions.showUnfocusedDescription);
764
+ const onChange = (_ev, value) => handleChange(path, value);
765
+ return (React.createElement(Hidden, { xsUp: !visible },
766
+ React.createElement(FormControl, { component: 'fieldset', fullWidth: !appliedUiSchemaOptions.trim, onFocus: onFocus, onBlur: onBlur },
767
+ React.createElement(FormLabel, { htmlFor: id, error: !isValid, component: 'legend', required: showAsRequired(required, appliedUiSchemaOptions.hideRequiredAsterisk) }, label),
768
+ React.createElement(RadioGroup, { value: props.data, onChange: onChange, row: true }, options.map(option => (React.createElement(FormControlLabel, { value: option.value, key: option.label, control: React.createElement(Radio, { checked: data === option.value }), label: option.label, disabled: !enabled })))),
769
+ React.createElement(FormHelperText, { error: !isValid }, !isValid ? errors : showDescription ? description : null))));
770
+ };
771
+
772
+ const MaterialRadioGroupControl = (props) => {
773
+ return React.createElement(MaterialRadioGroup, Object.assign({}, props));
774
+ };
775
+ const materialRadioGroupControlTester = rankWith(20, and(isEnumControl, optionIs('format', 'radio')));
776
+ var MaterialRadioGroupControl$1 = withJsonFormsEnumProps(MaterialRadioGroupControl);
777
+
778
+ const MaterialIntegerControl = (props) => (React.createElement(MaterialInputControl, Object.assign({}, props, { input: MuiInputInteger })));
779
+ const materialIntegerControlTester = rankWith(2, isIntegerControl);
780
+ var MaterialIntegerControl$1 = withJsonFormsControlProps(MaterialIntegerControl);
781
+
782
+ const MaterialNumberControl = (props) => (React.createElement(MaterialInputControl, Object.assign({}, props, { input: MuiInputNumber })));
783
+ const materialNumberControlTester = rankWith(2, isNumberControl);
784
+ var MaterialNumberControl$1 = withJsonFormsControlProps(MaterialNumberControl);
785
+
786
+ const MaterialTextControl = (props) => (React.createElement(MaterialInputControl, Object.assign({}, props, { input: MuiInputText })));
787
+ const materialTextControlTester = rankWith(1, isStringControl);
788
+ var MaterialTextControl$1 = withJsonFormsControlProps(MaterialTextControl);
789
+
790
+ const findEnumSchema = (schemas) => schemas.find(s => s.enum !== undefined && (s.type === 'string' || s.type === undefined));
791
+ const findTextSchema = (schemas) => schemas.find(s => s.type === 'string' && s.enum === undefined);
792
+ const MuiAutocompleteInputText = (props) => {
793
+ const { data, config, className, id, enabled, uischema, isValid, path, handleChange, schema } = props;
794
+ const enumSchema = findEnumSchema(schema.anyOf);
795
+ const stringSchema = findTextSchema(schema.anyOf);
796
+ const maxLength = stringSchema.maxLength;
797
+ const appliedUiSchemaOptions = useMemo(() => merge({}, config, uischema.options), [config, uischema.options]);
798
+ const inputProps = useMemo(() => {
799
+ let propMemo = {};
800
+ if (appliedUiSchemaOptions.restrict) {
801
+ propMemo = { maxLength: maxLength };
802
+ }
803
+ if (appliedUiSchemaOptions.trim && maxLength !== undefined) {
804
+ propMemo.size = maxLength;
805
+ }
806
+ propMemo.list = props.id + 'datalist';
807
+ return propMemo;
808
+ }, [appliedUiSchemaOptions, props.id]);
809
+ const [inputText, onChange] = useDebouncedChange(handleChange, '', data, path);
810
+ const dataList = (React.createElement("datalist", { id: props.id + 'datalist' }, enumSchema.enum.map(optionValue => (React.createElement("option", { value: optionValue, key: optionValue })))));
811
+ return (React.createElement(Input, { type: 'text', value: inputText, onChange: onChange, className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, fullWidth: !appliedUiSchemaOptions.trim || maxLength === undefined, inputProps: inputProps, error: !isValid, endAdornment: dataList }));
812
+ };
813
+ class MaterialAnyOfStringOrEnumControl extends Control {
814
+ render() {
815
+ return (React.createElement(MaterialInputControl, Object.assign({}, this.props, { input: MuiAutocompleteInputText })));
816
+ }
817
+ }
818
+ const hasEnumAndText = (schemas) => {
819
+ const enumSchema = findEnumSchema(schemas);
820
+ const stringSchema = findTextSchema(schemas);
821
+ const remainingSchemas = schemas.filter(s => s !== enumSchema || s !== stringSchema);
822
+ const wrongType = remainingSchemas.find(s => s.type && s.type !== 'string');
823
+ return enumSchema && stringSchema && !wrongType;
824
+ };
825
+ const simpleAnyOf = and(uiTypeIs('Control'), schemaMatches(schema => schema.hasOwnProperty('anyOf') && hasEnumAndText(schema.anyOf)));
826
+ const materialAnyOfStringOrEnumControlTester = rankWith(5, simpleAnyOf);
827
+ var MaterialAnyOfStringOrEnumControl$1 = withJsonFormsControlProps(MaterialAnyOfStringOrEnumControl);
828
+
829
+ const MaterialOneOfEnumControl = (props) => {
830
+ const { config, uischema } = props;
831
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
832
+ return (React.createElement(MaterialInputControl, Object.assign({}, props, { input: appliedUiSchemaOptions.autocomplete === false ? MuiSelect : MuiAutocomplete })));
833
+ };
834
+ const materialOneOfEnumControlTester = rankWith(5, isOneOfEnumControl);
835
+ var MaterialOneOfEnumControl$1 = withJsonFormsOneOfEnumProps(MaterialOneOfEnumControl);
836
+
837
+ const MaterialOneOfRadioGroupControl = (props) => {
838
+ return React.createElement(MaterialRadioGroup, Object.assign({}, props));
839
+ };
840
+ const materialOneOfRadioGroupControlTester = rankWith(20, and(isOneOfEnumControl, optionIs('format', 'radio')));
841
+ var MaterialOneOfRadioGroupControl$1 = withJsonFormsOneOfEnumProps(MaterialOneOfRadioGroupControl);
842
+
843
+ const Unwrapped = {
844
+ MaterialBooleanControl: MaterialBooleanControl,
845
+ MaterialBooleanToggleControl: MaterialBooleanToggleControl,
846
+ MaterialEnumControl: MaterialEnumControl,
847
+ MaterialNativeControl: MaterialNativeControl,
848
+ MaterialDateControl: MaterialDateControl,
849
+ MaterialDateTimeControl: MaterialDateTimeControl,
850
+ MaterialTimeControl: MaterialTimeControl,
851
+ MaterialSliderControl: MaterialSliderControl,
852
+ MaterialRadioGroupControl: MaterialRadioGroupControl,
853
+ MaterialIntegerControl: MaterialIntegerControl,
854
+ MaterialNumberControl: MaterialNumberControl,
855
+ MaterialTextControl: MaterialTextControl,
856
+ MaterialAnyOfStringOrEnumControl: MaterialAnyOfStringOrEnumControl,
857
+ MaterialOneOfEnumControl: MaterialOneOfEnumControl,
858
+ MaterialOneOfRadioGroupControl: MaterialOneOfRadioGroupControl
859
+ };
860
+
861
+ const groupTester = rankWith(1, uiTypeIs('Group'));
862
+ const style = { marginBottom: '10px' };
863
+ const GroupComponent = React.memo(({ visible, enabled, uischema, ...props }) => {
864
+ const groupLayout = uischema;
865
+ return (React.createElement(Hidden, { xsUp: !visible },
866
+ React.createElement(Card, { style: style },
867
+ !isEmpty(groupLayout.label) && (React.createElement(CardHeader, { title: groupLayout.label })),
868
+ React.createElement(CardContent, null,
869
+ React.createElement(MaterialLayoutRenderer, Object.assign({}, props, { visible: visible, enabled: enabled, elements: groupLayout.elements }))))));
870
+ });
871
+ const MaterializedGroupLayoutRenderer = ({ uischema, schema, path, visible, enabled, renderers, cells, direction }) => {
872
+ const groupLayout = uischema;
873
+ return (React.createElement(GroupComponent, { elements: groupLayout.elements, schema: schema, path: path, direction: direction, visible: visible, enabled: enabled, uischema: uischema, renderers: renderers, cells: cells }));
874
+ };
875
+ var MaterialGroupLayout = withJsonFormsLayoutProps(MaterializedGroupLayoutRenderer);
876
+ const materialGroupTester = withIncreasedRank(1, groupTester);
877
+
878
+ const materialHorizontalLayoutTester = rankWith(2, uiTypeIs('HorizontalLayout'));
879
+ const MaterialHorizontalLayoutRenderer = ({ uischema, renderers, cells, schema, path, enabled, visible }) => {
880
+ const layout = uischema;
881
+ const childProps = {
882
+ elements: layout.elements,
883
+ schema,
884
+ path,
885
+ enabled,
886
+ direction: 'row',
887
+ visible
888
+ };
889
+ return React.createElement(MaterialLayoutRenderer, Object.assign({}, childProps, { renderers: renderers, cells: cells }));
890
+ };
891
+ var MaterialHorizontalLayout = withJsonFormsLayoutProps(MaterialHorizontalLayoutRenderer);
892
+
893
+ const materialVerticalLayoutTester = rankWith(1, uiTypeIs('VerticalLayout'));
894
+ const MaterialVerticalLayoutRenderer = ({ uischema, schema, path, enabled, visible, renderers, cells }) => {
895
+ const verticalLayout = uischema;
896
+ const childProps = {
897
+ elements: verticalLayout.elements,
898
+ schema,
899
+ path,
900
+ enabled,
901
+ direction: 'column',
902
+ visible
903
+ };
904
+ return React.createElement(MaterialLayoutRenderer, Object.assign({}, childProps, { renderers: renderers, cells: cells }));
905
+ };
906
+ var MaterialVerticalLayout = withJsonFormsLayoutProps(MaterialVerticalLayoutRenderer);
907
+
908
+ const isSingleLevelCategorization = and(uiTypeIs('Categorization'), (uischema) => {
909
+ const categorization = uischema;
910
+ return (categorization.elements &&
911
+ categorization.elements.reduce((acc, e) => acc && e.type === 'Category', true));
912
+ });
913
+ const materialCategorizationTester = rankWith(1, isSingleLevelCategorization);
914
+ const MaterialCategorizationLayoutRenderer = (props) => {
915
+ const { data, path, renderers, cells, schema, uischema, visible, enabled, selected, onChange, ajv } = props;
916
+ const categorization = uischema;
917
+ const [activeCategory, setActiveCategory] = useState(selected ?? 0);
918
+ const categories = categorization.elements.filter((category) => isVisible(category, data, undefined, ajv));
919
+ const childProps = {
920
+ elements: categories[activeCategory].elements,
921
+ schema,
922
+ path,
923
+ direction: 'column',
924
+ enabled,
925
+ visible,
926
+ renderers,
927
+ cells
928
+ };
929
+ const onTabChange = (_event, value) => {
930
+ if (onChange) {
931
+ onChange(value, activeCategory);
932
+ }
933
+ setActiveCategory(value);
934
+ };
935
+ return (React.createElement(Hidden, { xsUp: !visible },
936
+ React.createElement(AppBar, { position: 'static' },
937
+ React.createElement(Tabs, { value: activeCategory, onChange: onTabChange, textColor: 'inherit', indicatorColor: 'secondary', variant: 'scrollable' }, categories.map((e, idx) => (React.createElement(Tab, { key: idx, label: e.label }))))),
938
+ React.createElement("div", { style: { marginTop: '0.5em' } },
939
+ React.createElement(MaterialLayoutRenderer, Object.assign({}, childProps)))));
940
+ };
941
+ var MaterialCategorizationLayout = withJsonFormsLayoutProps(withAjvProps(MaterialCategorizationLayoutRenderer));
942
+
943
+ const iconStyle = { float: 'right' };
944
+ const ExpandPanelRendererComponent = (props) => {
945
+ const [labelHtmlId] = useState(createId('expand-panel'));
946
+ useEffect(() => {
947
+ return () => {
948
+ removeId(labelHtmlId);
949
+ };
950
+ }, [labelHtmlId]);
951
+ const { childLabel, childPath, index, expanded, moveDown, moveUp, enableMoveDown, enableMoveUp, handleExpansion, removeItems, path, rootSchema, schema, uischema, uischemas, renderers, cells, config } = props;
952
+ const foundUISchema = useMemo(() => findUISchema(uischemas, schema, uischema.scope, path, undefined, uischema, rootSchema), [uischemas, schema, uischema.scope, path, uischema, rootSchema]);
953
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
954
+ return (React.createElement(Accordion, { "aria-labelledby": labelHtmlId, expanded: expanded, onChange: handleExpansion(childPath) },
955
+ React.createElement(AccordionSummary, { expandIcon: React.createElement(ExpandMoreIcon, null) },
956
+ React.createElement(Grid, { container: true, alignItems: 'center' },
957
+ React.createElement(Grid, { item: true, xs: 7, md: 9 },
958
+ React.createElement(Grid, { container: true, alignItems: 'center' },
959
+ React.createElement(Grid, { item: true, xs: 2, md: 1 },
960
+ React.createElement(Avatar, { "aria-label": 'Index' }, index + 1)),
961
+ React.createElement(Grid, { item: true, xs: 10, md: 11 },
962
+ React.createElement("span", { id: labelHtmlId }, childLabel)))),
963
+ React.createElement(Grid, { item: true, xs: 5, md: 3 },
964
+ React.createElement(Grid, { container: true, justifyContent: 'flex-end' },
965
+ React.createElement(Grid, { item: true },
966
+ React.createElement(Grid, { container: true, direction: 'row', justifyContent: 'center', alignItems: 'center' },
967
+ appliedUiSchemaOptions.showSortButtons ? (React.createElement(Fragment, null,
968
+ React.createElement(Grid, { item: true },
969
+ React.createElement(IconButton, { onClick: moveUp(path, index), style: iconStyle, disabled: !enableMoveUp, "aria-label": `Move up`, size: 'large' },
970
+ React.createElement(ArrowUpward, null))),
971
+ React.createElement(Grid, { item: true },
972
+ React.createElement(IconButton, { onClick: moveDown(path, index), style: iconStyle, disabled: !enableMoveDown, "aria-label": `Move down`, size: 'large' },
973
+ React.createElement(ArrowDownward, null))))) : (''),
974
+ React.createElement(Grid, { item: true },
975
+ React.createElement(IconButton, { onClick: removeItems(path, [index]), style: iconStyle, "aria-label": `Delete`, size: 'large' },
976
+ React.createElement(DeleteIcon, null))))))))),
977
+ React.createElement(AccordionDetails, null,
978
+ React.createElement(JsonFormsDispatch, { schema: schema, uischema: foundUISchema, path: childPath, key: childPath, renderers: renderers, cells: cells }))));
979
+ };
980
+ const ExpandPanelRenderer = React.memo(ExpandPanelRendererComponent);
981
+ const ctxDispatchToExpandPanelProps = dispatch => ({
982
+ removeItems: useCallback((path, toDelete) => (event) => {
983
+ event.stopPropagation();
984
+ dispatch(update(path, array => {
985
+ toDelete
986
+ .sort()
987
+ .reverse()
988
+ .forEach(s => array.splice(s, 1));
989
+ return array;
990
+ }));
991
+ }, [dispatch]),
992
+ moveUp: useCallback((path, toMove) => (event) => {
993
+ event.stopPropagation();
994
+ dispatch(update(path, array => {
995
+ moveUp(array, toMove);
996
+ return array;
997
+ }));
998
+ }, [dispatch]),
999
+ moveDown: useCallback((path, toMove) => (event) => {
1000
+ event.stopPropagation();
1001
+ dispatch(update(path, array => {
1002
+ moveDown(array, toMove);
1003
+ return array;
1004
+ }));
1005
+ }, [dispatch])
1006
+ });
1007
+ const withContextToExpandPanelProps = (Component) => ({ ctx, props }) => {
1008
+ const dispatchProps = ctxDispatchToExpandPanelProps(ctx.dispatch);
1009
+ const { childLabelProp, schema, path, index, uischemas } = props;
1010
+ const childPath = composePaths(path, `${index}`);
1011
+ const childData = Resolve.data(ctx.core.data, childPath);
1012
+ const childLabel = childLabelProp
1013
+ ? get(childData, childLabelProp, '')
1014
+ : get(childData, getFirstPrimitiveProp(schema), '');
1015
+ return (React.createElement(Component, Object.assign({}, props, dispatchProps, { childLabel: childLabel, childPath: childPath, uischemas: uischemas })));
1016
+ };
1017
+ const withJsonFormsExpandPanelProps = (Component) => withJsonFormsContext(withContextToExpandPanelProps(Component));
1018
+ var ExpandPanelRenderer$1 = withJsonFormsExpandPanelProps(ExpandPanelRenderer);
1019
+
1020
+ const MaterialArrayLayoutComponent = (props) => {
1021
+ const [expanded, setExpanded] = useState(false);
1022
+ const innerCreateDefaultValue = useCallback(() => createDefaultValue(props.schema), [props.schema]);
1023
+ const handleChange = useCallback((panel) => (_event, expandedPanel) => {
1024
+ setExpanded(expandedPanel ? panel : false);
1025
+ }, []);
1026
+ const isExpanded = (index) => expanded === composePaths(props.path, `${index}`);
1027
+ const { data, path, schema, uischema, errors, addItem, renderers, cells, label, required, rootSchema, config, uischemas } = props;
1028
+ const appliedUiSchemaOptions = merge({}, config, props.uischema.options);
1029
+ return (React.createElement("div", null,
1030
+ React.createElement(ArrayLayoutToolbar, { label: computeLabel(label, required, appliedUiSchemaOptions.hideRequiredAsterisk), errors: errors, path: path, addItem: addItem, createDefault: innerCreateDefaultValue }),
1031
+ React.createElement("div", null, data > 0 ? (map(range(data), index => {
1032
+ return (React.createElement(ExpandPanelRenderer$1, { index: index, expanded: isExpanded(index), schema: schema, path: path, handleExpansion: handleChange, uischema: uischema, renderers: renderers, cells: cells, key: index, rootSchema: rootSchema, enableMoveUp: index != 0, enableMoveDown: index < data - 1, config: config, childLabelProp: appliedUiSchemaOptions.elementLabelProp, uischemas: uischemas }));
1033
+ })) : (React.createElement("p", null, "No data")))));
1034
+ };
1035
+ const MaterialArrayLayout$1 = React.memo(MaterialArrayLayoutComponent);
1036
+
1037
+ const MaterialArrayLayoutRenderer = ({ visible, enabled, id, uischema, schema, label, rootSchema, renderers, cells, data, path, errors, uischemas, addItem }) => {
1038
+ const addItemCb = useCallback((p, value) => addItem(p, value), [
1039
+ addItem
1040
+ ]);
1041
+ return (React.createElement(Hidden, { xsUp: !visible },
1042
+ React.createElement(MaterialArrayLayout$1, { label: label, uischema: uischema, schema: schema, id: id, rootSchema: rootSchema, errors: errors, enabled: enabled, visible: visible, data: data, path: path, addItem: addItemCb, renderers: renderers, cells: cells, uischemas: uischemas })));
1043
+ };
1044
+ const materialArrayLayoutTester = rankWith(4, isObjectArrayWithNesting);
1045
+ var MaterialArrayLayout = withJsonFormsArrayLayoutProps(MaterialArrayLayoutRenderer);
1046
+
1047
+ const MaterialBooleanCell = (props) => {
1048
+ return React.createElement(MuiCheckbox, Object.assign({}, props));
1049
+ };
1050
+ const materialBooleanCellTester = rankWith(2, isBooleanControl);
1051
+ var MaterialBooleanCell$1 = withJsonFormsCellProps(MaterialBooleanCell);
1052
+
1053
+ const MaterialBooleanToggleCell = (props) => {
1054
+ return React.createElement(MuiToggle, Object.assign({}, props));
1055
+ };
1056
+ const materialBooleanToggleCellTester = rankWith(3, and(isBooleanControl, optionIs('toggle', true)));
1057
+ var MaterialBooleanToggleCell$1 = withJsonFormsCellProps(MaterialBooleanToggleCell);
1058
+
1059
+ const MaterialDateCell = (props) => {
1060
+ const { data, className, id, enabled, uischema, path, handleChange, config } = props;
1061
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
1062
+ return (React.createElement(Input$1, { type: 'date', value: data || '', onChange: ev => handleChange(path, ev.target.value), className: className, id: id, disabled: !enabled, autoFocus: appliedUiSchemaOptions.focus, fullWidth: true }));
1063
+ };
1064
+ const materialDateCellTester = rankWith(2, isDateControl);
1065
+ var MaterialDateCell$1 = withJsonFormsCellProps(MaterialDateCell);
1066
+
1067
+ const MaterialEnumCell = (props) => (React.createElement(MuiSelect, Object.assign({}, props)));
1068
+ const materialEnumCellTester = rankWith(2, isEnumControl);
1069
+ var MaterialEnumCell$1 = withJsonFormsEnumCellProps(MaterialEnumCell);
1070
+
1071
+ const MaterialIntegerCell = (props) => (React.createElement(MuiInputInteger, Object.assign({}, props)));
1072
+ const materialIntegerCellTester = rankWith(2, isIntegerControl);
1073
+ var MaterialIntegerCell$1 = withJsonFormsCellProps(MaterialIntegerCell);
1074
+
1075
+ const MaterialNumberCell = (props) => (React.createElement(MuiInputNumber, Object.assign({}, props)));
1076
+ const materialNumberCellTester = rankWith(2, isNumberControl);
1077
+ var MaterialNumberCell$1 = withJsonFormsCellProps(MaterialNumberCell);
1078
+
1079
+ const MaterialNumberFormatCell = (props) => React.createElement(MuiInputNumberFormat, Object.assign({}, props));
1080
+ const materialNumberFormatCellTester = rankWith(4, isNumberFormatControl);
1081
+ var MaterialNumberFormatCell$1 = withJsonFormsCellProps(MaterialNumberFormatCell);
1082
+
1083
+ const MaterialOneOfEnumCell = (props) => (React.createElement(MuiSelect, Object.assign({}, props)));
1084
+ const materialOneOfEnumCellTester = rankWith(2, isOneOfEnumControl);
1085
+ var MaterialOneOfEnumCell$1 = withJsonFormsOneOfEnumCellProps(MaterialOneOfEnumCell);
1086
+
1087
+ const MaterialTextCell = (props) => (React.createElement(MuiInputText, Object.assign({}, props)));
1088
+ const materialTextCellTester = rankWith(1, isStringControl);
1089
+ var MaterialTextCell$1 = withJsonFormsCellProps(MaterialTextCell);
1090
+
1091
+ const MaterialTimeCell = (props) => (React.createElement(MuiInputTime, Object.assign({}, props)));
1092
+ const materialTimeCellTester = rankWith(2, isTimeControl);
1093
+ var MaterialTimeCell$1 = withJsonFormsCellProps(MaterialTimeCell);
1094
+
1095
+ var CustomizableCells = /*#__PURE__*/Object.freeze({
1096
+ __proto__: null,
1097
+ MaterialBooleanCell: MaterialBooleanCell,
1098
+ MaterialDateCell: MaterialDateCell,
1099
+ MaterialEnumCell: MaterialEnumCell,
1100
+ MaterialIntegerCell: MaterialIntegerCell,
1101
+ MaterialNumberCell: MaterialNumberCell,
1102
+ MaterialNumberFormatCell: MaterialNumberFormatCell,
1103
+ MaterialOneOfEnumCell: MaterialOneOfEnumCell,
1104
+ MaterialTextCell: MaterialTextCell,
1105
+ MaterialTimeCell: MaterialTimeCell
1106
+ });
1107
+
1108
+ const materialCategorizationStepperTester = rankWith(2, and(uiTypeIs('Categorization'), categorizationHasCategory, optionIs('variant', 'stepper')));
1109
+ const MaterialCategorizationStepperLayoutRenderer = (props) => {
1110
+ const [activeCategory, setActiveCategory] = useState(0);
1111
+ const handleStep = (step) => {
1112
+ setActiveCategory(step);
1113
+ };
1114
+ const { data, path, renderers, schema, uischema, visible, cells, config, ajv } = props;
1115
+ const categorization = uischema;
1116
+ const appliedUiSchemaOptions = merge({}, config, uischema.options);
1117
+ const buttonWrapperStyle = {
1118
+ textAlign: 'right',
1119
+ width: '100%',
1120
+ margin: '1em auto'
1121
+ };
1122
+ const buttonNextStyle = {
1123
+ float: 'right'
1124
+ };
1125
+ const buttonStyle = {
1126
+ marginRight: '1em'
1127
+ };
1128
+ const categories = categorization.elements.filter((category) => isVisible(category, data, undefined, ajv));
1129
+ const childProps = {
1130
+ elements: categories[activeCategory].elements,
1131
+ schema,
1132
+ path,
1133
+ direction: 'column',
1134
+ visible,
1135
+ renderers,
1136
+ cells
1137
+ };
1138
+ return (React.createElement(Hidden, { xsUp: !visible },
1139
+ React.createElement(Stepper, { activeStep: activeCategory, nonLinear: true }, categories.map((e, idx) => (React.createElement(Step, { key: e.label },
1140
+ React.createElement(StepButton, { onClick: () => handleStep(idx) }, e.label))))),
1141
+ React.createElement("div", null,
1142
+ React.createElement(MaterialLayoutRenderer, Object.assign({}, childProps))),
1143
+ !!appliedUiSchemaOptions.showNavButtons ? (React.createElement("div", { style: buttonWrapperStyle },
1144
+ React.createElement(Button, { style: buttonNextStyle, variant: "contained", color: "primary", disabled: activeCategory >= categories.length - 1, onClick: () => handleStep(activeCategory + 1) }, "Next"),
1145
+ React.createElement(Button, { style: buttonStyle, color: "secondary", variant: "contained", disabled: activeCategory <= 0, onClick: () => handleStep(activeCategory - 1) }, "Previous"))) : (React.createElement(React.Fragment, null))));
1146
+ };
1147
+ var MaterialCategorizationStepperLayout = withJsonFormsLayoutProps(withAjvProps(MaterialCategorizationStepperLayoutRenderer));
1148
+
1149
+ const materialRenderers = [
1150
+ {
1151
+ tester: materialArrayControlTester,
1152
+ renderer: MaterialArrayControlRenderer$1
1153
+ },
1154
+ { tester: materialBooleanControlTester, renderer: MaterialBooleanControl$1 },
1155
+ { tester: materialBooleanToggleControlTester, renderer: MaterialBooleanToggleControl$1 },
1156
+ { tester: materialNativeControlTester, renderer: MaterialNativeControl$1 },
1157
+ { tester: materialEnumControlTester, renderer: MaterialEnumControl$1 },
1158
+ { tester: materialIntegerControlTester, renderer: MaterialIntegerControl$1 },
1159
+ { tester: materialNumberControlTester, renderer: MaterialNumberControl$1 },
1160
+ { tester: materialTextControlTester, renderer: MaterialTextControl$1 },
1161
+ { tester: materialDateTimeControlTester, renderer: MaterialDateTimeControl$1 },
1162
+ { tester: materialDateControlTester, renderer: MaterialDateControl$1 },
1163
+ { tester: materialTimeControlTester, renderer: MaterialTimeControl$1 },
1164
+ { tester: materialSliderControlTester, renderer: MaterialSliderControl$1 },
1165
+ { tester: materialObjectControlTester, renderer: MaterialObjectRenderer$1 },
1166
+ { tester: materialAllOfControlTester, renderer: MaterialAllOfRenderer$1 },
1167
+ { tester: materialAnyOfControlTester, renderer: MaterialAnyOfRenderer$1 },
1168
+ { tester: materialOneOfControlTester, renderer: MaterialOneOfRenderer$1 },
1169
+ {
1170
+ tester: materialRadioGroupControlTester,
1171
+ renderer: MaterialRadioGroupControl$1
1172
+ },
1173
+ {
1174
+ tester: materialOneOfRadioGroupControlTester,
1175
+ renderer: MaterialOneOfRadioGroupControl$1
1176
+ },
1177
+ { tester: materialOneOfEnumControlTester, renderer: MaterialOneOfEnumControl$1 },
1178
+ { tester: materialGroupTester, renderer: MaterialGroupLayout },
1179
+ {
1180
+ tester: materialHorizontalLayoutTester,
1181
+ renderer: MaterialHorizontalLayout
1182
+ },
1183
+ { tester: materialVerticalLayoutTester, renderer: MaterialVerticalLayout },
1184
+ {
1185
+ tester: materialCategorizationTester,
1186
+ renderer: MaterialCategorizationLayout
1187
+ },
1188
+ {
1189
+ tester: materialCategorizationStepperTester,
1190
+ renderer: MaterialCategorizationStepperLayout
1191
+ },
1192
+ { tester: materialArrayLayoutTester, renderer: MaterialArrayLayout },
1193
+ { tester: materialLabelRendererTester, renderer: MaterialLabelRenderer$1 },
1194
+ {
1195
+ tester: materialListWithDetailTester,
1196
+ renderer: MaterialListWithDetailRenderer$1
1197
+ },
1198
+ {
1199
+ tester: materialAnyOfStringOrEnumControlTester,
1200
+ renderer: MaterialAnyOfStringOrEnumControl$1
1201
+ },
1202
+ {
1203
+ tester: materialEnumArrayRendererTester,
1204
+ renderer: MaterialEnumArrayRenderer$1
1205
+ }
1206
+ ];
1207
+ const materialCells = [
1208
+ { tester: materialBooleanCellTester, cell: MaterialBooleanCell$1 },
1209
+ { tester: materialBooleanToggleCellTester, cell: MaterialBooleanToggleCell$1 },
1210
+ { tester: materialDateCellTester, cell: MaterialDateCell$1 },
1211
+ { tester: materialEnumCellTester, cell: MaterialEnumCell$1 },
1212
+ { tester: materialIntegerCellTester, cell: MaterialIntegerCell$1 },
1213
+ { tester: materialNumberCellTester, cell: MaterialNumberCell$1 },
1214
+ { tester: materialNumberFormatCellTester, cell: MaterialNumberFormatCell$1 },
1215
+ { tester: materialOneOfEnumCellTester, cell: MaterialOneOfEnumCell$1 },
1216
+ { tester: materialTextCellTester, cell: MaterialTextCell$1 },
1217
+ { tester: materialTimeCellTester, cell: MaterialTimeCell$1 }
1218
+ ];
1219
+
1220
+ export { CustomizableCells as Customizable, MaterialAllOfRenderer$1 as MaterialAllOfRenderer, MaterialAnyOfRenderer$1 as MaterialAnyOfRenderer, MaterialAnyOfStringOrEnumControl$1 as MaterialAnyOfStringOrEnumControl, MaterialArrayControlRenderer$1 as MaterialArrayControlRenderer, MaterialArrayLayout, MaterialBooleanCell$1 as MaterialBooleanCell, MaterialBooleanControl$1 as MaterialBooleanControl, MaterialBooleanToggleCell$1 as MaterialBooleanToggleCell, MaterialBooleanToggleControl$1 as MaterialBooleanToggleControl, MaterialCategorizationLayout, MaterialDateCell$1 as MaterialDateCell, MaterialDateControl$1 as MaterialDateControl, MaterialDateTimeControl$1 as MaterialDateTimeControl, MaterialEnumArrayRenderer$1 as MaterialEnumArrayRenderer, MaterialEnumCell$1 as MaterialEnumCell, MaterialEnumControl$1 as MaterialEnumControl, MaterialGroupLayout, MaterialHorizontalLayout, MaterialInputControl, MaterialIntegerCell$1 as MaterialIntegerCell, MaterialIntegerControl$1 as MaterialIntegerControl, MaterialLayoutRenderer, MaterialNativeControl$1 as MaterialNativeControl, MaterialNumberCell$1 as MaterialNumberCell, MaterialNumberControl$1 as MaterialNumberControl, MaterialNumberFormatCell$1 as MaterialNumberFormatCell, MaterialObjectRenderer$1 as MaterialObjectRenderer, MaterialOneOfEnumCell$1 as MaterialOneOfEnumCell, MaterialOneOfEnumControl$1 as MaterialOneOfEnumControl, MaterialOneOfRadioGroupControl$1 as MaterialOneOfRadioGroupControl, MaterialOneOfRenderer$1 as MaterialOneOfRenderer, MaterialRadioGroupControl$1 as MaterialRadioGroupControl, MaterialSliderControl$1 as MaterialSliderControl, MaterialTextCell$1 as MaterialTextCell, MaterialTextControl$1 as MaterialTextControl, MaterialTimeCell$1 as MaterialTimeCell, MaterialTimeControl$1 as MaterialTimeControl, MaterialVerticalLayout, MuiCheckbox, MuiInputInteger, MuiInputNumber, MuiInputNumberFormat, MuiInputText, MuiInputTime, MuiSelect, Unwrapped, createOnChangeHandler, getData, materialAllOfControlTester, materialAnyOfControlTester, materialAnyOfStringOrEnumControlTester, materialArrayControlTester, materialArrayLayoutTester, materialBooleanCellTester, materialBooleanControlTester, materialBooleanToggleCellTester, materialBooleanToggleControlTester, materialCategorizationTester, materialCells, materialDateCellTester, materialDateControlTester, materialDateTimeControlTester, materialEnumArrayRendererTester, materialEnumCellTester, materialEnumControlTester, materialGroupTester, materialHorizontalLayoutTester, materialIntegerCellTester, materialIntegerControlTester, materialNativeControlTester, materialNumberCellTester, materialNumberControlTester, materialNumberFormatCellTester, materialObjectControlTester, materialOneOfControlTester, materialOneOfEnumCellTester, materialOneOfEnumControlTester, materialOneOfRadioGroupControlTester, materialRadioGroupControlTester, materialRenderers, materialSliderControlTester, materialTextCellTester, materialTextControlTester, materialTimeCellTester, materialTimeControlTester, materialVerticalLayoutTester, renderLayoutElements, useDebouncedChange, useFocus, withAjvProps };
1221
+ //# sourceMappingURL=jsonforms-react-material.esm.js.map