@nanoporetech-digital/components 5.9.5 → 5.10.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 (149) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/cjs/index-1d3ebe1a.js +0 -4
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/nano-algolia.cjs.entry.js +13 -1
  5. package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
  6. package/dist/cjs/nano-components.cjs.js +1 -1
  7. package/dist/cjs/nano-details.cjs.entry.js +1 -1
  8. package/dist/cjs/nano-dropdown.cjs.entry.js +10 -6
  9. package/dist/cjs/nano-dropdown.cjs.entry.js.map +1 -1
  10. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +2 -2
  11. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  12. package/dist/cjs/nano-global-nav.cjs.entry.js +92 -53
  13. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  14. package/dist/cjs/nano-global-search-results.cjs.entry.js +6 -7
  15. package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
  16. package/dist/cjs/nano-icon-button_2.cjs.entry.js +1 -1
  17. package/dist/cjs/nano-tab-group.cjs.entry.js +1 -1
  18. package/dist/cjs/{nano-table-be63f3e1.js → nano-table-72d5dc63.js} +2 -2
  19. package/dist/cjs/{nano-table-be63f3e1.js.map → nano-table-72d5dc63.js.map} +1 -1
  20. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  21. package/dist/cjs/{popover-088646b2.js → popover-b506f6ae.js} +10 -17
  22. package/dist/cjs/popover-b506f6ae.js.map +1 -0
  23. package/dist/cjs/{table.worker-b05ffc52.js → table.worker-3df34efe.js} +2 -2
  24. package/dist/cjs/table.worker-3df34efe.js.map +1 -0
  25. package/dist/cjs/{transitions-8c57ddb1.js → transitions-cc18619c.js} +3 -2
  26. package/dist/cjs/transitions-cc18619c.js.map +1 -0
  27. package/dist/collection/collection-manifest.json +0 -1
  28. package/dist/collection/components/algolia/algolia-interface.js.map +1 -1
  29. package/dist/collection/components/algolia/algolia.js +17 -5
  30. package/dist/collection/components/algolia/algolia.js.map +1 -1
  31. package/dist/collection/components/dropdown/dropdown.js +9 -5
  32. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  33. package/dist/collection/components/global-nav/global-nav.js +90 -51
  34. package/dist/collection/components/global-nav/global-nav.js.map +1 -1
  35. package/dist/collection/components/global-nav/style/global-nav.css +18 -18
  36. package/dist/collection/components/global-search-results/global-search-results.js +6 -7
  37. package/dist/collection/components/global-search-results/global-search-results.js.map +1 -1
  38. package/dist/collection/components/nav-item/nav-item.css +4 -4
  39. package/dist/collection/utils/transitions.js +2 -1
  40. package/dist/collection/utils/transitions.js.map +1 -1
  41. package/dist/components/algolia.js +13 -2
  42. package/dist/components/algolia.js.map +1 -1
  43. package/dist/components/dropdown.js +9 -5
  44. package/dist/components/dropdown.js.map +1 -1
  45. package/dist/components/index.d.ts +0 -1
  46. package/dist/components/index.js +0 -1
  47. package/dist/components/index.js.map +1 -1
  48. package/dist/components/nano-global-nav.js +91 -52
  49. package/dist/components/nano-global-nav.js.map +1 -1
  50. package/dist/components/nano-global-search-results.js +6 -7
  51. package/dist/components/nano-global-search-results.js.map +1 -1
  52. package/dist/components/nav-item.js +1 -1
  53. package/dist/components/nav-item.js.map +1 -1
  54. package/dist/components/popover.js +9 -16
  55. package/dist/components/popover.js.map +1 -1
  56. package/dist/components/transitions.js +2 -1
  57. package/dist/components/transitions.js.map +1 -1
  58. package/dist/esm/index-06666022.js +0 -4
  59. package/dist/esm/loader.js +1 -1
  60. package/dist/esm/nano-algolia.entry.js +13 -1
  61. package/dist/esm/nano-algolia.entry.js.map +1 -1
  62. package/dist/esm/nano-components.js +1 -1
  63. package/dist/esm/nano-details.entry.js +1 -1
  64. package/dist/esm/nano-dropdown.entry.js +10 -6
  65. package/dist/esm/nano-dropdown.entry.js.map +1 -1
  66. package/dist/esm/nano-global-nav-user-profile_3.entry.js +2 -2
  67. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  68. package/dist/esm/nano-global-nav.entry.js +92 -53
  69. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  70. package/dist/esm/nano-global-search-results.entry.js +6 -7
  71. package/dist/esm/nano-global-search-results.entry.js.map +1 -1
  72. package/dist/esm/nano-icon-button_2.entry.js +1 -1
  73. package/dist/esm/nano-tab-group.entry.js +1 -1
  74. package/dist/esm/{nano-table-8ac79667.js → nano-table-5af42ba4.js} +2 -2
  75. package/dist/esm/{nano-table-8ac79667.js.map → nano-table-5af42ba4.js.map} +1 -1
  76. package/dist/esm/nano-table.entry.js +1 -1
  77. package/dist/esm/{popover-02e6714d.js → popover-e5e7a641.js} +10 -17
  78. package/dist/esm/popover-e5e7a641.js.map +1 -0
  79. package/dist/esm/{table.worker-822b1223.js → table.worker-3cae908c.js} +2 -2
  80. package/dist/esm/table.worker-3cae908c.js.map +1 -0
  81. package/dist/esm/{transitions-b4657201.js → transitions-fb09eb32.js} +3 -2
  82. package/dist/esm/transitions-fb09eb32.js.map +1 -0
  83. package/dist/nano-components/nano-components.esm.js +1 -1
  84. package/dist/nano-components/nano-components.esm.js.map +1 -1
  85. package/dist/nano-components/{p-f57cea20.entry.js → p-0e4da739.entry.js} +2 -2
  86. package/dist/nano-components/{p-f49f57ed.js → p-1987f7a9.js} +2 -2
  87. package/dist/nano-components/{p-f8dd8c20.entry.js → p-2a105609.entry.js} +2 -2
  88. package/dist/nano-components/{p-24dcd788.entry.js → p-2c0218e6.entry.js} +2 -2
  89. package/dist/nano-components/p-2c0218e6.entry.js.map +1 -0
  90. package/dist/nano-components/p-36c3ded8.entry.js +5 -0
  91. package/dist/nano-components/p-36c3ded8.entry.js.map +1 -0
  92. package/dist/nano-components/{p-2a7d0c13.entry.js → p-5fc3035d.entry.js} +2 -2
  93. package/dist/nano-components/p-688f1a55.entry.js +5 -0
  94. package/dist/nano-components/p-688f1a55.entry.js.map +1 -0
  95. package/dist/nano-components/p-abd11243.entry.js +5 -0
  96. package/dist/nano-components/p-abd11243.entry.js.map +1 -0
  97. package/dist/nano-components/p-c3e8e3f9.js +5 -0
  98. package/dist/nano-components/p-c3e8e3f9.js.map +1 -0
  99. package/dist/nano-components/p-cd1fd454.js +5 -0
  100. package/dist/nano-components/p-cd1fd454.js.map +1 -0
  101. package/dist/nano-components/{p-78323d6e.js → p-dc4020f8.js} +2 -2
  102. package/dist/nano-components/p-dc6cb252.entry.js +5 -0
  103. package/dist/nano-components/p-dc6cb252.entry.js.map +1 -0
  104. package/dist/nano-components/{p-7da12234.entry.js → p-fbde7010.entry.js} +2 -2
  105. package/dist/types/components/algolia/algolia-interface.d.ts +8 -2
  106. package/dist/types/components/algolia/algolia.d.ts +3 -4
  107. package/dist/types/components/global-nav/global-nav.d.ts +32 -0
  108. package/dist/types/components.d.ts +2 -127
  109. package/docs-json.json +5 -257
  110. package/docs-vscode.json +2 -63
  111. package/hydrate/index.js +134 -269
  112. package/package.json +3 -3
  113. package/dist/cjs/nano-algolia-input.cjs.entry.js +0 -168
  114. package/dist/cjs/nano-algolia-input.cjs.entry.js.map +0 -1
  115. package/dist/cjs/popover-088646b2.js.map +0 -1
  116. package/dist/cjs/table.worker-b05ffc52.js.map +0 -1
  117. package/dist/cjs/transitions-8c57ddb1.js.map +0 -1
  118. package/dist/collection/components/algolia/algolia-input.js +0 -463
  119. package/dist/collection/components/algolia/algolia-input.js.map +0 -1
  120. package/dist/components/nano-algolia-input.d.ts +0 -11
  121. package/dist/components/nano-algolia-input.js +0 -195
  122. package/dist/components/nano-algolia-input.js.map +0 -1
  123. package/dist/esm/nano-algolia-input.entry.js +0 -164
  124. package/dist/esm/nano-algolia-input.entry.js.map +0 -1
  125. package/dist/esm/popover-02e6714d.js.map +0 -1
  126. package/dist/esm/table.worker-822b1223.js.map +0 -1
  127. package/dist/esm/transitions-b4657201.js.map +0 -1
  128. package/dist/nano-components/p-02b727d3.entry.js +0 -5
  129. package/dist/nano-components/p-02b727d3.entry.js.map +0 -1
  130. package/dist/nano-components/p-24dcd788.entry.js.map +0 -1
  131. package/dist/nano-components/p-2db8bb0b.js +0 -5
  132. package/dist/nano-components/p-2db8bb0b.js.map +0 -1
  133. package/dist/nano-components/p-51bc8b59.js +0 -5
  134. package/dist/nano-components/p-51bc8b59.js.map +0 -1
  135. package/dist/nano-components/p-5e3f928c.entry.js +0 -5
  136. package/dist/nano-components/p-5e3f928c.entry.js.map +0 -1
  137. package/dist/nano-components/p-783de955.entry.js +0 -5
  138. package/dist/nano-components/p-783de955.entry.js.map +0 -1
  139. package/dist/nano-components/p-79c96564.entry.js +0 -5
  140. package/dist/nano-components/p-79c96564.entry.js.map +0 -1
  141. package/dist/nano-components/p-7dd30a3f.entry.js +0 -7
  142. package/dist/nano-components/p-7dd30a3f.entry.js.map +0 -1
  143. package/dist/types/components/algolia/algolia-input.d.ts +0 -103
  144. /package/dist/nano-components/{p-f57cea20.entry.js.map → p-0e4da739.entry.js.map} +0 -0
  145. /package/dist/nano-components/{p-7da12234.entry.js.map → p-1987f7a9.js.map} +0 -0
  146. /package/dist/nano-components/{p-f8dd8c20.entry.js.map → p-2a105609.entry.js.map} +0 -0
  147. /package/dist/nano-components/{p-2a7d0c13.entry.js.map → p-5fc3035d.entry.js.map} +0 -0
  148. /package/dist/nano-components/{p-78323d6e.js.map → p-dc4020f8.js.map} +0 -0
  149. /package/dist/nano-components/{p-f49f57ed.js.map → p-fbde7010.entry.js.map} +0 -0
