@atlaskit/editor-plugin-text-formatting 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/.eslintrc.js +7 -0
  2. package/CHANGELOG.md +1 -0
  3. package/LICENSE.md +13 -0
  4. package/README.md +9 -0
  5. package/dist/cjs/actions.js +188 -0
  6. package/dist/cjs/commands/clear-formatting.js +111 -0
  7. package/dist/cjs/commands/text-formatting.js +143 -0
  8. package/dist/cjs/commands/transform-to-code.js +68 -0
  9. package/dist/cjs/index.js +12 -0
  10. package/dist/cjs/plugin.js +133 -0
  11. package/dist/cjs/pm-plugins/clear-formatting-keymap.js +21 -0
  12. package/dist/cjs/pm-plugins/clear-formatting.js +36 -0
  13. package/dist/cjs/pm-plugins/cursor.js +55 -0
  14. package/dist/cjs/pm-plugins/input-rule.js +274 -0
  15. package/dist/cjs/pm-plugins/keymap.js +52 -0
  16. package/dist/cjs/pm-plugins/main.js +113 -0
  17. package/dist/cjs/pm-plugins/plugin-key.js +9 -0
  18. package/dist/cjs/pm-plugins/smart-input-rule.js +176 -0
  19. package/dist/cjs/ui/Toolbar/constants.js +19 -0
  20. package/dist/cjs/ui/Toolbar/dropdown-menu.js +86 -0
  21. package/dist/cjs/ui/Toolbar/hooks/clear-formatting-icon.js +55 -0
  22. package/dist/cjs/ui/Toolbar/hooks/formatting-icons.js +227 -0
  23. package/dist/cjs/ui/Toolbar/hooks/menu-state.js +23 -0
  24. package/dist/cjs/ui/Toolbar/hooks/responsive-toolbar-buttons.js +60 -0
  25. package/dist/cjs/ui/Toolbar/index.js +183 -0
  26. package/dist/cjs/ui/Toolbar/more-button.js +42 -0
  27. package/dist/cjs/ui/Toolbar/single-toolbar-buttons.js +49 -0
  28. package/dist/cjs/ui/Toolbar/types.js +17 -0
  29. package/dist/cjs/utils/cell-selection.js +12 -0
  30. package/dist/cjs/utils.js +86 -0
  31. package/dist/cjs/version.json +5 -0
  32. package/dist/es2019/actions.js +161 -0
  33. package/dist/es2019/commands/clear-formatting.js +105 -0
  34. package/dist/es2019/commands/text-formatting.js +144 -0
  35. package/dist/es2019/commands/transform-to-code.js +71 -0
  36. package/dist/es2019/index.js +1 -0
  37. package/dist/es2019/plugin.js +124 -0
  38. package/dist/es2019/pm-plugins/clear-formatting-keymap.js +10 -0
  39. package/dist/es2019/pm-plugins/clear-formatting.js +26 -0
  40. package/dist/es2019/pm-plugins/cursor.js +52 -0
  41. package/dist/es2019/pm-plugins/input-rule.js +242 -0
  42. package/dist/es2019/pm-plugins/keymap.js +43 -0
  43. package/dist/es2019/pm-plugins/main.js +110 -0
  44. package/dist/es2019/pm-plugins/plugin-key.js +2 -0
  45. package/dist/es2019/pm-plugins/smart-input-rule.js +155 -0
  46. package/dist/es2019/ui/Toolbar/constants.js +20 -0
  47. package/dist/es2019/ui/Toolbar/dropdown-menu.js +66 -0
  48. package/dist/es2019/ui/Toolbar/hooks/clear-formatting-icon.js +44 -0
  49. package/dist/es2019/ui/Toolbar/hooks/formatting-icons.js +212 -0
  50. package/dist/es2019/ui/Toolbar/hooks/menu-state.js +11 -0
  51. package/dist/es2019/ui/Toolbar/hooks/responsive-toolbar-buttons.js +48 -0
  52. package/dist/es2019/ui/Toolbar/index.js +168 -0
  53. package/dist/es2019/ui/Toolbar/more-button.js +34 -0
  54. package/dist/es2019/ui/Toolbar/single-toolbar-buttons.js +39 -0
  55. package/dist/es2019/ui/Toolbar/types.js +10 -0
  56. package/dist/es2019/utils/cell-selection.js +5 -0
  57. package/dist/es2019/utils.js +74 -0
  58. package/dist/es2019/version.json +5 -0
  59. package/dist/esm/actions.js +168 -0
  60. package/dist/esm/commands/clear-formatting.js +101 -0
  61. package/dist/esm/commands/text-formatting.js +134 -0
  62. package/dist/esm/commands/transform-to-code.js +61 -0
  63. package/dist/esm/index.js +1 -0
  64. package/dist/esm/plugin.js +125 -0
  65. package/dist/esm/pm-plugins/clear-formatting-keymap.js +10 -0
  66. package/dist/esm/pm-plugins/clear-formatting.js +28 -0
  67. package/dist/esm/pm-plugins/cursor.js +48 -0
  68. package/dist/esm/pm-plugins/input-rule.js +257 -0
  69. package/dist/esm/pm-plugins/keymap.js +43 -0
  70. package/dist/esm/pm-plugins/main.js +99 -0
  71. package/dist/esm/pm-plugins/plugin-key.js +2 -0
  72. package/dist/esm/pm-plugins/smart-input-rule.js +169 -0
  73. package/dist/esm/ui/Toolbar/constants.js +8 -0
  74. package/dist/esm/ui/Toolbar/dropdown-menu.js +75 -0
  75. package/dist/esm/ui/Toolbar/hooks/clear-formatting-icon.js +47 -0
  76. package/dist/esm/ui/Toolbar/hooks/formatting-icons.js +215 -0
  77. package/dist/esm/ui/Toolbar/hooks/menu-state.js +15 -0
  78. package/dist/esm/ui/Toolbar/hooks/responsive-toolbar-buttons.js +50 -0
  79. package/dist/esm/ui/Toolbar/index.js +174 -0
  80. package/dist/esm/ui/Toolbar/more-button.js +33 -0
  81. package/dist/esm/ui/Toolbar/single-toolbar-buttons.js +38 -0
  82. package/dist/esm/ui/Toolbar/types.js +10 -0
  83. package/dist/esm/utils/cell-selection.js +5 -0
  84. package/dist/esm/utils.js +75 -0
  85. package/dist/esm/version.json +5 -0
  86. package/dist/types/actions.d.ts +22 -0
  87. package/dist/types/commands/clear-formatting.d.ts +6 -0
  88. package/dist/types/commands/text-formatting.d.ts +5 -0
  89. package/dist/types/commands/transform-to-code.d.ts +2 -0
  90. package/dist/types/index.d.ts +3 -0
  91. package/dist/types/plugin.d.ts +17 -0
  92. package/dist/types/pm-plugins/clear-formatting-keymap.d.ts +4 -0
  93. package/dist/types/pm-plugins/clear-formatting.d.ts +8 -0
  94. package/dist/types/pm-plugins/cursor.d.ts +3 -0
  95. package/dist/types/pm-plugins/input-rule.d.ts +23 -0
  96. package/dist/types/pm-plugins/keymap.d.ts +4 -0
  97. package/dist/types/pm-plugins/main.d.ts +7 -0
  98. package/dist/types/pm-plugins/plugin-key.d.ts +3 -0
  99. package/dist/types/pm-plugins/smart-input-rule.d.ts +3 -0
  100. package/dist/types/ui/Toolbar/constants.d.ts +6 -0
  101. package/dist/types/ui/Toolbar/dropdown-menu.d.ts +15 -0
  102. package/dist/types/ui/Toolbar/hooks/clear-formatting-icon.d.ts +7 -0
  103. package/dist/types/ui/Toolbar/hooks/formatting-icons.d.ts +14 -0
  104. package/dist/types/ui/Toolbar/hooks/menu-state.d.ts +1 -0
  105. package/dist/types/ui/Toolbar/hooks/responsive-toolbar-buttons.d.ts +20 -0
  106. package/dist/types/ui/Toolbar/index.d.ts +25 -0
  107. package/dist/types/ui/Toolbar/more-button.d.ts +14 -0
  108. package/dist/types/ui/Toolbar/single-toolbar-buttons.d.ts +10 -0
  109. package/dist/types/ui/Toolbar/types.d.ts +32 -0
  110. package/dist/types/utils/cell-selection.d.ts +3 -0
  111. package/dist/types/utils.d.ts +11 -0
  112. package/dist/types-ts4.5/actions.d.ts +22 -0
  113. package/dist/types-ts4.5/commands/clear-formatting.d.ts +6 -0
  114. package/dist/types-ts4.5/commands/text-formatting.d.ts +5 -0
  115. package/dist/types-ts4.5/commands/transform-to-code.d.ts +2 -0
  116. package/dist/types-ts4.5/index.d.ts +3 -0
  117. package/dist/types-ts4.5/plugin.d.ts +19 -0
  118. package/dist/types-ts4.5/pm-plugins/clear-formatting-keymap.d.ts +4 -0
  119. package/dist/types-ts4.5/pm-plugins/clear-formatting.d.ts +8 -0
  120. package/dist/types-ts4.5/pm-plugins/cursor.d.ts +3 -0
  121. package/dist/types-ts4.5/pm-plugins/input-rule.d.ts +23 -0
  122. package/dist/types-ts4.5/pm-plugins/keymap.d.ts +4 -0
  123. package/dist/types-ts4.5/pm-plugins/main.d.ts +7 -0
  124. package/dist/types-ts4.5/pm-plugins/plugin-key.d.ts +3 -0
  125. package/dist/types-ts4.5/pm-plugins/smart-input-rule.d.ts +3 -0
  126. package/dist/types-ts4.5/ui/Toolbar/constants.d.ts +6 -0
  127. package/dist/types-ts4.5/ui/Toolbar/dropdown-menu.d.ts +15 -0
  128. package/dist/types-ts4.5/ui/Toolbar/hooks/clear-formatting-icon.d.ts +7 -0
  129. package/dist/types-ts4.5/ui/Toolbar/hooks/formatting-icons.d.ts +14 -0
  130. package/dist/types-ts4.5/ui/Toolbar/hooks/menu-state.d.ts +5 -0
  131. package/dist/types-ts4.5/ui/Toolbar/hooks/responsive-toolbar-buttons.d.ts +20 -0
  132. package/dist/types-ts4.5/ui/Toolbar/index.d.ts +25 -0
  133. package/dist/types-ts4.5/ui/Toolbar/more-button.d.ts +14 -0
  134. package/dist/types-ts4.5/ui/Toolbar/single-toolbar-buttons.d.ts +10 -0
  135. package/dist/types-ts4.5/ui/Toolbar/types.d.ts +32 -0
  136. package/dist/types-ts4.5/utils/cell-selection.d.ts +3 -0
  137. package/dist/types-ts4.5/utils.d.ts +11 -0
  138. package/package.json +93 -0
  139. package/report.api.md +66 -0
  140. package/tmp/api-report-tmp.d.ts +39 -0
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useHasFormattingActived = exports.useFormattingIcons = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _react2 = require("@emotion/react");
12
+ var _analytics = require("@atlaskit/editor-common/analytics");
13
+ var _keymaps = require("@atlaskit/editor-common/keymaps");
14
+ var _messages = require("@atlaskit/editor-common/messages");
15
+ var _shortcut = require("@atlaskit/editor-shared-styles/shortcut");
16
+ var _bold = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/bold"));
17
+ var _italic = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/italic"));
18
+ var _actions = require("../../../actions");
19
+ var _pluginKey = require("../../../pm-plugins/plugin-key");
20
+ var _types = require("../types");
21
+ var _IconsMarkSchema;
22
+ /** @jsx jsx */
23
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+ var withToolbarInputMethod = function withToolbarInputMethod(func) {
26
+ return func({
27
+ inputMethod: _analytics.INPUT_METHOD.TOOLBAR
28
+ });
29
+ };
30
+ var IconButtons = function IconButtons(editorAnalyticsAPI) {
31
+ return {
32
+ strong: {
33
+ buttonId: _analytics.TOOLBAR_ACTION_SUBJECT_ID.TEXT_FORMATTING_STRONG,
34
+ command: withToolbarInputMethod((0, _actions.toggleStrongWithAnalytics)(editorAnalyticsAPI)),
35
+ message: _messages.toolbarMessages.bold,
36
+ tooltipKeymap: _keymaps.toggleBold,
37
+ component: function component() {
38
+ return (0, _react2.jsx)(_bold.default, {
39
+ label: ""
40
+ });
41
+ }
42
+ },
43
+ em: {
44
+ buttonId: _analytics.TOOLBAR_ACTION_SUBJECT_ID.TEXT_FORMATTING_ITALIC,
45
+ command: withToolbarInputMethod((0, _actions.toggleEmWithAnalytics)(editorAnalyticsAPI)),
46
+ message: _messages.toolbarMessages.italic,
47
+ tooltipKeymap: _keymaps.toggleItalic,
48
+ component: function component() {
49
+ return (0, _react2.jsx)(_italic.default, {
50
+ label: ""
51
+ });
52
+ }
53
+ },
54
+ underline: {
55
+ command: withToolbarInputMethod((0, _actions.toggleUnderlineWithAnalytics)(editorAnalyticsAPI)),
56
+ message: _messages.toolbarMessages.underline,
57
+ tooltipKeymap: _keymaps.toggleUnderline
58
+ },
59
+ strike: {
60
+ command: withToolbarInputMethod((0, _actions.toggleStrikeWithAnalytics)(editorAnalyticsAPI)),
61
+ message: _messages.toolbarMessages.strike,
62
+ tooltipKeymap: _keymaps.toggleStrikethrough
63
+ },
64
+ code: {
65
+ command: withToolbarInputMethod((0, _actions.toggleCodeWithAnalytics)(editorAnalyticsAPI)),
66
+ message: _messages.toolbarMessages.code,
67
+ tooltipKeymap: _keymaps.toggleCode
68
+ },
69
+ subscript: {
70
+ command: withToolbarInputMethod((0, _actions.toggleSubscriptWithAnalytics)(editorAnalyticsAPI)),
71
+ message: _messages.toolbarMessages.subscript,
72
+ tooltipKeymap: _keymaps.toggleSubscript
73
+ },
74
+ superscript: {
75
+ command: withToolbarInputMethod((0, _actions.toggleSuperscriptWithAnalytics)(editorAnalyticsAPI)),
76
+ message: _messages.toolbarMessages.superscript,
77
+ tooltipKeymap: _keymaps.toggleSuperscript
78
+ }
79
+ };
80
+ };
81
+ var getIcon = function getIcon(_ref) {
82
+ var iconType = _ref.iconType,
83
+ isDisabled = _ref.isDisabled,
84
+ isActive = _ref.isActive,
85
+ intl = _ref.intl,
86
+ editorAnalyticsAPI = _ref.editorAnalyticsAPI;
87
+ var icon = IconButtons(editorAnalyticsAPI)[iconType];
88
+ var content = intl.formatMessage(icon.message);
89
+ var tooltipKeymap = icon.tooltipKeymap;
90
+ return {
91
+ content: content,
92
+ buttonId: icon.buttonId,
93
+ iconMark: iconType,
94
+ key: iconType,
95
+ command: icon.command,
96
+ iconElement: icon.component ? icon.component() : undefined,
97
+ tooltipElement: tooltipKeymap ? (0, _react2.jsx)(_keymaps.ToolTipContent, {
98
+ description: content,
99
+ keymap: tooltipKeymap
100
+ }) : undefined,
101
+ elemAfter: tooltipKeymap ?
102
+ // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage
103
+ (0, _react2.jsx)("div", {
104
+ css: _shortcut.shortcutStyle
105
+ }, (0, _keymaps.tooltip)(tooltipKeymap)) : undefined,
106
+ value: {
107
+ name: iconType
108
+ },
109
+ isActive: isActive,
110
+ isDisabled: isDisabled,
111
+ 'aria-label': tooltipKeymap ? (0, _keymaps.tooltip)(tooltipKeymap, String(content)) : String(content),
112
+ 'aria-keyshortcuts': (0, _keymaps.getAriaKeyshortcuts)(tooltipKeymap)
113
+ };
114
+ };
115
+ var IconsMarkSchema = (_IconsMarkSchema = {}, (0, _defineProperty2.default)(_IconsMarkSchema, _types.IconTypes.strong, 'strong'), (0, _defineProperty2.default)(_IconsMarkSchema, _types.IconTypes.em, 'em'), (0, _defineProperty2.default)(_IconsMarkSchema, _types.IconTypes.strike, 'strike'), (0, _defineProperty2.default)(_IconsMarkSchema, _types.IconTypes.code, 'code'), (0, _defineProperty2.default)(_IconsMarkSchema, _types.IconTypes.underline, 'underline'), (0, _defineProperty2.default)(_IconsMarkSchema, _types.IconTypes.superscript, 'subsup'), (0, _defineProperty2.default)(_IconsMarkSchema, _types.IconTypes.subscript, 'subsup'), _IconsMarkSchema);
116
+ var buildMenuIconState = function buildMenuIconState(iconMark) {
117
+ return function (_ref2) {
118
+ var schema = _ref2.schema,
119
+ textFormattingPluginState = _ref2.textFormattingPluginState;
120
+ var hasPluginState = Boolean(Object.keys(textFormattingPluginState || {}).length);
121
+ var markSchema = IconsMarkSchema[iconMark];
122
+ var hasSchemaMark = Boolean(schema.marks[markSchema]);
123
+ if (!hasPluginState) {
124
+ return {
125
+ isActive: false,
126
+ isDisabled: true,
127
+ isHidden: false,
128
+ hasSchemaMark: hasSchemaMark
129
+ };
130
+ }
131
+ var isActive = textFormattingPluginState["".concat(iconMark, "Active")];
132
+ var isDisabled = textFormattingPluginState["".concat(iconMark, "Disabled")];
133
+ var isHidden = textFormattingPluginState["".concat(iconMark, "Hidden")];
134
+ return {
135
+ isActive: Boolean(isActive),
136
+ isDisabled: Boolean(isDisabled),
137
+ isHidden: Boolean(isHidden),
138
+ hasSchemaMark: hasSchemaMark
139
+ };
140
+ };
141
+ };
142
+ var buildIcon = function buildIcon(iconMark, editorAnalyticsAPI) {
143
+ var getState = buildMenuIconState(iconMark);
144
+ return function (_ref3) {
145
+ var schema = _ref3.schema,
146
+ textFormattingPluginState = _ref3.textFormattingPluginState,
147
+ intl = _ref3.intl,
148
+ isToolbarDisabled = _ref3.isToolbarDisabled;
149
+ var iconState = getState({
150
+ schema: schema,
151
+ textFormattingPluginState: textFormattingPluginState
152
+ });
153
+ var isActive = iconState.isActive,
154
+ isDisabled = iconState.isDisabled,
155
+ isHidden = iconState.isHidden,
156
+ hasSchemaMark = iconState.hasSchemaMark;
157
+ var iconComponent = (0, _react.useMemo)(function () {
158
+ return getIcon({
159
+ iconType: _types.IconTypes[iconMark],
160
+ isDisabled: isToolbarDisabled || isDisabled,
161
+ isActive: isActive,
162
+ intl: intl,
163
+ editorAnalyticsAPI: editorAnalyticsAPI
164
+ });
165
+ }, [isToolbarDisabled, isDisabled, isActive, intl]);
166
+ var shouldRenderIcon = hasSchemaMark && !isHidden;
167
+ return (0, _react.useMemo)(function () {
168
+ return shouldRenderIcon ? iconComponent : null;
169
+ }, [shouldRenderIcon, iconComponent]);
170
+ };
171
+ };
172
+ var useTextFormattingPluginState = function useTextFormattingPluginState(editorState) {
173
+ return (0, _react.useMemo)(function () {
174
+ var pluginState = _pluginKey.pluginKey.getState(editorState);
175
+
176
+ // TODO: ED-13910 for reasons that goes beyond my knowledge. This is the only way to make the current unit tests happy. Even thought this was wrong before
177
+ return pluginState;
178
+ }, [editorState]);
179
+ };
180
+ var useFormattingIcons = function useFormattingIcons(_ref4) {
181
+ var isToolbarDisabled = _ref4.isToolbarDisabled,
182
+ editorState = _ref4.editorState,
183
+ intl = _ref4.intl,
184
+ editorAnalyticsAPI = _ref4.editorAnalyticsAPI;
185
+ var textFormattingPluginState = useTextFormattingPluginState(editorState);
186
+ var schema = editorState.schema;
187
+ var props = {
188
+ schema: schema,
189
+ textFormattingPluginState: textFormattingPluginState,
190
+ intl: intl,
191
+ isToolbarDisabled: Boolean(isToolbarDisabled)
192
+ };
193
+ var buildStrongIcon = buildIcon(_types.IconTypes.strong, editorAnalyticsAPI);
194
+ var buildEmIcon = buildIcon(_types.IconTypes.em, editorAnalyticsAPI);
195
+ var buildUnderlineIcon = buildIcon(_types.IconTypes.underline, editorAnalyticsAPI);
196
+ var buildStrikeIcon = buildIcon(_types.IconTypes.strike, editorAnalyticsAPI);
197
+ var buildCodeIcon = buildIcon(_types.IconTypes.code, editorAnalyticsAPI);
198
+ var buildSubscriptIcon = buildIcon(_types.IconTypes.subscript, editorAnalyticsAPI);
199
+ var buildSuperscriptIcon = buildIcon(_types.IconTypes.superscript, editorAnalyticsAPI);
200
+ var strongIcon = buildStrongIcon(props);
201
+ var emIcon = buildEmIcon(props);
202
+ var underlineIcon = buildUnderlineIcon(props);
203
+ var strikeIcon = buildStrikeIcon(props);
204
+ var codeIcon = buildCodeIcon(props);
205
+ var subscriptIcon = buildSubscriptIcon(props);
206
+ var superscriptIcon = buildSuperscriptIcon(props);
207
+ var result = (0, _react.useMemo)(function () {
208
+ return [strongIcon, emIcon, underlineIcon, strikeIcon, codeIcon, subscriptIcon, superscriptIcon];
209
+ }, [strongIcon, emIcon, underlineIcon, strikeIcon, codeIcon, subscriptIcon, superscriptIcon]);
210
+ return result;
211
+ };
212
+ exports.useFormattingIcons = useFormattingIcons;
213
+ var useHasFormattingActived = function useHasFormattingActived(_ref5) {
214
+ var editorState = _ref5.editorState,
215
+ iconTypeList = _ref5.iconTypeList;
216
+ var textFormattingPluginState = useTextFormattingPluginState(editorState);
217
+ var hasActiveFormatting = (0, _react.useMemo)(function () {
218
+ if (!textFormattingPluginState) {
219
+ return false;
220
+ }
221
+ return iconTypeList.some(function (iconType) {
222
+ return textFormattingPluginState["".concat(iconType, "Active")];
223
+ });
224
+ }, [textFormattingPluginState, iconTypeList]);
225
+ return hasActiveFormatting;
226
+ };
227
+ exports.useHasFormattingActived = useHasFormattingActived;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useMenuState = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ var _react = require("react");
10
+ var useMenuState = function useMenuState() {
11
+ var _useState = (0, _react.useState)(false),
12
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
13
+ isMenuOpen = _useState2[0],
14
+ setIsMenuOpened = _useState2[1];
15
+ var toggleMenu = (0, _react.useCallback)(function () {
16
+ setIsMenuOpened(!isMenuOpen);
17
+ }, [isMenuOpen]);
18
+ var closeMenu = (0, _react.useCallback)(function () {
19
+ setIsMenuOpened(false);
20
+ }, []);
21
+ return [isMenuOpen, toggleMenu, closeMenu];
22
+ };
23
+ exports.useMenuState = useMenuState;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useResponsiveToolbarButtons = exports.useResponsiveIconTypeMenu = exports.useResponsiveIconTypeButtons = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _react = require("react");
10
+ var _constants = require("../constants");
11
+ var useResponsiveIconTypeButtons = function useResponsiveIconTypeButtons(_ref) {
12
+ var toolbarSize = _ref.toolbarSize,
13
+ responsivenessEnabled = _ref.responsivenessEnabled;
14
+ var iconTypeList = (0, _react.useMemo)(function () {
15
+ return _constants.ResponsiveCustomButtonToolbar[toolbarSize];
16
+ }, [toolbarSize]);
17
+ return responsivenessEnabled ? iconTypeList : _constants.DefaultButtonsToolbar;
18
+ };
19
+ exports.useResponsiveIconTypeButtons = useResponsiveIconTypeButtons;
20
+ var useResponsiveIconTypeMenu = function useResponsiveIconTypeMenu(_ref2) {
21
+ var toolbarSize = _ref2.toolbarSize,
22
+ responsivenessEnabled = _ref2.responsivenessEnabled;
23
+ var iconTypeList = (0, _react.useMemo)(function () {
24
+ return _constants.ResponsiveCustomMenu[toolbarSize];
25
+ }, [toolbarSize]);
26
+ return responsivenessEnabled ? iconTypeList : _constants.DefaultButtonsMenu;
27
+ };
28
+ exports.useResponsiveIconTypeMenu = useResponsiveIconTypeMenu;
29
+ var useResponsiveToolbarButtons = function useResponsiveToolbarButtons(_ref3) {
30
+ var icons = _ref3.icons,
31
+ toolbarSize = _ref3.toolbarSize,
32
+ responsivenessEnabled = _ref3.responsivenessEnabled;
33
+ var iconTypeList = useResponsiveIconTypeButtons({
34
+ toolbarSize: toolbarSize,
35
+ responsivenessEnabled: responsivenessEnabled
36
+ });
37
+ var iconsPosition = (0, _react.useMemo)(function () {
38
+ return icons.reduce(function (acc, icon) {
39
+ if (!icon || !icon.iconMark) {
40
+ return acc;
41
+ }
42
+ var isIconSingleButton = iconTypeList.includes(icon.iconMark);
43
+ if (isIconSingleButton) {
44
+ return {
45
+ dropdownItems: acc.dropdownItems,
46
+ singleItems: [].concat((0, _toConsumableArray2.default)(acc.singleItems), [icon])
47
+ };
48
+ }
49
+ return {
50
+ dropdownItems: [].concat((0, _toConsumableArray2.default)(acc.dropdownItems), [icon]),
51
+ singleItems: acc.singleItems
52
+ };
53
+ }, {
54
+ dropdownItems: [],
55
+ singleItems: []
56
+ });
57
+ }, [icons, iconTypeList]);
58
+ return iconsPosition;
59
+ };
60
+ exports.useResponsiveToolbarButtons = useResponsiveToolbarButtons;
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = require("react");
11
+ var _react2 = require("@emotion/react");
12
+ var _reactIntlNext = require("react-intl-next");
13
+ var _hooks = require("@atlaskit/editor-common/hooks");
14
+ var _messages = require("@atlaskit/editor-common/messages");
15
+ var _styles = require("@atlaskit/editor-common/styles");
16
+ var _ui = require("@atlaskit/editor-common/ui");
17
+ var _utils = require("../../utils");
18
+ var _dropdownMenu = require("./dropdown-menu");
19
+ var _clearFormattingIcon = require("./hooks/clear-formatting-icon");
20
+ var _formattingIcons = require("./hooks/formatting-icons");
21
+ var _responsiveToolbarButtons = require("./hooks/responsive-toolbar-buttons");
22
+ var _moreButton = require("./more-button");
23
+ var _singleToolbarButtons = require("./single-toolbar-buttons");
24
+ /** @jsx jsx */
25
+
26
+ var ToolbarFormatting = function ToolbarFormatting(_ref) {
27
+ var _usePreviousState;
28
+ var shouldUseResponsiveToolbar = _ref.shouldUseResponsiveToolbar,
29
+ popupsMountPoint = _ref.popupsMountPoint,
30
+ popupsBoundariesElement = _ref.popupsBoundariesElement,
31
+ popupsScrollableElement = _ref.popupsScrollableElement,
32
+ editorView = _ref.editorView,
33
+ toolbarSize = _ref.toolbarSize,
34
+ isReducedSpacing = _ref.isReducedSpacing,
35
+ isToolbarDisabled = _ref.isToolbarDisabled,
36
+ intl = _ref.intl,
37
+ editorAnalyticsAPI = _ref.editorAnalyticsAPI;
38
+ var editorState = (0, _react.useMemo)(function () {
39
+ return editorView.state;
40
+ }, [editorView.state]);
41
+ var _useState = (0, _react.useState)(''),
42
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
43
+ message = _useState2[0],
44
+ setMessage = _useState2[1];
45
+ var defaultIcons = (0, _formattingIcons.useFormattingIcons)({
46
+ editorState: editorState,
47
+ intl: intl,
48
+ isToolbarDisabled: isToolbarDisabled,
49
+ editorAnalyticsAPI: editorAnalyticsAPI
50
+ });
51
+ var clearIcon = (0, _clearFormattingIcon.useClearIcon)({
52
+ editorState: editorState,
53
+ intl: intl,
54
+ editorAnalyticsAPI: editorAnalyticsAPI
55
+ });
56
+ var menuIconTypeList = (0, _responsiveToolbarButtons.useResponsiveIconTypeMenu)({
57
+ toolbarSize: toolbarSize,
58
+ responsivenessEnabled: shouldUseResponsiveToolbar
59
+ });
60
+ var hasFormattingActive = (0, _formattingIcons.useHasFormattingActived)({
61
+ editorState: editorView.state,
62
+ iconTypeList: menuIconTypeList
63
+ });
64
+ var _useResponsiveToolbar = (0, _responsiveToolbarButtons.useResponsiveToolbarButtons)({
65
+ icons: defaultIcons,
66
+ toolbarSize: toolbarSize,
67
+ responsivenessEnabled: shouldUseResponsiveToolbar
68
+ }),
69
+ dropdownItems = _useResponsiveToolbar.dropdownItems,
70
+ singleItems = _useResponsiveToolbar.singleItems;
71
+ var clearFormattingStatus = intl.formatMessage(_messages.toolbarMessages.textFormattingOff);
72
+ var superscriptOffSubscriptOnStatus = intl.formatMessage(_messages.toolbarMessages.superscriptOffSubscriptOn);
73
+ var subscriptOffSuperscriptOnStatus = intl.formatMessage(_messages.toolbarMessages.subscriptOffSuperscriptOn);
74
+ var activeItems = [].concat((0, _toConsumableArray2.default)(dropdownItems), (0, _toConsumableArray2.default)(singleItems)).filter(function (item) {
75
+ return item.isActive;
76
+ });
77
+ var prevActiveItems = (_usePreviousState = (0, _hooks.usePreviousState)(activeItems)) !== null && _usePreviousState !== void 0 ? _usePreviousState : [];
78
+ var fromSuperscriptToSubscript = (0, _utils.isArrayContainsContent)(activeItems, 'Subscript') && (0, _utils.isArrayContainsContent)(prevActiveItems, 'Superscript');
79
+ var fromSubscriptToSuperscript = (0, _utils.isArrayContainsContent)(activeItems, 'Superscript') && (0, _utils.isArrayContainsContent)(prevActiveItems, 'Subscript');
80
+ var comparedItems;
81
+ var screenReaderMessage = '';
82
+ if (prevActiveItems && activeItems.length > prevActiveItems.length) {
83
+ comparedItems = (0, _utils.compareItemsArrays)(activeItems, prevActiveItems);
84
+ screenReaderMessage = intl.formatMessage(_messages.toolbarMessages.on, {
85
+ formattingType: comparedItems[0].content
86
+ });
87
+ } else {
88
+ comparedItems = (0, _utils.compareItemsArrays)(prevActiveItems, activeItems);
89
+ if (comparedItems && comparedItems.length) {
90
+ var _activeItems$;
91
+ screenReaderMessage = intl.formatMessage(_messages.toolbarMessages.off, {
92
+ formattingType: comparedItems[0].content
93
+ });
94
+ if (((_activeItems$ = activeItems[0]) === null || _activeItems$ === void 0 ? void 0 : _activeItems$.content) === 'Code') {
95
+ screenReaderMessage = intl.formatMessage(_messages.toolbarMessages.codeOn, {
96
+ textFormattingOff: (prevActiveItems === null || prevActiveItems === void 0 ? void 0 : prevActiveItems.length) > 1 ? clearFormattingStatus : screenReaderMessage
97
+ });
98
+ }
99
+ if (fromSuperscriptToSubscript) {
100
+ screenReaderMessage = superscriptOffSubscriptOnStatus;
101
+ }
102
+ if (fromSubscriptToSuperscript) {
103
+ screenReaderMessage = subscriptOffSuperscriptOnStatus;
104
+ }
105
+ }
106
+ }
107
+
108
+ // handle 'Clear formatting' status for screen readers
109
+ if (!(activeItems !== null && activeItems !== void 0 && activeItems.length) && (prevActiveItems === null || prevActiveItems === void 0 ? void 0 : prevActiveItems.length) > 1) {
110
+ screenReaderMessage = clearFormattingStatus;
111
+ }
112
+ var items = (0, _react.useMemo)(function () {
113
+ if (!clearIcon) {
114
+ return dropdownItems;
115
+ }
116
+ return [].concat((0, _toConsumableArray2.default)(dropdownItems), [clearIcon]);
117
+ }, [clearIcon, dropdownItems]);
118
+ var moreFormattingButtonLabel = intl.formatMessage(_messages.toolbarMessages.moreFormatting);
119
+ (0, _react.useEffect)(function () {
120
+ if (screenReaderMessage) {
121
+ setMessage(screenReaderMessage);
122
+ }
123
+ }, [screenReaderMessage]);
124
+ return (
125
+ // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage
126
+ (0, _react2.jsx)("span", {
127
+ css: _styles.buttonGroupStyle
128
+ }, message && (0, _react2.jsx)(_ui.Announcer, {
129
+ ariaLive: "assertive",
130
+ text: message,
131
+ ariaRelevant: "additions",
132
+ delay: 250
133
+ }), (0, _react2.jsx)(_singleToolbarButtons.SingleToolbarButtons, {
134
+ items: singleItems,
135
+ editorView: editorView,
136
+ isReducedSpacing: isReducedSpacing
137
+ }), (0, _react2.jsx)("span", {
138
+ css: _styles.wrapperStyle
139
+ }, isToolbarDisabled ? (0, _react2.jsx)("div", null, (0, _react2.jsx)(_moreButton.MoreButton, {
140
+ label: moreFormattingButtonLabel,
141
+ isReducedSpacing: isReducedSpacing,
142
+ isDisabled: true,
143
+ isSelected: false,
144
+ "aria-expanded": undefined,
145
+ "aria-pressed": undefined
146
+ })) : (0, _react2.jsx)(_dropdownMenu.FormattingTextDropdownMenu, {
147
+ popupsMountPoint: popupsMountPoint,
148
+ popupsBoundariesElement: popupsBoundariesElement,
149
+ popupsScrollableElement: popupsScrollableElement,
150
+ editorView: editorView,
151
+ isReducedSpacing: isReducedSpacing,
152
+ moreButtonLabel: moreFormattingButtonLabel,
153
+ hasFormattingActive: hasFormattingActive,
154
+ items: items
155
+ }), (0, _react2.jsx)("span", {
156
+ css: _styles.separatorStyles
157
+ })))
158
+ );
159
+ };
160
+ var Toolbar = function Toolbar(_ref2) {
161
+ var popupsMountPoint = _ref2.popupsMountPoint,
162
+ popupsScrollableElement = _ref2.popupsScrollableElement,
163
+ toolbarSize = _ref2.toolbarSize,
164
+ isReducedSpacing = _ref2.isReducedSpacing,
165
+ editorView = _ref2.editorView,
166
+ isToolbarDisabled = _ref2.isToolbarDisabled,
167
+ shouldUseResponsiveToolbar = _ref2.shouldUseResponsiveToolbar,
168
+ intl = _ref2.intl,
169
+ editorAnalyticsAPI = _ref2.editorAnalyticsAPI;
170
+ return (0, _react2.jsx)(ToolbarFormatting, {
171
+ popupsMountPoint: popupsMountPoint,
172
+ popupsScrollableElement: popupsScrollableElement,
173
+ toolbarSize: toolbarSize,
174
+ isReducedSpacing: isReducedSpacing,
175
+ editorView: editorView,
176
+ isToolbarDisabled: isToolbarDisabled,
177
+ shouldUseResponsiveToolbar: shouldUseResponsiveToolbar,
178
+ intl: intl,
179
+ editorAnalyticsAPI: editorAnalyticsAPI
180
+ });
181
+ };
182
+ var _default = (0, _reactIntlNext.injectIntl)(Toolbar);
183
+ exports.default = _default;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.MoreButton = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _react2 = require("@emotion/react");
10
+ var _styles = require("@atlaskit/editor-common/styles");
11
+ var _uiMenu = require("@atlaskit/editor-common/ui-menu");
12
+ var _more = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/more"));
13
+ /** @jsx jsx */
14
+
15
+ var MoreButton = /*#__PURE__*/_react.default.memo(function (_ref) {
16
+ var label = _ref.label,
17
+ ariaExpanded = _ref['aria-expanded'],
18
+ isReducedSpacing = _ref.isReducedSpacing,
19
+ isSelected = _ref.isSelected,
20
+ isDisabled = _ref.isDisabled,
21
+ onClick = _ref.onClick,
22
+ onKeyDown = _ref.onKeyDown;
23
+ return (0, _react2.jsx)(_uiMenu.ToolbarButton, {
24
+ disabled: isDisabled,
25
+ selected: isSelected,
26
+ onClick: onClick,
27
+ onKeyDown: onKeyDown,
28
+ spacing: isReducedSpacing ? 'none' : 'default',
29
+ title: label,
30
+ iconBefore:
31
+ // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage
32
+ (0, _react2.jsx)("div", {
33
+ css: _styles.triggerWrapperStyles
34
+ }, (0, _react2.jsx)(_more.default, {
35
+ label: ""
36
+ })),
37
+ "aria-expanded": ariaExpanded,
38
+ "aria-label": label,
39
+ "aria-haspopup": true
40
+ });
41
+ });
42
+ exports.MoreButton = MoreButton;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.SingleToolbarButtons = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _react2 = require("@emotion/react");
10
+ var _styles = require("@atlaskit/editor-common/styles");
11
+ var _uiMenu = require("@atlaskit/editor-common/ui-menu");
12
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
+ /** @jsx jsx */
15
+
16
+ var SingleToolbarButtons = /*#__PURE__*/_react.default.memo(function (_ref) {
17
+ var items = _ref.items,
18
+ isReducedSpacing = _ref.isReducedSpacing,
19
+ editorView = _ref.editorView;
20
+ var onClick = (0, _react.useCallback)(function (command) {
21
+ return function () {
22
+ command(editorView.state, editorView.dispatch);
23
+ return false;
24
+ };
25
+ }, [editorView.state, editorView.dispatch]);
26
+ return (
27
+ // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage
28
+ (0, _react2.jsx)("span", {
29
+ css: _styles.buttonGroupStyle
30
+ }, items.map(function (item) {
31
+ var _item$ariaLabel;
32
+ return (0, _react2.jsx)(_uiMenu.ToolbarButton, {
33
+ key: item.key,
34
+ testId: "editor-toolbar__".concat(String(item.content)),
35
+ buttonId: item.buttonId,
36
+ spacing: isReducedSpacing ? 'none' : 'default',
37
+ onClick: onClick(item.command),
38
+ selected: item.isActive,
39
+ disabled: item.isDisabled,
40
+ title: item.tooltipElement,
41
+ iconBefore: item.iconElement,
42
+ "aria-pressed": item.isActive,
43
+ "aria-label": (_item$ariaLabel = item['aria-label']) !== null && _item$ariaLabel !== void 0 ? _item$ariaLabel : String(item.content),
44
+ "aria-keyshortcuts": item['aria-keyshortcuts']
45
+ });
46
+ }))
47
+ );
48
+ });
49
+ exports.SingleToolbarButtons = SingleToolbarButtons;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.IconTypes = void 0;
7
+ var IconTypes = /*#__PURE__*/function (IconTypes) {
8
+ IconTypes["strong"] = "strong";
9
+ IconTypes["em"] = "em";
10
+ IconTypes["underline"] = "underline";
11
+ IconTypes["strike"] = "strike";
12
+ IconTypes["code"] = "code";
13
+ IconTypes["subscript"] = "subscript";
14
+ IconTypes["superscript"] = "superscript";
15
+ return IconTypes;
16
+ }({});
17
+ exports.IconTypes = IconTypes;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.cellSelectionNodesBetween = void 0;
7
+ var cellSelectionNodesBetween = function cellSelectionNodesBetween(selection, doc, f, startPos) {
8
+ selection.forEachCell(function (cell, cellPos) {
9
+ doc.nodesBetween(cellPos, cellPos + cell.nodeSize, f, startPos);
10
+ });
11
+ };
12
+ exports.cellSelectionNodesBetween = cellSelectionNodesBetween;