@coveo/quantic 3.27.1-pre.f83bd005a5 → 3.28.0-pre.1bf3dad955

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 (26) hide show
  1. package/docs/out/quantic-docs.json +9 -0
  2. package/force-app/main/default/classes/IInsightTokenProvider.cls +10 -0
  3. package/force-app/main/default/classes/IInsightTokenProvider.cls-meta.xml +5 -0
  4. package/force-app/main/default/classes/InsightController.cls +6 -2
  5. package/force-app/main/default/lwc/quanticCaseClassification/quanticCaseClassification.css +4 -20
  6. package/force-app/main/default/lwc/quanticCaseClassification/quanticCaseClassification.html +79 -21
  7. package/force-app/main/default/lwc/quanticCaseClassification/quanticCaseClassification.js +1 -1
  8. package/force-app/main/default/lwc/quanticDocumentSuggestion/quanticDocumentSuggestion.css +1 -7
  9. package/force-app/main/default/lwc/quanticDocumentSuggestion/quanticDocumentSuggestion.html +2 -2
  10. package/force-app/main/default/lwc/quanticInsightInterface/quanticInsightInterface.js +8 -1
  11. package/force-app/main/default/lwc/quanticPager/quanticPager.html +9 -1
  12. package/force-app/main/default/lwc/quanticResultQuickview/quanticResultQuickview.css +1 -1
  13. package/force-app/main/default/lwc/quanticResultQuickview/quanticResultQuickview.html +1 -1
  14. package/force-app/main/default/lwc/quanticTabBar/quanticTabBar.css +1 -5
  15. package/force-app/main/default/lwc/quanticTabBar/quanticTabBar.html +2 -2
  16. package/force-app/main/default/lwc/quanticTooltip/quanticTooltip.css +6 -14
  17. package/force-app/main/default/lwc/quanticTooltip/quanticTooltip.js +2 -2
  18. package/force-app/main/default/staticresources/coveoheadless/case-assist/headless.js +8 -8
  19. package/force-app/main/default/staticresources/coveoheadless/definitions/api/analytics/analytics-relay-client.d.ts +20 -4
  20. package/force-app/main/default/staticresources/coveoheadless/definitions/app/navigator-context-provider.d.ts +2 -1
  21. package/force-app/main/default/staticresources/coveoheadless/definitions/test/mock-meta.d.ts +2 -0
  22. package/force-app/main/default/staticresources/coveoheadless/definitions/test/mock-relay.d.ts +2 -0
  23. package/force-app/main/default/staticresources/coveoheadless/headless.js +10 -10
  24. package/force-app/main/default/staticresources/coveoheadless/insight/headless.js +9 -9
  25. package/force-app/main/default/staticresources/coveoheadless/recommendation/headless.js +7 -7
  26. package/package.json +3 -3
@@ -4917,6 +4917,15 @@
4917
4917
  "required": true,
4918
4918
  "defaultValue": "",
4919
4919
  "type": "string"
4920
+ },
4921
+ {
4922
+ "name": "recordId",
4923
+ "attribute": "record-id",
4924
+ "access": "@api",
4925
+ "description": "<p>The ID of the record used to retrieve the user ID of its creator.\nThis is required to assign the correct privileges for enabling the User Actions feature.</p>",
4926
+ "required": true,
4927
+ "defaultValue": "",
4928
+ "type": "string"
4920
4929
  }
4921
4930
  ]
4922
4931
  },
