@aquera/nile-elements 0.1.36-beta-1.2 → 0.1.36-beta-1.4

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 (234) hide show
  1. package/README.md +12 -72
  2. package/demo/index.css +4 -7
  3. package/demo/index.html +38 -20
  4. package/demo/variables.css +0 -13
  5. package/demo/variables_v2.css +0 -13
  6. package/dist/fixture-178ed8d2.esm.js +569 -0
  7. package/dist/{fixture-d5b55278.cjs.js → fixture-bb486165.cjs.js} +2 -2
  8. package/dist/{fixture-d5b55278.cjs.js.map → fixture-bb486165.cjs.js.map} +1 -1
  9. package/dist/{fixture-df8b52d7.esm.js → fixture-c4e75e04.esm.js} +1 -1
  10. package/dist/fixture-d7bf42eb.cjs.js +395 -0
  11. package/dist/fixture-d7bf42eb.cjs.js.map +1 -0
  12. package/dist/index.cjs.js +1 -1
  13. package/dist/index.esm.js +1 -1
  14. package/dist/internal/animate.cjs.js +1 -1
  15. package/dist/internal/animate.cjs.js.map +1 -1
  16. package/dist/internal/animate.esm.js +1 -1
  17. package/dist/nile-accordion/nile-accordian.test.cjs.js +1 -1
  18. package/dist/nile-accordion/nile-accordian.test.esm.js +1 -1
  19. package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js +1 -1
  20. package/dist/nile-auto-complete/nile-auto-complete.test.esm.js +1 -1
  21. package/dist/nile-avatar/nile-avatar.test.cjs.js +1 -1
  22. package/dist/nile-avatar/nile-avatar.test.esm.js +1 -1
  23. package/dist/nile-badge/nile-badge.test.cjs.js +1 -1
  24. package/dist/nile-badge/nile-badge.test.esm.js +1 -1
  25. package/dist/nile-button/nile-button.test.cjs.js +1 -1
  26. package/dist/nile-button/nile-button.test.esm.js +1 -1
  27. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js +1 -1
  28. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.esm.js +1 -1
  29. package/dist/nile-calendar/nile-calendar.test.cjs.js +1 -1
  30. package/dist/nile-calendar/nile-calendar.test.esm.js +1 -1
  31. package/dist/nile-card/nile-card.test.cjs.js +1 -1
  32. package/dist/nile-card/nile-card.test.esm.js +1 -1
  33. package/dist/nile-checkbox/nile-checkbox.test.cjs.js +1 -1
  34. package/dist/nile-checkbox/nile-checkbox.test.esm.js +1 -1
  35. package/dist/nile-chip/nile-chip.cjs.js +1 -1
  36. package/dist/nile-chip/nile-chip.cjs.js.map +1 -1
  37. package/dist/nile-chip/nile-chip.esm.js +8 -17
  38. package/dist/nile-chip/nile-chip.test.cjs.js +1 -1
  39. package/dist/nile-chip/nile-chip.test.esm.js +1 -1
  40. package/dist/nile-dialog/nile-dialog.test.cjs.js +1 -1
  41. package/dist/nile-dialog/nile-dialog.test.esm.js +1 -1
  42. package/dist/nile-drawer/nile-drawer.test.cjs.js +1 -1
  43. package/dist/nile-drawer/nile-drawer.test.esm.js +1 -1
  44. package/dist/nile-dropdown/nile-dropdown.test.cjs.js +1 -1
  45. package/dist/nile-dropdown/nile-dropdown.test.esm.js +1 -1
  46. package/dist/nile-empty-state/nile-empty-state.test.cjs.js +1 -1
  47. package/dist/nile-empty-state/nile-empty-state.test.esm.js +1 -1
  48. package/dist/nile-error-message/nile-error-message.cjs.js +1 -1
  49. package/dist/nile-error-message/nile-error-message.cjs.js.map +1 -1
  50. package/dist/nile-error-message/nile-error-message.css.cjs.js +1 -1
  51. package/dist/nile-error-message/nile-error-message.css.cjs.js.map +1 -1
  52. package/dist/nile-error-message/nile-error-message.css.esm.js +4 -6
  53. package/dist/nile-error-message/nile-error-message.esm.js +4 -4
  54. package/dist/nile-error-message/nile-error-message.test.cjs.js +1 -1
  55. package/dist/nile-error-message/nile-error-message.test.esm.js +1 -1
  56. package/dist/nile-error-notification/nile-error-notification.css.cjs.js +1 -1
  57. package/dist/nile-error-notification/nile-error-notification.css.cjs.js.map +1 -1
  58. package/dist/nile-error-notification/nile-error-notification.css.esm.js +1 -1
  59. package/dist/nile-filter-chip/nile-filter-chip.cjs.js +1 -1
  60. package/dist/nile-filter-chip/nile-filter-chip.cjs.js.map +1 -1
  61. package/dist/nile-filter-chip/nile-filter-chip.css.cjs.js +1 -1
  62. package/dist/nile-filter-chip/nile-filter-chip.css.cjs.js.map +1 -1
  63. package/dist/nile-filter-chip/nile-filter-chip.css.esm.js +17 -40
  64. package/dist/nile-filter-chip/nile-filter-chip.esm.js +8 -17
  65. package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js +1 -1
  66. package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js.map +1 -1
  67. package/dist/nile-filter-chip/nile-filter-chip.test.esm.js +12 -12
  68. package/dist/nile-form-group/nile-form-group.test.cjs.js +1 -1
  69. package/dist/nile-form-group/nile-form-group.test.esm.js +1 -1
  70. package/dist/nile-form-help-text/nile-form-help-text.test.cjs.js +1 -1
  71. package/dist/nile-form-help-text/nile-form-help-text.test.esm.js +1 -1
  72. package/dist/nile-hero/nile-hero.test.cjs.js +1 -1
  73. package/dist/nile-hero/nile-hero.test.esm.js +1 -1
  74. package/dist/nile-icon/icons/svg/accessreview.cjs.js +1 -1
  75. package/dist/nile-icon/icons/svg/accessreview.cjs.js.map +1 -1
  76. package/dist/nile-icon/icons/svg/accessreview.esm.js +1 -1
  77. package/dist/nile-icon/nile-icon.test.cjs.js +1 -1
  78. package/dist/nile-icon/nile-icon.test.esm.js +1 -1
  79. package/dist/nile-input/nile-input.test.cjs.js +1 -1
  80. package/dist/nile-input/nile-input.test.esm.js +1 -1
  81. package/dist/nile-link/nile-link.test.cjs.js +1 -1
  82. package/dist/nile-link/nile-link.test.esm.js +1 -1
  83. package/dist/nile-loader/nile-loader.test.cjs.js +1 -1
  84. package/dist/nile-loader/nile-loader.test.esm.js +1 -1
  85. package/dist/nile-popover/nile-popover.test.cjs.js +1 -1
  86. package/dist/nile-popover/nile-popover.test.esm.js +1 -1
  87. package/dist/nile-popup/nile-popup.test.cjs.js +1 -1
  88. package/dist/nile-popup/nile-popup.test.esm.js +1 -1
  89. package/dist/nile-progress-bar/nile-progress-bar.css.cjs.js +1 -1
  90. package/dist/nile-progress-bar/nile-progress-bar.css.cjs.js.map +1 -1
  91. package/dist/nile-progress-bar/nile-progress-bar.css.esm.js +0 -1
  92. package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js +1 -1
  93. package/dist/nile-progress-bar/nile-progress-bar.test.esm.js +1 -1
  94. package/dist/nile-radio/nile-radio.test.cjs.js +1 -1
  95. package/dist/nile-radio/nile-radio.test.esm.js +1 -1
  96. package/dist/nile-radio-group/nile-radio-group.test.cjs.js +1 -1
  97. package/dist/nile-radio-group/nile-radio-group.test.esm.js +1 -1
  98. package/dist/nile-select/nile-select.cjs.js +1 -1
  99. package/dist/nile-select/nile-select.cjs.js.map +1 -1
  100. package/dist/nile-select/nile-select.esm.js +1 -1
  101. package/dist/nile-select/nile-select.test.cjs.js +1 -1
  102. package/dist/nile-select/nile-select.test.esm.js +1 -1
  103. package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js +1 -1
  104. package/dist/nile-slide-toggle/nile-slide-toggle.test.esm.js +1 -1
  105. package/dist/nile-tab-group/nile-tab-group.test.cjs.js +1 -1
  106. package/dist/nile-tab-group/nile-tab-group.test.esm.js +1 -1
  107. package/dist/nile-table/nile-table.cjs.js.map +1 -1
  108. package/dist/nile-textarea/nile-textarea.test.cjs.js +1 -1
  109. package/dist/nile-textarea/nile-textarea.test.esm.js +1 -1
  110. package/dist/nile-tooltip/index.cjs.js +1 -1
  111. package/dist/nile-tooltip/index.esm.js +1 -1
  112. package/dist/nile-tooltip/nile-tooltip.cjs.js +1 -1
  113. package/dist/nile-tooltip/nile-tooltip.cjs.js.map +1 -1
  114. package/dist/nile-tooltip/nile-tooltip.css.cjs.js +1 -1
  115. package/dist/nile-tooltip/nile-tooltip.css.cjs.js.map +1 -1
  116. package/dist/nile-tooltip/nile-tooltip.css.esm.js +45 -78
  117. package/dist/nile-tooltip/nile-tooltip.esm.js +28 -23
  118. package/dist/nile-tooltip/nile-tooltip.test.cjs.js +1 -1
  119. package/dist/nile-tooltip/nile-tooltip.test.esm.js +1 -1
  120. package/dist/src/index.d.ts +0 -1
  121. package/dist/src/index.js +0 -1
  122. package/dist/src/index.js.map +1 -1
  123. package/dist/src/nile-chip/nile-chip.js +0 -9
  124. package/dist/src/nile-chip/nile-chip.js.map +1 -1
  125. package/dist/src/nile-error-message/nile-error-message.css.js +4 -6
  126. package/dist/src/nile-error-message/nile-error-message.css.js.map +1 -1
  127. package/dist/src/nile-error-message/nile-error-message.d.ts +0 -4
  128. package/dist/src/nile-error-message/nile-error-message.js +0 -20
  129. package/dist/src/nile-error-message/nile-error-message.js.map +1 -1
  130. package/dist/src/nile-error-notification/nile-error-notification.css.js +1 -1
  131. package/dist/src/nile-error-notification/nile-error-notification.css.js.map +1 -1
  132. package/dist/src/nile-filter-chip/nile-filter-chip.css.js +17 -40
  133. package/dist/src/nile-filter-chip/nile-filter-chip.css.js.map +1 -1
  134. package/dist/src/nile-filter-chip/nile-filter-chip.d.ts +2 -3
  135. package/dist/src/nile-filter-chip/nile-filter-chip.js +10 -23
  136. package/dist/src/nile-filter-chip/nile-filter-chip.js.map +1 -1
  137. package/dist/src/nile-filter-chip/nile-filter-chip.test.js +7 -7
  138. package/dist/src/nile-filter-chip/nile-filter-chip.test.js.map +1 -1
  139. package/dist/src/nile-icon/icons/svg/accessreview.d.ts +1 -1
  140. package/dist/src/nile-icon/icons/svg/accessreview.js +1 -1
  141. package/dist/src/nile-icon/icons/svg/accessreview.js.map +1 -1
  142. package/dist/src/nile-new-error/index.d.ts +1 -0
  143. package/dist/src/nile-new-error/index.js +2 -0
  144. package/dist/src/nile-new-error/index.js.map +1 -0
  145. package/dist/src/nile-new-error/nile-new-error.css.d.ts +12 -0
  146. package/dist/src/nile-new-error/nile-new-error.css.js +38 -0
  147. package/dist/src/nile-new-error/nile-new-error.css.js.map +1 -0
  148. package/dist/src/nile-new-error/nile-new-error.d.ts +36 -0
  149. package/dist/src/nile-new-error/nile-new-error.js +74 -0
  150. package/dist/src/nile-new-error/nile-new-error.js.map +1 -0
  151. package/dist/src/nile-progress-bar/nile-progress-bar.css.js +0 -1
  152. package/dist/src/nile-progress-bar/nile-progress-bar.css.js.map +1 -1
  153. package/dist/src/nile-select/nile-select.js +1 -1
  154. package/dist/src/nile-select/nile-select.js.map +1 -1
  155. package/dist/src/nile-table/nile-table.js.map +1 -1
  156. package/dist/src/nile-tooltip/nile-tooltip.css.js +43 -76
  157. package/dist/src/nile-tooltip/nile-tooltip.css.js.map +1 -1
  158. package/dist/src/nile-tooltip/nile-tooltip.d.ts +46 -24
  159. package/dist/src/nile-tooltip/nile-tooltip.js +232 -235
  160. package/dist/src/nile-tooltip/nile-tooltip.js.map +1 -1
  161. package/dist/src/nile-virtual-list/index.d.ts +1 -0
  162. package/dist/src/nile-virtual-list/index.js +2 -0
  163. package/dist/src/nile-virtual-list/index.js.map +1 -0
  164. package/dist/src/nile-virtual-list/nile-virtual-list.css.d.ts +12 -0
  165. package/dist/src/nile-virtual-list/nile-virtual-list.css.js +25 -0
  166. package/dist/src/nile-virtual-list/nile-virtual-list.css.js.map +1 -0
  167. package/dist/src/nile-virtual-list/nile-virtual-list.d.ts +28 -0
  168. package/dist/src/nile-virtual-list/nile-virtual-list.js +69 -0
  169. package/dist/src/nile-virtual-list/nile-virtual-list.js.map +1 -0
  170. package/dist/src/nile-virtual-scroll/index.d.ts +1 -0
  171. package/dist/src/nile-virtual-scroll/index.js +2 -0
  172. package/dist/src/nile-virtual-scroll/index.js.map +1 -0
  173. package/dist/src/nile-virtual-scroll/nile-virtual-scroll.css.d.ts +12 -0
  174. package/dist/src/nile-virtual-scroll/nile-virtual-scroll.css.js +17 -0
  175. package/dist/src/nile-virtual-scroll/nile-virtual-scroll.css.js.map +1 -0
  176. package/dist/src/nile-virtual-scroll/nile-virtual-scroll.d.ts +54 -0
  177. package/dist/src/nile-virtual-scroll/nile-virtual-scroll.js +196 -0
  178. package/dist/src/nile-virtual-scroll/nile-virtual-scroll.js.map +1 -0
  179. package/dist/src/nile-virtual-scroll/nile-virtual-scroll.utils.d.ts +23 -0
  180. package/dist/src/nile-virtual-scroll/nile-virtual-scroll.utils.js +48 -0
  181. package/dist/src/nile-virtual-scroll/nile-virtual-scroll.utils.js.map +1 -0
  182. package/dist/src/nile-virtual-select/event-handlers.d.ts +19 -0
  183. package/dist/src/nile-virtual-select/event-handlers.js +153 -0
  184. package/dist/src/nile-virtual-select/event-handlers.js.map +1 -0
  185. package/dist/src/nile-virtual-select/index.d.ts +1 -0
  186. package/dist/src/nile-virtual-select/index.js +2 -0
  187. package/dist/src/nile-virtual-select/index.js.map +1 -0
  188. package/dist/src/nile-virtual-select/models.d.ts +33 -0
  189. package/dist/src/nile-virtual-select/models.js +5 -0
  190. package/dist/src/nile-virtual-select/models.js.map +1 -0
  191. package/dist/src/nile-virtual-select/nile-virtual-select.css.d.ts +12 -0
  192. package/dist/src/nile-virtual-select/nile-virtual-select.css.js +463 -0
  193. package/dist/src/nile-virtual-select/nile-virtual-select.css.js.map +1 -0
  194. package/dist/src/nile-virtual-select/nile-virtual-select.d.ts +239 -0
  195. package/dist/src/nile-virtual-select/nile-virtual-select.js +1287 -0
  196. package/dist/src/nile-virtual-select/nile-virtual-select.js.map +1 -0
  197. package/dist/src/nile-virtual-select/nile-virtual-select.test.js +2 -0
  198. package/dist/src/nile-virtual-select/nile-virtual-select.test.js.map +1 -0
  199. package/dist/src/nile-virtual-select/nile-virtual-select.utils.d.ts +0 -0
  200. package/dist/src/nile-virtual-select/nile-virtual-select.utils.js +2 -0
  201. package/dist/src/nile-virtual-select/nile-virtual-select.utils.js.map +1 -0
  202. package/dist/src/nile-virtual-select/option-utils.d.ts +15 -0
  203. package/dist/src/nile-virtual-select/option-utils.js +59 -0
  204. package/dist/src/nile-virtual-select/option-utils.js.map +1 -0
  205. package/dist/tsconfig.tsbuildinfo +1 -1
  206. package/package.json +2 -2
  207. package/plop-templates/lit/index.ts.hbs +1 -1
  208. package/plop-templates/lit/lit.css.ts.hbs +1 -1
  209. package/plop-templates/lit/lit.ts.hbs +3 -7
  210. package/plopfile.js +1 -32
  211. package/src/index.ts +1 -2
  212. package/src/nile-chip/nile-chip.ts +0 -9
  213. package/src/nile-error-message/nile-error-message.css.ts +4 -6
  214. package/src/nile-error-message/nile-error-message.ts +0 -18
  215. package/src/nile-error-notification/nile-error-notification.css.ts +1 -1
  216. package/src/nile-icon/icons/svg/accessreview.ts +1 -1
  217. package/src/nile-progress-bar/nile-progress-bar.css.ts +0 -1
  218. package/src/nile-select/nile-select.ts +1 -1
  219. package/src/nile-table/nile-table.ts +2 -2
  220. package/src/nile-tooltip/nile-tooltip.css.ts +44 -77
  221. package/src/nile-tooltip/nile-tooltip.ts +230 -268
  222. package/vscode-html-custom-data.json +95 -144
  223. package/plop-templates/lit/lit.template.ts.hbs +0 -3
  224. package/plop-templates/lit/lit.test.ts.hbs +0 -38
  225. package/plop-templates/lit/sub-components/index.ts.hbs +0 -4
  226. package/plop-templates/lit/types/type.ts.hbs +0 -3
  227. package/plop-templates/lit/utils/lit.utils.ts.hbs +0 -4
  228. package/src/nile-filter-chip/index.ts +0 -1
  229. package/src/nile-filter-chip/nile-filter-chip.css.ts +0 -138
  230. package/src/nile-filter-chip/nile-filter-chip.test.ts +0 -92
  231. package/src/nile-filter-chip/nile-filter-chip.ts +0 -136
  232. package/src/nile-tooltip/nile-tooltip-utils.ts +0 -271
  233. package/src/nile-tooltip/nile-tooltip.test.ts +0 -168
  234. /package/{plop-templates/lit/types/index.ts.hbs → dist/src/nile-virtual-select/nile-virtual-select.test.d.ts} +0 -0
