@salesforce/templates 66.8.0 → 66.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/lib/templates/project/reactexternalapp/AGENT.md +3 -3
  2. package/lib/templates/project/reactexternalapp/CHANGELOG.md +428 -0
  3. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package-lock.json +194 -1488
  4. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package.json +4 -4
  5. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_/pages/AccountObjectDetailPage.tsx +7 -9
  6. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_/pages/AccountSearch.tsx +7 -15
  7. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/api/objectSearchService.ts +14 -19
  8. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/NumericRangeFilter.tsx +9 -5
  9. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +5 -3
  10. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +5 -3
  11. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useAsyncData.ts +11 -4
  12. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/api/userProfileApi.ts +12 -11
  13. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/authenticationConfig.ts +9 -9
  14. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/context/AuthContext.tsx +21 -4
  15. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/forms/auth-form.tsx +15 -1
  16. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/hooks/form.tsx +1 -1
  17. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/layouts/privateRouteLayout.tsx +2 -11
  18. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ChangePassword.tsx +21 -5
  19. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ForgotPassword.tsx +20 -5
  20. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Login.tsx +20 -5
  21. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Profile.tsx +80 -43
  22. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/Register.tsx +16 -5
  23. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/pages/ResetPassword.tsx +20 -5
  24. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/utils/helpers.ts +15 -52
  25. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/api/graphqlClient.ts +13 -13
  26. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/components/alerts/status-alert.tsx +11 -8
  27. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/components/ui/input.tsx +1 -1
  28. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/hooks/useAsyncData.ts +67 -0
  29. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/pages/AccountObjectDetailPage.tsx +7 -9
  30. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/pages/AccountSearch.tsx +7 -15
  31. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/routes.tsx +19 -25
  32. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/tsconfig.json +4 -6
  33. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/vite-env.d.ts +0 -3
  34. package/lib/templates/project/reactexternalapp/_p_/_m_/classes/UIBundleAuthUtils.cls-meta.xml +1 -1
  35. package/lib/templates/project/reactexternalapp/_p_/_m_/classes/UIBundleChangePassword.cls-meta.xml +1 -1
  36. package/lib/templates/project/reactexternalapp/_p_/_m_/classes/UIBundleForgotPassword.cls-meta.xml +1 -1
  37. package/lib/templates/project/reactexternalapp/_p_/_m_/classes/UIBundleLogin.cls-meta.xml +1 -1
  38. package/lib/templates/project/reactexternalapp/_p_/_m_/classes/UIBundleRegistration.cls-meta.xml +1 -1
  39. package/lib/templates/project/reactexternalapp/_p_/_m_/package.xml +1 -1
  40. package/lib/templates/project/reactexternalapp/package.json +1 -1
  41. package/lib/templates/project/reactexternalapp/scripts/org-setup.config.json +0 -1
  42. package/lib/templates/project/reactexternalapp/scripts/org-setup.mjs +528 -44
  43. package/lib/templates/project/reactexternalapp/sfdx-project.json +1 -1
  44. package/lib/templates/project/reactinternalapp/AGENT.md +3 -3
  45. package/lib/templates/project/reactinternalapp/CHANGELOG.md +428 -0
  46. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/package-lock.json +214 -1521
  47. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/package.json +5 -5
  48. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/reactinternalapp.uibundle-meta.xml +1 -0
  49. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_/pages/AccountObjectDetailPage.tsx +7 -9
  50. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/_ex_/pages/AccountSearch.tsx +7 -15
  51. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/api/objectSearchService.ts +14 -19
  52. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/NumericRangeFilter.tsx +9 -5
  53. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/SearchFilter.tsx +5 -3
  54. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/components/filters/TextFilter.tsx +5 -3
  55. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useAsyncData.ts +11 -4
  56. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/api/graphqlClient.ts +13 -13
  57. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/components/AgentforceConversationClient.tsx +40 -44
  58. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/components/alerts/status-alert.tsx +11 -8
  59. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/components/ui/input.tsx +1 -1
  60. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/hooks/useAsyncData.ts +67 -0
  61. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/pages/AccountObjectDetailPage.tsx +7 -9
  62. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/pages/AccountSearch.tsx +7 -15
  63. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/types/conversation.ts +9 -0
  64. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/types/globals.d.ts +13 -0
  65. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/tsconfig.json +4 -6
  66. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/vite-env.d.ts +0 -3
  67. package/lib/templates/project/reactinternalapp/_p_/_m_/applications/reactinternalapp.app-meta.xml +17 -0
  68. package/lib/templates/project/reactinternalapp/_p_/_m_/permissionsets/reactinternalapp_Access.permissionset-meta.xml +9 -0
  69. package/lib/templates/project/reactinternalapp/package.json +1 -1
  70. package/lib/templates/project/reactinternalapp/scripts/org-setup.config.json +6 -3
  71. package/lib/templates/project/reactinternalapp/scripts/org-setup.mjs +528 -44
  72. package/lib/templates/project/reactinternalapp/sfdx-project.json +1 -1
  73. package/lib/templates/uiBundles/reactbasic/package-lock.json +435 -43
  74. package/lib/templates/uiBundles/reactbasic/package.json +3 -3
  75. package/lib/templates/uiBundles/reactbasic/src/api/graphqlClient.ts +13 -13
  76. package/lib/templates/uiBundles/reactbasic/src/components/alerts/status-alert.tsx +11 -8
  77. package/lib/templates/uiBundles/reactbasic/src/components/ui/input.tsx +1 -1
  78. package/lib/templates/uiBundles/reactbasic/src/hooks/useAsyncData.ts +67 -0
  79. package/lib/templates/uiBundles/reactbasic/tsconfig.json +4 -6
  80. package/lib/templates/uiBundles/reactbasic/vite-env.d.ts +0 -3
  81. package/package.json +5 -5
  82. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useCachedAsyncData.ts +0 -188
  83. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/layout/card-skeleton.tsx +0 -38
  84. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/_f_/authentication/layouts/authenticationRouteLayout.tsx +0 -21
  85. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/src/_f_/_os_/hooks/useCachedAsyncData.ts +0 -188
