@pega/dx-component-builder-sdk 25.1.16 → 26.1.10

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 (208) hide show
  1. package/package.json +1 -1
  2. package/pega-dx-component-builder-sdk-26.1.10.tgz +0 -0
  3. package/src/constants.js +4 -0
  4. package/src/tasks/create/templates/Constellation/field/Picklist-Autocomplete/utils.ts.mustache +1 -1
  5. package/src/tasks/create/templates/Constellation/template/DETAILS/DetailsRender.tsx.mustache +1 -1
  6. package/src/tasks/create/templates/Constellation/template/DETAILS-region/DetailsRender.tsx.mustache +1 -1
  7. package/src/tasks/create/templates/Constellation/template/FORM/DetailsRender.tsx +1 -1
  8. package/src/tasks/create/templates/Constellation/template/FORM-region/DetailsRender.tsx +1 -1
  9. package/src/tasks/create/templates/SDK-React/field/Boolean/index.tsx.mustache +22 -6
  10. package/src/tasks/create/templates/SDK-React/field/Date/demo.stories.tsx.mustache +8 -1
  11. package/src/tasks/create/templates/SDK-React/field/Date/index.tsx.mustache +22 -13
  12. package/src/tasks/create/templates/SDK-React/field/DateTime/demo.stories.tsx.mustache +9 -1
  13. package/src/tasks/create/templates/SDK-React/field/DateTime/index.tsx.mustache +23 -14
  14. package/src/tasks/create/templates/SDK-React/field/Decimal/index.tsx.mustache +24 -8
  15. package/src/tasks/create/templates/SDK-React/field/Decimal-Currency/index.tsx.mustache +24 -8
  16. package/src/tasks/create/templates/SDK-React/field/Decimal-Percentage/index.tsx.mustache +24 -10
  17. package/src/tasks/create/templates/SDK-React/field/Integer/index.tsx.mustache +26 -14
  18. package/src/tasks/create/templates/SDK-React/field/Picklist/index.tsx.mustache +34 -8
  19. package/src/tasks/create/templates/SDK-React/field/Picklist-Autocomplete/index.tsx.mustache +25 -9
  20. package/src/tasks/create/templates/SDK-React/field/Picklist-RadioButtons/index.tsx.mustache +21 -5
  21. package/src/tasks/create/templates/SDK-React/field/Text/index.tsx.mustache +25 -14
  22. package/src/tasks/create/templates/SDK-React/field/Text-Email/index.tsx.mustache +32 -21
  23. package/src/tasks/create/templates/SDK-React/field/Text-Input/index.tsx.mustache +25 -10
  24. package/src/tasks/create/templates/SDK-React/field/Text-Paragraph/index.tsx.mustache +26 -14
  25. package/src/tasks/create/templates/SDK-React/field/Text-Phone/index.tsx.mustache +28 -10
  26. package/src/tasks/create/templates/SDK-React/field/Text-URL/index.tsx.mustache +26 -14
  27. package/src/tasks/create/templates/SDK-React/field/TimeOfDay/demo.stories.tsx.mustache +9 -1
  28. package/src/tasks/create/templates/SDK-React/field/TimeOfDay/index.tsx.mustache +22 -17
  29. package/src/tasks/create/templates/SDK-React/template/FORM/DefaultForm.css +82 -2
  30. package/src/tasks/create/templates/SDK-React/template/FORM/index.tsx.mustache +51 -11
  31. package/src/tasks/create/templates/SDK-React/widget/CASE/index.tsx.mustache +19 -15
  32. package/src/tasks/create/templates/SDK-React/widget/PAGE/index.tsx.mustache +2 -167
  33. package/src/tasks/create/templates/SDK-React/widget/PAGE-CASE/index.tsx.mustache +72 -15
  34. package/tests/assets/sdk-r/components/create/custom-sdk/field/Pega_DXIL_MyTestText/index.tsx +25 -14
  35. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/AlertBanner/AlertBanner.css +46 -0
  36. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/AlertBanner/AlertBanner.tsx +37 -20
  37. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/CaseSummaryFields/CaseSummaryFields.css +14 -0
  38. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/CaseSummaryFields/CaseSummaryFields.tsx +57 -5
  39. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/FieldGroup/FieldGroup.tsx +18 -11
  40. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/FieldGroupList/FieldGroupList.tsx +1 -1
  41. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/FieldValueList/FieldValueList.tsx +19 -4
  42. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/Operator/Operator.tsx +125 -74
  43. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/RichTextEditor/RichTextEditor.tsx +184 -90
  44. package/tests/assets/sdk-r/components/create/override-sdk/field/AutoComplete/AutoComplete.tsx +372 -26
  45. package/tests/assets/sdk-r/components/create/override-sdk/field/Checkbox/Checkbox.tsx +22 -6
  46. package/tests/assets/sdk-r/components/create/override-sdk/field/Currency/Currency.tsx +22 -4
  47. package/tests/assets/sdk-r/components/create/override-sdk/field/Date/Date.tsx +35 -4
  48. package/tests/assets/sdk-r/components/create/override-sdk/field/DateTime/DateTime.tsx +35 -4
  49. package/tests/assets/sdk-r/components/create/override-sdk/field/Decimal/Decimal.tsx +22 -4
  50. package/tests/assets/sdk-r/components/create/override-sdk/field/Dropdown/Dropdown.tsx +48 -16
  51. package/tests/assets/sdk-r/components/create/override-sdk/field/Email/Email.tsx +21 -4
  52. package/tests/assets/sdk-r/components/create/override-sdk/field/Group/Group.tsx +28 -4
  53. package/tests/assets/sdk-r/components/create/override-sdk/field/Integer/Integer.tsx +21 -4
  54. package/tests/assets/sdk-r/components/create/override-sdk/field/Multiselect/Multiselect.tsx +42 -20
  55. package/tests/assets/sdk-r/components/create/override-sdk/field/Multiselect/utils.ts +5 -3
  56. package/tests/assets/sdk-r/components/create/override-sdk/field/ObjectReference/ObjectReference.tsx +554 -66
  57. package/tests/assets/sdk-r/components/create/override-sdk/field/ObjectReference/utils.ts +108 -20
  58. package/tests/assets/sdk-r/components/create/override-sdk/field/Percentage/Percentage.tsx +22 -4
  59. package/tests/assets/sdk-r/components/create/override-sdk/field/Phone/Phone.tsx +23 -4
  60. package/tests/assets/sdk-r/components/create/override-sdk/field/RadioButtons/RadioButtons.tsx +20 -4
  61. package/tests/assets/sdk-r/components/create/override-sdk/field/RichText/RichText.css +0 -79
  62. package/tests/assets/sdk-r/components/create/override-sdk/field/RichText/RichText.tsx +1 -1
  63. package/tests/assets/sdk-r/components/create/override-sdk/field/SelectableCard/SelectableCard.tsx +25 -10
  64. package/tests/assets/sdk-r/components/create/override-sdk/field/TextArea/TextArea.tsx +22 -4
  65. package/tests/assets/sdk-r/components/create/override-sdk/field/TextInput/TextInput.tsx +21 -4
  66. package/tests/assets/sdk-r/components/create/override-sdk/field/Time/Time.tsx +35 -4
  67. package/tests/assets/sdk-r/components/create/override-sdk/field/URL/URL.tsx +22 -4
  68. package/tests/assets/sdk-r/components/create/override-sdk/field/UserReference/UserReference.tsx +10 -6
  69. package/tests/assets/sdk-r/components/create/override-sdk/infra/Assignment/Assignment.tsx +36 -14
  70. package/tests/assets/sdk-r/components/create/override-sdk/infra/Assignment/useValidationBanner.ts +29 -0
  71. package/tests/assets/sdk-r/components/create/override-sdk/infra/DeferLoad/DeferLoad.tsx +31 -10
  72. package/tests/assets/sdk-r/components/create/override-sdk/infra/FlowContainer/FlowContainer.tsx +5 -6
  73. package/tests/assets/sdk-r/components/create/override-sdk/infra/LeftAlignVerticalTabs/LeftAlignVerticalTabs.tsx +1 -1
  74. package/tests/assets/sdk-r/components/create/override-sdk/infra/ModalViewContainer/DataViewActionButtons/DataViewActionButtons.tsx +138 -0
  75. package/tests/assets/sdk-r/components/create/override-sdk/infra/ModalViewContainer/ModalViewContainer.tsx +110 -64
  76. package/tests/assets/sdk-r/components/create/override-sdk/infra/MultiStep/MultiStep.css +63 -0
  77. package/tests/assets/sdk-r/components/create/override-sdk/infra/MultiStep/MultiStep.tsx +23 -52
  78. package/tests/assets/sdk-r/components/create/override-sdk/infra/NavBar/NavBar.tsx +8 -3
  79. package/tests/assets/sdk-r/components/create/override-sdk/infra/Reference/Reference.tsx +5 -0
  80. package/tests/assets/sdk-r/components/create/override-sdk/infra/RootContainer/RootContainer.tsx +4 -5
  81. package/tests/assets/sdk-r/components/create/override-sdk/infra/View/View.css +1 -0
  82. package/tests/assets/sdk-r/components/create/override-sdk/infra/View/View.tsx +10 -17
  83. package/tests/assets/sdk-r/components/create/override-sdk/infra/ViewContainer/ViewContainer.tsx +8 -10
  84. package/tests/assets/sdk-r/components/create/override-sdk/template/AppShell/AppShell.css +0 -4
  85. package/tests/assets/sdk-r/components/create/override-sdk/template/AppShell/AppShell.tsx +7 -1
  86. package/tests/assets/sdk-r/components/create/override-sdk/template/CaseSummary/CaseSummary.tsx +9 -42
  87. package/tests/assets/sdk-r/components/create/override-sdk/template/CaseView/CaseView.tsx +8 -2
  88. package/tests/assets/sdk-r/components/create/override-sdk/template/CaseViewActionsMenu/CaseViewActionsMenu.tsx +58 -3
  89. package/tests/assets/sdk-r/components/create/override-sdk/template/DataReference/DataReference.tsx +56 -33
  90. package/tests/assets/sdk-r/components/create/override-sdk/template/DataReference/SearchForm.tsx +3 -4
  91. package/tests/assets/sdk-r/components/create/override-sdk/template/DefaultForm/DefaultForm.css +71 -0
  92. package/tests/assets/sdk-r/components/create/override-sdk/template/DefaultForm/DefaultForm.tsx +45 -9
  93. package/tests/assets/sdk-r/components/create/override-sdk/template/FieldGroupTemplate/FieldGroupTemplate.tsx +10 -3
  94. package/tests/assets/sdk-r/components/create/override-sdk/template/ListView/ListView.tsx +139 -59
  95. package/tests/assets/sdk-r/components/create/override-sdk/template/ListView/hooks.ts +80 -13
  96. package/tests/assets/sdk-r/components/create/override-sdk/template/ListView/utils.ts +13 -3
  97. package/tests/assets/sdk-r/components/create/override-sdk/template/MultiReferenceReadOnly/MultiReferenceReadOnly.tsx +16 -1
  98. package/tests/assets/sdk-r/components/create/override-sdk/template/SimpleTableManual/SimpleTableManual.tsx +167 -93
  99. package/tests/assets/sdk-r/components/create/override-sdk/template/SimpleTableSelect/SimpleTableSelect.tsx +71 -56
  100. package/tests/assets/sdk-r/components/create/override-sdk/template/SingleReferenceReadOnly/SingleReferenceReadOnly.tsx +12 -7
  101. package/tests/assets/sdk-r/components/create/override-sdk/widget/Attachment/Attachment.tsx +119 -26
  102. package/tests/assets/sdk-r/components/create/override-sdk/widget/Attachment/AttachmentUtils.ts +1 -1
  103. package/tests/assets/sdk-r/components/create/override-sdk/widget/CaseHistory/CaseHistory.tsx +16 -12
  104. package/tests/assets/sdk-r/components/create/override-sdk/widget/FileUtility/FileUtility.tsx +40 -28
  105. package/tests/assets/sdk-r/components/create/override-sdk/widget/ToDo/ToDo.tsx +14 -6
  106. package/tests/assets/sdk-r/components/createAll/custom-constellation/field/Pega_DXIL_MySearchbox/utils.ts +1 -1
  107. package/tests/assets/sdk-r/components/createAll/custom-constellation/template/Pega_DXIL_MyDetails/DetailsRender.tsx +1 -1
  108. package/tests/assets/sdk-r/components/createAll/custom-constellation/template/Pega_DXIL_MyForm/DetailsRender.tsx +1 -1
  109. package/tests/assets/sdk-r/components/createAll/custom-constellation/template/Pega_DXIL_MyTwoColumnDetails/DetailsRender.tsx +1 -1
  110. package/tests/assets/sdk-r/components/createAll/custom-constellation/template/Pega_DXIL_MyTwoColumnForm/DetailsRender.tsx +1 -1
  111. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyBoolean/index.tsx +22 -6
  112. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyCurrency/index.tsx +24 -8
  113. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDate/demo.stories.tsx +8 -1
  114. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDate/index.tsx +22 -13
  115. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDateTime/demo.stories.tsx +9 -1
  116. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDateTime/index.tsx +23 -14
  117. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDecimal/index.tsx +24 -8
  118. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyEmail/index.tsx +32 -21
  119. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyIconButtonURL/index.tsx +2 -2
  120. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyInteger/index.tsx +26 -14
  121. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyParagraph/index.tsx +26 -14
  122. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPercentage/index.tsx +24 -10
  123. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPhone/index.tsx +25 -10
  124. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPicklist/index.tsx +34 -8
  125. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyRadiobuttons/index.tsx +21 -5
  126. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MySearchbox/index.tsx +22 -9
  127. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyText/index.tsx +25 -14
  128. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTextInput/index.tsx +25 -10
  129. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTimeOfDay/demo.stories.tsx +9 -1
  130. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTimeOfDay/index.tsx +22 -17
  131. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyURL/index.tsx +26 -14
  132. package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyForm/DefaultForm.css +82 -2
  133. package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyForm/index.tsx +45 -8
  134. package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyCaseWidget/index.tsx +19 -15
  135. package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyPageCaseWidget/index.tsx +66 -15
  136. package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyPageWidget/index.tsx +2 -167
  137. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/AlertBanner/AlertBanner.css +46 -0
  138. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/AlertBanner/AlertBanner.tsx +37 -20
  139. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/CaseSummaryFields/CaseSummaryFields.css +14 -0
  140. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/CaseSummaryFields/CaseSummaryFields.tsx +57 -5
  141. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/FieldGroup/FieldGroup.tsx +18 -11
  142. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/FieldGroupList/FieldGroupList.tsx +1 -1
  143. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/FieldValueList/FieldValueList.tsx +19 -4
  144. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/Operator/Operator.tsx +125 -74
  145. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/RichTextEditor/RichTextEditor.tsx +184 -90
  146. package/tests/assets/sdk-r/components/createAll/override-sdk/field/AutoComplete/AutoComplete.tsx +372 -26
  147. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Checkbox/Checkbox.tsx +22 -6
  148. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Currency/Currency.tsx +22 -4
  149. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Date/Date.tsx +35 -4
  150. package/tests/assets/sdk-r/components/createAll/override-sdk/field/DateTime/DateTime.tsx +35 -4
  151. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Decimal/Decimal.tsx +22 -4
  152. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Dropdown/Dropdown.tsx +48 -16
  153. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Email/Email.tsx +21 -4
  154. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Group/Group.tsx +28 -4
  155. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Integer/Integer.tsx +21 -4
  156. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Multiselect/Multiselect.tsx +42 -20
  157. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Multiselect/utils.ts +5 -3
  158. package/tests/assets/sdk-r/components/createAll/override-sdk/field/ObjectReference/ObjectReference.tsx +554 -66
  159. package/tests/assets/sdk-r/components/createAll/override-sdk/field/ObjectReference/utils.ts +108 -20
  160. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Percentage/Percentage.tsx +22 -4
  161. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Phone/Phone.tsx +23 -4
  162. package/tests/assets/sdk-r/components/createAll/override-sdk/field/RadioButtons/RadioButtons.tsx +20 -4
  163. package/tests/assets/sdk-r/components/createAll/override-sdk/field/RichText/RichText.css +0 -79
  164. package/tests/assets/sdk-r/components/createAll/override-sdk/field/RichText/RichText.tsx +1 -1
  165. package/tests/assets/sdk-r/components/createAll/override-sdk/field/SelectableCard/SelectableCard.tsx +25 -10
  166. package/tests/assets/sdk-r/components/createAll/override-sdk/field/TextArea/TextArea.tsx +22 -4
  167. package/tests/assets/sdk-r/components/createAll/override-sdk/field/TextInput/TextInput.tsx +21 -4
  168. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Time/Time.tsx +35 -4
  169. package/tests/assets/sdk-r/components/createAll/override-sdk/field/URL/URL.tsx +22 -4
  170. package/tests/assets/sdk-r/components/createAll/override-sdk/field/UserReference/UserReference.tsx +10 -6
  171. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/Assignment/Assignment.tsx +36 -14
  172. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/Assignment/useValidationBanner.ts +29 -0
  173. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/DeferLoad/DeferLoad.tsx +31 -10
  174. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/FlowContainer/FlowContainer.tsx +5 -6
  175. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/LeftAlignVerticalTabs/LeftAlignVerticalTabs.tsx +1 -1
  176. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/ModalViewContainer/DataViewActionButtons/DataViewActionButtons.tsx +138 -0
  177. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/ModalViewContainer/ModalViewContainer.tsx +110 -64
  178. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/MultiStep/MultiStep.css +63 -0
  179. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/MultiStep/MultiStep.tsx +23 -52
  180. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/NavBar/NavBar.tsx +8 -3
  181. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/Reference/Reference.tsx +5 -0
  182. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/RootContainer/RootContainer.tsx +4 -5
  183. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/View/View.css +1 -0
  184. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/View/View.tsx +10 -17
  185. package/tests/assets/sdk-r/components/createAll/override-sdk/infra/ViewContainer/ViewContainer.tsx +8 -10
  186. package/tests/assets/sdk-r/components/createAll/override-sdk/template/AppShell/AppShell.css +0 -4
  187. package/tests/assets/sdk-r/components/createAll/override-sdk/template/AppShell/AppShell.tsx +7 -1
  188. package/tests/assets/sdk-r/components/createAll/override-sdk/template/CaseSummary/CaseSummary.tsx +9 -42
  189. package/tests/assets/sdk-r/components/createAll/override-sdk/template/CaseView/CaseView.tsx +8 -2
  190. package/tests/assets/sdk-r/components/createAll/override-sdk/template/CaseViewActionsMenu/CaseViewActionsMenu.tsx +58 -3
  191. package/tests/assets/sdk-r/components/createAll/override-sdk/template/DataReference/DataReference.tsx +56 -33
  192. package/tests/assets/sdk-r/components/createAll/override-sdk/template/DataReference/SearchForm.tsx +3 -4
  193. package/tests/assets/sdk-r/components/createAll/override-sdk/template/DefaultForm/DefaultForm.css +71 -0
  194. package/tests/assets/sdk-r/components/createAll/override-sdk/template/DefaultForm/DefaultForm.tsx +45 -9
  195. package/tests/assets/sdk-r/components/createAll/override-sdk/template/FieldGroupTemplate/FieldGroupTemplate.tsx +10 -3
  196. package/tests/assets/sdk-r/components/createAll/override-sdk/template/ListView/ListView.tsx +139 -59
  197. package/tests/assets/sdk-r/components/createAll/override-sdk/template/ListView/hooks.ts +80 -13
  198. package/tests/assets/sdk-r/components/createAll/override-sdk/template/ListView/utils.ts +13 -3
  199. package/tests/assets/sdk-r/components/createAll/override-sdk/template/MultiReferenceReadOnly/MultiReferenceReadOnly.tsx +16 -1
  200. package/tests/assets/sdk-r/components/createAll/override-sdk/template/SimpleTableManual/SimpleTableManual.tsx +167 -93
  201. package/tests/assets/sdk-r/components/createAll/override-sdk/template/SimpleTableSelect/SimpleTableSelect.tsx +71 -56
  202. package/tests/assets/sdk-r/components/createAll/override-sdk/template/SingleReferenceReadOnly/SingleReferenceReadOnly.tsx +12 -7
  203. package/tests/assets/sdk-r/components/createAll/override-sdk/widget/Attachment/Attachment.tsx +119 -26
  204. package/tests/assets/sdk-r/components/createAll/override-sdk/widget/Attachment/AttachmentUtils.ts +1 -1
  205. package/tests/assets/sdk-r/components/createAll/override-sdk/widget/CaseHistory/CaseHistory.tsx +16 -12
  206. package/tests/assets/sdk-r/components/createAll/override-sdk/widget/FileUtility/FileUtility.tsx +40 -28
  207. package/tests/assets/sdk-r/components/createAll/override-sdk/widget/ToDo/ToDo.tsx +14 -6
  208. package/SECURITY.md +0 -10
