@coveo/atomic 3.49.0 → 3.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/custom-elements.json +2257 -369
  2. package/dist/atomic/_atomic.esm.js +1 -1
  3. package/dist/atomic/atomic.esm.js.map +1 -1
  4. package/dist/atomic/components/_index.d.ts +0 -10
  5. package/dist/atomic/components/_index.js +2 -8
  6. package/dist/atomic/components/atomic-insight-result-action.js +123 -6
  7. package/dist/atomic/components/atomic-insight-result-action.js.map +1 -1
  8. package/dist/atomic/components/atomic-insight-result-children-template.js +1 -2
  9. package/dist/atomic/components/atomic-insight-result-children-template.js.map +1 -1
  10. package/dist/atomic/components/atomic-insight-timeframe-facet.js +97 -7
  11. package/dist/atomic/components/atomic-insight-timeframe-facet.js.map +1 -1
  12. package/dist/atomic/components/atomic-stencil-facet-date-input.js +3 -3
  13. package/dist/atomic/components/components/commerce/atomic-commerce-search-box/atomic-commerce-search-box.js +4 -4
  14. package/dist/atomic/components/components/common/generated-answer/render-feedback-and-copy-buttons.js +4 -3
  15. package/dist/atomic/components/components/insight/atomic-insight-generated-answer/atomic-insight-generated-answer.js +444 -0
  16. package/dist/atomic/components/components/insight/atomic-insight-generated-answer/atomic-insight-generated-answer.tw.css.js +2 -0
  17. package/dist/atomic/components/components/insight/atomic-insight-result-attach-to-case-action/atomic-insight-result-attach-to-case-action.js +122 -0
  18. package/dist/atomic/components/components/insight/atomic-insight-result-children/atomic-insight-result-children.js +4 -4
  19. package/dist/atomic/components/components/insight/index.js +2 -0
  20. package/dist/atomic/components/components/insight/lazy-index.js +2 -0
  21. package/dist/atomic/components/components/ipx/atomic-ipx-button/atomic-ipx-button.js +1 -1
  22. package/dist/atomic/components/components/ipx/atomic-ipx-recs-list/atomic-ipx-recs-list.js +483 -0
  23. package/dist/atomic/components/components/ipx/atomic-ipx-refine-modal/atomic-ipx-refine-modal.js +202 -0
  24. package/dist/atomic/components/components/ipx/atomic-ipx-refine-toggle/atomic-ipx-refine-toggle.js +123 -0
  25. package/dist/atomic/components/components/ipx/index.js +3 -0
  26. package/dist/atomic/components/components/ipx/lazy-index.js +3 -0
  27. package/dist/atomic/components/components/recommendations/atomic-recs-result/atomic-recs-result.js +1 -0
  28. package/dist/atomic/components/components/search/atomic-generated-answer/atomic-generated-answer.js +7 -1
  29. package/dist/atomic/components/components/search/atomic-refine-modal/atomic-refine-modal.js +2 -1
  30. package/dist/atomic/components/components/search/atomic-search-box/atomic-search-box.js +4 -4
  31. package/dist/atomic/components/global/environment.js +1 -1
  32. package/dist/atomic/components/index.js.map +1 -1
  33. package/dist/atomic/components/props-utils.js +1402 -2
  34. package/dist/atomic/components/props-utils.js.map +1 -1
  35. package/dist/atomic/components/utils/custom-element-tags.js +7 -0
  36. package/dist/atomic/components/utils/tailwind.global.tw.css.js +4 -4
  37. package/dist/atomic/index.esm.js +1 -1
  38. package/dist/atomic/p-1df0744f.entry.js +9 -0
  39. package/dist/atomic/p-1df0744f.entry.js.map +1 -0
  40. package/dist/atomic/{p-4a32511f.js → p-2045a1b1.js} +2 -2
  41. package/dist/atomic/p-500bf5c4.entry.js +2 -0
  42. package/dist/atomic/{p-4117289b.entry.js.map → p-500bf5c4.entry.js.map} +1 -1
  43. package/dist/atomic/p-5226a938.js +3 -0
  44. package/dist/atomic/p-5226a938.js.map +1 -0
  45. package/dist/atomic/{p-b4cfedf1.js → p-720863c3.js} +2 -2
  46. package/dist/atomic/p-81336626.entry.js +2 -0
  47. package/dist/atomic/p-81336626.entry.js.map +1 -0
  48. package/dist/atomic/p-aad3b4ec.js +3 -0
  49. package/dist/atomic/p-aad3b4ec.js.map +1 -0
  50. package/dist/atomic/{p-0698ccf1.entry.js → p-b5af331b.entry.js} +2 -2
  51. package/dist/atomic/{p-677f9c40.js → p-b7209471.js} +2 -2
  52. package/dist/cjs/_index.cjs.js +2 -2
  53. package/dist/cjs/_loader.cjs.js +2 -2
  54. package/dist/cjs/atomic-insight-result-action.cjs.entry.js +22 -9
  55. package/dist/cjs/atomic-insight-result-action.cjs.entry.js.map +1 -1
  56. package/dist/cjs/atomic-insight-result-children-template.cjs.entry.js +6 -7
  57. package/dist/cjs/atomic-insight-result-children-template.cjs.entry.js.map +1 -1
  58. package/dist/cjs/atomic-insight-timeframe-facet.cjs.entry.js +106 -16
  59. package/dist/cjs/atomic-insight-timeframe-facet.cjs.entry.js.map +1 -1
  60. package/dist/cjs/atomic-stencil-facet-date-input.cjs.entry.js +5 -5
  61. package/dist/cjs/atomic.cjs.js +2 -2
  62. package/dist/cjs/{index-3532822e.js → index-122375df.js} +4 -58
  63. package/dist/cjs/index-122375df.js.map +1 -0
  64. package/dist/cjs/{initialization-utils-51a423fe.js → initialization-utils-c2821271.js} +2 -2
  65. package/dist/cjs/{initialization-utils-51a423fe.js.map → initialization-utils-c2821271.js.map} +1 -1
  66. package/dist/cjs/{utils-e845f262.js → props-utils-e4f29f1e.js} +54 -21
  67. package/dist/cjs/props-utils-e4f29f1e.js.map +1 -0
  68. package/dist/cjs/{stencil-button-f39da03e.js → stencil-button-bf22eea4.js} +2 -2
  69. package/dist/cjs/{stencil-button-f39da03e.js.map → stencil-button-bf22eea4.js.map} +1 -1
  70. package/dist/cjs/{stencil-result-template-decorators-1f099c15.js → stencil-result-template-decorators-96954751.js} +2 -2
  71. package/dist/cjs/{stencil-result-template-decorators-1f099c15.js.map → stencil-result-template-decorators-96954751.js.map} +1 -1
  72. package/dist/cjs/version.cjs.js +2 -2
  73. package/dist/esm/_index.js +3 -3
  74. package/dist/esm/_loader.js +3 -3
  75. package/dist/esm/atomic-insight-result-action.entry.js +20 -7
  76. package/dist/esm/atomic-insight-result-action.entry.js.map +1 -1
  77. package/dist/esm/atomic-insight-result-children-template.entry.js +2 -3
  78. package/dist/esm/atomic-insight-result-children-template.entry.js.map +1 -1
  79. package/dist/esm/atomic-insight-timeframe-facet.entry.js +100 -10
  80. package/dist/esm/atomic-insight-timeframe-facet.entry.js.map +1 -1
  81. package/dist/esm/atomic-stencil-facet-date-input.entry.js +5 -5
  82. package/dist/esm/atomic.js +3 -3
  83. package/dist/esm/{index-3eb0b28e.js → index-4d679e44.js} +5 -58
  84. package/dist/{cjs/index-3532822e.js.map → esm/index-4d679e44.js.map} +1 -1
  85. package/dist/esm/{initialization-utils-82d28c63.js → initialization-utils-9ff399ff.js} +2 -2
  86. package/dist/esm/{initialization-utils-82d28c63.js.map → initialization-utils-9ff399ff.js.map} +1 -1
  87. package/dist/esm/{utils-b5bab369.js → props-utils-76043c82.js} +54 -18
  88. package/dist/esm/props-utils-76043c82.js.map +1 -0
  89. package/dist/esm/{stencil-button-c25899df.js → stencil-button-28de709c.js} +2 -2
  90. package/dist/esm/{stencil-button-c25899df.js.map → stencil-button-28de709c.js.map} +1 -1
  91. package/dist/esm/{stencil-result-template-decorators-9cbe1e1c.js → stencil-result-template-decorators-4c2e5132.js} +2 -2
  92. package/dist/esm/{stencil-result-template-decorators-9cbe1e1c.js.map → stencil-result-template-decorators-4c2e5132.js.map} +1 -1
  93. package/dist/esm/version.js +2 -2
  94. package/dist/types/components/common/generated-answer/answerContent/answer-content.d.ts +49 -0
  95. package/dist/types/components/common/generated-answer/generated-answer-thread-item/generated-answer-thread-item.d.ts +49 -0
  96. package/dist/types/components/common/generated-answer/render-feedback-and-copy-buttons.d.ts +8 -2
  97. package/dist/types/components/common/item-list/table-layout.d.ts +1 -1
  98. package/dist/types/components/insight/atomic-insight-generated-answer/atomic-insight-generated-answer.d.ts +54 -35
  99. package/dist/types/components/insight/atomic-insight-generated-answer/atomic-insight-generated-answer.tw.css.d.ts +2 -0
  100. package/dist/types/components/insight/atomic-insight-result-attach-to-case-action/atomic-insight-result-attach-to-case-action.d.ts +25 -20
  101. package/dist/types/components/insight/index.d.ts +2 -0
  102. package/dist/types/components/ipx/atomic-ipx-button/atomic-ipx-button.d.ts +1 -1
  103. package/dist/types/components/ipx/atomic-ipx-recs-list/{atomic-recs-list/atomic-ipx-recs-list.d.ts → atomic-ipx-recs-list.d.ts} +43 -21
  104. package/dist/types/components/ipx/atomic-ipx-refine-modal/atomic-ipx-refine-modal.d.ts +62 -15
  105. package/dist/types/components/ipx/atomic-ipx-refine-toggle/atomic-ipx-refine-toggle.d.ts +26 -11
  106. package/dist/types/components/ipx/index.d.ts +3 -0
  107. package/dist/types/components/recommendations/atomic-recs-result/atomic-recs-result.d.ts +1 -0
  108. package/dist/types/components/search/atomic-refine-modal/atomic-refine-modal.d.ts +4 -3
  109. package/dist/types/components.d.ts +0 -249
  110. package/docs/atomic-docs.json +1 -26
  111. package/package.json +4 -4
  112. package/dist/atomic/components/arrow-top-rounded.js +0 -7
  113. package/dist/atomic/components/arrow-top-rounded.js.map +0 -1
  114. package/dist/atomic/components/atomic-insight-generated-answer.d.ts +0 -11
  115. package/dist/atomic/components/atomic-insight-generated-answer.js +0 -3264
  116. package/dist/atomic/components/atomic-insight-generated-answer.js.map +0 -1
  117. package/dist/atomic/components/atomic-insight-result-attach-to-case-action.d.ts +0 -11
  118. package/dist/atomic/components/atomic-insight-result-attach-to-case-action.js +0 -102
  119. package/dist/atomic/components/atomic-insight-result-attach-to-case-action.js.map +0 -1
  120. package/dist/atomic/components/atomic-ipx-recs-list.d.ts +0 -11
  121. package/dist/atomic/components/atomic-ipx-recs-list.js +0 -631
  122. package/dist/atomic/components/atomic-ipx-recs-list.js.map +0 -1
  123. package/dist/atomic/components/atomic-ipx-refine-modal.d.ts +0 -11
  124. package/dist/atomic/components/atomic-ipx-refine-modal.js +0 -8
  125. package/dist/atomic/components/atomic-ipx-refine-modal.js.map +0 -1
  126. package/dist/atomic/components/atomic-ipx-refine-modal2.js +0 -162
  127. package/dist/atomic/components/atomic-ipx-refine-modal2.js.map +0 -1
  128. package/dist/atomic/components/atomic-ipx-refine-toggle.d.ts +0 -11
  129. package/dist/atomic/components/atomic-ipx-refine-toggle.js +0 -121
  130. package/dist/atomic/components/atomic-ipx-refine-toggle.js.map +0 -1
  131. package/dist/atomic/components/attach.js +0 -115
  132. package/dist/atomic/components/attach.js.map +0 -1
  133. package/dist/atomic/components/components/common/layout/display-options.js +0 -28
  134. package/dist/atomic/components/popover-type.js +0 -12
  135. package/dist/atomic/components/popover-type.js.map +0 -1
  136. package/dist/atomic/components/stencil-heading.js +0 -169
  137. package/dist/atomic/components/stencil-heading.js.map +0 -1
  138. package/dist/atomic/components/stencil-iconButton.js +0 -16
  139. package/dist/atomic/components/stencil-iconButton.js.map +0 -1
  140. package/dist/atomic/components/store.js +0 -13
  141. package/dist/atomic/components/store.js.map +0 -1
  142. package/dist/atomic/components/utils.js +0 -1421
  143. package/dist/atomic/components/utils.js.map +0 -1
  144. package/dist/atomic/p-2c08a419.entry.js +0 -2
  145. package/dist/atomic/p-2c08a419.entry.js.map +0 -1
  146. package/dist/atomic/p-4117289b.entry.js +0 -2
  147. package/dist/atomic/p-52d14165.entry.js +0 -2
  148. package/dist/atomic/p-52d14165.entry.js.map +0 -1
  149. package/dist/atomic/p-578d761c.js +0 -2
  150. package/dist/atomic/p-578d761c.js.map +0 -1
  151. package/dist/atomic/p-64f83898.entry.js +0 -2
  152. package/dist/atomic/p-64f83898.entry.js.map +0 -1
  153. package/dist/atomic/p-70cc18a1.js +0 -2
  154. package/dist/atomic/p-70cc18a1.js.map +0 -1
  155. package/dist/atomic/p-9c5ec170.js +0 -2
  156. package/dist/atomic/p-9c5ec170.js.map +0 -1
  157. package/dist/atomic/p-9dfe5ab1.js +0 -2
  158. package/dist/atomic/p-9dfe5ab1.js.map +0 -1
  159. package/dist/atomic/p-a33748a9.js +0 -2
  160. package/dist/atomic/p-a33748a9.js.map +0 -1
  161. package/dist/atomic/p-b09433bb.js +0 -3
  162. package/dist/atomic/p-b09433bb.js.map +0 -1
  163. package/dist/atomic/p-c8452548.entry.js +0 -2
  164. package/dist/atomic/p-c8452548.entry.js.map +0 -1
  165. package/dist/atomic/p-c95ac794.entry.js +0 -2
  166. package/dist/atomic/p-c95ac794.entry.js.map +0 -1
  167. package/dist/atomic/p-d75a4630.js +0 -2
  168. package/dist/atomic/p-d75a4630.js.map +0 -1
  169. package/dist/atomic/p-d8230482.entry.js +0 -9
  170. package/dist/atomic/p-d8230482.entry.js.map +0 -1
  171. package/dist/atomic/p-e94ba0e1.entry.js +0 -2
  172. package/dist/atomic/p-e94ba0e1.entry.js.map +0 -1
  173. package/dist/atomic/p-ec1c5f46.js +0 -3
  174. package/dist/atomic/p-ec1c5f46.js.map +0 -1
  175. package/dist/atomic/p-f321aab0.js +0 -2
  176. package/dist/atomic/p-f321aab0.js.map +0 -1
  177. package/dist/cjs/arrow-top-rounded-885250ea.js +0 -10
  178. package/dist/cjs/arrow-top-rounded-885250ea.js.map +0 -1
  179. package/dist/cjs/atomic-insight-generated-answer.cjs.entry.js +0 -3238
  180. package/dist/cjs/atomic-insight-generated-answer.cjs.entry.js.map +0 -1
  181. package/dist/cjs/atomic-insight-result-attach-to-case-action.cjs.entry.js +0 -90
  182. package/dist/cjs/atomic-insight-result-attach-to-case-action.cjs.entry.js.map +0 -1
  183. package/dist/cjs/atomic-ipx-recs-list.cjs.entry.js +0 -600
  184. package/dist/cjs/atomic-ipx-recs-list.cjs.entry.js.map +0 -1
  185. package/dist/cjs/atomic-ipx-refine-modal.cjs.entry.js +0 -143
  186. package/dist/cjs/atomic-ipx-refine-modal.cjs.entry.js.map +0 -1
  187. package/dist/cjs/atomic-ipx-refine-toggle.cjs.entry.js +0 -99
  188. package/dist/cjs/atomic-ipx-refine-toggle.cjs.entry.js.map +0 -1
  189. package/dist/cjs/attach-19283bec.js +0 -10
  190. package/dist/cjs/attach-19283bec.js.map +0 -1
  191. package/dist/cjs/popover-type-22f285e1.js +0 -16
  192. package/dist/cjs/popover-type-22f285e1.js.map +0 -1
  193. package/dist/cjs/props-utils-bc5feb04.js +0 -59
  194. package/dist/cjs/props-utils-bc5feb04.js.map +0 -1
  195. package/dist/cjs/stencil-heading-ecec9ab3.js +0 -174
  196. package/dist/cjs/stencil-heading-ecec9ab3.js.map +0 -1
  197. package/dist/cjs/stencil-iconButton-f8b9fda0.js +0 -18
  198. package/dist/cjs/stencil-iconButton-f8b9fda0.js.map +0 -1
  199. package/dist/cjs/store-70fff5e6.js +0 -16
  200. package/dist/cjs/store-70fff5e6.js.map +0 -1
  201. package/dist/cjs/utils-e845f262.js.map +0 -1
  202. package/dist/esm/arrow-top-rounded-745b84a6.js +0 -7
  203. package/dist/esm/arrow-top-rounded-745b84a6.js.map +0 -1
  204. package/dist/esm/atomic-insight-generated-answer.entry.js +0 -3234
  205. package/dist/esm/atomic-insight-generated-answer.entry.js.map +0 -1
  206. package/dist/esm/atomic-insight-result-attach-to-case-action.entry.js +0 -86
  207. package/dist/esm/atomic-insight-result-attach-to-case-action.entry.js.map +0 -1
  208. package/dist/esm/atomic-ipx-recs-list.entry.js +0 -596
  209. package/dist/esm/atomic-ipx-recs-list.entry.js.map +0 -1
  210. package/dist/esm/atomic-ipx-refine-modal.entry.js +0 -139
  211. package/dist/esm/atomic-ipx-refine-modal.entry.js.map +0 -1
  212. package/dist/esm/atomic-ipx-refine-toggle.entry.js +0 -95
  213. package/dist/esm/atomic-ipx-refine-toggle.entry.js.map +0 -1
  214. package/dist/esm/attach-81bb8872.js +0 -8
  215. package/dist/esm/attach-81bb8872.js.map +0 -1
  216. package/dist/esm/index-3eb0b28e.js.map +0 -1
  217. package/dist/esm/popover-type-c85677ef.js +0 -12
  218. package/dist/esm/popover-type-c85677ef.js.map +0 -1
  219. package/dist/esm/props-utils-d343133b.js +0 -57
  220. package/dist/esm/props-utils-d343133b.js.map +0 -1
  221. package/dist/esm/stencil-heading-98a5f23f.js +0 -169
  222. package/dist/esm/stencil-heading-98a5f23f.js.map +0 -1
  223. package/dist/esm/stencil-iconButton-ed5804d3.js +0 -16
  224. package/dist/esm/stencil-iconButton-ed5804d3.js.map +0 -1
  225. package/dist/esm/store-50d170c8.js +0 -13
  226. package/dist/esm/store-50d170c8.js.map +0 -1
  227. package/dist/esm/utils-b5bab369.js.map +0 -1
  228. /package/dist/atomic/{p-4a32511f.js.map → p-2045a1b1.js.map} +0 -0
  229. /package/dist/atomic/{p-b4cfedf1.js.map → p-720863c3.js.map} +0 -0
  230. /package/dist/atomic/{p-0698ccf1.entry.js.map → p-b5af331b.entry.js.map} +0 -0
  231. /package/dist/atomic/{p-677f9c40.js.map → p-b7209471.js.map} +0 -0
