@salesforce/ui-bundle-template-app-react-template-b2x 1.117.2

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 (171) hide show
  1. package/LICENSE.txt +82 -0
  2. package/README.md +52 -0
  3. package/dist/.forceignore +15 -0
  4. package/dist/.husky/pre-commit +4 -0
  5. package/dist/.prettierignore +11 -0
  6. package/dist/.prettierrc +17 -0
  7. package/dist/AGENT.md +193 -0
  8. package/dist/CHANGELOG.md +2128 -0
  9. package/dist/README.md +72 -0
  10. package/dist/config/project-scratch-def.json +13 -0
  11. package/dist/eslint.config.js +7 -0
  12. package/dist/force-app/main/default/classes/UIBundleAuthUtils.cls +68 -0
  13. package/dist/force-app/main/default/classes/UIBundleAuthUtils.cls-meta.xml +5 -0
  14. package/dist/force-app/main/default/classes/UIBundleChangePassword.cls +77 -0
  15. package/dist/force-app/main/default/classes/UIBundleChangePassword.cls-meta.xml +5 -0
  16. package/dist/force-app/main/default/classes/UIBundleForgotPassword.cls +71 -0
  17. package/dist/force-app/main/default/classes/UIBundleForgotPassword.cls-meta.xml +5 -0
  18. package/dist/force-app/main/default/classes/UIBundleLogin.cls +105 -0
  19. package/dist/force-app/main/default/classes/UIBundleLogin.cls-meta.xml +5 -0
  20. package/dist/force-app/main/default/classes/UIBundleRegistration.cls +162 -0
  21. package/dist/force-app/main/default/classes/UIBundleRegistration.cls-meta.xml +5 -0
  22. package/dist/force-app/main/default/digitalExperienceConfigs/reactexternalapp1.digitalExperienceConfig-meta.xml +8 -0
  23. package/dist/force-app/main/default/digitalExperiences/site/reactexternalapp1/reactexternalapp1.digitalExperience-meta.xml +11 -0
  24. package/dist/force-app/main/default/digitalExperiences/site/reactexternalapp1/sfdc_cms__site/reactexternalapp1/_meta.json +5 -0
  25. package/dist/force-app/main/default/digitalExperiences/site/reactexternalapp1/sfdc_cms__site/reactexternalapp1/content.json +10 -0
  26. package/dist/force-app/main/default/networks/reactexternalapp.network-meta.xml +60 -0
  27. package/dist/force-app/main/default/package.xml +20 -0
  28. package/dist/force-app/main/default/sites/reactexternalapp.site-meta.xml +31 -0
  29. package/dist/force-app/main/default/uiBundles/reactexternalapp/.forceignore +15 -0
  30. package/dist/force-app/main/default/uiBundles/reactexternalapp/.graphqlrc.yml +2 -0
  31. package/dist/force-app/main/default/uiBundles/reactexternalapp/.prettierignore +9 -0
  32. package/dist/force-app/main/default/uiBundles/reactexternalapp/.prettierrc +11 -0
  33. package/dist/force-app/main/default/uiBundles/reactexternalapp/CHANGELOG.md +10 -0
  34. package/dist/force-app/main/default/uiBundles/reactexternalapp/README.md +35 -0
  35. package/dist/force-app/main/default/uiBundles/reactexternalapp/codegen.yml +95 -0
  36. package/dist/force-app/main/default/uiBundles/reactexternalapp/components.json +18 -0
  37. package/dist/force-app/main/default/uiBundles/reactexternalapp/e2e/app.spec.ts +17 -0
  38. package/dist/force-app/main/default/uiBundles/reactexternalapp/eslint.config.js +169 -0
  39. package/dist/force-app/main/default/uiBundles/reactexternalapp/index.html +12 -0
  40. package/dist/force-app/main/default/uiBundles/reactexternalapp/package.json +70 -0
  41. package/dist/force-app/main/default/uiBundles/reactexternalapp/playwright.config.ts +24 -0
  42. package/dist/force-app/main/default/uiBundles/reactexternalapp/reactexternalapp.uibundle-meta.xml +8 -0
  43. package/dist/force-app/main/default/uiBundles/reactexternalapp/scripts/get-graphql-schema.mjs +68 -0
  44. package/dist/force-app/main/default/uiBundles/reactexternalapp/scripts/rewrite-e2e-assets.mjs +23 -0
  45. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/api/account/accountSearchService.ts +46 -0
  46. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/api/account/query/distinctAccountIndustries.graphql +19 -0
  47. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/api/account/query/distinctAccountTypes.graphql +19 -0
  48. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/api/account/query/getAccountDetail.graphql +121 -0
  49. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/api/account/query/searchAccounts.graphql +51 -0
  50. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/api/graphql-operations-types.ts +11260 -0
  51. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/api/graphqlClient.ts +25 -0
  52. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/app.tsx +16 -0
  53. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/appLayout.tsx +83 -0
  54. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/assets/icons/book.svg +3 -0
  55. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/assets/icons/copy.svg +4 -0
  56. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/assets/icons/rocket.svg +3 -0
  57. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/assets/icons/star.svg +3 -0
  58. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/assets/images/codey-1.png +0 -0
  59. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/assets/images/codey-2.png +0 -0
  60. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/assets/images/codey-3.png +0 -0
  61. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/assets/images/vibe-codey.svg +194 -0
  62. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/alerts/status-alert.tsx +49 -0
  63. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/layouts/card-layout.tsx +29 -0
  64. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/alert.tsx +76 -0
  65. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/badge.tsx +48 -0
  66. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/breadcrumb.tsx +109 -0
  67. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/button.tsx +67 -0
  68. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/calendar.tsx +232 -0
  69. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/card.tsx +103 -0
  70. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/checkbox.tsx +32 -0
  71. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/collapsible.tsx +33 -0
  72. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/datePicker.tsx +127 -0
  73. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/dialog.tsx +162 -0
  74. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/field.tsx +237 -0
  75. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/index.ts +84 -0
  76. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/input.tsx +19 -0
  77. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/label.tsx +22 -0
  78. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/pagination.tsx +132 -0
  79. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/popover.tsx +89 -0
  80. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/select.tsx +193 -0
  81. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/separator.tsx +26 -0
  82. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/skeleton.tsx +14 -0
  83. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/sonner.tsx +20 -0
  84. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/spinner.tsx +16 -0
  85. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/table.tsx +114 -0
  86. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/components/ui/tabs.tsx +88 -0
  87. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/api/userProfileApi.ts +95 -0
  88. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/authHelpers.ts +73 -0
  89. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/authenticationConfig.ts +61 -0
  90. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/context/AuthContext.tsx +95 -0
  91. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/footers/footer-link.tsx +36 -0
  92. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/forms/auth-form.tsx +81 -0
  93. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/forms/submit-button.tsx +49 -0
  94. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/hooks/form.tsx +120 -0
  95. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/hooks/useCountdownTimer.ts +266 -0
  96. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/hooks/useRetryWithBackoff.ts +109 -0
  97. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/layout/card-skeleton.tsx +38 -0
  98. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/layout/centered-page-layout.tsx +87 -0
  99. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/layouts/AuthAppLayout.tsx +12 -0
  100. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/layouts/authenticationRouteLayout.tsx +21 -0
  101. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/layouts/privateRouteLayout.tsx +44 -0
  102. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/pages/ChangePassword.tsx +107 -0
  103. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/pages/ForgotPassword.tsx +73 -0
  104. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/pages/Login.tsx +97 -0
  105. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/pages/Profile.tsx +161 -0
  106. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/pages/Register.tsx +133 -0
  107. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/pages/ResetPassword.tsx +107 -0
  108. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/sessionTimeout/SessionTimeoutValidator.tsx +602 -0
  109. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/sessionTimeout/sessionTimeService.ts +149 -0
  110. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/sessionTimeout/sessionTimeoutConfig.ts +77 -0
  111. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/authentication/utils/helpers.ts +121 -0
  112. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/__examples__/api/accountSearchService.ts +46 -0
  113. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/__examples__/api/query/distinctAccountIndustries.graphql +19 -0
  114. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/__examples__/api/query/distinctAccountTypes.graphql +19 -0
  115. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/__examples__/api/query/getAccountDetail.graphql +121 -0
  116. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/__examples__/api/query/searchAccounts.graphql +51 -0
  117. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/__examples__/pages/AccountObjectDetailPage.tsx +357 -0
  118. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/__examples__/pages/AccountSearch.tsx +312 -0
  119. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/__examples__/pages/Home.tsx +34 -0
  120. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/api/objectSearchService.ts +84 -0
  121. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/ActiveFilters.tsx +89 -0
  122. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/FilterContext.tsx +83 -0
  123. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/ObjectBreadcrumb.tsx +66 -0
  124. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/PaginationControls.tsx +109 -0
  125. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/SearchBar.tsx +41 -0
  126. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/SortControl.tsx +143 -0
  127. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/filters/BooleanFilter.tsx +78 -0
  128. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/filters/DateFilter.tsx +128 -0
  129. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/filters/DateRangeFilter.tsx +70 -0
  130. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/filters/FilterFieldWrapper.tsx +33 -0
  131. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/filters/MultiSelectFilter.tsx +97 -0
  132. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/filters/NumericRangeFilter.tsx +163 -0
  133. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/filters/SearchFilter.tsx +50 -0
  134. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/filters/SelectFilter.tsx +97 -0
  135. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/components/filters/TextFilter.tsx +91 -0
  136. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/hooks/useAsyncData.ts +54 -0
  137. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/hooks/useCachedAsyncData.ts +184 -0
  138. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/hooks/useDebouncedCallback.ts +34 -0
  139. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/hooks/useObjectSearchParams.ts +252 -0
  140. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/utils/debounce.ts +25 -0
  141. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/utils/fieldUtils.ts +29 -0
  142. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/utils/filterUtils.ts +395 -0
  143. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/features/object-search/utils/sortUtils.ts +38 -0
  144. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/lib/utils.ts +6 -0
  145. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/navigationMenu.tsx +80 -0
  146. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/pages/AccountObjectDetailPage.tsx +361 -0
  147. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/pages/AccountSearch.tsx +305 -0
  148. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/pages/Home.tsx +34 -0
  149. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/pages/NotFound.tsx +18 -0
  150. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/router-utils.tsx +35 -0
  151. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/routes.tsx +81 -0
  152. package/dist/force-app/main/default/uiBundles/reactexternalapp/src/styles/global.css +135 -0
  153. package/dist/force-app/main/default/uiBundles/reactexternalapp/tsconfig.json +42 -0
  154. package/dist/force-app/main/default/uiBundles/reactexternalapp/tsconfig.node.json +13 -0
  155. package/dist/force-app/main/default/uiBundles/reactexternalapp/ui-bundle.json +7 -0
  156. package/dist/force-app/main/default/uiBundles/reactexternalapp/vite-env.d.ts +1 -0
  157. package/dist/force-app/main/default/uiBundles/reactexternalapp/vite.config.ts +106 -0
  158. package/dist/force-app/main/default/uiBundles/reactexternalapp/vitest-env.d.ts +2 -0
  159. package/dist/force-app/main/default/uiBundles/reactexternalapp/vitest.config.ts +11 -0
  160. package/dist/force-app/main/default/uiBundles/reactexternalapp/vitest.setup.ts +1 -0
  161. package/dist/jest.config.js +6 -0
  162. package/dist/package-lock.json +9995 -0
  163. package/dist/package.json +40 -0
  164. package/dist/scripts/apex/hello.apex +10 -0
  165. package/dist/scripts/graphql-search.sh +191 -0
  166. package/dist/scripts/prepare-import-unique-fields.js +122 -0
  167. package/dist/scripts/setup-cli.mjs +563 -0
  168. package/dist/scripts/sf-project-setup.mjs +66 -0
  169. package/dist/scripts/soql/account.soql +6 -0
  170. package/dist/sfdx-project.json +12 -0
  171. package/package.json +40 -0
