@salesforce/ui-bundle-template-app-react-template-b2e 12.3.7 → 12.3.9

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/dist/CHANGELOG.md CHANGED
@@ -3,6 +3,22 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [12.3.9](https://github.com/salesforce-experience-platform-emu/webapps/compare/v12.3.8...v12.3.9) (2026-09-02)
7
+
8
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
9
+
10
+
11
+
12
+
13
+
14
+ ## [12.3.8](https://github.com/salesforce-experience-platform-emu/webapps/compare/v12.3.7...v12.3.8) (2026-09-01)
15
+
16
+ **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
17
+
18
+
19
+
20
+
21
+
6
22
  ## [12.3.7](https://github.com/salesforce-experience-platform-emu/webapps/compare/v12.3.6...v12.3.7) (2026-09-01)
7
23
 
8
24
  **Note:** Version bump only for package @salesforce/ui-bundle-template-base-sfdx-project
@@ -19,8 +19,8 @@
19
19
  "graphql:schema": "node scripts/get-graphql-schema.mjs"
20
20
  },
21
21
  "dependencies": {
22
- "@salesforce/platform-sdk": "^12.3.7",
23
- "@salesforce/ui-bundle": "^12.3.7",
22
+ "@salesforce/platform-sdk": "^12.3.9",
23
+ "@salesforce/ui-bundle": "^12.3.9",
24
24
  "@tailwindcss/vite": "^4.1.17",
25
25
  "class-variance-authority": "^0.7.1",
26
26
  "clsx": "^2.1.1",
@@ -46,8 +46,8 @@
46
46
  "@graphql-eslint/eslint-plugin": "^4.1.0",
47
47
  "@graphql-tools/utils": "^11.0.0",
48
48
  "@playwright/test": "^1.49.0",
49
- "@salesforce/graphiti": "^12.3.7",
50
- "@salesforce/vite-plugin-ui-bundle": "^12.3.7",
49
+ "@salesforce/graphiti": "^12.3.9",
50
+ "@salesforce/vite-plugin-ui-bundle": "^12.3.9",
51
51
  "@testing-library/jest-dom": "^6.6.3",
52
52
  "@testing-library/react": "^16.1.0",
53
53
  "@testing-library/user-event": "^14.5.2",
@@ -1,11 +1,26 @@
1
1
  import { AgentforceConversationClient } from "./components/AgentforceConversationClient";
2
2
  import { Outlet, Link, useLocation } from "react-router";
3
3
  import { getAllRoutes } from "./router-utils";
4
- import { useState } from "react";
4
+ import { useEffect, useId, useRef, useState } from "react";
5
5
 
6
6
  export default function AppLayout() {
7
7
  const [isOpen, setIsOpen] = useState(false);
8
8
  const location = useLocation();
9
+ const navId = useId();
10
+ const outletWrapperRef = useRef<HTMLDivElement>(null);
11
+ const previousPathname = useRef<string | null>(null);
12
+
13
+ useEffect(() => {
14
+ if (previousPathname.current !== null && previousPathname.current !== location.pathname) {
15
+ const wrapper = outletWrapperRef.current;
16
+ const target = wrapper?.querySelector<HTMLElement>("h1, main, [role='main']") ?? wrapper;
17
+ if (target) {
18
+ if (!target.hasAttribute("tabindex")) target.setAttribute("tabindex", "-1");
19
+ target.focus();
20
+ }
21
+ }
22
+ previousPathname.current = location.pathname;
23
+ }, [location.pathname]);
9
24
 
10
25
  const isActive = (path: string) => location.pathname === path;
11
26
 
@@ -28,6 +43,20 @@ export default function AppLayout() {
28
43
 
29
44
  return (
30
45
  <>
46
+ <a
47
+ href="#main-content"
48
+ onClick={(e) => {
49
+ e.preventDefault();
50
+ const content = outletWrapperRef.current;
51
+ if (content) {
52
+ if (!content.hasAttribute("tabindex")) content.setAttribute("tabindex", "-1");
53
+ content.focus();
54
+ }
55
+ }}
56
+ className="sr-only focus:not-sr-only focus:absolute focus:z-50 focus:top-2 focus:left-2 focus:rounded-md focus:bg-white focus:px-4 focus:py-2 focus:text-gray-900 focus:shadow focus:ring-2 focus:ring-gray-900"
57
+ >
58
+ Skip to main content
59
+ </a>
31
60
  <nav className="bg-white border-b border-gray-200">
32
61
  <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
33
62
  <div className="flex justify-between items-center h-16">
@@ -38,8 +67,10 @@ export default function AppLayout() {
38
67
  onClick={toggleMenu}
39
68
  className="p-2 rounded-md text-gray-700 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500"
40
69
  aria-label="Toggle menu"
70
+ aria-expanded={isOpen}
71
+ aria-controls={navId}
41
72
  >
42
- <div className="w-6 h-6 flex flex-col justify-center space-y-1.5">
73
+ <div aria-hidden="true" className="w-6 h-6 flex flex-col justify-center space-y-1.5">
43
74
  <span
44
75
  className={`block h-0.5 w-6 bg-current transition-all ${
45
76
  isOpen ? "rotate-45 translate-y-2" : ""
@@ -56,14 +87,15 @@ export default function AppLayout() {
56
87
  </div>
57
88
  </button>
58
89
  </div>
59
- {isOpen && (
60
- <div className="pb-4">
90
+ <div id={navId} className="pb-4" hidden={!isOpen}>
91
+ {isOpen && (
61
92
  <div className="flex flex-col space-y-2">
62
93
  {navigationRoutes.map((item) => (
63
94
  <Link
64
95
  key={item.path}
65
96
  to={item.path}
66
97
  onClick={() => setIsOpen(false)}
98
+ aria-current={isActive(item.path) ? "page" : undefined}
67
99
  className={`px-3 py-2 rounded-md text-sm font-medium transition-colors ${
68
100
  isActive(item.path)
69
101
  ? "bg-blue-100 text-blue-700"
@@ -74,11 +106,13 @@ export default function AppLayout() {
74
106
  </Link>
75
107
  ))}
76
108
  </div>
77
- </div>
78
- )}
109
+ )}
110
+ </div>
79
111
  </div>
80
112
  </nav>
81
- <Outlet />
113
+ <div id="main-content" ref={outletWrapperRef}>
114
+ <Outlet />
115
+ </div>
82
116
  <AgentforceConversationClient agentId="<USER_AGENT_ID_18_CHAR_0Xx...>" />
83
117
  </>
84
118
  );
