@revolist/revogrid 3.6.7 → 3.6.9

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.
Files changed (450) hide show
  1. package/custom-element/_baseIteratee.js +2 -0
  2. package/custom-element/_baseIteratee.js.map +1 -0
  3. package/custom-element/columnService.js +5 -3
  4. package/custom-element/columnService.js.map +1 -0
  5. package/custom-element/consts.js +2 -0
  6. package/custom-element/consts.js.map +1 -0
  7. package/custom-element/data.store.js +54 -32
  8. package/custom-element/data.store.js.map +1 -0
  9. package/custom-element/debounce.js +2 -0
  10. package/custom-element/debounce.js.map +1 -0
  11. package/custom-element/dimension.helpers.js +2 -0
  12. package/custom-element/dimension.helpers.js.map +1 -0
  13. package/custom-element/each.js +2 -0
  14. package/custom-element/each.js.map +1 -0
  15. package/custom-element/filter.button.js +2 -0
  16. package/custom-element/filter.button.js.map +1 -0
  17. package/custom-element/identity.js +2 -0
  18. package/custom-element/identity.js.map +1 -0
  19. package/custom-element/index.d.ts +22 -0
  20. package/custom-element/index.js +3 -1
  21. package/custom-element/index.js.map +1 -0
  22. package/custom-element/isSymbol.js +2 -0
  23. package/custom-element/isSymbol.js.map +1 -0
  24. package/custom-element/keys.js +2 -0
  25. package/custom-element/keys.js.map +1 -0
  26. package/custom-element/localScrollService.js +2 -0
  27. package/custom-element/localScrollService.js.map +1 -0
  28. package/custom-element/resize-observer.js +2 -0
  29. package/custom-element/resize-observer.js.map +1 -0
  30. package/custom-element/revo-grid.js +32 -99
  31. package/custom-element/revo-grid.js.map +1 -0
  32. package/custom-element/revogr-clipboard.js +4 -4
  33. package/custom-element/revogr-clipboard.js.map +1 -0
  34. package/custom-element/revogr-data.js +2 -0
  35. package/custom-element/revogr-data.js.map +1 -0
  36. package/custom-element/revogr-data2.js +13 -2
  37. package/custom-element/revogr-data2.js.map +1 -0
  38. package/custom-element/revogr-edit.js +2 -0
  39. package/custom-element/revogr-edit.js.map +1 -0
  40. package/custom-element/revogr-edit2.js +6 -2
  41. package/custom-element/revogr-edit2.js.map +1 -0
  42. package/custom-element/revogr-filter-panel.js +10 -6
  43. package/custom-element/revogr-filter-panel.js.map +1 -0
  44. package/custom-element/revogr-focus.js +2 -0
  45. package/custom-element/revogr-focus.js.map +1 -0
  46. package/custom-element/revogr-focus2.js +8 -2
  47. package/custom-element/revogr-focus2.js.map +1 -0
  48. package/custom-element/revogr-header.js +2 -0
  49. package/custom-element/revogr-header.js.map +1 -0
  50. package/custom-element/revogr-header2.js +10 -2
  51. package/custom-element/revogr-header2.js.map +1 -0
  52. package/custom-element/revogr-order-editor.js +2 -0
  53. package/custom-element/revogr-order-editor.js.map +1 -0
  54. package/custom-element/revogr-order-editor2.js +7 -2
  55. package/custom-element/revogr-order-editor2.js.map +1 -0
  56. package/custom-element/revogr-overlay-selection.js +2 -0
  57. package/custom-element/revogr-overlay-selection.js.map +1 -0
  58. package/custom-element/revogr-overlay-selection2.js +41 -39
  59. package/custom-element/revogr-overlay-selection2.js.map +1 -0
  60. package/custom-element/revogr-row-headers.js +2 -0
  61. package/custom-element/revogr-row-headers.js.map +1 -0
  62. package/custom-element/revogr-row-headers2.js +9 -2
  63. package/custom-element/revogr-row-headers2.js.map +1 -0
  64. package/custom-element/revogr-scroll-virtual.js +2 -0
  65. package/custom-element/revogr-scroll-virtual.js.map +1 -0
  66. package/custom-element/revogr-scroll-virtual2.js +5 -2
  67. package/custom-element/revogr-scroll-virtual2.js.map +1 -0
  68. package/custom-element/revogr-temp-range.js +2 -0
  69. package/custom-element/revogr-temp-range.js.map +1 -0
  70. package/custom-element/revogr-temp-range2.js +7 -3
  71. package/custom-element/revogr-temp-range2.js.map +1 -0
  72. package/custom-element/revogr-viewport-scroll.js +2 -0
  73. package/custom-element/revogr-viewport-scroll.js.map +1 -0
  74. package/custom-element/revogr-viewport-scroll2.js +5 -10
  75. package/custom-element/revogr-viewport-scroll2.js.map +1 -0
  76. package/custom-element/selection.utils.js +2 -0
  77. package/custom-element/selection.utils.js.map +1 -0
  78. package/custom-element/toInteger.js +2 -0
  79. package/custom-element/toInteger.js.map +1 -0
  80. package/custom-element/toNumber.js +2 -0
  81. package/custom-element/toNumber.js.map +1 -0
  82. package/custom-element/utils.js +2 -0
  83. package/custom-element/utils.js.map +1 -0
  84. package/dist/cjs/{debounce-6cea2774.js → debounce-a0628875.js} +3 -1
  85. package/dist/cjs/debounce-a0628875.js.map +1 -0
  86. package/dist/cjs/{index-cb904e00.js → index-c209f988.js} +667 -315
  87. package/dist/cjs/index-c209f988.js.map +1 -0
  88. package/dist/cjs/index.cjs.js +2 -0
  89. package/dist/cjs/index.cjs.js.map +1 -0
  90. package/dist/cjs/loader.cjs.js +6 -26
  91. package/dist/cjs/loader.cjs.js.map +1 -0
  92. package/dist/cjs/{resize-observer-bf327d6a.js → resize-observer-cc749e66.js} +2 -0
  93. package/dist/cjs/resize-observer-cc749e66.js.map +1 -0
  94. package/dist/cjs/revo-grid.cjs.js +9 -60
  95. package/dist/cjs/revo-grid.cjs.js.map +1 -0
  96. package/dist/cjs/revo-grid_11.cjs.entry.js +169 -180
  97. package/dist/cjs/revo-grid_11.cjs.entry.js.map +1 -0
  98. package/dist/cjs/revogr-clipboard.cjs.entry.js +4 -3
  99. package/dist/cjs/revogr-clipboard.cjs.entry.js.map +1 -0
  100. package/dist/cjs/revogr-filter-panel.cjs.entry.js +11 -6
  101. package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -0
  102. package/dist/collection/collection-manifest.json +16 -16
  103. package/dist/collection/components/button/button.js +2 -1
  104. package/dist/collection/components/button/button.js.map +1 -0
  105. package/dist/collection/components/clipboard/revogr-clipboard.js +86 -80
  106. package/dist/collection/components/clipboard/revogr-clipboard.js.map +1 -0
  107. package/dist/collection/components/data/cellRenderer.js +5 -5
  108. package/dist/collection/components/data/cellRenderer.js.map +1 -0
  109. package/dist/collection/components/data/columnService.js +9 -8
  110. package/dist/collection/components/data/columnService.js.map +1 -0
  111. package/dist/collection/components/data/revogr-data.js +258 -226
  112. package/dist/collection/components/data/revogr-data.js.map +1 -0
  113. package/dist/collection/components/data/rowRenderer.js +2 -1
  114. package/dist/collection/components/data/rowRenderer.js.map +1 -0
  115. package/dist/collection/components/header/headerCellRenderer.js +6 -7
  116. package/dist/collection/components/header/headerCellRenderer.js.map +1 -0
  117. package/dist/collection/components/header/headerRenderer.js +7 -8
  118. package/dist/collection/components/header/headerRenderer.js.map +1 -0
  119. package/dist/collection/components/header/revogr-header.js +259 -233
  120. package/dist/collection/components/header/revogr-header.js.map +1 -0
  121. package/dist/collection/components/order/orderRenderer.js +3 -6
  122. package/dist/collection/components/order/orderRenderer.js.map +1 -0
  123. package/dist/collection/components/order/revogr-order-editor.js +279 -252
  124. package/dist/collection/components/order/revogr-order-editor.js.map +1 -0
  125. package/dist/collection/components/order/rowOrderService.js +2 -1
  126. package/dist/collection/components/order/rowOrderService.js.map +1 -0
  127. package/dist/collection/components/overlay/autofill.service.js +8 -7
  128. package/dist/collection/components/overlay/autofill.service.js.map +1 -0
  129. package/dist/collection/components/overlay/clipboard.service.js +4 -3
  130. package/dist/collection/components/overlay/clipboard.service.js.map +1 -0
  131. package/dist/collection/components/overlay/editors/edit.utils.js +2 -1
  132. package/dist/collection/components/overlay/editors/edit.utils.js.map +1 -0
  133. package/dist/collection/components/overlay/editors/text.js +4 -3
  134. package/dist/collection/components/overlay/editors/text.js.map +1 -0
  135. package/dist/collection/components/overlay/keyboard.service.js +6 -5
  136. package/dist/collection/components/overlay/keyboard.service.js.map +1 -0
  137. package/dist/collection/components/overlay/revogr-edit.js +112 -96
  138. package/dist/collection/components/overlay/revogr-edit.js.map +1 -0
  139. package/dist/collection/components/overlay/revogr-overlay-selection.js +546 -482
  140. package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -0
  141. package/dist/collection/components/overlay/selection.utils.js +2 -1
  142. package/dist/collection/components/overlay/selection.utils.js.map +1 -0
  143. package/dist/collection/components/revo-grid/revo-grid-style.css +7 -13
  144. package/dist/collection/components/revo-grid/revo-grid.js +1668 -1638
  145. package/dist/collection/components/revo-grid/revo-grid.js.map +1 -0
  146. package/dist/collection/components/revo-grid/viewport.helpers.js +1 -0
  147. package/dist/collection/components/revo-grid/viewport.helpers.js.map +1 -0
  148. package/dist/collection/components/revo-grid/viewport.interfaces.js +1 -3
  149. package/dist/collection/components/revo-grid/viewport.interfaces.js.map +1 -0
  150. package/dist/collection/components/revo-grid/viewport.js +4 -7
  151. package/dist/collection/components/revo-grid/viewport.js.map +1 -0
  152. package/dist/collection/components/revo-grid/viewport.resize.service.js +3 -2
  153. package/dist/collection/components/revo-grid/viewport.resize.service.js.map +1 -0
  154. package/dist/collection/components/revo-grid/viewport.scrolling.service.js +1 -0
  155. package/dist/collection/components/revo-grid/viewport.scrolling.service.js.map +1 -0
  156. package/dist/collection/components/revo-grid/viewport.section.js +5 -7
  157. package/dist/collection/components/revo-grid/viewport.section.js.map +1 -0
  158. package/dist/collection/components/revo-grid/viewport.service.js +7 -6
  159. package/dist/collection/components/revo-grid/viewport.service.js.map +1 -0
  160. package/dist/collection/components/rowHeaders/revogr-row-headers.js +161 -147
  161. package/dist/collection/components/rowHeaders/revogr-row-headers.js.map +1 -0
  162. package/dist/collection/components/rowHeaders/row-header-render.js +1 -0
  163. package/dist/collection/components/rowHeaders/row-header-render.js.map +1 -0
  164. package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +2 -4
  165. package/dist/collection/components/scroll/revogr-viewport-scroll.js +172 -168
  166. package/dist/collection/components/scroll/revogr-viewport-scroll.js.map +1 -0
  167. package/dist/collection/components/scrollable/revogr-scroll-virtual.js +159 -137
  168. package/dist/collection/components/scrollable/revogr-scroll-virtual.js.map +1 -0
  169. package/dist/collection/components/selection-focus/revogr-focus.js +153 -128
  170. package/dist/collection/components/selection-focus/revogr-focus.js.map +1 -0
  171. package/dist/collection/components/selection-temp-range/revogr-temp-range-style.css +1 -1
  172. package/dist/collection/components/selection-temp-range/revogr-temp-range.js +92 -77
  173. package/dist/collection/components/selection-temp-range/revogr-temp-range.js.map +1 -0
  174. package/dist/collection/global/global.js +3 -2
  175. package/dist/collection/global/global.js.map +1 -0
  176. package/dist/collection/index.js +1 -0
  177. package/dist/collection/index.js.map +1 -0
  178. package/dist/collection/plugins/autoSizeColumn.js +7 -6
  179. package/dist/collection/plugins/autoSizeColumn.js.map +1 -0
  180. package/dist/collection/plugins/basePlugin.js +1 -0
  181. package/dist/collection/plugins/basePlugin.js.map +1 -0
  182. package/dist/collection/plugins/dispatcher.js +1 -0
  183. package/dist/collection/plugins/dispatcher.js.map +1 -0
  184. package/dist/collection/plugins/export/csv.js +2 -1
  185. package/dist/collection/plugins/export/csv.js.map +1 -0
  186. package/dist/collection/plugins/export/export.plugin.js +6 -5
  187. package/dist/collection/plugins/export/export.plugin.js.map +1 -0
  188. package/dist/collection/plugins/export/types.js +1 -3
  189. package/dist/collection/plugins/export/types.js.map +1 -0
  190. package/dist/collection/plugins/filter/conditions/equal.js +1 -0
  191. package/dist/collection/plugins/filter/conditions/equal.js.map +1 -0
  192. package/dist/collection/plugins/filter/conditions/number/greaterThan.js +1 -0
  193. package/dist/collection/plugins/filter/conditions/number/greaterThan.js.map +1 -0
  194. package/dist/collection/plugins/filter/conditions/number/greaterThanOrEqual.js +3 -2
  195. package/dist/collection/plugins/filter/conditions/number/greaterThanOrEqual.js.map +1 -0
  196. package/dist/collection/plugins/filter/conditions/number/lessThan.js +1 -0
  197. package/dist/collection/plugins/filter/conditions/number/lessThan.js.map +1 -0
  198. package/dist/collection/plugins/filter/conditions/number/lessThanOrEqual.js +3 -2
  199. package/dist/collection/plugins/filter/conditions/number/lessThanOrEqual.js.map +1 -0
  200. package/dist/collection/plugins/filter/conditions/set.js +1 -0
  201. package/dist/collection/plugins/filter/conditions/set.js.map +1 -0
  202. package/dist/collection/plugins/filter/conditions/string/beginswith.js +1 -0
  203. package/dist/collection/plugins/filter/conditions/string/beginswith.js.map +1 -0
  204. package/dist/collection/plugins/filter/conditions/string/contains.js +1 -0
  205. package/dist/collection/plugins/filter/conditions/string/contains.js.map +1 -0
  206. package/dist/collection/plugins/filter/filter.button.js +7 -12
  207. package/dist/collection/plugins/filter/filter.button.js.map +1 -0
  208. package/dist/collection/plugins/filter/filter.plugin.js +5 -4
  209. package/dist/collection/plugins/filter/filter.plugin.js.map +1 -0
  210. package/dist/collection/plugins/filter/filter.pop.js +254 -238
  211. package/dist/collection/plugins/filter/filter.pop.js.map +1 -0
  212. package/dist/collection/plugins/filter/filter.service.js +9 -8
  213. package/dist/collection/plugins/filter/filter.service.js.map +1 -0
  214. package/dist/collection/plugins/filter/filter.style.css +2 -3
  215. package/dist/collection/plugins/filter/filter.types.js +1 -3
  216. package/dist/collection/plugins/filter/filter.types.js.map +1 -0
  217. package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js +6 -5
  218. package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js.map +1 -0
  219. package/dist/collection/plugins/groupingColumn/grouping.col.plugin.js +4 -3
  220. package/dist/collection/plugins/groupingColumn/grouping.col.plugin.js.map +1 -0
  221. package/dist/collection/plugins/groupingColumn/headerGroupRenderer.js +4 -3
  222. package/dist/collection/plugins/groupingColumn/headerGroupRenderer.js.map +1 -0
  223. package/dist/collection/plugins/groupingRow/grouping.const.js +2 -1
  224. package/dist/collection/plugins/groupingRow/grouping.const.js.map +1 -0
  225. package/dist/collection/plugins/groupingRow/grouping.row.expand.service.js +3 -2
  226. package/dist/collection/plugins/groupingRow/grouping.row.expand.service.js.map +1 -0
  227. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +14 -13
  228. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js.map +1 -0
  229. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js +6 -10
  230. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js.map +1 -0
  231. package/dist/collection/plugins/groupingRow/grouping.row.types.js +1 -3
  232. package/dist/collection/plugins/groupingRow/grouping.row.types.js.map +1 -0
  233. package/dist/collection/plugins/groupingRow/grouping.service.js +2 -1
  234. package/dist/collection/plugins/groupingRow/grouping.service.js.map +1 -0
  235. package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js +2 -1
  236. package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js.map +1 -0
  237. package/dist/collection/plugins/moveColumn/columnDragPlugin.js +8 -7
  238. package/dist/collection/plugins/moveColumn/columnDragPlugin.js.map +1 -0
  239. package/dist/collection/plugins/moveColumn/columnOrderHandler.js +2 -1
  240. package/dist/collection/plugins/moveColumn/columnOrderHandler.js.map +1 -0
  241. package/dist/collection/plugins/sorting/sorting.plugin.js +8 -7
  242. package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -0
  243. package/dist/collection/plugins/sorting/sorting.sign.js +2 -1
  244. package/dist/collection/plugins/sorting/sorting.sign.js.map +1 -0
  245. package/dist/collection/plugins/stretchPlugin.js +4 -3
  246. package/dist/collection/plugins/stretchPlugin.js.map +1 -0
  247. package/dist/collection/plugins/trimmed/trimmed.plugin.js +1 -0
  248. package/dist/collection/plugins/trimmed/trimmed.plugin.js.map +1 -0
  249. package/dist/collection/services/cell.helpers.js +2 -1
  250. package/dist/collection/services/cell.helpers.js.map +1 -0
  251. package/dist/collection/services/column.data.provider.js +14 -13
  252. package/dist/collection/services/column.data.provider.js.map +1 -0
  253. package/dist/collection/services/data.provider.js +4 -3
  254. package/dist/collection/services/data.provider.js.map +1 -0
  255. package/dist/collection/services/dimension.provider.js +5 -4
  256. package/dist/collection/services/dimension.provider.js.map +1 -0
  257. package/dist/collection/services/localScrollService.js +2 -1
  258. package/dist/collection/services/localScrollService.js.map +1 -0
  259. package/dist/collection/services/resizable.directive.js +3 -4
  260. package/dist/collection/services/resizable.directive.js.map +1 -0
  261. package/dist/collection/services/selection.store.connector.js +3 -2
  262. package/dist/collection/services/selection.store.connector.js.map +1 -0
  263. package/dist/collection/services/viewport.provider.js +4 -3
  264. package/dist/collection/services/viewport.provider.js.map +1 -0
  265. package/dist/collection/store/dataSource/data.proxy.js +1 -0
  266. package/dist/collection/store/dataSource/data.proxy.js.map +1 -0
  267. package/dist/collection/store/dataSource/data.store.js +10 -9
  268. package/dist/collection/store/dataSource/data.store.js.map +1 -0
  269. package/dist/collection/store/dimension/dimension.helpers.js +5 -4
  270. package/dist/collection/store/dimension/dimension.helpers.js.map +1 -0
  271. package/dist/collection/store/dimension/dimension.store.js +9 -7
  272. package/dist/collection/store/dimension/dimension.store.js.map +1 -0
  273. package/dist/collection/store/selection/selection.helpers.js +2 -1
  274. package/dist/collection/store/selection/selection.helpers.js.map +1 -0
  275. package/dist/collection/store/selection/selection.store.js +4 -3
  276. package/dist/collection/store/selection/selection.store.js.map +1 -0
  277. package/dist/collection/store/selection/selection.store.service.js +2 -1
  278. package/dist/collection/store/selection/selection.store.service.js.map +1 -0
  279. package/dist/collection/store/storeTypes.js +1 -0
  280. package/dist/collection/store/storeTypes.js.map +1 -0
  281. package/dist/collection/store/viewPort/viewport.helpers.js +2 -1
  282. package/dist/collection/store/viewPort/viewport.helpers.js.map +1 -0
  283. package/dist/collection/store/viewPort/viewport.store.js +4 -3
  284. package/dist/collection/store/viewPort/viewport.store.js.map +1 -0
  285. package/dist/collection/themeManager/theme.compact.js +1 -0
  286. package/dist/collection/themeManager/theme.compact.js.map +1 -0
  287. package/dist/collection/themeManager/theme.default.js +1 -0
  288. package/dist/collection/themeManager/theme.default.js.map +1 -0
  289. package/dist/collection/themeManager/theme.material.js +1 -0
  290. package/dist/collection/themeManager/theme.material.js.map +1 -0
  291. package/dist/collection/themeManager/themeService.js +9 -8
  292. package/dist/collection/themeManager/themeService.js.map +1 -0
  293. package/dist/collection/utils/closestPolifill.js +1 -0
  294. package/dist/collection/utils/closestPolifill.js.map +1 -0
  295. package/dist/collection/utils/consts.js +1 -0
  296. package/dist/collection/utils/consts.js.map +1 -0
  297. package/dist/collection/utils/generateAlphabetHeader.js +1 -0
  298. package/dist/collection/utils/generateAlphabetHeader.js.map +1 -0
  299. package/dist/collection/utils/keyCodes.js +1 -0
  300. package/dist/collection/utils/keyCodes.js.map +1 -0
  301. package/dist/collection/utils/keyCodes.utils.js +4 -3
  302. package/dist/collection/utils/keyCodes.utils.js.map +1 -0
  303. package/dist/collection/utils/platform.js +1 -0
  304. package/dist/collection/utils/platform.js.map +1 -0
  305. package/dist/collection/utils/resizeObserver.js +1 -0
  306. package/dist/collection/utils/resizeObserver.js.map +1 -0
  307. package/dist/collection/utils/store.utils.js +1 -0
  308. package/dist/collection/utils/store.utils.js.map +1 -0
  309. package/dist/collection/utils/utils.js +1 -0
  310. package/dist/collection/utils/utils.js.map +1 -0
  311. package/dist/esm/{debounce-e4e6dd45.js → debounce-cb7aac48.js} +3 -1
  312. package/dist/esm/debounce-cb7aac48.js.map +1 -0
  313. package/dist/esm/{index-6f753b3c.js → index-f21f8a13.js} +667 -311
  314. package/dist/esm/index-f21f8a13.js.map +1 -0
  315. package/dist/esm/index.js +2 -0
  316. package/dist/esm/index.js.map +1 -0
  317. package/dist/esm/loader.js +6 -26
  318. package/dist/esm/loader.js.map +1 -0
  319. package/dist/esm/{resize-observer-00c48d78.js → resize-observer-4f34a839.js} +2 -0
  320. package/dist/esm/resize-observer-4f34a839.js.map +1 -0
  321. package/dist/esm/revo-grid.js +7 -61
  322. package/dist/esm/revo-grid.js.map +1 -0
  323. package/dist/esm/revo-grid_11.entry.js +169 -180
  324. package/dist/esm/revo-grid_11.entry.js.map +1 -0
  325. package/dist/esm/revogr-clipboard.entry.js +4 -3
  326. package/dist/esm/revogr-clipboard.entry.js.map +1 -0
  327. package/dist/esm/revogr-filter-panel.entry.js +11 -6
  328. package/dist/esm/revogr-filter-panel.entry.js.map +1 -0
  329. package/dist/esm-es5/{debounce-e4e6dd45.js → debounce-cb7aac48.js} +2 -1
  330. package/dist/esm-es5/debounce-cb7aac48.js.map +1 -0
  331. package/dist/esm-es5/index-f21f8a13.js +5 -0
  332. package/dist/esm-es5/index-f21f8a13.js.map +1 -0
  333. package/dist/esm-es5/index.js +1 -0
  334. package/dist/esm-es5/index.js.map +1 -0
  335. package/dist/esm-es5/loader.js +2 -1
  336. package/dist/esm-es5/loader.js.map +1 -0
  337. package/dist/esm-es5/{resize-observer-00c48d78.js → resize-observer-4f34a839.js} +2 -1
  338. package/dist/esm-es5/resize-observer-4f34a839.js.map +1 -0
  339. package/dist/esm-es5/revo-grid.js +2 -1
  340. package/dist/esm-es5/revo-grid.js.map +1 -0
  341. package/dist/esm-es5/revo-grid_11.entry.js +3 -2
  342. package/dist/esm-es5/revo-grid_11.entry.js.map +1 -0
  343. package/dist/esm-es5/revogr-clipboard.entry.js +3 -2
  344. package/dist/esm-es5/revogr-clipboard.entry.js.map +1 -0
  345. package/dist/esm-es5/revogr-filter-panel.entry.js +3 -2
  346. package/dist/esm-es5/revogr-filter-panel.entry.js.map +1 -0
  347. package/dist/revo-grid/{debounce-5a33c710.system.js → debounce-3aba7c4d.system.js} +2 -1
  348. package/dist/revo-grid/debounce-3aba7c4d.system.js.map +1 -0
  349. package/dist/revo-grid/debounce-cb7aac48.js +5 -0
  350. package/dist/revo-grid/debounce-cb7aac48.js.map +1 -0
  351. package/dist/revo-grid/index-20224007.system.js +6 -0
  352. package/dist/revo-grid/index-20224007.system.js.map +1 -0
  353. package/dist/revo-grid/index-f21f8a13.js +6 -0
  354. package/dist/revo-grid/index-f21f8a13.js.map +1 -0
  355. package/dist/revo-grid/index.esm.js +2 -0
  356. package/dist/revo-grid/index.esm.js.map +1 -0
  357. package/dist/revo-grid/index.system.js +2 -1
  358. package/dist/revo-grid/index.system.js.map +1 -0
  359. package/dist/revo-grid/{resize-observer-8af0bc0e.system.js → resize-observer-2a36c9e4.system.js} +2 -1
  360. package/dist/revo-grid/resize-observer-2a36c9e4.system.js.map +1 -0
  361. package/dist/revo-grid/resize-observer-4f34a839.js +5 -0
  362. package/dist/revo-grid/resize-observer-4f34a839.js.map +1 -0
  363. package/dist/revo-grid/revo-grid.esm.js +2 -1
  364. package/dist/revo-grid/revo-grid.esm.js.map +1 -0
  365. package/dist/revo-grid/revo-grid.js +1 -7
  366. package/dist/revo-grid/revo-grid.system.js +2 -1
  367. package/dist/revo-grid/revo-grid.system.js.map +1 -0
  368. package/dist/revo-grid/revo-grid_11.entry.js +2 -1
  369. package/dist/revo-grid/revo-grid_11.entry.js.map +1 -0
  370. package/dist/revo-grid/revo-grid_11.system.entry.js +3 -2
  371. package/dist/revo-grid/revo-grid_11.system.entry.js.map +1 -0
  372. package/dist/revo-grid/revogr-clipboard.entry.js +2 -1
  373. package/dist/revo-grid/revogr-clipboard.entry.js.map +1 -0
  374. package/dist/revo-grid/revogr-clipboard.system.entry.js +3 -2
  375. package/dist/revo-grid/revogr-clipboard.system.entry.js.map +1 -0
  376. package/dist/revo-grid/revogr-filter-panel.entry.js +2 -1
  377. package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -0
  378. package/dist/revo-grid/revogr-filter-panel.system.entry.js +3 -2
  379. package/dist/revo-grid/revogr-filter-panel.system.entry.js.map +1 -0
  380. package/dist/types/components/data/cellRenderer.d.ts +1 -1
  381. package/dist/types/components/data/columnService.d.ts +4 -4
  382. package/dist/types/components/header/headerCellRenderer.d.ts +1 -1
  383. package/dist/types/components/header/headerRenderer.d.ts +1 -1
  384. package/dist/types/components/order/orderRenderer.d.ts +1 -1
  385. package/dist/types/components/order/rowOrderService.d.ts +1 -1
  386. package/dist/types/components/overlay/autofill.service.d.ts +1 -1
  387. package/dist/types/components/overlay/clipboard.service.d.ts +1 -1
  388. package/dist/types/components/overlay/editors/text.d.ts +1 -1
  389. package/dist/types/components/overlay/keyboard.service.d.ts +1 -1
  390. package/dist/types/components/overlay/revogr-overlay-selection.d.ts +9 -3
  391. package/dist/types/components/overlay/selection.utils.d.ts +1 -1
  392. package/dist/types/components/revo-grid/viewport.d.ts +1 -1
  393. package/dist/types/components/revo-grid/viewport.interfaces.d.ts +5 -5
  394. package/dist/types/components/revo-grid/viewport.scrolling.service.d.ts +1 -1
  395. package/dist/types/components/revo-grid/viewport.section.d.ts +1 -1
  396. package/dist/types/components/revo-grid/viewport.service.d.ts +3 -3
  397. package/dist/types/components/rowHeaders/row-header-render.d.ts +1 -1
  398. package/dist/types/components.d.ts +26 -0
  399. package/dist/types/plugins/autoSizeColumn.d.ts +1 -1
  400. package/dist/types/plugins/dispatcher.d.ts +1 -1
  401. package/dist/types/plugins/export/csv.d.ts +1 -1
  402. package/dist/types/plugins/export/export.plugin.d.ts +1 -1
  403. package/dist/types/plugins/export/types.d.ts +2 -2
  404. package/dist/types/plugins/filter/filter.button.d.ts +1 -1
  405. package/dist/types/plugins/filter/filter.plugin.d.ts +6 -6
  406. package/dist/types/plugins/filter/filter.pop.d.ts +4 -4
  407. package/dist/types/plugins/filter/filter.service.d.ts +1 -1
  408. package/dist/types/plugins/filter/filter.types.d.ts +5 -5
  409. package/dist/types/plugins/groupingColumn/columnGroupsRenderer.d.ts +1 -1
  410. package/dist/types/plugins/groupingColumn/grouping.col.plugin.d.ts +1 -1
  411. package/dist/types/plugins/groupingColumn/headerGroupRenderer.d.ts +1 -1
  412. package/dist/types/plugins/groupingRow/grouping.row.renderer.d.ts +1 -1
  413. package/dist/types/plugins/groupingRow/grouping.row.types.d.ts +5 -5
  414. package/dist/types/plugins/groupingRow/grouping.service.d.ts +1 -1
  415. package/dist/types/plugins/moveColumn/columnDragPlugin.d.ts +5 -5
  416. package/dist/types/plugins/sorting/sorting.plugin.d.ts +1 -1
  417. package/dist/types/plugins/sorting/sorting.sign.d.ts +1 -1
  418. package/dist/types/plugins/trimmed/trimmed.plugin.d.ts +2 -2
  419. package/dist/types/services/column.data.provider.d.ts +4 -4
  420. package/dist/types/services/data.provider.d.ts +1 -1
  421. package/dist/types/services/dimension.provider.d.ts +2 -2
  422. package/dist/types/services/localScrollService.d.ts +1 -1
  423. package/dist/types/services/resizable.directive.d.ts +2 -2
  424. package/dist/types/services/selection.store.connector.d.ts +2 -2
  425. package/dist/types/services/viewport.provider.d.ts +1 -1
  426. package/dist/types/stencil-public-runtime.d.ts +95 -20
  427. package/dist/types/store/dataSource/data.proxy.d.ts +1 -1
  428. package/dist/types/store/dataSource/data.store.d.ts +4 -4
  429. package/dist/types/store/dimension/dimension.helpers.d.ts +3 -3
  430. package/dist/types/store/selection/selection.store.d.ts +1 -1
  431. package/dist/types/store/viewPort/viewport.helpers.d.ts +2 -2
  432. package/loader/index.d.ts +10 -1
  433. package/loader/package.json +1 -0
  434. package/package.json +10 -10
  435. package/dist/cjs/css-shim-9f5bc84d.js +0 -9
  436. package/dist/cjs/dom-fcb646f0.js +0 -78
  437. package/dist/esm/css-shim-e1e1ea5e.js +0 -7
  438. package/dist/esm/dom-21bd1807.js +0 -76
  439. package/dist/esm/polyfills/css-shim.js +0 -1
  440. package/dist/esm-es5/css-shim-e1e1ea5e.js +0 -4
  441. package/dist/esm-es5/dom-21bd1807.js +0 -24
  442. package/dist/esm-es5/index-6f753b3c.js +0 -4
  443. package/dist/revo-grid/css-shim-bcf89cc0.system.js +0 -4
  444. package/dist/revo-grid/css-shim-e1e1ea5e.js +0 -4
  445. package/dist/revo-grid/debounce-726bdadb.js +0 -4
  446. package/dist/revo-grid/dom-21bd1807.js +0 -22
  447. package/dist/revo-grid/dom-726246e2.system.js +0 -24
  448. package/dist/revo-grid/index-f14b41a0.system.js +0 -5
  449. package/dist/revo-grid/index-f30d1de1.js +0 -5
  450. package/dist/revo-grid/resize-observer-00c48d78.js +0 -4