@@ -0,0 +1,60 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Network xmlns="http://soap.sforce.com/2006/04/metadata">
3
+ <allowInternalUserLogin>false</allowInternalUserLogin>
4
+ <allowMembersToFlag>false</allowMembersToFlag>
5
+ <changePasswordTemplate>unfiled$public/CommunityChangePasswordEmailTemplate</changePasswordTemplate>
6
+ <communityRoles/>
7
+ <disableReputationRecordConversations>true</disableReputationRecordConversations>
8
+ <emailSenderAddress>admin@company.com</emailSenderAddress>
9
+ <emailSenderName>reactexternalapp</emailSenderName>
10
+ <embeddedLoginEnabled>false</embeddedLoginEnabled>
11
+ <enableApexCDNCaching>true</enableApexCDNCaching>
12
+ <enableCustomVFErrorPageOverrides>false</enableCustomVFErrorPageOverrides>
13
+ <enableDirectMessages>true</enableDirectMessages>
14
+ <enableExpFriendlyUrlsAsDefault>false</enableExpFriendlyUrlsAsDefault>
15
+ <enableExperienceBundleBasedSnaOverrideEnabled>true</enableExperienceBundleBasedSnaOverrideEnabled>
16
+ <enableGuestChatter>true</enableGuestChatter>
17
+ <enableGuestFileAccess>false</enableGuestFileAccess>
18
+ <enableGuestMemberVisibility>false</enableGuestMemberVisibility>
19
+ <enableImageOptimizationCDN>true</enableImageOptimizationCDN>
20
+ <enableInvitation>false</enableInvitation>
21
+ <enableKnowledgeable>false</enableKnowledgeable>
22
+ <enableLWRExperienceConnectedApp>false</enableLWRExperienceConnectedApp>
23
+ <enableMemberVisibility>false</enableMemberVisibility>
24
+ <enableNicknameDisplay>true</enableNicknameDisplay>
25
+ <enablePrivateMessages>false</enablePrivateMessages>
26
+ <enableReputation>false</enableReputation>
27
+ <enableShowAllNetworkSettings>false</enableShowAllNetworkSettings>
28
+ <enableSiteAsContainer>true</enableSiteAsContainer>
29
+ <enableTalkingAboutStats>true</enableTalkingAboutStats>
30
+ <enableTopicAssignmentRules>true</enableTopicAssignmentRules>
31
+ <enableTopicSuggestions>false</enableTopicSuggestions>
32
+ <enableUpDownVote>false</enableUpDownVote>
33
+ <forgotPasswordTemplate>unfiled$public/CommunityForgotPasswordEmailTemplate</forgotPasswordTemplate>
34
+ <gatherCustomerSentimentData>false</gatherCustomerSentimentData>
35
+ <headlessForgotPasswordTemplate>unfiled$public/CommunityHeadlessForgotPasswordTemplate</headlessForgotPasswordTemplate>
36
+ <headlessRegistrationTemplate>unfiled$public/CommunityHeadlessRegistrationTemplate</headlessRegistrationTemplate>
37
+ <networkMemberGroups>
38
+ <profile>admin</profile>
39
+ </networkMemberGroups>
40
+ <networkPageOverrides>
41
+ <changePasswordPageOverrideSetting>Standard</changePasswordPageOverrideSetting>
42
+ <forgotPasswordPageOverrideSetting>Designer</forgotPasswordPageOverrideSetting>
43
+ <homePageOverrideSetting>Designer</homePageOverrideSetting>
44
+ <loginPageOverrideSetting>Designer</loginPageOverrideSetting>
45
+ <selfRegProfilePageOverrideSetting>Designer</selfRegProfilePageOverrideSetting>
46
+ </networkPageOverrides>
47
+ <newSenderAddress>admin@company.com</newSenderAddress>
48
+ <picassoSite>reactexternalapp1</picassoSite>
49
+ <selfRegistration>false</selfRegistration>
50
+ <sendWelcomeEmail>true</sendWelcomeEmail>
51
+ <site>reactexternalapp</site>
52
+ <siteArchiveStatus>NotArchived</siteArchiveStatus>
53
+ <status>Live</status>
54
+ <tabs>
55
+ <defaultTab>home</defaultTab>
56
+ <standardTab>Chatter</standardTab>
57
+ </tabs>
58
+ <urlPathPrefix>reactexternalappvforcesite</urlPathPrefix>
59
+ <welcomeTemplate>unfiled$public/CommunityWelcomeEmailTemplate</welcomeTemplate>
60
+ </Network>
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Package xmlns="http://soap.sforce.com/2006/04/metadata">
3
+ <types>
4
+ <members>reactexternalapp</members>
5
+ <name>CustomSite</name>
6
+ </types>
7
+ <types>
8
+ <members>site/reactexternalapp1</members>
9
+ <name>DigitalExperienceBundle</name>
10
+ </types>
11
+ <types>
12
+ <members>reactexternalapp1</members>
13
+ <name>DigitalExperienceConfig</name>
14
+ </types>
15
+ <types>
16
+ <members>reactexternalapp</members>
17
+ <name>Network</name>
18
+ </types>
19
+ <version>66.0</version>
20
+ </Package>
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <CustomSite xmlns="http://soap.sforce.com/2006/04/metadata">
3
+ <active>true</active>
4
+ <allowGuestPaymentsApi>false</allowGuestPaymentsApi>
5
+ <allowHomePage>false</allowHomePage>
6
+ <allowStandardAnswersPages>false</allowStandardAnswersPages>
7
+ <allowStandardIdeasPages>false</allowStandardIdeasPages>
8
+ <allowStandardLookups>false</allowStandardLookups>
9
+ <allowStandardPortalPages>true</allowStandardPortalPages>
10
+ <allowStandardSearch>false</allowStandardSearch>
11
+ <authorizationRequiredPage>CommunitiesLogin</authorizationRequiredPage>
12
+ <bandwidthExceededPage>BandwidthExceeded</bandwidthExceededPage>
13
+ <browserXssProtection>true</browserXssProtection>
14
+ <cachePublicVisualforcePagesInProxyServers>true</cachePublicVisualforcePagesInProxyServers>
15
+ <clickjackProtectionLevel>SameOriginOnly</clickjackProtectionLevel>
16
+ <contentSniffingProtection>true</contentSniffingProtection>
17
+ <enableAuraRequests>true</enableAuraRequests>
18
+ <fileNotFoundPage>FileNotFound</fileNotFoundPage>
19
+ <genericErrorPage>Exception</genericErrorPage>
20
+ <inMaintenancePage>InMaintenance</inMaintenancePage>
21
+ <indexPage>CommunitiesLanding</indexPage>
22
+ <masterLabel>reactexternalapp</masterLabel>
23
+ <redirectToCustomDomain>false</redirectToCustomDomain>
24
+ <referrerPolicyOriginWhenCrossOrigin>true</referrerPolicyOriginWhenCrossOrigin>
25
+ <selfRegPage>CommunitiesSelfReg</selfRegPage>
26
+ <!-- <serverIsDown>SNA_U2rxy_sf_default_cdn_byo1</serverIsDown> -->
27
+ <!-- <siteAdmin>epic.out.d1d3a2d722c8@orgfarm.salesforce.com</siteAdmin> -->
28
+ <!-- <siteGuestRecordDefaultOwner>epic.out.d1d3a2d722c8@orgfarm.salesforce.com</siteGuestRecordDefaultOwner> -->
29
+ <siteType>ChatterNetwork</siteType>
30
+ <urlPathPrefix>reactexternalappvforcesite</urlPathPrefix>
31
+ </CustomSite>
@@ -0,0 +1,15 @@
1
+ # List files or directories below to ignore them when running force:source:push, force:source:pull, and force:source:status
2
+ # More information: https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_exclude_source.htm
3
+ #
4
+
5
+ package.xml
6
+
7
+ # LWC configuration files
8
+ **/jsconfig.json
9
+ **/.eslintrc.json
10
+
11
+ # LWC Jest
12
+ **/__tests__/**
13
+
14
+ node_modules/
15
+ .DS_Store
@@ -0,0 +1,2 @@
1
+ schema: '../../../../../schema.graphql'
2
+ documents: 'src/**/*.{graphql,js,ts,jsx,tsx}'
@@ -0,0 +1,9 @@
1
+ node_modules
2
+ dist
3
+ build
4
+ .vite
5
+ coverage
6
+ *.min.js
7
+ *.min.css
8
+ *.map
9
+ package-lock.json
@@ -0,0 +1,11 @@
1
+ {
2
+ "semi": true,
3
+ "trailingComma": "es5",
4
+ "singleQuote": true,
5
+ "printWidth": 80,
6
+ "tabWidth": 2,
7
+ "useTabs": false,
8
+ "bracketSpacing": true,
9
+ "arrowParens": "avoid",
10
+ "endOfLine": "lf"
11
+ }
@@ -0,0 +1,10 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
+
6
+ # [1.59.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.58.2...v1.59.0) (2026-02-27)
7
+
8
+ ### Features
9
+
10
+ - auto bump base react app versions and fix issue with base ui-bundle json ([#175](https://github.com/salesforce-experience-platform-emu/webapps/issues/175)) ([048b5a8](https://github.com/salesforce-experience-platform-emu/webapps/commit/048b5a8449c899fc923aeebc3c76bc5bf1c5e0d4))
@@ -0,0 +1,35 @@
1
+ # React External App
2
+
3
+ A React template for customer-facing apps on the Salesforce platform. Includes authentication, global search, and an Experience Cloud site container. Built with React, Vite, TypeScript, and Tailwind/shadcn.
4
+
5
+ For project-level details (metadata, deploy), see the [project README](../../../../../../README.md).
6
+
7
+ ## Prerequisites
8
+
9
+ ```bash
10
+ npm install
11
+ ```
12
+
13
+ ## Run (development)
14
+
15
+ ```bash
16
+ npm run dev
17
+ ```
18
+
19
+ Starts the Vite dev server (default: http://localhost:5173).
20
+
21
+ ## Build
22
+
23
+ ```bash
24
+ npm run build
25
+ ```
26
+
27
+ Writes the production bundle to `dist/` inside the UI Bundle folder.
28
+
29
+ ## Test
30
+
31
+ ```bash
32
+ npm test
33
+ ```
34
+
35
+ Runs the unit test suite (Vitest).
@@ -0,0 +1,95 @@
1
+ schema: '../../../../../schema.graphql'
2
+ documents: 'src/**/*.{graphql,ts,tsx}'
3
+ generates:
4
+ src/api/graphql-operations-types.ts:
5
+ plugins:
6
+ - 'graphql-codegen-typescript-operation-types'
7
+ - 'typescript-operations'
8
+ config:
9
+ onlyOperationTypes: true
10
+ skipTypename: true
11
+ preResolveTypes: true
12
+ scalars:
13
+ # String-serialized scalars
14
+ JSON:
15
+ input: 'string'
16
+ output: 'string'
17
+ Date:
18
+ input: 'string'
19
+ output: 'string'
20
+ DateTime:
21
+ input: 'string'
22
+ output: 'string'
23
+ Time:
24
+ input: 'string'
25
+ output: 'string'
26
+ Email:
27
+ input: 'string'
28
+ output: 'string'
29
+ Url:
30
+ input: 'string'
31
+ output: 'string'
32
+ PhoneNumber:
33
+ input: 'string'
34
+ output: 'string'
35
+ Picklist:
36
+ input: 'string'
37
+ output: 'string'
38
+ MultiPicklist:
39
+ input: 'string'
40
+ output: 'string'
41
+ TextArea:
42
+ input: 'string'
43
+ output: 'string'
44
+ LongTextArea:
45
+ input: 'string'
46
+ output: 'string'
47
+ RichTextArea:
48
+ input: 'string'
49
+ output: 'string'
50
+ EncryptedString:
51
+ input: 'string'
52
+ output: 'string'
53
+ Base64:
54
+ input: 'string'
55
+ output: 'string'
56
+ IdOrRef:
57
+ input: 'string'
58
+ output: 'string'
59
+ # BigDecimal-serialized scalars (accepts number or string, returns number)
60
+ Currency:
61
+ input: 'number | string'
62
+ output: 'number'
63
+ BigDecimal:
64
+ input: 'number | string'
65
+ output: 'number'
66
+ Double:
67
+ input: 'number | string'
68
+ output: 'number'
69
+ Percent:
70
+ input: 'number | string'
71
+ output: 'number'
72
+ Longitude:
73
+ input: 'number | string'
74
+ output: 'number'
75
+ Latitude:
76
+ input: 'number | string'
77
+ output: 'number'
78
+ # Integer-like scalars
79
+ Long:
80
+ input: 'number'
81
+ output: 'number'
82
+ BigInteger:
83
+ input: 'number'
84
+ output: 'number'
85
+ Short:
86
+ input: 'number'
87
+ output: 'number'
88
+ Byte:
89
+ input: 'number'
90
+ output: 'number'
91
+ Char:
92
+ input: 'number'
93
+ output: 'number'
94
+ overwrite: true
95
+ ignoreNoDocuments: true
@@ -0,0 +1,18 @@
1
+ {
2
+ "style": "new-york",
3
+ "rsc": true,
4
+ "tailwind": {
5
+ "config": "",
6
+ "css": "styles/global.css",
7
+ "baseColor": "neutral",
8
+ "cssVariables": true
9
+ },
10
+ "iconLibrary": "lucide",
11
+ "aliases": {
12
+ "components": "@/components",
13
+ "utils": "@/lib/utils",
14
+ "ui": "@/components/ui",
15
+ "lib": "@/lib",
16
+ "hooks": "@/hooks"
17
+ }
18
+ }
@@ -0,0 +1,17 @@
1
+ import { test, expect } from '@playwright/test';
2
+
3
+ test.describe('base-react-app', () => {
4
+ test('home page loads and shows welcome content', async ({ page }) => {
5
+ await page.goto('/');
6
+ await expect(page.getByRole('heading', { name: 'Home' })).toBeVisible();
7
+ await expect(
8
+ page.getByText('Welcome to your React application.')
9
+ ).toBeVisible();
10
+ });
11
+
12
+ test('not found route shows 404', async ({ page }) => {
13
+ await page.goto('/non-existent-route');
14
+ await expect(page.getByRole('heading', { name: '404' })).toBeVisible();
15
+ await expect(page.getByText('Page not found')).toBeVisible();
16
+ });
17
+ });
@@ -0,0 +1,169 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { dirname } from 'node:path';
5
+ import js from '@eslint/js';
6
+ import tseslint from '@typescript-eslint/eslint-plugin';
7
+ import tsparser from '@typescript-eslint/parser';
8
+ import react from 'eslint-plugin-react';
9
+ import reactHooks from 'eslint-plugin-react-hooks';
10
+ import reactRefresh from 'eslint-plugin-react-refresh';
11
+ import globals from 'globals';
12
+ import graphqlPlugin from '@graphql-eslint/eslint-plugin';
13
+
14
+ const __dirname = dirname(fileURLToPath(import.meta.url));
15
+ const schemaPath = resolve(__dirname, '../../../../../schema.graphql');
16
+ const schemaExists = existsSync(schemaPath);
17
+
18
+ const config = [
19
+ // Global ignores
20
+ {
21
+ ignores: [
22
+ 'build/**/*',
23
+ 'dist/**/*',
24
+ 'coverage/**/*',
25
+ 'src/api/graphql-operations-types.ts',
26
+ ],
27
+ },
28
+ // Config files and build tools (first to avoid inheritance)
29
+ {
30
+ files: ['*.config.{js,ts}', 'vite.config.ts'],
31
+ languageOptions: {
32
+ parser: tsparser,
33
+ parserOptions: {
34
+ ecmaVersion: 'latest',
35
+ sourceType: 'module',
36
+ },
37
+ globals: {
38
+ ...globals.node,
39
+ __dirname: 'readonly',
40
+ process: 'readonly',
41
+ },
42
+ },
43
+ plugins: {
44
+ '@typescript-eslint': tseslint,
45
+ },
46
+ rules: {
47
+ '@typescript-eslint/no-var-requires': 'off',
48
+ },
49
+ },
50
+ // Main TypeScript/React files
51
+ {
52
+ files: ['**/*.{ts,tsx}'],
53
+ ignores: [
54
+ 'coverage',
55
+ 'dist',
56
+ 'node_modules',
57
+ 'build',
58
+ '*.config.{js,ts}',
59
+ 'vite.config.ts',
60
+ ],
61
+ languageOptions: {
62
+ ecmaVersion: 2020,
63
+ sourceType: 'module',
64
+ parser: tsparser,
65
+ parserOptions: {
66
+ ecmaFeatures: {
67
+ jsx: true,
68
+ },
69
+ ecmaVersion: 'latest',
70
+ sourceType: 'module',
71
+ project: './tsconfig.json',
72
+ },
73
+ globals: {
74
+ ...globals.browser,
75
+ JSX: 'readonly',
76
+ React: 'readonly',
77
+ process: 'readonly',
78
+ },
79
+ },
80
+ plugins: {
81
+ react,
82
+ 'react-hooks': reactHooks,
83
+ 'react-refresh': reactRefresh,
84
+ '@typescript-eslint': tseslint,
85
+ },
86
+ rules: {
87
+ ...js.configs.recommended.rules,
88
+ ...tseslint.configs.recommended.rules,
89
+ ...react.configs.recommended.rules,
90
+ ...reactHooks.configs.recommended.rules,
91
+ 'react/react-in-jsx-scope': 'off',
92
+ 'react/prop-types': 'off',
93
+ 'react/jsx-no-comment-textnodes': 'off',
94
+ 'react/no-unescaped-entities': 'off',
95
+ '@typescript-eslint/no-unused-vars': [
96
+ 'error',
97
+ {
98
+ argsIgnorePattern: '^_',
99
+ varsIgnorePattern: '^_',
100
+ caughtErrorsIgnorePattern: '^_',
101
+ ignoreRestSiblings: true,
102
+ },
103
+ ],
104
+ '@typescript-eslint/explicit-function-return-type': 'off',
105
+ '@typescript-eslint/explicit-module-boundary-types': 'off',
106
+ '@typescript-eslint/no-explicit-any': 'off',
107
+ 'react-hooks/set-state-in-effect': 'warn',
108
+ },
109
+ settings: {
110
+ react: {
111
+ version: 'detect',
112
+ },
113
+ },
114
+ },
115
+ // Test files
116
+ {
117
+ files: [
118
+ '**/*.test.{ts,tsx}',
119
+ '**/test/**/*.{ts,tsx}',
120
+ 'src/test/**/*.{ts,tsx}',
121
+ ],
122
+ languageOptions: {
123
+ parser: tsparser,
124
+ globals: {
125
+ ...globals.browser,
126
+ ...globals.node,
127
+ global: 'writable',
128
+ JSX: 'readonly',
129
+ },
130
+ },
131
+ rules: {
132
+ '@typescript-eslint/no-explicit-any': 'off',
133
+ },
134
+ },
135
+ ];
136
+
137
+ // Only add GraphQL rules when schema exists (e.g. after graphql:schema).
138
+ // In CI or when schema is not checked in, skip so lint succeeds.
139
+ if (schemaExists) {
140
+ config.push(
141
+ {
142
+ files: ['**/*.{ts,tsx}'],
143
+ processor: graphqlPlugin.processor,
144
+ },
145
+ {
146
+ files: ['**/*.graphql'],
147
+ languageOptions: {
148
+ parser: graphqlPlugin.parser,
149
+ parserOptions: {
150
+ graphQLConfig: {
151
+ schema: '../../../../../schema.graphql',
152
+ },
153
+ },
154
+ },
155
+ plugins: {
156
+ '@graphql-eslint': graphqlPlugin,
157
+ },
158
+ rules: {
159
+ '@graphql-eslint/no-anonymous-operations': 'error',
160
+ '@graphql-eslint/no-duplicate-fields': 'error',
161
+ '@graphql-eslint/known-fragment-names': 'error',
162
+ '@graphql-eslint/no-undefined-variables': 'error',
163
+ '@graphql-eslint/no-unused-variables': 'error',
164
+ },
165
+ }
166
+ );
167
+ }
168
+
169
+ export default config;
@@ -0,0 +1,12 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Welcome to React App</title>
7
+ </head>
8
+ <body>
9
+ <div id="root"></div>
10
+ <script type="module" src="src/app.tsx"></script>
11
+ </body>
12
+ </html>
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "base-react-app",
3
+ "private": true,
4
+ "version": "1.59.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "dev:design": "vite --mode design",
9
+ "build": "tsc -b && vite build",
10
+ "build:e2e": "npm run build && node scripts/rewrite-e2e-assets.mjs",
11
+ "lint": "eslint .",
12
+ "preview": "vite preview",
13
+ "test": "vitest",
14
+ "graphql:codegen": "graphql-codegen",
15
+ "graphql:schema": "node scripts/get-graphql-schema.mjs"
16
+ },
17
+ "dependencies": {
18
+ "@salesforce/sdk-data": "file:../../../../../../../../../sdk/sdk-data",
19
+ "@salesforce/ui-bundle": "file:../../../../../../../../../ui-bundle",
20
+ "@tailwindcss/vite": "^4.1.17",
21
+ "class-variance-authority": "^0.7.1",
22
+ "clsx": "^2.1.1",
23
+ "date-fns": "^4.1.0",
24
+ "lucide-react": "^0.562.0",
25
+ "radix-ui": "^1.4.3",
26
+ "react": "^19.2.0",
27
+ "react-day-picker": "^9.14.0",
28
+ "react-dom": "^19.2.0",
29
+ "react-router": "^7.10.1",
30
+ "shadcn": "^3.8.5",
31
+ "sonner": "^1.7.0",
32
+ "tailwind-merge": "^3.5.0",
33
+ "tailwindcss": "^4.1.17",
34
+ "tw-animate-css": "^1.4.0",
35
+ "@tanstack/react-form": "^1.27.7",
36
+ "zod": "^4.3.5"
37
+ },
38
+ "devDependencies": {
39
+ "@eslint/js": "^9.39.1",
40
+ "@graphql-codegen/cli": "^6.1.0",
41
+ "@graphql-codegen/typescript": "^5.0.6",
42
+ "@graphql-codegen/typescript-operations": "^5.0.6",
43
+ "@graphql-eslint/eslint-plugin": "^4.1.0",
44
+ "@graphql-tools/utils": "^11.0.0",
45
+ "@playwright/test": "^1.49.0",
46
+ "@salesforce/vite-plugin-ui-bundle": "file:../../../../../../../../../vite-plugin-ui-bundle",
47
+ "@testing-library/jest-dom": "^6.6.3",
48
+ "@testing-library/react": "^16.1.0",
49
+ "@testing-library/user-event": "^14.5.2",
50
+ "@types/node": "^24.10.1",
51
+ "@types/react": "^19.2.5",
52
+ "@types/react-dom": "^19.2.3",
53
+ "@vitejs/plugin-react": "^5.1.1",
54
+ "@vitest/ui": "^4.0.17",
55
+ "eslint": "^9.39.1",
56
+ "eslint-plugin-react": "^7.37.2",
57
+ "eslint-plugin-react-hooks": "^7.0.1",
58
+ "eslint-plugin-react-refresh": "^0.4.24",
59
+ "globals": "^16.5.0",
60
+ "graphql": "^16.11.0",
61
+ "graphql-codegen-typescript-operation-types": "^2.0.2",
62
+ "jsdom": "^25.0.1",
63
+ "serve": "^14.2.5",
64
+ "typescript": "~5.9.3",
65
+ "typescript-eslint": "^8.46.4",
66
+ "vite": "^7.2.4",
67
+ "vite-plugin-graphql-codegen": "^3.6.3",
68
+ "vitest": "^4.0.17"
69
+ }
70
+ }
@@ -0,0 +1,24 @@
1
+ import { defineConfig, devices } from '@playwright/test';
2
+
3
+ const E2E_PORT = 5175;
4
+
5
+ export default defineConfig({
6
+ testDir: './e2e',
7
+ fullyParallel: true,
8
+ forbidOnly: !!process.env.CI,
9
+ retries: process.env.CI ? 2 : 0,
10
+ workers: process.env.CI ? 1 : undefined,
11
+ reporter: 'html',
12
+ use: {
13
+ baseURL: `http://localhost:${E2E_PORT}`,
14
+ trace: 'on-first-retry',
15
+ },
16
+ projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
17
+ webServer: {
18
+ // Serve built dist/ with static server so e2e works in CI without SF org (vite preview runs plugin and can fail)
19
+ command: `npx serve dist -l ${E2E_PORT}`,
20
+ url: `http://localhost:${E2E_PORT}`,
21
+ reuseExistingServer: !process.env.CI,
22
+ timeout: process.env.CI ? 120_000 : 60_000,
23
+ },
24
+ });
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <UIBundle xmlns="http://soap.sforce.com/2006/04/metadata">
3
+ <masterLabel>reactexternalapp</masterLabel>
4
+ <description>A Salesforce UI Bundle.</description>
5
+ <isActive>true</isActive>
6
+ <version>1</version>
7
+ <target>Experience</target>
8
+ </UIBundle>