@aquera/nile-elements 0.1.35-beta-2.0 → 0.1.36

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 (242) hide show
  1. package/README.md +12 -66
  2. package/demo/index.css +4 -7
  3. package/demo/index.html +36 -20
  4. package/demo/variables.css +0 -13
  5. package/demo/variables_v2.css +0 -13
  6. package/dist/{fixture-df8b52d7.esm.js → fixture-2b5b3aba.esm.js} +1 -1
  7. package/dist/{fixture-d5b55278.cjs.js → fixture-7bfb866e.cjs.js} +3 -3
  8. package/dist/fixture-7bfb866e.cjs.js.map +1 -0
  9. package/dist/index.cjs.js +1 -1
  10. package/dist/index.esm.js +1 -1
  11. package/dist/internal/animate.cjs.js +1 -1
  12. package/dist/internal/animate.cjs.js.map +1 -1
  13. package/dist/internal/animate.esm.js +1 -1
  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/nile-auto-complete.test.cjs.js +1 -1
  17. package/dist/nile-auto-complete/nile-auto-complete.test.esm.js +1 -1
  18. package/dist/nile-avatar/nile-avatar.test.cjs.js +1 -1
  19. package/dist/nile-avatar/nile-avatar.test.esm.js +1 -1
  20. package/dist/nile-badge/nile-badge.test.cjs.js +1 -1
  21. package/dist/nile-badge/nile-badge.test.esm.js +1 -1
  22. package/dist/nile-button/nile-button.test.cjs.js +1 -1
  23. package/dist/nile-button/nile-button.test.esm.js +1 -1
  24. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js +1 -1
  25. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.esm.js +1 -1
  26. package/dist/nile-calendar/nile-calendar.test.cjs.js +1 -1
  27. package/dist/nile-calendar/nile-calendar.test.esm.js +1 -1
  28. package/dist/nile-card/nile-card.test.cjs.js +1 -1
  29. package/dist/nile-card/nile-card.test.esm.js +1 -1
  30. package/dist/nile-checkbox/nile-checkbox.test.cjs.js +1 -1
  31. package/dist/nile-checkbox/nile-checkbox.test.esm.js +1 -1
  32. package/dist/nile-chip/nile-chip.test.cjs.js +1 -1
  33. package/dist/nile-chip/nile-chip.test.esm.js +1 -1
  34. package/dist/nile-dialog/nile-dialog.test.cjs.js +1 -1
  35. package/dist/nile-dialog/nile-dialog.test.esm.js +1 -1
  36. package/dist/nile-drawer/nile-drawer.test.cjs.js +1 -1
  37. package/dist/nile-drawer/nile-drawer.test.esm.js +1 -1
  38. package/dist/nile-dropdown/nile-dropdown.test.cjs.js +1 -1
  39. package/dist/nile-dropdown/nile-dropdown.test.esm.js +1 -1
  40. package/dist/nile-empty-state/nile-empty-state.test.cjs.js +1 -1
  41. package/dist/nile-empty-state/nile-empty-state.test.esm.js +1 -1
  42. package/dist/nile-error-message/nile-error-message.cjs.js +1 -1
  43. package/dist/nile-error-message/nile-error-message.cjs.js.map +1 -1
  44. package/dist/nile-error-message/nile-error-message.css.cjs.js +1 -1
  45. package/dist/nile-error-message/nile-error-message.css.cjs.js.map +1 -1
  46. package/dist/nile-error-message/nile-error-message.css.esm.js +4 -6
  47. package/dist/nile-error-message/nile-error-message.esm.js +4 -4
  48. package/dist/nile-error-message/nile-error-message.test.cjs.js +1 -1
  49. package/dist/nile-error-message/nile-error-message.test.esm.js +1 -1
  50. package/dist/nile-error-notification/nile-error-notification.css.cjs.js +1 -1
  51. package/dist/nile-error-notification/nile-error-notification.css.cjs.js.map +1 -1
  52. package/dist/nile-error-notification/nile-error-notification.css.esm.js +1 -1
  53. package/dist/nile-form-group/nile-form-group.test.cjs.js +1 -1
  54. package/dist/nile-form-group/nile-form-group.test.esm.js +1 -1
  55. package/dist/nile-form-help-text/nile-form-help-text.test.cjs.js +1 -1
  56. package/dist/nile-form-help-text/nile-form-help-text.test.esm.js +1 -1
  57. package/dist/nile-hero/nile-hero.test.cjs.js +1 -1
  58. package/dist/nile-hero/nile-hero.test.esm.js +1 -1
  59. package/dist/nile-icon/nile-icon.test.cjs.js +1 -1
  60. package/dist/nile-icon/nile-icon.test.esm.js +1 -1
  61. package/dist/nile-input/nile-input.test.cjs.js +1 -1
  62. package/dist/nile-input/nile-input.test.esm.js +1 -1
  63. package/dist/nile-link/nile-link.test.cjs.js +1 -1
  64. package/dist/nile-link/nile-link.test.esm.js +1 -1
  65. package/dist/nile-loader/nile-loader.test.cjs.js +1 -1
  66. package/dist/nile-loader/nile-loader.test.esm.js +1 -1
  67. package/dist/nile-popover/nile-popover.test.cjs.js +1 -1
  68. package/dist/nile-popover/nile-popover.test.esm.js +1 -1
  69. package/dist/nile-popup/nile-popup.test.cjs.js +1 -1
  70. package/dist/nile-popup/nile-popup.test.esm.js +1 -1
  71. package/dist/nile-progress-bar/nile-progress-bar.css.cjs.js +1 -1
  72. package/dist/nile-progress-bar/nile-progress-bar.css.cjs.js.map +1 -1
  73. package/dist/nile-progress-bar/nile-progress-bar.css.esm.js +0 -1
  74. package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js +1 -1
  75. package/dist/nile-progress-bar/nile-progress-bar.test.esm.js +1 -1
  76. package/dist/nile-radio/nile-radio.test.cjs.js +1 -1
  77. package/dist/nile-radio/nile-radio.test.esm.js +1 -1
  78. package/dist/nile-radio-group/nile-radio-group.test.cjs.js +1 -1
  79. package/dist/nile-radio-group/nile-radio-group.test.esm.js +1 -1
  80. package/dist/nile-select/nile-select.cjs.js +1 -1
  81. package/dist/nile-select/nile-select.cjs.js.map +1 -1
  82. package/dist/nile-select/nile-select.esm.js +1 -1
  83. package/dist/nile-select/nile-select.test.cjs.js +1 -1
  84. package/dist/nile-select/nile-select.test.esm.js +1 -1
  85. package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js +1 -1
  86. package/dist/nile-slide-toggle/nile-slide-toggle.test.esm.js +1 -1
  87. package/dist/nile-tab-group/nile-tab-group.test.cjs.js +1 -1
  88. package/dist/nile-tab-group/nile-tab-group.test.esm.js +1 -1
  89. package/dist/nile-table/nile-table.cjs.js.map +1 -1
  90. package/dist/nile-textarea/nile-textarea.test.cjs.js +1 -1
  91. package/dist/nile-textarea/nile-textarea.test.esm.js +1 -1
  92. package/dist/nile-tooltip/index.cjs.js +1 -1
  93. package/dist/nile-tooltip/index.esm.js +1 -1
  94. package/dist/nile-tooltip/nile-tooltip.cjs.js +1 -1
  95. package/dist/nile-tooltip/nile-tooltip.cjs.js.map +1 -1
  96. package/dist/nile-tooltip/nile-tooltip.css.cjs.js +1 -1
  97. package/dist/nile-tooltip/nile-tooltip.css.cjs.js.map +1 -1
  98. package/dist/nile-tooltip/nile-tooltip.css.esm.js +45 -78
  99. package/dist/nile-tooltip/nile-tooltip.esm.js +28 -23
  100. package/dist/src/index.d.ts +0 -1
  101. package/dist/src/index.js +0 -1
  102. package/dist/src/index.js.map +1 -1
  103. package/dist/src/nile-error-message/nile-error-message.css.js +4 -6
  104. package/dist/src/nile-error-message/nile-error-message.css.js.map +1 -1
  105. package/dist/src/nile-error-message/nile-error-message.d.ts +0 -4
  106. package/dist/src/nile-error-message/nile-error-message.js +0 -20
  107. package/dist/src/nile-error-message/nile-error-message.js.map +1 -1
  108. package/dist/src/nile-error-notification/nile-error-notification.css.js +1 -1
  109. package/dist/src/nile-error-notification/nile-error-notification.css.js.map +1 -1
  110. package/dist/src/nile-file-preview/index.d.ts +1 -0
  111. package/dist/src/nile-file-preview/index.js +2 -0
  112. package/dist/src/nile-file-preview/index.js.map +1 -0
  113. package/dist/src/{nile-filter-chip/nile-filter-chip.css.d.ts → nile-file-preview/nile-file-preview.css.d.ts} +1 -1
  114. package/dist/src/nile-file-preview/nile-file-preview.css.js +533 -0
  115. package/dist/src/nile-file-preview/nile-file-preview.css.js.map +1 -0
  116. package/dist/src/nile-file-preview/nile-file-preview.d.ts +48 -0
  117. package/dist/src/nile-file-preview/nile-file-preview.js +149 -0
  118. package/dist/src/nile-file-preview/nile-file-preview.js.map +1 -0
  119. package/dist/src/nile-file-preview/nile-file-preview.template.d.ts +11 -0
  120. package/dist/src/nile-file-preview/nile-file-preview.template.js +144 -0
  121. package/dist/src/nile-file-preview/nile-file-preview.template.js.map +1 -0
  122. package/dist/src/nile-file-preview/nile-file-preview.test.d.ts +7 -0
  123. package/dist/src/nile-file-preview/nile-file-preview.test.js +30 -0
  124. package/dist/src/nile-file-preview/nile-file-preview.test.js.map +1 -0
  125. package/dist/src/nile-file-preview/types/file-preview.enums.d.ts +23 -0
  126. package/dist/src/nile-file-preview/types/file-preview.enums.js +28 -0
  127. package/dist/src/nile-file-preview/types/file-preview.enums.js.map +1 -0
  128. package/dist/src/nile-file-preview/types/file-preview.interface.d.ts +4 -0
  129. package/dist/src/nile-file-preview/types/file-preview.interface.js +2 -0
  130. package/dist/src/nile-file-preview/types/file-preview.interface.js.map +1 -0
  131. package/dist/src/nile-file-preview/types/index.d.ts +2 -0
  132. package/dist/src/nile-file-preview/types/index.js +3 -0
  133. package/dist/src/nile-file-preview/types/index.js.map +1 -0
  134. package/dist/src/nile-file-preview/utils/file-preview.util.d.ts +3 -0
  135. package/dist/src/nile-file-preview/utils/file-preview.util.js +29 -0
  136. package/dist/src/nile-file-preview/utils/file-preview.util.js.map +1 -0
  137. package/dist/src/nile-file-preview/utils/index.d.ts +1 -0
  138. package/dist/src/nile-file-preview/utils/index.js +2 -0
  139. package/dist/src/nile-file-preview/utils/index.js.map +1 -0
  140. package/dist/src/nile-file-upload/index.d.ts +1 -0
  141. package/dist/src/nile-file-upload/index.js +2 -0
  142. package/dist/src/{nile-filter-chip → nile-file-upload}/index.js.map +1 -1
  143. package/dist/src/nile-file-upload/nile-file-upload.css.d.ts +12 -0
  144. package/dist/src/nile-file-upload/nile-file-upload.css.js +547 -0
  145. package/dist/src/nile-file-upload/nile-file-upload.css.js.map +1 -0
  146. package/dist/src/nile-file-upload/nile-file-upload.d.ts +45 -0
  147. package/dist/src/nile-file-upload/nile-file-upload.js +148 -0
  148. package/dist/src/nile-file-upload/nile-file-upload.js.map +1 -0
  149. package/dist/src/nile-file-upload/nile-file-upload.template.d.ts +11 -0
  150. package/dist/src/nile-file-upload/nile-file-upload.template.js +163 -0
  151. package/dist/src/nile-file-upload/nile-file-upload.template.js.map +1 -0
  152. package/dist/src/nile-file-upload/nile-file-upload.test.d.ts +7 -0
  153. package/dist/src/nile-file-upload/nile-file-upload.test.js +30 -0
  154. package/dist/src/nile-file-upload/nile-file-upload.test.js.map +1 -0
  155. package/dist/src/nile-file-upload/types/file-upload.enums.d.ts +28 -0
  156. package/dist/src/nile-file-upload/types/file-upload.enums.js +35 -0
  157. package/dist/src/nile-file-upload/types/file-upload.enums.js.map +1 -0
  158. package/dist/src/nile-file-upload/types/file-upload.type.d.ts +4 -0
  159. package/dist/src/nile-file-upload/types/file-upload.type.js +2 -0
  160. package/dist/src/nile-file-upload/types/file-upload.type.js.map +1 -0
  161. package/dist/src/nile-file-upload/types/index.d.ts +2 -0
  162. package/dist/src/nile-file-upload/types/index.js +3 -0
  163. package/dist/src/nile-file-upload/types/index.js.map +1 -0
  164. package/dist/src/nile-file-upload/utils/drag-drop.util.d.ts +19 -0
  165. package/dist/src/nile-file-upload/utils/drag-drop.util.js +77 -0
  166. package/dist/src/nile-file-upload/utils/drag-drop.util.js.map +1 -0
  167. package/dist/src/nile-file-upload/utils/file-validation.util.d.ts +9 -0
  168. package/dist/src/nile-file-upload/utils/file-validation.util.js +58 -0
  169. package/dist/src/nile-file-upload/utils/file-validation.util.js.map +1 -0
  170. package/dist/src/nile-progress-bar/nile-progress-bar.css.js +0 -1
  171. package/dist/src/nile-progress-bar/nile-progress-bar.css.js.map +1 -1
  172. package/dist/src/nile-select/nile-select.js +1 -1
  173. package/dist/src/nile-select/nile-select.js.map +1 -1
  174. package/dist/src/nile-table/nile-table.js.map +1 -1
  175. package/dist/src/nile-tooltip/nile-tooltip.css.js +43 -76
  176. package/dist/src/nile-tooltip/nile-tooltip.css.js.map +1 -1
  177. package/dist/src/nile-tooltip/nile-tooltip.d.ts +46 -24
  178. package/dist/src/nile-tooltip/nile-tooltip.js +232 -235
  179. package/dist/src/nile-tooltip/nile-tooltip.js.map +1 -1
  180. package/dist/tsconfig.tsbuildinfo +1 -1
  181. package/package.json +2 -2
  182. package/plop-templates/lit/index.ts.hbs +1 -1
  183. package/plop-templates/lit/lit.css.ts.hbs +1 -1
  184. package/plop-templates/lit/lit.ts.hbs +3 -7
  185. package/plopfile.js +1 -32
  186. package/src/index.ts +1 -2
  187. package/src/nile-error-message/nile-error-message.css.ts +4 -6
  188. package/src/nile-error-message/nile-error-message.ts +0 -18
  189. package/src/nile-error-notification/nile-error-notification.css.ts +1 -1
  190. package/src/nile-progress-bar/nile-progress-bar.css.ts +0 -1
  191. package/src/nile-select/nile-select.ts +1 -1
  192. package/src/nile-table/nile-table.ts +2 -2
  193. package/src/nile-tooltip/nile-tooltip.css.ts +44 -77
  194. package/src/nile-tooltip/nile-tooltip.ts +230 -268
  195. package/vscode-html-custom-data.json +95 -144
  196. package/dist/fixture-d5b55278.cjs.js.map +0 -1
  197. package/dist/nile-filter-chip/index.cjs.js +0 -2
  198. package/dist/nile-filter-chip/index.cjs.js.map +0 -1
  199. package/dist/nile-filter-chip/index.esm.js +0 -1
  200. package/dist/nile-filter-chip/nile-filter-chip.cjs.js +0 -2
  201. package/dist/nile-filter-chip/nile-filter-chip.cjs.js.map +0 -1
  202. package/dist/nile-filter-chip/nile-filter-chip.css.cjs.js +0 -2
  203. package/dist/nile-filter-chip/nile-filter-chip.css.cjs.js.map +0 -1
  204. package/dist/nile-filter-chip/nile-filter-chip.css.esm.js +0 -121
  205. package/dist/nile-filter-chip/nile-filter-chip.esm.js +0 -43
  206. package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js +0 -2
  207. package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js.map +0 -1
  208. package/dist/nile-filter-chip/nile-filter-chip.test.esm.js +0 -20
  209. package/dist/nile-tooltip/nile-tooltip-utils.cjs.js +0 -2
  210. package/dist/nile-tooltip/nile-tooltip-utils.cjs.js.map +0 -1
  211. package/dist/nile-tooltip/nile-tooltip-utils.esm.js +0 -1
  212. package/dist/nile-tooltip/nile-tooltip.test.cjs.js +0 -2
  213. package/dist/nile-tooltip/nile-tooltip.test.cjs.js.map +0 -1
  214. package/dist/nile-tooltip/nile-tooltip.test.esm.js +0 -47
  215. package/dist/src/nile-filter-chip/index.d.ts +0 -1
  216. package/dist/src/nile-filter-chip/index.js +0 -2
  217. package/dist/src/nile-filter-chip/nile-filter-chip.css.js +0 -133
  218. package/dist/src/nile-filter-chip/nile-filter-chip.css.js.map +0 -1
  219. package/dist/src/nile-filter-chip/nile-filter-chip.d.ts +0 -36
  220. package/dist/src/nile-filter-chip/nile-filter-chip.js +0 -141
  221. package/dist/src/nile-filter-chip/nile-filter-chip.js.map +0 -1
  222. package/dist/src/nile-filter-chip/nile-filter-chip.test.d.ts +0 -1
  223. package/dist/src/nile-filter-chip/nile-filter-chip.test.js +0 -80
  224. package/dist/src/nile-filter-chip/nile-filter-chip.test.js.map +0 -1
  225. package/dist/src/nile-tooltip/nile-tooltip-utils.d.ts +0 -18
  226. package/dist/src/nile-tooltip/nile-tooltip-utils.js +0 -216
  227. package/dist/src/nile-tooltip/nile-tooltip-utils.js.map +0 -1
  228. package/dist/src/nile-tooltip/nile-tooltip.test.d.ts +0 -1
  229. package/dist/src/nile-tooltip/nile-tooltip.test.js +0 -148
  230. package/dist/src/nile-tooltip/nile-tooltip.test.js.map +0 -1
  231. package/plop-templates/lit/lit.template.ts.hbs +0 -3
  232. package/plop-templates/lit/lit.test.ts.hbs +0 -38
  233. package/plop-templates/lit/sub-components/index.ts.hbs +0 -4
  234. package/plop-templates/lit/types/index.ts.hbs +0 -0
  235. package/plop-templates/lit/types/type.ts.hbs +0 -3
  236. package/plop-templates/lit/utils/lit.utils.ts.hbs +0 -4
  237. package/src/nile-filter-chip/index.ts +0 -1
  238. package/src/nile-filter-chip/nile-filter-chip.css.ts +0 -138
  239. package/src/nile-filter-chip/nile-filter-chip.test.ts +0 -92
  240. package/src/nile-filter-chip/nile-filter-chip.ts +0 -136
  241. package/src/nile-tooltip/nile-tooltip-utils.ts +0 -271
  242. package/src/nile-tooltip/nile-tooltip.test.ts +0 -168
