@atlaskit/editor-plugin-show-diff 20.0.1 → 20.0.3

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 (35) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/cjs/pm-plugins/calculateDiff/calculateDiffDecorations.js +9 -10
  3. package/dist/cjs/pm-plugins/calculateDiff/groupDeletedColumnChanges.js +92 -26
  4. package/dist/cjs/pm-plugins/calculateDiff/simplifyChangesWithAttribution.js +46 -22
  5. package/dist/cjs/pm-plugins/decorations/colorSchemes/attributions.js +4 -5
  6. package/dist/cjs/pm-plugins/decorations/createChangedRowDecorationWidgets.js +4 -1
  7. package/dist/cjs/pm-plugins/decorations/createNodeChangedDecorationWidget.js +1 -1
  8. package/dist/cjs/pm-plugins/decorations/extractContributorTags.js +3 -1
  9. package/dist/cjs/pm-plugins/getScrollableDecorations.js +1 -8
  10. package/dist/cjs/pm-plugins/main.js +5 -2
  11. package/dist/es2019/pm-plugins/calculateDiff/calculateDiffDecorations.js +9 -10
  12. package/dist/es2019/pm-plugins/calculateDiff/groupDeletedColumnChanges.js +85 -14
  13. package/dist/es2019/pm-plugins/calculateDiff/simplifyChangesWithAttribution.js +42 -22
  14. package/dist/es2019/pm-plugins/decorations/colorSchemes/attributions.js +4 -5
  15. package/dist/es2019/pm-plugins/decorations/createChangedRowDecorationWidgets.js +4 -1
  16. package/dist/es2019/pm-plugins/decorations/createNodeChangedDecorationWidget.js +1 -1
  17. package/dist/es2019/pm-plugins/decorations/extractContributorTags.js +1 -1
  18. package/dist/es2019/pm-plugins/getScrollableDecorations.js +1 -6
  19. package/dist/es2019/pm-plugins/main.js +5 -1
  20. package/dist/esm/pm-plugins/calculateDiff/calculateDiffDecorations.js +9 -10
  21. package/dist/esm/pm-plugins/calculateDiff/groupDeletedColumnChanges.js +92 -26
  22. package/dist/esm/pm-plugins/calculateDiff/simplifyChangesWithAttribution.js +46 -22
  23. package/dist/esm/pm-plugins/decorations/colorSchemes/attributions.js +4 -5
  24. package/dist/esm/pm-plugins/decorations/createChangedRowDecorationWidgets.js +4 -1
  25. package/dist/esm/pm-plugins/decorations/createNodeChangedDecorationWidget.js +1 -1
  26. package/dist/esm/pm-plugins/decorations/extractContributorTags.js +3 -1
  27. package/dist/esm/pm-plugins/getScrollableDecorations.js +1 -8
  28. package/dist/esm/pm-plugins/main.js +5 -2
  29. package/dist/types/pm-plugins/calculateDiff/calculateDiffDecorations.d.ts +6 -4
  30. package/dist/types/pm-plugins/calculateDiff/simplifyChangesWithAttribution.d.ts +2 -2
  31. package/dist/types/pm-plugins/decorations/colorSchemes/attributions.d.ts +2 -3
  32. package/dist/types/pm-plugins/decorations/createNodeChangedDecorationWidget.d.ts +1 -0
  33. package/dist/types/pm-plugins/decorations/extractContributorTags.d.ts +1 -0
  34. package/dist/types/pm-plugins/main.d.ts +1 -0
  35. package/package.json +2 -2
@@ -32,6 +32,11 @@ var getAttributionIdentity = function getAttributionIdentity(change) {
32
32
  mergeable: true
33
33
  };
34
34
  };
35
+ var hasContributor = function hasContributor(change) {
36
+ return [].concat(_toConsumableArray(change.deleted), _toConsumableArray(change.inserted)).some(function (span) {
37
+ return getAttributionKey(span.data) !== undefined;
38
+ });
39
+ };
35
40
  var byNewDocRange = function byNewDocRange(left, right) {
36
41
  return left.fromB - right.fromB || left.toB - right.toB;
37
42
  };
