@salesforce/templates 66.5.4 → 66.5.6

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 (424) hide show
  1. package/lib/templates/project/.forceignore +3 -1
  2. package/lib/templates/project/reactb2e/AGENT.md +12 -2
  3. package/lib/templates/project/reactb2e/CHANGELOG.md +401 -0
  4. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/.forceignore +15 -0
  5. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/codegen.yml +1 -0
  6. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/eslint.config.js +44 -27
  7. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/index.html +0 -1
  8. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/package.json +7 -11
  9. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/accountSearchService.ts +46 -0
  10. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/distinctAccountIndustries.graphql +19 -0
  11. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/distinctAccountTypes.graphql +19 -0
  12. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/getAccountDetail.graphql +121 -0
  13. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/searchAccounts.graphql +51 -0
  14. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/pages/AccountObjectDetailPage.tsx +357 -0
  15. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/pages/AccountSearch.tsx +275 -0
  16. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/pages/Home.tsx +34 -0
  17. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/api/objectSearchService.ts +84 -0
  18. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ActiveFilters.tsx +89 -0
  19. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/FilterPanel.tsx +127 -0
  20. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ObjectBreadcrumb.tsx +66 -0
  21. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/PaginationControls.tsx +151 -0
  22. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SearchBar.tsx +41 -0
  23. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SortControl.tsx +143 -0
  24. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/BooleanFilter.tsx +94 -0
  25. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateFilter.tsx +165 -0
  26. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateRangeFilter.tsx +78 -0
  27. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/MultiSelectFilter.tsx +106 -0
  28. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/NumericRangeFilter.tsx +102 -0
  29. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +40 -0
  30. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SelectFilter.tsx +97 -0
  31. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +77 -0
  32. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useAsyncData.ts +53 -0
  33. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useCachedAsyncData.ts +183 -0
  34. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useObjectSearchParams.ts +225 -0
  35. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/debounce.ts +22 -0
  36. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/fieldUtils.ts +29 -0
  37. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/filterUtils.ts +372 -0
  38. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/sortUtils.ts +38 -0
  39. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/api/graphql-operations-types.ts +11260 -0
  40. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/app.tsx +4 -1
  41. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/appLayout.tsx +1 -1
  42. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/AgentforceConversationClient.tsx +33 -5
  43. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/alerts/status-alert.tsx +1 -1
  44. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/badge.tsx +48 -0
  45. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/breadcrumb.tsx +109 -0
  46. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/calendar.tsx +232 -0
  47. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/checkbox.tsx +32 -0
  48. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/collapsible.tsx +33 -0
  49. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/datePicker.tsx +127 -0
  50. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/popover.tsx +89 -0
  51. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/sonner.tsx +20 -0
  52. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/index.ts +3 -117
  53. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/pages/Home.tsx +10 -11
  54. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/pages/TestAccPage.tsx +1 -1
  55. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/routes.tsx +8 -20
  56. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/types/conversation.ts +14 -4
  57. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/tsconfig.json +7 -1
  58. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/vite.config.ts +17 -13
  59. package/lib/templates/project/reactb2e/_r_/skills/{webapp-react-data-visualization → building-data-visualization}/SKILL.md +3 -3
  60. package/lib/templates/project/reactb2e/_r_/skills/building-data-visualization/implementation/bar-line-chart.md +316 -0
  61. package/lib/templates/project/{reactb2x/_r_/skills/webapp-react-data-visualization → reactb2e/_r_/skills/building-data-visualization}/implementation/donut-chart.md +1 -1
  62. package/lib/templates/project/{reactb2x/_r_/skills/webapp-react → reactb2e/_r_/skills/building-react-components}/SKILL.md +21 -5
  63. package/lib/templates/project/reactb2e/_r_/skills/{webapp-csp-trusted-sites → configuring-csp-trusted-sites}/SKILL.md +1 -1
  64. package/lib/templates/project/{reactb2x/_r_/webapp-webapplication.md → reactb2e/_r_/skills/configuring-webapp-metadata/SKILL.md} +2 -3
  65. package/lib/templates/project/reactb2e/_r_/{webapp.md → skills/creating-webapp/SKILL.md} +46 -4
  66. package/lib/templates/project/reactb2e/_r_/skills/deploying-to-salesforce/SKILL.md +226 -0
  67. package/lib/templates/project/reactb2e/_r_/skills/{feature-react-file-upload-file-upload → implementing-file-upload}/SKILL.md +1 -1
  68. package/lib/templates/project/{reactb2x/_r_/skills/webapp-features → reactb2e/_r_/skills/installing-webapp-features}/SKILL.md +3 -3
  69. package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/SKILL.md +186 -0
  70. package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/constraints.md +134 -0
  71. package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/examples.md +132 -0
  72. package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/style-tokens.md +101 -0
  73. package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/troubleshooting.md +57 -0
  74. package/lib/templates/project/reactb2e/_r_/skills/using-salesforce-data/SKILL.md +363 -0
  75. package/lib/templates/project/reactb2e/_r_/skills/using-salesforce-data/graphql-search.sh +139 -0
  76. package/lib/templates/project/reactb2e/_r_/webapp-data.md +353 -0
  77. package/lib/templates/project/reactb2e/_r_/webapp-ui.md +16 -0
  78. package/lib/templates/project/reactb2e/eslint.config.js +7 -0
  79. package/lib/templates/project/reactb2e/package-lock.json +9995 -0
  80. package/lib/templates/project/reactb2e/package.json +12 -11
  81. package/lib/templates/project/reactb2e/scripts/setup-cli.mjs +61 -31
  82. package/lib/templates/project/reactb2e/scripts/sf-project-setup.mjs +66 -0
  83. package/lib/templates/project/reactb2x/AGENT.md +12 -2
  84. package/lib/templates/project/reactb2x/CHANGELOG.md +401 -0
  85. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/.forceignore +15 -0
  86. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/codegen.yml +1 -0
  87. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/eslint.config.js +44 -27
  88. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/index.html +0 -1
  89. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/package.json +8 -11
  90. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/accountSearchService.ts +46 -0
  91. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/distinctAccountIndustries.graphql +19 -0
  92. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/distinctAccountTypes.graphql +19 -0
  93. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/getAccountDetail.graphql +121 -0
  94. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/searchAccounts.graphql +51 -0
  95. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/pages/AccountObjectDetailPage.tsx +357 -0
  96. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/pages/AccountSearch.tsx +275 -0
  97. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/pages/Home.tsx +34 -0
  98. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/api/objectSearchService.ts +84 -0
  99. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ActiveFilters.tsx +89 -0
  100. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/FilterPanel.tsx +127 -0
  101. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ObjectBreadcrumb.tsx +66 -0
  102. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/PaginationControls.tsx +151 -0
  103. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SearchBar.tsx +41 -0
  104. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SortControl.tsx +143 -0
  105. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/BooleanFilter.tsx +94 -0
  106. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateFilter.tsx +165 -0
  107. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateRangeFilter.tsx +78 -0
  108. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/MultiSelectFilter.tsx +106 -0
  109. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/NumericRangeFilter.tsx +102 -0
  110. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +40 -0
  111. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SelectFilter.tsx +97 -0
  112. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +77 -0
  113. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useAsyncData.ts +53 -0
  114. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useCachedAsyncData.ts +183 -0
  115. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useObjectSearchParams.ts +225 -0
  116. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/debounce.ts +22 -0
  117. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/fieldUtils.ts +29 -0
  118. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/filterUtils.ts +372 -0
  119. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/sortUtils.ts +38 -0
  120. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/api/userProfileApi.ts +13 -13
  121. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/layouts/privateRouteLayout.tsx +10 -2
  122. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ChangePassword.tsx +2 -2
  123. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ForgotPassword.tsx +2 -2
  124. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Login.tsx +2 -2
  125. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Profile.tsx +26 -4
  126. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Register.tsx +2 -2
  127. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ResetPassword.tsx +2 -2
  128. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/sessionTimeout/SessionTimeoutValidator.tsx +8 -16
  129. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/sessionTimeout/sessionTimeService.ts +30 -42
  130. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/api/graphql-operations-types.ts +11260 -0
  131. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/app.tsx +3 -1
  132. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/alerts/status-alert.tsx +1 -1
  133. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/badge.tsx +48 -0
  134. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/breadcrumb.tsx +109 -0
  135. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/calendar.tsx +232 -0
  136. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/checkbox.tsx +32 -0
  137. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/collapsible.tsx +33 -0
  138. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/datePicker.tsx +127 -0
  139. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/popover.tsx +89 -0
  140. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/sonner.tsx +20 -0
  141. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/pages/Home.tsx +10 -11
  142. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/routes.tsx +9 -21
  143. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/tsconfig.json +7 -1
  144. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/vite.config.ts +17 -13
  145. package/lib/templates/project/reactb2x/_p_/_m_/networks/appreacttemplateb2x.network +1 -1
  146. package/lib/templates/project/reactb2x/_r_/skills/{webapp-react-data-visualization → building-data-visualization}/SKILL.md +3 -3
  147. package/lib/templates/project/reactb2x/_r_/skills/building-data-visualization/implementation/bar-line-chart.md +316 -0
  148. package/lib/templates/project/{reactb2e/_r_/skills/webapp-react-data-visualization → reactb2x/_r_/skills/building-data-visualization}/implementation/donut-chart.md +1 -1
  149. package/lib/templates/project/{reactb2e/_r_/skills/webapp-react → reactb2x/_r_/skills/building-react-components}/SKILL.md +21 -5
  150. package/lib/templates/project/reactb2x/_r_/skills/{webapp-csp-trusted-sites → configuring-csp-trusted-sites}/SKILL.md +1 -1
  151. package/lib/templates/project/{reactb2e/_r_/webapp-webapplication.md → reactb2x/_r_/skills/configuring-webapp-metadata/SKILL.md} +2 -3
  152. package/lib/templates/project/reactb2x/_r_/{webapp.md → skills/creating-webapp/SKILL.md} +46 -4
  153. package/lib/templates/project/reactb2x/_r_/skills/deploying-to-salesforce/SKILL.md +226 -0
  154. package/lib/templates/project/reactb2x/_r_/skills/{feature-react-file-upload-file-upload → implementing-file-upload}/SKILL.md +1 -1
  155. package/lib/templates/project/{reactb2e/_r_/skills/webapp-features → reactb2x/_r_/skills/installing-webapp-features}/SKILL.md +3 -3
  156. package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/SKILL.md +186 -0
  157. package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/constraints.md +134 -0
  158. package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/examples.md +132 -0
  159. package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/style-tokens.md +101 -0
  160. package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/troubleshooting.md +57 -0
  161. package/lib/templates/project/reactb2x/_r_/skills/using-salesforce-data/SKILL.md +363 -0
  162. package/lib/templates/project/reactb2x/_r_/skills/using-salesforce-data/graphql-search.sh +139 -0
  163. package/lib/templates/project/reactb2x/_r_/webapp-data.md +353 -0
  164. package/lib/templates/project/reactb2x/_r_/webapp-ui.md +16 -0
  165. package/lib/templates/project/reactb2x/eslint.config.js +7 -0
  166. package/lib/templates/project/reactb2x/package-lock.json +9995 -0
  167. package/lib/templates/project/reactb2x/package.json +12 -11
  168. package/lib/templates/project/reactb2x/scripts/setup-cli.mjs +61 -31
  169. package/lib/templates/project/reactb2x/scripts/sf-project-setup.mjs +66 -0
  170. package/lib/templates/webapplication/reactbasic/.forceignore +15 -0
  171. package/lib/templates/webapplication/reactbasic/codegen.yml +1 -0
  172. package/lib/templates/webapplication/reactbasic/eslint.config.js +44 -27
  173. package/lib/templates/webapplication/reactbasic/index.html +0 -1
  174. package/lib/templates/webapplication/reactbasic/package.json +6 -3
  175. package/lib/templates/webapplication/reactbasic/src/app.tsx +4 -1
  176. package/lib/templates/webapplication/reactbasic/src/components/alerts/status-alert.tsx +1 -1
  177. package/lib/templates/webapplication/reactbasic/src/components/ui/badge.tsx +48 -0
  178. package/lib/templates/webapplication/reactbasic/src/components/ui/breadcrumb.tsx +109 -0
  179. package/lib/templates/webapplication/reactbasic/src/components/ui/calendar.tsx +232 -0
  180. package/lib/templates/webapplication/reactbasic/src/components/ui/checkbox.tsx +32 -0
  181. package/lib/templates/webapplication/reactbasic/src/components/ui/collapsible.tsx +33 -0
  182. package/lib/templates/webapplication/reactbasic/src/components/ui/datePicker.tsx +127 -0
  183. package/lib/templates/webapplication/reactbasic/src/components/ui/popover.tsx +89 -0
  184. package/lib/templates/webapplication/reactbasic/src/components/ui/sonner.tsx +20 -0
  185. package/lib/templates/webapplication/reactbasic/tsconfig.json +7 -1
  186. package/lib/templates/webapplication/reactbasic/vite.config.ts +17 -13
  187. package/lib/utils/template-placeholders.js +7 -0
  188. package/lib/utils/template-placeholders.js.map +1 -1
  189. package/lib/utils/webappTemplateUtils.d.ts +3 -1
  190. package/lib/utils/webappTemplateUtils.js +4 -1
  191. package/lib/utils/webappTemplateUtils.js.map +1 -1
  192. package/package.json +6 -6
  193. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailFields.tsx +0 -55
  194. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailForm.tsx +0 -146
  195. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailHeader.tsx +0 -34
  196. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailLayoutSections.tsx +0 -80
  197. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/Section.tsx +0 -108
  198. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/SectionRow.tsx +0 -20
  199. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/UiApiDetailForm.tsx +0 -140
  200. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FieldValueDisplay.tsx +0 -73
  201. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedAddress.tsx +0 -29
  202. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedEmail.tsx +0 -17
  203. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedPhone.tsx +0 -24
  204. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedText.tsx +0 -11
  205. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedUrl.tsx +0 -29
  206. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FilterField.tsx +0 -54
  207. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FilterInput.tsx +0 -55
  208. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FilterSelect.tsx +0 -72
  209. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FiltersPanel.tsx +0 -380
  210. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/forms/filters-form.tsx +0 -114
  211. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/forms/submit-button.tsx +0 -47
  212. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/GlobalSearchInput.tsx +0 -114
  213. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/ResultCardFields.tsx +0 -71
  214. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchHeader.tsx +0 -31
  215. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchPagination.tsx +0 -144
  216. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchResultCard.tsx +0 -136
  217. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchResultsPanel.tsx +0 -197
  218. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/shared/LoadingFallback.tsx +0 -61
  219. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/objectDetailService.ts +0 -102
  220. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/objectInfoGraphQLService.ts +0 -137
  221. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/objectInfoService.ts +0 -95
  222. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/recordListGraphQLService.ts +0 -364
  223. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/constants.ts +0 -39
  224. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/filters/FilterInput.tsx +0 -55
  225. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/filters/FilterSelect.tsx +0 -72
  226. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/form.tsx +0 -209
  227. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useObjectInfoBatch.ts +0 -65
  228. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useObjectSearchData.ts +0 -174
  229. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useRecordDetailLayout.ts +0 -137
  230. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useRecordListGraphQL.ts +0 -135
  231. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/pages/DetailPage.tsx +0 -109
  232. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/pages/GlobalSearch.tsx +0 -229
  233. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/filters/filters.ts +0 -121
  234. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/filters/picklist.ts +0 -6
  235. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/objectInfo/objectInfo.ts +0 -49
  236. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/recordDetail/recordDetail.ts +0 -61
  237. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/schema.d.ts +0 -200
  238. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/search/searchResults.ts +0 -229
  239. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/apiUtils.ts +0 -59
  240. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/cacheUtils.ts +0 -76
  241. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/debounce.ts +0 -89
  242. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/fieldUtils.ts +0 -354
  243. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/fieldValueExtractor.ts +0 -67
  244. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/filterUtils.ts +0 -32
  245. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/formDataTransformUtils.ts +0 -260
  246. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/formUtils.ts +0 -142
  247. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/graphQLNodeFieldUtils.ts +0 -186
  248. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/graphQLObjectInfoAdapter.ts +0 -77
  249. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/graphQLRecordAdapter.ts +0 -90
  250. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/layoutTransformUtils.ts +0 -236
  251. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/linkUtils.ts +0 -14
  252. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/paginationUtils.ts +0 -49
  253. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/recordUtils.ts +0 -159
  254. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/sanitizationUtils.ts +0 -49
  255. package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/tsconfig.tsbuildinfo +0 -1
  256. package/lib/templates/project/reactb2e/_r_/features/feature-graphql-graphql-data-access-rule.md +0 -470
  257. package/lib/templates/project/reactb2e/_r_/features/feature-react-agentforce-conversation-client-embedded-agent-rule.md +0 -18
  258. package/lib/templates/project/reactb2e/_r_/features/feature-react-chart-analytics-charts-rule.md +0 -27
  259. package/lib/templates/project/reactb2e/_r_/skills/_k_/SKILL.md +0 -148
  260. package/lib/templates/project/reactb2e/_r_/skills/_k_/docs/embed-examples.md +0 -192
  261. package/lib/templates/project/reactb2e/_r_/skills/_k_/docs/troubleshooting.md +0 -51
  262. package/lib/templates/project/reactb2e/_r_/skills/feature-graphql-graphql-data-access/SKILL.md +0 -155
  263. package/lib/templates/project/reactb2e/_r_/skills/feature-graphql-graphql-data-access/docs/explore-schema.md +0 -256
  264. package/lib/templates/project/reactb2e/_r_/skills/feature-graphql-graphql-data-access/docs/generate-mutation-query.md +0 -228
  265. package/lib/templates/project/reactb2e/_r_/skills/feature-graphql-graphql-data-access/docs/generate-read-query.md +0 -202
  266. package/lib/templates/project/reactb2e/_r_/skills/feature-graphql-graphql-data-access/docs/shared-schema.graphqls +0 -1150
  267. package/lib/templates/project/reactb2e/_r_/skills/feature-micro-frontend-micro-frontend/SKILL.md +0 -137
  268. package/lib/templates/project/reactb2e/_r_/skills/feature-react-chart-analytics-charts/SKILL.md +0 -41
  269. package/lib/templates/project/reactb2e/_r_/skills/feature-react-chart-analytics-charts/docs/schema-mapping.md +0 -4
  270. package/lib/templates/project/reactb2e/_r_/skills/webapp-react-interactive-map/SKILL.md +0 -92
  271. package/lib/templates/project/reactb2e/_r_/skills/webapp-react-interactive-map/implementation/geocoding.md +0 -245
  272. package/lib/templates/project/reactb2e/_r_/skills/webapp-react-interactive-map/implementation/leaflet-map.md +0 -279
  273. package/lib/templates/project/reactb2e/_r_/skills/webapp-react-weather-widget/SKILL.md +0 -65
  274. package/lib/templates/project/reactb2e/_r_/skills/webapp-react-weather-widget/implementation/weather-hook.md +0 -258
  275. package/lib/templates/project/reactb2e/_r_/skills/webapp-react-weather-widget/implementation/weather-ui.md +0 -216
  276. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/SKILL.md +0 -271
  277. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/charts.csv +0 -26
  278. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/colors.csv +0 -97
  279. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/icons.csv +0 -101
  280. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/landing.csv +0 -31
  281. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/products.csv +0 -97
  282. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/react-performance.csv +0 -45
  283. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/stacks/html-tailwind.csv +0 -56
  284. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/stacks/react.csv +0 -54
  285. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/stacks/shadcn.csv +0 -61
  286. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/styles.csv +0 -68
  287. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/typography.csv +0 -58
  288. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/ui-reasoning.csv +0 -101
  289. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/ux-guidelines.csv +0 -100
  290. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/web-interface.csv +0 -31
  291. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/scripts/core.js +0 -255
  292. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/scripts/design_system.js +0 -861
  293. package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/scripts/search.js +0 -98
  294. package/lib/templates/project/reactb2e/_r_/skills/webapp-unsplash-images/SKILL.md +0 -71
  295. package/lib/templates/project/reactb2e/_r_/skills/webapp-unsplash-images/implementation/usage.md +0 -159
  296. package/lib/templates/project/reactb2e/_r_/webapp-cli-commands.md +0 -88
  297. package/lib/templates/project/reactb2e/_r_/webapp-react-code-quality.md +0 -136
  298. package/lib/templates/project/reactb2e/_r_/webapp-react-typescript.md +0 -205
  299. package/lib/templates/project/reactb2e/_r_/webapp-react.md +0 -202
  300. package/lib/templates/project/reactb2e/_r_/webapp-skills-first.md +0 -26
  301. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailFields.tsx +0 -55
  302. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailForm.tsx +0 -146
  303. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailHeader.tsx +0 -34
  304. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailLayoutSections.tsx +0 -80
  305. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/Section.tsx +0 -108
  306. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/SectionRow.tsx +0 -20
  307. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/UiApiDetailForm.tsx +0 -140
  308. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FieldValueDisplay.tsx +0 -73
  309. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedAddress.tsx +0 -29
  310. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedEmail.tsx +0 -17
  311. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedPhone.tsx +0 -24
  312. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedText.tsx +0 -11
  313. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedUrl.tsx +0 -29
  314. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FilterField.tsx +0 -54
  315. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FilterInput.tsx +0 -55
  316. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FilterSelect.tsx +0 -72
  317. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FiltersPanel.tsx +0 -380
  318. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/forms/filters-form.tsx +0 -114
  319. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/forms/submit-button.tsx +0 -47
  320. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/GlobalSearchInput.tsx +0 -114
  321. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/ResultCardFields.tsx +0 -71
  322. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchHeader.tsx +0 -31
  323. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchPagination.tsx +0 -144
  324. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchResultCard.tsx +0 -136
  325. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchResultsPanel.tsx +0 -197
  326. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/shared/LoadingFallback.tsx +0 -61
  327. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/objectDetailService.ts +0 -102
  328. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/objectInfoGraphQLService.ts +0 -137
  329. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/objectInfoService.ts +0 -95
  330. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/recordListGraphQLService.ts +0 -364
  331. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/constants.ts +0 -39
  332. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/filters/FilterInput.tsx +0 -55
  333. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/filters/FilterSelect.tsx +0 -72
  334. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/form.tsx +0 -209
  335. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useObjectInfoBatch.ts +0 -65
  336. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useObjectSearchData.ts +0 -174
  337. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useRecordDetailLayout.ts +0 -137
  338. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useRecordListGraphQL.ts +0 -135
  339. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/pages/DetailPage.tsx +0 -109
  340. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/pages/GlobalSearch.tsx +0 -229
  341. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/filters/filters.ts +0 -121
  342. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/filters/picklist.ts +0 -6
  343. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/objectInfo/objectInfo.ts +0 -49
  344. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/recordDetail/recordDetail.ts +0 -61
  345. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/schema.d.ts +0 -200
  346. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/search/searchResults.ts +0 -229
  347. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/apiUtils.ts +0 -59
  348. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/cacheUtils.ts +0 -76
  349. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/debounce.ts +0 -89
  350. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/fieldUtils.ts +0 -354
  351. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/fieldValueExtractor.ts +0 -67
  352. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/filterUtils.ts +0 -32
  353. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/formDataTransformUtils.ts +0 -260
  354. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/formUtils.ts +0 -142
  355. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/graphQLNodeFieldUtils.ts +0 -186
  356. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/graphQLObjectInfoAdapter.ts +0 -77
  357. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/graphQLRecordAdapter.ts +0 -90
  358. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/layoutTransformUtils.ts +0 -236
  359. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/linkUtils.ts +0 -14
  360. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/paginationUtils.ts +0 -49
  361. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/recordUtils.ts +0 -159
  362. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/sanitizationUtils.ts +0 -49
  363. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/index.ts +0 -120
  364. package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/tsconfig.tsbuildinfo +0 -1
  365. package/lib/templates/project/reactb2x/_r_/features/feature-graphql-graphql-data-access-rule.md +0 -470
  366. package/lib/templates/project/reactb2x/_r_/features/feature-react-agentforce-conversation-client-embedded-agent-rule.md +0 -18
  367. package/lib/templates/project/reactb2x/_r_/features/feature-react-chart-analytics-charts-rule.md +0 -27
  368. package/lib/templates/project/reactb2x/_r_/skills/_k_/SKILL.md +0 -148
  369. package/lib/templates/project/reactb2x/_r_/skills/_k_/docs/embed-examples.md +0 -192
  370. package/lib/templates/project/reactb2x/_r_/skills/_k_/docs/troubleshooting.md +0 -51
  371. package/lib/templates/project/reactb2x/_r_/skills/feature-graphql-graphql-data-access/SKILL.md +0 -155
  372. package/lib/templates/project/reactb2x/_r_/skills/feature-graphql-graphql-data-access/docs/explore-schema.md +0 -256
  373. package/lib/templates/project/reactb2x/_r_/skills/feature-graphql-graphql-data-access/docs/generate-mutation-query.md +0 -228
  374. package/lib/templates/project/reactb2x/_r_/skills/feature-graphql-graphql-data-access/docs/generate-read-query.md +0 -202
  375. package/lib/templates/project/reactb2x/_r_/skills/feature-graphql-graphql-data-access/docs/shared-schema.graphqls +0 -1150
  376. package/lib/templates/project/reactb2x/_r_/skills/feature-micro-frontend-micro-frontend/SKILL.md +0 -137
  377. package/lib/templates/project/reactb2x/_r_/skills/feature-react-chart-analytics-charts/SKILL.md +0 -41
  378. package/lib/templates/project/reactb2x/_r_/skills/feature-react-chart-analytics-charts/docs/schema-mapping.md +0 -4
  379. package/lib/templates/project/reactb2x/_r_/skills/webapp-react-interactive-map/SKILL.md +0 -92
  380. package/lib/templates/project/reactb2x/_r_/skills/webapp-react-interactive-map/implementation/geocoding.md +0 -245
  381. package/lib/templates/project/reactb2x/_r_/skills/webapp-react-interactive-map/implementation/leaflet-map.md +0 -279
  382. package/lib/templates/project/reactb2x/_r_/skills/webapp-react-weather-widget/SKILL.md +0 -65
  383. package/lib/templates/project/reactb2x/_r_/skills/webapp-react-weather-widget/implementation/weather-hook.md +0 -258
  384. package/lib/templates/project/reactb2x/_r_/skills/webapp-react-weather-widget/implementation/weather-ui.md +0 -216
  385. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/SKILL.md +0 -271
  386. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/charts.csv +0 -26
  387. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/colors.csv +0 -97
  388. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/icons.csv +0 -101
  389. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/landing.csv +0 -31
  390. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/products.csv +0 -97
  391. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/react-performance.csv +0 -45
  392. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/stacks/html-tailwind.csv +0 -56
  393. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/stacks/react.csv +0 -54
  394. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/stacks/shadcn.csv +0 -61
  395. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/styles.csv +0 -68
  396. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/typography.csv +0 -58
  397. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/ui-reasoning.csv +0 -101
  398. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/ux-guidelines.csv +0 -100
  399. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/web-interface.csv +0 -31
  400. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/scripts/core.js +0 -255
  401. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/scripts/design_system.js +0 -861
  402. package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/scripts/search.js +0 -98
  403. package/lib/templates/project/reactb2x/_r_/skills/webapp-unsplash-images/SKILL.md +0 -71
  404. package/lib/templates/project/reactb2x/_r_/skills/webapp-unsplash-images/implementation/usage.md +0 -159
  405. package/lib/templates/project/reactb2x/_r_/webapp-cli-commands.md +0 -88
  406. package/lib/templates/project/reactb2x/_r_/webapp-react-code-quality.md +0 -136
  407. package/lib/templates/project/reactb2x/_r_/webapp-react-typescript.md +0 -205
  408. package/lib/templates/project/reactb2x/_r_/webapp-react.md +0 -202
  409. package/lib/templates/project/reactb2x/_r_/webapp-skills-first.md +0 -26
  410. /package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/{src/components.json → components.json} +0 -0
  411. /package/lib/templates/project/reactb2e/_r_/skills/{webapp-react-data-visualization → building-data-visualization}/implementation/dashboard-layout.md +0 -0
  412. /package/lib/templates/project/reactb2e/_r_/skills/{webapp-react-data-visualization → building-data-visualization}/implementation/stat-card.md +0 -0
  413. /package/lib/templates/project/reactb2e/_r_/skills/{webapp-react → building-react-components}/implementation/component.md +0 -0
  414. /package/lib/templates/project/reactb2e/_r_/skills/{webapp-react → building-react-components}/implementation/header-footer.md +0 -0
  415. /package/lib/templates/project/reactb2e/_r_/skills/{webapp-react → building-react-components}/implementation/page.md +0 -0
  416. /package/lib/templates/project/reactb2e/_r_/skills/{webapp-csp-trusted-sites → configuring-csp-trusted-sites}/implementation/metadata-format.md +0 -0
  417. /package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/{src/components.json → components.json} +0 -0
  418. /package/lib/templates/project/reactb2x/_r_/skills/{webapp-react-data-visualization → building-data-visualization}/implementation/dashboard-layout.md +0 -0
  419. /package/lib/templates/project/reactb2x/_r_/skills/{webapp-react-data-visualization → building-data-visualization}/implementation/stat-card.md +0 -0
  420. /package/lib/templates/project/reactb2x/_r_/skills/{webapp-react → building-react-components}/implementation/component.md +0 -0
  421. /package/lib/templates/project/reactb2x/_r_/skills/{webapp-react → building-react-components}/implementation/header-footer.md +0 -0
  422. /package/lib/templates/project/reactb2x/_r_/skills/{webapp-react → building-react-components}/implementation/page.md +0 -0
  423. /package/lib/templates/project/reactb2x/_r_/skills/{webapp-csp-trusted-sites → configuring-csp-trusted-sites}/implementation/metadata-format.md +0 -0
  424. /package/lib/templates/webapplication/reactbasic/{src/components.json → components.json} +0 -0