@@ -1,6 +1,6 @@
1
1
  import { useState } from "react";
2
2
  import { useParams, useNavigate } from "react-router";
3
- import { createDataSDK } from "@salesforce/sdk-data";
3
+ import { createDataSDK } from "@salesforce/platform-sdk";
4
4
  import { AlertCircle, ChevronDown, ChevronRight, FileQuestion } from "lucide-react";
5
5
  import GET_ACCOUNT_DETAIL from "../api/account/query/getAccountDetail.graphql?raw";
6
6
  import type {
@@ -22,7 +22,7 @@ import {
22
22
  } from "../components/ui/collapsible";
23
23
  import { Separator } from "../components/ui/separator";
24
24
  import { Skeleton } from "../components/ui/skeleton";
25
- import { useCachedAsyncData } from "../features/object-search/hooks/useCachedAsyncData";
25
+ import { useAsyncData } from "../hooks/useAsyncData";
26
26
  import { ObjectBreadcrumb } from "../features/object-search/components/ObjectBreadcrumb";
27
27
 
28
28
  type AccountNode = NonNullable<
@@ -33,16 +33,16 @@ type AccountNode = NonNullable<
33
33
 
34
34
  async function fetchAccountDetail(recordId: string): Promise<AccountNode | null | undefined> {
35
35
  const data = await createDataSDK();
36
- const response = await data.graphql?.<GetAccountDetailQuery, GetAccountDetailQueryVariables>({
36
+ const result = await data.graphql!.query<GetAccountDetailQuery, GetAccountDetailQueryVariables>({
37
37
  query: GET_ACCOUNT_DETAIL,
38
38
  variables: { id: recordId },
39
39
  });
40
40
 
41
- if (response?.errors?.length) {
42
- throw new Error(response.errors.map((e) => e.message).join("; "));
41
+ if (result.errors?.length) {
42
+ throw new Error(result.errors.map((e) => e.message).join("; "));
43
43
  }
44
44
 
45
- return response?.data?.uiapi?.query?.Account?.edges?.[0]?.node;
45
+ return result.data?.uiapi?.query?.Account?.edges?.[0]?.node;
46
46
  }
47
47
 
48
48
  export default function AccountObjectDetail() {
@@ -53,9 +53,7 @@ export default function AccountObjectDetail() {
53
53
  data: account,
54
54
  loading,
55
55
  error,
56
- } = useCachedAsyncData(() => fetchAccountDetail(recordId!), [recordId], {
57
- key: `account:${recordId}`,
58
- });
56
+ } = useAsyncData(() => fetchAccountDetail(recordId!), [recordId]);
59
57
 
60
58
  return (
61
59
  <div className="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-6">
@@ -6,7 +6,7 @@ import {
6
6
  fetchDistinctIndustries,
7
7
  fetchDistinctTypes,
8
8
  } from "../api/account/accountSearchService";
9
- import { useCachedAsyncData } from "../features/object-search/hooks/useCachedAsyncData";
9
+ import { useAsyncData } from "../hooks/useAsyncData";
10
10
  import { fieldValue } from "../features/object-search/utils/fieldUtils";
11
11
  import { useObjectSearchParams } from "../features/object-search/hooks/useObjectSearchParams";
12
12
  import { Alert, AlertTitle, AlertDescription } from "../components/ui/alert";
@@ -40,8 +40,8 @@ import PaginationControls from "../features/object-search/components/PaginationC
40
40
  import type { PaginationConfig } from "../features/object-search/hooks/useObjectSearchParams";
41
41
 
42
42
  const PAGINATION_CONFIG: PaginationConfig = {
43
- defaultPageSize: 6,
44
- validPageSizes: [6, 12, 24, 48],
43
+ defaultPageSize: 7,
44
+ validPageSizes: [7, 14, 28, 42],
45
45
  };
46
46
 
47
47
  type AccountNode = NonNullable<
@@ -75,22 +75,15 @@ const ACCOUNT_SORT_CONFIGS: SortFieldConfig<keyof Account_OrderBy>[] = [
75
75
 
76
76
  export default function AccountSearch() {
77
77
  const [filtersOpen, setFiltersOpen] = useState(true);
78
- const { data: industryOptions } = useCachedAsyncData(fetchDistinctIndustries, [], {
79
- key: "distinctIndustries",
80
- ttl: 300_000,
81
- });
82
- const { data: typeOptions } = useCachedAsyncData(fetchDistinctTypes, [], {
83
- key: "distinctTypes",
84
- ttl: 300_000,
85
- });
78
+ const { data: industryOptions } = useAsyncData(fetchDistinctIndustries, []);
79
+ const { data: typeOptions } = useAsyncData(fetchDistinctTypes, []);
86
80
 
87
81
  const { filters, sort, query, pagination, resetAll } = useObjectSearchParams<
88
82
  Account_Filter,
89
83
  Account_OrderBy
90
84
  >(FILTER_CONFIGS, ACCOUNT_SORT_CONFIGS, PAGINATION_CONFIG);
91
85
 
92
- const searchKey = `accounts:${JSON.stringify({ where: query.where, orderBy: query.orderBy, first: pagination.pageSize, after: pagination.afterCursor })}`;
93
- const { data, loading, error } = useCachedAsyncData(
86
+ const { data, loading, error } = useAsyncData(
94
87
  () =>
95
88
  searchAccounts({
96
89
  where: query.where,
@@ -99,7 +92,6 @@ export default function AccountSearch() {
99
92
  after: pagination.afterCursor,
100
93
  }),
101
94
  [query.where, query.orderBy, pagination.pageSize, pagination.afterCursor],
102
- { key: searchKey },
103
95
  );
104
96
 
105
97
  const pageInfo = data?.pageInfo;
@@ -189,7 +181,7 @@ export default function AccountSearch() {
189
181
  <ActiveFilters filters={filters.active} onRemove={filters.remove} />
190
182
  </div>
191
183
 
192
- <div className="min-h-112">
184
+ <div className="min-h-132">
193
185
  {/* Loading state */}
194
186
  {loading && (
195
187
  <>
@@ -4,6 +4,11 @@
4
4
  * For full license text, see the LICENSE.txt file
5
5
  */
6
6
 
7
+ import type {
8
+ AgentforceErrorHandler,
9
+ AgentforceReadyHandler,
10
+ } from "@salesforce/agentforce-conversation-client";
11
+
7
12
  export interface ResolvedEmbedOptions {
8
13
  salesforceOrigin?: string;
9
14
  frontdoorUrl?: string;
@@ -32,4 +37,8 @@ export interface AgentforceConversationClientProps {
32
37
  salesforceOrigin?: string;
33
38
  /** Optional. If not provided, resolved internally in dev via /__lo/frontdoor. */
34
39
  frontdoorUrl?: string;
40
+ /** Callback invoked when the Lightning Out application is ready. */
41
+ onReady?: AgentforceReadyHandler;
42
+ /** Callback invoked when a Lightning Out error occurs. */
43
+ onError?: AgentforceErrorHandler;
35
44
  }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+
7
+ interface SfdcEnv {
8
+ /** Salesforce org force.com URL (e.g., "https://myorg.lightning.force.com"). */
9
+ orgUrl?: string;
10
+ }
11
+
12
+ // eslint-disable-next-line no-var -- ambient global declaration
13
+ declare var SFDC_ENV: SfdcEnv | undefined;
@@ -28,11 +28,8 @@
28
28
  "@utils/*": ["./src/utils/*"],
29
29
  "@styles/*": ["./src/styles/*"],
30
30
  "@assets/*": ["./src/assets/*"],
31
- "@salesforce/sdk-core": [
32
- "../../../../../../../../../../packages/sdk/sdk-core/src/index.ts"
33
- ],
34
- "@salesforce/sdk-data": [
35
- "../../../../../../../../../../packages/sdk/sdk-data/src/index.ts"
31
+ "@salesforce/platform-sdk": [
32
+ "../../../../../../../../../../packages/sdk/platform-sdk/src/index.ts"
36
33
  ]
37
34
  }
38
35
  },
@@ -41,7 +38,8 @@
41
38
  "e2e",
42
39
  "vite-env.d.ts",
43
40
  "vitest-env.d.ts",
44
- "vitest.setup.ts"
41
+ "vitest.setup.ts",
42
+ "../../../../../../../../../../packages/sdk/platform-sdk/types"
45
43
  ],
46
44
  "references": [{ "path": "./tsconfig.node.json" }]
47
45
  }
@@ -2,6 +2,3 @@
2
2
 
3
3
  /** Salesforce API version injected at build time by the Vite define plugin. */
4
4
  declare const __SF_API_VERSION__: string;
5
-
6
- /** Package version of @salesforce/sdk-data injected at build time by its own Vite build. */
7
- declare const __SDK_DATA_VERSION__: string;
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <CustomApplication xmlns="http://soap.sforce.com/2006/04/metadata">
3
+ <brand>
4
+ <headerColor>#0070D2</headerColor>
5
+ <shouldOverrideOrgTheme>false</shouldOverrideOrgTheme>
6
+ </brand>
7
+ <formFactors>Small</formFactors>
8
+ <formFactors>Large</formFactors>
9
+ <isNavAutoTempTabsDisabled>false</isNavAutoTempTabsDisabled>
10
+ <isNavPersonalizationDisabled>false</isNavPersonalizationDisabled>
11
+ <isNavTabPersistenceDisabled>false</isNavTabPersistenceDisabled>
12
+ <isOmniPinnedViewEnabled>false</isOmniPinnedViewEnabled>
13
+ <label>reactinternalapp</label>
14
+ <navType>Standard</navType>
15
+ <uiBundle>c__reactinternalapp</uiBundle>
16
+ <uiType>Lightning</uiType>
17
+ </CustomApplication>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <PermissionSet xmlns="http://soap.sforce.com/2006/04/metadata">
3
+ <applicationVisibilities>
4
+ <application>reactinternalapp</application>
5
+ <visible>true</visible>
6
+ </applicationVisibilities>
7
+ <hasActivationRequired>false</hasActivationRequired>
8
+ <label>reactinternalapp Access</label>
9
+ </PermissionSet>
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/ui-bundle-template-base-sfdx-project",
3
- "version": "1.135.0",
3
+ "version": "9.20.0",
4
4
  "description": "Base SFDX project template",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "publishConfig": {
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "permsetAssignments": {
3
- "defaultAssignee": "currentUser",
4
- "assignments": {}
3
+ "assignments": {
4
+ "reactinternalapp_Access": {
5
+ "assignee": "currentUser"
6
+ }
7
+ }
5
8
  }
6
- }
9
+ }