@fernir2/saas-kit-cli 0.1.4 → 0.1.6
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.
- package/package.json +211 -7
- package/cli/.gitlab-ci.yml +0 -14
- package/cli/.husky/commit-msg +0 -1
- package/cli/.husky/pre-commit +0 -1
- package/cli/README.md +0 -101
- package/cli/bin/index.ts +0 -358
- package/cli/drizzle.config.ts +0 -12
- package/cli/global-setup.ts +0 -25
- package/cli/npm-commands/gen-meta/index.ts +0 -3
- package/cli/npm-commands/gen-schema/index.ts +0 -5
- package/cli/npm-commands/migrate-db/index.ts +0 -5
- package/cli/npm-commands/migrate-db/migrate-db.ts +0 -15
- package/cli/npm-commands/seed-db/index.ts +0 -5
- package/cli/npm-commands/seed-db/seed-db.ts +0 -15
- package/cli/playwright.config.ts +0 -34
- package/cli/postcss.config.mjs +0 -9
- package/cli/server.ts +0 -41
- package/cli/src/app/api/v1/[resourceName]/[id]/route.ts/route.ts +0 -11
- package/cli/src/app/api/v1/[resourceName]/route.ts/route.ts +0 -14
- package/cli/src/app/api/v1/[resourceName]/upsert/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/log/route.ts/route.ts +0 -7
- package/cli/src/app/api/v1/otheruser/[id]/route.ts/route.ts +0 -14
- package/cli/src/app/api/v1/otheruser/route.ts/route.ts +0 -7
- package/cli/src/app/api/v1/password/forgotpassword/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/password/resetpassword/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/payment/method/route.ts/route.ts +0 -4
- package/cli/src/app/api/v1/payment/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/payment/verify-fail/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/payment/verify-success/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/preload/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/searchable-resources/route.ts/route.ts +0 -11
- package/cli/src/app/api/v1/searchresult/route.ts/route.ts +0 -35
- package/cli/src/app/api/v1/sign-in/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/sign-out/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/sign-up/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/subscription/cancel/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/subscription/create/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/subscription/update/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/uimeta/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/uimetas/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/userpermission/route.ts/route.ts +0 -3
- package/cli/src/app/api/v1/visible-workspace/route.ts/route.ts +0 -5
- package/cli/src/app/api/v1/workspace/change/route.ts/route.ts +0 -5
- package/cli/src/app/favicon.ico +0 -0
- package/cli/src/app/layout.tsx +0 -42
- package/cli/src/app/page.tsx +0 -9
- package/cli/tailwind.config.ts +0 -13
- package/packages/base-repo/tools/git/commit-msg-script.ts +0 -42
- package/packages/base-repo/tools/git/pre-commit-script.ts +0 -431
- package/packages/level2/client/components/error-fallback/FdErrorFallback.jsx +0 -14
- package/packages/level2/client/components/feed/FdFeed.funcs.jsx +0 -65
- package/packages/level2/client/components/feed/FdFeed.jsx +0 -34
- package/packages/level2/client/components/feed/FdFeedActions.jsx +0 -15
- package/packages/level2/client/components/feed/FdFeedComments.jsx +0 -6
- package/packages/level2/client/components/feed/FdFeedEntry.jsx +0 -36
- package/packages/level2/client/components/feed/FdFeedHeader.jsx +0 -23
- package/packages/level2/client/components/feed/FdFeedReactionsSummary.jsx +0 -16
- package/packages/level2/client/components/providers/FdProviders.jsx +0 -28
- package/packages/level2/client/components/subscription-plan/FdSubscriptionPlan.jsx +0 -163
- package/packages/level2/client/components/wizard/FdWizard.jsx +0 -45
- package/packages/level2/client/components/wizard/FdWizardStepper.jsx +0 -55
- package/packages/level2/client/pages/dashboard-page/DashbordPage.jsx +0 -46
- package/packages/level2/client/pages/dynamic-layout-page/DynamicLayoutPage.jsx +0 -22
- package/packages/level2/client/pages/edit-password-page/EditPasswordPage.jsx +0 -8
- package/packages/level2/client/pages/edit-user-by-id-page/EditUserByIdPage.jsx +0 -14
- package/packages/level2/client/pages/edit-user-page/EditUserPage.jsx +0 -6
- package/packages/level2/client/pages/feed-page/FeedPage.jsx +0 -8
- package/packages/level2/client/pages/file-upload-page/FileUploadPage.jsx +0 -7
- package/packages/level2/client/pages/forgot-password-page/ForgotPasswordPage.jsx +0 -8
- package/packages/level2/client/pages/leads-viw-page/LeadsViewPage.jsx +0 -6
- package/packages/level2/client/pages/microsoft-page/MicrosoftPage.jsx +0 -16
- package/packages/level2/client/pages/payment-plan-page/PaymentPlanPage.jsx +0 -18
- package/packages/level2/client/pages/preload-page/PreloadPage.jsx +0 -25
- package/packages/level2/client/pages/reset-password-page/ResetPasswordPage.jsx +0 -8
- package/packages/level2/client/pages/screenshot-page/TestScreenshotPage.jsx +0 -23
- package/packages/level2/client/pages/sign-in-page/SignInPage.jsx +0 -24
- package/packages/level2/client/pages/sign-up-page/SignUpPage.jsx +0 -9
- package/packages/level2/client/pages/status-board-page/StatusBoardPage.jsx +0 -6
- package/packages/level2/client/pages/test-layout/TestLayout.jsx +0 -11
- package/packages/level2/client/pages/test-page/TestPage.jsx +0 -12
- package/packages/level2/client/pages/user-list-page/UserListPage.jsx +0 -4
- package/packages/level2/client/pages/view-page/ViewPage.jsx +0 -21
- package/packages/level2/client/payments/change-payment-method-field/ChangePaymentMethodField.jsx +0 -48
- package/packages/level2/client/payments/checkout-form/CheckoutForm.jsx +0 -95
- package/packages/level2/client/payments/checkout-form/CheckoutFormSubmit.jsx +0 -11
- package/packages/level2/client/payments/checkout-form/checkout-form-fields.jsx +0 -68
- package/packages/level2/client/website-scan/FdWebsiteScanResult.funcs.jsx +0 -12
- package/packages/level2/client/website-scan/FdWebsiteScanResult.jsx +0 -33
- package/packages/level2/client/website-scan/website-scan-data.jsx +0 -28
- package/packages/level2/client/website-scan/website-scan-icons/FacebookIcon.jsx +0 -6
- package/packages/level2/client/website-scan/website-scan-icons/FacebookPixelIcon.jsx +0 -49
- package/packages/level2/client/website-scan/website-scan-icons/GoogleAnalyticsIcon.jsx +0 -7
- package/packages/level2/client/website-scan/website-scan-icons/InstagramIcon.jsx +0 -32
- package/packages/level2/client/website-scan/website-scan-icons/LinkedinIcon.jsx +0 -6
- package/packages/level2/client/website-scan/website-scan-icons/OtherPlatformIcon.jsx +0 -110
- package/packages/level2/client/website-scan/website-scan-icons/ShopifyIcon.jsx +0 -46
- package/packages/level2/client/website-scan/website-scan-icons/SquarespaceIcon.jsx +0 -57
- package/packages/level2/client/website-scan/website-scan-icons/TiktokIcon.jsx +0 -15
- package/packages/level2/client/website-scan/website-scan-icons/WixIcon.jsx +0 -62
- package/packages/level2/client/website-scan/website-scan-icons/WordpressIcon.jsx +0 -53
- package/packages/level2/client/website-scan/website-scan-icons/XIcon.jsx +0 -6
- package/packages/level2/fd-app-toolbox/edit-other-user/EditOtherUser.jsx +0 -7
- package/packages/level2/fd-app-toolbox/edit-password-form/EditPasswordForm.jsx +0 -68
- package/packages/level2/fd-app-toolbox/edit-user-form/EditUserForm.jsx +0 -122
- package/packages/level2/fd-app-toolbox/edit-user-sheet/EditUserSheet.jsx +0 -35
- package/packages/level2/fd-app-toolbox/forgot-password-form/ForgotPasswordForm.jsx +0 -87
- package/packages/level2/fd-app-toolbox/layout/client-layout/ClientLayout.jsx +0 -19
- package/packages/level2/fd-app-toolbox/layout/client-root/ClientRoot.jsx +0 -32
- package/packages/level2/fd-app-toolbox/layout/hamburger-menu/FdHamburgerMenu.jsx +0 -47
- package/packages/level2/fd-app-toolbox/layout/navbar/FdNarrowNavbar.jsx +0 -40
- package/packages/level2/fd-app-toolbox/layout/sidebar/FdSidebar.jsx +0 -48
- package/packages/level2/fd-app-toolbox/layout/sidebar/sidebar-dropdown-menu/FdDropdownMenuItemTitle.jsx +0 -12
- package/packages/level2/fd-app-toolbox/layout/sidebar/sidebar-dropdown-menu/FdSidebarDropdownMenu.jsx +0 -81
- package/packages/level2/fd-app-toolbox/layout/sidebar/sidebar-resources-provider.jsx +0 -30
- package/packages/level2/fd-app-toolbox/layout/toolbar/FdToolbar.jsx +0 -89
- package/packages/level2/fd-app-toolbox/layout/toolbar/FdTopNav.jsx +0 -42
- package/packages/level2/fd-app-toolbox/layout/toolbar/title-provider/ToolbarTitleProvider.jsx +0 -10
- package/packages/level2/fd-app-toolbox/login-form/LoginForm.jsx +0 -165
- package/packages/level2/fd-app-toolbox/menu/notifications-menu/FdNotificationMenu.jsx +0 -43
- package/packages/level2/fd-app-toolbox/menu/notifications-menu/notification-list/FdNotificationList.jsx +0 -53
- package/packages/level2/fd-app-toolbox/menu/top-menu/FdTopMenu.jsx +0 -28
- package/packages/level2/fd-app-toolbox/menu/top-menu/top-menu-group/FdTopMenuGroup.jsx +0 -35
- package/packages/level2/fd-app-toolbox/menu/top-menu/top-menu-item/FdTopMenuItem.jsx +0 -47
- package/packages/level2/fd-app-toolbox/menu/user-dropdown-menu/FdUserDropdownMenu.jsx +0 -122
- package/packages/level2/fd-app-toolbox/menu/user-dropdown-menu/user-dropdown-menu-item/FdUserDropdownMenuItem.jsx +0 -56
- package/packages/level2/fd-app-toolbox/menu/visible-workspace-picker/FdVisibleWorkspacePicker.jsx +0 -36
- package/packages/level2/fd-app-toolbox/menu/workspace-picker/FdWorkspacePicker.jsx +0 -47
- package/packages/level2/fd-app-toolbox/providers/ThemeProvider/ThemeProvider.jsx +0 -27
- package/packages/level2/fd-app-toolbox/providers/auth-provider/AuthProvider.jsx +0 -38
- package/packages/level2/fd-app-toolbox/providers/sidebar-provider/FdSidebarContext.jsx +0 -17
- package/packages/level2/fd-app-toolbox/register-form/RegisterForm.jsx +0 -119
- package/packages/level2/fd-app-toolbox/report/FdChart.jsx +0 -120
- package/packages/level2/fd-app-toolbox/report/ReportChart.jsx +0 -29
- package/packages/level2/fd-app-toolbox/reset-password-form/ResetPasswordForm.jsx +0 -81
- package/packages/level2/fd-app-toolbox/search/FdSearch.jsx +0 -56
- package/packages/level2/fd-app-toolbox/search/search-dialog/FdSearchDialog.jsx +0 -72
- package/packages/level2/fd-app-toolbox/search/search-dialog-provider.jsx +0 -16
- package/packages/level2/fd-app-toolbox/search/search-input/FdSearchInput.jsx +0 -49
- package/packages/level2/fd-app-toolbox/search/search-resource-results/FdSearchResourcesResults.jsx +0 -36
- package/packages/level2/fd-app-toolbox/search/search-result/FdSearchResult.jsx +0 -46
- package/packages/level2/fd-app-toolbox/search/search-searchable-resource-results/FdSearchSearchableResourceResult.jsx +0 -43
- package/packages/level2/fd-app-toolbox/search/search-searchable-resource-results/FdSearchSearchableResourceResults.jsx +0 -22
- package/packages/level2/fd-app-toolbox/server/layout/private-layout/PrivateLayout.jsx +0 -32
- package/packages/level2/fd-app-toolbox/status-board/FdStatusBoard.jsx +0 -49
- package/packages/level2/fd-app-toolbox/status-board/status-board-item/FdStatusBoardItem.jsx +0 -17
- package/packages/level2/fd-app-toolbox/status-board/status-board-status/FdStatusBoardStatus.jsx +0 -27
- package/packages/level2/fd-app-toolbox/user-list/UserList.jsx +0 -58
- package/packages/level2/fd-component-toolbox/animation/FdLabelAnimation.jsx +0 -55
- package/packages/level2/fd-component-toolbox/avatar/FdAvatar.jsx +0 -50
- package/packages/level2/fd-component-toolbox/back-button/FdBackButton.jsx +0 -21
- package/packages/level2/fd-component-toolbox/badge/FdBadge.jsx +0 -19
- package/packages/level2/fd-component-toolbox/badge-toggle-list/FdBadgeToggleList.jsx +0 -47
- package/packages/level2/fd-component-toolbox/button/FdButton.jsx +0 -64
- package/packages/level2/fd-component-toolbox/calendar/FdCalendar.jsx +0 -68
- package/packages/level2/fd-component-toolbox/card/FdCard.jsx +0 -56
- package/packages/level2/fd-component-toolbox/card/FdCardBigDigits.jsx +0 -25
- package/packages/level2/fd-component-toolbox/chart/FdChart.jsx +0 -269
- package/packages/level2/fd-component-toolbox/checkbox/FdCheckbox.jsx +0 -39
- package/packages/level2/fd-component-toolbox/command/FdCommand.jsx +0 -123
- package/packages/level2/fd-component-toolbox/datepicker/FdDatePicker.jsx +0 -155
- package/packages/level2/fd-component-toolbox/dialog/FdDialog.jsx +0 -106
- package/packages/level2/fd-component-toolbox/dialog/YesOrNoDialog.jsx +0 -57
- package/packages/level2/fd-component-toolbox/drag-and-drop/FdDragDropContext.jsx +0 -19
- package/packages/level2/fd-component-toolbox/drag-and-drop/FdDraggable.jsx +0 -27
- package/packages/level2/fd-component-toolbox/drag-and-drop/FdDroppable.jsx +0 -22
- package/packages/level2/fd-component-toolbox/dropdown-menu/FdDropdownMenu.jsx +0 -198
- package/packages/level2/fd-component-toolbox/dynamic-layout/FdDynamicComponent.jsx +0 -27
- package/packages/level2/fd-component-toolbox/dynamic-layout/FdDynamicLayoutDragAndDrop.jsx +0 -78
- package/packages/level2/fd-component-toolbox/fade-out-text/FdFadeOutText.jsx +0 -52
- package/packages/level2/fd-component-toolbox/form/FdForm.jsx +0 -146
- package/packages/level2/fd-component-toolbox/icon/FdIcon.jsx +0 -192
- package/packages/level2/fd-component-toolbox/icon/custom-icons/FdFilterIcon.jsx +0 -11
- package/packages/level2/fd-component-toolbox/image/FdImage.jsx +0 -15
- package/packages/level2/fd-component-toolbox/input/FdInput.jsx +0 -94
- package/packages/level2/fd-component-toolbox/label/FdLabel.jsx +0 -19
- package/packages/level2/fd-component-toolbox/link/FdLink.jsx +0 -23
- package/packages/level2/fd-component-toolbox/list/FdList.jsx +0 -20
- package/packages/level2/fd-component-toolbox/list/list-item/FdListItem.jsx +0 -46
- package/packages/level2/fd-component-toolbox/loading/FdLoadingIndicator.jsx +0 -7
- package/packages/level2/fd-component-toolbox/logos/FacebookLogo.jsx +0 -11
- package/packages/level2/fd-component-toolbox/logos/GoogleLogo.jsx +0 -12
- package/packages/level2/fd-component-toolbox/logos/MicrosoftLogo.jsx +0 -11
- package/packages/level2/fd-component-toolbox/markdown/FdMarkdown.jsx +0 -105
- package/packages/level2/fd-component-toolbox/markdown/markdown-parser.jsx +0 -72
- package/packages/level2/fd-component-toolbox/multiselect/FdMultiselect.jsx +0 -240
- package/packages/level2/fd-component-toolbox/navigation/FdNavigation.jsx +0 -43
- package/packages/level2/fd-component-toolbox/navigation/navigation-item/FdNavigationItem.jsx +0 -23
- package/packages/level2/fd-component-toolbox/radio-group/FdRadioGroup.jsx +0 -46
- package/packages/level2/fd-component-toolbox/rich-text/FdRichText.jsx +0 -58
- package/packages/level2/fd-component-toolbox/save-status/FdSaveStatus.jsx +0 -40
- package/packages/level2/fd-component-toolbox/select/FdSelect.jsx +0 -173
- package/packages/level2/fd-component-toolbox/separator/FdSeparator.jsx +0 -19
- package/packages/level2/fd-component-toolbox/sheet/FdSheet.jsx +0 -121
- package/packages/level2/fd-component-toolbox/slide-toggle/FdSlideToggle.jsx +0 -57
- package/packages/level2/fd-component-toolbox/spinner/Spinner.jsx +0 -36
- package/packages/level2/fd-component-toolbox/subheading/FdSubHeading.jsx +0 -12
- package/packages/level2/fd-component-toolbox/switch/FdSwitch.jsx +0 -55
- package/packages/level2/fd-component-toolbox/tabs/FdTabs.jsx +0 -53
- package/packages/level2/fd-component-toolbox/textarea/FdTextArea.jsx +0 -42
- package/packages/level2/fd-component-toolbox/toaster/FdToaster.jsx +0 -20
- package/packages/level2/fd-component-toolbox/tooltip/FdTooltip.jsx +0 -80
- package/packages/level2/meta/browsers/base-multi-browser/FdBaseMultiBrowser.jsx +0 -72
- package/packages/level2/meta/browsers/base-multi-browser/base-multi-browser-dialog/FdBaseMultiBrowserDialog.jsx +0 -159
- package/packages/level2/meta/browsers/browser/FdBrowser.jsx +0 -58
- package/packages/level2/meta/browsers/browser/browser-dialog/FdBrowserDialog.jsx +0 -89
- package/packages/level2/meta/browsers/many-to-many-browser/FdManyToManyBrowser.jsx +0 -33
- package/packages/level2/meta/browsers/multi-browser/FdMultiBrowser.jsx +0 -32
- package/packages/level2/meta/card-list/FdCardList.jsx +0 -40
- package/packages/level2/meta/card-list/card/FdCard.jsx +0 -44
- package/packages/level2/meta/card-list/card/action-block/FdCardActionBlock.jsx +0 -70
- package/packages/level2/meta/card-list/card/content-block/FdCardContentBlock.jsx +0 -64
- package/packages/level2/meta/card-list/card/image-block/FdCardImage.jsx +0 -10
- package/packages/level2/meta/client/framework/hooks.jsx +0 -39
- package/packages/level2/meta/comment/FdComment.jsx +0 -16
- package/packages/level2/meta/comment/FdCommentList.jsx +0 -32
- package/packages/level2/meta/components/edit-image/FdEditImage.jsx +0 -42
- package/packages/level2/meta/components/edit-image/FdEditImageActionMenu.jsx +0 -31
- package/packages/level2/meta/components/edit-image/FdEditImageDropdownMenu.jsx +0 -42
- package/packages/level2/meta/components/file-upload/FileUpload.jsx +0 -103
- package/packages/level2/meta/components/file-upload/PreviewMedia.jsx +0 -36
- package/packages/level2/meta/components/multi-list/FdMultiList.jsx +0 -65
- package/packages/level2/meta/components/multi-list/FdMultiListEditResource.jsx +0 -31
- package/packages/level2/meta/edit-resource/FdEditResource.jsx +0 -135
- package/packages/level2/meta/edit-resource/FdEditResourceFormBody.jsx +0 -8
- package/packages/level2/meta/edit-resource/FdEditResourceHeader.jsx +0 -43
- package/packages/level2/meta/edit-resource/FdEditResourceSheet.jsx +0 -70
- package/packages/level2/meta/edit-resource/SaveCompleteProvider.jsx +0 -16
- package/packages/level2/meta/edit-resource/edit-link/FdEditLink.jsx +0 -48
- package/packages/level2/meta/edit-resource/edit-link/FdEditLinkResource.jsx +0 -18
- package/packages/level2/meta/edit-resource/edit-resource-dialog/FdEditResourceDialog.jsx +0 -34
- package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceBlobField.jsx +0 -15
- package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceEnumField.jsx +0 -35
- package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceFlagsEnumField.jsx +0 -23
- package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceImageField.jsx +0 -7
- package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourcePropertyBlock.jsx +0 -38
- package/packages/level2/meta/edit-resource/edit-resource-property-block/FdEditResourceRichTextField.jsx +0 -16
- package/packages/level2/meta/edit-resource/edit-resource-property-block/edit-resource-fields.jsx +0 -53
- package/packages/level2/meta/edit-resource/edit-resource-property-field/FdEditResourcePropertyField.jsx +0 -105
- package/packages/level2/meta/filtering/filter/FdEnumFlagFilter.jsx +0 -40
- package/packages/level2/meta/filtering/filter/FdFilter.jsx +0 -123
- package/packages/level2/meta/filtering/filter/filters/BooleanFilter.jsx +0 -25
- package/packages/level2/meta/filtering/filter/filters/DateFilter.jsx +0 -10
- package/packages/level2/meta/filtering/filter/filters/EnumFilter.jsx +0 -44
- package/packages/level2/meta/filtering/filter/filters/GuidFilter.jsx +0 -28
- package/packages/level2/meta/filtering/filter/filters/IntegerFilter.jsx +0 -28
- package/packages/level2/meta/filtering/filter/filters/TextFilter.jsx +0 -11
- package/packages/level2/meta/filtering/resource-filter-list/FdResourceFilterList.jsx +0 -120
- package/packages/level2/meta/filtering/resource-filter-list/resource-list-dropdown-menu/ResourceListDropdownMenu.funcs.jsx +0 -4
- package/packages/level2/meta/filtering/resource-filter-list/resource-list-dropdown-menu/ResourceListDropdownMenu.jsx +0 -43
- package/packages/level2/meta/providers/global-provider/FdGlobalContext.jsx +0 -17
- package/packages/level2/meta/resource-list/ResourceList.jsx +0 -63
- package/packages/level2/meta/resource-list/resource-add-button.jsx +0 -11
- package/packages/level2/meta/resource-list/resource-list-card/FdResourceListCard.jsx +0 -7
- package/packages/level2/meta/resource-list/resource-list-filter/FdResourceListFilter.jsx +0 -11
- package/packages/level2/meta/resource-list/resource-table-list/FdResourceTableList.jsx +0 -14
- package/packages/level2/meta/table/FdTable.jsx +0 -147
- package/packages/level2/meta/table/body/FdTableBody.jsx +0 -9
- package/packages/level2/meta/table/body-cell/FdActionBodyCell.jsx +0 -145
- package/packages/level2/meta/table/body-cell/FdBlobBodyCell.jsx +0 -27
- package/packages/level2/meta/table/body-cell/FdBodyCell.jsx +0 -133
- package/packages/level2/meta/table/body-cell/FdBodyCellValue.jsx +0 -59
- package/packages/level2/meta/table/body-cell/FdBodyExpandCell.jsx +0 -6
- package/packages/level2/meta/table/body-cell/FdBodyExpandPropertyCell.jsx +0 -22
- package/packages/level2/meta/table/body-cell/FdCustomActionLink.jsx +0 -16
- package/packages/level2/meta/table/body-cell/FdMultiselectCellTemplate.jsx +0 -39
- package/packages/level2/meta/table/body-cell/FdViewCell.jsx +0 -12
- package/packages/level2/meta/table/body-row/FdTableBodyRow.jsx +0 -49
- package/packages/level2/meta/table/header/FdTableHeader.jsx +0 -54
- package/packages/level2/meta/table/header-cell/FdResizable.jsx +0 -18
- package/packages/level2/meta/table/header-cell/FdResizableEdgeHandle.jsx +0 -4
- package/packages/level2/meta/table/header-cell/FdTableHeaderActionCell.jsx +0 -49
- package/packages/level2/meta/table/header-cell/FdTableHeaderCell.jsx +0 -89
- package/packages/level2/meta/table/header-cell/FdTableHeaderCellActionButton.jsx +0 -23
- package/packages/level2/meta/table/pager/FdPager.jsx +0 -72
- package/packages/level2/meta/table/table-custom-action/TableCustomAction.jsx +0 -26
- package/packages/level2/meta/view/FdView.jsx +0 -31
- package/packages/level2/meta/view/FdViewSheet.jsx +0 -103
- package/packages/level2/meta/view/view-resource/FdViewResource.jsx +0 -108
- package/packages/level2/meta/view/view-resource/templates/ManyToOneTableHeaderCellTemplate.jsx +0 -13
- package/src/app/error.jsx +0 -5
- package/src/app/global-error.jsx +0 -5
- package/src/app/loading.jsx +0 -11
- package/src/hd/footer/HdFooter.jsx +0 -27
- package/src/hd/footer/hd-footer-item/HdFooterItem.jsx +0 -14
- package/src/lm/ai-scan/AiScanAction.jsx +0 -21
- package/src/lm/ai-scan/cell-templates/AiScanWebsiteResultCellTemplate.jsx +0 -31
- package/src/lm/components/LmCardReport.jsx +0 -12
- package/src/lm/configs/lm-list-configs.jsx +0 -72
- package/src/lm/google-place/action-dropdown/GooglePlaceActionDropdown.jsx +0 -42
- package/src/lm/google-place/actions/GooglePlaceSaveToGroupAction.jsx +0 -22
- package/src/lm/google-place/cell-templates/GooglePlaceBusinessInfoCellTemplate.jsx +0 -59
- package/src/lm/google-place/cell-templates/GooglePlaceEmailsCellTemplate.jsx +0 -34
- package/src/lm/google-place/cell-templates/GooglePlaceScanAction.jsx +0 -15
- package/src/lm/lead/action-dropdown/LeadActionDropdown.jsx +0 -39
- package/src/lm/lead/actions/move-to-group-action/LeadMoveToGroupAction.jsx +0 -28
- package/src/lm/lead/cell-templates/LeadBusinessInfoCellTemplate.jsx +0 -64
- package/src/lm/lead/cell-templates/LeadScanAction.jsx +0 -15
- package/src/lm/lead/lead-google-place/LeadGooglePlaceIndicator.jsx +0 -8
- package/src/lm/lead/lead-google-place/LeadGooglePlaceIndicators.jsx +0 -17
- package/src/lm/lead/lead-google-place/LeadGooglePlaceInfo.jsx +0 -15
- package/src/lm/lead/view/LeadsView.jsx +0 -8
- package/src/lm/pages/HomePage.jsx +0 -53
- package/types-output/tsconfig.tsbuildinfo +0 -1
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
3
|
-
import { scrollListItemIntoView, setListItemTextOverflowing, } from "@fd-component-toolbox/list/list-item/FdListItem.funcs";
|
|
4
|
-
import * as Tooltip from "@radix-ui/react-tooltip";
|
|
5
|
-
import React, { useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
6
|
-
import { FdTooltip, FdTooltipContent, FdTooltipProvider, FdTooltipTrigger, } from "@fd-component-toolbox/tooltip/FdTooltip";
|
|
7
|
-
/**
|
|
8
|
-
* List item component with built-in tooltip
|
|
9
|
-
*
|
|
10
|
-
* @param IFdListItemProps {@link IFdListItemProps}
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```tsx
|
|
14
|
-
* <FdListItem showTooltip={true} isActive={...} onNavigate={...}>
|
|
15
|
-
* itemName
|
|
16
|
-
* </FdListItem>
|
|
17
|
-
* ```
|
|
18
|
-
*/
|
|
19
|
-
export function FdListItem({ className, showTooltip, children, onNavigate, isActive }) {
|
|
20
|
-
const [isTextOverflowing, setIsTextOverflowing] = useState(false);
|
|
21
|
-
const textRef = useRef(null);
|
|
22
|
-
const containerRef = useRef(null);
|
|
23
|
-
useEffect(() => {
|
|
24
|
-
if (containerRef?.current && isActive)
|
|
25
|
-
scrollListItemIntoView(containerRef?.current);
|
|
26
|
-
}, [isActive]);
|
|
27
|
-
useLayoutEffect(() => {
|
|
28
|
-
if (textRef.current && containerRef.current) {
|
|
29
|
-
setListItemTextOverflowing(textRef.current.scrollWidth, containerRef.current.clientWidth, setIsTextOverflowing, showTooltip);
|
|
30
|
-
}
|
|
31
|
-
}, [showTooltip, textRef, containerRef]);
|
|
32
|
-
return (<FdTooltipProvider>
|
|
33
|
-
<FdTooltip>
|
|
34
|
-
<FdTooltipTrigger asChild>
|
|
35
|
-
<li className={cn("z-1 relative w-full rounded-md p-2 hover:bg-muted-foreground", className, isActive && "bg-fd-tertiary-700 text-white")} ref={containerRef} onClick={onNavigate ?? undefined}>
|
|
36
|
-
<span ref={textRef}>{children}</span>
|
|
37
|
-
{isTextOverflowing && (<span className={"absolute right-0 top-1/2 z-0 h-full w-10 -translate-y-1/2"}></span>)}
|
|
38
|
-
</li>
|
|
39
|
-
</FdTooltipTrigger>
|
|
40
|
-
{isTextOverflowing && (<FdTooltipContent side={"right"} className="ml-2 max-w-60 text-pretty rounded p-2 text-popover shadow">
|
|
41
|
-
{children}
|
|
42
|
-
<Tooltip.Arrow />
|
|
43
|
-
</FdTooltipContent>)}
|
|
44
|
-
</FdTooltip>
|
|
45
|
-
</FdTooltipProvider>);
|
|
46
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Facebook logo SVG icon component that uses currentColor for styling
|
|
3
|
-
*
|
|
4
|
-
* {@link FacebookLogo}
|
|
5
|
-
*/
|
|
6
|
-
function FacebookLogo() {
|
|
7
|
-
return (<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="20px" height="20px" fill="currentColor" className="text-foreground">
|
|
8
|
-
<path d="M25,3C12.85,3,3,12.85,3,25c0,11.03,8.125,20.137,18.712,21.728V30.831h-5.443v-5.783h5.443v-3.848 c0-6.371,3.104-9.168,8.399-9.168c2.536,0,3.877,0.188,4.512,0.274v5.048h-3.612c-2.248,0-3.033,2.131-3.033,4.533v3.161h6.588 l-0.894,5.783h-5.694v15.944C38.716,45.318,47,36.137,47,25C47,12.85,37.15,3,25,3z"/>
|
|
9
|
-
</svg>);
|
|
10
|
-
}
|
|
11
|
-
export default FacebookLogo;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Google logo SVG icon component that uses currentColor for styling
|
|
3
|
-
*
|
|
4
|
-
* {@link GoogleLogo}
|
|
5
|
-
*/
|
|
6
|
-
function GoogleLogo() {
|
|
7
|
-
return (<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="20px" height="20px" fill="currentColor" className="text-foreground">
|
|
8
|
-
<path d="M 32.521484 6 C 18.158484 6 6.515625 17.642 6.515625 32 C 6.515625 46.358 18.158484 58 32.521484 58 C 54.209484 58 59.098453
|
|
9
|
-
37.865969 57.064453 27.667969 L 51.181641 27.667969 L 49.269531 27.667969 L 32.515625 27.667969 L 32.515625 36.333984 L 49.279297 36.333984 C 47.351759 43.804816 40.588119 49.332031 32.515625 49.332031 C 22.943625 49.332031 15.181641 41.572 15.181641 32 C 15.181641 22.428 22.943625 14.667969 32.515625 14.667969 C 36.868625 14.667969 40.834906 16.283594 43.878906 18.933594 L 50.033203 12.779297 C 45.410203 8.5672969 39.266484 6 32.521484 6 z"/>
|
|
10
|
-
</svg>);
|
|
11
|
-
}
|
|
12
|
-
export default GoogleLogo;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Microsoft logo SVG icon component that uses currentColor for styling
|
|
3
|
-
*
|
|
4
|
-
* {@link MicrosoftLogo}
|
|
5
|
-
*/
|
|
6
|
-
function MicrosoftLogo() {
|
|
7
|
-
return (<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="20px" height="20px" fill="currentColor" className="text-foreground">
|
|
8
|
-
<path d="M 5 4 C 4.448 4 4 4.447 4 5 L 4 24 L 24 24 L 24 4 L 5 4 z M 26 4 L 26 24 L 46 24 L 46 5 C 46 4.447 45.552 4 45 4 L 26 4 z M 4 26 L 4 45 C 4 45.553 4.448 46 5 46 L 24 46 L 24 26 L 4 26 z M 26 26 L 26 46 L 45 46 C 45.552 46 46 45.553 46 45 L 46 26 L 26 26 z"/>
|
|
9
|
-
</svg>);
|
|
10
|
-
}
|
|
11
|
-
export default MicrosoftLogo;
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import * as React from "react";
|
|
3
|
-
import { useState, useEffect, useCallback, useMemo } from "react";
|
|
4
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
5
|
-
import { getPreviewContentId, onValueChange } from "@fd-component-toolbox/markdown/FdMarkdown.funcs";
|
|
6
|
-
import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
|
|
7
|
-
import { FdFormControl, FdFormField, FdFormItem, FdFormMessage } from "@fd-component-toolbox/form/FdForm";
|
|
8
|
-
import FdLabelAnimation from "@fd-component-toolbox/animation/FdLabelAnimation";
|
|
9
|
-
import { cva } from "class-variance-authority";
|
|
10
|
-
import { parseMarkdown } from "@fd-component-toolbox/markdown/markdown-parser";
|
|
11
|
-
import { markdownSuffixes } from "@fd-toolbox/constants/element-suffixes";
|
|
12
|
-
import { onTextAreaBlur } from "@fd-component-toolbox/textarea/FdTextArea.funcs";
|
|
13
|
-
import debounce from "lodash.debounce";
|
|
14
|
-
/**
|
|
15
|
-
* Using {@link https://cva.style/docs/getting-started/variants class-variance-authority}
|
|
16
|
-
*/
|
|
17
|
-
export const markdownVariants = cva("relative z-0 border-b", {
|
|
18
|
-
variants: {
|
|
19
|
-
variant: {
|
|
20
|
-
bordered: "",
|
|
21
|
-
float: "border-background transition-colors focus-within:border-fd-accent hover:border-fd-accent",
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
defaultVariants: {
|
|
25
|
-
variant: "float",
|
|
26
|
-
},
|
|
27
|
-
});
|
|
28
|
-
/**
|
|
29
|
-
* Markdown input component with preview functionality and form integration
|
|
30
|
-
*
|
|
31
|
-
* @param IFdMarkdownProps {@link IFdMarkdownProps}
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* ```tsx
|
|
35
|
-
function MyComponent() {
|
|
36
|
-
const form = useForm({...});
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<FdMarkdown
|
|
40
|
-
label="Description"
|
|
41
|
-
name="description"
|
|
42
|
-
form={form}
|
|
43
|
-
showContentPreview={true}
|
|
44
|
-
onChange={...}
|
|
45
|
-
onBlur={...}
|
|
46
|
-
variant="float"
|
|
47
|
-
/>
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
export function FdMarkdown({ elementId, label, showContentPreview, value: defaultValue, form, name, disabled, readOnly, skipAnimationOnce, variant, onChange, onBlur, }) {
|
|
53
|
-
const [value, setValue] = useState(defaultValue ?? "");
|
|
54
|
-
const [previewContent, setPreviewContent] = useState([]);
|
|
55
|
-
const [isPreview, setIsPreview] = useState(showContentPreview ?? false);
|
|
56
|
-
const [isInFocus, setIsInFocus] = useState(false);
|
|
57
|
-
const debouncedParseMarkdown = useMemo(() => debounce(async (val) => {
|
|
58
|
-
const result = await parseMarkdown(val);
|
|
59
|
-
setPreviewContent(result);
|
|
60
|
-
}, 500), []);
|
|
61
|
-
useEffect(() => {
|
|
62
|
-
if (value) {
|
|
63
|
-
debouncedParseMarkdown(value);
|
|
64
|
-
}
|
|
65
|
-
}, [value, debouncedParseMarkdown]);
|
|
66
|
-
useEffect(() => {
|
|
67
|
-
setValue(defaultValue ?? "");
|
|
68
|
-
}, [defaultValue]);
|
|
69
|
-
const onChangeCallback = useCallback((e) => {
|
|
70
|
-
onValueChange(e.target.value, setValue, onChange);
|
|
71
|
-
}, [onChange]);
|
|
72
|
-
const onTextAreaBlurCallback = useCallback((e) => {
|
|
73
|
-
onTextAreaBlur(e, setIsInFocus, onBlur);
|
|
74
|
-
}, [onBlur]);
|
|
75
|
-
useEffect(() => {
|
|
76
|
-
return () => {
|
|
77
|
-
debouncedParseMarkdown.cancel();
|
|
78
|
-
};
|
|
79
|
-
}, [debouncedParseMarkdown]);
|
|
80
|
-
return (<FdFormField control={form.control} name={name} render={({ field, fieldState }) => (<FdFormItem>
|
|
81
|
-
<FdFormControl>
|
|
82
|
-
<div>
|
|
83
|
-
{isPreview && (<>
|
|
84
|
-
<p className="mb-2">{label} Preview:</p>
|
|
85
|
-
<div className="mb-5 w-full overflow-auto">
|
|
86
|
-
<div id={getPreviewContentId(elementId)}>{previewContent}</div>
|
|
87
|
-
</div>
|
|
88
|
-
</>)}
|
|
89
|
-
<div className={cn(markdownVariants({ variant }))}>
|
|
90
|
-
<textarea id={elementId} rows={5} placeholder="" {...field} disabled={disabled} readOnly={readOnly} value={value} onChange={onChangeCallback} onFocus={() => setIsInFocus(true)} onBlur={onTextAreaBlurCallback} className={cn("peer block w-full appearance-none border-0 bg-transparent px-0 py-2.5 text-sm text-muted-foreground focus:outline-none focus:ring-0 disabled:cursor-not-allowed", disabled || readOnly ? "resize-none" : "")}/>
|
|
91
|
-
<FdLabelAnimation label={label} shouldAnimate={!!field.value || isInFocus} skipAnimationOnce={skipAnimationOnce} className={cn("left-0 top-4 max-w-full truncate px-0 transition-transform", variant === "bordered"
|
|
92
|
-
? (!!field.value || isInFocus) && "!-translate-y-6"
|
|
93
|
-
: "top-2")} variant={variant ?? "float"}/>
|
|
94
|
-
<div className="absolute right-0 top-2" onClick={() => setIsPreview((prev) => !prev)}>
|
|
95
|
-
{isPreview ? (<FdIcon id={elementId + markdownSuffixes.previewIcon} name={iconNames.visibility}/>) : (<FdIcon id={elementId + markdownSuffixes.previewIcon} name={iconNames.visibilityOff}/>)}
|
|
96
|
-
</div>
|
|
97
|
-
<div className={cn("w-full pt-2", fieldState.invalid
|
|
98
|
-
? "border-destructive focus:border-destructive"
|
|
99
|
-
: "")}></div>
|
|
100
|
-
</div>
|
|
101
|
-
</div>
|
|
102
|
-
</FdFormControl>
|
|
103
|
-
<FdFormMessage />
|
|
104
|
-
</FdFormItem>)}/>);
|
|
105
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { apiPost } from "@fd-toolbox/api/api-client";
|
|
3
|
-
import { apiPathNames } from "@fd-toolbox/api/api-path-names";
|
|
4
|
-
import { logStringError } from "@fd-toolbox/logging/loggers";
|
|
5
|
-
import { isNullOrUndefined } from "@fd-toolbox/functions/value-checking-functions";
|
|
6
|
-
import { apiErrorMessages } from "@fd-toolbox/constants/api-error-constants";
|
|
7
|
-
export async function markdownToHtml(markdown) {
|
|
8
|
-
const response = await apiPost(apiPathNames.markdown, {
|
|
9
|
-
markdown: markdown,
|
|
10
|
-
});
|
|
11
|
-
const responseIsSuccessful = !isNullOrUndefined(response.data?.html);
|
|
12
|
-
if (responseIsSuccessful) {
|
|
13
|
-
return response.data?.html;
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
logStringError(response.message ?? apiErrorMessages.invalidResponseFromApi);
|
|
17
|
-
return undefined;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
export async function parseMarkdown(md) {
|
|
21
|
-
const htmlOutput = await markdownToHtml(md);
|
|
22
|
-
return parseText(htmlOutput);
|
|
23
|
-
}
|
|
24
|
-
const allowedTags = new Set([
|
|
25
|
-
"p",
|
|
26
|
-
"strong",
|
|
27
|
-
"em",
|
|
28
|
-
"del",
|
|
29
|
-
"code",
|
|
30
|
-
"h1",
|
|
31
|
-
"h2",
|
|
32
|
-
"h3",
|
|
33
|
-
"h4",
|
|
34
|
-
"h5",
|
|
35
|
-
"h6",
|
|
36
|
-
"li",
|
|
37
|
-
"ol",
|
|
38
|
-
"ul",
|
|
39
|
-
"a",
|
|
40
|
-
"blockquote",
|
|
41
|
-
"pre",
|
|
42
|
-
"code",
|
|
43
|
-
"hr",
|
|
44
|
-
]);
|
|
45
|
-
export function parseText(htmlString) {
|
|
46
|
-
const doc = new DOMParser().parseFromString(htmlString ?? "", "text/html");
|
|
47
|
-
return validateHtml(doc.body.childNodes);
|
|
48
|
-
}
|
|
49
|
-
function validateHtml(nodes) {
|
|
50
|
-
const result = [];
|
|
51
|
-
for (const node of Array.from(nodes)) {
|
|
52
|
-
if (node instanceof Text)
|
|
53
|
-
result.push(node.wholeText);
|
|
54
|
-
else if (node instanceof HTMLElement && allowedTags.has(node.tagName.toLowerCase())) {
|
|
55
|
-
const AllowedTag = node.tagName.toLowerCase();
|
|
56
|
-
if (node.childNodes.length > 0) {
|
|
57
|
-
const childNodes = validateHtml(node.childNodes);
|
|
58
|
-
if (childNodes.length) {
|
|
59
|
-
result.push(React.createElement(AllowedTag, { key: result.length }, ...childNodes));
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
else
|
|
63
|
-
result.push(<AllowedTag></AllowedTag>);
|
|
64
|
-
}
|
|
65
|
-
else if (node instanceof HTMLElement) {
|
|
66
|
-
const dummy = document.createElement("div");
|
|
67
|
-
dummy.appendChild(node);
|
|
68
|
-
result.push(dummy.textContent);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return result;
|
|
72
|
-
}
|
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import React, { useCallback, useState, useLayoutEffect, useEffect, useMemo, useImperativeHandle, useRef, } from "react";
|
|
3
|
-
import { FdCommand, FdCommandItem, FdCommandEmpty, FdCommandList, } from "@fd-component-toolbox/command/FdCommand";
|
|
4
|
-
import { Command as CommandPrimitive } from "cmdk";
|
|
5
|
-
import { Check } from "lucide-react";
|
|
6
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
7
|
-
import { onMultiSelectKeyDown, onMultiSelectValueChange, getMultiSelectStatusesById, resetOnClick, inputOnClick, mousePreventDefault, onItemSelect, handleOpenChange, registerClickOutsideMultiselectHandler, multiSelectVariants, } from "@fd-component-toolbox/multiselect/FdMultiselect.funcs";
|
|
8
|
-
import FdLabelAnimation from "@fd-component-toolbox/animation/FdLabelAnimation";
|
|
9
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
10
|
-
import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
|
|
11
|
-
import { selectAllValue, selectAllDescription, } from "@fd-component-toolbox/multiselect/fd-multi-select-constants";
|
|
12
|
-
import { FdFadeOutText } from "@fd-component-toolbox/fade-out-text/FdFadeOutText";
|
|
13
|
-
import { FdMultiselectContext, useFdMultiselect, } from "@fd-component-toolbox/multiselect/hooks/use-multi-select";
|
|
14
|
-
/**
|
|
15
|
-
* Root container component for the multiselect dropdown functionality
|
|
16
|
-
*
|
|
17
|
-
* @param FdMultiselectProps {@link FdMultiselectProps}
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```tsx
|
|
21
|
-
* function MyComponent() {
|
|
22
|
-
* const [selectedValues, setSelectedValues] = useState<string[]>([]);
|
|
23
|
-
*
|
|
24
|
-
* return (
|
|
25
|
-
* <FdMultiselect
|
|
26
|
-
* values={selectedValues}
|
|
27
|
-
* onValuesChange={setSelectedValues}
|
|
28
|
-
* displayValues={new Map([["option1", "Option 1"], ["option2", "Option 2"]])}
|
|
29
|
-
* disabled={false}
|
|
30
|
-
* withSelectAll
|
|
31
|
-
* variant="float"
|
|
32
|
-
* >
|
|
33
|
-
* ...
|
|
34
|
-
* </FdMultiselect>
|
|
35
|
-
* );
|
|
36
|
-
* }
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
function FdMultiselect({ values: value, onValuesChange: onValueChange, displayValues, loop, className, children, dir, disabled, variant, withSelectAll, onOpenChange, ref, ...props }) {
|
|
40
|
-
const [inputValue, setInputValue] = useState("");
|
|
41
|
-
const [open, setOpen] = useState(false);
|
|
42
|
-
const [activeIndex, setActiveIndex] = useState(-1);
|
|
43
|
-
const [description, setDescription] = useState("");
|
|
44
|
-
const [isHovered, setIsHovered] = useState(false);
|
|
45
|
-
const containerRef = useRef(null);
|
|
46
|
-
const isAllSelected = value.length === displayValues?.size;
|
|
47
|
-
const onOpenChangeCallback = useCallback((isOpen) => {
|
|
48
|
-
handleOpenChange(isOpen, setOpen, onOpenChange);
|
|
49
|
-
}, [onOpenChange]);
|
|
50
|
-
useImperativeHandle(ref, () => ({
|
|
51
|
-
open: () => {
|
|
52
|
-
onOpenChangeCallback(true);
|
|
53
|
-
},
|
|
54
|
-
}), [onOpenChangeCallback]);
|
|
55
|
-
const onValueChangeCallback = useCallback((val) => {
|
|
56
|
-
onMultiSelectValueChange(val, value, onValueChange, setDescription, withSelectAll, isAllSelected, displayValues);
|
|
57
|
-
}, [value, onValueChange, withSelectAll, isAllSelected, displayValues]);
|
|
58
|
-
const onFilterReset = useCallback(() => {
|
|
59
|
-
onValueChange([]);
|
|
60
|
-
}, [onValueChange]);
|
|
61
|
-
const contextValue = useMemo(() => ({
|
|
62
|
-
value,
|
|
63
|
-
onValueChange: onValueChangeCallback,
|
|
64
|
-
description,
|
|
65
|
-
open,
|
|
66
|
-
onOpenChangeCallback,
|
|
67
|
-
inputValue,
|
|
68
|
-
setInputValue,
|
|
69
|
-
activeIndex,
|
|
70
|
-
setActiveIndex,
|
|
71
|
-
disabled,
|
|
72
|
-
onReset: onFilterReset,
|
|
73
|
-
isHovered,
|
|
74
|
-
setIsHovered,
|
|
75
|
-
variant: variant ?? "float",
|
|
76
|
-
withSelectAll,
|
|
77
|
-
isAllSelected,
|
|
78
|
-
}), [
|
|
79
|
-
value,
|
|
80
|
-
onValueChangeCallback,
|
|
81
|
-
description,
|
|
82
|
-
open,
|
|
83
|
-
onOpenChangeCallback,
|
|
84
|
-
inputValue,
|
|
85
|
-
setInputValue,
|
|
86
|
-
activeIndex,
|
|
87
|
-
setActiveIndex,
|
|
88
|
-
disabled,
|
|
89
|
-
onFilterReset,
|
|
90
|
-
isHovered,
|
|
91
|
-
setIsHovered,
|
|
92
|
-
variant,
|
|
93
|
-
withSelectAll,
|
|
94
|
-
isAllSelected,
|
|
95
|
-
]);
|
|
96
|
-
useLayoutEffect(() => {
|
|
97
|
-
if (!value || value.length === 0) {
|
|
98
|
-
setDescription("");
|
|
99
|
-
}
|
|
100
|
-
}, [value]);
|
|
101
|
-
useEffect(() => {
|
|
102
|
-
if (withSelectAll && isAllSelected) {
|
|
103
|
-
setDescription(selectAllDescription);
|
|
104
|
-
}
|
|
105
|
-
else if (value && displayValues) {
|
|
106
|
-
const statuses = getMultiSelectStatusesById(value, displayValues);
|
|
107
|
-
setDescription(statuses);
|
|
108
|
-
}
|
|
109
|
-
}, [value, displayValues, withSelectAll, isAllSelected]);
|
|
110
|
-
useEffect(() => {
|
|
111
|
-
if (!open)
|
|
112
|
-
return undefined;
|
|
113
|
-
return registerClickOutsideMultiselectHandler(containerRef, onOpenChangeCallback);
|
|
114
|
-
}, [open, onOpenChangeCallback, containerRef]);
|
|
115
|
-
const onKeyDownCallback = useCallback((e) => {
|
|
116
|
-
onMultiSelectKeyDown(value, e.key, inputValue, activeIndex, setActiveIndex, onValueChange, setOpen, loop, dir);
|
|
117
|
-
}, [loop, value, inputValue, activeIndex, onValueChange, dir]);
|
|
118
|
-
return (<FdMultiselectContext.Provider value={contextValue}>
|
|
119
|
-
<FdCommand ref={containerRef} onKeyDown={onKeyDownCallback} className={cn("flex flex-col overflow-visible bg-transparent", className)} dir={dir} {...props}>
|
|
120
|
-
{children}
|
|
121
|
-
</FdCommand>
|
|
122
|
-
</FdMultiselectContext.Provider>);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Container component for the multiselect trigger
|
|
126
|
-
*
|
|
127
|
-
* {@link FdMultiselectTrigger}
|
|
128
|
-
*/
|
|
129
|
-
function FdMultiselectTrigger({ className, children, ref, ...props }) {
|
|
130
|
-
const { disabled, setIsHovered, variant } = useFdMultiselect();
|
|
131
|
-
return (<div ref={ref} className={cn(multiSelectVariants({ variant }), disabled && "cursor-not-allowed opacity-50", className)} onMouseOver={() => setIsHovered(true)} onMouseOut={() => setIsHovered(false)} {...props}>
|
|
132
|
-
{children}
|
|
133
|
-
</div>);
|
|
134
|
-
}
|
|
135
|
-
FdMultiselectTrigger.displayName = "MultiselectTrigger";
|
|
136
|
-
/**
|
|
137
|
-
* Button component that clears all currently selected values
|
|
138
|
-
*
|
|
139
|
-
* {@link FdMultiselectReset}
|
|
140
|
-
*/
|
|
141
|
-
function FdMultiselectReset() {
|
|
142
|
-
const { onReset, onOpenChangeCallback } = useFdMultiselect();
|
|
143
|
-
const onResetCallback = useCallback((e) => {
|
|
144
|
-
resetOnClick(e, onReset, onOpenChangeCallback);
|
|
145
|
-
}, [onReset, onOpenChangeCallback]);
|
|
146
|
-
return (<div className="flex items-center">
|
|
147
|
-
<FdButton variant="icon" size="icon" onClick={onResetCallback} className="size-2.5">
|
|
148
|
-
<FdIcon name={iconNames.cross1} className="bg-background"/>
|
|
149
|
-
</FdButton>
|
|
150
|
-
</div>);
|
|
151
|
-
}
|
|
152
|
-
FdMultiselectReset.displayName = "MultiselectReset";
|
|
153
|
-
/**
|
|
154
|
-
* Input component that displays selected values and handles user text input for filtering options
|
|
155
|
-
*
|
|
156
|
-
* Based on {@link https://ui.shadcn.com/docs/components/command Command.Input}
|
|
157
|
-
*
|
|
158
|
-
* @example
|
|
159
|
-
* ```tsx
|
|
160
|
-
* <FdMultiselectInput placeholder="Select options" animatedPlaceholder="Status"
|
|
161
|
-
* />
|
|
162
|
-
* ```
|
|
163
|
-
*/
|
|
164
|
-
function FdMultiselectInput({ className, placeholder, animatedPlaceholder, ref, ...props }) {
|
|
165
|
-
const { onOpenChangeCallback, description, open, inputValue, setInputValue, activeIndex, setActiveIndex, disabled, isHovered, variant, } = useFdMultiselect();
|
|
166
|
-
const onInputClickCallback = useCallback(() => {
|
|
167
|
-
inputOnClick(setActiveIndex, open, onOpenChangeCallback);
|
|
168
|
-
}, [setActiveIndex, open, onOpenChangeCallback]);
|
|
169
|
-
return (<div className="flex w-full cursor-pointer items-center justify-between" onClick={onInputClickCallback} tabIndex={0}>
|
|
170
|
-
<div className="relative w-full">
|
|
171
|
-
<FdFadeOutText>
|
|
172
|
-
<CommandPrimitive.Input {...props} ref={ref} placeholder={description || (placeholder ?? "")} value={inputValue} onValueChange={activeIndex === -1 ? setInputValue : undefined} disabled={disabled} className={cn("w-full flex-1 bg-transparent pl-2 caret-transparent outline-none", description ? "placeholder:text-primary" : "placeholder:text-muted-foreground", className)}/>
|
|
173
|
-
</FdFadeOutText>
|
|
174
|
-
{animatedPlaceholder && (<FdLabelAnimation label={animatedPlaceholder} shouldAnimate={!!description} className="top-0 max-w-full" variant={variant}/>)}
|
|
175
|
-
</div>
|
|
176
|
-
<div className="flex size-4 shrink-0 items-center justify-center">
|
|
177
|
-
{description ? (<div className={cn(isHovered ? "animate-fade-in" : "animate-fade-out")}>
|
|
178
|
-
<FdMultiselectReset />
|
|
179
|
-
</div>) : (<div className="focus:outline-none">
|
|
180
|
-
<FdIcon name="caretSort" className="pointer-events-none text-foreground opacity-50"/>
|
|
181
|
-
</div>)}
|
|
182
|
-
</div>
|
|
183
|
-
</div>);
|
|
184
|
-
}
|
|
185
|
-
FdMultiselectInput.displayName = "MultiselectInput";
|
|
186
|
-
/**
|
|
187
|
-
* Container component that wraps the dropdown content when the multiselect is open
|
|
188
|
-
*
|
|
189
|
-
* {@link FdMultiselectContent}
|
|
190
|
-
*/
|
|
191
|
-
function FdMultiselectContent({ children, className, ref, ...props }) {
|
|
192
|
-
const { open } = useFdMultiselect();
|
|
193
|
-
return (<div ref={ref} className={cn("relative top-1", className)} {...props}>
|
|
194
|
-
{open && children}
|
|
195
|
-
</div>);
|
|
196
|
-
}
|
|
197
|
-
FdMultiselectContent.displayName = "MultiselectContent";
|
|
198
|
-
/**
|
|
199
|
-
* Component that displays the list of selectable options in the dropdown
|
|
200
|
-
*
|
|
201
|
-
* Based on {@link https://ui.shadcn.com/docs/components/command Command.List}
|
|
202
|
-
*/
|
|
203
|
-
function FdMultiselectList({ className, children, ref, ...props }) {
|
|
204
|
-
const { withSelectAll } = useFdMultiselect();
|
|
205
|
-
return (<FdCommandList ref={ref} className={cn("absolute top-0 z-10 flex w-auto min-w-full flex-col gap-2 rounded-md border bg-background p-2 shadow-md transition-colors", className)} {...props}>
|
|
206
|
-
{withSelectAll && (<FdMultiselectItem value={selectAllValue} isSelectAll={false}>
|
|
207
|
-
{selectAllDescription}
|
|
208
|
-
</FdMultiselectItem>)}
|
|
209
|
-
{children}
|
|
210
|
-
<FdCommandEmpty>
|
|
211
|
-
<span className="text-muted-foreground">No results found</span>
|
|
212
|
-
</FdCommandEmpty>
|
|
213
|
-
</FdCommandList>);
|
|
214
|
-
}
|
|
215
|
-
FdMultiselectList.displayName = "MultiselectList";
|
|
216
|
-
/**
|
|
217
|
-
* Individual selectable option within the multiselect dropdown list
|
|
218
|
-
*
|
|
219
|
-
* Based on {@link https://ui.shadcn.com/docs/components/command Command.Item}
|
|
220
|
-
*
|
|
221
|
-
* @example
|
|
222
|
-
* ```tsx
|
|
223
|
-
* <FdMultiselectItem value="selectAll" isSelectAll>
|
|
224
|
-
* All
|
|
225
|
-
* </FdMultiselectItem>
|
|
226
|
-
* ```
|
|
227
|
-
*/
|
|
228
|
-
function FdMultiselectItem({ className, value, children, isSelectAll, ref, ...props }) {
|
|
229
|
-
const { value: Options, onValueChange, setInputValue, isAllSelected } = useFdMultiselect();
|
|
230
|
-
const isIncluded = isSelectAll ? isAllSelected : Options.includes(value);
|
|
231
|
-
const onSelect = useCallback(() => {
|
|
232
|
-
onItemSelect(value, onValueChange, setInputValue);
|
|
233
|
-
}, [value, onValueChange, setInputValue]);
|
|
234
|
-
return (<FdCommandItem ref={ref} {...props} onSelect={onSelect} className={cn("flex cursor-pointer justify-between rounded-md px-2 py-1 transition-colors", className, isIncluded && "cursor-default bg-accent text-accent-foreground", props.disabled && "cursor-not-allowed opacity-50")} onMouseDown={mousePreventDefault}>
|
|
235
|
-
{children}
|
|
236
|
-
<Check className={cn("ml-2 size-4 opacity-0", isIncluded && "opacity-50")}/>
|
|
237
|
-
</FdCommandItem>);
|
|
238
|
-
}
|
|
239
|
-
FdMultiselectItem.displayName = "MultiselectItem";
|
|
240
|
-
export { FdMultiselect, FdMultiselectTrigger, FdMultiselectInput, FdMultiselectContent, FdMultiselectList, FdMultiselectItem, multiSelectVariants, };
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import FdNavigationItemComponent from "@fd-component-toolbox/navigation/navigation-item/FdNavigationItem";
|
|
2
|
-
import { FdList } from "@fd-component-toolbox/list/FdList";
|
|
3
|
-
import { FdButton } from "@fd-component-toolbox/button/FdButton";
|
|
4
|
-
import { FdIcon, iconNames } from "@fd-component-toolbox/icon/FdIcon";
|
|
5
|
-
/**
|
|
6
|
-
* In-page navigation component that scrolls to target elements when items are clicked
|
|
7
|
-
*
|
|
8
|
-
* @param FdNavigationProps {@link FdNavigationProps}
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```tsx
|
|
12
|
-
function MyComponent() {
|
|
13
|
-
const [isOpen, setIsOpen] = useState(true);
|
|
14
|
-
|
|
15
|
-
return (
|
|
16
|
-
<FdNavigation
|
|
17
|
-
config={{
|
|
18
|
-
name: "Page Sections",
|
|
19
|
-
items: [
|
|
20
|
-
{ name: "Introduction", targetHtmlElementId: "intro-section" },
|
|
21
|
-
{ name: "Features", targetHtmlElementId: "features-section" },
|
|
22
|
-
],
|
|
23
|
-
}}
|
|
24
|
-
isOpen={isOpen}
|
|
25
|
-
onOpenClick={() => setIsOpen(!isOpen)}
|
|
26
|
-
/>;
|
|
27
|
-
);
|
|
28
|
-
}
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
function FdNavigation({ config, isOpen, onOpenClick }) {
|
|
32
|
-
return (<FdList className={`w-48 bg-background text-sm transition duration-300 ease-in-out ${isOpen ? "translate-x-0" : "-translate-x-56"}`}>
|
|
33
|
-
<div className="flex items-center justify-start">
|
|
34
|
-
{onOpenClick && (<FdButton variant={"icon"} onClick={onOpenClick} className="absolute -left-2">
|
|
35
|
-
<FdIcon name={iconNames.caretLeftIcon}/>
|
|
36
|
-
</FdButton>)}
|
|
37
|
-
{config.name !== "" && (<p className="m-2 cursor-pointer p-2 font-bold text-muted-foreground">{config.name}</p>)}
|
|
38
|
-
</div>
|
|
39
|
-
|
|
40
|
-
{config.items.map((item) => (<FdNavigationItemComponent item={item} key={item.targetHtmlElementId}/>))}
|
|
41
|
-
</FdList>);
|
|
42
|
-
}
|
|
43
|
-
export default FdNavigation;
|
package/packages/level2/fd-component-toolbox/navigation/navigation-item/FdNavigationItem.jsx
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { useCallback } from "react";
|
|
2
|
-
import { scrollIntoView } from "@fd-component-toolbox/navigation/navigation-item/FdNavigationItem.funcs";
|
|
3
|
-
/**
|
|
4
|
-
* Individual navigation item that scrolls to a target element when clicked
|
|
5
|
-
*
|
|
6
|
-
* @param FdNavigationItemComponentProps {@link FdNavigationItemComponentProps}
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```tsx
|
|
10
|
-
* <FdNavigationItemComponent item={{ name: "Features", targetHtmlElementId: "features-section"}}/>
|
|
11
|
-
* ```
|
|
12
|
-
*/
|
|
13
|
-
function FdNavigationItemComponent({ item }) {
|
|
14
|
-
const onClick = useCallback(() => {
|
|
15
|
-
if (item.targetHtmlElementId) {
|
|
16
|
-
scrollIntoView(item.targetHtmlElementId);
|
|
17
|
-
}
|
|
18
|
-
}, [item.targetHtmlElementId]);
|
|
19
|
-
return (<li className="m-2 cursor-pointer px-4 py-2 text-fd-accent hover:rounded-md hover:bg-muted/50" onClick={onClick}>
|
|
20
|
-
{item.name}
|
|
21
|
-
</li>);
|
|
22
|
-
}
|
|
23
|
-
export default FdNavigationItemComponent;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import * as React from "react";
|
|
3
|
-
import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
|
|
4
|
-
import { Circle } from "lucide-react";
|
|
5
|
-
import { cn } from "@fd-toolbox/lib/utils";
|
|
6
|
-
/**
|
|
7
|
-
* Container component for grouping radio button inputs
|
|
8
|
-
*
|
|
9
|
-
* Based on [Radio Group](https://ui.shadcn.com/docs/components/radio-group)
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```tsx
|
|
13
|
-
* function MyComponent() {
|
|
14
|
-
* const [value, setValue] = useState("option1");
|
|
15
|
-
*
|
|
16
|
-
* return (
|
|
17
|
-
* <FdRadioGroup value={value} onValueChange={setValue}>
|
|
18
|
-
* ...
|
|
19
|
-
* </FdRadioGroup>
|
|
20
|
-
* );
|
|
21
|
-
* }
|
|
22
|
-
* ```
|
|
23
|
-
*/
|
|
24
|
-
function FdRadioGroup({ className, ref, ...props }) {
|
|
25
|
-
return <RadioGroupPrimitive.Root className={cn("grid gap-2", className)} {...props} ref={ref}/>;
|
|
26
|
-
}
|
|
27
|
-
FdRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
|
|
28
|
-
/**
|
|
29
|
-
* Individual radio button input with circle indicator
|
|
30
|
-
*
|
|
31
|
-
* Based on [Radio Group](https://ui.shadcn.com/docs/components/radio-group)
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* ```tsx
|
|
35
|
-
* <FdRadioGroupItem value="option"/>
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
38
|
-
function FdRadioGroupItem({ className, ref, ...props }) {
|
|
39
|
-
return (<RadioGroupPrimitive.Item ref={ref} className={cn("aspect-square size-4 rounded-full border border-primary text-primary shadow focus:outline-none focus-visible:ring-1 focus-visible:ring-primary disabled:cursor-not-allowed disabled:opacity-50", className)} {...props}>
|
|
40
|
-
<RadioGroupPrimitive.Indicator className="flex items-center justify-center">
|
|
41
|
-
<Circle className="size-3.5 fill-primary"/>
|
|
42
|
-
</RadioGroupPrimitive.Indicator>
|
|
43
|
-
</RadioGroupPrimitive.Item>);
|
|
44
|
-
}
|
|
45
|
-
FdRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
|
|
46
|
-
export { FdRadioGroup, FdRadioGroupItem };
|