@salesforcedevs/arch-components 1.20.17-alpha1

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 (363) hide show
  1. package/lwc.config.json +7 -0
  2. package/package.json +19 -0
  3. package/src/modules/common/context/context.html +1 -0
  4. package/src/modules/common/context/context.ts +137 -0
  5. package/src/modules/common/effectAdapter/__tests__/effectAdapter.test.ts +12 -0
  6. package/src/modules/common/effectAdapter/effectAdapter.html +1 -0
  7. package/src/modules/common/effectAdapter/effectAdapter.ts +18 -0
  8. package/src/modules/common/reflectedElement/__tests__/modules/test/select/select.html +3 -0
  9. package/src/modules/common/reflectedElement/__tests__/modules/test/select/select.ts +7 -0
  10. package/src/modules/common/reflectedElement/__tests__/modules/test/selectTransform/selectTransform.html +3 -0
  11. package/src/modules/common/reflectedElement/__tests__/modules/test/selectTransform/selectTransform.ts +18 -0
  12. package/src/modules/common/reflectedElement/__tests__/reflectedElement.test.ts +75 -0
  13. package/src/modules/common/reflectedElement/reflectedElement.ts +50 -0
  14. package/src/modules/common/slot/__tests__/slot.test.ts +96 -0
  15. package/src/modules/common/slot/slot.ts +20 -0
  16. package/src/modules/sa/coverage/coverage.css +35 -0
  17. package/src/modules/sa/coverage/coverage.html +15 -0
  18. package/src/modules/sa/coverage/coverage.ts +406 -0
  19. package/src/modules/sa/coverage/types.d.ts +26 -0
  20. package/src/modules/sa/expandableSection/expandableSection.css +24 -0
  21. package/src/modules/sa/expandableSection/expandableSection.html +20 -0
  22. package/src/modules/sa/expandableSection/expandableSection.stories.ts +37 -0
  23. package/src/modules/sa/expandableSection/expandableSection.ts +24 -0
  24. package/src/modules/sa/explorer/explorer.css +303 -0
  25. package/src/modules/sa/explorer/explorer.html +403 -0
  26. package/src/modules/sa/explorer/explorer.ts +664 -0
  27. package/src/modules/sa/explorer/types.d.ts +60 -0
  28. package/src/modules/sa/gallery/gallery.css +358 -0
  29. package/src/modules/sa/gallery/gallery.html +65 -0
  30. package/src/modules/sa/gallery/gallery.ts +300 -0
  31. package/src/modules/sa/gallery/types.d.ts +35 -0
  32. package/src/modules/sa/socialShare/socialShare.css +49 -0
  33. package/src/modules/sa/socialShare/socialShare.html +56 -0
  34. package/src/modules/sa/socialShare/socialShare.ts +29 -0
  35. package/src/modules/shared/a11y/a11y.ts +25 -0
  36. package/src/modules/shared/children/children.ts +29 -0
  37. package/src/modules/shared/color/color.ts +52 -0
  38. package/src/modules/shared/debounce/debounce.ts +32 -0
  39. package/src/modules/shared/dialog/dialog.ts +154 -0
  40. package/src/modules/shared/elements/__tests__/overflow.test.ts +39 -0
  41. package/src/modules/shared/elements/overflow.ts +71 -0
  42. package/src/modules/shared/fetch/fetch.ts +52 -0
  43. package/src/modules/shared/helpers/helpers.ts +141 -0
  44. package/src/modules/shared/i18n/i18n.ts +74 -0
  45. package/src/modules/shared/labels/__tests__/helpers.test.ts +107 -0
  46. package/src/modules/shared/labels/__tests__/pointHelpers.test.ts +33 -0
  47. package/src/modules/shared/labels/__tests__/timeHelpers.test.ts +89 -0
  48. package/src/modules/shared/labels/helpers.ts +23 -0
  49. package/src/modules/shared/labels/pointHelpers.ts +47 -0
  50. package/src/modules/shared/labels/timeHelpers.ts +182 -0
  51. package/src/modules/shared/labels/types.d.ts +5 -0
  52. package/src/modules/shared/logger/logger.ts +33 -0
  53. package/src/modules/shared/menu/menu.ts +239 -0
  54. package/src/modules/shared/overflow/__tests__/overflow.test.ts +39 -0
  55. package/src/modules/shared/overflow/overflow.ts +71 -0
  56. package/src/modules/shared/polling-request.ts +97 -0
  57. package/src/modules/shared/testutils.ts +118 -0
  58. package/src/modules/shared/track/track.ts +23 -0
  59. package/src/modules/shared/trailhead.ts +123 -0
  60. package/src/modules/shared/types.d.ts +1 -0
  61. package/src/modules/shared/useEffectAttr.ts +16 -0
  62. package/src/modules/shared/withState.ts +21 -0
  63. package/src/modules/tds/appLauncher/__fixtures__/index.ts +34 -0
  64. package/src/modules/tds/appLauncher/__tests__/appLauncher.test.ts +119 -0
  65. package/src/modules/tds/appLauncher/appLauncher.css +65 -0
  66. package/src/modules/tds/appLauncher/appLauncher.html +38 -0
  67. package/src/modules/tds/appLauncher/appLauncher.stories.ts +39 -0
  68. package/src/modules/tds/appLauncher/appLauncher.ts +79 -0
  69. package/src/modules/tds/appLauncher/types.ts +8 -0
  70. package/src/modules/tds/avatar/__tests__/avatar.test.ts +11 -0
  71. package/src/modules/tds/avatar/avatar.css +77 -0
  72. package/src/modules/tds/avatar/avatar.html +36 -0
  73. package/src/modules/tds/avatar/avatar.stories.ts +64 -0
  74. package/src/modules/tds/avatar/avatar.ts +50 -0
  75. package/src/modules/tds/badge/__tests__/badge.test.js +11 -0
  76. package/src/modules/tds/badge/badge.css +22 -0
  77. package/src/modules/tds/badge/badge.html +5 -0
  78. package/src/modules/tds/badge/badge.stories.ts +10 -0
  79. package/src/modules/tds/badge/badge.ts +9 -0
  80. package/src/modules/tds/button/__tests__/button.test.ts +52 -0
  81. package/src/modules/tds/button/button.css +1 -0
  82. package/src/modules/tds/button/button.html +20 -0
  83. package/src/modules/tds/button/button.stories.js +54 -0
  84. package/src/modules/tds/button/button.ts +59 -0
  85. package/src/modules/tds/buttonIcon/__tests__/buttonIcon.test.ts +17 -0
  86. package/src/modules/tds/buttonIcon/buttonIcon.css +1 -0
  87. package/src/modules/tds/buttonIcon/buttonIcon.html +12 -0
  88. package/src/modules/tds/buttonIcon/buttonIcon.stories.js +38 -0
  89. package/src/modules/tds/buttonIcon/buttonIcon.ts +6 -0
  90. package/src/modules/tds/buttonIconLink/buttonIconLink.css +1 -0
  91. package/src/modules/tds/buttonIconLink/buttonIconLink.html +14 -0
  92. package/src/modules/tds/buttonIconLink/buttonIconLink.stories.ts +32 -0
  93. package/src/modules/tds/buttonIconLink/buttonIconLink.ts +9 -0
  94. package/src/modules/tds/buttonLink/__tests__/buttonLink.test.ts +17 -0
  95. package/src/modules/tds/buttonLink/buttonLink.css +1 -0
  96. package/src/modules/tds/buttonLink/buttonLink.html +19 -0
  97. package/src/modules/tds/buttonLink/buttonLink.stories.js +24 -0
  98. package/src/modules/tds/buttonLink/buttonLink.ts +8 -0
  99. package/src/modules/tds/buttonStyles/buttonStyles.css +232 -0
  100. package/src/modules/tds/childSummary/__tests__/childSummary.test.js +99 -0
  101. package/src/modules/tds/childSummary/childSummary.css +74 -0
  102. package/src/modules/tds/childSummary/childSummary.html +38 -0
  103. package/src/modules/tds/childSummary/childSummary.stories.ts +40 -0
  104. package/src/modules/tds/childSummary/childSummary.ts +63 -0
  105. package/src/modules/tds/childSummary/types.d.ts +10 -0
  106. package/src/modules/tds/contentChildListItem/__tests__/contentChildListItem.test.ts +32 -0
  107. package/src/modules/tds/contentChildListItem/contentChildListItem.css +1 -0
  108. package/src/modules/tds/contentChildListItem/contentChildListItem.html +10 -0
  109. package/src/modules/tds/contentChildListItem/contentChildListItem.stories.ts +46 -0
  110. package/src/modules/tds/contentChildListItem/contentChildListItem.ts +34 -0
  111. package/src/modules/tds/contentIcon/contentIcon.css +47 -0
  112. package/src/modules/tds/contentIcon/contentIcon.html +15 -0
  113. package/src/modules/tds/contentIcon/contentIcon.stories.js +110 -0
  114. package/src/modules/tds/contentIcon/contentIcon.ts +66 -0
  115. package/src/modules/tds/contextAdapter/__tests__/contextAdapter.test.ts +76 -0
  116. package/src/modules/tds/contextAdapter/constants.ts +1 -0
  117. package/src/modules/tds/contextAdapter/contextAdapter.html +1 -0
  118. package/src/modules/tds/contextAdapter/contextAdapter.ts +54 -0
  119. package/src/modules/tds/dialogStyles/dialogStyles.css +90 -0
  120. package/src/modules/tds/footerLinks/__tests__/__snapshots__/footerLinks.test.ts.snap +3 -0
  121. package/src/modules/tds/footerLinks/__tests__/footerLinks.test.ts +142 -0
  122. package/src/modules/tds/footerLinks/footerLinks.css +80 -0
  123. package/src/modules/tds/footerLinks/footerLinks.html +30 -0
  124. package/src/modules/tds/footerLinks/footerLinks.ts +48 -0
  125. package/src/modules/tds/footerLinks/types.ts +11 -0
  126. package/src/modules/tds/footerMfe/footerMfe.html +3 -0
  127. package/src/modules/tds/footerMfe/footerMfe.ts +19 -0
  128. package/src/modules/tds/headerAvatar/__tests__/headerAvatar.test.ts +43 -0
  129. package/src/modules/tds/headerAvatar/headerAvatar.css +45 -0
  130. package/src/modules/tds/headerAvatar/headerAvatar.html +25 -0
  131. package/src/modules/tds/headerAvatar/headerAvatar.ts +15 -0
  132. package/src/modules/tds/headerHelpButton/__tests__/headerHelpButton.test.ts +32 -0
  133. package/src/modules/tds/headerHelpButton/headerHelpButton.css +14 -0
  134. package/src/modules/tds/headerHelpButton/headerHelpButton.html +19 -0
  135. package/src/modules/tds/headerHelpButton/headerHelpButton.ts +12 -0
  136. package/src/modules/tds/heading/__tests__/heading.test.ts +50 -0
  137. package/src/modules/tds/heading/heading.css +1 -0
  138. package/src/modules/tds/heading/heading.html +9 -0
  139. package/src/modules/tds/heading/heading.stories.ts +36 -0
  140. package/src/modules/tds/heading/heading.ts +36 -0
  141. package/src/modules/tds/icon/icon.css +28 -0
  142. package/src/modules/tds/icon/icon.html +17 -0
  143. package/src/modules/tds/icon/icon.stories.js +18 -0
  144. package/src/modules/tds/icon/icon.ts +79 -0
  145. package/src/modules/tds/input/__tests__/input.test.ts +41 -0
  146. package/src/modules/tds/input/input.css +34 -0
  147. package/src/modules/tds/input/input.html +12 -0
  148. package/src/modules/tds/input/input.stories.ts +25 -0
  149. package/src/modules/tds/input/input.ts +41 -0
  150. package/src/modules/tds/instrumentation/instrumentation.css +0 -0
  151. package/src/modules/tds/instrumentation/instrumentation.html +1 -0
  152. package/src/modules/tds/instrumentation/instrumentation.ts +113 -0
  153. package/src/modules/tds/pbCard/pbCard.css +28 -0
  154. package/src/modules/tds/pbCard/pbCard.html +21 -0
  155. package/src/modules/tds/pbCard/pbCard.ts +18 -0
  156. package/src/modules/tds/pill/__tests__/pill.test.ts +56 -0
  157. package/src/modules/tds/pill/pill.css +70 -0
  158. package/src/modules/tds/pill/pill.html +17 -0
  159. package/src/modules/tds/pill/pill.stories.ts +41 -0
  160. package/src/modules/tds/pill/pill.ts +34 -0
  161. package/src/modules/tds/progressBar/__tests__/progressBar.test.js +11 -0
  162. package/src/modules/tds/progressBar/progressBar.css +42 -0
  163. package/src/modules/tds/progressBar/progressBar.html +14 -0
  164. package/src/modules/tds/progressBar/progressBar.stories.ts +24 -0
  165. package/src/modules/tds/progressBar/progressBar.ts +14 -0
  166. package/src/modules/tds/radio/__tests__/radio.test.ts +29 -0
  167. package/src/modules/tds/radio/radio.css +89 -0
  168. package/src/modules/tds/radio/radio.html +17 -0
  169. package/src/modules/tds/radio/radio.stories.ts +31 -0
  170. package/src/modules/tds/radio/radio.ts +32 -0
  171. package/src/modules/tds/reset/reset.css +39 -0
  172. package/src/modules/tds/search/__fixtures__/index.ts +32 -0
  173. package/src/modules/tds/search/__tests__/search.test.ts +235 -0
  174. package/src/modules/tds/search/lib/__tests__/__snapshots__/listbox.test.ts.snap +115 -0
  175. package/src/modules/tds/search/lib/__tests__/listbox.test.ts +192 -0
  176. package/src/modules/tds/search/lib/listbox.ts +209 -0
  177. package/src/modules/tds/search/search.css +122 -0
  178. package/src/modules/tds/search/search.html +21 -0
  179. package/src/modules/tds/search/search.stories.ts +20 -0
  180. package/src/modules/tds/search/search.ts +107 -0
  181. package/src/modules/tds/search/types.d.ts +22 -0
  182. package/src/modules/tds/searchList/searchList.css +120 -0
  183. package/src/modules/tds/searchList/searchList.html +43 -0
  184. package/src/modules/tds/searchList/searchList.stories.ts +10 -0
  185. package/src/modules/tds/searchList/searchList.ts +53 -0
  186. package/src/modules/tds/select/__tests__/select.test.ts +150 -0
  187. package/src/modules/tds/select/select.css +42 -0
  188. package/src/modules/tds/select/select.html +24 -0
  189. package/src/modules/tds/select/select.stories.ts +59 -0
  190. package/src/modules/tds/select/select.ts +60 -0
  191. package/src/modules/tds/spinner/__tests__/spinner.test.ts +11 -0
  192. package/src/modules/tds/spinner/spinner.css +194 -0
  193. package/src/modules/tds/spinner/spinner.html +9 -0
  194. package/src/modules/tds/spinner/spinner.stories.ts +20 -0
  195. package/src/modules/tds/spinner/spinner.ts +15 -0
  196. package/src/modules/tds/styles/styles.css +24 -0
  197. package/src/modules/tds/summary/__tests__/summary.test.ts +135 -0
  198. package/src/modules/tds/summary/summary.css +135 -0
  199. package/src/modules/tds/summary/summary.html +69 -0
  200. package/src/modules/tds/summary/summary.stories.js +148 -0
  201. package/src/modules/tds/summary/summary.ts +95 -0
  202. package/src/modules/tds/tab/__tests__/tab.test.ts +25 -0
  203. package/src/modules/tds/tab/tab.css +3 -0
  204. package/src/modules/tds/tab/tab.html +5 -0
  205. package/src/modules/tds/tab/tab.ts +46 -0
  206. package/src/modules/tds/tabset/__tests__/tabset.test.ts +108 -0
  207. package/src/modules/tds/tabset/tabset.css +112 -0
  208. package/src/modules/tds/tabset/tabset.html +63 -0
  209. package/src/modules/tds/tabset/tabset.stories.ts +32 -0
  210. package/src/modules/tds/tabset/tabset.ts +232 -0
  211. package/src/modules/tds/themeProvider/themeProvider.css +502 -0
  212. package/src/modules/tds/themeProvider/themeProvider.html +3 -0
  213. package/src/modules/tds/themeProvider/themeProvider.ts +37 -0
  214. package/src/modules/tds/tile/tile.css +23 -0
  215. package/src/modules/tds/tile/tile.html +5 -0
  216. package/src/modules/tds/tile/tile.stories.js +14 -0
  217. package/src/modules/tds/tile/tile.ts +12 -0
  218. package/src/modules/tds/xsfMfeEvents/xsfMfeEvents.html +1 -0
  219. package/src/modules/tds/xsfMfeEvents/xsfMfeEvents.ts +47 -0
  220. package/src/modules/th/contextAdapter/__tests__/contextAdapter.test.ts +104 -0
  221. package/src/modules/th/contextAdapter/contextAdapter.html +1 -0
  222. package/src/modules/th/contextAdapter/contextAdapter.ts +49 -0
  223. package/src/modules/th/favoriteButton/__tests__/favoriteButton.test.ts +56 -0
  224. package/src/modules/th/favoriteButton/favoriteButton.css +3 -0
  225. package/src/modules/th/favoriteButton/favoriteButton.html +15 -0
  226. package/src/modules/th/favoriteButton/favoriteButton.stories.js +30 -0
  227. package/src/modules/th/favoriteButton/favoriteButton.ts +84 -0
  228. package/src/modules/th/favoriteButton/mocks/index.ts +12 -0
  229. package/src/modules/th/search/__fixtures__/index.ts +14 -0
  230. package/src/modules/th/search/__tests__/search.test.ts +233 -0
  231. package/src/modules/th/search/constants.ts +2 -0
  232. package/src/modules/th/search/mocks/index.ts +30 -0
  233. package/src/modules/th/search/mocks/responses.ts +54 -0
  234. package/src/modules/th/search/search.css +4 -0
  235. package/src/modules/th/search/search.html +12 -0
  236. package/src/modules/th/search/search.ts +172 -0
  237. package/src/modules/th/search/types.d.ts +29 -0
  238. package/src/modules/th/tbid/__tests__/__snapshots__/tbid.test.ts.snap +3 -0
  239. package/src/modules/th/tbid/__tests__/tbid.test.ts +242 -0
  240. package/src/modules/th/tbid/tbid.html +1 -0
  241. package/src/modules/th/tbid/tbid.stories.mdx +25 -0
  242. package/src/modules/th/tbid/tbid.ts +215 -0
  243. package/src/modules/tm/card/__tests__/card.test.ts +65 -0
  244. package/src/modules/tm/card/card.css +131 -0
  245. package/src/modules/tm/card/card.html +81 -0
  246. package/src/modules/tm/card/card.ts +269 -0
  247. package/src/modules/tm/cardBase/cardBase.css +11 -0
  248. package/src/modules/tm/cardGridA/cardGridA.css +11 -0
  249. package/src/modules/tm/cardGridA/cardGridA.html +21 -0
  250. package/src/modules/tm/cardGridA/cardGridA.stories.js +107 -0
  251. package/src/modules/tm/cardGridA/cardGridA.ts +24 -0
  252. package/src/modules/tm/cardGridB/cardGridB.css +88 -0
  253. package/src/modules/tm/cardGridB/cardGridB.html +20 -0
  254. package/src/modules/tm/cardGridB/cardGridB.stories.js +58 -0
  255. package/src/modules/tm/cardGridB/cardGridB.ts +19 -0
  256. package/src/modules/tm/cardGridC/cardGridC.css +24 -0
  257. package/src/modules/tm/cardGridC/cardGridC.html +22 -0
  258. package/src/modules/tm/cardGridC/cardGridC.stories.js +42 -0
  259. package/src/modules/tm/cardGridC/cardGridC.ts +11 -0
  260. package/src/modules/tm/cardGridD/cardGridD.css +17 -0
  261. package/src/modules/tm/cardGridD/cardGridD.html +20 -0
  262. package/src/modules/tm/cardGridD/cardGridD.stories.js +34 -0
  263. package/src/modules/tm/cardGridD/cardGridD.ts +7 -0
  264. package/src/modules/tm/cardNew/cardNew.css +31 -0
  265. package/src/modules/tm/cardNew/cardNew.html +29 -0
  266. package/src/modules/tm/cardNew/cardNew.ts +66 -0
  267. package/src/modules/tm/content/__fixtures__/index.ts +884 -0
  268. package/src/modules/tm/content/__tests__/content.test.ts +95 -0
  269. package/src/modules/tm/content/content.css +641 -0
  270. package/src/modules/tm/content/content.html +53 -0
  271. package/src/modules/tm/content/content.stories.js +14 -0
  272. package/src/modules/tm/content/content.ts +171 -0
  273. package/src/modules/tm/endCapA/__tests__/endCapA.test.ts +52 -0
  274. package/src/modules/tm/endCapA/endCapA.css +64 -0
  275. package/src/modules/tm/endCapA/endCapA.html +21 -0
  276. package/src/modules/tm/endCapA/endCapA.stories.js +37 -0
  277. package/src/modules/tm/endCapA/endCapA.ts +23 -0
  278. package/src/modules/tm/eventsA/eventsA.css +107 -0
  279. package/src/modules/tm/eventsA/eventsA.html +26 -0
  280. package/src/modules/tm/eventsA/eventsA.stories.js +51 -0
  281. package/src/modules/tm/eventsA/eventsA.ts +48 -0
  282. package/src/modules/tm/faqA/faqA.css +87 -0
  283. package/src/modules/tm/faqA/faqA.html +27 -0
  284. package/src/modules/tm/faqA/faqA.stories.js +25 -0
  285. package/src/modules/tm/faqA/faqA.ts +40 -0
  286. package/src/modules/tm/featureGridA/__tests__/featureGridA.test.ts +116 -0
  287. package/src/modules/tm/featureGridA/featureGridA.css +95 -0
  288. package/src/modules/tm/featureGridA/featureGridA.html +34 -0
  289. package/src/modules/tm/featureGridA/featureGridA.stories.js +45 -0
  290. package/src/modules/tm/featureGridA/featureGridA.ts +59 -0
  291. package/src/modules/tm/footnote/footnote.css +28 -0
  292. package/src/modules/tm/footnote/footnote.html +3 -0
  293. package/src/modules/tm/footnote/footnote.stories.js +29 -0
  294. package/src/modules/tm/footnote/footnote.ts +35 -0
  295. package/src/modules/tm/heroA/__tests__/heroA.test.ts +51 -0
  296. package/src/modules/tm/heroA/heroA.css +116 -0
  297. package/src/modules/tm/heroA/heroA.html +27 -0
  298. package/src/modules/tm/heroA/heroA.stories.js +49 -0
  299. package/src/modules/tm/heroA/heroA.ts +56 -0
  300. package/src/modules/tm/heroB/heroB.css +78 -0
  301. package/src/modules/tm/heroB/heroB.html +26 -0
  302. package/src/modules/tm/heroB/heroB.stories.js +44 -0
  303. package/src/modules/tm/heroB/heroB.ts +26 -0
  304. package/src/modules/tm/page/__tests__/page.test.ts +35 -0
  305. package/src/modules/tm/page/page.css +3 -0
  306. package/src/modules/tm/page/page.html +3 -0
  307. package/src/modules/tm/page/page.stories.js +10 -0
  308. package/src/modules/tm/page/page.ts +3 -0
  309. package/src/modules/tm/pageHeaderA/pageHeaderA.css +82 -0
  310. package/src/modules/tm/pageHeaderA/pageHeaderA.html +24 -0
  311. package/src/modules/tm/pageHeaderA/pageHeaderA.stories.js +18 -0
  312. package/src/modules/tm/pageHeaderA/pageHeaderA.ts +51 -0
  313. package/src/modules/tm/pageNavigationA/pageNavigationA.css +41 -0
  314. package/src/modules/tm/pageNavigationA/pageNavigationA.html +9 -0
  315. package/src/modules/tm/pageNavigationA/pageNavigationA.stories.js +34 -0
  316. package/src/modules/tm/pageNavigationA/pageNavigationA.ts +18 -0
  317. package/src/modules/tm/promoA/__tests__/promoA.test.ts +89 -0
  318. package/src/modules/tm/promoA/promoA.css +95 -0
  319. package/src/modules/tm/promoA/promoA.html +22 -0
  320. package/src/modules/tm/promoA/promoA.stories.js +38 -0
  321. package/src/modules/tm/promoA/promoA.ts +62 -0
  322. package/src/modules/tm/sectionA/sectionA.css +64 -0
  323. package/src/modules/tm/sectionA/sectionA.html +21 -0
  324. package/src/modules/tm/sectionA/sectionA.stories.js +18 -0
  325. package/src/modules/tm/sectionA/sectionA.ts +27 -0
  326. package/src/modules/tm/sectionSpacer/sectionSpacer.css +4 -0
  327. package/src/modules/tm/sectionSpacer/sectionSpacer.html +1 -0
  328. package/src/modules/tm/sectionSpacer/sectionSpacer.ts +3 -0
  329. package/src/modules/tm/skillsCardA/skillsCardA.css +73 -0
  330. package/src/modules/tm/skillsCardA/skillsCardA.html +37 -0
  331. package/src/modules/tm/skillsCardA/skillsCardA.ts +38 -0
  332. package/src/modules/tm/skillsGridA/skillsGridA.css +12 -0
  333. package/src/modules/tm/skillsGridA/skillsGridA.html +5 -0
  334. package/src/modules/tm/skillsGridA/skillsGridA.stories.ts +65 -0
  335. package/src/modules/tm/skillsGridA/skillsGridA.ts +3 -0
  336. package/src/modules/tm/statsA/statsA.css +26 -0
  337. package/src/modules/tm/statsA/statsA.html +10 -0
  338. package/src/modules/tm/statsA/statsA.stories.js +29 -0
  339. package/src/modules/tm/statsA/statsA.ts +20 -0
  340. package/src/modules/tm/textItem/textItem.css +53 -0
  341. package/src/modules/tm/textItem/textItem.html +18 -0
  342. package/src/modules/tm/textItem/textItem.ts +32 -0
  343. package/src/modules/tm/textItemGridA/textItemGridA.css +11 -0
  344. package/src/modules/tm/textItemGridA/textItemGridA.html +15 -0
  345. package/src/modules/tm/textItemGridA/textItemGridA.stories.js +67 -0
  346. package/src/modules/tm/textItemGridA/textItemGridA.ts +20 -0
  347. package/src/modules/tm/threeCardGrid/threeCardGrid.css +6 -0
  348. package/src/modules/tm/threeCardGrid/threeCardGrid.html +5 -0
  349. package/src/modules/tm/threeCardGrid/threeCardGrid.ts +3 -0
  350. package/src/modules/tm/trailblazersA/trailblazersA.css +70 -0
  351. package/src/modules/tm/trailblazersA/trailblazersA.html +42 -0
  352. package/src/modules/tm/trailblazersA/trailblazersA.stories.js +52 -0
  353. package/src/modules/tm/trailblazersA/trailblazersA.ts +43 -0
  354. package/src/modules/tm/utils/utils.ts +18 -0
  355. package/src/modules/tm/youtube/youtube.css +7 -0
  356. package/src/modules/tm/youtube/youtube.html +10 -0
  357. package/src/modules/tm/youtube/youtube.stories.js +15 -0
  358. package/src/modules/tm/youtube/youtube.ts +27 -0
  359. package/src/modules/ui/focusTrap/focusTrap.html +5 -0
  360. package/src/modules/ui/focusTrap/focusTrap.ts +104 -0
  361. package/src/modules/ui/focusVisible/__tests__/focusVisible.test.ts +95 -0
  362. package/src/modules/ui/focusVisible/focusVisible.html +3 -0
  363. package/src/modules/ui/focusVisible/focusVisible.ts +46 -0