@@ -1,4 +1,4 @@
1
- import { useState } from "react";
1
+ import { useEffect, useState } from "react";
2
2
  import { useParams, useNavigate } from "react-router";
3
3
  import { createDataSDK } from "@salesforce/platform-sdk";
4
4
  import { AlertCircle, ChevronDown, ChevronRight, FileQuestion } from "lucide-react";
@@ -6,7 +6,7 @@ import GET_ACCOUNT_DETAIL from "../api/account/query/getAccountDetail.graphql?ra
6
6
  import { Alert, AlertTitle, AlertDescription } from "../components/ui/alert";
7
7
  import { Button } from "../components/ui/button";
8
8
  import { Card, CardContent } from "../components/ui/card";
9
- import { fieldValue, getAddressFieldLines, formatDateTimeField } from "../utils/accountFields";
9
+ import { fieldValue, getAddressFieldLines } from "../utils/accountFields";
10
10
  import {
11
11
  Collapsible,
12
12
  CollapsibleTrigger,
@@ -83,8 +83,20 @@ export default function AccountObjectDetail() {
83
83
  error,
84
84
  } = useAsyncData(() => fetchAccountDetail(recordId!), [recordId]);
85
85
 
86
+ const pageTitle = loading
87
+ ? "Loading Account | MyApp"
88
+ : error
89
+ ? "Error | MyApp"
90
+ : account
91
+ ? `${fieldValue(account.Name) ?? "Account"} | MyApp`
92
+ : "Account Not Found | MyApp";
93
+
94
+ useEffect(() => {
95
+ document.title = pageTitle;
96
+ }, [pageTitle]);
97
+
86
98
  return (
87
- <div className="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-6">
99
+ <main className="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-6">
88
100
  {/* Loading state */}
89
101
  {loading && <AccountDetailSkeleton />}
90
102
 
@@ -95,8 +107,8 @@ export default function AccountObjectDetail() {
95
107
  {!loading && !error && !account && <AccountDetailNotFound onBack={() => navigate(-1)} />}
96
108
 
97
109
  {/* Content */}
98
- {account && <AccountDetailContent account={account} />}
99
- </div>
110
+ {!loading && !error && account && <AccountDetailContent account={account} />}
111
+ </main>
100
112
  );
101
113
  }
102
114
 
@@ -117,17 +129,8 @@ function AccountDetailContent({ account }: { account: AccountNode }) {
117
129
  country: fieldValue(account.ShippingCountry),
118
130
  });