@@ -189,6 +189,11 @@ export class GlobalNav {
189
189
  this.searchLoading = true;
190
190
  }
191
191
  };
192
+ /**
193
+ * Called whenever the search input value changes.
194
+ * Performs Algolia search and shows autocomplete results.
195
+ * @param ev optional input change event
196
+ */
192
197
  this.onSearchChange = async (ev) => {
193
198
  this.searchValInternal = this.searchValue = ev
194
199
  ? ev.detail.value
@@ -204,64 +209,43 @@ export class GlobalNav {
204
209
  }
205
210
  if (!this.currentIndex)
206
211
  this.currentSelectedIndex();
207
- try {
208
- this.autocompleteResults = this.processSearchResults((await this.currentIndex.alogliaIndex.search(this.searchValInternal, {
209
- attributesToSnippet: ['body:5', 'title:8'],
210
- hitsPerPage: 5,
211
- filters: 'created > ' + Math.floor((Date.now() - 63115200000) / 1000), // only get last 2 years
212
- })));
213
- }
214
- catch (e) {
215
- console.error(e);
216
- }
212
+ // start search
213
+ this.searchLoading = true;
214
+ const algoliaHits = await this.doAlgoliaSearch();
217
215
  this.scopeSearch = null;
218
- this.scopeSearch = await this.onSearchSubmit(null, false);
219
- this.searchLoading = false;
216
+ this.scopeSearch = algoliaHits;
217
+ // set / show autocomplete results
218
+ this.autocompleteResults = algoliaHits.results.find((res) => res.selected);
220
219
  this.showAutocompleteResults();
220
+ this.searchLoading = false;
221
221
  };