@@ -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
- */
@@ -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" part="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" part="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
- }
@@ -1,271 +0,0 @@
1
- export function isInViewport(element: HTMLElement): boolean {
2
- const rect = element.getBoundingClientRect();
3
- return (
4
- rect.top >= 0 &&
5
- rect.left >= 0 &&
6
- rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
7
- rect.right <= (window.innerWidth || document.documentElement.clientWidth)
8
- );
9
- }
10
-
11
-
12
- export function getValidTooltipPosition(
13
- triggerRect: DOMRect,
14
- tooltipRect: DOMRect,
15
- originalPlacement: string,
16
- distance: number,
17
- skidding: number,
18
- caretSize: number,
19
- viewportWidth: number,
20
- viewportHeight: number
21
- ): { top: number; left: number; placement: string } {
22
- const triggerCenterX = triggerRect.left + triggerRect.width / 2;
23
-
24
- const getCandidatePosition = (placement: string) => {
25
- let top = 0;
26
- let left = 0;
27
-
28
- switch (placement) {
29
- case 'top':
30
- top = triggerRect.top - tooltipRect.height - distance;
31
- left = triggerRect.left + (triggerRect.width - tooltipRect.width) / 2 + skidding;
32
- break;
33
- case 'top-start': {
34
- top = triggerRect.top - tooltipRect.height - distance;
35
- const centeredLeft = triggerRect.left + (triggerRect.width / 2) - (tooltipRect.width / 2) + skidding;
36
- left = Math.max(triggerRect.left + skidding, centeredLeft);
37
- break;
38
- }
39
- case 'top-end': {
40
- top = triggerRect.top - tooltipRect.height - distance;
41
- const centeredLeft = triggerRect.left + (triggerRect.width / 2) - (tooltipRect.width / 2) + skidding;
42
- const maxLeft = triggerRect.right - tooltipRect.width + skidding;
43
- left = Math.min(centeredLeft, maxLeft);
44
- break;
45
- }
46
-
47
- case 'bottom':
48
- top = triggerRect.bottom + distance;
49
- left = triggerRect.left + (triggerRect.width - tooltipRect.width) / 2 + skidding;
50
- break;
51
- case 'bottom-start': {
52
- top = triggerRect.bottom + distance;
53
- const centeredLeft = triggerRect.left + (triggerRect.width / 2) - (tooltipRect.width / 2) + skidding;
54
- left = Math.max(triggerRect.left + skidding, centeredLeft);
55
-
56
- break;
57
- }
58
-
59
- case 'bottom-end': {
60
- top = triggerRect.bottom + distance;
61
- const centeredLeft = triggerRect.left + (triggerRect.width / 2) - (tooltipRect.width / 2) + skidding;
62
- const maxLeft = triggerRect.right - tooltipRect.width + skidding;
63
- left = Math.min(centeredLeft, maxLeft);
64
- break;
65
- }
66
-
67
- case 'left':
68
- top = triggerRect.top + (triggerRect.height - tooltipRect.height) / 2 + skidding;
69
- left = triggerRect.left - tooltipRect.width - distance;
70
- break;
71
- case 'left-start': {
72
- const triggerCenterY = triggerRect.top + triggerRect.height / 2;
73
- top = triggerCenterY - tooltipRect.height / 2;
74
- left = triggerRect.left - tooltipRect.width - distance;
75
- if (top < triggerRect.top) {
76
- top = triggerRect.top;
77
- }
78
- break;
79
- }
80
-
81
- case 'left-end': {
82
- const triggerCenterY = triggerRect.top + triggerRect.height / 2;
83
- top = triggerCenterY - tooltipRect.height / 2;
84
- left = triggerRect.left - tooltipRect.width - distance;
85
- if (top + tooltipRect.height > triggerRect.bottom) {
86
- top = triggerRect.bottom - tooltipRect.height;
87
- }
88
-
89
- break;
90
- }
91
-
92
- case 'right':
93
- top = triggerRect.top + (triggerRect.height - tooltipRect.height) / 2 + skidding;
94
- left = triggerRect.right + distance;
95
- break;
96
- case 'right-start': {
97
- const triggerCenterY = triggerRect.top + triggerRect.height / 2;
98
- top = triggerCenterY - tooltipRect.height / 2;
99
- left = triggerRect.right + distance;
100
- if (top < triggerRect.top) {
101
- top = triggerRect.top;
102
- }
103
-
104
- break;
105
- }
106
-
107
- case 'right-end': {
108
- const triggerCenterY = triggerRect.top + triggerRect.height / 2;
109
- top = triggerCenterY - tooltipRect.height / 2;
110
- left = triggerRect.right + distance;
111
- if (top + tooltipRect.height > triggerRect.bottom) {
112
- top = triggerRect.bottom - tooltipRect.height;
113
- }
114
-
115
- break;
116
- }
117
-
118
- default:
119
- top = triggerRect.top - tooltipRect.height - distance;
120
- left = triggerRect.left + (triggerRect.width - tooltipRect.width) / 2 + skidding;
121
- }
122
-
123
- return { top, left };
124
- };
125
-
126
- const candidateFits = (top: number, left: number) =>
127
- top >= 0 &&
128
- left >= 0 &&
129
- top + tooltipRect.height <= viewportHeight &&
130
- left + tooltipRect.width <= viewportWidth;
131
-
132
- let placement = originalPlacement;
133
- let candidate = getCandidatePosition(placement);
134
-
135
- if (!candidateFits(candidate.top, candidate.left)) {
136
- if (['top', 'top-start', 'top-end'].includes(originalPlacement)) {
137
- placement = 'bottom';
138
- } else if (['bottom', 'bottom-start', 'bottom-end'].includes(originalPlacement)) {
139
- placement = 'top';
140
- } else if (['right', 'right-start', 'right-end'].includes(originalPlacement)) {
141
- placement = 'left';
142
- } else if (['left', 'left-start', 'left-end'].includes(originalPlacement)) {
143
- placement = 'right';
144
- }
145
- candidate = getCandidatePosition(placement);
146
- const leftCandidate = getCandidatePosition('left');
147
- const bottomCandidate = getCandidatePosition('bottom');
148
- const topCandidate = getCandidatePosition('top');
149
- if (
150
- !candidateFits(leftCandidate.top, leftCandidate.left) &&
151
- !candidateFits(bottomCandidate.top, bottomCandidate.left) &&
152
- !candidateFits(topCandidate.top, topCandidate.left)
153
- ) {
154
- placement = 'right';
155
- candidate = getCandidatePosition(placement);
156
- }
157
- else {
158
- const rightCandidate = getCandidatePosition('right');
159
- if (
160
- !candidateFits(rightCandidate.top, rightCandidate.left) &&
161
- !candidateFits(bottomCandidate.top, bottomCandidate.left) &&
162
- !candidateFits(topCandidate.top, topCandidate.left)
163
- ) {
164
- placement = 'left';
165
- candidate = getCandidatePosition(placement);
166
- }
167
- }
168
- }
169
-
170
- if (candidate.left < 0) {
171
- candidate.left = 5;
172
- } else if (candidate.left + tooltipRect.width > viewportWidth) {
173
- candidate.left = viewportWidth - tooltipRect.width - 5;
174
- }
175
-
176
- if (candidate.top < 0) {
177
- candidate.top = 5;
178
- } else if (candidate.top + tooltipRect.height > viewportHeight) {
179
- candidate.top = viewportHeight - tooltipRect.height - 5;
180
- }
181
-
182
- return { ...candidate, placement };
183
- }
184
-
185
-
186
-
187
- export interface CaretPositionInput {
188
- placement: string;
189
- tooltipRect: DOMRect;
190
- triggerRect: DOMRect;
191
- caretSize: number;
192
- left: number;
193
- top: number;
194
- }
195
-
196
- export function getCaretPosition({
197
- placement,
198
- tooltipRect,
199
- triggerRect,
200
- caretSize,
201
- left,
202
- top
203
- }: CaretPositionInput): { caretLeft: number; caretTop: number } {
204
- const triggerCenterX = triggerRect.left + triggerRect.width / 2;
205
- const triggerCenterY = triggerRect.top + triggerRect.height / 2;
206
-
207
- const [primaryPlacement, secondaryPlacement] = placement.split('-');
208
-
209
- let caretLeft = 0;
210
- let caretTop = 0;
211
-
212
- switch (primaryPlacement) {
213
- case 'top':
214
- caretTop = tooltipRect.height - caretSize;
215
- caretLeft = triggerCenterX - left - caretSize;
216
- if (placement === 'top-end') {
217
- caretLeft = triggerCenterX - left - caretSize;
218
- } else if (secondaryPlacement === 'start') {
219
- caretLeft = triggerCenterX - left - caretSize;
220
- } else if (secondaryPlacement === 'end') {
221
- caretLeft = tooltipRect.width - 2 * caretSize + 8;
222
- }
223
- caretLeft = Math.max(caretSize, Math.min(caretLeft, tooltipRect.width - 2 * caretSize));
224
- break;
225
-
226
- case 'bottom':
227
- caretTop = -caretSize;
228
- caretLeft = triggerCenterX - left - caretSize;
229
- break;
230
-
231
- case 'left':
232
- caretLeft = tooltipRect.width - caretSize;
233
- if (secondaryPlacement === 'start') {
234
- const computedCaretTop = triggerCenterY - top - caretSize;
235
- const minCaretTop = triggerRect.top - top;
236
- caretTop = Math.max(computedCaretTop, minCaretTop);
237
- } else if (secondaryPlacement === 'end') {
238
- const computedCaretTop = triggerCenterY - top - caretSize;
239
- const maxCaretTop = triggerRect.bottom - top - 2 * caretSize;
240
- caretTop = Math.min(computedCaretTop, maxCaretTop);
241
- } else {
242
- caretTop = triggerCenterY - top - caretSize;
243
- }
244
- caretTop = Math.max(caretSize, Math.min(caretTop, tooltipRect.height - 2 * caretSize));
245
- break;
246
-
247
-
248
- case 'right':
249
- caretLeft = -caretSize;
250
- if (secondaryPlacement === 'start') {
251
- const computedCaretTop = triggerCenterY - top - caretSize;
252
- const minCaretTop = triggerRect.top - top;
253
- caretTop = Math.max(computedCaretTop, minCaretTop);
254
- } else if (secondaryPlacement === 'end') {
255
- const computedCaretTop = triggerCenterY - top - caretSize;
256
- const maxCaretTop = triggerRect.bottom - top - 2 * caretSize;
257
- caretTop = Math.min(computedCaretTop, maxCaretTop);
258
- } else {
259
- caretTop = triggerCenterY - top - caretSize;
260
- }
261
- caretTop = Math.max(caretSize, Math.min(caretTop, tooltipRect.height - 2 * caretSize));
262
- break;
263
-
264
-
265
- default:
266
- caretLeft = tooltipRect.width / 2 - caretSize;
267
- caretTop = tooltipRect.height / 2 - caretSize;
268
- }
269
-
270
- return { caretLeft, caretTop };
271
- }