@mgdis/mg-components 6.4.0 → 6.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/dist/cjs/{index-a3269bfc.js → index-019dd5c0.js} +3 -3
  2. package/dist/cjs/{index-a3269bfc.js.map → index-019dd5c0.js.map} +1 -1
  3. package/dist/cjs/{index-911898e4.js → index-1a5a1081.js} +270 -241
  4. package/dist/cjs/index-1a5a1081.js.map +1 -0
  5. package/dist/cjs/{index.es-325100d7.js → index.es-903492c5.js} +43 -44
  6. package/dist/cjs/index.es-903492c5.js.map +1 -0
  7. package/dist/cjs/loader.cjs.js +2 -2
  8. package/dist/cjs/mg-action-more_36.cjs.entry.js +2418 -1996
  9. package/dist/cjs/mg-action-more_36.cjs.entry.js.map +1 -1
  10. package/dist/cjs/mg-alert.cjs.entry.js +8 -8
  11. package/dist/cjs/mg-components.cjs.js +3 -3
  12. package/dist/cjs/mg-components.cjs.js.map +1 -1
  13. package/dist/cjs/mg-input-rich-text-editor.cjs.entry.js +16790 -0
  14. package/dist/cjs/mg-input-rich-text-editor.cjs.entry.js.map +1 -0
  15. package/dist/cjs/mg-input.conf-5bbcea79.js +23 -0
  16. package/dist/cjs/mg-input.conf-5bbcea79.js.map +1 -0
  17. package/dist/cjs/mg-loader.cjs.entry.js +6 -6
  18. package/dist/cjs/mg-progress.cjs.entry.js +12 -12
  19. package/dist/collection/assets/icons/index.js +1 -1
  20. package/dist/collection/assets/icons/index.js.map +1 -1
  21. package/dist/collection/collection-manifest.json +2 -1
  22. package/dist/collection/components/atoms/mg-icon/mg-icon.js +1 -1
  23. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.conf.js +1 -0
  24. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.conf.js.map +1 -1
  25. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +68 -38
  26. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js.map +1 -1
  27. package/dist/collection/components/molecules/inputs/mg-input/mg-input.js +1 -1
  28. package/dist/collection/components/molecules/inputs/mg-input/mg-input.js.map +1 -1
  29. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +1 -1
  30. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js.map +1 -1
  31. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js +1 -1
  32. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js.map +1 -1
  33. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js +2 -2
  34. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js.map +1 -1
  35. package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js +1 -1
  36. package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js.map +1 -1
  37. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js +1 -1
  38. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js.map +1 -1
  39. package/dist/collection/components/molecules/inputs/mg-input-rich-text-editor/editor/index.js +110 -0
  40. package/dist/collection/components/molecules/inputs/mg-input-rich-text-editor/editor/index.js.map +1 -0
  41. package/dist/collection/components/molecules/inputs/mg-input-rich-text-editor/mg-input-rich-text-editor.js +846 -0
  42. package/dist/collection/components/molecules/inputs/mg-input-rich-text-editor/mg-input-rich-text-editor.js.map +1 -0
  43. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +1 -1
  44. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js.map +1 -1
  45. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js +3 -5
  46. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js.map +1 -1
  47. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js +1 -1
  48. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js.map +1 -1
  49. package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.js +1 -1
  50. package/dist/collection/components/molecules/internals/mg-item-more/mg-item-more.js +4 -4
  51. package/dist/collection/components/molecules/internals/mg-item-more/mg-item-more.js.map +1 -1
  52. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.conf.js +1 -1
  53. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.conf.js.map +1 -1
  54. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js +16 -17
  55. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js.map +1 -1
  56. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +19 -9
  57. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js.map +1 -1
  58. package/dist/collection/components/molecules/mg-action-more/mg-action-more.js +3 -3
  59. package/dist/collection/components/molecules/mg-action-more/mg-action-more.js.map +1 -1
  60. package/dist/collection/components/molecules/mg-alert/mg-alert.js +1 -1
  61. package/dist/collection/components/molecules/mg-details/mg-details.js +6 -1
  62. package/dist/collection/components/molecules/mg-details/mg-details.js.map +1 -1
  63. package/dist/collection/components/molecules/mg-form/mg-form.js +2 -2
  64. package/dist/collection/components/molecules/mg-form/mg-form.js.map +1 -1
  65. package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.conf.js +5 -2
  66. package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.conf.js.map +1 -1
  67. package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.js +74 -17
  68. package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.js.map +1 -1
  69. package/dist/collection/components/molecules/mg-loader/mg-loader.js +1 -1
  70. package/dist/collection/components/molecules/mg-message/mg-message.js +2 -2
  71. package/dist/collection/components/molecules/mg-modal/mg-modal.js +2 -2
  72. package/dist/collection/components/molecules/mg-pagination/mg-pagination.js +3 -3
  73. package/dist/collection/components/molecules/mg-panel/mg-panel.js +1 -1
  74. package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.js +1 -1
  75. package/dist/collection/components/molecules/mg-popover/mg-popover.conf.js +2 -0
  76. package/dist/collection/components/molecules/mg-popover/mg-popover.conf.js.map +1 -0
  77. package/dist/collection/components/molecules/mg-popover/mg-popover.js +90 -46
  78. package/dist/collection/components/molecules/mg-popover/mg-popover.js.map +1 -1
  79. package/dist/collection/components/molecules/mg-progress/mg-progress.js +1 -1
  80. package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.js +1 -1
  81. package/dist/collection/components/molecules/mg-tabs/mg-tabs.js +1 -1
  82. package/dist/collection/types/index.js.map +1 -1
  83. package/dist/collection/utils/behaviors.utils.js +4 -1
  84. package/dist/collection/utils/behaviors.utils.js.map +1 -1
  85. package/dist/collection/utils/floating-ui.utils.js +28 -0
  86. package/dist/collection/utils/floating-ui.utils.js.map +1 -0
  87. package/dist/components/floating-ui.utils.js +2094 -0
  88. package/dist/components/floating-ui.utils.js.map +1 -0
  89. package/dist/components/index.es.js +37 -38
  90. package/dist/components/index.es.js.map +1 -1
  91. package/dist/components/index2.js +2 -2
  92. package/dist/components/mg-action-more.js +8 -8
  93. package/dist/components/mg-action-more.js.map +1 -1
  94. package/dist/components/mg-alert.js +6 -6
  95. package/dist/components/mg-badge2.js +6 -6
  96. package/dist/components/mg-button2.js +6 -6
  97. package/dist/components/mg-card2.js +1 -1
  98. package/dist/components/mg-card2.js.map +1 -1
  99. package/dist/components/mg-character-left2.js +4 -4
  100. package/dist/components/mg-details.js +8 -3
  101. package/dist/components/mg-details.js.map +1 -1
  102. package/dist/components/mg-form.js +9 -9
  103. package/dist/components/mg-form.js.map +1 -1
  104. package/dist/components/mg-icon2.js +7 -7
  105. package/dist/components/mg-icon2.js.map +1 -1
  106. package/dist/components/mg-illustrated-message.js +69 -16
  107. package/dist/components/mg-illustrated-message.js.map +1 -1
  108. package/dist/components/mg-input-checkbox.js +11 -11
  109. package/dist/components/mg-input-checkbox.js.map +1 -1
  110. package/dist/components/mg-input-date.js +13 -13
  111. package/dist/components/mg-input-date.js.map +1 -1
  112. package/dist/components/mg-input-numeric.js +14 -14
  113. package/dist/components/mg-input-numeric.js.map +1 -1
  114. package/dist/components/mg-input-password.js +4 -4
  115. package/dist/components/mg-input-password.js.map +1 -1
  116. package/dist/components/mg-input-radio.js +8 -8
  117. package/dist/components/mg-input-radio.js.map +1 -1
  118. package/dist/components/mg-input-rich-text-editor.d.ts +11 -0
  119. package/dist/components/mg-input-rich-text-editor.js +16866 -0
  120. package/dist/components/mg-input-rich-text-editor.js.map +1 -0
  121. package/dist/components/mg-input-select2.js +8 -8
  122. package/dist/components/mg-input-select2.js.map +1 -1
  123. package/dist/components/mg-input-text2.js +11 -13
  124. package/dist/components/mg-input-text2.js.map +1 -1
  125. package/dist/components/mg-input-textarea.js +8 -8
  126. package/dist/components/mg-input-textarea.js.map +1 -1
  127. package/dist/components/mg-input-title2.js +4 -4
  128. package/dist/components/mg-input-toggle.js +7 -7
  129. package/dist/components/mg-input2.js +9 -9
  130. package/dist/components/mg-input2.js.map +1 -1
  131. package/dist/components/mg-item-more2.js +24 -22
  132. package/dist/components/mg-item-more2.js.map +1 -1
  133. package/dist/components/mg-loader.js +4 -4
  134. package/dist/components/mg-menu-item2.js +30 -20
  135. package/dist/components/mg-menu-item2.js.map +1 -1
  136. package/dist/components/mg-message2.js +7 -7
  137. package/dist/components/mg-message2.js.map +1 -1
  138. package/dist/components/mg-modal.js +11 -11
  139. package/dist/components/mg-modal.js.map +1 -1
  140. package/dist/components/mg-pagination2.js +9 -9
  141. package/dist/components/mg-panel.js +11 -11
  142. package/dist/components/mg-panel.js.map +1 -1
  143. package/dist/components/mg-popover-content2.js +4 -4
  144. package/dist/components/mg-popover-content2.js.map +1 -1
  145. package/dist/components/mg-popover2.js +89 -47
  146. package/dist/components/mg-popover2.js.map +1 -1
  147. package/dist/components/mg-progress.js +11 -11
  148. package/dist/components/mg-skip-links.js +3 -3
  149. package/dist/components/mg-tabs.js +13 -13
  150. package/dist/components/mg-tag.js +4 -4
  151. package/dist/components/mg-tooltip-content2.js +1 -1
  152. package/dist/components/mg-tooltip-content2.js.map +1 -1
  153. package/dist/components/mg-tooltip2.js +70 -41
  154. package/dist/components/mg-tooltip2.js.map +1 -1
  155. package/dist/esm/{index-1f32332a.js → index-5059254f.js} +270 -241
  156. package/dist/esm/index-5059254f.js.map +1 -0
  157. package/dist/esm/{index-9bd10f5d.js → index-6b7bdd63.js} +3 -3
  158. package/dist/esm/{index-9bd10f5d.js.map → index-6b7bdd63.js.map} +1 -1
  159. package/dist/esm/{index.es-a2587b72.js → index.es-b80b758c.js} +38 -39
  160. package/dist/esm/index.es-b80b758c.js.map +1 -0
  161. package/dist/esm/loader.js +3 -3
  162. package/dist/esm/mg-action-more_36.entry.js +2370 -1948
  163. package/dist/esm/mg-action-more_36.entry.js.map +1 -1
  164. package/dist/esm/mg-alert.entry.js +8 -8
  165. package/dist/esm/mg-components.js +4 -4
  166. package/dist/esm/mg-components.js.map +1 -1
  167. package/dist/esm/mg-input-rich-text-editor.entry.js +16786 -0
  168. package/dist/esm/mg-input-rich-text-editor.entry.js.map +1 -0
  169. package/dist/esm/mg-input.conf-712c7bb6.js +16 -0
  170. package/dist/esm/mg-input.conf-712c7bb6.js.map +1 -0
  171. package/dist/esm/mg-loader.entry.js +6 -6
  172. package/dist/esm/mg-progress.entry.js +12 -12
  173. package/dist/mg-components/mg-components.esm.js +1 -1
  174. package/dist/mg-components/mg-components.esm.js.map +1 -1
  175. package/dist/mg-components/{p-f48d964f.entry.js → p-0ae49cc4.entry.js} +2 -2
  176. package/dist/mg-components/p-17f0b7eb.entry.js +2 -0
  177. package/dist/mg-components/p-17f0b7eb.entry.js.map +1 -0
  178. package/dist/mg-components/p-1c126a81.entry.js +2 -0
  179. package/dist/mg-components/p-1c126a81.entry.js.map +1 -0
  180. package/dist/mg-components/p-2884f369.js +2 -0
  181. package/dist/mg-components/p-2884f369.js.map +1 -0
  182. package/dist/mg-components/{p-3b052ac0.entry.js → p-361cc090.entry.js} +2 -2
  183. package/dist/mg-components/p-3c6710be.js +2 -0
  184. package/dist/mg-components/p-3c6710be.js.map +1 -0
  185. package/dist/mg-components/{p-dc436f3c.js → p-4049bd40.js} +2 -2
  186. package/dist/mg-components/{p-0ead5317.entry.js → p-c4f37d1f.entry.js} +2 -2
  187. package/dist/mg-components/p-e39791fa.js +3 -0
  188. package/dist/mg-components/p-e39791fa.js.map +1 -0
  189. package/dist/types/assets/icons/index.d.ts +1 -0
  190. package/dist/types/components/atoms/mg-tooltip/mg-tooltip.conf.d.ts +6 -0
  191. package/dist/types/components/atoms/mg-tooltip/mg-tooltip.d.ts +7 -6
  192. package/dist/types/components/molecules/inputs/mg-input-rich-text-editor/editor/index.d.ts +21 -0
  193. package/dist/types/components/molecules/inputs/mg-input-rich-text-editor/mg-input-rich-text-editor.d.ts +202 -0
  194. package/dist/types/components/molecules/menu/mg-menu/mg-menu.conf.d.ts +2 -6
  195. package/dist/types/components/molecules/menu/mg-menu/mg-menu.d.ts +3 -2
  196. package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.d.ts +14 -7
  197. package/dist/types/components/molecules/mg-details/mg-details.d.ts +4 -0
  198. package/dist/types/components/molecules/mg-illustrated-message/mg-illustrated-message.conf.d.ts +10 -3
  199. package/dist/types/components/molecules/mg-illustrated-message/mg-illustrated-message.d.ts +17 -3
  200. package/dist/types/components/molecules/mg-popover/mg-popover.conf.d.ts +6 -0
  201. package/dist/types/components/molecules/mg-popover/mg-popover.d.ts +13 -8
  202. package/dist/types/components.d.ts +225 -14
  203. package/dist/types/types/index.d.ts +4 -0
  204. package/dist/types/utils/floating-ui.utils.d.ts +19 -0
  205. package/ide/intellij/web-types.json +374 -17
  206. package/ide/vscode/css-custom-data.json +4 -0
  207. package/ide/vscode/html-custom-data.json +289 -4
  208. package/package.json +25 -24
  209. package/dist/cjs/index-911898e4.js.map +0 -1
  210. package/dist/cjs/index.es-325100d7.js.map +0 -1
  211. package/dist/components/popper.js +0 -1794
  212. package/dist/components/popper.js.map +0 -1
  213. package/dist/esm/index-1f32332a.js.map +0 -1
  214. package/dist/esm/index.es-a2587b72.js.map +0 -1
  215. package/dist/mg-components/p-35898742.js +0 -3
  216. package/dist/mg-components/p-35898742.js.map +0 -1
  217. package/dist/mg-components/p-6810a565.entry.js +0 -2
  218. package/dist/mg-components/p-6810a565.entry.js.map +0 -1
  219. package/dist/mg-components/p-b986c107.js +0 -2
  220. package/dist/mg-components/p-b986c107.js.map +0 -1
  221. /package/dist/mg-components/{p-f48d964f.entry.js.map → p-0ae49cc4.entry.js.map} +0 -0
  222. /package/dist/mg-components/{p-3b052ac0.entry.js.map → p-361cc090.entry.js.map} +0 -0
  223. /package/dist/mg-components/{p-dc436f3c.js.map → p-4049bd40.js.map} +0 -0
  224. /package/dist/mg-components/{p-0ead5317.entry.js.map → p-c4f37d1f.entry.js.map} +0 -0
