@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,6 +0,0 @@
1
- import { LeadsView } from "@/lm/lead/view/LeadsView";
2
- export default async function LeadsViewPage() {
3
- return (<div className="flex min-h-screen flex-col items-center gap-10 overflow-auto p-10">
4
- <LeadsView />
5
- </div>);
6
- }
@@ -1,16 +0,0 @@
1
- "use client";
2
- import { useEffect, useMemo } from "react";
3
- import { useFdRouter, useFdSearchParams } from "@meta/client/framework/hooks";
4
- import { codeParam } from "@fd-toolbox/constants/auth-constants";
5
- import { setMicrosoftAuthParams } from "@fd-app-toolbox/login-form/microsoft-login";
6
- import { initMicrosoftPage } from "@client/pages/microsoft-page/MicrosoftPage.funcs";
7
- export default function MicrosoftPage() {
8
- const router = useFdRouter();
9
- const searchParams = useFdSearchParams();
10
- const code = searchParams?.get(codeParam) ?? undefined;
11
- const params = useMemo(() => setMicrosoftAuthParams(code), [code]);
12
- useEffect(() => {
13
- initMicrosoftPage(router, params);
14
- }, [code, params, router]);
15
- return null;
16
- }
@@ -1,18 +0,0 @@
1
- "use client";
2
- import { FdSubscriptionPlan } from "@client/components/subscription-plan/FdSubscriptionPlan";
3
- import { getSubscriptionPlanConfig } from "@client/components/subscription-plan/subscription-plan-config";
4
- import { useState } from "react";
5
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
6
- /**
7
- * Payment plan selection page for the user.
8
- * Loads the {@link SubscriptionPlanConfig} and displays the {@link FdSubscriptionPlan} component.
9
- */
10
- export default function PaymentPlanPage() {
11
- const [config, setConfig] = useState();
12
- useAsyncEffect(async () => {
13
- setConfig(await getSubscriptionPlanConfig());
14
- }, []);
15
- return (<main className="space-y-2 p-2">
16
- <FdSubscriptionPlan config={config}/>
17
- </main>);
18
- }
@@ -1,25 +0,0 @@
1
- "use client";
2
- import React, { useCallback, useEffect, useState } from "react";
3
- import { fetchDataFromAPI } from "@meta/preload/preload";
4
- function PreloadPage() {
5
- const [data, setData] = useState(null);
6
- const [error, setError] = useState("");
7
- const fetchAndSetData = useCallback(async () => {
8
- try {
9
- const fetchedData = await fetchDataFromAPI();
10
- setData(fetchedData);
11
- }
12
- catch (err) {
13
- setError("Failed to load data.");
14
- throw err;
15
- }
16
- }, []);
17
- useEffect(() => {
18
- fetchAndSetData();
19
- }, [fetchAndSetData]);
20
- return (<div>
21
- {data ? <pre>{JSON.stringify(data, null, 2)}</pre> : <p>Loading...</p>}
22
- {error && <p>Error: {error}</p>}
23
- </div>);
24
- }
25
- export default PreloadPage;
@@ -1,8 +0,0 @@
1
- import React from "react";
2
- import ResetPasswordForm from "@fd-app-toolbox/reset-password-form/ResetPasswordForm";
3
- async function ResetPasswordPage() {
4
- return (<main>
5
- <ResetPasswordForm />
6
- </main>);
7
- }
8
- export default ResetPasswordPage;
@@ -1,23 +0,0 @@
1
- "use client";
2
- import { FdImage } from "@fd-component-toolbox/image/FdImage";
3
- import { useCallback, useState } from "react";
4
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
5
- import { FdInput } from "@fd-component-toolbox/input/FdInput";
6
- import { onTakeScreenshot } from "@client/pages/screenshot-page/TestScreenshotPage.funcs";
7
- export default function TestScreenshotPage() {
8
- const [websiteUrl, setWebsiteUrl] = useState("");
9
- const [imageSrc, setImageSrc] = useState("");
10
- const onUrlChange = useCallback((value) => {
11
- setWebsiteUrl(value);
12
- }, []);
13
- const takeScreenshot = useCallback(async () => {
14
- onTakeScreenshot(websiteUrl, setImageSrc);
15
- }, [websiteUrl]);
16
- return (<div className="flex size-full flex-col items-center justify-center gap-5">
17
- <div className="flex gap-5">
18
- <FdInput value={websiteUrl} onChange={onUrlChange} variant="bordered"/>
19
- <FdButton onClick={takeScreenshot}>Take Screenshot</FdButton>
20
- </div>
21
- {imageSrc && (<FdImage src={imageSrc} width={500} height={500} alt="screenshot-result" className="object-contain"/>)}
22
- </div>);
23
- }
@@ -1,24 +0,0 @@
1
- "use client";
2
- import { LoginForm } from "@fd-app-toolbox/login-form/LoginForm";
3
- import { GoogleOAuthProvider } from "@react-oauth/google";
4
- import { envSettingKeys } from "@common/infra/env-setting-keys";
5
- import { getSetting } from "@fd-toolbox/lib/utils";
6
- import { getGoogleOAuthConfig } from "@fd-app-toolbox/login-form/google-login";
7
- import { getMicrosoftOAuthConfig } from "@fd-app-toolbox/login-form/microsoft-login";
8
- import { getFacebookOAuthConfig } from "@fd-app-toolbox/login-form/facebook-login";
9
- /**
10
- * Sign-in page for the user.
11
- * Displays the {@link LoginForm} component with OAuth login options.
12
- */
13
- export default function SignInPage() {
14
- const clientId = getSetting(envSettingKeys.googleClientId);
15
- return (<GoogleOAuthProvider clientId={clientId}>
16
- <main>
17
- <LoginForm oAuthLoginConfigs={[
18
- getGoogleOAuthConfig(),
19
- getMicrosoftOAuthConfig(),
20
- getFacebookOAuthConfig(),
21
- ]} hideSignUpLink={true}/>
22
- </main>
23
- </GoogleOAuthProvider>);
24
- }
@@ -1,9 +0,0 @@
1
- import RegisterForm from "@fd-app-toolbox/register-form/RegisterForm";
2
- import { checkUserWorkspaceInviteCode } from "@server/workspace/workspace-invite/workspace-user-invites";
3
- export default async function SignUpPage({ searchParams }) {
4
- const resolvedParams = await searchParams;
5
- const userInviteValidationResultPromise = checkUserWorkspaceInviteCode(resolvedParams.inviteCode);
6
- return (<main>
7
- <RegisterForm userInviteValidationResultPromise={userInviteValidationResultPromise} userWorkspaceInviteId={resolvedParams.inviteCode}/>
8
- </main>);
9
- }
@@ -1,6 +0,0 @@
1
- import React from "react";
2
- import { FdStatusBoard } from "@fd-app-toolbox/status-board/FdStatusBoard";
3
- async function StatusBoardPage() {
4
- return <FdStatusBoard />;
5
- }
6
- export default StatusBoardPage;
@@ -1,11 +0,0 @@
1
- "use client";
2
- import { canActivateAuth } from "@meta/auth/auth-guards";
3
- import { useFdRouter } from "@meta/client/framework/hooks";
4
- import { useEffect } from "react";
5
- export default function TestLayout({ children, }) {
6
- const router = useFdRouter();
7
- useEffect(() => {
8
- canActivateAuth();
9
- }, [router]);
10
- return children;
11
- }
@@ -1,12 +0,0 @@
1
- import { Contact } from "@common/demo/contact.resource";
2
- import { redirectFunction } from "@fd-toolbox/redirect/redirect-functions";
3
- import { isDev } from "@fd-toolbox/lib/environments";
4
- export default async function TestPage() {
5
- if (isDev())
6
- await redirectFunction("/");
7
- const contact = new Contact();
8
- return (<div className="flex flex-col gap-2 p-2">
9
- {JSON.stringify(contact)}
10
- <div className="flex flex-wrap [&>*]:size-96"></div>
11
- </div>);
12
- }
@@ -1,4 +0,0 @@
1
- import UserList from "@fd-app-toolbox/user-list/UserList";
2
- export default async function UserListPage() {
3
- return <UserList />;
4
- }
@@ -1,21 +0,0 @@
1
- import { emptyGuid } from "@fd-toolbox/constants/constants";
2
- import { FdView } from "@meta/view/FdView";
3
- import { isUuidSet } from "@fd-toolbox/functions/value-checking-functions";
4
- import { getUiResourceMeta } from "@meta/server/ui/ui-metas";
5
- import { getViewPageRelatedResourcesMetas, getViewPageResourceListResources, } from "@client/pages/view-page/ViewPage.funcs";
6
- import { isResourceListView } from "@meta/resource-list/resource-lists";
7
- export default async function ViewPage({ searchParams }) {
8
- const { name, resource, id } = await searchParams;
9
- const resourceId = id && isUuidSet(id) ? id : emptyGuid;
10
- let uiResourceMeta;
11
- let relatedUiResourceMetas;
12
- let resourcesPromise;
13
- if (isResourceListView(name, resourceId)) {
14
- uiResourceMeta = await getUiResourceMeta(resource);
15
- relatedUiResourceMetas = await getViewPageRelatedResourcesMetas(uiResourceMeta.resourceMeta);
16
- resourcesPromise = getViewPageResourceListResources(uiResourceMeta.resourceMeta, relatedUiResourceMetas.map((uiMeta) => uiMeta.resourceMeta));
17
- }
18
- return (<main className="h-full py-4 pl-6">
19
- <FdView resourceName={resource ?? ""} resourceId={resourceId} viewName={name} uiResourceMeta={uiResourceMeta} resourcesPromise={resourcesPromise} relatedUiResourceMetas={relatedUiResourceMetas}/>
20
- </main>);
21
- }
@@ -1,48 +0,0 @@
1
- "use client";
2
- import { useCallback, useState } from "react";
3
- import { FdDialog, FdDialogContent, FdDialogTitle } from "@fd-component-toolbox/dialog/FdDialog";
4
- import CheckoutForm from "@client/payments/checkout-form/CheckoutForm";
5
- import { FdInput } from "@fd-component-toolbox/input/FdInput";
6
- import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
7
- import { onInitCurrentPaymentMethod, getCardNumberInputValue, setPaymentMethod, } from "@client/payments/change-payment-method-field/ChangePaymentMethodField.funcs";
8
- import { elements } from "@fd-toolbox/constants/elements";
9
- import { useAsyncEffect } from "@fd-toolbox/hooks/use-async-effect";
10
- /**
11
- * A field component that allows users to view their current payment method and click to change it.
12
- *
13
- * This component displays the current payment method (e.g., the last four digits of a credit card)
14
- * in a read-only input field. Clicking the field or the pencil icon opens a dialog containing a
15
- * form to update payment details.
16
- *
17
- * @example
18
- * ```tsx
19
- * // Simply render the component to display the payment method field.
20
- * <ChangePaymentMethodField />
21
- * ```
22
- */
23
- export function ChangePaymentMethodField() {
24
- const [isDialogOpen, setIsDialogOpen] = useState(false);
25
- const [isSubmittingForm, setIsSubmittingForm] = useState(false);
26
- const [currentPaymentMethod, setCurrentPaymentMethod] = useState("");
27
- const setActualPaymentMethod = useCallback(async () => {
28
- await setPaymentMethod(setCurrentPaymentMethod, setIsDialogOpen);
29
- }, [setCurrentPaymentMethod, setIsDialogOpen]);
30
- useAsyncEffect(async () => {
31
- await onInitCurrentPaymentMethod(setCurrentPaymentMethod);
32
- }, []);
33
- return (<>
34
- <FdInput value={getCardNumberInputValue(currentPaymentMethod)} label="Payment method" className="cursor-pointer select-none" onClick={() => setIsDialogOpen(true)} readOnly inputId={elements.userSettings.changePaymentMethodField} id={elements.userSettings.changePaymentMethodField}>
35
- <FdIcon name={iconNames.pencil2} className="cursor-pointer" onClick={() => setIsDialogOpen(true)}></FdIcon>
36
- </FdInput>
37
- <FdDialog open={isDialogOpen} onOpenChange={setIsDialogOpen}>
38
- <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}>
39
- <FdDialogTitle className="mt-8 text-center font-semibold leading-none">
40
- {"Enter Payment Details"}
41
- </FdDialogTitle>
42
- <div>
43
- <CheckoutForm price={0} onSubmitting={setIsSubmittingForm} onSubmitSuccess={setActualPaymentMethod}/>
44
- </div>
45
- </FdDialogContent>
46
- </FdDialog>
47
- </>);
48
- }
@@ -1,95 +0,0 @@
1
- "use client";
2
- import React, { useCallback, useEffect, useMemo, useState } from "react";
3
- import { loadStripe } from "@stripe/stripe-js";
4
- import { Elements, useStripe, useElements } from "@stripe/react-stripe-js";
5
- import { useForm } from "react-hook-form";
6
- import { zodResolver } from "@hookform/resolvers/zod";
7
- import { getRequiredStringEnvSetting } from "@fd-toolbox/infra/env-functions";
8
- import { envSettingKeys } from "@common/infra/env-setting-keys";
9
- import { FdForm } from "@fd-component-toolbox/form/FdForm";
10
- import { cn } from "@fd-toolbox/lib/utils";
11
- import { schema, isPaymentFormValid, updateCursorOnFormSubmit, attachPaymentMethodWithSubscription, attachPaymentMethodWithoutSubscription, handleCardFieldChange, } from "@client/payments/checkout-form/CheckoutForm.funcs";
12
- import { getLoginState } from "@fd-toolbox/auth/login-states";
13
- import { useTheme } from "@fd-app-toolbox/providers/ThemeProvider/ThemeProvider";
14
- import { CardInformationField, CountryAndZipFields, EmailField, NameField, } from "@client/payments/checkout-form/checkout-form-fields";
15
- import { CheckoutFormSubmit } from "@client/payments/checkout-form/CheckoutFormSubmit";
16
- const stripePublicKey = getRequiredStringEnvSetting(envSettingKeys.stripePublicKey);
17
- const stripePromise = loadStripe(stripePublicKey);
18
- /*
19
- * The inner component of the payment form, which contains the logic for working with Stripe hooks.
20
- *
21
- * The `useStripe` and `useElements` hooks can only be called within descendants of
22
- * `<Elements>` from `@stripe/react-stripe-js`, as they use the context created by this provider.
23
- * Therefore, the `CheckoutForm` component itself wraps `CheckoutFormInner` in `<Elements>`,
24
- * and all form logic and hook calls are moved to `CheckoutFormInner`.
25
- *
26
- * @param props - See {@link CheckoutFormProps}
27
- */
28
- function CheckoutFormInner({ price, pricingId, onSubmitting, onSubmitSuccess, isSubmitHidden, setIsButtonEnabled, rerouteAfterSuccess, redirectUrl, setIsSubmitting, ref, }) {
29
- const { appliedTheme } = useTheme();
30
- const loginState = useMemo(() => getLoginState(), []);
31
- const [isCardFieldValid, setIsCardFieldValid] = useState(false);
32
- const [isCardFieldErrorShown, setIsCardFieldErrorShown] = useState(false);
33
- const form = useForm({
34
- defaultValues: {
35
- name: "",
36
- email: loginState.email ?? "",
37
- country: "",
38
- zip: "",
39
- },
40
- resolver: zodResolver(schema),
41
- mode: "onTouched",
42
- });
43
- const { handleSubmit, control, formState: { isSubmitting, isValid }, } = form;
44
- useEffect(() => {
45
- updateCursorOnFormSubmit(isSubmitting, onSubmitting);
46
- }, [isSubmitting, onSubmitting]);
47
- const stripe = useStripe() ?? undefined;
48
- const elements = useElements() ?? undefined;
49
- useEffect(() => {
50
- if (setIsButtonEnabled) {
51
- if (!isPaymentFormValid(isValid, isCardFieldValid, isSubmitting, !!stripe)) {
52
- setIsButtonEnabled(false);
53
- return;
54
- }
55
- if (stripe) {
56
- setIsSubmitting?.(false);
57
- }
58
- setIsButtonEnabled(true);
59
- }
60
- }, [isValid, isSubmitting, stripe, setIsButtonEnabled, isCardFieldValid, setIsSubmitting]);
61
- const onSubmitWithSubscribe = useCallback(async (formData) => {
62
- await attachPaymentMethodWithSubscription(formData, pricingId, onSubmitSuccess, elements ?? undefined, stripe ?? undefined, rerouteAfterSuccess, redirectUrl);
63
- }, [onSubmitSuccess, elements, pricingId, redirectUrl, rerouteAfterSuccess, stripe]);
64
- const onSubmitWithoutSubscribe = useCallback(async (formData) => {
65
- await attachPaymentMethodWithoutSubscription(formData, onSubmitSuccess, stripe, elements);
66
- }, [onSubmitSuccess, elements, stripe]);
67
- const onCardFieldChange = useCallback((event) => {
68
- handleCardFieldChange(event, setIsCardFieldValid, setIsCardFieldErrorShown);
69
- }, []);
70
- const handleCountryChange = useCallback((value, fieldName) => {
71
- form.setValue(fieldName, value, { shouldValidate: true });
72
- }, [form]);
73
- return (<FdForm {...form}>
74
- <form onSubmit={handleSubmit(pricingId ? onSubmitWithSubscribe : onSubmitWithoutSubscribe)} className={cn("flex flex-col justify-center gap-4 py-10", "w-full", isSubmitting && "pointer-events-none")}>
75
- <EmailField control={control}/>
76
- <CardInformationField appliedTheme={appliedTheme} onCardFieldChange={onCardFieldChange} isCardFieldErrorShown={isCardFieldErrorShown}/>
77
- <NameField control={control}/>
78
- <CountryAndZipFields control={control} handleCountryChange={handleCountryChange}/>
79
- <CheckoutFormSubmit ref={ref} price={price} isSubmitting={isSubmitting} isSubmitHidden={isSubmitHidden} isValid={isValid} isCardFieldValid={isCardFieldValid} stripe={stripe}/>
80
- </form>
81
- </FdForm>);
82
- }
83
- /**
84
- * Handles all UI elements and logic related to collecting user data
85
- * and submitting the payment request.
86
- *
87
- * @param props - See {@link CheckoutFormProps}
88
- */
89
- export function CheckoutForm(props) {
90
- return (<Elements stripe={stripePromise}>
91
- <CheckoutFormInner {...props}/>
92
- </Elements>);
93
- }
94
- CheckoutForm.displayName = "CheckoutForm";
95
- export default CheckoutForm;
@@ -1,11 +0,0 @@
1
- import React from "react";
2
- import { FdButton } from "@fd-component-toolbox/button/FdButton";
3
- import { cn } from "@fd-toolbox/lib/utils";
4
- import { getCheckoutFormButtonText, isPaymentFormValid, } from "@client/payments/checkout-form/CheckoutForm.funcs";
5
- import { elements as elementsIds } from "@fd-toolbox/constants/elements";
6
- export function CheckoutFormSubmit(props) {
7
- const { price, isSubmitting, pricingId, isSubmitHidden, isValid, isCardFieldValid, stripe, ref } = props;
8
- return (<FdButton ref={ref} className={cn("mr-4 mt-6 block w-full bg-fd-tertiary-900", isSubmitHidden && "hidden")} id={elementsIds.userSettings.payButton} disabled={!isPaymentFormValid(isValid, isCardFieldValid, isSubmitting, !!stripe)} type="submit">
9
- {getCheckoutFormButtonText(price, isSubmitting, pricingId)}
10
- </FdButton>);
11
- }
@@ -1,68 +0,0 @@
1
- import React from "react";
2
- import { FdFormControl, FdFormField, FdFormItem } from "@fd-component-toolbox/form/FdForm";
3
- import { FdInput } from "@fd-component-toolbox/input/FdInput";
4
- import { FdSelect, FdSelectContent, FdSelectGroup, FdSelectItem, FdSelectTrigger, FdSelectValue, } from "@fd-component-toolbox/select/FdSelect";
5
- import { userRoutes } from "@fd-toolbox/constants/user-routes";
6
- import { elementSuffixes } from "@fd-toolbox/constants/element-suffixes";
7
- import { countries, getCardElementOptions } from "@client/payments/checkout-form/CheckoutForm.funcs";
8
- import { CardElement } from "@stripe/react-stripe-js";
9
- import FdLabelAnimation from "@fd-component-toolbox/animation/FdLabelAnimation";
10
- export function EmailField({ control }) {
11
- return (<FdFormField control={control} name={userRoutes.email} render={({ field }) => (<FdFormItem>
12
- <div className="w-full">
13
- <FdFormControl>
14
- <FdInput {...field} inputId="email" label="Email *" type="email" showClearIcon={true}/>
15
- </FdFormControl>
16
- </div>
17
- </FdFormItem>)}/>);
18
- }
19
- export function NameField({ control }) {
20
- return (<FdFormField control={control} name={userRoutes.name} render={({ field }) => (<FdFormItem>
21
- <div className="w-full">
22
- <FdFormControl>
23
- <FdInput {...field} inputId="name" type="text" label="Cardholder Name *" showClearIcon={true} skipAnimationOnce={true}/>
24
- </FdFormControl>
25
- </div>
26
- </FdFormItem>)}/>);
27
- }
28
- export function CardInformationField({ appliedTheme, onCardFieldChange, isCardFieldErrorShown, }) {
29
- return (<FdFormItem>
30
- <div className="border-b border-border py-2 transition hover:border-fd-accent">
31
- <div className="relative h-full basis-full text-start">
32
- <CardElement id="card" options={getCardElementOptions(appliedTheme)} className="px-3" onChange={onCardFieldChange}/>
33
- <FdLabelAnimation label="Card Information *" shouldAnimate={true} className="top-0 max-w-full" isErrorStyle={isCardFieldErrorShown}/>
34
- </div>
35
- </div>
36
- </FdFormItem>);
37
- }
38
- export function CountryAndZipFields({ control, handleCountryChange }) {
39
- return (<div className="flex flex-col gap-y-4">
40
- <FdFormField control={control} name={userRoutes.country} render={({ field }) => (<FdFormItem>
41
- <div className="w-full border-0">
42
- <FdFormControl>
43
- <FdSelect value={field.value} disabled={field.disabled} onValueChange={(value) => handleCountryChange(value, field.name)}>
44
- <FdSelectTrigger label="Select Your Country *" shouldAnimate={!!field.value} id={`country${elementSuffixes.select}`}>
45
- <FdSelectValue />
46
- </FdSelectTrigger>
47
- <FdSelectContent>
48
- <FdSelectGroup>
49
- {countries.map((country, index) => (<FdSelectItem index={index} key={country.code} value={country.code} id={`${country.code}${elementSuffixes.selectOption}`}>
50
- {country.name}
51
- </FdSelectItem>))}
52
- </FdSelectGroup>
53
- </FdSelectContent>
54
- </FdSelect>
55
- </FdFormControl>
56
- </div>
57
- </FdFormItem>)}/>
58
- <div>
59
- <FdFormField control={control} name={userRoutes.zip} render={({ field }) => (<FdFormItem>
60
- <div className="w-full">
61
- <FdFormControl>
62
- <FdInput {...field} inputId="zip" label="ZIP Code *" type="string" showClearIcon={true} skipAnimationOnce={true}/>
63
- </FdFormControl>
64
- </div>
65
- </FdFormItem>)}/>
66
- </div>
67
- </div>);
68
- }
@@ -1,12 +0,0 @@
1
- import { getWebsiteResultScanSocialMediaTypeBySocialMediaLink } from "@client/website-scan/website-scan-result-social-media";
2
- import { socialMediaIcons } from "@client/website-scan/website-scan-data";
3
- import FdLink from "@fd-component-toolbox/link/FdLink";
4
- export function mapSocialMediaLinkToIndicator(socialMediaLink) {
5
- const socialMediaType = getWebsiteResultScanSocialMediaTypeBySocialMediaLink(socialMediaLink);
6
- return {
7
- content: (<FdLink href={socialMediaLink} className="size-6" openInNewTab>
8
- {socialMediaIcons[socialMediaType]?.icon ?? null}
9
- </FdLink>),
10
- tooltip: <p>{socialMediaIcons[socialMediaType]?.name ?? "Unknown"}</p>,
11
- };
12
- }
@@ -1,33 +0,0 @@
1
- import { LeadGooglePlaceIndicators } from "@/lm/lead/lead-google-place/LeadGooglePlaceIndicators";
2
- import { analyticsIcons, platformIcons } from "@client/website-scan/website-scan-data";
3
- import { mapSocialMediaLinkToIndicator } from "@client/website-scan/FdWebsiteScanResult.funcs";
4
- export function FdWebsiteScanResult({ websiteScanResult }) {
5
- return (<div className="flex w-full flex-wrap items-center gap-2 text-muted-foreground">
6
- <div className="flex items-center gap-1">
7
- <p>Platform:</p>
8
- <LeadGooglePlaceIndicators cssClass="gap-1" indicators={[
9
- {
10
- content: (<div className="size-6">
11
- {platformIcons[websiteScanResult.platform].icon}
12
- </div>),
13
- tooltip: <p>{platformIcons[websiteScanResult.platform].name}</p>,
14
- },
15
- ]}/>
16
- </div>
17
-
18
- {websiteScanResult.analytics && (<div className="flex items-center gap-1">
19
- <p>Analytics:</p>
20
- <LeadGooglePlaceIndicators cssClass="gap-1" indicators={websiteScanResult.analytics.split(",").map((analytics) => ({
21
- content: <div className="size-6">{analyticsIcons[parseInt(analytics)].icon}</div>,
22
- tooltip: <p>{analyticsIcons[parseInt(analytics)].name}</p>,
23
- }))}/>
24
- </div>)}
25
-
26
- {websiteScanResult.socialMediaLinks && (<div className="flex items-center gap-1">
27
- <p>Social Media:</p>
28
- <LeadGooglePlaceIndicators cssClass="gap-1" indicators={websiteScanResult.socialMediaLinks
29
- .split(",")
30
- .map(mapSocialMediaLinkToIndicator)}/>
31
- </div>)}
32
- </div>);
33
- }
@@ -1,28 +0,0 @@
1
- import { websiteScanResultPlatformTypes } from "@common/website-scan/website-scan-result-platform-type";
2
- import { websiteScanResultAnalyticsTypes } from "@common/website-scan/website-scan-result-analytics-type";
3
- import { websiteScanResultSocialMediaType } from "@client/website-scan/website-scan-result-social-media-type";
4
- import { OtherPlatformIcon, WordpressIcon, WixIcon, ShopifyIcon, SquarespaceIcon, GoogleAnalyticsIcon, FacebookPixelIcon, FacebookIcon, InstagramIcon, LinkedinIcon, TiktokIcon, XIcon, } from "@client/website-scan/website-scan-icons";
5
- export const platformIcons = {
6
- [websiteScanResultPlatformTypes.other]: { icon: <OtherPlatformIcon />, name: "Other Platform" },
7
- [websiteScanResultPlatformTypes.wordpress]: { icon: <WordpressIcon />, name: "Wordpress" },
8
- [websiteScanResultPlatformTypes.wix]: { icon: <WixIcon />, name: "Wix" },
9
- [websiteScanResultPlatformTypes.shopify]: { icon: <ShopifyIcon />, name: "Shopify" },
10
- [websiteScanResultPlatformTypes.squarespace]: { icon: <SquarespaceIcon />, name: "Squarespace" },
11
- };
12
- export const analyticsIcons = {
13
- [websiteScanResultAnalyticsTypes.googleAnalytics]: {
14
- icon: <GoogleAnalyticsIcon />,
15
- name: "Google Analytics",
16
- },
17
- [websiteScanResultAnalyticsTypes.facebookPixel]: {
18
- icon: <FacebookPixelIcon />,
19
- name: "Facebook Pixel",
20
- },
21
- };
22
- export const socialMediaIcons = {
23
- [websiteScanResultSocialMediaType.facebook]: { icon: <FacebookIcon />, name: "Facebook" },
24
- [websiteScanResultSocialMediaType.instagram]: { icon: <InstagramIcon />, name: "Instagram" },
25
- [websiteScanResultSocialMediaType.linkedin]: { icon: <LinkedinIcon />, name: "LinkedIn" },
26
- [websiteScanResultSocialMediaType.tiktok]: { icon: <TiktokIcon />, name: "TikTok" },
27
- [websiteScanResultSocialMediaType.xCom]: { icon: <XIcon />, name: "Twitter" },
28
- };
@@ -1,6 +0,0 @@
1
- import { cn } from "@fd-toolbox/lib/utils";
2
- export function FacebookIcon({ className }) {
3
- return (<svg viewBox="-2.4 -2.4 52.80 52.80" version="1.1" xmlns="http://www.w3.org/2000/svg" fill="#000000" className={cn(className)}>
4
- <path d="M29.6157 25.4991L30.2996 21.1577H26.0868V18.3358C26.0868 17.1487 26.6749 15.9887 28.5557 15.9887H30.498V12.2917C29.3669 12.1115 28.224 12.014 27.0785 12C23.6111 12 21.3473 14.0825 21.3473 17.8474V21.1577H17.5038V25.4991H21.3473V36H26.0868V25.4991H29.6157Z" fill="#337FFF"/>
5
- </svg>);
6
- }
@@ -1,49 +0,0 @@
1
- import { cn } from "@fd-toolbox/lib/utils";
2
- export function FacebookPixelIcon({ className }) {
3
- return (<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 72.47 69.79" className={cn(className)}>
4
- <path fill="#4367b1" d="
5
- M179.37,182.93
6
- l-21.46-12.39
7
- a7,7,0,0,0-6.29,0
8
- l-21.46,12.39
9
- a7,7,0,0,0-3.14,5.45
10
- v24.78
11
- a7,7,0,0,0,3.14,5.44
12
- l2.39,1.38
13
- h0
14
- l22.22,13.37
15
- L177,220
16
- h0
17
- l2.36-1.36
18
- a7,7,0,0,0,3.14-5.44
19
- V188.37
20
- A7,7,0,0,0,179.37,182.93
21
-
22
- M142,214.13
23
- a2.84,2.84,0,0,1-2-.84
24
- l-10.61-10.62
25
- a2.86,2.86,0,0,1,0-4
26
- L140,188
27
- a2.86,2.86,0,1,1,4,4
28
- l-8.62,8.62
29
- l8.59,8.59
30
- A2.86,2.86,0,0,1,142,214.13
31
-
32
- M150.22,216.64
33
- a2.88,2.88,0,0,1-2.59,1.65
34
- a2.86,2.86,0,0,1-2.59-4.08
35
- l14.58-31
36
- a2.86,2.86,0,1,1,5.18,2.43
37
-
38
- M180.16,202.65
39
- l-10.64,10.64
40
- a2.86,2.86,0,1,1-4-4
41
- l8.62-8.62
42
- L165.5,192
43
- a2.86,2.86,0,0,1,0-4
44
- a2.93,2.93,0,0,1,4,0
45
- l10.62,10.61
46
- A2.86,2.86,0,0,1,180.16,202.65
47
- " transform="translate(-119 -169.79)"/>
48
- </svg>);
49
- }
@@ -1,7 +0,0 @@
1
- import { cn } from "@fd-toolbox/lib/utils";
2
- export function GoogleAnalyticsIcon({ className }) {
3
- return (<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 301112 333331" shapeRendering="geometricPrecision" textRendering="geometricPrecision" imageRendering="optimizeQuality" fillRule="evenodd" clipRule="evenodd" className={cn(className)}>
4
- <path d="M301110 291619c124 22886-18333 41521-41206 41644-1700 14-3415-82-5101-288-21227-3140-36776-21611-36256-43057V43342c-507-21474 15084-39944 36324-43057 22721-2660 43304 13602 45964 36324 192 1673 288 3346 274 5032v249977z" fill="#f9ab00"/>
5
- <path d="M41288 250756c22804 0 41288 18484 41288 41288s-18484 41288-41288 41288S0 314848 0 292044s18484-41288 41288-41288zm108630-125126c-22913 1261-40685 20472-40150 43413v110892c0 30099 13246 48364 32649 52258 22393 4539 44209-9928 48748-32320 562-2743 836-5526 822-8323V167124c41-22886-18470-41467-41356-41507-233 0-480 0-713 14z" fill="#e37400"/>
6
- </svg>);
7
- }
@@ -1,32 +0,0 @@
1
- import { cn } from "@fd-toolbox/lib/utils";
2
- export function InstagramIcon({ className }) {
3
- return (<svg viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" className={cn(className)}>
4
- <path d="M19.6301 24.0001C19.6301 21.5874 21.5865 19.6311 24.0006 19.6311C26.4147 19.6311 28.3722 21.5874 28.3722 24.0001C28.3722 26.4127 26.4147 28.3691 24.0006 28.3691C21.5865 28.3691 19.6301 26.4127 19.6301 24.0001ZM17.2668 24.0001C17.2668 27.7169 20.2815 30.7298 24.0006 30.7298C27.7197 30.7298 30.7344 27.7169 30.7344 24.0001C30.7344 20.2832 27.7197 17.2704 24.0006 17.2704C20.2815 17.2704 17.2668 20.2832 17.2668 24.0001ZM29.4273 17.0035C29.4272 17.3146 29.5193 17.6187
5
- 29.6921 17.8774C29.865 18.1361 30.1107 18.3378 30.3982 18.4569C30.6856 18.5761 31.002 18.6073 31.3073 18.5468C31.6126 18.4862 31.8931 18.3365 32.1132 18.1167C32.3334 17.8968 32.4834 17.6166 32.5442 17.3116C32.6051 17.0065 32.574 16.6903 32.455 16.4029C32.3361 16.1155 32.1345 15.8698 31.8757 15.6968C31.617 15.5239 31.3128 15.4316 31.0016 15.4314H31.0009C30.5838 15.4316 30.1837 15.5973 29.8886 15.8921C29.5936 16.1868 29.4277 16.5866 29.4273 17.0035V17.0035ZM18.7026
6
- 34.668C17.4241 34.6098 16.7292 34.3969 16.2674 34.2171C15.6551 33.9789 15.2183 33.6952 14.759 33.2368C14.2997 32.7784 14.0154 32.3423 13.7781 31.7304C13.598 31.269 13.3851 30.5743 13.3269 29.2965C13.2634 27.9151 13.2507 27.5001 13.2507 24.0002C13.2507 20.5003 13.2644 20.0864 13.3269 18.7038C13.3852 17.4261 13.5997 16.7327 13.7781 16.27C14.0164 15.6581 14.3003 15.2215 14.759 14.7625C15.2176 14.3035 15.6541 14.0194 16.2674 13.7822C16.729 13.6023 17.4241 13.3894 18.7026
7
- 13.3314C20.0849 13.2678 20.5002 13.2551 24.0006 13.2551C27.501 13.2551 27.9167 13.2689 29.3001 13.3314C30.5787
8
- 13.3895 31.2725 13.604 31.7354 13.7822C32.3477 14.0194 32.7845 14.3041 33.2438 14.7625C33.7031 15.2209 33.9864 15.6581 34.2247 16.27C34.4048 16.7313 34.6177 17.4261 34.6758 18.7038C34.7394 20.0864 34.7521 20.5003 34.7521 24.0002C34.7521 27.5001 34.7394 27.9139 34.6758 29.2965C34.6176 30.5743 34.4036 31.2688 34.2247 31.7304C33.9864 32.3423 33.7025 32.7788 33.2438 33.2368C32.7851 33.6948 32.3477 33.9789 31.7354 34.2171C31.2738 34.397 30.5787 34.6099 29.3001 34.668C27.9178
9
- 34.7315 27.5026 34.7442 24.0006 34.7442C20.4986 34.7442 20.0845 34.7315 18.7026 34.668V34.668ZM18.5941 10.9735C17.198 11.0371 16.2441 11.2583 15.411 11.5823C14.5482 11.9169 13.8178 12.3657 13.088 13.094C12.3581 13.8222 11.9101 14.5533 11.5754 15.4156C11.2512 16.2487 11.0298 17.2016 10.9663 18.5968C10.9016 19.9942 10.8868 20.4409 10.8868 24.0001C10.8868 27.5592 10.9016 28.006 10.9663 29.4034C11.0298 30.7987 11.2512 31.7514 11.5754 32.5846C11.9101 33.4463 12.3582 34.1782
10
- 13.088 34.9062C13.8177 35.6341 14.5482 36.0824
11
- 15.411 36.4179C16.2456 36.7419 17.198 36.9631 18.5941 37.0266C19.993 37.0902 20.4393 37.106 24.0006 37.106C27.5619 37.106 28.0089 37.0912
12
- 29.4071 37.0266C30.8033 36.9631 31.7566 36.7419 32.5902 36.4179C33.4525 36.0824 34.1834 35.6345 34.9133 34.9062C35.6431 34.1779 36.0901 33.4463 36.4258 32.5846C36.75 31.7514 36.9724 30.7986 37.035 29.4034C37.0985 28.0049 37.1133 27.5592 37.1133 24.0001C37.1133 20.4409 37.0985 19.9942 37.035 18.5968C36.9714 17.2015 36.75 16.2482 36.4258 15.4156C36.0901 14.5539
13
- 35.642 13.8234 34.9133 13.094C34.1845 12.3646 33.4525 11.9169 32.5913 11.5823C31.7566 11.2583 30.8032 11.036 29.4082 10.9735C28.01 10.91 27.5629 10.8942 24.0017 10.8942C20.4404 10.8942 19.993 10.909 18.5941 10.9735Z" fill="url(#paint0_radial_8_74)"/>
14
- <path d="M19.6301 24.0001C19.6301 21.5874 21.5865 19.6311 24.0006 19.6311C26.4147 19.6311 28.3722 21.5874 28.3722 24.0001C28.3722 26.4127 26.4147 28.3691 24.0006 28.3691C21.5865 28.3691 19.6301 26.4127 19.6301 24.0001ZM17.2668 24.0001C17.2668 27.7169 20.2815 30.7298 24.0006 30.7298C27.7197 30.7298 30.7344 27.7169 30.7344 24.0001C30.7344 20.2832 27.7197 17.2704 24.0006 17.2704C20.2815 17.2704 17.2668 20.2832 17.2668 24.0001ZM29.4273 17.0035C29.4272 17.3146 29.5193 17.6187
15
- 29.6921 17.8774C29.865 18.1361 30.1107 18.3378 30.3982 18.4569C30.6856 18.5761 31.002 18.6073 31.3073 18.5468C31.6126 18.4862 31.8931 18.3365 32.1132 18.1167C32.3334 17.8968 32.4834 17.6166 32.5442 17.3116C32.6051 17.0065 32.574 16.6903 32.455 16.4029C32.3361 16.1155 32.1345 15.8698 31.8757 15.6968C31.617 15.5239 31.3128 15.4316 31.0016 15.4314H31.0009C30.5838 15.4316 30.1837 15.5973 29.8886 15.8921C29.5936 16.1868 29.4277 16.5866 29.4273 17.0035V17.0035ZM18.7026
16
- 34.668C17.4241 34.6098 16.7292 34.3969 16.2674 34.2171C15.6551 33.9789 15.2183 33.6952 14.759 33.2368C14.2997 32.7784 14.0154 32.3423 13.7781 31.7304C13.598 31.269 13.3851 30.5743 13.3269 29.2965C13.2634 27.9151 13.2507 27.5001 13.2507 24.0002C13.2507 20.5003 13.2644 20.0864 13.3269 18.7038C13.3852 17.4261 13.5997 16.7327 13.7781 16.27C14.0164 15.6581 14.3003 15.2215 14.759 14.7625C15.2176 14.3035 15.6541 14.0194 16.2674 13.7822C16.729 13.6023 17.4241 13.3894 18.7026
17
- 13.3314C20.0849 13.2678 20.5002 13.2551 24.0006 13.2551C27.501 13.2551 27.9167 13.2689 29.3001 13.3314C30.5787 13.3895 31.2725 13.604 31.7354 13.7822C32.3477 14.0194 32.7845 14.3041 33.2438 14.7625C33.7031 15.2209 33.9864 15.6581 34.2247 16.27C34.4048 16.7313 34.6177 17.4261 34.6758 18.7038C34.7394 20.0864 34.7521 20.5003 34.7521 24.0002C34.7521 27.5001 34.7394 27.9139 34.6758 29.2965C34.6176 30.5743 34.4036 31.2688 34.2247 31.7304C33.9864 32.3423 33.7025 32.7788
18
- 33.2438 33.2368C32.7851 33.6948 32.3477 33.9789 31.7354 34.2171C31.2738 34.397 30.5787 34.6099 29.3001 34.668C27.9178 34.7315 27.5026 34.7442 24.0006 34.7442C20.4986 34.7442 20.0845 34.7315 18.7026 34.668V34.668ZM18.5941 10.9735C17.198 11.0371 16.2441 11.2583 15.411 11.5823C14.5482 11.9169 13.8178 12.3657 13.088 13.094C12.3581 13.8222 11.9101 14.5533 11.5754 15.4156C11.2512 16.2487 11.0298 17.2016 10.9663 18.5968C10.9016 19.9942 10.8868 20.4409 10.8868 24.0001C10.8868
19
- 27.5592 10.9016 28.006 10.9663 29.4034C11.0298 30.7987 11.2512 31.7514 11.5754 32.5846C11.9101 33.4463 12.3582 34.1782 13.088 34.9062C13.8177 35.6341 14.5482 36.0824 15.411 36.4179C16.2456 36.7419 17.198 36.9631 18.5941 37.0266C19.993 37.0902 20.4393 37.106 24.0006 37.106C27.5619 37.106 28.0089 37.0912 29.4071 37.0266C30.8033 36.9631 31.7566 36.7419 32.5902 36.4179C33.4525 36.0824 34.1834 35.6345 34.9133 34.9062C35.6431 34.1779 36.0901 33.4463 36.4258 32.5846C36.75
20
- 31.7514 36.9724 30.7986 37.035 29.4034C37.0985 28.0049 37.1133 27.5592 37.1133 24.0001C37.1133 20.4409 37.0985 19.9942 37.035 18.5968C36.9714 17.2015 36.75 16.2482 36.4258 15.4156C36.0901 14.5539 35.642 13.8234 34.9133 13.094C34.1845 12.3646 33.4525 11.9169 32.5913 11.5823C31.7566 11.2583 30.8032 11.036 29.4082 10.9735C28.01 10.91 27.5629 10.8942 24.0017 10.8942C20.4404 10.8942 19.993 10.909 18.5941 10.9735Z" fill="url(#paint1_radial_8_74)"/>
21
- <defs>
22
- <radialGradient id="paint0_radial_8_74" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(14.3713 37.2298) scale(34.2378 34.2173)">
23
- <stop offset="0.09" stop-color="#FA8F21"/>
24
- <stop offset="0.78" stop-color="#D82D7E"/>
25
- </radialGradient>
26
- <radialGradient id="paint1_radial_8_74" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(26.7927 38.4041) scale(26.9841 26.968)">
27
- <stop offset="0.64" stop-color="#8C3AAA" stop-opacity="0"/>
28
- <stop offset="1" stop-color="#8C3AAA"/>
29
- </radialGradient>
30
- </defs>
31
- </svg>);
32
- }
@@ -1,6 +0,0 @@
1
- import { cn } from "@fd-toolbox/lib/utils";
2
- export function LinkedinIcon({ className }) {
3
- return (<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="100%" height="100%" viewBox="0 0 50 50" className={cn(className)}>
4
- <path fill="#0077B5" d="M41,4H9C6.24,4,4,6.24,4,9v32c0,2.76,2.24,5,5,5h32c2.76,0,5-2.24,5-5V9C46,6.24,43.76,4,41,4z M17,20v19h-6V20H17z M11,14.47c0-1.4,1.2-2.47,3-2.47s2.93,1.07,3,2.47c0,1.4-1.12,2.53-3,2.53C12.2,17,11,15.87,11,14.47z M39,39h-6c0,0,0-9.26,0-10 c0-2-1-4-3.5-4.04h-0.08C27,24.96,26,27.02,26,29c0,0.91,0,10,0,10h-6V20h6v2.56c0,0,1.93-2.56,5.81-2.56 c3.97,0,7.19,2.73,7.19,8.26V39z"></path>
5
- </svg>);
6
- }