angular-three 1.8.1 → 1.9.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.
@@ -1040,6 +1040,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImpor
1040
1040
  type: Input
1041
1041
  }] } });
1042
1042
 
1043
+ class NgtParent extends NgtCommonDirective {
1044
+ constructor() {
1045
+ super(...arguments);
1046
+ this.injectedParent = null;
1047
+ }
1048
+ set parent(parent) {
1049
+ if (!parent)
1050
+ return;
1051
+ this.injected = false;
1052
+ this.injectedParent = parent;
1053
+ this.createView();
1054
+ }
1055
+ get parent() {
1056
+ if (this.validate()) {
1057
+ this.injected = true;
1058
+ return this.injectedParent;
1059
+ }
1060
+ return null;
1061
+ }
1062
+ validate() {
1063
+ return !this.injected && !!this.injectedParent;
1064
+ }
1065
+ }
1066
+ NgtParent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtParent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1067
+ NgtParent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: NgtParent, isStandalone: true, selector: "[parent]", inputs: { parent: "parent" }, usesInheritance: true, ngImport: i0 });
1068
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtParent, decorators: [{
1069
+ type: Directive,
1070
+ args: [{ selector: '[parent]', standalone: true }]
1071
+ }], propDecorators: { parent: [{
1072
+ type: Input
1073
+ }] } });
1074
+
1043
1075
  function releaseInternalPointerCapture(capturedMap, obj, captures, pointerId) {
1044
1076
  const captureData = captures.get(obj);
1045
1077
  if (captureData) {
@@ -1464,9 +1496,9 @@ function attachThreeChild(parent, child) {
1464
1496
  if (cLS.isRaw) {
1465
1497
  cLS.parent = parent;
1466
1498
  // at this point we don't have rawValue yet, so we bail and wait until the Renderer recalls attach
1467
- if (child.__ngt_renderer__[10 /* NgtRendererClassId.rawValue */] === undefined)
1499
+ if (child.__ngt_renderer__[11 /* NgtRendererClassId.rawValue */] === undefined)
1468
1500
  return;
1469
- attach(parent, child.__ngt_renderer__[10 /* NgtRendererClassId.rawValue */], attachProp);
1501
+ attach(parent, child.__ngt_renderer__[11 /* NgtRendererClassId.rawValue */], attachProp);
1470
1502
  }
1471
1503
  else {
1472
1504
  attach(parent, child, attachProp);
@@ -1593,6 +1625,7 @@ class NgtRendererStore {
1593
1625
  const state = [
1594
1626
  type,
1595
1627
  null,
1628
+ null,
1596
1629
  [],
1597
1630
  false,
1598
1631
  undefined,
@@ -1614,7 +1647,7 @@ class NgtRendererStore {
1614
1647
  // assign injectorFactory on non-three type since
1615
1648
  // rendererNode is an instance of DOM Node
1616
1649
  if (state[0 /* NgtRendererClassId.type */] !== 'three') {
1617
- state[13 /* NgtRendererClassId.injectorFactory */] = () => getDebugNode(rendererNode).injector;
1650
+ state[14 /* NgtRendererClassId.injectorFactory */] = () => getDebugNode(rendererNode).injector;
1618
1651
  }
1619
1652
  if (state[0 /* NgtRendererClassId.type */] === 'comment') {
1620
1653
  // we attach an arrow function to the Comment node
@@ -1631,9 +1664,9 @@ class NgtRendererStore {
1631
1664
  return rendererNode;
1632
1665
  }
1633
1666
  if (state[0 /* NgtRendererClassId.type */] === 'compound') {
1634
- state[7 /* NgtRendererClassId.queueOps */] = new Set();
1635
- state[8 /* NgtRendererClassId.attributes */] = {};
1636
- state[9 /* NgtRendererClassId.properties */] = {};
1667
+ state[8 /* NgtRendererClassId.queueOps */] = new Set();
1668
+ state[9 /* NgtRendererClassId.attributes */] = {};
1669
+ state[10 /* NgtRendererClassId.properties */] = {};
1637
1670
  return rendererNode;
1638
1671
  }
1639
1672
  return rendererNode;
@@ -1644,49 +1677,49 @@ class NgtRendererStore {
1644
1677
  }
1645
1678
  }
1646
1679
  addChild(node, child) {
1647
- if (!node.__ngt_renderer__[2 /* NgtRendererClassId.children */].includes(child)) {
1648
- node.__ngt_renderer__[2 /* NgtRendererClassId.children */].push(child);
1680
+ if (!node.__ngt_renderer__[3 /* NgtRendererClassId.children */].includes(child)) {
1681
+ node.__ngt_renderer__[3 /* NgtRendererClassId.children */].push(child);
1649
1682
  }
1650
1683
  }
1651
1684
  removeChild(node, child) {
1652
- const index = node.__ngt_renderer__[2 /* NgtRendererClassId.children */].findIndex((c) => child === c);
1685
+ const index = node.__ngt_renderer__[3 /* NgtRendererClassId.children */].findIndex((c) => child === c);
1653
1686
  if (index >= 0) {
1654
- node.__ngt_renderer__[2 /* NgtRendererClassId.children */].splice(index, 1);
1687
+ node.__ngt_renderer__[3 /* NgtRendererClassId.children */].splice(index, 1);
1655
1688
  }
1656
1689
  }
1657
1690
  setCompound(compound, instance) {
1658
1691
  const rS = compound.__ngt_renderer__;
1659
- rS[6 /* NgtRendererClassId.compounded */] = instance;
1660
- const attributes = Object.keys(rS[8 /* NgtRendererClassId.attributes */]);
1661
- const properties = Object.keys(rS[9 /* NgtRendererClassId.properties */]);
1692
+ rS[7 /* NgtRendererClassId.compounded */] = instance;
1693
+ const attributes = Object.keys(rS[9 /* NgtRendererClassId.attributes */]);
1694
+ const properties = Object.keys(rS[10 /* NgtRendererClassId.properties */]);
1662
1695
  if (attributes.length) {
1663
1696
  for (const key of attributes) {
1664
- this.applyAttribute(instance, key, rS[8 /* NgtRendererClassId.attributes */][key]);
1697
+ this.applyAttribute(instance, key, rS[9 /* NgtRendererClassId.attributes */][key]);
1665
1698
  }
1666
1699
  }
1667
1700
  if (properties.length) {
1668
1701
  for (const key of properties) {
1669
- this.applyProperty(instance, key, rS[9 /* NgtRendererClassId.properties */][key]);
1702
+ this.applyProperty(instance, key, rS[10 /* NgtRendererClassId.properties */][key]);
1670
1703
  }
1671
1704
  }
1672
1705
  this.executeOperation(compound);
1673
1706
  }
1674
1707
  queueOperation(node, op) {
1675
- node.__ngt_renderer__[7 /* NgtRendererClassId.queueOps */].add(op);
1708
+ node.__ngt_renderer__[8 /* NgtRendererClassId.queueOps */].add(op);
1676
1709
  }
1677
1710
  executeOperation(node, type = 'op') {
1678
1711
  const rS = node.__ngt_renderer__;
1679
- if (rS[7 /* NgtRendererClassId.queueOps */]?.size) {
1680
- rS[7 /* NgtRendererClassId.queueOps */].forEach((op) => {
1712
+ if (rS[8 /* NgtRendererClassId.queueOps */]?.size) {
1713
+ rS[8 /* NgtRendererClassId.queueOps */].forEach((op) => {
1681
1714
  if (op[0 /* NgtQueueOpClassId.type */] === type) {
1682
1715
  op[1 /* NgtQueueOpClassId.op */]();
1683
- rS[7 /* NgtRendererClassId.queueOps */].delete(op);
1716
+ rS[8 /* NgtRendererClassId.queueOps */].delete(op);
1684
1717
  }
1685
1718
  });
1686
1719
  }
1687
1720
  }
1688
1721
  processPortalContainer(portal) {
1689
- const injectorFactory = portal.__ngt_renderer__[13 /* NgtRendererClassId.injectorFactory */];
1722
+ const injectorFactory = portal.__ngt_renderer__[14 /* NgtRendererClassId.injectorFactory */];
1690
1723
  const injector = injectorFactory?.();
1691
1724
  if (!injector)
1692
1725
  return;
@@ -1696,11 +1729,11 @@ class NgtRendererStore {
1696
1729
  const portalContainer = portalStore.get('scene');
1697
1730
  if (!portalContainer)
1698
1731
  return;
1699
- portal.__ngt_renderer__[12 /* NgtRendererClassId.portalContainer */] = this.createNode('three', portalContainer);
1732
+ portal.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */] = this.createNode('three', portalContainer);
1700
1733
  }
1701
1734
  applyAttribute(node, name, value) {
1702
1735
  const rS = node.__ngt_renderer__;
1703
- if (rS[3 /* NgtRendererClassId.destroyed */])
1736
+ if (rS[4 /* NgtRendererClassId.destroyed */])
1704
1737
  return;
1705
1738
  if (name === SPECIAL_PROPERTIES.RENDER_PRIORITY) {
1706
1739
  // priority needs to be set as an attribute string so that they can be set as early as possible
@@ -1714,7 +1747,7 @@ class NgtRendererStore {
1714
1747
  }
1715
1748
  if (name === SPECIAL_PROPERTIES.COMPOUND) {
1716
1749
  // we set the compound property on instance node now so we know that this instance is being compounded
1717
- rS[4 /* NgtRendererClassId.compound */] = [value === '' || value === 'first', {}];
1750
+ rS[5 /* NgtRendererClassId.compound */] = [value === '' || value === 'first', {}];
1718
1751
  return;
1719
1752
  }
1720
1753
  if (name === SPECIAL_PROPERTIES.ATTACH) {
@@ -1733,25 +1766,25 @@ class NgtRendererStore {
1733
1766
  else if (!isNaN(Number(maybeCoerced))) {
1734
1767
  maybeCoerced = Number(maybeCoerced);
1735
1768
  }
1736
- rS[10 /* NgtRendererClassId.rawValue */] = maybeCoerced;
1769
+ rS[11 /* NgtRendererClassId.rawValue */] = maybeCoerced;
1737
1770
  return;
1738
1771
  }
1739
1772
  applyProps(node, { [name]: value });
1740
1773
  }
1741
1774
  applyProperty(node, name, value) {
1742
1775
  const rS = node.__ngt_renderer__;
1743
- if (rS[3 /* NgtRendererClassId.destroyed */])
1776
+ if (rS[4 /* NgtRendererClassId.destroyed */])
1744
1777
  return;
1745
1778
  // [ref]
1746
1779
  if (name === SPECIAL_PROPERTIES.REF && is.ref(value)) {
1747
- rS[11 /* NgtRendererClassId.ref */] = value;
1780
+ rS[12 /* NgtRendererClassId.ref */] = value;
1748
1781
  value.nativeElement = node;
1749
1782
  return;
1750
1783
  }
1751
1784
  const parent = getLocalState(node).parent || rS[1 /* NgtRendererClassId.parent */];
1752
1785
  // [rawValue]
1753
1786
  if (getLocalState(node).isRaw && name === SPECIAL_PROPERTIES.VALUE) {
1754
- rS[10 /* NgtRendererClassId.rawValue */] = value;
1787
+ rS[11 /* NgtRendererClassId.rawValue */] = value;
1755
1788
  if (parent)
1756
1789
  attachThreeChild(parent, node);
1757
1790
  return;
@@ -1763,7 +1796,7 @@ class NgtRendererStore {
1763
1796
  attachThreeChild(parent, node);
1764
1797
  return;
1765
1798
  }
1766
- const compound = rS[4 /* NgtRendererClassId.compound */];
1799
+ const compound = rS[5 /* NgtRendererClassId.compound */];
1767
1800
  if (compound?.[1 /* NgtCompoundClassId.props */] &&
1768
1801
  name in compound[1 /* NgtCompoundClassId.props */] &&
1769
1802
  !compound[0 /* NgtCompoundClassId.applyFirst */]) {
@@ -1792,51 +1825,52 @@ class NgtRendererStore {
1792
1825
  getClosestParentWithInstance(node) {
1793
1826
  let parent = node.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
1794
1827
  while (parent && parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] !== 'three') {
1795
- parent = parent.__ngt_renderer__[12 /* NgtRendererClassId.portalContainer */]
1796
- ? parent.__ngt_renderer__[12 /* NgtRendererClassId.portalContainer */]
1828
+ parent = parent.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */]
1829
+ ? parent.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */]
1797
1830
  : parent.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
1798
1831
  }
1799
1832
  return parent;
1800
1833
  }
1801
1834
  getClosestParentWithCompound(node) {
1802
- if (node.__ngt_renderer__[5 /* NgtRendererClassId.compoundParent */]) {
1803
- return node.__ngt_renderer__[5 /* NgtRendererClassId.compoundParent */];
1835
+ if (node.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */]) {
1836
+ return node.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */];
1804
1837
  }
1805
1838
  let parent = node.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
1806
1839
  if (parent &&
1807
1840
  parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'compound' &&
1808
- !parent.__ngt_renderer__[6 /* NgtRendererClassId.compounded */]) {
1841
+ !parent.__ngt_renderer__[7 /* NgtRendererClassId.compounded */]) {
1809
1842
  return parent;
1810
1843
  }
1811
1844
  while (parent &&
1812
1845
  (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' ||
1813
- !parent.__ngt_renderer__[5 /* NgtRendererClassId.compoundParent */] ||
1846
+ !parent.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */] ||
1814
1847
  parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] !== 'compound')) {
1815
1848
  parent = parent.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
1816
1849
  }
1817
1850
  if (!parent)
1818
1851
  return;
1819
1852
  if (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' &&
1820
- parent.__ngt_renderer__[5 /* NgtRendererClassId.compoundParent */]) {
1821
- return parent.__ngt_renderer__[5 /* NgtRendererClassId.compoundParent */];
1853
+ parent.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */]) {
1854
+ return parent.__ngt_renderer__[6 /* NgtRendererClassId.compoundParent */];
1822
1855
  }
1823
- if (!parent.__ngt_renderer__[6 /* NgtRendererClassId.compounded */]) {
1856
+ if (!parent.__ngt_renderer__[7 /* NgtRendererClassId.compounded */]) {
1824
1857
  return parent;
1825
1858
  }
1826
1859
  return null;
1827
1860
  }
1828
1861
  getCreationState() {
1829
1862
  const injectedArgs = this.firstNonInjectedDirective(NgtArgs)?.args || [];
1863
+ const injectedParent = this.firstNonInjectedDirective(NgtParent)?.parent || null;
1830
1864
  const store = this.tryGetPortalStore();
1831
- return { injectedArgs, store };
1865
+ return { injectedArgs, injectedParent, store };
1832
1866
  }
1833
1867
  destroy(node, parent) {
1834
1868
  const rS = node.__ngt_renderer__;
1835
- if (rS[3 /* NgtRendererClassId.destroyed */])
1869
+ if (rS[4 /* NgtRendererClassId.destroyed */])
1836
1870
  return;
1837
1871
  if (rS[0 /* NgtRendererClassId.type */] === 'three') {
1838
- rS[4 /* NgtRendererClassId.compound */] = undefined;
1839
- rS[5 /* NgtRendererClassId.compoundParent */] = undefined;
1872
+ rS[5 /* NgtRendererClassId.compound */] = undefined;
1873
+ rS[6 /* NgtRendererClassId.compoundParent */] = undefined;
1840
1874
  const localState = getLocalState(node);
1841
1875
  if (localState.objects) {
1842
1876
  localState.objects.value.forEach((obj) => this.destroy(obj, parent));
@@ -1863,7 +1897,7 @@ class NgtRendererStore {
1863
1897
  }
1864
1898
  }
1865
1899
  if (rS[0 /* NgtRendererClassId.type */] === 'comment') {
1866
- rS[13 /* NgtRendererClassId.injectorFactory */] = null;
1900
+ rS[14 /* NgtRendererClassId.injectorFactory */] = null;
1867
1901
  delete node['__ngt_renderer_add_comment__'];
1868
1902
  const index = this.comments.findIndex((comment) => comment === node);
1869
1903
  if (index > -1) {
@@ -1871,35 +1905,35 @@ class NgtRendererStore {
1871
1905
  }
1872
1906
  }
1873
1907
  if (rS[0 /* NgtRendererClassId.type */] === 'portal') {
1874
- rS[13 /* NgtRendererClassId.injectorFactory */] = null;
1908
+ rS[14 /* NgtRendererClassId.injectorFactory */] = null;
1875
1909
  const index = this.portals.findIndex((portal) => portal === node);
1876
1910
  if (index > -1) {
1877
1911
  this.portals.splice(index, 1);
1878
1912
  }
1879
1913
  }
1880
1914
  if (rS[0 /* NgtRendererClassId.type */] === 'compound') {
1881
- rS[6 /* NgtRendererClassId.compounded */] = undefined;
1882
- rS[8 /* NgtRendererClassId.attributes */] = null;
1883
- rS[9 /* NgtRendererClassId.properties */] = null;
1915
+ rS[7 /* NgtRendererClassId.compounded */] = undefined;
1916
+ rS[9 /* NgtRendererClassId.attributes */] = null;
1917
+ rS[10 /* NgtRendererClassId.properties */] = null;
1884
1918
  this.executeOperation(node, 'cleanUp');
1885
- rS[7 /* NgtRendererClassId.queueOps */].clear();
1886
- rS[7 /* NgtRendererClassId.queueOps */] = null;
1919
+ rS[8 /* NgtRendererClassId.queueOps */].clear();
1920
+ rS[8 /* NgtRendererClassId.queueOps */] = null;
1887
1921
  }
1888
- if (rS[11 /* NgtRendererClassId.ref */]) {
1922
+ if (rS[12 /* NgtRendererClassId.ref */]) {
1889
1923
  // nullify ref
1890
- rS[11 /* NgtRendererClassId.ref */].nativeElement = null;
1891
- rS[11 /* NgtRendererClassId.ref */] = undefined;
1924
+ rS[12 /* NgtRendererClassId.ref */].nativeElement = null;
1925
+ rS[12 /* NgtRendererClassId.ref */] = undefined;
1892
1926
  }
1893
1927
  // nullify parent
1894
1928
  rS[1 /* NgtRendererClassId.parent */] = null;
1895
- for (const renderChild of rS[2 /* NgtRendererClassId.children */] || []) {
1929
+ for (const renderChild of rS[3 /* NgtRendererClassId.children */] || []) {
1896
1930
  if (renderChild.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' && parent) {
1897
1931
  removeThreeChild(parent, renderChild, true);
1898
1932
  }
1899
1933
  this.destroy(renderChild, parent);
1900
1934
  }
1901
- rS[2 /* NgtRendererClassId.children */] = [];
1902
- rS[3 /* NgtRendererClassId.destroyed */] = true;
1935
+ rS[3 /* NgtRendererClassId.children */] = [];
1936
+ rS[4 /* NgtRendererClassId.destroyed */] = true;
1903
1937
  if (parent) {
1904
1938
  this.removeChild(parent, node);
1905
1939
  }
@@ -1909,11 +1943,11 @@ class NgtRendererStore {
1909
1943
  let i = this.comments.length - 1;
1910
1944
  while (i >= 0) {
1911
1945
  const comment = this.comments[i];
1912
- if (comment.__ngt_renderer__[3 /* NgtRendererClassId.destroyed */]) {
1946
+ if (comment.__ngt_renderer__[4 /* NgtRendererClassId.destroyed */]) {
1913
1947
  i--;
1914
1948
  continue;
1915
1949
  }
1916
- const injector = comment.__ngt_renderer__[13 /* NgtRendererClassId.injectorFactory */]();
1950
+ const injector = comment.__ngt_renderer__[14 /* NgtRendererClassId.injectorFactory */]();
1917
1951
  if (!injector) {
1918
1952
  i--;
1919
1953
  continue;
@@ -1934,11 +1968,11 @@ class NgtRendererStore {
1934
1968
  while (i >= 0) {
1935
1969
  // loop through the portal state backwards to find the closest NgtStore
1936
1970
  const portal = this.portals[i];
1937
- if (portal.__ngt_renderer__[3 /* NgtRendererClassId.destroyed */]) {
1971
+ if (portal.__ngt_renderer__[4 /* NgtRendererClassId.destroyed */]) {
1938
1972
  i--;
1939
1973
  continue;
1940
1974
  }
1941
- const injector = portal.__ngt_renderer__[13 /* NgtRendererClassId.injectorFactory */]();
1975
+ const injector = portal.__ngt_renderer__[14 /* NgtRendererClassId.injectorFactory */]();
1942
1976
  if (!injector) {
1943
1977
  i--;
1944
1978
  continue;
@@ -2023,7 +2057,7 @@ class NgtRenderer {
2023
2057
  if (this.root) {
2024
2058
  this.root = false;
2025
2059
  const node = this.store.createNode('three', this.store.rootScene);
2026
- node.__ngt_renderer__[13 /* NgtRendererClassId.injectorFactory */] = () => getDebugNode(element).injector;
2060
+ node.__ngt_renderer__[14 /* NgtRendererClassId.injectorFactory */] = () => getDebugNode(element).injector;
2027
2061
  return node;
2028
2062
  }
2029
2063
  // handle compound
@@ -2038,7 +2072,13 @@ class NgtRenderer {
2038
2072
  if (name === SPECIAL_DOM_TAG.NGT_VALUE) {
2039
2073
  return this.store.createNode('three', Object.assign({ __ngt_renderer__: { rawValue: undefined } }, { __ngt__: { isRaw: true } }));
2040
2074
  }
2041
- const { injectedArgs, store } = this.store.getCreationState();
2075
+ const { injectedArgs, injectedParent, store } = this.store.getCreationState();
2076
+ let parent = injectedParent;
2077
+ if (typeof injectedParent === 'string') {
2078
+ parent = store
2079
+ .get('scene')
2080
+ .getObjectByName(injectedParent);
2081
+ }
2042
2082
  // handle primitive
2043
2083
  if (name === SPECIAL_DOM_TAG.NGT_PRIMITIVE) {
2044
2084
  if (!injectedArgs[0])
@@ -2051,7 +2091,11 @@ class NgtRenderer {
2051
2091
  }
2052
2092
  if (!localState.store)
2053
2093
  localState.store = store;
2054
- return this.store.createNode('three', object);
2094
+ const node = this.store.createNode('three', object);
2095
+ if (parent) {
2096
+ node.__ngt_renderer__[2 /* NgtRendererClassId.injectedParent */] = parent;
2097
+ }
2098
+ return node;
2055
2099
  }
2056
2100
  const threeTag = name.startsWith('ngt') ? name.slice(4) : name;
2057
2101
  const threeName = kebabToPascal(threeTag);
@@ -2067,6 +2111,9 @@ class NgtRenderer {
2067
2111
  else if (is.material(instance)) {
2068
2112
  localState.attach = ['material'];
2069
2113
  }
2114
+ if (parent) {
2115
+ node.__ngt_renderer__[2 /* NgtRendererClassId.injectedParent */] = parent;
2116
+ }
2070
2117
  return node;
2071
2118
  }
2072
2119
  return this.store.createNode('dom', element);
@@ -2084,21 +2131,32 @@ class NgtRenderer {
2084
2131
  this.store.setParent(newChild, parent);
2085
2132
  return;
2086
2133
  }
2134
+ if (cRS[2 /* NgtRendererClassId.injectedParent */]) {
2135
+ if (is.ref(cRS[2 /* NgtRendererClassId.injectedParent */])) {
2136
+ cRS[2 /* NgtRendererClassId.injectedParent */].$.pipe(take(1)).subscribe((val) => {
2137
+ this.appendChild(val, newChild);
2138
+ });
2139
+ }
2140
+ else {
2141
+ this.appendChild(cRS[2 /* NgtRendererClassId.injectedParent */], newChild);
2142
+ }
2143
+ return;
2144
+ }
2087
2145
  this.store.setParent(newChild, parent);
2088
2146
  this.store.addChild(parent, newChild);
2089
2147
  // if new child is a portal
2090
2148
  if (cRS[0 /* NgtRendererClassId.type */] === 'portal') {
2091
2149
  this.store.processPortalContainer(newChild);
2092
- if (cRS[12 /* NgtRendererClassId.portalContainer */]) {
2093
- this.appendChild(parent, cRS[12 /* NgtRendererClassId.portalContainer */]);
2150
+ if (cRS[13 /* NgtRendererClassId.portalContainer */]) {
2151
+ this.appendChild(parent, cRS[13 /* NgtRendererClassId.portalContainer */]);
2094
2152
  }
2095
2153
  return;
2096
2154
  }
2097
2155
  // if parent is a portal
2098
2156
  if (pRS[0 /* NgtRendererClassId.type */] === 'portal') {
2099
2157
  this.store.processPortalContainer(parent);
2100
- if (pRS[12 /* NgtRendererClassId.portalContainer */]) {
2101
- this.appendChild(pRS[12 /* NgtRendererClassId.portalContainer */], newChild);
2158
+ if (pRS[13 /* NgtRendererClassId.portalContainer */]) {
2159
+ this.appendChild(pRS[13 /* NgtRendererClassId.portalContainer */], newChild);
2102
2160
  }
2103
2161
  return;
2104
2162
  }
@@ -2110,7 +2168,7 @@ class NgtRenderer {
2110
2168
  // attach THREE child
2111
2169
  attachThreeChild(parent, newChild);
2112
2170
  // here, we handle the special case of if the parent has a compoundParent, which means this child is part of a compound parent template
2113
- if (!cRS[4 /* NgtRendererClassId.compound */])
2171
+ if (!cRS[5 /* NgtRendererClassId.compound */])
2114
2172
  return;
2115
2173
  const closestGrandparentWithCompound = this.store.getClosestParentWithCompound(parent);
2116
2174
  if (!closestGrandparentWithCompound)
@@ -2120,26 +2178,26 @@ class NgtRenderer {
2120
2178
  }
2121
2179
  // if only the parent is the THREE instance
2122
2180
  if (pRS[0 /* NgtRendererClassId.type */] === 'three') {
2123
- for (const renderChild of cRS[2 /* NgtRendererClassId.children */]) {
2181
+ for (const renderChild of cRS[3 /* NgtRendererClassId.children */]) {
2124
2182
  this.appendChild(parent, renderChild);
2125
2183
  }
2126
2184
  }
2127
2185
  // if parent is a compound
2128
2186
  if (pRS[0 /* NgtRendererClassId.type */] === 'compound') {
2129
2187
  // if compound doesn't have a THREE instance set yet
2130
- if (!pRS[6 /* NgtRendererClassId.compounded */] && cRS[0 /* NgtRendererClassId.type */] === 'three') {
2188
+ if (!pRS[7 /* NgtRendererClassId.compounded */] && cRS[0 /* NgtRendererClassId.type */] === 'three') {
2131
2189
  // if child is indeed an ngtCompound
2132
- if (cRS[4 /* NgtRendererClassId.compound */])
2190
+ if (cRS[5 /* NgtRendererClassId.compound */])
2133
2191
  this.store.setCompound(parent, newChild);
2134
2192
  // if not, we track the parent (that is supposedly the compound component) on this three instance
2135
- else if (!cRS[5 /* NgtRendererClassId.compoundParent */])
2136
- cRS[5 /* NgtRendererClassId.compoundParent */] = parent;
2193
+ else if (!cRS[6 /* NgtRendererClassId.compoundParent */])
2194
+ cRS[6 /* NgtRendererClassId.compoundParent */] = parent;
2137
2195
  }
2138
2196
  // reset the compound if it's changed
2139
- if (pRS[6 /* NgtRendererClassId.compounded */] &&
2197
+ if (pRS[7 /* NgtRendererClassId.compounded */] &&
2140
2198
  cRS[0 /* NgtRendererClassId.type */] === 'three' &&
2141
- cRS[4 /* NgtRendererClassId.compound */] &&
2142
- pRS[6 /* NgtRendererClassId.compounded */] !== newChild) {
2199
+ cRS[5 /* NgtRendererClassId.compound */] &&
2200
+ pRS[7 /* NgtRendererClassId.compounded */] !== newChild) {
2143
2201
  this.store.setCompound(parent, newChild);
2144
2202
  }
2145
2203
  }
@@ -2148,9 +2206,9 @@ class NgtRenderer {
2148
2206
  (cRS[0 /* NgtRendererClassId.type */] === 'three' && !getLocalState(newChild).parent) ||
2149
2207
  // or both parent and child are DOM elements
2150
2208
  ((pRS[0 /* NgtRendererClassId.type */] === 'dom' ||
2151
- (pRS[0 /* NgtRendererClassId.type */] === 'compound' && !pRS[6 /* NgtRendererClassId.compounded */])) &&
2209
+ (pRS[0 /* NgtRendererClassId.type */] === 'compound' && !pRS[7 /* NgtRendererClassId.compounded */])) &&
2152
2210
  (cRS[0 /* NgtRendererClassId.type */] === 'dom' ||
2153
- (cRS[0 /* NgtRendererClassId.type */] === 'compound' && !cRS[6 /* NgtRendererClassId.compounded */])));
2211
+ (cRS[0 /* NgtRendererClassId.type */] === 'compound' && !cRS[7 /* NgtRendererClassId.compounded */])));
2154
2212
  if (shouldFindGrandparentInstance) {
2155
2213
  // we'll try to get the grandparent instance here so that we can run appendChild with both instances
2156
2214
  const closestGrandparentInstance = this.store.getClosestParentWithInstance(parent);
@@ -2163,7 +2221,7 @@ class NgtRenderer {
2163
2221
  // refChild: NgtRendererNode
2164
2222
  // isMove?: boolean | undefined
2165
2223
  ) {
2166
- if (!parent.__ngt_renderer__ || parent === newChild)
2224
+ if (parent == null || !parent.__ngt_renderer__ || parent === newChild)
2167
2225
  return;
2168
2226
  this.appendChild(parent, newChild);
2169
2227
  }
@@ -2198,12 +2256,12 @@ class NgtRenderer {
2198
2256
  const rS = el.__ngt_renderer__;
2199
2257
  if (rS[0 /* NgtRendererClassId.type */] === 'compound') {
2200
2258
  // we don't have the compound instance yet
2201
- rS[8 /* NgtRendererClassId.attributes */][name] = value;
2202
- if (!rS[6 /* NgtRendererClassId.compounded */]) {
2259
+ rS[9 /* NgtRendererClassId.attributes */][name] = value;
2260
+ if (!rS[7 /* NgtRendererClassId.compounded */]) {
2203
2261
  this.store.queueOperation(el, ['op', () => this.setAttribute(el, name, value, namespace)]);
2204
2262
  return;
2205
2263
  }
2206
- this.setAttribute(rS[6 /* NgtRendererClassId.compounded */], name, value, namespace);
2264
+ this.setAttribute(rS[7 /* NgtRendererClassId.compounded */], name, value, namespace);
2207
2265
  return;
2208
2266
  }
2209
2267
  if (rS[0 /* NgtRendererClassId.type */] === 'three')
@@ -2213,20 +2271,20 @@ class NgtRenderer {
2213
2271
  const rS = el.__ngt_renderer__;
2214
2272
  if (rS[0 /* NgtRendererClassId.type */] === 'compound') {
2215
2273
  // we don't have the compound instance yet
2216
- rS[9 /* NgtRendererClassId.properties */][name] = value;
2217
- if (!rS[6 /* NgtRendererClassId.compounded */]) {
2274
+ rS[10 /* NgtRendererClassId.properties */][name] = value;
2275
+ if (!rS[7 /* NgtRendererClassId.compounded */]) {
2218
2276
  this.store.queueOperation(el, ['op', () => this.setProperty(el, name, value)]);
2219
2277
  return;
2220
2278
  }
2221
- if (rS[6 /* NgtRendererClassId.compounded */].__ngt_renderer__[4 /* NgtRendererClassId.compound */]) {
2222
- Object.assign(rS[6 /* NgtRendererClassId.compounded */].__ngt_renderer__[4 /* NgtRendererClassId.compound */], {
2279
+ if (rS[7 /* NgtRendererClassId.compounded */].__ngt_renderer__[5 /* NgtRendererClassId.compound */]) {
2280
+ Object.assign(rS[7 /* NgtRendererClassId.compounded */].__ngt_renderer__[5 /* NgtRendererClassId.compound */], {
2223
2281
  props: {
2224
- ...rS[6 /* NgtRendererClassId.compounded */].__ngt_renderer__[4 /* NgtRendererClassId.compound */],
2282
+ ...rS[7 /* NgtRendererClassId.compounded */].__ngt_renderer__[5 /* NgtRendererClassId.compound */],
2225
2283
  [name]: value,
2226
2284
  },
2227
2285
  });
2228
2286
  }
2229
- this.setProperty(rS[6 /* NgtRendererClassId.compounded */], name, value);
2287
+ this.setProperty(rS[7 /* NgtRendererClassId.compounded */], name, value);
2230
2288
  return;
2231
2289
  }
2232
2290
  if (rS[0 /* NgtRendererClassId.type */] === 'three')
@@ -2234,7 +2292,7 @@ class NgtRenderer {
2234
2292
  }
2235
2293
  listen(target, eventName, callback) {
2236
2294
  const rS = target.__ngt_renderer__;
2237
- const targetCdr = rS?.[13 /* NgtRendererClassId.injectorFactory */]?.().get(ChangeDetectorRef, null);
2295
+ const targetCdr = rS?.[14 /* NgtRendererClassId.injectorFactory */]?.().get(ChangeDetectorRef, null);
2238
2296
  // if target is DOM node, then we pass that to delegate Renderer
2239
2297
  const callbackWithCdr = (event) => {
2240
2298
  const value = callback(event);
@@ -2259,12 +2317,12 @@ class NgtRenderer {
2259
2317
  return this.delegate.listen(eventTarget, event, callbackWithCdr);
2260
2318
  }
2261
2319
  if (rS[0 /* NgtRendererClassId.type */] === 'three' ||
2262
- (rS[0 /* NgtRendererClassId.type */] === 'compound' && rS[6 /* NgtRendererClassId.compounded */])) {
2263
- const instance = rS[6 /* NgtRendererClassId.compounded */] || target;
2320
+ (rS[0 /* NgtRendererClassId.type */] === 'compound' && rS[7 /* NgtRendererClassId.compounded */])) {
2321
+ const instance = rS[7 /* NgtRendererClassId.compounded */] || target;
2264
2322
  const priority = getLocalState(target).priority;
2265
2323
  return processThreeEvent(instance, priority || 0, eventName, callback, this.store.rootCdr, targetCdr);
2266
2324
  }
2267
- if (rS[0 /* NgtRendererClassId.type */] === 'compound' && !rS[6 /* NgtRendererClassId.compounded */]) {
2325
+ if (rS[0 /* NgtRendererClassId.type */] === 'compound' && !rS[7 /* NgtRendererClassId.compounded */]) {
2268
2326
  this.store.queueOperation(target, [
2269
2327
  'op',
2270
2328
  () => this.store.queueOperation(target, ['cleanUp', this.listen(target, eventName, callback)]),
@@ -3046,5 +3104,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImpor
3046
3104
  * Generated bundle index. Do not edit.
3047
3105
  */
3048
3106
 
3049
- export { NGT_CATALOGUE, NgtArgs, NgtCanvas, NgtPortal, NgtPortalBeforeRender, NgtPortalContent, NgtPush, NgtRepeat, NgtRoutedScene, NgtRxStore, NgtStore, addAfterEffect, addEffect, addTail, applyProps, checkNeedsUpdate, checkUpdate, createAttachFunction, createLoop, createRunInContext, extend, flushGlobalEffects, getLocalState, injectBeforeRender, injectNgtDestroy, injectNgtLoader, injectNgtRef, invalidateInstance, is, makeDefaultCamera, makeDefaultRenderer, makeDpr, makeId, makeObjectGraph, prepare, rootStateMap, safeDetectChanges, startWithUndefined, tapEffect, updateCamera };
3107
+ export { NGT_CATALOGUE, NgtArgs, NgtCanvas, NgtParent, NgtPortal, NgtPortalBeforeRender, NgtPortalContent, NgtPush, NgtRepeat, NgtRoutedScene, NgtRxStore, NgtStore, addAfterEffect, addEffect, addTail, applyProps, checkNeedsUpdate, checkUpdate, createAttachFunction, createLoop, createRunInContext, extend, flushGlobalEffects, getLocalState, injectBeforeRender, injectNgtDestroy, injectNgtLoader, injectNgtRef, invalidateInstance, is, makeDefaultCamera, makeDefaultRenderer, makeDpr, makeId, makeObjectGraph, prepare, rootStateMap, safeDetectChanges, startWithUndefined, tapEffect, updateCamera };
3050
3108
  //# sourceMappingURL=angular-three.mjs.map