griffincss-ui 0.26.1 → 0.26.2

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.
@@ -205,11 +205,14 @@
205
205
 
206
206
  // --- Рост окна ----------------------------------------------------------
207
207
 
208
- // Пока идёт анимация, наблюдение молчит: промежуточные высоты — её же.
209
208
  // Открытие и закрытие (0 ↔ высота) — не рост; мелочь до порога — тоже.
209
+ // Анимация меняет размер самого окна, поэтому на её время окно снято
210
+ // с наблюдения: начатая здесь при живом наблюдении, она давала на window
211
+ // «ResizeObserver loop completed with undelivered notifications».
212
+ // Промежуточные высоты — её же, слушать их незачем. Вернувшись,
213
+ // наблюдение первым сообщает текущую высоту: если за время анимации
214
+ // пришло ещё содержимое, окно дорастёт следующей.
210
215
  function onResize() {
211
- if (growing) return;
212
-
213
216
  var next = el.getBoundingClientRect().height;
214
217
  var prev = known;
215
218
 
@@ -221,8 +224,15 @@
221
224
 
222
225
  if (!ms || typeof el.animate !== 'function') return;
223
226
 
227
+ grow.unobserve(el);
224
228
  growing = el.animate([{ blockSize: prev + 'px' }, { blockSize: next + 'px' }], { duration: ms, easing: 'ease' });
225
- growing.onfinish = growing.oncancel = function () { growing = null; };
229
+ growing.onfinish = growing.oncancel = settle;
230
+ }
231
+
232
+ // После destroy() наблюдателя нет: отмена приходит позже и не вернёт его.
233
+ function settle() {
234
+ growing = null;
235
+ if (grow) grow.observe(el);
226
236
  }
227
237
 
228
238
  // --- Hash ---------------------------------------------------------------
@@ -300,7 +310,7 @@
300
310
  var at = stack.indexOf(record);
301
311
  if (at !== -1) stack.splice(at, 1);
302
312
 
303
- if (grow) grow.disconnect();
313
+ if (grow) { grow.disconnect(); grow = null; }
304
314
  if (growing) growing.cancel();
305
315
  relock();
306
316
  restoreMedia();