@salesforce/templates 66.17.5 → 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.
Files changed (277) hide show
  1. package/lib/generators/projectGenerator.js +1 -0
  2. package/lib/generators/projectGenerator.js.map +1 -1
  3. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/package-lock.json +165 -165
  4. package/lib/templates/project/angularintapp/CHANGELOG.md +8 -0
  5. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/eslint.config.js +2 -1
  6. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/package-lock.json +169 -169
  7. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/package.json +4 -4
  8. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/icon/icon.ts +44 -0
  9. package/lib/templates/project/angularintapp/package.json +1 -1
  10. package/lib/templates/project/reactexternalapp/CHANGELOG.md +8 -0
  11. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/eslint.config.js +8 -12
  12. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package-lock.json +136 -136
  13. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package.json +5 -5
  14. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/components/ui/button.tsx +1 -1
  15. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/src/components/ui/sonner.tsx +7 -1
  16. package/lib/templates/project/reactexternalapp/package.json +1 -1
  17. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/package-lock.json +131 -131
  18. package/lib/templates/project/vueinternalapp/.forceignore +15 -0
  19. package/lib/templates/project/vueinternalapp/.husky/pre-commit +4 -0
  20. package/lib/templates/project/vueinternalapp/.prettierignore +11 -0
  21. package/lib/templates/project/vueinternalapp/.prettierrc +17 -0
  22. package/lib/templates/project/vueinternalapp/CHANGELOG.md +5375 -0
  23. package/lib/templates/project/vueinternalapp/PRD.md +35 -0
  24. package/lib/templates/project/vueinternalapp/README.md +125 -0
  25. package/lib/templates/project/vueinternalapp/_p_/_m_/_ps_/vueinternalapp_Access.permissionset-meta.xml +13 -0
  26. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/.forceignore +15 -0
  27. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/.graphqlrc.yml +2 -0
  28. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/.prettierignore +9 -0
  29. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/.prettierrc +11 -0
  30. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/README.md +35 -0
  31. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/codegen.yml +95 -0
  32. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/components.json +19 -0
  33. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/e2e/app.spec.ts +17 -0
  34. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/eslint.config.js +124 -0
  35. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/index.html +12 -0
  36. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/package-lock.json +15530 -0
  37. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/package.json +73 -0
  38. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/playwright.config.ts +24 -0
  39. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/scripts/get-graphql-schema.mjs +71 -0
  40. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/scripts/rewrite-e2e-assets.mjs +23 -0
  41. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/App.vue +5 -0
  42. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/api/apiUtils.ts +56 -0
  43. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/api/orgApiVersionService.ts +37 -0
  44. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/api/searchableContentTypesService.ts +119 -0
  45. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/channelResolver.ts +40 -0
  46. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/cmsQueryFragment.ts +108 -0
  47. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/composables/useSearchableContentTypes.ts +132 -0
  48. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/contentTypeSessionCache.ts +134 -0
  49. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/contentTypeUtils.ts +40 -0
  50. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/index.ts +55 -0
  51. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/parseResponse.ts +65 -0
  52. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/searchChannel.ts +31 -0
  53. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/cms/types.ts +66 -0
  54. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/registry.ts +38 -0
  55. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/sobject/index.ts +19 -0
  56. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/sobject/parseResponse.ts +55 -0
  57. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/sobject/queryFragment.ts +141 -0
  58. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/adapters/types.ts +103 -0
  59. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/api/distinctValuesService.ts +81 -0
  60. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/api/searchService.ts +136 -0
  61. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/GlobalSearchBox.types.ts +18 -0
  62. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/GlobalSearchBox.vue +73 -0
  63. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/MergedSearchResults.types.ts +24 -0
  64. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/MergedSearchResults.vue +263 -0
  65. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/Search.vue +200 -0
  66. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/SearchResults.vue +99 -0
  67. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/SourceSection.vue +204 -0
  68. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/controls/PaginationControls.vue +180 -0
  69. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/controls/ScopeSelector.vue +91 -0
  70. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/controls/SearchBar.vue +56 -0
  71. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/controls/SortControl.vue +55 -0
  72. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/ActiveFilters.vue +59 -0
  73. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/DefaultFilterField.vue +63 -0
  74. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/DefaultFilterPanel.vue +31 -0
  75. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/FilterContext.ts +45 -0
  76. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/FilterProvider.vue +23 -0
  77. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/FilterResetButton.vue +17 -0
  78. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/PicklistField.vue +35 -0
  79. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/inputs/BooleanFilter.vue +47 -0
  80. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/inputs/DateRangeFilter.vue +144 -0
  81. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/inputs/FilterFieldWrapper.vue +23 -0
  82. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/inputs/MultiSelectFilter.vue +95 -0
  83. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/inputs/NumericRangeFilter.vue +117 -0
  84. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/inputs/SelectFilter.vue +44 -0
  85. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/filters/inputs/TextFilter.vue +49 -0
  86. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/results/CmsResultRow.vue +160 -0
  87. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/results/DefaultResultRow.vue +102 -0
  88. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/results/RenderVNode.ts +10 -0
  89. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/components/results/resolveResultRenderer.ts +41 -0
  90. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/composables/useAsyncData.ts +66 -0
  91. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/composables/useDistinctValues.ts +67 -0
  92. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/composables/useSearch.ts +906 -0
  93. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/config.json +88 -0
  94. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/constants.ts +8 -0
  95. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/index.ts +115 -0
  96. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/loadConfig.ts +14 -0
  97. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/queryBuilder.ts +100 -0
  98. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/types.ts +375 -0
  99. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/utils/debounce.ts +17 -0
  100. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/utils/fieldUtils.ts +14 -0
  101. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/utils/filterUtils.ts +304 -0
  102. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/_f_/search/utils/sortUtils.ts +34 -0
  103. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/api/account/query/getAccountDetail.graphql +121 -0
  104. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/api/graphqlClient.ts +44 -0
  105. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/appLayout.vue +153 -0
  106. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/AgentforceConversationClient.vue +76 -0
  107. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/AccountDetailContent.vue +124 -0
  108. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/AccountDetailError.vue +28 -0
  109. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/AccountDetailNotFound.vue +22 -0
  110. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/AccountDetailSkeleton.vue +57 -0
  111. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/DetailSection.vue +25 -0
  112. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/FieldItem.vue +17 -0
  113. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/FieldRow.vue +5 -0
  114. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/SkeletonFieldRow.vue +12 -0
  115. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/TelephoneField.vue +7 -0
  116. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/account/types.ts +42 -0
  117. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/alerts/status-alert.vue +59 -0
  118. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/layouts/card-layout.vue +30 -0
  119. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/alert/Alert.vue +21 -0
  120. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/alert/AlertAction.vue +17 -0
  121. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/alert/AlertDescription.vue +22 -0
  122. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/alert/AlertTitle.vue +22 -0
  123. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/alert/index.ts +25 -0
  124. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/avatar/Avatar.vue +23 -0
  125. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/avatar/AvatarFallback.vue +31 -0
  126. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/avatar/AvatarImage.vue +16 -0
  127. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/avatar/index.ts +3 -0
  128. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/button/Button.vue +33 -0
  129. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/button/index.ts +43 -0
  130. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/Card.vue +29 -0
  131. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/CardAction.vue +22 -0
  132. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/CardContent.vue +17 -0
  133. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/CardDescription.vue +17 -0
  134. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/CardFooter.vue +22 -0
  135. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/CardHeader.vue +22 -0
  136. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/CardTitle.vue +22 -0
  137. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/card/index.ts +7 -0
  138. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/checkbox/Checkbox.vue +43 -0
  139. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/checkbox/index.ts +1 -0
  140. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/collapsible/Collapsible.vue +19 -0
  141. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/collapsible/CollapsibleContent.vue +12 -0
  142. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/collapsible/CollapsibleTrigger.vue +12 -0
  143. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/collapsible/index.ts +3 -0
  144. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/Dialog.vue +15 -0
  145. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogClose.vue +12 -0
  146. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogContent.vue +59 -0
  147. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogDescription.vue +31 -0
  148. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogFooter.vue +33 -0
  149. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogHeader.vue +17 -0
  150. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogOverlay.vue +31 -0
  151. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogPortal.vue +12 -0
  152. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogTitle.vue +26 -0
  153. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/DialogTrigger.vue +12 -0
  154. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dialog/index.ts +10 -0
  155. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenu.vue +19 -0
  156. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +51 -0
  157. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuContent.vue +47 -0
  158. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +12 -0
  159. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuItem.vue +44 -0
  160. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +30 -0
  161. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuPortal.vue +12 -0
  162. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
  163. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +52 -0
  164. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +26 -0
  165. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +19 -0
  166. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuSub.vue +19 -0
  167. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +37 -0
  168. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +38 -0
  169. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +17 -0
  170. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/dropdown-menu/index.ts +15 -0
  171. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/Field.vue +27 -0
  172. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldContent.vue +22 -0
  173. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldDescription.vue +24 -0
  174. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldError.vue +48 -0
  175. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldGroup.vue +22 -0
  176. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldLabel.vue +24 -0
  177. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldLegend.vue +29 -0
  178. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldSeparator.vue +31 -0
  179. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldSet.vue +22 -0
  180. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/FieldTitle.vue +22 -0
  181. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/field/index.ts +33 -0
  182. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/index.ts +115 -0
  183. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/input/Input.vue +30 -0
  184. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/input/index.ts +1 -0
  185. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/label/Label.vue +29 -0
  186. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/label/index.ts +1 -0
  187. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/Pagination.vue +17 -0
  188. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/PaginationContent.vue +15 -0
  189. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/PaginationEllipsis.vue +23 -0
  190. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/PaginationItem.vue +7 -0
  191. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/PaginationLink.vue +31 -0
  192. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/PaginationNext.vue +29 -0
  193. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/PaginationPrevious.vue +29 -0
  194. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/pagination/index.ts +7 -0
  195. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/Popover.vue +15 -0
  196. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/PopoverAnchor.vue +12 -0
  197. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/PopoverContent.vue +44 -0
  198. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/PopoverDescription.vue +17 -0
  199. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/PopoverHeader.vue +17 -0
  200. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/PopoverTitle.vue +14 -0
  201. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/PopoverTrigger.vue +12 -0
  202. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/popover/index.ts +7 -0
  203. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/Select.vue +15 -0
  204. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectContent.vue +65 -0
  205. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectGroup.vue +26 -0
  206. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectItem.vue +41 -0
  207. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectLabel.vue +26 -0
  208. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectScrollDownButton.vue +32 -0
  209. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectScrollUpButton.vue +32 -0
  210. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectSeparator.vue +24 -0
  211. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectTrigger.vue +45 -0
  212. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/SelectValue.vue +12 -0
  213. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/select/index.ts +10 -0
  214. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/separator/Separator.vue +33 -0
  215. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/separator/index.ts +1 -0
  216. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/skeleton/Skeleton.vue +15 -0
  217. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/skeleton/index.ts +1 -0
  218. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/sonner/Sonner.vue +29 -0
  219. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/sonner/index.ts +3 -0
  220. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/spinner/Spinner.vue +17 -0
  221. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/components/ui/spinner/index.ts +1 -0
  222. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/composables/useAsyncData.ts +69 -0
  223. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/index.ts +10 -0
  224. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/lib/utils.ts +6 -0
  225. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/main.ts +6 -0
  226. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/pages/AccountObjectDetailPage.vue +98 -0
  227. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/pages/Home.vue +20 -0
  228. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/pages/NotFound.vue +28 -0
  229. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/pages/SearchPage.vue +17 -0
  230. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/router-utils.ts +32 -0
  231. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/router.ts +51 -0
  232. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/styles/global.css +134 -0
  233. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/test/setup.ts +1 -0
  234. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/types/conversation.ts +54 -0
  235. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/types/globals.d.ts +13 -0
  236. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/src/utils/accountFields.ts +25 -0
  237. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/tsconfig.json +45 -0
  238. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/tsconfig.node.json +13 -0
  239. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/tsconfig.tsbuildinfo +1 -0
  240. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/ui-bundle.json +7 -0
  241. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/vite-env.d.ts +14 -0
  242. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/vite.config.ts +106 -0
  243. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/vitest-env.d.ts +2 -0
  244. package/lib/templates/project/vueinternalapp/_p_/_m_/_w_/_a_/vueinternalapp.uibundle-meta.xml +8 -0
  245. package/lib/templates/project/vueinternalapp/_p_/_m_/applications/vueinternalapp.app-meta.xml +17 -0
  246. package/lib/templates/project/vueinternalapp/config/project-scratch-def.json +13 -0
  247. package/lib/templates/project/vueinternalapp/eslint.config.js +7 -0
  248. package/lib/templates/project/vueinternalapp/jest.config.js +6 -0
  249. package/lib/templates/project/vueinternalapp/package.json +46 -0
  250. package/lib/templates/project/vueinternalapp/scripts/apex/hello.apex +10 -0
  251. package/lib/templates/project/vueinternalapp/scripts/gitignore-templates.json +4 -0
  252. package/lib/templates/project/vueinternalapp/scripts/graphql-search.sh +191 -0
  253. package/lib/templates/project/vueinternalapp/scripts/network-senders.mjs +84 -0
  254. package/lib/templates/project/vueinternalapp/scripts/org-setup-config-schema.mjs +132 -0
  255. package/lib/templates/project/vueinternalapp/scripts/org-setup-dev.mjs +114 -0
  256. package/lib/templates/project/vueinternalapp/scripts/org-setup-url.mjs +108 -0
  257. package/lib/templates/project/vueinternalapp/scripts/org-setup-utils.mjs +569 -0
  258. package/lib/templates/project/vueinternalapp/scripts/org-setup-xml.mjs +283 -0
  259. package/lib/templates/project/vueinternalapp/scripts/org-setup.config.json +9 -0
  260. package/lib/templates/project/vueinternalapp/scripts/org-setup.mjs +2545 -0
  261. package/lib/templates/project/vueinternalapp/scripts/sf-project-setup.mjs +103 -0
  262. package/lib/templates/project/vueinternalapp/scripts/soql/account.soql +6 -0
  263. package/lib/templates/project/vueinternalapp/scripts/validate-org-setup-config.mjs +38 -0
  264. package/lib/templates/project/vueinternalapp/sfdx-project.json +12 -0
  265. package/lib/templates/uiBundles/angularbasic/package-lock.json +165 -165
  266. package/lib/templates/uiBundles/reactbasic/eslint.config.js +8 -12
  267. package/lib/templates/uiBundles/reactbasic/package-lock.json +136 -136
  268. package/lib/templates/uiBundles/reactbasic/package.json +5 -5
  269. package/lib/templates/uiBundles/reactbasic/src/components/ui/button.tsx +1 -1
  270. package/lib/templates/uiBundles/reactbasic/src/components/ui/sonner.tsx +7 -1
  271. package/lib/templates/uiBundles/vuebasic/eslint.config.js +6 -1
  272. package/lib/templates/uiBundles/vuebasic/package-lock.json +143 -143
  273. package/lib/templates/uiBundles/vuebasic/package.json +5 -5
  274. package/lib/utils/types.d.ts +1 -1
  275. package/lib/utils/uiBundleTemplateUtils.js +5 -0
  276. package/lib/utils/uiBundleTemplateUtils.js.map +1 -1
  277. package/package.json +7 -6