@@ -0,0 +1,10 @@
1
+ global interface IInsightTokenProvider {
2
+ /**
3
+ * Get the configuration object (serialized) for the initialization of Coveo Headless.
4
+ * @param {String} recordId – The record ID used to fetch user context or privileges for token generation.
5
+ * @return {String} A serialized object containing the following keys:
6
+ * - `accessToken`: a search token (see https://docs.coveo.com/en/56/build-a-search-ui/search-token-authentication).
7
+ * - `organizationId`: the ID of the organization to query (see https://docs.coveo.com/en/148/manage-an-organization/retrieve-the-organization-id).
8
+ */
9
+ String getHeadlessConfiguration(String recordId);
10
+ }
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ApexClass xmlns="urn:metadata.tooling.soap.sforce.com">
3
+ <apiVersion>61.0</apiVersion>
4
+ <status>Active</status>
5
+ </ApexClass>
@@ -2,6 +2,10 @@
2
2
  * Simple Apex Controller to fetch data for Headless initialization specific to the Insight use case.
3
3
  */
4
4
  global with sharing class InsightController {
5
+ public static String getHeadlessConfiguration() {
6
+ return getHeadlessConfiguration('');
7
+ }
8
+
5
9
  /**
6
10
  * Get the configuration object (serialized) for the initialization of Coveo Headless through a class implementing `ITokenProvider`.
7
11
  * @return {String} A serialized object containing the following keys:
@@ -9,10 +13,10 @@ global with sharing class InsightController {
9
13
  * - `organizationId`: the ID of the organization to query (see https://docs.coveo.com/en/148/manage-an-organization/retrieve-the-organization-id).
10
14
  */
11
15
  @AuraEnabled(cacheable=true)
12
- public static String getHeadlessConfiguration() {
16
+ public static String getHeadlessConfiguration(String recordId) {
13
17
  /**
14
18
  * e.g. To switch to the Insight Token Provider, you simply need to replace the following line by:
15
- * `return InsightTokenProvider.getHeadlessConfiguration();`
19
+ * `return InsightTokenProvider.getHeadlessConfiguration(recordId);`
16
20
  */
17
21
  return SampleTokenProvider.getHeadlessConfiguration();
18
22
  }
@@ -1,30 +1,20 @@
1
1
  lightning-icon {
2
2
  --slds-c-icon-color-foreground-default: var(--slds-g-color-brand-base-100, white);
3
3
  }
4
- .slds-visual-picker__figure {
4
+ .case-classification-visual-picker__figure {
5
5
  width: 9.6rem;
6
6
  height: 2rem;
7
7
  }
8
8
 
9
- .slds-form-element {
10
- display: flex;
11
- flex-direction: column;
12
- }
13
-
14
9
  .loading-holder {
15
10
  width: 9.6rem;
16
11
  height: 2rem;
17
12
  }
18
13
 
19
- .slds-form-element__label {
14
+ .text-color-inherit {
20
15
  color: unset;
21
16
  }
22
17
 
23
- .row {
24
- display: flex;
25
- flex-wrap: wrap;
26
- }
27
-
28
18
  .visual-picker__hidden {
29
19
  animation: hideAnimation 0.3s ease-in-out forwards;
30
20
  }
@@ -37,14 +27,8 @@ lightning-icon {
37
27
  }
38
28
  }
39
29
 
40
- .slds-visual-picker input:checked ~ label .slds-visual-picker__text:after {
30
+ .slds-visual-picker input:checked ~ label .visual-picker__figure:after {
41
31
  border-right-color: var(--lwc-colorBorderRowSelectedHover, rgb(27, 150, 255));
42
32
  border-top-color: var(--lwc-colorBorderRowSelectedHover, rgb(27, 150, 255));
43
33
  border-radius: 4px;
44
- }
45
-
46
- .content-center {
47
- display: flex;
48
- justify-content: center;
49
- align-items: center;
50
- }
34
+ }
@@ -1,31 +1,58 @@
1
1
  <template>
2
2
  <template lwc:if={hasInitializationError}>
3
- <c-quantic-component-error component-name={template.host.localName} message={initializationErrorMessage}>
3
+ <c-quantic-component-error
4
+ component-name={template.host.localName}
5
+ message={initializationErrorMessage}
6
+ >
4
7
  </c-quantic-component-error>
5
8
  </template>
6
9
  <template lwc:else>
7
10
  <fieldset class={formClass}>
8
- <legend data-testid="case-classification-label" class="slds-form-element__legend slds-form-element__label slds-text-heading_small">
11
+ <legend
12
+ data-testid="case-classification-label"
13
+ class="slds-form-element__legend slds-form-element__label slds-text-heading_small text-color-inherit"
14
+ >
9
15
  {label}
10
16
  </legend>
11
17
  <template if:true={loading}>
12
18
  <div class="loading-holder slds-is-relative slds-var-m-top_x-small">
13
- <lightning-spinner alternative-text={labels.loading} size="small"></lightning-spinner>
19
+ <lightning-spinner
20
+ alternative-text={labels.loading}
21
+ size="small"
22
+ ></lightning-spinner>
14
23
  </div>
15
24
  </template>
16
25
  <template if:false={loading}>
17
- <div class="slds-form-element__control" aria-describedby="case-classification-error-message">
18
- <div class="row">
26
+ <div
27
+ class="slds-form-element__control"
28
+ aria-describedby="case-classification-error-message"
29
+ >
30
+ <div class="slds-grid slds-wrap">
19
31
  <template if:false={hideSuggestions}>
20
32
  <template for:each={suggestions} for:item="suggestion">
21
- <div key={suggestion.value} data-testid="case-classification-suggestion" class="case-classification-suggestion slds-visual-picker slds-scrollable_none slds-visual-picker_medium slds-m-left_none slds-var-m-right_medium slds-var-m-top_x-small">
22
- <input type="checkbox" checked={suggestion.checked} data-suggestion-id={suggestion.id}
23
- onchange={handleSelectSuggestion} id={suggestion.value} value={suggestion.value} name="options" />
33
+ <div
34
+ key={suggestion.value}
35
+ data-testid="case-classification-suggestion"
36
+ class="case-classification-suggestion slds-visual-picker slds-scrollable_none slds-visual-picker_medium slds-m-left_none slds-var-m-right_medium slds-var-m-top_x-small"
37
+ >
38
+ <input
39
+ type="checkbox"
40
+ checked={suggestion.checked}
41
+ data-suggestion-id={suggestion.id}
42
+ onchange={handleSelectSuggestion}
43
+ id={suggestion.value}
44
+ value={suggestion.value}
45
+ name="options"
46
+ />
24
47
  <label for={suggestion.value} title={suggestion.value}>
25
- <span class="slds-visual-picker__figure slds-visual-picker__text slds-var-p-horizontal_medium content-center">
48
+ <span
49
+ class="slds-visual-picker__figure case-classification-visual-picker__figure slds-visual-picker__text slds-var-p-horizontal_medium slds-grid slds-grid_align-center slds-grid_vertical-align-center"
50
+ >
26
51
  <span class="slds-truncate">{suggestion.value}</span>
27
52
  </span>
28
- <span class="slds-icon_container slds-visual-picker__text-check">
53
+ <span
54
+ class="slds-icon_container slds-visual-picker__text-check"
55
+ >
29
56
  <lightning-icon size="xx-small" icon-name="utility:check">
30
57
  </lightning-icon>
31
58
  </span>
@@ -35,25 +62,52 @@
35
62
  </template>
36
63
  <template if:true={isMoreOptionsVisible}>
37
64
  <template if:false={isSelectVisible}>
38
- <lightning-button data-testid="show-select-input-button" class="slds-var-m-top_x-small" variant="base" label={selectPlaceholder}
39
- title={selectPlaceholder} onclick={showSelect}>
65
+ <lightning-button
66
+ data-testid="show-select-input-button"
67
+ class="slds-var-m-top_x-small"
68
+ variant="base"
69
+ label={selectPlaceholder}
70
+ title={selectPlaceholder}
71
+ onclick={showSelect}
72
+ >
40
73
  </lightning-button>
41
74
  </template>
42
75
  <template if:true={isSelectVisible}>
43
- <lightning-combobox data-testid="case-classification-all-options-combobox" class="slds-var-m-top_x-small" value={value} variant="label-hidden"
44
- placeholder={selectPlaceholder} options={options} onchange={handleSelectChange}></lightning-combobox>
76
+ <lightning-combobox
77
+ data-testid="case-classification-all-options-combobox"
78
+ class="slds-var-m-top_x-small"
79
+ value={value}
80
+ variant="label-hidden"
81
+ placeholder={selectPlaceholder}
82
+ options={options}
83
+ onchange={handleSelectChange}
84
+ ></lightning-combobox>
45
85
  </template>
46
86
  </template>
47
87
  <template if:false={isMoreOptionsVisible}>
48
88
  <template for:each={filteredOptions} for:item="option">
49
- <div key={option.value} data-testid="case-classification-option" class="case-classification-option slds-visual-picker slds-scrollable_none slds-visual-picker_medium slds-m-left_none slds-var-m-right_medium slds-var-m-top_x-small">
50
- <input type="checkbox" checked={option.checked} onchange={handleSelectSuggestion} id={option.value}
51
- value={option.value} name="options" />
89
+ <div
90
+ key={option.value}
91
+ data-testid="case-classification-option"
92
+ class="case-classification-option slds-visual-picker slds-scrollable_none slds-visual-picker_medium slds-m-left_none slds-var-m-right_medium slds-var-m-top_x-small"
93
+ >
94
+ <input
95
+ type="checkbox"
96
+ checked={option.checked}
97
+ onchange={handleSelectSuggestion}
98
+ id={option.value}
99
+ value={option.value}
100
+ name="options"
101
+ />
52
102
  <label for={option.value} title={option.value}>
53
- <span class="slds-visual-picker__figure slds-visual-picker__text slds-var-p-horizontal_medium content-center">
103
+ <span
104
+ class="slds-visual-picker__figure case-classification-visual-picker__figure slds-visual-picker__text slds-var-p-horizontal_medium slds-grid slds-grid_align-center slds-grid_vertical-align-center"
105
+ >
54
106
  <span class="slds-truncate">{option.value}</span>
55
107
  </span>
56
- <span class="slds-icon_container slds-visual-picker__text-check">
108
+ <span
109
+ class="slds-icon_container slds-visual-picker__text-check"
110
+ >
57
111
  <lightning-icon size="xx-small" icon-name="utility:check">
58
112
  </lightning-icon>
59
113
  </span>
@@ -64,11 +118,15 @@
64
118
  </div>
65
119
  </div>
66
120
  <template if:true={hasError}>
67
- <div data-testid="case-classification-error-message" class="slds-form-element__help" id="case-classification-error-message">
121
+ <div
122
+ data-testid="case-classification-error-message"
123
+ class="slds-form-element__help"
124
+ id="case-classification-error-message"
125
+ >
68
126
  {errorMessage}
69
127
  </div>
70
128
  </template>
71
129
  </template>
72
130
  </fieldset>
73
131
  </template>
74
- </template>
132
+ </template>
@@ -319,7 +319,7 @@ export default class QuanticCaseClassification extends LightningElement {
319
319
  * @returns {string}
320
320
  */
321
321
  get formClass() {
322
- return `slds-form-element ${this.hasError ? 'slds-has-error' : ''}`;
322
+ return `slds-form-element slds-grid slds-grid_vertical ${this.hasError ? 'slds-has-error' : ''}`;
323
323
  }
324
324
 
325
325
  /**
@@ -6,13 +6,7 @@
6
6
  height: 3.5rem;
7
7
  }
8
8
 
9
- .row {
10
- display: flex;
11
- align-items: center;
12
- justify-content: space-between;
13
- }
14
-
15
- .slds-card {
9
+ .card-border {
16
10
  border: 1px solid #dddbda;
17
11
  }
18
12
 
@@ -11,7 +11,7 @@
11
11
  </template>
12
12
  <template if:false={loading}>
13
13
  <template if:true={hasSuggestions}>
14
- <div class="slds-card">
14
+ <div class="slds-card card-border">
15
15
  <lightning-accordion active-section-name={openedDocuments} allow-multiple-sections-open
16
16
  class="slds-p-vertical_xx-small">
17
17
  <template iterator:it={suggestions}>
@@ -26,7 +26,7 @@
26
26
  slds-var-p-vertical_x-small
27
27
  ">
28
28
  <p class="excerpt">{it.value.excerpt}</p>
29
- <div class="row slds-var-p-top_medium">
29
+ <div class="slds-grid slds-grid_align-spread slds-grid_vertical-align-center slds-var-p-top_medium">
30
30
  <template lwc:if={quickviewIsVisible}>
31
31
  <c-quantic-result-quickview engine-id={engineId}
32
32
  preview-button-icon="utility:new_window" preview-button-label={labels.readMore}
@@ -35,6 +35,13 @@ export default class QuanticInsightInterface extends LightningElement {
35
35
  * @type {string}
36
36
  */
37
37
  @api insightId;
38
+ /**
39
+ * The ID of the record used to retrieve the user ID of its creator.
40
+ * This is required to assign the correct privileges for enabling the User Actions feature.
41
+ * @api
42
+ * @type {string}
43
+ */
44
+ @api recordId = '';
38
45
 
39
46
  /** @type {InsightEngineOptions} */
40
47
  engineOptions;
@@ -69,7 +76,7 @@ export default class QuanticInsightInterface extends LightningElement {
69
76
  loadDependencies(this, HeadlessBundleNames.insight)
70
77
  .then(() => {
71
78
  if (!getHeadlessBindings(this.engineId)?.engine) {
72
- getHeadlessConfiguration()
79
+ getHeadlessConfiguration({recordId: this.recordId})
73
80
  .then((data) => {
74
81
  if (data) {
75
82
  const {organizationId, accessToken, ...rest} = JSON.parse(data);
@@ -14,10 +14,17 @@
14
14
  class="slds-m-left_x-small"
15
15
  onclick={previous}
16
16
  aria-label={labels.previousPage}
17
+ data-testid="previous-button"
17
18
  ></lightning-button>
18
19
 
19
20
  <template for:each={currentPagesObjects} for:item="page">
20
- <c-quantic-number-button key={page.number} number={page.number} selected={page.selected} onquantic__select={goto} aria-label-value={page.ariaLabelValue}></c-quantic-number-button>
21
+ <c-quantic-number-button
22
+ key={page.number}
23
+ number={page.number}
24
+ selected={page.selected}
25
+ onquantic__select={goto}
26
+ aria-label-value={page.ariaLabelValue}
27
+ ></c-quantic-number-button>
21
28
  </template>
22
29
 
23
30
  <lightning-button
@@ -28,6 +35,7 @@
28
35
  class="slds-m-left_x-small"
29
36
  onclick={next}
30
37
  aria-label={labels.nextPage}
38
+ data-testid="next-button"
31
39
  ></lightning-button>
32
40
  </lightning-button-group>
33
41
  </template>
@@ -25,7 +25,7 @@
25
25
  box-shadow: 0 0 0 0.25rem #f6f7f9;
26
26
  }
27
27
 
28
- .slds-modal__footer{
28
+ .quickview-modal__footer {
29
29
  background-color: white;
30
30
  text-align: unset;
31
31
  }
@@ -47,7 +47,7 @@
47
47
  result={result} content-url={contentURL}
48
48
  onquantic__loadingstatechange={handleLoadingStateChange}></c-quantic-quickview-content>
49
49
  <template if:false={isLoading}>
50
- <footer onclick={stopPropagation} class="slds-modal__footer slds-p-top_none slds-p-bottom_none">
50
+ <footer onclick={stopPropagation} class="slds-modal__footer quickview-modal__footer slds-p-top_none slds-p-bottom_none">
51
51
  <slot name="footer"></slot>
52
52
  </footer>
53
53
  </template>
@@ -1,11 +1,7 @@
1
- .tab-bar_list-container {
2
- display: flex;
3
- }
4
-
5
1
  .tab-bar_dropdown {
6
2
  max-width: 150px;
7
3
  }
8
4
 
9
- .slds-tabs_default__overflow-button .slds-button:focus {
5
+ .tab-bar__more-button:focus {
10
6
  text-decoration: none;
11
7
  }
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div class={tabBarContainerClasses}>
3
3
  <div
4
- class="tab-bar_list-container slds-tabs_default slds-tabs_default__nav slds-is-relative"
4
+ class="tab-bar_list-container slds-grid slds-tabs_default slds-tabs_default__nav slds-is-relative"
5
5
  >
6
6
  <slot></slot>
7
7
  <div
@@ -13,7 +13,7 @@
13
13
  <div class={dropdownClasses} data-testid="tab-bar_dropdown-container">
14
14
  <button
15
15
  data-testid="tab-bar_more-button"
16
- class="slds-button slds-var-p-horizontal_small"
16
+ class="slds-button slds-var-p-horizontal_small tab-bar__more-button"
17
17
  aria-haspopup="true"
18
18
  onclick={toggleDropdown}
19
19
  name={labels.more}
@@ -8,6 +8,7 @@
8
8
  left: 50%;
9
9
  transition: transform 0s linear 0s, opacity 0.1s linear 0s, visibility 0.1s linear 0s;
10
10
  z-index: 40;
11
+ width: max-content;
11
12
  }
12
13
 
13
14
  .tooltip__content--positioned-above {
@@ -24,11 +25,6 @@
24
25
  opacity: 1;
25
26
  }
26
27
 
27
- .tooltip__content--light,
28
- .slds-popover_tooltip {
29
- width: max-content;
30
- }
31
-
32
28
  .tooltip__arrow {
33
29
  left: 50%;
34
30
  transform: translate(-50%, -100%);
@@ -65,18 +61,14 @@
65
61
  width: fit-content;
66
62
  }
67
63
 
68
- .slds-nubbin_bottom:after,
69
- .slds-nubbin--bottom:after,
70
- .slds-nubbin_bottom:before,
71
- .slds-nubbin--bottom:before {
64
+ .tooltip__nubbin--bottom:before,
65
+ .tooltip__nubbin--bottom:after {
72
66
  clip-path: polygon(100% 0, 0% 100%, 100% 100%);
73
67
  border: solid 0.5px rgba(0, 0, 0, 0.16);
74
68
  }
75
69
 
76
- .slds-nubbin_top:after,
77
- .slds-nubbin--top:after,
78
- .slds-nubbin_top:before,
79
- .slds-nubbin--top:before {
70
+ .tooltip__nubbin--top:before,
71
+ .tooltip__nubbin--top:after {
80
72
  clip-path: polygon(100% 0, 0 0, 0 100%);
81
73
  border: solid 0.5px rgba(0, 0, 0, 0.16);
82
- }
74
+ }
@@ -139,8 +139,8 @@ export default class QuanticTooltip extends LightningElement {
139
139
  get tooltipArrowCSSClass() {
140
140
  return `tooltip__arrow slds-fall-into-ground slds-is-absolute ${
141
141
  this.displayTooltipAboveTarget
142
- ? 'tooltip__arrow--positioned-above slds-nubbin_bottom'
143
- : 'tooltip__arrow--positioned-below slds-nubbin_top'
142
+ ? 'tooltip__arrow--positioned-above slds-nubbin_bottom tooltip__nubbin--bottom'
143
+ : 'tooltip__arrow--positioned-below slds-nubbin_top tooltip__nubbin--top'
144
144
  } ${this.lightTheme ? 'tooltip__arrow--light' : 'tooltip__arrow--dark'} ${
145
145
  this.isVisible ? 'tooltip__content--visible' : ''
146
146
  }`;