222
- this.onSearchSubmit = async (ev, emit = true) => {
222
+ /**
223
+ * Called whenever the search form is submitted (but can also be called manually).
224
+ * Fires event which will activate / display `nano-global-search-results`
225
+ * @param ev optional form submit event
226
+ */
227
+ this.onSearchSubmit = async (ev) => {
223
228
  if (ev)
224
229
  ev.preventDefault();
225
230
  if (!this.isSearchValSet())
226
231
  return;
227
- this.searchLoading = true;
228
- this.algoliaSearchResults = null;
229
232
  if (!this.currentIndex)
230
233
  this.currentSelectedIndex();
231
- const queries = this.internalSearchIndeces.map((index) => {
232
- return {
233
- indexName: index.index,
234
- query: this.searchValInternal,
235
- facets: index.filters,
236
- hitsPerPage: 10,
237
- filters: 'created > ' + Math.floor((Date.now() - 63115200000) / 1000), // only get last 2 years
238
- };
239
- });
240
- try {
241
- this.algoliaSearchResults = this.processSearchResults((await this.algoliaClient.search(queries)));
242
- }
243
- catch (e) {
244
- this.nanoSearchError.emit(e);
245
- }
246
- this.searchLoading = false;
247
234
  if (!this.algoliaSearchResults)
248
- return;
249
- this.algoliaSearchResults.results.map((result, i) => {
250
- result.indexName = this.internalSearchIndeces[i].name;
251
- result.selected =
252
- this.currentIndex.name === this.internalSearchIndeces[i].name;
253
- result.domain = this.currentIndex.domain || null;
254
- result.domains = this.myAccData.domains || null;
255
- result.allGroup = !!this.internalSearchIndeces[i].allGroup;
256
- result.filters = this.internalSearchIndeces[i].filters;
235
+ await this.doAlgoliaSearch();
236
+ const activeIndex = this.algoliaSearchResults.results.find((res) => res.selected);
237
+ const { index, domain, filters, query } = activeIndex;
238
+ this.nanoSearchResult.emit({
239
+ meta: {
240
+ indexTitle: activeIndex.indexName,
241
+ index,
242
+ domain,
243
+ filters,
244
+ query,
245
+ },
246
+ client: { apiKey: this.searchApiKey, appId: this.searchAppId },
257
247
  });
258
- if (emit) {
259
- this.nanoSearchResult.emit({
260
- results: this.algoliaSearchResults.results,
261
- client: { apiKey: this.searchApiKey, appId: this.searchAppId },
262
- });
263
- this.showAutocomplete = false;
264
- }
248
+ this.showAutocomplete = false;
265
249
  return this.algoliaSearchResults;
266
250
  };
267
251
  this.onSearchIndexChange = async (index) => {
@@ -689,7 +673,7 @@ export class GlobalNav {
689
673
  this.menuSelectedItems.forEach((i) => (i.selected = true));
690
674
  this.menuSelectedItems = null;
691
675
  }
692
- }, 200);
676
+ }, 300);
693
677
  }