@@ -31,6 +31,16 @@ const useStyles = makeStyles(theme => ({
31
31
  },
32
32
  noPaddingBottom: {
33
33
  paddingBottom: '0 !important'
34
+ },
35
+ htmlContent: {
36
+ '& ul': {
37
+ paddingLeft: '30px',
38
+ listStyleType: 'disc'
39
+ },
40
+ '& ol': {
41
+ paddingLeft: '30px',
42
+ listStyleType: 'decimal'
43
+ }
34
44
  }
35
45
  }));
36
46
 
@@ -48,12 +58,14 @@ function formatItemValue(value) {
48
58
  export default function FieldValueList(props: FieldValueListProps) {
49
59
  const { name, value, variant = 'inline', isHtml = false } = props;
50
60
  const classes = useStyles();
61
+ const isCompact = variant === 'inline-compact';
51
62
 
52
63
  function getGridItemLabel() {
53
64
  return (
54
- <Grid2 size={{ xs: variant === 'stacked' ? 12 : 4 }} className={variant === 'stacked' ? classes.noPaddingBottom : ''}>
65
+ <Grid2 size={{ xs: variant === 'stacked' ? 12 : isCompact ? 'auto' : 4 }} className={variant === 'stacked' ? classes.noPaddingBottom : ''}>
55
66
  <Typography variant='body2' component='span' className={`${classes.fieldLabel}`}>
56
67
  {name}
68
+ {isCompact ? ':' : ''}
57
69
  </Typography>
58
70
  </Grid2>
59
71
  );
@@ -63,9 +75,12 @@ export default function FieldValueList(props: FieldValueListProps) {
63
75
  const formattedValue = formatItemValue(value);
64
76
 
65
77
  return (
66
- <Grid2 size={{ xs: variant === 'stacked' || !name ? 12 : 8 }} className={variant === 'stacked' ? classes.noPaddingTop : ''}>
78
+ <Grid2
79
+ size={{ xs: variant === 'stacked' || !name ? 12 : isCompact ? 'grow' : 8 }}
80
+ className={variant === 'stacked' ? classes.noPaddingTop : ''}
81
+ >
67
82
  {isHtml ? (
68
- <div dangerouslySetInnerHTML={{ __html: formattedValue }} />
83
+ <div className={classes.htmlContent} dangerouslySetInnerHTML={{ __html: formattedValue }} />
69
84
  ) : (
70
85
  <Typography variant={variant === 'stacked' ? 'h6' : 'body2'} component='span' className={classes.fieldValue}>
71
86
  {formattedValue}
@@ -76,7 +91,7 @@ export default function FieldValueList(props: FieldValueListProps) {
76
91
  }
77
92
 
78
93
  return (
79
- <Grid2 container spacing={4} justifyContent='space-between'>
94
+ <Grid2 container spacing={isCompact ? 1 : 4} justifyContent={isCompact ? undefined : 'space-between'}>
80
95
  {name ? getGridItemLabel() : null}
81
96
  {getGridItemValue()}
82
97
  </Grid2>
@@ -20,6 +20,7 @@ interface OperatorProps extends PConnProps {
20
20
  updateLabel: string;
21
21
  updateOperator: { userName: string; userId: string };
22
22
  displayLabel?: any;
23
+ displayMode?: string;
23
24
  }
24
25
 
25
26
  const useStyles = makeStyles(theme => ({
@@ -30,6 +31,13 @@ const useStyles = makeStyles(theme => ({
30
31
  popover: {
31
32
  padding: theme.spacing(1),
32
33
  margin: theme.spacing(1)
34
+ },
35
+ fieldLabel: {
36
+ fontWeight: 400,
37
+ color: theme.palette.text.secondary
38
+ },
39
+ fieldValue: {
40
+ color: theme.palette.text.primary
33
41
  }
34
42
  }));
35
43
 
@@ -72,80 +80,84 @@ export default function Operator(props: OperatorProps) {
72
80
  const localizedVal = PCore.getLocaleUtils().getLocaleValue;
73
81
  const localeCategory = 'Operator';
74
82
 
75
- operatorPreviewPromise.then((res: any) => {
76
- const fillerString = '---';
77
- let fields: any = [];
78
- if (res.data && res.data.pyOperatorInfo && res.data.pyOperatorInfo.pyUserName) {
79
- fields = [
80
- {
81
- id: 'pyPosition',
82
- name: localizedVal('Position', localeCategory),
83
- value: res.data.pyOperatorInfo.pyPosition ? res.data.pyOperatorInfo.pyPosition : fillerString
84
- },
85
- {
86
- id: 'pyOrganization',
87
- name: localizedVal('Organization', localeCategory),
88
- value: res.data.pyOperatorInfo.pyOrganization ? res.data.pyOperatorInfo.pyOrganization : fillerString
89
- },
90
- {
91
- id: 'ReportToUserName',
92
- name: localizedVal('Reports to', localeCategory),
93
- value: res.data.pyOperatorInfo.pyReportToUserName ? res.data.pyOperatorInfo.pyReportToUserName : fillerString
94
- },
95
- {
96
- id: 'pyTelephone',
97
- name: localizedVal('Telephone', localeCategory),
98
- value: res.data.pyOperatorInfo.pyTelephone ? (
99
- <a href={`tel:${res.data.pyOperatorInfo.pyTelephone}`}>{res.data.pyOperatorInfo.pyTelephone}</a>
100
- ) : (
101
- fillerString
102
- )
103
- },
104
- {
105
- id: 'pyEmailAddress',
106
- name: localizedVal('Email address', localeCategory),
107
- value: res.data.pyOperatorInfo.pyEmailAddress ? (
108
- <a href={`mailto:${res.data.pyOperatorInfo.pyEmailAddress}`}>{res.data.pyOperatorInfo.pyEmailAddress}</a>
109
- ) : (
110
- fillerString
111
- )
112
- }
113
- ];
114
- } else {
115
- console.log(
116
- `Operator: PCore.getUserApi().getOperatorDetails(${caseOpId}); returned empty res.data.pyOperatorInfo.pyUserName - adding default`
117
- );
118
- fields = [
119
- {
120
- id: 'pyPosition',
121
- name: localizedVal('Position', localeCategory),
122
- value: fillerString
123
- },
124
- {
125
- id: 'pyOrganization',
126
- name: localizedVal('Organization', localeCategory),
127
- value: fillerString
128
- },
129
- {
130
- id: 'ReportToUserName',
131
- name: localizedVal('Reports to', localeCategory),
132
- value: fillerString
133
- },
134
- {
135
- id: 'pyTelephone',
136
- name: localizedVal('Telephone', localeCategory),
137
- value: fillerString
138
- },
139
- {
140
- id: 'pyEmailAddress',
141
- name: localizedVal('Email address', localeCategory),
142
- value: fillerString
143
- }
144
- ];
145
- }
146
- // Whatever the fields are, update the component's popoverFields
147
- setPopoverFields(fields);
148
- });
83
+ operatorPreviewPromise
84
+ .then((res: any) => {
85
+ const fillerString = '---';
86
+ let fields: any = [];
87
+ if (res.data && res.data.pyOperatorInfo && res.data.pyOperatorInfo.pyUserName) {
88
+ fields = [
89
+ {
90
+ id: 'pyPosition',
91
+ name: localizedVal('Position', localeCategory),
92
+ value: res.data.pyOperatorInfo.pyPosition ? res.data.pyOperatorInfo.pyPosition : fillerString
93
+ },
94
+ {
95
+ id: 'pyOrganization',
96
+ name: localizedVal('Organization', localeCategory),
97
+ value: res.data.pyOperatorInfo.pyOrganization ? res.data.pyOperatorInfo.pyOrganization : fillerString
98
+ },
99
+ {
100
+ id: 'ReportToUserName',
101
+ name: localizedVal('Reports to', localeCategory),
102
+ value: res.data.pyOperatorInfo.pyReportToUserName ? res.data.pyOperatorInfo.pyReportToUserName : fillerString
103
+ },
104
+ {
105
+ id: 'pyTelephone',
106
+ name: localizedVal('Telephone', localeCategory),
107
+ value: res.data.pyOperatorInfo.pyTelephone ? (
108
+ <a href={`tel:${res.data.pyOperatorInfo.pyTelephone}`}>{res.data.pyOperatorInfo.pyTelephone}</a>
109
+ ) : (
110
+ fillerString
111
+ )
112
+ },
113
+ {
114
+ id: 'pyEmailAddress',
115
+ name: localizedVal('Email address', localeCategory),
116
+ value: res.data.pyOperatorInfo.pyEmailAddress ? (
117
+ <a href={`mailto:${res.data.pyOperatorInfo.pyEmailAddress}`}>{res.data.pyOperatorInfo.pyEmailAddress}</a>
118
+ ) : (
119
+ fillerString
120
+ )
121
+ }
122
+ ];
123
+ } else {
124
+ console.log(
125
+ `Operator: PCore.getUserApi().getOperatorDetails(${caseOpId}); returned empty res.data.pyOperatorInfo.pyUserName - adding default`
126
+ );
127
+ fields = [
128
+ {
129
+ id: 'pyPosition',
130
+ name: localizedVal('Position', localeCategory),
131
+ value: fillerString
132
+ },
133
+ {
134
+ id: 'pyOrganization',
135
+ name: localizedVal('Organization', localeCategory),
136
+ value: fillerString
137
+ },
138
+ {
139
+ id: 'ReportToUserName',
140
+ name: localizedVal('Reports to', localeCategory),
141
+ value: fillerString
142
+ },
143
+ {
144
+ id: 'pyTelephone',
145
+ name: localizedVal('Telephone', localeCategory),
146
+ value: fillerString
147
+ },
148
+ {
149
+ id: 'pyEmailAddress',
150
+ name: localizedVal('Email address', localeCategory),
151
+ value: fillerString
152
+ }
153
+ ];
154
+ }
155
+ // Whatever the fields are, update the component's popoverFields
156
+ setPopoverFields(fields);
157
+ })
158
+ .catch(e => {
159
+ console.error(e);
160
+ });
149
161
 
150
162
  setPopoverAnchorEl(event.currentTarget);
151
163
  }
@@ -185,6 +197,45 @@ export default function Operator(props: OperatorProps) {
185
197
 
186
198
  // End of popover-related
187
199
 
200
+ const { displayMode } = props;
201
+
202
+ if (displayMode === 'DISPLAY_ONLY') {
203
+ return (
204
+ <>
205
+ <Grid2 container spacing={4} justifyContent='space-between'>
206
+ <Grid2 size={{ xs: 4 }}>
207
+ <Typography variant='body2' component='span' className={classes.fieldLabel}>
208
+ {caseOpLabel}
209
+ </Typography>
210
+ </Grid2>
211
+ <Grid2 size={{ xs: 8 }}>
212
+ <div style={{ display: 'flex', flexWrap: 'wrap', gap: '0.5rem', alignItems: 'baseline' }}>
213
+ <Typography variant='body2' component='span' className={classes.fieldValue} onClick={showOperatorDetails} sx={{ cursor: 'pointer' }}>
214
+ {caseOpName}
215
+ </Typography>
216
+ <Typography variant='caption' component='span' sx={{ color: 'text.secondary' }}>
217
+ {Utils.generateDateTime(caseTime, 'DateTime-Since')}
218
+ </Typography>
219
+ </div>
220
+ </Grid2>
221
+ </Grid2>
222
+ <Popover
223
+ id={popoverId}
224
+ open={popoverOpen}
225
+ anchorEl={popoverAnchorEl}
226
+ onClose={handlePopoverClose}
227
+ anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}
228
+ transformOrigin={{ vertical: 'top', horizontal: 'center' }}
229
+ slotProps={{
230
+ paper: { style: { maxWidth: '45ch' } }
231
+ }}
232
+ >
233
+ {getPopoverGrid()}
234
+ </Popover>
235
+ </>
236
+ );
237
+ }
238
+
188
239
  return (
189
240
  <>
190
241
  <TextField
@@ -1,6 +1,21 @@
1
- import React, { forwardRef } from 'react';
2
- import { Editor } from '@tinymce/tinymce-react';
3
- import { FormControl, FormHelperText, InputLabel, useTheme } from '@mui/material';
1
+ import React, { forwardRef, useCallback, useEffect, useRef } from 'react';
2
+ import { useEditor, EditorContent } from '@tiptap/react';
3
+ import StarterKit from '@tiptap/starter-kit';
4
+ import Link from '@tiptap/extension-link';
5
+ import Image from '@tiptap/extension-image';
6
+ import Placeholder from '@tiptap/extension-placeholder';
7
+ import { FormControl, FormHelperText, FormLabel, useTheme, IconButton, Box } from '@mui/material';
8
+ import {
9
+ FormatBold,
10
+ FormatItalic,
11
+ StrikethroughS,
12
+ FormatListBulleted,
13
+ FormatListNumbered,
14
+ FormatIndentDecrease,
15
+ FormatIndentIncrease,
16
+ InsertLink,
17
+ Image as ImageIcon
18
+ } from '@mui/icons-material';
4
19
  import makeStyles from '@mui/styles/makeStyles';
5
20
  import { useAfterInitialEffect, useConsolidatedRef, useUID } from '@pega/react-sdk-components/lib/hooks';
6
21
 
@@ -10,6 +25,44 @@ const useStyles = makeStyles(theme => ({
10
25
  transform: 'translate(0, 0px) scale(1)',
11
26
  marginBottom: '5px',
12
27
  color: theme.palette.text.secondary
28
+ },
29
+ editorWrapper: {
30
+ border: `1px solid ${theme.palette.divider}`,
31
+ borderRadius: 4,
32
+ minHeight: 130,
33
+ '& .ProseMirror': {
34
+ padding: '8px 12px',
35
+ minHeight: 100,
36
+ outline: 'none',
37
+ fontFamily: theme.typography.fontFamily,
38
+ fontSize: theme.typography.fontSize,
39
+ color: theme.palette.text.primary,
40
+ '& p.is-editor-empty:first-child::before': {
41
+ color: theme.palette.text.secondary,
42
+ opacity: 0.7,
43
+ content: 'attr(data-placeholder)',
44
+ float: 'left',
45
+ height: 0,
46
+ pointerEvents: 'none'
47
+ },
48
+ '& a': { color: theme.palette.primary.main },
49
+ '& h1, & h2, & h3, & h4, & h5, & h6': { color: theme.palette.text.primary },
50
+ '& blockquote': {
51
+ color: theme.palette.text.secondary,
52
+ borderLeft: `4px solid ${theme.palette.primary.light}`,
53
+ paddingLeft: 8
54
+ },
55
+ '& ul, & ol': {
56
+ paddingLeft: 24
57
+ }
58
+ }
59
+ },
60
+ toolbar: {
61
+ display: 'flex',
62
+ flexWrap: 'wrap',
63
+ gap: 2,
64
+ padding: '4px 8px',
65
+ borderTop: `1px solid ${theme.palette.divider}`
13
66
  }
14
67
  }));
15
68
 
@@ -36,113 +89,154 @@ const RichTextEditor = forwardRef(function RichTextEditor(props: RichTextEditorP
36
89
  const { id = uid, defaultValue, label, labelHidden, info, testId, placeholder, disabled, required, readOnly, error, onBlur, onChange } = props;
37
90
 
38
91
  const editorRef: any = useConsolidatedRef(ref);
39
- let richTextComponent: any = null;
92
+ const fileInputRef = useRef<HTMLInputElement>(null);
93
+
94
+ const editor = useEditor({
95
+ extensions: [StarterKit, Link.configure({ openOnClick: false }), Image.configure({ allowBase64: true }), Placeholder.configure({ placeholder })],
96
+ content: defaultValue || '',
97
+ editable: !readOnly && !disabled,
98
+ onUpdate: ({ editor: ed }) => {
99
+ onChange?.(ed.getHTML());
100
+ },
101
+ onBlur: ({ event }) => {
102
+ onBlur?.(event);
103
+ }
104
+ });
40
105
 
41
106
  useAfterInitialEffect(() => {
42
- editorRef?.current.mode.set(readOnly || disabled ? 'readonly' : 'design');
107
+ editor?.setEditable(!readOnly && !disabled);
43
108
  }, [readOnly, disabled]);
44
109
 
45
- const filePickerCallback = cb => {
46
- const input = document.createElement('input');
47
- input.setAttribute('type', 'file');
48
- input.setAttribute('accept', 'image/*');
110
+ useEffect(() => {
111
+ if (editor) {
112
+ editorRef.current = editor;
113
+ }
114
+ }, [editor]);
115
+
116
+ const handleImageUpload = useCallback(() => {
117
+ fileInputRef.current?.click();
118
+ }, []);
49
119
 
50
- input.addEventListener('change', (e: any) => {
51
- const file = e.target.files[0];
120
+ const onFileChange = useCallback(
121
+ (e: React.ChangeEvent<HTMLInputElement>) => {
122
+ const file = e.target.files?.[0];
123
+ if (!file || !editor) return;
52
124
 
53
- const reader: any = new FileReader();
125
+ const reader = new FileReader();
54
126
  reader.addEventListener('load', () => {
55
- /*
56
- Note: Now we need to register the blob in TinyMCEs image blob
57
- registry. In the next release this part hopefully won't be
58
- necessary, as we are looking to handle it internally.
59
- */
60
- const blobId = `blobid${new Date().getTime()}`;
61
- const blobCache = editorRef.current.editorUpload.blobCache;
62
- const base64 = reader.result.split(',')[1];
63
- const blobInfo = blobCache.create(blobId, file, base64);
64
- blobCache.add(blobInfo);
65
-
66
- /* call the callback and populate the Title field with the file name */
67
- cb(blobInfo.blobUri(), { title: file.name });
127
+ editor
128
+ .chain()
129
+ .focus()
130
+ .setImage({ src: reader.result as string })
131
+ .run();
68
132
  });
69
133
  reader.readAsDataURL(file);
70
- });
134
+ e.target.value = '';
135
+ },
136
+ [editor]
137
+ );
71
138
 
72
- input.click();
73
- };
139
+ const handleLinkInsert = useCallback(() => {
140
+ if (!editor) return;
141
+ const { from, to } = editor.state.selection;
142
+ const previousUrl = editor.getAttributes('link').href;
143
+ const url = window.prompt('URL', previousUrl);
144
+ if (url === null) return;
145
+
146
+ // Restore selection lost by the prompt dialog
147
+ editor.chain().focus().setTextSelection({ from, to }).run();
148
+
149
+ if (url === '') {
150
+ editor.chain().focus().extendMarkRange('link').unsetLink().run();
151
+ } else if (from === to) {
152
+ // No text selected — insert URL as linked text
153
+ editor
154
+ .chain()
155
+ .focus()
156
+ .insertContent({ type: 'text', text: url, marks: [{ type: 'link', attrs: { href: url } }] })
157
+ .run();
158
+ } else {
159
+ editor.chain().focus().setLink({ href: url }).run();
160
+ }
161
+ }, [editor]);
74
162
 
75
163
  if (readOnly) {
76
164
  const value = defaultValue || '--';
77
-
78
- richTextComponent = <div key={id} id={id} className='readonly-richtext-editor' dangerouslySetInnerHTML={{ __html: value }} />;
79
- } else {
80
- richTextComponent = (
81
- <Editor
82
- tinymceScriptSrc='tinymce/tinymce.min.js'
83
- onInit={(_evt, editor) => {
84
- editorRef.current = editor;
85
- }}
86
- id={id}
87
- initialValue={defaultValue}
88
- disabled={disabled}
89
- init={{
90
- skin: theme.palette.mode === 'dark' ? 'oxide-dark' : 'oxide',
91
- // ...other TinyMCE config...
92
- content_style: `
93
- body {
94
- font-family: ${theme.typography.fontFamily};
95
- font-size: ${theme.typography.fontSize}px;
96
- color: ${theme.palette.text.primary};
97
- background: ${theme.palette.background.paper};
98
- }
99
- a { color: ${theme.palette.primary.main}; }
100
- h1, h2, h3, h4, h5, h6 { color: ${theme.palette.text.primary}; font-family: ${theme.typography.fontFamily}; }
101
- blockquote { color: ${theme.palette.text.secondary}; border-left: 4px solid ${theme.palette.primary.light}; padding-left: 8px; }
102
- ul, ol { color: ${theme.palette.text.primary}; }
103
- input, textarea, select {
104
- background: ${theme.palette.background.paper};
105
- color: ${theme.palette.text.primary};
106
- border: 1px solid ${theme.palette.divider};
107
- border-radius: 4px;
108
- padding: 6px 10px;
109
- font-size: 1em;
110
- font-family: inherit;
111
- }
112
- .mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {
113
- color: ${theme.palette.text.secondary};
114
- opacity: 0.7;
115
- }
116
- /* Add more styles as needed */
117
- `,
118
- placeholder,
119
- menubar: false,
120
- statusbar: false,
121
- min_height: 130,
122
- plugins: ['lists', 'advlist', 'autolink', 'image', 'link', 'autoresize'],
123
- autoresize_bottom_margin: 0,
124
- toolbar: disabled ? false : 'blocks | bold italic strikethrough | bullist numlist outdent indent | link image',
125
- toolbar_location: 'bottom',
126
- // content_style: 'body { font-family:Helvetica, Arial,sans-serif; font-size:14px }',
127
- branding: false,
128
- paste_data_images: true,
129
- file_picker_types: 'image',
130
- file_picker_callback: filePickerCallback
131
- }}
132
- onBlur={onBlur}
133
- onEditorChange={onChange}
134
- />
165
+ return (
166
+ <FormControl variant='standard' data-test-id={testId} error={error} required={required} fullWidth>
167
+ {!labelHidden && (
168
+ <FormLabel htmlFor={id} className={classes.fieldLabel}>
169
+ {label}
170
+ </FormLabel>
171
+ )}
172
+ <div key={id} id={id} className='readonly-richtext-editor' dangerouslySetInnerHTML={{ __html: value }} />
173
+ {info && <FormHelperText>{info}</FormHelperText>}
174
+ </FormControl>
135
175
  );
136
176
  }
137
177
 
138
178
  return (
139
- <FormControl variant='standard' data-test-id={testId} error={error} required={required}>
179
+ <FormControl variant='standard' data-test-id={testId} error={error} required={required} fullWidth>
140
180
  {!labelHidden && (
141
- <InputLabel id='demo-simple-select-error-label' className={classes.fieldLabel}>
181
+ <FormLabel htmlFor={id} className={classes.fieldLabel}>
142
182
  {label}
143
- </InputLabel>
183
+ </FormLabel>
144
184
  )}
145
- {richTextComponent}
185
+ <Box className={classes.editorWrapper} sx={{ background: theme.palette.background.paper }}>
186
+ <EditorContent editor={editor} id={id} />
187
+ {!disabled && (
188
+ <div className={classes.toolbar}>
189
+ <IconButton
190
+ size='small'
191
+ onClick={() => editor?.chain().focus().toggleBold().run()}
192
+ color={editor?.isActive('bold') ? 'primary' : 'default'}
193
+ >
194
+ <FormatBold fontSize='small' />
195
+ </IconButton>
196
+ <IconButton
197
+ size='small'
198
+ onClick={() => editor?.chain().focus().toggleItalic().run()}
199
+ color={editor?.isActive('italic') ? 'primary' : 'default'}
200
+ >
201
+ <FormatItalic fontSize='small' />
202
+ </IconButton>
203
+ <IconButton
204
+ size='small'
205
+ onClick={() => editor?.chain().focus().toggleStrike().run()}
206
+ color={editor?.isActive('strike') ? 'primary' : 'default'}
207
+ >
208
+ <StrikethroughS fontSize='small' />
209
+ </IconButton>
210
+ <IconButton
211
+ size='small'
212
+ onClick={() => editor?.chain().focus().toggleBulletList().run()}
213
+ color={editor?.isActive('bulletList') ? 'primary' : 'default'}
214
+ >
215
+ <FormatListBulleted fontSize='small' />
216
+ </IconButton>
217
+ <IconButton
218
+ size='small'
219
+ onClick={() => editor?.chain().focus().toggleOrderedList().run()}
220
+ color={editor?.isActive('orderedList') ? 'primary' : 'default'}
221
+ >
222
+ <FormatListNumbered fontSize='small' />
223
+ </IconButton>
224
+ <IconButton size='small' onClick={() => editor?.chain().focus().liftListItem('listItem').run()}>
225
+ <FormatIndentDecrease fontSize='small' />
226
+ </IconButton>
227
+ <IconButton size='small' onClick={() => editor?.chain().focus().sinkListItem('listItem').run()}>
228
+ <FormatIndentIncrease fontSize='small' />
229
+ </IconButton>
230
+ <IconButton size='small' onClick={handleLinkInsert} color={editor?.isActive('link') ? 'primary' : 'default'}>
231
+ <InsertLink fontSize='small' />
232
+ </IconButton>
233
+ <IconButton size='small' onClick={handleImageUpload}>
234
+ <ImageIcon fontSize='small' />
235
+ </IconButton>
236
+ </div>
237
+ )}
238
+ </Box>
239
+ <input ref={fileInputRef} type='file' accept='image/*' style={{ display: 'none' }} onChange={onFileChange} />
146
240
  {info && <FormHelperText>{info}</FormHelperText>}
147
241
  </FormControl>
148
242
  );