@aquera/nile-elements 1.3.0-beta-1.1 → 1.3.0-beta-1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/README.md +1 -0
  2. package/demo/index.html +269 -34
  3. package/dist/assets/nile-elements-4b5c262d.css +1 -0
  4. package/dist/{fixture-54600b35.cjs.js → fixture-1c49c014.cjs.js} +2 -2
  5. package/dist/{fixture-73855806.cjs.js.map → fixture-1c49c014.cjs.js.map} +1 -1
  6. package/dist/{fixture-9871e8a9.esm.js → fixture-985bba12.esm.js} +1 -1
  7. package/dist/{fixture-73855806.cjs.js → fixture-d1470b58.cjs.js} +2 -2
  8. package/dist/{fixture-54600b35.cjs.js.map → fixture-d1470b58.cjs.js.map} +1 -1
  9. package/dist/{fixture-5b79f853.cjs.js → fixture-dff65c89.cjs.js} +2 -2
  10. package/dist/{fixture-c1d78368.cjs.js.map → fixture-dff65c89.cjs.js.map} +1 -1
  11. package/dist/index.cjs.js +1 -1
  12. package/dist/index.esm.js +1 -1
  13. package/dist/index.js +280 -280
  14. package/dist/nile-accordion/nile-accordian.test.cjs.js +1 -1
  15. package/dist/nile-accordion/nile-accordian.test.esm.js +1 -1
  16. package/dist/nile-auto-complete/index.cjs.js +1 -1
  17. package/dist/nile-auto-complete/index.esm.js +1 -1
  18. package/dist/nile-auto-complete/nile-auto-complete.cjs.js +1 -1
  19. package/dist/nile-auto-complete/nile-auto-complete.cjs.js.map +1 -1
  20. package/dist/nile-auto-complete/nile-auto-complete.esm.js +2 -2
  21. package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js +1 -1
  22. package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js.map +1 -1
  23. package/dist/nile-auto-complete/nile-auto-complete.test.esm.js +1 -1
  24. package/dist/nile-avatar/nile-avatar.test.cjs.js +1 -1
  25. package/dist/nile-avatar/nile-avatar.test.esm.js +1 -1
  26. package/dist/nile-badge/nile-badge.test.cjs.js +1 -1
  27. package/dist/nile-badge/nile-badge.test.esm.js +1 -1
  28. package/dist/nile-button/nile-button.test.cjs.js +1 -1
  29. package/dist/nile-button/nile-button.test.esm.js +1 -1
  30. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js +1 -1
  31. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.esm.js +1 -1
  32. package/dist/nile-calendar/nile-calendar.test.cjs.js +1 -1
  33. package/dist/nile-calendar/nile-calendar.test.cjs.js.map +1 -1
  34. package/dist/nile-calendar/nile-calendar.test.esm.js +1 -1
  35. package/dist/nile-card/nile-card.test.cjs.js +1 -1
  36. package/dist/nile-card/nile-card.test.esm.js +1 -1
  37. package/dist/nile-checkbox/nile-checkbox.test.cjs.js +1 -1
  38. package/dist/nile-checkbox/nile-checkbox.test.esm.js +1 -1
  39. package/dist/nile-chip/index.cjs.js +1 -1
  40. package/dist/nile-chip/index.esm.js +1 -1
  41. package/dist/nile-chip/nile-chip.cjs.js +1 -1
  42. package/dist/nile-chip/nile-chip.cjs.js.map +1 -1
  43. package/dist/nile-chip/nile-chip.esm.js +2 -2
  44. package/dist/nile-chip/nile-chip.test.cjs.js +1 -1
  45. package/dist/nile-chip/nile-chip.test.cjs.js.map +1 -1
  46. package/dist/nile-chip/nile-chip.test.esm.js +1 -1
  47. package/dist/nile-dialog/nile-dialog.test.cjs.js +1 -1
  48. package/dist/nile-dialog/nile-dialog.test.esm.js +1 -1
  49. package/dist/nile-drawer/nile-drawer.test.cjs.js +1 -1
  50. package/dist/nile-drawer/nile-drawer.test.esm.js +1 -1
  51. package/dist/nile-dropdown/index.cjs.js +1 -1
  52. package/dist/nile-dropdown/index.esm.js +1 -1
  53. package/dist/nile-dropdown/nile-dropdown.cjs.js +1 -1
  54. package/dist/nile-dropdown/nile-dropdown.cjs.js.map +1 -1
  55. package/dist/nile-dropdown/nile-dropdown.esm.js +2 -2
  56. package/dist/nile-dropdown/nile-dropdown.test.cjs.js +1 -1
  57. package/dist/nile-dropdown/nile-dropdown.test.cjs.js.map +1 -1
  58. package/dist/nile-dropdown/nile-dropdown.test.esm.js +6 -6
  59. package/dist/nile-empty-state/nile-empty-state.test.cjs.js +1 -1
  60. package/dist/nile-empty-state/nile-empty-state.test.esm.js +1 -1
  61. package/dist/nile-error-message/nile-error-message.test.cjs.js +1 -1
  62. package/dist/nile-error-message/nile-error-message.test.esm.js +1 -1
  63. package/dist/nile-file-preview/nile-file-preview.test.cjs.js +1 -1
  64. package/dist/nile-file-preview/nile-file-preview.test.esm.js +1 -1
  65. package/dist/nile-file-upload/nile-file-upload.test.cjs.js +1 -1
  66. package/dist/nile-file-upload/nile-file-upload.test.esm.js +1 -1
  67. package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js +1 -1
  68. package/dist/nile-filter-chip/nile-filter-chip.test.esm.js +1 -1
  69. package/dist/nile-form-group/nile-form-group.test.cjs.js +1 -1
  70. package/dist/nile-form-group/nile-form-group.test.esm.js +1 -1
  71. package/dist/nile-form-help-text/nile-form-help-text.test.cjs.js +1 -1
  72. package/dist/nile-form-help-text/nile-form-help-text.test.esm.js +1 -1
  73. package/dist/nile-hero/nile-hero.test.cjs.js +1 -1
  74. package/dist/nile-hero/nile-hero.test.esm.js +1 -1
  75. package/dist/nile-icon/nile-icon.test.cjs.js +1 -1
  76. package/dist/nile-icon/nile-icon.test.esm.js +1 -1
  77. package/dist/nile-inline-edit/index.cjs.js +1 -1
  78. package/dist/nile-inline-edit/index.esm.js +1 -1
  79. package/dist/nile-inline-edit/nile-inline-edit.cjs.js +1 -1
  80. package/dist/nile-inline-edit/nile-inline-edit.cjs.js.map +1 -1
  81. package/dist/nile-inline-edit/nile-inline-edit.esm.js +4 -4
  82. package/dist/nile-input/nile-input.test.cjs.js +1 -1
  83. package/dist/nile-input/nile-input.test.esm.js +1 -1
  84. package/dist/nile-light-tooltip/index.esm.js +1 -0
  85. package/dist/nile-light-tooltip/nile-light-tooltip.css.esm.js +6 -0
  86. package/dist/nile-light-tooltip/nile-light-tooltip.esm.js +1 -0
  87. package/dist/nile-link/nile-link.test.cjs.js +1 -1
  88. package/dist/nile-link/nile-link.test.esm.js +1 -1
  89. package/dist/nile-lite-tooltip/index.cjs.js +1 -1
  90. package/dist/nile-lite-tooltip/index.esm.js +1 -1
  91. package/dist/nile-lite-tooltip/nile-lite-tooltip.cjs.js +1 -1
  92. package/dist/nile-lite-tooltip/nile-lite-tooltip.cjs.js.map +1 -1
  93. package/dist/nile-lite-tooltip/nile-lite-tooltip.esm.js +1 -1
  94. package/dist/nile-loader/nile-loader.test.cjs.js +1 -1
  95. package/dist/nile-loader/nile-loader.test.esm.js +1 -1
  96. package/dist/nile-popover/index.cjs.js +1 -1
  97. package/dist/nile-popover/index.esm.js +1 -1
  98. package/dist/nile-popover/nile-popover.cjs.js +3 -3
  99. package/dist/nile-popover/nile-popover.cjs.js.map +1 -1
  100. package/dist/nile-popover/nile-popover.esm.js +4 -4
  101. package/dist/nile-popover/nile-popover.test.cjs.js +1 -1
  102. package/dist/nile-popover/nile-popover.test.cjs.js.map +1 -1
  103. package/dist/nile-popover/nile-popover.test.esm.js +4 -4
  104. package/dist/nile-popup/nile-popup.test.cjs.js +1 -1
  105. package/dist/nile-popup/nile-popup.test.esm.js +1 -1
  106. package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js +1 -1
  107. package/dist/nile-progress-bar/nile-progress-bar.test.esm.js +1 -1
  108. package/dist/nile-radio/nile-radio.test.cjs.js +1 -1
  109. package/dist/nile-radio/nile-radio.test.esm.js +1 -1
  110. package/dist/nile-radio-group/nile-radio-group.test.cjs.js +1 -1
  111. package/dist/nile-radio-group/nile-radio-group.test.esm.js +1 -1
  112. package/dist/nile-select/index.cjs.js +1 -1
  113. package/dist/nile-select/index.esm.js +1 -1
  114. package/dist/nile-select/nile-select.cjs.js +1 -1
  115. package/dist/nile-select/nile-select.cjs.js.map +1 -1
  116. package/dist/nile-select/nile-select.esm.js +2 -2
  117. package/dist/nile-select/nile-select.test.cjs.js +1 -1
  118. package/dist/nile-select/nile-select.test.cjs.js.map +1 -1
  119. package/dist/nile-select/nile-select.test.esm.js +1 -1
  120. package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js +1 -1
  121. package/dist/nile-slide-toggle/nile-slide-toggle.test.esm.js +1 -1
  122. package/dist/nile-tab-group/nile-tab-group.test.cjs.js +1 -1
  123. package/dist/nile-tab-group/nile-tab-group.test.esm.js +1 -1
  124. package/dist/nile-textarea/nile-textarea.test.cjs.js +1 -1
  125. package/dist/nile-textarea/nile-textarea.test.esm.js +1 -1
  126. package/dist/nile-tooltip/index.cjs.js +1 -1
  127. package/dist/nile-tooltip/index.esm.js +1 -1
  128. package/dist/nile-tooltip/nile-tooltip.cjs.js +1 -1
  129. package/dist/nile-tooltip/nile-tooltip.cjs.js.map +1 -1
  130. package/dist/nile-tooltip/nile-tooltip.esm.js +2 -2
  131. package/dist/nile-virtual-select/index.cjs.js +1 -1
  132. package/dist/nile-virtual-select/index.esm.js +1 -1
  133. package/dist/nile-virtual-select/nile-virtual-select.cjs.js +2 -2
  134. package/dist/nile-virtual-select/nile-virtual-select.cjs.js.map +1 -1
  135. package/dist/nile-virtual-select/nile-virtual-select.esm.js +13 -13
  136. package/dist/nile-virtual-select/nile-virtual-select.test.cjs.js +1 -1
  137. package/dist/nile-virtual-select/nile-virtual-select.test.esm.js +1 -1
  138. package/dist/src/nile-auto-complete/nile-auto-complete.d.ts +4 -0
  139. package/dist/src/nile-auto-complete/nile-auto-complete.js +41 -0
  140. package/dist/src/nile-auto-complete/nile-auto-complete.js.map +1 -1
  141. package/dist/src/nile-chip/nile-chip.d.ts +4 -0
  142. package/dist/src/nile-chip/nile-chip.js +47 -0
  143. package/dist/src/nile-chip/nile-chip.js.map +1 -1
  144. package/dist/src/nile-dropdown/nile-dropdown.d.ts +4 -1
  145. package/dist/src/nile-dropdown/nile-dropdown.js +38 -1
  146. package/dist/src/nile-dropdown/nile-dropdown.js.map +1 -1
  147. package/dist/src/nile-inline-edit/nile-inline-edit.d.ts +0 -8
  148. package/dist/src/nile-inline-edit/nile-inline-edit.js +1 -47
  149. package/dist/src/nile-inline-edit/nile-inline-edit.js.map +1 -1
  150. package/dist/src/nile-light-tooltip/index.d.ts +1 -0
  151. package/dist/src/nile-light-tooltip/index.js +2 -0
  152. package/dist/src/nile-light-tooltip/index.js.map +1 -0
  153. package/dist/src/nile-light-tooltip/nile-light-tooltip.css.d.ts +12 -0
  154. package/dist/src/nile-light-tooltip/nile-light-tooltip.css.js +18 -0
  155. package/dist/src/nile-light-tooltip/nile-light-tooltip.css.js.map +1 -0
  156. package/dist/src/nile-light-tooltip/nile-light-tooltip.d.ts +40 -0
  157. package/dist/src/nile-light-tooltip/nile-light-tooltip.js +101 -0
  158. package/dist/src/nile-light-tooltip/nile-light-tooltip.js.map +1 -0
  159. package/dist/src/nile-lite-tooltip/nile-lite-tooltip.d.ts +5 -1
  160. package/dist/src/nile-lite-tooltip/nile-lite-tooltip.js +44 -0
  161. package/dist/src/nile-lite-tooltip/nile-lite-tooltip.js.map +1 -1
  162. package/dist/src/nile-menu/virtual-menu-search-manager.d.ts +11 -0
  163. package/dist/src/nile-menu/virtual-menu-search-manager.js +43 -0
  164. package/dist/src/nile-menu/virtual-menu-search-manager.js.map +1 -0
  165. package/dist/src/nile-popover/nile-popover.d.ts +4 -0
  166. package/dist/src/nile-popover/nile-popover.js +40 -0
  167. package/dist/src/nile-popover/nile-popover.js.map +1 -1
  168. package/dist/src/nile-select/nile-select.d.ts +1 -5
  169. package/dist/src/nile-select/nile-select.js +28 -67
  170. package/dist/src/nile-select/nile-select.js.map +1 -1
  171. package/dist/src/nile-tooltip/nile-tooltip.d.ts +3 -0
  172. package/dist/src/nile-tooltip/nile-tooltip.js +38 -0
  173. package/dist/src/nile-tooltip/nile-tooltip.js.map +1 -1
  174. package/dist/src/nile-virtual-select/nile-virtual-select.d.ts +2 -5
  175. package/dist/src/nile-virtual-select/nile-virtual-select.js +29 -66
  176. package/dist/src/nile-virtual-select/nile-virtual-select.js.map +1 -1
  177. package/dist/src/utilities/visibility-manager.d.ts +20 -0
  178. package/dist/src/utilities/visibility-manager.js +64 -0
  179. package/dist/src/utilities/visibility-manager.js.map +1 -0
  180. package/dist/src/version.js +1 -1
  181. package/dist/src/version.js.map +1 -1
  182. package/dist/tsconfig.tsbuildinfo +1 -1
  183. package/dist/utilities/visibility-manager.cjs.js +2 -0
  184. package/dist/utilities/visibility-manager.cjs.js.map +1 -0
  185. package/dist/utilities/visibility-manager.esm.js +1 -0
  186. package/package.json +2 -2
  187. package/src/nile-auto-complete/nile-auto-complete.ts +44 -0
  188. package/src/nile-chip/nile-chip.ts +53 -0
  189. package/src/nile-dropdown/nile-dropdown.ts +40 -1
  190. package/src/nile-inline-edit/nile-inline-edit.ts +1 -59
  191. package/src/nile-lite-tooltip/nile-lite-tooltip.ts +52 -1
  192. package/src/nile-popover/nile-popover.ts +44 -0
  193. package/src/nile-select/nile-select.ts +31 -87
  194. package/src/nile-tooltip/nile-tooltip.ts +39 -0
  195. package/src/nile-virtual-select/nile-virtual-select.ts +32 -87
  196. package/src/utilities/visibility-manager.ts +104 -0
  197. package/vscode-html-custom-data.json +69 -13
  198. package/dist/fixture-5b79f853.cjs.js.map +0 -1
  199. package/dist/fixture-90b199c4.esm.js +0 -569
  200. package/dist/fixture-c1d78368.cjs.js +0 -395
  201. package/dist/fixture-cf7bfcf5.esm.js +0 -569
  202. package/dist/fixture-dbd66009.cjs.js +0 -395
  203. package/dist/fixture-dbd66009.cjs.js.map +0 -1
  204. package/dist/nile-code-editor/backup_nile-code-editor copy.cjs.js +0 -2
  205. package/dist/nile-code-editor/backup_nile-code-editor copy.cjs.js.map +0 -1
  206. package/dist/nile-code-editor/backup_nile-code-editor copy.esm.js +0 -1
  207. package/dist/nile-inline-edit/nile-inline-edit-utils.cjs.js +0 -2
  208. package/dist/nile-inline-edit/nile-inline-edit-utils.cjs.js.map +0 -1
  209. package/dist/nile-inline-edit/nile-inline-edit-utils.esm.js +0 -1
  210. package/dist/nile-sidebar/index.cjs.js +0 -2
  211. package/dist/nile-sidebar/index.cjs.js.map +0 -1
  212. package/dist/nile-sidebar/index.esm.js +0 -75
  213. package/dist/nile-sidebar-menu/index.cjs.js +0 -2
  214. package/dist/nile-sidebar-menu/index.cjs.js.map +0 -1
  215. package/dist/nile-sidebar-menu/index.esm.js +0 -1
  216. package/dist/nile-sidebar-menu/nile-sidebar-menu.cjs.js +0 -2
  217. package/dist/nile-sidebar-menu/nile-sidebar-menu.cjs.js.map +0 -1
  218. package/dist/nile-sidebar-menu/nile-sidebar-menu.css.cjs.js +0 -2
  219. package/dist/nile-sidebar-menu/nile-sidebar-menu.css.cjs.js.map +0 -1
  220. package/dist/nile-sidebar-menu/nile-sidebar-menu.css.esm.js +0 -38
  221. package/dist/nile-sidebar-menu/nile-sidebar-menu.esm.js +0 -10
  222. package/dist/nile-sidebar-menu-items/index.cjs.js +0 -2
  223. package/dist/nile-sidebar-menu-items/index.cjs.js.map +0 -1
  224. package/dist/nile-sidebar-menu-items/index.esm.js +0 -1
  225. package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.cjs.js +0 -2
  226. package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.cjs.js.map +0 -1
  227. package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.css.cjs.js +0 -2
  228. package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.css.cjs.js.map +0 -1
  229. package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.css.esm.js +0 -36
  230. package/dist/nile-sidebar-menu-items/nile-sidebar-menu-items.esm.js +0 -15
  231. package/dist/nile-sidebar-wrapper/index.cjs.js +0 -2
  232. package/dist/nile-sidebar-wrapper/index.cjs.js.map +0 -1
  233. package/dist/nile-sidebar-wrapper/index.esm.js +0 -1
  234. package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.cjs.js +0 -2
  235. package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.cjs.js.map +0 -1
  236. package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.css.cjs.js +0 -2
  237. package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.css.cjs.js.map +0 -1
  238. package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.css.esm.js +0 -105
  239. package/dist/nile-sidebar-wrapper/nile-sidebar-wrapper.esm.js +0 -16
  240. package/dist/nile-virtual-select/group-manager.cjs.js +0 -2
  241. package/dist/nile-virtual-select/group-manager.cjs.js.map +0 -1
  242. package/dist/nile-virtual-select/group-manager.esm.js +0 -1
  243. package/dist/nile-virtual-select/temp_nile-virtual-select copy.cjs.js +0 -2
  244. package/dist/nile-virtual-select/temp_nile-virtual-select copy.cjs.js.map +0 -1
  245. package/dist/nile-virtual-select/temp_nile-virtual-select copy.esm.js +0 -231
  246. package/dist/scopedElementsWrapper-4c29be11.esm.js +0 -7
  247. package/dist/scopedElementsWrapper-a112fc73.cjs.js +0 -6
  248. package/dist/scopedElementsWrapper-a112fc73.cjs.js.map +0 -1
  249. package/dist/src/internal/portal-manager.d.ts +0 -53
  250. package/dist/src/internal/portal-manager.js +0 -196
  251. package/dist/src/internal/portal-manager.js.map +0 -1
  252. package/dist/src/internal/portal.d.ts +0 -60
  253. package/dist/src/internal/portal.js +0 -199
  254. package/dist/src/internal/portal.js.map +0 -1
  255. package/dist/src/internal/resizable-helper.d.ts +0 -59
  256. package/dist/src/internal/resizable-helper.js +0 -115
  257. package/dist/src/internal/resizable-helper.js.map +0 -1
  258. package/dist/src/internal/resizable-styles.d.ts +0 -16
  259. package/dist/src/internal/resizable-styles.js +0 -144
  260. package/dist/src/internal/resizable-styles.js.map +0 -1
  261. package/dist/src/internal/virtualizer-error-handler.d.ts +0 -30
  262. package/dist/src/internal/virtualizer-error-handler.js +0 -82
  263. package/dist/src/internal/virtualizer-error-handler.js.map +0 -1
  264. package/dist/src/lib/index.d.ts +0 -7
  265. package/dist/src/lib/index.js +0 -8
  266. package/dist/src/lib/index.js.map +0 -1
  267. package/dist/src/lib/virtualize.d.ts +0 -32
  268. package/dist/src/lib/virtualize.js +0 -105
  269. package/dist/src/lib/virtualize.js.map +0 -1
  270. package/dist/src/lib/virtualize.test.d.ts +0 -7
  271. package/dist/src/lib/virtualize.test.js +0 -57
  272. package/dist/src/lib/virtualize.test.js.map +0 -1
  273. package/dist/src/nile-badge/__snapshots__/nile-badge.test.snap.js +0 -17
  274. package/dist/src/nile-calendar/__snapshots__/nile-calendar.test.snap.js +0 -310
  275. package/dist/src/nile-card/__snapshots__/nile-card.test.snap.js +0 -34
  276. package/dist/src/nile-checkbox/__snapshots__/nile-checkbox.test.snap.js +0 -31
  277. package/dist/src/nile-code-editor/Old_theme copy.d.ts +0 -191
  278. package/dist/src/nile-code-editor/Old_theme copy.js +0 -193
  279. package/dist/src/nile-code-editor/Old_theme copy.js.map +0 -1
  280. package/dist/src/nile-code-editor/backup_nile-code-editor copy.d.ts +0 -0
  281. package/dist/src/nile-code-editor/backup_nile-code-editor copy.js +0 -675
  282. package/dist/src/nile-code-editor/backup_nile-code-editor copy.js.map +0 -1
  283. package/dist/src/nile-code-editor/theme copy.d.ts +0 -191
  284. package/dist/src/nile-code-editor/theme copy.js +0 -193
  285. package/dist/src/nile-code-editor/theme copy.js.map +0 -1
  286. package/dist/src/nile-grid/data-processor.d.ts +0 -37
  287. package/dist/src/nile-grid/data-processor.js +0 -122
  288. package/dist/src/nile-grid/data-processor.js.map +0 -1
  289. package/dist/src/nile-grid/event-handlers.d.ts +0 -35
  290. package/dist/src/nile-grid/event-handlers.js +0 -158
  291. package/dist/src/nile-grid/event-handlers.js.map +0 -1
  292. package/dist/src/nile-grid/renderer.d.ts +0 -8
  293. package/dist/src/nile-grid/renderer.js +0 -78
  294. package/dist/src/nile-grid/renderer.js.map +0 -1
  295. package/dist/src/nile-grid/resize-handler.d.ts +0 -4
  296. package/dist/src/nile-grid/resize-handler.js +0 -36
  297. package/dist/src/nile-grid/resize-handler.js.map +0 -1
  298. package/dist/src/nile-grid/types.d.ts +0 -32
  299. package/dist/src/nile-grid/types.js +0 -2
  300. package/dist/src/nile-grid/types.js.map +0 -1
  301. package/dist/src/nile-grid/utils.d.ts +0 -4
  302. package/dist/src/nile-grid/utils.js +0 -32
  303. package/dist/src/nile-grid/utils.js.map +0 -1
  304. package/dist/src/nile-hero/__snapshots__/nile-hero.test.snap.js +0 -47
  305. package/dist/src/nile-icon/__snapshots__/nile-icon.test.snap.js +0 -16
  306. package/dist/src/nile-inline-edit/nile-inline-edit-utils.d.ts +0 -20
  307. package/dist/src/nile-inline-edit/nile-inline-edit-utils.js +0 -70
  308. package/dist/src/nile-inline-edit/nile-inline-edit-utils.js.map +0 -1
  309. package/dist/src/nile-input/__snapshots__/nile-input.test.snap.js +0 -75
  310. package/dist/src/nile-menu/portal-manager.d.ts +0 -39
  311. package/dist/src/nile-menu/portal-manager.js +0 -340
  312. package/dist/src/nile-menu/portal-manager.js.map +0 -1
  313. package/dist/src/nile-menu/portal-utils.d.ts +0 -21
  314. package/dist/src/nile-menu/portal-utils.js +0 -128
  315. package/dist/src/nile-menu/portal-utils.js.map +0 -1
  316. package/dist/src/nile-popover/__snapshots__/nile-popover.test.snap.js +0 -22
  317. package/dist/src/nile-popover/popover-portal-handler.d.ts +0 -21
  318. package/dist/src/nile-popover/popover-portal-handler.js +0 -106
  319. package/dist/src/nile-popover/popover-portal-handler.js.map +0 -1
  320. package/dist/src/nile-portal-wrapper/index.d.ts +0 -1
  321. package/dist/src/nile-portal-wrapper/index.js +0 -2
  322. package/dist/src/nile-portal-wrapper/index.js.map +0 -1
  323. package/dist/src/nile-portal-wrapper/nile-portal-wrapper.d.ts +0 -47
  324. package/dist/src/nile-portal-wrapper/nile-portal-wrapper.js +0 -451
  325. package/dist/src/nile-portal-wrapper/nile-portal-wrapper.js.map +0 -1
  326. package/dist/src/nile-select/body-append-manager.d.ts +0 -90
  327. package/dist/src/nile-select/body-append-manager.js +0 -298
  328. package/dist/src/nile-select/body-append-manager.js.map +0 -1
  329. package/dist/src/nile-table-body/virtual-scroll-helper.d.ts +0 -9
  330. package/dist/src/nile-table-body/virtual-scroll-helper.js +0 -24
  331. package/dist/src/nile-table-body/virtual-scroll-helper.js.map +0 -1
  332. package/dist/src/nile-virtual-select/body-append-helper.d.ts +0 -16
  333. package/dist/src/nile-virtual-select/body-append-helper.js +0 -95
  334. package/dist/src/nile-virtual-select/body-append-helper.js.map +0 -1
  335. package/dist/src/nile-virtual-select/group-manager.d.ts +0 -32
  336. package/dist/src/nile-virtual-select/group-manager.js +0 -134
  337. package/dist/src/nile-virtual-select/group-manager.js.map +0 -1
  338. package/dist/src/nile-virtual-select/portal-utils.d.ts +0 -65
  339. package/dist/src/nile-virtual-select/portal-utils.js +0 -376
  340. package/dist/src/nile-virtual-select/portal-utils.js.map +0 -1
  341. package/dist/src/nile-virtual-select/temp_nile-virtual-select copy.d.ts +0 -273
  342. package/dist/src/nile-virtual-select/temp_nile-virtual-select copy.js +0 -1305
  343. package/dist/src/nile-virtual-select/temp_nile-virtual-select copy.js.map +0 -1
  344. package/dist/src/nile-virtual-select/virtualizer-error-handler.d.ts +0 -21
  345. package/dist/src/nile-virtual-select/virtualizer-error-handler.js +0 -56
  346. package/dist/src/nile-virtual-select/virtualizer-error-handler.js.map +0 -1
  347. package/dist/src/nile-virtual-select-disabled/index.d.ts +0 -1
  348. package/dist/src/nile-virtual-select-disabled/index.js +0 -2
  349. package/dist/src/nile-virtual-select-disabled/index.js.map +0 -1
  350. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.css.d.ts +0 -12
  351. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.css.js +0 -538
  352. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.css.js.map +0 -1
  353. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.d.ts +0 -299
  354. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.js +0 -1441
  355. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.js.map +0 -1
  356. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.test.d.ts +0 -7
  357. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.test.js +0 -631
  358. package/dist/src/nile-virtual-select-disabled/nile-virtual-select.test.js.map +0 -1
  359. package/dist/src/nile-virtual-select-disabled/portal-manager.d.ts +0 -45
  360. package/dist/src/nile-virtual-select-disabled/portal-manager.js +0 -333
  361. package/dist/src/nile-virtual-select-disabled/portal-manager.js.map +0 -1
  362. package/dist/src/nile-virtual-select-disabled/renderer.d.ts +0 -16
  363. package/dist/src/nile-virtual-select-disabled/renderer.js +0 -79
  364. package/dist/src/nile-virtual-select-disabled/renderer.js.map +0 -1
  365. package/dist/src/nile-virtual-select-disabled/search-manager.d.ts +0 -12
  366. package/dist/src/nile-virtual-select-disabled/search-manager.js +0 -40
  367. package/dist/src/nile-virtual-select-disabled/search-manager.js.map +0 -1
  368. package/dist/src/nile-virtual-select-disabled/selection-manager.d.ts +0 -12
  369. package/dist/src/nile-virtual-select-disabled/selection-manager.js +0 -64
  370. package/dist/src/nile-virtual-select-disabled/selection-manager.js.map +0 -1
  371. package/dist/src/nile-virtual-select-disabled/types.d.ts +0 -50
  372. package/dist/src/nile-virtual-select-disabled/types.js +0 -8
  373. package/dist/src/nile-virtual-select-disabled/types.js.map +0 -1
  374. package/dist/src/nile-virtual-table-body/index.d.ts +0 -2
  375. package/dist/src/nile-virtual-table-body/index.js +0 -3
  376. package/dist/src/nile-virtual-table-body/index.js.map +0 -1
  377. package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.d.ts +0 -1
  378. package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.js +0 -44
  379. package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.js.map +0 -1
  380. package/dist/src/nile-virtual-table-body/nile-virtual-table-body.d.ts +0 -50
  381. package/dist/src/nile-virtual-table-body/nile-virtual-table-body.js +0 -135
  382. package/dist/src/nile-virtual-table-body/nile-virtual-table-body.js.map +0 -1
  383. package/dist/src/nile-virtual-table-body/renderer.d.ts +0 -16
  384. package/dist/src/nile-virtual-table-body/renderer.js +0 -49
  385. package/dist/src/nile-virtual-table-body/renderer.js.map +0 -1
  386. package/dist/src/utilities/stepper-utils.d.ts +0 -71
  387. package/dist/src/utilities/stepper-utils.js +0 -108
  388. package/dist/src/utilities/stepper-utils.js.map +0 -1
  389. package/src/nile-inline-edit/nile-inline-edit-utils.ts +0 -94
