@flogeez/angular-tiptap-editor 3.5.4 → 3.5.5

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.
@@ -0,0 +1,14 @@
1
+ export function shallowArrayEqual(a, b) {
2
+ return a === b || (a.length === b.length && a.every((item, i) => item === b[i]));
3
+ }
4
+ export function shallowObjectEqual(a, b) {
5
+ if (a === b) {
6
+ return true;
7
+ }
8
+ const aKeys = Object.keys(a);
9
+ const bKeys = Object.keys(b);
10
+ return (aKeys.length === bKeys.length &&
11
+ aKeys.every(key => Object.prototype.hasOwnProperty.call(b, key) &&
12
+ a[key] === b[key]));
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWVxdWFsaXR5LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10aXB0YXAtZWRpdG9yL3NyYy9saWIvdXRpbHMvYXRlLWVxdWFsaXR5LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxpQkFBaUIsQ0FBSSxDQUFlLEVBQUUsQ0FBZTtJQUNuRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25GLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQW1CLENBQUksRUFBRSxDQUFJO0lBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE9BQU8sQ0FDTCxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNO1FBQzdCLEtBQUssQ0FBQyxLQUFLLENBQ1QsR0FBRyxDQUFDLEVBQUUsQ0FDSixNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztZQUMzQyxDQUE2QixDQUFDLEdBQUcsQ0FBQyxLQUFNLENBQTZCLENBQUMsR0FBRyxDQUFDLENBQzlFLENBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gc2hhbGxvd0FycmF5RXF1YWw8VD4oYTogcmVhZG9ubHkgVFtdLCBiOiByZWFkb25seSBUW10pOiBib29sZWFuIHtcbiAgcmV0dXJuIGEgPT09IGIgfHwgKGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLmV2ZXJ5KChpdGVtLCBpKSA9PiBpdGVtID09PSBiW2ldKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93T2JqZWN0RXF1YWw8VCBleHRlbmRzIG9iamVjdD4oYTogVCwgYjogVCk6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGFLZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gIGNvbnN0IGJLZXlzID0gT2JqZWN0LmtleXMoYik7XG4gIHJldHVybiAoXG4gICAgYUtleXMubGVuZ3RoID09PSBiS2V5cy5sZW5ndGggJiZcbiAgICBhS2V5cy5ldmVyeShcbiAgICAgIGtleSA9PlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwga2V5KSAmJlxuICAgICAgICAoYSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSA9PT0gKGIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV1cbiAgICApXG4gICk7XG59XG4iXX0=
@@ -7297,6 +7297,16 @@ class AteColorBubbleMenuComponent extends AteBaseSubBubbleMenu {
7297
7297
  }
7298
7298
  return false;
7299
7299
  }
7300
+ findColoredElementInContent(start, contentRoot) {
7301
+ let current = start;
7302
+ while (current && current !== contentRoot && contentRoot.contains(current)) {
7303
+ if (current.matches('[style*="color"], [style*="background"], mark')) {
7304
+ return current;
7305
+ }
7306
+ current = current.parentElement;
7307
+ }
7308
+ return null;
7309
+ }
7300
7310
  getSelectionRect() {
7301
7311
  const trigger = this.colorPickerSvc.menuTrigger();
7302
7312
  const ed = this.editor();
@@ -7316,7 +7326,7 @@ class AteColorBubbleMenuComponent extends AteBaseSubBubbleMenu {
7316
7326
  try {
7317
7327
  const { node } = ed.view.domAtPos(from);
7318
7328
  const element = node instanceof Element ? node : node.parentElement;
7319
- const colorElement = element?.closest('[style*="color"], [style*="background"], mark');
7329
+ const colorElement = this.findColoredElementInContent(element, ed.view.dom);
7320
7330
  if (colorElement) {
7321
7331
  return colorElement.getBoundingClientRect();
7322
7332
  }
@@ -8848,6 +8858,20 @@ const AteBlockControlsExtension = Extension.create({
8848
8858
  },
8849
8859
  });
8850
8860
 
8861
+ function shallowArrayEqual(a, b) {
8862
+ return a === b || (a.length === b.length && a.every((item, i) => item === b[i]));
8863
+ }
8864
+ function shallowObjectEqual(a, b) {
8865
+ if (a === b) {
8866
+ return true;
8867
+ }
8868
+ const aKeys = Object.keys(a);
8869
+ const bKeys = Object.keys(b);
8870
+ return (aKeys.length === bKeys.length &&
8871
+ aKeys.every(key => Object.prototype.hasOwnProperty.call(b, key) &&
8872
+ a[key] === b[key]));
8873
+ }
8874
+
8851
8875
  function transformBooleanInput(val) {
8852
8876
  if (val === undefined || val === null) {
8853
8877
  return undefined;
@@ -9133,10 +9157,12 @@ class AngularTiptapEditorComponent {
9133
9157
  this.finalShowWordCount = computed(() => this.showWordCount() ?? this.effectiveConfig().showWordCount ?? true);
9134
9158
  this.finalLocale = computed(() => this.locale() ?? this.effectiveConfig().locale);
9135
9159
  // Extensions & Options
9136
- this.finalTiptapExtensions = computed(() => this.tiptapExtensions() ?? this.effectiveConfig().tiptapExtensions ?? []);
9137
- this.finalTiptapOptions = computed(() => this.tiptapOptions() ?? this.effectiveConfig().tiptapOptions ?? {});
9160
+ this.finalTiptapExtensions = computed(() => this.tiptapExtensions() ?? this.effectiveConfig().tiptapExtensions ?? [], { equal: shallowArrayEqual });
9161
+ this.finalTiptapOptions = computed(() => this.tiptapOptions() ?? this.effectiveConfig().tiptapOptions ?? {}, { equal: shallowObjectEqual });
9138
9162
  this.finalStateCalculators = computed(() => this.stateCalculators() ?? this.effectiveConfig().stateCalculators ?? []);
9139
- this.finalAngularNodesConfig = computed(() => this.effectiveConfig().angularNodes ?? []);
9163
+ this.finalAngularNodesConfig = computed(() => this.effectiveConfig().angularNodes ?? [], {
9164
+ equal: shallowArrayEqual,
9165
+ });
9140
9166
  // Image Upload
9141
9167
  this.finalImageUploadConfig = computed(() => {
9142
9168
  const fromInput = this.imageUpload();