@@ -0,0 +1,20 @@
1
+ import { Toaster as Sonner } from 'sonner';
2
+
3
+ /**
4
+ * Renders the toast container. Use with `toast()` from this module for messages
5
+ * with title, description, actions, and variants (success, error, warning).
6
+ *
7
+ * @example
8
+ * toast("Event has been created", {
9
+ * description: "Sunday, December 03, 2023 at 9:00 AM",
10
+ * action: { label: "Undo", onClick: () => {} },
11
+ * });
12
+ * toast.success("Saved!");
13
+ * toast.error("Something went wrong");
14
+ * toast.warning("Please review");
15
+ */
16
+ export function Toaster() {
17
+ return <Sonner position="top-right" richColors />;
18
+ }
19
+
20
+ export { toast } from 'sonner';
@@ -1,13 +1,12 @@
1
- import { GlobalSearchInput } from "../features/global-search/components/search/GlobalSearchInput";
2
-
3
1
  export default function Home() {
4
- return (
5
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
6
- <div className="text-center">
7
- <h1 className="text-4xl font-bold text-gray-900 mb-4">Home</h1>
8
- <p className="text-lg text-gray-600 mb-8">Welcome to your React application.</p>
9
- </div>
10
- <GlobalSearchInput />
11
- </div>
12
- );
2
+ return (
3
+ <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
4
+ <div className="text-center">
5
+ <h1 className="text-4xl font-bold text-gray-900 mb-4">Home</h1>
6
+ <p className="text-lg text-gray-600 mb-8">
7
+ Welcome to your React application.
8
+ </p>
9
+ </div>
10
+ </div>
11
+ );
13
12
  }