@@ -1 +0,0 @@
1
- {"version":3,"file":"nile-tooltip-utils.js","sourceRoot":"","sources":["../../../src/nile-tooltip/nile-tooltip-utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,OAAoB;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAC7C,OAAO,CACL,IAAI,CAAC,GAAG,IAAI,CAAC;QACb,IAAI,CAAC,IAAI,IAAI,CAAC;QACd,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC;QAC5E,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,CAC1E,CAAC;AACJ,CAAC;AAGD,MAAM,UAAU,uBAAuB,CACrC,WAAoB,EACpB,WAAoB,EACpB,iBAAyB,EACzB,QAAgB,EAChB,QAAgB,EAChB,SAAiB,EACjB,aAAqB,EACrB,cAAsB;IAEtB,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;IAEhE,MAAM,oBAAoB,GAAG,CAAC,SAAiB,EAAE,EAAE;QACjD,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,KAAK;gBACR,GAAG,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACtD,IAAI,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;gBACjF,MAAM;YACR,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,GAAG,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACtD,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;gBACrG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;gBAC3D,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,GAAG,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACtD,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;gBACrG,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACjE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBACvC,MAAM;YACR,CAAC;YAED,KAAK,QAAQ;gBACX,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACpC,IAAI,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;gBACjF,MAAM;YACR,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACpC,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;gBACrG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;gBAE3D,MAAM;YACR,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACpC,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;gBACrG,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACjE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBACvC,MAAM;YACR,CAAC;YAED,KAAK,MAAM;gBACT,GAAG,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;gBACjF,IAAI,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACvD,MAAM;YACR,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChE,GAAG,GAAG,cAAc,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC9C,IAAI,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACvD,IAAI,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;oBAC1B,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;gBACxB,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChE,GAAG,GAAG,cAAc,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC9C,IAAI,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACvD,IAAI,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;oBAClD,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;gBAChD,CAAC;gBAED,MAAM;YACR,CAAC;YAED,KAAK,OAAO;gBACV,GAAG,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;gBACjF,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACpC,MAAM;YACR,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChE,GAAG,GAAG,cAAc,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC9C,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACpC,IAAI,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;oBAC1B,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;gBACxB,CAAC;gBAED,MAAM;YACR,CAAC;YAED,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChE,GAAG,GAAG,cAAc,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC9C,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACpC,IAAI,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;oBAClD,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;gBAChD,CAAC;gBAED,MAAM;YACR,CAAC;YAED;gBACE,GAAG,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACtD,IAAI,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;QACrF,CAAC;QAED,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,EAAE,CAClD,GAAG,IAAI,CAAC;QACR,IAAI,IAAI,CAAC;QACT,GAAG,GAAG,WAAW,CAAC,MAAM,IAAI,cAAc;QAC1C,IAAI,GAAG,WAAW,CAAC,KAAK,IAAI,aAAa,CAAC;IAE5C,IAAI,SAAS,GAAG,iBAAiB,CAAC;IAClC,IAAI,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAEhD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAChE,SAAS,GAAG,QAAQ,CAAC;QACvB,CAAC;aAAM,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAChF,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;aAAM,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC7E,SAAS,GAAG,MAAM,CAAC;QACrB,CAAC;aAAM,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC1E,SAAS,GAAG,OAAO,CAAC;QACtB,CAAC;QACD,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,eAAe,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACjD,IACE,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC;YACrD,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC;YACzD,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,CAAC,EACnD,CAAC;YACD,SAAS,GAAG,OAAO,CAAC;YACpB,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC9C,CAAC;aACI,CAAC;YACJ,MAAM,cAAc,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACrD,IACE,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC;gBACvD,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC;gBACzD,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,CAAC,EACnD,CAAC;gBACD,SAAS,GAAG,MAAM,CAAC;gBACnB,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACvB,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;IACrB,CAAC;SAAM,IAAI,SAAS,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,aAAa,EAAE,CAAC;QAC9D,SAAS,CAAC,IAAI,GAAG,aAAa,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,SAAS,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACtB,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;IACpB,CAAC;SAAM,IAAI,SAAS,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;QAC/D,SAAS,CAAC,GAAG,GAAG,cAAc,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,CAAC;AACrC,CAAC;AAaD,MAAM,UAAU,gBAAgB,CAAC,EAC/B,SAAS,EACT,WAAW,EACX,WAAW,EACX,SAAS,EACT,IAAI,EACJ,GAAG,EACgB;IACnB,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IAEhE,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEpE,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,QAAQ,gBAAgB,EAAE,CAAC;QACzB,KAAK,KAAK;YACR,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC;YAC1C,SAAS,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;YAC9C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,SAAS,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;YAChD,CAAC;iBAAM,IAAI,kBAAkB,KAAK,OAAO,EAAE,CAAC;gBAC1C,SAAS,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;YAChD,CAAC;iBAAM,IAAI,kBAAkB,KAAK,KAAK,EAAE,CAAC;gBACxC,SAAS,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;YACpD,CAAC;YACD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;YACxF,MAAM;QAER,KAAK,QAAQ;YACX,QAAQ,GAAG,CAAC,SAAS,CAAC;YACtB,SAAS,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;YAC9C,MAAM;QAER,KAAK,MAAM;YACT,SAAS,GAAG,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC;YAC1C,IAAI,kBAAkB,KAAK,OAAO,EAAE,CAAC;gBACnC,MAAM,gBAAgB,GAAG,cAAc,GAAG,GAAG,GAAG,SAAS,CAAC;gBAC1D,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC;gBAC1C,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;YACrD,CAAC;iBAAM,IAAI,kBAAkB,KAAK,KAAK,EAAE,CAAC;gBACxC,MAAM,gBAAgB,GAAG,cAAc,GAAG,GAAG,GAAG,SAAS,CAAC;gBAC1D,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC;gBAC7D,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,cAAc,GAAG,GAAG,GAAG,SAAS,CAAC;YAC9C,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;YACvF,MAAM;QAGR,KAAK,OAAO;YACV,SAAS,GAAG,CAAC,SAAS,CAAC;YACvB,IAAI,kBAAkB,KAAK,OAAO,EAAE,CAAC;gBACnC,MAAM,gBAAgB,GAAG,cAAc,GAAG,GAAG,GAAG,SAAS,CAAC;gBAC1D,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC;gBAC1C,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;YACrD,CAAC;iBAAM,IAAI,kBAAkB,KAAK,KAAK,EAAE,CAAC;gBACxC,MAAM,gBAAgB,GAAG,cAAc,GAAG,GAAG,GAAG,SAAS,CAAC;gBAC1D,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC;gBAC7D,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,cAAc,GAAG,GAAG,GAAG,SAAS,CAAC;YAC9C,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;YACvF,MAAM;QAGR;YACE,SAAS,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC;YAC9C,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAClD,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACjC,CAAC","sourcesContent":["export function isInViewport(element: HTMLElement): boolean {\n const rect = element.getBoundingClientRect();\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\n\nexport function getValidTooltipPosition(\n triggerRect: DOMRect,\n tooltipRect: DOMRect,\n originalPlacement: string,\n distance: number,\n skidding: number,\n caretSize: number,\n viewportWidth: number,\n viewportHeight: number\n): { top: number; left: number; placement: string } {\n const triggerCenterX = triggerRect.left + triggerRect.width / 2;\n\n const getCandidatePosition = (placement: string) => {\n let top = 0;\n let left = 0;\n\n switch (placement) {\n case 'top':\n top = triggerRect.top - tooltipRect.height - distance;\n left = triggerRect.left + (triggerRect.width - tooltipRect.width) / 2 + skidding;\n break;\n case 'top-start': {\n top = triggerRect.top - tooltipRect.height - distance;\n const centeredLeft = triggerRect.left + (triggerRect.width / 2) - (tooltipRect.width / 2) + skidding;\n left = Math.max(triggerRect.left + skidding, centeredLeft);\n break;\n }\n case 'top-end': {\n top = triggerRect.top - tooltipRect.height - distance;\n const centeredLeft = triggerRect.left + (triggerRect.width / 2) - (tooltipRect.width / 2) + skidding;\n const maxLeft = triggerRect.right - tooltipRect.width + skidding;\n left = Math.min(centeredLeft, maxLeft);\n break;\n }\n\n case 'bottom':\n top = triggerRect.bottom + distance;\n left = triggerRect.left + (triggerRect.width - tooltipRect.width) / 2 + skidding;\n break;\n case 'bottom-start': {\n top = triggerRect.bottom + distance;\n const centeredLeft = triggerRect.left + (triggerRect.width / 2) - (tooltipRect.width / 2) + skidding;\n left = Math.max(triggerRect.left + skidding, centeredLeft);\n\n break;\n }\n\n case 'bottom-end': {\n top = triggerRect.bottom + distance;\n const centeredLeft = triggerRect.left + (triggerRect.width / 2) - (tooltipRect.width / 2) + skidding;\n const maxLeft = triggerRect.right - tooltipRect.width + skidding;\n left = Math.min(centeredLeft, maxLeft);\n break;\n }\n\n case 'left':\n top = triggerRect.top + (triggerRect.height - tooltipRect.height) / 2 + skidding;\n left = triggerRect.left - tooltipRect.width - distance;\n break;\n case 'left-start': {\n const triggerCenterY = triggerRect.top + triggerRect.height / 2;\n top = triggerCenterY - tooltipRect.height / 2;\n left = triggerRect.left - tooltipRect.width - distance;\n if (top < triggerRect.top) {\n top = triggerRect.top;\n }\n break;\n }\n\n case 'left-end': {\n const triggerCenterY = triggerRect.top + triggerRect.height / 2;\n top = triggerCenterY - tooltipRect.height / 2;\n left = triggerRect.left - tooltipRect.width - distance;\n if (top + tooltipRect.height > triggerRect.bottom) {\n top = triggerRect.bottom - tooltipRect.height;\n }\n\n break;\n }\n\n case 'right':\n top = triggerRect.top + (triggerRect.height - tooltipRect.height) / 2 + skidding;\n left = triggerRect.right + distance;\n break;\n case 'right-start': {\n const triggerCenterY = triggerRect.top + triggerRect.height / 2;\n top = triggerCenterY - tooltipRect.height / 2;\n left = triggerRect.right + distance;\n if (top < triggerRect.top) {\n top = triggerRect.top;\n }\n\n break;\n }\n\n case 'right-end': {\n const triggerCenterY = triggerRect.top + triggerRect.height / 2;\n top = triggerCenterY - tooltipRect.height / 2;\n left = triggerRect.right + distance;\n if (top + tooltipRect.height > triggerRect.bottom) {\n top = triggerRect.bottom - tooltipRect.height;\n }\n\n break;\n }\n\n default:\n top = triggerRect.top - tooltipRect.height - distance;\n left = triggerRect.left + (triggerRect.width - tooltipRect.width) / 2 + skidding;\n }\n\n return { top, left };\n };\n\n const candidateFits = (top: number, left: number) =>\n top >= 0 &&\n left >= 0 &&\n top + tooltipRect.height <= viewportHeight &&\n left + tooltipRect.width <= viewportWidth;\n\n let placement = originalPlacement;\n let candidate = getCandidatePosition(placement);\n\n if (!candidateFits(candidate.top, candidate.left)) {\n if (['top', 'top-start', 'top-end'].includes(originalPlacement)) {\n placement = 'bottom';\n } else if (['bottom', 'bottom-start', 'bottom-end'].includes(originalPlacement)) {\n placement = 'top';\n } else if (['right', 'right-start', 'right-end'].includes(originalPlacement)) {\n placement = 'left';\n } else if (['left', 'left-start', 'left-end'].includes(originalPlacement)) {\n placement = 'right';\n }\n candidate = getCandidatePosition(placement);\n const leftCandidate = getCandidatePosition('left');\n const bottomCandidate = getCandidatePosition('bottom');\n const topCandidate = getCandidatePosition('top');\n if (\n !candidateFits(leftCandidate.top, leftCandidate.left) &&\n !candidateFits(bottomCandidate.top, bottomCandidate.left) &&\n !candidateFits(topCandidate.top, topCandidate.left)\n ) {\n placement = 'right';\n candidate = getCandidatePosition(placement);\n }\n else {\n const rightCandidate = getCandidatePosition('right');\n if (\n !candidateFits(rightCandidate.top, rightCandidate.left) &&\n !candidateFits(bottomCandidate.top, bottomCandidate.left) &&\n !candidateFits(topCandidate.top, topCandidate.left)\n ) {\n placement = 'left';\n candidate = getCandidatePosition(placement);\n }\n }\n }\n\n if (candidate.left < 0) {\n candidate.left = 5;\n } else if (candidate.left + tooltipRect.width > viewportWidth) {\n candidate.left = viewportWidth - tooltipRect.width - 5;\n }\n\n if (candidate.top < 0) {\n candidate.top = 5;\n } else if (candidate.top + tooltipRect.height > viewportHeight) {\n candidate.top = viewportHeight - tooltipRect.height - 5;\n }\n\n return { ...candidate, placement };\n}\n\n\n\nexport interface CaretPositionInput {\n placement: string;\n tooltipRect: DOMRect;\n triggerRect: DOMRect;\n caretSize: number;\n left: number;\n top: number;\n}\n\nexport function getCaretPosition({\n placement,\n tooltipRect,\n triggerRect,\n caretSize,\n left,\n top\n}: CaretPositionInput): { caretLeft: number; caretTop: number } {\n const triggerCenterX = triggerRect.left + triggerRect.width / 2;\n const triggerCenterY = triggerRect.top + triggerRect.height / 2;\n\n const [primaryPlacement, secondaryPlacement] = placement.split('-');\n\n let caretLeft = 0;\n let caretTop = 0;\n\n switch (primaryPlacement) {\n case 'top':\n caretTop = tooltipRect.height - caretSize;\n caretLeft = triggerCenterX - left - caretSize;\n if (placement === 'top-end') {\n caretLeft = triggerCenterX - left - caretSize;\n } else if (secondaryPlacement === 'start') {\n caretLeft = triggerCenterX - left - caretSize;\n } else if (secondaryPlacement === 'end') {\n caretLeft = tooltipRect.width - 2 * caretSize + 8;\n }\n caretLeft = Math.max(caretSize, Math.min(caretLeft, tooltipRect.width - 2 * caretSize));\n break;\n\n case 'bottom':\n caretTop = -caretSize;\n caretLeft = triggerCenterX - left - caretSize;\n break;\n\n case 'left':\n caretLeft = tooltipRect.width - caretSize;\n if (secondaryPlacement === 'start') {\n const computedCaretTop = triggerCenterY - top - caretSize;\n const minCaretTop = triggerRect.top - top;\n caretTop = Math.max(computedCaretTop, minCaretTop);\n } else if (secondaryPlacement === 'end') {\n const computedCaretTop = triggerCenterY - top - caretSize;\n const maxCaretTop = triggerRect.bottom - top - 2 * caretSize;\n caretTop = Math.min(computedCaretTop, maxCaretTop);\n } else {\n caretTop = triggerCenterY - top - caretSize;\n }\n caretTop = Math.max(caretSize, Math.min(caretTop, tooltipRect.height - 2 * caretSize));\n break;\n\n\n case 'right':\n caretLeft = -caretSize;\n if (secondaryPlacement === 'start') {\n const computedCaretTop = triggerCenterY - top - caretSize;\n const minCaretTop = triggerRect.top - top;\n caretTop = Math.max(computedCaretTop, minCaretTop);\n } else if (secondaryPlacement === 'end') {\n const computedCaretTop = triggerCenterY - top - caretSize;\n const maxCaretTop = triggerRect.bottom - top - 2 * caretSize;\n caretTop = Math.min(computedCaretTop, maxCaretTop);\n } else {\n caretTop = triggerCenterY - top - caretSize;\n }\n caretTop = Math.max(caretSize, Math.min(caretTop, tooltipRect.height - 2 * caretSize));\n break;\n\n\n default:\n caretLeft = tooltipRect.width / 2 - caretSize;\n caretTop = tooltipRect.height / 2 - caretSize;\n }\n\n return { caretLeft, caretTop };\n}\n"]}
@@ -1 +0,0 @@
1
- import './nile-tooltip';
@@ -1,148 +0,0 @@
1
- import { fixture, html, assert, oneEvent, waitUntil } from '@open-wc/testing';
2
- import './nile-tooltip';
3
- describe('NileTooltip', () => {
4
- it('renders with default properties', async () => {
5
- const el = await fixture(html `<nile-tooltip content="Hello"><button>Hover me</button></nile-tooltip>`);
6
- assert.equal(el.content, 'Hello');
7
- assert.equal(el.placement, 'top');
8
- assert.equal(el.disabled, false);
9
- assert.equal(el.open, false);
10
- });
11
- it('renders text content when no slot is used', async () => {
12
- const el = await fixture(html `<nile-tooltip content="Fallback"><button>Trigger</button></nile-tooltip>`);
13
- const content = el.shadowRoot.querySelector('.tooltip-content');
14
- assert.include(content.textContent, 'Fallback');
15
- });
16
- it('uses slotted content when provided', async () => {
17
- const el = await fixture(html `
18
- <nile-tooltip>
19
- <div slot="content">Slot Content</div>
20
- <button>Trigger</button>
21
- </nile-tooltip>
22
- `);
23
- const slot = el.shadowRoot.querySelector('slot[name="content"]');
24
- const assigned = slot.assignedNodes({ flatten: true });
25
- assert.isAbove(assigned.length, 0);
26
- assert.include(assigned[0].textContent ?? '', 'Slot Content');
27
- });
28
- it('shows tooltip on hover when trigger includes "hover"', async () => {
29
- const el = await fixture(html `
30
- <nile-tooltip content="Tooltip" trigger="hover">
31
- <button>Hover me</button>
32
- </nile-tooltip>
33
- `);
34
- const trigger = el.shadowRoot.querySelector('.trigger-container');
35
- trigger.dispatchEvent(new Event('mouseover', { bubbles: true }));
36
- await waitUntil(() => el.open === true);
37
- assert.isTrue(el.open);
38
- });
39
- it('hides tooltip on mouseout when trigger includes "hover"', async () => {
40
- const el = await fixture(html `
41
- <nile-tooltip content="Tooltip" trigger="hover">
42
- <button>Hover me</button>
43
- </nile-tooltip>
44
- `);
45
- const trigger = el.shadowRoot.querySelector('.trigger-container');
46
- trigger.dispatchEvent(new Event('mouseover', { bubbles: true }));
47
- await waitUntil(() => el.open === true);
48
- trigger.dispatchEvent(new Event('mouseout', { bubbles: true }));
49
- await waitUntil(() => el.open === false);
50
- });
51
- it('toggles tooltip on click when trigger includes "click"', async () => {
52
- const el = await fixture(html `
53
- <nile-tooltip content="Click me" trigger="click">
54
- <button>Click</button>
55
- </nile-tooltip>
56
- `);
57
- const trigger = el.shadowRoot.querySelector('.trigger-container');
58
- trigger.click();
59
- await waitUntil(() => el.open === true);
60
- trigger.click();
61
- await waitUntil(() => el.open === false);
62
- });
63
- it('shows and hides tooltip on focus/blur when trigger includes "focus"', async () => {
64
- const el = await fixture(html `
65
- <nile-tooltip content="Focus" trigger="focus">
66
- <button>Focus</button>
67
- </nile-tooltip>
68
- `);
69
- const trigger = el.shadowRoot.querySelector('.trigger-container');
70
- trigger.dispatchEvent(new Event('focusin'));
71
- await waitUntil(() => el.open === true);
72
- trigger.dispatchEvent(new Event('focusout'));
73
- await waitUntil(() => el.open === false);
74
- });
75
- it('does not show tooltip when disabled', async () => {
76
- const el = await fixture(html `
77
- <nile-tooltip content="Disabled" disabled trigger="hover">
78
- <button>Hover me</button>
79
- </nile-tooltip>
80
- `);
81
- const trigger = el.shadowRoot.querySelector('.trigger-container');
82
- trigger.dispatchEvent(new Event('mouseover'));
83
- await new Promise(resolve => setTimeout(resolve, 200));
84
- assert.isFalse(el.open);
85
- });
86
- it('emits nile-show and nile-after-show events', async () => {
87
- const el = await fixture(html `
88
- <nile-tooltip content="Event test" trigger="click">
89
- <button>Click</button>
90
- </nile-tooltip>
91
- `);
92
- const trigger = el.shadowRoot.querySelector('.trigger-container');
93
- setTimeout(() => trigger.click());
94
- const showEvent = await oneEvent(el, 'nile-show');
95
- assert.ok(showEvent);
96
- const afterShow = await oneEvent(el, 'nile-after-show');
97
- assert.ok(afterShow);
98
- });
99
- it('emits nile-hide and nile-after-hide events', async () => {
100
- const el = await fixture(html `
101
- <nile-tooltip content="Event test" trigger="click">
102
- <button>Click</button>
103
- </nile-tooltip>
104
- `);
105
- const trigger = el.shadowRoot.querySelector('.trigger-container');
106
- trigger.click();
107
- await waitUntil(() => el.open === true);
108
- setTimeout(() => trigger.click());
109
- const hideEvent = await oneEvent(el, 'nile-hide');
110
- assert.ok(hideEvent);
111
- const afterHide = await oneEvent(el, 'nile-after-hide');
112
- assert.ok(afterHide);
113
- });
114
- it('defaults to "bottom" placement when given invalid value', async () => {
115
- const el = await fixture(html `
116
- <nile-tooltip content="Fallback" placement=${'invalid'} >
117
- <button>Trigger</button>
118
- </nile-tooltip>
119
- `);
120
- await el.updateComplete;
121
- assert.equal(el.placement, 'top');
122
- });
123
- it('updates hasTooltipSlot on slot change', async () => {
124
- const el = await fixture(html `
125
- <nile-tooltip>
126
- <div slot="content">Initial slot</div>
127
- <button>Trigger</button>
128
- </nile-tooltip>
129
- `);
130
- const slot = el.shadowRoot.querySelector('slot[name="content"]');
131
- const newSlotNode = document.createElement('div');
132
- newSlotNode.slot = 'content';
133
- newSlotNode.textContent = 'Updated slot';
134
- el.appendChild(newSlotNode);
135
- slot.dispatchEvent(new Event('slotchange'));
136
- await el.updateComplete;
137
- assert.isTrue(el.hasTooltipSlot);
138
- });
139
- it('respects hoist attribute', async () => {
140
- const el = await fixture(html `
141
- <nile-tooltip hoist content="Hoisted">
142
- <button>Hoist</button>
143
- </nile-tooltip>
144
- `);
145
- assert.isTrue(el.hoist);
146
- });
147
- });
148
- //# sourceMappingURL=nile-tooltip.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nile-tooltip.test.js","sourceRoot":"","sources":["../../../src/nile-tooltip/nile-tooltip.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { fixture, html, assert, oneEvent, waitUntil } from '@open-wc/testing';\nimport './nile-tooltip';\nimport { NileTooltip } from './nile-tooltip';\n\ndescribe('NileTooltip', () => {\n\n it('renders with default properties', async () => {\n const el = await fixture<NileTooltip>(html`<nile-tooltip content=\"Hello\"><button>Hover me</button></nile-tooltip>`);\n assert.equal(el.content, 'Hello');\n assert.equal(el.placement, 'top');\n assert.equal(el.disabled, false);\n assert.equal(el.open, false);\n });\n\n it('renders text content when no slot is used', async () => {\n const el = await fixture<NileTooltip>(html`<nile-tooltip content=\"Fallback\"><button>Trigger</button></nile-tooltip>`);\n const content = el.shadowRoot!.querySelector('.tooltip-content')!;\n assert.include(content.textContent!, 'Fallback');\n });\n\n it('uses slotted content when provided', async () => {\n const el = await fixture<NileTooltip>(html`\n <nile-tooltip>\n <div slot=\"content\">Slot Content</div>\n <button>Trigger</button>\n </nile-tooltip>\n `);\n\n const slot = el.shadowRoot!.querySelector('slot[name=\"content\"]') as HTMLSlotElement;\n const assigned = slot.assignedNodes({ flatten: true });\n assert.isAbove(assigned.length, 0);\n assert.include(assigned[0].textContent ?? '', 'Slot Content');\n });\n\n it('shows tooltip on hover when trigger includes \"hover\"', async () => {\n const el = await fixture<NileTooltip>(html`\n <nile-tooltip content=\"Tooltip\" trigger=\"hover\">\n <button>Hover me</button>\n </nile-tooltip>\n `);\n const trigger = el.shadowRoot!.querySelector('.trigger-container')!;\n trigger.dispatchEvent(new Event('mouseover', { bubbles: true }));\n await waitUntil(() => el.open === true);\n assert.isTrue(el.open);\n });\n\n it('hides tooltip on mouseout when trigger includes \"hover\"', async () => {\n const el = await fixture<NileTooltip>(html`\n <nile-tooltip content=\"Tooltip\" trigger=\"hover\">\n <button>Hover me</button>\n </nile-tooltip>\n `);\n const trigger = el.shadowRoot!.querySelector('.trigger-container')!;\n trigger.dispatchEvent(new Event('mouseover', { bubbles: true }));\n await waitUntil(() => el.open === true);\n trigger.dispatchEvent(new Event('mouseout', { bubbles: true }));\n await waitUntil(() => el.open === false);\n });\n\n it('toggles tooltip on click when trigger includes \"click\"', async () => {\n const el = await fixture<NileTooltip>(html`\n <nile-tooltip content=\"Click me\" trigger=\"click\">\n <button>Click</button>\n </nile-tooltip>\n `);\n const trigger = el.shadowRoot!.querySelector('.trigger-container') as HTMLElement;\n trigger.click();\n await waitUntil(() => el.open === true);\n trigger.click();\n await waitUntil(() => el.open === false);\n });\n\n it('shows and hides tooltip on focus/blur when trigger includes \"focus\"', async () => {\n const el = await fixture<NileTooltip>(html`\n <nile-tooltip content=\"Focus\" trigger=\"focus\">\n <button>Focus</button>\n </nile-tooltip>\n `);\n const trigger = el.shadowRoot!.querySelector('.trigger-container')!;\n trigger.dispatchEvent(new Event('focusin'));\n await waitUntil(() => el.open === true);\n trigger.dispatchEvent(new Event('focusout'));\n await waitUntil(() => el.open === false);\n });\n\n it('does not show tooltip when disabled', async () => {\n const el = await fixture<NileTooltip>(html`\n <nile-tooltip content=\"Disabled\" disabled trigger=\"hover\">\n <button>Hover me</button>\n </nile-tooltip>\n `);\n const trigger = el.shadowRoot!.querySelector('.trigger-container')!;\n trigger.dispatchEvent(new Event('mouseover'));\n await new Promise(resolve => setTimeout(resolve, 200));\n assert.isFalse(el.open);\n });\n\n\n it('emits nile-show and nile-after-show events', async () => {\n const el = await fixture<NileTooltip>(html`\n <nile-tooltip content=\"Event test\" trigger=\"click\">\n <button>Click</button>\n </nile-tooltip>\n `);\n const trigger = el.shadowRoot!.querySelector('.trigger-container') as HTMLElement;\n setTimeout(() => trigger.click());\n const showEvent = await oneEvent(el, 'nile-show');\n assert.ok(showEvent);\n const afterShow = await oneEvent(el, 'nile-after-show');\n assert.ok(afterShow);\n });\n\n it('emits nile-hide and nile-after-hide events', async () => {\n const el = await fixture<NileTooltip>(html`\n <nile-tooltip content=\"Event test\" trigger=\"click\">\n <button>Click</button>\n </nile-tooltip>\n `);\n const trigger = el.shadowRoot!.querySelector('.trigger-container') as HTMLElement;\n trigger.click();\n await waitUntil(() => el.open === true);\n setTimeout(() => trigger.click());\n const hideEvent = await oneEvent(el, 'nile-hide');\n assert.ok(hideEvent);\n const afterHide = await oneEvent(el, 'nile-after-hide');\n assert.ok(afterHide);\n });\n\n it('defaults to \"bottom\" placement when given invalid value', async () => {\n const el = await fixture<NileTooltip>(html`\n <nile-tooltip content=\"Fallback\" placement=${'invalid' as unknown as NileTooltip['placement']} >\n <button>Trigger</button>\n </nile-tooltip>\n `);\n await el.updateComplete;\n assert.equal(el.placement, 'top');\n });\n\n\n it('updates hasTooltipSlot on slot change', async () => {\n const el = await fixture<NileTooltip>(html`\n <nile-tooltip>\n <div slot=\"content\">Initial slot</div>\n <button>Trigger</button>\n </nile-tooltip>\n `);\n\n const slot = el.shadowRoot!.querySelector('slot[name=\"content\"]') as HTMLSlotElement;\n const newSlotNode = document.createElement('div');\n newSlotNode.slot = 'content';\n newSlotNode.textContent = 'Updated slot';\n el.appendChild(newSlotNode);\n\n slot.dispatchEvent(new Event('slotchange'));\n await el.updateComplete;\n\n assert.isTrue((el as any).hasTooltipSlot);\n });\n\n it('respects hoist attribute', async () => {\n const el = await fixture<NileTooltip>(html`\n <nile-tooltip hoist content=\"Hoisted\">\n <button>Hoist</button>\n </nile-tooltip>\n `);\n assert.isTrue(el.hoist);\n });\n});\n"]}
@@ -1,3 +0,0 @@
1
- /**
2
- * Template File for nile-{{name}} component
3
- */
@@ -1,38 +0,0 @@
1
- /**
2
- * Copyright Aquera Inc 2025
3
- *
4
- * This source code is licensed under the BSD-3-Clause license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
-
9
- import { fixture, assert, expect, html } from '@open-wc/testing';
10
- import './nile-{{name}}'; // Just import to register the element
11
-
12
- describe('<nile-{{name}}>', () => {
13
- let element: HTMLElement;
14
-
15
- beforeEach(async () => {
16
- element = await fixture(html`<nile-{{name}}></nile-{{name}}>`);
17
- });
18
-
19
- it('passes accessibility test', async () => {
20
- await expect(element).to.be.accessible();
21
- });
22
-
23
- it('renders with the correct tag name', () => {
24
- expect(element.tagName.toLowerCase()).to.equal('nile-{{name}}');
25
- });
26
-
27
- it('renders with slot content when provided', async () => {
28
- const testContent = 'Test Content';
29
- element = await fixture(html`<nile-{{name}}>${testContent}</nile-{{name}}>`);
30
-
31
- const slot = (element.shadowRoot!.querySelector('slot') as HTMLSlotElement);
32
- assert.exists(slot, 'Slot should exist');
33
-
34
- const assignedNodes = slot.assignedNodes({ flatten: true });
35
- expect(assignedNodes.length).to.be.greaterThan(0);
36
- expect(assignedNodes[0].textContent?.trim()).to.equal(testContent);
37
- });
38
- });
@@ -1,4 +0,0 @@
1
- /**
2
- * Sub component for nile-{{name}} component.
3
- * Follows the same parent folder structure.
4
- */
File without changes
@@ -1,3 +0,0 @@
1
- /**
2
- * Types for nile-{{name}} component
3
- */
@@ -1,4 +0,0 @@
1
- /**
2
- * Utility functions for nile-{{name}} component
3
- *
4
- */
@@ -1 +0,0 @@
1
- export { NileFilterChip } from './nile-filter-chip';
@@ -1,138 +0,0 @@
1
- /**
2
- * Copyright Aquera Inc 2023
3
- *
4
- * This source code is licensed under the BSD-3-Clause license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- import {css} from 'lit';
9
-
10
- /**
11
- * FilterChip CSS
12
- */
13
-
14
- export const styles = css`
15
-
16
-
17
- .filter-chips {
18
- display: flex;
19
- align-items: center;
20
- }
21
-
22
-
23
- .chip {
24
- display: inline-flex;
25
- align-items: center;
26
- height: 30px;
27
- padding: 8px;
28
- border: 1px solid var(--nile-filter-chip-chip-border-color-stroke);
29
- border-radius: 4px;
30
- font-size: 14px;
31
- background-color: var(--nile-filter-chip-background-default);
32
- color: var(--nile-filter-chip-text-default);
33
- transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out;
34
- cursor: pointer;
35
- box-sizing: border-box;
36
- }
37
-
38
- .chip:hover {
39
- background-color: var(--nile-filter-chip-hover-background);
40
- }
41
- .chip:active {
42
- background-color: var(--nile-filter-chip-active-background);
43
- border-color: var(--nile-filter-chip-active-border-color-stroke);
44
- }
45
- :host([active]) .chip {
46
- background-color: var(--nile-filter-chip-active-background);
47
- border-color: var(--nile-filter-chip-active-border-color-stroke);
48
- }
49
-
50
-
51
- .icon {
52
- color: var(--nile-filter-chip-icon-color-default);
53
- display: flex;
54
- align-items: center;
55
- justify-content: center;
56
- vertical-align: middle;
57
- position: relative;
58
- top: 12px;
59
- }
60
-
61
- .label {
62
- font-weight: 500;
63
- color: var(--nile-filter-chip-label-color-default);
64
- }
65
-
66
- nile-badge::part(base) {
67
- width: auto;
68
- height: 14px;
69
- border-radius: 100px;
70
- padding: 6px;
71
- gap: 10px;
72
- font-size: 8px;
73
- display: inline-flex;
74
- align-items: center;
75
- justify-content: center;
76
- line-height: 1;
77
- }
78
-
79
- .chip-container {
80
- display: flex;
81
- justify-content: space-between;
82
- align-items: center;
83
- width: 100%;
84
- }
85
-
86
- .clear-all-container {
87
- margin-left: 18px;
88
- white-space: nowrap;
89
- cursor: pointer;
90
- }
91
-
92
-
93
- .value {
94
- color: var(--nile-filter-chip-values-color-default);
95
- display: inline-block;
96
- overflow: hidden;
97
- text-overflow: ellipsis;
98
- white-space: nowrap;
99
- max-width: 140px;
100
- vertical-align: bottom;
101
- }
102
-
103
-
104
- .close-icon {
105
- color: var(--nile-filter-chip-close-icon-color-default);
106
- cursor: pointer;
107
- display: flex;
108
- align-items: center;
109
- border-radius: 50%;
110
- transition: background-color 0.2s;
111
- }
112
-
113
- .close-icon:hover {
114
- background-color: var(--nile-filter-chip-close-icon-hover-background);
115
- color: var(--nile-filter-chip-close-icon-hover-color);
116
- }
117
-
118
- .label-wrapper {
119
- margin-right: 4px;
120
- }
121
-
122
- ::slotted([slot="icon"]) {
123
- margin-right: 6px;
124
- }
125
-
126
- .value-wrapper {
127
- margin-right: 4px;
128
- }
129
-
130
- .badge-wrapper {
131
- margin-right: 12px;
132
- }
133
-
134
- `;
135
-
136
- export default [styles];
137
-
138
-
@@ -1,92 +0,0 @@
1
- import { fixture, expect, html, oneEvent } from '@open-wc/testing';
2
- import './nile-filter-chip';
3
- import { NileFilterChip } from './nile-filter-chip';
4
-
5
- describe('<nile-filter-chip>', () => {
6
- afterEach(() => {
7
- (NileFilterChip as any).activeChips = [];
8
- });
9
-
10
- it('registers and unregisters itself in activeChips', async () => {
11
- const el = await fixture<NileFilterChip>(html`
12
- <nile-filter-chip label="L" text="T"></nile-filter-chip>
13
- `);
14
- expect((NileFilterChip as any).activeChips).to.include(el);
15
- el.remove();
16
- await el.updateComplete;
17
- expect((NileFilterChip as any).activeChips).to.not.include(el);
18
- });
19
-
20
- it('renders fallback label and text', async () => {
21
- const el = await fixture<NileFilterChip>(html`
22
- <nile-filter-chip label="MyLabel" text="MyText"></nile-filter-chip>
23
- `);
24
- const label = el.shadowRoot!.querySelector('.label')! as HTMLElement;
25
- const value = el.shadowRoot!.querySelector('.value')! as HTMLElement;
26
- expect(label.textContent).to.equal('MyLabel:');
27
- expect(value.textContent!.trim()).to.equal('MyText');
28
- });
29
-
30
- it('renders slotted label and value over fallback', async () => {
31
- const el = await fixture<NileFilterChip>(html`
32
- <nile-filter-chip>
33
- <span slot="label">SLOT-LBL</span>
34
- <span slot="value">SLOT-VAL</span>
35
- </nile-filter-chip>
36
- `);
37
- const slottedLabel = el.querySelector('[slot="label"]')! as HTMLElement;
38
- const slottedValue = el.querySelector('[slot="value"]')! as HTMLElement;
39
- expect(slottedLabel.textContent).to.equal('SLOT-LBL');
40
- expect(slottedValue.textContent).to.equal('SLOT-VAL');
41
- });
42
-
43
- it('renders an icon when the `icon` property is set', async () => {
44
- const el = await fixture<NileFilterChip>(html`
45
- <nile-filter-chip icon="★" label="L" text="T"></nile-filter-chip>
46
- `);
47
- const iconSpan = el.shadowRoot!.querySelector('.icon')! as HTMLElement;
48
- expect(iconSpan).to.exist;
49
- expect(iconSpan.textContent).to.equal('★');
50
- });
51
-
52
- it('does not render a badge when viewMoreCount is zero', async () => {
53
- const el = await fixture<NileFilterChip>(html`
54
- <nile-filter-chip viewMoreCount="0" label="L" text="T"></nile-filter-chip>
55
- `);
56
- expect(el.shadowRoot!.querySelector('nile-badge')).to.be.null;
57
- });
58
-
59
- it('renders a +badge when viewMoreCount > 0', async () => {
60
- const el = await fixture<NileFilterChip>(html`
61
- <nile-filter-chip viewMoreCount="5" label="L" text="T"></nile-filter-chip>
62
- `);
63
- const badge = el.shadowRoot!.querySelector('nile-badge')! as HTMLElement;
64
- expect(badge).to.exist;
65
- expect(badge.textContent).to.contain('+5');
66
- });
67
-
68
-
69
-
70
- it('dispatches `nile-click` on chip click', async () => {
71
- const el = await fixture<NileFilterChip>(html`
72
- <nile-filter-chip label="L" text="T"></nile-filter-chip>
73
- `);
74
- const chip = el.shadowRoot!.querySelector('.chip')! as HTMLElement;
75
- setTimeout(() => chip.click());
76
- const ev = await oneEvent(el, 'nile-click');
77
- expect(ev.detail).to.deep.equal({ text: 'T', viewMoreCount: 0 });
78
- });
79
-
80
- it('dispatches `nile-close` on close icon click and removes itself', async () => {
81
- const el = await fixture<NileFilterChip>(html`
82
- <nile-filter-chip closable viewMoreCount="2" text="TT"></nile-filter-chip>
83
- `);
84
- const closeIcon = el.shadowRoot!.querySelector('.close-icon')! as HTMLElement;
85
- setTimeout(() => closeIcon.click());
86
- const ev = await oneEvent(el, 'nile-close');
87
- expect(ev.detail).to.deep.equal({ text: 'TT', viewMoreCount: 2 });
88
- expect(document.body.contains(el)).to.be.false;
89
- });
90
-
91
-
92
- });
@@ -1,136 +0,0 @@
1
- import { LitElement, html, css, CSSResultArray, TemplateResult } from 'lit';
2
- import { customElement, property } from 'lit/decorators.js';
3
- import NileElement from '../internal/nile-element';
4
- import { styles } from './nile-filter-chip.css';
5
-
6
- /**
7
- * Nile filter-chip component.
8
- *
9
- * @tag nile-filter-chip
10
- */
11
- @customElement('nile-filter-chip')
12
- export class NileFilterChip extends NileElement {
13
- @property({ type: String }) label = '';
14
- @property({ type: String }) text = '';
15
- @property({ type: Number }) viewMoreCount: number = 0;
16
- @property({ type: Boolean }) editable = false;
17
- @property({ type: Boolean }) closable = false;
18
- @property({ type: String }) icon = '';
19
- @property({ type: String }) removeIcon = '';
20
- @property({ type: Boolean, reflect: true }) active = false;
21
-
22
-
23
- private static activeChips: NileFilterChip[] = [];
24
-
25
- public static get styles(): CSSResultArray {
26
- return [styles];
27
- }
28
-
29
- connectedCallback() {
30
- super.connectedCallback();
31
- this.registerChip();
32
- }
33
-
34
- disconnectedCallback() {
35
- super.disconnectedCallback();
36
- this.unregisterChip();
37
- }
38
-
39
- private registerChip() {
40
- NileFilterChip.activeChips.push(this);
41
- }
42
-
43
- private unregisterChip() {
44
- NileFilterChip.activeChips = NileFilterChip.activeChips.filter(
45
- (chip) => chip !== this
46
- );
47
- }
48
-
49
- private handleClose(event: Event) {
50
- event.stopPropagation();
51
- this.dispatchEvent(
52
- new CustomEvent('nile-close', { detail: { text: this.text, viewMoreCount: this.viewMoreCount } })
53
- );
54
- this.remove();
55
- }
56
-
57
- private handleClick() {
58
- this.dispatchEvent(
59
- new CustomEvent('nile-click', { detail: { text: this.text, viewMoreCount: this.viewMoreCount } })
60
- );
61
- }
62
-
63
- private getLabelSlot(): TemplateResult {
64
- return html`
65
- <span class="label-wrapper">
66
- <slot name="label">
67
- <span class="label">${this.label}:</span>
68
- </slot>
69
- </span>
70
-
71
- `;
72
- }
73
-
74
- private getValueSlot(): TemplateResult {
75
- return html`
76
- <span class="value-wrapper">
77
- <slot name="value">
78
- <span class="value">${this.text}</span>
79
- </slot>
80
- </span>
81
-
82
- `;
83
- }
84
-
85
- private getviewMoreCountSlot(): TemplateResult {
86
- return html`
87
- <slot name="suffix">
88
- ${this.viewMoreCount
89
- ? html`
90
- <span class="badge-wrapper">
91
- <nile-badge variant="primary" pilltype="pill-color">
92
- +${this.viewMoreCount}
93
- </nile-badge>
94
- </span>
95
-
96
- `
97
- : html``}
98
- </slot>
99
- `;
100
- }
101
-
102
- private getCloseIconSlot(): TemplateResult {
103
- return html`
104
- ${this.closable
105
- ? html`
106
- <span class="close-icon" @click="${this.handleClose}">
107
- <nile-icon name="${this.removeIcon || 'close'}" size="12"></nile-icon>
108
- </span>
109
- `
110
- : html``}
111
- `;
112
- }
113
-
114
- public render(): TemplateResult {
115
- return html`
116
- <div class="chip" @click="${this.handleClick}">
117
- <slot name="icon">
118
- ${this.icon ? html`<span class="icon">${this.icon}</span>` : html``}
119
- </slot>
120
- ${this.getLabelSlot()}
121
- <slot name="content"></slot>
122
- ${this.getValueSlot()}
123
- ${this.getviewMoreCountSlot()}
124
- ${this.getCloseIconSlot()}
125
- </div>
126
- `;
127
- }
128
- }
129
-
130
- export default NileFilterChip;
131
-
132
- declare global {
133
- interface HTMLElementTagNameMap {
134
- 'nile-filter-chip': NileFilterChip;
135
- }
136
- }