@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.
- package/lib/templates/project/.forceignore +3 -1
- package/lib/templates/project/reactb2e/AGENT.md +12 -2
- package/lib/templates/project/reactb2e/CHANGELOG.md +401 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/.forceignore +15 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/codegen.yml +1 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/eslint.config.js +44 -27
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/index.html +0 -1
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/package.json +7 -11
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/accountSearchService.ts +46 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/distinctAccountIndustries.graphql +19 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/distinctAccountTypes.graphql +19 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/getAccountDetail.graphql +121 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/searchAccounts.graphql +51 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/pages/AccountObjectDetailPage.tsx +357 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/pages/AccountSearch.tsx +275 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/pages/Home.tsx +34 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/api/objectSearchService.ts +84 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ActiveFilters.tsx +89 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/FilterPanel.tsx +127 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ObjectBreadcrumb.tsx +66 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/PaginationControls.tsx +151 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SearchBar.tsx +41 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SortControl.tsx +143 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/BooleanFilter.tsx +94 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateFilter.tsx +165 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateRangeFilter.tsx +78 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/MultiSelectFilter.tsx +106 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/NumericRangeFilter.tsx +102 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +40 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SelectFilter.tsx +97 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +77 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useAsyncData.ts +53 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useCachedAsyncData.ts +183 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useObjectSearchParams.ts +225 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/debounce.ts +22 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/fieldUtils.ts +29 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/filterUtils.ts +372 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/sortUtils.ts +38 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/api/graphql-operations-types.ts +11260 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/app.tsx +4 -1
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/appLayout.tsx +1 -1
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/AgentforceConversationClient.tsx +33 -5
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/alerts/status-alert.tsx +1 -1
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/badge.tsx +48 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/breadcrumb.tsx +109 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/calendar.tsx +232 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/checkbox.tsx +32 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/collapsible.tsx +33 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/datePicker.tsx +127 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/popover.tsx +89 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/components/ui/sonner.tsx +20 -0
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/index.ts +3 -117
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/pages/Home.tsx +10 -11
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/pages/TestAccPage.tsx +1 -1
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/routes.tsx +8 -20
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/types/conversation.ts +14 -4
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/tsconfig.json +7 -1
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/vite.config.ts +17 -13
- package/lib/templates/project/reactb2e/_r_/skills/{webapp-react-data-visualization → building-data-visualization}/SKILL.md +3 -3
- package/lib/templates/project/reactb2e/_r_/skills/building-data-visualization/implementation/bar-line-chart.md +316 -0
- package/lib/templates/project/{reactb2x/_r_/skills/webapp-react-data-visualization → reactb2e/_r_/skills/building-data-visualization}/implementation/donut-chart.md +1 -1
- package/lib/templates/project/{reactb2x/_r_/skills/webapp-react → reactb2e/_r_/skills/building-react-components}/SKILL.md +21 -5
- package/lib/templates/project/reactb2e/_r_/skills/{webapp-csp-trusted-sites → configuring-csp-trusted-sites}/SKILL.md +1 -1
- package/lib/templates/project/{reactb2x/_r_/webapp-webapplication.md → reactb2e/_r_/skills/configuring-webapp-metadata/SKILL.md} +2 -3
- package/lib/templates/project/reactb2e/_r_/{webapp.md → skills/creating-webapp/SKILL.md} +46 -4
- package/lib/templates/project/reactb2e/_r_/skills/deploying-to-salesforce/SKILL.md +226 -0
- package/lib/templates/project/reactb2e/_r_/skills/{feature-react-file-upload-file-upload → implementing-file-upload}/SKILL.md +1 -1
- package/lib/templates/project/{reactb2x/_r_/skills/webapp-features → reactb2e/_r_/skills/installing-webapp-features}/SKILL.md +3 -3
- package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/SKILL.md +186 -0
- package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/constraints.md +134 -0
- package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/examples.md +132 -0
- package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/style-tokens.md +101 -0
- package/lib/templates/project/reactb2e/_r_/skills/managing-agentforce-conversation-client/references/troubleshooting.md +57 -0
- package/lib/templates/project/reactb2e/_r_/skills/using-salesforce-data/SKILL.md +363 -0
- package/lib/templates/project/reactb2e/_r_/skills/using-salesforce-data/graphql-search.sh +139 -0
- package/lib/templates/project/reactb2e/_r_/webapp-data.md +353 -0
- package/lib/templates/project/reactb2e/_r_/webapp-ui.md +16 -0
- package/lib/templates/project/reactb2e/eslint.config.js +7 -0
- package/lib/templates/project/reactb2e/package-lock.json +9995 -0
- package/lib/templates/project/reactb2e/package.json +12 -11
- package/lib/templates/project/reactb2e/scripts/setup-cli.mjs +61 -31
- package/lib/templates/project/reactb2e/scripts/sf-project-setup.mjs +66 -0
- package/lib/templates/project/reactb2x/AGENT.md +12 -2
- package/lib/templates/project/reactb2x/CHANGELOG.md +401 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/.forceignore +15 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/codegen.yml +1 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/eslint.config.js +44 -27
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/index.html +0 -1
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/package.json +8 -11
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/accountSearchService.ts +46 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/distinctAccountIndustries.graphql +19 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/distinctAccountTypes.graphql +19 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/getAccountDetail.graphql +121 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/api/query/searchAccounts.graphql +51 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/pages/AccountObjectDetailPage.tsx +357 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/pages/AccountSearch.tsx +275 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/__examples__/pages/Home.tsx +34 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/api/objectSearchService.ts +84 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ActiveFilters.tsx +89 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/FilterPanel.tsx +127 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/ObjectBreadcrumb.tsx +66 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/PaginationControls.tsx +151 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SearchBar.tsx +41 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/SortControl.tsx +143 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/BooleanFilter.tsx +94 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateFilter.tsx +165 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/DateRangeFilter.tsx +78 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/MultiSelectFilter.tsx +106 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/NumericRangeFilter.tsx +102 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +40 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SelectFilter.tsx +97 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +77 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useAsyncData.ts +53 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useCachedAsyncData.ts +183 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useObjectSearchParams.ts +225 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/debounce.ts +22 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/fieldUtils.ts +29 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/filterUtils.ts +372 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_os_/utils/sortUtils.ts +38 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/api/userProfileApi.ts +13 -13
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/layouts/privateRouteLayout.tsx +10 -2
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ChangePassword.tsx +2 -2
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ForgotPassword.tsx +2 -2
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Login.tsx +2 -2
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Profile.tsx +26 -4
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Register.tsx +2 -2
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ResetPassword.tsx +2 -2
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/sessionTimeout/SessionTimeoutValidator.tsx +8 -16
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/authentication/sessionTimeout/sessionTimeService.ts +30 -42
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/api/graphql-operations-types.ts +11260 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/app.tsx +3 -1
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/alerts/status-alert.tsx +1 -1
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/badge.tsx +48 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/breadcrumb.tsx +109 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/calendar.tsx +232 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/checkbox.tsx +32 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/collapsible.tsx +33 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/datePicker.tsx +127 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/popover.tsx +89 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/components/ui/sonner.tsx +20 -0
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/pages/Home.tsx +10 -11
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/routes.tsx +9 -21
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/tsconfig.json +7 -1
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/vite.config.ts +17 -13
- package/lib/templates/project/reactb2x/_p_/_m_/networks/appreacttemplateb2x.network +1 -1
- package/lib/templates/project/reactb2x/_r_/skills/{webapp-react-data-visualization → building-data-visualization}/SKILL.md +3 -3
- package/lib/templates/project/reactb2x/_r_/skills/building-data-visualization/implementation/bar-line-chart.md +316 -0
- package/lib/templates/project/{reactb2e/_r_/skills/webapp-react-data-visualization → reactb2x/_r_/skills/building-data-visualization}/implementation/donut-chart.md +1 -1
- package/lib/templates/project/{reactb2e/_r_/skills/webapp-react → reactb2x/_r_/skills/building-react-components}/SKILL.md +21 -5
- package/lib/templates/project/reactb2x/_r_/skills/{webapp-csp-trusted-sites → configuring-csp-trusted-sites}/SKILL.md +1 -1
- package/lib/templates/project/{reactb2e/_r_/webapp-webapplication.md → reactb2x/_r_/skills/configuring-webapp-metadata/SKILL.md} +2 -3
- package/lib/templates/project/reactb2x/_r_/{webapp.md → skills/creating-webapp/SKILL.md} +46 -4
- package/lib/templates/project/reactb2x/_r_/skills/deploying-to-salesforce/SKILL.md +226 -0
- package/lib/templates/project/reactb2x/_r_/skills/{feature-react-file-upload-file-upload → implementing-file-upload}/SKILL.md +1 -1
- package/lib/templates/project/{reactb2e/_r_/skills/webapp-features → reactb2x/_r_/skills/installing-webapp-features}/SKILL.md +3 -3
- package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/SKILL.md +186 -0
- package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/constraints.md +134 -0
- package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/examples.md +132 -0
- package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/style-tokens.md +101 -0
- package/lib/templates/project/reactb2x/_r_/skills/managing-agentforce-conversation-client/references/troubleshooting.md +57 -0
- package/lib/templates/project/reactb2x/_r_/skills/using-salesforce-data/SKILL.md +363 -0
- package/lib/templates/project/reactb2x/_r_/skills/using-salesforce-data/graphql-search.sh +139 -0
- package/lib/templates/project/reactb2x/_r_/webapp-data.md +353 -0
- package/lib/templates/project/reactb2x/_r_/webapp-ui.md +16 -0
- package/lib/templates/project/reactb2x/eslint.config.js +7 -0
- package/lib/templates/project/reactb2x/package-lock.json +9995 -0
- package/lib/templates/project/reactb2x/package.json +12 -11
- package/lib/templates/project/reactb2x/scripts/setup-cli.mjs +61 -31
- package/lib/templates/project/reactb2x/scripts/sf-project-setup.mjs +66 -0
- package/lib/templates/webapplication/reactbasic/.forceignore +15 -0
- package/lib/templates/webapplication/reactbasic/codegen.yml +1 -0
- package/lib/templates/webapplication/reactbasic/eslint.config.js +44 -27
- package/lib/templates/webapplication/reactbasic/index.html +0 -1
- package/lib/templates/webapplication/reactbasic/package.json +6 -3
- package/lib/templates/webapplication/reactbasic/src/app.tsx +4 -1
- package/lib/templates/webapplication/reactbasic/src/components/alerts/status-alert.tsx +1 -1
- package/lib/templates/webapplication/reactbasic/src/components/ui/badge.tsx +48 -0
- package/lib/templates/webapplication/reactbasic/src/components/ui/breadcrumb.tsx +109 -0
- package/lib/templates/webapplication/reactbasic/src/components/ui/calendar.tsx +232 -0
- package/lib/templates/webapplication/reactbasic/src/components/ui/checkbox.tsx +32 -0
- package/lib/templates/webapplication/reactbasic/src/components/ui/collapsible.tsx +33 -0
- package/lib/templates/webapplication/reactbasic/src/components/ui/datePicker.tsx +127 -0
- package/lib/templates/webapplication/reactbasic/src/components/ui/popover.tsx +89 -0
- package/lib/templates/webapplication/reactbasic/src/components/ui/sonner.tsx +20 -0
- package/lib/templates/webapplication/reactbasic/tsconfig.json +7 -1
- package/lib/templates/webapplication/reactbasic/vite.config.ts +17 -13
- package/lib/utils/template-placeholders.js +7 -0
- package/lib/utils/template-placeholders.js.map +1 -1
- package/lib/utils/webappTemplateUtils.d.ts +3 -1
- package/lib/utils/webappTemplateUtils.js +4 -1
- package/lib/utils/webappTemplateUtils.js.map +1 -1
- package/package.json +6 -6
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailFields.tsx +0 -55
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailForm.tsx +0 -146
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailHeader.tsx +0 -34
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailLayoutSections.tsx +0 -80
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/Section.tsx +0 -108
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/SectionRow.tsx +0 -20
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/UiApiDetailForm.tsx +0 -140
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FieldValueDisplay.tsx +0 -73
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedAddress.tsx +0 -29
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedEmail.tsx +0 -17
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedPhone.tsx +0 -24
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedText.tsx +0 -11
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedUrl.tsx +0 -29
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FilterField.tsx +0 -54
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FilterInput.tsx +0 -55
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FilterSelect.tsx +0 -72
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FiltersPanel.tsx +0 -380
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/forms/filters-form.tsx +0 -114
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/forms/submit-button.tsx +0 -47
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/GlobalSearchInput.tsx +0 -114
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/ResultCardFields.tsx +0 -71
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchHeader.tsx +0 -31
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchPagination.tsx +0 -144
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchResultCard.tsx +0 -136
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchResultsPanel.tsx +0 -197
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/shared/LoadingFallback.tsx +0 -61
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/objectDetailService.ts +0 -102
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/objectInfoGraphQLService.ts +0 -137
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/objectInfoService.ts +0 -95
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/recordListGraphQLService.ts +0 -364
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/constants.ts +0 -39
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/filters/FilterInput.tsx +0 -55
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/filters/FilterSelect.tsx +0 -72
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/form.tsx +0 -209
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useObjectInfoBatch.ts +0 -65
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useObjectSearchData.ts +0 -174
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useRecordDetailLayout.ts +0 -137
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useRecordListGraphQL.ts +0 -135
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/pages/DetailPage.tsx +0 -109
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/pages/GlobalSearch.tsx +0 -229
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/filters/filters.ts +0 -121
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/filters/picklist.ts +0 -6
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/objectInfo/objectInfo.ts +0 -49
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/recordDetail/recordDetail.ts +0 -61
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/schema.d.ts +0 -200
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/search/searchResults.ts +0 -229
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/apiUtils.ts +0 -59
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/cacheUtils.ts +0 -76
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/debounce.ts +0 -89
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/fieldUtils.ts +0 -354
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/fieldValueExtractor.ts +0 -67
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/filterUtils.ts +0 -32
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/formDataTransformUtils.ts +0 -260
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/formUtils.ts +0 -142
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/graphQLNodeFieldUtils.ts +0 -186
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/graphQLObjectInfoAdapter.ts +0 -77
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/graphQLRecordAdapter.ts +0 -90
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/layoutTransformUtils.ts +0 -236
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/linkUtils.ts +0 -14
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/paginationUtils.ts +0 -49
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/recordUtils.ts +0 -159
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/sanitizationUtils.ts +0 -49
- package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/tsconfig.tsbuildinfo +0 -1
- package/lib/templates/project/reactb2e/_r_/features/feature-graphql-graphql-data-access-rule.md +0 -470
- package/lib/templates/project/reactb2e/_r_/features/feature-react-agentforce-conversation-client-embedded-agent-rule.md +0 -18
- package/lib/templates/project/reactb2e/_r_/features/feature-react-chart-analytics-charts-rule.md +0 -27
- package/lib/templates/project/reactb2e/_r_/skills/_k_/SKILL.md +0 -148
- package/lib/templates/project/reactb2e/_r_/skills/_k_/docs/embed-examples.md +0 -192
- package/lib/templates/project/reactb2e/_r_/skills/_k_/docs/troubleshooting.md +0 -51
- package/lib/templates/project/reactb2e/_r_/skills/feature-graphql-graphql-data-access/SKILL.md +0 -155
- package/lib/templates/project/reactb2e/_r_/skills/feature-graphql-graphql-data-access/docs/explore-schema.md +0 -256
- package/lib/templates/project/reactb2e/_r_/skills/feature-graphql-graphql-data-access/docs/generate-mutation-query.md +0 -228
- package/lib/templates/project/reactb2e/_r_/skills/feature-graphql-graphql-data-access/docs/generate-read-query.md +0 -202
- package/lib/templates/project/reactb2e/_r_/skills/feature-graphql-graphql-data-access/docs/shared-schema.graphqls +0 -1150
- package/lib/templates/project/reactb2e/_r_/skills/feature-micro-frontend-micro-frontend/SKILL.md +0 -137
- package/lib/templates/project/reactb2e/_r_/skills/feature-react-chart-analytics-charts/SKILL.md +0 -41
- package/lib/templates/project/reactb2e/_r_/skills/feature-react-chart-analytics-charts/docs/schema-mapping.md +0 -4
- package/lib/templates/project/reactb2e/_r_/skills/webapp-react-interactive-map/SKILL.md +0 -92
- package/lib/templates/project/reactb2e/_r_/skills/webapp-react-interactive-map/implementation/geocoding.md +0 -245
- package/lib/templates/project/reactb2e/_r_/skills/webapp-react-interactive-map/implementation/leaflet-map.md +0 -279
- package/lib/templates/project/reactb2e/_r_/skills/webapp-react-weather-widget/SKILL.md +0 -65
- package/lib/templates/project/reactb2e/_r_/skills/webapp-react-weather-widget/implementation/weather-hook.md +0 -258
- package/lib/templates/project/reactb2e/_r_/skills/webapp-react-weather-widget/implementation/weather-ui.md +0 -216
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/SKILL.md +0 -271
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/charts.csv +0 -26
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/colors.csv +0 -97
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/icons.csv +0 -101
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/landing.csv +0 -31
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/products.csv +0 -97
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/react-performance.csv +0 -45
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/stacks/html-tailwind.csv +0 -56
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/stacks/react.csv +0 -54
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/stacks/shadcn.csv +0 -61
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/styles.csv +0 -68
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/typography.csv +0 -58
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/ui-reasoning.csv +0 -101
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/ux-guidelines.csv +0 -100
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/data/web-interface.csv +0 -31
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/scripts/core.js +0 -255
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/scripts/design_system.js +0 -861
- package/lib/templates/project/reactb2e/_r_/skills/webapp-ui-ux/scripts/search.js +0 -98
- package/lib/templates/project/reactb2e/_r_/skills/webapp-unsplash-images/SKILL.md +0 -71
- package/lib/templates/project/reactb2e/_r_/skills/webapp-unsplash-images/implementation/usage.md +0 -159
- package/lib/templates/project/reactb2e/_r_/webapp-cli-commands.md +0 -88
- package/lib/templates/project/reactb2e/_r_/webapp-react-code-quality.md +0 -136
- package/lib/templates/project/reactb2e/_r_/webapp-react-typescript.md +0 -205
- package/lib/templates/project/reactb2e/_r_/webapp-react.md +0 -202
- package/lib/templates/project/reactb2e/_r_/webapp-skills-first.md +0 -26
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailFields.tsx +0 -55
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailForm.tsx +0 -146
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailHeader.tsx +0 -34
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/DetailLayoutSections.tsx +0 -80
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/Section.tsx +0 -108
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/SectionRow.tsx +0 -20
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/UiApiDetailForm.tsx +0 -140
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FieldValueDisplay.tsx +0 -73
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedAddress.tsx +0 -29
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedEmail.tsx +0 -17
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedPhone.tsx +0 -24
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedText.tsx +0 -11
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/_det_/_fmt_/FormattedUrl.tsx +0 -29
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FilterField.tsx +0 -54
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FilterInput.tsx +0 -55
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FilterSelect.tsx +0 -72
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/filters/FiltersPanel.tsx +0 -380
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/forms/filters-form.tsx +0 -114
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/forms/submit-button.tsx +0 -47
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/GlobalSearchInput.tsx +0 -114
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/ResultCardFields.tsx +0 -71
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchHeader.tsx +0 -31
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchPagination.tsx +0 -144
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchResultCard.tsx +0 -136
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/search/SearchResultsPanel.tsx +0 -197
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/_c_/shared/LoadingFallback.tsx +0 -61
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/objectDetailService.ts +0 -102
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/objectInfoGraphQLService.ts +0 -137
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/objectInfoService.ts +0 -95
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/api/recordListGraphQLService.ts +0 -364
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/constants.ts +0 -39
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/filters/FilterInput.tsx +0 -55
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/filters/FilterSelect.tsx +0 -72
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/form.tsx +0 -209
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useObjectInfoBatch.ts +0 -65
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useObjectSearchData.ts +0 -174
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useRecordDetailLayout.ts +0 -137
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/hooks/useRecordListGraphQL.ts +0 -135
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/pages/DetailPage.tsx +0 -109
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/pages/GlobalSearch.tsx +0 -229
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/filters/filters.ts +0 -121
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/filters/picklist.ts +0 -6
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/objectInfo/objectInfo.ts +0 -49
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/recordDetail/recordDetail.ts +0 -61
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/schema.d.ts +0 -200
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/types/search/searchResults.ts +0 -229
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/apiUtils.ts +0 -59
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/cacheUtils.ts +0 -76
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/debounce.ts +0 -89
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/fieldUtils.ts +0 -354
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/fieldValueExtractor.ts +0 -67
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/filterUtils.ts +0 -32
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/formDataTransformUtils.ts +0 -260
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/formUtils.ts +0 -142
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/graphQLNodeFieldUtils.ts +0 -186
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/graphQLObjectInfoAdapter.ts +0 -77
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/graphQLRecordAdapter.ts +0 -90
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/layoutTransformUtils.ts +0 -236
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/linkUtils.ts +0 -14
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/paginationUtils.ts +0 -49
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/recordUtils.ts +0 -159
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/_f_/_gs_/utils/sanitizationUtils.ts +0 -49
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/src/index.ts +0 -120
- package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/tsconfig.tsbuildinfo +0 -1
- package/lib/templates/project/reactb2x/_r_/features/feature-graphql-graphql-data-access-rule.md +0 -470
- package/lib/templates/project/reactb2x/_r_/features/feature-react-agentforce-conversation-client-embedded-agent-rule.md +0 -18
- package/lib/templates/project/reactb2x/_r_/features/feature-react-chart-analytics-charts-rule.md +0 -27
- package/lib/templates/project/reactb2x/_r_/skills/_k_/SKILL.md +0 -148
- package/lib/templates/project/reactb2x/_r_/skills/_k_/docs/embed-examples.md +0 -192
- package/lib/templates/project/reactb2x/_r_/skills/_k_/docs/troubleshooting.md +0 -51
- package/lib/templates/project/reactb2x/_r_/skills/feature-graphql-graphql-data-access/SKILL.md +0 -155
- package/lib/templates/project/reactb2x/_r_/skills/feature-graphql-graphql-data-access/docs/explore-schema.md +0 -256
- package/lib/templates/project/reactb2x/_r_/skills/feature-graphql-graphql-data-access/docs/generate-mutation-query.md +0 -228
- package/lib/templates/project/reactb2x/_r_/skills/feature-graphql-graphql-data-access/docs/generate-read-query.md +0 -202
- package/lib/templates/project/reactb2x/_r_/skills/feature-graphql-graphql-data-access/docs/shared-schema.graphqls +0 -1150
- package/lib/templates/project/reactb2x/_r_/skills/feature-micro-frontend-micro-frontend/SKILL.md +0 -137
- package/lib/templates/project/reactb2x/_r_/skills/feature-react-chart-analytics-charts/SKILL.md +0 -41
- package/lib/templates/project/reactb2x/_r_/skills/feature-react-chart-analytics-charts/docs/schema-mapping.md +0 -4
- package/lib/templates/project/reactb2x/_r_/skills/webapp-react-interactive-map/SKILL.md +0 -92
- package/lib/templates/project/reactb2x/_r_/skills/webapp-react-interactive-map/implementation/geocoding.md +0 -245
- package/lib/templates/project/reactb2x/_r_/skills/webapp-react-interactive-map/implementation/leaflet-map.md +0 -279
- package/lib/templates/project/reactb2x/_r_/skills/webapp-react-weather-widget/SKILL.md +0 -65
- package/lib/templates/project/reactb2x/_r_/skills/webapp-react-weather-widget/implementation/weather-hook.md +0 -258
- package/lib/templates/project/reactb2x/_r_/skills/webapp-react-weather-widget/implementation/weather-ui.md +0 -216
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/SKILL.md +0 -271
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/charts.csv +0 -26
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/colors.csv +0 -97
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/icons.csv +0 -101
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/landing.csv +0 -31
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/products.csv +0 -97
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/react-performance.csv +0 -45
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/stacks/html-tailwind.csv +0 -56
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/stacks/react.csv +0 -54
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/stacks/shadcn.csv +0 -61
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/styles.csv +0 -68
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/typography.csv +0 -58
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/ui-reasoning.csv +0 -101
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/ux-guidelines.csv +0 -100
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/data/web-interface.csv +0 -31
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/scripts/core.js +0 -255
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/scripts/design_system.js +0 -861
- package/lib/templates/project/reactb2x/_r_/skills/webapp-ui-ux/scripts/search.js +0 -98
- package/lib/templates/project/reactb2x/_r_/skills/webapp-unsplash-images/SKILL.md +0 -71
- package/lib/templates/project/reactb2x/_r_/skills/webapp-unsplash-images/implementation/usage.md +0 -159
- package/lib/templates/project/reactb2x/_r_/webapp-cli-commands.md +0 -88
- package/lib/templates/project/reactb2x/_r_/webapp-react-code-quality.md +0 -136
- package/lib/templates/project/reactb2x/_r_/webapp-react-typescript.md +0 -205
- package/lib/templates/project/reactb2x/_r_/webapp-react.md +0 -202
- package/lib/templates/project/reactb2x/_r_/webapp-skills-first.md +0 -26
- /package/lib/templates/project/reactb2e/_p_/_m_/_w_/_a_/{src/components.json → components.json} +0 -0
- /package/lib/templates/project/reactb2e/_r_/skills/{webapp-react-data-visualization → building-data-visualization}/implementation/dashboard-layout.md +0 -0
- /package/lib/templates/project/reactb2e/_r_/skills/{webapp-react-data-visualization → building-data-visualization}/implementation/stat-card.md +0 -0
- /package/lib/templates/project/reactb2e/_r_/skills/{webapp-react → building-react-components}/implementation/component.md +0 -0
- /package/lib/templates/project/reactb2e/_r_/skills/{webapp-react → building-react-components}/implementation/header-footer.md +0 -0
- /package/lib/templates/project/reactb2e/_r_/skills/{webapp-react → building-react-components}/implementation/page.md +0 -0
- /package/lib/templates/project/reactb2e/_r_/skills/{webapp-csp-trusted-sites → configuring-csp-trusted-sites}/implementation/metadata-format.md +0 -0
- /package/lib/templates/project/reactb2x/_p_/_m_/_w_/_a_/{src/components.json → components.json} +0 -0
- /package/lib/templates/project/reactb2x/_r_/skills/{webapp-react-data-visualization → building-data-visualization}/implementation/dashboard-layout.md +0 -0
- /package/lib/templates/project/reactb2x/_r_/skills/{webapp-react-data-visualization → building-data-visualization}/implementation/stat-card.md +0 -0
- /package/lib/templates/project/reactb2x/_r_/skills/{webapp-react → building-react-components}/implementation/component.md +0 -0
- /package/lib/templates/project/reactb2x/_r_/skills/{webapp-react → building-react-components}/implementation/header-footer.md +0 -0
- /package/lib/templates/project/reactb2x/_r_/skills/{webapp-react → building-react-components}/implementation/page.md +0 -0
- /package/lib/templates/project/reactb2x/_r_/skills/{webapp-csp-trusted-sites → configuring-csp-trusted-sites}/implementation/metadata-format.md +0 -0
- /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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
14
|
-
import
|
|
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:
|
|
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: "
|
|
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: "
|
|
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": [
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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>
|
|
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:
|
|
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** —
|
|
50
|
-
- **Line / area chart** —
|
|
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**,
|
|
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:
|
|
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
|
-
##
|
|
71
|
+
## TypeScript Standards
|
|
72
72
|
|
|
73
|
-
|
|
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.
|
|
80
|
-
- **Build:** MUST succeed
|
|
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:
|
|
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
|
-
|
|
4
|
-
|
|
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
|
-
|
|
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/`.
|
|
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.
|
|
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
|
-
|