ckeditor5-elements-interaction 49.0.0-alpha.4 → 49.0.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.
package/README.md CHANGED
@@ -24,8 +24,8 @@ import { ElementClickable, ElementSelectable } from 'ckeditor5-elements';
24
24
 
25
25
  // In the editor config:
26
26
  plugins: [..., ElementSelectable, ElementClickable],
27
- selectableElements: ['callout', 'divider', element => element.hasAttribute('card')],
28
- elementClickables: [
27
+ elementSelectable: ['callout', 'divider', element => element.hasAttribute('card')],
28
+ elementClickable: [
29
29
  // By name. The default event is `click`.
30
30
  { element: 'imageBlock', callback: (element, editor) => console.log(element.getAttribute('src')) },
31
31
  // By a filter, on double click.
@@ -9,11 +9,11 @@ declare module 'ckeditor5' {
9
9
  * The elements that can be selected as a whole: names of model elements, or filter functions. See
10
10
  * {@link ElementSelectable}.
11
11
  */
12
- selectableElements?: ElementSelectableMatcher[];
12
+ elementSelectable?: ElementSelectableMatcher[];
13
13
  /**
14
14
  * The elements that react to clicks and double clicks. See {@link ElementClickable}.
15
15
  */
16
- elementClickables?: ElementClickableDefinition[];
16
+ elementClickable?: ElementClickableDefinition[];
17
17
  }
18
18
  }
19
19
  //# sourceMappingURL=augmentation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"augmentation.d.ts","sourceRoot":"","sources":["../src/augmentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,gBAAgB,EAChB,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,EACxB,MAAM,YAAY,CAAC;AAEpB,OAAO,QAAQ,WAAW,CAAC;IAC1B,UAAU,UAAU;QACnB,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;QAClD,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;KAChD;IAED,UAAU,YAAY;QACrB;;;WAGG;QACH,kBAAkB,CAAC,EAAE,wBAAwB,EAAE,CAAC;QAEhD;;WAEG;QACH,iBAAiB,CAAC,EAAE,0BAA0B,EAAE,CAAC;KACjD;CACD"}
1
+ {"version":3,"file":"augmentation.d.ts","sourceRoot":"","sources":["../src/augmentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,gBAAgB,EAChB,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,EACxB,MAAM,YAAY,CAAC;AAEpB,OAAO,QAAQ,WAAW,CAAC;IAC1B,UAAU,UAAU;QACnB,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;QAClD,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;KAChD;IAED,UAAU,YAAY;QACrB;;;WAGG;QACH,iBAAiB,CAAC,EAAE,wBAAwB,EAAE,CAAC;QAE/C;;WAEG;QACH,gBAAgB,CAAC,EAAE,0BAA0B,EAAE,CAAC;KAChD;CACD"}
@@ -24,11 +24,11 @@ export interface ElementClickableDefinition {
24
24
  }
25
25
  /**
26
26
  * Calls a function when an element is clicked or double-clicked, with the model element. Elements are matched by name or
27
- * by a filter function, and the definitions are the `elementClickables` editor config option (see
27
+ * by a filter function, and the definitions are the `elementClickable` editor config option (see
28
28
  * {@link ElementClickableDefinition}):
29
29
  *
30
30
  * ```ts
31
- * elementClickables: [
31
+ * elementClickable: [
32
32
  * { element: 'imageBlock', callback: (element, editor) => console.log(element.getAttribute('src')) },
33
33
  * { element: element => element.name.startsWith('heading'), event: 'dblclick', callback: edit }
34
34
  * ];
@@ -3,11 +3,11 @@ import { getElementsAround, matchesElement } from 'ckeditor5-elements-core';
3
3
  import DoubleClickObserver, {} from './doubleClickObserver.js';
4
4
  /**
5
5
  * Calls a function when an element is clicked or double-clicked, with the model element. Elements are matched by name or
6
- * by a filter function, and the definitions are the `elementClickables` editor config option (see
6
+ * by a filter function, and the definitions are the `elementClickable` editor config option (see
7
7
  * {@link ElementClickableDefinition}):
8
8
  *
9
9
  * ```ts
10
- * elementClickables: [
10
+ * elementClickable: [
11
11
  * { element: 'imageBlock', callback: (element, editor) => console.log(element.getAttribute('src')) },
12
12
  * { element: element => element.name.startsWith('heading'), event: 'dblclick', callback: edit }
13
13
  * ];
@@ -43,7 +43,7 @@ export default class ElementClickable extends Plugin {
43
43
  */
44
44
  find(viewElement, event = 'click') {
45
45
  const mapper = this.editor.editing.mapper;
46
- const definitions = (this.editor.config.get('elementClickables') ?? []).filter(definition => (definition.event ?? 'click') === event);
46
+ const definitions = (this.editor.config.get('elementClickable') ?? []).filter(definition => (definition.event ?? 'click') === event);
47
47
  for (const { element } of getElementsAround(mapper, viewElement)) {
48
48
  const definition = definitions.find(({ element: matcher }) => matchesElement(matcher, element));
49
49
  if (definition) {
@@ -1 +1 @@
1
- {"version":3,"file":"elementClickable.js","sourceRoot":"","sources":["../src/elementClickable.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,MAAM,EAKN,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAuB,MAAM,yBAAyB,CAAC;AACjG,OAAO,mBAAmB,EAAE,EAAqC,MAAM,0BAA0B,CAAC;AA4BlG;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,MAAM;IAC5C,MAAM,KAAK,UAAU;QAC3B,OAAO,kBAA2B,CAAC;IACpC,CAAC;IAEM,IAAI;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAEtC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;QAEtC,gHAAgH;QAChH,4FAA4F;QAC5F,IAAI,CAAC,QAAQ,CACZ,IAAI,CAAC,QAAQ,EACb,OAAO,EACP,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACb,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC,EACD,EAAE,QAAQ,EAAE,SAAS,EAAE,CACvB,CAAC;QACF,IAAI,CAAC,QAAQ,CACZ,IAAI,CAAC,QAAQ,EACb,UAAU,EACV,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACb,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,CAAC,EACD,EAAE,QAAQ,EAAE,SAAS,EAAE,CACvB,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,IAAI,CACV,WAAwB,EACxB,QAA+B,OAAO;QAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1C,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAC7E,UAAU,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,CACrD,CAAC;QAEF,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC;YAClE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAEhG,IAAI,UAAU,EAAE,CAAC;gBAChB,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;YAChC,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,OAAO,CAAC,KAA4B,EAAE,MAAmB,EAAE,QAAoB;QACtF,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/D,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;CACD"}
1
+ {"version":3,"file":"elementClickable.js","sourceRoot":"","sources":["../src/elementClickable.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,MAAM,EAKN,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAuB,MAAM,yBAAyB,CAAC;AACjG,OAAO,mBAAmB,EAAE,EAAqC,MAAM,0BAA0B,CAAC;AA4BlG;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,MAAM;IAC5C,MAAM,KAAK,UAAU;QAC3B,OAAO,kBAA2B,CAAC;IACpC,CAAC;IAEM,IAAI;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAEtC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;QAEtC,gHAAgH;QAChH,4FAA4F;QAC5F,IAAI,CAAC,QAAQ,CACZ,IAAI,CAAC,QAAQ,EACb,OAAO,EACP,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACb,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC,EACD,EAAE,QAAQ,EAAE,SAAS,EAAE,CACvB,CAAC;QACF,IAAI,CAAC,QAAQ,CACZ,IAAI,CAAC,QAAQ,EACb,UAAU,EACV,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACb,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,CAAC,EACD,EAAE,QAAQ,EAAE,SAAS,EAAE,CACvB,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,IAAI,CACV,WAAwB,EACxB,QAA+B,OAAO;QAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1C,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAC5E,UAAU,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,CACrD,CAAC;QAEF,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC;YAClE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAEhG,IAAI,UAAU,EAAE,CAAC;gBAChB,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;YAChC,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,OAAO,CAAC,KAA4B,EAAE,MAAmB,EAAE,QAAoB;QACtF,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/D,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;CACD"}
@@ -8,10 +8,10 @@ export type ElementSelectableMatcher = ElementMatcher;
8
8
  /**
9
9
  * Makes elements selectable as a whole, which is what CKEditor's widgets do, without them: it does not change the view
10
10
  * of the element, and does not need the `Widget` plugin. The elements are matched by name or by a filter function, and
11
- * they are the `selectableElements` editor config option:
11
+ * they are the `elementSelectable` editor config option:
12
12
  *
13
13
  * ```ts
14
- * selectableElements: ['callout', 'divider', element => element.hasAttribute('card')];
14
+ * elementSelectable: ['callout', 'divider', element => element.hasAttribute('card')];
15
15
  * ```
16
16
  *
17
17
  * An element is selected (the model selection is *on* it, and the view has a fake selection and the
@@ -40,7 +40,7 @@ export default class ElementSelectable extends Plugin {
40
40
  init(): void;
41
41
  afterInit(): void;
42
42
  /**
43
- * Makes more elements selectable, as the `selectableElements` option does: a name of a model element, or a filter.
43
+ * Makes more elements selectable, as the `elementSelectable` option does: a name of a model element, or a filter.
44
44
  * Used by features that add elements, e.g. the element schema.
45
45
  */
46
46
  add(...matchers: ElementSelectableMatcher[]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"elementSelectable.d.ts","sourceRoot":"","sources":["../src/elementSelectable.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,MAAM,EAKN,KAAK,YAAY,EAKjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAqC,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAGjG;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC;AAOtD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,MAAM;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAC5D,OAAO,CAAC,SAAS,CAA4B;IAE7C,WAAkB,UAAU,IAAI,mBAAmB,CAElD;IAEM,IAAI,IAAI,IAAI;IAoFZ,SAAS,IAAI,IAAI;IAIxB;;;OAGG;IACI,GAAG,CAAC,GAAG,QAAQ,EAAE,wBAAwB,EAAE,GAAG,IAAI;IAKzD;;OAEG;IACI,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAInD;;OAEG;IACH,OAAO,CAAC,OAAO;IAMf;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiCvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,KAAK;CAeb"}
1
+ {"version":3,"file":"elementSelectable.d.ts","sourceRoot":"","sources":["../src/elementSelectable.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,MAAM,EAKN,KAAK,YAAY,EAKjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAyD,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAGrH;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC;AAOtD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,MAAM;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAC5D,OAAO,CAAC,SAAS,CAA4B;IAE7C,WAAkB,UAAU,IAAI,mBAAmB,CAElD;IAEM,IAAI,IAAI,IAAI;IAoFZ,SAAS,IAAI,IAAI;IAaxB;;;OAGG;IACI,GAAG,CAAC,GAAG,QAAQ,EAAE,wBAAwB,EAAE,GAAG,IAAI;IAKzD;;OAEG;IACI,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IAInD;;OAEG;IACH,OAAO,CAAC,OAAO;IAMf;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiCvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,KAAK;CAeb"}
@@ -1,5 +1,5 @@
1
1
  import { MouseObserver, Plugin, keyCodes, isArrowKeyCode, isForwardArrowKeyCode } from 'ckeditor5';
2
- import { getElementsAround, matchesElement } from 'ckeditor5-elements-core';
2
+ import { getElementsAround, keyboardPriorities, matchesElement } from 'ckeditor5-elements-core';
3
3
  import { findLeaveTarget, findSelectableAfterStep, findSelectableAround } from './navigation.js';
4
4
  /**
5
5
  * The class of the selected element in the editing view.
@@ -8,10 +8,10 @@ const SELECTED_CLASS = 'ck-elements-selected';
8
8
  /**
9
9
  * Makes elements selectable as a whole, which is what CKEditor's widgets do, without them: it does not change the view
10
10
  * of the element, and does not need the `Widget` plugin. The elements are matched by name or by a filter function, and
11
- * they are the `selectableElements` editor config option:
11
+ * they are the `elementSelectable` editor config option:
12
12
  *
13
13
  * ```ts
14
- * selectableElements: ['callout', 'divider', element => element.hasAttribute('card')];
14
+ * elementSelectable: ['callout', 'divider', element => element.hasAttribute('card')];
15
15
  * ```
16
16
  *
17
17
  * An element is selected (the model selection is *on* it, and the view has a fake selection and the
@@ -43,7 +43,7 @@ export default class ElementSelectable extends Plugin {
43
43
  const editor = this.editor;
44
44
  const view = editor.editing.view;
45
45
  const viewDocument = view.document;
46
- this._matchers.push(...(editor.config.get('selectableElements') ?? []));
46
+ this._matchers.push(...(editor.config.get('elementSelectable') ?? []));
47
47
  // The selection of an element is a fake one, as for widgets: the browser does not draw the selection on its own.
48
48
  editor.editing.downcastDispatcher.on('selection', (evt, data, conversionApi) => {
49
49
  const element = data.selection.getSelectedElement();
@@ -68,9 +68,9 @@ export default class ElementSelectable extends Plugin {
68
68
  this._select(element);
69
69
  }
70
70
  });
71
- // The arrow keys are handled on `keydown`, with a high priority, and not as the `arrowKey` event: that one bubbles
72
- // from the selection, and CKEditor's widgets (loaded by other features, e.g. the clipboard) handle it for every
73
- // object, in a context that is reached before this plugin could.
71
+ // The arrow keys are handled on `keydown`, before CKEditor's widgets, and not as the `arrowKey` event: that one
72
+ // bubbles from the selection, and CKEditor's widgets (loaded by other features, e.g. the clipboard) handle it for
73
+ // every object, in a context that is reached before this plugin could.
74
74
  this.listenTo(viewDocument, 'keydown', (evt, data) => {
75
75
  const isPlain = !data.shiftKey && !data.ctrlKey && !data.altKey && !data.metaKey;
76
76
  if (this.isEnabled &&
@@ -80,8 +80,8 @@ export default class ElementSelectable extends Plugin {
80
80
  data.preventDefault();
81
81
  evt.stop();
82
82
  }
83
- }, { priority: 'high' });
84
- // Esc has a low priority: what else uses it, e.g. closing a balloon, goes first. Editor keystrokes (`cancel()`)
83
+ }, { priority: keyboardPriorities.selectable });
84
+ // Esc goes after what else uses it, e.g. closing a balloon. Editor keystrokes (`cancel()`)
85
85
  // do not stop this event, they prevent the default action of the DOM event: then Esc is handled already.
86
86
  this.listenTo(viewDocument, 'keydown', (evt, data) => {
87
87
  const isFree = data.keystroke === keyCodes.esc && !data.domEvent.defaultPrevented;
@@ -91,13 +91,17 @@ export default class ElementSelectable extends Plugin {
91
91
  data.preventDefault();
92
92
  evt.stop();
93
93
  }
94
- }, { priority: 'low' });
94
+ }, { priority: keyboardPriorities.selectableEsc });
95
95
  }
96
96
  afterInit() {
97
- this._makeSelectable(this._matchers);
97
+ // Before the data is loaded, once all the elements are registered: also the ones that other plugins register in
98
+ // `afterInit()`, e.g. the element schema, whichever plugin comes first.
99
+ this.listenTo(this.editor.data, 'init', () => {
100
+ this._makeSelectable(this._matchers);
101
+ }, { priority: 'high' });
98
102
  }
99
103
  /**
100
- * Makes more elements selectable, as the `selectableElements` option does: a name of a model element, or a filter.
104
+ * Makes more elements selectable, as the `elementSelectable` option does: a name of a model element, or a filter.
101
105
  * Used by features that add elements, e.g. the element schema.
102
106
  */
103
107
  add(...matchers) {
@@ -1 +1 @@
1
- {"version":3,"file":"elementSelectable.js","sourceRoot":"","sources":["../src/elementSelectable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"elementSelectable.js","sourceRoot":"","sources":["../src/elementSelectable.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,MAAM,EACN,QAAQ,EACR,cAAc,EACd,qBAAqB,EAOrB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAuB,MAAM,yBAAyB,CAAC;AACrH,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAQjG;;GAEG;AACH,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,MAAM;IACnC,SAAS,GAA+B,EAAE,CAAC;IACpD,SAAS,GAAuB,IAAI,CAAC;IAEtC,MAAM,KAAK,UAAU;QAC3B,OAAO,mBAA4B,CAAC;IACrC,CAAC;IAEM,IAAI;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAEvE,iHAAiH;QACjH,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAyB,WAAW,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;YACtG,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC;YACpD,MAAM,WAAW,GAChB,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAE7F,IAAI,OAAO,IAAI,WAAW,IAAI,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC;gBAC7F,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;oBAClF,IAAI,EAAE,IAAI;oBACV,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,GAAG;iBAC1B,CAAC,CAAC;YACJ,CAAC;QACF,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CACnC,WAAW,EACX,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;YAC5B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC/E,CAAC,EACD,EAAE,QAAQ,EAAE,KAAK,EAAE,CACnB,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,CAA6B,YAAY,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAClF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAExE,IAAI,OAAO,EAAE,CAAC;gBACb,2EAA2E;gBAC3E,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,gHAAgH;QAChH,kHAAkH;QAClH,uEAAuE;QACvE,IAAI,CAAC,QAAQ,CACZ,YAAY,EACZ,SAAS,EACT,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAEjF,IACC,IAAI,CAAC,SAAS;gBACd,OAAO;gBACP,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC5B,IAAI,CAAC,eAAe,CACnB,IAAI,CAAC,OAAO,EACZ,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAC3E,EACA,CAAC;gBACF,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,GAAG,CAAC,IAAI,EAAE,CAAC;YACZ,CAAC;QACF,CAAC,EACD,EAAE,QAAQ,EAAE,kBAAkB,CAAC,UAAU,EAAE,CAC3C,CAAC;QAEF,2FAA2F;QAC3F,yGAAyG;QACzG,IAAI,CAAC,QAAQ,CACZ,YAAY,EACZ,SAAS,EACT,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAClF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAErE,IAAI,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACtB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,GAAG,CAAC,IAAI,EAAE,CAAC;YACZ,CAAC;QACF,CAAC,EACD,EAAE,QAAQ,EAAE,kBAAkB,CAAC,aAAa,EAAE,CAC9C,CAAC;IACH,CAAC;IAEM,SAAS;QACf,gHAAgH;QAChH,wEAAwE;QACxE,IAAI,CAAC,QAAQ,CACZ,IAAI,CAAC,MAAM,CAAC,IAAI,EAChB,MAAM,EACN,GAAG,EAAE;YACJ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC,EACD,EAAE,QAAQ,EAAE,MAAM,EAAE,CACpB,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,GAAG,CAAC,GAAG,QAAoC;QACjD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACI,YAAY,CAAC,OAAqB;QACxC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACvG,CAAC;IAED;;OAEG;IACK,OAAO,CAAC,OAAqB;QACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACjC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,QAA6C;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAExC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAChC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;OAGG;IACK,aAAa,CAAC,MAAmB;QACxC,KAAK,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YAC9F,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/E,OAAO,OAAO,CAAC;YAChB,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,OAAe,EAAE,SAAkB;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAChC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,kBAAkB,EAAE,CAAC;QAChD,MAAM,YAAY,GAAG,CAAC,OAAqB,EAAW,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAEpF,IAAI,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YAEzE,IAAI,MAAM,EAAE,CAAC;gBACZ,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;oBACrB,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;YACJ,CAAC;YAED,+FAA+F;YAC/F,OAAO,IAAI,CAAC;QACb,CAAC;QAED,oFAAoF;QACpF,MAAM,YAAY,GAAG,OAAO,KAAK,QAAQ,CAAC,SAAS,IAAI,OAAO,KAAK,QAAQ,CAAC,UAAU,CAAC;QACvF,MAAM,IAAI,GACT,YAAY,IAAI,SAAS,CAAC,WAAW;YACpC,CAAC,CAAC,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC;YACpE,CAAC,CAAC,IAAI,CAAC;QAET,IAAI,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,OAAO,CAAC,CAAC,IAAI,CAAC;IACf,CAAC;IAED;;OAEG;IACK,WAAW;QAClB,OAAO,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,MAA0B,EAAE,QAA4B;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1C,MAAM,OAAO,GAAG,QAAQ,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvE,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;IACzB,CAAC;CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEzG;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,cAAc,GAAG,sBAAsB,EAClD,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,YAAY,GACxB,YAAY,GAAG,IAAI,CAuBrB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,YAAY,GACxB,UAAU,GAAG,IAAI,CAOnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,cAAc,GAAG,sBAAsB,EAClD,YAAY,EAAE,YAAY,GACxB,YAAY,GAAG,IAAI,CAcrB"}
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGzG;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,cAAc,GAAG,sBAAsB,EAClD,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,YAAY,GACxB,YAAY,GAAG,IAAI,CAuBrB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,YAAY,GACxB,UAAU,GAAG,IAAI,CAOnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,cAAc,GAAG,sBAAsB,EAClD,YAAY,EAAE,YAAY,GACxB,YAAY,GAAG,IAAI,CAUrB"}
@@ -1,3 +1,4 @@
1
+ import { getAncestorElements } from 'ckeditor5-elements-core';
1
2
  /**
2
3
  * Returns the selectable element that the cursor reaches with one step in the direction, as the arrow key moves it, or
3
4
  * `null`: the next element is not selectable, or the step stays in the text. The step is CKEditor's: a character in the
@@ -38,9 +39,9 @@ export function findLeaveTarget(model, element, isForward, isSelectable) {
38
39
  */
39
40
  export function findSelectableAround(selection, isSelectable) {
40
41
  const selected = selection.getSelectedElement();
41
- for (let node = selected ? selected.parent : selection.getFirstPosition()?.parent; node?.is('element') && !node.is('rootElement'); node = node.parent) {
42
- if (isSelectable(node)) {
43
- return node;
42
+ for (const element of getAncestorElements(selected ? selected.parent : selection.getFirstPosition()?.parent)) {
43
+ if (isSelectable(element)) {
44
+ return element;
44
45
  }
45
46
  }
46
47
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACtC,KAAY,EACZ,SAAkD,EAClD,SAAkB,EAClB,YAA0B;IAE1B,MAAM,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAE/C,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IAEhF,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,KAAK,GAAG,SAAS;QACtB,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;QACjD,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAEnD,mHAAmH;IACnH,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC;IAE5D,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;QACjG,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACpE,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC9B,KAAY,EACZ,OAAqB,EACrB,SAAkB,EAClB,YAA0B;IAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;IAEvE,OAAO,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC;QACzD,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC;QAChC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACxF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CACnC,SAAkD,EAClD,YAA0B;IAE1B,MAAM,QAAQ,GAAG,SAAS,CAAC,kBAAkB,EAAE,CAAC;IAEhD,KACC,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAC5E,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,EAC9C,IAAI,GAAG,IAAI,CAAC,MAAM,EACjB,CAAC;QACF,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAO9D;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACtC,KAAY,EACZ,SAAkD,EAClD,SAAkB,EAClB,YAA0B;IAE1B,MAAM,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAE/C,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IAEhF,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,KAAK,GAAG,SAAS;QACtB,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;QACjD,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAEnD,mHAAmH;IACnH,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC;IAE5D,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;QACjG,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACpE,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC9B,KAAY,EACZ,OAAqB,EACrB,SAAkB,EAClB,YAA0B;IAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;IAEvE,OAAO,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC;QACzD,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC;QAChC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACxF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CACnC,SAAkD,EAClD,YAA0B;IAE1B,MAAM,QAAQ,GAAG,SAAS,CAAC,kBAAkB,EAAE,CAAC;IAEhD,KAAK,MAAM,OAAO,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;QAC9G,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,OAAO,CAAC;QAChB,CAAC;IACF,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ckeditor5-elements-interaction",
3
- "version": "49.0.0-alpha.4",
3
+ "version": "49.0.0",
4
4
  "description": "Element interaction for CKEditor 5, without CKEditor's widgets: select an element as a whole by a click or by the arrow keys, and react to clicks and double clicks on elements.",
5
5
  "keywords": [
6
6
  "ckeditor",
@@ -41,7 +41,7 @@
41
41
  "*.css"
42
42
  ],
43
43
  "dependencies": {
44
- "ckeditor5-elements-core": "49.0.0-alpha.4"
44
+ "ckeditor5-elements-core": "49.0.0"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "ckeditor5": "^49.0.0"
@@ -16,11 +16,11 @@ declare module 'ckeditor5' {
16
16
  * The elements that can be selected as a whole: names of model elements, or filter functions. See
17
17
  * {@link ElementSelectable}.
18
18
  */
19
- selectableElements?: ElementSelectableMatcher[];
19
+ elementSelectable?: ElementSelectableMatcher[];
20
20
 
21
21
  /**
22
22
  * The elements that react to clicks and double clicks. See {@link ElementClickable}.
23
23
  */
24
- elementClickables?: ElementClickableDefinition[];
24
+ elementClickable?: ElementClickableDefinition[];
25
25
  }
26
26
  }
@@ -37,11 +37,11 @@ export interface ElementClickableDefinition {
37
37
 
38
38
  /**
39
39
  * Calls a function when an element is clicked or double-clicked, with the model element. Elements are matched by name or
40
- * by a filter function, and the definitions are the `elementClickables` editor config option (see
40
+ * by a filter function, and the definitions are the `elementClickable` editor config option (see
41
41
  * {@link ElementClickableDefinition}):
42
42
  *
43
43
  * ```ts
44
- * elementClickables: [
44
+ * elementClickable: [
45
45
  * { element: 'imageBlock', callback: (element, editor) => console.log(element.getAttribute('src')) },
46
46
  * { element: element => element.name.startsWith('heading'), event: 'dblclick', callback: edit }
47
47
  * ];
@@ -94,7 +94,7 @@ export default class ElementClickable extends Plugin {
94
94
  event: ElementClickableEvent = 'click'
95
95
  ): { element: ModelElement; definition: ElementClickableDefinition } | null {
96
96
  const mapper = this.editor.editing.mapper;
97
- const definitions = (this.editor.config.get('elementClickables') ?? []).filter(
97
+ const definitions = (this.editor.config.get('elementClickable') ?? []).filter(
98
98
  definition => (definition.event ?? 'click') === event
99
99
  );
100
100
 
@@ -11,7 +11,7 @@ import {
11
11
  type ViewDowncastWriter,
12
12
  type ViewElement
13
13
  } from 'ckeditor5';
14
- import { getElementsAround, matchesElement, type ElementMatcher } from 'ckeditor5-elements-core';
14
+ import { getElementsAround, keyboardPriorities, matchesElement, type ElementMatcher } from 'ckeditor5-elements-core';
15
15
  import { findLeaveTarget, findSelectableAfterStep, findSelectableAround } from './navigation.js';
16
16
 
17
17
  /**
@@ -28,10 +28,10 @@ const SELECTED_CLASS = 'ck-elements-selected';
28
28
  /**
29
29
  * Makes elements selectable as a whole, which is what CKEditor's widgets do, without them: it does not change the view
30
30
  * of the element, and does not need the `Widget` plugin. The elements are matched by name or by a filter function, and
31
- * they are the `selectableElements` editor config option:
31
+ * they are the `elementSelectable` editor config option:
32
32
  *
33
33
  * ```ts
34
- * selectableElements: ['callout', 'divider', element => element.hasAttribute('card')];
34
+ * elementSelectable: ['callout', 'divider', element => element.hasAttribute('card')];
35
35
  * ```
36
36
  *
37
37
  * An element is selected (the model selection is *on* it, and the view has a fake selection and the
@@ -66,7 +66,7 @@ export default class ElementSelectable extends Plugin {
66
66
  const view = editor.editing.view;
67
67
  const viewDocument = view.document;
68
68
 
69
- this._matchers.push(...(editor.config.get('selectableElements') ?? []));
69
+ this._matchers.push(...(editor.config.get('elementSelectable') ?? []));
70
70
 
71
71
  // The selection of an element is a fake one, as for widgets: the browser does not draw the selection on its own.
72
72
  editor.editing.downcastDispatcher.on<DowncastSelectionEvent>('selection', (evt, data, conversionApi) => {
@@ -101,9 +101,9 @@ export default class ElementSelectable extends Plugin {
101
101
  }
102
102
  });
103
103
 
104
- // The arrow keys are handled on `keydown`, with a high priority, and not as the `arrowKey` event: that one bubbles
105
- // from the selection, and CKEditor's widgets (loaded by other features, e.g. the clipboard) handle it for every
106
- // object, in a context that is reached before this plugin could.
104
+ // The arrow keys are handled on `keydown`, before CKEditor's widgets, and not as the `arrowKey` event: that one
105
+ // bubbles from the selection, and CKEditor's widgets (loaded by other features, e.g. the clipboard) handle it for
106
+ // every object, in a context that is reached before this plugin could.
107
107
  this.listenTo<ViewDocumentKeyDownEvent>(
108
108
  viewDocument,
109
109
  'keydown',
@@ -123,10 +123,10 @@ export default class ElementSelectable extends Plugin {
123
123
  evt.stop();
124
124
  }
125
125
  },
126
- { priority: 'high' }
126
+ { priority: keyboardPriorities.selectable }
127
127
  );
128
128
 
129
- // Esc has a low priority: what else uses it, e.g. closing a balloon, goes first. Editor keystrokes (`cancel()`)
129
+ // Esc goes after what else uses it, e.g. closing a balloon. Editor keystrokes (`cancel()`)
130
130
  // do not stop this event, they prevent the default action of the DOM event: then Esc is handled already.
131
131
  this.listenTo<ViewDocumentKeyDownEvent>(
132
132
  viewDocument,
@@ -141,16 +141,25 @@ export default class ElementSelectable extends Plugin {
141
141
  evt.stop();
142
142
  }
143
143
  },
144
- { priority: 'low' }
144
+ { priority: keyboardPriorities.selectableEsc }
145
145
  );
146
146
  }
147
147
 
148
148
  public afterInit(): void {
149
- this._makeSelectable(this._matchers);
149
+ // Before the data is loaded, once all the elements are registered: also the ones that other plugins register in
150
+ // `afterInit()`, e.g. the element schema, whichever plugin comes first.
151
+ this.listenTo(
152
+ this.editor.data,
153
+ 'init',
154
+ () => {
155
+ this._makeSelectable(this._matchers);
156
+ },
157
+ { priority: 'high' }
158
+ );
150
159
  }
151
160
 
152
161
  /**
153
- * Makes more elements selectable, as the `selectableElements` option does: a name of a model element, or a filter.
162
+ * Makes more elements selectable, as the `elementSelectable` option does: a name of a model element, or a filter.
154
163
  * Used by features that add elements, e.g. the element schema.
155
164
  */
156
165
  public add(...matchers: ElementSelectableMatcher[]): void {
package/src/navigation.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { Model, ModelDocumentSelection, ModelElement, ModelRange, ModelSelection } from 'ckeditor5';
2
+ import { getAncestorElements } from 'ckeditor5-elements-core';
2
3
 
3
4
  /**
4
5
  * Whether an element can be selected as a whole.
@@ -68,13 +69,9 @@ export function findSelectableAround(
68
69
  ): ModelElement | null {
69
70
  const selected = selection.getSelectedElement();
70
71
 
71
- for (
72
- let node = selected ? selected.parent : selection.getFirstPosition()?.parent;
73
- node?.is('element') && !node.is('rootElement');
74
- node = node.parent
75
- ) {
76
- if (isSelectable(node)) {
77
- return node;
72
+ for (const element of getAncestorElements(selected ? selected.parent : selection.getFirstPosition()?.parent)) {
73
+ if (isSelectable(element)) {
74
+ return element;
78
75
  }
79
76
  }
80
77