@fernir2/saas-kit-cli 0.1.4 → 0.1.5

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 (303) hide show
  1. package/package.json +211 -7
  2. package/cli/.gitlab-ci.yml +0 -14
  3. package/cli/.husky/commit-msg +0 -1
  4. package/cli/.husky/pre-commit +0 -1
  5. package/cli/README.md +0 -101
  6. package/cli/bin/index.ts +0 -358
  7. package/cli/drizzle.config.ts +0 -12
  8. package/cli/global-setup.ts +0 -25
  9. package/cli/npm-commands/gen-meta/index.ts +0 -3
  10. package/cli/npm-commands/gen-schema/index.ts +0 -5
  11. package/cli/npm-commands/migrate-db/index.ts +0 -5
  12. package/cli/npm-commands/migrate-db/migrate-db.ts +0 -15
  13. package/cli/npm-commands/seed-db/index.ts +0 -5
  14. package/cli/npm-commands/seed-db/seed-db.ts +0 -15
  15. package/cli/playwright.config.ts +0 -34
  16. package/cli/postcss.config.mjs +0 -9
  17. package/cli/server.ts +0 -41
  18. package/cli/src/app/api/v1/[resourceName]/[id]/route.ts/route.ts +0 -11
  19. package/cli/src/app/api/v1/[resourceName]/route.ts/route.ts +0 -14
  20. package/cli/src/app/api/v1/[resourceName]/upsert/route.ts/route.ts +0 -3
  21. package/cli/src/app/api/v1/log/route.ts/route.ts +0 -7
  22. package/cli/src/app/api/v1/otheruser/[id]/route.ts/route.ts +0 -14
  23. package/cli/src/app/api/v1/otheruser/route.ts/route.ts +0 -7
  24. package/cli/src/app/api/v1/password/forgotpassword/route.ts/route.ts +0 -3
  25. package/cli/src/app/api/v1/password/resetpassword/route.ts/route.ts +0 -3
  26. package/cli/src/app/api/v1/payment/method/route.ts/route.ts +0 -4
  27. package/cli/src/app/api/v1/payment/route.ts/route.ts +0 -3
  28. package/cli/src/app/api/v1/payment/verify-fail/route.ts/route.ts +0 -3
  29. package/cli/src/app/api/v1/payment/verify-success/route.ts/route.ts +0 -3
  30. package/cli/src/app/api/v1/preload/route.ts/route.ts +0 -3
  31. package/cli/src/app/api/v1/searchable-resources/route.ts/route.ts +0 -11
  32. package/cli/src/app/api/v1/searchresult/route.ts/route.ts +0 -35
  33. package/cli/src/app/api/v1/sign-in/route.ts/route.ts +0 -3
  34. package/cli/src/app/api/v1/sign-out/route.ts/route.ts +0 -3
  35. package/cli/src/app/api/v1/sign-up/route.ts/route.ts +0 -3
  36. package/cli/src/app/api/v1/subscription/cancel/route.ts/route.ts +0 -3
  37. package/cli/src/app/api/v1/subscription/create/route.ts/route.ts +0 -3
  38. package/cli/src/app/api/v1/subscription/update/route.ts/route.ts +0 -3
  39. package/cli/src/app/api/v1/uimeta/route.ts/route.ts +0 -3
  40. package/cli/src/app/api/v1/uimetas/route.ts/route.ts +0 -3
  41. package/cli/src/app/api/v1/userpermission/route.ts/route.ts +0 -3
  42. package/cli/src/app/api/v1/visible-workspace/route.ts/route.ts +0 -5
  43. package/cli/src/app/api/v1/workspace/change/route.ts/route.ts +0 -5
  44. package/cli/src/app/favicon.ico +0 -0
  45. package/cli/src/app/layout.tsx +0 -42
  46. package/cli/src/app/page.tsx +0 -9
  47. package/cli/tailwind.config.ts +0 -13
  48. package/packages/base-repo/tools/git/commit-msg-script.ts +0 -42
  49. package/packages/base-repo/tools/git/pre-commit-script.ts +0 -431
  50. package/packages/level2/client/components/error-fallback/FdErrorFallback.jsx +0 -14
  51. package/packages/level2/client/components/feed/FdFeed.funcs.jsx +0 -65
  52. package/packages/level2/client/components/feed/FdFeed.jsx +0 -34
  53. package/packages/level2/client/components/feed/FdFeedActions.jsx +0 -15
  54. package/packages/level2/client/components/feed/FdFeedComments.jsx +0 -6
  55. package/packages/level2/client/components/feed/FdFeedEntry.jsx +0 -36
  56. package/packages/level2/client/components/feed/FdFeedHeader.jsx +0 -23
  57. package/packages/level2/client/components/feed/FdFeedReactionsSummary.jsx +0 -16
  58. package/packages/level2/client/components/providers/FdProviders.jsx +0 -28
  59. package/packages/level2/client/components/subscription-plan/FdSubscriptionPlan.jsx +0 -163
  60. package/packages/level2/client/components/wizard/FdWizard.jsx +0 -45
  61. package/packages/level2/client/components/wizard/FdWizardStepper.jsx +0 -55
  62. package/packages/level2/client/pages/dashboard-page/DashbordPage.jsx +0 -46
  63. package/packages/level2/client/pages/dynamic-layout-page/DynamicLayoutPage.jsx +0 -22
  64. package/packages/level2/client/pages/edit-password-page/EditPasswordPage.jsx +0 -8
  65. package/packages/level2/client/pages/edit-user-by-id-page/EditUserByIdPage.jsx +0 -14
  66. package/packages/level2/client/pages/edit-user-page/EditUserPage.jsx +0 -6
  67. package/packages/level2/client/pages/feed-page/FeedPage.jsx +0 -8
  68. package/packages/level2/client/pages/file-upload-page/FileUploadPage.jsx +0 -7
  69. package/packages/level2/client/pages/forgot-password-page/ForgotPasswordPage.jsx +0 -8
  70. package/packages/level2/client/pages/leads-viw-page/LeadsViewPage.jsx +0 -6
  71. package/packages/level2/client/pages/microsoft-page/MicrosoftPage.jsx +0 -16
  72. package/packages/level2/client/pages/payment-plan-page/PaymentPlanPage.jsx +0 -18
  73. package/packages/level2/client/pages/preload-page/PreloadPage.jsx +0 -25
  74. package/packages/level2/client/pages/reset-password-page/ResetPasswordPage.jsx +0 -8
  75. package/packages/level2/client/pages/screenshot-page/TestScreenshotPage.jsx +0 -23
  76. package/packages/level2/client/pages/sign-in-page/SignInPage.jsx +0 -24
  77. package/packages/level2/client/pages/sign-up-page/SignUpPage.jsx +0 -9
  78. package/packages/level2/client/pages/status-board-page/StatusBoardPage.jsx +0 -6
  79. package/packages/level2/client/pages/test-layout/TestLayout.jsx +0 -11
  80. package/packages/level2/client/pages/test-page/TestPage.jsx +0 -12
  81. package/packages/level2/client/pages/user-list-page/UserListPage.jsx +0 -4
  82. package/packages/level2/client/pages/view-page/ViewPage.jsx +0 -21
  83. package/packages/level2/client/payments/change-payment-method-field/ChangePaymentMethodField.jsx +0 -48
  84. package/packages/level2/client/payments/checkout-form/CheckoutForm.jsx +0 -95
  85. package/packages/level2/client/payments/checkout-form/CheckoutFormSubmit.jsx +0 -11
  86. package/packages/level2/client/payments/checkout-form/checkout-form-fields.jsx +0 -68
  87. package/packages/level2/client/website-scan/FdWebsiteScanResult.funcs.jsx +0 -12
  88. package/packages/level2/client/website-scan/FdWebsiteScanResult.jsx +0 -33
  89. package/packages/level2/client/website-scan/website-scan-data.jsx +0 -28
  90. package/packages/level2/client/website-scan/website-scan-icons/FacebookIcon.jsx +0 -6
  91. package/packages/level2/client/website-scan/website-scan-icons/FacebookPixelIcon.jsx +0 -49
  92. package/packages/level2/client/website-scan/website-scan-icons/GoogleAnalyticsIcon.jsx +0 -7
  93. package/packages/level2/client/website-scan/website-scan-icons/InstagramIcon.jsx +0 -32
  94. package/packages/level2/client/website-scan/website-scan-icons/LinkedinIcon.jsx +0 -6
  95. package/packages/level2/client/website-scan/website-scan-icons/OtherPlatformIcon.jsx +0 -110
  96. package/packages/level2/client/website-scan/website-scan-icons/ShopifyIcon.jsx +0 -46
  97. package/packages/level2/client/website-scan/website-scan-icons/SquarespaceIcon.jsx +0 -57
  98. package/packages/level2/client/website-scan/website-scan-icons/TiktokIcon.jsx +0 -15
  99. package/packages/level2/client/website-scan/website-scan-icons/WixIcon.jsx +0 -62
  100. package/packages/level2/client/website-scan/website-scan-icons/WordpressIcon.jsx +0 -53
  101. package/packages/level2/client/website-scan/website-scan-icons/XIcon.jsx +0 -6
  102. package/packages/level2/fd-app-toolbox/edit-other-user/EditOtherUser.jsx +0 -7
  103. package/packages/level2/fd-app-toolbox/edit-password-form/EditPasswordForm.jsx +0 -68
  104. package/packages/level2/fd-app-toolbox/edit-user-form/EditUserForm.jsx +0 -122
  105. package/packages/level2/fd-app-toolbox/edit-user-sheet/EditUserSheet.jsx +0 -35
  106. package/packages/level2/fd-app-toolbox/forgot-password-form/ForgotPasswordForm.jsx +0 -87
  107. package/packages/level2/fd-app-toolbox/layout/client-layout/ClientLayout.jsx +0 -19
  108. package/packages/level2/fd-app-toolbox/layout/client-root/ClientRoot.jsx +0 -32
  109. package/packages/level2/fd-app-toolbox/layout/hamburger-menu/FdHamburgerMenu.jsx +0 -47
  110. package/packages/level2/fd-app-toolbox/layout/navbar/FdNarrowNavbar.jsx +0 -40
  111. package/packages/level2/fd-app-toolbox/layout/sidebar/FdSidebar.jsx +0 -48
  112. package/packages/level2/fd-app-toolbox/layout/sidebar/sidebar-dropdown-menu/FdDropdownMenuItemTitle.jsx +0 -12
  113. package/packages/level2/fd-app-toolbox/layout/sidebar/sidebar-dropdown-menu/FdSidebarDropdownMenu.jsx +0 -81
  114. package/packages/level2/fd-app-toolbox/layout/sidebar/sidebar-resources-provider.jsx +0 -30
  115. package/packages/level2/fd-app-toolbox/layout/toolbar/FdToolbar.jsx +0 -89
  116. package/packages/level2/fd-app-toolbox/layout/toolbar/FdTopNav.jsx +0 -42
  117. package/packages/level2/fd-app-toolbox/layout/toolbar/title-provider/ToolbarTitleProvider.jsx +0 -10
  118. package/packages/level2/fd-app-toolbox/login-form/LoginForm.jsx +0 -165
  119. package/packages/level2/fd-app-toolbox/menu/notifications-menu/FdNotificationMenu.jsx +0 -43
  120. package/packages/level2/fd-app-toolbox/menu/notifications-menu/notification-list/FdNotificationList.jsx +0 -53
  121. package/packages/level2/fd-app-toolbox/menu/top-menu/FdTopMenu.jsx +0 -28
  122. package/packages/level2/fd-app-toolbox/menu/top-menu/top-menu-group/FdTopMenuGroup.jsx +0 -35
  123. package/packages/level2/fd-app-toolbox/menu/top-menu/top-menu-item/FdTopMenuItem.jsx +0 -47
  124. package/packages/level2/fd-app-toolbox/menu/user-dropdown-menu/FdUserDropdownMenu.jsx +0 -122
  125. package/packages/level2/fd-app-toolbox/menu/user-dropdown-menu/user-dropdown-menu-item/FdUserDropdownMenuItem.jsx +0 -56
  126. package/packages/level2/fd-app-toolbox/menu/visible-workspace-picker/FdVisibleWorkspacePicker.jsx +0 -36
  127. package/packages/level2/fd-app-toolbox/menu/workspace-picker/FdWorkspacePicker.jsx +0 -47
  128. package/packages/level2/fd-app-toolbox/providers/ThemeProvider/ThemeProvider.jsx +0 -27
  129. package/packages/level2/fd-app-toolbox/providers/auth-provider/AuthProvider.jsx +0 -38
  130. package/packages/level2/fd-app-toolbox/providers/sidebar-provider/FdSidebarContext.jsx +0 -17
  131. package/packages/level2/fd-app-toolbox/register-form/RegisterForm.jsx +0 -119
  132. package/packages/level2/fd-app-toolbox/report/FdChart.jsx +0 -120
  133. package/packages/level2/fd-app-toolbox/report/ReportChart.jsx +0 -29
  134. package/packages/level2/fd-app-toolbox/reset-password-form/ResetPasswordForm.jsx +0 -81
  135. package/packages/level2/fd-app-toolbox/search/FdSearch.jsx +0 -56
  136. package/packages/level2/fd-app-toolbox/search/search-dialog/FdSearchDialog.jsx +0 -72
  137. package/packages/level2/fd-app-toolbox/search/search-dialog-provider.jsx +0 -16
  138. package/packages/level2/fd-app-toolbox/search/search-input/FdSearchInput.jsx +0 -49
  139. package/packages/level2/fd-app-toolbox/search/search-resource-results/FdSearchResourcesResults.jsx +0 -36
  140. package/packages/level2/fd-app-toolbox/search/search-result/FdSearchResult.jsx +0 -46
  141. package/packages/level2/fd-app-toolbox/search/search-searchable-resource-results/FdSearchSearchableResourceResult.jsx +0 -43
  142. package/packages/level2/fd-app-toolbox/search/search-searchable-resource-results/FdSearchSearchableResourceResults.jsx +0 -22
  143. package/packages/level2/fd-app-toolbox/server/layout/private-layout/PrivateLayout.jsx +0 -32
  144. package/packages/level2/fd-app-toolbox/status-board/FdStatusBoard.jsx +0 -49
  145. package/packages/level2/fd-app-toolbox/status-board/status-board-item/FdStatusBoardItem.jsx +0 -17
  146. package/packages/level2/fd-app-toolbox/status-board/status-board-status/FdStatusBoardStatus.jsx +0 -27
  147. package/packages/level2/fd-app-toolbox/user-list/UserList.jsx +0 -58
  148. package/packages/level2/fd-component-toolbox/animation/FdLabelAnimation.jsx +0 -55
  149. package/packages/level2/fd-component-toolbox/avatar/FdAvatar.jsx +0 -50
  150. package/packages/level2/fd-component-toolbox/back-button/FdBackButton.jsx +0 -21
  151. package/packages/level2/fd-component-toolbox/badge/FdBadge.jsx +0 -19
  152. package/packages/level2/fd-component-toolbox/badge-toggle-list/FdBadgeToggleList.jsx +0 -47
  153. package/packages/level2/fd-component-toolbox/button/FdButton.jsx +0 -64
  154. package/packages/level2/fd-component-toolbox/calendar/FdCalendar.jsx +0 -68
  155. package/packages/level2/fd-component-toolbox/card/FdCard.jsx +0 -56
  156. package/packages/level2/fd-component-toolbox/card/FdCardBigDigits.jsx +0 -25
  157. package/packages/level2/fd-component-toolbox/chart/FdChart.jsx +0 -269
  158. package/packages/level2/fd-component-toolbox/checkbox/FdCheckbox.jsx +0 -39
  159. package/packages/level2/fd-component-toolbox/command/FdCommand.jsx +0 -123
  160. package/packages/level2/fd-component-toolbox/datepicker/FdDatePicker.jsx +0 -155
  161. package/packages/level2/fd-component-toolbox/dialog/FdDialog.jsx +0 -106
  162. package/packages/level2/fd-component-toolbox/dialog/YesOrNoDialog.jsx +0 -57
  163. package/packages/level2/fd-component-toolbox/drag-and-drop/FdDragDropContext.jsx +0 -19
  164. package/packages/level2/fd-component-toolbox/drag-and-drop/FdDraggable.jsx +0 -27
  165. package/packages/level2/fd-component-toolbox/drag-and-drop/FdDroppable.jsx +0 -22
  166. package/packages/level2/fd-component-toolbox/dropdown-menu/FdDropdownMenu.jsx +0 -198
  167. package/packages/level2/fd-component-toolbox/dynamic-layout/FdDynamicComponent.jsx +0 -27
  168. package/packages/level2/fd-component-toolbox/dynamic-layout/FdDynamicLayoutDragAndDrop.jsx +0 -78
  169. package/packages/level2/fd-component-toolbox/fade-out-text/FdFadeOutText.jsx +0 -52
  170. package/packages/level2/fd-component-toolbox/form/FdForm.jsx +0 -146
  171. package/packages/level2/fd-component-toolbox/icon/FdIcon.jsx +0 -192
  172. package/packages/level2/fd-component-toolbox/icon/custom-icons/FdFilterIcon.jsx +0 -11
  173. package/packages/level2/fd-component-toolbox/image/FdImage.jsx +0 -15
  174. package/packages/level2/fd-component-toolbox/input/FdInput.jsx +0 -94
  175. package/packages/level2/fd-component-toolbox/label/FdLabel.jsx +0 -19
  176. package/packages/level2/fd-component-toolbox/link/FdLink.jsx +0 -23
  177. package/packages/level2/fd-component-toolbox/list/FdList.jsx +0 -20
  178. package/packages/level2/fd-component-toolbox/list/list-item/FdListItem.jsx +0 -46
  179. package/packages/level2/fd-component-toolbox/loading/FdLoadingIndicator.jsx +0 -7
  180. package/packages/level2/fd-component-toolbox/logos/FacebookLogo.jsx +0 -11
  181. package/packages/level2/fd-component-toolbox/logos/GoogleLogo.jsx +0 -12
  182. package/packages/level2/fd-component-toolbox/logos/MicrosoftLogo.jsx +0 -11
  183. package/packages/level2/fd-component-toolbox/markdown/FdMarkdown.jsx +0 -105
  184. package/packages/level2/fd-component-toolbox/markdown/markdown-parser.jsx +0 -72
  185. package/packages/level2/fd-component-toolbox/multiselect/FdMultiselect.jsx +0 -240
  186. package/packages/level2/fd-component-toolbox/navigation/FdNavigation.jsx +0 -43
  187. package/packages/level2/fd-component-toolbox/navigation/navigation-item/FdNavigationItem.jsx +0 -23
  188. package/packages/level2/fd-component-toolbox/radio-group/FdRadioGroup.jsx +0 -46
  189. package/packages/level2/fd-component-toolbox/rich-text/FdRichText.jsx +0 -58
  190. package/packages/level2/fd-component-toolbox/save-status/FdSaveStatus.jsx +0 -40
  191. package/packages/level2/fd-component-toolbox/select/FdSelect.jsx +0 -173
  192. package/packages/level2/fd-component-toolbox/separator/FdSeparator.jsx +0 -19
  193. package/packages/level2/fd-component-toolbox/sheet/FdSheet.jsx +0 -121
  194. package/packages/level2/fd-component-toolbox/slide-toggle/FdSlideToggle.jsx +0 -57
  195. package/packages/level2/fd-component-toolbox/spinner/Spinner.jsx +0 -36
  196. package/packages/level2/fd-component-toolbox/subheading/FdSubHeading.jsx +0 -12
  197. package/packages/level2/fd-component-toolbox/switch/FdSwitch.jsx +0 -55
  198. package/packages/level2/fd-component-toolbox/tabs/FdTabs.jsx +0 -53
  199. package/packages/level2/fd-component-toolbox/textarea/FdTextArea.jsx +0 -42
  200. package/packages/level2/fd-component-toolbox/toaster/FdToaster.jsx +0 -20
  201. package/packages/level2/fd-component-toolbox/tooltip/FdTooltip.jsx +0 -80
  202. package/packages/level2/meta/browsers/base-multi-browser/FdBaseMultiBrowser.jsx +0 -72
  203. package/packages/level2/meta/browsers/base-multi-browser/base-multi-browser-dialog/FdBaseMultiBrowserDialog.jsx +0 -159
  204. package/packages/level2/meta/browsers/browser/FdBrowser.jsx +0 -58
  205. package/packages/level2/meta/browsers/browser/browser-dialog/FdBrowserDialog.jsx +0 -89
  206. package/packages/level2/meta/browsers/many-to-many-browser/FdManyToManyBrowser.jsx +0 -33
  207. package/packages/level2/meta/browsers/multi-browser/FdMultiBrowser.jsx +0 -32
  208. package/packages/level2/meta/card-list/FdCardList.jsx +0 -40
  209. package/packages/level2/meta/card-list/card/FdCard.jsx +0 -44
  210. package/packages/level2/meta/card-list/card/action-block/FdCardActionBlock.jsx +0 -70
  211. package/packages/level2/meta/card-list/card/content-block/FdCardContentBlock.jsx +0 -64
  212. package/packages/level2/meta/card-list/card/image-block/FdCardImage.jsx +0 -10
  213. package/packages/level2/meta/client/framework/hooks.jsx +0 -39
  214. package/packages/level2/meta/comment/FdComment.jsx +0 -16
  215. package/packages/level2/meta/comment/FdCommentList.jsx +0 -32
  216. package/packages/level2/meta/components/edit-image/FdEditImage.jsx +0 -42
  217. package/packages/level2/meta/components/edit-image/FdEditImageActionMenu.jsx +0 -31
  218. package/packages/level2/meta/components/edit-image/FdEditImageDropdownMenu.jsx +0 -42
  219. package/packages/level2/meta/components/file-upload/FileUpload.jsx +0 -103
  220. package/packages/level2/meta/components/file-upload/PreviewMedia.jsx +0 -36
  221. package/packages/level2/meta/components/multi-list/FdMultiList.jsx +0 -65
  222. package/packages/level2/meta/components/multi-list/FdMultiListEditResource.jsx +0 -31
  223. package/packages/level2/meta/edit-resource/FdEditResource.jsx +0 -135
  224. package/packages/level2/meta/edit-resource/FdEditResourceFormBody.jsx +0 -8
  225. package/packages/level2/meta/edit-resource/FdEditResourceHeader.jsx +0 -43
  226. package/packages/level2/meta/edit-resource/FdEditResourceSheet.jsx +0 -70
  227. package/packages/level2/meta/edit-resource/SaveCompleteProvider.jsx +0 -16
  228. package/packages/level2/meta/edit-resource/edit-link/FdEditLink.jsx +0 -48
  229. package/packages/level2/meta/edit-resource/edit-link/FdEditLinkResource.jsx +0 -18
  230. package/packages/level2/meta/edit-resource/edit-resource-dialog/FdEditResourceDialog.jsx +0 -34
  231. package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceBlobField.jsx +0 -15
  232. package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceEnumField.jsx +0 -35
  233. package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceFlagsEnumField.jsx +0 -23
  234. package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceImageField.jsx +0 -7
  235. package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourcePropertyBlock.jsx +0 -38
  236. package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceRichTextField.jsx +0 -16
  237. package/packages/level2/meta/edit-resource/edit-resource-property-block/edit-resource-fields.jsx +0 -53
  238. package/packages/level2/meta/edit-resource/edit-resource-property-field/FdEditResourcePropertyField.jsx +0 -105
  239. package/packages/level2/meta/filtering/filter/FdEnumFlagFilter.jsx +0 -40
  240. package/packages/level2/meta/filtering/filter/FdFilter.jsx +0 -123
  241. package/packages/level2/meta/filtering/filter/filters/BooleanFilter.jsx +0 -25
  242. package/packages/level2/meta/filtering/filter/filters/DateFilter.jsx +0 -10
  243. package/packages/level2/meta/filtering/filter/filters/EnumFilter.jsx +0 -44
  244. package/packages/level2/meta/filtering/filter/filters/GuidFilter.jsx +0 -28
  245. package/packages/level2/meta/filtering/filter/filters/IntegerFilter.jsx +0 -28
  246. package/packages/level2/meta/filtering/filter/filters/TextFilter.jsx +0 -11
  247. package/packages/level2/meta/filtering/resource-filter-list/FdResourceFilterList.jsx +0 -120
  248. package/packages/level2/meta/filtering/resource-filter-list/resource-list-dropdown-menu/ResourceListDropdownMenu.funcs.jsx +0 -4
  249. package/packages/level2/meta/filtering/resource-filter-list/resource-list-dropdown-menu/ResourceListDropdownMenu.jsx +0 -43
  250. package/packages/level2/meta/providers/global-provider/FdGlobalContext.jsx +0 -17
  251. package/packages/level2/meta/resource-list/ResourceList.jsx +0 -63
  252. package/packages/level2/meta/resource-list/resource-add-button.jsx +0 -11
  253. package/packages/level2/meta/resource-list/resource-list-card/FdResourceListCard.jsx +0 -7
  254. package/packages/level2/meta/resource-list/resource-list-filter/FdResourceListFilter.jsx +0 -11
  255. package/packages/level2/meta/resource-list/resource-table-list/FdResourceTableList.jsx +0 -14
  256. package/packages/level2/meta/table/FdTable.jsx +0 -147
  257. package/packages/level2/meta/table/body/FdTableBody.jsx +0 -9
  258. package/packages/level2/meta/table/body-cell/FdActionBodyCell.jsx +0 -145
  259. package/packages/level2/meta/table/body-cell/FdBlobBodyCell.jsx +0 -27
  260. package/packages/level2/meta/table/body-cell/FdBodyCell.jsx +0 -133
  261. package/packages/level2/meta/table/body-cell/FdBodyCellValue.jsx +0 -59
  262. package/packages/level2/meta/table/body-cell/FdBodyExpandCell.jsx +0 -6
  263. package/packages/level2/meta/table/body-cell/FdBodyExpandPropertyCell.jsx +0 -22
  264. package/packages/level2/meta/table/body-cell/FdCustomActionLink.jsx +0 -16
  265. package/packages/level2/meta/table/body-cell/FdMultiselectCellTemplate.jsx +0 -39
  266. package/packages/level2/meta/table/body-cell/FdViewCell.jsx +0 -12
  267. package/packages/level2/meta/table/body-row/FdTableBodyRow.jsx +0 -49
  268. package/packages/level2/meta/table/header/FdTableHeader.jsx +0 -54
  269. package/packages/level2/meta/table/header-cell/FdResizable.jsx +0 -18
  270. package/packages/level2/meta/table/header-cell/FdResizableEdgeHandle.jsx +0 -4
  271. package/packages/level2/meta/table/header-cell/FdTableHeaderActionCell.jsx +0 -49
  272. package/packages/level2/meta/table/header-cell/FdTableHeaderCell.jsx +0 -89
  273. package/packages/level2/meta/table/header-cell/FdTableHeaderCellActionButton.jsx +0 -23
  274. package/packages/level2/meta/table/pager/FdPager.jsx +0 -72
  275. package/packages/level2/meta/table/table-custom-action/TableCustomAction.jsx +0 -26
  276. package/packages/level2/meta/view/FdView.jsx +0 -31
  277. package/packages/level2/meta/view/FdViewSheet.jsx +0 -103
  278. package/packages/level2/meta/view/view-resource/FdViewResource.jsx +0 -108
  279. package/packages/level2/meta/view/view-resource/templates/ManyToOneTableHeaderCellTemplate.jsx +0 -13
  280. package/src/app/error.jsx +0 -5
  281. package/src/app/global-error.jsx +0 -5
  282. package/src/app/loading.jsx +0 -11
  283. package/src/hd/footer/HdFooter.jsx +0 -27
  284. package/src/hd/footer/hd-footer-item/HdFooterItem.jsx +0 -14
  285. package/src/lm/ai-scan/AiScanAction.jsx +0 -21
  286. package/src/lm/ai-scan/cell-templates/AiScanWebsiteResultCellTemplate.jsx +0 -31
  287. package/src/lm/components/LmCardReport.jsx +0 -12
  288. package/src/lm/configs/lm-list-configs.jsx +0 -72
  289. package/src/lm/google-place/action-dropdown/GooglePlaceActionDropdown.jsx +0 -42
  290. package/src/lm/google-place/actions/GooglePlaceSaveToGroupAction.jsx +0 -22
  291. package/src/lm/google-place/cell-templates/GooglePlaceBusinessInfoCellTemplate.jsx +0 -59
  292. package/src/lm/google-place/cell-templates/GooglePlaceEmailsCellTemplate.jsx +0 -34
  293. package/src/lm/google-place/cell-templates/GooglePlaceScanAction.jsx +0 -15
  294. package/src/lm/lead/action-dropdown/LeadActionDropdown.jsx +0 -39
  295. package/src/lm/lead/actions/move-to-group-action/LeadMoveToGroupAction.jsx +0 -28
  296. package/src/lm/lead/cell-templates/LeadBusinessInfoCellTemplate.jsx +0 -64
  297. package/src/lm/lead/cell-templates/LeadScanAction.jsx +0 -15
  298. package/src/lm/lead/lead-google-place/LeadGooglePlaceIndicator.jsx +0 -8
  299. package/src/lm/lead/lead-google-place/LeadGooglePlaceIndicators.jsx +0 -17
  300. package/src/lm/lead/lead-google-place/LeadGooglePlaceInfo.jsx +0 -15
  301. package/src/lm/lead/view/LeadsView.jsx +0 -8
  302. package/src/lm/pages/HomePage.jsx +0 -53
  303. package/types-output/tsconfig.tsbuildinfo +0 -1