@@ -0,0 +1,846 @@
1
+ import { h } from "@stencil/core";
2
+ import { ClassList, isValidString, toString } from "@mgdis/stencil-helpers";
3
+ import { classReadonly, classDisabled } from "../mg-input/mg-input.conf";
4
+ import { initLocales } from "../../../../locales";
5
+ import { defineEditor } from "./editor";
6
+ export class MgInputRichTextEditor {
7
+ constructor() {
8
+ // hasDisplayedError (triggered by blur event)
9
+ this.hasDisplayedError = false;
10
+ // Classes
11
+ this.classFocus = 'mg-u-is-focused';
12
+ /**
13
+ * Define the value of the editor
14
+ * Can be either HTML string or plain text
15
+ */
16
+ this.value = '';
17
+ /**
18
+ * Define if label is visible
19
+ */
20
+ this.labelHide = false;
21
+ /**
22
+ * Define the number of visible text lines for the control
23
+ */
24
+ this.rows = 5;
25
+ /**
26
+ * Define if input is required
27
+ */
28
+ this.required = false;
29
+ /**
30
+ * Define if the editor is readonly
31
+ */
32
+ this.readonly = false;
33
+ /**
34
+ * Define if input is disabled
35
+ */
36
+ this.disabled = false;
37
+ /**
38
+ * Define tooltip position
39
+ */
40
+ this.tooltipPosition = 'input';
41
+ /**
42
+ * Component classes
43
+ */
44
+ this.classCollection = new ClassList(['mg-c-input--rich-text-editor']);
45
+ /**
46
+ * Check if the field is empty taking into account the value format
47
+ * @returns truthy is value is invalid
48
+ */
49
+ this.isEmpty = () => {
50
+ const textContent = this.getTextContent();
51
+ return !(isValidString(textContent) && textContent !== '\n');
52
+ };
53
+ /**
54
+ * Extract the text without HTML tags from value
55
+ * @returns text content
56
+ */
57
+ this.getTextContent = () => this.value.replace(/<[^>]*>/g, '').trim();
58
+ /**
59
+ * Get pattern validity
60
+ * @returns is pattern valid
61
+ */
62
+ this.getPatternValidity = () => this.pattern === undefined || new RegExp(`^${this.pattern}$`, 'u').test(this.getTextContent());
63
+ /**
64
+ * Check if input is valid
65
+ */
66
+ this.checkValidity = () => {
67
+ this.setValidity(this.readonly || this.disabled || ((this.required ? !this.isEmpty() : true) && this.getPatternValidity()));
68
+ };
69
+ /**
70
+ * Set input error message
71
+ * @param errorMessage - errorMessage override
72
+ */
73
+ this.setErrorMessage = (errorMessage) => {
74
+ this.errorMessage = undefined;
75
+ if (this.valid)
76
+ return;
77
+ else if (isValidString(errorMessage)) {
78
+ this.errorMessage = errorMessage;
79
+ }
80
+ else if (this.required && this.isEmpty()) {
81
+ this.errorMessage = this.messages.errors.required;
82
+ }
83
+ else if (!this.getPatternValidity()) {
84
+ this.errorMessage = this.patternErrorMessage;
85
+ }
86
+ };
87
+ /**
88
+ * Handle focus event
89
+ */
90
+ this.handleFocus = () => {
91
+ this.classCollection.add(this.classFocus);
92
+ this.classCollection = new ClassList(this.classCollection.classes);
93
+ };
94
+ /**
95
+ * Handles the blur event on the editor
96
+ * Checks validity and displays error messages if necessary
97
+ */
98
+ this.handleBlur = () => {
99
+ // Manage focus
100
+ this.classCollection.delete(this.classFocus);
101
+ this.classCollection = new ClassList(this.classCollection.classes);
102
+ if (!this.readonly) {
103
+ this.checkValidity();
104
+ this.setErrorMessage();
105
+ if (!this.valid) {
106
+ this.hasDisplayedError = true;
107
+ }
108
+ }
109
+ };
110
+ /**
111
+ * Handle `text-change` event
112
+ */
113
+ this.handleTextChange = () => {
114
+ // Get HTML content
115
+ const htmlContent = this.editor.getSemanticHTML();
116
+ this.value = htmlContent;
117
+ // Emit the HTML content for form compatibility
118
+ this.valueChange.emit(htmlContent);
119
+ // Check validity but do not display the error message if the error message is already displayed
120
+ this.checkValidity();
121
+ if (this.hasDisplayedError) {
122
+ this.setErrorMessage();
123
+ }
124
+ };
125
+ }
126
+ watchReadonly(newValue) {
127
+ if (newValue)
128
+ this.classCollection.add(classReadonly);
129
+ else
130
+ this.classCollection.delete(classReadonly);
131
+ }
132
+ watchDisabled(newValue) {
133
+ var _a, _b;
134
+ if (newValue) {
135
+ this.classCollection.add(classDisabled);
136
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.disable();
137
+ }
138
+ else {
139
+ this.classCollection.delete(classDisabled);
140
+ (_b = this.editor) === null || _b === void 0 ? void 0 : _b.enable();
141
+ }
142
+ }
143
+ handleValidityChange() {
144
+ if (this.editor !== undefined && this.editor !== null) {
145
+ this.checkValidity();
146
+ if (this.hasDisplayedError) {
147
+ this.setErrorMessage();
148
+ this.hasDisplayedError = false;
149
+ }
150
+ }
151
+ }
152
+ validatePattern(newValue) {
153
+ if (newValue !== undefined && !(isValidString(this.pattern) && isValidString(this.patternErrorMessage))) {
154
+ throw new Error(`<mg-input-rich-text-editor> props "pattern" and "patternErrorMessage" must be non-empty string and paired. Passed value: "pattern='${toString(this.pattern)}'" and "patternErrorMessage='${toString(this.patternErrorMessage)}'".`);
155
+ }
156
+ }
157
+ /**
158
+ * Get editor content as HTML
159
+ * @returns HTML content of the editor
160
+ */
161
+ async getHTML() {
162
+ return new Promise(resolve => {
163
+ requestAnimationFrame(() => {
164
+ resolve(this.editor.getSemanticHTML());
165
+ });
166
+ });
167
+ }
168
+ /**
169
+ * Get editor content as plain text
170
+ * @returns Plain text content of the editor
171
+ */
172
+ async getText() {
173
+ return new Promise(resolve => {
174
+ requestAnimationFrame(() => {
175
+ resolve(this.editor.getText());
176
+ });
177
+ });
178
+ }
179
+ /**
180
+ * Display input error if it exists.
181
+ */
182
+ async displayError() {
183
+ // Use `Promise` as requested for stencil method
184
+ // Use `requestAnimationFrame` to ensure:
185
+ // - DOM is fully updated before validation
186
+ // - Async operations are completed
187
+ // - No timing issues with Stencil's render cycle
188
+ // - Keep everything in sync both inside and outside the component
189
+ return new Promise(resolve => {
190
+ requestAnimationFrame(() => {
191
+ this.checkValidity();
192
+ this.setErrorMessage();
193
+ this.hasDisplayedError = this.invalid;
194
+ resolve();
195
+ });
196
+ });
197
+ }
198
+ /**
199
+ * Set an error and display a custom error message.
200
+ * This method can be used to set the component's error state from its context by passing a boolean value to the `valid` parameter.
201
+ * It must be paired with an error message to display for the given context.
202
+ * When used to set validity to `false`, you should use this method again to reset the validity to `true`.
203
+ * @param valid - value indicating the validity
204
+ * @param errorMessage - the error message to display
205
+ */
206
+ async setError(valid, errorMessage) {
207
+ if (typeof valid !== 'boolean') {
208
+ throw new Error('<mg-input-rich-text-editor> method "setError()" param "valid" must be a boolean.');
209
+ }
210
+ else if (!isValidString(errorMessage)) {
211
+ throw new Error('<mg-input-rich-text-editor> method "setError()" param "errorMessage" must be a string.');
212
+ }
213
+ else {
214
+ this.setValidity(valid);
215
+ this.setErrorMessage(valid ? undefined : errorMessage);
216
+ this.hasDisplayedError = this.invalid;
217
+ }
218
+ }
219
+ /**
220
+ * Reset value, validity and error state
221
+ */
222
+ async reset() {
223
+ if (!this.readonly) {
224
+ this.value = '';
225
+ this.editor.setText('');
226
+ this.checkValidity();
227
+ this.errorMessage = undefined;
228
+ this.hasDisplayedError = false;
229
+ }
230
+ }
231
+ /**
232
+ * Method to set validity values
233
+ * @param newValue - valid new value
234
+ */
235
+ setValidity(newValue) {
236
+ const oldValidValue = this.valid;
237
+ this.valid = newValue;
238
+ this.invalid = !this.valid;
239
+ if (this.valid !== oldValidValue) {
240
+ this.inputValid.emit(this.valid);
241
+ }
242
+ }
243
+ /*************
244
+ * Lifecycle *
245
+ *************/
246
+ /**
247
+ * Check if component props are well configured on init
248
+ * @returns timeout
249
+ */
250
+ componentWillLoad() {
251
+ // Get locales
252
+ this.messages = initLocales(this.element).messages;
253
+ this.element.style.setProperty('--mg-c-input-rich-text-editor-rows', this.rows.toString());
254
+ // Validate
255
+ this.validatePattern(this.pattern);
256
+ this.validatePattern(this.patternErrorMessage);
257
+ // Watch
258
+ this.watchReadonly(this.readonly);
259
+ this.watchDisabled(this.disabled);
260
+ // Check validity when component is ready
261
+ // return a promise to process action only in the FIRST render().
262
+ // https://stenciljs.com/docs/component-lifecycle#componentwillload
263
+ return setTimeout(() => {
264
+ this.checkValidity();
265
+ }, 0);
266
+ }
267
+ /**
268
+ * add listeners and render editor element
269
+ */
270
+ componentDidLoad() {
271
+ if (this.readonly)
272
+ return;
273
+ this.editor = defineEditor(this.wrapperElement, {
274
+ theme: 'snow',
275
+ modules: this.modules,
276
+ readOnly: this.readonly || this.disabled,
277
+ placeholder: this.placeholder,
278
+ value: this.value,
279
+ handleTextChange: this.handleTextChange,
280
+ handleBlur: this.handleBlur,
281
+ handleFocus: this.handleFocus,
282
+ });
283
+ }
284
+ /**
285
+ * Render
286
+ * @returns HTML mg-input Element
287
+ */
288
+ render() {
289
+ return (h("mg-input", { key: '4cc25a69bf7658bd1c487eb9cf22378f9cf0d473', identifier: this.identifier, class: this.classCollection.join(), label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, tooltip: this.tooltip, tooltipPosition: this.tooltipPosition, helpText: this.helpText, errorMessage: this.hasDisplayedError ? this.errorMessage : undefined }, this.readonly ? (h("div", { class: "mg-c-input__readonly-value", innerHTML: this.value })) : (h("div", { ref: el => {
290
+ this.wrapperElement = el;
291
+ }, id: this.identifier, class: "mg-c-input__wrapper" }, h("div", null)))));
292
+ }
293
+ static get is() { return "mg-input-rich-text-editor"; }
294
+ static get encapsulation() { return "shadow"; }
295
+ static get originalStyleUrls() {
296
+ return {
297
+ "$": ["../../../../../node_modules/quill/dist/quill.snow.css", "../../../../../node_modules/@mgdis/styles/dist/components/mg-input-rich-text-editor.css"]
298
+ };
299
+ }
300
+ static get styleUrls() {
301
+ return {
302
+ "$": ["../../../../../node_modules/quill/dist/quill.snow.css", "../../../../../node_modules/@mgdis/styles/dist/components/mg-input-rich-text-editor.css"]
303
+ };
304
+ }
305
+ static get properties() {
306
+ return {
307
+ "identifier": {
308
+ "type": "string",
309
+ "mutable": false,
310
+ "complexType": {
311
+ "original": "string",
312
+ "resolved": "string",
313
+ "references": {}
314
+ },
315
+ "required": true,
316
+ "optional": false,
317
+ "docs": {
318
+ "tags": [],
319
+ "text": "Identifier is used for the element ID (id is a reserved prop in Stencil.js)"
320
+ },
321
+ "getter": false,
322
+ "setter": false,
323
+ "attribute": "identifier",
324
+ "reflect": false
325
+ },
326
+ "value": {
327
+ "type": "string",
328
+ "mutable": true,
329
+ "complexType": {
330
+ "original": "string",
331
+ "resolved": "string",
332
+ "references": {}
333
+ },
334
+ "required": false,
335
+ "optional": false,
336
+ "docs": {
337
+ "tags": [],
338
+ "text": "Define the value of the editor\nCan be either HTML string or plain text"
339
+ },
340
+ "getter": false,
341
+ "setter": false,
342
+ "attribute": "value",
343
+ "reflect": false,
344
+ "defaultValue": "''"
345
+ },
346
+ "label": {
347
+ "type": "string",
348
+ "mutable": false,
349
+ "complexType": {
350
+ "original": "string",
351
+ "resolved": "string",
352
+ "references": {}
353
+ },
354
+ "required": true,
355
+ "optional": false,
356
+ "docs": {
357
+ "tags": [],
358
+ "text": "Input label"
359
+ },
360
+ "getter": false,
361
+ "setter": false,
362
+ "attribute": "label",
363
+ "reflect": false
364
+ },
365
+ "labelOnTop": {
366
+ "type": "boolean",
367
+ "mutable": false,
368
+ "complexType": {
369
+ "original": "boolean",
370
+ "resolved": "boolean",
371
+ "references": {}
372
+ },
373
+ "required": false,
374
+ "optional": true,
375
+ "docs": {
376
+ "tags": [],
377
+ "text": "Define if label is displayed on top"
378
+ },
379
+ "getter": false,
380
+ "setter": false,
381
+ "attribute": "label-on-top",
382
+ "reflect": false
383
+ },
384
+ "labelHide": {
385
+ "type": "boolean",
386
+ "mutable": false,
387
+ "complexType": {
388
+ "original": "boolean",
389
+ "resolved": "boolean",
390
+ "references": {}
391
+ },
392
+ "required": false,
393
+ "optional": false,
394
+ "docs": {
395
+ "tags": [],
396
+ "text": "Define if label is visible"
397
+ },
398
+ "getter": false,
399
+ "setter": false,
400
+ "attribute": "label-hide",
401
+ "reflect": false,
402
+ "defaultValue": "false"
403
+ },
404
+ "placeholder": {
405
+ "type": "string",
406
+ "mutable": false,
407
+ "complexType": {
408
+ "original": "string",
409
+ "resolved": "string",
410
+ "references": {}
411
+ },
412
+ "required": false,
413
+ "optional": true,
414
+ "docs": {
415
+ "tags": [],
416
+ "text": "Input placeholder.\nIt should be a word or short phrase that demonstrates the expected type of data, not a replacement for labels or help text."
417
+ },
418
+ "getter": false,
419
+ "setter": false,
420
+ "attribute": "placeholder",
421
+ "reflect": false
422
+ },
423
+ "rows": {
424
+ "type": "number",
425
+ "mutable": false,
426
+ "complexType": {
427
+ "original": "number",
428
+ "resolved": "number",
429
+ "references": {}
430
+ },
431
+ "required": false,
432
+ "optional": false,
433
+ "docs": {
434
+ "tags": [],
435
+ "text": "Define the number of visible text lines for the control"
436
+ },
437
+ "getter": false,
438
+ "setter": false,
439
+ "attribute": "rows",
440
+ "reflect": false,
441
+ "defaultValue": "5"
442
+ },
443
+ "required": {
444
+ "type": "boolean",
445
+ "mutable": false,
446
+ "complexType": {
447
+ "original": "boolean",
448
+ "resolved": "boolean",
449
+ "references": {}
450
+ },
451
+ "required": false,
452
+ "optional": false,
453
+ "docs": {
454
+ "tags": [],
455
+ "text": "Define if input is required"
456
+ },
457
+ "getter": false,
458
+ "setter": false,
459
+ "attribute": "required",
460
+ "reflect": false,
461
+ "defaultValue": "false"
462
+ },
463
+ "readonly": {
464
+ "type": "boolean",
465
+ "mutable": false,
466
+ "complexType": {
467
+ "original": "boolean",
468
+ "resolved": "boolean",
469
+ "references": {}
470
+ },
471
+ "required": false,
472
+ "optional": false,
473
+ "docs": {
474
+ "tags": [],
475
+ "text": "Define if the editor is readonly"
476
+ },
477
+ "getter": false,
478
+ "setter": false,
479
+ "attribute": "readonly",
480
+ "reflect": false,
481
+ "defaultValue": "false"
482
+ },
483
+ "disabled": {
484
+ "type": "boolean",
485
+ "mutable": false,
486
+ "complexType": {
487
+ "original": "boolean",
488
+ "resolved": "boolean",
489
+ "references": {}
490
+ },
491
+ "required": false,
492
+ "optional": false,
493
+ "docs": {
494
+ "tags": [],
495
+ "text": "Define if input is disabled"
496
+ },
497
+ "getter": false,
498
+ "setter": false,
499
+ "attribute": "disabled",
500
+ "reflect": false,
501
+ "defaultValue": "false"
502
+ },
503
+ "pattern": {
504
+ "type": "string",
505
+ "mutable": false,
506
+ "complexType": {
507
+ "original": "string",
508
+ "resolved": "string",
509
+ "references": {}
510
+ },
511
+ "required": false,
512
+ "optional": true,
513
+ "docs": {
514
+ "tags": [],
515
+ "text": "Define input pattern to validate\nPlease refer to the Pattern section in the input documentation for detailed information on using regular expressions in components."
516
+ },
517
+ "getter": false,
518
+ "setter": false,
519
+ "attribute": "pattern",
520
+ "reflect": false
521
+ },
522
+ "patternErrorMessage": {
523
+ "type": "string",
524
+ "mutable": false,
525
+ "complexType": {
526
+ "original": "string",
527
+ "resolved": "string",
528
+ "references": {}
529
+ },
530
+ "required": false,
531
+ "optional": true,
532
+ "docs": {
533
+ "tags": [],
534
+ "text": "Define input pattern error message"
535
+ },
536
+ "getter": false,
537
+ "setter": false,
538
+ "attribute": "pattern-error-message",
539
+ "reflect": false
540
+ },
541
+ "tooltip": {
542
+ "type": "string",
543
+ "mutable": false,
544
+ "complexType": {
545
+ "original": "string",
546
+ "resolved": "string",
547
+ "references": {}
548
+ },
549
+ "required": false,
550
+ "optional": true,
551
+ "docs": {
552
+ "tags": [],
553
+ "text": "Add a tooltip message next to the input"
554
+ },
555
+ "getter": false,
556
+ "setter": false,
557
+ "attribute": "tooltip",
558
+ "reflect": false
559
+ },
560
+ "tooltipPosition": {
561
+ "type": "string",
562
+ "mutable": false,
563
+ "complexType": {
564
+ "original": "TooltipPosition",
565
+ "resolved": "\"input\" | \"label\"",
566
+ "references": {
567
+ "TooltipPosition": {
568
+ "location": "import",
569
+ "path": "../mg-input/mg-input.conf",
570
+ "id": "src/components/molecules/inputs/mg-input/mg-input.conf.ts::TooltipPosition"
571
+ }
572
+ }
573
+ },
574
+ "required": false,
575
+ "optional": false,
576
+ "docs": {
577
+ "tags": [],
578
+ "text": "Define tooltip position"
579
+ },
580
+ "getter": false,
581
+ "setter": false,
582
+ "attribute": "tooltip-position",
583
+ "reflect": false,
584
+ "defaultValue": "'input'"
585
+ },
586
+ "helpText": {
587
+ "type": "string",
588
+ "mutable": false,
589
+ "complexType": {
590
+ "original": "string",
591
+ "resolved": "string",
592
+ "references": {}
593
+ },
594
+ "required": false,
595
+ "optional": true,
596
+ "docs": {
597
+ "tags": [],
598
+ "text": "Add a help text under the input, usually expected data format and example"
599
+ },
600
+ "getter": false,
601
+ "setter": false,
602
+ "attribute": "help-text",
603
+ "reflect": false
604
+ },
605
+ "valid": {
606
+ "type": "boolean",
607
+ "mutable": true,
608
+ "complexType": {
609
+ "original": "boolean",
610
+ "resolved": "boolean",
611
+ "references": {}
612
+ },
613
+ "required": false,
614
+ "optional": false,
615
+ "docs": {
616
+ "tags": [],
617
+ "text": "Define input valid state"
618
+ },
619
+ "getter": false,
620
+ "setter": false,
621
+ "attribute": "valid",
622
+ "reflect": false
623
+ },
624
+ "invalid": {
625
+ "type": "boolean",
626
+ "mutable": true,
627
+ "complexType": {
628
+ "original": "boolean",
629
+ "resolved": "boolean",
630
+ "references": {}
631
+ },
632
+ "required": false,
633
+ "optional": false,
634
+ "docs": {
635
+ "tags": [],
636
+ "text": "Define input invalid state"
637
+ },
638
+ "getter": false,
639
+ "setter": false,
640
+ "attribute": "invalid",
641
+ "reflect": false
642
+ },
643
+ "modules": {
644
+ "type": "unknown",
645
+ "mutable": false,
646
+ "complexType": {
647
+ "original": "EditorOptionsType['modules']",
648
+ "resolved": "{ [x: string]: unknown; }",
649
+ "references": {
650
+ "EditorOptionsType": {
651
+ "location": "import",
652
+ "path": "./editor",
653
+ "id": "src/components/molecules/inputs/mg-input-rich-text-editor/editor/index.ts::EditorOptionsType"
654
+ }
655
+ }
656
+ },
657
+ "required": false,
658
+ "optional": true,
659
+ "docs": {
660
+ "tags": [],
661
+ "text": "Editor modules configuration"
662
+ },
663
+ "getter": false,
664
+ "setter": false
665
+ }
666
+ };
667
+ }
668
+ static get states() {
669
+ return {
670
+ "classCollection": {},
671
+ "errorMessage": {}
672
+ };
673
+ }
674
+ static get events() {
675
+ return [{
676
+ "method": "inputValid",
677
+ "name": "input-valid",
678
+ "bubbles": true,
679
+ "cancelable": true,
680
+ "composed": true,
681
+ "docs": {
682
+ "tags": [],
683
+ "text": "Emited event when checking validity"
684
+ },
685
+ "complexType": {
686
+ "original": "boolean",
687
+ "resolved": "boolean",
688
+ "references": {}
689
+ }
690
+ }, {
691
+ "method": "valueChange",
692
+ "name": "value-change",
693
+ "bubbles": true,
694
+ "cancelable": true,
695
+ "composed": true,
696
+ "docs": {
697
+ "tags": [],
698
+ "text": "Emited event when value change"
699
+ },
700
+ "complexType": {
701
+ "original": "string",
702
+ "resolved": "string",
703
+ "references": {}
704
+ }
705
+ }];
706
+ }
707
+ static get methods() {
708
+ return {
709
+ "getHTML": {
710
+ "complexType": {
711
+ "signature": "() => Promise<string>",
712
+ "parameters": [],
713
+ "references": {
714
+ "Promise": {
715
+ "location": "global",
716
+ "id": "global::Promise"
717
+ }
718
+ },
719
+ "return": "Promise<string>"
720
+ },
721
+ "docs": {
722
+ "text": "Get editor content as HTML",
723
+ "tags": [{
724
+ "name": "returns",
725
+ "text": "HTML content of the editor"
726
+ }]
727
+ }
728
+ },
729
+ "getText": {
730
+ "complexType": {
731
+ "signature": "() => Promise<string>",
732
+ "parameters": [],
733
+ "references": {
734
+ "Promise": {
735
+ "location": "global",
736
+ "id": "global::Promise"
737
+ }
738
+ },
739
+ "return": "Promise<string>"
740
+ },
741
+ "docs": {
742
+ "text": "Get editor content as plain text",
743
+ "tags": [{
744
+ "name": "returns",
745
+ "text": "Plain text content of the editor"
746
+ }]
747
+ }
748
+ },
749
+ "displayError": {
750
+ "complexType": {
751
+ "signature": "() => Promise<void>",
752
+ "parameters": [],
753
+ "references": {
754
+ "Promise": {
755
+ "location": "global",
756
+ "id": "global::Promise"
757
+ }
758
+ },
759
+ "return": "Promise<void>"
760
+ },
761
+ "docs": {
762
+ "text": "Display input error if it exists.",
763
+ "tags": []
764
+ }
765
+ },
766
+ "setError": {
767
+ "complexType": {
768
+ "signature": "(valid: MgInputRichTextEditor[\"valid\"], errorMessage: string) => Promise<void>",
769
+ "parameters": [{
770
+ "name": "valid",
771
+ "type": "boolean",
772
+ "docs": "- value indicating the validity"
773
+ }, {
774
+ "name": "errorMessage",
775
+ "type": "string",
776
+ "docs": "- the error message to display"
777
+ }],
778
+ "references": {
779
+ "Promise": {
780
+ "location": "global",
781
+ "id": "global::Promise"
782
+ },
783
+ "MgInputRichTextEditor": {
784
+ "location": "global",
785
+ "id": "global::MgInputRichTextEditor"
786
+ }
787
+ },
788
+ "return": "Promise<void>"
789
+ },
790
+ "docs": {
791
+ "text": "Set an error and display a custom error message.\nThis method can be used to set the component's error state from its context by passing a boolean value to the `valid` parameter.\nIt must be paired with an error message to display for the given context.\nWhen used to set validity to `false`, you should use this method again to reset the validity to `true`.",
792
+ "tags": [{
793
+ "name": "param",
794
+ "text": "valid - value indicating the validity"
795
+ }, {
796
+ "name": "param",
797
+ "text": "errorMessage - the error message to display"
798
+ }]
799
+ }
800
+ },
801
+ "reset": {
802
+ "complexType": {
803
+ "signature": "() => Promise<void>",
804
+ "parameters": [],
805
+ "references": {
806
+ "Promise": {
807
+ "location": "global",
808
+ "id": "global::Promise"
809
+ }
810
+ },
811
+ "return": "Promise<void>"
812
+ },
813
+ "docs": {
814
+ "text": "Reset value, validity and error state",
815
+ "tags": []
816
+ }
817
+ }
818
+ };
819
+ }
820
+ static get elementRef() { return "element"; }
821
+ static get watchers() {
822
+ return [{
823
+ "propName": "readonly",
824
+ "methodName": "watchReadonly"
825
+ }, {
826
+ "propName": "disabled",
827
+ "methodName": "watchDisabled"
828
+ }, {
829
+ "propName": "required",
830
+ "methodName": "handleValidityChange"
831
+ }, {
832
+ "propName": "readonly",
833
+ "methodName": "handleValidityChange"
834
+ }, {
835
+ "propName": "disabled",
836
+ "methodName": "handleValidityChange"
837
+ }, {
838
+ "propName": "pattern",
839
+ "methodName": "validatePattern"
840
+ }, {
841
+ "propName": "patternErrorMessage",
842
+ "methodName": "validatePattern"
843
+ }];
844
+ }
845
+ }
846
+ //# sourceMappingURL=mg-input-rich-text-editor.js.map