@@ -0,0 +1,215 @@
1
+ import { api, LightningElement } from 'lwc';
2
+
3
+ import { getJSON, csrfHeader } from 'shared/fetch';
4
+
5
+ export const EVENT_LOGIN = 'login';
6
+ export const EVENT_LOGOUT = 'logout';
7
+
8
+ export const TRAILHEAD_EVENT_LOGIN = 'trailhead_login';
9
+ export const TRAILHEAD_EVENT_LOGOUT = 'trailhead_logout';
10
+ export const TRAILHEAD_EVENT_SIGNUP = 'trailhead_signup';
11
+
12
+ export const TBID_EVENT_INIT = 'tbid_will_init';
13
+ export const TBID_EVENT_LOGIN = 'tbid_will_login';
14
+ export const TBID_EVENT_LOGOUT = 'tbid_will_logout';
15
+
16
+ export const TBID_INIT = '__tbid_init';
17
+ export const TBID_LOGIN = '__tbid_login';
18
+ export const TBID_LOGOUT = '__tbid_logout';
19
+
20
+ export const TBID_SCRIPT_PATH = '/resource/authProviderEmbeddedLogin_v1_3';
21
+ export const TBID_LOGOUT_PATH = '/services/auth/rp/oidc/logout';
22
+
23
+ export const LOCK_KEY = 'tbid.tabAuthLock';
24
+ export const LOCK_TIMEOUT = 5000;
25
+
26
+ declare var SFIDWidget: {
27
+ init: () => void;
28
+ login: () => void;
29
+ logout: () => void;
30
+ signup: () => void;
31
+ };
32
+
33
+ export default class extends LightningElement {
34
+ @api authenticated: string | null = null;
35
+
36
+ @api csrfToken: string = '';
37
+
38
+ @api loginRedirectPath: string = null!;
39
+ @api loginStatusPath: string = null!;
40
+ @api loginTried: string | null = null;
41
+ @api logoutRedirectPath: string = null!;
42
+
43
+ @api tbidAuthProviderLoginPath: string = null!;
44
+ @api tbidAuthProviderSignupPath: string = null!;
45
+ @api tbidCommunityUri: string = null!;
46
+ @api tbidRedirectUri: string = null!;
47
+
48
+ private loadSFID: Promise<unknown> = null!;
49
+
50
+ private get scriptSrc() {
51
+ return `${this.tbidCommunityUri}${TBID_SCRIPT_PATH}`;
52
+ }
53
+
54
+ private get logoutIframeSrc() {
55
+ return `${this.tbidCommunityUri}${TBID_LOGOUT_PATH}`;
56
+ }
57
+
58
+ connectedCallback() {
59
+ this.appendMetaTag('salesforce-cache-max-age', '0');
60
+ this.appendMetaTag('salesforce-brand', 'trailhead');
61
+ this.appendMetaTag('salesforce-community', this.tbidCommunityUri);
62
+ this.appendMetaTag('salesforce-use-min-js', 'false');
63
+
64
+ this.appendMetaTag('salesforce-init-handler', TBID_INIT);
65
+ this.appendMetaTag('salesforce-login-handler', TBID_LOGIN);
66
+ this.appendMetaTag('salesforce-logout-handler', TBID_LOGOUT);
67
+
68
+ this.appendMetaTag('salesforce-mode', 'authprovider');
69
+ this.appendMetaTag('salesforce-redirect-uri', this.tbidRedirectUri);
70
+
71
+ this.appendMetaTag(
72
+ 'salesforce-authprovider-login',
73
+ this.tbidAuthProviderLoginPath
74
+ );
75
+ this.appendMetaTag(
76
+ 'salesforce-authprovider-signup',
77
+ this.tbidAuthProviderSignupPath
78
+ );
79
+
80
+ Object.defineProperty(window, TBID_INIT, {
81
+ value: () => this.onInit(),
82
+ writable: process.env.NODE_ENV === 'test'
83
+ });
84
+ Object.defineProperty(window, TBID_LOGIN, {
85
+ value: () => this.onLogin(),
86
+ writable: process.env.NODE_ENV === 'test'
87
+ });
88
+ Object.defineProperty(window, TBID_LOGOUT, {
89
+ value: () => this.onLogout(),
90
+ writable: process.env.NODE_ENV === 'test'
91
+ });
92
+
93
+ this.loadSFID = loadSFID(this.scriptSrc).catch((error) => {
94
+ this.dispatchEvent(
95
+ new CustomEvent('error', {
96
+ detail: { error }
97
+ })
98
+ );
99
+ });
100
+
101
+ document.addEventListener(TRAILHEAD_EVENT_LOGIN, this);
102
+ document.addEventListener(TRAILHEAD_EVENT_LOGOUT, this);
103
+ document.addEventListener(TRAILHEAD_EVENT_SIGNUP, this);
104
+ }
105
+
106
+ disconnectedCallback() {
107
+ document.removeEventListener(TRAILHEAD_EVENT_LOGIN, this);
108
+ document.removeEventListener(TRAILHEAD_EVENT_LOGOUT, this);
109
+ document.removeEventListener(TRAILHEAD_EVENT_SIGNUP, this);
110
+ }
111
+
112
+ handleEvent(e: Event) {
113
+ switch (e.type) {
114
+ case TRAILHEAD_EVENT_LOGIN:
115
+ SFIDWidget.login();
116
+ break;
117
+ case TRAILHEAD_EVENT_LOGOUT:
118
+ loadIframe(this.logoutIframeSrc).then(() => {
119
+ SFIDWidget.logout();
120
+ });
121
+ break;
122
+ case TRAILHEAD_EVENT_SIGNUP:
123
+ SFIDWidget.signup();
124
+ break;
125
+ }
126
+ }
127
+
128
+ private appendMetaTag(name: string, content: string) {
129
+ let tag = document.createElement('meta');
130
+ tag.name = name;
131
+ tag.content = content;
132
+ document.head.appendChild(tag);
133
+ }
134
+
135
+ private onInit() {
136
+ this.dispatchEvent(new CustomEvent(TBID_EVENT_INIT));
137
+ }
138
+
139
+ private async onLogin() {
140
+ this.dispatchEvent(new CustomEvent(TBID_EVENT_LOGIN));
141
+ this.dispatchEvent(new CustomEvent(EVENT_LOGIN));
142
+ let lock = new Lock(LOCK_KEY, LOCK_TIMEOUT);
143
+ let { user } = await getJSON<{ user: string }>(this.loginStatusPath, {
144
+ headers: csrfHeader(this.csrfToken)
145
+ });
146
+ let newSession =
147
+ (user === 'logged_in' && this.authenticated !== 'true') ||
148
+ (user === 'not_logged_in' && this.loginTried !== 'true');
149
+ if (newSession) {
150
+ if (lock.aquire()) window.location.href = this.loginRedirectPath;
151
+ else setTimeout(this.onLogin.bind(this), LOCK_TIMEOUT);
152
+ } else {
153
+ lock.release();
154
+ this.onInit();
155
+ }
156
+ }
157
+
158
+ private onLogout() {
159
+ this.dispatchEvent(new CustomEvent(TBID_EVENT_LOGOUT));
160
+ this.dispatchEvent(new CustomEvent(EVENT_LOGOUT));
161
+ SFIDWidget.init();
162
+ window.location.href = this.logoutRedirectPath;
163
+ }
164
+ }
165
+
166
+ export class Lock {
167
+ constructor(private key: string, private timeout: number) {}
168
+
169
+ aquire() {
170
+ if (this.locked) return false;
171
+ sessionStorage.setItem(this.key, String(Date.now() + this.timeout));
172
+ return true;
173
+ }
174
+
175
+ release() {
176
+ sessionStorage.removeItem(this.key);
177
+ }
178
+
179
+ private get existingLock() {
180
+ let storageValue = sessionStorage.getItem(this.key) || '';
181
+ let value = parseInt(storageValue, 10);
182
+ return Number.isNaN(value) ? 0 : value;
183
+ }
184
+
185
+ private get locked() {
186
+ return this.existingLock > Date.now();
187
+ }
188
+ }
189
+
190
+ function loadSFID(src: string) {
191
+ let load = new Promise<void>((resolve, reject) => {
192
+ let script = document.createElement('script');
193
+ script.onload = () => resolve(undefined);
194
+ script.onerror = () => reject(new Error('TH_TBID_SFID_LOAD'));
195
+ script.async = false;
196
+ script.src = src;
197
+ document.head.appendChild(script);
198
+ });
199
+ let timeout = new Promise((_, reject) =>
200
+ setTimeout(reject, 5000, new Error('TH_TBID_SFID_TIMEOUT'))
201
+ );
202
+ return Promise.race([load, timeout]);
203
+ }
204
+
205
+ function loadIframe(url: string) {
206
+ return new Promise((resolve, reject) => {
207
+ const iframe = document.createElement('iframe');
208
+ iframe.setAttribute('sandbox', 'allow-scripts');
209
+ iframe.style.display = 'none';
210
+ iframe.addEventListener('load', resolve, { once: true });
211
+ iframe.addEventListener('error', reject, { once: true });
212
+ iframe.src = url;
213
+ document.body.appendChild(iframe);
214
+ });
215
+ }
@@ -0,0 +1,65 @@
1
+ import { nextTick } from 'shared/testutils';
2
+ import Card from '../card';
3
+ import { track } from 'tds/instrumentation';
4
+ import { querySelector } from 'kagekiri';
5
+
6
+ customElements.define('tm-card', Card.CustomElementConstructor);
7
+
8
+ jest.mock('tds/instrumentation', () => {
9
+ return {
10
+ track: jest.fn()
11
+ };
12
+ });
13
+
14
+ describe('tm-card', () => {
15
+ beforeEach(() => {
16
+ // Mock SalesforceInteractions global object
17
+ (window as any).SalesforceInteractions = {
18
+ sendEvent: jest.fn()
19
+ };
20
+ // Clear the track mock
21
+ (track as jest.Mock).mockClear();
22
+ });
23
+
24
+ afterEach(() => {
25
+ document.body.innerHTML = '';
26
+ delete (window as any).SalesforceInteractions;
27
+ });
28
+
29
+ it('tracks clicks from anchor and image', async () => {
30
+ document.body.innerHTML = `
31
+ <tm-card
32
+ title="Item title"
33
+ cta-href="/#"
34
+ cta-title="Explore"
35
+ img-src="/image.png"
36
+ ></tm-card>
37
+ `;
38
+ await nextTick();
39
+
40
+ const item = document.body.querySelector('tm-card')!;
41
+ const anchor = querySelector('a', item);
42
+ const img = querySelector('.image', item);
43
+
44
+ anchor!.click();
45
+ img!.click();
46
+
47
+ expect(track).toBeCalledTimes(2);
48
+ const trackCalls = (track as jest.Mock).mock.calls;
49
+
50
+ // Both clicks should call track with select_content event
51
+ expect(trackCalls[0][0]).toBe(item);
52
+ expect(trackCalls[0][1]).toBe('select_content');
53
+ expect(trackCalls[0][2]).toMatchObject({
54
+ contentType: 'card grid',
55
+ itemLocation: 'card'
56
+ });
57
+
58
+ expect(trackCalls[1][0]).toBe(item);
59
+ expect(trackCalls[1][1]).toBe('select_content');
60
+ expect(trackCalls[1][2]).toMatchObject({
61
+ contentType: 'card grid',
62
+ itemLocation: 'card'
63
+ });
64
+ });
65
+ });
@@ -0,0 +1,131 @@
1
+ @import 'tds/reset';
2
+ @import 'tm/cardBase';
3
+
4
+ :host {
5
+ height: 100%;
6
+ }
7
+
8
+ a {
9
+ color: var(--tds-color-brand);
10
+ text-decoration: none;
11
+ }
12
+
13
+ a:hover {
14
+ text-decoration: underline;
15
+ }
16
+
17
+ .card {
18
+ display: flex;
19
+ }
20
+
21
+ .content {
22
+ display: flex;
23
+ flex: 1;
24
+ flex-direction: column;
25
+ color: var(--tds-color-black);
26
+ }
27
+
28
+ .content-inner {
29
+ flex: 1;
30
+ }
31
+
32
+ .pretitle {
33
+ font-size: var(--tds-font-size-sm);
34
+ color: var(--tds-color-meteorite);
35
+ padding-bottom: var(--tds-spacing-1);
36
+ }
37
+
38
+ .title {
39
+ font-size: var(--tds-font-size-lg);
40
+ font-weight: bold;
41
+ }
42
+
43
+ .description {
44
+ margin-top: var(--tds-spacing-3);
45
+ line-height: var(--tds-line-height-normal);
46
+ }
47
+
48
+ .cta {
49
+ font-weight: bold;
50
+ margin-top: var(--tds-spacing-3);
51
+ display: block;
52
+ }
53
+
54
+ div.image {
55
+ background-size: cover;
56
+ background-repeat: no-repeat;
57
+ background-position: center center;
58
+ }
59
+
60
+ img.image {
61
+ max-width: 90%;
62
+ max-height: 100px;
63
+ }
64
+
65
+ .card[data-href] .image {
66
+ cursor: pointer;
67
+ }
68
+
69
+ .card:not([data-image]),
70
+ .card[data-image=''] {
71
+ padding: var(--tds-spacing-6);
72
+ }
73
+
74
+ .card[data-image^='top'] {
75
+ flex-direction: column-reverse;
76
+ }
77
+
78
+ .card[data-image^='top'] .content {
79
+ padding: var(--tds-spacing-6);
80
+ }
81
+
82
+ .card[data-image='top--cover'] .image {
83
+ height: 0;
84
+ border-top-left-radius: var(--tds-radius-lg);
85
+ border-top-right-radius: var(--tds-radius-lg);
86
+ }
87
+
88
+ .card[data-image='top--small'] .image {
89
+ align-self: flex-start;
90
+ margin: var(--tds-spacing-6) var(--tds-spacing-6) 0 var(--tds-spacing-6);
91
+ max-height: 75px;
92
+ }
93
+
94
+ .card[data-image='right--cover'] {
95
+ align-items: stretch;
96
+ padding: var(--tds-spacing-6);
97
+ }
98
+
99
+ .card[data-image='right--cover'] .image {
100
+ flex: 1;
101
+ }
102
+
103
+ .card[data-image='right--cover'] .image {
104
+ align-self: stretch;
105
+ border-radius: var(--tds-radius-lg);
106
+ margin-left: var(--tds-spacing-6);
107
+ }
108
+
109
+ .card[data-image='left--cover'] {
110
+ align-items: top;
111
+ flex-direction: row-reverse;
112
+ padding: var(--tds-spacing-6);
113
+ }
114
+
115
+ .card[data-image='left--cover'] .image {
116
+ align-self: stretch;
117
+ border-radius: var(--tds-radius-lg);
118
+ flex: 1;
119
+ margin-right: var(--tds-spacing-6);
120
+ }
121
+
122
+ .card[data-image='left--small'] {
123
+ align-items: flex-start;
124
+ flex-direction: row-reverse;
125
+ padding: var(--tds-spacing-6);
126
+ }
127
+
128
+ .card[data-image='left--small'] .image {
129
+ width: 50px;
130
+ margin-right: var(--tds-spacing-6);
131
+ }
@@ -0,0 +1,81 @@
1
+ <template>
2
+ <article
3
+ class="card card-base"
4
+ data-href={ctaHref}
5
+ data-image={imgVariantResponsive}
6
+ role="article"
7
+ aria-labelledby={cardTitleId}
8
+ tabindex="0"
9
+ onkeydown={handleCardKeydown}
10
+ >
11
+ <div class="content">
12
+ <div class="content-inner">
13
+ <template if:true={pretitle}>
14
+ <p class="pretitle">{pretitle}</p>
15
+ </template>
16
+ <template if:true={pretitleHref}>
17
+ <p><a href={pretitleHref}>{pretitleHrefText}</a></p>
18
+ </template>
19
+ <h3 class="title" id={cardTitleId}>{title}</h3>
20
+ <p if:true={description} class="description">{description}</p>
21
+ </div>
22
+ <a
23
+ if:true={ctaTitle}
24
+ class="cta"
25
+ name={ctaTitleId}
26
+ id={ctaTitleId}
27
+ href={ctaHref}
28
+ target={ctaTarget}
29
+ aria-label={assistiveText}
30
+ onclick={trackLinkClick}
31
+ rel={rel}
32
+ >{ctaTitle}<img
33
+ if:true={isExternalHref}
34
+ src="/assets/images/new_window.svg"
35
+ style="display: inline; height: 1rem; margin: 0 0 0 5px"
36
+ aria-label="Open link in new window"
37
+ /></a>
38
+ </div>
39
+ <template if:true={imgSrc}>
40
+ <div
41
+ name={ctaHref}
42
+ id={imageDivId}
43
+ class="image"
44
+ if:false={imgTag}
45
+ onclick={onImageClick}
46
+ style={imgStyle}
47
+ data-href={ctaHref}
48
+ ></div>
49
+ <picture if:true={imgTagNoSvg}>
50
+ <template if:false={isRemoteImage}>
51
+ <source srcset={imgSrcSetWebP} />
52
+ <source srcset={imgSrcSetJpg} />
53
+ </template>
54
+ <img
55
+ name={ctaHref}
56
+ id={imageImgId}
57
+ class="image"
58
+ if:true={imgTag}
59
+ onclick={onImageClick}
60
+ style={imgStyle}
61
+ src={imgSrc}
62
+ alt={imageAltText}
63
+ loading="lazy"
64
+ decoding="async"
65
+ />
66
+ </picture>
67
+ <img
68
+ name={ctaHref}
69
+ id={imageSvgId}
70
+ class="image"
71
+ if:true={imgTagSvg}
72
+ onclick={onImageClick}
73
+ style={imgStyle}
74
+ src={imgSrc}
75
+ alt={description}
76
+ loading="lazy"
77
+ decoding="async"
78
+ />
79
+ </template>
80
+ </article>
81
+ </template>