@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.
- package/.eslintrc.js +26 -0
- package/CHANGELOG.md +16 -0
- package/dist/cjs/commands.js +288 -0
- package/dist/cjs/index.js +8 -1
- package/dist/cjs/nodeviews/decisionItem.js +117 -0
- package/dist/cjs/nodeviews/hooks/use-show-placeholder.js +40 -0
- package/dist/cjs/nodeviews/taskItem.js +211 -0
- package/dist/cjs/plugin.js +166 -0
- package/dist/cjs/pm-plugins/commands.js +96 -0
- package/dist/cjs/pm-plugins/helpers.js +299 -0
- package/dist/cjs/pm-plugins/input-rules.js +94 -0
- package/dist/cjs/pm-plugins/keymaps.js +376 -0
- package/dist/cjs/pm-plugins/main.js +263 -0
- package/dist/cjs/pm-plugins/plugin-key.js +8 -0
- package/dist/cjs/pm-plugins/types.js +11 -0
- package/dist/cjs/types.js +5 -0
- package/dist/cjs/ui/Decision/index.js +30 -0
- package/dist/cjs/ui/Task/index.js +81 -0
- package/dist/cjs/ui/Task/task-item-with-providers.js +138 -0
- package/dist/cjs/ui/ToolbarDecision/index.js +41 -0
- package/dist/cjs/ui/ToolbarTask/index.js +40 -0
- package/dist/cjs/utils.js +41 -0
- package/dist/es2019/commands.js +279 -0
- package/dist/es2019/index.js +1 -1
- package/dist/es2019/nodeviews/decisionItem.js +76 -0
- package/dist/es2019/nodeviews/hooks/use-show-placeholder.js +36 -0
- package/dist/es2019/nodeviews/taskItem.js +173 -0
- package/dist/es2019/plugin.js +154 -0
- package/dist/es2019/pm-plugins/commands.js +94 -0
- package/dist/es2019/pm-plugins/helpers.js +316 -0
- package/dist/es2019/pm-plugins/input-rules.js +91 -0
- package/dist/es2019/pm-plugins/keymaps.js +370 -0
- package/dist/es2019/pm-plugins/main.js +262 -0
- package/dist/es2019/pm-plugins/plugin-key.js +2 -0
- package/dist/es2019/pm-plugins/types.js +5 -0
- package/dist/es2019/types.js +1 -0
- package/dist/es2019/ui/Decision/index.js +26 -0
- package/dist/es2019/ui/Task/index.js +55 -0
- package/dist/es2019/ui/Task/task-item-with-providers.js +72 -0
- package/dist/es2019/ui/ToolbarDecision/index.js +37 -0
- package/dist/es2019/ui/ToolbarTask/index.js +36 -0
- package/dist/es2019/utils.js +32 -0
- package/dist/esm/commands.js +281 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/nodeviews/decisionItem.js +110 -0
- package/dist/esm/nodeviews/hooks/use-show-placeholder.js +34 -0
- package/dist/esm/nodeviews/taskItem.js +204 -0
- package/dist/esm/plugin.js +155 -0
- package/dist/esm/pm-plugins/commands.js +90 -0
- package/dist/esm/pm-plugins/helpers.js +285 -0
- package/dist/esm/pm-plugins/input-rules.js +87 -0
- package/dist/esm/pm-plugins/keymaps.js +368 -0
- package/dist/esm/pm-plugins/main.js +256 -0
- package/dist/esm/pm-plugins/plugin-key.js +2 -0
- package/dist/esm/pm-plugins/types.js +5 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/ui/Decision/index.js +23 -0
- package/dist/esm/ui/Task/index.js +71 -0
- package/dist/esm/ui/Task/task-item-with-providers.js +129 -0
- package/dist/esm/ui/ToolbarDecision/index.js +34 -0
- package/dist/esm/ui/ToolbarTask/index.js +33 -0
- package/dist/esm/utils.js +30 -0
- package/dist/types/commands.d.ts +16 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/nodeviews/decisionItem.d.ts +10 -0
- package/dist/types/nodeviews/hooks/use-show-placeholder.d.ts +11 -0
- package/dist/types/nodeviews/taskItem.d.ts +14 -0
- package/dist/types/plugin.d.ts +2 -0
- package/dist/types/pm-plugins/commands.d.ts +15 -0
- package/dist/types/pm-plugins/helpers.d.ts +76 -0
- package/dist/types/pm-plugins/input-rules.d.ts +6 -0
- package/dist/types/pm-plugins/keymaps.d.ts +11 -0
- package/dist/types/pm-plugins/main.d.ts +7 -0
- package/dist/types/pm-plugins/plugin-key.d.ts +2 -0
- package/dist/types/pm-plugins/types.d.ts +8 -0
- package/dist/types/types.d.ts +49 -0
- package/dist/types/ui/Decision/index.d.ts +15 -0
- package/dist/types/ui/Task/index.d.ts +28 -0
- package/dist/types/ui/Task/task-item-with-providers.d.ts +29 -0
- package/dist/types/ui/ToolbarDecision/index.d.ts +18 -0
- package/dist/types/ui/ToolbarTask/index.d.ts +18 -0
- package/dist/types/utils.d.ts +4 -0
- package/dist/types-ts4.5/commands.d.ts +16 -0
- package/dist/types-ts4.5/index.d.ts +2 -1
- package/dist/types-ts4.5/nodeviews/decisionItem.d.ts +10 -0
- package/dist/types-ts4.5/nodeviews/hooks/use-show-placeholder.d.ts +11 -0
- package/dist/types-ts4.5/nodeviews/taskItem.d.ts +14 -0
- package/dist/types-ts4.5/plugin.d.ts +2 -0
- package/dist/types-ts4.5/pm-plugins/commands.d.ts +15 -0
- package/dist/types-ts4.5/pm-plugins/helpers.d.ts +76 -0
- package/dist/types-ts4.5/pm-plugins/input-rules.d.ts +6 -0
- package/dist/types-ts4.5/pm-plugins/keymaps.d.ts +11 -0
- package/dist/types-ts4.5/pm-plugins/main.d.ts +7 -0
- package/dist/types-ts4.5/pm-plugins/plugin-key.d.ts +2 -0
- package/dist/types-ts4.5/pm-plugins/types.d.ts +8 -0
- package/dist/types-ts4.5/types.d.ts +49 -0
- package/dist/types-ts4.5/ui/Decision/index.d.ts +15 -0
- package/dist/types-ts4.5/ui/Task/index.d.ts +28 -0
- package/dist/types-ts4.5/ui/Task/task-item-with-providers.d.ts +29 -0
- package/dist/types-ts4.5/ui/ToolbarDecision/index.d.ts +18 -0
- package/dist/types-ts4.5/ui/ToolbarTask/index.d.ts +18 -0
- package/dist/types-ts4.5/utils.d.ts +4 -0
- package/package.json +16 -6
- package/report.api.md +100 -1
- 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
|
+
};
|