@salesforce/templates 66.5.6 → 66.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +6 -4
  70. package/lib/utils/webappTemplateUtils.js +17 -11
  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
@@ -1,316 +0,0 @@
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 |
@@ -1,189 +0,0 @@
1
- # Dashboard Layout — Implementation Guide
2
-
3
- ## Anatomy of a dashboard page
4
-
5
- A typical dashboard combines stat cards, charts, and data tables:
6
-
7
- ```
8
- ┌────────────────────────────────────────────────────┐
9
- │ Search / global action bar │
10
- ├──────────┬──────────┬──────────────────────────────┤
11
- │ Stat 1 │ Stat 2 │ Stat 3 │
12
- ├──────────┴──────────┴──────┬───────────────────────┤
13
- │ │ │
14
- │ Data table / list │ Donut chart │
15
- │ (70% width) │ (30% width) │
16
- │ │ │
17
- └────────────────────────────┴───────────────────────┘
18
- ```
19
-
20
- ---
21
-
22
- ## Layout implementation
23
-
24
- ```tsx
25
- import { PageContainer } from "@/components/layout/PageContainer";
26
- import { StatCard } from "@/components/StatCard";
27
- import { DonutChart } from "@/components/DonutChart";
28
-
29
- export default function Dashboard() {
30
- return (
31
- <PageContainer>
32
- <div className="max-w-7xl mx-auto space-y-6">
33
- {/* Search bar */}
34
- <div>{/* global search component */}</div>
35
-
36
- {/* Main content: 70/30 split */}
37
- <div className="grid grid-cols-1 lg:grid-cols-[70%_30%] gap-6">
38
- <div className="space-y-6">
39
- {/* Stat cards row */}
40
- <div className="grid grid-cols-1 md:grid-cols-3 gap-6">
41
- <StatCard title="Metric A" value={42} />
42
- <StatCard title="Metric B" value={18} />
43
- <StatCard title="Metric C" value={7} />
44
- </div>
45
-
46
- {/* Data table */}
47
- <div>{/* table component */}</div>
48
- </div>
49
-
50
- {/* Sidebar chart */}
51
- <div>
52
- <DonutChart title="Distribution" data={chartData} />
53
- </div>
54
- </div>
55
- </div>
56
- </PageContainer>
57
- );
58
- }
59
- ```
60
-
61
- ---
62
-
63
- ## Responsive behavior
64
-
65
- | Breakpoint | Layout |
66
- |------------|--------|
67
- | Mobile (`< 768px`) | Single column, everything stacked |
68
- | Tablet (`md`) | Stat cards in 3-col grid, rest stacked |
69
- | Desktop (`lg`) | 70/30 split for table + chart |
70
-
71
- Key Tailwind classes:
72
-
73
- ```
74
- grid grid-cols-1 lg:grid-cols-[70%_30%] gap-6
75
- grid grid-cols-1 md:grid-cols-3 gap-6
76
- ```
77
-
78
- ---
79
-
80
- ## Loading state
81
-
82
- Show a full-page loading state while dashboard data is being fetched:
83
-
84
- ```tsx
85
- if (loading) {
86
- return (
87
- <PageContainer>
88
- <div className="flex items-center justify-center min-h-[400px]">
89
- <p className="text-muted-foreground">Loading dashboard…</p>
90
- </div>
91
- </PageContainer>
92
- );
93
- }
94
- ```
95
-
96
- Or use a skeleton layout:
97
-
98
- ```tsx
99
- if (loading) {
100
- return (
101
- <PageContainer>
102
- <div className="max-w-7xl mx-auto space-y-6">
103
- <div className="grid grid-cols-1 md:grid-cols-3 gap-6">
104
- {[1, 2, 3].map((i) => (
105
- <div key={i} className="h-28 animate-pulse rounded-xl bg-muted" />
106
- ))}
107
- </div>
108
- <div className="grid grid-cols-1 lg:grid-cols-[70%_30%] gap-6">
109
- <div className="h-64 animate-pulse rounded-xl bg-muted" />
110
- <div className="h-64 animate-pulse rounded-xl bg-muted" />
111
- </div>
112
- </div>
113
- </PageContainer>
114
- );
115
- }
116
- ```
117
-
118
- ---
119
-
120
- ## Data fetching pattern
121
-
122
- Use `useEffect` with cancellation for dashboard metrics:
123
-
124
- ```ts
125
- const [metrics, setMetrics] = useState<Metrics | null>(null);
126
- const [loading, setLoading] = useState(true);
127
-
128
- useEffect(() => {
129
- let cancelled = false;
130
- (async () => {
131
- try {
132
- setLoading(true);
133
- const data = await fetchDashboardMetrics();
134
- if (!cancelled) setMetrics(data);
135
- } catch (error) {
136
- if (!cancelled) console.error("Error loading metrics:", error);
137
- } finally {
138
- if (!cancelled) setLoading(false);
139
- }
140
- })();
141
- return () => { cancelled = true; };
142
- }, []);
143
- ```
144
-
145
- ---
146
-
147
- ## Combining multiple data sources
148
-
149
- Dashboards often aggregate data from several APIs. Load them in parallel:
150
-
151
- ```ts
152
- const [metrics, setMetrics] = useState<Metrics | null>(null);
153
- const [requests, setRequests] = useState<Request[]>([]);
154
- const [loading, setLoading] = useState(true);
155
-
156
- useEffect(() => {
157
- let cancelled = false;
158
- Promise.all([fetchMetrics(), fetchRecentRequests()])
159
- .then(([metricsData, requestsData]) => {
160
- if (!cancelled) {
161
- setMetrics(metricsData);
162
- setRequests(requestsData);
163
- }
164
- })
165
- .catch((err) => {
166
- if (!cancelled) console.error(err);
167
- })
168
- .finally(() => {
169
- if (!cancelled) setLoading(false);
170
- });
171
- return () => { cancelled = true; };
172
- }, []);
173
- ```
174
-
175
- ---
176
-
177
- ## PageContainer wrapper
178
-
179
- A simple wrapper for consistent page padding:
180
-
181
- ```tsx
182
- interface PageContainerProps {
183
- children: React.ReactNode;
184
- }
185
-
186
- export function PageContainer({ children }: PageContainerProps) {
187
- return <div className="p-6">{children}</div>;
188
- }
189
- ```
@@ -1,181 +0,0 @@
1
- # Donut / Pie Chart — Implementation Guide
2
-
3
- Requires **recharts** (install from the web app directory; see SKILL.md Step 2).
4
-
5
- ---
6
-
7
- ## Data structure
8
-
9
- Charts expect an array of objects with `name`, `value`, and `color`:
10
-
11
- ```ts
12
- interface ChartData {
13
- name: string;
14
- value: number;
15
- color: string;
16
- }
17
- ```
18
-
19
- ---
20
-
21
- ## Donut chart component
22
-
23
- Create at `components/DonutChart.tsx`:
24
-
25
- ```tsx
26
- import React from "react";
27
- import { PieChart, Pie, Cell, ResponsiveContainer } from "recharts";
28
- import { Card } from "@/components/ui/card";
29
-
30
- interface ChartData {
31
- name: string;
32
- value: number;
33
- color: string;
34
- }
35
-
36
- interface DonutChartProps {
37
- title: string;
38
- data: ChartData[];
39
- }
40
-
41
- export const DonutChart: React.FC<DonutChartProps> = ({ title, data }) => {
42
- const total = data.reduce((sum, item) => sum + item.value, 0);
43
- const mainPercentage = total > 0 ? Math.round((data[0]?.value / total) * 100) : 0;
44
-
45
- return (
46
- <Card className="p-4 border-gray-200 shadow-sm flex flex-col">
47
- <h3 className="text-sm font-medium text-primary mb-2 uppercase tracking-wide">
48
- {title}
49
- </h3>
50
-
51
- <div className="relative flex items-center justify-center">
52
- <ResponsiveContainer width="100%" height={300}>
53
- <PieChart>
54
- <Pie
55
- data={data}
56
- cx="50%"
57
- cy="50%"
58
- innerRadius={70}
59
- outerRadius={110}
60
- paddingAngle={2}
61
- dataKey="value"
62
- >
63
- {data.map((entry, index) => (
64
- <Cell key={`cell-${index}`} fill={entry.color} />
65
- ))}
66
- </Pie>
67
- </PieChart>
68
- </ResponsiveContainer>
69
-
70
- {/* Center label */}
71
- <div className="absolute inset-0 flex items-center justify-center">
72
- <div className="text-center">
73
- <div className="text-5xl font-bold text-primary">{mainPercentage}%</div>
74
- </div>
75
- </div>
76
- </div>
77
-
78
- {/* Legend */}
79
- <div className="mt-6 grid grid-cols-2 gap-3">
80
- {data.map((item, index) => (
81
- <div key={index} className="flex items-center gap-2">
82
- <div className="w-3 h-3 rounded-full" style={{ backgroundColor: item.color }} />
83
- <span className="text-sm text-gray-700">{item.name}</span>
84
- </div>
85
- ))}
86
- </div>
87
- </Card>
88
- );
89
- };
90
- ```
91
-
92
- ---
93
-
94
- ## Key Recharts concepts
95
-
96
- | Component | Purpose |
97
- |-----------|---------|
98
- | `ResponsiveContainer` | Wraps chart to make it fill its parent's width |
99
- | `PieChart` | Chart container for pie/donut |
100
- | `Pie` | The data ring; `innerRadius` > 0 makes it a donut |
101
- | `Cell` | Individual segment; accepts `fill` color |
102
- | `paddingAngle` | Gap between segments (degrees) |
103
-
104
- ### Donut vs Pie
105
-
106
- | Property | Donut | Pie |
107
- |----------|-------|-----|
108
- | `innerRadius` | `> 0` (e.g. `70`) | `0` |
109
- | Center label | Yes, positioned absolutely | Not typical |
110
-
111
- ---
112
-
113
- ## Preparing chart data from raw records
114
-
115
- Transform API data into the `ChartData[]` format before passing to the chart:
116
-
117
- ```tsx
118
- const CATEGORIES = ["Plumbing", "HVAC", "Electrical"] as const;
119
- const OTHER_LABEL = "Other";
120
- const COLORS = ["#7C3AED", "#EC4899", "#14B8A6", "#06B6D4"];
121
-
122
- const chartData = useMemo(() => {
123
- const counts: Record<string, number> = {};
124
- CATEGORIES.forEach((c) => (counts[c] = 0));
125
- counts[OTHER_LABEL] = 0;
126
-
127
- records.forEach((record) => {
128
- const type = record.category;
129
- if (CATEGORIES.includes(type as (typeof CATEGORIES)[number])) {
130
- counts[type]++;
131
- } else {
132
- counts[OTHER_LABEL]++;
133
- }
134
- });
135
-
136
- return [
137
- ...CATEGORIES.map((name, i) => ({ name, value: counts[name], color: COLORS[i] })),
138
- { name: OTHER_LABEL, value: counts[OTHER_LABEL], color: COLORS[CATEGORIES.length] },
139
- ];
140
- }, [records]);
141
- ```
142
-
143
- ---
144
-
145
- ## Color palette recommendations
146
-
147
- | Use case | Colors |
148
- |----------|--------|
149
- | Categorical (4 items) | `#7C3AED` `#EC4899` `#14B8A6` `#06B6D4` |
150
- | Status (3 items) | `#22C55E` `#F59E0B` `#EF4444` (green/amber/red) |
151
- | Sequential | Use opacity variants of one hue: `#7C3AED` at 100%, 75%, 50%, 25% |
152
-
153
- Keep chart colors consistent with the app's design system. Define them as constants, not inline values.
154
-
155
- ---
156
-
157
- ## Other chart types
158
-
159
- For **bar charts** and **line / area charts**, see `bar-line-chart.md` in this directory.
160
-
161
- ---
162
-
163
- ## Accessibility
164
-
165
- - Always include a text legend (not just colors).
166
- - Chart should be wrapped in a section with a visible heading.
167
- - For critical data, provide a text summary or table alternative.
168
- - Use sufficient color contrast between segments.
169
- - Consider `prefers-reduced-motion` for chart animations.
170
-
171
- ---
172
-
173
- ## Common mistakes
174
-
175
- | Mistake | Fix |
176
- |---------|-----|
177
- | Missing `ResponsiveContainer` | Chart won't resize; always wrap in `ResponsiveContainer` |
178
- | Fixed width/height on `PieChart` | Let `ResponsiveContainer` control sizing |
179
- | No legend | Add a grid legend below the chart |
180
- | Inline colors | Extract to constants for consistency |
181
- | No fallback for empty data | Show "No data" message when `data` is empty |