@@ -25,6 +25,14 @@ function _interopNamespace(e) {
25
25
 
26
26
  const NAMESPACE = 'revo-grid';
27
27
 
28
+ /**
29
+ * Virtual DOM patching algorithm based on Snabbdom by
30
+ * Simon Friis Vindum (@paldepind)
31
+ * Licensed under the MIT License
32
+ * https://github.com/snabbdom/snabbdom/blob/master/LICENSE
33
+ *
34
+ * Modified for Stencil's renderer and slot projection
35
+ */
28
36
  let contentRef;
29
37
  let hostTagName;
30
38
  let useNativeShadowDom = false;
@@ -33,64 +41,6 @@ let checkSlotRelocate = false;
33
41
  let isSvgMode = false;
34
42
  let renderingRef = null;
35
43
  let queuePending = false;
36
- const win = typeof window !== 'undefined' ? window : {};
37
- const CSS = win.CSS ;
38
- const doc = win.document || { head: {} };
39
- const plt = {
40
- $flags$: 0,
41
- $resourcesUrl$: '',
42
- jmp: (h) => h(),
43
- raf: (h) => requestAnimationFrame(h),
44
- ael: (el, eventName, listener, opts) => el.addEventListener(eventName, listener, opts),
45
- rel: (el, eventName, listener, opts) => el.removeEventListener(eventName, listener, opts),
46
- ce: (eventName, opts) => new CustomEvent(eventName, opts),
47
- };
48
- const promiseResolve = (v) => Promise.resolve(v);
49
- const supportsConstructableStylesheets = /*@__PURE__*/ (() => {
50
- try {
51
- new CSSStyleSheet();
52
- return typeof new CSSStyleSheet().replaceSync === 'function';
53
- }
54
- catch (e) { }
55
- return false;
56
- })()
57
- ;
58
- const addHostEventListeners = (elm, hostRef, listeners, attachParentListeners) => {
59
- if (listeners) {
60
- listeners.map(([flags, name, method]) => {
61
- const target = getHostListenerTarget(elm, flags) ;
62
- const handler = hostListenerProxy(hostRef, method);
63
- const opts = hostListenerOpts(flags);
64
- plt.ael(target, name, handler, opts);
65
- (hostRef.$rmListeners$ = hostRef.$rmListeners$ || []).push(() => plt.rel(target, name, handler, opts));
66
- });
67
- }
68
- };
69
- const hostListenerProxy = (hostRef, methodName) => (ev) => {
70
- try {
71
- {
72
- if (hostRef.$flags$ & 256 /* isListenReady */) {
73
- // instance is ready, let's call it's member method for this event
74
- hostRef.$lazyInstance$[methodName](ev);
75
- }
76
- else {
77
- (hostRef.$queuedListeners$ = hostRef.$queuedListeners$ || []).push([methodName, ev]);
78
- }
79
- }
80
- }
81
- catch (e) {
82
- consoleError(e);
83
- }
84
- };
85
- const getHostListenerTarget = (elm, flags) => {
86
- if (flags & 4 /* TargetDocument */)
87
- return doc;
88
- return elm;
89
- };
90
- // prettier-ignore
91
- const hostListenerOpts = (flags) => (flags & 2 /* Capture */) !== 0;
92
- const HYDRATED_CSS = '{visibility:hidden}.hydrated{visibility:inherit}';
93
- const XLINK_NS = 'http://www.w3.org/1999/xlink';
94
44
  const createTime = (fnName, tagName = '') => {
95
45
  {
96
46
  return () => {
@@ -105,75 +55,8 @@ const uniqueTime = (key, measureText) => {
105
55
  };
106
56
  }
107
57
  };
108
- const rootAppliedStyles = new WeakMap();
109
- const registerStyle = (scopeId, cssText, allowCS) => {
110
- let style = styles.get(scopeId);
111
- if (supportsConstructableStylesheets && allowCS) {
112
- style = (style || new CSSStyleSheet());
113
- if (typeof style === 'string') {
114
- style = cssText;
115
- }
116
- else {
117
- style.replaceSync(cssText);
118
- }
119
- }
120
- else {
121
- style = cssText;
122
- }
123
- styles.set(scopeId, style);
124
- };
125
- const addStyle = (styleContainerNode, cmpMeta, mode, hostElm) => {
126
- let scopeId = getScopeId(cmpMeta);
127
- const style = styles.get(scopeId);
128
- // if an element is NOT connected then getRootNode() will return the wrong root node
129
- // so the fallback is to always use the document for the root node in those cases
130
- styleContainerNode = styleContainerNode.nodeType === 11 /* DocumentFragment */ ? styleContainerNode : doc;
131
- if (style) {
132
- if (typeof style === 'string') {
133
- styleContainerNode = styleContainerNode.head || styleContainerNode;
134
- let appliedStyles = rootAppliedStyles.get(styleContainerNode);
135
- let styleElm;
136
- if (!appliedStyles) {
137
- rootAppliedStyles.set(styleContainerNode, (appliedStyles = new Set()));
138
- }
139
- if (!appliedStyles.has(scopeId)) {
140
- {
141
- if (plt.$cssShim$) {
142
- styleElm = plt.$cssShim$.createHostStyle(hostElm, scopeId, style, !!(cmpMeta.$flags$ & 10 /* needsScopedEncapsulation */));
143
- const newScopeId = styleElm['s-sc'];
144
- if (newScopeId) {
145
- scopeId = newScopeId;
146
- // we don't want to add this styleID to the appliedStyles Set
147
- // since the cssVarShim might need to apply several different
148
- // stylesheets for the same component
149
- appliedStyles = null;
150
- }
151
- }
152
- else {
153
- styleElm = doc.createElement('style');
154
- styleElm.innerHTML = style;
155
- }
156
- styleContainerNode.insertBefore(styleElm, styleContainerNode.querySelector('link'));
157
- }
158
- if (appliedStyles) {
159
- appliedStyles.add(scopeId);
160
- }
161
- }
162
- }
163
- else if (!styleContainerNode.adoptedStyleSheets.includes(style)) {
164
- styleContainerNode.adoptedStyleSheets = [...styleContainerNode.adoptedStyleSheets, style];
165
- }
166
- }
167
- return scopeId;
168
- };
169
- const attachStyles = (hostRef) => {
170
- const cmpMeta = hostRef.$cmpMeta$;
171
- const elm = hostRef.$hostElement$;
172
- const endAttachStyles = createTime('attachStyles', cmpMeta.$tagName$);
173
- addStyle(elm.getRootNode(), cmpMeta, hostRef.$modeName$, elm);
174
- endAttachStyles();
175
- };
176
- const getScopeId = (cmp, mode) => 'sc-' + (cmp.$tagName$);
58
+ const HYDRATED_CSS = '{visibility:hidden}.hydrated{visibility:inherit}';
59
+ const XLINK_NS = 'http://www.w3.org/1999/xlink';
177
60
  /**
178
61
  * Default style mode id
179
62
  */
@@ -187,11 +70,30 @@ const EMPTY_OBJ = {};
187
70
  */
188
71
  const SVG_NS = 'http://www.w3.org/2000/svg';
189
72
  const HTML_NS = 'http://www.w3.org/1999/xhtml';
73
+ /**
74
+ * Check whether a value is a 'complex type', defined here as an object or a
75
+ * function.
76
+ *
77
+ * @param o the value to check
78
+ * @returns whether it's a complex type or not
79
+ */
190
80
  const isComplexType = (o) => {
191
81
  // https://jsperf.com/typeof-fn-object/5
192
82
  o = typeof o;
193
83
  return o === 'object' || o === 'function';
194
84
  };
85
+ /**
86
+ * Helper method for querying a `meta` tag that contains a nonce value
87
+ * out of a DOM's head.
88
+ *
89
+ * @param doc The DOM containing the `head` to query against
90
+ * @returns The content of the meta tag representing the nonce value, or `undefined` if no tag
91
+ * exists or the tag has no content.
92
+ */
93
+ function queryNonceMetaTagContent(doc) {
94
+ var _a, _b, _c;
95
+ return (_c = (_b = (_a = doc.head) === null || _a === void 0 ? void 0 : _a.querySelector('meta[name="csp-nonce"]')) === null || _b === void 0 ? void 0 : _b.getAttribute('content')) !== null && _c !== void 0 ? _c : undefined;
96
+ }
195
97
  /**
196
98
  * Production h() function based on Preact by
197
99
  * Jason Miller (@developit)
@@ -200,7 +102,6 @@ const isComplexType = (o) => {
200
102
  *
201
103
  * Modified for Stencil's compiler and vdom
202
104
  */
203
- // const stack: any[] = [];
204
105
  // export function h(nodeName: string | d.FunctionalComponent, vnodeData: d.PropsType, child?: d.ChildType): d.VNode;
205
106
  // export function h(nodeName: string | d.FunctionalComponent, vnodeData: d.PropsType, ...children: d.ChildType[]): d.VNode;
206
107
  const h = (nodeName, vnodeData, ...children) => {
@@ -270,6 +171,14 @@ const h = (nodeName, vnodeData, ...children) => {
270
171
  }
271
172
  return vnode;
272
173
  };
174
+ /**
175
+ * A utility function for creating a virtual DOM node from a tag and some
176
+ * possible text content.
177
+ *
178
+ * @param tag the tag for this element
179
+ * @param text possible text content for the node
180
+ * @returns a newly-minted virtual DOM node
181
+ */
273
182
  const newVNode = (tag, text) => {
274
183
  const vnode = {
275
184
  $flags$: 0,
@@ -290,11 +199,31 @@ const newVNode = (tag, text) => {
290
199
  return vnode;
291
200
  };
292
201
  const Host = {};
202
+ /**
203
+ * Check whether a given node is a Host node or not
204
+ *
205
+ * @param node the virtual DOM node to check
206
+ * @returns whether it's a Host node or not
207
+ */
293
208
  const isHost = (node) => node && node.$tag$ === Host;
209
+ /**
210
+ * Implementation of {@link d.FunctionalUtilities} for Stencil's VDom.
211
+ *
212
+ * Note that these functions convert from {@link d.VNode} to
213
+ * {@link d.ChildNode} to give functional component developers a friendly
214
+ * interface.
215
+ */
294
216
  const vdomFnUtils = {
295
217
  forEach: (children, cb) => children.map(convertToPublic).forEach(cb),
296
218
  map: (children, cb) => children.map(convertToPublic).map(cb).map(convertToPrivate),
297
219
  };
220
+ /**
221
+ * Convert a {@link d.VNode} to a {@link d.ChildNode} in order to present a
222
+ * friendlier public interface (hence, 'convertToPublic').
223
+ *
224
+ * @param node the virtual DOM node to convert
225
+ * @returns a converted child node
226
+ */
298
227
  const convertToPublic = (node) => ({
299
228
  vattrs: node.$attrs$,
300
229
  vchildren: node.$children$,
@@ -303,6 +232,15 @@ const convertToPublic = (node) => ({
303
232
  vtag: node.$tag$,
304
233
  vtext: node.$text$,
305
234
  });
235
+ /**
236
+ * Convert a {@link d.ChildNode} back to an equivalent {@link d.VNode} in
237
+ * order to use the resulting object in the virtual DOM. The initial object was
238
+ * likely created as part of presenting a public API, so converting it back
239
+ * involved making it 'private' again (hence, `convertToPrivate`).
240
+ *
241
+ * @param node the child node to convert
242
+ * @returns a converted virtual DOM node
243
+ */
306
244
  const convertToPrivate = (node) => {
307
245
  if (typeof node.vtag === 'function') {
308
246
  const vnodeData = Object.assign({}, node.vattrs);
@@ -321,6 +259,141 @@ const convertToPrivate = (node) => {
321
259
  vnode.$name$ = node.vname;
322
260
  return vnode;
323
261
  };
262
+ /**
263
+ * Parse a new property value for a given property type.
264
+ *
265
+ * While the prop value can reasonably be expected to be of `any` type as far as TypeScript's type checker is concerned,
266
+ * it is not safe to assume that the string returned by evaluating `typeof propValue` matches:
267
+ * 1. `any`, the type given to `propValue` in the function signature
268
+ * 2. the type stored from `propType`.
269
+ *
270
+ * This function provides the capability to parse/coerce a property's value to potentially any other JavaScript type.
271
+ *
272
+ * Property values represented in TSX preserve their type information. In the example below, the number 0 is passed to
273
+ * a component. This `propValue` will preserve its type information (`typeof propValue === 'number'`). Note that is
274
+ * based on the type of the value being passed in, not the type declared of the class member decorated with `@Prop`.
275
+ * ```tsx
276
+ * <my-cmp prop-val={0}></my-cmp>
277
+ * ```
278
+ *
279
+ * HTML prop values on the other hand, will always a string
280
+ *
281
+ * @param propValue the new value to coerce to some type
282
+ * @param propType the type of the prop, expressed as a binary number
283
+ * @returns the parsed/coerced value
284
+ */
285
+ const parsePropertyValue = (propValue, propType) => {
286
+ // ensure this value is of the correct prop type
287
+ if (propValue != null && !isComplexType(propValue)) {
288
+ if (propType & 4 /* MEMBER_FLAGS.Boolean */) {
289
+ // per the HTML spec, any string value means it is a boolean true value
290
+ // but we'll cheat here and say that the string "false" is the boolean false
291
+ return propValue === 'false' ? false : propValue === '' || !!propValue;
292
+ }
293
+ if (propType & 2 /* MEMBER_FLAGS.Number */) {
294
+ // force it to be a number
295
+ return parseFloat(propValue);
296
+ }
297
+ if (propType & 1 /* MEMBER_FLAGS.String */) {
298
+ // could have been passed as a number or boolean
299
+ // but we still want it as a string
300
+ return String(propValue);
301
+ }
302
+ // redundant return here for better minification
303
+ return propValue;
304
+ }
305
+ // not sure exactly what type we want
306
+ // so no need to change to a different type
307
+ return propValue;
308
+ };
309
+ const getElement = (ref) => (getHostRef(ref).$hostElement$ );
310
+ const createEvent = (ref, name, flags) => {
311
+ const elm = getElement(ref);
312
+ return {
313
+ emit: (detail) => {
314
+ return emitEvent(elm, name, {
315
+ bubbles: !!(flags & 4 /* EVENT_FLAGS.Bubbles */),
316
+ composed: !!(flags & 2 /* EVENT_FLAGS.Composed */),
317
+ cancelable: !!(flags & 1 /* EVENT_FLAGS.Cancellable */),
318
+ detail,
319
+ });
320
+ },
321
+ };
322
+ };
323
+ /**
324
+ * Helper function to create & dispatch a custom Event on a provided target
325
+ * @param elm the target of the Event
326
+ * @param name the name to give the custom Event
327
+ * @param opts options for configuring a custom Event
328
+ * @returns the custom Event
329
+ */
330
+ const emitEvent = (elm, name, opts) => {
331
+ const ev = plt.ce(name, opts);
332
+ elm.dispatchEvent(ev);
333
+ return ev;
334
+ };
335
+ const rootAppliedStyles = /*@__PURE__*/ new WeakMap();
336
+ const registerStyle = (scopeId, cssText, allowCS) => {
337
+ let style = styles.get(scopeId);
338
+ if (supportsConstructableStylesheets && allowCS) {
339
+ style = (style || new CSSStyleSheet());
340
+ if (typeof style === 'string') {
341
+ style = cssText;
342
+ }
343
+ else {
344
+ style.replaceSync(cssText);
345
+ }
346
+ }
347
+ else {
348
+ style = cssText;
349
+ }
350
+ styles.set(scopeId, style);
351
+ };
352
+ const addStyle = (styleContainerNode, cmpMeta, mode) => {
353
+ var _a;
354
+ const scopeId = getScopeId(cmpMeta);
355
+ const style = styles.get(scopeId);
356
+ // if an element is NOT connected then getRootNode() will return the wrong root node
357
+ // so the fallback is to always use the document for the root node in those cases
358
+ styleContainerNode = styleContainerNode.nodeType === 11 /* NODE_TYPE.DocumentFragment */ ? styleContainerNode : doc;
359
+ if (style) {
360
+ if (typeof style === 'string') {
361
+ styleContainerNode = styleContainerNode.head || styleContainerNode;
362
+ let appliedStyles = rootAppliedStyles.get(styleContainerNode);
363
+ let styleElm;
364
+ if (!appliedStyles) {
365
+ rootAppliedStyles.set(styleContainerNode, (appliedStyles = new Set()));
366
+ }
367
+ if (!appliedStyles.has(scopeId)) {
368
+ {
369
+ styleElm = doc.createElement('style');
370
+ styleElm.innerHTML = style;
371
+ // Apply CSP nonce to the style tag if it exists
372
+ const nonce = (_a = plt.$nonce$) !== null && _a !== void 0 ? _a : queryNonceMetaTagContent(doc);
373
+ if (nonce != null) {
374
+ styleElm.setAttribute('nonce', nonce);
375
+ }
376
+ styleContainerNode.insertBefore(styleElm, styleContainerNode.querySelector('link'));
377
+ }
378
+ if (appliedStyles) {
379
+ appliedStyles.add(scopeId);
380
+ }
381
+ }
382
+ }
383
+ else if (!styleContainerNode.adoptedStyleSheets.includes(style)) {
384
+ styleContainerNode.adoptedStyleSheets = [...styleContainerNode.adoptedStyleSheets, style];
385
+ }
386
+ }
387
+ return scopeId;
388
+ };
389
+ const attachStyles = (hostRef) => {
390
+ const cmpMeta = hostRef.$cmpMeta$;
391
+ const elm = hostRef.$hostElement$;
392
+ const endAttachStyles = createTime('attachStyles', cmpMeta.$tagName$);
393
+ addStyle(elm.getRootNode(), cmpMeta);
394
+ endAttachStyles();
395
+ };
396
+ const getScopeId = (cmp, mode) => 'sc-' + (cmp.$tagName$);
324
397
  /**
325
398
  * Production setAccessor() function based on Preact by
326
399
  * Jason Miller (@developit)
@@ -457,7 +530,7 @@ const setAccessor = (elm, memberName, oldValue, newValue, isSvg, flags) => {
457
530
  }
458
531
  }
459
532
  }
460
- else if ((!isProp || flags & 4 /* isHost */ || isSvg) && !isComplex) {
533
+ else if ((!isProp || flags & 4 /* VNODE_FLAGS.isHost */ || isSvg) && !isComplex) {
461
534
  newValue = newValue === true ? '' : newValue;
462
535
  if (xlink) {
463
536
  elm.setAttributeNS(XLINK_NS, memberName, newValue);
@@ -475,7 +548,7 @@ const updateElement = (oldVnode, newVnode, isSvgMode, memberName) => {
475
548
  // if the element passed in is a shadow root, which is a document fragment
476
549
  // then we want to be adding attrs/props to the shadow root's "host" element
477
550
  // if it's not a shadow root, then we add attrs/props to the same element
478
- const elm = newVnode.$elm$.nodeType === 11 /* DocumentFragment */ && newVnode.$elm$.host
551
+ const elm = newVnode.$elm$.nodeType === 11 /* NODE_TYPE.DocumentFragment */ && newVnode.$elm$.host
479
552
  ? newVnode.$elm$.host
480
553
  : newVnode.$elm$;
481
554
  const oldVnodeAttrs = (oldVnode && oldVnode.$attrs$) || EMPTY_OBJ;
@@ -493,6 +566,16 @@ const updateElement = (oldVnode, newVnode, isSvgMode, memberName) => {
493
566
  setAccessor(elm, memberName, oldVnodeAttrs[memberName], newVnodeAttrs[memberName], isSvgMode, newVnode.$flags$);
494
567
  }
495
568
  };
569
+ /**
570
+ * Create a DOM Node corresponding to one of the children of a given VNode.
571
+ *
572
+ * @param oldParentVNode the parent VNode from the previous render
573
+ * @param newParentVNode the parent VNode from the current render
574
+ * @param childIndex the index of the VNode, in the _new_ parent node's
575
+ * children, for which we will create a new DOM node
576
+ * @param parentElm the parent DOM node which our new node will be a child of
577
+ * @returns the newly created node
578
+ */
496
579
  const createElm = (oldParentVNode, newParentVNode, childIndex, parentElm) => {
497
580
  // tslint:disable-next-line: prefer-const
498
581
  const newVNode = newParentVNode.$children$[childIndex];
@@ -506,16 +589,16 @@ const createElm = (oldParentVNode, newParentVNode, childIndex, parentElm) => {
506
589
  if (newVNode.$tag$ === 'slot') {
507
590
  newVNode.$flags$ |= newVNode.$children$
508
591
  ? // slot element has fallback content
509
- 2 /* isSlotFallback */
592
+ 2 /* VNODE_FLAGS.isSlotFallback */
510
593
  : // slot element does not have fallback content
511
- 1 /* isSlotReference */;
594
+ 1 /* VNODE_FLAGS.isSlotReference */;
512
595
  }
513
596
  }
514
597
  if (newVNode.$text$ !== null) {
515
598
  // create text node
516
599
  elm = newVNode.$elm$ = doc.createTextNode(newVNode.$text$);
517
600
  }
518
- else if (newVNode.$flags$ & 1 /* isSlotReference */) {
601
+ else if (newVNode.$flags$ & 1 /* VNODE_FLAGS.isSlotReference */) {
519
602
  // create a slot reference node
520
603
  elm = newVNode.$elm$ =
521
604
  doc.createTextNode('');
@@ -525,7 +608,7 @@ const createElm = (oldParentVNode, newParentVNode, childIndex, parentElm) => {
525
608
  isSvgMode = newVNode.$tag$ === 'svg';
526
609
  }
527
610
  // create element
528
- elm = newVNode.$elm$ = (doc.createElementNS(isSvgMode ? SVG_NS : HTML_NS, newVNode.$flags$ & 2 /* isSlotFallback */
611
+ elm = newVNode.$elm$ = (doc.createElementNS(isSvgMode ? SVG_NS : HTML_NS, newVNode.$flags$ & 2 /* VNODE_FLAGS.isSlotFallback */
529
612
  ? 'slot-fb'
530
613
  : newVNode.$tag$)
531
614
  );
@@ -560,7 +643,7 @@ const createElm = (oldParentVNode, newParentVNode, childIndex, parentElm) => {
560
643
  }
561
644
  {
562
645
  elm['s-hn'] = hostTagName;
563
- if (newVNode.$flags$ & (2 /* isSlotFallback */ | 1 /* isSlotReference */)) {
646
+ if (newVNode.$flags$ & (2 /* VNODE_FLAGS.isSlotFallback */ | 1 /* VNODE_FLAGS.isSlotReference */)) {
564
647
  // remember the content reference comment
565
648
  elm['s-sr'] = true;
566
649
  // remember the content reference comment
@@ -579,7 +662,7 @@ const createElm = (oldParentVNode, newParentVNode, childIndex, parentElm) => {
579
662
  return elm;
580
663
  };
581
664
  const putBackInOriginalLocation = (parentElm, recursive) => {
582
- plt.$flags$ |= 1 /* isTmpDisconnected */;
665
+ plt.$flags$ |= 1 /* PLATFORM_FLAGS.isTmpDisconnected */;
583
666
  const oldSlotChildNodes = parentElm.childNodes;
584
667
  for (let i = oldSlotChildNodes.length - 1; i >= 0; i--) {
585
668
  const childNode = oldSlotChildNodes[i];
@@ -600,8 +683,23 @@ const putBackInOriginalLocation = (parentElm, recursive) => {
600
683
  putBackInOriginalLocation(childNode, recursive);
601
684
  }
602
685
  }
603
- plt.$flags$ &= ~1 /* isTmpDisconnected */;
686
+ plt.$flags$ &= ~1 /* PLATFORM_FLAGS.isTmpDisconnected */;
604
687
  };
688
+ /**
689
+ * Create DOM nodes corresponding to a list of {@link d.Vnode} objects and
690
+ * add them to the DOM in the appropriate place.
691
+ *
692
+ * @param parentElm the DOM node which should be used as a parent for the new
693
+ * DOM nodes
694
+ * @param before a child of the `parentElm` which the new children should be
695
+ * inserted before (optional)
696
+ * @param parentVNode the parent virtual DOM node
697
+ * @param vnodes the new child virtual DOM nodes to produce DOM nodes for
698
+ * @param startIdx the index in the child virtual DOM nodes at which to start
699
+ * creating DOM nodes (inclusive)
700
+ * @param endIdx the index in the child virtual DOM nodes at which to stop
701
+ * creating DOM nodes (inclusive)
702
+ */
605
703
  const addVnodes = (parentElm, before, parentVNode, vnodes, startIdx, endIdx) => {
606
704
  let containerElm = ((parentElm['s-cr'] && parentElm['s-cr'].parentNode) || parentElm);
607
705
  let childNode;
@@ -615,30 +713,112 @@ const addVnodes = (parentElm, before, parentVNode, vnodes, startIdx, endIdx) =>
615
713
  }
616
714
  }
617
715
  };
618
- const removeVnodes = (vnodes, startIdx, endIdx, vnode, elm) => {
619
- for (; startIdx <= endIdx; ++startIdx) {
620
- if ((vnode = vnodes[startIdx])) {
621
- elm = vnode.$elm$;
622
- callNodeRefs(vnode);
623
- {
624
- // we're removing this element
625
- // so it's possible we need to show slot fallback content now
626
- checkSlotFallbackVisibility = true;
627
- if (elm['s-ol']) {
628
- // remove the original location comment
629
- elm['s-ol'].remove();
630
- }
631
- else {
632
- // it's possible that child nodes of the node
633
- // that's being removed are slot nodes
634
- putBackInOriginalLocation(elm, true);
716
+ /**
717
+ * Remove the DOM elements corresponding to a list of {@link d.VNode} objects.
718
+ * This can be used to, for instance, clean up after a list of children which
719
+ * should no longer be shown.
720
+ *
721
+ * This function also handles some of Stencil's slot relocation logic.
722
+ *
723
+ * @param vnodes a list of virtual DOM nodes to remove
724
+ * @param startIdx the index at which to start removing nodes (inclusive)
725
+ * @param endIdx the index at which to stop removing nodes (inclusive)
726
+ */
727
+ const removeVnodes = (vnodes, startIdx, endIdx) => {
728
+ for (let index = startIdx; index <= endIdx; ++index) {
729
+ const vnode = vnodes[index];
730
+ if (vnode) {
731
+ const elm = vnode.$elm$;
732
+ nullifyVNodeRefs(vnode);
733
+ if (elm) {
734
+ {
735
+ // we're removing this element
736
+ // so it's possible we need to show slot fallback content now
737
+ checkSlotFallbackVisibility = true;
738
+ if (elm['s-ol']) {
739
+ // remove the original location comment
740
+ elm['s-ol'].remove();
741
+ }
742
+ else {
743
+ // it's possible that child nodes of the node
744
+ // that's being removed are slot nodes
745
+ putBackInOriginalLocation(elm, true);
746
+ }
635
747
  }
748
+ // remove the vnode's element from the dom
749
+ elm.remove();
636
750
  }
637
- // remove the vnode's element from the dom
638
- elm.remove();
639
751
  }
640
752
  }
641
753
  };
754
+ /**
755
+ * Reconcile the children of a new VNode with the children of an old VNode by
756
+ * traversing the two collections of children, identifying nodes that are
757
+ * conserved or changed, calling out to `patch` to make any necessary
758
+ * updates to the DOM, and rearranging DOM nodes as needed.
759
+ *
760
+ * The algorithm for reconciling children works by analyzing two 'windows' onto
761
+ * the two arrays of children (`oldCh` and `newCh`). We keep track of the
762
+ * 'windows' by storing start and end indices and references to the
763
+ * corresponding array entries. Initially the two 'windows' are basically equal
764
+ * to the entire array, but we progressively narrow the windows until there are
765
+ * no children left to update by doing the following:
766
+ *
767
+ * 1. Skip any `null` entries at the beginning or end of the two arrays, so
768
+ * that if we have an initial array like the following we'll end up dealing
769
+ * only with a window bounded by the highlighted elements:
770
+ *
771
+ * [null, null, VNode1 , ... , VNode2, null, null]
772
+ * ^^^^^^ ^^^^^^
773
+ *
774
+ * 2. Check to see if the elements at the head and tail positions are equal
775
+ * across the windows. This will basically detect elements which haven't
776
+ * been added, removed, or changed position, i.e. if you had the following
777
+ * VNode elements (represented as HTML):
778
+ *
779
+ * oldVNode: `<div><p><span>HEY</span></p></div>`
780
+ * newVNode: `<div><p><span>THERE</span></p></div>`
781
+ *
782
+ * Then when comparing the children of the `<div>` tag we check the equality
783
+ * of the VNodes corresponding to the `<p>` tags and, since they are the
784
+ * same tag in the same position, we'd be able to avoid completely
785
+ * re-rendering the subtree under them with a new DOM element and would just
786
+ * call out to `patch` to handle reconciling their children and so on.
787
+ *
788
+ * 3. Check, for both windows, to see if the element at the beginning of the
789
+ * window corresponds to the element at the end of the other window. This is
790
+ * a heuristic which will let us identify _some_ situations in which
791
+ * elements have changed position, for instance it _should_ detect that the
792
+ * children nodes themselves have not changed but merely moved in the
793
+ * following example:
794
+ *
795
+ * oldVNode: `<div><element-one /><element-two /></div>`
796
+ * newVNode: `<div><element-two /><element-one /></div>`
797
+ *
798
+ * If we find cases like this then we also need to move the concrete DOM
799
+ * elements corresponding to the moved children to write the re-order to the
800
+ * DOM.
801
+ *
802
+ * 4. Finally, if VNodes have the `key` attribute set on them we check for any
803
+ * nodes in the old children which have the same key as the first element in
804
+ * our window on the new children. If we find such a node we handle calling
805
+ * out to `patch`, moving relevant DOM nodes, and so on, in accordance with
806
+ * what we find.
807
+ *
808
+ * Finally, once we've narrowed our 'windows' to the point that either of them
809
+ * collapse (i.e. they have length 0) we then handle any remaining VNode
810
+ * insertion or deletion that needs to happen to get a DOM state that correctly
811
+ * reflects the new child VNodes. If, for instance, after our window on the old
812
+ * children has collapsed we still have more nodes on the new children that
813
+ * we haven't dealt with yet then we need to add them, or if the new children
814
+ * collapse but we still have unhandled _old_ children then we need to make
815
+ * sure the corresponding DOM nodes are removed.
816
+ *
817
+ * @param parentElm the node into which the parent VNode is rendered
818
+ * @param oldCh the old children of the parent node
819
+ * @param newVNode the new VNode which will replace the parent
820
+ * @param newCh the new children of the parent node
821
+ */
642
822
  const updateChildren = (parentElm, oldCh, newVNode, newCh) => {
643
823
  let oldStartIdx = 0;
644
824
  let newStartIdx = 0;
@@ -654,7 +834,7 @@ const updateChildren = (parentElm, oldCh, newVNode, newCh) => {
654
834
  let elmToMove;
655
835
  while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
656
836
  if (oldStartVnode == null) {
657
- // Vnode might have been moved left
837
+ // VNode might have been moved left
658
838
  oldStartVnode = oldCh[++oldStartIdx];
659
839
  }
660
840
  else if (oldEndVnode == null) {
@@ -667,37 +847,100 @@ const updateChildren = (parentElm, oldCh, newVNode, newCh) => {
667
847
  newEndVnode = newCh[--newEndIdx];
668
848
  }
669
849
  else if (isSameVnode(oldStartVnode, newStartVnode)) {
850
+ // if the start nodes are the same then we should patch the new VNode
851
+ // onto the old one, and increment our `newStartIdx` and `oldStartIdx`
852
+ // indices to reflect that. We don't need to move any DOM Nodes around
853
+ // since things are matched up in order.
670
854
  patch(oldStartVnode, newStartVnode);
671
855
  oldStartVnode = oldCh[++oldStartIdx];
672
856
  newStartVnode = newCh[++newStartIdx];
673
857
  }
674
858
  else if (isSameVnode(oldEndVnode, newEndVnode)) {
859
+ // likewise, if the end nodes are the same we patch new onto old and
860
+ // decrement our end indices, and also likewise in this case we don't
861
+ // need to move any DOM Nodes.
675
862
  patch(oldEndVnode, newEndVnode);
676
863
  oldEndVnode = oldCh[--oldEndIdx];
677
864
  newEndVnode = newCh[--newEndIdx];
678
865
  }
679
866
  else if (isSameVnode(oldStartVnode, newEndVnode)) {
680
- // Vnode moved right
867
+ // case: "Vnode moved right"
868
+ //
869
+ // We've found that the last node in our window on the new children is
870
+ // the same VNode as the _first_ node in our window on the old children
871
+ // we're dealing with now. Visually, this is the layout of these two
872
+ // nodes:
873
+ //
874
+ // newCh: [..., newStartVnode , ... , newEndVnode , ...]
875
+ // ^^^^^^^^^^^
876
+ // oldCh: [..., oldStartVnode , ... , oldEndVnode , ...]
877
+ // ^^^^^^^^^^^^^
878
+ //
879
+ // In this situation we need to patch `newEndVnode` onto `oldStartVnode`
880
+ // and move the DOM element for `oldStartVnode`.
681
881
  if ((oldStartVnode.$tag$ === 'slot' || newEndVnode.$tag$ === 'slot')) {
682
882
  putBackInOriginalLocation(oldStartVnode.$elm$.parentNode, false);
683
883
  }
684
884
  patch(oldStartVnode, newEndVnode);
885
+ // We need to move the element for `oldStartVnode` into a position which
886
+ // will be appropriate for `newEndVnode`. For this we can use
887
+ // `.insertBefore` and `oldEndVnode.$elm$.nextSibling`. If there is a
888
+ // sibling for `oldEndVnode.$elm$` then we want to move the DOM node for
889
+ // `oldStartVnode` between `oldEndVnode` and it's sibling, like so:
890
+ //
891
+ // <old-start-node />
892
+ // <some-intervening-node />
893
+ // <old-end-node />
894
+ // <!-- -> <-- `oldStartVnode.$elm$` should be inserted here
895
+ // <next-sibling />
896
+ //
897
+ // If instead `oldEndVnode.$elm$` has no sibling then we just want to put
898
+ // the node for `oldStartVnode` at the end of the children of
899
+ // `parentElm`. Luckily, `Node.nextSibling` will return `null` if there
900
+ // aren't any siblings, and passing `null` to `Node.insertBefore` will
901
+ // append it to the children of the parent element.
685
902
  parentElm.insertBefore(oldStartVnode.$elm$, oldEndVnode.$elm$.nextSibling);
686
903
  oldStartVnode = oldCh[++oldStartIdx];
687
904
  newEndVnode = newCh[--newEndIdx];
688
905
  }
689
906
  else if (isSameVnode(oldEndVnode, newStartVnode)) {
690
- // Vnode moved left
907
+ // case: "Vnode moved left"
908
+ //
909
+ // We've found that the first node in our window on the new children is
910
+ // the same VNode as the _last_ node in our window on the old children.
911
+ // Visually, this is the layout of these two nodes:
912
+ //
913
+ // newCh: [..., newStartVnode , ... , newEndVnode , ...]
914
+ // ^^^^^^^^^^^^^
915
+ // oldCh: [..., oldStartVnode , ... , oldEndVnode , ...]
916
+ // ^^^^^^^^^^^
917
+ //
918
+ // In this situation we need to patch `newStartVnode` onto `oldEndVnode`
919
+ // (which will handle updating any changed attributes, reconciling their
920
+ // children etc) but we also need to move the DOM node to which
921
+ // `oldEndVnode` corresponds.
691
922
  if ((oldStartVnode.$tag$ === 'slot' || newEndVnode.$tag$ === 'slot')) {
692
923
  putBackInOriginalLocation(oldEndVnode.$elm$.parentNode, false);
693
924
  }
694
925
  patch(oldEndVnode, newStartVnode);
926
+ // We've already checked above if `oldStartVnode` and `newStartVnode` are
927
+ // the same node, so since we're here we know that they are not. Thus we
928
+ // can move the element for `oldEndVnode` _before_ the element for
929
+ // `oldStartVnode`, leaving `oldStartVnode` to be reconciled in the
930
+ // future.
695
931
  parentElm.insertBefore(oldEndVnode.$elm$, oldStartVnode.$elm$);
696
932
  oldEndVnode = oldCh[--oldEndIdx];
697
933
  newStartVnode = newCh[++newStartIdx];
698
934
  }
699
935
  else {
700
- // createKeyToOldIdx
936
+ // Here we do some checks to match up old and new nodes based on the
937
+ // `$key$` attribute, which is set by putting a `key="my-key"` attribute
938
+ // in the JSX for a DOM element in the implementation of a Stencil
939
+ // component.
940
+ //
941
+ // First we check to see if there are any nodes in the array of old
942
+ // children which have the same key as the first node in the new
943
+ // children.
701
944
  idxInOld = -1;
702
945
  {
703
946
  for (i = oldStartIdx; i <= oldEndIdx; ++i) {
@@ -708,23 +951,32 @@ const updateChildren = (parentElm, oldCh, newVNode, newCh) => {
708
951
  }
709
952
  }
710
953
  if (idxInOld >= 0) {
954
+ // We found a node in the old children which matches up with the first
955
+ // node in the new children! So let's deal with that
711
956
  elmToMove = oldCh[idxInOld];
712
957
  if (elmToMove.$tag$ !== newStartVnode.$tag$) {
958
+ // the tag doesn't match so we'll need a new DOM element
713
959
  node = createElm(oldCh && oldCh[newStartIdx], newVNode, idxInOld);
714
960
  }
715
961
  else {
716
962
  patch(elmToMove, newStartVnode);
963
+ // invalidate the matching old node so that we won't try to update it
964
+ // again later on
717
965
  oldCh[idxInOld] = undefined;
718
966
  node = elmToMove.$elm$;
719
967
  }
720
968
  newStartVnode = newCh[++newStartIdx];
721
969
  }
722
970
  else {
723
- // new element
971
+ // We either didn't find an element in the old children that matches
972
+ // the key of the first new child OR the build is not using `key`
973
+ // attributes at all. In either case we need to create a new element
974
+ // for the new node.
724
975
  node = createElm(oldCh && oldCh[newStartIdx], newVNode, newStartIdx);
725
976
  newStartVnode = newCh[++newStartIdx];
726
977
  }
727
978
  if (node) {
979
+ // if we created a new node then handle inserting it to the DOM
728
980
  {
729
981
  parentReferenceNode(oldStartVnode.$elm$).insertBefore(node, referenceNode(oldStartVnode.$elm$));
730
982
  }
@@ -732,21 +984,44 @@ const updateChildren = (parentElm, oldCh, newVNode, newCh) => {
732
984
  }
733
985
  }
734
986
  if (oldStartIdx > oldEndIdx) {
987
+ // we have some more new nodes to add which don't match up with old nodes
735
988
  addVnodes(parentElm, newCh[newEndIdx + 1] == null ? null : newCh[newEndIdx + 1].$elm$, newVNode, newCh, newStartIdx, newEndIdx);
736
989
  }
737
990
  else if (newStartIdx > newEndIdx) {
991
+ // there are nodes in the `oldCh` array which no longer correspond to nodes
992
+ // in the new array, so lets remove them (which entails cleaning up the
993
+ // relevant DOM nodes)
738
994
  removeVnodes(oldCh, oldStartIdx, oldEndIdx);
739
995
  }
740
996
  };
741
- const isSameVnode = (vnode1, vnode2) => {
997
+ /**
998
+ * Compare two VNodes to determine if they are the same
999
+ *
1000
+ * **NB**: This function is an equality _heuristic_ based on the available
1001
+ * information set on the two VNodes and can be misleading under certain
1002
+ * circumstances. In particular, if the two nodes do not have `key` attrs
1003
+ * (available under `$key$` on VNodes) then the function falls back on merely
1004
+ * checking that they have the same tag.
1005
+ *
1006
+ * So, in other words, if `key` attrs are not set on VNodes which may be
1007
+ * changing order within a `children` array or something along those lines then
1008
+ * we could obtain a false negative and then have to do needless re-rendering
1009
+ * (i.e. we'd say two VNodes aren't equal when in fact they should be).
1010
+ *
1011
+ * @param leftVNode the first VNode to check
1012
+ * @param rightVNode the second VNode to check
1013
+ * @returns whether they're equal or not
1014
+ */
1015
+ const isSameVnode = (leftVNode, rightVNode) => {
742
1016
  // compare if two vnode to see if they're "technically" the same
743
1017
  // need to have the same element tag, and same key to be the same
744
- if (vnode1.$tag$ === vnode2.$tag$) {
745
- if (vnode1.$tag$ === 'slot') {
746
- return vnode1.$name$ === vnode2.$name$;
1018
+ if (leftVNode.$tag$ === rightVNode.$tag$) {
1019
+ if (leftVNode.$tag$ === 'slot') {
1020
+ return leftVNode.$name$ === rightVNode.$name$;
747
1021
  }
1022
+ // this will be set if components in the build have `key` attrs set on them
748
1023
  {
749
- return vnode1.$key$ === vnode2.$key$;
1024
+ return leftVNode.$key$ === rightVNode.$key$;
750
1025
  }
751
1026
  }
752
1027
  return false;
@@ -759,6 +1034,14 @@ const referenceNode = (node) => {
759
1034
  return (node && node['s-ol']) || node;
760
1035
  };
761
1036
  const parentReferenceNode = (node) => (node['s-ol'] ? node['s-ol'] : node).parentNode;
1037
+ /**
1038
+ * Handle reconciling an outdated VNode with a new one which corresponds to
1039
+ * it. This function handles flushing updates to the DOM and reconciling the
1040
+ * children of the two nodes (if any).
1041
+ *
1042
+ * @param oldVNode an old VNode whose DOM element and children we want to update
1043
+ * @param newVNode a new VNode representing an updated version of the old one
1044
+ */
762
1045
  const patch = (oldVNode, newVNode) => {
763
1046
  const elm = (newVNode.$elm$ = oldVNode.$elm$);
764
1047
  const oldChildren = oldVNode.$children$;
@@ -772,7 +1055,6 @@ const patch = (oldVNode, newVNode) => {
772
1055
  // only add this to the when the compiler sees we're using an svg somewhere
773
1056
  isSvgMode = tag === 'svg' ? true : tag === 'foreignObject' ? false : isSvgMode;
774
1057
  }
775
- // element node
776
1058
  {
777
1059
  if (tag === 'slot')
778
1060
  ;
@@ -785,6 +1067,7 @@ const patch = (oldVNode, newVNode) => {
785
1067
  }
786
1068
  if (oldChildren !== null && newChildren !== null) {
787
1069
  // looks like there's child vnodes for both the old and new vnodes
1070
+ // so we need to call `updateChildren` to reconcile them
788
1071
  updateChildren(elm, oldChildren, newVNode, newChildren);
789
1072
  }
790
1073
  else if (newChildren !== null) {
@@ -825,7 +1108,7 @@ const updateFallbackSlotVisibility = (elm) => {
825
1108
  let nodeType;
826
1109
  for (i = 0, ilen = childNodes.length; i < ilen; i++) {
827
1110
  childNode = childNodes[i];
828
- if (childNode.nodeType === 1 /* ElementNode */) {
1111
+ if (childNode.nodeType === 1 /* NODE_TYPE.ElementNode */) {
829
1112
  if (childNode['s-sr']) {
830
1113
  // this is a slot fallback node
831
1114
  // get the slot name for this slot reference node
@@ -837,7 +1120,7 @@ const updateFallbackSlotVisibility = (elm) => {
837
1120
  nodeType = childNodes[j].nodeType;
838
1121
  if (childNodes[j]['s-hn'] !== childNode['s-hn'] || slotNameAttr !== '') {
839
1122
  // this sibling node is from a different component OR is a named fallback slot node
840
- if (nodeType === 1 /* ElementNode */ && slotNameAttr === childNodes[j].getAttribute('slot')) {
1123
+ if (nodeType === 1 /* NODE_TYPE.ElementNode */ && slotNameAttr === childNodes[j].getAttribute('slot')) {
841
1124
  childNode.hidden = true;
842
1125
  break;
843
1126
  }
@@ -846,8 +1129,8 @@ const updateFallbackSlotVisibility = (elm) => {
846
1129
  // this is a default fallback slot node
847
1130
  // any element or text node (with content)
848
1131
  // should hide the default fallback slot node
849
- if (nodeType === 1 /* ElementNode */ ||
850
- (nodeType === 3 /* TextNode */ && childNodes[j].textContent.trim() !== '')) {
1132
+ if (nodeType === 1 /* NODE_TYPE.ElementNode */ ||
1133
+ (nodeType === 3 /* NODE_TYPE.TextNode */ && childNodes[j].textContent.trim() !== '')) {
851
1134
  childNode.hidden = true;
852
1135
  break;
853
1136
  }
@@ -925,13 +1208,13 @@ const relocateSlotContent = (elm) => {
925
1208
  }
926
1209
  }
927
1210
  }
928
- if (childNode.nodeType === 1 /* ElementNode */) {
1211
+ if (childNode.nodeType === 1 /* NODE_TYPE.ElementNode */) {
929
1212
  relocateSlotContent(childNode);
930
1213
  }
931
1214
  }
932
1215
  };
933
1216
  const isNodeLocatedInSlot = (nodeToRelocate, slotNameAttr) => {
934
- if (nodeToRelocate.nodeType === 1 /* ElementNode */) {
1217
+ if (nodeToRelocate.nodeType === 1 /* NODE_TYPE.ElementNode */) {
935
1218
  if (nodeToRelocate.getAttribute('slot') === null && slotNameAttr === '') {
936
1219
  return true;
937
1220
  }
@@ -945,12 +1228,31 @@ const isNodeLocatedInSlot = (nodeToRelocate, slotNameAttr) => {
945
1228
  }
946
1229
  return slotNameAttr === '';
947
1230
  };
948
- const callNodeRefs = (vNode) => {
1231
+ /**
1232
+ * 'Nullify' any VDom `ref` callbacks on a VDom node or its children by
1233
+ * calling them with `null`. This signals that the DOM element corresponding to
1234
+ * the VDom node has been removed from the DOM.
1235
+ *
1236
+ * @param vNode a virtual DOM node
1237
+ */
1238
+ const nullifyVNodeRefs = (vNode) => {
949
1239
  {
950
1240
  vNode.$attrs$ && vNode.$attrs$.ref && vNode.$attrs$.ref(null);
951
- vNode.$children$ && vNode.$children$.map(callNodeRefs);
1241
+ vNode.$children$ && vNode.$children$.map(nullifyVNodeRefs);
952
1242
  }
953
1243
  };
1244
+ /**
1245
+ * The main entry point for Stencil's virtual DOM-based rendering engine
1246
+ *
1247
+ * Given a {@link d.HostRef} container and some virtual DOM nodes, this
1248
+ * function will handle creating a virtual DOM tree with a single root, patching
1249
+ * the current virtual DOM tree onto an old one (if any), dealing with slot
1250
+ * relocation, and reflecting attributes.
1251
+ *
1252
+ * @param hostRef data needed to root and render the virtual DOM tree, such as
1253
+ * the DOM node into which it should be rendered.
1254
+ * @param renderFnResults the virtual DOM nodes to be rendered
1255
+ */
954
1256
  const renderVdom = (hostRef, renderFnResults) => {
955
1257
  const hostElm = hostRef.$hostElement$;
956
1258
  const cmpMeta = hostRef.$cmpMeta$;
@@ -962,12 +1264,12 @@ const renderVdom = (hostRef, renderFnResults) => {
962
1264
  cmpMeta.$attrsToReflect$.map(([propName, attribute]) => (rootVnode.$attrs$[attribute] = hostElm[propName]));
963
1265
  }
964
1266
  rootVnode.$tag$ = null;
965
- rootVnode.$flags$ |= 4 /* isHost */;
1267
+ rootVnode.$flags$ |= 4 /* VNODE_FLAGS.isHost */;
966
1268
  hostRef.$vnode$ = rootVnode;
967
1269
  rootVnode.$elm$ = oldVNode.$elm$ = (hostElm);
968
1270
  {
969
1271
  contentRef = hostElm['s-cr'];
970
- useNativeShadowDom = (cmpMeta.$flags$ & 1 /* shadowDomEncapsulation */) !== 0;
1272
+ useNativeShadowDom = (cmpMeta.$flags$ & 1 /* CMP_FLAGS.shadowDomEncapsulation */) !== 0;
971
1273
  // always reset
972
1274
  checkSlotFallbackVisibility = false;
973
1275
  }
@@ -976,7 +1278,7 @@ const renderVdom = (hostRef, renderFnResults) => {
976
1278
  {
977
1279
  // while we're moving nodes around existing nodes, temporarily disable
978
1280
  // the disconnectCallback from working
979
- plt.$flags$ |= 1 /* isTmpDisconnected */;
1281
+ plt.$flags$ |= 1 /* PLATFORM_FLAGS.isTmpDisconnected */;
980
1282
  if (checkSlotRelocate) {
981
1283
  relocateSlotContent(rootVnode.$elm$);
982
1284
  let relocateData;
@@ -1034,7 +1336,7 @@ const renderVdom = (hostRef, renderFnResults) => {
1034
1336
  }
1035
1337
  else {
1036
1338
  // this node doesn't have a slot home to go to, so let's hide it
1037
- if (nodeToRelocate.nodeType === 1 /* ElementNode */) {
1339
+ if (nodeToRelocate.nodeType === 1 /* NODE_TYPE.ElementNode */) {
1038
1340
  nodeToRelocate.hidden = true;
1039
1341
  }
1040
1342
  }
@@ -1045,37 +1347,11 @@ const renderVdom = (hostRef, renderFnResults) => {
1045
1347
  }
1046
1348
  // done moving nodes around
1047
1349
  // allow the disconnect callback to work again
1048
- plt.$flags$ &= ~1 /* isTmpDisconnected */;
1350
+ plt.$flags$ &= ~1 /* PLATFORM_FLAGS.isTmpDisconnected */;
1049
1351
  // always reset
1050
1352
  relocateNodes.length = 0;
1051
1353
  }
1052
1354
  };
1053
- const getElement = (ref) => (getHostRef(ref).$hostElement$ );
1054
- const createEvent = (ref, name, flags) => {
1055
- const elm = getElement(ref);
1056
- return {
1057
- emit: (detail) => {
1058
- return emitEvent(elm, name, {
1059
- bubbles: !!(flags & 4 /* Bubbles */),
1060
- composed: !!(flags & 2 /* Composed */),
1061
- cancelable: !!(flags & 1 /* Cancellable */),
1062
- detail,
1063
- });
1064
- },
1065
- };
1066
- };
1067
- /**
1068
- * Helper function to create & dispatch a custom Event on a provided target
1069
- * @param elm the target of the Event
1070
- * @param name the name to give the custom Event
1071
- * @param opts options for configuring a custom Event
1072
- * @returns the custom Event
1073
- */
1074
- const emitEvent = (elm, name, opts) => {
1075
- const ev = plt.ce(name, opts);
1076
- elm.dispatchEvent(ev);
1077
- return ev;
1078
- };
1079
1355
  const attachToAncestor = (hostRef, ancestorComponent) => {
1080
1356
  if (ancestorComponent && !hostRef.$onRenderResolve$ && ancestorComponent['s-p']) {
1081
1357
  ancestorComponent['s-p'].push(new Promise((r) => (hostRef.$onRenderResolve$ = r)));
@@ -1083,10 +1359,10 @@ const attachToAncestor = (hostRef, ancestorComponent) => {
1083
1359
  };
1084
1360
  const scheduleUpdate = (hostRef, isInitialLoad) => {
1085
1361
  {
1086
- hostRef.$flags$ |= 16 /* isQueuedForUpdate */;
1362
+ hostRef.$flags$ |= 16 /* HOST_FLAGS.isQueuedForUpdate */;
1087
1363
  }
1088
- if (hostRef.$flags$ & 4 /* isWaitingForChildren */) {
1089
- hostRef.$flags$ |= 512 /* needsRerender */;
1364
+ if (hostRef.$flags$ & 4 /* HOST_FLAGS.isWaitingForChildren */) {
1365
+ hostRef.$flags$ |= 512 /* HOST_FLAGS.needsRerender */;
1090
1366
  return;
1091
1367
  }
1092
1368
  attachToAncestor(hostRef, hostRef.$ancestorComponent$);
@@ -1096,30 +1372,86 @@ const scheduleUpdate = (hostRef, isInitialLoad) => {
1096
1372
  const dispatch = () => dispatchHooks(hostRef, isInitialLoad);
1097
1373
  return writeTask(dispatch) ;
1098
1374
  };
1375
+ /**
1376
+ * Dispatch initial-render and update lifecycle hooks, enqueuing calls to
1377
+ * component lifecycle methods like `componentWillLoad` as well as
1378
+ * {@link updateComponent}, which will kick off the virtual DOM re-render.
1379
+ *
1380
+ * @param hostRef a reference to a host DOM node
1381
+ * @param isInitialLoad whether we're on the initial load or not
1382
+ * @returns an empty Promise which is used to enqueue a series of operations for
1383
+ * the component
1384
+ */
1099
1385
  const dispatchHooks = (hostRef, isInitialLoad) => {
1100
1386
  const endSchedule = createTime('scheduleUpdate', hostRef.$cmpMeta$.$tagName$);
1101
1387
  const instance = hostRef.$lazyInstance$ ;
1102
- let promise;
1388
+ // We're going to use this variable together with `enqueue` to implement a
1389
+ // little promise-based queue. We start out with it `undefined`. When we add
1390
+ // the first function to the queue we'll set this variable to be that
1391
+ // function's return value. When we attempt to add subsequent values to the
1392
+ // queue we'll check that value and, if it was a `Promise`, we'll then chain
1393
+ // the new function off of that `Promise` using `.then()`. This will give our
1394
+ // queue two nice properties:
1395
+ //
1396
+ // 1. If all functions added to the queue are synchronous they'll be called
1397
+ // synchronously right away.
1398
+ // 2. If all functions added to the queue are asynchronous they'll all be
1399
+ // called in order after `dispatchHooks` exits.
1400
+ let maybePromise;
1103
1401
  if (isInitialLoad) {
1104
1402
  {
1105
- hostRef.$flags$ |= 256 /* isListenReady */;
1403
+ hostRef.$flags$ |= 256 /* HOST_FLAGS.isListenReady */;
1106
1404
  if (hostRef.$queuedListeners$) {
1107
1405
  hostRef.$queuedListeners$.map(([methodName, event]) => safeCall(instance, methodName, event));
1108
- hostRef.$queuedListeners$ = null;
1406
+ hostRef.$queuedListeners$ = undefined;
1109
1407
  }
1110
1408
  }
1111
1409
  {
1112
- promise = safeCall(instance, 'componentWillLoad');
1410
+ // If `componentWillLoad` returns a `Promise` then we want to wait on
1411
+ // whatever's going on in that `Promise` before we launch into
1412
+ // rendering the component, doing other lifecycle stuff, etc. So
1413
+ // in that case we assign the returned promise to the variable we
1414
+ // declared above to hold a possible 'queueing' Promise
1415
+ maybePromise = safeCall(instance, 'componentWillLoad');
1113
1416
  }
1114
1417
  }
1115
1418
  {
1116
- promise = then(promise, () => safeCall(instance, 'componentWillRender'));
1419
+ maybePromise = enqueue(maybePromise, () => safeCall(instance, 'componentWillRender'));
1117
1420
  }
1118
1421
  endSchedule();
1119
- return then(promise, () => updateComponent(hostRef, instance, isInitialLoad));
1422
+ return enqueue(maybePromise, () => updateComponent(hostRef, instance, isInitialLoad));
1120
1423
  };
1424
+ /**
1425
+ * This function uses a Promise to implement a simple first-in, first-out queue
1426
+ * of functions to be called.
1427
+ *
1428
+ * The queue is ordered on the basis of the first argument. If it's
1429
+ * `undefined`, then nothing is on the queue yet, so the provided function can
1430
+ * be called synchronously (although note that this function may return a
1431
+ * `Promise`). The idea is that then the return value of that enqueueing
1432
+ * operation is kept around, so that if it was a `Promise` then subsequent
1433
+ * functions can be enqueued by calling this function again with that `Promise`
1434
+ * as the first argument.
1435
+ *
1436
+ * @param maybePromise either a `Promise` which should resolve before the next function is called or an 'empty' sentinel
1437
+ * @param fn a function to enqueue
1438
+ * @returns either a `Promise` or the return value of the provided function
1439
+ */
1440
+ const enqueue = (maybePromise, fn) => isPromisey(maybePromise) ? maybePromise.then(fn) : fn();
1441
+ /**
1442
+ * Check that a value is a `Promise`. To check, we first see if the value is an
1443
+ * instance of the `Promise` global. In a few circumstances, in particular if
1444
+ * the global has been overwritten, this is could be misleading, so we also do
1445
+ * a little 'duck typing' check to see if the `.then` property of the value is
1446
+ * defined and a function.
1447
+ *
1448
+ * @param maybePromise it might be a promise!
1449
+ * @returns whether it is or not
1450
+ */
1451
+ const isPromisey = (maybePromise) => maybePromise instanceof Promise ||
1452
+ (maybePromise && maybePromise.then && typeof maybePromise.then === 'function');
1121
1453
  const updateComponent = async (hostRef, instance, isInitialLoad) => {
1122
- // updateComponent
1454
+ var _a;
1123
1455
  const elm = hostRef.$hostElement$;
1124
1456
  const endUpdate = createTime('update', hostRef.$cmpMeta$.$tagName$);
1125
1457
  const rc = elm['s-rc'];
@@ -1131,9 +1463,6 @@ const updateComponent = async (hostRef, instance, isInitialLoad) => {
1131
1463
  {
1132
1464
  callRender(hostRef, instance);
1133
1465
  }
1134
- if (plt.$cssShim$) {
1135
- plt.$cssShim$.updateHost(elm);
1136
- }
1137
1466
  if (rc) {
1138
1467
  // ok, so turns out there are some child host elements
1139
1468
  // waiting on this parent element to load
@@ -1144,14 +1473,14 @@ const updateComponent = async (hostRef, instance, isInitialLoad) => {
1144
1473
  endRender();
1145
1474
  endUpdate();
1146
1475
  {
1147
- const childrenPromises = elm['s-p'];
1476
+ const childrenPromises = (_a = elm['s-p']) !== null && _a !== void 0 ? _a : [];
1148
1477
  const postUpdate = () => postUpdateComponent(hostRef);
1149
1478
  if (childrenPromises.length === 0) {
1150
1479
  postUpdate();
1151
1480
  }
1152
1481
  else {
1153
1482
  Promise.all(childrenPromises).then(postUpdate);
1154
- hostRef.$flags$ |= 4 /* isWaitingForChildren */;
1483
+ hostRef.$flags$ |= 4 /* HOST_FLAGS.isWaitingForChildren */;
1155
1484
  childrenPromises.length = 0;
1156
1485
  }
1157
1486
  }
@@ -1161,10 +1490,10 @@ const callRender = (hostRef, instance, elm) => {
1161
1490
  renderingRef = instance;
1162
1491
  instance = instance.render && instance.render();
1163
1492
  {
1164
- hostRef.$flags$ &= ~16 /* isQueuedForUpdate */;
1493
+ hostRef.$flags$ &= ~16 /* HOST_FLAGS.isQueuedForUpdate */;
1165
1494
  }
1166
1495
  {
1167
- hostRef.$flags$ |= 2 /* hasRendered */;
1496
+ hostRef.$flags$ |= 2 /* HOST_FLAGS.hasRendered */;
1168
1497
  }
1169
1498
  {
1170
1499
  {
@@ -1193,8 +1522,8 @@ const postUpdateComponent = (hostRef) => {
1193
1522
  {
1194
1523
  safeCall(instance, 'componentDidRender');
1195
1524
  }
1196
- if (!(hostRef.$flags$ & 64 /* hasLoadedComponent */)) {
1197
- hostRef.$flags$ |= 64 /* hasLoadedComponent */;
1525
+ if (!(hostRef.$flags$ & 64 /* HOST_FLAGS.hasLoadedComponent */)) {
1526
+ hostRef.$flags$ |= 64 /* HOST_FLAGS.hasLoadedComponent */;
1198
1527
  {
1199
1528
  // DOM WRITE!
1200
1529
  addHydratedFlag(elm);
@@ -1223,10 +1552,10 @@ const postUpdateComponent = (hostRef) => {
1223
1552
  hostRef.$onRenderResolve$();
1224
1553
  hostRef.$onRenderResolve$ = undefined;
1225
1554
  }
1226
- if (hostRef.$flags$ & 512 /* needsRerender */) {
1555
+ if (hostRef.$flags$ & 512 /* HOST_FLAGS.needsRerender */) {
1227
1556
  nextTick(() => scheduleUpdate(hostRef, false));
1228
1557
  }
1229
- hostRef.$flags$ &= ~(4 /* isWaitingForChildren */ | 512 /* needsRerender */);
1558
+ hostRef.$flags$ &= ~(4 /* HOST_FLAGS.isWaitingForChildren */ | 512 /* HOST_FLAGS.needsRerender */);
1230
1559
  }
1231
1560
  // ( •_•)
1232
1561
  // ( •_•)>⌐■-■
@@ -1237,7 +1566,7 @@ const forceUpdate = (ref) => {
1237
1566
  const hostRef = getHostRef(ref);
1238
1567
  const isConnected = hostRef.$hostElement$.isConnected;
1239
1568
  if (isConnected &&
1240
- (hostRef.$flags$ & (2 /* hasRendered */ | 16 /* isQueuedForUpdate */)) === 2 /* hasRendered */) {
1569
+ (hostRef.$flags$ & (2 /* HOST_FLAGS.hasRendered */ | 16 /* HOST_FLAGS.isQueuedForUpdate */)) === 2 /* HOST_FLAGS.hasRendered */) {
1241
1570
  scheduleUpdate(hostRef, false);
1242
1571
  }
1243
1572
  // Returns "true" when the forced update was successfully scheduled
@@ -1263,58 +1592,8 @@ const safeCall = (instance, method, arg) => {
1263
1592
  }
1264
1593
  return undefined;
1265
1594
  };
1266
- const then = (promise, thenFn) => {
1267
- return promise && promise.then ? promise.then(thenFn) : thenFn();
1268
- };
1269
1595
  const addHydratedFlag = (elm) => elm.classList.add('hydrated')
1270
1596
  ;
1271
- /**
1272
- * Parse a new property value for a given property type.
1273
- *
1274
- * While the prop value can reasonably be expected to be of `any` type as far as TypeScript's type checker is concerned,
1275
- * it is not safe to assume that the string returned by evaluating `typeof propValue` matches:
1276
- * 1. `any`, the type given to `propValue` in the function signature
1277
- * 2. the type stored from `propType`.
1278
- *
1279
- * This function provides the capability to parse/coerce a property's value to potentially any other JavaScript type.
1280
- *
1281
- * Property values represented in TSX preserve their type information. In the example below, the number 0 is passed to
1282
- * a component. This `propValue` will preserve its type information (`typeof propValue === 'number'`). Note that is
1283
- * based on the type of the value being passed in, not the type declared of the class member decorated with `@Prop`.
1284
- * ```tsx
1285
- * <my-cmp prop-val={0}></my-cmp>
1286
- * ```
1287
- *
1288
- * HTML prop values on the other hand, will always a string
1289
- *
1290
- * @param propValue the new value to coerce to some type
1291
- * @param propType the type of the prop, expressed as a binary number
1292
- * @returns the parsed/coerced value
1293
- */
1294
- const parsePropertyValue = (propValue, propType) => {
1295
- // ensure this value is of the correct prop type
1296
- if (propValue != null && !isComplexType(propValue)) {
1297
- if (propType & 4 /* Boolean */) {
1298
- // per the HTML spec, any string value means it is a boolean true value
1299
- // but we'll cheat here and say that the string "false" is the boolean false
1300
- return propValue === 'false' ? false : propValue === '' || !!propValue;
1301
- }
1302
- if (propType & 2 /* Number */) {
1303
- // force it to be a number
1304
- return parseFloat(propValue);
1305
- }
1306
- if (propType & 1 /* String */) {
1307
- // could have been passed as a number or boolean
1308
- // but we still want it as a string
1309
- return String(propValue);
1310
- }
1311
- // redundant return here for better minification
1312
- return propValue;
1313
- }
1314
- // not sure exactly what type we want
1315
- // so no need to change to a different type
1316
- return propValue;
1317
- };
1318
1597
  const getValue = (ref, propName) => getHostRef(ref).$instanceValues$.get(propName);
1319
1598
  const setValue = (ref, propName, newVal, cmpMeta) => {
1320
1599
  // check our new property value against our internal value
@@ -1327,13 +1606,13 @@ const setValue = (ref, propName, newVal, cmpMeta) => {
1327
1606
  // explicitly check for NaN on both sides, as `NaN === NaN` is always false
1328
1607
  const areBothNaN = Number.isNaN(oldVal) && Number.isNaN(newVal);
1329
1608
  const didValueChange = newVal !== oldVal && !areBothNaN;
1330
- if ((!(flags & 8 /* isConstructingInstance */) || oldVal === undefined) && didValueChange) {
1609
+ if ((!(flags & 8 /* HOST_FLAGS.isConstructingInstance */) || oldVal === undefined) && didValueChange) {
1331
1610
  // gadzooks! the property's value has changed!!
1332
1611
  // set our new value!
1333
1612
  hostRef.$instanceValues$.set(propName, newVal);
1334
1613
  if (instance) {
1335
1614
  // get an array of method names of watch functions to call
1336
- if (cmpMeta.$watchers$ && flags & 128 /* isWatchReady */) {
1615
+ if (cmpMeta.$watchers$ && flags & 128 /* HOST_FLAGS.isWatchReady */) {
1337
1616
  const watchMethods = cmpMeta.$watchers$[propName];
1338
1617
  if (watchMethods) {
1339
1618
  // this instance is watching for when this property changed
@@ -1348,7 +1627,7 @@ const setValue = (ref, propName, newVal, cmpMeta) => {
1348
1627
  });
1349
1628
  }
1350
1629
  }
1351
- if ((flags & (2 /* hasRendered */ | 16 /* isQueuedForUpdate */)) === 2 /* hasRendered */) {
1630
+ if ((flags & (2 /* HOST_FLAGS.hasRendered */ | 16 /* HOST_FLAGS.isQueuedForUpdate */)) === 2 /* HOST_FLAGS.hasRendered */) {
1352
1631
  // looks like this value actually changed, so we've got work to do!
1353
1632
  // but only if we've already rendered, otherwise just chill out
1354
1633
  // queue that we need to do an update, but don't worry about queuing
@@ -1358,6 +1637,16 @@ const setValue = (ref, propName, newVal, cmpMeta) => {
1358
1637
  }
1359
1638
  }
1360
1639
  };
1640
+ /**
1641
+ * Attach a series of runtime constructs to a compiled Stencil component
1642
+ * constructor, including getters and setters for the `@Prop` and `@State`
1643
+ * decorators, callbacks for when attributes change, and so on.
1644
+ *
1645
+ * @param Cstr the constructor for a component that we need to process
1646
+ * @param cmpMeta metadata collected previously about the component
1647
+ * @param flags a number used to store a series of bit flags
1648
+ * @returns a reference to the same constructor passed in (but now mutated)
1649
+ */
1361
1650
  const proxyComponent = (Cstr, cmpMeta, flags) => {
1362
1651
  if (cmpMeta.$members$) {
1363
1652
  if (Cstr.watchers) {
@@ -1367,8 +1656,8 @@ const proxyComponent = (Cstr, cmpMeta, flags) => {
1367
1656
  const members = Object.entries(cmpMeta.$members$);
1368
1657
  const prototype = Cstr.prototype;
1369
1658
  members.map(([memberName, [memberFlags]]) => {
1370
- if ((memberFlags & 31 /* Prop */ ||
1371
- ((flags & 2 /* proxyState */) && memberFlags & 32 /* State */))) {
1659
+ if ((memberFlags & 31 /* MEMBER_FLAGS.Prop */ ||
1660
+ ((flags & 2 /* PROXY_FLAGS.proxyState */) && memberFlags & 32 /* MEMBER_FLAGS.State */))) {
1372
1661
  // proxyComponent - prop
1373
1662
  Object.defineProperty(prototype, memberName, {
1374
1663
  get() {
@@ -1383,8 +1672,8 @@ const proxyComponent = (Cstr, cmpMeta, flags) => {
1383
1672
  enumerable: true,
1384
1673
  });
1385
1674
  }
1386
- else if (flags & 1 /* isElementConstructor */ &&
1387
- memberFlags & 64 /* Method */) {
1675
+ else if (flags & 1 /* PROXY_FLAGS.isElementConstructor */ &&
1676
+ memberFlags & 64 /* MEMBER_FLAGS.Method */) {
1388
1677
  // proxyComponent - method
1389
1678
  Object.defineProperty(prototype, memberName, {
1390
1679
  value(...args) {
@@ -1394,7 +1683,7 @@ const proxyComponent = (Cstr, cmpMeta, flags) => {
1394
1683
  });
1395
1684
  }
1396
1685
  });
1397
- if ((flags & 1 /* isElementConstructor */)) {
1686
+ if ((flags & 1 /* PROXY_FLAGS.isElementConstructor */)) {
1398
1687
  const attrNameToPropName = new Map();
1399
1688
  prototype.attributeChangedCallback = function (attrName, _oldValue, newValue) {
1400
1689
  plt.jmp(() => {
@@ -1450,11 +1739,11 @@ const proxyComponent = (Cstr, cmpMeta, flags) => {
1450
1739
  // create an array of attributes to observe
1451
1740
  // and also create a map of html attribute name to js property name
1452
1741
  Cstr.observedAttributes = members
1453
- .filter(([_, m]) => m[0] & 15 /* HasAttribute */) // filter to only keep props that should match attributes
1742
+ .filter(([_, m]) => m[0] & 15 /* MEMBER_FLAGS.HasAttribute */) // filter to only keep props that should match attributes
1454
1743
  .map(([propName, m]) => {
1455
1744
  const attrName = m[1] || propName;
1456
1745
  attrNameToPropName.set(attrName, propName);
1457
- if (m[0] & 512 /* ReflectAttr */) {
1746
+ if (m[0] & 512 /* MEMBER_FLAGS.ReflectAttr */) {
1458
1747
  cmpMeta.$attrsToReflect$.push([propName, attrName]);
1459
1748
  }
1460
1749
  return attrName;
@@ -1465,10 +1754,10 @@ const proxyComponent = (Cstr, cmpMeta, flags) => {
1465
1754
  };
1466
1755
  const initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId, Cstr) => {
1467
1756
  // initializeComponent
1468
- if ((hostRef.$flags$ & 32 /* hasInitializedComponent */) === 0) {
1757
+ if ((hostRef.$flags$ & 32 /* HOST_FLAGS.hasInitializedComponent */) === 0) {
1758
+ // Let the runtime know that the component has been initialized
1759
+ hostRef.$flags$ |= 32 /* HOST_FLAGS.hasInitializedComponent */;
1469
1760
  {
1470
- // we haven't initialized this element yet
1471
- hostRef.$flags$ |= 32 /* hasInitializedComponent */;
1472
1761
  // lazy loaded components
1473
1762
  // request the component's implementation to be
1474
1763
  // wired up with the host element
@@ -1486,7 +1775,7 @@ const initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId, Cstr) =>
1486
1775
  {
1487
1776
  cmpMeta.$watchers$ = Cstr.watchers;
1488
1777
  }
1489
- proxyComponent(Cstr, cmpMeta, 2 /* proxyState */);
1778
+ proxyComponent(Cstr, cmpMeta, 2 /* PROXY_FLAGS.proxyState */);
1490
1779
  Cstr.isProxied = true;
1491
1780
  }
1492
1781
  const endNewInstance = createTime('createInstance', cmpMeta.$tagName$);
@@ -1494,7 +1783,7 @@ const initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId, Cstr) =>
1494
1783
  // but let's keep track of when we start and stop
1495
1784
  // so that the getters/setters don't incorrectly step on data
1496
1785
  {
1497
- hostRef.$flags$ |= 8 /* isConstructingInstance */;
1786
+ hostRef.$flags$ |= 8 /* HOST_FLAGS.isConstructingInstance */;
1498
1787
  }
1499
1788
  // construct the lazy-loaded component implementation
1500
1789
  // passing the hostRef is very important during
@@ -1507,10 +1796,10 @@ const initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId, Cstr) =>
1507
1796
  consoleError(e);
1508
1797
  }
1509
1798
  {
1510
- hostRef.$flags$ &= ~8 /* isConstructingInstance */;
1799
+ hostRef.$flags$ &= ~8 /* HOST_FLAGS.isConstructingInstance */;
1511
1800
  }
1512
1801
  {
1513
- hostRef.$flags$ |= 128 /* isWatchReady */;
1802
+ hostRef.$flags$ |= 128 /* HOST_FLAGS.isWatchReady */;
1514
1803
  }
1515
1804
  endNewInstance();
1516
1805
  fireConnectedCallback(hostRef.$lazyInstance$);
@@ -1521,7 +1810,7 @@ const initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId, Cstr) =>
1521
1810
  const scopeId = getScopeId(cmpMeta);
1522
1811
  if (!styles.has(scopeId)) {
1523
1812
  const endRegisterStyles = createTime('registerStyles', cmpMeta.$tagName$);
1524
- registerStyle(scopeId, style, !!(cmpMeta.$flags$ & 1 /* shadowDomEncapsulation */));
1813
+ registerStyle(scopeId, style, !!(cmpMeta.$flags$ & 1 /* CMP_FLAGS.shadowDomEncapsulation */));
1525
1814
  endRegisterStyles();
1526
1815
  }
1527
1816
  }
@@ -1548,19 +1837,20 @@ const fireConnectedCallback = (instance) => {
1548
1837
  }
1549
1838
  };
1550
1839
  const connectedCallback = (elm) => {
1551
- if ((plt.$flags$ & 1 /* isTmpDisconnected */) === 0) {
1840
+ if ((plt.$flags$ & 1 /* PLATFORM_FLAGS.isTmpDisconnected */) === 0) {
1552
1841
  const hostRef = getHostRef(elm);
1553
1842
  const cmpMeta = hostRef.$cmpMeta$;
1554
1843
  const endConnected = createTime('connectedCallback', cmpMeta.$tagName$);
1555
- if (!(hostRef.$flags$ & 1 /* hasConnected */)) {
1844
+ if (!(hostRef.$flags$ & 1 /* HOST_FLAGS.hasConnected */)) {
1556
1845
  // first time this component has connected
1557
- hostRef.$flags$ |= 1 /* hasConnected */;
1846
+ hostRef.$flags$ |= 1 /* HOST_FLAGS.hasConnected */;
1558
1847
  {
1559
1848
  // initUpdate
1560
1849
  // if the slot polyfill is required we'll need to put some nodes
1561
1850
  // in here to act as original content anchors as we move nodes around
1562
1851
  // host element has been connected to the DOM
1563
- if ((cmpMeta.$flags$ & (4 /* hasSlotRelocation */ | 8 /* needsShadowDomShim */))) {
1852
+ if ((// TODO(STENCIL-854): Remove code related to legacy shadowDomShim field
1853
+ cmpMeta.$flags$ & (4 /* CMP_FLAGS.hasSlotRelocation */ | 8 /* CMP_FLAGS.needsShadowDomShim */))) {
1564
1854
  setContentReference(elm);
1565
1855
  }
1566
1856
  }
@@ -1583,7 +1873,7 @@ const connectedCallback = (elm) => {
1583
1873
  // https://developers.google.com/web/fundamentals/web-components/best-practices#lazy-properties
1584
1874
  if (cmpMeta.$members$) {
1585
1875
  Object.entries(cmpMeta.$members$).map(([memberName, [memberFlags]]) => {
1586
- if (memberFlags & 31 /* Prop */ && elm.hasOwnProperty(memberName)) {
1876
+ if (memberFlags & 31 /* MEMBER_FLAGS.Prop */ && elm.hasOwnProperty(memberName)) {
1587
1877
  const value = elm[memberName];
1588
1878
  delete elm[memberName];
1589
1879
  elm[memberName] = value;
@@ -1621,7 +1911,7 @@ const setContentReference = (elm) => {
1621
1911
  elm.insertBefore(contentRefElm, elm.firstChild);
1622
1912
  };
1623
1913
  const disconnectedCallback = (elm) => {
1624
- if ((plt.$flags$ & 1 /* isTmpDisconnected */) === 0) {
1914
+ if ((plt.$flags$ & 1 /* PLATFORM_FLAGS.isTmpDisconnected */) === 0) {
1625
1915
  const hostRef = getHostRef(elm);
1626
1916
  const instance = hostRef.$lazyInstance$ ;
1627
1917
  {
@@ -1630,16 +1920,13 @@ const disconnectedCallback = (elm) => {
1630
1920
  hostRef.$rmListeners$ = undefined;
1631
1921
  }
1632
1922
  }
1633
- // clear CSS var-shim tracking
1634
- if (plt.$cssShim$) {
1635
- plt.$cssShim$.removeHost(elm);
1636
- }
1637
1923
  {
1638
1924
  safeCall(instance, 'disconnectedCallback');
1639
1925
  }
1640
1926
  }
1641
1927
  };
1642
1928
  const bootstrapLazy = (lazyBundles, options = {}) => {
1929
+ var _a;
1643
1930
  const endBootstrap = createTime();
1644
1931
  const cmpTags = [];
1645
1932
  const exclude = options.exclude || [];
@@ -1704,13 +1991,18 @@ const bootstrapLazy = (lazyBundles, options = {}) => {
1704
1991
  cmpMeta.$lazyBundleId$ = lazyBundle[0];
1705
1992
  if (!exclude.includes(tagName) && !customElements.get(tagName)) {
1706
1993
  cmpTags.push(tagName);
1707
- customElements.define(tagName, proxyComponent(HostElement, cmpMeta, 1 /* isElementConstructor */));
1994
+ customElements.define(tagName, proxyComponent(HostElement, cmpMeta, 1 /* PROXY_FLAGS.isElementConstructor */));
1708
1995
  }
1709
1996
  });
1710
1997
  });
1711
1998
  {
1712
1999
  visibilityStyle.innerHTML = cmpTags + HYDRATED_CSS;
1713
2000
  visibilityStyle.setAttribute('data-styles', '');
2001
+ // Apply CSP nonce to the style tag if it exists
2002
+ const nonce = (_a = plt.$nonce$) !== null && _a !== void 0 ? _a : queryNonceMetaTagContent(doc);
2003
+ if (nonce != null) {
2004
+ visibilityStyle.setAttribute('nonce', nonce);
2005
+ }
1714
2006
  head.insertBefore(visibilityStyle, metaCharset ? metaCharset.nextSibling : head.firstChild);
1715
2007
  }
1716
2008
  // Process deferred connectedCallbacks now all components have been registered
@@ -1726,7 +2018,48 @@ const bootstrapLazy = (lazyBundles, options = {}) => {
1726
2018
  // Fallback appLoad event
1727
2019
  endBootstrap();
1728
2020
  };
1729
- const hostRefs = new WeakMap();
2021
+ const addHostEventListeners = (elm, hostRef, listeners, attachParentListeners) => {
2022
+ if (listeners) {
2023
+ listeners.map(([flags, name, method]) => {
2024
+ const target = getHostListenerTarget(elm, flags) ;
2025
+ const handler = hostListenerProxy(hostRef, method);
2026
+ const opts = hostListenerOpts(flags);
2027
+ plt.ael(target, name, handler, opts);
2028
+ (hostRef.$rmListeners$ = hostRef.$rmListeners$ || []).push(() => plt.rel(target, name, handler, opts));
2029
+ });
2030
+ }
2031
+ };
2032
+ const hostListenerProxy = (hostRef, methodName) => (ev) => {
2033
+ try {
2034
+ {
2035
+ if (hostRef.$flags$ & 256 /* HOST_FLAGS.isListenReady */) {
2036
+ // instance is ready, let's call it's member method for this event
2037
+ hostRef.$lazyInstance$[methodName](ev);
2038
+ }
2039
+ else {
2040
+ (hostRef.$queuedListeners$ = hostRef.$queuedListeners$ || []).push([methodName, ev]);
2041
+ }
2042
+ }
2043
+ }
2044
+ catch (e) {
2045
+ consoleError(e);
2046
+ }
2047
+ };
2048
+ const getHostListenerTarget = (elm, flags) => {
2049
+ if (flags & 4 /* LISTENER_FLAGS.TargetDocument */)
2050
+ return doc;
2051
+ return elm;
2052
+ };
2053
+ // prettier-ignore
2054
+ const hostListenerOpts = (flags) => (flags & 2 /* LISTENER_FLAGS.Capture */) !== 0;
2055
+ /**
2056
+ * Assigns the given value to the nonce property on the runtime platform object.
2057
+ * During runtime, this value is used to set the nonce attribute on all dynamically created script and style tags.
2058
+ * @param nonce The value to be assigned to the platform nonce property.
2059
+ * @returns void
2060
+ */
2061
+ const setNonce = (nonce) => (plt.$nonce$ = nonce);
2062
+ const hostRefs = /*@__PURE__*/ new WeakMap();
1730
2063
  const getHostRef = (ref) => hostRefs.get(ref);
1731
2064
  const registerInstance = (lazyInstance, hostRef) => hostRefs.set((hostRef.$lazyInstance$ = lazyInstance), hostRef);
1732
2065
  const registerHost = (elm, cmpMeta) => {
@@ -1792,14 +2125,35 @@ const loadModule = (cmpMeta, hostRef, hmrVersionId) => {
1792
2125
  return importedModule[exportName];
1793
2126
  }, consoleError);
1794
2127
  };
1795
- const styles = new Map();
2128
+ const styles = /*@__PURE__*/ new Map();
2129
+ const win = typeof window !== 'undefined' ? window : {};
2130
+ const doc = win.document || { head: {} };
2131
+ const plt = {
2132
+ $flags$: 0,
2133
+ $resourcesUrl$: '',
2134
+ jmp: (h) => h(),
2135
+ raf: (h) => requestAnimationFrame(h),
2136
+ ael: (el, eventName, listener, opts) => el.addEventListener(eventName, listener, opts),
2137
+ rel: (el, eventName, listener, opts) => el.removeEventListener(eventName, listener, opts),
2138
+ ce: (eventName, opts) => new CustomEvent(eventName, opts),
2139
+ };
2140
+ const promiseResolve = (v) => Promise.resolve(v);
2141
+ const supportsConstructableStylesheets = /*@__PURE__*/ (() => {
2142
+ try {
2143
+ new CSSStyleSheet();
2144
+ return typeof new CSSStyleSheet().replaceSync === 'function';
2145
+ }
2146
+ catch (e) { }
2147
+ return false;
2148
+ })()
2149
+ ;
1796
2150
  const queueDomReads = [];
1797
2151
  const queueDomWrites = [];
1798
2152
  const queueTask = (queue, write) => (cb) => {
1799
2153
  queue.push(cb);
1800
2154
  if (!queuePending) {
1801
2155
  queuePending = true;
1802
- if (write && plt.$flags$ & 4 /* queueSync */) {
2156
+ if (write && plt.$flags$ & 4 /* PLATFORM_FLAGS.queueSync */) {
1803
2157
  nextTick(flush);
1804
2158
  }
1805
2159
  else {
@@ -1836,17 +2190,15 @@ const flush = () => {
1836
2190
  const nextTick = /*@__PURE__*/ (cb) => promiseResolve().then(cb);
1837
2191
  const writeTask = /*@__PURE__*/ queueTask(queueDomWrites, true);
1838
2192
 
1839
- exports.CSS = CSS;
1840
2193
  exports.Host = Host;
1841
- exports.NAMESPACE = NAMESPACE;
1842
2194
  exports.bootstrapLazy = bootstrapLazy;
1843
2195
  exports.createEvent = createEvent;
1844
- exports.doc = doc;
1845
2196
  exports.forceUpdate = forceUpdate;
1846
2197
  exports.getElement = getElement;
1847
2198
  exports.getRenderingRef = getRenderingRef;
1848
2199
  exports.h = h;
1849
- exports.plt = plt;
1850
2200
  exports.promiseResolve = promiseResolve;
1851
2201
  exports.registerInstance = registerInstance;
1852
- exports.win = win;
2202
+ exports.setNonce = setNonce;
2203
+
2204
+ //# sourceMappingURL=index-c209f988.js.map