@@ -1,169 +0,0 @@
1
- import { b as buildCustomEvent } from './stencil-button.js';
2
- import { d as defer } from './utils.js';
3
- import { h } from '@stencil/core/internal/client';
4
-
5
- const findAriaLiveEventName = 'atomic/accessibility/findAriaLive';
6
- /**
7
- * @deprecated use Lit equivalent
8
- */
9
- function AriaLiveRegion(regionName, assertive = false) {
10
- function getAriaLiveElement() {
11
- const event = buildCustomEvent(findAriaLiveEventName, {});
12
- document.dispatchEvent(event);
13
- const { element } = event.detail;
14
- return element;
15
- }
16
- function dispatchMessage(message) {
17
- getAriaLiveElement()?.updateMessage(regionName, message, assertive);
18
- }
19
- function registerRegion() {
20
- getAriaLiveElement()?.registerRegion(regionName, assertive);
21
- }
22
- return (component, setterName) => {
23
- const { componentWillRender } = component;
24
- Object.defineProperty(component, setterName, {
25
- set: (message) => dispatchMessage(message),
26
- });
27
- component.componentWillRender = function () {
28
- componentWillRender && componentWillRender.call(this);
29
- registerRegion();
30
- };
31
- };
32
- }
33
- /**
34
- * @deprecated use Lit equivalent
35
- */
36
- class FocusTargetController {
37
- constructor(component) {
38
- this.component = component;
39
- this.registerFocusCallback = (callback) => {
40
- this.publicOnFocusCallbacks.push(callback);
41
- };
42
- this.doFocusAfterSearch = false;
43
- this.doFocusOnNextTarget = false;
44
- this.publicOnFocusCallbacks = [];
45
- this.bindings = component.bindings;
46
- this.handleComponentRenderLoop();
47
- }
48
- clearFocusCallbacks() {
49
- this.internalOnFocusCallback?.();
50
- while (this.publicOnFocusCallbacks.length) {
51
- this.publicOnFocusCallbacks.pop()?.();
52
- }
53
- }
54
- setTarget(el) {
55
- if (!el) {
56
- return;
57
- }
58
- this.element = el;
59
- if (this.doFocusOnNextTarget) {
60
- this.doFocusOnNextTarget = false;
61
- this.focus();
62
- }
63
- }
64
- async focus() {
65
- await defer();
66
- this.element?.focus();
67
- this.clearFocusCallbacks();
68
- }
69
- focusAfterSearch() {
70
- this.lastSearchId = this.bindings.store.getUniqueIDFromEngine(this.bindings.engine);
71
- this.doFocusAfterSearch = true;
72
- return new Promise((resolve) => (this.internalOnFocusCallback = resolve));
73
- }
74
- focusOnNextTarget() {
75
- this.doFocusOnNextTarget = true;
76
- return new Promise((resolve) => (this.internalOnFocusCallback = resolve));
77
- }
78
- disableForCurrentSearch() {
79
- if (this.bindings.store.getUniqueIDFromEngine(this.bindings.engine) !==
80
- this.lastSearchId) {
81
- this.doFocusAfterSearch = false;
82
- }
83
- }
84
- handleComponentRenderLoop() {
85
- const originalComponentDidRender = this.component.componentDidRender;
86
- this.component.componentDidRender = () => {
87
- originalComponentDidRender &&
88
- originalComponentDidRender.call(this.component);
89
- if (!this.bindings) {
90
- return;
91
- }
92
- if (this.doFocusAfterSearch &&
93
- this.bindings.store.getUniqueIDFromEngine(this.bindings.engine) !==
94
- this.lastSearchId) {
95
- this.doFocusAfterSearch = false;
96
- if (this.element) {
97
- const el = this.element;
98
- // The focus seems to be flaky without deferring, especially on iOS.
99
- defer().then(() => {
100
- el.focus();
101
- this.clearFocusCallbacks();
102
- });
103
- }
104
- }
105
- };
106
- }
107
- }
108
- function isFocusable(element) {
109
- // Source: https://stackoverflow.com/a/30753870
110
- if (element.getAttribute('tabindex') === '-1') {
111
- return false;
112
- }
113
- if (element.hasAttribute('tabindex')) {
114
- return true;
115
- }
116
- if (element.getAttribute('contentEditable') === 'true') {
117
- return true;
118
- }
119
- switch (element.tagName) {
120
- case 'A':
121
- case 'AREA':
122
- return element.hasAttribute('href');
123
- case 'INPUT':
124
- case 'SELECT':
125
- case 'TEXTAREA':
126
- case 'BUTTON':
127
- return !element.hasAttribute('disabled');
128
- case 'IFRAME':
129
- return true;
130
- default:
131
- return false;
132
- }
133
- }
134
- /**
135
- * @deprecated use Lit equivalent
136
- */
137
- function* getFocusableDescendants(element) {
138
- if (isFocusable(element)) {
139
- yield element;
140
- }
141
- let children = Array.from(element.children);
142
- if (element instanceof HTMLSlotElement) {
143
- children = element.assignedElements();
144
- }
145
- else if (element.shadowRoot) {
146
- children.push(...Array.from(element.shadowRoot.children));
147
- }
148
- for (const child of children) {
149
- yield* getFocusableDescendants(child);
150
- }
151
- }
152
- /**
153
- * @deprecated use Lit equivalent
154
- */
155
- function getFirstFocusableDescendant(element) {
156
- return getFocusableDescendants(element).next().value ?? null;
157
- }
158
-
159
- /**
160
- * @deprecated should only be used for Stencil components.
161
- */
162
- const Heading = ({ level, ...htmlProps }, children) => {
163
- const HeadingTag = level > 0 && level <= 6 ? `h${level}` : 'div';
164
- return h(HeadingTag, { ...htmlProps }, children);
165
- };
166
-
167
- export { AriaLiveRegion as A, FocusTargetController as F, Heading as H, getFirstFocusableDescendant as g };
168
-
169
- //# sourceMappingURL=stencil-heading.js.map
@@ -1 +0,0 @@
1
- {"file":"stencil-heading.js","mappings":"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","names":[],"sources":["src/utils/stencil-accessibility-utils.tsx","src/components/common/stencil-heading.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AtomicAriaLive } from '../components/common/atomic-aria-live/atomic-aria-live';\nimport {AnyBindings} from '../components/common/interface/bindings';\nimport {buildCustomEvent} from './event-utils';\nimport {InitializableComponent} from './initialization-utils';\nimport {defer} from './utils';\n\nconst findAriaLiveEventName = 'atomic/accessibility/findAriaLive';\n\n/**\n * @deprecated use Lit equivalent\n */\nexport interface FindAriaLiveEventArgs {\n element?: AtomicAriaLive;\n}\n\n/**\n * @deprecated use Lit equivalent\n */\nexport function AriaLiveRegion(regionName: string, assertive = false) {\n function getAriaLiveElement() {\n const event = buildCustomEvent<FindAriaLiveEventArgs>(\n findAriaLiveEventName,\n {}\n );\n document.dispatchEvent(event);\n const {element} = event.detail;\n return element;\n }\n\n function dispatchMessage(message: string) {\n getAriaLiveElement()?.updateMessage(regionName, message, assertive);\n }\n\n function registerRegion() {\n getAriaLiveElement()?.registerRegion(regionName, assertive);\n }\n\n return (\n component: InitializableComponent<AnyBindings>,\n setterName: string\n ) => {\n const {componentWillRender} = component;\n Object.defineProperty(component, setterName, {\n set: (message: string) => dispatchMessage(message),\n });\n\n component.componentWillRender = function () {\n componentWillRender && componentWillRender.call(this);\n registerRegion();\n };\n };\n}\n\n/**\n * @deprecated use Lit equivalent\n */\nexport class FocusTargetController {\n private bindings: AnyBindings;\n private lastSearchId?: string;\n private element?: HTMLElement;\n public registerFocusCallback: (callback: Function) => void = (\n callback: Function\n ) => {\n this.publicOnFocusCallbacks.push(callback);\n };\n private internalOnFocusCallback?: Function;\n private doFocusAfterSearch = false;\n private doFocusOnNextTarget = false;\n private publicOnFocusCallbacks: Function[] = [];\n\n constructor(private component: InitializableComponent<AnyBindings>) {\n this.bindings = component.bindings;\n this.handleComponentRenderLoop();\n }\n\n private clearFocusCallbacks() {\n this.internalOnFocusCallback?.();\n while (this.publicOnFocusCallbacks.length) {\n this.publicOnFocusCallbacks.pop()?.();\n }\n }\n\n public setTarget(el: HTMLElement | undefined) {\n if (!el) {\n return;\n }\n this.element = el;\n if (this.doFocusOnNextTarget) {\n this.doFocusOnNextTarget = false;\n this.focus();\n }\n }\n\n public async focus() {\n await defer();\n this.element?.focus();\n this.clearFocusCallbacks();\n }\n\n public focusAfterSearch() {\n this.lastSearchId = this.bindings.store.getUniqueIDFromEngine(\n this.bindings.engine\n );\n this.doFocusAfterSearch = true;\n return new Promise((resolve) => (this.internalOnFocusCallback = resolve));\n }\n\n public focusOnNextTarget() {\n this.doFocusOnNextTarget = true;\n return new Promise((resolve) => (this.internalOnFocusCallback = resolve));\n }\n\n public disableForCurrentSearch() {\n if (\n this.bindings.store.getUniqueIDFromEngine(this.bindings.engine) !==\n this.lastSearchId\n ) {\n this.doFocusAfterSearch = false;\n }\n }\n\n private handleComponentRenderLoop() {\n const originalComponentDidRender = this.component.componentDidRender;\n\n this.component.componentDidRender = () => {\n originalComponentDidRender &&\n originalComponentDidRender.call(this.component);\n if (!this.bindings) {\n return;\n }\n if (\n this.doFocusAfterSearch &&\n this.bindings.store.getUniqueIDFromEngine(this.bindings.engine) !==\n this.lastSearchId\n ) {\n this.doFocusAfterSearch = false;\n if (this.element) {\n const el = this.element;\n // The focus seems to be flaky without deferring, especially on iOS.\n defer().then(() => {\n el.focus();\n this.clearFocusCallbacks();\n });\n }\n }\n };\n }\n}\n\nfunction isFocusable(element: Element) {\n // Source: https://stackoverflow.com/a/30753870\n if (element.getAttribute('tabindex') === '-1') {\n return false;\n }\n if (element.hasAttribute('tabindex')) {\n return true;\n }\n if (element.getAttribute('contentEditable') === 'true') {\n return true;\n }\n switch (element.tagName) {\n case 'A':\n case 'AREA':\n return element.hasAttribute('href');\n case 'INPUT':\n case 'SELECT':\n case 'TEXTAREA':\n case 'BUTTON':\n return !element.hasAttribute('disabled');\n case 'IFRAME':\n return true;\n default:\n return false;\n }\n}\n\n/**\n * @deprecated use Lit equivalent\n */\nexport function* getFocusableDescendants(\n element: Element\n): Generator<HTMLElement> {\n if (isFocusable(element)) {\n yield element as HTMLElement;\n }\n let children = Array.from(element.children);\n if (element instanceof HTMLSlotElement) {\n children = element.assignedElements();\n } else if (element.shadowRoot) {\n children.push(...Array.from(element.shadowRoot.children));\n }\n for (const child of children) {\n yield* getFocusableDescendants(child);\n }\n}\n\n/**\n * @deprecated use Lit equivalent\n */\nexport function getFirstFocusableDescendant(\n element: Element\n): HTMLElement | null {\n return getFocusableDescendants(element).next().value ?? null;\n}\n","import {h, FunctionalComponent} from '@stencil/core';\nimport {JSXBase} from '@stencil/core/internal';\nimport {HeadingProps} from './heading';\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const Heading: FunctionalComponent<\n Pick<HeadingProps, 'level'> & JSXBase.HTMLAttributes<HTMLHeadingElement>\n> = ({level, ...htmlProps}, children) => {\n const HeadingTag = level > 0 && level <= 6 ? `h${level}` : 'div';\n return <HeadingTag {...htmlProps}>{children}</HeadingTag>;\n};\n"],"version":3}
@@ -1,16 +0,0 @@
1
- import { h } from '@stencil/core/internal/client';
2
- import { B as Button } from './stencil-button.js';
3
-
4
- /**
5
- * @deprecated should only be used for Stencil components.
6
- */
7
- const IconButton = (props) => {
8
- return (h("div", { class: "relative", part: `${props.partPrefix}-container` },
9
- h(Button, { ...props, class: "relative h-[2.6rem] w-[2.6rem] p-3", part: `${props.partPrefix}-button`, ref: props.buttonRef },
10
- h("atomic-icon", { icon: props.icon, class: "h-4 w-4 shrink-0", part: `${props.partPrefix}-icon` })),
11
- props.badge && (h("span", { part: `${props.partPrefix}-badge`, class: "bg-primary text-on-primary absolute -top-2 -right-2 block h-4 w-4 rounded-full text-center text-xs leading-4" }, props.badge))));
12
- };
13
-
14
- export { IconButton as I };
15
-
16
- //# sourceMappingURL=stencil-iconButton.js.map
@@ -1 +0,0 @@
1
- {"file":"stencil-iconButton.js","mappings":";;;AAUA;;;MAGa,UAAU,GAAyC,CAAC,KAAK;IACpE,QACE,WAAK,KAAK,EAAC,UAAU,EAAC,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,YAAY;QACzD,EAAC,MAAM,OACD,KAAK,EACT,KAAK,EAAC,oCAAoC,EAC1C,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,SAAS,EAClC,GAAG,EAAE,KAAK,CAAC,SAAS;YAEpB,mBACE,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAC,kBAAkB,EACxB,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,OAAO,GACnB,CACR;QACR,KAAK,CAAC,KAAK,KACV,YACE,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,QAAQ,EACjC,KAAK,EAAC,8GAA8G,IAEnH,KAAK,CAAC,KAAK,CACP,CACR,CACG,EACN;AACJ;;;;","names":[],"sources":["src/components/common/stencil-iconButton.tsx"],"sourcesContent":["import {FunctionalComponent, h, VNode} from '@stencil/core';\nimport {Button, StencilButtonProps} from './stencil-button';\n\ninterface IconButtonProps extends StencilButtonProps {\n badge?: VNode;\n buttonRef?: (el?: HTMLButtonElement) => void;\n icon: string;\n partPrefix: string;\n}\n\n/**\n * @deprecated should only be used for Stencil components.\n */\nexport const IconButton: FunctionalComponent<IconButtonProps> = (props) => {\n return (\n <div class=\"relative\" part={`${props.partPrefix}-container`}>\n <Button\n {...props}\n class=\"relative h-[2.6rem] w-[2.6rem] p-3\"\n part={`${props.partPrefix}-button`}\n ref={props.buttonRef}\n >\n <atomic-icon\n icon={props.icon}\n class=\"h-4 w-4 shrink-0\"\n part={`${props.partPrefix}-icon`}\n ></atomic-icon>\n </Button>\n {props.badge && (\n <span\n part={`${props.partPrefix}-badge`}\n class=\"bg-primary text-on-primary absolute -top-2 -right-2 block h-4 w-4 rounded-full text-center text-xs leading-4\"\n >\n {props.badge}\n </span>\n )}\n </div>\n );\n};\n"],"version":3}
@@ -1,13 +0,0 @@
1
- const isRefineModalFacet = 'is-refine-modal';
2
- function createAppLoadedListener(store, callback) {
3
- const updateIsAppLoaded = () => {
4
- const isAppLoaded = store.state.loadingFlags.length === 0;
5
- callback(isAppLoaded);
6
- };
7
- store.onChange('loadingFlags', updateIsAppLoaded);
8
- updateIsAppLoaded();
9
- }
10
-
11
- export { createAppLoadedListener as c, isRefineModalFacet as i };
12
-
13
- //# sourceMappingURL=store.js.map
@@ -1 +0,0 @@
1
- {"file":"store.js","mappings":"MAUa,kBAAkB,GAAG,kBAAkB;SAWpC,uBAAuB,CACrC,KAA4C,EAC5C,QAAwC;IAExC,MAAM,iBAAiB,GAAG;QACxB,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;QAC1D,QAAQ,CAAC,WAAW,CAAC,CAAC;KACvB,CAAC;IAEF,KAAK,CAAC,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAClD,iBAAiB,EAAE,CAAC;AACtB;;;;","names":[],"sources":["src/components/common/interface/store.ts"],"sourcesContent":["import type {DateFacetValue, NumericFacetValue} from '@coveo/headless';\nimport {isInDocument} from '../../../utils/utils';\nimport type {\n FacetInfo,\n FacetStore,\n FacetType,\n FacetValueFormat,\n} from '../facets/facet-common-store';\nimport type {AnyEngineType} from './bindings';\n\nexport const isRefineModalFacet = 'is-refine-modal';\n\nexport type BaseStore<T> = CommonStore<T> & {\n getUniqueIDFromEngine(engine: unknown): string | undefined;\n};\n\nexport interface ResultListInfo {\n focusOnNextNewResult(): void;\n focusOnFirstResultAfterNextSearch(): Promise<void>;\n}\n\nexport function createAppLoadedListener(\n store: CommonStore<{loadingFlags: string[]}>,\n callback: (isAppLoaded: boolean) => void\n) {\n const updateIsAppLoaded = () => {\n const isAppLoaded = store.state.loadingFlags.length === 0;\n callback(isAppLoaded);\n };\n\n store.onChange('loadingFlags', updateIsAppLoaded);\n updateIsAppLoaded();\n}\n\nexport function createBaseStore<T extends {}>(initialState: T): BaseStore<T> {\n const store = createStore(initialState) as CommonStore<T>;\n\n return {\n ...store,\n\n getUniqueIDFromEngine(_engine: AnyEngineType) {\n throw new Error(\n 'getUniqueIDFromEngine not implemented at the base store level.'\n );\n },\n };\n}\n\nexport function registerFacet<T extends FacetType, U extends string>(\n store: CommonStore<Facets>,\n facetType: T,\n data: Facets[T][U] & {facetId: U; element: HTMLElement}\n) {\n const clearExistingFacetElement = (facetType: FacetType, facetId: string) => {\n if (store.state[facetType][facetId]) {\n store.state.facetElements = store.state.facetElements.filter(\n (facetElement) => facetElement.getAttribute('facet-id') !== facetId\n );\n }\n };\n\n if (data.element.getAttribute(isRefineModalFacet) !== null) {\n return;\n }\n\n clearExistingFacetElement(facetType, data.facetId);\n store.state.facetElements.push(data.element);\n store.state[facetType][data.facetId] = data;\n}\n\nexport function setLoadingFlag(\n store: CommonStore<{loadingFlags: string[]}>,\n loadingFlag: string\n) {\n const flags = store.state.loadingFlags;\n store.state.loadingFlags = flags.concat(loadingFlag);\n}\n\nexport function unsetLoadingFlag(\n store: CommonStore<{loadingFlags: string[]}>,\n loadingFlag: string\n) {\n const flags = store.state.loadingFlags;\n store.state.loadingFlags = flags.filter((value) => value !== loadingFlag);\n}\n\nexport function getFacetElements(store: CommonStore<Facets>) {\n return store.state.facetElements.filter((element) => isInDocument(element));\n}\n\nexport function waitUntilAppLoaded(\n store: CommonStore<{loadingFlags: string[]}>,\n callback: () => void\n) {\n if (!store.state.loadingFlags.length) {\n callback();\n } else {\n store.onChange('loadingFlags', (flags) => {\n if (!flags.length) {\n callback();\n }\n });\n }\n}\n\ninterface CommonStore<StoreData> {\n state: StoreData;\n get: <PropName extends keyof StoreData>(\n propName: PropName\n ) => StoreData[PropName];\n set: <PropName extends keyof StoreData>(\n propName: PropName,\n value: StoreData[PropName]\n ) => void;\n onChange: <PropName extends keyof StoreData>(\n propName: PropName,\n cb: (newValue: StoreData[PropName]) => void\n ) => () => void;\n}\n\ninterface Facets {\n facets: FacetStore<FacetInfo>;\n numericFacets: FacetStore<FacetInfo & FacetValueFormat<NumericFacetValue>>;\n dateFacets: FacetStore<FacetInfo & FacetValueFormat<DateFacetValue>>;\n categoryFacets: FacetStore<FacetInfo>;\n facetElements: HTMLElement[];\n}\n\nfunction createStore<StoreData extends Record<string, unknown>>(\n initialState: StoreData\n): CommonStore<StoreData> {\n const listeners = new Map<\n keyof StoreData,\n Set<(newValue: unknown) => void>\n >();\n\n const state = new Proxy(initialState, {\n set(target, prop: string, value) {\n const oldValue = target[prop];\n if (oldValue !== value) {\n (target as Record<string, unknown>)[prop] = value;\n\n if (listeners.has(prop)) {\n for (const cb of listeners.get(prop)!) {\n cb(value);\n }\n }\n }\n return true;\n },\n });\n\n const get = <PropName extends keyof StoreData>(\n propName: PropName\n ): StoreData[PropName] => {\n return state[propName];\n };\n\n const set = <PropName extends keyof StoreData>(\n propName: PropName,\n value: StoreData[PropName]\n ): void => {\n state[propName] = value;\n };\n\n const onChange = <PropName extends keyof StoreData>(\n propName: PropName,\n callback: (newValue: StoreData[PropName]) => void\n ): (() => void) => {\n if (!listeners.has(propName)) {\n listeners.set(propName, new Set());\n }\n listeners.get(propName)!.add(callback as (newValue: unknown) => void);\n\n return () => {\n listeners.get(propName)!.delete(callback as (newValue: unknown) => void);\n if (listeners.get(propName)!.size === 0) {\n listeners.delete(propName);\n }\n };\n };\n\n return {\n state,\n get,\n set,\n onChange,\n };\n}\n"],"version":3}