@salesforce/templates 66.5.5 → 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 +4 -4
- 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
package/lib/templates/project/reactb2e/_r_/features/feature-graphql-graphql-data-access-rule.md
DELETED
|
@@ -1,470 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
paths:
|
|
3
|
-
- "**/*.ts"
|
|
4
|
-
- "**/*.tsx"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# GraphQL Data Access
|
|
8
|
-
|
|
9
|
-
Instructs agents to use the established GraphQL utilities for Salesforce data access.
|
|
10
|
-
|
|
11
|
-
## TypeScript Types & Code Generation
|
|
12
|
-
|
|
13
|
-
### Generated Types File
|
|
14
|
-
|
|
15
|
-
Types are auto-generated at: `src/api/graphql-operations-types.ts`
|
|
16
|
-
|
|
17
|
-
### Generation Command
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
npm run graphql:codegen
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
The codegen configuration is at `codegen.yml` and generates types from:
|
|
24
|
-
|
|
25
|
-
- Schema: `schema.graphql` (project root)
|
|
26
|
-
- Documents: `src/**/*.{graphql,ts,tsx}`
|
|
27
|
-
|
|
28
|
-
### Type Naming Convention
|
|
29
|
-
|
|
30
|
-
For a GraphQL operation named `GetHighRevenueAccounts`:
|
|
31
|
-
|
|
32
|
-
- **Query/Mutation Response Type**: `GetHighRevenueAccountsQuery` or `GetHighRevenueAccountsMutation`
|
|
33
|
-
- **Input Variables Type**: `GetHighRevenueAccountsQueryVariables` or `GetHighRevenueAccountsMutationVariables`
|
|
34
|
-
|
|
35
|
-
## Core Types & Function Signatures
|
|
36
|
-
|
|
37
|
-
### getDataSDK Function
|
|
38
|
-
|
|
39
|
-
Available from `@salesforce/sdk-data`:
|
|
40
|
-
|
|
41
|
-
```typescript
|
|
42
|
-
import { getDataSDK } from "@salesforce/sdk-data";
|
|
43
|
-
|
|
44
|
-
const data = await getDataSDK();
|
|
45
|
-
const response = await data.graphql?.<ResponseType, VariablesType>(query, variables);
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
`getDataSDK()` returns a lazily-initialized `DataSDK` singleton. The `graphql` method uses optional chaining (`?.`) because not all surfaces support GraphQL.
|
|
49
|
-
|
|
50
|
-
### gql Template Tag
|
|
51
|
-
|
|
52
|
-
Also available from `@salesforce/sdk-data` for inline query definitions:
|
|
53
|
-
|
|
54
|
-
```typescript
|
|
55
|
-
import { gql } from "@salesforce/sdk-data";
|
|
56
|
-
|
|
57
|
-
const MY_QUERY = gql`
|
|
58
|
-
query MyQuery {
|
|
59
|
-
uiapi {
|
|
60
|
-
...
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
`;
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
The `gql` tag is a template literal that allows defining GraphQL queries inline while maintaining syntax highlighting in most editors.
|
|
67
|
-
|
|
68
|
-
### GraphQLResponse Shape
|
|
69
|
-
|
|
70
|
-
`data.graphql?.()` returns `GraphQLResponse<T>`. Callers destructure `{ data, errors }` and handle errors themselves:
|
|
71
|
-
|
|
72
|
-
```typescript
|
|
73
|
-
interface GraphQLResponse<T> {
|
|
74
|
-
data: T;
|
|
75
|
-
errors?: Array<{
|
|
76
|
-
message: string;
|
|
77
|
-
locations?: Array<{ line: number; column: number }>;
|
|
78
|
-
path?: string[];
|
|
79
|
-
}>;
|
|
80
|
-
}
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### Handling Mixed Responses (Partial Success)
|
|
84
|
-
|
|
85
|
-
GraphQL can return **both `data` and `errors`** in the same response (partial success). For example, some fields may resolve while others fail due to field-level security. Choose a strategy per use case:
|
|
86
|
-
|
|
87
|
-
```typescript
|
|
88
|
-
// Strategy A: Strict — treat any errors as failure (default for most queries)
|
|
89
|
-
if (response?.errors?.length) {
|
|
90
|
-
throw new Error(response.errors.map((e) => e.message).join("; "));
|
|
91
|
-
}
|
|
92
|
-
const result = response?.data;
|
|
93
|
-
|
|
94
|
-
// Strategy B: Tolerant — log errors but use partial data
|
|
95
|
-
if (response?.errors?.length) {
|
|
96
|
-
console.warn("GraphQL partial errors:", response.errors);
|
|
97
|
-
}
|
|
98
|
-
const result = response?.data;
|
|
99
|
-
|
|
100
|
-
// Strategy C: Discriminated — fail only when no data came back
|
|
101
|
-
if (response?.errors?.length && !response?.data) {
|
|
102
|
-
throw new Error(response.errors.map((e) => e.message).join("; "));
|
|
103
|
-
}
|
|
104
|
-
if (response?.errors?.length) {
|
|
105
|
-
console.warn("Partial success with errors:", response.errors);
|
|
106
|
-
}
|
|
107
|
-
const result = response?.data;
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
**When to use each:**
|
|
111
|
-
|
|
112
|
-
- **Strategy A** — Default. Use for queries where incomplete data would be misleading (e.g., financial summaries, approval workflows).
|
|
113
|
-
- **Strategy B** — Use when partial data is still useful and the UI can degrade gracefully (e.g., dashboard tiles, optional fields).
|
|
114
|
-
- **Strategy C** — Use for mutations where the operation may succeed but some return fields are inaccessible.
|
|
115
|
-
|
|
116
|
-
For mutation-specific partial responses, see `docs/generate-mutation-query.md` which covers `PARTIAL` and `FAILED` status handling workflows.
|
|
117
|
-
|
|
118
|
-
### NodeOfConnection Utility Type
|
|
119
|
-
|
|
120
|
-
Extract the node type from a connection (edges/node pattern):
|
|
121
|
-
|
|
122
|
-
```typescript
|
|
123
|
-
import { type NodeOfConnection } from "@salesforce/sdk-data";
|
|
124
|
-
|
|
125
|
-
// Extract Account node type from the query response
|
|
126
|
-
type AccountNode = NodeOfConnection<GetHighRevenueAccountsQuery["uiapi"]["query"]["Account"]>;
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### UIAPI Response Shape
|
|
130
|
-
|
|
131
|
-
All Salesforce GraphQL record queries follow this structure (https://developer.salesforce.com/docs/platform/graphql/guide/query-record-objects.html):
|
|
132
|
-
|
|
133
|
-
```typescript
|
|
134
|
-
interface UIAPIQueryResponse {
|
|
135
|
-
uiapi: {
|
|
136
|
-
query: {
|
|
137
|
-
[ObjectName]: {
|
|
138
|
-
edges?: Array<{
|
|
139
|
-
node?: {
|
|
140
|
-
Id: string;
|
|
141
|
-
[FieldName]?: { value?: FieldType | null } | null;
|
|
142
|
-
// Reference fields include the related record
|
|
143
|
-
[ReferenceField]?: {
|
|
144
|
-
value?: string | null; // The ID
|
|
145
|
-
[RelatedField]?: { value?: RelatedType | null } | null;
|
|
146
|
-
} | null;
|
|
147
|
-
} | null;
|
|
148
|
-
} | null> | null;
|
|
149
|
-
} | null;
|
|
150
|
-
};
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
## Required Workflow
|
|
156
|
-
|
|
157
|
-
There are **two acceptable patterns** for defining GraphQL queries:
|
|
158
|
-
|
|
159
|
-
### Pattern 1: External .graphql File (Recommended for complex queries)
|
|
160
|
-
|
|
161
|
-
#### Step 1: Create .graphql File
|
|
162
|
-
|
|
163
|
-
Store queries in `.graphql` files for codegen to process:
|
|
164
|
-
|
|
165
|
-
```graphql
|
|
166
|
-
# src/api/utils/query/myQuery.graphql
|
|
167
|
-
query GetMyData($myVariable: String) {
|
|
168
|
-
uiapi {
|
|
169
|
-
query {
|
|
170
|
-
MyObject(first: 10, where: { Field: { eq: $myVariable } }) {
|
|
171
|
-
edges {
|
|
172
|
-
node {
|
|
173
|
-
Id
|
|
174
|
-
Name {
|
|
175
|
-
value
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
#### Step 2: Run Code Generation
|
|
186
|
-
|
|
187
|
-
```bash
|
|
188
|
-
npm run graphql:codegen
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
This generates types in `graphql-operations-types.ts`:
|
|
192
|
-
|
|
193
|
-
- `GetMyDataQuery` - response type
|
|
194
|
-
- `GetMyDataQueryVariables` - variables type
|
|
195
|
-
|
|
196
|
-
#### Step 3: Import and Use
|
|
197
|
-
|
|
198
|
-
```typescript
|
|
199
|
-
import { getDataSDK, type NodeOfConnection } from "@salesforce/sdk-data";
|
|
200
|
-
import MY_QUERY from "./query/myQuery.graphql?raw";
|
|
201
|
-
import type { GetMyDataQuery, GetMyDataQueryVariables } from "../graphql-operations-types";
|
|
202
|
-
|
|
203
|
-
type MyNode = NodeOfConnection<GetMyDataQuery["uiapi"]["query"]["MyObject"]>;
|
|
204
|
-
|
|
205
|
-
export async function getMyData(variables: GetMyDataQueryVariables): Promise<MyNode[]> {
|
|
206
|
-
const data = await getDataSDK();
|
|
207
|
-
const response = await data.graphql?.<GetMyDataQuery, GetMyDataQueryVariables>(
|
|
208
|
-
MY_QUERY,
|
|
209
|
-
variables,
|
|
210
|
-
);
|
|
211
|
-
|
|
212
|
-
if (response?.errors?.length) {
|
|
213
|
-
const errorMessages = response.errors.map((e) => e.message).join("; ");
|
|
214
|
-
throw new Error(`GraphQL Error: ${errorMessages}`);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
return response?.data?.uiapi?.query?.MyObject?.edges?.map((edge) => edge?.node) || [];
|
|
218
|
-
}
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
**Key imports for Pattern 1:**
|
|
222
|
-
|
|
223
|
-
- `getDataSDK` - Get the DataSDK singleton
|
|
224
|
-
- `NodeOfConnection` - Extract node types from connection responses
|
|
225
|
-
- Query from `.graphql` file with `?raw` suffix
|
|
226
|
-
- Generated types from `graphql-operations-types.ts`
|
|
227
|
-
|
|
228
|
-
**Pattern 1 Benefits:**
|
|
229
|
-
|
|
230
|
-
- Full codegen support with automatic type generation
|
|
231
|
-
- Syntax highlighting and validation in `.graphql` files
|
|
232
|
-
- Easier to share queries across multiple files/components
|
|
233
|
-
- Better for complex queries with fragments and multiple variables
|
|
234
|
-
- IDE support for GraphQL (autocomplete, validation)
|
|
235
|
-
- Queries can be tested independently
|
|
236
|
-
- Clear separation of concerns between query definition and usage
|
|
237
|
-
|
|
238
|
-
**Pattern 1 Limitations:**
|
|
239
|
-
|
|
240
|
-
- Requires separate file management
|
|
241
|
-
- Extra step to run codegen after query changes
|
|
242
|
-
- More boilerplate (file import with `?raw`, separate file to maintain)
|
|
243
|
-
- Slight overhead for very simple queries
|
|
244
|
-
- Need to navigate between files during development
|
|
245
|
-
- Doesn't support dynamic queries (e.g., the set of fields changes based on runtime conditions and cannot be predetermined)
|
|
246
|
-
|
|
247
|
-
### Pattern 2: Inline Query with gql Tag (Recommended for simple queries)
|
|
248
|
-
|
|
249
|
-
For simpler queries without variables or when colocation is preferred:
|
|
250
|
-
|
|
251
|
-
```typescript
|
|
252
|
-
import { getDataSDK, gql } from "@salesforce/sdk-data";
|
|
253
|
-
import { type CurrentUserQuery } from "../graphql-operations-types";
|
|
254
|
-
|
|
255
|
-
const CURRENT_USER_QUERY = gql`
|
|
256
|
-
query CurrentUser {
|
|
257
|
-
uiapi {
|
|
258
|
-
currentUser {
|
|
259
|
-
Id
|
|
260
|
-
Name {
|
|
261
|
-
value
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
`;
|
|
267
|
-
|
|
268
|
-
interface User {
|
|
269
|
-
id: string;
|
|
270
|
-
name: string;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
export async function getCurrentUser(): Promise<User | null> {
|
|
274
|
-
try {
|
|
275
|
-
const data = await getDataSDK();
|
|
276
|
-
const response = await data.graphql?.<CurrentUserQuery>(CURRENT_USER_QUERY);
|
|
277
|
-
|
|
278
|
-
if (response?.errors?.length) {
|
|
279
|
-
throw new Error(response.errors.map((e) => e.message).join("; "));
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
const userData = response?.data?.uiapi.currentUser;
|
|
283
|
-
|
|
284
|
-
if (!userData) {
|
|
285
|
-
throw new Error("No user data found");
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
return {
|
|
289
|
-
id: userData.Id,
|
|
290
|
-
name: userData.Name?.value || "User",
|
|
291
|
-
};
|
|
292
|
-
} catch (error) {
|
|
293
|
-
console.error("Error fetching user data:", error);
|
|
294
|
-
throw error;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
**Key imports for Pattern 2:**
|
|
300
|
-
|
|
301
|
-
- `getDataSDK` - Get the DataSDK singleton
|
|
302
|
-
- `gql` - Template tag for inline query definition
|
|
303
|
-
- Generated types from `graphql-operations-types.ts`
|
|
304
|
-
|
|
305
|
-
**Pattern 2 Benefits:**
|
|
306
|
-
|
|
307
|
-
- Query is colocated with usage code
|
|
308
|
-
- Supports dynamic queries (e.g., the set of fields changes based on runtime conditions and cannot be predetermined)
|
|
309
|
-
- No separate file to maintain
|
|
310
|
-
- Still gets type-checked against generated types
|
|
311
|
-
- Simpler for straightforward queries
|
|
312
|
-
|
|
313
|
-
**Pattern 2 Limitations:**
|
|
314
|
-
|
|
315
|
-
- Inline queries without `gql` template tag are not processed by codegen
|
|
316
|
-
- Must manually ensure query name matches generated types
|
|
317
|
-
- Less suitable for complex queries with fragments
|
|
318
|
-
|
|
319
|
-
## Conditional Field Selection with Directives
|
|
320
|
-
|
|
321
|
-
For dynamic fieldsets with known fields that should be conditionally included, use GraphQL directives instead of building queries dynamically. This preserves type generation while allowing runtime control.
|
|
322
|
-
|
|
323
|
-
### Directives
|
|
324
|
-
|
|
325
|
-
- **`@include(if: $condition)`** - include field/fragment when `$condition` is `true`
|
|
326
|
-
- **`@skip(if: $condition)`** - skip field/fragment when `$condition` is `true`
|
|
327
|
-
|
|
328
|
-
### Example with Fragments
|
|
329
|
-
|
|
330
|
-
```graphql
|
|
331
|
-
query GetAccountDetails($id: ID!, $includeFinancials: Boolean!, $includeContacts: Boolean!) {
|
|
332
|
-
uiapi {
|
|
333
|
-
query {
|
|
334
|
-
Account(where: { Id: { eq: $id } }) {
|
|
335
|
-
edges {
|
|
336
|
-
node {
|
|
337
|
-
Id
|
|
338
|
-
Name {
|
|
339
|
-
value
|
|
340
|
-
}
|
|
341
|
-
...FinancialFields @include(if: $includeFinancials)
|
|
342
|
-
...ContactFields @include(if: $includeContacts)
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
fragment FinancialFields on Account {
|
|
351
|
-
AnnualRevenue {
|
|
352
|
-
value
|
|
353
|
-
}
|
|
354
|
-
NumberOfEmployees {
|
|
355
|
-
value
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
fragment ContactFields on Account {
|
|
360
|
-
Phone {
|
|
361
|
-
value
|
|
362
|
-
}
|
|
363
|
-
Website {
|
|
364
|
-
value
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
### Usage
|
|
370
|
-
|
|
371
|
-
```typescript
|
|
372
|
-
import { getDataSDK } from "@salesforce/sdk-data";
|
|
373
|
-
import QUERY from "./query/getAccountDetails.graphql?raw";
|
|
374
|
-
import type {
|
|
375
|
-
GetAccountDetailsQuery,
|
|
376
|
-
GetAccountDetailsQueryVariables,
|
|
377
|
-
} from "../graphql-operations-types";
|
|
378
|
-
|
|
379
|
-
const data = await getDataSDK();
|
|
380
|
-
const response = await data.graphql?.<GetAccountDetailsQuery, GetAccountDetailsQueryVariables>(
|
|
381
|
-
QUERY,
|
|
382
|
-
{
|
|
383
|
-
id: accountId,
|
|
384
|
-
includeFinancials: userWantsFinancials,
|
|
385
|
-
includeContacts: userWantsContacts,
|
|
386
|
-
},
|
|
387
|
-
);
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
## Anti-Patterns (Not Recommended)
|
|
391
|
-
|
|
392
|
-
### Direct API Calls
|
|
393
|
-
|
|
394
|
-
```typescript
|
|
395
|
-
// NOT RECOMMENDED: Direct axios/fetch calls for GraphQL
|
|
396
|
-
const response = await axios.post("/graphql", { query });
|
|
397
|
-
|
|
398
|
-
// PREFERRED: Use the DataSDK
|
|
399
|
-
const data = await getDataSDK();
|
|
400
|
-
const response = await data.graphql?.<ResponseType>(query, variables);
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
### Missing Type Definitions
|
|
404
|
-
|
|
405
|
-
```typescript
|
|
406
|
-
// NOT RECOMMENDED: Untyped GraphQL calls
|
|
407
|
-
const data = await getDataSDK();
|
|
408
|
-
await data.graphql?.(query);
|
|
409
|
-
|
|
410
|
-
// PREFERRED: Provide response type
|
|
411
|
-
const data = await getDataSDK();
|
|
412
|
-
const response = await data.graphql?.<GetMyDataQuery>(query);
|
|
413
|
-
```
|
|
414
|
-
|
|
415
|
-
### Plain String Queries (Without gql Tag)
|
|
416
|
-
|
|
417
|
-
```typescript
|
|
418
|
-
// NOT RECOMMENDED: Plain string queries without gql tag
|
|
419
|
-
const query = `query { ... }`;
|
|
420
|
-
const data = await getDataSDK();
|
|
421
|
-
await data.graphql?.(query);
|
|
422
|
-
|
|
423
|
-
// PREFERRED: Use gql tag for inline queries
|
|
424
|
-
const QUERY = gql`query { ... }`;
|
|
425
|
-
const data = await getDataSDK();
|
|
426
|
-
const response = await data.graphql?.<ResponseType>(QUERY);
|
|
427
|
-
|
|
428
|
-
// OR: Use .graphql file for complex queries
|
|
429
|
-
import QUERY from "./query/myQuery.graphql?raw";
|
|
430
|
-
const data = await getDataSDK();
|
|
431
|
-
const response = await data.graphql?.<ResponseType>(QUERY);
|
|
432
|
-
```
|
|
433
|
-
|
|
434
|
-
## Benefits of the DataSDK GraphQL API
|
|
435
|
-
|
|
436
|
-
- Uses the DataSDK with proper authentication and CSRF token handling
|
|
437
|
-
- Consistent typing with `GraphQLResponse<T>` interface
|
|
438
|
-
- Optional chaining (`?.`) safely handles surfaces where GraphQL is unavailable
|
|
439
|
-
- Callers get full `GraphQLResponse<T>` for flexible error handling
|
|
440
|
-
|
|
441
|
-
## Quality Checklist
|
|
442
|
-
|
|
443
|
-
Before completing GraphQL data access code:
|
|
444
|
-
|
|
445
|
-
### For Pattern 1 (.graphql files):
|
|
446
|
-
|
|
447
|
-
1. [ ] Create `.graphql` file for the query/mutation
|
|
448
|
-
2. [ ] Run `npm run graphql:codegen` to generate types
|
|
449
|
-
3. [ ] Import query with `?raw` suffix
|
|
450
|
-
4. [ ] Import generated types from `graphql-operations-types.ts`
|
|
451
|
-
5. [ ] Use `data.graphql?.<ResponseType>()` with proper generic
|
|
452
|
-
6. [ ] Handle `response.errors` and destructure `response.data`
|
|
453
|
-
7. [ ] Use `NodeOfConnection` for cleaner node types when needed
|
|
454
|
-
8. [ ] Handle optional chaining for nested response data
|
|
455
|
-
9. [ ] Follow the pattern in `accounts.ts`
|
|
456
|
-
|
|
457
|
-
### For Pattern 2 (inline with gql):
|
|
458
|
-
|
|
459
|
-
1. [ ] Define query using `gql` template tag
|
|
460
|
-
2. [ ] Ensure query name matches generated types in `graphql-operations-types.ts`
|
|
461
|
-
3. [ ] Import generated types for the query
|
|
462
|
-
4. [ ] Use `data.graphql?.<ResponseType>()` with proper generic
|
|
463
|
-
5. [ ] Handle `response.errors` and destructure `response.data`
|
|
464
|
-
6. [ ] Handle optional chaining for nested response data
|
|
465
|
-
7. [ ] Follow the pattern in `user.ts`
|
|
466
|
-
|
|
467
|
-
### General:
|
|
468
|
-
|
|
469
|
-
- [ ] Choose Pattern 1 for complex queries with variables, fragments, or when shared
|
|
470
|
-
- [ ] Choose Pattern 2 for simple, colocated queries without complex requirements
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
paths:
|
|
3
|
-
- "**/*.tsx"
|
|
4
|
-
- "**/components/**/*.ts"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Agentforce Conversation Client (standards)
|
|
8
|
-
|
|
9
|
-
## DO NOT build a chat UI from scratch
|
|
10
|
-
|
|
11
|
-
When the user asks for a chat UI, chat widget, chatbot, agent, or conversational interface — **always use the existing `AgentforceConversationClient` component** from `@salesforce/webapp-template-feature-react-agentforce-conversation-client-experimental`. Never generate a custom chat implementation, third-party chat library, WebSocket/REST chat, or direct calls to `embedAgentforceClient`.
|
|
12
|
-
|
|
13
|
-
## Hard constraints
|
|
14
|
-
|
|
15
|
-
- **`agentId` is required.** The component will not work without it. Always ask the user for their agent ID before generating code. Do not proceed without one.
|
|
16
|
-
- **Use the React wrapper only.** Import `AgentforceConversationClient` from the package. Never call `embedAgentforceClient` directly.
|
|
17
|
-
- **One instance per window.** Render in the app layout alongside `<Outlet />`, not on individual pages. The component is a singleton.
|
|
18
|
-
- **No auth hard-coding.** The component resolves `salesforceOrigin` and `frontdoorUrl` automatically.
|
package/lib/templates/project/reactb2e/_r_/features/feature-react-chart-analytics-charts-rule.md
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
paths:
|
|
3
|
-
- "**/*.tsx"
|
|
4
|
-
- "**/components/**/*.ts"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Analytics charts (standards)
|
|
8
|
-
|
|
9
|
-
When adding or editing chart UI in this project, follow these conventions.
|
|
10
|
-
|
|
11
|
-
## Components and library
|
|
12
|
-
|
|
13
|
-
- Use the shared **AnalyticsChart** component (and **ChartContainer** when a framed block is needed). Do not use raw Recharts components for standard line or bar charts.
|
|
14
|
-
- The project must have **recharts** installed (`npm install recharts`).
|
|
15
|
-
|
|
16
|
-
## Data shape
|
|
17
|
-
|
|
18
|
-
- **Time-series** (line): data must be an array of `{ x: string, y: number }`. Map raw fields (e.g. `date`, `value`) to these keys before passing to the chart.
|
|
19
|
-
- **Categorical** (bar): data must be an array of `{ name: string, value: number }`. Map raw fields (e.g. `category`, `total`) accordingly.
|
|
20
|
-
|
|
21
|
-
## Theming
|
|
22
|
-
|
|
23
|
-
- Use only the **theme** prop on AnalyticsChart: `red` (decline/loss), `green` (growth/gain), `neutral` (default or mixed). Do not introduce ad-hoc color schemes for these semantics.
|
|
24
|
-
|
|
25
|
-
## Placement
|
|
26
|
-
|
|
27
|
-
- Render charts inside the existing application frame (e.g. main content or a route). Do not replace the full app shell with a single chart.
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: feature-react-agentforce-conversation-client-embedded-agent
|
|
3
|
-
description: Embed an Agentforce conversation client (chat UI) into a React web application. Use when the user wants to add an employee agent, a chat client, chatbot, chat widget, chat component, conversation client, or conversational interface to their React app. Also applies when the user asks to embed or integrate any Salesforce agent — including employee agent, travel agent, HR agent, or any custom-named agent — or mentions Agentforce, Agentforce widget, Agentforce chat, or agent chat. ALWAYS use this skill instead of building a chat UI from scratch. Do NOT generate custom chat components, use third-party chat libraries, or create WebSocket/REST chat implementations. Do NOT use for non-React contexts or Lightning Web Components without React.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Embedded Agentforce chat (workflow)
|
|
7
|
-
|
|
8
|
-
When the user wants an embedded Agentforce chat client in a React app, follow this workflow.
|
|
9
|
-
|
|
10
|
-
## DO NOT build a chat UI from scratch
|
|
11
|
-
|
|
12
|
-
When the user asks for a chat UI, chat widget, chatbot, conversational interface, agent embed, or anything related to an embedded agent — **always use the `AgentforceConversationClient` component** from `@salesforce/webapp-template-feature-react-agentforce-conversation-client-experimental`.
|
|
13
|
-
|
|
14
|
-
**Never do any of the following:**
|
|
15
|
-
|
|
16
|
-
- Build a custom chat component from scratch (no custom message bubbles, input boxes, or chat layouts)
|
|
17
|
-
- Use third-party chat libraries (e.g. `react-chat-widget`, `stream-chat`, `chatscope`, or similar)
|
|
18
|
-
- Create WebSocket, polling, or REST-based chat implementations
|
|
19
|
-
- Generate custom HTML/CSS chat UIs
|
|
20
|
-
- Write a wrapper around `embedAgentforceClient` directly — always use the provided React component
|
|
21
|
-
|
|
22
|
-
If the user asks for chat functionality that goes beyond what `AgentforceConversationClient` supports (e.g. custom message rendering, message history, typing indicators), explain that the embedded Agentforce client handles all of this internally and cannot be customized beyond the supported `agentforceClientConfig` options (`renderingConfig`, `styleTokens`, `agentId`).
|
|
23
|
-
|
|
24
|
-
## CRITICAL: Agent ID is required
|
|
25
|
-
|
|
26
|
-
The Agentforce Conversation Client **will not work** without an `agentId`. There is no default agent — the component renders nothing and silently fails if `agentId` is missing. **Always ask the user for their agent ID before writing any code.**
|
|
27
|
-
|
|
28
|
-
> **Before proceeding:** Ask the user for their Salesforce agent ID (18-character record ID starting with `0Xx`). If they do not have one, direct them to **Setup → Agents** in their Salesforce org to find or create one. Do not generate code without an `agentId`.
|
|
29
|
-
|
|
30
|
-
## 1. Collect the agent ID
|
|
31
|
-
|
|
32
|
-
Ask the user:
|
|
33
|
-
|
|
34
|
-
- "What is your Salesforce agent ID? (You can find it in Setup → Agents → select an agent → copy the ID from the URL. It's an 18-character ID starting with `0Xx`.)"
|
|
35
|
-
|
|
36
|
-
If the user does not provide one:
|
|
37
|
-
|
|
38
|
-
- Explain that the conversation client **requires** an agent ID and will not function without it.
|
|
39
|
-
- Direct them to **Setup → Agents** in their org.
|
|
40
|
-
- Do **not** proceed to generate the embed code until an agent ID is provided.
|
|
41
|
-
|
|
42
|
-
## 2. Install the package
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
npm install @salesforce/webapp-template-feature-react-agentforce-conversation-client-experimental
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
This single install also brings in `@salesforce/agentforce-conversation-client` (the underlying SDK) automatically.
|
|
49
|
-
|
|
50
|
-
## 3. Use the shared wrapper
|
|
51
|
-
|
|
52
|
-
Use the `AgentforceConversationClient` React component. It resolves auth automatically:
|
|
53
|
-
|
|
54
|
-
- **Dev (localhost)**: fetches `frontdoorUrl` from `/__lo/frontdoor`
|
|
55
|
-
- **Prod (hosted in org)**: uses `salesforceOrigin` from `window.location.origin`
|
|
56
|
-
|
|
57
|
-
## 4. Embed in the layout
|
|
58
|
-
|
|
59
|
-
Render `<AgentforceConversationClient />` in the app layout so the chat client loads globally. Keep it alongside the existing layout (do not replace the page shell). **Always pass `agentId`.**
|
|
60
|
-
|
|
61
|
-
```tsx
|
|
62
|
-
import { Outlet } from "react-router";
|
|
63
|
-
import { AgentforceConversationClient } from "@salesforce/webapp-template-feature-react-agentforce-conversation-client-experimental";
|
|
64
|
-
|
|
65
|
-
export default function AppLayout() {
|
|
66
|
-
return (
|
|
67
|
-
<>
|
|
68
|
-
<Outlet />
|
|
69
|
-
<AgentforceConversationClient
|
|
70
|
-
agentforceClientConfig={{
|
|
71
|
-
agentId: "0Xx000000000000AAA",
|
|
72
|
-
}}
|
|
73
|
-
/>
|
|
74
|
-
</>
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
Replace `"0Xx000000000000AAA"` with the agent ID provided by the user.
|
|
80
|
-
|
|
81
|
-
## 5. Configure rendering and theming (optional)
|
|
82
|
-
|
|
83
|
-
Pass additional options via the `agentforceClientConfig` prop:
|
|
84
|
-
|
|
85
|
-
| Option | Purpose | Required |
|
|
86
|
-
| ---------------------------------- | ---------------------------------------------------------- | -------- |
|
|
87
|
-
| `agentId` | The agent to load — **required, will not work without it** | **Yes** |
|
|
88
|
-
| `renderingConfig.mode` | `"floating"` (default) or `"inline"` | No |
|
|
89
|
-
| `renderingConfig.width` / `height` | Inline dimensions (number for px, string for CSS) | No |
|
|
90
|
-
| `styleTokens` | Theme colors and style overrides | No |
|
|
91
|
-
|
|
92
|
-
See [embed-examples.md](docs/embed-examples.md) for complete examples of each mode.
|
|
93
|
-
|
|
94
|
-
## 6. Validate prerequisites
|
|
95
|
-
|
|
96
|
-
Before the conversation client will work, the user must verify all of the following in their Salesforce org:
|
|
97
|
-
|
|
98
|
-
1. **Agent is active:** The org must have the agent referenced by `agentId` in an **Active** state and deployed to the correct channel (**Setup → Agents**).
|
|
99
|
-
2. **Trusted domains:** The org must allow `localhost:<PORT>` in **Trusted Domains for Inline Frames** (**Setup → Session Settings → Trusted Domains for Inline Frames**). Required for local development.
|
|
100
|
-
3. **First-party cookies disabled:** **"Require first party use of Salesforce cookies"** must be **unchecked/disabled** in **Setup → My Domain**. If this setting is enabled, the embedded conversation client will fail to authenticate and will not load.
|
|
101
|
-
|
|
102
|
-
## Quick reference: rendering modes
|
|
103
|
-
|
|
104
|
-
### Floating (default rendering mode)
|
|
105
|
-
|
|
106
|
-
A persistent chat widget overlay pinned to the bottom-right corner. Floating is the default rendering mode — but `agentId` is still required.
|
|
107
|
-
|
|
108
|
-
```tsx
|
|
109
|
-
<AgentforceConversationClient
|
|
110
|
-
agentforceClientConfig={{
|
|
111
|
-
agentId: "0Xx000000000000AAA",
|
|
112
|
-
}}
|
|
113
|
-
/>
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
### Inline
|
|
117
|
-
|
|
118
|
-
The chat renders within the page layout at a specific size.
|
|
119
|
-
|
|
120
|
-
```tsx
|
|
121
|
-
<AgentforceConversationClient
|
|
122
|
-
agentforceClientConfig={{
|
|
123
|
-
agentId: "0Xx000000000000AAA",
|
|
124
|
-
renderingConfig: { mode: "inline", width: 420, height: 600 },
|
|
125
|
-
}}
|
|
126
|
-
/>
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### Theming
|
|
130
|
-
|
|
131
|
-
Use `styleTokens` to customize the chat appearance.
|
|
132
|
-
|
|
133
|
-
```tsx
|
|
134
|
-
<AgentforceConversationClient
|
|
135
|
-
agentforceClientConfig={{
|
|
136
|
-
agentId: "0Xx000000000000AAA",
|
|
137
|
-
styleTokens: {
|
|
138
|
-
headerBlockBackground: "#0176d3",
|
|
139
|
-
headerBlockTextColor: "#ffffff",
|
|
140
|
-
messageBlockInboundColor: "#0176d3",
|
|
141
|
-
},
|
|
142
|
-
}}
|
|
143
|
-
/>
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
## Troubleshooting
|
|
147
|
-
|
|
148
|
-
If the chat widget does not appear, fails to authenticate, or behaves unexpectedly, see [troubleshooting.md](docs/troubleshooting.md).
|