@salesforce/templates 66.5.6 → 66.6.1

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 (352) hide show
  1. package/lib/generators/projectGenerator.d.ts +1 -1
  2. package/lib/generators/projectGenerator.js +3 -3
  3. package/lib/generators/projectGenerator.js.map +1 -1
  4. package/lib/templates/project/{reactb2e → reactexternalapp}/AGENT.md +6 -10
  5. package/lib/templates/project/{reactb2e → reactexternalapp}/CHANGELOG.md +59 -0
  6. package/lib/templates/project/{reactb2x → reactexternalapp}/README.md +14 -14
  7. package/lib/templates/project/{reactb2x/_p_/_m_/_d_/_s_/_a1_/appreacttemplateb2x1.digitalExperience-meta.xml → reactexternalapp/_p_/_m_/_d_/_s_/_a1_/reactexternalapp1.digitalExperience-meta.xml} +1 -1
  8. package/lib/templates/project/{reactb2x/_p_/_m_/_d_/_s_/_a1_/sfdc_cms__site/appreacttemplateb2x1 → reactexternalapp/_p_/_m_/_d_/_s_/_a1_/sfdc_cms__site/reactexternalapp1}/_meta.json +1 -1
  9. package/lib/templates/project/{reactb2x/_p_/_m_/_d_/_s_/_a1_/sfdc_cms__site/appreacttemplateb2x1 → reactexternalapp/_p_/_m_/_d_/_s_/_a1_/sfdc_cms__site/reactexternalapp1}/content.json +3 -3
  10. package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/README.md +2 -2
  11. package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/package.json +3 -3
  12. package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/appreacttemplateb2x.webapplication-meta.xml → reactexternalapp/_p_/_m_/_w_/_a_/reactexternalapp.webapplication-meta.xml} +1 -1
  13. package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/pages/AccountSearch.tsx +82 -54
  14. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/FilterContext.tsx +73 -0
  15. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/PaginationControls.tsx +109 -0
  16. package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/BooleanFilter.tsx +16 -36
  17. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateFilter.tsx +121 -0
  18. package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateRangeFilter.tsx +14 -23
  19. package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/MultiSelectFilter.tsx +18 -26
  20. package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/NumericRangeFilter.tsx +22 -39
  21. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +37 -0
  22. package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SelectFilter.tsx +30 -34
  23. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +74 -0
  24. package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useAsyncData.ts +1 -0
  25. package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useCachedAsyncData.ts +1 -0
  26. package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useObjectSearchParams.ts +22 -0
  27. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/api/graphqlClient.ts +25 -0
  28. package/lib/templates/project/{reactb2x/_p_/_m_/digitalExperienceConfigs/appreacttemplateb2x1.digitalExperienceConfig → reactexternalapp/_p_/_m_/digitalExperienceConfigs/reactexternalapp1.digitalExperienceConfig} +3 -3
  29. package/lib/templates/project/{reactb2x/_p_/_m_/networks/appreacttemplateb2x.network → reactexternalapp/_p_/_m_/networks/reactexternalapp.network} +4 -4
  30. package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/package.xml +4 -4
  31. package/lib/templates/project/{reactb2x/_p_/_m_/sites/appreacttemplateb2x.site → reactexternalapp/_p_/_m_/sites/reactexternalapp.site} +2 -2
  32. package/lib/templates/project/{reactb2e → reactexternalapp}/_r_/webapp-data.md +5 -5
  33. package/lib/templates/project/{reactb2x → reactexternalapp}/_r_/webapp-ui.md +2 -2
  34. package/lib/templates/project/{reactb2e → reactexternalapp}/package-lock.json +2 -2
  35. package/lib/templates/project/{reactb2e → reactexternalapp}/package.json +1 -1
  36. package/lib/templates/project/{reactb2x/_r_/skills/using-salesforce-data → reactexternalapp/scripts}/graphql-search.sh +73 -21
  37. package/lib/templates/project/{reactb2x → reactinternalapp}/AGENT.md +6 -10
  38. package/lib/templates/project/{reactb2x → reactinternalapp}/CHANGELOG.md +59 -0
  39. package/lib/templates/project/{reactb2e → reactinternalapp}/README.md +9 -9
  40. package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/README.md +2 -2
  41. package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/package.json +3 -3
  42. package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/appreacttemplateb2e.webapplication-meta.xml → reactinternalapp/_p_/_m_/_w_/_a_/reactinternalapp.webapplication-meta.xml} +1 -1
  43. package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/pages/AccountSearch.tsx +82 -54
  44. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/FilterContext.tsx +73 -0
  45. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/PaginationControls.tsx +109 -0
  46. package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/BooleanFilter.tsx +16 -36
  47. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateFilter.tsx +121 -0
  48. package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateRangeFilter.tsx +14 -23
  49. package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/MultiSelectFilter.tsx +18 -26
  50. package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/NumericRangeFilter.tsx +22 -39
  51. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +37 -0
  52. package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SelectFilter.tsx +30 -34
  53. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +74 -0
  54. package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useAsyncData.ts +1 -0
  55. package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useCachedAsyncData.ts +1 -0
  56. package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useObjectSearchParams.ts +22 -0
  57. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/api/graphqlClient.ts +25 -0
  58. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/routes.tsx +21 -0
  59. package/lib/templates/project/{reactb2x → reactinternalapp}/_r_/webapp-data.md +5 -5
  60. package/lib/templates/project/{reactb2e → reactinternalapp}/_r_/webapp-ui.md +2 -2
  61. package/lib/templates/project/{reactb2x → reactinternalapp}/package-lock.json +2 -2
  62. package/lib/templates/project/{reactb2x → reactinternalapp}/package.json +1 -1
  63. package/lib/templates/project/{reactb2e/_r_/skills/using-salesforce-data → reactinternalapp/scripts}/graphql-search.sh +73 -21
  64. package/lib/templates/webapplication/reactbasic/package.json +3 -3
  65. package/lib/templates/webapplication/reactbasic/src/api/graphqlClient.ts +25 -0
  66. package/lib/utils/template-placeholders.js +8 -1
  67. package/lib/utils/template-placeholders.js.map +1 -1
  68. package/lib/utils/types.d.ts +1 -1
  69. package/lib/utils/webappTemplateUtils.d.ts +12 -4
  70. package/lib/utils/webappTemplateUtils.js +46 -14
  71. package/lib/utils/webappTemplateUtils.js.map +1 -1
  72. package/package.json +5 -5
  73. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/FilterPanel.tsx +0 -127
  74. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/PaginationControls.tsx +0 -151
  75. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateFilter.tsx +0 -165
  76. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +0 -40
  77. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +0 -77
  78. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/pages/TestAccPage.tsx +0 -19
  79. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/routes.tsx +0 -38
  80. package/lib/templates/project/reactb2e/_r_/skills/building-data-visualization/SKILL.md +0 -72
  81. package/lib/templates/project/reactb2e/_r_/skills/building-data-visualization/implementation/bar-line-chart.md +0 -316
  82. package/lib/templates/project/reactb2e/_r_/skills/building-data-visualization/implementation/dashboard-layout.md +0 -189
  83. package/lib/templates/project/reactb2e/_r_/skills/building-data-visualization/implementation/donut-chart.md +0 -181
  84. package/lib/templates/project/reactb2e/_r_/skills/building-data-visualization/implementation/stat-card.md +0 -150
  85. package/lib/templates/project/reactb2e/_r_/skills/building-react-components/SKILL.md +0 -96
  86. package/lib/templates/project/reactb2e/_r_/skills/building-react-components/implementation/component.md +0 -78
  87. package/lib/templates/project/reactb2e/_r_/skills/building-react-components/implementation/header-footer.md +0 -132
  88. package/lib/templates/project/reactb2e/_r_/skills/building-react-components/implementation/page.md +0 -93
  89. package/lib/templates/project/reactb2e/_r_/skills/configuring-csp-trusted-sites/SKILL.md +0 -90
  90. package/lib/templates/project/reactb2e/_r_/skills/configuring-csp-trusted-sites/implementation/metadata-format.md +0 -281
  91. package/lib/templates/project/reactb2e/_r_/skills/configuring-webapp-metadata/SKILL.md +0 -158
  92. package/lib/templates/project/reactb2e/_r_/skills/creating-webapp/SKILL.md +0 -140
  93. package/lib/templates/project/reactb2e/_r_/skills/deploying-to-salesforce/SKILL.md +0 -226
  94. package/lib/templates/project/reactb2e/_r_/skills/implementing-file-upload/SKILL.md +0 -396
  95. package/lib/templates/project/reactb2e/_r_/skills/installing-webapp-features/SKILL.md +0 -210
  96. package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/SKILL.md +0 -186
  97. package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/constraints.md +0 -134
  98. package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/examples.md +0 -132
  99. package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/style-tokens.md +0 -101
  100. package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/troubleshooting.md +0 -57
  101. package/lib/templates/project/reactb2e/_r_/skills/using-salesforce-data/SKILL.md +0 -363
  102. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/FilterPanel.tsx +0 -127
  103. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/PaginationControls.tsx +0 -151
  104. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateFilter.tsx +0 -165
  105. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +0 -40
  106. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +0 -77
  107. package/lib/templates/project/reactb2x/_r_/skills/building-data-visualization/SKILL.md +0 -72
  108. package/lib/templates/project/reactb2x/_r_/skills/building-data-visualization/implementation/bar-line-chart.md +0 -316
  109. package/lib/templates/project/reactb2x/_r_/skills/building-data-visualization/implementation/dashboard-layout.md +0 -189
  110. package/lib/templates/project/reactb2x/_r_/skills/building-data-visualization/implementation/donut-chart.md +0 -181
  111. package/lib/templates/project/reactb2x/_r_/skills/building-data-visualization/implementation/stat-card.md +0 -150
  112. package/lib/templates/project/reactb2x/_r_/skills/building-react-components/SKILL.md +0 -96
  113. package/lib/templates/project/reactb2x/_r_/skills/building-react-components/implementation/component.md +0 -78
  114. package/lib/templates/project/reactb2x/_r_/skills/building-react-components/implementation/header-footer.md +0 -132
  115. package/lib/templates/project/reactb2x/_r_/skills/building-react-components/implementation/page.md +0 -93
  116. package/lib/templates/project/reactb2x/_r_/skills/configuring-csp-trusted-sites/SKILL.md +0 -90
  117. package/lib/templates/project/reactb2x/_r_/skills/configuring-csp-trusted-sites/implementation/metadata-format.md +0 -281
  118. package/lib/templates/project/reactb2x/_r_/skills/configuring-webapp-metadata/SKILL.md +0 -158
  119. package/lib/templates/project/reactb2x/_r_/skills/creating-webapp/SKILL.md +0 -140
  120. package/lib/templates/project/reactb2x/_r_/skills/deploying-to-salesforce/SKILL.md +0 -226
  121. package/lib/templates/project/reactb2x/_r_/skills/implementing-file-upload/SKILL.md +0 -396
  122. package/lib/templates/project/reactb2x/_r_/skills/installing-webapp-features/SKILL.md +0 -210
  123. package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/SKILL.md +0 -186
  124. package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/constraints.md +0 -134
  125. package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/examples.md +0 -132
  126. package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/style-tokens.md +0 -101
  127. package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/troubleshooting.md +0 -57
  128. package/lib/templates/project/reactb2x/_r_/skills/using-salesforce-data/SKILL.md +0 -363
  129. /package/lib/templates/project/{reactb2e → reactexternalapp}/.forceignore +0 -0
  130. /package/lib/templates/project/{reactb2e → reactexternalapp}/.husky/pre-commit +0 -0
  131. /package/lib/templates/project/{reactb2e → reactexternalapp}/.prettierignore +0 -0
  132. /package/lib/templates/project/{reactb2e → reactexternalapp}/.prettierrc +0 -0
  133. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/.forceignore +0 -0
  134. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/.graphqlrc.yml +0 -0
  135. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/.prettierignore +0 -0
  136. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/.prettierrc +0 -0
  137. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/CHANGELOG.md +0 -0
  138. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/codegen.yml +0 -0
  139. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/components.json +0 -0
  140. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/e2e/app.spec.ts +0 -0
  141. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/eslint.config.js +0 -0
  142. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/index.html +0 -0
  143. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/playwright.config.ts +0 -0
  144. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/scripts/get-graphql-schema.mjs +0 -0
  145. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/scripts/rewrite-e2e-assets.mjs +0 -0
  146. /package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/accountSearchService.ts +0 -0
  147. /package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/distinctAccountIndustries.graphql +0 -0
  148. /package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/distinctAccountTypes.graphql +0 -0
  149. /package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/getAccountDetail.graphql +0 -0
  150. /package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/searchAccounts.graphql +0 -0
  151. /package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/pages/AccountObjectDetailPage.tsx +0 -0
  152. /package/lib/templates/project/{reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/pages/Home.tsx +0 -0
  153. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/api/objectSearchService.ts +0 -0
  154. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ActiveFilters.tsx +0 -0
  155. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ObjectBreadcrumb.tsx +0 -0
  156. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SearchBar.tsx +0 -0
  157. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SortControl.tsx +0 -0
  158. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/debounce.ts +0 -0
  159. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/fieldUtils.ts +0 -0
  160. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/filterUtils.ts +0 -0
  161. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/sortUtils.ts +0 -0
  162. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/api/userProfileApi.ts +0 -0
  163. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/authHelpers.ts +0 -0
  164. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/authenticationConfig.ts +0 -0
  165. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/context/AuthContext.tsx +0 -0
  166. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/footers/footer-link.tsx +0 -0
  167. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/forms/auth-form.tsx +0 -0
  168. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/forms/submit-button.tsx +0 -0
  169. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/hooks/form.tsx +0 -0
  170. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/hooks/useCountdownTimer.ts +0 -0
  171. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/hooks/useRetryWithBackoff.ts +0 -0
  172. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/layout/card-skeleton.tsx +0 -0
  173. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/layout/centered-page-layout.tsx +0 -0
  174. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/layouts/AuthAppLayout.tsx +0 -0
  175. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/layouts/authenticationRouteLayout.tsx +0 -0
  176. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/layouts/privateRouteLayout.tsx +0 -0
  177. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ChangePassword.tsx +0 -0
  178. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ForgotPassword.tsx +0 -0
  179. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Login.tsx +0 -0
  180. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Profile.tsx +0 -0
  181. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Register.tsx +0 -0
  182. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ResetPassword.tsx +0 -0
  183. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/sessionTimeout/SessionTimeoutValidator.tsx +0 -0
  184. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/sessionTimeout/sessionTimeService.ts +0 -0
  185. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/sessionTimeout/sessionTimeoutConfig.ts +0 -0
  186. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/_f_/authentication/utils/helpers.ts +0 -0
  187. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/api/graphql-operations-types.ts +0 -0
  188. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/app.tsx +0 -0
  189. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/appLayout.tsx +0 -0
  190. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/book.svg +0 -0
  191. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/copy.svg +0 -0
  192. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/rocket.svg +0 -0
  193. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/star.svg +0 -0
  194. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/images/codey-1.png +0 -0
  195. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/images/codey-2.png +0 -0
  196. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/images/codey-3.png +0 -0
  197. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/assets/images/vibe-codey.svg +0 -0
  198. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/alerts/status-alert.tsx +0 -0
  199. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/layouts/card-layout.tsx +0 -0
  200. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/alert.tsx +0 -0
  201. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/badge.tsx +0 -0
  202. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/breadcrumb.tsx +0 -0
  203. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/button.tsx +0 -0
  204. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/calendar.tsx +0 -0
  205. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/card.tsx +0 -0
  206. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/checkbox.tsx +0 -0
  207. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/collapsible.tsx +0 -0
  208. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/datePicker.tsx +0 -0
  209. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/dialog.tsx +0 -0
  210. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/field.tsx +0 -0
  211. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/index.ts +0 -0
  212. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/input.tsx +0 -0
  213. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/label.tsx +0 -0
  214. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/pagination.tsx +0 -0
  215. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/popover.tsx +0 -0
  216. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/select.tsx +0 -0
  217. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/separator.tsx +0 -0
  218. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/skeleton.tsx +0 -0
  219. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/sonner.tsx +0 -0
  220. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/spinner.tsx +0 -0
  221. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/table.tsx +0 -0
  222. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/components/ui/tabs.tsx +0 -0
  223. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/lib/utils.ts +0 -0
  224. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/navigationMenu.tsx +0 -0
  225. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/pages/Home.tsx +0 -0
  226. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/pages/NotFound.tsx +0 -0
  227. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/router-utils.tsx +0 -0
  228. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/_w_/_a_/src/routes.tsx +0 -0
  229. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/src/styles/global.css +0 -0
  230. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/tsconfig.json +0 -0
  231. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/tsconfig.node.json +0 -0
  232. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/vite-env.d.ts +0 -0
  233. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/vite.config.ts +0 -0
  234. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/vitest-env.d.ts +0 -0
  235. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/vitest.config.ts +0 -0
  236. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/vitest.setup.ts +0 -0
  237. /package/lib/templates/project/{reactb2e → reactexternalapp}/_p_/_m_/_w_/_a_/webapplication.json +0 -0
  238. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppAuthUtils.cls +0 -0
  239. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppAuthUtils.cls-meta.xml +0 -0
  240. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppChangePassword.cls +0 -0
  241. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppChangePassword.cls-meta.xml +0 -0
  242. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppForgotPassword.cls +0 -0
  243. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppForgotPassword.cls-meta.xml +0 -0
  244. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppLogin.cls +0 -0
  245. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppLogin.cls-meta.xml +0 -0
  246. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppRegistration.cls +0 -0
  247. /package/lib/templates/project/{reactb2x → reactexternalapp}/_p_/_m_/classes/WebAppRegistration.cls-meta.xml +0 -0
  248. /package/lib/templates/project/{reactb2e → reactexternalapp}/config/project-scratch-def.json +0 -0
  249. /package/lib/templates/project/{reactb2e → reactexternalapp}/eslint.config.js +0 -0
  250. /package/lib/templates/project/{reactb2e → reactexternalapp}/jest.config.js +0 -0
  251. /package/lib/templates/project/{reactb2e → reactexternalapp}/scripts/apex/hello.apex +0 -0
  252. /package/lib/templates/project/{reactb2e → reactexternalapp}/scripts/prepare-import-unique-fields.js +0 -0
  253. /package/lib/templates/project/{reactb2e → reactexternalapp}/scripts/setup-cli.mjs +0 -0
  254. /package/lib/templates/project/{reactb2e → reactexternalapp}/scripts/sf-project-setup.mjs +0 -0
  255. /package/lib/templates/project/{reactb2e → reactexternalapp}/scripts/soql/account.soql +0 -0
  256. /package/lib/templates/project/{reactb2e → reactexternalapp}/sfdx-project.json +0 -0
  257. /package/lib/templates/project/{reactb2x → reactinternalapp}/.forceignore +0 -0
  258. /package/lib/templates/project/{reactb2x → reactinternalapp}/.husky/pre-commit +0 -0
  259. /package/lib/templates/project/{reactb2x → reactinternalapp}/.prettierignore +0 -0
  260. /package/lib/templates/project/{reactb2x → reactinternalapp}/.prettierrc +0 -0
  261. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/.forceignore +0 -0
  262. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/.graphqlrc.yml +0 -0
  263. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/.prettierignore +0 -0
  264. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/.prettierrc +0 -0
  265. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/CHANGELOG.md +0 -0
  266. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/codegen.yml +0 -0
  267. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/components.json +0 -0
  268. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/e2e/app.spec.ts +0 -0
  269. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/eslint.config.js +0 -0
  270. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/index.html +0 -0
  271. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/playwright.config.ts +0 -0
  272. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/scripts/get-graphql-schema.mjs +0 -0
  273. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/scripts/rewrite-e2e-assets.mjs +0 -0
  274. /package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/accountSearchService.ts +0 -0
  275. /package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/distinctAccountIndustries.graphql +0 -0
  276. /package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/distinctAccountTypes.graphql +0 -0
  277. /package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/getAccountDetail.graphql +0 -0
  278. /package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/api/query/searchAccounts.graphql +0 -0
  279. /package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/pages/AccountObjectDetailPage.tsx +0 -0
  280. /package/lib/templates/project/{reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__ → reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_}/pages/Home.tsx +0 -0
  281. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/api/objectSearchService.ts +0 -0
  282. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ActiveFilters.tsx +0 -0
  283. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ObjectBreadcrumb.tsx +0 -0
  284. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SearchBar.tsx +0 -0
  285. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SortControl.tsx +0 -0
  286. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/debounce.ts +0 -0
  287. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/fieldUtils.ts +0 -0
  288. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/filterUtils.ts +0 -0
  289. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/sortUtils.ts +0 -0
  290. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/api/graphql-operations-types.ts +0 -0
  291. /package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/app.tsx +0 -0
  292. /package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/appLayout.tsx +0 -0
  293. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/book.svg +0 -0
  294. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/copy.svg +0 -0
  295. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/rocket.svg +0 -0
  296. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/icons/star.svg +0 -0
  297. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/images/codey-1.png +0 -0
  298. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/images/codey-2.png +0 -0
  299. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/images/codey-3.png +0 -0
  300. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/assets/images/vibe-codey.svg +0 -0
  301. /package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/AgentforceConversationClient.tsx +0 -0
  302. /package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/__inherit_AgentforceConversationClient.tsx +0 -0
  303. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/alerts/status-alert.tsx +0 -0
  304. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/layouts/card-layout.tsx +0 -0
  305. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/alert.tsx +0 -0
  306. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/badge.tsx +0 -0
  307. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/breadcrumb.tsx +0 -0
  308. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/button.tsx +0 -0
  309. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/calendar.tsx +0 -0
  310. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/card.tsx +0 -0
  311. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/checkbox.tsx +0 -0
  312. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/collapsible.tsx +0 -0
  313. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/datePicker.tsx +0 -0
  314. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/dialog.tsx +0 -0
  315. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/field.tsx +0 -0
  316. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/index.ts +0 -0
  317. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/input.tsx +0 -0
  318. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/label.tsx +0 -0
  319. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/pagination.tsx +0 -0
  320. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/popover.tsx +0 -0
  321. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/select.tsx +0 -0
  322. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/separator.tsx +0 -0
  323. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/skeleton.tsx +0 -0
  324. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/sonner.tsx +0 -0
  325. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/spinner.tsx +0 -0
  326. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/table.tsx +0 -0
  327. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/components/ui/tabs.tsx +0 -0
  328. /package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/index.ts +0 -0
  329. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/lib/utils.ts +0 -0
  330. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/navigationMenu.tsx +0 -0
  331. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/pages/Home.tsx +0 -0
  332. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/pages/NotFound.tsx +0 -0
  333. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/router-utils.tsx +0 -0
  334. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/src/styles/global.css +0 -0
  335. /package/lib/templates/project/{reactb2e → reactinternalapp}/_p_/_m_/_w_/_a_/src/types/conversation.ts +0 -0
  336. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/tsconfig.json +0 -0
  337. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/tsconfig.node.json +0 -0
  338. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/vite-env.d.ts +0 -0
  339. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/vite.config.ts +0 -0
  340. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/vitest-env.d.ts +0 -0
  341. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/vitest.config.ts +0 -0
  342. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/vitest.setup.ts +0 -0
  343. /package/lib/templates/project/{reactb2x → reactinternalapp}/_p_/_m_/_w_/_a_/webapplication.json +0 -0
  344. /package/lib/templates/project/{reactb2x → reactinternalapp}/config/project-scratch-def.json +0 -0
  345. /package/lib/templates/project/{reactb2x → reactinternalapp}/eslint.config.js +0 -0
  346. /package/lib/templates/project/{reactb2x → reactinternalapp}/jest.config.js +0 -0
  347. /package/lib/templates/project/{reactb2x → reactinternalapp}/scripts/apex/hello.apex +0 -0
  348. /package/lib/templates/project/{reactb2x → reactinternalapp}/scripts/prepare-import-unique-fields.js +0 -0
  349. /package/lib/templates/project/{reactb2x → reactinternalapp}/scripts/setup-cli.mjs +0 -0
  350. /package/lib/templates/project/{reactb2x → reactinternalapp}/scripts/sf-project-setup.mjs +0 -0
  351. /package/lib/templates/project/{reactb2x → reactinternalapp}/scripts/soql/account.soql +0 -0
  352. /package/lib/templates/project/{reactb2x → reactinternalapp}/sfdx-project.json +0 -0
@@ -7,52 +7,46 @@ import {
7
7
  } from "../../../../components/ui/select";
8
8
  import { Label } from "../../../../components/ui/label";
9
9
  import { cn } from "../../../../lib/utils";
10
- import type { FilterFieldConfig, ActiveFilterValue } from "../../utils/filterUtils";
10
+ import { useFilterField } from "../FilterContext";
11
+ import type { ActiveFilterValue } from "../../utils/filterUtils";
11
12
 
12
13
  const ALL_VALUE = "__all__";
13
14
 
14
15
  interface SelectFilterProps extends Omit<React.ComponentProps<"div">, "onChange"> {
15
- config: FilterFieldConfig;
16
- value: ActiveFilterValue | undefined;
17
- onChange: (value: ActiveFilterValue | undefined) => void;
18
- labelProps?: React.ComponentProps<typeof Label>;
19
- controlProps?: Omit<
20
- React.ComponentProps<typeof SelectFilterControl>,
21
- "config" | "value" | "onChange"
22
- >;
23
- helpTextProps?: React.ComponentProps<"p">;
16
+ field: string;
17
+ label: string;
18
+ options: Array<{ value: string; label: string }>;
19
+ helpText?: string;
24
20
  }
25
21
 
26
22
  export function SelectFilter({
27
- config,
28
- value,
29
- onChange,
23
+ field,
24
+ label,
25
+ options,
26
+ helpText,
30
27
  className,
31
- labelProps,
32
- controlProps,
33
- helpTextProps,
34
28
  ...props
35
29
  }: SelectFilterProps) {
30
+ const { value, onChange } = useFilterField(field);
36
31
  return (
37
32
  <div className={cn("space-y-1.5", className)} {...props}>
38
- <Label htmlFor={`filter-${config.field}`} {...labelProps}>
39
- {labelProps?.children ?? config.label}
40
- </Label>
41
- <SelectFilterControl config={config} value={value} onChange={onChange} {...controlProps} />
42
- {config.helpText && (
43
- <p
44
- {...helpTextProps}
45
- className={cn("text-xs text-muted-foreground", helpTextProps?.className)}
46
- >
47
- {helpTextProps?.children ?? config.helpText}
48
- </p>
49
- )}
33
+ <Label htmlFor={`filter-${field}`}>{label}</Label>
34
+ <SelectFilterControl
35
+ field={field}
36
+ label={label}
37
+ options={options}
38
+ value={value}
39
+ onChange={onChange}
40
+ />
41
+ {helpText && <p className="text-xs text-muted-foreground">{helpText}</p>}
50
42
  </div>
51
43
  );
52
44
  }
53
45
 
54
46
  interface SelectFilterControlProps {
55
- config: FilterFieldConfig;
47
+ field: string;
48
+ label: string;
49
+ options: Array<{ value: string; label: string }>;
56
50
  value: ActiveFilterValue | undefined;
57
51
  onChange: (value: ActiveFilterValue | undefined) => void;
58
52
  triggerProps?: React.ComponentProps<typeof SelectTrigger>;
@@ -60,7 +54,9 @@ interface SelectFilterControlProps {
60
54
  }
61
55
 
62
56
  export function SelectFilterControl({
63
- config,
57
+ field,
58
+ label,
59
+ options,
64
60
  value,
65
61
  onChange,
66
62
  triggerProps,
@@ -73,20 +69,20 @@ export function SelectFilterControl({
73
69
  if (v === ALL_VALUE) {
74
70
  onChange(undefined);
75
71
  } else {
76
- onChange({ field: config.field, label: config.label, type: "picklist", value: v });
72
+ onChange({ field, label, type: "picklist", value: v });
77
73
  }
78
74
  }}
79
75
  >
80
76
  <SelectTrigger
81
- id={`filter-${config.field}`}
77
+ id={`filter-${field}`}
82
78
  {...triggerProps}
83
79
  className={cn("w-full", triggerProps?.className)}
84
80
  >
85
- <SelectValue placeholder={`Select ${config.label.toLowerCase()}`} />
81
+ <SelectValue placeholder={`Select ${label.toLowerCase()}`} />
86
82
  </SelectTrigger>
87
83
  <SelectContent {...contentProps}>
88
84
  <SelectItem value={ALL_VALUE}>All</SelectItem>
89
- {config.options?.map((opt) => (
85
+ {options.map((opt) => (
90
86
  <SelectItem key={opt.value} value={opt.value}>
91
87
  {opt.label}
92
88
  </SelectItem>
@@ -0,0 +1,74 @@
1
+ import { Input } from "../../../../components/ui/input";
2
+ import { Label } from "../../../../components/ui/label";
3
+ import { cn } from "../../../../lib/utils";
4
+ import { useFilterField } from "../FilterContext";
5
+ import type { ActiveFilterValue } from "../../utils/filterUtils";
6
+
7
+ interface TextFilterProps extends Omit<React.ComponentProps<"div">, "onChange"> {
8
+ field: string;
9
+ label: string;
10
+ placeholder?: string;
11
+ helpText?: string;
12
+ }
13
+
14
+ export function TextFilter({
15
+ field,
16
+ label,
17
+ placeholder,
18
+ helpText,
19
+ className,
20
+ ...props
21
+ }: TextFilterProps) {
22
+ const { value, onChange } = useFilterField(field);
23
+ return (
24
+ <div className={cn("space-y-1.5", className)} {...props}>
25
+ <Label htmlFor={`filter-${field}`}>{label}</Label>
26
+ <TextFilterInput
27
+ field={field}
28
+ label={label}
29
+ placeholder={placeholder}
30
+ value={value}
31
+ onChange={onChange}
32
+ />
33
+ {helpText && <p className="text-xs text-muted-foreground">{helpText}</p>}
34
+ </div>
35
+ );
36
+ }
37
+
38
+ interface TextFilterInputProps extends Omit<
39
+ React.ComponentProps<typeof Input>,
40
+ "onChange" | "value"
41
+ > {
42
+ field: string;
43
+ label: string;
44
+ value: ActiveFilterValue | undefined;
45
+ onChange: (value: ActiveFilterValue | undefined) => void;
46
+ }
47
+
48
+ export function TextFilterInput({
49
+ field,
50
+ label,
51
+ value,
52
+ onChange,
53
+ className,
54
+ ...props
55
+ }: TextFilterInputProps) {
56
+ return (
57
+ <Input
58
+ id={`filter-${field}`}
59
+ type="text"
60
+ placeholder={props.placeholder ?? `Filter by ${label.toLowerCase()}...`}
61
+ value={value?.value ?? ""}
62
+ onChange={(e) => {
63
+ const v = e.target.value;
64
+ if (v) {
65
+ onChange({ field, label, type: "text", value: v });
66
+ } else {
67
+ onChange(undefined);
68
+ }
69
+ }}
70
+ className={cn(className)}
71
+ {...props}
72
+ />
73
+ );
74
+ }
@@ -38,6 +38,7 @@ export function useAsyncData<T>(
38
38
  if (!cancelled) setData(result);
39
39
  })
40
40
  .catch((err) => {
41
+ console.error(err);
41
42
  if (!cancelled) setError(err instanceof Error ? err.message : "An error occurred");
42
43
  })
43
44
  .finally(() => {
@@ -166,6 +166,7 @@ export function useCachedAsyncData<T>(
166
166
  }
167
167
  })
168
168
  .catch((err) => {
169
+ console.error(err);
169
170
  if (!cancelled) setError(err instanceof Error ? err.message : "An error occurred");
170
171
  })
171
172
  .finally(() => {
@@ -14,6 +14,28 @@ export interface PaginationConfig {
14
14
  validPageSizes: number[];
15
15
  }
16
16
 
17
+ export interface UseObjectSearchParamsReturn<TFilter, TOrderBy> {
18
+ filters: {
19
+ active: ActiveFilterValue[];
20
+ set: (field: string, value: ActiveFilterValue | undefined) => void;
21
+ remove: (field: string) => void;
22
+ };
23
+ sort: {
24
+ current: SortState | null;
25
+ set: (sort: SortState | null) => void;
26
+ };
27
+ query: { where: TFilter; orderBy: TOrderBy };
28
+ pagination: {
29
+ pageSize: number;
30
+ pageIndex: number;
31
+ afterCursor: string | undefined;
32
+ setPageSize: (size: number) => void;
33
+ goToNextPage: (cursor: string) => void;
34
+ goToPreviousPage: () => void;
35
+ };
36
+ resetAll: () => void;
37
+ }
38
+
17
39
  /**
18
40
  * Manages filter, sort, and cursor-based pagination state for an object search page.
19
41
  *
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Thin GraphQL client: createDataSDK + data.graphql with centralized error handling.
3
+ * Use with gql-tagged queries and generated operation types for type-safe calls.
4
+ */
5
+ import { createDataSDK } from '@salesforce/sdk-data';
6
+
7
+ export async function executeGraphQL<TData, TVariables>(
8
+ query: string,
9
+ variables?: TVariables
10
+ ): Promise<TData> {
11
+ const data = await createDataSDK();
12
+ // SDK types graphql() first param as string; at runtime it may accept gql DocumentNode too
13
+ const response = await data.graphql?.<TData, TVariables>(query, variables);
14
+
15
+ if (!response) {
16
+ throw new Error('GraphQL response is undefined');
17
+ }
18
+
19
+ if (response?.errors?.length) {
20
+ const msg = response.errors.map(e => e.message).join('; ');
21
+ throw new Error(`GraphQL Error: ${msg}`);
22
+ }
23
+
24
+ return response.data;
25
+ }
@@ -1,8 +1,8 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <DigitalExperienceConfig xmlns="http://soap.sforce.com/2006/04/metadata">
3
- <label>appreacttemplateb2x</label>
3
+ <label>reactexternalapp</label>
4
4
  <site>
5
- <urlPathPrefix>appreacttemplateb2x</urlPathPrefix>
5
+ <urlPathPrefix>reactexternalapp</urlPathPrefix>
6
6
  </site>
7
- <space>site/appreacttemplateb2x1</space>
7
+ <space>site/reactexternalapp1</space>
8
8
  </DigitalExperienceConfig>
@@ -6,7 +6,7 @@
6
6
  <communityRoles/>
7
7
  <disableReputationRecordConversations>true</disableReputationRecordConversations>
8
8
  <emailSenderAddress>trialorgfarmforu@salesforce.com.invalid.invalid</emailSenderAddress>
9
- <emailSenderName>appreacttemplateb2x</emailSenderName>
9
+ <emailSenderName>reactexternalapp</emailSenderName>
10
10
  <embeddedLoginEnabled>false</embeddedLoginEnabled>
11
11
  <enableApexCDNCaching>true</enableApexCDNCaching>
12
12
  <enableCustomVFErrorPageOverrides>false</enableCustomVFErrorPageOverrides>
@@ -45,16 +45,16 @@
45
45
  <selfRegProfilePageOverrideSetting>Designer</selfRegProfilePageOverrideSetting>
46
46
  </networkPageOverrides>
47
47
  <newSenderAddress>trialorgfarmforu@salesforce.com</newSenderAddress>
48
- <picassoSite>appreacttemplateb2x1</picassoSite>
48
+ <picassoSite>reactexternalapp1</picassoSite>
49
49
  <selfRegistration>false</selfRegistration>
50
50
  <sendWelcomeEmail>true</sendWelcomeEmail>
51
- <site>appreacttemplateb2x</site>
51
+ <site>reactexternalapp</site>
52
52
  <siteArchiveStatus>NotArchived</siteArchiveStatus>
53
53
  <status>Live</status>
54
54
  <tabs>
55
55
  <defaultTab>home</defaultTab>
56
56
  <standardTab>Chatter</standardTab>
57
57
  </tabs>
58
- <urlPathPrefix>appreacttemplateb2xvforcesite</urlPathPrefix>
58
+ <urlPathPrefix>reactexternalappvforcesite</urlPathPrefix>
59
59
  <welcomeTemplate>unfiled$public/CommunityWelcomeEmailTemplate</welcomeTemplate>
60
60
  </Network>
@@ -1,19 +1,19 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <Package xmlns="http://soap.sforce.com/2006/04/metadata">
3
3
  <types>
4
- <members>appreacttemplateb2x</members>
4
+ <members>reactexternalapp</members>
5
5
  <name>CustomSite</name>
6
6
  </types>
7
7
  <types>
8
- <members>site/appreacttemplateb2x1</members>
8
+ <members>site/reactexternalapp1</members>
9
9
  <name>DigitalExperienceBundle</name>
10
10
  </types>
11
11
  <types>
12
- <members>appreacttemplateb2x1</members>
12
+ <members>reactexternalapp1</members>
13
13
  <name>DigitalExperienceConfig</name>
14
14
  </types>
15
15
  <types>
16
- <members>appreacttemplateb2x</members>
16
+ <members>reactexternalapp</members>
17
17
  <name>Network</name>
18
18
  </types>
19
19
  <version>66.0</version>
@@ -19,7 +19,7 @@
19
19
  <genericErrorPage>Exception</genericErrorPage>
20
20
  <inMaintenancePage>InMaintenance</inMaintenancePage>
21
21
  <indexPage>CommunitiesLanding</indexPage>
22
- <masterLabel>appreacttemplateb2x</masterLabel>
22
+ <masterLabel>reactexternalapp</masterLabel>
23
23
  <redirectToCustomDomain>false</redirectToCustomDomain>
24
24
  <referrerPolicyOriginWhenCrossOrigin>true</referrerPolicyOriginWhenCrossOrigin>
25
25
  <selfRegPage>CommunitiesSelfReg</selfRegPage>
@@ -27,5 +27,5 @@
27
27
  <!-- <siteAdmin>epic.out.d1d3a2d722c8@orgfarm.salesforce.com</siteAdmin> -->
28
28
  <!-- <siteGuestRecordDefaultOwner>epic.out.d1d3a2d722c8@orgfarm.salesforce.com</siteGuestRecordDefaultOwner> -->
29
29
  <siteType>ChatterNetwork</siteType>
30
- <urlPathPrefix>appreacttemplateb2xvforcesite</urlPathPrefix>
30
+ <urlPathPrefix>reactexternalappvforcesite</urlPathPrefix>
31
31
  </CustomSite>
@@ -74,10 +74,10 @@ Map user intent to PascalCase names ("accounts" → `Account`), then **run the s
74
74
 
75
75
  ```bash
76
76
  # From project root — look up all relevant schema info for one or more entities
77
- bash .a4drules/skills/using-salesforce-data/graphql-search.sh Account
77
+ bash scripts/graphql-search.sh Account
78
78
 
79
79
  # Multiple entities at once
80
- bash .a4drules/skills/using-salesforce-data/graphql-search.sh Account Contact Opportunity
80
+ bash scripts/graphql-search.sh Account Contact Opportunity
81
81
  ```
82
82
 
83
83
  The script outputs five sections per entity:
@@ -213,7 +213,7 @@ const fields = response?.data?.uiapi?.objectInfos?.[0]?.fields ?? [];
213
213
 
214
214
  ```bash
215
215
  # From project root — re-check the entity that caused the error
216
- bash .a4drules/skills/using-salesforce-data/graphql-search.sh <EntityName>
216
+ bash scripts/graphql-search.sh <EntityName>
217
217
  ```
218
218
 
219
219
  Then fix the query using the exact names from the script output.
@@ -310,7 +310,7 @@ const response = await sdk.graphql?.(GET_CURRENT_USER);
310
310
  |---------|----------|-----|
311
311
  | `npm run graphql:schema` | webapp dir | Script in webapp's package.json |
312
312
  | `npx eslint <file>` | webapp dir | Reads eslint.config.js |
313
- | `bash .a4drules/skills/using-salesforce-data/graphql-search.sh <Entity>` | project root | Schema lookup |
313
+ | `bash scripts/graphql-search.sh <Entity>` | project root | Schema lookup |
314
314
  | `sf api request rest` | project root | Needs sfdx-project.json |
315
315
 
316
316
  ---
@@ -322,7 +322,7 @@ const response = await sdk.graphql?.(GET_CURRENT_USER);
322
322
  Run the search script to get all relevant schema info in one step:
323
323
 
324
324
  ```bash
325
- bash .a4drules/skills/using-salesforce-data/graphql-search.sh <EntityName>
325
+ bash scripts/graphql-search.sh <EntityName>
326
326
  ```
327
327
 
328
328
  | Script Output Section | Used For |
@@ -8,9 +8,9 @@ When any task involves creating a new UI, frontend, page, dashboard, form, or us
8
8
  2. The app must live under `<sfdx-source>/webapplications/<AppName>/` as a WebApplication bundle.
9
9
  3. Do not build new UIs as LWC components, Aura components, or Visualforce pages.
10
10
 
11
- Invoke the `creating-webapp` skill (`.a4drules/skills/creating-webapp/`) for the full setup workflow.
11
+ For setup from the project root, use `node scripts/setup-cli.mjs --help` and the options documented there.
12
12
 
13
13
  ## Data Access (MUST FOLLOW)
14
14
 
15
15
  - **Never hardcode data in the app.** All data displayed in the UI must come from live Salesforce data fetching — no static arrays, mock objects, or placeholder values in production code.
16
- - **Always invoke the `using-salesforce-data` skill** (`.a4drules/skills/using-salesforce-data/`) before writing any data access code. All implementation must be derived from that skill.
16
+ - **Follow `.a4drules/webapp-data.md`** before writing any data access code. All implementation must match those rules (Data SDK, supported APIs, GraphQL workflow).
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@salesforce/webapp-template-base-sfdx-project-experimental",
3
- "version": "1.112.5",
3
+ "version": "1.114.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@salesforce/webapp-template-base-sfdx-project-experimental",
9
- "version": "1.112.5",
9
+ "version": "1.114.0",
10
10
  "license": "SEE LICENSE IN LICENSE.txt",
11
11
  "devDependencies": {
12
12
  "@lwc/eslint-plugin-lwc": "^3.3.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/webapp-template-base-sfdx-project-experimental",
3
- "version": "1.112.5",
3
+ "version": "1.114.0",
4
4
  "description": "Base SFDX project template",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "publishConfig": {
@@ -1,20 +1,23 @@
1
1
  #!/usr/bin/env bash
2
+ set -euo pipefail # exit on error (-e), undefined vars (-u), and propagate pipeline failures (-o pipefail)
2
3
  # graphql-search.sh — Look up one or more Salesforce entities in schema.graphql.
3
4
  #
4
5
  # Run from the SFDX project root (where schema.graphql lives):
5
- # bash .a4drules/skills/using-salesforce-data/graphql-search.sh Account
6
- # bash .a4drules/skills/using-salesforce-data/graphql-search.sh Account Contact Opportunity
6
+ # bash scripts/graphql-search.sh Account
7
+ # bash scripts/graphql-search.sh Account Contact Opportunity
7
8
  #
8
9
  # Pass a custom schema path with -s / --schema:
9
- # bash .a4drules/skills/using-salesforce-data/graphql-search.sh -s /path/to/schema.graphql Account
10
- # bash .a4drules/skills/using-salesforce-data/graphql-search.sh --schema ./other/schema.graphql Account Contact
10
+ # bash scripts/graphql-search.sh -s /path/to/schema.graphql Account
11
+ # bash scripts/graphql-search.sh --schema ./other/schema.graphql Account Contact
11
12
  #
12
13
  # Output sections per entity:
13
- # 1. Type definition — all fields and relationships
14
- # 2. Filter options — <Entity>_Filter input (for `where:`)
15
- # 3. Sort options — <Entity>_OrderBy input (for `orderBy:`)
16
- # 4. Create input — <Entity>CreateRepresentation (for create mutations)
17
- # 5. Update input — <Entity>UpdateRepresentation (for update mutations)
14
+ # 1. Type definition — all fields and relationships
15
+ # 2. Filter options — <Entity>_Filter input (for `where:`)
16
+ # 3. Sort options — <Entity>_OrderBy input (for `orderBy:`)
17
+ # 4. Create mutation wrapper — <Entity>CreateInput
18
+ # 5. Create mutation fields — <Entity>CreateRepresentation (for create mutations)
19
+ # 6. Update mutation wrapper — <Entity>UpdateInput
20
+ # 7. Update mutation fields — <Entity>UpdateRepresentation (for update mutations)
18
21
 
19
22
  SCHEMA="./schema.graphql"
20
23
 
@@ -62,6 +65,19 @@ if [ ! -f "$SCHEMA" ]; then
62
65
  exit 1
63
66
  fi
64
67
 
68
+ if [ ! -r "$SCHEMA" ]; then
69
+ echo "ERROR: schema.graphql is not readable at $SCHEMA"
70
+ echo " Check file permissions: ls -la $SCHEMA"
71
+ exit 1
72
+ fi
73
+
74
+ if [ ! -s "$SCHEMA" ]; then
75
+ echo "ERROR: schema.graphql is empty at $SCHEMA"
76
+ echo " Regenerate it from the webapp dir:"
77
+ echo " cd force-app/main/default/webapplications/<app-name> && npm run graphql:schema"
78
+ exit 1
79
+ fi
80
+
65
81
  # ── Helper: extract lines from a grep match through the closing brace ────────
66
82
  # Prints up to MAX_LINES lines after (and including) the first match of PATTERN.
67
83
  # Uses a generous line count — blocks are always closed by a "}" line.
@@ -72,68 +88,104 @@ extract_block() {
72
88
  local max_lines="$3"
73
89
 
74
90
  local match
75
- match=$(grep -nE "$pattern" "$SCHEMA" | head -1)
91
+ local grep_exit=0
92
+ match=$(grep -nE "$pattern" "$SCHEMA" | head -1) || grep_exit=$?
93
+
94
+ if [ "$grep_exit" -eq 2 ]; then
95
+ echo " ERROR: grep failed on pattern: $pattern" >&2
96
+ return 1
97
+ fi
76
98
 
77
99
  if [ -z "$match" ]; then
78
100
  echo " (not found: $pattern)"
79
- return
101
+ return 3
80
102
  fi
81
103
 
82
104
  echo "### $label"
83
105
  grep -E "$pattern" "$SCHEMA" -A "$max_lines" | \
84
106
  awk '/^\}$/{print; exit} {print}' | \
85
- head -n "$max_lines"
107
+ head -n "$max_lines" || true
86
108
  echo ""
87
109
  }
88
110
 
89
111
  # ── Main loop ────────────────────────────────────────────────────────────────
90
112
 
91
113
  for ENTITY in "$@"; do
114
+ # Validate entity name: must be a valid PascalCase identifier (letters, digits, underscores)
115
+ if [[ ! "$ENTITY" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]]; then
116
+ echo "ERROR: Invalid entity name: '$ENTITY'"
117
+ echo " Entity names must start with a letter or underscore, followed by letters, digits, or underscores."
118
+ echo " Examples: Account, My_Custom_Object__c"
119
+ continue
120
+ fi
121
+
92
122
  echo ""
93
123
  echo "======================================================================"
94
124
  echo " SCHEMA LOOKUP: $ENTITY"
95
125
  echo "======================================================================"
96
126
  echo ""
97
127
 
128
+ found=0
129
+
130
+ # Helper: call extract_block, track matches, surface errors
131
+ try_extract() {
132
+ local rc=0
133
+ extract_block "$@" || rc=$?
134
+ if [ "$rc" -eq 0 ]; then
135
+ found=$((found + 1))
136
+ elif [ "$rc" -eq 1 ]; then
137
+ echo " Aborting lookup for '$ENTITY' due to grep error" >&2
138
+ fi
139
+ # rc=3 is not-found — continue silently (already printed by extract_block)
140
+ }
141
+
98
142
  # 1. Type definition — all fields and relationships
99
- extract_block \
143
+ try_extract \
100
144
  "Type definition — fields and relationships" \
101
145
  "^type ${ENTITY} implements Record" \
102
146
  200
103
147
 
104
148
  # 2. Filter input — used in `where:` arguments
105
- extract_block \
149
+ try_extract \
106
150
  "Filter options — use in where: { ... }" \
107
151
  "^input ${ENTITY}_Filter" \
108
152
  100
109
153
 
110
154
  # 3. OrderBy input — used in `orderBy:` arguments
111
- extract_block \
155
+ try_extract \
112
156
  "Sort options — use in orderBy: { ... }" \
113
157
  "^input ${ENTITY}_OrderBy" \
114
158
  60
115
159
 
116
- # 4. Create mutation inputs
117
- extract_block \
160
+ # 4. Create mutation wrapper
161
+ try_extract \
118
162
  "Create mutation wrapper — ${ENTITY}CreateInput" \
119
163
  "^input ${ENTITY}CreateInput" \
120
164
  10
121
165
 
122
- extract_block \
166
+ # 5. Create mutation fields
167
+ try_extract \
123
168
  "Create mutation fields — ${ENTITY}CreateRepresentation" \
124
169
  "^input ${ENTITY}CreateRepresentation" \
125
170
  100
126
171
 
127
- # 5. Update mutation inputs
128
- extract_block \
172
+ # 6. Update mutation wrapper
173
+ try_extract \
129
174
  "Update mutation wrapper — ${ENTITY}UpdateInput" \
130
175
  "^input ${ENTITY}UpdateInput" \
131
176
  10
132
177
 
133
- extract_block \
178
+ # 7. Update mutation fields
179
+ try_extract \
134
180
  "Update mutation fields — ${ENTITY}UpdateRepresentation" \
135
181
  "^input ${ENTITY}UpdateRepresentation" \
136
182
  100
137
183
 
184
+ if [ "$found" -eq 0 ]; then
185
+ echo "WARNING: No schema entries found for '$ENTITY'."
186
+ echo " - Names are PascalCase (e.g., 'Account' not 'account')"
187
+ echo " - Custom objects may need deployment first"
188
+ fi
189
+
138
190
  echo ""
139
191
  done
@@ -54,22 +54,18 @@ cd <sfdx-source>/webapplications/<appName>
54
54
 
55
55
  **Before finishing changes:** run `npm run build` and `npm run lint` from the web app directory; both must succeed.
56
56
 
57
- ## Agent skills (.a4drules/skills/)
57
+ ## Agent rules (.a4drules/)
58
58
 
59
- This project includes **.a4drules/skills/** at the project root. Follow them when generating or editing code.
59
+ Markdown rules at the project root under **.a4drules/** define platform constraints:
60
60
 
61
- - **Creating Webapp** (`.a4drules/skills/creating-webapp/`): First steps, skills-first protocol, React/TypeScript constraints, deployment order, navigation, aesthetics, and code quality.
62
- - **Building React Components** (`.a4drules/skills/building-react-components/`): Component/page/header-footer workflow, TypeScript standards, and mandatory lint+build verification.
63
- - **Accessing Data** (`.a4drules/skills/accessing-data/`): Use for all Salesforce data fetches. Enforces Data SDK usage (`createDataSDK()` + `sdk.graphql` or `sdk.fetch`); GraphQL preferred, fetch when GraphQL is not sufficient.
64
- - **Fetching REST API** (`.a4drules/skills/fetching-rest-api/`): Use when implementing Chatter, Connect REST, Apex REST, UI API REST, or Einstein LLM calls via `sdk.fetch`.
65
- - **Using GraphQL** (`.a4drules/skills/using-graphql/`): Use when implementing Salesforce GraphQL queries or mutations. Sub-skills: `exploring-graphql-schema`, `generating-graphql-read-query`, `generating-graphql-mutation-query`.
66
- - **Deploying to Salesforce** (`.a4drules/skills/deploying-to-salesforce/`): Use when deploying metadata, fetching GraphQL schema, or generating deploy/setup commands. Enforces deploy → permset → schema → codegen order; schema refetch after metadata deployment.
61
+ - **`.a4drules/webapp-ui.md`** Salesforce Web Application UI (scaffold with `sf webapp generate`, no LWC/Aura for new UI).
62
+ - **`.a4drules/webapp-data.md`** Salesforce data access (Data SDK only, supported APIs, GraphQL workflow, `scripts/graphql-search.sh` for schema lookup).
67
63
 
68
64
  When rules refer to "web app directory" or `<sfdx-source>/webapplications/<appName>/`, resolve `<sfdx-source>` from `sfdx-project.json` and use the **actual app folder name** for this project.
69
65
 
70
66
  ## Deploying
71
67
 
72
- **Deployment order:** Metadata (objects, permission sets) must be deployed before GraphQL schema fetch. After any metadata deployment, re-run `npm run graphql:schema` and `npm run graphql:codegen` from the webapp dir. **One-command setup:** `node scripts/setup-cli.mjs --target-org <alias>` runs deploy → permset → schema → codegen in the correct order. Invoke the `deploying-to-salesforce` skill for full guidance.
68
+ **Deployment order:** Metadata (objects, permission sets) must be deployed before GraphQL schema fetch. After any metadata deployment, re-run `npm run graphql:schema` and `npm run graphql:codegen` from the webapp dir. **One-command setup:** `node scripts/setup-cli.mjs --target-org <alias>` runs deploy → permset → schema → codegen in the correct order.
73
69
 
74
70
  From **this project root** (resolve the actual SFDX source path from `sfdx-project.json`):
75
71
 
@@ -88,4 +84,4 @@ sf project deploy start --source-dir <packageDir> --target-org <alias>
88
84
 
89
85
  - **UI**: shadcn/ui + Tailwind. Import from `@/components/ui/...`.
90
86
  - **Entry**: Keep `App.tsx` and routes in `src/`; add features as new routes or sections, don't replace the app shell but you may modify it to match the requested design.
91
- - **Data (Salesforce)**: Invoke the `accessing-data` skill for all Salesforce data fetches. The skill enforces use of the Data SDK (`createDataSDK()` + `sdk.graphql` or `sdk.fetch`) — never use `fetch` or `axios` directly. GraphQL is preferred; use `sdk.fetch` when GraphQL is not sufficient (e.g., Chatter, Connect REST). For GraphQL implementation, invoke the `using-graphql` skill.
87
+ - **Data (Salesforce)**: Follow `.a4drules/webapp-data.md` for all Salesforce data access. Use the Data SDK (`createDataSDK()` + `sdk.graphql` or `sdk.fetch`) — never use `fetch` or `axios` directly. GraphQL is preferred; use `sdk.fetch` when GraphQL is not sufficient.