@@ -89,12 +94,28 @@ var blockNodeRanges = function blockNodeRanges(doc, change, ownsPosition) {
89
94
  */
90
95
  var splitMixedIdentityChanges = function splitMixedIdentityChanges(changes, doc) {
91
96
  return changes.flatMap(function (change) {
92
- if (getAttributionIdentity(change).mergeable) {
93
- return [change];
97
+ var _change$inserted$;
98
+ // A replacement can carry an anonymous deletion and an authored insertion. The deleted side
99
+ // needs its own zero-width change or the insertion's actor claims the deletion too.
100
+ var deletedKeys = new Set(change.deleted.map(function (span) {
101
+ return getAttributionKey(span.data);
102
+ }));
103
+ var firstInsertedKey = getAttributionKey((_change$inserted$ = change.inserted[0]) === null || _change$inserted$ === void 0 ? void 0 : _change$inserted$.data);
104
+ var detachDeleted = change.deleted.length > 0 && change.inserted.length > 0 && deletedKeys.size === 1 && !deletedKeys.has(firstInsertedKey) && (deletedKeys.has(undefined) || firstInsertedKey === undefined);
105
+ var deletedChange = detachDeleted ? [_objectSpread(_objectSpread({}, change), {}, {
106
+ toB: change.fromB,
107
+ inserted: []
108
+ })] : [];
109
+ var contentChange = detachDeleted ? _objectSpread(_objectSpread({}, change), {}, {
110
+ fromA: change.toA,
111
+ deleted: []
112
+ }) : change;
113
+ if (getAttributionIdentity(contentChange).mergeable) {
114
+ return [].concat(deletedChange, [contentChange]);
94
115
  }
95
116
  var runs = [];
96
- var offset = change.fromB;
97
- var _iterator = _createForOfIteratorHelper(change.inserted),
117
+ var offset = contentChange.fromB;
118
+ var _iterator = _createForOfIteratorHelper(contentChange.inserted),
98
119
  _step;
99
120
  try {
100
121
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -121,32 +142,32 @@ var splitMixedIdentityChanges = function splitMixedIdentityChanges(changes, doc)
121
142
  } finally {
122
143
  _iterator.f();
123
144
  }
124
- if (runs.length < 2 || offset !== change.toB) {
125
- return [change];
145
+ if (runs.length < 2 || offset !== contentChange.toB) {
146
+ return [].concat(deletedChange, [contentChange]);
126
147
  }
127
- return runs.map(function (run, index) {
148
+ return [].concat(deletedChange, _toConsumableArray(runs.map(function (run, index) {
128
149
  var owned = blockNodeRanges(doc, {
129
- from: change.fromB,
130
- to: change.toB
150
+ from: contentChange.fromB,
151
+ to: contentChange.toB
131
152
  }, function (pos) {
132
153
  return pos >= run.from && pos < run.to;
133
154
  });
134
- return _objectSpread(_objectSpread({}, change), {}, {
135
- fromA: index === 0 ? change.fromA : change.toA,
155
+ return _objectSpread(_objectSpread({}, contentChange), {}, {
156
+ fromA: index === 0 ? contentChange.fromA : contentChange.toA,
136
157
  fromB: run.from,
137
158
  toB: run.to,
138
- deleted: index === 0 ? change.deleted : [],
159
+ deleted: index === 0 ? contentChange.deleted : [],
139
160
  inserted: run.spans
140
161
  }, owned ? {
141
162
  blockNodeRangesB: owned
142
163
  } : {});
143
- });
164
+ })));
144
165
  });
145
166
  };
146
167
 
147
168
  /**
148
- * Subtracts every other author's contained change from a change's range, so both contributions
149
- * survive. Applies when the contributors arrive as separate changes rather than as spans of one —
169
+ * Subtracts every differently attributed contained change from a change's range, including when
170
+ * one has no contributor. Applies when the changes arrive separately rather than as spans of one —
150
171
  * the `step` diff type. A contained change by the same author, and one that only partially
151
172
  * overlaps, are left for the collapse below.
152
173
  *
@@ -155,10 +176,11 @@ var splitMixedIdentityChanges = function splitMixedIdentityChanges(changes, doc)
155
176
  var splitContainedChanges = function splitContainedChanges(changes, doc) {
156
177
  return changes.flatMap(function (change) {
157
178
  var _getAttributionIdenti = getAttributionIdentity(change),
158
- key = _getAttributionIdenti.key;
179
+ key = _getAttributionIdenti.key,
180
+ mergeable = _getAttributionIdenti.mergeable;
159
181
  var inner = mergeRanges(changes.filter(function (other) {
160
- var otherKey = getAttributionIdentity(other).key;
161
- return other !== change && key !== undefined && otherKey !== undefined && otherKey !== key && isContained(change, other);
182
+ var otherIdentity = getAttributionIdentity(other);
183
+ return other !== change && mergeable && otherIdentity.mergeable && otherIdentity.key !== key && isContained(change, other);
162
184
  }).map(function (_ref) {
163
185
  var fromB = _ref.fromB,
164
186
  toB = _ref.toB;
@@ -236,7 +258,7 @@ var mergeBlockNodeRanges = function mergeBlockNodeRanges(left, right) {
236
258
  return left.blockNodeRangesB && right.blockNodeRangesB ? [].concat(_toConsumableArray(left.blockNodeRangesB), _toConsumableArray(right.blockNodeRangesB)) : undefined;
237
259
  };
238
260
 
239
- /** Unions the changes whose new-document ranges strictly overlap, leaving touching ones alone. */
261
+ /** Unions overlapping changes, except when only one side names a contributor. */
240
262
  var collapse = function collapse(changes) {
241
263
  // A zero-length new-document range paints no inline decoration, so it is kept aside rather than
242
264
  // folded into a neighbouring insertion.
@@ -252,7 +274,9 @@ var collapse = function collapse(changes) {
252
274
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
253
275
  var change = _step3.value;
254
276
  var current = collapsed[collapsed.length - 1];
255
- if (current && change.fromB < current.toB) {
277
+ var currentHasContributor = current && hasContributor(current);
278
+ var changeHasContributor = hasContributor(change);
279
+ if (current && change.fromB < current.toB && currentHasContributor === changeHasContributor) {
256
280
  var blockNodeRangesB = mergeBlockNodeRanges(current, change);
257
281
  collapsed[collapsed.length - 1] = _objectSpread({
258
282
  fromA: Math.min(current.fromA, change.fromA),
@@ -282,8 +306,8 @@ var collapse = function collapse(changes) {
282
306
  * characters — which stacks two inline decorations and renders one contributor tag per copy.
283
307
  *
284
308
  * Merging keeps every span from both sides, so the latest-writer rule still decides whose tag is
285
- * shown. Ranges that merely touch are left alone, so an unattributed edit next to an attributed one
286
- * is not credited to it.
309
+ * shown among attributed edits. An unattributed change never merges with an attributed one.
310
+ * Ranges that merely touch are left alone.
287
311
  *
288
312
  * Contributors are separated first, by `splitMixedIdentityChanges` and `splitContainedChanges`.
289
313
  * Both leave ranges that only touch, so they survive the collapse.
@@ -238,13 +238,12 @@ var getAttributionKeyForChanges = function getAttributionKeyForChanges(changes)
238
238
  };
239
239
 
240
240
  /**
241
- * The attribution key owning a change. Inline and step changes retain direct attribution spans, so
242
- * resolve those first. Grouped and smart-classified changes can lose that data; for those, fall
243
- * back to the latest overlapping attributed step.
241
+ * Preserve overlap attribution outside Confluence version history. Within version history, a
242
+ * recovery step's keyless spans must not inherit an overlapping NCS step's actor.
244
243
  */
245
244
  export var getAttributionKeyForChange = function getAttributionKeyForChange(change, attributedChanges) {
246
- var _getAttributionKeyFor;
247
- return (_getAttributionKeyFor = getAttributionKeyForChanges([change])) !== null && _getAttributionKeyFor !== void 0 ? _getAttributionKeyFor : getAttributionKeyForChanges(attributedChanges.filter(function (attributedChange) {
245
+ var directKey = getAttributionKeyForChanges([change]);
246
+ return directKey !== null && directKey !== void 0 ? directKey : fg('confluence_ncs_step_diffing_version_history') ? undefined : getAttributionKeyForChanges(attributedChanges.filter(function (attributedChange) {
248
247
  return changesOverlap(change, attributedChange);
249
248
  }));
250
249
  };
@@ -215,7 +215,7 @@ var createChangedRowDOM = function createChangedRowDOM(_ref3) {
215
215
  return tr;
216
216
  };
217
217
  var supportsAnchorPositioning = function supportsAnchorPositioning() {
218
- return typeof CSS !== 'undefined' && typeof CSS.supports === 'function' && CSS.supports('top', 'anchor(--a top)');
218
+ return typeof CSS !== 'undefined' && typeof CSS.supports === 'function' && CSS.supports('top', 'anchor(--a top)') && CSS.supports('position-anchor', '--a');
219
219
  };
220
220
  var createAnchoredRemovedLozengeWidget = function createAnchoredRemovedLozengeWidget(_ref4) {
221
221
  var anchorName = _ref4.anchorName,
@@ -226,6 +226,9 @@ var createAnchoredRemovedLozengeWidget = function createAnchoredRemovedLozengeWi
226
226
  var lozenge = createRemovedLozenge(intl, isActive, colorScheme, true);
227
227
  var inset = lozenge.style.top;
228
228
  lozenge.style.setProperty('position', 'fixed');
229
+ // Fixed labels only follow their default anchor on scroll, and escape scroll-container clipping.
230
+ lozenge.style.setProperty('position-anchor', "--".concat(anchorName));
231
+ lozenge.style.setProperty('position-visibility', 'anchors-visible');
229
232
  lozenge.style.setProperty('top', "calc(anchor(--".concat(anchorName, " top) + ").concat(inset, ")"));
230
233
  lozenge.style.setProperty('left', "calc(anchor(--".concat(anchorName, " right) - ").concat(inset, ")"));
231
234
  lozenge.style.setProperty('right', 'auto');
@@ -141,7 +141,7 @@ export var createNodeChangedDecorationWidget = function createNodeChangedDecorat
141
141
  // node renders beneath its replacement; otherwise anchor at the start (change.fromB).
142
142
  var anchorPos = placeBelow ? change.toB : change.fromB;
143
143
  var safeInsertPos = findSafeInsertPos(newDoc, anchorPos, slice);
144
- var isActive = activeIndexPos && (fg('confluence_ncs_step_diffing_version_history') ? safeInsertPos >= activeIndexPos.from && safeInsertPos <= activeIndexPos.to : safeInsertPos === activeIndexPos.from && safeInsertPos === activeIndexPos.to);
144
+ var isActive = activeIndexPos && (fg('confluence_ncs_step_diffing_version_history') ? safeInsertPos >= activeIndexPos.from && safeInsertPos <= activeIndexPos.to && (!('attributionKey' in activeIndexPos) || activeIndexPos.attributionKey === attributionKey) : safeInsertPos === activeIndexPos.from && safeInsertPos === activeIndexPos.to);
145
145
  if (deletedBlankLineCount > 0) {
146
146
  // The blocks have no content to serialize, so the deletion is shown as one struck-through
147
147
  // return glyph per line the author removed. A single widget, not one per line: the lines are
@@ -98,7 +98,9 @@ var owningStop = function owningStop(target, stops) {
98
98
  * containment, and the leading change of what it covers.
99
99
  */
100
100
  var resolveActiveTarget = function resolveActiveTarget(surviving, activeIndexPos) {
101
- return containedBy(surviving, activeIndexPos)[0];
101
+ return containedBy(surviving, activeIndexPos).find(function (target) {
102
+ return !fg('confluence_ncs_step_diffing_version_history') || !('attributionKey' in activeIndexPos) || target.decoration.spec.attributionKey === activeIndexPos.attributionKey;
103
+ });
102
104
  };
103
105
 
104
106
  /**
@@ -83,18 +83,13 @@ function groupTouchingDecorations(decorations, isInlineDecoration) {
83
83
  return a.from === b.from ? a.to - b.to : a.from - b.from;
84
84
  });
85
85
  sortedDecorations.forEach(function (decoration) {
86
- var _openGroups$find;
87
86
  // A gap ends the run: nothing before it can be joined.
88
87
  if (decoration.from > clusterTo) {
89
88
  openGroups = [];
90
89
  }
91
90
  var contributor = contributorOf(decoration);
92
- // An unattributed decoration names nobody to keep apart, so it joins whatever is open — a
93
- // decision item's own highlight must not split the stop from the tag on its list.
94
- var openGroup = (_openGroups$find = openGroups.find(function (group) {
91
+ var openGroup = openGroups.find(function (group) {
95
92
  return group.contributor === contributor;
96
- })) !== null && _openGroups$find !== void 0 ? _openGroups$find : contributor === '' ? openGroups[0] : openGroups.find(function (group) {
97
- return group.contributor === '';
98
93
  });
99
94
  if (openGroup === undefined) {
100
95
  var group = {
@@ -106,8 +101,6 @@ function groupTouchingDecorations(decorations, isInlineDecoration) {
106
101
  groups.push(group);
107
102
  openGroups = [].concat(_toConsumableArray(openGroups), [group]);
108
103
  } else {
109
- // The first contributor to join claims the group, so the next one still starts its own.
110
- openGroup.contributor = openGroup.contributor || contributor;
111
104
  openGroup.decorations.push(decoration);
112
105
  openGroup.to = Math.max(openGroup.to, decoration.to);
113
106
  }
@@ -7,6 +7,7 @@ import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
7
7
  import { PluginKey } from '@atlaskit/editor-prosemirror/state';
8
8
  import { Step as ProseMirrorStep } from '@atlaskit/editor-prosemirror/transform-override';
9
9
  import { DecorationSet } from '@atlaskit/editor-prosemirror/view';
10
+ import { fg } from '@atlaskit/platform-feature-flags/fg';
10
11
  import { getActiveDiffAnnouncement } from '../ui/DiffNavigation/announceActiveDiff';
11
12
  import { calculateDiffDecorations } from './calculateDiff/calculateDiffDecorations';
12
13
  import { isDiffDecoration, isDiffDecorationSpec } from './decorations/decorationKeys';
@@ -170,10 +171,12 @@ export var createPlugin = function createPlugin(config, getIntl, api, onEditorVi
170
171
  var activeDecoration = _decorations[nextIndex];
171
172
  newPluginState = _objectSpread(_objectSpread({}, currentPluginState), {}, {
172
173
  activeIndex: nextIndex,
173
- activeIndexPos: activeDecoration ? {
174
+ activeIndexPos: activeDecoration ? _objectSpread({
174
175
  from: activeDecoration.from,
175
176
  to: activeDecoration.to
176
- } : undefined
177
+ }, fg('confluence_ncs_step_diffing_version_history') ? {
178
+ attributionKey: isDiffDecoration(activeDecoration) ? activeDecoration.spec.attributionKey : undefined
179
+ } : {}) : undefined
177
180
  });
178
181
  // Recalculate decorations with the new active index
179
182
  var _calculateDiffDecorat2 = calculateDiffDecorations({
@@ -14,6 +14,11 @@ type CalculatedDiffs = {
14
14
  decorations: DecorationSet;
15
15
  diffDescriptors: DiffDescriptor[];
16
16
  };
17
+ type ActiveIndexPos = {
18
+ attributionKey?: string;
19
+ from: number;
20
+ to: number;
21
+ };
17
22
  /**
18
23
  * Whether deleted content for `change` renders after the new content instead of before it.
19
24
  *
@@ -31,10 +36,7 @@ export declare const isDeletedContentPlacedBelow: ({ change, deletedDiffPlacemen
31
36
  inlineDeletedDiffPlacement?: InlineDeletedDiffPlacement;
32
37
  }) => boolean;
33
38
  export declare const calculateDiffDecorations: MemoizedFn<({ state, pluginState, nodeViewSerializer, colorScheme, intl, activeIndexPos, api, hideDeletedDiffs, hideAddedDiffsUnderline, showIndicators, }: {
34
- activeIndexPos?: {
35
- from: number;
36
- to: number;
37
- };
39
+ activeIndexPos?: ActiveIndexPos;
38
40
  api: ExtractInjectionAPI<ShowDiffPlugin> | undefined;
39
41
  colorScheme?: ColorScheme;
40
42
  deletedDiffPlacement?: DeletedDiffPlacement;
@@ -18,8 +18,8 @@ export type AttributedChange = Change & {
18
18
  * characters — which stacks two inline decorations and renders one contributor tag per copy.
19
19
  *
20
20
  * Merging keeps every span from both sides, so the latest-writer rule still decides whose tag is
21
- * shown. Ranges that merely touch are left alone, so an unattributed edit next to an attributed one
22
- * is not credited to it.
21
+ * shown among attributed edits. An unattributed change never merges with an attributed one.
22
+ * Ranges that merely touch are left alone.
23
23
  *
24
24
  * Contributors are separated first, by `splitMixedIdentityChanges` and `splitContainedChanges`.
25
25
  * Both leave ranges that only touch, so they survive the collapse.
@@ -26,9 +26,8 @@ export declare const isAttributionColoringEnabled: (stepAttributions: Array<Diff
26
26
  export declare const isContributorTagsEnabled: (stepAttributions: Array<DiffStepAttribution | undefined> | undefined, contributors: ResolvedDiffContributors | undefined) => boolean;
27
27
  export declare const createAttributionColorMap: (stepAttributions: Array<DiffStepAttribution | undefined>, contributors?: ResolvedDiffContributors) => Map<string, AdsAccentColor>;
28
28
  /**
29
- * The attribution key owning a change. Inline and step changes retain direct attribution spans, so
30
- * resolve those first. Grouped and smart-classified changes can lose that data; for those, fall
31
- * back to the latest overlapping attributed step.
29
+ * Preserve overlap attribution outside Confluence version history. Within version history, a
30
+ * recovery step's keyless spans must not inherit an overlapping NCS step's actor.
32
31
  */
33
32
  export declare const getAttributionKeyForChange: (change: Change, attributedChanges: Change[]) => string | undefined;
34
33
  export declare const getColorSchemeForChange: (change: Change, attributedChanges: Change[], attributionColors: Map<string, AdsAccentColor>, fallback: ColorScheme | undefined) => ColorScheme | undefined;
@@ -12,6 +12,7 @@ import { type ContributorTagMountContext } from './createContributorTagWidget';
12
12
  */
13
13
  export declare const createNodeChangedDecorationWidget: ({ attributionKey, change, doc, nodeViewSerializer, colorScheme, newDoc, intl, activeIndexPos, isInserted, leftAnchorId, showContributorTags, showIndicators, placeBelow, hideAddedDiffsUnderline, reveal, tagMountContext, deletedColumns, }: {
14
14
  activeIndexPos?: {
15
+ attributionKey?: string;
15
16
  from: number;
16
17
  to: number;
17
18
  };
@@ -14,6 +14,7 @@ import type { ResolvedDiffContributors } from './colorSchemes/attributions';
14
14
  * leading one would ever be reachable. Absent, every decoration keeps its own tag.
15
15
  */
16
16
  export declare const extractContributorTags: (decorations: DecorationSet, contributors: ResolvedDiffContributors | undefined, activeIndexPos?: {
17
+ attributionKey?: string;
17
18
  from: number;
18
19
  to: number;
19
20
  }, stops?: ReadonlyArray<{
@@ -12,6 +12,7 @@ export declare const showDiffPluginKey: PluginKey<ShowDiffPluginState>;
12
12
  export type ShowDiffPluginState = {
13
13
  activeIndex?: number;
14
14
  activeIndexPos?: {
15
+ attributionKey?: string;
15
16
  from: number;
16
17
  to: number;
17
18
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-show-diff",
3
- "version": "20.0.1",
3
+ "version": "20.0.3",
4
4
  "description": "ShowDiff plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -39,7 +39,7 @@
39
39
  "@atlaskit/platform-feature-experiments": "^0.3.0",
40
40
  "@atlaskit/platform-feature-flags": "^2.2.0",
41
41
  "@atlaskit/primitives": "^22.5.0",
42
- "@atlaskit/tmp-editor-statsig": "^210.0.0",
42
+ "@atlaskit/tmp-editor-statsig": "^212.0.0",
43
43
  "@atlaskit/tokens": "^20.1.0",
44
44
  "@babel/runtime": "^7.0.0",
45
45
  "@compiled/react": "^1.0.2",