119
131
 
120
- const dateTimeOptions = { dateStyle: "medium", timeStyle: "short" } as const;
121
- const createdDate = formatDateTimeField(
122
- fieldValue(account.CreatedDate),
123
- undefined,
124
- dateTimeOptions,
125
- );
126
- const lastModifiedDate = formatDateTimeField(
127
- fieldValue(account.LastModifiedDate),
128
- undefined,
129
- dateTimeOptions,
130
- );
132
+ const createdDate = fieldValue(account.CreatedDate);
133
+ const lastModifiedDate = fieldValue(account.LastModifiedDate);
131
134
 
132
135
  return (
133
136
  <>
@@ -238,10 +241,16 @@ function Section({ title, children }: { title: string; children: React.ReactNode
238
241
  const [open, setOpen] = useState(true);
239
242
  return (
240
243
  <Collapsible open={open} onOpenChange={setOpen}>
241
- <CollapsibleTrigger className="flex items-center gap-2 cursor-pointer text-lg font-semibold py-2">
242
- {open ? <ChevronDown className="size-5" /> : <ChevronRight className="size-5" />}
243
- {title}
244
- </CollapsibleTrigger>
244
+ <h2>
245
+ <CollapsibleTrigger className="flex items-center gap-2 cursor-pointer text-lg font-semibold py-2">
246
+ {open ? (
247
+ <ChevronDown aria-hidden="true" className="size-5" />
248
+ ) : (
249
+ <ChevronRight aria-hidden="true" className="size-5" />
250
+ )}
251
+ {title}
252
+ </CollapsibleTrigger>
253
+ </h2>
245
254
  <CollapsibleContent>
246
255
  <div className="mt-2 space-y-4">{children}</div>
247
256
  </CollapsibleContent>
@@ -253,9 +262,9 @@ function AccountDetailError({ onBack }: { onBack: () => void }) {
253
262
  return (
254
263
  <>
255
264
  <Alert variant="destructive" role="alert">
256
- <AlertCircle />
265
+ <AlertCircle aria-hidden="true" />
257
266
  <AlertTitle>
258
- <h2>Failed to load account</h2>
267
+ <h1>Failed to load account</h1>
259
268
  </AlertTitle>
260
269
  <AlertDescription>
261
270
  Something went wrong while loading this account. Please try again later.
@@ -263,7 +272,7 @@ function AccountDetailError({ onBack }: { onBack: () => void }) {
263
272
  </Alert>
264
273
  <div className="mt-4 flex gap-3">
265
274
  <Button variant="outline" onClick={onBack}>
266
- ← Back
275
+ <span aria-hidden="true">←</span> Back
267
276
  </Button>
268
277
  <Button variant="outline" onClick={() => window.location.reload()}>
269
278
  Retry
@@ -275,15 +284,15 @@ function AccountDetailError({ onBack }: { onBack: () => void }) {
275
284
 
276
285
  function AccountDetailNotFound({ onBack }: { onBack: () => void }) {
277
286
  return (
278
- <Card>
287
+ <Card role="status">
279
288
  <CardContent className="flex flex-col items-center justify-center py-16 text-center">
280
- <FileQuestion className="size-12 text-muted-foreground mb-4" />
281
- <h2 className="text-lg font-semibold mb-1">Account not found</h2>
289
+ <FileQuestion aria-hidden="true" className="size-12 text-muted-foreground mb-4" />
290
+ <h1 className="text-lg font-semibold mb-1">Account not found</h1>
282
291
  <p className="text-sm text-muted-foreground mb-6">
283
292
  The account you're looking for doesn't exist or may have been deleted.
284
293
  </p>
285
294
  <Button variant="outline" onClick={onBack}>
286
- ← Go back
295
+ <span aria-hidden="true">←</span> Go back
287
296
  </Button>
288
297
  </CardContent>
289
298
  </Card>
@@ -292,7 +301,8 @@ function AccountDetailNotFound({ onBack }: { onBack: () => void }) {
292
301
 
293
302
  function AccountDetailSkeleton() {
294
303
  return (
295
- <>
304
+ <div role="status" aria-live="polite">
305
+ <span className="sr-only">Loading account…</span>
296
306
  <Skeleton className="h-8 w-56 mb-4" />
297
307
 
298
308
  <Card>
@@ -341,7 +351,7 @@ function AccountDetailSkeleton() {
341
351
  </div>
342
352
  </CardContent>
343
353
  </Card>
344
- </>
354
+ </div>
345
355
  );
346
356
  }
347
357
 
@@ -1,10 +1,15 @@
1
+ import { useEffect } from "react";
1
2
  import { GlobalSearchBox } from "../features/search";
2
3
 
3
4
  export default function HomePage() {
5
+ useEffect(() => {
6
+ document.title = "Home | MyApp";
7
+ }, []);
8
+
4
9
  return (
5
- <div className="max-w-2xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
10
+ <main className="max-w-2xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
6
11
  <h1 className="text-2xl font-bold mb-6">Home</h1>
7
12
  <GlobalSearchBox placeholder="Search accounts, contacts, opportunities..." />
8
- </div>
13
+ </main>
9
14
  );
10
15
  }
@@ -23,12 +23,3 @@ export function getAddressFieldLines(address: {
23
23
  if (lines.length === 0) return null;
24
24
  return lines;
25
25
  }
26
-
27
- /** Formats an ISO datetime string with `toLocaleString`, or null if absent. */
28
- export function formatDateTimeField(
29
- value?: string | null,
30
- ...args: Parameters<Date["toLocaleString"]>
31
- ) {
32
- if (!value) return null;
33
- return new Date(value).toLocaleString(...args);
34
- }
@@ -1 +1 @@
1
- {"root":["./src/app.tsx","./src/appLayout.tsx","./src/index.ts","./src/navigationMenu.tsx","./src/router-utils.tsx","./src/routes.tsx","./src/api/graphqlClient.ts","./src/components/AgentforceConversationClient.tsx","./src/components/ObjectBreadcrumb.tsx","./src/components/__inherit_AgentforceConversationClient.tsx","./src/components/alerts/status-alert.tsx","./src/components/layouts/card-layout.tsx","./src/components/ui/alert.tsx","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/breadcrumb.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.tsx","./src/components/ui/checkbox.tsx","./src/components/ui/collapsible.tsx","./src/components/ui/datePicker.tsx","./src/components/ui/dialog.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/field.tsx","./src/components/ui/index.ts","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/pagination.tsx","./src/components/ui/popover.tsx","./src/components/ui/select.tsx","./src/components/ui/separator.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/sonner.tsx","./src/components/ui/spinner.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/features/search/constants.ts","./src/features/search/index.ts","./src/features/search/loadConfig.ts","./src/features/search/queryBuilder.ts","./src/features/search/types.ts","./src/features/search/__tests__/queryBuilder.test.ts","./src/features/search/adapters/registry.ts","./src/features/search/adapters/types.ts","./src/features/search/adapters/cms/channelResolver.ts","./src/features/search/adapters/cms/cmsQueryFragment.ts","./src/features/search/adapters/cms/contentTypeSessionCache.ts","./src/features/search/adapters/cms/contentTypeUtils.ts","./src/features/search/adapters/cms/index.ts","./src/features/search/adapters/cms/parseResponse.ts","./src/features/search/adapters/cms/searchChannel.ts","./src/features/search/adapters/cms/types.ts","./src/features/search/adapters/cms/__tests__/channelResolver.test.ts","./src/features/search/adapters/cms/__tests__/cmsQueryFragment.test.ts","./src/features/search/adapters/cms/__tests__/contentTypeSessionCache.test.ts","./src/features/search/adapters/cms/__tests__/contentTypeUtils.test.ts","./src/features/search/adapters/cms/__tests__/orgApiVersionService.test.ts","./src/features/search/adapters/cms/__tests__/parseResponse.test.ts","./src/features/search/adapters/cms/__tests__/searchChannel.test.ts","./src/features/search/adapters/cms/__tests__/searchableContentTypesService.test.ts","./src/features/search/adapters/cms/api/apiUtils.ts","./src/features/search/adapters/cms/api/orgApiVersionService.ts","./src/features/search/adapters/cms/api/searchableContentTypesService.ts","./src/features/search/adapters/cms/hooks/useSearchableContentTypes.ts","./src/features/search/adapters/sobject/index.ts","./src/features/search/adapters/sobject/parseResponse.ts","./src/features/search/adapters/sobject/queryFragment.ts","./src/features/search/api/distinctValuesService.ts","./src/features/search/api/searchService.ts","./src/features/search/api/__tests__/searchService.test.ts","./src/features/search/components/GlobalSearchBox.tsx","./src/features/search/components/MergedSearchResults.tsx","./src/features/search/components/Search.tsx","./src/features/search/components/SearchResults.tsx","./src/features/search/components/SourceSection.tsx","./src/features/search/components/__tests__/MergedSearchResults.test.tsx","./src/features/search/components/__tests__/Search.test.tsx","./src/features/search/components/__tests__/SourceSection.test.tsx","./src/features/search/components/controls/PaginationControls.tsx","./src/features/search/components/controls/ScopeSelector.tsx","./src/features/search/components/controls/SearchBar.tsx","./src/features/search/components/controls/SortControl.tsx","./src/features/search/components/filters/ActiveFilters.tsx","./src/features/search/components/filters/DefaultFilterPanel.tsx","./src/features/search/components/filters/FilterContext.tsx","./src/features/search/components/filters/inputs/BooleanFilter.tsx","./src/features/search/components/filters/inputs/DateRangeFilter.tsx","./src/features/search/components/filters/inputs/FilterFieldWrapper.tsx","./src/features/search/components/filters/inputs/MultiSelectFilter.tsx","./src/features/search/components/filters/inputs/NumericRangeFilter.tsx","./src/features/search/components/filters/inputs/SelectFilter.tsx","./src/features/search/components/filters/inputs/TextFilter.tsx","./src/features/search/components/results/CmsResultRow.tsx","./src/features/search/components/results/DefaultResultRow.tsx","./src/features/search/components/results/resolveResultRenderer.ts","./src/features/search/components/results/__tests__/CmsResultRow.test.tsx","./src/features/search/components/results/__tests__/resolveResultRenderer.test.ts","./src/features/search/hooks/useAsyncData.ts","./src/features/search/hooks/useDistinctValues.ts","./src/features/search/hooks/useSearch.ts","./src/features/search/utils/debounce.ts","./src/features/search/utils/fieldUtils.ts","./src/features/search/utils/filterUtils.ts","./src/features/search/utils/sortUtils.ts","./src/features/search/utils/__tests__/filterUtils.test.ts","./src/hooks/useAsyncData.ts","./src/lib/utils.ts","./src/pages/AccountObjectDetailPage.tsx","./src/pages/Home.tsx","./src/pages/NotFound.tsx","./src/types/conversation.ts","./src/types/globals.d.ts","./src/utils/accountFields.ts","./e2e/app.spec.ts","./vite-env.d.ts","./vitest-env.d.ts","./vitest.setup.ts","../../../../../../../../../sdk/platform-sdk/types/env.d.ts"],"version":"5.9.3"}
1
+ {"root":["./src/app.tsx","./src/appLayout.tsx","./src/index.ts","./src/navigationMenu.tsx","./src/router-utils.tsx","./src/routes.tsx","./src/api/graphqlClient.ts","./src/components/AgentforceConversationClient.tsx","./src/components/ObjectBreadcrumb.tsx","./src/components/__inherit_AgentforceConversationClient.tsx","./src/components/alerts/status-alert.tsx","./src/components/layouts/card-layout.tsx","./src/components/ui/alert.tsx","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/breadcrumb.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.tsx","./src/components/ui/checkbox.tsx","./src/components/ui/collapsible.tsx","./src/components/ui/datePicker.tsx","./src/components/ui/dialog.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/field.tsx","./src/components/ui/index.ts","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/pagination.tsx","./src/components/ui/popover.tsx","./src/components/ui/select.tsx","./src/components/ui/separator.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/sonner.tsx","./src/components/ui/spinner.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/features/search/constants.ts","./src/features/search/index.ts","./src/features/search/loadConfig.ts","./src/features/search/queryBuilder.ts","./src/features/search/types.ts","./src/features/search/__tests__/queryBuilder.test.ts","./src/features/search/adapters/registry.ts","./src/features/search/adapters/types.ts","./src/features/search/adapters/cms/channelResolver.ts","./src/features/search/adapters/cms/cmsQueryFragment.ts","./src/features/search/adapters/cms/contentTypeSessionCache.ts","./src/features/search/adapters/cms/contentTypeUtils.ts","./src/features/search/adapters/cms/index.ts","./src/features/search/adapters/cms/parseResponse.ts","./src/features/search/adapters/cms/searchChannel.ts","./src/features/search/adapters/cms/types.ts","./src/features/search/adapters/cms/__tests__/channelResolver.test.ts","./src/features/search/adapters/cms/__tests__/cmsQueryFragment.test.ts","./src/features/search/adapters/cms/__tests__/contentTypeSessionCache.test.ts","./src/features/search/adapters/cms/__tests__/contentTypeUtils.test.ts","./src/features/search/adapters/cms/__tests__/orgApiVersionService.test.ts","./src/features/search/adapters/cms/__tests__/parseResponse.test.ts","./src/features/search/adapters/cms/__tests__/searchChannel.test.ts","./src/features/search/adapters/cms/__tests__/searchableContentTypesService.test.ts","./src/features/search/adapters/cms/api/apiUtils.ts","./src/features/search/adapters/cms/api/orgApiVersionService.ts","./src/features/search/adapters/cms/api/searchableContentTypesService.ts","./src/features/search/adapters/cms/hooks/useSearchableContentTypes.ts","./src/features/search/adapters/sobject/index.ts","./src/features/search/adapters/sobject/parseResponse.ts","./src/features/search/adapters/sobject/queryFragment.ts","./src/features/search/api/distinctValuesService.ts","./src/features/search/api/searchService.ts","./src/features/search/api/__tests__/searchService.test.ts","./src/features/search/components/GlobalSearchBox.tsx","./src/features/search/components/MergedSearchResults.tsx","./src/features/search/components/Search.tsx","./src/features/search/components/SearchResults.tsx","./src/features/search/components/SourceSection.tsx","./src/features/search/components/__tests__/MergedSearchResults.test.tsx","./src/features/search/components/__tests__/Search.test.tsx","./src/features/search/components/__tests__/SourceSection.test.tsx","./src/features/search/components/controls/PaginationControls.tsx","./src/features/search/components/controls/ScopeSelector.tsx","./src/features/search/components/controls/SearchBar.tsx","./src/features/search/components/controls/SortControl.tsx","./src/features/search/components/filters/ActiveFilters.tsx","./src/features/search/components/filters/DefaultFilterPanel.tsx","./src/features/search/components/filters/FilterContext.tsx","./src/features/search/components/filters/inputs/BooleanFilter.tsx","./src/features/search/components/filters/inputs/DateRangeFilter.tsx","./src/features/search/components/filters/inputs/FilterFieldWrapper.tsx","./src/features/search/components/filters/inputs/MultiSelectFilter.tsx","./src/features/search/components/filters/inputs/NumericRangeFilter.tsx","./src/features/search/components/filters/inputs/SelectFilter.tsx","./src/features/search/components/filters/inputs/TextFilter.tsx","./src/features/search/components/results/CmsResultRow.tsx","./src/features/search/components/results/DefaultResultRow.tsx","./src/features/search/components/results/resolveResultRenderer.ts","./src/features/search/components/results/__tests__/CmsResultRow.test.tsx","./src/features/search/components/results/__tests__/resolveResultRenderer.test.ts","./src/features/search/hooks/useAsyncData.ts","./src/features/search/hooks/useDistinctValues.ts","./src/features/search/hooks/useSearch.ts","./src/features/search/utils/debounce.ts","./src/features/search/utils/fieldUtils.ts","./src/features/search/utils/filterUtils.ts","./src/features/search/utils/sortUtils.ts","./src/features/search/utils/__tests__/filterUtils.test.ts","./src/hooks/useAsyncData.ts","./src/lib/utils.ts","./src/pages/AccountObjectDetailPage.tsx","./src/pages/Home.tsx","./src/pages/NotFound.tsx","./src/types/conversation.ts","./src/types/globals.d.ts","./src/utils/accountFields.ts","./src/utils/__tests__/accountFields.test.ts","./e2e/app.spec.ts","./vite-env.d.ts","./vitest-env.d.ts","./vitest.setup.ts","../../../../../../../../../sdk/platform-sdk/types/env.d.ts"],"version":"5.9.3"}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@salesforce/ui-bundle-template-base-sfdx-project",
3
- "version": "12.3.7",
3
+ "version": "12.3.9",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@salesforce/ui-bundle-template-base-sfdx-project",
9
- "version": "12.3.7",
9
+ "version": "12.3.9",
10
10
  "license": "SEE LICENSE IN LICENSE.txt",
11
11
  "dependencies": {
12
12
  "fast-xml-parser": "^5.9.3",
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/ui-bundle-template-base-sfdx-project",
3
- "version": "12.3.7",
3
+ "version": "12.3.9",
4
4
  "description": "Base SFDX project template",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "publishConfig": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/ui-bundle-template-app-react-template-b2e",
3
- "version": "12.3.7",
3
+ "version": "12.3.9",
4
4
  "description": "Salesforce React internal app template",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "",
@@ -15,13 +15,18 @@
15
15
  "access": "public"
16
16
  },
17
17
  "scripts": {
18
- "clean": "rm -rf dist"
18
+ "clean": "rm -rf dist",
19
+ "test": "vitest run",
20
+ "test:watch": "vitest",
21
+ "test:coverage": "vitest run --coverage"
19
22
  },
20
23
  "devDependencies": {
21
24
  "@types/react": "^19.2.7",
22
25
  "@types/react-dom": "^19.2.3",
26
+ "@vitest/coverage-v8": "^4.1.0",
23
27
  "react-dom": "^19.2.1",
24
- "react-router": "^8.0.0"
28
+ "react-router": "^8.0.0",
29
+ "vitest": "^4.1.0"
25
30
  },
26
31
  "nx": {
27
32
  "targets": {