@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,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"pagination": {
|
|
3
|
+
"mode": "per-source",
|
|
4
|
+
"pageSize": 10,
|
|
5
|
+
"pageSizeOptions": [5, 10, 20]
|
|
6
|
+
},
|
|
7
|
+
"sources": [
|
|
8
|
+
{
|
|
9
|
+
"kind": "sobject",
|
|
10
|
+
"key": "accounts",
|
|
11
|
+
"objectName": "Account",
|
|
12
|
+
"label": "Accounts",
|
|
13
|
+
"labelSingular": "Account",
|
|
14
|
+
"routePattern": "/accounts/:id",
|
|
15
|
+
"searchableFields": ["Name", "Phone", "Industry"],
|
|
16
|
+
"displayFields": [
|
|
17
|
+
"Name",
|
|
18
|
+
"Industry",
|
|
19
|
+
"Type",
|
|
20
|
+
"Phone",
|
|
21
|
+
"AnnualRevenue",
|
|
22
|
+
{ "name": "Owner", "subfields": ["Name"] }
|
|
23
|
+
],
|
|
24
|
+
"filterBy": [
|
|
25
|
+
{ "field": "Industry", "label": "Industry", "type": "picklist" },
|
|
26
|
+
{ "field": "Type", "label": "Type", "type": "picklist" },
|
|
27
|
+
{ "field": "AnnualRevenue", "label": "Annual Revenue", "type": "numeric" }
|
|
28
|
+
],
|
|
29
|
+
"sortBy": [
|
|
30
|
+
{ "field": "Name", "label": "Name" },
|
|
31
|
+
{ "field": "Industry", "label": "Industry" },
|
|
32
|
+
{ "field": "AnnualRevenue", "label": "Annual Revenue" },
|
|
33
|
+
{ "field": "CreatedDate", "label": "Created Date" }
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"kind": "sobject",
|
|
38
|
+
"key": "contacts",
|
|
39
|
+
"objectName": "Contact",
|
|
40
|
+
"label": "Contacts",
|
|
41
|
+
"labelSingular": "Contact",
|
|
42
|
+
"searchableFields": ["Name", "Email", "Phone"],
|
|
43
|
+
"displayFields": [
|
|
44
|
+
"Name",
|
|
45
|
+
"Title",
|
|
46
|
+
"Email",
|
|
47
|
+
"Phone",
|
|
48
|
+
{ "name": "Account", "subfields": ["Name"] }
|
|
49
|
+
],
|
|
50
|
+
"sortBy": [
|
|
51
|
+
{ "field": "Name", "label": "Name" },
|
|
52
|
+
{ "field": "CreatedDate", "label": "Created Date" }
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"kind": "sobject",
|
|
57
|
+
"key": "opportunities",
|
|
58
|
+
"objectName": "Opportunity",
|
|
59
|
+
"label": "Opportunities",
|
|
60
|
+
"labelSingular": "Opportunity",
|
|
61
|
+
"searchableFields": ["Name"],
|
|
62
|
+
"displayFields": [
|
|
63
|
+
"Name",
|
|
64
|
+
"StageName",
|
|
65
|
+
"Amount",
|
|
66
|
+
"CloseDate",
|
|
67
|
+
{ "name": "Account", "subfields": ["Name"] }
|
|
68
|
+
],
|
|
69
|
+
"filterBy": [
|
|
70
|
+
{ "field": "StageName", "label": "Stage", "type": "picklist" },
|
|
71
|
+
{ "field": "Amount", "label": "Amount", "type": "numeric" },
|
|
72
|
+
{ "field": "CloseDate", "label": "Close Date", "type": "daterange" }
|
|
73
|
+
],
|
|
74
|
+
"sortBy": [
|
|
75
|
+
{ "field": "CloseDate", "label": "Close Date" },
|
|
76
|
+
{ "field": "Amount", "label": "Amount" },
|
|
77
|
+
{ "field": "Name", "label": "Name" }
|
|
78
|
+
],
|
|
79
|
+
"defaultSort": { "field": "CloseDate", "direction": "DESC" }
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"kind": "cms",
|
|
83
|
+
"key": "content",
|
|
84
|
+
"label": "Content",
|
|
85
|
+
"labelSingular": "Content"
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimum trimmed keyword length before a search fires. Both the SObject and
|
|
3
|
+
* CMS search backends reject terms shorter than this (returning errors that the
|
|
4
|
+
* UI would otherwise render as "Search failed for this source." on every
|
|
5
|
+
* source), so the query is gated client-side until the user types at least this
|
|
6
|
+
* many characters. Shared so every `<Search>` consumer inherits the same floor.
|
|
7
|
+
*/
|
|
8
|
+
export const MIN_QUERY_LENGTH = 3;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public API for the search feature.
|
|
3
|
+
*
|
|
4
|
+
* Most apps only need:
|
|
5
|
+
* ```vue
|
|
6
|
+
* <script setup lang="ts">
|
|
7
|
+
* import { Search, config } from ".../features/search";
|
|
8
|
+
* </script>
|
|
9
|
+
* <template><Search :config="config" /></template>
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* For more control, drop down to primitives:
|
|
13
|
+
* - {@link useSearch} composable + {@link SearchBar} + {@link SearchResults}
|
|
14
|
+
* - {@link DefaultResultRow} / {@link DefaultFilterPanel} for opt-in defaults
|
|
15
|
+
* - filter components (TextFilter, SelectFilter, ...) for custom sidebars
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
// Drop-in wrapper (most common entry point)
|
|
19
|
+
export { default as Search } from "./components/Search.vue";
|
|
20
|
+
|
|
21
|
+
// Primitives
|
|
22
|
+
export { useSearch } from "./composables/useSearch";
|
|
23
|
+
export type { UseSearchOptions } from "./composables/useSearch";
|
|
24
|
+
export { useAsyncData } from "./composables/useAsyncData";
|
|
25
|
+
export { useDistinctValues } from "./composables/useDistinctValues";
|
|
26
|
+
|
|
27
|
+
export { default as SearchBar } from "./components/controls/SearchBar.vue";
|
|
28
|
+
export { default as SearchResults } from "./components/SearchResults.vue";
|
|
29
|
+
export { default as MergedSearchResults } from "./components/MergedSearchResults.vue";
|
|
30
|
+
export type { MergedSearchResultsProps } from "./components/MergedSearchResults.types";
|
|
31
|
+
export { default as SourceSection } from "./components/SourceSection.vue";
|
|
32
|
+
export { default as SortControl } from "./components/controls/SortControl.vue";
|
|
33
|
+
export { default as PaginationControls } from "./components/controls/PaginationControls.vue";
|
|
34
|
+
export { default as ScopeSelector } from "./components/controls/ScopeSelector.vue";
|
|
35
|
+
export { default as ActiveFilters } from "./components/filters/ActiveFilters.vue";
|
|
36
|
+
export { default as DefaultResultRow } from "./components/results/DefaultResultRow.vue";
|
|
37
|
+
export { default as GlobalSearchBox } from "./components/GlobalSearchBox.vue";
|
|
38
|
+
export type { GlobalSearchBoxProps } from "./components/GlobalSearchBox.types";
|
|
39
|
+
export { default as CmsResultRow } from "./components/results/CmsResultRow.vue";
|
|
40
|
+
export { resolveResultRenderer } from "./components/results/resolveResultRenderer";
|
|
41
|
+
export type { ResultRenderer } from "./components/results/resolveResultRenderer";
|
|
42
|
+
export { default as DefaultFilterPanel } from "./components/filters/DefaultFilterPanel.vue";
|
|
43
|
+
export { default as FilterProvider } from "./components/filters/FilterProvider.vue";
|
|
44
|
+
export { default as FilterResetButton } from "./components/filters/FilterResetButton.vue";
|
|
45
|
+
export { useFilterField, useFilterPanel } from "./components/filters/FilterContext";
|
|
46
|
+
|
|
47
|
+
export { default as TextFilter } from "./components/filters/inputs/TextFilter.vue";
|
|
48
|
+
export { default as SelectFilter } from "./components/filters/inputs/SelectFilter.vue";
|
|
49
|
+
export { default as MultiSelectFilter } from "./components/filters/inputs/MultiSelectFilter.vue";
|
|
50
|
+
export { default as NumericRangeFilter } from "./components/filters/inputs/NumericRangeFilter.vue";
|
|
51
|
+
export { default as BooleanFilter } from "./components/filters/inputs/BooleanFilter.vue";
|
|
52
|
+
export { default as DateRangeFilter } from "./components/filters/inputs/DateRangeFilter.vue";
|
|
53
|
+
export { default as FilterFieldWrapper } from "./components/filters/inputs/FilterFieldWrapper.vue";
|
|
54
|
+
|
|
55
|
+
export { fieldValue } from "./utils/fieldUtils";
|
|
56
|
+
export {
|
|
57
|
+
buildFilter,
|
|
58
|
+
buildGlobalQueryClause,
|
|
59
|
+
readSourceParams,
|
|
60
|
+
writeSourceParams,
|
|
61
|
+
GLOBAL_QUERY_KEY,
|
|
62
|
+
} from "./utils/filterUtils";
|
|
63
|
+
export type {
|
|
64
|
+
ActiveFilterValue,
|
|
65
|
+
DateFilterMode,
|
|
66
|
+
FilterFieldConfig,
|
|
67
|
+
FilterFieldType,
|
|
68
|
+
} from "./utils/filterUtils";
|
|
69
|
+
export { buildOrderBy } from "./utils/sortUtils";
|
|
70
|
+
export type { SortFieldConfig, SortState } from "./utils/sortUtils";
|
|
71
|
+
|
|
72
|
+
export { buildSearchQuery } from "./queryBuilder";
|
|
73
|
+
export type { SourceRequest, SearchQueryPayload } from "./queryBuilder";
|
|
74
|
+
|
|
75
|
+
export { runSearch } from "./api/searchService";
|
|
76
|
+
export { fetchDistinctValues } from "./api/distinctValuesService";
|
|
77
|
+
export type { PicklistOption } from "./api/distinctValuesService";
|
|
78
|
+
|
|
79
|
+
export { config } from "./loadConfig";
|
|
80
|
+
export { MIN_QUERY_LENGTH } from "./constants";
|
|
81
|
+
|
|
82
|
+
// CMS adapter surface — the registered adapter, its config type, and the
|
|
83
|
+
// runtime content-type discovery composable. Apps adding a CMS source import
|
|
84
|
+
// `CmsSourceConfig` for typing; advanced integrations can reuse the adapter
|
|
85
|
+
// contracts and the discovery composable directly.
|
|
86
|
+
export { cmsAdapter } from "./adapters/cms";
|
|
87
|
+
export { useSearchableContentTypes } from "./adapters/cms/composables/useSearchableContentTypes";
|
|
88
|
+
export type { UseSearchableContentTypesResult } from "./adapters/cms/composables/useSearchableContentTypes";
|
|
89
|
+
export { formatContentTypeLabel, isValidCmsFqn } from "./adapters/cms/contentTypeUtils";
|
|
90
|
+
export type {
|
|
91
|
+
SourceAdapter,
|
|
92
|
+
SourceRequest as AdapterSourceRequest,
|
|
93
|
+
QueryFragmentContribution,
|
|
94
|
+
} from "./adapters/types";
|
|
95
|
+
export type { CmsSourceConfig, CmsSearchItem, CmsSearchResponse } from "./adapters/cms/types";
|
|
96
|
+
export { getAdapter } from "./adapters/registry";
|
|
97
|
+
export type { RunSearchOutcome } from "./api/searchService";
|
|
98
|
+
|
|
99
|
+
export { ALL_SCOPE, CMS_SCOPE_SEPARATOR, parseScope } from "./types";
|
|
100
|
+
export type {
|
|
101
|
+
DisplayField,
|
|
102
|
+
SObjectSourceConfig,
|
|
103
|
+
SourceConfig,
|
|
104
|
+
SearchConfig,
|
|
105
|
+
SearchPaginationConfig,
|
|
106
|
+
SourceController,
|
|
107
|
+
SourceResult,
|
|
108
|
+
SourcePageInfo,
|
|
109
|
+
SearchHandle,
|
|
110
|
+
SearchScope,
|
|
111
|
+
ParsedScope,
|
|
112
|
+
RenderResultFn,
|
|
113
|
+
GlobalPagination,
|
|
114
|
+
MergedResultItem,
|
|
115
|
+
} from "./types";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed re-export of the static config.json that ships with the feature.
|
|
3
|
+
*
|
|
4
|
+
* Application code:
|
|
5
|
+
* import { config } from ".../features/search/loadConfig";
|
|
6
|
+
* const handle = useSearch(config);
|
|
7
|
+
*
|
|
8
|
+
* To customize, edit `config.json` directly (no code changes required).
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import rawConfig from "./config.json";
|
|
12
|
+
import type { SearchConfig } from "./types";
|
|
13
|
+
|
|
14
|
+
export const config: SearchConfig = rawConfig as SearchConfig;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds a single combined GraphQL document for search across every source.
|
|
3
|
+
*
|
|
4
|
+
* The builder is kind-agnostic: for each source request it asks the registered
|
|
5
|
+
* adapter (`getAdapter(kind).buildRequest`) for a `QueryFragmentContribution`
|
|
6
|
+
* and assembles them:
|
|
7
|
+
* - `placement: "uiapi.query"` fragments (e.g. SObject sources) go inside the
|
|
8
|
+
* shared `uiapi { query { … } }` block.
|
|
9
|
+
* - `placement: "root"` fragments (e.g. the CMS `managed_content` block) go in
|
|
10
|
+
* as siblings of `uiapi` at the document root.
|
|
11
|
+
* - every contribution's `variableDeclarations` are concatenated into the
|
|
12
|
+
* `query Search(...)` header and every contribution's `variables` merged
|
|
13
|
+
* into one flat map.
|
|
14
|
+
*
|
|
15
|
+
* A contribution may declare zero extra variables (the CMS bootstrap call omits
|
|
16
|
+
* `$cmsContentTypeFQNs` entirely), so the merge tolerates declaration lists of
|
|
17
|
+
* differing lengths and never emits a declared-but-unused variable.
|
|
18
|
+
*
|
|
19
|
+
* When only SObject sources participate, the emitted document is identical to
|
|
20
|
+
* the pre-adapter builder — the `uiapi` block is unchanged and no root siblings
|
|
21
|
+
* are added.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { getAdapter } from "./adapters/registry";
|
|
25
|
+
import type { SourceRequest } from "./adapters/types";
|
|
26
|
+
|
|
27
|
+
// `SourceRequest` is now defined canonically in `adapters/types.ts`; re-export
|
|
28
|
+
// it here for backward compatibility (the barrel and existing consumers import
|
|
29
|
+
// `SourceRequest` from `./queryBuilder`).
|
|
30
|
+
export type { SourceRequest } from "./adapters/types";
|
|
31
|
+
|
|
32
|
+
export interface SearchQueryPayload {
|
|
33
|
+
document: string;
|
|
34
|
+
variables: Record<string, unknown>;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Builds the combined query document and a flat variables map by dispatching
|
|
39
|
+
* each source through its adapter and partitioning fragments by placement.
|
|
40
|
+
*/
|
|
41
|
+
export function buildSearchQuery(requests: SourceRequest[]): SearchQueryPayload {
|
|
42
|
+
if (requests.length === 0) {
|
|
43
|
+
throw new Error("buildSearchQuery requires at least one source request");
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const variableDeclarations: string[] = [];
|
|
47
|
+
const uiapiFragments: string[] = [];
|
|
48
|
+
const rootFragments: string[] = [];
|
|
49
|
+
const variables: Record<string, unknown> = {};
|
|
50
|
+
|
|
51
|
+
for (const request of requests) {
|
|
52
|
+
const contribution = getAdapter(request.source.kind).buildRequest(request);
|
|
53
|
+
|
|
54
|
+
// Concatenate declarations (may be empty for a given source) and merge
|
|
55
|
+
// values — an omitted declaration means the variable is never declared,
|
|
56
|
+
// so it is likewise never supplied.
|
|
57
|
+
variableDeclarations.push(...contribution.variableDeclarations);
|
|
58
|
+
Object.assign(variables, contribution.variables);
|
|
59
|
+
|
|
60
|
+
if (contribution.placement === "root") {
|
|
61
|
+
rootFragments.push(contribution.fragment);
|
|
62
|
+
} else {
|
|
63
|
+
uiapiFragments.push(contribution.fragment);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const parts: string[] = [`query Search(${variableDeclarations.join(", ")}) {`];
|
|
68
|
+
|
|
69
|
+
// The `uiapi { query { … } }` block holds every `uiapi.query`-placed fragment.
|
|
70
|
+
// Emit it only when at least one such fragment exists — a CMS-only request
|
|
71
|
+
// (all SObject sources dropped) must not produce an empty, invalid selection
|
|
72
|
+
// set. When SObject sources are present its shape is identical to the
|
|
73
|
+
// pre-adapter builder.
|
|
74
|
+
if (uiapiFragments.length > 0) {
|
|
75
|
+
parts.push(` uiapi {`);
|
|
76
|
+
parts.push(` query {`);
|
|
77
|
+
parts.push(uiapiFragments.map((s) => indent(s, " ")).join("\n"));
|
|
78
|
+
parts.push(` }`);
|
|
79
|
+
parts.push(` }`);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Root-placement fragments (e.g. CMS `managed_content`) are siblings of uiapi.
|
|
83
|
+
for (const fragment of rootFragments) {
|
|
84
|
+
parts.push(indent(fragment, " "));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
parts.push(`}`);
|
|
88
|
+
|
|
89
|
+
// Trailing newline preserved from the original builder.
|
|
90
|
+
const document = parts.join("\n") + "\n";
|
|
91
|
+
|
|
92
|
+
return { document, variables };
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function indent(s: string, prefix: string): string {
|
|
96
|
+
return s
|
|
97
|
+
.split("\n")
|
|
98
|
+
.map((line) => prefix + line)
|
|
99
|
+
.join("\n");
|
|
100
|
+
}
|