694
678
  menuClose(ev, force = false) {
695
679
  if (!this.modalIsOpen)
@@ -756,6 +740,44 @@ export class GlobalNav {
756
740
  }
757
741
  return hit.title;
758
742
  }
743
+ /**
744
+ * Constructs a multi-search query for all set search indices
745
+ * (which are normally controlled via the myAccount payload) then sends to Algolia.
746
+ * Post-processes results, adding correct domains to url fields.
747
+ * @returns formatted algolia results
748
+ */
749
+ async doAlgoliaSearch() {
750
+ this.algoliaSearchResults = null;
751
+ const queries = this.internalSearchIndeces.map((index) => {
752
+ return {
753
+ attributesToSnippet: ['body:5', 'title:8'],
754
+ indexName: index.index,
755
+ query: this.searchValInternal,
756
+ facets: index.filters,
757
+ hitsPerPage: 5,
758
+ filters: 'created > ' + Math.floor((Date.now() - 63115200000) / 1000), // only get last 2 years
759
+ };
760
+ });
761
+ try {
762
+ this.algoliaSearchResults = this.processSearchResults((await this.algoliaClient.search(queries)));
763
+ }
764
+ catch (e) {
765
+ this.nanoSearchError.emit(e);
766
+ }
767
+ this.searchLoading = false;
768
+ if (!this.algoliaSearchResults)
769
+ return;
770
+ this.algoliaSearchResults.results.map((result, i) => {
771
+ result.indexName = this.internalSearchIndeces[i].name;
772
+ result.selected =
773
+ this.currentIndex.name === this.internalSearchIndeces[i].name;
774
+ result.domain = this.currentIndex.domain || null;
775
+ result.domains = this.myAccData.domains || null;
776
+ result.allGroup = !!this.internalSearchIndeces[i].allGroup;
777
+ result.filters = this.internalSearchIndeces[i].filters;
778
+ });
779
+ return this.algoliaSearchResults;
780
+ }
759
781
  isSearchValSet() {
760
782
  if (this.searchValInternal.length < 3)
761
783
  return false;
@@ -877,7 +899,7 @@ export class GlobalNav {
877
899
  'search-icon--show': !!this.searchValue && !this.searchLoading,
878
900
  }, slot: "end", onMouseDown: (e) => {
879
901
  this.searchValInternal = this.searchInput.value;
880
- this.onSearchSubmit(e, true);
902
+ this.onSearchSubmit(e);
881
903
  } }, h("nano-icon", { name: "light/search" })), h("span", { class: {
882
904
  'search-icon': true,
883
905
  'search-icon--loader': true,
@@ -907,7 +929,9 @@ export class GlobalNav {
907
929
  'has-promotion': this.hasPromotionSlot,
908
930
  'menu-full-screen': this.menuFullScreen,
909
931
  'secondary-open': !!this.secondaryMenuOpen,
910
- }, "aria-expanded": this.modalOpen ? 'true' : 'false', ref: (div) => (this.menuDiv = div), part: "burger" }, h("div", { class: "gn-menu_wrap", ref: (div) => (this.menuWrapDiv = div), tabindex: "-1", part: "burger-menu" }, h("div", { class: "gn-menu_actions", part: "burger-actions-bar" }, h("button", { class: "menu-btn icon-btn icon-btn", onMouseDown: this.onMenuBtnClick, onKeyDown: this.onMenuBtnKeyDown }, this.threshold < this.THRESHOLDLIMIT - 3 && (h("nano-icon", { name: "light/times", "aria-label": "close menu" })), this.threshold >= this.THRESHOLDLIMIT - 3 && (h("nano-icon", { name: "light/bars", "aria-label": "close menu" }))), this.threshold <
932
+ }, "aria-expanded": this.modalOpen ? 'true' : 'false', ref: (div) => (this.menuDiv = div), part: "burger" }, h("div", { class: "gn-menu_wrap", ref: (div) => (this.menuWrapDiv = div), tabindex: "-1", part: "burger-menu" }, h("div", { class: "gn-menu_actions", part: "burger-actions-bar" }, h("button", { class: "menu-btn icon-btn icon-btn", onMouseDown: this.onMenuBtnClick, onKeyDown: this.onMenuBtnKeyDown }, this.threshold <
933
+ this.THRESHOLDLIMIT - THRESHOLDBREAKS.login && (h("nano-icon", { name: "light/times", "aria-label": "close menu" })), this.threshold >=
934
+ this.THRESHOLDLIMIT - THRESHOLDBREAKS.login && (h("nano-icon", { name: "light/bars", "aria-label": "close menu" }))), this.threshold <
911
935
  this.THRESHOLDLIMIT - THRESHOLDBREAKS.icon && [
912
936
  !!this.iconSlotLen && h("slot", { name: "icon" }),
913
937
  this.myAccData &&
@@ -1000,19 +1024,28 @@ export class GlobalNav {
1000
1024
  'search-bar': true,
1001
1025
  show: this.searchBarShown,
1002
1026
  }, "aria-expanded": this.searchBarShown ? 'true' : 'false', role: "region", tabindex: "-1", ref: (div) => (this.searchBarEl = div), part: "search-bar" }, h("div", { class: "search-widget" }, this.showSearch && !!this.internalSearchIndeces.length && (h("div", null, searchWidget)), (!this.showSearch || !this.myAccData) &&
1003
- !!this.searchSlotLen && (h("slot", { name: "search", onSlotchange: this.assessSlottedContent }))))))), (this.threshold < this.THRESHOLDLIMIT - 3 ||
1027
+ !!this.searchSlotLen && (h("slot", { name: "search", onSlotchange: this.assessSlottedContent }))))))), (this.threshold < this.THRESHOLDLIMIT - THRESHOLDBREAKS.login ||
1004
1028
  this.menuFullScreen) && (h("div", { class: {
1005
1029
  mask: true,
1006
1030
  open: this.modalOpen,
1007
1031
  }, onClick: this.menuClose, onTouchEnd: this.menuClose }))), h("div", { class: "site-content" }, h("slot", null))));
