@eccenca/gui-elements 25.0.0 → 25.1.0-changeupgradedtoreact18cmem6639.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 (493) hide show
  1. package/CHANGELOG.md +124 -0
  2. package/dist/cjs/cmem/ActivityControl/ActivityControlWidget.js +30 -26
  3. package/dist/cjs/cmem/ActivityControl/ActivityControlWidget.js.map +1 -1
  4. package/dist/cjs/cmem/ActivityControl/ActivityExecutionErrorReportModal.js +11 -5
  5. package/dist/cjs/cmem/ActivityControl/ActivityExecutionErrorReportModal.js.map +1 -1
  6. package/dist/cjs/cmem/ActivityControl/SilkActivityControl.js +1 -3
  7. package/dist/cjs/cmem/ActivityControl/SilkActivityControl.js.map +1 -1
  8. package/dist/cjs/cmem/ContentBlobToggler/ContentBlobToggler.js +13 -6
  9. package/dist/cjs/cmem/ContentBlobToggler/ContentBlobToggler.js.map +1 -1
  10. package/dist/cjs/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.js +49 -11
  11. package/dist/cjs/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.js.map +1 -1
  12. package/dist/cjs/cmem/markdown/Markdown.js +2 -2
  13. package/dist/cjs/cmem/markdown/Markdown.js.map +1 -1
  14. package/dist/cjs/cmem/react-flow/ReactFlow/ReactFlowV12.js.map +1 -1
  15. package/dist/cjs/cmem/react-flow/StickyNoteModal/StickyNoteModal.js +1 -1
  16. package/dist/cjs/cmem/react-flow/StickyNoteModal/StickyNoteModal.js.map +1 -1
  17. package/dist/cjs/cmem/react-flow/configuration/graph.js +0 -2
  18. package/dist/cjs/cmem/react-flow/configuration/graph.js.map +1 -1
  19. package/dist/cjs/cmem/react-flow/configuration/linking.js +0 -2
  20. package/dist/cjs/cmem/react-flow/configuration/linking.js.map +1 -1
  21. package/dist/cjs/cmem/react-flow/configuration/workflow.js +0 -2
  22. package/dist/cjs/cmem/react-flow/configuration/workflow.js.map +1 -1
  23. package/dist/cjs/common/Intent/index.js +1 -1
  24. package/dist/cjs/common/Intent/index.js.map +1 -1
  25. package/dist/cjs/common/index.js +1 -0
  26. package/dist/cjs/common/index.js.map +1 -1
  27. package/dist/cjs/common/utils/CssCustomProperties.js.map +1 -1
  28. package/dist/cjs/common/utils/colorHash.js +26 -12
  29. package/dist/cjs/common/utils/colorHash.js.map +1 -1
  30. package/dist/cjs/components/Application/ApplicationSidebarNavigation.js.map +1 -1
  31. package/dist/cjs/components/Application/ApplicationTitle.js +5 -1
  32. package/dist/cjs/components/Application/ApplicationTitle.js.map +1 -1
  33. package/dist/cjs/components/Application/ApplicationViewability.js +33 -0
  34. package/dist/cjs/components/Application/ApplicationViewability.js.map +1 -0
  35. package/dist/cjs/components/Application/index.js +1 -0
  36. package/dist/cjs/components/Application/index.js.map +1 -1
  37. package/dist/cjs/components/AutoSuggestion/AutoSuggestion.js +1 -1
  38. package/dist/cjs/components/AutoSuggestion/AutoSuggestion.js.map +1 -1
  39. package/dist/cjs/components/AutoSuggestion/AutoSuggestionList.js.map +1 -1
  40. package/dist/cjs/components/AutocompleteField/AutoCompleteField.js +2 -9
  41. package/dist/cjs/components/AutocompleteField/AutoCompleteField.js.map +1 -1
  42. package/dist/cjs/components/AutocompleteField/autoCompleteFieldUtils.js.map +1 -1
  43. package/dist/cjs/components/Button/Button.js +6 -2
  44. package/dist/cjs/components/Button/Button.js.map +1 -1
  45. package/dist/cjs/components/ColorField/ColorField.js +114 -0
  46. package/dist/cjs/components/ColorField/ColorField.js.map +1 -0
  47. package/dist/cjs/components/ContentGroup/ContentGroup.js +19 -19
  48. package/dist/cjs/components/ContentGroup/ContentGroup.js.map +1 -1
  49. package/dist/cjs/components/ContextOverlay/ContextMenu.js +4 -4
  50. package/dist/cjs/components/ContextOverlay/ContextMenu.js.map +1 -1
  51. package/dist/cjs/components/ContextOverlay/ContextOverlay.js +3 -2
  52. package/dist/cjs/components/ContextOverlay/ContextOverlay.js.map +1 -1
  53. package/dist/cjs/components/DecoupledOverlay/DecoupledOverlay.js +48 -0
  54. package/dist/cjs/components/DecoupledOverlay/DecoupledOverlay.js.map +1 -0
  55. package/dist/cjs/components/Icon/IconButton.js +2 -2
  56. package/dist/cjs/components/Icon/IconButton.js.map +1 -1
  57. package/dist/cjs/components/Icon/canonicalIconNames.js +10 -1
  58. package/dist/cjs/components/Icon/canonicalIconNames.js.map +1 -1
  59. package/dist/cjs/components/Icon/transformIcon.js +14 -0
  60. package/dist/cjs/components/Icon/transformIcon.js.map +1 -0
  61. package/dist/cjs/components/MultiSelect/MultiSelect.js +63 -24
  62. package/dist/cjs/components/MultiSelect/MultiSelect.js.map +1 -1
  63. package/dist/cjs/components/NotAvailable/NotAvailable.js +42 -0
  64. package/dist/cjs/components/NotAvailable/NotAvailable.js.map +1 -0
  65. package/dist/cjs/components/Notification/Notification.js.map +1 -1
  66. package/dist/cjs/components/OverviewItem/OverviewItemDepiction.js.map +1 -1
  67. package/dist/cjs/components/RadioButton/RadioButton.js +5 -2
  68. package/dist/cjs/components/RadioButton/RadioButton.js.map +1 -1
  69. package/dist/cjs/components/Select/Select.js +6 -4
  70. package/dist/cjs/components/Select/Select.js.map +1 -1
  71. package/dist/cjs/components/Skeleton/Skeleton.js.map +1 -1
  72. package/dist/cjs/components/Table/Table.js.map +1 -1
  73. package/dist/cjs/components/Table/TableContainer.js +1 -1
  74. package/dist/cjs/components/Table/TableContainer.js.map +1 -1
  75. package/dist/cjs/components/Table/TableExpandRow.js +2 -2
  76. package/dist/cjs/components/Table/TableExpandRow.js.map +1 -1
  77. package/dist/cjs/components/TextField/useTextValidation.js +17 -8
  78. package/dist/cjs/components/TextField/useTextValidation.js.map +1 -1
  79. package/dist/cjs/components/Tooltip/Tooltip.js +11 -7
  80. package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
  81. package/dist/cjs/components/Typography/InlineText.js +29 -0
  82. package/dist/cjs/components/Typography/InlineText.js.map +1 -0
  83. package/dist/cjs/components/Typography/index.js +1 -0
  84. package/dist/cjs/components/Typography/index.js.map +1 -1
  85. package/dist/cjs/components/VisualTour/VisualTour.js +30 -36
  86. package/dist/cjs/components/VisualTour/VisualTour.js.map +1 -1
  87. package/dist/cjs/components/index.js +3 -0
  88. package/dist/cjs/components/index.js.map +1 -1
  89. package/dist/cjs/extensions/codemirror/CodeMirror.js +59 -21
  90. package/dist/cjs/extensions/codemirror/CodeMirror.js.map +1 -1
  91. package/dist/cjs/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.js +1 -1
  92. package/dist/cjs/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.js.map +1 -1
  93. package/dist/cjs/extensions/codemirror/tests/codemirrorTestHelper.js +2 -2
  94. package/dist/cjs/extensions/codemirror/tests/codemirrorTestHelper.js.map +1 -1
  95. package/dist/cjs/extensions/codemirror/toolbars/EditorAppearanceConfigMenu.js +23 -0
  96. package/dist/cjs/extensions/codemirror/toolbars/EditorAppearanceConfigMenu.js.map +1 -0
  97. package/dist/cjs/extensions/codemirror/toolbars/markdown.toolbar.js +5 -2
  98. package/dist/cjs/extensions/codemirror/toolbars/markdown.toolbar.js.map +1 -1
  99. package/dist/cjs/extensions/react-flow/edges/EdgeLabel.js +8 -3
  100. package/dist/cjs/extensions/react-flow/edges/EdgeLabel.js.map +1 -1
  101. package/dist/cjs/extensions/react-flow/edges/EdgeNew.js +6 -4
  102. package/dist/cjs/extensions/react-flow/edges/EdgeNew.js.map +1 -1
  103. package/dist/cjs/extensions/react-flow/edges/EdgeTools.js +2 -2
  104. package/dist/cjs/extensions/react-flow/edges/EdgeTools.js.map +1 -1
  105. package/dist/cjs/extensions/react-flow/handles/HandleContent.js +5 -2
  106. package/dist/cjs/extensions/react-flow/handles/HandleContent.js.map +1 -1
  107. package/dist/cjs/extensions/react-flow/handles/HandleDefault.js +1 -1
  108. package/dist/cjs/extensions/react-flow/handles/HandleDefault.js.map +1 -1
  109. package/dist/cjs/extensions/react-flow/handles/HandleTools.js +2 -2
  110. package/dist/cjs/extensions/react-flow/handles/HandleTools.js.map +1 -1
  111. package/dist/cjs/extensions/react-flow/markers/ReactFlowMarkers.js.map +1 -1
  112. package/dist/cjs/extensions/react-flow/minimap/MiniMap.js +1 -1
  113. package/dist/cjs/extensions/react-flow/minimap/MiniMap.js.map +1 -1
  114. package/dist/cjs/extensions/react-flow/minimap/MiniMapV12.js.map +1 -1
  115. package/dist/cjs/extensions/react-flow/nodes/NodeContent.js +7 -5
  116. package/dist/cjs/extensions/react-flow/nodes/NodeContent.js.map +1 -1
  117. package/dist/cjs/extensions/react-flow/nodes/NodeDefault.js +5 -2
  118. package/dist/cjs/extensions/react-flow/nodes/NodeDefault.js.map +1 -1
  119. package/dist/cjs/extensions/react-flow/nodes/NodeTools.js +6 -2
  120. package/dist/cjs/extensions/react-flow/nodes/NodeTools.js.map +1 -1
  121. package/dist/cjs/extensions/react-flow/nodes/nodeUtils.js.map +1 -1
  122. package/dist/esm/cmem/ActivityControl/ActivityControlWidget.js +19 -14
  123. package/dist/esm/cmem/ActivityControl/ActivityControlWidget.js.map +1 -1
  124. package/dist/esm/cmem/ActivityControl/ActivityExecutionErrorReportModal.js +4 -1
  125. package/dist/esm/cmem/ActivityControl/ActivityExecutionErrorReportModal.js.map +1 -1
  126. package/dist/esm/cmem/ActivityControl/SilkActivityControl.js +1 -3
  127. package/dist/esm/cmem/ActivityControl/SilkActivityControl.js.map +1 -1
  128. package/dist/esm/cmem/ContentBlobToggler/ContentBlobToggler.js +9 -5
  129. package/dist/esm/cmem/ContentBlobToggler/ContentBlobToggler.js.map +1 -1
  130. package/dist/esm/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.js +57 -9
  131. package/dist/esm/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.js.map +1 -1
  132. package/dist/esm/cmem/markdown/Markdown.js +1 -1
  133. package/dist/esm/cmem/markdown/Markdown.js.map +1 -1
  134. package/dist/esm/cmem/react-flow/ReactFlow/ReactFlowV12.js.map +1 -1
  135. package/dist/esm/cmem/react-flow/StickyNoteModal/StickyNoteModal.js +1 -1
  136. package/dist/esm/cmem/react-flow/StickyNoteModal/StickyNoteModal.js.map +1 -1
  137. package/dist/esm/cmem/react-flow/configuration/graph.js +0 -2
  138. package/dist/esm/cmem/react-flow/configuration/graph.js.map +1 -1
  139. package/dist/esm/cmem/react-flow/configuration/linking.js +0 -2
  140. package/dist/esm/cmem/react-flow/configuration/linking.js.map +1 -1
  141. package/dist/esm/cmem/react-flow/configuration/workflow.js +0 -2
  142. package/dist/esm/cmem/react-flow/configuration/workflow.js.map +1 -1
  143. package/dist/esm/common/Intent/index.js +1 -1
  144. package/dist/esm/common/Intent/index.js.map +1 -1
  145. package/dist/esm/common/index.js +2 -1
  146. package/dist/esm/common/index.js.map +1 -1
  147. package/dist/esm/common/utils/CssCustomProperties.js.map +1 -1
  148. package/dist/esm/common/utils/colorHash.js +26 -13
  149. package/dist/esm/common/utils/colorHash.js.map +1 -1
  150. package/dist/esm/common/utils/reduceToText.js +1 -1
  151. package/dist/esm/components/Application/ApplicationSidebarNavigation.js.map +1 -1
  152. package/dist/esm/components/Application/ApplicationTitle.js +5 -1
  153. package/dist/esm/components/Application/ApplicationTitle.js.map +1 -1
  154. package/dist/esm/components/Application/ApplicationViewability.js +28 -0
  155. package/dist/esm/components/Application/ApplicationViewability.js.map +1 -0
  156. package/dist/esm/components/Application/index.js +1 -0
  157. package/dist/esm/components/Application/index.js.map +1 -1
  158. package/dist/esm/components/AutoSuggestion/AutoSuggestion.js +1 -1
  159. package/dist/esm/components/AutoSuggestion/AutoSuggestion.js.map +1 -1
  160. package/dist/esm/components/AutoSuggestion/AutoSuggestionList.js.map +1 -1
  161. package/dist/esm/components/AutocompleteField/AutoCompleteField.js +9 -16
  162. package/dist/esm/components/AutocompleteField/AutoCompleteField.js.map +1 -1
  163. package/dist/esm/components/AutocompleteField/autoCompleteFieldUtils.js.map +1 -1
  164. package/dist/esm/components/Button/Button.js +6 -2
  165. package/dist/esm/components/Button/Button.js.map +1 -1
  166. package/dist/esm/components/ColorField/ColorField.js +140 -0
  167. package/dist/esm/components/ColorField/ColorField.js.map +1 -0
  168. package/dist/esm/components/ContentGroup/ContentGroup.js +1 -1
  169. package/dist/esm/components/ContentGroup/ContentGroup.js.map +1 -1
  170. package/dist/esm/components/ContextOverlay/ContextMenu.js +4 -4
  171. package/dist/esm/components/ContextOverlay/ContextMenu.js.map +1 -1
  172. package/dist/esm/components/ContextOverlay/ContextOverlay.js +3 -2
  173. package/dist/esm/components/ContextOverlay/ContextOverlay.js.map +1 -1
  174. package/dist/esm/components/DecoupledOverlay/DecoupledOverlay.js +42 -0
  175. package/dist/esm/components/DecoupledOverlay/DecoupledOverlay.js.map +1 -0
  176. package/dist/esm/components/Icon/IconButton.js +2 -2
  177. package/dist/esm/components/Icon/IconButton.js.map +1 -1
  178. package/dist/esm/components/Icon/canonicalIconNames.js +10 -1
  179. package/dist/esm/components/Icon/canonicalIconNames.js.map +1 -1
  180. package/dist/esm/components/Icon/transformIcon.js +21 -0
  181. package/dist/esm/components/Icon/transformIcon.js.map +1 -0
  182. package/dist/esm/components/MultiSelect/MultiSelect.js +66 -27
  183. package/dist/esm/components/MultiSelect/MultiSelect.js.map +1 -1
  184. package/dist/esm/components/NotAvailable/NotAvailable.js +46 -0
  185. package/dist/esm/components/NotAvailable/NotAvailable.js.map +1 -0
  186. package/dist/esm/components/Notification/Notification.js.map +1 -1
  187. package/dist/esm/components/OverviewItem/OverviewItemDepiction.js.map +1 -1
  188. package/dist/esm/components/RadioButton/RadioButton.js +6 -2
  189. package/dist/esm/components/RadioButton/RadioButton.js.map +1 -1
  190. package/dist/esm/components/Select/Select.js +3 -1
  191. package/dist/esm/components/Select/Select.js.map +1 -1
  192. package/dist/esm/components/Skeleton/Skeleton.js.map +1 -1
  193. package/dist/esm/components/Table/Table.js.map +1 -1
  194. package/dist/esm/components/Table/TableContainer.js +1 -1
  195. package/dist/esm/components/Table/TableContainer.js.map +1 -1
  196. package/dist/esm/components/Table/TableExpandRow.js +1 -1
  197. package/dist/esm/components/Table/TableExpandRow.js.map +1 -1
  198. package/dist/esm/components/TextField/useTextValidation.js +39 -8
  199. package/dist/esm/components/TextField/useTextValidation.js.map +1 -1
  200. package/dist/esm/components/Tooltip/Tooltip.js +11 -7
  201. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  202. package/dist/esm/components/Typography/InlineText.js +33 -0
  203. package/dist/esm/components/Typography/InlineText.js.map +1 -0
  204. package/dist/esm/components/Typography/index.js +1 -0
  205. package/dist/esm/components/Typography/index.js.map +1 -1
  206. package/dist/esm/components/VisualTour/VisualTour.js +31 -37
  207. package/dist/esm/components/VisualTour/VisualTour.js.map +1 -1
  208. package/dist/esm/components/index.js +3 -0
  209. package/dist/esm/components/index.js.map +1 -1
  210. package/dist/esm/extensions/codemirror/CodeMirror.js +62 -24
  211. package/dist/esm/extensions/codemirror/CodeMirror.js.map +1 -1
  212. package/dist/esm/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.js +1 -1
  213. package/dist/esm/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.js.map +1 -1
  214. package/dist/esm/extensions/codemirror/tests/codemirrorTestHelper.js +3 -3
  215. package/dist/esm/extensions/codemirror/tests/codemirrorTestHelper.js.map +1 -1
  216. package/dist/esm/extensions/codemirror/toolbars/EditorAppearanceConfigMenu.js +47 -0
  217. package/dist/esm/extensions/codemirror/toolbars/EditorAppearanceConfigMenu.js.map +1 -0
  218. package/dist/esm/extensions/codemirror/toolbars/markdown.toolbar.js +16 -2
  219. package/dist/esm/extensions/codemirror/toolbars/markdown.toolbar.js.map +1 -1
  220. package/dist/esm/extensions/react-flow/edges/EdgeLabel.js +4 -2
  221. package/dist/esm/extensions/react-flow/edges/EdgeLabel.js.map +1 -1
  222. package/dist/esm/extensions/react-flow/edges/EdgeNew.js +3 -1
  223. package/dist/esm/extensions/react-flow/edges/EdgeNew.js.map +1 -1
  224. package/dist/esm/extensions/react-flow/edges/EdgeTools.js +1 -1
  225. package/dist/esm/extensions/react-flow/edges/EdgeTools.js.map +1 -1
  226. package/dist/esm/extensions/react-flow/handles/HandleContent.js +1 -1
  227. package/dist/esm/extensions/react-flow/handles/HandleContent.js.map +1 -1
  228. package/dist/esm/extensions/react-flow/handles/HandleDefault.js +1 -1
  229. package/dist/esm/extensions/react-flow/handles/HandleDefault.js.map +1 -1
  230. package/dist/esm/extensions/react-flow/handles/HandleTools.js +1 -1
  231. package/dist/esm/extensions/react-flow/handles/HandleTools.js.map +1 -1
  232. package/dist/esm/extensions/react-flow/markers/ReactFlowMarkers.js.map +1 -1
  233. package/dist/esm/extensions/react-flow/minimap/MiniMap.js +1 -1
  234. package/dist/esm/extensions/react-flow/minimap/MiniMap.js.map +1 -1
  235. package/dist/esm/extensions/react-flow/minimap/MiniMapV12.js.map +1 -1
  236. package/dist/esm/extensions/react-flow/nodes/NodeContent.js +4 -2
  237. package/dist/esm/extensions/react-flow/nodes/NodeContent.js.map +1 -1
  238. package/dist/esm/extensions/react-flow/nodes/NodeDefault.js +1 -1
  239. package/dist/esm/extensions/react-flow/nodes/NodeDefault.js.map +1 -1
  240. package/dist/esm/extensions/react-flow/nodes/NodeTools.js +2 -1
  241. package/dist/esm/extensions/react-flow/nodes/NodeTools.js.map +1 -1
  242. package/dist/esm/extensions/react-flow/nodes/nodeUtils.js.map +1 -1
  243. package/dist/types/cmem/ActivityControl/ActivityControlWidget.d.ts +13 -4
  244. package/dist/types/cmem/ActivityControl/ActivityExecutionErrorReportModal.d.ts +1 -1
  245. package/dist/types/cmem/ActivityControl/SilkActivityControl.d.ts +4 -4
  246. package/dist/types/cmem/ContentBlobToggler/ContentBlobToggler.d.ts +5 -1
  247. package/dist/types/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.d.ts +27 -11
  248. package/dist/types/cmem/markdown/Markdown.d.ts +2 -1
  249. package/dist/types/cmem/react-flow/configuration/graph.d.ts +2 -1
  250. package/dist/types/cmem/react-flow/configuration/linking.d.ts +2 -1
  251. package/dist/types/cmem/react-flow/configuration/workflow.d.ts +2 -1
  252. package/dist/types/common/index.d.ts +2 -1
  253. package/dist/types/common/utils/CssCustomProperties.d.ts +2 -2
  254. package/dist/types/common/utils/colorHash.d.ts +5 -4
  255. package/dist/types/components/Accordion/AccordionItem.d.ts +1 -1
  256. package/dist/types/components/Application/ApplicationSidebarNavigation.d.ts +2 -0
  257. package/dist/types/components/Application/ApplicationViewability.d.ts +36 -0
  258. package/dist/types/components/Application/index.d.ts +1 -0
  259. package/dist/types/components/AutoSuggestion/AutoSuggestion.d.ts +2 -2
  260. package/dist/types/components/AutocompleteField/AutoCompleteField.d.ts +2 -12
  261. package/dist/types/components/AutocompleteField/autoCompleteFieldUtils.d.ts +1 -1
  262. package/dist/types/components/Button/Button.d.ts +3 -3
  263. package/dist/types/components/Card/CardHeader.d.ts +1 -1
  264. package/dist/types/components/ColorField/ColorField.d.ts +30 -0
  265. package/dist/types/components/ContentGroup/ContentGroup.d.ts +1 -1
  266. package/dist/types/components/ContextOverlay/ContextMenu.d.ts +9 -3
  267. package/dist/types/components/ContextOverlay/ContextOverlay.d.ts +8 -2
  268. package/dist/types/components/DecoupledOverlay/DecoupledOverlay.d.ts +22 -0
  269. package/dist/types/components/Depiction/Depiction.d.ts +1 -1
  270. package/dist/types/components/Dialog/SimpleDialog.d.ts +1 -1
  271. package/dist/types/components/Form/FieldItem.d.ts +1 -1
  272. package/dist/types/components/Form/FieldSet.d.ts +3 -3
  273. package/dist/types/components/HoverToggler/HoverToggler.d.ts +2 -2
  274. package/dist/types/components/Icon/IconButton.d.ts +1 -1
  275. package/dist/types/components/Icon/canonicalIconNames.d.ts +9 -1
  276. package/dist/types/components/Icon/transformIcon.d.ts +2 -0
  277. package/dist/types/components/Label/Label.d.ts +3 -3
  278. package/dist/types/components/Menu/MenuItem.d.ts +1 -1
  279. package/dist/types/components/MultiSelect/MultiSelect.d.ts +17 -5
  280. package/dist/types/components/NotAvailable/NotAvailable.d.ts +32 -0
  281. package/dist/types/components/Notification/Notification.d.ts +2 -2
  282. package/dist/types/components/OverviewItem/OverviewItemActions.d.ts +1 -1
  283. package/dist/types/components/PropertyValuePair/PropertyValueList.d.ts +1 -1
  284. package/dist/types/components/RadioButton/RadioButton.d.ts +8 -2
  285. package/dist/types/components/Select/Select.d.ts +2 -1
  286. package/dist/types/components/Skeleton/Skeleton.d.ts +1 -1
  287. package/dist/types/components/Structure/TitleSubsection.d.ts +3 -6
  288. package/dist/types/components/SuggestField/index.d.ts +2 -2
  289. package/dist/types/components/Table/TableContainer.d.ts +3 -3
  290. package/dist/types/components/Tabs/Tab.d.ts +4 -10
  291. package/dist/types/components/Tabs/TabTitle.d.ts +1 -1
  292. package/dist/types/components/TextField/TextArea.d.ts +1 -1
  293. package/dist/types/components/Typography/InlineText.d.ts +13 -0
  294. package/dist/types/components/Typography/index.d.ts +1 -0
  295. package/dist/types/components/index.d.ts +3 -0
  296. package/dist/types/extensions/codemirror/CodeMirror.d.ts +12 -9
  297. package/dist/types/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.d.ts +1 -1
  298. package/dist/types/extensions/codemirror/tests/codemirrorTestHelper.d.ts +1 -1
  299. package/dist/types/extensions/codemirror/toolbars/EditorAppearanceConfigMenu.d.ts +24 -0
  300. package/dist/types/extensions/codemirror/toolbars/markdown.toolbar.d.ts +2 -0
  301. package/dist/types/extensions/react-flow/edges/EdgeLabel.d.ts +3 -3
  302. package/dist/types/extensions/react-flow/edges/EdgeTools.d.ts +1 -1
  303. package/dist/types/extensions/react-flow/handles/HandleContent.d.ts +2 -2
  304. package/dist/types/extensions/react-flow/handles/HandleTools.d.ts +2 -2
  305. package/dist/types/extensions/react-flow/nodes/NodeContent.d.ts +3 -3
  306. package/dist/types/extensions/react-flow/nodes/NodeTools.d.ts +2 -2
  307. package/package.json +65 -61
  308. package/src/_shame.scss +1 -35
  309. package/src/cmem/ActivityControl/ActivityControlWidget.stories.tsx +3 -8
  310. package/src/cmem/ActivityControl/ActivityControlWidget.tsx +74 -41
  311. package/src/cmem/ActivityControl/ActivityExecutionErrorReportModal.tsx +6 -4
  312. package/src/cmem/ActivityControl/SilkActivityControl.tsx +5 -5
  313. package/src/cmem/ContentBlobToggler/ContentBlobToggler.tsx +16 -6
  314. package/src/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.tsx +72 -19
  315. package/src/cmem/ContentBlobToggler/stories/StringPreviewContentBlobToggler.stories.tsx +27 -0
  316. package/src/cmem/ContentBlobToggler/tests/StringPreviewContentBlobToggler.test.tsx +98 -0
  317. package/src/cmem/markdown/Markdown.stories.tsx +2 -2
  318. package/src/cmem/markdown/Markdown.tsx +2 -1
  319. package/src/cmem/markdown/markdown.scss +1 -1
  320. package/src/cmem/react-flow/ReactFlow/ReactFlowV12.tsx +1 -0
  321. package/src/cmem/react-flow/StickyNoteModal/StickyNoteModal.tsx +1 -1
  322. package/src/cmem/react-flow/configuration/graph.ts +2 -3
  323. package/src/cmem/react-flow/configuration/linking.ts +2 -3
  324. package/src/cmem/react-flow/configuration/workflow.ts +2 -3
  325. package/src/common/Intent/index.ts +2 -1
  326. package/src/common/index.ts +2 -1
  327. package/src/common/scss/_accessibility-defaults.scss +101 -0
  328. package/src/common/utils/CssCustomProperties.ts +5 -3
  329. package/src/common/utils/colorHash.ts +38 -20
  330. package/src/components/Accordion/AccordionItem.tsx +1 -1
  331. package/src/components/Accordion/Stories/AccordionItem.stories.tsx +1 -1
  332. package/src/components/Application/ApplicationSidebarNavigation.tsx +5 -2
  333. package/src/components/Application/ApplicationTitle.tsx +7 -1
  334. package/src/components/Application/ApplicationViewability.tsx +61 -0
  335. package/src/components/Application/_colors.scss +15 -0
  336. package/src/components/Application/_content.scss +7 -0
  337. package/src/components/Application/_header.scss +45 -21
  338. package/src/components/Application/_sidebar.scss +6 -0
  339. package/src/components/Application/_toolbar.scss +3 -3
  340. package/src/components/Application/_viewability.scss +13 -0
  341. package/src/components/Application/application.scss +1 -0
  342. package/src/components/Application/index.ts +1 -0
  343. package/src/components/Application/stories/ApplicationViewability.stories.tsx +37 -0
  344. package/src/components/Application/stories/ColorPalettes.stories.tsx +4 -3
  345. package/src/components/Application/tests/ApplicationViewability.test.tsx +43 -0
  346. package/src/components/AutoSuggestion/AutoSuggestion.scss +3 -1
  347. package/src/components/AutoSuggestion/AutoSuggestion.tsx +4 -4
  348. package/src/components/AutoSuggestion/AutoSuggestionList.tsx +1 -1
  349. package/src/components/AutoSuggestion/tests/ExtendedCodeEditor.test.tsx +1 -1
  350. package/src/components/AutocompleteField/AutoCompleteField.tsx +9 -18
  351. package/src/components/AutocompleteField/autoCompleteFieldUtils.tsx +1 -1
  352. package/src/components/Badge/Badge.stories.tsx +1 -1
  353. package/src/components/Badge/Badge.test.tsx +22 -0
  354. package/src/components/Breadcrumb/breadcrumb.scss +2 -2
  355. package/src/components/Button/Button.test.tsx +16 -2
  356. package/src/components/Button/Button.tsx +11 -6
  357. package/src/components/Button/button.scss +2 -0
  358. package/src/components/Card/CardHeader.tsx +1 -1
  359. package/src/components/Card/card.scss +6 -0
  360. package/src/components/Card/stories/Card.stories.tsx +1 -1
  361. package/src/components/Checkbox/Stories/Checkbox.stories.tsx +1 -1
  362. package/src/components/Checkbox/checkbox.scss +23 -3
  363. package/src/components/ColorField/ColorField.stories.tsx +72 -0
  364. package/src/components/ColorField/ColorField.test.tsx +101 -0
  365. package/src/components/ColorField/ColorField.tsx +200 -0
  366. package/src/components/ColorField/_colorfield.scss +67 -0
  367. package/src/components/ContentGroup/ContentGroup.stories.tsx +1 -1
  368. package/src/components/ContentGroup/ContentGroup.tsx +3 -3
  369. package/src/components/ContentGroup/_contentgroup.scss +9 -0
  370. package/src/components/ContextOverlay/ContextMenu.tsx +10 -4
  371. package/src/components/ContextOverlay/ContextOverlay.tsx +23 -4
  372. package/src/components/DecoupledOverlay/DecoupledOverlay.stories.tsx +30 -0
  373. package/src/components/DecoupledOverlay/DecoupledOverlay.tsx +100 -0
  374. package/src/components/DecoupledOverlay/_decoupledoverlay.scss +46 -0
  375. package/src/components/Depiction/Depiction.tsx +1 -1
  376. package/src/components/Depiction/depiction.scss +6 -0
  377. package/src/components/Dialog/SimpleDialog.tsx +1 -1
  378. package/src/components/Dialog/dialog.scss +10 -2
  379. package/src/components/Dialog/stories/Modal.stories.tsx +1 -1
  380. package/src/components/FlexibleLayout/flexiblelayout.scss +16 -0
  381. package/src/components/Form/FieldItem.tsx +1 -1
  382. package/src/components/Form/FieldSet.tsx +3 -3
  383. package/src/components/Form/Stories/FieldItem.stories.tsx +1 -1
  384. package/src/components/Form/Stories/FieldSet.stories.tsx +1 -1
  385. package/src/components/Form/form.scss +2 -2
  386. package/src/components/Grid/grid.scss +17 -0
  387. package/src/components/Grid/stories/Grid.stories.tsx +10 -7
  388. package/src/components/Grid/stories/GridColumn.stories.tsx +1 -1
  389. package/src/components/Grid/stories/GridRow.stories.tsx +14 -8
  390. package/src/components/HoverToggler/HoverToggler.tsx +2 -2
  391. package/src/components/Icon/IconButton.tsx +3 -3
  392. package/src/components/Icon/canonicalIconNames.tsx +11 -1
  393. package/src/components/Icon/stories/IconButton.stories.tsx +1 -1
  394. package/src/components/Icon/stories/TestIcon.stories.tsx +1 -1
  395. package/src/components/Icon/transformIcon.tsx +17 -0
  396. package/src/components/Label/Label.tsx +3 -3
  397. package/src/components/Link/Link.stories.tsx +30 -0
  398. package/src/components/Link/link.scss +33 -8
  399. package/src/components/Menu/MenuItem.tsx +1 -1
  400. package/src/components/Menu/Stories/MenuItem.stories.tsx +1 -1
  401. package/src/components/MultiSelect/MultiSelect.tsx +104 -32
  402. package/src/components/MultiSuggestField/MultiSuggestField.stories.tsx +40 -1
  403. package/src/components/MultiSuggestField/_multisuggestfield.scss +18 -0
  404. package/src/components/MultiSuggestField/tests/MultiSuggestField.test.tsx +89 -37
  405. package/src/components/NotAvailable/NotAvailable.stories.tsx +15 -0
  406. package/src/components/NotAvailable/NotAvailable.tsx +71 -0
  407. package/src/components/Notification/Notification.stories.tsx +2 -1
  408. package/src/components/Notification/Notification.tsx +3 -3
  409. package/src/components/Notification/notification.scss +6 -0
  410. package/src/components/OverviewItem/OverviewItemActions.tsx +1 -1
  411. package/src/components/OverviewItem/OverviewItemDepiction.tsx +1 -1
  412. package/src/components/OverviewItem/overviewitem.scss +9 -0
  413. package/src/components/OverviewItem/stories/OverviewItem.stories.tsx +29 -1
  414. package/src/components/OverviewItem/stories/OverviewItemActions.stories.tsx +3 -3
  415. package/src/components/OverviewItem/stories/OverviewItemDepiction.stories.tsx +1 -1
  416. package/src/components/OverviewItem/stories/OverviewItemDescription.stories.tsx +2 -2
  417. package/src/components/OverviewItem/stories/OverviewItemLine.stories.tsx +1 -1
  418. package/src/components/Pagination/Stories/Pagination.stories.tsx +32 -0
  419. package/src/components/Pagination/pagination.scss +55 -5
  420. package/src/components/PropertyValuePair/PropertyValueList.tsx +1 -1
  421. package/src/components/PropertyValuePair/propertyvalue.scss +23 -1
  422. package/src/components/RadioButton/RadioButton.tsx +15 -3
  423. package/src/components/RadioButton/Stories/RadioButton.stories.tsx +1 -1
  424. package/src/components/RadioButton/radiobutton.scss +18 -1
  425. package/src/components/Select/Select.tsx +8 -6
  426. package/src/components/Separation/separation.scss +6 -0
  427. package/src/components/Skeleton/Skeleton.tsx +2 -2
  428. package/src/components/Structure/TitleSubsection.tsx +1 -1
  429. package/src/components/Table/Table.tsx +1 -1
  430. package/src/components/Table/TableContainer.tsx +4 -4
  431. package/src/components/Table/TableExpandRow.tsx +1 -1
  432. package/src/components/Table/table.scss +22 -0
  433. package/src/components/Tabs/TabTitle.tsx +1 -1
  434. package/src/components/Tabs/stories/TabTitle.stories.tsx +7 -2
  435. package/src/components/Tabs/tabs.scss +2 -2
  436. package/src/components/Tag/stories/Tag.stories.tsx +1 -1
  437. package/src/components/Tag/stories/TagList.stories.tsx +3 -3
  438. package/src/components/Tag/tag.scss +19 -9
  439. package/src/components/TextField/TextArea.tsx +1 -1
  440. package/src/components/TextField/stories/TextArea.stories.tsx +1 -1
  441. package/src/components/TextField/stories/TextField.stories.tsx +24 -3
  442. package/src/components/TextField/tests/useTextValidation.test.tsx +83 -0
  443. package/src/components/TextField/textfield.scss +20 -0
  444. package/src/components/TextField/useTextValidation.ts +17 -8
  445. package/src/components/TextReducer/TextReducer.stories.tsx +4 -1
  446. package/src/components/TextReducer/TextReducer.test.tsx +3 -3
  447. package/src/components/Toolbar/toolbar.scss +1 -2
  448. package/src/components/Tooltip/Tooltip.test.tsx +40 -5
  449. package/src/components/Tooltip/Tooltip.tsx +15 -11
  450. package/src/components/Typography/InlineText.tsx +24 -0
  451. package/src/components/Typography/_reset.scss +2 -0
  452. package/src/components/Typography/index.ts +1 -0
  453. package/src/components/Typography/stories/InlineText.stories.tsx +27 -0
  454. package/src/components/Typography/typography.scss +37 -3
  455. package/src/components/VisualTour/VisualTour.tsx +35 -55
  456. package/src/components/VisualTour/visualTour.scss +0 -34
  457. package/src/components/index.scss +2 -0
  458. package/src/components/index.ts +3 -0
  459. package/src/configuration/_customproperties.scss +32 -0
  460. package/src/configuration/stories/customproperties.stories.tsx +122 -0
  461. package/src/extensions/codemirror/CodeMirror.stories.tsx +9 -4
  462. package/src/extensions/codemirror/CodeMirror.tsx +93 -37
  463. package/src/extensions/codemirror/_codemirror.scss +18 -28
  464. package/src/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.ts +1 -2
  465. package/src/extensions/codemirror/tests/CodeEditor.test.tsx +138 -0
  466. package/src/extensions/codemirror/tests/EditorAppearanceConfigMenu.test.tsx +131 -0
  467. package/src/extensions/codemirror/tests/codemirrorTestHelper.ts +3 -3
  468. package/src/extensions/codemirror/toolbars/EditorAppearanceConfigMenu.tsx +59 -0
  469. package/src/extensions/codemirror/toolbars/markdown.toolbar.tsx +17 -3
  470. package/src/extensions/react-flow/_config.scss +3 -3
  471. package/src/extensions/react-flow/_react-flow_v12.scss +1 -1
  472. package/src/extensions/react-flow/edges/EdgeLabel.tsx +15 -11
  473. package/src/extensions/react-flow/edges/EdgeNew.tsx +6 -6
  474. package/src/extensions/react-flow/edges/EdgeTools.tsx +5 -6
  475. package/src/extensions/react-flow/edges/_edges.scss +3 -2
  476. package/src/extensions/react-flow/edges/stories/EdgeLabel.stories.tsx +2 -1
  477. package/src/extensions/react-flow/handles/HandleContent.tsx +4 -4
  478. package/src/extensions/react-flow/handles/HandleDefault.tsx +3 -3
  479. package/src/extensions/react-flow/handles/HandleTools.tsx +3 -3
  480. package/src/extensions/react-flow/handles/_handles.scss +3 -3
  481. package/src/extensions/react-flow/markers/ReactFlowMarkers.tsx +1 -1
  482. package/src/extensions/react-flow/minimap/MiniMap.tsx +2 -1
  483. package/src/extensions/react-flow/minimap/MiniMapV12.tsx +1 -1
  484. package/src/extensions/react-flow/nodes/NodeContent.tsx +20 -19
  485. package/src/extensions/react-flow/nodes/NodeDefault.tsx +1 -1
  486. package/src/extensions/react-flow/nodes/NodeDefaultV12.tsx +1 -2
  487. package/src/extensions/react-flow/nodes/NodeTools.tsx +8 -8
  488. package/src/extensions/react-flow/nodes/_nodes.scss +4 -3
  489. package/src/extensions/react-flow/nodes/nodeUtils.tsx +1 -0
  490. package/src/extensions/react-flow/nodes/stories/NodeContent.stories.tsx +3 -1
  491. package/src/includes/carbon-components/_requisits.scss +3 -1
  492. package/src/index.scss +2 -0
  493. package/src/test/setupTests.js +1 -1
