diff --git a/demo/cross-iframe-sand.html b/demo/cross-iframe-sand.html new file mode 100644 index 0000000..554c024 --- /dev/null +++ b/demo/cross-iframe-sand.html @@ -0,0 +1,120 @@ + + + + + + Falling Sand Demo + + + +
+
1 Smoke
+
2 Water
+
3 Lava
+
4 Sand
+
5 Plant
+
6 Stone
+
7 Wall
+
8 Ice
+
9 Fire
+
+ + +

Sanding

+ + + +
+ + + + + + + + + + + + diff --git a/demo/sticky-html-arrow.html b/demo/sticky-html-arrow.html index 7360912..1540128 100644 --- a/demo/sticky-html-arrow.html +++ b/demo/sticky-html-arrow.html @@ -18,6 +18,7 @@ folk-shape { border: 1px solid black; border-radius: 3px; + background-color: rgba(119, 119, 119, 1); } diff --git a/src/folk-base-set.ts b/src/folk-base-set.ts index e1cc77c..1f7c6c3 100644 --- a/src/folk-base-set.ts +++ b/src/folk-base-set.ts @@ -1,7 +1,7 @@ import { property, state } from '@lit/reactive-element/decorators.js'; import { ClientRectObserverEntry } from './common/client-rect-observer.ts'; import { FolkElement } from './common/folk-element.ts'; -import { FolkObserver } from './common/folk-observer.ts'; +import { FolkObserver, parseDeepCSSSelector } from './common/folk-observer.ts'; import { css, CSSResultGroup, PropertyValues } from '@lit/reactive-element'; const folkObserver = new FolkObserver(); @@ -64,15 +64,16 @@ export class FolkBaseSet extends FolkElement { #observeSources() { const childElements = new Set(this.children); - const elements = this.sources ? document.querySelectorAll(this.sources) : []; - const sourceElements = new Set(elements).union(childElements); + const elements = this.sources ? parseDeepCSSSelector(this.sources) : []; + const elementsMap = new Map(elements); + const sourceElements = new Set(elements.map((el) => el[0])).union(childElements); const elementsToObserve = sourceElements.difference(this.sourceElements); const elementsToUnobserve = this.sourceElements.difference(sourceElements); this.unobserveSources(elementsToUnobserve); for (const el of elementsToObserve) { - folkObserver.observe(el, this.#sourcesCallback); + folkObserver.observe(el, this.#sourcesCallback, { iframeSelector: elementsMap.get(el) }); } this.sourceElements = sourceElements;