1008
1032
  }
1009
1033
  // Data processing
1034
+ /**
1035
+ * Finds a correct domain (as defined by myAccount data) for a given origin
1036
+ * @returns a domain string for this origin
1037
+ */
1010
1038
  domainFor(origin) {
1011
1039
  if (!this.myAccData)
1012
1040
  return '';
1013
1041
  const domain = this.myAccData.domains.find((dm) => dm.origin === origin);
1014
1042
  return domain ? domain.domain : '';
1015
1043
  }
1044
+ /**
1045
+ * process a set, or multiple sets of algolia results
1046
+ * and applies correct domain names / http protocol to each result's url
1047
+ * @returns results where partial paths are turned to full urls
1048
+ */
1016
1049
  processSearchResults(results) {
1017
1050
  const multiResults = results;
1018
1051
  const singleResult = results;
@@ -1031,6 +1064,9 @@ export class GlobalNav {
1031
1064
  return singleResult;
1032
1065
  }
1033
1066
  }
1067
+ /**
1068
+ * Ingests the data blob from myAccount; turns prescient fields to internal state
1069
+ */
1034
1070
  processMyAccData() {
1035
1071
  if (!this.myAccData || !this.myAccData.search.indeces.length)
1036
1072
  return;
@@ -1053,6 +1089,9 @@ export class GlobalNav {
1053
1089
  if (this.myAccData.urls.messages && !this.msgUrl)
1054
1090
  this.msgUrl = this.myAccData.urls.messages;
1055
1091
  }
1092
+ /**
1093
+ * Ingests the data blob from myAccount links; applies prescient fields to internal state
1094
+ */
1056
1095
  processMyAccLinks() {
1057
1096
  if (!this.myAccData.links || !this.myAccData.links.length)
1058
1097
  return;