@@ -1,103 +0,0 @@
1
- "use client";
2
- import { FdSheet, FdSheetTrigger, FdSheetContent, FdSheetTitle, FdSheetHeader, FdSheetDescription, } from "@fd-component-toolbox/sheet/FdSheet";
3
- import React, { useCallback, useEffect, useMemo, useState } from "react";
4
- import { emptyGuid } from "@fd-toolbox/constants/constants";
5
- import { metaQueryParams } from "@fd-toolbox/constants/meta-query-params";
6
- import { FdView } from "@meta/view/FdView";
7
- import { resourceEditModes } from "@fd-toolbox/constants/resource-list-configs-enums";
8
- import { FdEditResource } from "@meta/edit-resource/FdEditResource";
9
- import { getEditMode } from "@meta/resource-list/resource-list-configs";
10
- import { getViewConfig } from "@meta/view/config/view-list-config";
11
- import { cn } from "@fd-toolbox/lib/utils";
12
- import { elements } from "@fd-toolbox/constants/elements";
13
- import { handleCancelClick, handleDeleteClick, handleOpenChange, handleSaveComplete, } from "@meta/view/FdViewSheet.funcs";
14
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
15
- import { fetchUiResourceMeta } from "@meta/ui-meta-providers";
16
- import { viewNames } from "@meta/view/view-names";
17
- import { isUuidSet } from "@fd-toolbox/functions/value-checking-functions";
18
- /**
19
- * A sheet component that displays views in a sliding panel overlay.
20
- *
21
- * This component provides a modal-like interface for {@link FdView}.
22
-
23
- *
24
- * @param props - {@link FdViewSheetProps}
25
- *
26
- * @example
27
- * ```tsx
28
- * <FdViewSheet
29
- * id="123e4567-e89b-12d3-a456-426614174000"
30
- * resourceName="student"
31
- * onRefreshResources={onRefreshResources}
32
- * >
33
- * <FdButton variant="outline">
34
- * View Details
35
- * </FdButton>
36
- * </FdViewSheet>
37
- * ```
38
- */
39
- export function FdViewSheet({ id: propId, resourceName, children, onEditClick, onRefreshResources, onCloseClick, defaultTab, uiResourceMeta: uiResourceMetaProp, editMode: editModeProp, }) {
40
- const [isOpen, setIsOpen] = useState(false);
41
- const [relatedResourceId, setRelatedResourceId] = useState();
42
- const [relatedResourceName, setRelatedResourceName] = useState();
43
- const [uiResourceMeta, setUiResourceMeta] = useState();
44
- const viewConfig = useMemo(() => (resourceName ? getViewConfig(resourceName) : undefined), [resourceName]);
45
- const enhanceParams = (search) => new URLSearchParams(search);
46
- const params = enhanceParams(window.location.search);
47
- const paramsId = params.get(metaQueryParams.id) ?? undefined;
48
- const paramsResourceName = params.get(metaQueryParams.resource) ?? undefined;
49
- const resolvedResourceName = resourceName ?? params.get(metaQueryParams.resource) ?? "";
50
- const resourceId = (isUuidSet(propId) && propId) || (isUuidSet(paramsId) && paramsId) || emptyGuid;
51
- const isNew = !isUuidSet(resourceId);
52
- const defaultData = params.get(metaQueryParams.default);
53
- const defaultDataParams = enhanceParams(defaultData ?? "");
54
- const defaultDataName = defaultDataParams.get(metaQueryParams.relatedResourceName);
55
- const defaultDataValue = defaultDataParams.get(metaQueryParams.relatedResourceId);
56
- const editMode = editModeProp ?? getEditMode();
57
- useAsyncEffect(async () => {
58
- if (editMode === resourceEditModes.simple) {
59
- let uiMeta = uiResourceMetaProp;
60
- uiMeta ??= await fetchUiResourceMeta(resolvedResourceName);
61
- setUiResourceMeta(uiMeta);
62
- }
63
- });
64
- useEffect(() => {
65
- if (defaultDataName && defaultDataValue) {
66
- setRelatedResourceName(defaultDataName);
67
- setRelatedResourceId(defaultDataValue);
68
- }
69
- }, [defaultDataName, defaultDataValue]);
70
- const onOpenChange = useCallback(async (open) => {
71
- handleOpenChange(open, setIsOpen, resolvedResourceName, paramsId ?? undefined, paramsResourceName ?? undefined, propId, onEditClick, editMode, onCloseClick);
72
- }, [editMode, paramsId, resolvedResourceName, paramsResourceName, onCloseClick, propId, onEditClick]);
73
- const onSaveComplete = useCallback(() => {
74
- handleSaveComplete(onOpenChange, onRefreshResources, onCloseClick);
75
- }, [onRefreshResources, onOpenChange, onCloseClick]);
76
- const onCancelClick = useCallback(() => {
77
- handleCancelClick(onOpenChange, onCloseClick);
78
- }, [onOpenChange, onCloseClick]);
79
- const onDeleteComplete = useCallback(() => {
80
- handleDeleteClick(onOpenChange, onCloseClick);
81
- }, [onOpenChange, onCloseClick]);
82
- return (<div onClick={(e) => e.stopPropagation()}>
83
- <FdSheet open={isOpen} onOpenChange={onOpenChange}>
84
- <FdSheetTrigger id={elements.table.editButton + propId} asChild>
85
- {children}
86
- </FdSheetTrigger>
87
- <FdSheetContent className={cn("overflow-y-auto py-8 pl-2 sm:pl-6", editMode === resourceEditModes.default
88
- ? "w-full pr-0 sm:w-3/4"
89
- : "w-full pr-4 sm:w-2/3 lg:w-7/12 xl:w-2/5")}>
90
- <FdSheetHeader>
91
- <FdSheetDescription></FdSheetDescription>
92
- </FdSheetHeader>
93
- <FdSheetTitle className="absolute -m-px size-px overflow-hidden whitespace-nowrap border-0 p-0 text-transparent">
94
- SheetContent
95
- </FdSheetTitle>
96
- <div className="h-full">
97
- {(editMode === resourceEditModes.default && (<FdView resourceName={resolvedResourceName} resourceId={resourceId} onSaveComplete={onSaveComplete} onCancelClick={onCancelClick} onDeleteComplete={onDeleteComplete} defaultTab={defaultTab} viewConfigProp={viewConfig} viewName={viewNames.viewResource} onRefreshResource={onRefreshResources}/>)) ||
98
- (uiResourceMeta && editMode === resourceEditModes.simple && (<FdEditResource uiResourceMeta={uiResourceMeta} resourceId={resourceId} isNew={isNew} onSaveComplete={onSaveComplete} onDeleteComplete={onDeleteComplete} onCancelClick={onCancelClick} onRefreshResource={onRefreshResources} relatedResourceId={relatedResourceId} relatedResourceName={relatedResourceName} showSavingStatus={true}/>))}
99
- </div>
100
- </FdSheetContent>
101
- </FdSheet>
102
- </div>);
103
- }
@@ -1,108 +0,0 @@
1
- "use client";
2
- import { cn } from "@fd-toolbox/lib/utils";
3
- import { tabsNames, viewLayoutTypes } from "@meta/view/view-constants";
4
- import FdNavigation from "@fd-component-toolbox/navigation/FdNavigation";
5
- import { getViewNavigationItems, initializeMultiListResources, onViewMultiListRelationChange, onRelationUnassign, } from "@meta/view/FdView.funcs";
6
- import { FdEditResource } from "@meta/edit-resource/FdEditResource";
7
- import { FdTabs, FdTabsList, FdTabsTrigger } from "@fd-component-toolbox/tabs/FdTabs";
8
- import FdMultiList from "@meta/components/multi-list/FdMultiList";
9
- import { FdCommentList } from "@meta/comment/FdCommentList";
10
- import { useCallback, useMemo, useState } from "react";
11
- import { fdMultiListTypes, } from "@meta/components/multi-list/multi-list-types";
12
- import { getDefaultEditResourceConfig, getEditResourceConfig, } from "@meta/edit-resource/config/fd-edit-resource-configs";
13
- import { getViewConfig } from "@meta/view/config/view-list-config";
14
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
15
- import { elementSuffixes } from "@fd-toolbox/constants/element-suffixes";
16
- import { FdSaveStatus } from "@fd-component-toolbox/save-status/FdSaveStatus";
17
- import { onSavingViewResourceStart } from "@meta/view/view-resource/FdViewResource.funcs";
18
- /**
19
- * A universal component for displaying resources in any mode, {@link FdEditResource}, {@link FdMultiList} or others.
20
-
21
- *
22
- * The layout can be configured to use either navigation or tabbed interface based on the view configuration.
23
- *
24
- * @param props - {@link FdViewResourceProps}
25
- *
26
- * @example
27
- * ```tsx
28
- * <FdViewResource
29
- * resourceId="d4507481-8b33-46e7-9c2e-606daab170cc"
30
- * hasId={true}
31
- * resourceName="student"
32
- * onDeleteComplete={onDeleteComplete}
33
- * onCancelClick={onCancelClick}
34
- * onSaveComplete={onSaveComplete}
35
- * viewConfigProp={viewConfigProp}
36
- * defaultTab={defaultTab}
37
- * />
38
- * ```
39
- */
40
- export function FdViewResource({ resourceName, resourceId, hasId, viewConfigProp, onDeleteComplete, onSaveComplete, defaultTab, onCancelClick, onRefreshData, }) {
41
- const [multiListItems, setMultiListItems] = useState([]);
42
- const [editConfig, setEditConfig] = useState(resourceName ? getEditResourceConfig(resourceName) : getDefaultEditResourceConfig(resourceName));
43
- const [uiResourceMeta, setUiResourceMeta] = useState(undefined);
44
- const [resource, setResource] = useState();
45
- const [multiListType, setMultiListType] = useState(fdMultiListTypes.resource);
46
- const [activeTab, setActiveTab] = useState(defaultTab ?? tabsNames.overview);
47
- const [isLoadComplete, setIsLoadComplete] = useState(false);
48
- const [commentList, setCommentList] = useState([]);
49
- const [activeSaveOperations, setActiveSaveOperations] = useState(0);
50
- const [hasSavedOnce, setHasSavedOnce] = useState(false);
51
- const viewConfig = useMemo(() => viewConfigProp ?? getViewConfig(resourceName), [viewConfigProp, resourceName]);
52
- useAsyncEffect(async () => {
53
- await initializeMultiListResources(resourceName, resourceId, viewConfig, setMultiListItems, setMultiListType, editConfig, setEditConfig, setResource, setUiResourceMeta, setIsLoadComplete, hasId, setCommentList);
54
- });
55
- const onRelationUnassignCallback = useCallback(async (context, multiListItem) => {
56
- await onRelationUnassign(context, multiListItem, uiResourceMeta.resourceMeta, resource);
57
- }, [resource, uiResourceMeta]);
58
- const onViewMultiListRelationChangeCallback = useCallback((multiListItem, newRelatedResource) => {
59
- onViewMultiListRelationChange(multiListItem, uiResourceMeta.resourceMeta, resource, newRelatedResource);
60
- }, [resource, uiResourceMeta?.resourceMeta]);
61
- const onSavingStarting = useCallback(() => {
62
- onSavingViewResourceStart(hasSavedOnce, setHasSavedOnce, setActiveSaveOperations);
63
- }, [hasSavedOnce]);
64
- const onSavingEnding = useCallback(() => {
65
- setActiveSaveOperations((prev) => prev - 1);
66
- }, []);
67
- return (isLoadComplete && (<div className="relative h-full">
68
- {hasSavedOnce && (<div className="absolute right-9 top-1.5">
69
- <FdSaveStatus isSaved={activeSaveOperations === 0}/>
70
- </div>)}
71
- <div className={cn("flex w-full flex-col justify-center lg:h-full lg:flex-row lg:overflow-hidden", multiListItems.length && "justify-around")} id={`${resourceName}${elementSuffixes.viewResource}`}>
72
- {viewConfig.layoutType === viewLayoutTypes.navigation ? (<div className="sticky max-h-full min-h-min shrink-0 border-input">
73
- <FdNavigation isOpen={true} config={{ name: "", items: getViewNavigationItems(multiListItems) }}/>
74
- </div>) : (<div className="h-1/2 w-full shrink-0 overflow-y-auto pr-2 lg:h-full lg:w-1/3 lg:pr-1">
75
- {uiResourceMeta && (<FdEditResource resourceId={resourceId} isNew={!hasId} onSaveComplete={onSaveComplete} onCancelClick={onCancelClick} onDeleteComplete={onDeleteComplete} config={editConfig} uiResourceMeta={uiResourceMeta} resource={resource} onSavingStarting={onSavingStarting} onSavingEnding={onSavingEnding} onRefreshResource={onRefreshData}/>)}
76
- </div>)}
77
- <div className="my-4 h-px w-full pr-2 lg:ml-2 lg:mr-6 lg:mt-0 lg:h-auto lg:min-h-full lg:w-px lg:pr-0">
78
- <div className="size-full bg-border"/>
79
- </div>
80
- {hasId && (<FdTabs value={String(activeTab)} className="flex h-1/2 w-full flex-col overflow-y-auto pr-2 lg:h-full lg:overflow-hidden lg:pr-0">
81
- <FdTabsList className="flex items-end text-sm">
82
- {!!multiListItems.length && (<FdTabsTrigger onClick={() => setActiveTab(tabsNames.overview)} value={String(tabsNames.overview)} className="flex h-full min-w-32 items-center justify-center rounded-tl-md border px-1 py-3 outline-none hover:text-subtle-500 data-[state=active]:border-b-0 data-[state=inactive]:bg-muted data-[state=active]:font-semibold data-[state=active]:text-muted-foreground">
83
- Overview
84
- </FdTabsTrigger>)}
85
- {viewConfig.isCommentTabVisible && (<FdTabsTrigger onClick={() => setActiveTab(tabsNames.comments)} value={String(tabsNames.comments)} className={cn("flex h-full min-w-32 items-center justify-center rounded-tr-md border px-1 py-3 outline-none hover:text-subtle-500 data-[state=active]:border-b-0 data-[state=inactive]:bg-muted data-[state=active]:font-semibold data-[state=active]:text-muted-foreground", { "rounded-tl-md": multiListItems?.length === 0 })}>
86
- Comments
87
- </FdTabsTrigger>)}
88
- <hr className="h-px w-full border-t"/>
89
- </FdTabsList>
90
- <div className={cn("h-full max-w-full overflow-y-auto overflow-x-hidden pt-7", activeTab !== tabsNames.overview ? "hidden" : "visible")}>
91
- <div className="flex w-full grow-0 basis-full flex-col gap-y-10 overflow-y-auto overflow-x-hidden">
92
- <FdMultiList tableConfig={viewConfig.tableConfig} multiListItems={multiListItems} type={multiListType} onCustomAction={onRelationUnassignCallback} onMultiListResourceRelationChange={onViewMultiListRelationChangeCallback} commentList={commentList} onSavingStarting={() => {
93
- setActiveSaveOperations((prev) => prev + 1);
94
- }} onSavingEnding={() => {
95
- setActiveSaveOperations((prev) => prev - 1);
96
- }}/>
97
- </div>
98
- </div>
99
- <div className={cn("h-full max-w-full overflow-y-auto overflow-x-hidden pt-3", activeTab !== tabsNames.comments ? "hidden" : "visible")}>
100
- <div className="mt-2 flex w-full grow-0 basis-full flex-col gap-y-10 overflow-y-auto overflow-x-hidden">
101
- <FdCommentList resourceName={resourceName} resourceId={resourceId} resources={commentList}/>
102
- </div>
103
- </div>
104
- </FdTabs>)}
105
- </div>
106
- </div>));
107
- }
108
- export default FdViewResource;
@@ -1,13 +0,0 @@
1
- import { FdBrowserDialog } from "@meta/browsers/browser/browser-dialog/FdBrowserDialog";
2
- import { FdTableHeaderActionButton } from "@meta/table/header-cell/FdTableHeaderCellActionButton";
3
- import { iconNames } from "@fd-component-toolbox/icon/FdIcon";
4
- import { useCallback } from "react";
5
- export function ManyToOneTableHeaderCellTemplate({ parentResourcePropertyMeta, resourceId, multiListItem, onViewMultiListRelationChange, onCustomAction, }) {
6
- const onBrowserCloseDialog = useCallback((newRelatedResource) => {
7
- if (!newRelatedResource?.id)
8
- return;
9
- onViewMultiListRelationChange(multiListItem, newRelatedResource);
10
- onCustomAction();
11
- }, [multiListItem, onViewMultiListRelationChange, onCustomAction]);
12
- return (<FdBrowserDialog propertyMeta={parentResourcePropertyMeta} currentResourceId={resourceId} closeDialog={onBrowserCloseDialog} trigger={<FdTableHeaderActionButton tooltipText="Change" icon={iconNames.link}/>}/>);
13
- }
package/src/app/error.jsx DELETED
@@ -1,5 +0,0 @@
1
- "use client";
2
- import { FdErrorFallback } from "@client/components/error-fallback/FdErrorFallback";
3
- export default function ErrorFallback({ error, reset }) {
4
- return <FdErrorFallback error={error} reset={reset}/>;
5
- }
@@ -1,5 +0,0 @@
1
- "use client";
2
- import { FdErrorFallback } from "@client/components/error-fallback/FdErrorFallback";
3
- export default function GlobalError({ error, reset }) {
4
- return <FdErrorFallback error={error} reset={reset}/>;
5
- }
@@ -1,11 +0,0 @@
1
- import { FdImage } from "@fd-component-toolbox/image/FdImage";
2
- export default async function Loading() {
3
- return (<div className="flex size-full flex-col items-center justify-center gap-6">
4
- <FdImage src="/favicon.ico" alt="Fernir Logo" width={40} height={40} className="opacity-90"/>
5
- <div className="flex gap-2">
6
- <span className="size-2 animate-bounce rounded-full bg-fd-tertiary-900 delay-0"/>
7
- <span className="size-2 animate-bounce rounded-full bg-fd-tertiary-900 delay-150"/>
8
- <span className="size-2 animate-bounce rounded-full bg-fd-tertiary-900 delay-300"/>
9
- </div>
10
- </div>);
11
- }
@@ -1,27 +0,0 @@
1
- import React from "react";
2
- import { FdImage } from "@fd-component-toolbox/image/FdImage";
3
- import FdLink from "@fd-component-toolbox/link/FdLink";
4
- import { footerItems } from "@/hd/footer/hd-footer";
5
- import { HdFooterItem } from "@/hd/footer/hd-footer-item/HdFooterItem";
6
- import { ArrowRight } from "lucide-react";
7
- export function HdFooter() {
8
- return (<footer className="absolute bottom-0 flex w-full justify-center bg-hd-footer-bg text-hd-text-primary">
9
- <div className="w-4/5 pb-8 pt-12">
10
- <div className="flex flex-col justify-between gap-11 lg:flex-row lg:gap-0">
11
- <div className="flex gap-11 lg:flex-col">
12
- <FdImage className="!rounded-none" priority src="/hd-logo.svg" alt="logo" width={48} height={48}/>
13
- <FdLink href={footerItems[0].path} className="flex gap-3 whitespace-nowrap rounded-md bg-hd-button px-8 py-3 hover:bg-hd-button-hover active:bg-hd-button-active">
14
- View homes
15
- <ArrowRight size={24}/>
16
- </FdLink>
17
- </div>
18
- <div className="flex justify-between lg:w-2/3">
19
- {footerItems.map((item) => (<HdFooterItem key={`${item.name}_${item.path}`} item={item}></HdFooterItem>))}
20
- </div>
21
- </div>
22
- <div className="mt-10 border-t border-hd-border pt-8 text-right text-hd-text-secondary">
23
- © 2025 All rights reserved.
24
- </div>
25
- </div>
26
- </footer>);
27
- }
@@ -1,14 +0,0 @@
1
- import React from "react";
2
- import FdLink from "@fd-component-toolbox/link/FdLink";
3
- export function HdFooterItem({ item }) {
4
- return (<div className="flex flex-col">
5
- <FdLink href={item.path} className="mb-8 text-xl font-semibold">
6
- {item.name}
7
- </FdLink>
8
- <div className="flex flex-col gap-6 text-hd-text-secondary">
9
- {item.children.map(({ name, path }) => (<FdLink key={`${name}_${path}`} href={path}>
10
- {name}
11
- </FdLink>))}
12
- </div>
13
- </div>);
14
- }
@@ -1,21 +0,0 @@
1
- "use client";
2
- import { FdIcon } from "@fd-component-toolbox/icon/FdIcon";
3
- import { FdDropdownMenuItem } from "@fd-component-toolbox/dropdown-menu/FdDropdownMenu";
4
- import { useCallback, useContext } from "react";
5
- import { ResourceListContext } from "@meta/resource-list/ResourceList";
6
- import { handleMenuItemClick } from "@/lm/ai-scan/AiScanAction.funcs";
7
- import { useFdSearchParams } from "@meta/client/framework/hooks";
8
- import { metaQueryParams } from "@fd-toolbox/constants/meta-query-params";
9
- export function AiScanAction({ label, iconName, setIsLoading }) {
10
- const resourceListContext = useContext(ResourceListContext) ?? undefined;
11
- const selectedTableRows = resourceListContext?.tableComponentRef.current?.getSelectedRows();
12
- const searchParams = useFdSearchParams();
13
- const resourceName = searchParams.get(metaQueryParams.resource);
14
- const onMenuItemClickCallback = useCallback(async () => {
15
- await handleMenuItemClick(setIsLoading, resourceName, resourceListContext ?? undefined, selectedTableRows);
16
- }, [setIsLoading, resourceName, resourceListContext, selectedTableRows]);
17
- return (<FdDropdownMenuItem className="flex w-full cursor-pointer justify-start gap-2" onClick={onMenuItemClickCallback}>
18
- {iconName && <FdIcon name={iconName}/>}
19
- {label}
20
- </FdDropdownMenuItem>);
21
- }
@@ -1,31 +0,0 @@
1
- "use client";
2
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
3
- import { FdDialog, FdDialogContent, FdDialogTrigger } from "@fd-component-toolbox/dialog/FdDialog";
4
- import { parseMarkdown } from "@fd-component-toolbox/markdown/markdown-parser";
5
- import { useState } from "react";
6
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
7
- export function AiScanWebsiteResultCellTemplate({ resource }) {
8
- const [convertedText, setConvertedText] = useState([]);
9
- useAsyncEffect(async () => {
10
- if (resource.aiScan) {
11
- setConvertedText(await parseMarkdown(resource.aiScan));
12
- }
13
- }, [resource]);
14
- if (resource.aiScan) {
15
- return (<FdDialog>
16
- <FdDialogTrigger asChild>
17
- <FdButton className="p-0" variant="link">
18
- View Result
19
- </FdButton>
20
- </FdDialogTrigger>
21
- <FdDialogContent className="max-h-[80%] w-full max-w-5xl overflow-scroll">
22
- <div className="[&>ol>li]:ml-4 [&>ol]:list-decimal [&>p]:my-4 [&>p]:text-xl [&>p]:font-bold [&>ul>li]:ml-4 [&>ul]:list-disc">
23
- {convertedText}
24
- </div>
25
- </FdDialogContent>
26
- </FdDialog>);
27
- }
28
- else {
29
- return null;
30
- }
31
- }
@@ -1,12 +0,0 @@
1
- import { FdCard, FdCardContent } from "@fd-component-toolbox/card/FdCard";
2
- import { cn } from "@fd-toolbox/lib/utils";
3
- export function LmCardReport({ title, value, subtitle, className }) {
4
- const contentVariation = subtitle ? "" : "text-center text-3xl";
5
- return (<FdCard className={cn("size-full", className)}>
6
- <FdCardContent>
7
- <div className="py-2">{title}</div>
8
- <div className={cn("text-2xl font-bold", contentVariation)}>{value}</div>
9
- {subtitle && <p className="text-sm font-light">{subtitle}</p>}
10
- </FdCardContent>
11
- </FdCard>);
12
- }
@@ -1,72 +0,0 @@
1
- import { googlePlaceDropdownActions } from "@/lm/google-place/action-dropdown/google-place-dropdown-actions";
2
- import { GooglePlaceActionDropdown } from "@/lm/google-place/action-dropdown/GooglePlaceActionDropdown";
3
- import { GooglePlaceBusinessInfoCellTemplate } from "@/lm/google-place/cell-templates/GooglePlaceBusinessInfoCellTemplate";
4
- import { LeadActionDropdown } from "@/lm/lead/action-dropdown/LeadActionDropdown";
5
- import { leadDropdownActions } from "@/lm/lead/action-dropdown/lead-dropdown-actions";
6
- import { LeadBusinessInfoCellTemplate } from "@/lm/lead/cell-templates/LeadBusinessInfoCellTemplate";
7
- import { AiScanWebsiteResultCellTemplate } from "@/lm/ai-scan/cell-templates/AiScanWebsiteResultCellTemplate";
8
- import { leadGroupCustomActionName, viewRelatedLeads, } from "@/lm/lead-group/table-custom-action/lead-group-table-custom-action";
9
- import { GooglePlaceEmailsCellTemplate } from "@/lm/google-place/cell-templates/GooglePlaceEmailsCellTemplate";
10
- import { getNewUuid } from "@fd-toolbox/uuids";
11
- import { leadProps } from "@common/leads/props/lead-props";
12
- import { tableCustomActionTypes } from "@meta/table/table-models";
13
- import FdMultiselectCellTemplate from "@meta/table/body-cell/FdMultiselectCellTemplate";
14
- import { websiteScanResultProps } from "@common/resources/props/website-scan-result-props";
15
- import { googlePlaceProps } from "@common/leads/props/google-place-props";
16
- import { resourceEditModes } from "@fd-toolbox/constants/resource-list-configs-enums";
17
- import { userProps } from "@meta/core/resources/users/props/user-props";
18
- import { resourceNames } from "@fd-toolbox/resources/resource-names";
19
- import { iconNames } from "@fd-component-toolbox/icon/FdIcon";
20
- export const lmResourceConfigs = {
21
- [resourceNames.lead]: getLeadResourceListConfig,
22
- [resourceNames.googlePlace]: getGooglePlaceResourceListConfig,
23
- [resourceNames.leadGroup]: getLeadGroupResourceListConfig,
24
- [resourceNames.paymentPlan]: getPaymentPlanResourceListConfig,
25
- [resourceNames.user]: getUserResourceListConfig,
26
- };
27
- function getLeadResourceListConfig(defaultConfig) {
28
- defaultConfig.filtersTableInBetweenContainer = [
29
- <LeadActionDropdown actions={leadDropdownActions} key={getNewUuid()}/>,
30
- ];
31
- defaultConfig.oDataConfig = {
32
- expands: [leadProps.screenshotBlob, leadProps.websiteScanResult, leadProps.leadToLeadGroupList],
33
- };
34
- defaultConfig.tableConfig.columnConfigs = {
35
- [leadProps.businessInfo]: { cellTemplate: LeadBusinessInfoCellTemplate },
36
- [leadProps.leadEmailList]: {
37
- cellTemplate: (props) => (<FdMultiselectCellTemplate resource={props.resource} entityPath={leadProps.websiteScanResult} valueProperty={websiteScanResultProps.emails}/>),
38
- },
39
- [leadProps.aiScan]: { cellTemplate: AiScanWebsiteResultCellTemplate },
40
- };
41
- defaultConfig.tableConfig.multiSelect = true;
42
- return defaultConfig;
43
- }
44
- function getGooglePlaceResourceListConfig(defaultConfig) {
45
- defaultConfig.filtersTableInBetweenContainer = [
46
- <GooglePlaceActionDropdown actions={googlePlaceDropdownActions} key={getNewUuid()}/>,
47
- ];
48
- defaultConfig.tableConfig.columnConfigs = {
49
- [googlePlaceProps.businessInfo]: { cellTemplate: GooglePlaceBusinessInfoCellTemplate },
50
- [googlePlaceProps.emails]: { cellTemplate: GooglePlaceEmailsCellTemplate },
51
- };
52
- defaultConfig.tableConfig.multiSelect = true;
53
- return defaultConfig;
54
- }
55
- function getLeadGroupResourceListConfig(defaultConfig) {
56
- defaultConfig.tableConfig.customActions ??= [];
57
- defaultConfig.tableConfig.customActions.push({
58
- name: leadGroupCustomActionName,
59
- icon: iconNames.visibility,
60
- actionType: tableCustomActionTypes.icon,
61
- cellAction: viewRelatedLeads,
62
- });
63
- return defaultConfig;
64
- }
65
- function getPaymentPlanResourceListConfig(defaultConfig) {
66
- defaultConfig.tableConfig.editMode = resourceEditModes.simple;
67
- return defaultConfig;
68
- }
69
- function getUserResourceListConfig(defaultConfig) {
70
- defaultConfig.tableConfig.columnConfigs = { [userProps.lastLoginDate]: { isDateAsTimeAgo: true } };
71
- return defaultConfig;
72
- }
@@ -1,42 +0,0 @@
1
- "use client";
2
- import { FdDropdownMenu, FdDropdownMenuContent, FdDropdownMenuItem, FdDropdownMenuTrigger, } from "@fd-component-toolbox/dropdown-menu/FdDropdownMenu";
3
- import { FdIcon } from "@fd-component-toolbox/icon/FdIcon";
4
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
5
- import { createElement, Fragment, useContext, useState, useCallback } from "react";
6
- import { ResourceListContext } from "@meta/resource-list/ResourceList";
7
- import { Spinner } from "@fd-component-toolbox/spinner/Spinner";
8
- import { handleActionClick, handleDropdownOpenChange, } from "@/lm/google-place/action-dropdown/GooglePlaceActionDropdown.funcs";
9
- export function GooglePlaceActionDropdown({ actions }) {
10
- const resourceListContext = useContext(ResourceListContext);
11
- const [isMenuOpened, setIsMenuOpened] = useState(false);
12
- const [isHidden, setIsHidden] = useState(false);
13
- const [isLoading, setIsLoading] = useState(false);
14
- const onDropdownOpenChange = useCallback((open) => {
15
- handleDropdownOpenChange(open, setIsMenuOpened, setIsHidden);
16
- }, []);
17
- const onActionClick = useCallback(async (onClick) => {
18
- await handleActionClick({ onClick, setIsLoading, resourceListContext });
19
- }, [resourceListContext]);
20
- return (<FdDropdownMenu open={isMenuOpened} onOpenChange={onDropdownOpenChange}>
21
- <FdDropdownMenuTrigger asChild>
22
- <FdButton className="inline-flex w-fit items-center" variant="outline" size="default">
23
- {isLoading && <Spinner size="small" className="mr-2"/>}
24
- Actions
25
- </FdButton>
26
- </FdDropdownMenuTrigger>
27
- <FdDropdownMenuContent align="start" className={isHidden ? "hidden" : ""}>
28
- {actions.map(({ id, label, iconName, onClick, component }) => (<Fragment key={id}>
29
- {component ? (createElement(component, {
30
- label,
31
- iconName,
32
- setIsMenuOpened,
33
- setIsHidden,
34
- setIsLoading,
35
- })) : (<FdDropdownMenuItem className="flex w-full cursor-pointer justify-start gap-2" onClick={() => onActionClick(onClick)}>
36
- {iconName && <FdIcon name={iconName}/>}
37
- {label}
38
- </FdDropdownMenuItem>)}
39
- </Fragment>))}
40
- </FdDropdownMenuContent>
41
- </FdDropdownMenu>);
42
- }
@@ -1,22 +0,0 @@
1
- "use client";
2
- import { FdIcon } from "@fd-component-toolbox/icon/FdIcon";
3
- import { ResourceListContext } from "@meta/resource-list/ResourceList";
4
- import { useContext, useState } from "react";
5
- import { FdBrowserDialog } from "@meta/browsers/browser/browser-dialog/FdBrowserDialog";
6
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
7
- import { handleCloseBrowserDialog, loadMeta, } from "@/lm/google-place/actions/GooglePlaceSaveToGroupAction.funcs";
8
- import { FdDropdownMenuItem } from "@fd-component-toolbox/dropdown-menu/FdDropdownMenu";
9
- export function GooglePlaceSaveToGroupAction({ label, iconName, setIsMenuOpened, setIsHidden, setIsLoading, }) {
10
- const [relatedResourcePropertyMeta, setRelatedResourcePropertyMeta] = useState();
11
- const resourceListContext = useContext(ResourceListContext) ?? undefined;
12
- useAsyncEffect(async () => {
13
- loadMeta(setRelatedResourcePropertyMeta);
14
- }, []);
15
- if (!relatedResourcePropertyMeta) {
16
- return null;
17
- }
18
- return (<FdBrowserDialog trigger={<FdDropdownMenuItem className="flex w-full cursor-pointer justify-start gap-2" onSelect={(event) => event.preventDefault()} onClick={() => setIsHidden(true)}>
19
- {iconName && <FdIcon name={iconName}/>}
20
- {label}
21
- </FdDropdownMenuItem>} currentResourceId={relatedResourcePropertyMeta.id} propertyMeta={relatedResourcePropertyMeta} closeDialog={(leadGroup) => handleCloseBrowserDialog(setIsLoading, setIsMenuOpened, leadGroup, resourceListContext)}/>);
22
- }
@@ -1,59 +0,0 @@
1
- "use client";
2
- import { LeadGooglePlaceInfo } from "@/lm/lead/lead-google-place/LeadGooglePlaceInfo";
3
- import { LeadGooglePlaceIndicators } from "@/lm/lead/lead-google-place/LeadGooglePlaceIndicators";
4
- import { LeadGooglePlaceIndicator } from "@/lm/lead/lead-google-place/LeadGooglePlaceIndicator";
5
- import { iconNames } from "@fd-component-toolbox/icon/FdIcon";
6
- import { lmTooltipLabels } from "@/lm/constants/lm-tooltip-labels";
7
- import { FdWebsiteScanResult } from "@client/website-scan/FdWebsiteScanResult";
8
- export function GooglePlaceBusinessInfoCellTemplate({ resource }) {
9
- return (<div className="flex flex-col gap-3">
10
- <LeadGooglePlaceInfo resource={resource}/>
11
- <LeadGooglePlaceIndicators indicators={[
12
- {
13
- content: (<LeadGooglePlaceIndicator icon={iconNames.fileText} isActive={!!resource.description}/>),
14
- tooltip: (<p>
15
- {resource.description
16
- ? `${lmTooltipLabels.description}: ${resource.description}`
17
- : `${lmTooltipLabels.hasNo} ${lmTooltipLabels.description}`}
18
- </p>),
19
- },
20
- {
21
- content: (<LeadGooglePlaceIndicator icon={iconNames.clock} isActive={!!resource.workingHours}/>),
22
- tooltip: !resource.workingHours ? (<p>{`${lmTooltipLabels.hasNo} ${lmTooltipLabels.workingHours}`}</p>) : (<div className="flex flex-col gap-1">
23
- {resource.workingHours.split(",").map((value) => (<p key={value}>{value}</p>))}
24
- </div>),
25
- },
26
- {
27
- content: (<LeadGooglePlaceIndicator icon={iconNames.image} isActive={resource.numberOfImages !== undefined && resource.numberOfImages > 0}>
28
- {resource.numberOfImages}
29
- </LeadGooglePlaceIndicator>),
30
- tooltip: (<p>
31
- {resource.numberOfImages
32
- ? `${lmTooltipLabels.numberOfImages}: ${resource.numberOfImages}`
33
- : `${lmTooltipLabels.hasNo} ${lmTooltipLabels.images}`}
34
- </p>),
35
- },
36
- {
37
- content: (<LeadGooglePlaceIndicator icon={iconNames.camera} isActive={resource.numberOfVideos !== undefined && resource.numberOfVideos > 0}>
38
- {resource.numberOfVideos}
39
- </LeadGooglePlaceIndicator>),
40
- tooltip: (<p>
41
- {resource.numberOfVideos
42
- ? `${lmTooltipLabels.numberOfVideos}: ${resource.numberOfVideos}`
43
- : `${lmTooltipLabels.hasNo} ${lmTooltipLabels.videos}`}
44
- </p>),
45
- },
46
- {
47
- content: (<LeadGooglePlaceIndicator icon={iconNames.pencil2} isActive={resource.numberOfPosts !== undefined && resource.numberOfPosts > 0}>
48
- {resource.numberOfPosts}
49
- </LeadGooglePlaceIndicator>),
50
- tooltip: (<p>
51
- {resource.numberOfPosts
52
- ? `${lmTooltipLabels.numberOfPosts}: ${resource.numberOfPosts}`
53
- : `${lmTooltipLabels.hasNo} ${lmTooltipLabels.posts}`}
54
- </p>),
55
- },
56
- ]}/>
57
- {resource.websiteScanResult && (<FdWebsiteScanResult websiteScanResult={resource.websiteScanResult}/>)}
58
- </div>);
59
- }
@@ -1,34 +0,0 @@
1
- "use client";
2
- import { useEffect, useState } from "react";
3
- import { FdMultiselect, FdMultiselectTrigger, FdMultiselectInput, FdMultiselectContent, FdMultiselectList, FdMultiselectItem, } from "@fd-component-toolbox/multiselect/FdMultiselect";
4
- import { FdFadeOutText } from "@fd-component-toolbox/fade-out-text/FdFadeOutText";
5
- import { syncEmailsFromResource } from "@/lm/google-place/cell-templates/GooglePlaceEmailsCellTemplate.funcs";
6
- export function GooglePlaceEmailsCellTemplate({ resource }) {
7
- const [emails, setEmails] = useState();
8
- const [selectedEmails, setSelectedEmails] = useState([]);
9
- useEffect(() => {
10
- syncEmailsFromResource(setEmails, setSelectedEmails, resource);
11
- }, [resource]);
12
- if (!emails)
13
- return null;
14
- const emailsMap = new Map();
15
- for (const email of emails) {
16
- emailsMap.set(email, email);
17
- }
18
- return (<div>
19
- {emails.length === 1 ? (<FdFadeOutText>
20
- <p>{emails[0]}</p>
21
- </FdFadeOutText>) : (<FdMultiselect values={selectedEmails} onValuesChange={setSelectedEmails} disabled={false} displayValues={emailsMap} variant="float" withSelectAll>
22
- <FdMultiselectTrigger>
23
- <FdMultiselectInput className="mt-0 w-full"/>
24
- </FdMultiselectTrigger>
25
- <FdMultiselectContent className="absolute">
26
- <FdMultiselectList className="top-9 z-50">
27
- {emails.map((email) => (<FdMultiselectItem className="min-h-6 whitespace-nowrap" key={email} value={email}>
28
- {email}
29
- </FdMultiselectItem>))}
30
- </FdMultiselectList>
31
- </FdMultiselectContent>
32
- </FdMultiselect>)}
33
- </div>);
34
- }
@@ -1,15 +0,0 @@
1
- import { FdIcon } from "@fd-component-toolbox/icon/FdIcon";
2
- import { useCallback, useContext } from "react";
3
- import { FdDropdownMenuItem } from "@fd-component-toolbox/dropdown-menu/FdDropdownMenu";
4
- import { handleGooglePlaceScan } from "@/lm/google-place/cell-templates/GooglePlaceScanAction.funcs";
5
- import { ResourceListContext } from "@meta/resource-list/ResourceList";
6
- export function GooglePlaceScanAction({ label, iconName, setIsLoading }) {
7
- const resourceListContext = useContext(ResourceListContext) ?? undefined;
8
- const onScan = useCallback(async () => {
9
- handleGooglePlaceScan(setIsLoading, resourceListContext ?? undefined);
10
- }, [setIsLoading, resourceListContext]);
11
- return (<FdDropdownMenuItem className="flex w-full cursor-pointer justify-start gap-2" onClick={onScan}>
12
- {iconName && <FdIcon name={iconName}/>}
13
- {label}
14
- </FdDropdownMenuItem>);
15
- }