@atlaskit/editor-plugin-tasks-and-decisions 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/.eslintrc.js +26 -0
  2. package/CHANGELOG.md +16 -0
  3. package/dist/cjs/commands.js +288 -0
  4. package/dist/cjs/index.js +8 -1
  5. package/dist/cjs/nodeviews/decisionItem.js +117 -0
  6. package/dist/cjs/nodeviews/hooks/use-show-placeholder.js +40 -0
  7. package/dist/cjs/nodeviews/taskItem.js +211 -0
  8. package/dist/cjs/plugin.js +166 -0
  9. package/dist/cjs/pm-plugins/commands.js +96 -0
  10. package/dist/cjs/pm-plugins/helpers.js +299 -0
  11. package/dist/cjs/pm-plugins/input-rules.js +94 -0
  12. package/dist/cjs/pm-plugins/keymaps.js +376 -0
  13. package/dist/cjs/pm-plugins/main.js +263 -0
  14. package/dist/cjs/pm-plugins/plugin-key.js +8 -0
  15. package/dist/cjs/pm-plugins/types.js +11 -0
  16. package/dist/cjs/types.js +5 -0
  17. package/dist/cjs/ui/Decision/index.js +30 -0
  18. package/dist/cjs/ui/Task/index.js +81 -0
  19. package/dist/cjs/ui/Task/task-item-with-providers.js +138 -0
  20. package/dist/cjs/ui/ToolbarDecision/index.js +41 -0
  21. package/dist/cjs/ui/ToolbarTask/index.js +40 -0
  22. package/dist/cjs/utils.js +41 -0
  23. package/dist/es2019/commands.js +279 -0
  24. package/dist/es2019/index.js +1 -1
  25. package/dist/es2019/nodeviews/decisionItem.js +76 -0
  26. package/dist/es2019/nodeviews/hooks/use-show-placeholder.js +36 -0
  27. package/dist/es2019/nodeviews/taskItem.js +173 -0
  28. package/dist/es2019/plugin.js +154 -0
  29. package/dist/es2019/pm-plugins/commands.js +94 -0
  30. package/dist/es2019/pm-plugins/helpers.js +316 -0
  31. package/dist/es2019/pm-plugins/input-rules.js +91 -0
  32. package/dist/es2019/pm-plugins/keymaps.js +370 -0
  33. package/dist/es2019/pm-plugins/main.js +262 -0
  34. package/dist/es2019/pm-plugins/plugin-key.js +2 -0
  35. package/dist/es2019/pm-plugins/types.js +5 -0
  36. package/dist/es2019/types.js +1 -0
  37. package/dist/es2019/ui/Decision/index.js +26 -0
  38. package/dist/es2019/ui/Task/index.js +55 -0
  39. package/dist/es2019/ui/Task/task-item-with-providers.js +72 -0
  40. package/dist/es2019/ui/ToolbarDecision/index.js +37 -0
  41. package/dist/es2019/ui/ToolbarTask/index.js +36 -0
  42. package/dist/es2019/utils.js +32 -0
  43. package/dist/esm/commands.js +281 -0
  44. package/dist/esm/index.js +1 -1
  45. package/dist/esm/nodeviews/decisionItem.js +110 -0
  46. package/dist/esm/nodeviews/hooks/use-show-placeholder.js +34 -0
  47. package/dist/esm/nodeviews/taskItem.js +204 -0
  48. package/dist/esm/plugin.js +155 -0
  49. package/dist/esm/pm-plugins/commands.js +90 -0
  50. package/dist/esm/pm-plugins/helpers.js +285 -0
  51. package/dist/esm/pm-plugins/input-rules.js +87 -0
  52. package/dist/esm/pm-plugins/keymaps.js +368 -0
  53. package/dist/esm/pm-plugins/main.js +256 -0
  54. package/dist/esm/pm-plugins/plugin-key.js +2 -0
  55. package/dist/esm/pm-plugins/types.js +5 -0
  56. package/dist/esm/types.js +1 -0
  57. package/dist/esm/ui/Decision/index.js +23 -0
  58. package/dist/esm/ui/Task/index.js +71 -0
  59. package/dist/esm/ui/Task/task-item-with-providers.js +129 -0
  60. package/dist/esm/ui/ToolbarDecision/index.js +34 -0
  61. package/dist/esm/ui/ToolbarTask/index.js +33 -0
  62. package/dist/esm/utils.js +30 -0
  63. package/dist/types/commands.d.ts +16 -0
  64. package/dist/types/index.d.ts +2 -1
  65. package/dist/types/nodeviews/decisionItem.d.ts +10 -0
  66. package/dist/types/nodeviews/hooks/use-show-placeholder.d.ts +11 -0
  67. package/dist/types/nodeviews/taskItem.d.ts +14 -0
  68. package/dist/types/plugin.d.ts +2 -0
  69. package/dist/types/pm-plugins/commands.d.ts +15 -0
  70. package/dist/types/pm-plugins/helpers.d.ts +76 -0
  71. package/dist/types/pm-plugins/input-rules.d.ts +6 -0
  72. package/dist/types/pm-plugins/keymaps.d.ts +11 -0
  73. package/dist/types/pm-plugins/main.d.ts +7 -0
  74. package/dist/types/pm-plugins/plugin-key.d.ts +2 -0
  75. package/dist/types/pm-plugins/types.d.ts +8 -0
  76. package/dist/types/types.d.ts +49 -0
  77. package/dist/types/ui/Decision/index.d.ts +15 -0
  78. package/dist/types/ui/Task/index.d.ts +28 -0
  79. package/dist/types/ui/Task/task-item-with-providers.d.ts +29 -0
  80. package/dist/types/ui/ToolbarDecision/index.d.ts +18 -0
  81. package/dist/types/ui/ToolbarTask/index.d.ts +18 -0
  82. package/dist/types/utils.d.ts +4 -0
  83. package/dist/types-ts4.5/commands.d.ts +16 -0
  84. package/dist/types-ts4.5/index.d.ts +2 -1
  85. package/dist/types-ts4.5/nodeviews/decisionItem.d.ts +10 -0
  86. package/dist/types-ts4.5/nodeviews/hooks/use-show-placeholder.d.ts +11 -0
  87. package/dist/types-ts4.5/nodeviews/taskItem.d.ts +14 -0
  88. package/dist/types-ts4.5/plugin.d.ts +2 -0
  89. package/dist/types-ts4.5/pm-plugins/commands.d.ts +15 -0
  90. package/dist/types-ts4.5/pm-plugins/helpers.d.ts +76 -0
  91. package/dist/types-ts4.5/pm-plugins/input-rules.d.ts +6 -0
  92. package/dist/types-ts4.5/pm-plugins/keymaps.d.ts +11 -0
  93. package/dist/types-ts4.5/pm-plugins/main.d.ts +7 -0
  94. package/dist/types-ts4.5/pm-plugins/plugin-key.d.ts +2 -0
  95. package/dist/types-ts4.5/pm-plugins/types.d.ts +8 -0
  96. package/dist/types-ts4.5/types.d.ts +49 -0
  97. package/dist/types-ts4.5/ui/Decision/index.d.ts +15 -0
  98. package/dist/types-ts4.5/ui/Task/index.d.ts +28 -0
  99. package/dist/types-ts4.5/ui/Task/task-item-with-providers.d.ts +29 -0
  100. package/dist/types-ts4.5/ui/ToolbarDecision/index.d.ts +18 -0
  101. package/dist/types-ts4.5/ui/ToolbarTask/index.d.ts +18 -0
  102. package/dist/types-ts4.5/utils.d.ts +4 -0
  103. package/package.json +16 -6
  104. package/report.api.md +100 -1
  105. package/tmp/api-report-tmp.d.ts +78 -0
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.taskItemNodeViewFactory = taskItemNodeViewFactory;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
11
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
12
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
14
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+ var _react = _interopRequireDefault(require("react"));
17
+ var _steps = require("@atlaskit/adf-schema/steps");
18
+ var _analyticsNext = require("@atlaskit/analytics-next");
19
+ var _hooks = require("@atlaskit/editor-common/hooks");
20
+ var _reactNodeView = _interopRequireDefault(require("@atlaskit/editor-common/react-node-view"));
21
+ var _Task = _interopRequireDefault(require("../ui/Task"));
22
+ var _useShowPlaceholder = require("./hooks/use-show-placeholder");
23
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
25
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
26
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
27
+ var TaskItemWrapper = function TaskItemWrapper(_ref) {
28
+ var localId = _ref.localId,
29
+ forwardRef = _ref.forwardRef,
30
+ isDone = _ref.isDone,
31
+ onChange = _ref.onChange,
32
+ providerFactory = _ref.providerFactory,
33
+ isContentNodeEmpty = _ref.isContentNodeEmpty,
34
+ api = _ref.api,
35
+ getPos = _ref.getPos,
36
+ editorView = _ref.editorView;
37
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['taskDecision']),
38
+ taskDecisionState = _useSharedPluginState.taskDecisionState;
39
+ var isFocused = Boolean((taskDecisionState === null || taskDecisionState === void 0 ? void 0 : taskDecisionState.focusedTaskItemLocalId) === localId);
40
+ var showPlaceholder = (0, _useShowPlaceholder.useShowPlaceholder)({
41
+ editorView: editorView,
42
+ isContentNodeEmpty: isContentNodeEmpty,
43
+ getPos: getPos,
44
+ api: api
45
+ });
46
+ return /*#__PURE__*/_react.default.createElement(_Task.default, {
47
+ taskId: localId,
48
+ contentRef: forwardRef,
49
+ isDone: isDone,
50
+ onChange: onChange,
51
+ isFocused: isFocused,
52
+ showPlaceholder: showPlaceholder,
53
+ providers: providerFactory
54
+ });
55
+ };
56
+ var Task = /*#__PURE__*/function (_ReactNodeView) {
57
+ (0, _inherits2.default)(Task, _ReactNodeView);
58
+ var _super = _createSuper(Task);
59
+ function Task() {
60
+ var _this;
61
+ (0, _classCallCheck2.default)(this, Task);
62
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
63
+ args[_key] = arguments[_key];
64
+ }
65
+ _this = _super.call.apply(_super, [this].concat(args));
66
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleOnChange", function (taskId, isChecked) {
67
+ var tr = _this.view.state.tr;
68
+ var nodePos = _this.getPos();
69
+ if (typeof nodePos !== 'number') {
70
+ return false;
71
+ }
72
+
73
+ // SetAttrsStep should be used to prevent task updates from being dropped when mapping task ticks
74
+ // from a previous version of the document, such as a published page.
75
+ tr.step(new _steps.SetAttrsStep(nodePos, {
76
+ state: isChecked ? 'DONE' : 'TODO',
77
+ localId: taskId
78
+ }));
79
+ tr.setMeta('scrollIntoView', false);
80
+ _this.view.dispatch(tr);
81
+ });
82
+ /**
83
+ * Dynamically generates analytics data relating to the parent list.
84
+ *
85
+ * Required to be dynamic, as list (in prosemirror model) may have
86
+ * changed (e.g. item movements, or additional items in list).
87
+ * This node view will have not rerendered for those changes, so
88
+ * cannot render the position and listSize into the
89
+ * AnalyticsContext at initial render time.
90
+ */
91
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "addListAnalyticsData", function (event) {
92
+ try {
93
+ var nodePos = _this.getPos();
94
+ if (typeof nodePos !== 'number') {
95
+ return false;
96
+ }
97
+ var resolvedPos = _this.view.state.doc.resolve(nodePos);
98
+ var position = resolvedPos.index();
99
+ var listSize = resolvedPos.parent.childCount;
100
+ var listLocalId = resolvedPos.parent.attrs.localId;
101
+ event.update(function (payload) {
102
+ var _payload$attributes = payload.attributes,
103
+ attributes = _payload$attributes === void 0 ? {} : _payload$attributes,
104
+ actionSubject = payload.actionSubject;
105
+ if (actionSubject !== 'action') {
106
+ // Not action related, ignore
107
+ return payload;
108
+ }
109
+ return _objectSpread(_objectSpread({}, payload), {}, {
110
+ attributes: _objectSpread(_objectSpread({}, attributes), {}, {
111
+ position: position,
112
+ listSize: listSize,
113
+ listLocalId: listLocalId
114
+ })
115
+ });
116
+ });
117
+ } catch (e) {
118
+ // This can occur if pos is NaN (seen it in some test cases)
119
+ // Act defensively here, and lose some analytics data rather than
120
+ // cause any user facing error.
121
+ }
122
+ });
123
+ return _this;
124
+ }
125
+ (0, _createClass2.default)(Task, [{
126
+ key: "initWithAPI",
127
+ value: function initWithAPI(api) {
128
+ this.api = api;
129
+ this.init();
130
+ return this;
131
+ }
132
+ }, {
133
+ key: "isContentEmpty",
134
+ value: function isContentEmpty(node) {
135
+ return node.content.childCount === 0;
136
+ }
137
+ }, {
138
+ key: "createDomRef",
139
+ value: function createDomRef() {
140
+ var domRef = document.createElement('div');
141
+ domRef.style.listStyleType = 'none';
142
+ return domRef;
143
+ }
144
+ }, {
145
+ key: "getContentDOM",
146
+ value: function getContentDOM() {
147
+ var dom = document.createElement('div');
148
+ // setting a className prevents PM/Chrome mutation observer from
149
+ // incorrectly deleting nodes
150
+ dom.className = 'task-item';
151
+ return {
152
+ dom: dom
153
+ };
154
+ }
155
+ }, {
156
+ key: "render",
157
+ value: function render(props, forwardRef) {
158
+ var _this$node$attrs = this.node.attrs,
159
+ localId = _this$node$attrs.localId,
160
+ state = _this$node$attrs.state;
161
+ var isContentNodeEmpty = this.isContentEmpty(this.node);
162
+ return /*#__PURE__*/_react.default.createElement(_analyticsNext.AnalyticsListener, {
163
+ channel: "fabric-elements",
164
+ onEvent: this.addListAnalyticsData
165
+ }, /*#__PURE__*/_react.default.createElement(TaskItemWrapper, {
166
+ localId: localId,
167
+ forwardRef: forwardRef,
168
+ isDone: state === 'DONE',
169
+ onChange: this.handleOnChange,
170
+ isContentNodeEmpty: isContentNodeEmpty,
171
+ providerFactory: props.providerFactory
172
+ // The getPosHandler type is wrong, there is no `boolean` in the real implementation
173
+ // @ts-expect-error 2322: Type 'getPosHandler' is not assignable to type '() => number | undefined'.
174
+ ,
175
+ getPos: this.getPos,
176
+ editorView: this.view,
177
+ api: this.api
178
+ }));
179
+ }
180
+ }, {
181
+ key: "viewShouldUpdate",
182
+ value: function viewShouldUpdate(nextNode) {
183
+ /**
184
+ * To ensure the placeholder is correctly toggled we need to allow react to re-render
185
+ * on first character insertion.
186
+ * Note: last character deletion is handled externally and automatically re-renders.
187
+ */
188
+ return this.isContentEmpty(this.node) && !!nextNode.content.childCount;
189
+ }
190
+ }, {
191
+ key: "update",
192
+ value: function update(node, decorations) {
193
+ var _this2 = this;
194
+ return (0, _get2.default)((0, _getPrototypeOf2.default)(Task.prototype), "update", this).call(this, node, decorations, undefined, function (currentNode, newNode) {
195
+ return (
196
+ // Toggle the placeholder based on whether user input exists
197
+ !_this2.isContentEmpty(newNode) && !!(currentNode.attrs.state === newNode.attrs.state)
198
+ );
199
+ });
200
+ }
201
+ }]);
202
+ return Task;
203
+ }(_reactNodeView.default);
204
+ function taskItemNodeViewFactory(portalProviderAPI, eventDispatcher, providerFactory, api) {
205
+ return function (node, view, getPos) {
206
+ var hasIntlContext = true;
207
+ return new Task(node, view, getPos, portalProviderAPI, eventDispatcher, {
208
+ providerFactory: providerFactory
209
+ }, undefined, undefined, undefined, hasIntlContext).initWithAPI(api);
210
+ };
211
+ }
@@ -0,0 +1,166 @@
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.tasksAndDecisionsPlugin = void 0;
9
+ var _react = require("@emotion/react");
10
+ var _adfSchema = require("@atlaskit/adf-schema");
11
+ var _analytics = require("@atlaskit/editor-common/analytics");
12
+ var _indentation = require("@atlaskit/editor-common/indentation");
13
+ var _messages = require("@atlaskit/editor-common/messages");
14
+ var _quickInsert = require("@atlaskit/editor-common/quick-insert");
15
+ var _commands = require("./commands");
16
+ var _helpers = require("./pm-plugins/helpers");
17
+ var _inputRules = _interopRequireDefault(require("./pm-plugins/input-rules"));
18
+ var _keymaps = _interopRequireWildcard(require("./pm-plugins/keymaps"));
19
+ var _main = require("./pm-plugins/main");
20
+ var _pluginKey = require("./pm-plugins/plugin-key");
21
+ var _ToolbarDecision = _interopRequireDefault(require("./ui/ToolbarDecision"));
22
+ var _ToolbarTask = _interopRequireDefault(require("./ui/ToolbarTask"));
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
+ /** @jsx jsx */
26
+
27
+ var taskDecisionToolbarGroupStyles = (0, _react.css)({
28
+ display: 'flex'
29
+ });
30
+ var addItem = function addItem(insert, listType, schema) {
31
+ return function (_ref) {
32
+ var listLocalId = _ref.listLocalId,
33
+ itemLocalId = _ref.itemLocalId;
34
+ var _getListTypes = (0, _commands.getListTypes)(listType, schema),
35
+ list = _getListTypes.list,
36
+ item = _getListTypes.item;
37
+ return insert(list.createChecked({
38
+ localId: listLocalId
39
+ }, item.createChecked({
40
+ localId: itemLocalId
41
+ })));
42
+ };
43
+ };
44
+ var tasksAndDecisionsPlugin = exports.tasksAndDecisionsPlugin = function tasksAndDecisionsPlugin(_ref2) {
45
+ var _api$analytics, _api$analytics2, _api$analytics3;
46
+ var _ref2$config = _ref2.config,
47
+ _ref2$config2 = _ref2$config === void 0 ? {} : _ref2$config,
48
+ allowNestedTasks = _ref2$config2.allowNestedTasks,
49
+ consumeTabs = _ref2$config2.consumeTabs,
50
+ useLongPressSelection = _ref2$config2.useLongPressSelection,
51
+ api = _ref2.api;
52
+ return {
53
+ name: 'taskDecision',
54
+ nodes: function nodes() {
55
+ return [{
56
+ name: 'decisionList',
57
+ node: _adfSchema.decisionList
58
+ }, {
59
+ name: 'decisionItem',
60
+ node: _adfSchema.decisionItem
61
+ }, {
62
+ name: 'taskList',
63
+ node: _adfSchema.taskList
64
+ }, {
65
+ name: 'taskItem',
66
+ node: _adfSchema.taskItem
67
+ }];
68
+ },
69
+ getSharedState: function getSharedState(editorState) {
70
+ if (!editorState) {
71
+ return undefined;
72
+ }
73
+ var pluginState = _pluginKey.stateKey.getState(editorState);
74
+ var indentLevel = (0, _helpers.getCurrentIndentLevel)(editorState.selection) || 0;
75
+ var itemIndex = (0, _helpers.getTaskItemIndex)(editorState);
76
+ return {
77
+ focusedTaskItemLocalId: (pluginState === null || pluginState === void 0 ? void 0 : pluginState.focusedTaskItemLocalId) || null,
78
+ isInsideTask: (0, _helpers.isInsideTask)(editorState),
79
+ indentDisabled: itemIndex === 0 || indentLevel >= _indentation.MAX_INDENTATION_LEVEL,
80
+ outdentDisabled: indentLevel <= 1
81
+ };
82
+ },
83
+ actions: {
84
+ insertTaskDecision: (0, _commands.insertTaskDecisionCommand)(api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions),
85
+ indentTaskList: (0, _keymaps.getIndentCommand)(api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions),
86
+ outdentTaskList: (0, _keymaps.getUnindentCommand)(api === null || api === void 0 || (_api$analytics3 = api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions)
87
+ },
88
+ pmPlugins: function pmPlugins() {
89
+ return [{
90
+ name: 'tasksAndDecisions',
91
+ plugin: function plugin(_ref3) {
92
+ var portalProviderAPI = _ref3.portalProviderAPI,
93
+ providerFactory = _ref3.providerFactory,
94
+ eventDispatcher = _ref3.eventDispatcher,
95
+ dispatch = _ref3.dispatch;
96
+ return (0, _main.createPlugin)(portalProviderAPI, eventDispatcher, providerFactory, dispatch, api, useLongPressSelection);
97
+ }
98
+ }, {
99
+ name: 'tasksAndDecisionsInputRule',
100
+ plugin: function plugin(_ref4) {
101
+ var _api$analytics4;
102
+ var schema = _ref4.schema,
103
+ featureFlags = _ref4.featureFlags;
104
+ return (0, _inputRules.default)(api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions)(schema, featureFlags);
105
+ }
106
+ }, {
107
+ name: 'tasksAndDecisionsKeyMap',
108
+ plugin: function plugin(_ref5) {
109
+ var schema = _ref5.schema;
110
+ return (0, _keymaps.default)(schema, api, allowNestedTasks, consumeTabs);
111
+ }
112
+ } // Needs to be after "save-on-enter"
113
+ ];
114
+ },
115
+ secondaryToolbarComponent: function secondaryToolbarComponent(_ref6) {
116
+ var editorView = _ref6.editorView,
117
+ disabled = _ref6.disabled;
118
+ return (0, _react.jsx)("div", {
119
+ css: taskDecisionToolbarGroupStyles
120
+ }, (0, _react.jsx)(_ToolbarDecision.default, {
121
+ editorView: editorView,
122
+ isDisabled: disabled,
123
+ isReducedSpacing: true,
124
+ editorAPI: api
125
+ }), (0, _react.jsx)(_ToolbarTask.default, {
126
+ editorView: editorView,
127
+ isDisabled: disabled,
128
+ isReducedSpacing: true,
129
+ editorAPI: api
130
+ }));
131
+ },
132
+ pluginsOptions: {
133
+ quickInsert: function quickInsert(_ref7) {
134
+ var formatMessage = _ref7.formatMessage;
135
+ return [{
136
+ id: 'action',
137
+ title: formatMessage(_messages.toolbarInsertBlockMessages.action),
138
+ description: formatMessage(_messages.toolbarInsertBlockMessages.actionDescription),
139
+ priority: 100,
140
+ keywords: ['checkbox', 'task', 'todo'],
141
+ keyshortcut: '[]',
142
+ icon: function icon() {
143
+ return (0, _react.jsx)(_quickInsert.IconAction, null);
144
+ },
145
+ action: function action(insert, state) {
146
+ var _api$analytics5;
147
+ return (0, _commands.insertTaskDecisionAction)(api === null || api === void 0 || (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions)(state, 'taskList', _analytics.INPUT_METHOD.QUICK_INSERT, addItem(insert, 'taskList', state.schema));
148
+ }
149
+ }, {
150
+ id: 'decision',
151
+ title: formatMessage(_messages.toolbarInsertBlockMessages.decision),
152
+ description: formatMessage(_messages.toolbarInsertBlockMessages.decisionDescription),
153
+ priority: 900,
154
+ keyshortcut: '<>',
155
+ icon: function icon() {
156
+ return (0, _react.jsx)(_quickInsert.IconDecision, null);
157
+ },
158
+ action: function action(insert, state) {
159
+ var _api$analytics6;
160
+ return (0, _commands.insertTaskDecisionAction)(api === null || api === void 0 || (_api$analytics6 = api.analytics) === null || _api$analytics6 === void 0 ? void 0 : _api$analytics6.actions)(state, 'decisionList', _analytics.INPUT_METHOD.QUICK_INSERT, addItem(insert, 'decisionList', state.schema));
161
+ }
162
+ }];
163
+ }
164
+ }
165
+ };
166
+ };
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.wrapSelectionInTaskList = exports.liftSelection = exports.joinAtCut = void 0;
7
+ var _commands = require("@atlaskit/editor-common/commands");
8
+ var _transform = require("@atlaskit/editor-prosemirror/transform");
9
+ var _utils = require("../utils");
10
+ var _helpers = require("./helpers");
11
+ var liftSelection = exports.liftSelection = function liftSelection(state, dispatch) {
12
+ var normalizedSelection = (0, _utils.normalizeTaskItemsSelection)(state.selection);
13
+ var $from = normalizedSelection.$from,
14
+ $to = normalizedSelection.$to;
15
+ var tr = (0, _helpers.liftBlock)(state.tr, $from, $to);
16
+ if (dispatch && tr) {
17
+ dispatch(tr);
18
+ }
19
+ return !!tr;
20
+ };
21
+ var wrapSelectionInTaskList = exports.wrapSelectionInTaskList = function wrapSelectionInTaskList(state, dispatch) {
22
+ var _normalizeTaskItemsSe = (0, _utils.normalizeTaskItemsSelection)(state.selection),
23
+ $from = _normalizeTaskItemsSe.$from,
24
+ $to = _normalizeTaskItemsSe.$to;
25
+
26
+ // limit ui indentation to 6 levels
27
+ var _state$schema$nodes = state.schema.nodes,
28
+ taskList = _state$schema$nodes.taskList,
29
+ taskItem = _state$schema$nodes.taskItem;
30
+ var maxDepth = (0, _helpers.subtreeHeight)($from, $to, [taskList, taskItem]);
31
+ if (maxDepth >= 6) {
32
+ return true;
33
+ }
34
+ var blockRange = (0, _helpers.getBlockRange)($from, $to);
35
+ if (!blockRange) {
36
+ return true;
37
+ }
38
+ var wrapping = (0, _transform.findWrapping)(blockRange, state.schema.nodes.taskList);
39
+ if (!wrapping) {
40
+ return true;
41
+ }
42
+ if (dispatch) {
43
+ dispatch(state.tr.wrap(blockRange, wrapping).scrollIntoView());
44
+ }
45
+ return true;
46
+ };
47
+
48
+ /**
49
+ * Tries to move the paragraph content near the given position into the taskItem or decisionItem
50
+ * before it.
51
+ *
52
+ * Looks backwards from the given position to find the "cut point" between the last taskItem and the
53
+ * following paragraph. Then tries to move the content from that paragraph into the taskItem.
54
+ *
55
+ * @param $pos Position at the end of, or anywhere in paragraph following, the last taskItem
56
+ * @see {joinToPreviousListItem}
57
+ */
58
+ var joinAtCut = exports.joinAtCut = function joinAtCut($pos) {
59
+ return function (state, dispatch) {
60
+ var $cut = (0, _commands.findCutBefore)($pos);
61
+ if (!$cut) {
62
+ return false;
63
+ }
64
+ var paragraph = $cut.doc.type.schema.nodes.paragraph;
65
+
66
+ // find the boundary between the taskList and paragraph
67
+ if ($cut.nodeBefore && (0, _helpers.isActionOrDecisionList)($cut.nodeBefore) && $cut.nodeAfter && $cut.nodeAfter.type === paragraph) {
68
+ // we'll find the boundary of a taskList
69
+ // so resolve -1 to find the inside end of the last taskItem
70
+ var $lastNode = $cut.doc.resolve($cut.pos - 1);
71
+
72
+ // might have deeply nested taskList, keep trying to find it
73
+ while (!(0, _helpers.isActionOrDecisionItem)($lastNode.parent)) {
74
+ $lastNode = state.doc.resolve($lastNode.pos - 1);
75
+ }
76
+
77
+ // grab the structure between the taskItem and the paragraph
78
+ // note: structure = true in ReplaceAroundStep
79
+ var slice = state.tr.doc.slice($lastNode.pos, $cut.pos);
80
+
81
+ // collapse the range between end of last taskItem and after the paragraph
82
+ // with the gap being the paragraph's content (i.e. take that content)
83
+ //
84
+ // we pass the structure we found earlier to join the p and taskItem nodes
85
+ //
86
+ // see https://prosemirror.net/docs/ref/#transform.ReplaceStep.constructor
87
+ // see https://prosemirror.net/docs/ref/#transform.ReplaceAroundStep.constructor
88
+ var tr = state.tr.step(new _transform.ReplaceAroundStep($lastNode.pos, $cut.pos + $cut.nodeAfter.nodeSize, $cut.pos + 1, $cut.pos + $cut.nodeAfter.nodeSize - 1, slice, 0, true));
89
+ if (dispatch) {
90
+ dispatch(tr);
91
+ }
92
+ return true;
93
+ }
94
+ return false;
95
+ };
96
+ };