@@ -42,6 +42,7 @@ import NileOptionGroup from '../nile-option-group/nile-option-group';
42
42
  import { GroupAttributes } from './nile-select.interface';
43
43
  import { ResizeController } from '@lit-labs/observers/resize-controller.js';
44
44
  import { PortalManager } from './portal-manager';
45
+ import { VisibilityManager } from '../utilities/visibility-manager';
45
46
 
46
47
  type NileRemoveEvent = CustomEvent<Record<PropertyKey, never>>;
47
48
 
@@ -123,6 +124,8 @@ export class NileSelect extends NileElement implements NileFormControl{
123
124
  private scrolling = false;
124
125
  private options: NileOption[] = [];
125
126
  private resizeController?: ResizeController;
127
+ private visibilityManager?: VisibilityManager;
128
+
126
129
 
127
130
  @query('.select') popup: NilePopup;
128
131
  @query('.select__combobox') combobox: HTMLSlotElement;
@@ -333,6 +336,7 @@ export class NileSelect extends NileElement implements NileFormControl{
333
336
  clearTimeout(this.scrollTimeout);
334
337
  this.scrollTimeout = undefined;
335
338
  }
339
+ this.visibilityManager?.cleanup();
336
340
  // Clean up body append elements
337
341
  this.portalManager.cleanupPortalAppend();
338
342
  this.emit('nile-destroy');
@@ -373,6 +377,31 @@ export class NileSelect extends NileElement implements NileFormControl{
373
377
  if(_changedProperties.has('multiple')) {
374
378
  this.setCheckBoxInOption(this.multiple as boolean);
375
379
  }
380
+ this.visibilityManager = new VisibilityManager({
381
+ host: this,
382
+ target: this.combobox,
383
+ enableVisibilityEffect: this.enableVisibilityEffect,
384
+ enableTabClose: this.enableTabClose,
385
+ isOpen: () => this.open,
386
+ onAnchorOutOfView: () => {
387
+ this.hide();
388
+ this.emit('nile-visibility-change', {
389
+ visible: false,
390
+ reason: 'anchor-out-of-view',
391
+ name: this.name,
392
+ });
393
+ },
394
+ onDocumentHidden: () => {
395
+ this.hide();
396
+ this.emit('nile-visibility-change', {
397
+ visible: false,
398
+ reason: 'document-hidden',
399
+ name: this.name,
400
+ });
401
+ },
402
+ emit: (event, detail) => this.emit(`nile-${event}`, detail),
403
+ });
404
+
376
405
  }
377
406
 
378
407
  setCheckBoxInOption(checked: boolean): void {
@@ -428,89 +457,6 @@ export class NileSelect extends NileElement implements NileFormControl{
428
457
 
429
458
 
430
459
 
431
- private anchorVisibilityObservers: IntersectionObserver[] = [];
432
-
433
- private getScrollableAncestors(element: HTMLElement): HTMLElement[] {
434
- const scrollables: HTMLElement[] = [];
435
- let parent = element.parentElement;
436
- while (parent) {
437
- const style = getComputedStyle(parent);
438
- const canScroll =
439
- /(auto|scroll)/.test(style.overflow + style.overflowY + style.overflowX);
440
- if (canScroll) {
441
- scrollables.push(parent);
442
- }
443
- parent = parent.parentElement;
444
- }
445
- return scrollables;
446
- }
447
-
448
-
449
- private handleDocumentVisibilityChange = (): void => {
450
- if (!this.enableTabClose) return;
451
- if (document.visibilityState === 'hidden' && this.open) {
452
- this.hide();
453
- this.emit('nile-visibility-change', {
454
- visible: false,
455
- reason: 'document-hidden',
456
- name: this.name,
457
- });
458
- }
459
- };
460
-
461
-
462
- private setupAnchorVisibilityObserver(): void {
463
- if (!this.enableVisibilityEffect) return;
464
-
465
- this.cleanupAnchorVisibilityObserver();
466
-
467
- const combobox = this.combobox;
468
- if (!combobox) return;
469
- const scrollContainers = [...this.getScrollableAncestors(this), null];
470
-
471
- scrollContainers.forEach((rootContainer) => {
472
- const observer = new IntersectionObserver(
473
- (entries) => {
474
- for (const entry of entries) {
475
- if (!entry.isIntersecting && this.open) {
476
- this.hide();
477
- this.emit('nile-visibility-change', {
478
- visible: false,
479
- reason: 'anchor-out-of-view',
480
- name: this.name,
481
- root: rootContainer,
482
- });
483
- return;
484
- }
485
- }
486
- },
487
- {
488
- root: rootContainer,
489
- threshold: 0.1,
490
- }
491
- );
492
-
493
- observer.observe(combobox);
494
- this.anchorVisibilityObservers.push(observer);
495
- });
496
-
497
- if (this.enableTabClose) {
498
- document.addEventListener(
499
- 'visibilitychange',
500
- this.handleDocumentVisibilityChange
501
- );
502
- }
503
- }
504
-
505
- private cleanupAnchorVisibilityObserver(): void {
506
- this.anchorVisibilityObservers.forEach((o) => o.disconnect());
507
- this.anchorVisibilityObservers = [];
508
-
509
- document.removeEventListener(
510
- 'visibilitychange',
511
- this.handleDocumentVisibilityChange
512
- );
513
- }
514
460
 
515
461
 
516
462
 
@@ -1162,6 +1108,7 @@ export class NileSelect extends NileElement implements NileFormControl{
1162
1108
  }
1163
1109
 
1164
1110
  this.addOpenListeners();
1111
+ this.visibilityManager?.setup();
1165
1112
 
1166
1113
  this.showNoResults = !this.getAllOptions()?.length;
1167
1114
 
@@ -1174,10 +1121,6 @@ export class NileSelect extends NileElement implements NileFormControl{
1174
1121
  this.setCurrentOption(this.currentOption);
1175
1122
  });
1176
1123
 
1177
- if (this.enableVisibilityEffect) {
1178
- this.setupAnchorVisibilityObserver();
1179
- }
1180
-
1181
1124
  const { keyframes, options } = getAnimation(this, 'select.show', {
1182
1125
  dir: 'ltr',
1183
1126
  });
@@ -1203,6 +1146,7 @@ export class NileSelect extends NileElement implements NileFormControl{
1203
1146
  this.emit('nile-hide', { value: this.value, name: this.name });
1204
1147
  this.showSelected = false;
1205
1148
  this.removeOpenListeners();
1149
+ this.visibilityManager?.cleanup();
1206
1150
 
1207
1151
  await stopAnimations(this);
1208
1152
  const { keyframes, options } = getAnimation(this, 'select.hide', {
@@ -22,6 +22,8 @@ import { watch } from '../internal/watch';
22
22
  import NileElement from '../internal/nile-element';
23
23
  import type { CSSResultGroup } from 'lit';
24
24
  import type NilePopup from '../nile-popup/nile-popup';
25
+ import { VisibilityManager } from '../utilities/visibility-manager.js';
26
+
25
27
  /**
26
28
  * Nile icon component.
27
29
  *
@@ -95,6 +97,12 @@ export class NileTooltip extends NileElement {
95
97
  */
96
98
  @property({ type: Boolean }) hoist = false;
97
99
 
100
+ private visibilityManager?: VisibilityManager;
101
+
102
+ @property({ type: Boolean, reflect: true }) enableVisibilityEffect = false;
103
+ @property({ type: Boolean, reflect: true }) enableTabClose = false;
104
+
105
+
98
106
  connectedCallback() {
99
107
  super.connectedCallback();
100
108
  this.handleBlur = this.handleBlur.bind(this);
@@ -122,10 +130,39 @@ export class NileTooltip extends NileElement {
122
130
  this.popup.active = true;
123
131
  this.popup.reposition();
124
132
  }
133
+
134
+ // Get the tooltip anchor (the element inside the default slot)
135
+ const anchorSlot = this.renderRoot.querySelector('slot:not([name])') as HTMLSlotElement | null;
136
+ const anchorEl = anchorSlot?.assignedElements({ flatten: true })[0] as HTMLElement | undefined;
137
+
138
+ // Initialize visibility manager
139
+ this.visibilityManager = new VisibilityManager({
140
+ host: this,
141
+ target: anchorEl || null,
142
+ enableVisibilityEffect: this.enableVisibilityEffect,
143
+ enableTabClose: this.enableTabClose,
144
+ isOpen: () => this.open,
145
+ onAnchorOutOfView: () => {
146
+ this.hide();
147
+ this.emit('nile-visibility-change', {
148
+ visible: false,
149
+ reason: 'anchor-out-of-view',
150
+ });
151
+ },
152
+ onDocumentHidden: () => {
153
+ this.hide();
154
+ this.emit('nile-visibility-change', {
155
+ visible: false,
156
+ reason: 'document-hidden',
157
+ });
158
+ },
159
+ emit: (event, detail) => this.emit(`nile-${event}`, detail),
160
+ });
125
161
  }
126
162
 
127
163
  disconnectedCallback() {
128
164
  super.disconnectedCallback();
165
+ this.visibilityManager?.cleanup();
129
166
  this.removeEventListener('blur', this.handleBlur, true);
130
167
  this.removeEventListener('focus', this.handleFocus, true);
131
168
  this.removeEventListener('click', this.handleClick);
@@ -192,6 +229,7 @@ export class NileTooltip extends NileElement {
192
229
  @watch('open', { waitUntilFirstUpdate: true })
193
230
  async handleOpenChange() {
194
231
  if (this.open) {
232
+ this.visibilityManager?.setup();
195
233
  if (this.disabled) {
196
234
  return;
197
235
  }
@@ -209,6 +247,7 @@ export class NileTooltip extends NileElement {
209
247
 
210
248
  this.emit('nile-after-show');
211
249
  } else {
250
+ this.visibilityManager?.cleanup();
212
251
  // Hide
213
252
  this.emit('nile-hide');
214
253
 
@@ -42,6 +42,7 @@ import { VirtualSelectSearchManager } from './search-manager.js';
42
42
  import { VirtualSelectRenderer } from './renderer.js';
43
43
  import { PortalManager } from './portal-manager.js';
44
44
  import { ResizeController } from '@lit-labs/observers/resize-controller.js';
45
+ import { VisibilityManager } from '../utilities/visibility-manager.js';
45
46
 
46
47
  /**
47
48
  * Nile Virtual Select component.
@@ -123,6 +124,7 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
123
124
 
124
125
  private scrollTimeout: number | undefined;
125
126
  private scrolling = false;
127
+ private visibilityManager?: VisibilityManager;
126
128
 
127
129
  /** The name of the select, submitted as a name/value pair with form data. */
128
130
  @property() name = '';
@@ -297,6 +299,7 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
297
299
 
298
300
  disconnectedCallback() {
299
301
  this.removeOpenListeners();
302
+ this.visibilityManager?.cleanup();
300
303
  // Clear any pending scroll timeout to prevent memory leaks
301
304
  if (this.scrollTimeout) {
302
305
  clearTimeout(this.scrollTimeout);
@@ -397,88 +400,33 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
397
400
  }
398
401
 
399
402
 
400
- private anchorVisibilityObservers: IntersectionObserver[] = [];
401
- private getScrollableAncestors(element: HTMLElement): HTMLElement[] {
402
- const scrollables: HTMLElement[] = [];
403
- let parent = element.parentElement;
404
- while (parent) {
405
- const style = getComputedStyle(parent);
406
- const canScroll =
407
- /(auto|scroll)/.test(style.overflow + style.overflowY + style.overflowX);
408
- if (canScroll) {
409
- scrollables.push(parent);
410
- }
411
- parent = parent.parentElement;
412
- }
413
- return scrollables;
414
- }
415
-
416
- private handleDocumentVisibilityChange = (): void => {
417
- if (!this.enableTabClose) return;
418
- if (document.visibilityState === 'hidden' && this.open) {
419
- this.hide();
420
- this.emit('nile-visibility-change', {
421
- visible: false,
422
- reason: 'document-hidden',
423
- name: this.name,
424
- });
425
- }
426
- };
427
-
428
- private setupAnchorVisibilityObserver(): void {
429
- if (!this.enableVisibilityEffect) return;
430
-
431
- this.cleanupAnchorVisibilityObserver();
432
-
433
- const combobox = this.combobox;
434
- if (!combobox) return;
435
-
436
- const scrollContainers = [...this.getScrollableAncestors(this), null];
437
-
438
- scrollContainers.forEach((rootContainer) => {
439
- const observer = new IntersectionObserver(
440
- (entries) => {
441
- for (const entry of entries) {
442
- if (!entry.isIntersecting && this.open) {
443
- this.hide();
444
- this.emit('nile-visibility-change', {
445
- visible: false,
446
- reason: 'anchor-out-of-view',
447
- name: this.name,
448
- root: rootContainer,
449
- });
450
- return;
451
- }
452
- }
453
- },
454
- {
455
- root: rootContainer,
456
- threshold: 0.1,
457
- }
458
- );
459
-
460
- observer.observe(combobox);
461
- this.anchorVisibilityObservers.push(observer);
462
- });
463
-
464
- if (this.enableTabClose) {
465
- document.addEventListener(
466
- 'visibilitychange',
467
- this.handleDocumentVisibilityChange
468
- );
469
- }
470
- }
471
-
472
- private cleanupAnchorVisibilityObserver(): void {
473
- this.anchorVisibilityObservers.forEach((o) => o.disconnect());
474
- this.anchorVisibilityObservers = [];
475
-
476
- document.removeEventListener(
477
- 'visibilitychange',
478
- this.handleDocumentVisibilityChange
479
- );
480
- }
481
-
403
+ protected firstUpdated(_changed: PropertyValues) {
404
+ super.firstUpdated?.(_changed);
405
+ this.visibilityManager = new VisibilityManager({
406
+ host: this,
407
+ target: this.combobox,
408
+ enableVisibilityEffect: this.enableVisibilityEffect,
409
+ enableTabClose: this.enableTabClose,
410
+ isOpen: () => this.open,
411
+ onAnchorOutOfView: () => {
412
+ this.hide();
413
+ this.emit('nile-visibility-change', {
414
+ visible: false,
415
+ reason: 'anchor-out-of-view',
416
+ name: this.name,
417
+ });
418
+ },
419
+ onDocumentHidden: () => {
420
+ this.hide();
421
+ this.emit('nile-visibility-change', {
422
+ visible: false,
423
+ reason: 'document-hidden',
424
+ name: this.name,
425
+ });
426
+ },
427
+ emit: (event, detail) => this.emit(`nile-${event}`, detail),
428
+ });
429
+ }
482
430
 
483
431
 
484
432
 
@@ -1003,6 +951,7 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
1003
951
  @watch('open', { waitUntilFirstUpdate: true })
1004
952
  async handleOpenChange(): Promise<void> {
1005
953
  if (this.open && !this.disabled) {
954
+ this.visibilityManager?.setup();
1006
955
  this.showListbox = true;
1007
956
  await this.updateComplete;
1008
957
  await this.handleOpen();
@@ -1011,6 +960,7 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
1011
960
  this.portalManager.setupPortalAppend();
1012
961
  }
1013
962
  } else {
963
+ this.visibilityManager?.cleanup();
1014
964
  await this.handleClose();
1015
965
  this.showListbox = false;
1016
966
 
@@ -1056,17 +1006,12 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
1056
1006
  this.wasShowSelectedCheckedOnClose = false;
1057
1007
  }
1058
1008
 
1059
- if (this.enableVisibilityEffect) {
1060
- this.setupAnchorVisibilityObserver();
1061
- }
1062
-
1063
1009
  this.filterVirtualOptions("");
1064
1010
  this.resetScrollPosition();
1065
1011
  this.emit('nile-after-show', { value: this.value, name: this.name });
1066
1012
  }
1067
1013
 
1068
1014
  private async handleClose(): Promise<void> {
1069
- this.cleanupAnchorVisibilityObserver();
1070
1015
  this.emit('nile-hide', { value: this.value, name: this.name });
1071
1016
  this.removeOpenListeners();
1072
1017
 
@@ -0,0 +1,104 @@
1
+
2
+ export interface VisibilityManagerOptions {
3
+
4
+ host: HTMLElement;
5
+
6
+ target: HTMLElement | null;
7
+
8
+ enableVisibilityEffect?: boolean;
9
+
10
+ enableTabClose?: boolean;
11
+
12
+ onAnchorOutOfView?: (root?: Element | Document | null) => void;
13
+
14
+ onDocumentHidden?: () => void;
15
+
16
+ emit?: (event: string, detail?: Record<string, any>) => void;
17
+
18
+ isOpen?: () => boolean;
19
+ }
20
+
21
+ export class VisibilityManager {
22
+ private observers: IntersectionObserver[] = [];
23
+ private options: VisibilityManagerOptions;
24
+ private handleVisibilityChange: () => void;
25
+
26
+ constructor(options: VisibilityManagerOptions) {
27
+ this.options = options;
28
+ this.handleVisibilityChange = this.onDocumentVisibilityChange.bind(this);
29
+ }
30
+
31
+
32
+ setup(): void {
33
+ const {
34
+ target,
35
+ enableVisibilityEffect,
36
+ enableTabClose,
37
+ } = this.options;
38
+
39
+ if (!enableVisibilityEffect || !target) return;
40
+
41
+ this.cleanup();
42
+
43
+ const scrollContainers = [...this.getScrollableAncestors(this.options.host), null];
44
+
45
+ scrollContainers.forEach(rootContainer => {
46
+ const observer = new IntersectionObserver(
47
+ entries => {
48
+ for (const entry of entries) {
49
+ if (!entry.isIntersecting && this.options.isOpen?.()) {
50
+ this.options.onAnchorOutOfView?.(rootContainer);
51
+ this.options.emit?.('visibility-change', {
52
+ visible: false,
53
+ reason: 'anchor-out-of-view',
54
+ root: rootContainer,
55
+ });
56
+ return;
57
+ }
58
+ }
59
+ },
60
+ { root: rootContainer, threshold: 0.1 }
61
+ );
62
+ observer.observe(target);
63
+ this.observers.push(observer);
64
+ });
65
+
66
+ if (enableTabClose) {
67
+ document.addEventListener('visibilitychange', this.handleVisibilityChange);
68
+ }
69
+ }
70
+
71
+ cleanup(): void {
72
+ this.observers.forEach(o => o.disconnect());
73
+ this.observers = [];
74
+ document.removeEventListener('visibilitychange', this.handleVisibilityChange);
75
+ }
76
+
77
+ private onDocumentVisibilityChange(): void {
78
+ const { enableTabClose, isOpen, onDocumentHidden, emit } = this.options;
79
+ if (!enableTabClose) return;
80
+
81
+ if (document.visibilityState === 'hidden' && isOpen?.()) {
82
+ onDocumentHidden?.();
83
+ emit?.('visibility-change', {
84
+ visible: false,
85
+ reason: 'document-hidden',
86
+ });
87
+ }
88
+ }
89
+
90
+ private getScrollableAncestors(element: HTMLElement): HTMLElement[] {
91
+ const scrollables: HTMLElement[] = [];
92
+ let parent = element.parentElement;
93
+ while (parent) {
94
+ const style = getComputedStyle(parent);
95
+ const canScroll = /(auto|scroll)/.test(
96
+ style.overflow + style.overflowY + style.overflowX
97
+ );
98
+ if (canScroll) scrollables.push(parent);
99
+ parent = parent.parentElement;
100
+ }
101
+ return scrollables;
102
+ }
103
+ }
104
+