@@ -36,6 +36,7 @@ $tag-round-adjustment: 0 !default;
36
36
  min-height: calc(#{$tag-height} - 2px);
37
37
  max-height: calc(#{$tag-height} - 2px);
38
38
  padding: 0 $tag-padding-top;
39
+ line-height: calc(#{$tag-height} - 2px);
39
40
 
40
41
  &.#{$ns}-round {
41
42
  border-radius: $tag-height * 0.5;
@@ -55,11 +56,12 @@ $tag-round-adjustment: 0 !default;
55
56
  }
56
57
 
57
58
  &.#{$eccgui}-tag--small {
58
- min-width: calc(#{$tag-height-small} + #{$tag-padding-small} - 2px);
59
- min-height: calc(#{$tag-height-small} + #{$tag-padding-small} - 2px);
60
- max-height: calc(#{$tag-height-small} + #{$tag-padding-small} - 2px);
59
+ min-width: calc(#{$tag-height-small} + #{$tag-padding-small});
60
+ min-height: calc(#{$tag-height-small} + #{$tag-padding-small});
61
+ max-height: calc(#{$tag-height-small} + #{$tag-padding-small});
61
62
  padding: 0 $tag-padding-small;
62
- line-height: calc(#{$tag-height-small} - 2px);
63
+ font-size: calc(#{$eccgui-size-typo-tag} - 1px);
64
+ line-height: calc(#{$tag-height-small} + #{$tag-padding-small});
63
65
 
64
66
  &.#{$ns}-round {
65
67
  border-radius: $tag-height-small * 0.5;
@@ -75,7 +77,7 @@ $tag-round-adjustment: 0 !default;
75
77
  min-height: calc(#{$tag-height-large} + #{$tag-padding-large} - 2px);
76
78
  max-height: calc(#{$tag-height-large} + #{$tag-padding-large} - 2px);
77
79
  font-size: $eccgui-size-typo-tag-large;
78
- line-height: calc(#{$tag-height-large} - 2px);
80
+ line-height: calc(#{$tag-height-large} + #{$tag-padding-large} - 2px);
79
81
 
80
82
  &.#{$ns}-round {
81
83
  border-radius: $tag-height-large * 0.5;
@@ -137,8 +139,10 @@ $tag-round-adjustment: 0 !default;
137
139
  }
138
140
 
139
141
  .#{$ns}-tag {
142
+ --eccgui-tag-border-width: 1px;
143
+
140
144
  border-style: solid;
141
- border-width: 1px;
145
+ border-width: var(--eccgui-tag-border-width);
142
146
 
143
147
  &:not([class*="#{$ns}-intent-"]) {
144
148
  --eccgui-tag-bg: #{$tag-default-color};
@@ -151,7 +155,7 @@ $tag-round-adjustment: 0 !default;
151
155
  var(--eccgui-tag-bg) var(--eccgui-tag-emfactor),
152
156
  eccgui-color-var("identity", "background", "100")
153
157
  );
154
- border-color: var(--eccgui-tag-border);
158
+ border-color: eccgui-color-rgba(var(--eccgui-tag-border), calc(0.25 * var(--eccgui-tag-emfactor)));
155
159
 
156
160
  &.#{$eccgui}-tag--strongeremphasis {
157
161
  --eccgui-tag-emfactor: 95%;
@@ -211,7 +215,7 @@ $tag-round-adjustment: 0 !default;
211
215
  var(--eccgui-tag-bg) var(--eccgui-tag-emfactor),
212
216
  eccgui-color-var("identity", "background", "100")
213
217
  );
214
- border-color: var(--eccgui-tag-border);
218
+ border-color: eccgui-color-rgba(var(--eccgui-tag-border), calc(0.25 * var(--eccgui-tag-emfactor)));
215
219
 
216
220
  &.#{$eccgui}-tag--strongeremphasis {
217
221
  --eccgui-tag-emfactor: 100%;
@@ -231,7 +235,7 @@ $tag-round-adjustment: 0 !default;
231
235
 
232
236
  &[class*="#{$eccgui}-intent--"] {
233
237
  color: eccgui-color-rgba(var(--eccgui-tag-text), var(--eccgui-tag-emfactor));
234
- border-color: eccgui-color-rgba(var(--eccgui-tag-border), var(--eccgui-tag-emfactor));
238
+ border-color: eccgui-color-rgba(var(--eccgui-tag-border), calc(0.25 * var(--eccgui-tag-emfactor)));
235
239
  }
236
240
 
237
241
  &.#{$eccgui}-intent--primary {
@@ -267,3 +271,9 @@ $tag-round-adjustment: 0 !default;
267
271
  }
268
272
  }
269
273
  }
274
+
275
+ @media print {
276
+ .#{$eccgui}-tag__item {
277
+ print-color-adjust: exact;
278
+ }
279
+ }
@@ -32,7 +32,7 @@ export interface TextAreaProps extends Omit<BlueprintTextAreaProps, "intent"> {
32
32
  * Element to render on right side of text area. Should be not too large.
33
33
  * This will update right padding on the text area.
34
34
  */
35
- rightElement?: JSX.Element;
35
+ rightElement?: React.JSX.Element;
36
36
  /**
37
37
  * Add HTML properties to the wrapper element.
38
38
  * The element wraps `TextArea` in case of a given `wrapperDivProps`, `leftIcon` or `rightElement` property.
@@ -3,7 +3,7 @@ import { Meta, StoryFn } from "@storybook/react";
3
3
 
4
4
  import { helpersArgTypes } from "../../../../.storybook/helpers";
5
5
 
6
- import { Button, IconButton, TextArea } from "./../../../../index";
6
+ import { Button, IconButton, TextArea } from "./../../../components";
7
7
  type TextAreaType = typeof TextArea;
8
8
 
9
9
  export default {
@@ -3,9 +3,7 @@ import { Meta, StoryFn } from "@storybook/react";
3
3
 
4
4
  import { helpersArgTypes } from "../../../../.storybook/helpers";
5
5
  import characters from "../../../common/utils/characters";
6
- import { TextFieldProps } from "../TextField";
7
-
8
- import { TextField } from "./../../../../index";
6
+ import { TextField, TextFieldProps } from "../TextField";
9
7
 
10
8
  export default {
11
9
  title: "Forms/TextField",
@@ -61,3 +59,26 @@ const invisibleCharacterWarningProps: TextFieldProps = {
61
59
  defaultValue: "Invisible character ->​<-",
62
60
  };
63
61
  InvisibleCharacterWarning.args = invisibleCharacterWarningProps;
62
+
63
+ /** Text field showing that emoji (✔️ variation-selector, 👨‍👩‍👧‍👦 ZWJ, #️⃣ keycap)
64
+ * are NOT reported as invisible characters, while a genuine ZWS still is. */
65
+ export const InvisibleCharacterWarningWithEmoji = Template.bind({});
66
+
67
+ const invisibleCharacterWarningWithEmojiProps: TextFieldProps = {
68
+ ...Default.args,
69
+ invisibleCharacterWarning: {
70
+ callback: (codePoints) => {
71
+ if (codePoints.size) {
72
+ const codePointsString = [...codePoints]
73
+ .map((n) => characters.invisibleZeroWidthCharacters.codePointMap.get(n)?.fullLabel)
74
+ .join(", ");
75
+ alert("Invisible character detected in input string. Code points: " + codePointsString);
76
+ }
77
+ },
78
+ callbackDelay: 500,
79
+ },
80
+ onChange: () => {},
81
+ // ZWS should be flagged; ✔️ 👨‍👩‍👧‍👦 #️⃣ should NOT be flagged
82
+ defaultValue: "Check\u200B ✔️ 👨‍👩‍👧‍👦 #️⃣",
83
+ };
84
+ InvisibleCharacterWarningWithEmoji.args = invisibleCharacterWarningWithEmojiProps;
@@ -0,0 +1,83 @@
1
+ import React from "react";
2
+ import { act, render } from "@testing-library/react";
3
+
4
+ import { useTextValidation } from "../useTextValidation";
5
+
6
+ const HookWrapper: React.FC<{ value: string; callback: jest.Mock; callbackDelay?: number }> = ({
7
+ value,
8
+ callback,
9
+ callbackDelay = 0,
10
+ }) => {
11
+ useTextValidation({
12
+ value,
13
+ onChange: jest.fn(),
14
+ invisibleCharacterWarning: { callback, callbackDelay },
15
+ });
16
+ return null;
17
+ };
18
+
19
+ describe("useTextValidation", () => {
20
+ beforeEach(() => {
21
+ jest.useFakeTimers();
22
+ });
23
+
24
+ afterEach(() => {
25
+ jest.useRealTimers();
26
+ });
27
+
28
+ /** Render the hook with a controlled value and flush the debounce timer. */
29
+ const runWithValue = (value: string, callbackDelay = 0) => {
30
+ const callback = jest.fn();
31
+ render(<HookWrapper value={value} callback={callback} callbackDelay={callbackDelay} />);
32
+ act(() => {
33
+ jest.runAllTimers();
34
+ });
35
+ return callback;
36
+ };
37
+
38
+ describe("invisible character detection", () => {
39
+ it("reports empty set for plain text", () => {
40
+ const callback = runWithValue("hello world");
41
+ expect(callback).toHaveBeenCalledWith(new Set());
42
+ });
43
+
44
+ it("detects zero-width space (U+200B)", () => {
45
+ const callback = runWithValue("hello\u200Bworld");
46
+ expect(callback).toHaveBeenCalledWith(new Set([0x200b]));
47
+ });
48
+
49
+ it("detects zero-width non-joiner (U+200C)", () => {
50
+ const callback = runWithValue("hello\u200Cworld");
51
+ expect(callback).toHaveBeenCalledWith(new Set([0x200c]));
52
+ });
53
+ });
54
+
55
+ describe("emoji false-positive prevention", () => {
56
+ it("does not flag ✔️ (base char + variation selector U+FE0F)", () => {
57
+ const callback = runWithValue("✔️");
58
+ expect(callback).toHaveBeenCalledWith(new Set());
59
+ });
60
+
61
+ it("does not flag ZWJ sequence emoji 👨‍👩‍👧‍👦", () => {
62
+ const callback = runWithValue("👨‍👩‍👧‍👦");
63
+ expect(callback).toHaveBeenCalledWith(new Set());
64
+ });
65
+
66
+ it("does not flag keycap emoji #️⃣", () => {
67
+ const callback = runWithValue("#️⃣");
68
+ expect(callback).toHaveBeenCalledWith(new Set());
69
+ });
70
+ });
71
+
72
+ describe("mixed content", () => {
73
+ it("detects ZWS while ignoring surrounding emoji", () => {
74
+ const callback = runWithValue("Check\u200B ✔️👨‍👩‍👧‍#️⃣");
75
+ expect(callback).toHaveBeenCalledWith(new Set([0x200b]));
76
+ });
77
+
78
+ it("reports empty set for text with only emoji", () => {
79
+ const callback = runWithValue("✔️ 👨‍👩‍👧‍👦#️⃣");
80
+ expect(callback).toHaveBeenCalledWith(new Set());
81
+ });
82
+ });
83
+ });
@@ -103,6 +103,8 @@ $eccgui-map-intent-bgcolors: (
103
103
  }
104
104
 
105
105
  .#{$ns}-input {
106
+ --#{$eccgui}-a11y-outline-color: #{$eccgui-color-accent};
107
+
106
108
  .#{$ns}-input-group[class*="#{$eccgui}-intent--"] & {
107
109
  animation-duration: 1s;
108
110
  animation-delay: 0.5s;
@@ -111,16 +113,23 @@ $eccgui-map-intent-bgcolors: (
111
113
  @each $each-intent, $each-bgcolor in $eccgui-map-intent-bgcolors {
112
114
  .#{$ns}-input-group.#{$ns}-intent-#{$each-intent} & {
113
115
  background-color: eccgui-color-var("semantic", $each-intent, "100");
116
+
117
+ --#{$eccgui}-a11y-outline-color: eccgui-color-var("semantic", $each-intent, "900");
118
+
114
119
  animation-name: intent-state-flash-#{$each-intent};
115
120
  }
116
121
  }
117
122
 
118
123
  .#{$ns}-input-group.#{$eccgui}-intent--info & {
119
124
  @include pt-input-intent($eccgui-color-info-text);
125
+
126
+ --#{$eccgui}-a11y-outline-color: #{$eccgui-color-info-text};
120
127
  }
121
128
 
122
129
  .#{$ns}-input-group.#{$eccgui}-intent--accent & {
123
130
  @include pt-input-intent($eccgui-color-primary);
131
+
132
+ --#{$eccgui}-a11y-outline-color: #{$eccgui-color-primary};
124
133
  }
125
134
 
126
135
  .#{$ns}-input-group.#{$eccgui}-intent--neutral & {
@@ -138,6 +147,10 @@ $eccgui-map-intent-bgcolors: (
138
147
 
139
148
  text-decoration: line-through $eccgui-color-danger-text 2px;
140
149
  }
150
+
151
+ &:focus-visible {
152
+ @extend .#{$eccgui}-a11y-focus-by-keyboard-static;
153
+ }
141
154
  }
142
155
 
143
156
  .#{$eccgui}-textarea {
@@ -151,16 +164,23 @@ $eccgui-map-intent-bgcolors: (
151
164
  @each $each-intent, $each-bgcolor in $eccgui-map-intent-bgcolors {
152
165
  &.#{$eccgui}-intent--#{$each-intent} {
153
166
  background-color: eccgui-color-var("semantic", $each-intent, "100");
167
+
168
+ --#{$eccgui}-a11y-outline-color: eccgui-color-var("semantic", $each-intent, "900");
169
+
154
170
  animation-name: intent-state-flash-#{$each-intent};
155
171
  }
156
172
  }
157
173
 
158
174
  &.#{$eccgui}-intent--info {
159
175
  @include pt-input-intent($eccgui-color-info-text);
176
+
177
+ --#{$eccgui}-a11y-outline-color: #{$eccgui-color-info-text};
160
178
  }
161
179
 
162
180
  &.#{$eccgui}-intent--accent {
163
181
  @include pt-input-intent($eccgui-color-primary);
182
+
183
+ --#{$eccgui}-a11y-outline-color: #{$eccgui-color-primary};
164
184
  }
165
185
 
166
186
  &.#{$eccgui}-intent--neutral {
@@ -44,19 +44,28 @@ export const useTextValidation = <T>({ value, onChange, invisibleCharacterWarnin
44
44
  state.current.detectedCodePoints = new Set();
45
45
  }, []);
46
46
  const detectionRegex = React.useMemo(() => chars.invisibleZeroWidthCharacters.createRegex(), []);
47
+ const segmenter = React.useMemo(() => new Intl.Segmenter(undefined, { granularity: "grapheme" }), []);
48
+ const emojiRegex = React.useMemo(() => new RegExp("\\p{Extended_Pictographic}|\\u20E3", "u"), []);
49
+
47
50
  const detectIssues = React.useCallback(
48
51
  (value: string): void => {
49
- detectionRegex.lastIndex = 0;
50
- let matchArray = detectionRegex.exec(value);
51
- while (matchArray) {
52
- const codePoint = matchArray[0].codePointAt(0);
53
- if (codePoint) {
54
- state.current.detectedCodePoints.add(codePoint);
52
+ for (const { segment } of segmenter.segment(value)) {
53
+ if (emojiRegex.test(segment)) {
54
+ // skip emoji clusters since they legitimately contain variation selectors, ZWJ, tags, etc.
55
+ } else {
56
+ detectionRegex.lastIndex = 0;
57
+ let matchArray = detectionRegex.exec(segment);
58
+ while (matchArray) {
59
+ const codePoint = matchArray[0].codePointAt(0);
60
+ if (codePoint) {
61
+ state.current.detectedCodePoints.add(codePoint);
62
+ }
63
+ matchArray = detectionRegex.exec(segment);
64
+ }
55
65
  }
56
- matchArray = detectionRegex.exec(value);
57
66
  }
58
67
  },
59
- [detectionRegex]
68
+ [detectionRegex, segmenter, emojiRegex]
60
69
  );
61
70
  // Checks if the value contains any problematic characters with a small delay.
62
71
  const checkValue = React.useCallback(
@@ -2,7 +2,10 @@ import React from "react";
2
2
  import { LoremIpsum } from "react-lorem-ipsum";
3
3
  import { Meta, StoryFn } from "@storybook/react";
4
4
 
5
- import { HtmlContentBlock, Markdown, TextReducer } from "../../../index";
5
+ import { Markdown } from "../../cmem/markdown/Markdown";
6
+ import { HtmlContentBlock } from "../Typography";
7
+
8
+ import { TextReducer } from "./TextReducer";
6
9
 
7
10
  export default {
8
11
  title: "Components/TextReducer",
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import {render, RenderResult} from "@testing-library/react";
2
+ import { render, RenderResult } from "@testing-library/react";
3
3
 
4
4
  import "@testing-library/jest-dom";
5
5
 
@@ -9,10 +9,10 @@ import { Default as TextReducerStory } from "./TextReducer.stories";
9
9
  describe("TextReducer", () => {
10
10
  const textMustExist = (queryByText: RenderResult["queryByText"], text: string) => {
11
11
  expect(queryByText(text, { exact: false })).not.toBeNull();
12
- }
12
+ };
13
13
  const textMustNotExist = (queryByText: RenderResult["queryByText"], text: string) => {
14
14
  expect(queryByText(text, { exact: false })).toBeNull();
15
- }
15
+ };
16
16
  it("should display encoded HTML entities by default if they are used in the transformed markup", () => {
17
17
  const { queryByText } = render(<TextReducer {...TextReducerStory.args} />);
18
18
  textMustExist(queryByText, "&#x27;entities&#x27; &amp; &quot;quotes&quot;");
@@ -1,9 +1,8 @@
1
1
  .#{$eccgui}-toolbar {
2
2
  display: flex;
3
3
  flex-flow: row wrap;
4
- align-content: center;
4
+ place-content: center flex-start;
5
5
  align-items: center;
6
- justify-content: flex-start;
7
6
  }
8
7
 
9
8
  .#{$eccgui}-toolbar--vertical {
@@ -1,5 +1,6 @@
1
1
  import React from "react";
2
2
  import { fireEvent, render, screen, waitFor } from "@testing-library/react";
3
+ import userEvent from "@testing-library/user-event";
3
4
 
4
5
  import "@testing-library/jest-dom";
5
6
 
@@ -45,19 +46,53 @@ describe("Tooltip", () => {
45
46
  fireEvent.mouseEnter(container.getElementsByClassName(`${eccgui}-tooltip__wrapper--placeholder`)[0]);
46
47
  checkForPlaceholderClass(container, 1);
47
48
  await waitFor(() => {
48
- expect(screen.queryAllByText(TooltipStory.args.content)).toHaveLength(0);
49
49
  checkForPlaceholderClass(container, 0);
50
50
  });
51
+ expect(screen.queryAllByText(TooltipStory.args.content as string)).toHaveLength(0);
51
52
  });
52
53
  it("should be displayed on two continues mouse hover when placeholder is used", async () => {
53
54
  const { container } = render(<Tooltip {...TooltipStory.args} usePlaceholder={true} />);
54
55
  fireEvent.mouseEnter(container.getElementsByClassName(`${eccgui}-tooltip__wrapper`)[0]);
55
56
  checkForPlaceholderClass(container, 1);
56
- await waitFor(async () => {
57
- expect(screen.queryAllByText(TooltipStory.args.content)).toHaveLength(0);
57
+ await waitFor(() => {
58
+ checkForPlaceholderClass(container, 0);
59
+ });
60
+ expect(screen.queryAllByText(TooltipStory.args.content as string)).toHaveLength(0);
61
+ fireEvent.mouseEnter(container.getElementsByClassName(`${eccgui}-tooltip__wrapper`)[0]);
62
+ expect(await screen.findByText(TooltipStory.args.content as string)).toBeVisible();
63
+ });
64
+ it("should be displayed on focus when no placeholder is used", async () => {
65
+ // Blueprint ignores focus events with null relatedTarget (page-refocus guard), so we tab
66
+ // from a preceding element to produce a non-null relatedTarget.
67
+ render(
68
+ <>
69
+ <button>previous element</button>
70
+ <Tooltip {...TooltipStory.args} usePlaceholder={false} />
71
+ </>
72
+ );
73
+ const user = userEvent.setup();
74
+ await user.tab(); // focuses "previous element"
75
+ await user.tab(); // focuses tooltip target, relatedTarget is non-null → Blueprint opens
76
+ expect(await screen.findByText(TooltipStory.args.content as string)).toBeVisible();
77
+ });
78
+ it("should be displayed after keyboard focus when placeholder is used", async () => {
79
+ // Use a focusable button child so refocus() can call .focus() on it after the swap.
80
+ // Tab from a preceding element so relatedTarget is non-null when Blueprint handles focus.
81
+ const { container } = render(
82
+ <>
83
+ <button>previous element</button>
84
+ <Tooltip {...TooltipStory.args} usePlaceholder={true}>
85
+ <button>tooltip target</button>
86
+ </Tooltip>
87
+ </>
88
+ );
89
+ const user = userEvent.setup();
90
+ await user.tab(); // focuses "previous element"
91
+ await user.tab(); // focuses placeholder inner button, triggers focusin swap
92
+ checkForPlaceholderClass(container, 1);
93
+ await waitFor(() => {
58
94
  checkForPlaceholderClass(container, 0);
59
- fireEvent.mouseOver(container.getElementsByClassName(`${eccgui}-tooltip__wrapper`)[0]);
60
- expect(await screen.findByText(TooltipStory.args.content)).toBeVisible();
61
95
  });
96
+ expect(await screen.findByText(TooltipStory.args.content as string)).toBeVisible();
62
97
  });
63
98
  });
@@ -50,7 +50,7 @@ export interface TooltipProps extends Omit<BlueprintTooltipProps, "position"> {
50
50
  swapPlaceholderDelay?: number;
51
51
  }
52
52
 
53
- export type TooltipSize = "small" | "medium" | "large"
53
+ export type TooltipSize = "small" | "medium" | "large";
54
54
 
55
55
  export const Tooltip = ({
56
56
  children,
@@ -100,15 +100,19 @@ export const Tooltip = ({
100
100
  }, swapDelayTime);
101
101
  if (placeholderRef.current !== null) {
102
102
  const eventType = ev.type === "focusin" ? "focusout" : "mouseleave";
103
- (placeholderRef.current as HTMLElement).addEventListener(eventType, () => {
104
- if (
105
- (eventType === "focusout" && eventMemory.current === "afterfocus") ||
106
- (eventType === "mouseleave" && eventMemory.current === "afterhover")
107
- ) {
108
- eventMemory.current = null;
109
- }
110
- clearTimeout(swapDelay.current as NodeJS.Timeout);
111
- });
103
+ const innerFocusTarget = (placeholderRef.current as HTMLElement).querySelector("[tabindex='0']")
104
+ ?.children[0];
105
+ if (innerFocusTarget) {
106
+ (innerFocusTarget as HTMLElement).addEventListener(eventType, () => {
107
+ if (
108
+ (eventType === "focusout" && eventMemory.current === "afterfocus") ||
109
+ (eventType === "mouseleave" && eventMemory.current === "afterhover")
110
+ ) {
111
+ eventMemory.current = null;
112
+ }
113
+ clearTimeout(swapDelay.current as NodeJS.Timeout);
114
+ });
115
+ }
112
116
  }
113
117
  };
114
118
  (placeholderRef.current as HTMLElement).addEventListener("mouseenter", swap);
@@ -123,7 +127,7 @@ export const Tooltip = ({
123
127
  return () => {};
124
128
  }, [!!placeholderRef.current]);
125
129
 
126
- const refocus = React.useCallback((node) => {
130
+ const refocus = React.useCallback((node:any) => {
127
131
  if (eventMemory.current && node) {
128
132
  // we do not have a `targetRef` here, so we need to workaround it
129
133
  // const target = node.targetRef.current.children[0];
@@ -0,0 +1,24 @@
1
+ import React from "react";
2
+
3
+ import { CLASSPREFIX as eccgui } from "../../configuration/constants";
4
+ import { TestableComponent } from "../interfaces";
5
+
6
+ export interface InlineTextProps extends React.HTMLAttributes<HTMLElement>, TestableComponent {
7
+ /**
8
+ * Additional CSS class name.
9
+ */
10
+ className?: string;
11
+ }
12
+
13
+ /**
14
+ * Forces all children to be displayed as inline content.
15
+ */
16
+ export const InlineText = ({ className = "", children, ...otherProps }: InlineTextProps) => {
17
+ return (
18
+ <div {...otherProps} className={`${eccgui}-typography__inlinetext` + (className ? " " + className : "")}>
19
+ {children}
20
+ </div>
21
+ );
22
+ };
23
+
24
+ export default InlineText;
@@ -7,6 +7,7 @@ select,
7
7
  input,
8
8
  textarea {
9
9
  font-family: inherit;
10
+ font-size-adjust: inherit;
10
11
  border-radius: 0;
11
12
  }
12
13
 
@@ -27,6 +28,7 @@ button {
27
28
 
28
29
  svg {
29
30
  padding: 0;
31
+
30
32
  // forgotten in reset import but necessary to fix problems when used together with MDL resets
31
33
  margin: 0;
32
34
  font: inherit;
@@ -2,3 +2,4 @@ export * from "./Highlighter";
2
2
  export * from "./HtmlContentBlock";
3
3
  export * from "./OverflowText";
4
4
  export * from "./WhiteSpaceContainer";
5
+ export * from "./InlineText";
@@ -0,0 +1,27 @@
1
+ import React from "react";
2
+ import { Meta, StoryFn } from "@storybook/react";
3
+
4
+ import { InlineText } from "../InlineText";
5
+
6
+ import overflowTextConfig from "./OverflowText.stories";
7
+
8
+ const config = {
9
+ title: "Components/Typography/InlineText",
10
+ component: InlineText,
11
+ argTypes: {
12
+ children: overflowTextConfig.argTypes?.children,
13
+ },
14
+ } as Meta<typeof InlineText>;
15
+ export default config;
16
+
17
+ const Template: StoryFn<typeof InlineText> = (args) => <InlineText {...args} />;
18
+
19
+ export const Default = Template.bind({});
20
+ Default.args = {
21
+ children: (
22
+ <div>
23
+ <div>Block line 1.</div>
24
+ <div>Block line 2.</div>
25
+ </div>
26
+ ),
27
+ };
@@ -13,6 +13,12 @@ html {
13
13
 
14
14
  body {
15
15
  font-family: $eccgui-font-family-default;
16
+
17
+ // User-facing text may contain Unicode symbols (e.g. "★") that fall outside the primary font stack.
18
+ // Browsers pick different system fallback fonts for such characters, causing glyphs to render at
19
+ // different optical sizes (smaller in Firefox). font-size-adjust normalises the fallback font size
20
+ // by matching the primary font's x-height, reducing the visual size discrepancy across browsers.
21
+ font-size-adjust: from-font;
16
22
  font-weight: $eccgui-font-weight-regular;
17
23
  text-rendering: optimizelegibility;
18
24
  -webkit-font-smoothing: antialiased;
@@ -22,6 +28,11 @@ body {
22
28
  code {
23
29
  font-family: $eccgui-font-family-monospace;
24
30
  font-size: 0.9em;
31
+
32
+ .#{$eccgui}-typography__contentblock &,
33
+ &.#{$eccgui}-typography__text {
34
+ background-color: $eccgui-color-workspace-background;
35
+ }
25
36
  }
26
37
 
27
38
  strong {
@@ -63,11 +74,18 @@ mark {
63
74
  line-height: $eccgui-size-typo-text-lineheight;
64
75
  }
65
76
 
66
- .#{$eccgui}-typography__contentblock.#{$eccgui}-typography--small {
77
+ .#{$eccgui}-typography__contentblock.#{$eccgui}-typography--small,
78
+ .#{$eccgui}-typography--small {
67
79
  font-size: $eccgui-size-typo-caption;
68
80
  line-height: $eccgui-size-typo-caption-lineheight;
69
81
  }
70
82
 
83
+ .#{$eccgui}-typography__contentblock.#{$eccgui}-typography--large,
84
+ .#{$eccgui}-typography--large {
85
+ font-size: $eccgui-size-typo-subtitle;
86
+ line-height: $eccgui-size-typo-subtitle-lineheight;
87
+ }
88
+
71
89
  h1 {
72
90
  .#{$eccgui}-typography__contentblock &,
73
91
  &.#{$eccgui}-typography__text {
@@ -223,9 +241,9 @@ table {
223
241
  max-width: 100%;
224
242
  overflow: hidden;
225
243
  text-overflow: ellipsis;
244
+ vertical-align: middle;
226
245
  overflow-wrap: normal;
227
246
  white-space: nowrap;
228
- vertical-align: middle;
229
247
  }
230
248
 
231
249
  .#{$eccgui}-typography__overflowtext--inline {
@@ -241,8 +259,8 @@ table {
241
259
  }
242
260
 
243
261
  .#{$eccgui}-typography__overflowtext--ellipsis-reverse {
244
- text-align: left;
245
262
  text-overflow: ellipsis;
263
+ text-align: left;
246
264
  direction: rtl;
247
265
  unicode-bidi: embed;
248
266
 
@@ -263,6 +281,22 @@ table {
263
281
  }
264
282
  }
265
283
 
284
+ // InlineText
285
+
286
+ .#{$eccgui}-typography__inlinetext {
287
+ display: inline;
288
+
289
+ * {
290
+ display: inline;
291
+
292
+ & + * {
293
+ &::before {
294
+ content: " ";
295
+ }
296
+ }
297
+ }
298
+ }
299
+
266
300
  // helpers
267
301
 
268
302
  .#{$eccgui}-typography--nooverflow {