@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,65 +0,0 @@
1
- import { resourceNames } from "@fd-toolbox/resources/resource-names";
2
- import { fetchResourceMeta } from "@meta/meta-providers";
3
- import { fetchResources } from "@meta/resource-providers";
4
- const intersectionObserverThreshold = 0.9;
5
- /** Docs (temp) */
6
- export async function initFeed(setFeedEntries, setComments, pageSize, setIsFetching) {
7
- const feedMeta = await fetchResourceMeta(resourceNames.feedEntry);
8
- const odataConfig = { top: pageSize, expands: [resourceNames.user] };
9
- if (feedMeta) {
10
- setIsFetching(true);
11
- const feedEntries = await fetchResources(feedMeta.resourceName, odataConfig);
12
- setIsFetching(false);
13
- if (feedEntries)
14
- setFeedEntries(feedEntries);
15
- setComments(["", ""]);
16
- }
17
- }
18
- export async function fetchNextFeedEntries(fetchSize, currentLength) {
19
- const odataConfig = {
20
- top: fetchSize,
21
- skip: currentLength,
22
- expands: [resourceNames.user],
23
- };
24
- const feedMeta = await fetchResourceMeta(resourceNames.feedEntry);
25
- if (feedMeta) {
26
- const entries = await fetchResources(feedMeta.resourceName, odataConfig);
27
- if (entries)
28
- return entries;
29
- }
30
- return [];
31
- }
32
- export async function fetchFeedMoreEntries(hasMore, fdFeedEntries, postsPerFetch, setFdFeedEntries, setHasMore) {
33
- if (!hasMore)
34
- return;
35
- if (fdFeedEntries.length === 0)
36
- return;
37
- const newEntries = await fetchNextFeedEntries(postsPerFetch, fdFeedEntries.length);
38
- if (newEntries.length > 0) {
39
- setFdFeedEntries([...fdFeedEntries, ...newEntries]);
40
- setHasMore(true);
41
- }
42
- else {
43
- setHasMore(false);
44
- }
45
- }
46
- export function createFeedIntersectionObserver(isFetching, setIsFetching, hasMore, fdFeedEntries, postsPerFetch, setFeedEntries, setHasMore) {
47
- const observer = new IntersectionObserver(([entry]) => {
48
- if (entry.isIntersecting && !isFetching) {
49
- setIsFetching(true);
50
- fetchFeedMoreEntries(hasMore, fdFeedEntries, postsPerFetch, setFeedEntries, setHasMore).finally(() => {
51
- setIsFetching(false);
52
- });
53
- }
54
- }, { threshold: intersectionObserverThreshold });
55
- return observer;
56
- }
57
- export function observerFeed(hasMore, isFetching, setIsFetching, fdFeedEntries, postsPerFetch, setFdFeedEntries, setHasMore, observerRef) {
58
- let result;
59
- if (!observerRef || !hasMore)
60
- return result;
61
- const observer = createFeedIntersectionObserver(isFetching, setIsFetching, hasMore, fdFeedEntries, postsPerFetch, setFdFeedEntries, setHasMore);
62
- observer.observe(observerRef);
63
- result = () => observer.disconnect();
64
- return result;
65
- }
@@ -1,34 +0,0 @@
1
- "use client";
2
- import { useEffect, useRef, useState } from "react";
3
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
4
- import { FdFeedEntry } from "@client/components/feed/FdFeedEntry";
5
- import { FdFrameworkImage } from "@fd-component-toolbox/client/framework";
6
- import { initFeed, observerFeed } from "@client/components/feed/FdFeed.funcs";
7
- const postsPerFetch = 5;
8
- /**
9
- * A feed component that displays a list of {@link FeedEntry} items with infinite scroll support.
10
- * Initially fetches a limited number of entries, then loads more as the user scrolls.
11
- * Uses {@link initFeed} to load the first set of entries and their comments.
12
- */
13
- export function FdFeed() {
14
- const [fdFeedEntries, setFdFeedEntries] = useState([]);
15
- const [comments, setComments] = useState([]);
16
- const [hasMore, setHasMore] = useState(true);
17
- const observerRef = useRef(null);
18
- const [isFetching, setIsFetching] = useState(false);
19
- useAsyncEffect(async () => {
20
- await initFeed(setFdFeedEntries, setComments, postsPerFetch, setIsFetching);
21
- }, []);
22
- useEffect(() => {
23
- observerFeed(hasMore, isFetching, setIsFetching, fdFeedEntries, postsPerFetch, setFdFeedEntries, setHasMore, observerRef?.current ?? undefined);
24
- }, [isFetching, hasMore, fdFeedEntries]);
25
- return (<div>
26
- {fdFeedEntries?.map((entry) => (<FdFeedEntry key={entry.id} fdFeedEntry={entry} comments={comments}/>))}
27
-
28
- {hasMore ? (<div ref={observerRef} className="flex h-20 w-full items-center justify-center bg-transparent">
29
- <FdFrameworkImage src="/logo.svg" alt="Logo" layout="intrinsic" width={100} height={100} priority className="size-10 animate-pulse"/>
30
- </div>) : (<div className="mx-auto w-full max-w-xl text-center text-sm text-muted-foreground">
31
- No more posts left.
32
- </div>)}
33
- </div>);
34
- }
@@ -1,15 +0,0 @@
1
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
2
- import { FdIcon, iconNames, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
3
- export function FeedEntryActions({ onComment }) {
4
- return (<div className="flex flex-wrap items-center justify-between px-2 py-1 sm:px-4 sm:py-2">
5
- <FdButton variant="ghost" onClick={onComment} className="flex flex-1 items-center justify-center gap-2 rounded-lg px-3 py-2 text-muted-foreground transition-colors hover:bg-accent sm:flex-none sm:px-4">
6
- <FdIcon name={iconNames.chatBubbleIcon} size={iconSizes.medium}/>
7
- <span className="hidden font-medium sm:inline">Comments</span>
8
- </FdButton>
9
-
10
- <FdButton variant="ghost" className="flex flex-1 items-center justify-center gap-2 rounded-lg px-3 py-2 text-muted-foreground transition-colors hover:bg-accent sm:flex-none sm:px-4">
11
- <FdIcon name={iconNames.share1Icon} size={iconSizes.medium}/>
12
- <span className="hidden font-medium sm:inline">Share</span>
13
- </FdButton>
14
- </div>);
15
- }
@@ -1,6 +0,0 @@
1
- import React from "react";
2
- export function FdFeedComments({ postId }) {
3
- return (<div className="border-t border-border p-4 text-center text-muted-foreground">
4
- There you will see comments soon. Currently, comments are not implemented. PostId: {postId}
5
- </div>);
6
- }
@@ -1,36 +0,0 @@
1
- import React, { useState } from "react";
2
- import { FdFeedHeader } from "@client/components/feed/FdFeedHeader";
3
- import { FeedEntryActions } from "@client/components/feed/FdFeedActions";
4
- import { FdFeedReactionsSummary } from "@client/components/feed/FdFeedReactionsSummary";
5
- import { FdFeedComments } from "@client/components/feed/FdFeedComments";
6
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
7
- import { FdImage } from "@fd-component-toolbox/image/FdImage";
8
- import { formatUserFrendlyRelativeTime, parseToUtc } from "@fd-toolbox/dates/date-times";
9
- export function FdFeedEntry({ fdFeedEntry, comments }) {
10
- const [expanded, setExpanded] = useState(false);
11
- const [showComments, setShowComments] = useState(false);
12
- const shouldTruncate = fdFeedEntry.textContent.length > 250;
13
- const displayText = shouldTruncate && !expanded ? `${fdFeedEntry.textContent.slice(0, 250)}...` : fdFeedEntry.textContent;
14
- return (<div className="mx-auto w-full max-w-xl rounded-xl bg-background shadow-sm transition-all duration-200 hover:shadow-md sm:my-4">
15
- <FdFeedHeader authorName={`${fdFeedEntry.user.firstName} ${fdFeedEntry.user.lastName}`} timestamp={formatUserFrendlyRelativeTime(parseToUtc(fdFeedEntry.createdDate))} avatarUrl={fdFeedEntry.user.imageUrl}/>
16
-
17
- <div className="px-4 pb-3">
18
- <p className="break-words leading-relaxed text-foreground">
19
- {displayText}
20
- {shouldTruncate && (<FdButton variant={"ghost"} onClick={() => setExpanded(!expanded)} className="p-0 ps-1 text-muted-foreground hover:bg-transparent">
21
- {expanded ? "See less" : "See more"}
22
- </FdButton>)}
23
- </p>
24
- </div>
25
-
26
- {fdFeedEntry.imageUrl && (<div className="relative aspect-video w-full">
27
- <FdImage src={fdFeedEntry.imageUrl} alt={`Content from ${fdFeedEntry.user.firstName} ${fdFeedEntry.user.lastName}`} fill className="object-cover" sizes="(max-width: 37rem) 100vw, 37rem" priority={false}/>
28
- </div>)}
29
-
30
- <FdFeedReactionsSummary commentCount={comments.length || 0}/>
31
-
32
- <FeedEntryActions onComment={() => setShowComments(!showComments)}/>
33
-
34
- {showComments && <FdFeedComments postId={fdFeedEntry.id}/>}
35
- </div>);
36
- }
@@ -1,23 +0,0 @@
1
- import React from "react";
2
- import { FdAvatar, FdAvatarFallback, FdAvatarImage } from "@fd-component-toolbox/avatar/FdAvatar";
3
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
4
- import { FdIcon, iconNames, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
5
- export function FdFeedHeader({ authorName, timestamp, avatarUrl }) {
6
- return (<div className="flex items-start justify-between p-3 sm:p-4">
7
- <div className="flex gap-2 sm:gap-3">
8
- <FdAvatar className="size-8 sm:size-10">
9
- <FdAvatarImage src={avatarUrl} alt={authorName}/>
10
- <FdAvatarFallback>{authorName[0]}</FdAvatarFallback>
11
- </FdAvatar>
12
- <div>
13
- <h3 className="text-sm font-semibold text-foreground sm:text-base">{authorName}</h3>
14
- <div className="flex items-center gap-1 text-xs text-muted-foreground sm:text-sm">
15
- <span>{timestamp}</span>
16
- </div>
17
- </div>
18
- </div>
19
- <FdButton variant="fullRounded">
20
- <FdIcon name={iconNames.dotsHorizontal} size={iconSizes.medium}/>
21
- </FdButton>
22
- </div>);
23
- }
@@ -1,16 +0,0 @@
1
- import { FdSeparator } from "@fd-component-toolbox/separator/FdSeparator";
2
- export function FdFeedReactionsSummary({ commentCount }) {
3
- const count = commentCount ?? 0;
4
- return (<>
5
- <div className="flex items-center justify-between px-3 py-1.5 sm:px-4 sm:py-2">
6
- <div className="flex items-center gap-1"></div>
7
- <div className="flex gap-3 text-xs text-muted-foreground sm:text-sm">
8
- {count > 0 && (<div className="flex items-center gap-1">
9
- <span>{count}</span>
10
- <span>comments</span>
11
- </div>)}
12
- </div>
13
- </div>
14
- <FdSeparator />
15
- </>);
16
- }
@@ -1,28 +0,0 @@
1
- "use client";
2
- import TitleProvider from "@fd-app-toolbox/layout/toolbar/title-provider/ToolbarTitleProvider";
3
- import { ThemeProvider } from "@fd-app-toolbox/providers/ThemeProvider/ThemeProvider";
4
- import { SaveCompleteProvider } from "@meta/edit-resource/SaveCompleteProvider";
5
- import { SearchDialogProvider } from "@fd-app-toolbox/search/search-dialog-provider";
6
- import { SidebarResourceProvider } from "@fd-app-toolbox/layout/sidebar/sidebar-resources-provider";
7
- import { FdGlobalContextProvider } from "@meta/providers/global-provider/FdGlobalContext";
8
- import { defaultGlobalConfig } from "@meta/providers/global-provider/default-config";
9
- import { AuthProvider } from "@fd-app-toolbox/providers/auth-provider/AuthProvider";
10
- import { FdSidebarProvider } from "@fd-app-toolbox/providers/sidebar-provider/FdSidebarContext";
11
- import { defaultAppTitle } from "@meta/page/title-context";
12
- export function FdProviders({ children, appTitle, globalConfig }) {
13
- return (<TitleProvider appTitle={appTitle ?? defaultAppTitle}>
14
- <ThemeProvider>
15
- <FdGlobalContextProvider config={globalConfig ?? defaultGlobalConfig}>
16
- <AuthProvider>
17
- <SaveCompleteProvider>
18
- <FdSidebarProvider>
19
- <SearchDialogProvider>
20
- <SidebarResourceProvider>{children}</SidebarResourceProvider>
21
- </SearchDialogProvider>
22
- </FdSidebarProvider>
23
- </SaveCompleteProvider>
24
- </AuthProvider>
25
- </FdGlobalContextProvider>
26
- </ThemeProvider>
27
- </TitleProvider>);
28
- }
@@ -1,163 +0,0 @@
1
- "use client";
2
- import React, { useCallback, useEffect, useMemo, useState } from "react";
3
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
4
- import { FdCard, FdCardFooter, FdCardTitle, FdCardContent, FdCardDescription, } from "@fd-component-toolbox/card/FdCard";
5
- import { FdDialog, FdDialogContent, FdDialogTitle } from "@fd-component-toolbox/dialog/FdDialog";
6
- import CheckoutForm from "@client/payments/checkout-form/CheckoutForm";
7
- import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
8
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
9
- import { isBasicPlan, getButtonText, onRefreshPricings, handlePlanAction, getAdditionalInfo, getPricingText, getPricingDescripion, isActivePricing, getFeaturesByPlan, getButtonId, updateSubscription, canUpdateSubscription, cancelSubscription, getPaymentPlanId, capitalizeFirstLetter, handleCheckoutSuccess, } from "@client/components/subscription-plan/FdSubscriptionPlan.funcs";
10
- import { dateToISOString } from "@fd-toolbox/dates/date-times";
11
- import { FdSwitch } from "@fd-component-toolbox/switch/FdSwitch";
12
- import { useSetTitle } from "@meta/page/use-set-title";
13
- import { billingIntervals, subscriptionStatuses, } from "@meta/core/resources/enums/payment-enums";
14
- import { subscriptionMessages } from "@fd-toolbox-core/constants/subscription-messages";
15
- import { cn } from "@fd-toolbox/lib/utils";
16
- import { resourceNames } from "@fd-toolbox/resources/resource-names";
17
- import { YesOrNoDialog } from "@fd-component-toolbox/dialog/YesOrNoDialog";
18
- import { goBack } from "@fd-toolbox/routing/routers";
19
- import { elements } from "@fd-toolbox/constants/elements";
20
- import { hasScheduledCancelation } from "@client/components/subscription-plan/subscriptions";
21
- import { useFdRouter } from "@meta/client/framework/hooks";
22
- /**
23
- * Component for displaying and managing subscription plans.
24
- * Allows users to select, modify, or cancel subscriptions.
25
- *
26
- * @param props - See {@link FdSubscriptionPlanProps}
27
- */
28
- export function FdSubscriptionPlan({ config }) {
29
- const [isDialogOpen, setIsDialogOpen] = useState(false);
30
- const [selectedPlanPrice, setSelectedPlanPrice] = useState(0);
31
- const [selectedPricingId, setSelectedPricingId] = useState("");
32
- const [isSubmittingForm, setIsSubmittingForm] = useState(false);
33
- const [pricings, setPricings] = useState([]);
34
- const [refreshPricingsTrigger, setRefreshPricingsTrigger] = useState(0);
35
- const [isCanceling, setIsCanceling] = useState(false);
36
- const [activeSubscription, setActiveSubscription] = useState();
37
- const [selectedBillingInterval, setSelectedBillingInterval] = useState(billingIntervals.month);
38
- const [paymentPlanFeature, setPaymentPlanFeature] = useState([]);
39
- const router = useFdRouter();
40
- const filteredPricings = useMemo(() => pricings.filter((pricing) => pricing.billingInterval === selectedBillingInterval), [pricings, selectedBillingInterval]);
41
- useSetTitle(resourceNames.paymentPlan);
42
- useAsyncEffect(async () => {
43
- await onRefreshPricings(isCanceling, setIsCanceling, setActiveSubscription, setPricings, setPaymentPlanFeature, config?.excludePricingIds);
44
- }, [refreshPricingsTrigger]);
45
- useEffect(() => {
46
- if (isCanceling) {
47
- document.body.style.cursor = "progress";
48
- }
49
- else {
50
- document.body.style.cursor = "default";
51
- }
52
- }, [isCanceling]);
53
- function refreshPricingsData() {
54
- setRefreshPricingsTrigger((prev) => prev + 1);
55
- }
56
- const onSuccessSubmitingCheckoutForm = useCallback(() => {
57
- handleCheckoutSuccess(setIsDialogOpen, refreshPricingsData);
58
- }, []);
59
- const onManagePricingAction = useCallback(async (pricing) => {
60
- handlePlanAction(pricing, isDialogOpen, refreshPricingsTrigger, setIsDialogOpen, setIsCanceling, setRefreshPricingsTrigger, setSelectedPlanPrice, setSelectedPricingId, activeSubscription, config, router);
61
- }, [
62
- isDialogOpen,
63
- refreshPricingsTrigger,
64
- setIsDialogOpen,
65
- setIsCanceling,
66
- setRefreshPricingsTrigger,
67
- setSelectedPlanPrice,
68
- setSelectedPricingId,
69
- activeSubscription,
70
- config,
71
- router,
72
- ]);
73
- const onUpdateSubscription = useCallback(async (dialogResult, pricing) => {
74
- if (dialogResult && activeSubscription)
75
- if (activeSubscription.pricingId === pricing.id) {
76
- await cancelSubscription(activeSubscription.id);
77
- refreshPricingsData();
78
- }
79
- else {
80
- await updateSubscription(activeSubscription, pricing, refreshPricingsData);
81
- }
82
- }, [activeSubscription]);
83
- const featuresByPlan = useMemo(() => {
84
- return getFeaturesByPlan(paymentPlanFeature.map((f) => ({
85
- ...f,
86
- featureName: f.feature?.name ?? "",
87
- })));
88
- }, [paymentPlanFeature]);
89
- const onBillingIntervalChange = useCallback(() => {
90
- setSelectedBillingInterval((prev) => prev === billingIntervals.year ? billingIntervals.month : billingIntervals.year);
91
- }, []);
92
- return (<div className="flex flex-col justify-center py-6 xl:px-4">
93
- <p className="mb-4 mt-2 text-center text-muted-foreground">{subscriptionMessages.pricingIntro}</p>
94
- <div className="flex items-center justify-center">
95
- <div className="absolute left-0 top-0 z-50 items-start justify-start gap-2 md:left-14">
96
- <FdButton id={elements.paymentPlan.backButton} variant="ghost" size="default" onClick={goBack} tooltipText="Go back" tooltipClassName="mt-2">
97
- <FdIcon name={iconNames.arrowLeft} className="mr-2"/>
98
- Back
99
- </FdButton>
100
- </div>
101
- <p className="pointer-events-none pr-3 text-sm font-medium leading-none peer-disabled:cursor-not-allowed">
102
- {subscriptionMessages.pricePerMonth}
103
- </p>
104
- <FdSwitch text={subscriptionMessages.pricePerYear} checked={selectedBillingInterval === billingIntervals.year} onCheckedChange={onBillingIntervalChange} name="subscriptionTypeSwitcher"/>
105
- </div>
106
- {!!filteredPricings.length && (<div className="mx-auto flex flex-col items-center justify-center gap-4 sm:mx-0 lg:flex-row lg:items-stretch">
107
- {filteredPricings.map((pricing) => {
108
- const isActive = isActivePricing(pricing, activeSubscription?.pricing, activeSubscription?.pendingPricingId);
109
- const plan = pricing.paymentPlan;
110
- const additionalInfo = getAdditionalInfo(pricing, activeSubscription);
111
- return (plan && (<FdCard key={pricing.id} className={cn("relative mt-4 flex w-full flex-col items-center gap-2 rounded-3xl p-4 sm:max-w-2xl lg:max-w-md", isActive && "border-4 border-primary")} id={getPaymentPlanId(plan.name, pricing.billingInterval)}>
112
- {additionalInfo && additionalInfo.shouldShowAdditionalInfo && (<div className="absolute right-4 top-6 flex size-28 flex-col items-center justify-center rounded-full bg-primary p-2 text-sm text-primary-foreground">
113
- <p>{additionalInfo.infoText}</p>
114
- <time className="text-xs">
115
- {additionalInfo.infoDate &&
116
- dateToISOString(additionalInfo.infoDate.toString())}
117
- </time>
118
- </div>)}
119
- <FdCardTitle className="w-full text-left font-semibold">
120
- {capitalizeFirstLetter(plan.name)}
121
- </FdCardTitle>
122
- <FdCardDescription className={cn("mt-8 w-full text-left text-3xl font-semibold text-primary", plan.isContactUs && "text-center text-base xl:text-xl")}>
123
- {getPricingText(pricing, plan.pricingDescription)}
124
- </FdCardDescription>
125
- <p className="w-full text-left text-sm">
126
- {getPricingDescripion(pricing)}
127
- </p>
128
- <FdCardContent className="mt-2 w-full grow pl-0">
129
- <span className="text-sm font-semibold">{plan.description}</span>
130
- <ul className="mt-2 space-y-2">
131
- {(featuresByPlan[pricing.paymentPlanId] || []).map((featureName) => (<li key={featureName} className="flex items-start">
132
- <FdIcon name={iconNames.check} className="mr-2 mt-1 shrink-0 self-start"/>
133
- <span className="text-sm">{featureName}</span>
134
- </li>))}
135
- </ul>
136
- </FdCardContent>
137
- <FdCardFooter className="flex w-full flex-col pb-0">
138
- {!isBasicPlan(plan) &&
139
- (canUpdateSubscription(pricing.id, activeSubscription) &&
140
- !plan.isContactUs ? (<YesOrNoDialog triggerCssClass="w-full" title={activeSubscription?.status ===
141
- subscriptionStatuses.trialing
142
- ? subscriptionMessages.trialDIalogTitle
143
- : subscriptionMessages.dialogTitle} onResponse={(dialogResult) => onUpdateSubscription(dialogResult, pricing)} trigger={<FdButton size="default" className="w-full" id={getButtonId(plan.name)} disabled={hasScheduledCancelation(activeSubscription, pricing.id)}>
144
- {getButtonText(pricing, activeSubscription)}
145
- </FdButton>} isDisabled={hasScheduledCancelation(activeSubscription, pricing.id)}/>) : (<FdButton onClick={() => onManagePricingAction(pricing)} size="default" className="w-full" id={getButtonId(plan.name)} disabled={hasScheduledCancelation(activeSubscription, pricing.id)}>
146
- {getButtonText(pricing, activeSubscription)}
147
- </FdButton>))}
148
- </FdCardFooter>
149
- </FdCard>));
150
- })}
151
- <FdDialog open={isDialogOpen} onOpenChange={setIsDialogOpen}>
152
- <FdDialogContent isCloseButtonShown={!isSubmittingForm} className="flex w-full min-w-96 flex-col justify-center gap-0" onEscapeKeyDown={isSubmittingForm ? (event) => event.preventDefault() : undefined} onInteractOutside={isSubmittingForm ? (event) => event.preventDefault() : undefined}>
153
- <FdDialogTitle className="mt-8 text-center font-semibold leading-none">
154
- {subscriptionMessages.enterPaymentDetails}
155
- </FdDialogTitle>
156
- <div>
157
- <CheckoutForm price={selectedPlanPrice} pricingId={selectedPricingId} onSubmitting={setIsSubmittingForm} onSubmitSuccess={onSuccessSubmitingCheckoutForm}/>
158
- </div>
159
- </FdDialogContent>
160
- </FdDialog>
161
- </div>)}
162
- </div>);
163
- }
@@ -1,45 +0,0 @@
1
- "use client";
2
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
3
- import { FdWizardStepper } from "@client/components/wizard/FdWizardStepper";
4
- import { useMemo } from "react";
5
- import { cn } from "@fd-toolbox/lib/utils";
6
- import { getBackButtonId, getNextButtonId, getSubmitButtonId, isNextButtonVisible, } from "@client/components/wizard/FdWizard.funcs";
7
- /**
8
- * A multi-step wizard component that guides users through a series of steps.
9
- * Displays a stepper, content for the current step, and navigation buttons (Back, Next, Submit).
10
- *
11
- * @param props - {@link FdWizardProps}
12
- */
13
- export function FdWizard({ config, onNextClick, onBackClick, currentStep, children, disableButton, isSubmitting, showSubmitButton, onSubmit, }) {
14
- const nextBtnClass = useMemo(() => {
15
- return !isNextButtonVisible(config.steps.length - 1, currentStep) ? "invisible" : "";
16
- }, [config.steps, currentStep]);
17
- const childrenClass = useMemo(() => {
18
- return currentStep === 3 ? "min-h-60" : "min-h-10";
19
- }, [currentStep]);
20
- return (<div className="flex w-full flex-col items-center gap-4">
21
- <FdWizardStepper steps={config.steps} currentStep={currentStep}/>
22
- <div className={cn("w-full max-w-4xl", childrenClass)}>{children}</div>
23
- <div className="mt-2 flex w-full max-w-4xl justify-end gap-2">
24
- <FdButton id={getBackButtonId(currentStep)} variant="outline" onClick={onBackClick}>
25
- Back
26
- </FdButton>
27
- {showSubmitButton && currentStep < config.steps.length - 1 && (<FdButton id={getSubmitButtonId(currentStep)} className={nextBtnClass} onClick={onSubmit} disabled={disableButton}>
28
- {isSubmitting ? (<div className="flex">
29
- <div className="mr-2 size-4 animate-spin rounded-full border-2 border-inherit border-r-transparent"/>
30
- Submitting...
31
- </div>) : (<>Submit</>)}
32
- </FdButton>)}
33
- {currentStep < config.steps.length - 1 || !config.customActions ? (<FdButton id={getNextButtonId(currentStep)} className={nextBtnClass} onClick={onNextClick} disabled={disableButton}>
34
- {currentStep < config.steps.length - 1 ? (<>Next</>) : (<div>
35
- {isSubmitting ? (<div className="flex">
36
- <div className="mr-2 size-4 animate-spin rounded-full border-2 border-inherit border-r-transparent"/>
37
- Submitting...
38
- </div>) : (<>Submit</>)}
39
- </div>)}
40
- </FdButton>) : (config.customActions.map((customAction) => (<FdButton key={customAction.name} variant={customAction.buttonVariant} onClick={customAction.action}>
41
- {customAction.name}
42
- </FdButton>)))}
43
- </div>
44
- </div>);
45
- }
@@ -1,55 +0,0 @@
1
- "use client";
2
- import { useEffect, useState, Fragment } from "react";
3
- import { FdFrameworkImage } from "@fd-component-toolbox/client/framework";
4
- import { FdSeparator } from "@fd-component-toolbox/separator/FdSeparator";
5
- import { FdIcon, iconNames, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
6
- import { cn } from "@fd-toolbox/lib/utils";
7
- import { getVisibleSteps, isMobileChecker, getWizardStepperBackgroundClass, } from "@client/components/wizard/FdWizardStepper.funcs";
8
- /**
9
- * A visual stepper component for guiding users through multi-step wizard flows.
10
- *
11
- * @param props - {@link FdWizardStepperProps}
12
- */
13
- export function FdWizardStepper({ steps, currentStep }) {
14
- const [isMobile, setIsMobile] = useState(false);
15
- const { visibleSteps, adjustedCurrentStep } = getVisibleSteps(steps, currentStep);
16
- useEffect(() => {
17
- isMobileChecker(setIsMobile);
18
- }, []);
19
- const isCompletedStep = (index) => {
20
- return index < (isMobile ? adjustedCurrentStep : currentStep);
21
- };
22
- const getStepBackgroundClass = (index) => {
23
- return getWizardStepperBackgroundClass(index, isMobile, currentStep, adjustedCurrentStep);
24
- };
25
- const renderStepContent = (step, index) => {
26
- if (isCompletedStep(index)) {
27
- return <FdIcon name={iconNames.check} size={iconSizes.large} color="text-background"/>;
28
- }
29
- if (step.imageUrl) {
30
- return (<FdFrameworkImage src={step.imageUrl} fill alt={`step-${index + 1}-${step.description}`} sizes={"20rem"} className="object-cover"/>);
31
- }
32
- return (<p className="text-sm text-background md:text-base">
33
- {isMobile ? steps.indexOf(step) + 1 : index + 1}
34
- </p>);
35
- };
36
- return (<div className="mb-11 w-full px-2">
37
- <div className="flex w-full items-center gap-5">
38
- {(isMobile ? visibleSteps : steps).map((step, index) => (<Fragment key={step.description}>
39
- {index > 0 && (<div className="w-full min-w-8 xl:min-w-32">
40
- <FdSeparator />
41
- </div>)}
42
- <div className="relative flex flex-col items-center">
43
- <div className={cn("flex size-11 items-center justify-center overflow-hidden rounded-full sm:size-14", getStepBackgroundClass(index))}>
44
- {renderStepContent(step, index)}
45
- </div>
46
- <div className="absolute top-12 mt-2 max-w-40 sm:top-14">
47
- <div className="text-center text-sm text-subtle-500 md:text-base">
48
- {step.description}
49
- </div>
50
- </div>
51
- </div>
52
- </Fragment>))}
53
- </div>
54
- </div>);
55
- }
@@ -1,46 +0,0 @@
1
- "use client";
2
- import React, { Fragment, useState, useEffect, useRef } from "react";
3
- import FdDynamicLayoutDragAndDrop from "@fd-component-toolbox/dynamic-layout/FdDynamicLayoutDragAndDrop";
4
- import FdDynamicComponent from "@fd-component-toolbox/dynamic-layout/FdDynamicComponent";
5
- import ReportChart from "@fd-app-toolbox/report/ReportChart";
6
- import { FdCardBigDigits } from "@fd-component-toolbox/card/FdCardBigDigits";
7
- import { goBack } from "@fd-toolbox/routing/routers";
8
- import { reportTypes } from "@fd-app-toolbox/reports/report-enums";
9
- import { FdSubHeading } from "@fd-component-toolbox/subheading/FdSubHeading";
10
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
11
- import { FdIcon, iconNames, iconSizes } from "@fd-component-toolbox/icon/FdIcon";
12
- import { useSetTitle } from "@meta/page/use-set-title";
13
- import { dashboardLayoutConfig, onInitDashboardPage } from "@client/pages/dashboard-page/dashboardPage.funcs";
14
- const pageTitle = "Dashboard";
15
- export default function DashboardPage() {
16
- const [reports, setReports] = useState([]);
17
- const [width, setWidth] = useState(window.innerWidth);
18
- const containerRef = useRef(null);
19
- useSetTitle(pageTitle);
20
- useEffect(() => {
21
- onInitDashboardPage(containerRef, setWidth, setReports);
22
- }, []);
23
- return (<div ref={containerRef} className="overflow-auto p-6">
24
- <div className="mb-4 flex items-center gap-1">
25
- <FdButton variant="ghost" size="icon" className="size-5">
26
- <FdIcon name={iconNames.arrowLeft} size={iconSizes.small} onClick={goBack}/>
27
- </FdButton>
28
- <FdSubHeading>Dashboards</FdSubHeading>
29
- </div>
30
- <div className="flex flex-col gap-2 p-2">
31
- <FdDynamicLayoutDragAndDrop componentClassName="bg-card shadow rounded-xl" columns={15}>
32
- {reports.map((report) => {
33
- return (<Fragment key={report.id}>
34
- <FdDynamicComponent key={report.id} defaultX={Math.max(0, Number(report.positionX))} defaultY={Math.max(0, Number(report.positionY))} defaultWidth={Math.max(0, width < dashboardLayoutConfig.breakpointWidth
35
- ? dashboardLayoutConfig.defaultWidth
36
- : Number(report.sizeX))} defaultHeight={Math.max(0, width < dashboardLayoutConfig.breakpointWidth
37
- ? dashboardLayoutConfig.defaultHeight
38
- : Number(report.sizeY))} minWidth={dashboardLayoutConfig.minWidth} minHeight={dashboardLayoutConfig.minHeight} id={report.id}>
39
- {report.report?.type === reportTypes.chart ? (<ReportChart reportId={report.reportId}/>) : (report.report?.type === reportTypes.number && (<FdCardBigDigits title={report.report.name} value={report.report.bigDigitValue} subtitle={report.report.description}/>))}
40
- </FdDynamicComponent>
41
- </Fragment>);
42
- })}
43
- </FdDynamicLayoutDragAndDrop>
44
- </div>
45
- </div>);
46
- }
@@ -1,22 +0,0 @@
1
- import React from "react";
2
- import FdDynamicLayoutDragAndDrop from "@fd-component-toolbox/dynamic-layout/FdDynamicLayoutDragAndDrop";
3
- import ReportChart from "@fd-app-toolbox/report/ReportChart";
4
- import { resourceNames } from "@fd-toolbox/resources/resource-names";
5
- import FdDynamicComponent from "@fd-component-toolbox/dynamic-layout/FdDynamicComponent";
6
- import { ResourceList } from "@meta/resource-list/ResourceList";
7
- async function DynamicLayoutPage() {
8
- return (<div className="px-40 py-20">
9
- <FdDynamicLayoutDragAndDrop componentClassName="bg-background shadow rounded-xl">
10
- <ReportChart reportId={"38bdb3b9-3ad2-4359-8e2b-4ea14b4d4367"}/>
11
- <ReportChart reportId={"38bdb3b9-3ad2-4359-8e2b-4ea14b4d4367"}/>
12
- <ReportChart reportId={"38bdb3b9-3ad2-4359-8e2b-4ea14b4d4367"}/>
13
- <FdDynamicComponent minWidth={2}>
14
- <div className="h-full overflow-y-auto">
15
- <ResourceList resourceName={resourceNames.contact}/>
16
- </div>
17
- </FdDynamicComponent>
18
- <div />
19
- </FdDynamicLayoutDragAndDrop>
20
- </div>);
21
- }
22
- export default DynamicLayoutPage;
@@ -1,8 +0,0 @@
1
- import React from "react";
2
- import EditPasswordForm from "@fd-app-toolbox/edit-password-form/EditPasswordForm";
3
- async function EditPasswordPage() {
4
- return (<main className="h-full">
5
- <EditPasswordForm />
6
- </main>);
7
- }
8
- export default EditPasswordPage;
@@ -1,14 +0,0 @@
1
- import { EditOtherUser } from "@fd-app-toolbox/edit-other-user/EditOtherUser";
2
- import { getUserDto } from "@server/users/user-manager";
3
- import { apiNotFoundError } from "@fd-toolbox/server/web/errors";
4
- import { responseMessages } from "@fd-toolbox/server/web/response-messages";
5
- export default async function EditUserByIdPage({ params }) {
6
- const { id } = await params;
7
- const userData = await getUserDto(id);
8
- if (!userData) {
9
- throw apiNotFoundError(responseMessages.notFoundError);
10
- }
11
- return (<main className="p-4">
12
- <EditOtherUser userId={id} userData={{ id: userData.id, email: userData.email }}/>
13
- </main>);
14
- }
@@ -1,6 +0,0 @@
1
- import { EditOtherUser } from "@fd-app-toolbox/edit-other-user/EditOtherUser";
2
- export default async function EditUserPage() {
3
- return (<main className="p-4">
4
- <EditOtherUser />
5
- </main>);
6
- }
@@ -1,8 +0,0 @@
1
- import { redirectFunction } from "@fd-toolbox/redirect/redirect-functions";
2
- import { FdFeed } from "@client/components/feed/FdFeed";
3
- import { isDev } from "@fd-toolbox/lib/environments";
4
- export default async function FeedPage() {
5
- if (isDev())
6
- await redirectFunction("/");
7
- return <FdFeed />;
8
- }
@@ -1,7 +0,0 @@
1
- "use client";
2
- import { FileUpload } from "@meta/components/file-upload/FileUpload";
3
- export default function FileUploadPage() {
4
- return (<div className="flex h-screen flex-col items-center justify-center gap-10 overflow-auto">
5
- <FileUpload allowMultiple/>
6
- </div>);
7
- }
@@ -1,8 +0,0 @@
1
- import React from "react";
2
- import ForgotPasswordForm from "@fd-app-toolbox/forgot-password-form/ForgotPasswordForm";
3
- async function ForgotPasswordPage() {
4
- return (<main>
5
- <ForgotPasswordForm />
6
- </main>);
7
- }
8
- export default ForgotPasswordPage;