@@ -1,5 +1,5 @@
1
1
  import type { RouteObject } from 'react-router';
2
- import Home from './pages/Home';
2
+ import Home from './features/object-search/__examples__/pages/Home';
3
3
  import NotFound from './pages/NotFound';
4
4
  import Login from "./features/authentication/pages/Login";
5
5
  import Register from "./features/authentication/pages/Register";
@@ -10,10 +10,8 @@ import ChangePassword from "./features/authentication/pages/ChangePassword";
10
10
  import AuthenticationRoute from "./features/authentication/layouts/authenticationRouteLayout";
11
11
  import PrivateRoute from "./features/authentication/layouts/privateRouteLayout";
12
12
  import { ROUTES } from "./features/authentication/authenticationConfig";
13
- import GlobalSearch from "./features/global-search/pages/GlobalSearch";
14
- import DetailPage from "./features/global-search/pages/DetailPage";
15
- import { Suspense } from "react";
16
- import LoadingFallback from "./features/global-search/components/shared/LoadingFallback";
13
+ import AccountSearch from "./features/object-search/__examples__/pages/AccountSearch";
14
+ import AccountObjectDetail from "./features/object-search/__examples__/pages/AccountObjectDetailPage";
17
15
  import AuthAppLayout from "./features/authentication/layouts/AuthAppLayout";
