@salesforce/templates 66.17.4 → 66.18.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.
- package/lib/generators/analyticsTemplateGenerator.d.ts +1 -1
- package/lib/generators/analyticsTemplateGenerator.js +1 -1
- package/lib/generators/analyticsTemplateGenerator.js.map +1 -1
- package/lib/generators/apexClassGenerator.d.ts +1 -1
- package/lib/generators/apexClassGenerator.js +1 -0
- package/lib/generators/apexClassGenerator.js.map +1 -1
- package/lib/generators/apexTriggerGenerator.d.ts +1 -1
- package/lib/generators/baseGenerator.d.ts +1 -1
- package/lib/generators/baseGenerator.js +13 -7
- package/lib/generators/baseGenerator.js.map +1 -1
- package/lib/generators/digitalExperienceSiteGenerator.d.ts +1 -2
- package/lib/generators/digitalExperienceSiteGenerator.js +9 -9
- package/lib/generators/digitalExperienceSiteGenerator.js.map +1 -1
- package/lib/generators/flexipageGenerator.d.ts +1 -2
- package/lib/generators/flexipageGenerator.js +5 -7
- package/lib/generators/flexipageGenerator.js.map +1 -1
- package/lib/generators/lightningAppGenerator.d.ts +1 -1
- package/lib/generators/lightningComponentGenerator.d.ts +1 -1
- package/lib/generators/lightningEventGenerator.d.ts +1 -1
- package/lib/generators/lightningInterfaceGenerator.d.ts +1 -1
- package/lib/generators/lightningOutGenerator.d.ts +1 -1
- package/lib/generators/lightningOutGenerator.js +21 -5
- package/lib/generators/lightningOutGenerator.js.map +1 -1
- package/lib/generators/lightningTestGenerator.d.ts +1 -1
- package/lib/generators/lightningTestGenerator.js +1 -1
- package/lib/generators/lightningTestGenerator.js.map +1 -1
- package/lib/generators/projectGenerator.d.ts +1 -1
- package/lib/generators/projectGenerator.js +8 -5
- package/lib/generators/projectGenerator.js.map +1 -1
- package/lib/generators/staticResourceGenerator.d.ts +1 -1
- package/lib/generators/uiBundleGenerator.d.ts +1 -1
- package/lib/generators/uiBundleGenerator.js +4 -2
- package/lib/generators/uiBundleGenerator.js.map +1 -1
- package/lib/generators/uiEmbeddingGenerator.d.ts +1 -1
- package/lib/generators/uiEmbeddingGenerator.js +2 -1
- package/lib/generators/uiEmbeddingGenerator.js.map +1 -1
- package/lib/generators/visualforceComponentGenerator.d.ts +1 -1
- package/lib/generators/visualforcePageGenerator.d.ts +1 -1
- package/lib/i18n/index.js +1 -1
- package/lib/i18n/index.js.map +1 -1
- package/lib/i18n/localization.js +13 -12
- package/lib/i18n/localization.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/service/gitRepoUtils.d.ts +1 -1
- package/lib/service/gitRepoUtils.js +7 -8
- package/lib/service/gitRepoUtils.js.map +1 -1
- package/lib/service/templateService.d.ts +1 -1
- package/lib/service/templateService.js +1 -1
- package/lib/service/templateService.js.map +1 -1
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/package-lock.json +558 -533
- package/lib/templates/project/angularintapp/CHANGELOG.md +8 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/eslint.config.js +2 -1
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/package-lock.json +568 -543
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/package.json +4 -4
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/icon/icon.ts +44 -0
- package/lib/templates/project/angularintapp/package.json +1 -1
- package/lib/templates/project/reactexternalapp/CHANGELOG.md +40 -0
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/eslint.config.js +8 -12
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package-lock.json +362 -344
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package.json +5 -5
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/components/ui/button.tsx +1 -1
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/components/ui/sonner.tsx +7 -1
- package/lib/templates/project/reactexternalapp/package.json +1 -1
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/package-lock.json +363 -345
- package/lib/templates/project/vueinternalapp/.forceignore +15 -0
- package/lib/templates/project/vueinternalapp/.husky/pre-commit +4 -0
- package/lib/templates/project/vueinternalapp/.prettierignore +11 -0
- package/lib/templates/project/vueinternalapp/.prettierrc +17 -0
- package/lib/templates/project/vueinternalapp/CHANGELOG.md +5375 -0
- package/lib/templates/project/vueinternalapp/PRD.md +35 -0
- package/lib/templates/project/vueinternalapp/README.md +125 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_ps_/vueinternalapp_Access.permissionset-meta.xml +13 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/.forceignore +15 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/.graphqlrc.yml +2 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/.prettierignore +9 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/.prettierrc +11 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/README.md +35 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/codegen.yml +95 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/components.json +19 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/e2e/app.spec.ts +17 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/eslint.config.js +124 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/index.html +12 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/package-lock.json +15530 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/package.json +73 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/playwright.config.ts +24 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/scripts/get-graphql-schema.mjs +71 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/scripts/rewrite-e2e-assets.mjs +23 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/App.vue +5 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/api/apiUtils.ts +56 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/api/orgApiVersionService.ts +37 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/api/searchableContentTypesService.ts +119 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/channelResolver.ts +40 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/cmsQueryFragment.ts +108 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/composables/useSearchableContentTypes.ts +132 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/contentTypeSessionCache.ts +134 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/contentTypeUtils.ts +40 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/index.ts +55 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/parseResponse.ts +65 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/searchChannel.ts +31 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/types.ts +66 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/registry.ts +38 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/sobject/index.ts +19 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/sobject/parseResponse.ts +55 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/sobject/queryFragment.ts +141 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/types.ts +103 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/api/distinctValuesService.ts +81 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/api/searchService.ts +136 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/GlobalSearchBox.types.ts +18 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/GlobalSearchBox.vue +73 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/MergedSearchResults.types.ts +24 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/MergedSearchResults.vue +263 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/Search.vue +200 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/SearchResults.vue +99 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/SourceSection.vue +204 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/controls/PaginationControls.vue +180 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/controls/ScopeSelector.vue +91 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/controls/SearchBar.vue +56 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/controls/SortControl.vue +55 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/ActiveFilters.vue +59 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/DefaultFilterField.vue +63 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/DefaultFilterPanel.vue +31 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/FilterContext.ts +45 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/FilterProvider.vue +23 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/FilterResetButton.vue +17 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/PicklistField.vue +35 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/inputs/BooleanFilter.vue +47 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/inputs/DateRangeFilter.vue +144 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/inputs/FilterFieldWrapper.vue +23 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/inputs/MultiSelectFilter.vue +95 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/inputs/NumericRangeFilter.vue +117 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/inputs/SelectFilter.vue +44 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/inputs/TextFilter.vue +49 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/results/CmsResultRow.vue +160 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/results/DefaultResultRow.vue +102 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/results/RenderVNode.ts +10 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/results/resolveResultRenderer.ts +41 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/composables/useAsyncData.ts +66 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/composables/useDistinctValues.ts +67 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/composables/useSearch.ts +906 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/config.json +88 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/constants.ts +8 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/index.ts +115 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/loadConfig.ts +14 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/queryBuilder.ts +100 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/types.ts +375 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/utils/debounce.ts +17 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/utils/fieldUtils.ts +14 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/utils/filterUtils.ts +304 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/utils/sortUtils.ts +34 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/api/account/query/getAccountDetail.graphql +121 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/api/graphqlClient.ts +44 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/appLayout.vue +153 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/AgentforceConversationClient.vue +76 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/AccountDetailContent.vue +124 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/AccountDetailError.vue +28 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/AccountDetailNotFound.vue +22 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/AccountDetailSkeleton.vue +57 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/DetailSection.vue +25 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/FieldItem.vue +17 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/FieldRow.vue +5 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/SkeletonFieldRow.vue +12 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/TelephoneField.vue +7 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/types.ts +42 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/alerts/status-alert.vue +59 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/layouts/card-layout.vue +30 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/alert/Alert.vue +21 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/alert/AlertAction.vue +17 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/alert/AlertDescription.vue +22 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/alert/AlertTitle.vue +22 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/alert/index.ts +25 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/avatar/Avatar.vue +23 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/avatar/AvatarFallback.vue +31 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/avatar/AvatarImage.vue +16 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/avatar/index.ts +3 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/button/Button.vue +33 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/button/index.ts +43 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/Card.vue +29 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/CardAction.vue +22 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/CardContent.vue +17 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/CardDescription.vue +17 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/CardFooter.vue +22 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/CardHeader.vue +22 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/CardTitle.vue +22 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/index.ts +7 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/checkbox/Checkbox.vue +43 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/checkbox/index.ts +1 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/collapsible/Collapsible.vue +19 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/collapsible/CollapsibleContent.vue +12 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/collapsible/CollapsibleTrigger.vue +12 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/collapsible/index.ts +3 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/Dialog.vue +15 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogClose.vue +12 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogContent.vue +59 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogDescription.vue +31 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogFooter.vue +33 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogHeader.vue +17 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogOverlay.vue +31 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogPortal.vue +12 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogTitle.vue +26 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogTrigger.vue +12 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/index.ts +10 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenu.vue +19 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +51 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuContent.vue +47 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +12 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuItem.vue +44 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +30 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuPortal.vue +12 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +52 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +26 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +19 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuSub.vue +19 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +37 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +38 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +17 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/index.ts +15 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/Field.vue +27 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldContent.vue +22 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldDescription.vue +24 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldError.vue +48 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldGroup.vue +22 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldLabel.vue +24 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldLegend.vue +29 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldSeparator.vue +31 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldSet.vue +22 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldTitle.vue +22 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/index.ts +33 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/index.ts +115 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/input/Input.vue +30 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/input/index.ts +1 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/label/Label.vue +29 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/label/index.ts +1 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/Pagination.vue +17 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/PaginationContent.vue +15 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/PaginationEllipsis.vue +23 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/PaginationItem.vue +7 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/PaginationLink.vue +31 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/PaginationNext.vue +29 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/PaginationPrevious.vue +29 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/index.ts +7 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/Popover.vue +15 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/PopoverAnchor.vue +12 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/PopoverContent.vue +44 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/PopoverDescription.vue +17 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/PopoverHeader.vue +17 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/PopoverTitle.vue +14 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/PopoverTrigger.vue +12 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/index.ts +7 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/Select.vue +15 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectContent.vue +65 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectGroup.vue +26 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectItem.vue +41 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectLabel.vue +26 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectScrollDownButton.vue +32 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectScrollUpButton.vue +32 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectSeparator.vue +24 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectTrigger.vue +45 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectValue.vue +12 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/index.ts +10 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/separator/Separator.vue +33 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/separator/index.ts +1 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/skeleton/Skeleton.vue +15 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/skeleton/index.ts +1 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/sonner/Sonner.vue +29 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/sonner/index.ts +3 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/spinner/Spinner.vue +17 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/spinner/index.ts +1 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/composables/useAsyncData.ts +69 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/index.ts +10 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/lib/utils.ts +6 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/main.ts +6 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/pages/AccountObjectDetailPage.vue +98 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/pages/Home.vue +20 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/pages/NotFound.vue +28 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/pages/SearchPage.vue +17 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/router-utils.ts +32 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/router.ts +51 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/styles/global.css +134 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/test/setup.ts +1 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/types/conversation.ts +54 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/types/globals.d.ts +13 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/utils/accountFields.ts +25 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/tsconfig.json +45 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/tsconfig.node.json +13 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/tsconfig.tsbuildinfo +1 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/ui-bundle.json +7 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/vite-env.d.ts +14 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/vite.config.ts +106 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/vitest-env.d.ts +2 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/vueinternalapp.uibundle-meta.xml +8 -0
- package/lib/templates/project/vueinternalapp/_p_/_m_/applications/vueinternalapp.app-meta.xml +17 -0
- package/lib/templates/project/vueinternalapp/config/project-scratch-def.json +13 -0
- package/lib/templates/project/vueinternalapp/eslint.config.js +7 -0
- package/lib/templates/project/vueinternalapp/jest.config.js +6 -0
- package/lib/templates/project/vueinternalapp/package.json +46 -0
- package/lib/templates/project/vueinternalapp/scripts/apex/hello.apex +10 -0
- package/lib/templates/project/vueinternalapp/scripts/gitignore-templates.json +4 -0
- package/lib/templates/project/vueinternalapp/scripts/graphql-search.sh +191 -0
- package/lib/templates/project/vueinternalapp/scripts/network-senders.mjs +84 -0
- package/lib/templates/project/vueinternalapp/scripts/org-setup-config-schema.mjs +132 -0
- package/lib/templates/project/vueinternalapp/scripts/org-setup-dev.mjs +114 -0
- package/lib/templates/project/vueinternalapp/scripts/org-setup-url.mjs +108 -0
- package/lib/templates/project/vueinternalapp/scripts/org-setup-utils.mjs +569 -0
- package/lib/templates/project/vueinternalapp/scripts/org-setup-xml.mjs +283 -0
- package/lib/templates/project/vueinternalapp/scripts/org-setup.config.json +9 -0
- package/lib/templates/project/vueinternalapp/scripts/org-setup.mjs +2545 -0
- package/lib/templates/project/vueinternalapp/scripts/sf-project-setup.mjs +103 -0
- package/lib/templates/project/vueinternalapp/scripts/soql/account.soql +6 -0
- package/lib/templates/project/vueinternalapp/scripts/validate-org-setup-config.mjs +38 -0
- package/lib/templates/project/vueinternalapp/sfdx-project.json +12 -0
- package/lib/templates/uiBundles/angularbasic/package-lock.json +558 -533
- package/lib/templates/uiBundles/reactbasic/eslint.config.js +8 -12
- package/lib/templates/uiBundles/reactbasic/package-lock.json +362 -344
- package/lib/templates/uiBundles/reactbasic/package.json +5 -5
- package/lib/templates/uiBundles/reactbasic/src/components/ui/button.tsx +1 -1
- package/lib/templates/uiBundles/reactbasic/src/components/ui/sonner.tsx +7 -1
- package/lib/templates/uiBundles/vuebasic/eslint.config.js +6 -1
- package/lib/templates/uiBundles/vuebasic/package-lock.json +339 -321
- package/lib/templates/uiBundles/vuebasic/package.json +5 -5
- package/lib/utils/createUtil.js +1 -1
- package/lib/utils/createUtil.js.map +1 -1
- package/lib/utils/types.d.ts +8 -7
- package/lib/utils/types.js +4 -4
- package/lib/utils/types.js.map +1 -1
- package/lib/utils/uiBundleTemplateUtils.js +13 -9
- package/lib/utils/uiBundleTemplateUtils.js.map +1 -1
- package/package.json +10 -12
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
All rights reserved.
|
|
4
|
+
For full license text, see the LICENSE.txt file
|
|
5
|
+
-->
|
|
6
|
+
<script setup lang="ts">
|
|
7
|
+
import { onMounted } from "vue";
|
|
8
|
+
import { RouterLink } from "vue-router";
|
|
9
|
+
|
|
10
|
+
onMounted(() => {
|
|
11
|
+
document.title = "Page Not Found | MyApp";
|
|
12
|
+
});
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<main class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
|
17
|
+
<div class="text-center">
|
|
18
|
+
<h1 class="text-4xl font-bold text-gray-900 mb-4">404</h1>
|
|
19
|
+
<p class="text-lg text-gray-600 mb-8">Page not found</p>
|
|
20
|
+
<RouterLink
|
|
21
|
+
to="/"
|
|
22
|
+
class="inline-block px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"
|
|
23
|
+
>
|
|
24
|
+
Go to Home
|
|
25
|
+
</RouterLink>
|
|
26
|
+
</div>
|
|
27
|
+
</main>
|
|
28
|
+
</template>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { Search, config } from "../features/search";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Page mounted at `/search`. Owns the route's `main` landmark (WCAG 1.3.1) and
|
|
6
|
+
* renders the drop-in `<Search>` against the static `config.json`.
|
|
7
|
+
*/
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<Search
|
|
12
|
+
as="main"
|
|
13
|
+
:config="config"
|
|
14
|
+
title="Search"
|
|
15
|
+
search-placeholder="Search accounts, contacts, opportunities, and content..."
|
|
16
|
+
/>
|
|
17
|
+
</template>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { RouteRecordRaw } from 'vue-router';
|
|
2
|
+
import { routes } from './router';
|
|
3
|
+
|
|
4
|
+
export type RouteWithFullPath = RouteRecordRaw & { fullPath: string };
|
|
5
|
+
|
|
6
|
+
const joinPath = (parentPath: string, childPath: string): string => {
|
|
7
|
+
if (childPath.startsWith('/')) {
|
|
8
|
+
return childPath;
|
|
9
|
+
}
|
|
10
|
+
if (childPath === '') {
|
|
11
|
+
return parentPath || '/';
|
|
12
|
+
}
|
|
13
|
+
return parentPath === '/' ? `/${childPath}` : `${parentPath}/${childPath}`;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const flatMapRoutes = (
|
|
17
|
+
route: RouteRecordRaw,
|
|
18
|
+
parentPath: string = ''
|
|
19
|
+
): RouteWithFullPath[] => {
|
|
20
|
+
const fullPath = joinPath(parentPath, route.path ?? '');
|
|
21
|
+
|
|
22
|
+
const routeWithPath = { ...route, fullPath } as RouteWithFullPath;
|
|
23
|
+
|
|
24
|
+
const childRoutes =
|
|
25
|
+
route.children?.flatMap(child => flatMapRoutes(child, fullPath)) || [];
|
|
26
|
+
|
|
27
|
+
return [routeWithPath, ...childRoutes];
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const getAllRoutes = (): RouteWithFullPath[] => {
|
|
31
|
+
return routes.flatMap(route => flatMapRoutes(route));
|
|
32
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createRouter,
|
|
3
|
+
createWebHistory,
|
|
4
|
+
type RouteRecordRaw,
|
|
5
|
+
} from 'vue-router';
|
|
6
|
+
import AppLayout from './appLayout.vue';
|
|
7
|
+
import NotFound from '@/pages/NotFound.vue';
|
|
8
|
+
import SearchPage from "./pages/SearchPage.vue";
|
|
9
|
+
import Home from "./pages/Home.vue";
|
|
10
|
+
import AccountObjectDetailPage from "./pages/AccountObjectDetailPage.vue";
|
|
11
|
+
|
|
12
|
+
// The route-merger composes feature routes into this `routes` array by matching
|
|
13
|
+
// on `path`, so features ship a router.ts with the same top-level `path: ''`
|
|
14
|
+
// node and their child routes are appended as siblings of the base app's routes.
|
|
15
|
+
export const routes: RouteRecordRaw[] = [
|
|
16
|
+
{
|
|
17
|
+
path: "/",
|
|
18
|
+
component: AppLayout,
|
|
19
|
+
children: [
|
|
20
|
+
{
|
|
21
|
+
path: "",
|
|
22
|
+
component: Home,
|
|
23
|
+
meta: { showInNavigation: true, label: "Home" }
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
path: "search",
|
|
27
|
+
component: SearchPage,
|
|
28
|
+
meta: { showInNavigation: true, label: "Search" }
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
path: "accounts/:recordId",
|
|
32
|
+
component: AccountObjectDetailPage
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
path: ':pathMatch(.*)*',
|
|
36
|
+
component: NotFound
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
// Normalize basename: strip trailing slash so it matches URLs like /lwr/application/ai/c-app
|
|
43
|
+
const rawBasePath = (globalThis as { SFDC_ENV?: { basePath?: string } })
|
|
44
|
+
.SFDC_ENV?.basePath;
|
|
45
|
+
const basename =
|
|
46
|
+
typeof rawBasePath === 'string' ? rawBasePath.replace(/\/+$/, '') : undefined;
|
|
47
|
+
|
|
48
|
+
export const router = createRouter({
|
|
49
|
+
history: createWebHistory(basename),
|
|
50
|
+
routes,
|
|
51
|
+
});
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
@import 'tailwindcss';
|
|
2
|
+
|
|
3
|
+
@layer base {
|
|
4
|
+
html,
|
|
5
|
+
body,
|
|
6
|
+
#app {
|
|
7
|
+
@apply min-h-screen;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
body {
|
|
11
|
+
@apply antialiased bg-white;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@import 'tw-animate-css';
|
|
16
|
+
|
|
17
|
+
@custom-variant dark (&:is(.dark *));
|
|
18
|
+
|
|
19
|
+
@theme inline {
|
|
20
|
+
--color-background: var(--background);
|
|
21
|
+
--color-foreground: var(--foreground);
|
|
22
|
+
--color-card: var(--card);
|
|
23
|
+
--color-card-foreground: var(--card-foreground);
|
|
24
|
+
--color-popover: var(--popover);
|
|
25
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
26
|
+
--color-primary: var(--primary);
|
|
27
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
28
|
+
--color-secondary: var(--secondary);
|
|
29
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
30
|
+
--color-muted: var(--muted);
|
|
31
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
32
|
+
--color-accent: var(--accent);
|
|
33
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
34
|
+
--color-destructive: var(--destructive);
|
|
35
|
+
--color-destructive-foreground: var(--destructive-foreground);
|
|
36
|
+
--color-border: var(--border);
|
|
37
|
+
--color-input: var(--input);
|
|
38
|
+
--color-ring: var(--ring);
|
|
39
|
+
--color-chart-1: var(--chart-1);
|
|
40
|
+
--color-chart-2: var(--chart-2);
|
|
41
|
+
--color-chart-3: var(--chart-3);
|
|
42
|
+
--color-chart-4: var(--chart-4);
|
|
43
|
+
--color-chart-5: var(--chart-5);
|
|
44
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
45
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
46
|
+
--radius-lg: var(--radius);
|
|
47
|
+
--radius-xl: calc(var(--radius) + 4px);
|
|
48
|
+
--color-sidebar: var(--sidebar);
|
|
49
|
+
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
50
|
+
--color-sidebar-primary: var(--sidebar-primary);
|
|
51
|
+
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
52
|
+
--color-sidebar-accent: var(--sidebar-accent);
|
|
53
|
+
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
54
|
+
--color-sidebar-border: var(--sidebar-border);
|
|
55
|
+
--color-sidebar-ring: var(--sidebar-ring);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
:root {
|
|
59
|
+
--radius: 0.625rem;
|
|
60
|
+
--background: oklch(1 0 0);
|
|
61
|
+
--foreground: oklch(0.145 0 0);
|
|
62
|
+
--card: oklch(1 0 0);
|
|
63
|
+
--card-foreground: oklch(0.145 0 0);
|
|
64
|
+
--popover: oklch(1 0 0);
|
|
65
|
+
--popover-foreground: oklch(0.145 0 0);
|
|
66
|
+
--primary: oklch(0.205 0 0);
|
|
67
|
+
--primary-foreground: oklch(0.985 0 0);
|
|
68
|
+
--secondary: oklch(0.97 0 0);
|
|
69
|
+
--secondary-foreground: oklch(0.205 0 0);
|
|
70
|
+
--muted: oklch(0.97 0 0);
|
|
71
|
+
--muted-foreground: oklch(0.556 0 0);
|
|
72
|
+
--accent: oklch(0.97 0 0);
|
|
73
|
+
--accent-foreground: oklch(0.205 0 0);
|
|
74
|
+
--destructive: oklch(0.577 0.245 27.325);
|
|
75
|
+
--border: oklch(0.922 0 0);
|
|
76
|
+
--input: oklch(0.922 0 0);
|
|
77
|
+
--ring: oklch(0.708 0 0);
|
|
78
|
+
--chart-1: oklch(0.646 0.222 41.116);
|
|
79
|
+
--chart-2: oklch(0.6 0.118 184.704);
|
|
80
|
+
--chart-3: oklch(0.398 0.07 227.392);
|
|
81
|
+
--chart-4: oklch(0.828 0.189 84.429);
|
|
82
|
+
--chart-5: oklch(0.769 0.188 70.08);
|
|
83
|
+
--sidebar: oklch(0.985 0 0);
|
|
84
|
+
--sidebar-foreground: oklch(0.145 0 0);
|
|
85
|
+
--sidebar-primary: oklch(0.205 0 0);
|
|
86
|
+
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
87
|
+
--sidebar-accent: oklch(0.97 0 0);
|
|
88
|
+
--sidebar-accent-foreground: oklch(0.205 0 0);
|
|
89
|
+
--sidebar-border: oklch(0.922 0 0);
|
|
90
|
+
--sidebar-ring: oklch(0.708 0 0);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.dark {
|
|
94
|
+
--background: oklch(0.145 0 0);
|
|
95
|
+
--foreground: oklch(0.985 0 0);
|
|
96
|
+
--card: oklch(0.205 0 0);
|
|
97
|
+
--card-foreground: oklch(0.985 0 0);
|
|
98
|
+
--popover: oklch(0.205 0 0);
|
|
99
|
+
--popover-foreground: oklch(0.985 0 0);
|
|
100
|
+
--primary: oklch(0.922 0 0);
|
|
101
|
+
--primary-foreground: oklch(0.205 0 0);
|
|
102
|
+
--secondary: oklch(0.269 0 0);
|
|
103
|
+
--secondary-foreground: oklch(0.985 0 0);
|
|
104
|
+
--muted: oklch(0.269 0 0);
|
|
105
|
+
--muted-foreground: oklch(0.708 0 0);
|
|
106
|
+
--accent: oklch(0.269 0 0);
|
|
107
|
+
--accent-foreground: oklch(0.985 0 0);
|
|
108
|
+
--destructive: oklch(0.704 0.191 22.216);
|
|
109
|
+
--border: oklch(1 0 0 / 10%);
|
|
110
|
+
--input: oklch(1 0 0 / 15%);
|
|
111
|
+
--ring: oklch(0.556 0 0);
|
|
112
|
+
--chart-1: oklch(0.488 0.243 264.376);
|
|
113
|
+
--chart-2: oklch(0.696 0.17 162.48);
|
|
114
|
+
--chart-3: oklch(0.769 0.188 70.08);
|
|
115
|
+
--chart-4: oklch(0.627 0.265 303.9);
|
|
116
|
+
--chart-5: oklch(0.645 0.246 16.439);
|
|
117
|
+
--sidebar: oklch(0.205 0 0);
|
|
118
|
+
--sidebar-foreground: oklch(0.985 0 0);
|
|
119
|
+
--sidebar-primary: oklch(0.488 0.243 264.376);
|
|
120
|
+
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
121
|
+
--sidebar-accent: oklch(0.269 0 0);
|
|
122
|
+
--sidebar-accent-foreground: oklch(0.985 0 0);
|
|
123
|
+
--sidebar-border: oklch(1 0 0 / 10%);
|
|
124
|
+
--sidebar-ring: oklch(0.556 0 0);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@layer base {
|
|
128
|
+
* {
|
|
129
|
+
@apply border-border outline-ring/50;
|
|
130
|
+
}
|
|
131
|
+
body {
|
|
132
|
+
@apply bg-background text-foreground;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@testing-library/jest-dom/vitest';
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type {
|
|
8
|
+
AgentforceErrorHandler,
|
|
9
|
+
AgentforceReadyHandler,
|
|
10
|
+
} from "@salesforce/agentforce-conversation-client";
|
|
11
|
+
|
|
12
|
+
/** Auth options resolved at embed time (frontdoor in dev, org URL in prod). */
|
|
13
|
+
export interface ResolvedEmbedOptions {
|
|
14
|
+
salesforceOrigin?: string;
|
|
15
|
+
frontdoorUrl?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export type StyleTokens = Record<string, string>;
|
|
19
|
+
|
|
20
|
+
/** Ready/error callbacks re-exported for consumers binding the component. */
|
|
21
|
+
export type { AgentforceErrorHandler, AgentforceReadyHandler };
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Props accepted by the `<AgentforceConversationClient />` Vue component. The
|
|
25
|
+
* Vue port of the React `AgentforceConversationClientProps`; `agentId` is
|
|
26
|
+
* required and config is passed through to the embed client as-is.
|
|
27
|
+
*/
|
|
28
|
+
export interface AgentforceConversationClientProps {
|
|
29
|
+
/** Required in practice: id of the agent to load. */
|
|
30
|
+
agentId: string;
|
|
31
|
+
/** Display name for the agent shown in the chat header. */
|
|
32
|
+
agentLabel?: string;
|
|
33
|
+
/** If true, renders inline. If omitted/false, renders floating. */
|
|
34
|
+
inline?: boolean;
|
|
35
|
+
/** Show/hide chat header. Defaults to true for floating; can only be set for inline mode. */
|
|
36
|
+
headerEnabled?: boolean;
|
|
37
|
+
/** Show/hide agent icon in the header. */
|
|
38
|
+
showHeaderIcon?: boolean;
|
|
39
|
+
/** Inline width. */
|
|
40
|
+
width?: string | number;
|
|
41
|
+
/** Inline height. */
|
|
42
|
+
height?: string | number;
|
|
43
|
+
/** Theme overrides for the chat UI. */
|
|
44
|
+
styleTokens?: StyleTokens;
|
|
45
|
+
isFileBased?: boolean;
|
|
46
|
+
/** Optional. If not provided, resolved internally (e.g. from /__lo/frontdoor in dev, window.location.origin in prod). */
|
|
47
|
+
salesforceOrigin?: string;
|
|
48
|
+
/** Optional. If not provided, resolved internally in dev via /__lo/frontdoor. */
|
|
49
|
+
frontdoorUrl?: string;
|
|
50
|
+
/** Callback invoked when the Lightning Out application is ready. */
|
|
51
|
+
onReady?: AgentforceReadyHandler;
|
|
52
|
+
/** Callback invoked when a Lightning Out error occurs. */
|
|
53
|
+
onError?: AgentforceErrorHandler;
|
|
54
|
+
}
|
|
@@ -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;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Field helpers for reading uiapi GraphQL response nodes: values arrive as `{ value, displayValue }` objects, so callers need one place to unwrap them. */
|
|
2
|
+
|
|
3
|
+
/** Picks the user-facing string for a `{ value, displayValue }` field. */
|
|
4
|
+
export function fieldValue(
|
|
5
|
+
field: { displayValue?: string | null; value?: unknown } | null | undefined,
|
|
6
|
+
): string | null {
|
|
7
|
+
if (field?.displayValue != null) return field.displayValue;
|
|
8
|
+
if (field?.value != null) return String(field.value);
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Builds the display lines for a Salesforce compound address, or null if empty. */
|
|
13
|
+
export function getAddressFieldLines(address: {
|
|
14
|
+
street?: string | null;
|
|
15
|
+
city?: string | null;
|
|
16
|
+
state?: string | null;
|
|
17
|
+
postalCode?: string | null;
|
|
18
|
+
country?: string | null;
|
|
19
|
+
}) {
|
|
20
|
+
const cityStateZip = [address.city, address.state].filter(Boolean).join(", ");
|
|
21
|
+
const cityStateZipLine = [cityStateZip, address.postalCode].filter(Boolean).join(" ");
|
|
22
|
+
const lines = [address.street, cityStateZipLine, address.country].filter(Boolean);
|
|
23
|
+
if (lines.length === 0) return null;
|
|
24
|
+
return lines;
|
|
25
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"useDefineForClassFields": true,
|
|
5
|
+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
|
6
|
+
"module": "ESNext",
|
|
7
|
+
"skipLibCheck": true,
|
|
8
|
+
|
|
9
|
+
/* Bundler mode */
|
|
10
|
+
"moduleResolution": "bundler",
|
|
11
|
+
"allowImportingTsExtensions": true,
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"noEmit": true,
|
|
15
|
+
"jsx": "preserve",
|
|
16
|
+
|
|
17
|
+
/* Linting */
|
|
18
|
+
"strict": true,
|
|
19
|
+
"noUnusedLocals": true,
|
|
20
|
+
"noUnusedParameters": true,
|
|
21
|
+
"noFallthroughCasesInSwitch": true,
|
|
22
|
+
|
|
23
|
+
/* Path mapping */
|
|
24
|
+
"paths": {
|
|
25
|
+
"@/*": ["./src/*"],
|
|
26
|
+
"@api/*": ["./src/api/*"],
|
|
27
|
+
"@components/*": ["./src/components/*"],
|
|
28
|
+
"@utils/*": ["./src/utils/*"],
|
|
29
|
+
"@styles/*": ["./src/styles/*"],
|
|
30
|
+
"@assets/*": ["./src/assets/*"],
|
|
31
|
+
"@salesforce/platform-sdk": [
|
|
32
|
+
"../../../../../../../../../../packages/sdk/platform-sdk/src/index.ts"
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"include": [
|
|
37
|
+
"src/**/*.ts",
|
|
38
|
+
"src/**/*.vue",
|
|
39
|
+
"e2e",
|
|
40
|
+
"vite-env.d.ts",
|
|
41
|
+
"vitest-env.d.ts",
|
|
42
|
+
"../../../../../../../../../../packages/sdk/platform-sdk/types"
|
|
43
|
+
],
|
|
44
|
+
"references": [{ "path": "./tsconfig.node.json" }]
|
|
45
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"composite": true,
|
|
4
|
+
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
|
|
5
|
+
"skipLibCheck": true,
|
|
6
|
+
"module": "ESNext",
|
|
7
|
+
"moduleResolution": "bundler",
|
|
8
|
+
"allowSyntheticDefaultImports": true,
|
|
9
|
+
"strict": true,
|
|
10
|
+
"outDir": "./build"
|
|
11
|
+
},
|
|
12
|
+
"include": ["vite.config.ts"]
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["./src/index.ts","./src/main.ts","./src/router-utils.ts","./src/router.ts","./src/api/graphqlClient.ts","./src/components/account/types.ts","./src/components/ui/index.ts","./src/components/ui/alert/index.ts","./src/components/ui/avatar/index.ts","./src/components/ui/button/index.ts","./src/components/ui/card/index.ts","./src/components/ui/checkbox/index.ts","./src/components/ui/collapsible/index.ts","./src/components/ui/dialog/index.ts","./src/components/ui/dropdown-menu/index.ts","./src/components/ui/field/index.ts","./src/components/ui/input/index.ts","./src/components/ui/label/index.ts","./src/components/ui/pagination/index.ts","./src/components/ui/popover/index.ts","./src/components/ui/select/index.ts","./src/components/ui/separator/index.ts","./src/components/ui/skeleton/index.ts","./src/components/ui/sonner/index.ts","./src/components/ui/spinner/index.ts","./src/composables/useAsyncData.ts","./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/composables/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.types.ts","./src/features/search/components/MergedSearchResults.types.ts","./src/features/search/components/__tests__/MergedSearchResults.test.ts","./src/features/search/components/__tests__/Search.test.ts","./src/features/search/components/__tests__/SourceSection.test.ts","./src/features/search/components/filters/FilterContext.ts","./src/features/search/components/results/RenderVNode.ts","./src/features/search/components/results/resolveResultRenderer.ts","./src/features/search/components/results/__tests__/CmsResultRow.test.ts","./src/features/search/components/results/__tests__/DefaultResultRow.test.ts","./src/features/search/components/results/__tests__/resolveResultRenderer.test.ts","./src/features/search/composables/useAsyncData.ts","./src/features/search/composables/useDistinctValues.ts","./src/features/search/composables/useSearch.ts","./src/features/search/composables/__tests__/useSearch.test.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/lib/utils.ts","./src/test/setup.ts","./src/types/conversation.ts","./src/types/globals.d.ts","./src/utils/accountFields.ts","./src/utils/__tests__/accountFields.test.ts","./src/App.vue","./src/appLayout.vue","./src/components/AgentforceConversationClient.vue","./src/components/account/AccountDetailContent.vue","./src/components/account/AccountDetailError.vue","./src/components/account/AccountDetailNotFound.vue","./src/components/account/AccountDetailSkeleton.vue","./src/components/account/DetailSection.vue","./src/components/account/FieldItem.vue","./src/components/account/FieldRow.vue","./src/components/account/SkeletonFieldRow.vue","./src/components/account/TelephoneField.vue","./src/components/alerts/status-alert.vue","./src/components/layouts/card-layout.vue","./src/components/ui/alert/Alert.vue","./src/components/ui/alert/AlertAction.vue","./src/components/ui/alert/AlertDescription.vue","./src/components/ui/alert/AlertTitle.vue","./src/components/ui/avatar/Avatar.vue","./src/components/ui/avatar/AvatarFallback.vue","./src/components/ui/avatar/AvatarImage.vue","./src/components/ui/button/Button.vue","./src/components/ui/card/Card.vue","./src/components/ui/card/CardAction.vue","./src/components/ui/card/CardContent.vue","./src/components/ui/card/CardDescription.vue","./src/components/ui/card/CardFooter.vue","./src/components/ui/card/CardHeader.vue","./src/components/ui/card/CardTitle.vue","./src/components/ui/checkbox/Checkbox.vue","./src/components/ui/collapsible/Collapsible.vue","./src/components/ui/collapsible/CollapsibleContent.vue","./src/components/ui/collapsible/CollapsibleTrigger.vue","./src/components/ui/dialog/Dialog.vue","./src/components/ui/dialog/DialogClose.vue","./src/components/ui/dialog/DialogContent.vue","./src/components/ui/dialog/DialogDescription.vue","./src/components/ui/dialog/DialogFooter.vue","./src/components/ui/dialog/DialogHeader.vue","./src/components/ui/dialog/DialogOverlay.vue","./src/components/ui/dialog/DialogPortal.vue","./src/components/ui/dialog/DialogTitle.vue","./src/components/ui/dialog/DialogTrigger.vue","./src/components/ui/dropdown-menu/DropdownMenu.vue","./src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue","./src/components/ui/dropdown-menu/DropdownMenuContent.vue","./src/components/ui/dropdown-menu/DropdownMenuGroup.vue","./src/components/ui/dropdown-menu/DropdownMenuItem.vue","./src/components/ui/dropdown-menu/DropdownMenuLabel.vue","./src/components/ui/dropdown-menu/DropdownMenuPortal.vue","./src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue","./src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue","./src/components/ui/dropdown-menu/DropdownMenuSeparator.vue","./src/components/ui/dropdown-menu/DropdownMenuShortcut.vue","./src/components/ui/dropdown-menu/DropdownMenuSub.vue","./src/components/ui/dropdown-menu/DropdownMenuSubContent.vue","./src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue","./src/components/ui/dropdown-menu/DropdownMenuTrigger.vue","./src/components/ui/field/Field.vue","./src/components/ui/field/FieldContent.vue","./src/components/ui/field/FieldDescription.vue","./src/components/ui/field/FieldError.vue","./src/components/ui/field/FieldGroup.vue","./src/components/ui/field/FieldLabel.vue","./src/components/ui/field/FieldLegend.vue","./src/components/ui/field/FieldSeparator.vue","./src/components/ui/field/FieldSet.vue","./src/components/ui/field/FieldTitle.vue","./src/components/ui/input/Input.vue","./src/components/ui/label/Label.vue","./src/components/ui/pagination/Pagination.vue","./src/components/ui/pagination/PaginationContent.vue","./src/components/ui/pagination/PaginationEllipsis.vue","./src/components/ui/pagination/PaginationItem.vue","./src/components/ui/pagination/PaginationLink.vue","./src/components/ui/pagination/PaginationNext.vue","./src/components/ui/pagination/PaginationPrevious.vue","./src/components/ui/popover/Popover.vue","./src/components/ui/popover/PopoverAnchor.vue","./src/components/ui/popover/PopoverContent.vue","./src/components/ui/popover/PopoverDescription.vue","./src/components/ui/popover/PopoverHeader.vue","./src/components/ui/popover/PopoverTitle.vue","./src/components/ui/popover/PopoverTrigger.vue","./src/components/ui/select/Select.vue","./src/components/ui/select/SelectContent.vue","./src/components/ui/select/SelectGroup.vue","./src/components/ui/select/SelectItem.vue","./src/components/ui/select/SelectLabel.vue","./src/components/ui/select/SelectScrollDownButton.vue","./src/components/ui/select/SelectScrollUpButton.vue","./src/components/ui/select/SelectSeparator.vue","./src/components/ui/select/SelectTrigger.vue","./src/components/ui/select/SelectValue.vue","./src/components/ui/separator/Separator.vue","./src/components/ui/skeleton/Skeleton.vue","./src/components/ui/sonner/Sonner.vue","./src/components/ui/spinner/Spinner.vue","./src/features/search/components/GlobalSearchBox.vue","./src/features/search/components/MergedSearchResults.vue","./src/features/search/components/Search.vue","./src/features/search/components/SearchResults.vue","./src/features/search/components/SourceSection.vue","./src/features/search/components/controls/PaginationControls.vue","./src/features/search/components/controls/ScopeSelector.vue","./src/features/search/components/controls/SearchBar.vue","./src/features/search/components/controls/SortControl.vue","./src/features/search/components/filters/ActiveFilters.vue","./src/features/search/components/filters/DefaultFilterField.vue","./src/features/search/components/filters/DefaultFilterPanel.vue","./src/features/search/components/filters/FilterProvider.vue","./src/features/search/components/filters/FilterResetButton.vue","./src/features/search/components/filters/PicklistField.vue","./src/features/search/components/filters/inputs/BooleanFilter.vue","./src/features/search/components/filters/inputs/DateRangeFilter.vue","./src/features/search/components/filters/inputs/FilterFieldWrapper.vue","./src/features/search/components/filters/inputs/MultiSelectFilter.vue","./src/features/search/components/filters/inputs/NumericRangeFilter.vue","./src/features/search/components/filters/inputs/SelectFilter.vue","./src/features/search/components/filters/inputs/TextFilter.vue","./src/features/search/components/results/CmsResultRow.vue","./src/features/search/components/results/DefaultResultRow.vue","./src/pages/AccountObjectDetailPage.vue","./src/pages/Home.vue","./src/pages/NotFound.vue","./src/pages/SearchPage.vue","./e2e/app.spec.ts","./vite-env.d.ts","./vitest-env.d.ts","../../../../../../../../../sdk/platform-sdk/types/env.d.ts"],"version":"5.9.3"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="vite/client" />
|
|
2
|
+
|
|
3
|
+
/** Salesforce API version injected at build time by the Vite define plugin. */
|
|
4
|
+
declare const __SF_API_VERSION__: string;
|
|
5
|
+
|
|
6
|
+
declare module '*.vue' {
|
|
7
|
+
import type { DefineComponent } from 'vue';
|
|
8
|
+
const component: DefineComponent<
|
|
9
|
+
Record<string, never>,
|
|
10
|
+
Record<string, never>,
|
|
11
|
+
unknown
|
|
12
|
+
>;
|
|
13
|
+
export default component;
|
|
14
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { defineConfig } from 'vite';
|
|
3
|
+
import vue from '@vitejs/plugin-vue';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { resolve } from 'path';
|
|
6
|
+
import tailwindcss from '@tailwindcss/vite';
|
|
7
|
+
import salesforce from '@salesforce/vite-plugin-ui-bundle';
|
|
8
|
+
import codegen from 'vite-plugin-graphql-codegen';
|
|
9
|
+
|
|
10
|
+
const schemaPath = resolve(__dirname, '../../../../../schema.graphql');
|
|
11
|
+
const schemaExists = existsSync(schemaPath);
|
|
12
|
+
|
|
13
|
+
export default defineConfig(() => {
|
|
14
|
+
return {
|
|
15
|
+
base: './',
|
|
16
|
+
plugins: [
|
|
17
|
+
tailwindcss(),
|
|
18
|
+
vue(),
|
|
19
|
+
salesforce(),
|
|
20
|
+
// Only add codegen when schema exists (e.g. after `npm run graphql:schema`).
|
|
21
|
+
// In CI or when schema is not checked in, skip codegen so build succeeds.
|
|
22
|
+
...(schemaExists
|
|
23
|
+
? [
|
|
24
|
+
codegen({
|
|
25
|
+
configFilePathOverride: resolve(__dirname, 'codegen.yml'),
|
|
26
|
+
runOnStart: true,
|
|
27
|
+
runOnBuild: true,
|
|
28
|
+
enableWatcher: true,
|
|
29
|
+
throwOnBuild: true,
|
|
30
|
+
}),
|
|
31
|
+
]
|
|
32
|
+
: []),
|
|
33
|
+
] as import('vite').PluginOption[],
|
|
34
|
+
|
|
35
|
+
// Build configuration for MPA
|
|
36
|
+
build: {
|
|
37
|
+
outDir: resolve(__dirname, 'dist'),
|
|
38
|
+
assetsDir: 'assets',
|
|
39
|
+
sourcemap: false,
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
// Resolve aliases (shared between build and test)
|
|
43
|
+
resolve: {
|
|
44
|
+
dedupe: ['vue'],
|
|
45
|
+
alias: {
|
|
46
|
+
'@': path.resolve(__dirname, './src'),
|
|
47
|
+
'@api': path.resolve(__dirname, './src/api'),
|
|
48
|
+
'@components': path.resolve(__dirname, './src/components'),
|
|
49
|
+
'@utils': path.resolve(__dirname, './src/utils'),
|
|
50
|
+
'@styles': path.resolve(__dirname, './src/styles'),
|
|
51
|
+
'@assets': path.resolve(__dirname, './src/assets'),
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
// Vitest configuration
|
|
56
|
+
test: {
|
|
57
|
+
// Override root for tests (build uses src/pages as root)
|
|
58
|
+
root: resolve(__dirname),
|
|
59
|
+
|
|
60
|
+
// Use jsdom environment for Vue component testing
|
|
61
|
+
environment: 'jsdom',
|
|
62
|
+
|
|
63
|
+
// Setup files to run before each test
|
|
64
|
+
setupFiles: ['./src/test/setup.ts'],
|
|
65
|
+
|
|
66
|
+
// Global test patterns
|
|
67
|
+
include: [
|
|
68
|
+
'src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}',
|
|
69
|
+
'src/**/__tests__/**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}',
|
|
70
|
+
],
|
|
71
|
+
|
|
72
|
+
// Coverage configuration
|
|
73
|
+
coverage: {
|
|
74
|
+
provider: 'v8',
|
|
75
|
+
reporter: ['text', 'html', 'clover', 'json'],
|
|
76
|
+
exclude: [
|
|
77
|
+
'node_modules/',
|
|
78
|
+
'src/test/',
|
|
79
|
+
'src/**/*.d.ts',
|
|
80
|
+
'src/main.ts',
|
|
81
|
+
'src/vite-env.d.ts',
|
|
82
|
+
'src/components/**/index.ts',
|
|
83
|
+
'**/*.config.ts',
|
|
84
|
+
'build/',
|
|
85
|
+
'dist/',
|
|
86
|
+
'coverage/',
|
|
87
|
+
'eslint.config.js',
|
|
88
|
+
],
|
|
89
|
+
thresholds: {
|
|
90
|
+
global: {
|
|
91
|
+
branches: 85,
|
|
92
|
+
functions: 85,
|
|
93
|
+
lines: 85,
|
|
94
|
+
statements: 85,
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
// Test timeout
|
|
100
|
+
testTimeout: 10000,
|
|
101
|
+
|
|
102
|
+
// Globals for easier testing
|
|
103
|
+
globals: true,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<UIBundle xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
3
|
+
<masterLabel>vueinternalapp</masterLabel>
|
|
4
|
+
<description>A Salesforce UI Bundle.</description>
|
|
5
|
+
<isActive>true</isActive>
|
|
6
|
+
<version>1</version>
|
|
7
|
+
<target>CustomApplication</target>
|
|
8
|
+
</UIBundle>
|
|
@@ -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>vueinternalapp</label>
|
|
14
|
+
<navType>Standard</navType>
|
|
15
|
+
<uiBundle>c__vueinternalapp</uiBundle>
|
|
16
|
+
<uiType>Lightning</uiType>
|
|
17
|
+
</CustomApplication>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"orgName": "My Saleforce Org",
|
|
3
|
+
"edition": "Developer",
|
|
4
|
+
"features": ["EnableSetPasswordInApi"],
|
|
5
|
+
"settings": {
|
|
6
|
+
"lightningExperienceSettings": {
|
|
7
|
+
"enableS1DesktopEnabled": true
|
|
8
|
+
},
|
|
9
|
+
"mobileSettings": {
|
|
10
|
+
"enableS1EncryptedStoragePref2": false
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|