@@ -0,0 +1,65 @@
1
+ <script setup lang="ts">
2
+ import type { SelectContentEmits, SelectContentProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import {
6
+ SelectContent,
7
+ SelectPortal,
8
+ SelectViewport,
9
+ useForwardPropsEmits,
10
+ } from 'reka-ui';
11
+ import { cn } from '@/lib/utils';
12
+ import SelectScrollDownButton from './SelectScrollDownButton.vue';
13
+ import SelectScrollUpButton from './SelectScrollUpButton.vue';
14
+
15
+ defineOptions({
16
+ inheritAttrs: false,
17
+ });
18
+
19
+ const props = withDefaults(
20
+ defineProps<SelectContentProps & { class?: HTMLAttributes['class'] }>(),
21
+ {
22
+ position: 'item-aligned',
23
+ align: 'center',
24
+ }
25
+ );
26
+ const emits = defineEmits<SelectContentEmits>();
27
+
28
+ const delegatedProps = computed(() => {
29
+ const { class: _class, ...rest } = props;
30
+ return rest;
31
+ });
32
+
33
+ const forwarded = useForwardPropsEmits(delegatedProps, emits);
34
+ </script>
35
+
36
+ <template>
37
+ <SelectPortal>
38
+ <SelectContent
39
+ data-slot="select-content"
40
+ :data-align-trigger="position === 'item-aligned'"
41
+ v-bind="{ ...$attrs, ...forwarded }"
42
+ :class="
43
+ cn(
44
+ 'bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-lg shadow-md ring-1 duration-100 relative z-50 max-h-(--radix-select-content-available-height) origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto data-[align-trigger=true]:animate-none',
45
+ position === 'popper' &&
46
+ 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',
47
+ props.class
48
+ )
49
+ "
50
+ >
51
+ <SelectScrollUpButton />
52
+ <SelectViewport
53
+ :data-position="position"
54
+ :class="
55
+ cn(
56
+ 'data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)'
57
+ )
58
+ "
59
+ >
60
+ <slot />
61
+ </SelectViewport>
62
+ <SelectScrollDownButton />
63
+ </SelectContent>
64
+ </SelectPortal>
65
+ </template>
@@ -0,0 +1,26 @@
1
+ <script setup lang="ts">
2
+ import type { SelectGroupProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { SelectGroup } from 'reka-ui';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ const props = defineProps<
9
+ SelectGroupProps & { class?: HTMLAttributes['class'] }
10
+ >();
11
+
12
+ const delegatedProps = computed(() => {
13
+ const { class: _class, ...rest } = props;
14
+ return rest;
15
+ });
16
+ </script>
17
+
18
+ <template>
19
+ <SelectGroup
20
+ data-slot="select-group"
21
+ v-bind="delegatedProps"
22
+ :class="cn('scroll-my-1 p-1', props.class)"
23
+ >
24
+ <slot />
25
+ </SelectGroup>
26
+ </template>
@@ -0,0 +1,41 @@
1
+ <script setup lang="ts">
2
+ import type { SelectItemProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { CheckIcon } from '@lucide/vue';
6
+ import { SelectItem, SelectItemIndicator, SelectItemText } from 'reka-ui';
7
+ import { cn } from '@/lib/utils';
8
+
9
+ const props = defineProps<
10
+ SelectItemProps & { class?: HTMLAttributes['class'] }
11
+ >();
12
+
13
+ const delegatedProps = computed(() => {
14
+ const { class: _class, ...rest } = props;
15
+ return rest;
16
+ });
17
+ </script>
18
+
19
+ <template>
20
+ <SelectItem
21
+ data-slot="select-item"
22
+ v-bind="delegatedProps"
23
+ :class="
24
+ cn(
25
+ `focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0`,
26
+ props.class
27
+ )
28
+ "
29
+ >
30
+ <span
31
+ class="pointer-events-none absolute right-2 flex size-4 items-center justify-center"
32
+ >
33
+ <SelectItemIndicator>
34
+ <CheckIcon class="pointer-events-none" />
35
+ </SelectItemIndicator>
36
+ </span>
37
+ <SelectItemText>
38
+ <slot />
39
+ </SelectItemText>
40
+ </SelectItem>
41
+ </template>
@@ -0,0 +1,26 @@
1
+ <script setup lang="ts">
2
+ import type { SelectLabelProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { SelectLabel } from 'reka-ui';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ const props = defineProps<
9
+ SelectLabelProps & { class?: HTMLAttributes['class'] }
10
+ >();
11
+
12
+ const delegatedProps = computed(() => {
13
+ const { class: _class, ...rest } = props;
14
+ return rest;
15
+ });
16
+ </script>
17
+
18
+ <template>
19
+ <SelectLabel
20
+ data-slot="select-label"
21
+ v-bind="delegatedProps"
22
+ :class="cn('text-muted-foreground px-1.5 py-1 text-xs', props.class)"
23
+ >
24
+ <slot />
25
+ </SelectLabel>
26
+ </template>
@@ -0,0 +1,32 @@
1
+ <script setup lang="ts">
2
+ import type { SelectScrollDownButtonProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { ChevronDownIcon } from '@lucide/vue';
6
+ import { SelectScrollDownButton } from 'reka-ui';
7
+ import { cn } from '@/lib/utils';
8
+
9
+ const props = defineProps<
10
+ SelectScrollDownButtonProps & { class?: HTMLAttributes['class'] }
11
+ >();
12
+
13
+ const delegatedProps = computed(() => {
14
+ const { class: _class, ...rest } = props;
15
+ return rest;
16
+ });
17
+ </script>
18
+
19
+ <template>
20
+ <SelectScrollDownButton
21
+ data-slot="select-scroll-down-button"
22
+ v-bind="delegatedProps"
23
+ :class="
24
+ cn(
25
+ `bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4`,
26
+ props.class
27
+ )
28
+ "
29
+ >
30
+ <ChevronDownIcon />
31
+ </SelectScrollDownButton>
32
+ </template>
@@ -0,0 +1,32 @@
1
+ <script setup lang="ts">
2
+ import type { SelectScrollUpButtonProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { ChevronUpIcon } from '@lucide/vue';
6
+ import { SelectScrollUpButton } from 'reka-ui';
7
+ import { cn } from '@/lib/utils';
8
+
9
+ const props = defineProps<
10
+ SelectScrollUpButtonProps & { class?: HTMLAttributes['class'] }
11
+ >();
12
+
13
+ const delegatedProps = computed(() => {
14
+ const { class: _class, ...rest } = props;
15
+ return rest;
16
+ });
17
+ </script>
18
+
19
+ <template>
20
+ <SelectScrollUpButton
21
+ data-slot="select-scroll-up-button"
22
+ v-bind="delegatedProps"
23
+ :class="
24
+ cn(
25
+ `bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4`,
26
+ props.class
27
+ )
28
+ "
29
+ >
30
+ <ChevronUpIcon />
31
+ </SelectScrollUpButton>
32
+ </template>
@@ -0,0 +1,24 @@
1
+ <script setup lang="ts">
2
+ import type { SelectSeparatorProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { SelectSeparator } from 'reka-ui';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ const props = defineProps<
9
+ SelectSeparatorProps & { class?: HTMLAttributes['class'] }
10
+ >();
11
+
12
+ const delegatedProps = computed(() => {
13
+ const { class: _class, ...rest } = props;
14
+ return rest;
15
+ });
16
+ </script>
17
+
18
+ <template>
19
+ <SelectSeparator
20
+ data-slot="select-separator"
21
+ v-bind="delegatedProps"
22
+ :class="cn('bg-border -mx-1 my-1 h-px pointer-events-none', props.class)"
23
+ />
24
+ </template>
@@ -0,0 +1,45 @@
1
+ <script setup lang="ts">
2
+ import type { SelectTriggerProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { ChevronDownIcon } from '@lucide/vue';
6
+ import { SelectIcon, SelectTrigger, useForwardProps } from 'reka-ui';
7
+ import { cn } from '@/lib/utils';
8
+
9
+ const props = withDefaults(
10
+ defineProps<
11
+ SelectTriggerProps & {
12
+ class?: HTMLAttributes['class'];
13
+ size?: 'sm' | 'default';
14
+ }
15
+ >(),
16
+ { size: 'default' }
17
+ );
18
+
19
+ const delegatedProps = computed(() => {
20
+ const { class: _class, size: _size, ...rest } = props;
21
+ return rest;
22
+ });
23
+ const forwardedProps = useForwardProps(delegatedProps);
24
+ </script>
25
+
26
+ <template>
27
+ <SelectTrigger
28
+ data-slot="select-trigger"
29
+ :data-size="size"
30
+ v-bind="forwardedProps"
31
+ :class="
32
+ cn(
33
+ `border-input data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-lg border bg-transparent py-2 pr-2 pl-2.5 text-sm transition-colors select-none focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0`,
34
+ props.class
35
+ )
36
+ "
37
+ >
38
+ <slot />
39
+ <SelectIcon as-child>
40
+ <ChevronDownIcon
41
+ class="text-muted-foreground size-4 pointer-events-none"
42
+ />
43
+ </SelectIcon>
44
+ </SelectTrigger>
45
+ </template>
@@ -0,0 +1,12 @@
1
+ <script setup lang="ts">
2
+ import type { SelectValueProps } from 'reka-ui';
3
+ import { SelectValue } from 'reka-ui';
4
+
5
+ const props = defineProps<SelectValueProps>();
6
+ </script>
7
+
8
+ <template>
9
+ <SelectValue data-slot="select-value" v-bind="props">
10
+ <slot />
11
+ </SelectValue>
12
+ </template>
@@ -0,0 +1,10 @@
1
+ export { default as Select } from './Select.vue';
2
+ export { default as SelectContent } from './SelectContent.vue';
3
+ export { default as SelectGroup } from './SelectGroup.vue';
4
+ export { default as SelectItem } from './SelectItem.vue';
5
+ export { default as SelectLabel } from './SelectLabel.vue';
6
+ export { default as SelectScrollDownButton } from './SelectScrollDownButton.vue';
7
+ export { default as SelectScrollUpButton } from './SelectScrollUpButton.vue';
8
+ export { default as SelectSeparator } from './SelectSeparator.vue';
9
+ export { default as SelectTrigger } from './SelectTrigger.vue';
10
+ export { default as SelectValue } from './SelectValue.vue';
@@ -0,0 +1,33 @@
1
+ <script setup lang="ts">
2
+ import type { SeparatorProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { Separator } from 'reka-ui';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ const props = withDefaults(
9
+ defineProps<SeparatorProps & { class?: HTMLAttributes['class'] }>(),
10
+ {
11
+ orientation: 'horizontal',
12
+ decorative: true,
13
+ }
14
+ );
15
+
16
+ const delegatedProps = computed(() => {
17
+ const { class: _class, ...rest } = props;
18
+ return rest;
19
+ });
20
+ </script>
21
+
22
+ <template>
23
+ <Separator
24
+ data-slot="separator"
25
+ v-bind="delegatedProps"
26
+ :class="
27
+ cn(
28
+ 'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',
29
+ props.class
30
+ )
31
+ "
32
+ />
33
+ </template>
@@ -0,0 +1 @@
1
+ export { default as Separator } from './Separator.vue';
@@ -0,0 +1,15 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '@/lib/utils';
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class'];
7
+ }>();
8
+ </script>
9
+
10
+ <template>
11
+ <div
12
+ data-slot="skeleton"
13
+ :class="cn('bg-accent animate-pulse rounded-md', props.class)"
14
+ />
15
+ </template>
@@ -0,0 +1 @@
1
+ export { default as Skeleton } from './Skeleton.vue';
@@ -0,0 +1,29 @@
1
+ <script setup lang="ts">
2
+ import { Toaster as Sonner } from 'vue-sonner';
3
+ import type { ToasterProps } from 'vue-sonner';
4
+
5
+ /**
6
+ * Renders the toast container. Use with `toast()` from `vue-sonner` for
7
+ * messages with title, description, actions, and variants (success, error,
8
+ * warning).
9
+ *
10
+ * @example
11
+ * import { toast } from 'vue-sonner';
12
+ * toast('Event has been created', {
13
+ * description: 'Sunday, December 03, 2023 at 9:00 AM',
14
+ * action: { label: 'Undo', onClick: () => {} },
15
+ * });
16
+ * toast.success('Saved!');
17
+ * toast.error('Something went wrong');
18
+ * toast.warning('Please review');
19
+ */
20
+ // Defaults for position/richColors; callers can still override via props.
21
+ const props = withDefaults(defineProps<ToasterProps>(), {
22
+ position: 'top-right',
23
+ richColors: true,
24
+ });
25
+ </script>
26
+
27
+ <template>
28
+ <Sonner v-bind="props" />
29
+ </template>
@@ -0,0 +1,3 @@
1
+ export { default as Sonner } from './Sonner.vue';
2
+ export { default as Toaster } from './Sonner.vue';
3
+ export { toast } from 'vue-sonner';
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { Loader2Icon } from '@lucide/vue';
4
+ import { cn } from '@/lib/utils';
5
+
6
+ const props = defineProps<{
7
+ class?: HTMLAttributes['class'];
8
+ }>();
9
+ </script>
10
+
11
+ <template>
12
+ <Loader2Icon
13
+ role="status"
14
+ aria-label="Loading"
15
+ :class="cn('size-4 animate-spin', props.class)"
16
+ />
17
+ </template>
@@ -0,0 +1 @@
1
+ export { default as Spinner } from './Spinner.vue';
@@ -0,0 +1,69 @@
1
+ import type { Ref, WatchSource } from 'vue';
2
+ import { ref, shallowRef, watch } from 'vue';
3
+
4
+ /** Reactive async-data snapshot: current data, loading, and error. */
5
+ export interface AsyncData<T> {
6
+ /** Latest successful result. Kept visible during a refetch. */
7
+ data: Ref<T | null>;
8
+ /** True while a fetch for the current args is in flight. */
9
+ loading: Ref<boolean>;
10
+ /** Error message from the most recent failed fetch, else null. */
11
+ error: Ref<string | null>;
12
+ }
13
+
14
+ /**
15
+ * Runs an async `fetcher` immediately and again whenever `source` changes,
16
+ * exposing the result as reactive refs. Stale responses (the source changed
17
+ * during a fetch, or the component unmounted) are dropped via a generation
18
+ * counter, so only the latest in-flight request can write state.
19
+ *
20
+ * The Vue analogue of the React `useAsyncData` hook and the Angular
21
+ * `createAsyncData` helper: the state shape (`data` / `loading` / `error`) is
22
+ * identical so pages port across frameworks unchanged.
23
+ *
24
+ * @typeParam TArgs - The reactive arguments passed to the fetcher.
25
+ * @typeParam T - The fetched result type.
26
+ * @param source - Reactive source (ref, getter, or array of them) whose value
27
+ * is forwarded to `fetcher`. Re-runs on change.
28
+ * @param fetcher - Async function producing the data for the current args.
29
+ * @returns Reactive `{ data, loading, error }` refs.
30
+ */
31
+ export function useAsyncData<TArgs, T>(
32
+ source: WatchSource<TArgs>,
33
+ fetcher: (args: TArgs) => Promise<T>
34
+ ): AsyncData<T> {
35
+ const data = shallowRef<T | null>(null);
36
+ const loading = ref<boolean>(true);
37
+ const error = ref<string | null>(null);
38
+
39
+ let generation = 0;
40
+
41
+ const run = (args: TArgs): void => {
42
+ const current = ++generation;
43
+ loading.value = true;
44
+ error.value = null;
45
+
46
+ fetcher(args)
47
+ .then(result => {
48
+ if (current === generation) {
49
+ data.value = result;
50
+ }
51
+ })
52
+ .catch((err: unknown) => {
53
+ console.error(err);
54
+ if (current === generation) {
55
+ error.value =
56
+ err instanceof Error ? err.message : 'An error occurred';
57
+ }
58
+ })
59
+ .finally(() => {
60
+ if (current === generation) {
61
+ loading.value = false;
62
+ }
63
+ });
64
+ };
65
+
66
+ watch(source, args => run(args), { immediate: true, deep: true });
67
+
68
+ return { data, loading, error };
69
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * feature-vue-agentforce-conversation-client – ACC Conversation Client
3
+ */
4
+
5
+ export { default as AgentforceConversationClient } from "./components/AgentforceConversationClient.vue";
6
+ export type {
7
+ AgentforceConversationClientProps,
8
+ ResolvedEmbedOptions,
9
+ StyleTokens,
10
+ } from "./types/conversation";
@@ -0,0 +1,6 @@
1
+ import { clsx, type ClassValue } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs));
6
+ }
@@ -0,0 +1,6 @@
1
+ import { createApp } from 'vue';
2
+ import App from '@/App.vue';
3
+ import { router } from '@/router';
4
+ import './styles/global.css';
5
+
6
+ createApp(App).use(router).mount('#app');
@@ -0,0 +1,98 @@
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 { computed, nextTick, onMounted, ref, watch } from "vue";
8
+ import { useRoute, useRouter } from "vue-router";
9
+ import { createDataSDK } from "@salesforce/platform-sdk";
10
+ import GET_ACCOUNT_DETAIL from "../api/account/query/getAccountDetail.graphql?raw";
11
+ import { fieldValue } from "../utils/accountFields";
12
+ import { useAsyncData } from "../composables/useAsyncData";
13
+ import AccountDetailContent from "../components/account/AccountDetailContent.vue";
14
+ import AccountDetailError from "../components/account/AccountDetailError.vue";
15
+ import AccountDetailNotFound from "../components/account/AccountDetailNotFound.vue";
16
+ import AccountDetailSkeleton from "../components/account/AccountDetailSkeleton.vue";
17
+ import type { AccountNode, GetAccountDetailResponse } from "../components/account/types";
18
+
19
+ async function fetchAccountDetail(recordId: string): Promise<AccountNode | null | undefined> {
20
+ const data = await createDataSDK();
21
+ const result = await data.graphql!.query<GetAccountDetailResponse, { id: string }>({
22
+ query: GET_ACCOUNT_DETAIL,
23
+ variables: { id: recordId },
24
+ });
25
+
26
+ if (result.errors?.length) {
27
+ throw new Error(result.errors.map((e) => e.message).join("; "));
28
+ }
29
+
30
+ return result.data?.uiapi?.query?.Account?.edges?.[0]?.node;
31
+ }
32
+
33
+ const route = useRoute();
34
+ const router = useRouter();
35
+ const recordId = computed(() => route.params.recordId as string);
36
+ const mainRef = ref<HTMLElement | null>(null);
37
+ const completionAnnouncement = ref("");
38
+
39
+ const { data: account, loading, error } = useAsyncData(recordId, (id) => fetchAccountDetail(id));
40
+
41
+ const pageTitle = computed(() =>
42
+ loading.value
43
+ ? "Loading Account | MyApp"
44
+ : error.value
45
+ ? "Error | MyApp"
46
+ : account.value
47
+ ? `${fieldValue(account.value.Name) ?? "Account"} | MyApp`
48
+ : "Account Not Found | MyApp",
49
+ );
50
+
51
+ watch(
52
+ pageTitle,
53
+ (title) => {
54
+ document.title = title;
55
+ },
56
+ { immediate: true },
57
+ );
58
+
59
+ // Once loading settles, move focus to the page's h1 — unless the user has
60
+ // already moved focus elsewhere outside <main>, in which case announce the
61
+ // heading through the live region instead of stealing focus.
62
+ const settleFocus = () => {
63
+ if (loading.value) {
64
+ completionAnnouncement.value = "";
65
+ return;
66
+ }
67
+ const main = mainRef.value;
68
+ const heading = main?.querySelector<HTMLElement>("h1");
69
+ if (heading) {
70
+ const active = document.activeElement;
71
+ if (active && active !== document.body && !main?.contains(active)) {
72
+ completionAnnouncement.value = heading.textContent ?? "";
73
+ return;
74
+ }
75
+ completionAnnouncement.value = "";
76
+ if (!heading.hasAttribute("tabindex")) heading.setAttribute("tabindex", "-1");
77
+ heading.focus();
78
+ }
79
+ };
80
+
81
+ // Deferred a tick so the page is attached to the document before focusing.
82
+ onMounted(() => nextTick(settleFocus));
83
+ watch([loading, error, account, recordId], settleFocus, { flush: "post" });
84
+
85
+ const goBack = () => router.back();
86
+ </script>
87
+
88
+ <template>
89
+ <main ref="mainRef" class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-6">
90
+ <div role="status" aria-live="polite" class="sr-only">
91
+ {{ loading ? "Loading account" : completionAnnouncement }}
92
+ </div>
93
+ <AccountDetailSkeleton v-if="loading" />
94
+ <AccountDetailError v-if="error" @back="goBack" />
95
+ <AccountDetailNotFound v-if="!loading && !error && !account" @back="goBack" />
96
+ <AccountDetailContent v-if="!loading && !error && account" :account="account" />
97
+ </main>
98
+ </template>
@@ -0,0 +1,20 @@
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 { GlobalSearchBox } from "../features/search";
9
+
10
+ onMounted(() => {
11
+ document.title = "Home | MyApp";
12
+ });
13
+ </script>
14
+
15
+ <template>
16
+ <main class="max-w-2xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
17
+ <h1 class="text-2xl font-bold mb-6">Home</h1>
18
+ <GlobalSearchBox placeholder="Search accounts, contacts, opportunities..." />
19
+ </main>
20
+ </template>