18
16
 
19
17
  export const routes: RouteObject[] = [
@@ -24,7 +22,7 @@ export const routes: RouteObject[] = [
24
22
  {
25
23
  index: true,
26
24
  element: <Home />,
27
- handle: { showInNavigation: true, label: 'Home' }
25
+ handle: { showInNavigation: true, label: "Home" }
28
26
  },
29
27
  {
30
28
  path: '*',
@@ -56,7 +54,7 @@ export const routes: RouteObject[] = [
56
54
  ]
57
55
  },
58
56
  {
59
- element: <PrivateRoute />,
57
+ element: <PrivateRoute showCardSkeleton />,
60
58
  children: [
61
59
  {
62
60
  path: ROUTES.PROFILE.PATH,
@@ -71,22 +69,12 @@ export const routes: RouteObject[] = [
71
69
  ]
72
70
  },
73
71
  {
74
- path: "global-search/:query",
75
- element: (
76
- <Suspense fallback={<LoadingFallback />}>
77
- <GlobalSearch />
78
- </Suspense>
79
- ),
80
- handle: { showInNavigation: false }
72
+ path: "accounts/:recordId",
73
+ element: <AccountObjectDetail />
81
74
  },
82
75
  {
83
- path: "object/:objectApiName/:recordId",
84
- element: (
85
- <Suspense fallback={<LoadingFallback />}>
86
- <DetailPage />
87
- </Suspense>
88
- ),
89
- handle: { showInNavigation: false }
76
+ path: "accounts",
77
+ element: <AccountSearch />
90
78
  }
91
79
  ]
92
80
  }
@@ -31,6 +31,12 @@
31
31
  "@assets/*": ["./src/assets/*"]
32
32
  }
33
33
  },
