@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,35 @@
1
+ # Internal User App (B2E)
2
+
3
+ ## Overview
4
+
5
+ A ready-to-use Vue starter for building internal, employee-facing apps on the Salesforce platform. It comes with a clean, modern interface, page navigation, and a built-in Agentforce chat assistant. It ships with no data of its own — a clean slate — but includes one working example (global search and an Account detail view) that shows how the app reads Salesforce data, so teams can point it at their own information.
6
+
7
+ ## Problem
8
+
9
+ Teams building internal tools on Salesforce keep re-solving the same setup: standing up a new app, choosing how it looks, connecting it to Salesforce data, and adding an Agentforce assistant. Starting from a prebuilt demo means ripping out someone else's data before any real work begins; starting from scratch means rebuilding the same foundation every time. There has been no simple, opinionated starting point that gives just the essentials and one correct example of showing Salesforce data.
10
+
11
+ ## Solution
12
+
13
+ A minimal internal starter with the essentials already in place: the app framework, page navigation, a built-in Agentforce chat assistant, and a single example feature — global search with an Account detail view — that shows how the app displays Salesforce data. Everything is structured so the search and Account example works as a template: point it at your own information, adjust the fields, and remove the example once your own feature is working.
14
+
15
+ ### Core Features
16
+
17
+ - **App framework and navigation** — A ready-made layout with a Home page, a "page not found" screen, and a navigation menu, prepared for adding new screens.
18
+ - **Consistent design system** — A preinstalled set of interface building blocks so new screens look consistent from the start.
19
+ - **Search and account detail example** — A global search box on Home (provided by the `feature-vue-search` feature) with a search results screen, plus an Account detail view. This is the template for showing Salesforce data.
20
+ - **Agentforce chat assistant** — A built-in chat surface an Agentforce agent can drive, giving the app in-app assistance.
21
+ - **Add-on features** — Tooling to browse and add additional prebuilt features into the app.
22
+
23
+ ### Non-Goals
24
+
25
+ - Shipping a prebuilt data model — this starter deliberately includes none; teams bring their own.
26
+ - External-facing use, sign-in, or public site hosting — use the External User App (B2X) starter for that.
27
+ - A finished application — the search and Account example is meant to be copied and then removed, not kept.
28
+
29
+ ## Target Users
30
+
31
+ Salesforce teams building employee-facing tools (support consoles, ops dashboards, internal admin apps) who want a clean, minimal starting point rather than a demo they have to dismantle first.
32
+
33
+ ## Org prerequisites
34
+
35
+ - The in-app Agentforce chat assistant requires Agentforce to be set up in the org, with an agent configured for it.
@@ -0,0 +1,125 @@
1
+ # Vue Internal App
2
+
3
+ An internal Vue starter template for employee-facing apps on the Salesforce platform. Includes global search (via `feature-vue-search`) across Salesforce records and an Agentforce conversation client; intended for internal (non-Experience Cloud) deployment. Built with Vue 3 (`<script setup>` SFCs), Reka UI primitives with shadcn-vue components, Tailwind CSS, Lucide icons (`@lucide/vue`), and TypeScript.
4
+
5
+ ## What's included
6
+
7
+ This project ships the UI Bundle plus the minimal metadata needed to run it as an internal app: a Lightning application and an access permission set. No other Salesforce metadata (objects, classes, etc.) is included — bring your own data model.
8
+
9
+ ```
10
+ force-app/main/default/
11
+ ├── applications/
12
+ │ └── vueinternalapp.app-meta.xml # Lightning app
13
+ ├── permissionsets/
14
+ │ └── vueinternalapp_Access.permissionset-meta.xml # Access permission set
15
+ └── uiBundles/
16
+ └── vueinternalapp/ # Vue UI Bundle (source, config, tests)
17
+ └── src/
18
+ ├── api/ # GraphQL client and queries
19
+ ├── components/ # Shared components (account/, alerts/, layouts/, ui/<name>/)
20
+ ├── composables/ # Vue composables
21
+ ├── features/ # Installed features (search)
22
+ ├── pages/ # Route pages (.vue SFCs)
23
+ ├── router.ts # Vue Router configuration
24
+ └── App.vue # Root component
25
+ ```
26
+
27
+ ## Getting started
28
+
29
+ Install project dependencies and start the local dev server:
30
+
31
+ ```bash
32
+ npm install
33
+ npm run sf-project-setup
34
+ ```
35
+
36
+ This installs the UI Bundle dependencies, builds the app, and opens the dev server at http://localhost:5173. For manual build and test instructions, see the [UI Bundle README](force-app/main/default/uiBundles/vueinternalapp/README.md).
37
+
38
+ ## Add features
39
+
40
+ Use the features CLI to install additional UI features into the UI Bundle.
41
+
42
+ List all available features:
43
+
44
+ ```bash
45
+ npx @salesforce/ui-bundle-features-experimental list
46
+ ```
47
+
48
+ Get details about a specific feature (description, dependencies, files, and integration examples):
49
+
50
+ ```bash
51
+ npx @salesforce/ui-bundle-features-experimental describe <feature-name>
52
+ ```
53
+
54
+ Install a feature:
55
+
56
+ ```bash
57
+ npx @salesforce/ui-bundle-features-experimental install <feature-name> --ui-bundle-dir vueinternalapp
58
+ ```
59
+
60
+ After installation, the CLI will list any `__example__` files that need manual integration. Read each example file to see the integration pattern, apply it to the target file, then delete the example file.
61
+
62
+ ## Deploy
63
+
64
+ ### Deploy everything (UI Bundle, app, and permission set)
65
+
66
+ ```bash
67
+ cd force-app/main/default/uiBundles/vueinternalapp && npm install && npm run build && cd -
68
+ sf project deploy start --source-dir force-app --target-org <alias>
69
+ ```
70
+
71
+ ### Deploy the UI Bundle only
72
+
73
+ ```bash
74
+ cd force-app/main/default/uiBundles/vueinternalapp && npm install && npm run build && cd -
75
+ sf project deploy start --source-dir force-app/main/default/uiBundles --target-org <alias>
76
+ ```
77
+
78
+ Replace `<alias>` with your target org alias.
79
+
80
+ ## Setup scripts
81
+
82
+ Two npm scripts at the project root streamline getting started and deployment.
83
+
84
+ **`npm run sf-project-setup`** — installs the UI Bundle dependencies, builds the app, and starts the dev server (see [Getting started](#getting-started)).
85
+
86
+ **`npm run setup`** — runs the full deployment setup in one command: org login (a required precondition, auto-skipped if already connected), UI Bundle build, deploy the UI Bundle, fetch GraphQL schema, and run codegen. It does not start the dev server — run `npm run dev:preview` for that:
87
+
88
+ ```bash
89
+ # Install project dependencies first (required before running setup)
90
+ npm install
91
+
92
+ npm run setup -- --target-org <alias>
93
+ ```
94
+
95
+ Running without flags presents an interactive step picker. Pass `--yes` to skip it and run all steps immediately:
96
+
97
+ ```bash
98
+ npm run setup -- --target-org <alias> --yes
99
+ ```
100
+
101
+ Common options:
102
+
103
+ | Option | Description |
104
+ | ------------------------- | ----------------------------------------------- |
105
+ | `--target-org <alias>` | Target org. If omitted, uses default org/prompt |
106
+ | `--skip-deploy` | Do not deploy metadata |
107
+ | `--skip-graphql` | Skip GraphQL schema fetch and codegen |
108
+ | `--skip-ui-bundle-build` | Skip `npm install` and UI Bundle build |
109
+ | `--ui-bundle-name <name>` | UI Bundle folder name when multiple exist |
110
+ | `-y, --yes` | Skip interactive step picker; run all steps |
111
+
112
+ > Login is a required precondition (no `--skip-login`), and the dev server is no longer part of setup (no `--skip-dev`); both flags are accepted but ignored. To start the dev server after setup, run `npm run dev:preview`.
113
+
114
+ For all options: `npm run setup -- --help`.
115
+
116
+ ## Configure Your Salesforce DX Project
117
+
118
+ The `sfdx-project.json` file contains useful configuration information for your project. See [Salesforce DX Project Configuration](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_ws_config.htm) in the _Salesforce DX Developer Guide_ for details about this file.
119
+
120
+ ## Read All About It
121
+
122
+ - [Salesforce Extensions Documentation](https://developer.salesforce.com/tools/vscode/)
123
+ - [Salesforce CLI Setup Guide](https://developer.salesforce.com/docs/atlas.en-us.sfdx_setup.meta/sfdx_setup/sfdx_setup_intro.htm)
124
+ - [Salesforce DX Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_intro.htm)
125
+ - [Salesforce CLI Command Reference](https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference.htm)
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <PermissionSet xmlns="http://soap.sforce.com/2006/04/metadata">
3
+ <applicationVisibilities>
4
+ <application>vueinternalapp</application>
5
+ <visible>true</visible>
6
+ </applicationVisibilities>
7
+ <hasActivationRequired>false</hasActivationRequired>
8
+ <label>vueinternalapp Access</label>
9
+ <userPermissions>
10
+ <enabled>true</enabled>
11
+ <name>ApiEnabled</name>
12
+ </userPermissions>
13
+ </PermissionSet>
@@ -0,0 +1,15 @@
1
+ # List files or directories below to ignore them when running force:source:push, force:source:pull, and force:source:status
2
+ # More information: https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_exclude_source.htm
3
+ #
4
+
5
+ package.xml
6
+
7
+ # LWC configuration files
8
+ **/jsconfig.json
9
+ **/.eslintrc.json
10
+
11
+ # LWC Jest
12
+ **/__tests__/**
13
+
14
+ node_modules/
15
+ .DS_Store
@@ -0,0 +1,2 @@
1
+ schema: '../../../../../schema.graphql'
2
+ documents: 'src/**/*.{graphql,js,ts,jsx,tsx,vue}'
@@ -0,0 +1,9 @@
1
+ node_modules
2
+ dist
3
+ build
4
+ .vite
5
+ coverage
6
+ *.min.js
7
+ *.min.css
8
+ *.map
9
+ package-lock.json
@@ -0,0 +1,11 @@
1
+ {
2
+ "semi": true,
3
+ "trailingComma": "es5",
4
+ "singleQuote": true,
5
+ "printWidth": 80,
6
+ "tabWidth": 2,
7
+ "useTabs": false,
8
+ "bracketSpacing": true,
9
+ "arrowParens": "avoid",
10
+ "endOfLine": "lf"
11
+ }
@@ -0,0 +1,35 @@
1
+ # Vue Internal App
2
+
3
+ An internal Vue template for the Salesforce platform. Includes an Agentforce conversation client and global search; intended for internal (non-Experience Cloud) deployment. Built with Vue 3, Vite, TypeScript, and Tailwind/shadcn-vue.
4
+
5
+ For project-level details (metadata, deploy), see the [project README](../../../../../../README.md).
6
+
7
+ ## Prerequisites
8
+
9
+ ```bash
10
+ npm install
11
+ ```
12
+
13
+ ## Run (development)
14
+
15
+ ```bash
16
+ npm run dev
17
+ ```
18
+
19
+ Starts the Vite dev server (default: http://localhost:5173).
20
+
21
+ ## Build
22
+
23
+ ```bash
24
+ npm run build
25
+ ```
26
+
27
+ Type-checks with `vue-tsc` and writes the production bundle to `dist/` inside the UI Bundle folder.
28
+
29
+ ## Test
30
+
31
+ ```bash
32
+ npm test
33
+ ```
34
+
35
+ Runs the unit test suite (Vitest).
@@ -0,0 +1,95 @@
1
+ schema: '../../../../../schema.graphql'
2
+ documents: 'src/**/*.{graphql,ts,tsx,vue}'
3
+ generates:
4
+ src/api/graphql-operations-types.ts:
5
+ plugins:
6
+ - 'graphql-codegen-typescript-operation-types'
7
+ - 'typescript-operations'
8
+ config:
9
+ onlyOperationTypes: true
10
+ skipTypename: true
11
+ preResolveTypes: true
12
+ scalars:
13
+ # String-serialized scalars
14
+ JSON:
15
+ input: 'string'
16
+ output: 'string'
17
+ Date:
18
+ input: 'string'
19
+ output: 'string'
20
+ DateTime:
21
+ input: 'string'
22
+ output: 'string'
23
+ Time:
24
+ input: 'string'
25
+ output: 'string'
26
+ Email:
27
+ input: 'string'
28
+ output: 'string'
29
+ Url:
30
+ input: 'string'
31
+ output: 'string'
32
+ PhoneNumber:
33
+ input: 'string'
34
+ output: 'string'
35
+ Picklist:
36
+ input: 'string'
37
+ output: 'string'
38
+ MultiPicklist:
39
+ input: 'string'
40
+ output: 'string'
41
+ TextArea:
42
+ input: 'string'
43
+ output: 'string'
44
+ LongTextArea:
45
+ input: 'string'
46
+ output: 'string'
47
+ RichTextArea:
48
+ input: 'string'
49
+ output: 'string'
50
+ EncryptedString:
51
+ input: 'string'
52
+ output: 'string'
53
+ Base64:
54
+ input: 'string'
55
+ output: 'string'
56
+ IdOrRef:
57
+ input: 'string'
58
+ output: 'string'
59
+ # BigDecimal-serialized scalars (accepts number or string, returns number)
60
+ Currency:
61
+ input: 'number | string'
62
+ output: 'number'
63
+ BigDecimal:
64
+ input: 'number | string'
65
+ output: 'number'
66
+ Double:
67
+ input: 'number | string'
68
+ output: 'number'
69
+ Percent:
70
+ input: 'number | string'
71
+ output: 'number'
72
+ Longitude:
73
+ input: 'number | string'
74
+ output: 'number'
75
+ Latitude:
76
+ input: 'number | string'
77
+ output: 'number'
78
+ # Integer-like scalars
79
+ Long:
80
+ input: 'number'
81
+ output: 'number'
82
+ BigInteger:
83
+ input: 'number'
84
+ output: 'number'
85
+ Short:
86
+ input: 'number'
87
+ output: 'number'
88
+ Byte:
89
+ input: 'number'
90
+ output: 'number'
91
+ Char:
92
+ input: 'number'
93
+ output: 'number'
94
+ overwrite: true
95
+ ignoreNoDocuments: true
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://shadcn-vue.com/schema.json",
3
+ "style": "new-york",
4
+ "typescript": true,
5
+ "tailwind": {
6
+ "config": "",
7
+ "css": "src/styles/global.css",
8
+ "baseColor": "neutral",
9
+ "cssVariables": true
10
+ },
11
+ "iconLibrary": "lucide",
12
+ "aliases": {
13
+ "components": "@/components",
14
+ "utils": "@/lib/utils",
15
+ "ui": "@/components/ui",
16
+ "lib": "@/lib",
17
+ "composables": "@/composables"
18
+ }
19
+ }
@@ -0,0 +1,17 @@
1
+ import { test, expect } from '@playwright/test';
2
+
3
+ test.describe('base-vue-app', () => {
4
+ test('home page loads and shows welcome content', async ({ page }) => {
5
+ await page.goto('/');
6
+ await expect(page.getByRole('heading', { name: 'Home' })).toBeVisible();
7
+ await expect(
8
+ page.getByText('Welcome to your Vue application.')
9
+ ).toBeVisible();
10
+ });
11
+
12
+ test('not found route shows 404', async ({ page }) => {
13
+ await page.goto('/non-existent-route');
14
+ await expect(page.getByRole('heading', { name: '404' })).toBeVisible();
15
+ await expect(page.getByText('Page not found')).toBeVisible();
16
+ });
17
+ });
@@ -0,0 +1,124 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { dirname } from 'node:path';
5
+ import js from '@eslint/js';
6
+ import pluginVue from 'eslint-plugin-vue';
7
+ import vueTsConfig from '@vue/eslint-config-typescript';
8
+ import globals from 'globals';
9
+ import graphqlPlugin from '@graphql-eslint/eslint-plugin';
10
+
11
+ const __dirname = dirname(fileURLToPath(import.meta.url));
12
+ const schemaPath = resolve(__dirname, '../../../../../schema.graphql');
13
+ const schemaExists = existsSync(schemaPath);
14
+
15
+ const config = [
16
+ // Global ignores
17
+ {
18
+ ignores: [
19
+ 'build/**/*',
20
+ 'dist/**/*',
21
+ 'coverage/**/*',
22
+ 'src/api/graphql-operations-types.ts',
23
+ ],
24
+ },
25
+ js.configs.recommended,
26
+ ...pluginVue.configs['flat/recommended'],
27
+ ...vueTsConfig(),
28
+ {
29
+ files: ['scripts/**/*.{js,cjs,mjs}'],
30
+ languageOptions: {
31
+ globals: globals.node,
32
+ },
33
+ },
34
+ // Main TypeScript/Vue files
35
+ {
36
+ files: ['**/*.{ts,vue}'],
37
+ languageOptions: {
38
+ ecmaVersion: 'latest',
39
+ sourceType: 'module',
40
+ globals: {
41
+ ...globals.browser,
42
+ process: 'readonly',
43
+ },
44
+ },
45
+ rules: {
46
+ '@typescript-eslint/no-unused-vars': [
47
+ 'error',
48
+ {
49
+ argsIgnorePattern: '^_',
50
+ varsIgnorePattern: '^_',
51
+ caughtErrorsIgnorePattern: '^_',
52
+ ignoreRestSiblings: true,
53
+ },
54
+ ],
55
+ '@typescript-eslint/explicit-function-return-type': 'off',
56
+ '@typescript-eslint/explicit-module-boundary-types': 'off',
57
+ '@typescript-eslint/no-explicit-any': 'off',
58
+ // Base app ships single-word component files (Home.vue, App.vue) mirroring
59
+ // the React template's page naming; allow them.
60
+ 'vue/multi-word-component-names': 'off',
61
+ },
62
+ },
63
+ // Node scripts (schema fetch, e2e asset rewrite)
64
+ {
65
+ files: ['scripts/**/*.{js,mjs}'],
66
+ languageOptions: {
67
+ globals: {
68
+ ...globals.node,
69
+ },
70
+ },
71
+ },
72
+ // Test files
73
+ {
74
+ files: [
75
+ '**/*.test.{ts,tsx}',
76
+ '**/test/**/*.{ts,tsx}',
77
+ 'src/test/**/*.{ts,tsx}',
78
+ ],
79
+ languageOptions: {
80
+ globals: {
81
+ ...globals.browser,
82
+ ...globals.node,
83
+ global: 'writable',
84
+ },
85
+ },
86
+ rules: {
87
+ '@typescript-eslint/no-explicit-any': 'off',
88
+ },
89
+ },
90
+ ];
91
+
92
+ // Only add GraphQL rules when schema exists (e.g. after graphql:schema).
93
+ // In CI or when schema is not checked in, skip so lint succeeds.
94
+ if (schemaExists) {
95
+ config.push(
96
+ {
97
+ files: ['**/*.{ts,vue}'],
98
+ processor: graphqlPlugin.processor,
99
+ },
100
+ {
101
+ files: ['**/*.graphql'],
102
+ languageOptions: {
103
+ parser: graphqlPlugin.parser,
104
+ parserOptions: {
105
+ graphQLConfig: {
106
+ schema: '../../../../../schema.graphql',
107
+ },
108
+ },
109
+ },
110
+ plugins: {
111
+ '@graphql-eslint': graphqlPlugin,
112
+ },
113
+ rules: {
114
+ '@graphql-eslint/no-anonymous-operations': 'error',
115
+ '@graphql-eslint/no-duplicate-fields': 'error',
116
+ '@graphql-eslint/known-fragment-names': 'error',
117
+ '@graphql-eslint/no-undefined-variables': 'error',
118
+ '@graphql-eslint/no-unused-variables': 'error',
119
+ },
120
+ }
121
+ );
122
+ }
123
+
124
+ export default config;
@@ -0,0 +1,12 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Welcome to Vue App</title>
7
+ </head>
8
+ <body>
9
+ <div id="app"></div>
10
+ <script type="module" src="src/main.ts"></script>
11
+ </body>
12
+ </html>