34
- "include": ["src", "vite-env.d.ts", "vitest-env.d.ts"],
34
+ "include": [
35
+ "src",
36
+ "e2e",
37
+ "vite-env.d.ts",
38
+ "vitest-env.d.ts",
39
+ "vitest.setup.ts"
40
+ ],
35
41
  "references": [{ "path": "./tsconfig.node.json" }]
36
42
  }
@@ -1,3 +1,4 @@
1
+ import { existsSync } from 'node:fs';
1
2
  import { defineConfig } from 'vite';
2
3
  import react from '@vitejs/plugin-react';
3
4
  import path from 'path';
@@ -6,26 +7,29 @@ import tailwindcss from '@tailwindcss/vite';
6
7
  import salesforce from '@salesforce/vite-plugin-webapp-experimental';
7
8
  import codegen from 'vite-plugin-graphql-codegen';
8
9
 
10
+ const schemaPath = resolve(__dirname, '../../../../../schema.graphql');
11
+ const schemaExists = existsSync(schemaPath);
12
+
9
13
  export default defineConfig(({ mode }) => {
10
14
  return {
11
15
  base: './',
12
- // Type assertion avoids Plugin type mismatch when dist has its own node_modules (vite/rollup)
13
16
  plugins: [
14
17
  tailwindcss(),
15
18
  react(),
16
19
  salesforce(),
17
- codegen({
18
- // Path to the codegen config file
19
- configFilePathOverride: resolve(__dirname, 'codegen.yml'),
20
- // Run codegen on dev server start
21
- runOnStart: true,
22
- // Don't run codegen on build for now
23
- runOnBuild: false,
24
- // Enable file watcher during development
25
- enableWatcher: true,
26
- // Fail build if codegen errors
27
- throwOnBuild: true,
28
- }),
20
+ // Only add codegen when schema exists (e.g. after `npm run graphql:schema`).
21
+ // In CI or when schema is not checked in, skip codegen so build succeeds.
22
+ ...(schemaExists
23
+ ? [
24
+ codegen({
25
+ configFilePathOverride: resolve(__dirname, 'codegen.yml'),
26
+ runOnStart: true,
27
+ runOnBuild: true,
28
+ enableWatcher: true,
29
+ throwOnBuild: true,
30
+ }),
31
+ ]
32
+ : []),
29
33
  ] as import('vite').PluginOption[],
30
34
 
31
35
  // Build configuration for MPA
@@ -13,7 +13,7 @@
13
13
  <enableDirectMessages>true</enableDirectMessages>
14
14
  <enableExpFriendlyUrlsAsDefault>false</enableExpFriendlyUrlsAsDefault>
15
15
  <enableExperienceBundleBasedSnaOverrideEnabled>true</enableExperienceBundleBasedSnaOverrideEnabled>
16
- <enableGuestChatter>false</enableGuestChatter>
16
+ <enableGuestChatter>true</enableGuestChatter>
17
17
  <enableGuestFileAccess>false</enableGuestFileAccess>
18
18
  <enableGuestMemberVisibility>false</enableGuestMemberVisibility>
19
19
  <enableImageOptimizationCDN>true</enableImageOptimizationCDN>
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: webapp-react-data-visualization
2
+ name: building-data-visualization
3
3
  description: Adds data visualization components (charts, stat cards, KPI metrics) to React pages using Recharts. Use when the user asks to add a chart, graph, donut chart, pie chart, bar chart, stat card, KPI metric, dashboard visualization, or analytics component to the web application.
4
4
  ---
5
5
 
@@ -46,8 +46,8 @@ Recharts is built on D3 and provides declarative React components. No additional
46
46
 
47
47
  Read the corresponding guide:
48
48
 
49
- - **Bar chart** — use the **`analytics-charts`** skill in `feature-react-chart` (AnalyticsChart component for categorical data).
50
- - **Line / area chart** — use the **`analytics-charts`** skill in `feature-react-chart` (AnalyticsChart component for time-series data).
49
+ - **Bar chart** — read `implementation/bar-line-chart.md` (categorical data)
50
+ - **Line / area chart** — read `implementation/bar-line-chart.md` (time-series data)
51
51
  - **Donut / pie chart** — read `implementation/donut-chart.md`
52
52
  - **Stat card with trend** — read `implementation/stat-card.md`
53
53
  - **Dashboard layout** — read `implementation/dashboard-layout.md`
@@ -0,0 +1,316 @@
1
+ # Bar & Line / Area Chart — Implementation Guide
2
+
3
+ Requires **recharts** (install from the web app directory; see SKILL.md Step 2).
4
+
5
+ ---
6
+
7
+ ## Data shapes
8
+
9
+ ### Time-series (line / area chart)
10
+
11
+ Use when data represents a trend over time or ordered sequence.
12
+
13
+ ```ts
14
+ interface TimeSeriesDataPoint {
15
+ x: string; // date or label on the x-axis
16
+ y: number; // numeric value
17
+ }
18
+ ```
19
+
20
+ Map raw fields to this shape: e.g. `date` → `x`, `revenue` → `y`.
21
+
22
+ ### Categorical (bar chart)
23
+
24
+ Use when data compares discrete categories.
25
+
26
+ ```ts
27
+ interface CategoricalDataPoint {
28
+ name: string; // category label
29
+ value: number; // numeric value
30
+ }
31
+ ```
32
+
33
+ Map raw fields to this shape: e.g. `product` → `name`, `sales` → `value`.
34
+
35
+ ### How to decide
36
+
37
+ | Signal | Type |
38
+ |--------|------|
39
+ | "over time", "trend", date-like keys | Time-series → line chart |
40
+ | "by category", "by X", label-like keys | Categorical → bar chart |
41
+
42
+ ---
43
+
44
+ ## Theme colors
45
+
46
+ Pick a theme based on the data's sentiment:
47
+
48
+ | Theme | Stroke / Fill | When to use |
49
+ |-------|---------------|-------------|
50
+ | `green` | `#22c55e` | Growth, gain, positive trend |
51
+ | `red` | `#ef4444` | Decline, loss, negative trend |
52
+ | `neutral` | `#6366f1` | Default or mixed data |
53
+
54
+ Define colors as constants — do not use inline hex values.
55
+
56
+ ```ts
57
+ const THEME_COLORS = {
58
+ red: "#ef4444",
59
+ green: "#22c55e",
60
+ neutral: "#6366f1",
61
+ } as const;
62
+
63
+ type ChartTheme = keyof typeof THEME_COLORS;
64
+ ```
65
+
66
+ ---
67
+
68
+ ## Line chart component
69
+
70
+ Create at `components/LineChart.tsx` (or colocate with the page):
71
+
72
+ ```tsx
73
+ import React from "react";
74
+ import {
75
+ LineChart as RechartsLineChart,
76
+ Line,
77
+ XAxis,
78
+ YAxis,
79
+ CartesianGrid,
80
+ Tooltip,
81
+ Legend,
82
+ ResponsiveContainer,
83
+ } from "recharts";
84
+
85
+ const THEME_COLORS = {
86
+ red: "#ef4444",
87
+ green: "#22c55e",
88
+ neutral: "#6366f1",
89
+ } as const;
90
+
91
+ type ChartTheme = keyof typeof THEME_COLORS;
92
+
93
+ interface TimeSeriesDataPoint {
94
+ x: string;
95
+ y: number;
96
+ }
97
+
98
+ interface TimeSeriesChartProps {
99
+ data: TimeSeriesDataPoint[];
100
+ theme?: ChartTheme;
101
+ title?: string;
102
+ className?: string;
103
+ }
104
+
105
+ export function TimeSeriesChart({
106
+ data,
107
+ theme = "neutral",
108
+ title,
109
+ className = "",
110
+ }: TimeSeriesChartProps) {
111
+ if (data.length === 0) {
112
+ return <p className="text-muted-foreground text-center py-8">No data to display</p>;
113
+ }
114
+
115
+ const color = THEME_COLORS[theme];
116
+
117
+ return (
118
+ <div className={className}>
119
+ {title && (
120
+ <h3 className="text-sm font-medium text-primary mb-2 uppercase tracking-wide">
121
+ {title}
122
+ </h3>
123
+ )}
124
+ <ResponsiveContainer width="100%" height={300}>
125
+ <RechartsLineChart data={data}>
126
+ <CartesianGrid strokeDasharray="3 3" />
127
+ <XAxis dataKey="x" />
128
+ <YAxis />
129
+ <Tooltip />
130
+ <Legend />
131
+ <Line type="monotone" dataKey="y" stroke={color} strokeWidth={2} dot={false} />
132
+ </RechartsLineChart>
133
+ </ResponsiveContainer>
134
+ </div>
135
+ );
136
+ }
137
+ ```
138
+
139
+ ---
140
+
141
+ ## Bar chart component
142
+
143
+ Create at `components/BarChart.tsx` (or colocate with the page):
144
+
145
+ ```tsx
146
+ import React from "react";
147
+ import {
148
+ BarChart as RechartsBarChart,
149
+ Bar,
150
+ XAxis,
151
+ YAxis,
152
+ CartesianGrid,
153
+ Tooltip,
154
+ Legend,
155
+ ResponsiveContainer,
156
+ } from "recharts";
157
+
158
+ const THEME_COLORS = {
159
+ red: "#ef4444",
160
+ green: "#22c55e",
161
+ neutral: "#6366f1",
162
+ } as const;
163
+
164
+ type ChartTheme = keyof typeof THEME_COLORS;
165
+
166
+ interface CategoricalDataPoint {
167
+ name: string;
168
+ value: number;
169
+ }
170
+
171
+ interface CategoricalChartProps {
172
+ data: CategoricalDataPoint[];
173
+ theme?: ChartTheme;
174
+ title?: string;
175
+ className?: string;
176
+ }
177
+
178
+ export function CategoricalChart({
179
+ data,
180
+ theme = "neutral",
181
+ title,
182
+ className = "",
183
+ }: CategoricalChartProps) {
184
+ if (data.length === 0) {
185
+ return <p className="text-muted-foreground text-center py-8">No data to display</p>;
186
+ }
187
+
188
+ const color = THEME_COLORS[theme];
189
+
190
+ return (
191
+ <div className={className}>
192
+ {title && (
193
+ <h3 className="text-sm font-medium text-primary mb-2 uppercase tracking-wide">
194
+ {title}
195
+ </h3>
196
+ )}
197
+ <ResponsiveContainer width="100%" height={300}>
198
+ <RechartsBarChart data={data}>
199
+ <CartesianGrid strokeDasharray="3 3" />
200
+ <XAxis dataKey="name" />
201
+ <YAxis />
202
+ <Tooltip />
203
+ <Legend />
204
+ <Bar dataKey="value" fill={color} radius={[4, 4, 0, 0]} />
205
+ </RechartsBarChart>
206
+ </ResponsiveContainer>
207
+ </div>
208
+ );
209
+ }
210
+ ```
211
+
212
+ ---
213
+
214
+ ## Area chart variant
215
+
216
+ For a filled area chart (useful for volume-over-time), swap `Line` for `Area`:
217
+
218
+ ```tsx
219
+ import { AreaChart, Area, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from "recharts";
220
+
221
+ <ResponsiveContainer width="100%" height={300}>
222
+ <AreaChart data={data}>
223
+ <CartesianGrid strokeDasharray="3 3" />
224
+ <XAxis dataKey="x" />
225
+ <YAxis />
226
+ <Tooltip />
227
+ <Area type="monotone" dataKey="y" stroke={color} fill={color} fillOpacity={0.2} />
228
+ </AreaChart>
229
+ </ResponsiveContainer>
230
+ ```
231
+
232
+ ---
233
+
234
+ ## Chart container wrapper
235
+
236
+ Wrap any chart in a styled card for consistent spacing:
237
+
238
+ ```tsx
239
+ import { Card } from "@/components/ui/card";
240
+
241
+ interface ChartContainerProps {
242
+ children: React.ReactNode;
243
+ className?: string;
244
+ }
245
+
246
+ export function ChartContainer({ children, className = "" }: ChartContainerProps) {
247
+ return (
248
+ <Card className={`p-4 border-gray-200 shadow-sm ${className}`}>
249
+ {children}
250
+ </Card>
251
+ );
252
+ }
253
+ ```
254
+
255
+ Usage:
256
+
257
+ ```tsx
258
+ <ChartContainer>
259
+ <TimeSeriesChart data={monthlyData} theme="green" title="Monthly Revenue" />
260
+ </ChartContainer>
261
+ ```
262
+
263
+ ---
264
+
265
+ ## Preparing raw data
266
+
267
+ Map API responses to the expected shape before passing to the chart:
268
+
269
+ ```tsx
270
+ const timeSeriesData = useMemo(
271
+ () => apiRecords.map((r) => ({ x: r.date, y: r.revenue })),
272
+ [apiRecords],
273
+ );
274
+
275
+ const categoricalData = useMemo(
276
+ () => apiRecords.map((r) => ({ name: r.product, value: r.sales })),
277
+ [apiRecords],
278
+ );
279
+ ```
280
+
281
+ ---
282
+
283
+ ## Key Recharts concepts
284
+
285
+ | Component | Purpose |
286
+ |-----------|---------|
287
+ | `ResponsiveContainer` | Wraps chart to fill parent width |
288
+ | `CartesianGrid` | Background grid lines |
289
+ | `XAxis` / `YAxis` | Axis labels; `dataKey` maps to the data field |
290
+ | `Tooltip` | Hover info |
291
+ | `Legend` | Series labels |
292
+ | `Line` | Line series; `type="monotone"` for smooth curves |
293
+ | `Bar` | Bar series; `radius` rounds top corners |
294
+ | `Area` | Filled area; `fillOpacity` controls transparency |
295
+
296
+ ---
297
+
298
+ ## Accessibility
299
+
300
+ - Always include a text legend (not just colors).
301
+ - Chart should be wrapped in a section with a visible heading.
302
+ - For critical data, provide a text summary or table alternative.
303
+ - Use sufficient color contrast between the chart stroke/fill and background.
304
+ - Consider `prefers-reduced-motion` for chart animations.
305
+
306
+ ---
307
+
308
+ ## Common mistakes
309
+
310
+ | Mistake | Fix |
311
+ |---------|-----|
312
+ | Missing `ResponsiveContainer` | Chart won't resize; always wrap |
313
+ | Fixed width/height on chart | Let `ResponsiveContainer` control sizing |
314
+ | No empty-data handling | Show "No data" message when `data.length === 0` |
315
+ | Inline colors | Extract to `THEME_COLORS` constant |
316
+ | Using raw Recharts for every chart type | Use `DonutChart` (see `donut-chart.md`) for pie/donut |
@@ -156,7 +156,7 @@ Keep chart colors consistent with the app's design system. Define them as consta
156
156
 
157
157
  ## Other chart types
158
158
 
159
- For **bar charts** and **line charts**, use the `AnalyticsChart` component from `feature-react-chart` instead of raw Recharts. See the **`analytics-charts`** skill for usage.
159
+ For **bar charts** and **line / area charts**, see `bar-line-chart.md` in this directory.
160
160
 
161
161
  ---
162
162
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: webapp-react
2
+ name: building-react-components
3
3
  description: Use when editing any React code in the web application — creating or modifying components, pages, layout, headers, footers, or any TSX/JSX files. Follow this skill for add component, add page, header/footer, and general React UI implementation patterns (shadcn UI and Tailwind CSS).
4
4
  ---
5
5
 
@@ -68,13 +68,29 @@ Once you have identified the type and gathered answers to the clarifying questio
68
68
 
69
69
  ---
70
70
 
71
- ## Verification
71
+ ## TypeScript Standards
72
72
 
73
- Before completing, run from the web app directory `force-app/main/default/webapplications/<appName>/` (use the actual app folder name):
73
+ - **Never use `any`** use proper types, generics, or `unknown` with type guards.
74
+ - **Event handlers:** `(event: React.FormEvent<HTMLFormElement>): void`
75
+ - **State:** `useState<User | null>(null)` — always provide the type parameter.
76
+ - **No unsafe assertions** (`obj as User`). Use type guards:
77
+ ```typescript
78
+ function isUser(obj: unknown): obj is User {
79
+ return typeof obj === 'object' && obj !== null && typeof (obj as User).id === 'string';
80
+ }
81
+ ```
82
+
83
+ ---
84
+
85
+ ## Verification (MANDATORY)
86
+
87
+ Before completing, run from the web app directory `force-app/main/default/webapplications/<appName>/`:
74
88
 
75
89
  ```bash
76
90
  cd force-app/main/default/webapplications/<appName> && npm run lint && npm run build
77
91
  ```
78
92
 
79
- - **Lint:** MUST result in 0 errors. Fix any ESLint or TypeScript issues.
80
- - **Build:** MUST succeed. Resolve any compilation or Vite build failures before finishing.
93
+ - **Lint:** MUST result in 0 errors.
94
+ - **Build:** MUST succeed (includes TypeScript check).
95
+
96
+ If either fails, fix the errors and re-run. Do not leave the session with failing quality gates.
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: webapp-csp-trusted-sites
2
+ name: configuring-csp-trusted-sites
3
3
  description: Creates Salesforce CSP Trusted Site metadata when adding external domains. Use when the user adds an external API, CDN, image host, font provider, map tile server, or any third-party URL that the web application needs to load resources from — or when a browser console shows a CSP violation error.
4
4
  ---
5
5
 
@@ -1,7 +1,6 @@
1
-
2
1
  ---
3
- paths:
4
- - "**/webapplications/**/*"
2
+ name: configuring-webapp-metadata
3
+ description: Use this skill when configuring web application metadata structure, webapplication.json, or bundle organization. Covers WebApplication bundle layout, meta XML, build output directory, and webapplication.json settings.
5
4
  ---
6
5
 
7
6
  # WebApplication Requirements
@@ -1,12 +1,36 @@
1
1
  ---
2
- description: Core web application rules for SFDX React apps
2
+ name: creating-webapp
3
+ description: Use this skill when creating or setting up a new SFDX React web application. Covers first steps, npm install, skills-first protocol, deployment order, and core web app rules.
3
4
  paths:
4
5
  - "**/webapplications/**/*"
5
6
  ---
6
7
 
8
+ # First Steps (MUST FOLLOW)
9
+
10
+ **Always run `npm install` before doing anything else** when working in a web app directory (e.g. `force-app/main/default/webapplications/<appName>/` or a dist app path). Dependencies must be installed before running `npm run dev`, `npm run build`, `npm run lint`, or any other script. If `node_modules` is missing or stale, commands will fail.
11
+
7
12
  # Skills-First (MUST FOLLOW)
8
13
 
9
- **Before writing any code or running any command**, search for relevant skills (`SKILL.md` files) that cover your task. Read the full skill and follow its instructions. Skills live in `.a4drules/skills/` and `feature/*/skills/`. See **webapp-skills-first.md** for the full protocol and a task-to-skill lookup table.
14
+ **Before writing any code or running any command**, search for relevant skills (`SKILL.md` files) that cover your task. Read the full skill and follow its instructions. Skills live in `.a4drules/skills/` and `feature/*/skills/`.
15
+
16
+ - Do not write custom scripts or complex bash commands for a workflow already covered by a loaded skill.
17
+ - Only proceed with manual execution after confirming no relevant skill exists.
18
+
19
+ # Deployment Order (MUST FOLLOW)
20
+
21
+ **Metadata deployments must complete before fetching GraphQL schema or running codegen.** The schema reflects the current org state; custom objects and fields appear only after metadata is deployed. Running schema fetch or codegen too early produces incomplete or incorrect types.
22
+
23
+ **Invoke the `deploying-to-salesforce` skill** (`.a4drules/skills/deploying-to-salesforce/`) whenever the task involves:
24
+ - Deploying metadata (objects, permission sets, layouts)
25
+ - Fetching GraphQL schema (`npm run graphql:schema`)
26
+ - Running GraphQL codegen (`npm run graphql:codegen`)
27
+ - Generating deploy/setup commands or syncing with the org
28
+
29
+ The skill enforces the correct sequence: **deploy metadata → assign permset → schema fetch → codegen**.
30
+
31
+ **Critical rules:**
32
+ - Do **not** run `npm run graphql:schema` before metadata (objects, permission sets) is deployed — the schema will not include custom objects/fields.
33
+ - Do **not** skip schema refetch after any metadata deployment — re-run `npm run graphql:schema` and `npm run graphql:codegen` from the webapp dir.
10
34
 
11
35
  # Web App Generation
12
36
 
@@ -70,6 +94,25 @@ Agents consistently miss these. **You must not leave them default.**
70
94
  | Root page content | Component at root route (often `Home` in `routes.tsx`) |
71
95
 
72
96
 
97
+ # React & TypeScript Constraints
98
+
99
+ ## Routing (React Router)
100
+
101
+ Use a **single** router package. When using `createBrowserRouter` / `RouterProvider`, all imports MUST come from **`react-router`** — not `react-router-dom`.
102
+
103
+ ## Component Library + Styling
104
+
105
+ - **shadcn/ui** for components: `import { Button } from '@/components/ui/button';`
106
+ - **Tailwind CSS** utility classes
107
+
108
+ ## URL & Path Handling
109
+
110
+ Apps run behind dynamic base paths. Router navigation (`<Link to>`, `navigate()`) prefer absolute paths (`/x`). Non-router attributes (`<img src>`) use dot-relative (`./x`) to resolve against `<base>`. Prefer Vite `import` for static assets.
111
+
112
+ ## Module Restrictions
113
+
114
+ React apps must NOT import Salesforce platform modules like `lightning/*` or `@wire` (LWC-only). For data access, invoke the **using-salesforce-data** skill.
115
+
73
116
  # Frontend Aesthetics
74
117
 
75
118
  **Avoid AI slop.** Make creative, distinctive frontends:
@@ -81,7 +124,7 @@ Agents consistently miss these. **You must not leave them default.**
81
124
 
82
125
  # Shell Command Safety (MUST FOLLOW)
83
126
 
84
- **Never use complex `node -e` one-liners** for file edits or multi-line transforms. They break in Zsh due to `!` history expansion and backtick interpolation. Use a temporary `.js` file, `sed`/`awk`, `jq`, or IDE file-editing tools instead. See **webapp-cli-commands.md** for full details and approved alternatives.
127
+ **Never use complex `node -e` one-liners** for file edits or multi-line transforms. They break in Zsh due to `!` history expansion and backtick interpolation. Use a temporary `.js` file, `sed`/`awk`, `jq`, or IDE file-editing tools instead.
85
128
 
86
129
  # Development Cycle
87
130
 
@@ -95,4 +138,3 @@ Only stop when:
95
138
  - All checklist items are completed and quality gates pass, or
96
139
  - A blocking error cannot be resolved after reasonable remediation, or
97
140
  - The user explicitly asks to pause.
98
-