@orbe-agro/client-core 5.3.8 → 5.3.10
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/dist/@ecme/assets/styles/app.css +1 -1
- package/dist/@ecme/assets/styles/components/_input.css +1 -1
- package/dist/@ecme/assets/styles/components/_select.css +1 -1
- package/dist/@ecme/assets/styles/components/_tabs.css +1 -1
- package/dist/@ecme/assets/styles/components/index.css +1 -1
- package/dist/@ecme/assets/styles/tailwind/index.css +1 -1
- package/dist/@ecme/auth/AuthContext.js.map +1 -1
- package/dist/@ecme/auth/AuthProvider.js.map +1 -1
- package/dist/@ecme/components/docs/DemoCard/CardFooter.js.map +1 -1
- package/dist/@ecme/components/docs/DemoCard/DemoCard.js.map +1 -1
- package/dist/@ecme/components/docs/DocumentationNav.js.map +1 -1
- package/dist/@ecme/components/layouts/AuthLayout/AuthLayout.js.map +1 -1
- package/dist/@ecme/components/layouts/PostLoginLayout/PostLoginLayout.js.map +1 -1
- package/dist/@ecme/components/route/AppRoute.js.map +1 -1
- package/dist/@ecme/components/shared/AbbreviateNumber.js.map +1 -1
- package/dist/@ecme/components/shared/Affix.js.map +1 -1
- package/dist/@ecme/components/shared/AutoComplete.js.map +1 -1
- package/dist/@ecme/components/shared/CalendarView.js.map +1 -1
- package/dist/@ecme/components/shared/Chart.js.map +1 -1
- package/dist/@ecme/components/shared/ConfirmDialog.js.map +1 -1
- package/dist/@ecme/components/shared/DataTable.js.map +1 -1
- package/dist/@ecme/components/shared/DebounceInput.js.map +1 -1
- package/dist/@ecme/components/shared/GanttChart/TaskListTable.js.map +1 -1
- package/dist/@ecme/components/shared/GanttChart/getStartEndDateForProject.js.map +1 -1
- package/dist/@ecme/components/shared/GanttChart/tasksPreProcess.js.map +1 -1
- package/dist/@ecme/components/shared/Masonry/breakpoints.js.map +1 -1
- package/dist/@ecme/components/shared/Masonry/useCoulmnsCount.js.map +1 -1
- package/dist/@ecme/components/shared/Masonry/useMasonry.js.map +1 -1
- package/dist/@ecme/components/shared/Masonry/useWindowWidth.js.map +1 -1
- package/dist/@ecme/components/shared/OtpInput.js.map +1 -1
- package/dist/@ecme/components/shared/PasswordInput.js.map +1 -1
- package/dist/@ecme/components/shared/RegionMap.js.map +1 -1
- package/dist/@ecme/components/shared/RichTextEditor/RichTextEditor.js.map +1 -1
- package/dist/@ecme/components/shared/StickyFooter.js.map +1 -1
- package/dist/@ecme/components/shared/StrictModeDroppable.js.map +1 -1
- package/dist/@ecme/components/shared/ToggleDrawer.js.map +1 -1
- package/dist/@ecme/components/shared/UsersAvatarGroup.js.map +1 -1
- package/dist/@ecme/components/template/HorizontalMenuContent/HorizontalMenuDropdown.js.map +1 -1
- package/dist/@ecme/components/template/HorizontalMenuContent/HorizontalMenuDropdownContent.js.map +1 -1
- package/dist/@ecme/components/template/HorizontalMenuContent/HorizontalMenuDropdownTrigger.js.map +1 -1
- package/dist/@ecme/components/template/LanguageSelector.js.map +1 -1
- package/dist/@ecme/components/template/MobileNav.js.map +1 -1
- package/dist/@ecme/components/template/Notification/Notification.js.map +1 -1
- package/dist/@ecme/components/template/Search.js.map +1 -1
- package/dist/@ecme/components/template/SideNavToggle.js.map +1 -1
- package/dist/@ecme/components/template/SidePanel/SidePanel.js.map +1 -1
- package/dist/@ecme/components/template/StackedSideNav/StackedSideNav.js.map +1 -1
- package/dist/@ecme/components/template/StackedSideNav/StackedSideNavMini.js.map +1 -1
- package/dist/@ecme/components/template/StackedSideNav/StackedSideNavSecondary.js.map +1 -1
- package/dist/@ecme/components/template/ThemeConfigurator/CopyButton.js.map +1 -1
- package/dist/@ecme/components/template/ThemeConfigurator/DirectionSwitcher.js.map +1 -1
- package/dist/@ecme/components/template/ThemeConfigurator/LayoutSwitcher.js.map +1 -1
- package/dist/@ecme/components/template/ThemeConfigurator/ModeSwitcher.js.map +1 -1
- package/dist/@ecme/components/template/UserProfileDropdown.js.map +1 -1
- package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.js.map +1 -1
- package/dist/@ecme/components/ui/Alert/Alert.js.map +1 -1
- package/dist/@ecme/components/ui/Avatar/Avatar.js.map +1 -1
- package/dist/@ecme/components/ui/Avatar/AvatarGroup.js.map +1 -1
- package/dist/@ecme/components/ui/Button/Button.js.map +1 -1
- package/dist/@ecme/components/ui/Card/Card.js.map +1 -1
- package/dist/@ecme/components/ui/Checkbox/Checkbox.js.map +1 -1
- package/dist/@ecme/components/ui/Checkbox/Group.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/BasePicker.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/Calendar.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/CalendarBase.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/DatePicker.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/DatePickerRange.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/DateTimepicker.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/RangeCalendar.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/tables/DateTable.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/tables/MonthTable.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/tables/YearTable.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/tables/components/Month.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/utils/getDecadeRange.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/utils/getMonthDays.js.map +1 -1
- package/dist/@ecme/components/ui/Dialog/Dialog.js.map +1 -1
- package/dist/@ecme/components/ui/Drawer/Drawer.js.map +1 -1
- package/dist/@ecme/components/ui/Dropdown/DropdownItem.js.map +1 -1
- package/dist/@ecme/components/ui/Dropdown/DropdownMenu.js.map +1 -1
- package/dist/@ecme/components/ui/Dropdown/context/menuContext.js.map +1 -1
- package/dist/@ecme/components/ui/Form/FormItem.js.map +1 -1
- package/dist/@ecme/components/ui/Input/Input.js.map +1 -1
- package/dist/@ecme/components/ui/Menu/MenuCollapse.js.map +1 -1
- package/dist/@ecme/components/ui/MenuItem/index.js.map +1 -1
- package/dist/@ecme/components/ui/Notification/Notification.js.map +1 -1
- package/dist/@ecme/components/ui/Pagination/Next.js.map +1 -1
- package/dist/@ecme/components/ui/Pagination/Pagers.js.map +1 -1
- package/dist/@ecme/components/ui/Pagination/Pagination.js.map +1 -1
- package/dist/@ecme/components/ui/Pagination/Prev.js.map +1 -1
- package/dist/@ecme/components/ui/Progress/Circle.js.map +1 -1
- package/dist/@ecme/components/ui/Progress/Progress.js.map +1 -1
- package/dist/@ecme/components/ui/Radio/Group.js.map +1 -1
- package/dist/@ecme/components/ui/Radio/Radio.js.map +1 -1
- package/dist/@ecme/components/ui/Segment/Segment.js.map +1 -1
- package/dist/@ecme/components/ui/Segment/SegmentItem.js.map +1 -1
- package/dist/@ecme/components/ui/Select/Select.js.map +1 -1
- package/dist/@ecme/components/ui/Steps/StepItem.js.map +1 -1
- package/dist/@ecme/components/ui/Steps/Steps.js.map +1 -1
- package/dist/@ecme/components/ui/Switcher/Switcher.js.map +1 -1
- package/dist/@ecme/components/ui/Tabs/TabNav.js.map +1 -1
- package/dist/@ecme/components/ui/TimeInput/AmPmInput.js.map +1 -1
- package/dist/@ecme/components/ui/TimeInput/TimeInput.js.map +1 -1
- package/dist/@ecme/components/ui/TimeInput/TimeInputField.js.map +1 -1
- package/dist/@ecme/components/ui/TimeInput/TimeInputRange.js.map +1 -1
- package/dist/@ecme/components/ui/TimeInput/utils/createAmPmHandler.js.map +1 -1
- package/dist/@ecme/components/ui/TimeInput/utils/createTimeHandler.js.map +1 -1
- package/dist/@ecme/components/ui/Tooltip/Arrow.js.map +1 -1
- package/dist/@ecme/components/ui/Tooltip/Tooltip.js.map +1 -1
- package/dist/@ecme/components/ui/Upload/Upload.js.map +1 -1
- package/dist/@ecme/components/ui/hooks/useCallbackRef.js.map +1 -1
- package/dist/@ecme/components/ui/hooks/useControllableState.js.map +1 -1
- package/dist/@ecme/components/ui/hooks/useDidUpdate.js.map +1 -1
- package/dist/@ecme/components/ui/hooks/useMergeRef.js.map +1 -1
- package/dist/@ecme/components/ui/hooks/useRootClose.js.map +1 -1
- package/dist/@ecme/components/ui/hooks/useTimeout.js.map +1 -1
- package/dist/@ecme/components/ui/hooks/useWindowSize.js.map +1 -1
- package/dist/@ecme/components/ui/toast/ToastWrapper.js.map +1 -1
- package/dist/@ecme/components/ui/toast/toast.js.map +1 -1
- package/dist/@ecme/components/ui/utils/chainedFunction.js.map +1 -1
- package/dist/@ecme/components/ui/utils/mapCloneElement.js.map +1 -1
- package/dist/@ecme/components/view/Activity/ActivityAvatar.js.map +1 -1
- package/dist/@ecme/components/view/Activity/ActivityEvent.js.map +1 -1
- package/dist/@ecme/components/view/ChatBox/components/Attachment.js.map +1 -1
- package/dist/@ecme/components/view/ChatBox/components/ChatInput.js.map +1 -1
- package/dist/@ecme/components/view/CreditCardDialog/CreditCardDialog.js.map +1 -1
- package/dist/@ecme/configs/chart.config.js.map +1 -1
- package/dist/@ecme/constants/theme.constant.js +23 -23
- package/dist/@ecme/constants/theme.constant.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/accountsFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/aiFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/authFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/commonFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/customersFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/fileFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/helpCenterFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/ordersFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/productsFakeApi.js.map +1 -1
- package/dist/@ecme/services/ApiService.js.map +1 -1
- package/dist/@ecme/services/axios/AxiosRequestIntrceptorConfigCallback.js.map +1 -1
- package/dist/@ecme/store/authStore.js.map +1 -1
- package/dist/@ecme/store/localeStore.js.map +1 -1
- package/dist/@ecme/utils/cookiesStorage.js.map +1 -1
- package/dist/@ecme/utils/hoc/withHeaderItem.js.map +1 -1
- package/dist/@ecme/utils/hooks/useDarkMode.js.map +1 -1
- package/dist/@ecme/utils/hooks/useDirection.js.map +1 -1
- package/dist/@ecme/utils/hooks/useInfiniteScroll.js.map +1 -1
- package/dist/@ecme/utils/hooks/useInterval .js.map +1 -1
- package/dist/@ecme/utils/hooks/useLayoutGap.js.map +1 -1
- package/dist/@ecme/utils/hooks/useLocale.js.map +1 -1
- package/dist/@ecme/utils/hooks/useMenuActive.js.map +1 -1
- package/dist/@ecme/utils/hooks/useRandomBgColor.js.map +1 -1
- package/dist/@ecme/utils/hooks/useResponsive.js.map +1 -1
- package/dist/@ecme/utils/hooks/useScrollTop.js.map +1 -1
- package/dist/@ecme/utils/hooks/useThemeSchema.js.map +1 -1
- package/dist/@ecme/utils/hooks/useTimeOutMessage.js.map +1 -1
- package/dist/@ecme/utils/reorderDragable.js.map +1 -1
- package/dist/@ecme/utils/sortBy.js.map +1 -1
- package/dist/@ecme/utils/wildCardSearch.js.map +1 -1
- package/dist/@ecme/views/auth/ForgotPassword/ForgotPassword.js.map +1 -1
- package/dist/@ecme/views/auth/ForgotPassword/components/ForgotPasswordForm.js.map +1 -1
- package/dist/@ecme/views/auth/OtpVerification/OtpVerification.js.map +1 -1
- package/dist/@ecme/views/auth/OtpVerification/components/OtpVerificationForm.js.map +1 -1
- package/dist/@ecme/views/auth/ResetPassword/ResetPassword.js.map +1 -1
- package/dist/@ecme/views/auth/ResetPassword/components/ResetPasswordForm.js.map +1 -1
- package/dist/@ecme/views/auth/SignIn/components/OauthSignIn.js.map +1 -1
- package/dist/@ecme/views/auth/SignIn/components/SignInForm.js.map +1 -1
- package/dist/@ecme/views/auth/SignUp/components/SignUpForm.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/ActivityLog/ActivityLog.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Pricing/components/PaymentDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Pricing/components/Plans.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/RolesPermissions/components/RolesPermissionsAccessDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/RolesPermissions/components/RolesPermissionsGroups.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/RolesPermissions/components/RolesPermissionsUserAction.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/RolesPermissions/components/RolesPermissionsUserSelected.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/RolesPermissions/components/RolesPermissionsUserTable.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/RolesPermissions/store/rolePermissionsStore.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/BillingHistory.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/SettingIntegration.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/SettingMobileMenu.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/SettingsBilling.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/SettingsMenu.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/SettingsNotification.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/SettingsProfile.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/SettingsSecurity.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/components/ChatCustomAction.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/components/ChatCustomContent.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/components/ChatHistory.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/components/ChatHistoryItem.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/components/ChatHistoryRenameDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/components/ChatSideNav.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/components/ChatView.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/hooks/useChatSend.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/store/generativeChatStore.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Image/components/Gallery.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Image/components/GeneratorPrompt.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Image/components/ImageDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Image/store/imageGeneratorStore.js.map +1 -1
- package/dist/@ecme/views/concepts/calendar/Calendar/Calendar.js.map +1 -1
- package/dist/@ecme/views/concepts/calendar/Calendar/components/EventDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/chat/Chat/components/ChatAction.js.map +1 -1
- package/dist/@ecme/views/concepts/chat/Chat/components/ChatBody.js.map +1 -1
- package/dist/@ecme/views/concepts/chat/Chat/components/ChatList.js.map +1 -1
- package/dist/@ecme/views/concepts/chat/Chat/components/ContactInfoDrawer.js.map +1 -1
- package/dist/@ecme/views/concepts/chat/Chat/components/NewChat.js.map +1 -1
- package/dist/@ecme/views/concepts/chat/Chat/hooks/useChat.js.map +1 -1
- package/dist/@ecme/views/concepts/chat/Chat/store/chatStore.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerCreate/CustomerCreate.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerDetails/ActivitySection.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerDetails/BillingSection.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerDetails/ProfileSection.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerEdit/CustomerEdit.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerForm/AccountSection.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerForm/CustomerForm.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerForm/OverviewSection.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerForm/ProfileImageSection.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerList/components/CustomerListSelected.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerList/components/CustomerListTable.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerList/components/CustomerListTableFilter.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerList/components/CustomersListTableTools.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerList/store/customerListStore.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/FileManager.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/components/FileDetails.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/components/FileItemDropdown.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/components/FileManagerDeleteDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/components/FileManagerHeader.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/components/FileManagerInviteDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/components/FileManagerRenameDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/components/UploadFile.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/store/useFileManagerStore.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/Article/components/ArticleAction.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/EditArticle/components/EditArticleFooter.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/EditArticle/components/EditArticleHeader.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/ManageArticle/components/ArticleListSearch.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/ManageArticle/components/ArticleListSelected.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/ManageArticle/components/ArticleListTable.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/ManageArticle/components/ArticleTableFilter.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/ManageArticle/store/manageArticleStore.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/SupportHub/components/Article.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/SupportHub/components/ArticleList.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/SupportHub/components/Categories.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/SupportHub/components/TopSection.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/components/MailBody.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/components/MailBodyTop.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/components/MailDetailAction.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/components/MailDetailTitle.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/components/MailEditor.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/components/MailList.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/components/MailSidebar.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/hooks/useMail.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/hooks/useMailAction.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderCreate/OrderCreate.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderDetails/components/OrderDetailHeaderExtra.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderEdit/OrderEdit.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderForm/OrderForm.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderForm/components/CustomerDetailSection.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderForm/components/PaymentMethodSection.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderForm/components/ProductSelectSection.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderList/components/OrderListTable.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderList/components/OrderListTableFilter.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderList/components/OrderListTableTools.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductCreate/ProductCreate.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductEdit/ProducEdit.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductForm/ProductForm.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductForm/components/GeneralSection.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductForm/components/ImageSection.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductForm/components/PricingSection.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductList/components/ProducListTableTools.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductList/components/ProductListSearch.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductList/components/ProductListSelected.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductList/components/ProductListTable.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductList/components/ProductTableFilter.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductList/store/productListStore.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Issue/Issue.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Issue/components/IssueBody.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Issue/components/IssueFooter.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Issue/components/IssueHeader.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectDetails/ProjectDetails.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectDetails/components/ProjectDetailsActivity.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectDetails/components/ProjectDetailsHeader.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectDetails/components/ProjectDetailsNavigation.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectDetails/components/ProjectDetailsSetting.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectDetails/components/ProjectDetailsTask.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectList/components/NewProjectForm.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectList/components/NewTaskField.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectList/components/ProjectListContent.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectList/components/ProjectListHeader.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectList/hooks/useProjectList.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectList/store/projectListStore.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/AddNewColumnContent.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/AddNewMemberContent.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/AddNewTicketContent.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/Board.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/BoardCard.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/BoardTitle.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/ScrumBoardHeader.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/TicketContent.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Tasks/Tasks.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Tasks/components/AddTask.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Tasks/components/TaskList.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Tasks/components/TasksHeader.js.map +1 -1
- package/dist/@ecme/views/dashboards/AnalyticDashboard/components/AnalyticChart.js.map +1 -1
- package/dist/@ecme/views/dashboards/AnalyticDashboard/components/AnalyticHeader.js.map +1 -1
- package/dist/@ecme/views/dashboards/AnalyticDashboard/components/DeviceSession.js.map +1 -1
- package/dist/@ecme/views/dashboards/AnalyticDashboard/components/Traffic.js.map +1 -1
- package/dist/@ecme/views/dashboards/EcommerceDashboard/components/Overview.js.map +1 -1
- package/dist/@ecme/views/dashboards/EcommerceDashboard/components/RecentOrder.js.map +1 -1
- package/dist/@ecme/views/dashboards/EcommerceDashboard/components/RevenueByChannel.js.map +1 -1
- package/dist/@ecme/views/dashboards/EcommerceDashboard/components/SalesTarget.js.map +1 -1
- package/dist/@ecme/views/dashboards/EcommerceDashboard/components/TopProduct.js.map +1 -1
- package/dist/@ecme/views/dashboards/MarketingDashboard/components/AdsPerformance.js.map +1 -1
- package/dist/@ecme/views/dashboards/MarketingDashboard/components/CreateCampaign.js.map +1 -1
- package/dist/@ecme/views/dashboards/MarketingDashboard/components/LeadPerformance.js.map +1 -1
- package/dist/@ecme/views/dashboards/MarketingDashboard/components/RecentCampaign.js.map +1 -1
- package/dist/@ecme/views/dashboards/ProjectDashboard/components/CreateEventDialog.js.map +1 -1
- package/dist/@ecme/views/dashboards/ProjectDashboard/components/CurrentTasks.js.map +1 -1
- package/dist/@ecme/views/dashboards/ProjectDashboard/components/Schedule.js.map +1 -1
- package/dist/@ecme/views/dashboards/ProjectDashboard/components/UpcomingSchedule.js.map +1 -1
- package/dist/@ecme/views/guide/Documentations/components/Layouts.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/CalendarViewDoc/Example.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/ConfirmDialogDoc/Example.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/CustomFormatInputDoc/Simple.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/CustomFormatInputDoc/WithForm.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/DataTableDoc/Basic.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/DataTableDoc/Checkable.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/DataTableDoc/Query.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/DebounceInputDoc/Example.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/GanttChartDoc/Example.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/MasonryDoc/Basic.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/MasonryDoc/Responsive.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/NumericInputDoc/Basic.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/NumericInputDoc/WithForm.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/OtpInputDoc/Basic.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/OtpInputDoc/Length.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/PasswordInputDoc/Example.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/PatternInputDoc/Basic.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/PatternInputDoc/WithForm.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/PresetSegmentItemOptionDoc/Example.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/RichTextEditorDoc/CustomConfig.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/RichTextEditorDoc/WithForm.js.map +1 -1
- package/dist/@ecme/views/ui-components/common/Button/ButtonWithIcon.js.map +1 -1
- package/dist/@ecme/views/ui-components/common/Button/Loading.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Calendar/CustomRender.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/DragAndDrop.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/Editable.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/Expanding.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/Filtering.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/Group.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/PaginationTable.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/Resizable.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/RowSelection.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/Sorting.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/SubComponent.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Alert/Closable.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Dialog/Basic.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Dialog/Closable.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Dialog/CloseWithEscBackdrop.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Dialog/CustomStyle.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Dialog/InternalScroll.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Dialog/Size.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Dialog/StaticBackdrop.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Drawer/Basic.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Drawer/Closable.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Drawer/CustomStyle.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Drawer/Footer.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Drawer/Placement.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Drawer/WidthHeight.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Progress/Dynamic.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/AlertToast.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/Closable.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/CustomClose.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/CustomIcon.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/Duration.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/Notification.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/NotificationType.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/Placement.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Checkbox/Default.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Checkbox/Group.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/DatePicker/Controlled.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/DatePicker/CustomRender.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/DatePicker/DisabledCertainDate.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/AsyncValidation.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/Basic.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/DependentValidation.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/DynamicForm.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/FieldValidation.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/Layout.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/MixedFormControl.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/SchemaValidation.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/Sizes.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Input/PasswordVisible.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Radio/Group.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Radio/Vertical.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Segment/Controlled.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Segment/Size.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Select/AsyncOnSearch.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Select/Creatable.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Select/LoadOptionOnExpand.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Switcher/Basic.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Switcher/Controlled.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Switcher/Loading.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Upload/AvatarImage.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Upload/BeforeUpload.js.map +1 -1
- package/dist/@ecme/views/ui-components/graph/Charts/DashedLine.js.map +1 -1
- package/dist/@ecme/views/ui-components/graph/Maps/ChoroplethQuantile.js.map +1 -1
- package/dist/@ecme/views/ui-components/graph/Maps/ChoroplethQuantize.js.map +1 -1
- package/dist/@ecme/views/ui-components/graph/Maps/MapChartWithTooltip.js.map +1 -1
- package/dist/@ecme/views/ui-components/graph/Maps/UsaStatesMapWithLabels.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Dropdown/Default.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Menu/CollapsableMenuItem.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Menu/Simple.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Pagination/Basic.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Pagination/Controlled.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Pagination/PageSize.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Steps/Clickable.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Steps/Controlled.js.map +1 -1
- package/dist/@types/@ecme/configs/chart.config.d.ts +2 -0
- package/dist/@types/@ecme/configs/chart.config.d.ts.map +1 -1
- package/dist/@types/base/configs/endpoints.config/Ticket/ticket.endpoint.config.d.ts +1 -0
- package/dist/@types/base/configs/endpoints.config/Ticket/ticket.endpoint.config.d.ts.map +1 -1
- package/dist/@types/base/configs/endpoints.config/centralNfe/centralNfe.d.ts +18 -0
- package/dist/@types/base/configs/endpoints.config/centralNfe/centralNfe.d.ts.map +1 -1
- package/dist/@types/base/configs/endpoints.config/centralNfe/config/vinculoUnidadeMedida.d.ts +20 -0
- package/dist/@types/base/configs/endpoints.config/centralNfe/config/vinculoUnidadeMedida.d.ts.map +1 -0
- package/dist/@types/base/configs/endpoints.config/endpoints.navigation.d.ts +18 -0
- package/dist/@types/base/configs/endpoints.config/endpoints.navigation.d.ts.map +1 -1
- package/dist/@types/base/configs/navigation.config/modules.submenu/centralNfe/submenu.centralNfe.d.ts.map +1 -1
- package/dist/@types/base/services/modules/Ticket/TicketService.d.ts +1 -0
- package/dist/@types/base/services/modules/Ticket/TicketService.d.ts.map +1 -1
- package/dist/@types/base/services/modules/centralNfe/index.d.ts +2 -0
- package/dist/@types/base/services/modules/centralNfe/index.d.ts.map +1 -1
- package/dist/@types/base/services/modules/centralNfe/vinculoUnidadeMedida/VinculoUnidadeMedidaService.d.ts +5 -0
- package/dist/@types/base/services/modules/centralNfe/vinculoUnidadeMedida/VinculoUnidadeMedidaService.d.ts.map +1 -0
- package/dist/@types/base/services/modules/modules.query.d.ts +4 -0
- package/dist/@types/base/services/modules/modules.query.d.ts.map +1 -1
- package/dist/base/assets/styles/init.css +1 -1
- package/dist/base/components/forms/GenericForms/GenericUploadFormSection.js.map +1 -1
- package/dist/base/components/forms/NumberFormVariant/GenericNumberFormSectionPercentage.js.map +1 -1
- package/dist/base/components/shared/AceitarProcessoDialog.js.map +1 -1
- package/dist/base/components/shared/AdicionarHistoricoDialog.js.map +1 -1
- package/dist/base/components/shared/CancelarProcessoDialog.js.map +1 -1
- package/dist/base/components/shared/ConcluirProcessoDialog.js.map +1 -1
- package/dist/base/components/shared/ReabrirProcessoDialog.js.map +1 -1
- package/dist/base/components/shared/RetornarFluxAtendimentoDialog.js.map +1 -1
- package/dist/base/components/shared/TransferirParaAtendenteDialog.js.map +1 -1
- package/dist/base/components/shared/TransferirParaSolicitanteDialog.js.map +1 -1
- package/dist/base/components/shared/TransferirProcessoDialog.js.map +1 -1
- package/dist/base/components/table/ListColumn.js.map +1 -1
- package/dist/base/components/tools/NavFilter.js.map +1 -1
- package/dist/base/configs/endpoints.config/Ticket/ticket.endpoint.config.js +1 -0
- package/dist/base/configs/endpoints.config/Ticket/ticket.endpoint.config.js.map +1 -1
- package/dist/base/configs/endpoints.config/centralNfe/centralNfe.js +5 -3
- package/dist/base/configs/endpoints.config/centralNfe/centralNfe.js.map +1 -1
- package/dist/base/configs/endpoints.config/centralNfe/config/vinculoUnidadeMedida.js +10 -0
- package/dist/base/configs/endpoints.config/centralNfe/config/vinculoUnidadeMedida.js.map +1 -0
- package/dist/base/configs/navigation.config/modules.submenu/centralNfe/submenu.centralNfe.js +10 -0
- package/dist/base/configs/navigation.config/modules.submenu/centralNfe/submenu.centralNfe.js.map +1 -1
- package/dist/base/hooks/flux/useAceitarProcesso.js.map +1 -1
- package/dist/base/hooks/flux/useAdicionarHistorico.js.map +1 -1
- package/dist/base/hooks/flux/useCancelarProcesso.js.map +1 -1
- package/dist/base/hooks/flux/useConcluirProcesso.js.map +1 -1
- package/dist/base/hooks/flux/useReabrirProcesso.js.map +1 -1
- package/dist/base/hooks/flux/useRetornarFluxoAtendimento.js.map +1 -1
- package/dist/base/hooks/flux/useTransferirParaAtendente.js.map +1 -1
- package/dist/base/hooks/flux/useTransferirParaSolicitante.js.map +1 -1
- package/dist/base/hooks/flux/useTransferirProcesso.js.map +1 -1
- package/dist/base/services/modules/Ticket/TicketService.js +17 -9
- package/dist/base/services/modules/Ticket/TicketService.js.map +1 -1
- package/dist/base/services/modules/centralNfe/index.js +13 -3
- package/dist/base/services/modules/centralNfe/index.js.map +1 -1
- package/dist/base/services/modules/centralNfe/vinculoUnidadeMedida/VinculoUnidadeMedidaService.js +37 -0
- package/dist/base/services/modules/centralNfe/vinculoUnidadeMedida/VinculoUnidadeMedidaService.js.map +1 -0
- package/dist/base/services/modules/modules.query.js +7 -6
- package/dist/base/services/modules/modules.query.js.map +1 -1
- package/dist/base/services/query.js.map +1 -1
- package/dist/base/utils/functions/formUtils.js.map +1 -1
- package/dist/base/utils/functions/handleInputChangeUtils.js.map +1 -1
- package/dist/base/utils/functions/stringUtils.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsProfile.js","sources":["../../../../../../../lib/@ecme/views/concepts/accounts/Settings/components/SettingsProfile.tsx"],"sourcesContent":["import { useMemo, useEffect } from 'react'\nimport Button from '@/components/ui/Button'\nimport Upload from '@/components/ui/Upload'\nimport Input from '@/components/ui/Input'\nimport Select, { Option as DefaultOption } from '@/components/ui/Select'\nimport Avatar from '@/components/ui/Avatar'\nimport { Form, FormItem } from '@/components/ui/Form'\nimport NumericInput from '@/components/shared/NumericInput'\nimport { countryList } from '@/constants/countries.constant'\nimport { components } from 'react-select'\nimport type { ControlProps, OptionProps } from 'react-select'\nimport { apiGetSettingsProfile } from '@/services/AccontsService'\nimport sleep from '@/utils/sleep'\nimport useSWR from 'swr'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm, Controller } from 'react-hook-form'\nimport { z } from 'zod'\nimport { HiOutlineUser } from 'react-icons/hi'\nimport { TbPlus } from 'react-icons/tb'\nimport type { ZodType } from 'zod'\nimport type { GetSettingsProfileResponse } from '../types'\n\ntype ProfileSchema = {\n firstName: string\n lastName: string\n email: string\n dialCode: string\n phoneNumber: string\n img: string\n country: string\n address: string\n postcode: string\n city: string\n}\n\ntype CountryOption = {\n label: string\n dialCode: string\n value: string\n}\n\nconst { Control } = components\n\nconst validationSchema: ZodType<ProfileSchema> = z.object({\n firstName: z.string().min(1, { message: 'First name required' }),\n lastName: z.string().min(1, { message: 'Last name required' }),\n email: z\n .string()\n .min(1, { message: 'Email required' })\n .email({ message: 'Invalid email' }),\n dialCode: z.string().min(1, { message: 'Please select your country code' }),\n phoneNumber: z\n .string()\n .min(1, { message: 'Please input your mobile number' }),\n country: z.string().min(1, { message: 'Please select a country' }),\n address: z.string().min(1, { message: 'Addrress required' }),\n postcode: z.string().min(1, { message: 'Postcode required' }),\n city: z.string().min(1, { message: 'City required' }),\n img: z.string(),\n})\n\nconst CustomSelectOption = (\n props: OptionProps<CountryOption> & { variant: 'country' | 'phone' },\n) => {\n return (\n <DefaultOption<CountryOption>\n {...props}\n customLabel={(data, label) => (\n <span className=\"flex items-center gap-2\">\n <Avatar\n shape=\"circle\"\n size={20}\n src={`/img/countries/${data.value}.png`}\n />\n {props.variant === 'country' && <span>{label}</span>}\n {props.variant === 'phone' && <span>{data.dialCode}</span>}\n </span>\n )}\n />\n )\n}\n\nconst CustomControl = ({ children, ...props }: ControlProps<CountryOption>) => {\n const selected = props.getValue()[0]\n return (\n <Control {...props}>\n {selected && (\n <Avatar\n className=\"ltr:ml-4 rtl:mr-4\"\n shape=\"circle\"\n size={20}\n src={`/img/countries/${selected.value}.png`}\n />\n )}\n {children}\n </Control>\n )\n}\n\nconst SettingsProfile = () => {\n const { data, mutate } = useSWR(\n '/api/settings/profile/',\n () => apiGetSettingsProfile<GetSettingsProfileResponse>(),\n {\n revalidateOnFocus: false,\n revalidateIfStale: false,\n revalidateOnReconnect: false,\n },\n )\n\n const dialCodeList = useMemo(() => {\n const newCountryList: Array<CountryOption> = JSON.parse(\n JSON.stringify(countryList),\n )\n\n return newCountryList.map((country) => {\n country.label = country.dialCode\n return country\n })\n }, [])\n\n const beforeUpload = (files: FileList | null) => {\n let valid: string | boolean = true\n\n const allowedFileType = ['image/jpeg', 'image/png']\n if (files) {\n for (const file of files) {\n if (!allowedFileType.includes(file.type)) {\n valid = 'Please upload a .jpeg or .png file!'\n }\n }\n }\n\n return valid\n }\n\n const {\n handleSubmit,\n reset,\n formState: { errors, isSubmitting },\n control,\n } = useForm<ProfileSchema>({\n resolver: zodResolver(validationSchema),\n })\n\n useEffect(() => {\n if (data) {\n reset(data)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data])\n\n const onSubmit = async (values: ProfileSchema) => {\n await sleep(500)\n if (data) {\n mutate({ ...data, ...values }, false)\n }\n }\n\n return (\n <>\n <h4 className=\"mb-8\">Personal information</h4>\n <Form onSubmit={handleSubmit(onSubmit)}>\n <div className=\"mb-8\">\n <Controller\n name=\"img\"\n control={control}\n render={({ field }) => (\n <div className=\"flex items-center gap-4\">\n <Avatar\n size={90}\n className=\"border-4 border-white bg-gray-100 text-gray-300 shadow-lg\"\n icon={<HiOutlineUser />}\n src={field.value}\n />\n <div className=\"flex items-center gap-2\">\n <Upload\n showList={false}\n uploadLimit={1}\n beforeUpload={beforeUpload}\n onChange={(files) => {\n if (files.length > 0) {\n field.onChange(\n URL.createObjectURL(\n files[0],\n ),\n )\n }\n }}\n >\n <Button\n variant=\"solid\"\n size=\"sm\"\n type=\"button\"\n icon={<TbPlus />}\n >\n Upload Image\n </Button>\n </Upload>\n <Button\n size=\"sm\"\n type=\"button\"\n onClick={() => {\n field.onChange('')\n }}\n >\n Remove\n </Button>\n </div>\n </div>\n )}\n />\n </div>\n <div className=\"grid md:grid-cols-2 gap-4\">\n <FormItem\n label=\"First name\"\n invalid={Boolean(errors.firstName)}\n errorMessage={errors.firstName?.message}\n >\n <Controller\n name=\"firstName\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"First Name\"\n {...field}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"User name\"\n invalid={Boolean(errors.lastName)}\n errorMessage={errors.lastName?.message}\n >\n <Controller\n name=\"lastName\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"Last Name\"\n {...field}\n />\n )}\n />\n </FormItem>\n </div>\n <FormItem\n label=\"Email\"\n invalid={Boolean(errors.email)}\n errorMessage={errors.email?.message}\n >\n <Controller\n name=\"email\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"email\"\n autoComplete=\"off\"\n placeholder=\"Email\"\n {...field}\n />\n )}\n />\n </FormItem>\n <div className=\"flex items-end gap-4 w-full mb-6\">\n <FormItem\n invalid={\n Boolean(errors.phoneNumber) ||\n Boolean(errors.dialCode)\n }\n >\n <label className=\"form-label mb-2\">Phone number</label>\n <Controller\n name=\"dialCode\"\n control={control}\n render={({ field }) => (\n <Select<CountryOption>\n options={dialCodeList}\n {...field}\n className=\"w-[150px]\"\n components={{\n Option: (props) => (\n <CustomSelectOption\n variant=\"phone\"\n {...(props as OptionProps<CountryOption>)}\n />\n ),\n Control: CustomControl,\n }}\n placeholder=\"\"\n value={dialCodeList.filter(\n (option) =>\n option.dialCode === field.value,\n )}\n onChange={(option) =>\n field.onChange(option?.dialCode)\n }\n />\n )}\n />\n </FormItem>\n <FormItem\n className=\"w-full\"\n invalid={\n Boolean(errors.phoneNumber) ||\n Boolean(errors.dialCode)\n }\n errorMessage={errors.phoneNumber?.message}\n >\n <Controller\n name=\"phoneNumber\"\n control={control}\n render={({ field }) => (\n <NumericInput\n autoComplete=\"off\"\n placeholder=\"Phone Number\"\n value={field.value}\n onChange={field.onChange}\n onBlur={field.onBlur}\n />\n )}\n />\n </FormItem>\n </div>\n <h4 className=\"mb-6\">Address information</h4>\n <FormItem\n label=\"Country\"\n invalid={Boolean(errors.country)}\n errorMessage={errors.country?.message}\n >\n <Controller\n name=\"country\"\n control={control}\n render={({ field }) => (\n <Select<CountryOption>\n options={countryList}\n {...field}\n components={{\n Option: (props) => (\n <CustomSelectOption\n variant=\"country\"\n {...(props as OptionProps<CountryOption>)}\n />\n ),\n Control: CustomControl,\n }}\n placeholder=\"\"\n value={countryList.filter(\n (option) => option.value === field.value,\n )}\n onChange={(option) =>\n field.onChange(option?.value)\n }\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"Address\"\n invalid={Boolean(errors.address)}\n errorMessage={errors.address?.message}\n >\n <Controller\n name=\"address\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"Address\"\n {...field}\n />\n )}\n />\n </FormItem>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <FormItem\n label=\"City\"\n invalid={Boolean(errors.city)}\n errorMessage={errors.city?.message}\n >\n <Controller\n name=\"city\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"City\"\n {...field}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"Postal Code\"\n invalid={Boolean(errors.postcode)}\n errorMessage={errors.postcode?.message}\n >\n <Controller\n name=\"postcode\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"Postal Code\"\n {...field}\n />\n )}\n />\n </FormItem>\n </div>\n <div className=\"flex justify-end\">\n <Button\n variant=\"solid\"\n type=\"submit\"\n loading={isSubmitting}\n >\n Save\n </Button>\n </div>\n </Form>\n </>\n )\n}\n\nexport default SettingsProfile\n"],"names":["Control","components","validationSchema","z","CustomSelectOption","props","jsx","DefaultOption","data","label","jsxs","Avatar","CustomControl","children","selected","SettingsProfile","mutate","useSWR","apiGetSettingsProfile","dialCodeList","useMemo","countryList","country","beforeUpload","files","valid","allowedFileType","file","handleSubmit","reset","errors","isSubmitting","control","useForm","zodResolver","useEffect","Fragment","Form","values","sleep","Controller","field","HiOutlineUser","Upload","Button","TbPlus","FormItem","_a","Input","_b","_c","Select","option","_d","NumericInput","_e","_f","_g","_h"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SettingsProfile.js","sources":["../../../../../../../lib/@ecme/views/concepts/accounts/Settings/components/SettingsProfile.tsx"],"sourcesContent":["import { useMemo, useEffect } from 'react'\nimport Button from '@/components/ui/Button'\nimport Upload from '@/components/ui/Upload'\nimport Input from '@/components/ui/Input'\nimport Select, { Option as DefaultOption } from '@/components/ui/Select'\nimport Avatar from '@/components/ui/Avatar'\nimport { Form, FormItem } from '@/components/ui/Form'\nimport NumericInput from '@/components/shared/NumericInput'\nimport { countryList } from '@/constants/countries.constant'\nimport { components } from 'react-select'\nimport type { ControlProps, OptionProps } from 'react-select'\nimport { apiGetSettingsProfile } from '@/services/AccontsService'\nimport sleep from '@/utils/sleep'\nimport useSWR from 'swr'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm, Controller } from 'react-hook-form'\nimport { z } from 'zod'\nimport { HiOutlineUser } from 'react-icons/hi'\nimport { TbPlus } from 'react-icons/tb'\nimport type { ZodType } from 'zod'\nimport type { GetSettingsProfileResponse } from '../types'\n\ntype ProfileSchema = {\n firstName: string\n lastName: string\n email: string\n dialCode: string\n phoneNumber: string\n img: string\n country: string\n address: string\n postcode: string\n city: string\n}\n\ntype CountryOption = {\n label: string\n dialCode: string\n value: string\n}\n\nconst { Control } = components\n\nconst validationSchema: ZodType<ProfileSchema> = z.object({\n firstName: z.string().min(1, { message: 'First name required' }),\n lastName: z.string().min(1, { message: 'Last name required' }),\n email: z\n .string()\n .min(1, { message: 'Email required' })\n .email({ message: 'Invalid email' }),\n dialCode: z.string().min(1, { message: 'Please select your country code' }),\n phoneNumber: z\n .string()\n .min(1, { message: 'Please input your mobile number' }),\n country: z.string().min(1, { message: 'Please select a country' }),\n address: z.string().min(1, { message: 'Addrress required' }),\n postcode: z.string().min(1, { message: 'Postcode required' }),\n city: z.string().min(1, { message: 'City required' }),\n img: z.string(),\n})\n\nconst CustomSelectOption = (\n props: OptionProps<CountryOption> & { variant: 'country' | 'phone' },\n) => {\n return (\n <DefaultOption<CountryOption>\n {...props}\n customLabel={(data, label) => (\n <span className=\"flex items-center gap-2\">\n <Avatar\n shape=\"circle\"\n size={20}\n src={`/img/countries/${data.value}.png`}\n />\n {props.variant === 'country' && <span>{label}</span>}\n {props.variant === 'phone' && <span>{data.dialCode}</span>}\n </span>\n )}\n />\n )\n}\n\nconst CustomControl = ({ children, ...props }: ControlProps<CountryOption>) => {\n const selected = props.getValue()[0]\n return (\n <Control {...props}>\n {selected && (\n <Avatar\n className=\"ltr:ml-4 rtl:mr-4\"\n shape=\"circle\"\n size={20}\n src={`/img/countries/${selected.value}.png`}\n />\n )}\n {children}\n </Control>\n )\n}\n\nconst SettingsProfile = () => {\n const { data, mutate } = useSWR(\n '/api/settings/profile/',\n () => apiGetSettingsProfile<GetSettingsProfileResponse>(),\n {\n revalidateOnFocus: false,\n revalidateIfStale: false,\n revalidateOnReconnect: false,\n },\n )\n\n const dialCodeList = useMemo(() => {\n const newCountryList: Array<CountryOption> = JSON.parse(\n JSON.stringify(countryList),\n )\n\n return newCountryList.map((country) => {\n country.label = country.dialCode\n return country\n })\n }, [])\n\n const beforeUpload = (files: FileList | null) => {\n let valid: string | boolean = true\n\n const allowedFileType = ['image/jpeg', 'image/png']\n if (files) {\n for (const file of files) {\n if (!allowedFileType.includes(file.type)) {\n valid = 'Please upload a .jpeg or .png file!'\n }\n }\n }\n\n return valid\n }\n\n const {\n handleSubmit,\n reset,\n formState: { errors, isSubmitting },\n control,\n } = useForm<ProfileSchema>({\n resolver: zodResolver(validationSchema),\n })\n\n useEffect(() => {\n if (data) {\n reset(data)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data])\n\n const onSubmit = async (values: ProfileSchema) => {\n await sleep(500)\n if (data) {\n mutate({ ...data, ...values }, false)\n }\n }\n\n return (\n <>\n <h4 className=\"mb-8\">Personal information</h4>\n <Form onSubmit={handleSubmit(onSubmit)}>\n <div className=\"mb-8\">\n <Controller\n name=\"img\"\n control={control}\n render={({ field }) => (\n <div className=\"flex items-center gap-4\">\n <Avatar\n size={90}\n className=\"border-4 border-white bg-gray-100 text-gray-300 shadow-lg\"\n icon={<HiOutlineUser />}\n src={field.value}\n />\n <div className=\"flex items-center gap-2\">\n <Upload\n showList={false}\n uploadLimit={1}\n beforeUpload={beforeUpload}\n onChange={(files) => {\n if (files.length > 0) {\n field.onChange(\n URL.createObjectURL(\n files[0],\n ),\n )\n }\n }}\n >\n <Button\n variant=\"solid\"\n size=\"sm\"\n type=\"button\"\n icon={<TbPlus />}\n >\n Upload Image\n </Button>\n </Upload>\n <Button\n size=\"sm\"\n type=\"button\"\n onClick={() => {\n field.onChange('')\n }}\n >\n Remove\n </Button>\n </div>\n </div>\n )}\n />\n </div>\n <div className=\"grid md:grid-cols-2 gap-4\">\n <FormItem\n label=\"First name\"\n invalid={Boolean(errors.firstName)}\n errorMessage={errors.firstName?.message}\n >\n <Controller\n name=\"firstName\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"First Name\"\n {...field}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"User name\"\n invalid={Boolean(errors.lastName)}\n errorMessage={errors.lastName?.message}\n >\n <Controller\n name=\"lastName\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"Last Name\"\n {...field}\n />\n )}\n />\n </FormItem>\n </div>\n <FormItem\n label=\"Email\"\n invalid={Boolean(errors.email)}\n errorMessage={errors.email?.message}\n >\n <Controller\n name=\"email\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"email\"\n autoComplete=\"off\"\n placeholder=\"Email\"\n {...field}\n />\n )}\n />\n </FormItem>\n <div className=\"flex items-end gap-4 w-full mb-6\">\n <FormItem\n invalid={\n Boolean(errors.phoneNumber) ||\n Boolean(errors.dialCode)\n }\n >\n <label className=\"form-label mb-2\">Phone number</label>\n <Controller\n name=\"dialCode\"\n control={control}\n render={({ field }) => (\n <Select<CountryOption>\n options={dialCodeList}\n {...field}\n className=\"w-[150px]\"\n components={{\n Option: (props) => (\n <CustomSelectOption\n variant=\"phone\"\n {...(props as OptionProps<CountryOption>)}\n />\n ),\n Control: CustomControl,\n }}\n placeholder=\"\"\n value={dialCodeList.filter(\n (option) =>\n option.dialCode === field.value,\n )}\n onChange={(option) =>\n field.onChange(option?.dialCode)\n }\n />\n )}\n />\n </FormItem>\n <FormItem\n className=\"w-full\"\n invalid={\n Boolean(errors.phoneNumber) ||\n Boolean(errors.dialCode)\n }\n errorMessage={errors.phoneNumber?.message}\n >\n <Controller\n name=\"phoneNumber\"\n control={control}\n render={({ field }) => (\n <NumericInput\n autoComplete=\"off\"\n placeholder=\"Phone Number\"\n value={field.value}\n onChange={field.onChange}\n onBlur={field.onBlur}\n />\n )}\n />\n </FormItem>\n </div>\n <h4 className=\"mb-6\">Address information</h4>\n <FormItem\n label=\"Country\"\n invalid={Boolean(errors.country)}\n errorMessage={errors.country?.message}\n >\n <Controller\n name=\"country\"\n control={control}\n render={({ field }) => (\n <Select<CountryOption>\n options={countryList}\n {...field}\n components={{\n Option: (props) => (\n <CustomSelectOption\n variant=\"country\"\n {...(props as OptionProps<CountryOption>)}\n />\n ),\n Control: CustomControl,\n }}\n placeholder=\"\"\n value={countryList.filter(\n (option) => option.value === field.value,\n )}\n onChange={(option) =>\n field.onChange(option?.value)\n }\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"Address\"\n invalid={Boolean(errors.address)}\n errorMessage={errors.address?.message}\n >\n <Controller\n name=\"address\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"Address\"\n {...field}\n />\n )}\n />\n </FormItem>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <FormItem\n label=\"City\"\n invalid={Boolean(errors.city)}\n errorMessage={errors.city?.message}\n >\n <Controller\n name=\"city\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"City\"\n {...field}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"Postal Code\"\n invalid={Boolean(errors.postcode)}\n errorMessage={errors.postcode?.message}\n >\n <Controller\n name=\"postcode\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"Postal Code\"\n {...field}\n />\n )}\n />\n </FormItem>\n </div>\n <div className=\"flex justify-end\">\n <Button\n variant=\"solid\"\n type=\"submit\"\n loading={isSubmitting}\n >\n Save\n </Button>\n </div>\n </Form>\n </>\n )\n}\n\nexport default SettingsProfile\n"],"names":["Control","components","validationSchema","z","CustomSelectOption","props","jsx","DefaultOption","data","label","jsxs","Avatar","CustomControl","children","selected","SettingsProfile","mutate","useSWR","apiGetSettingsProfile","dialCodeList","useMemo","countryList","country","beforeUpload","files","valid","allowedFileType","file","handleSubmit","reset","errors","isSubmitting","control","useForm","zodResolver","useEffect","Fragment","Form","values","sleep","Controller","field","HiOutlineUser","Upload","Button","TbPlus","FormItem","_a","Input","_b","_c","Select","option","_d","NumericInput","_e","_f","_g","_h"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsSecurity.js","sources":["../../../../../../../lib/@ecme/views/concepts/accounts/Settings/components/SettingsSecurity.tsx"],"sourcesContent":["import { useState, useRef } from 'react'\nimport Avatar from '@/components/ui/Avatar'\nimport Button from '@/components/ui/Button'\nimport Input from '@/components/ui/Input'\nimport ConfirmDialog from '@/components/shared/ConfirmDialog'\nimport { Form, FormItem } from '@/components/ui/Form'\nimport classNames from '@/utils/classNames'\nimport sleep from '@/utils/sleep'\nimport isLastChild from '@/utils/isLastChild'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm, Controller } from 'react-hook-form'\nimport { z } from 'zod'\nimport type { ZodType } from 'zod'\n\ntype PasswordSchema = {\n currentPassword: string\n newPassword: string\n confirmNewPassword: string\n}\n\nconst authenticatorList = [\n {\n label: 'Google Authenticator',\n value: 'googleAuthenticator',\n img: '/img/others/google.png',\n desc: 'Using Google Authenticator app generates time-sensitive codes for secure logins.',\n },\n {\n label: 'Okta Verify',\n value: 'oktaVerify',\n img: '/img/others/okta.png',\n desc: 'Receive push notifications from Okta Verify app on your phone for quick login approval.',\n },\n {\n label: 'E Mail verification',\n value: 'emailVerification',\n img: '/img/others/email.png',\n desc: 'Unique codes sent to email for confirming logins.',\n },\n]\n\nconst validationSchema: ZodType<PasswordSchema> = z\n .object({\n currentPassword: z\n .string()\n .min(1, { message: 'Please enter your current password!' }),\n newPassword: z\n .string()\n .min(1, { message: 'Please enter your new password!' }),\n confirmNewPassword: z\n .string()\n .min(1, { message: 'Please confirm your new password!' }),\n })\n .refine((data) => data.confirmNewPassword === data.newPassword, {\n message: 'Password not match',\n path: ['confirmNewPassword'],\n })\n\nconst SettingsSecurity = () => {\n const [selected2FaType, setSelected2FaType] = useState(\n 'googleAuthenticator',\n )\n const [confirmationOpen, setConfirmationOpen] = useState(false)\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n const formRef = useRef<HTMLFormElement>(null)\n\n const {\n getValues,\n handleSubmit,\n formState: { errors },\n control,\n } = useForm<PasswordSchema>({\n resolver: zodResolver(validationSchema),\n })\n\n const handlePostSubmit = async () => {\n setIsSubmitting(true)\n await sleep(1000)\n console.log('getValues', getValues())\n setConfirmationOpen(false)\n setIsSubmitting(false)\n }\n\n const onSubmit = async () => {\n setConfirmationOpen(true)\n }\n\n return (\n <div>\n <div className=\"mb-8\">\n <h4>Password</h4>\n <p>\n Remember, your password is your digital key to your account.\n Keep it safe, keep it secure!\n </p>\n </div>\n <Form\n ref={formRef}\n className=\"mb-8\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <FormItem\n label=\"Current password\"\n invalid={Boolean(errors.currentPassword)}\n errorMessage={errors.currentPassword?.message}\n >\n <Controller\n name=\"currentPassword\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"password\"\n autoComplete=\"off\"\n placeholder=\"•••••••••\"\n {...field}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"New password\"\n invalid={Boolean(errors.newPassword)}\n errorMessage={errors.newPassword?.message}\n >\n <Controller\n name=\"newPassword\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"password\"\n autoComplete=\"off\"\n placeholder=\"•••••••••\"\n {...field}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"Confirm new password\"\n invalid={Boolean(errors.confirmNewPassword)}\n errorMessage={errors.confirmNewPassword?.message}\n >\n <Controller\n name=\"confirmNewPassword\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"password\"\n autoComplete=\"off\"\n placeholder=\"•••••••••\"\n {...field}\n />\n )}\n />\n </FormItem>\n <div className=\"flex justify-end\">\n <Button variant=\"solid\" type=\"submit\">\n Update\n </Button>\n </div>\n </Form>\n <ConfirmDialog\n isOpen={confirmationOpen}\n type=\"warning\"\n title=\"Update password\"\n confirmButtonProps={{\n loading: isSubmitting,\n onClick: handlePostSubmit,\n }}\n onClose={() => setConfirmationOpen(false)}\n onRequestClose={() => setConfirmationOpen(false)}\n onCancel={() => setConfirmationOpen(false)}\n >\n <p>Are you sure you want to change your password?</p>\n </ConfirmDialog>\n <div className=\"mb-8\">\n <h4>2-Step verification</h4>\n <p>\n Your account holds great value to hackers. Enable two-step\n verification to safeguard your account!\n </p>\n <div className=\"mt-8\">\n {authenticatorList.map((authOption, index) => (\n <div\n key={authOption.value}\n className={classNames(\n 'py-6 border-gray-200 dark:border-gray-600',\n !isLastChild(authenticatorList, index) &&\n 'border-b',\n )}\n >\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex items-center gap-4\">\n <Avatar\n size={35}\n className=\"bg-transparent\"\n src={authOption.img}\n />\n <div>\n <h6>{authOption.label}</h6>\n <span>{authOption.desc}</span>\n </div>\n </div>\n <div>\n {selected2FaType === authOption.value ? (\n <Button\n size=\"sm\"\n customColorClass={() =>\n 'border-success ring-1 ring-success text-success hover:border-success hover:ring-success hover:text-success bg-transparent'\n }\n onClick={() =>\n setSelected2FaType('')\n }\n >\n Activated\n </Button>\n ) : (\n <Button\n size=\"sm\"\n onClick={() =>\n setSelected2FaType(\n authOption.value,\n )\n }\n >\n Enable\n </Button>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\nexport default SettingsSecurity\n"],"names":["authenticatorList","validationSchema","z","data","SettingsSecurity","selected2FaType","setSelected2FaType","useState","confirmationOpen","setConfirmationOpen","isSubmitting","setIsSubmitting","formRef","useRef","getValues","handleSubmit","errors","control","useForm","zodResolver","handlePostSubmit","sleep","jsxs","jsx","Form","FormItem","_a","Controller","field","Input","_b","_c","Button","ConfirmDialog","authOption","index","classNames","isLastChild","Avatar"],"mappings":";;;;;;;;;;;;;;;;;AAoBA,MAAMA,IAAoB;AAAA,EACtB;AAAA,IACI,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,EAAA;AAAA,EAEV;AAAA,IACI,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,EAAA;AAAA,EAEV;AAAA,IACI,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,EAAA;AAEd,GAEMC,IAA4CC,EAC7C,OAAO;AAAA,EACJ,iBAAiBA,EACZ,SACA,IAAI,GAAG,EAAE,SAAS,uCAAuC;AAAA,EAC9D,aAAaA,EACR,SACA,IAAI,GAAG,EAAE,SAAS,mCAAmC;AAAA,EAC1D,oBAAoBA,EACf,OAAA,EACA,IAAI,GAAG,EAAE,SAAS,oCAAA,CAAqC;AAChE,CAAC,EACA,OAAO,CAACC,MAASA,EAAK,uBAAuBA,EAAK,aAAa;AAAA,EAC5D,SAAS;AAAA,EACT,MAAM,CAAC,oBAAoB;AAC/B,CAAC,GAECC,KAAmB,MAAM;;AAC3B,QAAM,CAACC,GAAiBC,CAAkB,IAAIC;AAAA,IAC1C;AAAA,EAAA,GAEE,CAACC,GAAkBC,CAAmB,IAAIF,EAAS,EAAK,GACxD,CAACG,GAAcC,CAAe,IAAIJ,EAAS,EAAK,GAEhDK,IAAUC,EAAwB,IAAI,GAEtC;AAAA,IACF,WAAAC;AAAA,IACA,cAAAC;AAAA,IACA,WAAW,EAAE,QAAAC,EAAA;AAAA,IACb,SAAAC;AAAA,EAAA,IACAC,EAAwB;AAAA,IACxB,UAAUC,EAAYlB,CAAgB;AAAA,EAAA,CACzC,GAEKmB,IAAmB,YAAY;AACjC,IAAAT,EAAgB,EAAI,GACpB,MAAMU,EAAM,GAAI,GAChB,QAAQ,IAAI,aAAaP,GAAW,GACpCL,EAAoB,EAAK,GACzBE,EAAgB,EAAK;AAAA,EAAA;AAOzB,2BACK,OAAA,EACG,UAAA;AAAA,IAAA,gBAAAW,EAAC,OAAA,EAAI,WAAU,QACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAG,UAAA,WAAA,CAAQ;AAAA,MACZ,gBAAAA,EAAC,OAAE,UAAA,6FAAA,CAGH;AAAA,IAAA,GACJ;AAAA,IACA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACG,KAAKZ;AAAA,QACL,WAAU;AAAA,QACV,UAAUG,EAhBL,YAAY;AACzB,UAAAN,EAAoB,EAAI;AAAA,QAAA,CAee;AAAA,QAE/B,UAAA;AAAA,UAAA,gBAAAc;AAAA,YAACE;AAAA,YAAA;AAAA,cACG,OAAM;AAAA,cACN,SAAS,EAAQT,EAAO;AAAA,cACxB,eAAcU,IAAAV,EAAO,oBAAP,gBAAAU,EAAwB;AAAA,cAEtC,UAAA,gBAAAH;AAAA,gBAACI;AAAA,gBAAA;AAAA,kBACG,MAAK;AAAA,kBACL,SAAAV;AAAA,kBACA,QAAQ,CAAC,EAAE,OAAAW,EAAA,MACP,gBAAAL;AAAA,oBAACM;AAAA,oBAAA;AAAA,sBACG,MAAK;AAAA,sBACL,cAAa;AAAA,sBACb,aAAY;AAAA,sBACX,GAAGD;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACR;AAAA,cAAA;AAAA,YAER;AAAA,UAAA;AAAA,UAEJ,gBAAAL;AAAA,YAACE;AAAA,YAAA;AAAA,cACG,OAAM;AAAA,cACN,SAAS,EAAQT,EAAO;AAAA,cACxB,eAAcc,IAAAd,EAAO,gBAAP,gBAAAc,EAAoB;AAAA,cAElC,UAAA,gBAAAP;AAAA,gBAACI;AAAA,gBAAA;AAAA,kBACG,MAAK;AAAA,kBACL,SAAAV;AAAA,kBACA,QAAQ,CAAC,EAAE,OAAAW,EAAA,MACP,gBAAAL;AAAA,oBAACM;AAAA,oBAAA;AAAA,sBACG,MAAK;AAAA,sBACL,cAAa;AAAA,sBACb,aAAY;AAAA,sBACX,GAAGD;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACR;AAAA,cAAA;AAAA,YAER;AAAA,UAAA;AAAA,UAEJ,gBAAAL;AAAA,YAACE;AAAA,YAAA;AAAA,cACG,OAAM;AAAA,cACN,SAAS,EAAQT,EAAO;AAAA,cACxB,eAAce,IAAAf,EAAO,uBAAP,gBAAAe,EAA2B;AAAA,cAEzC,UAAA,gBAAAR;AAAA,gBAACI;AAAA,gBAAA;AAAA,kBACG,MAAK;AAAA,kBACL,SAAAV;AAAA,kBACA,QAAQ,CAAC,EAAE,OAAAW,EAAA,MACP,gBAAAL;AAAA,oBAACM;AAAA,oBAAA;AAAA,sBACG,MAAK;AAAA,sBACL,cAAa;AAAA,sBACb,aAAY;AAAA,sBACX,GAAGD;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACR;AAAA,cAAA;AAAA,YAER;AAAA,UAAA;AAAA,UAEJ,gBAAAL,EAAC,OAAA,EAAI,WAAU,oBACX,UAAA,gBAAAA,EAACS,GAAA,EAAO,SAAQ,SAAQ,MAAK,UAAS,UAAA,SAAA,CAEtC,EAAA,CACJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEJ,gBAAAT;AAAA,MAACU;AAAA,MAAA;AAAA,QACG,QAAQzB;AAAA,QACR,MAAK;AAAA,QACL,OAAM;AAAA,QACN,oBAAoB;AAAA,UAChB,SAASE;AAAA,UACT,SAASU;AAAA,QAAA;AAAA,QAEb,SAAS,MAAMX,EAAoB,EAAK;AAAA,QACxC,gBAAgB,MAAMA,EAAoB,EAAK;AAAA,QAC/C,UAAU,MAAMA,EAAoB,EAAK;AAAA,QAEzC,UAAA,gBAAAc,EAAC,OAAE,UAAA,iDAAA,CAA8C;AAAA,MAAA;AAAA,IAAA;AAAA,IAErD,gBAAAD,EAAC,OAAA,EAAI,WAAU,QACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAG,UAAA,sBAAA,CAAmB;AAAA,MACvB,gBAAAA,EAAC,OAAE,UAAA,qGAAA,CAGH;AAAA,MACA,gBAAAA,EAAC,SAAI,WAAU,QACV,YAAkB,IAAI,CAACW,GAAYC,MAChC,gBAAAZ;AAAA,QAAC;AAAA,QAAA;AAAA,UAEG,WAAWa;AAAA,YACP;AAAA,YACA,CAACC,EAAYrC,GAAmBmC,CAAK,KACjC;AAAA,UAAA;AAAA,UAGR,UAAA,gBAAAb,EAAC,OAAA,EAAI,WAAU,2CACX,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,cAAA,gBAAAC;AAAA,gBAACe;AAAA,gBAAA;AAAA,kBACG,MAAM;AAAA,kBACN,WAAU;AAAA,kBACV,KAAKJ,EAAW;AAAA,gBAAA;AAAA,cAAA;AAAA,gCAEnB,OAAA,EACG,UAAA;AAAA,gBAAA,gBAAAX,EAAC,MAAA,EAAI,YAAW,MAAA,CAAM;AAAA,gBACtB,gBAAAA,EAAC,QAAA,EAAM,UAAAW,EAAW,KAAA,CAAK;AAAA,cAAA,EAAA,CAC3B;AAAA,YAAA,GACJ;AAAA,YACA,gBAAAX,EAAC,OAAA,EACI,UAAAlB,MAAoB6B,EAAW,QAC5B,gBAAAX;AAAA,cAACS;AAAA,cAAA;AAAA,gBACG,MAAK;AAAA,gBACL,kBAAkB,MACd;AAAA,gBAEJ,SAAS,MACL1B,EAAmB,EAAE;AAAA,gBAE5B,UAAA;AAAA,cAAA;AAAA,YAAA,IAID,gBAAAiB;AAAA,cAACS;AAAA,cAAA;AAAA,gBACG,MAAK;AAAA,gBACL,SAAS,MACL1B;AAAA,kBACI4B,EAAW;AAAA,gBAAA;AAAA,gBAGtB,UAAA;AAAA,cAAA;AAAA,YAAA,EAED,CAER;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA;AAAA,QA7CKA,EAAW;AAAA,MAAA,CA+CvB,EAAA,CACL;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;"}
|
|
1
|
+
{"version":3,"file":"SettingsSecurity.js","sources":["../../../../../../../lib/@ecme/views/concepts/accounts/Settings/components/SettingsSecurity.tsx"],"sourcesContent":["import { useState, useRef } from 'react'\nimport Avatar from '@/components/ui/Avatar'\nimport Button from '@/components/ui/Button'\nimport Input from '@/components/ui/Input'\nimport ConfirmDialog from '@/components/shared/ConfirmDialog'\nimport { Form, FormItem } from '@/components/ui/Form'\nimport classNames from '@/utils/classNames'\nimport sleep from '@/utils/sleep'\nimport isLastChild from '@/utils/isLastChild'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm, Controller } from 'react-hook-form'\nimport { z } from 'zod'\nimport type { ZodType } from 'zod'\n\ntype PasswordSchema = {\n currentPassword: string\n newPassword: string\n confirmNewPassword: string\n}\n\nconst authenticatorList = [\n {\n label: 'Google Authenticator',\n value: 'googleAuthenticator',\n img: '/img/others/google.png',\n desc: 'Using Google Authenticator app generates time-sensitive codes for secure logins.',\n },\n {\n label: 'Okta Verify',\n value: 'oktaVerify',\n img: '/img/others/okta.png',\n desc: 'Receive push notifications from Okta Verify app on your phone for quick login approval.',\n },\n {\n label: 'E Mail verification',\n value: 'emailVerification',\n img: '/img/others/email.png',\n desc: 'Unique codes sent to email for confirming logins.',\n },\n]\n\nconst validationSchema: ZodType<PasswordSchema> = z\n .object({\n currentPassword: z\n .string()\n .min(1, { message: 'Please enter your current password!' }),\n newPassword: z\n .string()\n .min(1, { message: 'Please enter your new password!' }),\n confirmNewPassword: z\n .string()\n .min(1, { message: 'Please confirm your new password!' }),\n })\n .refine((data) => data.confirmNewPassword === data.newPassword, {\n message: 'Password not match',\n path: ['confirmNewPassword'],\n })\n\nconst SettingsSecurity = () => {\n const [selected2FaType, setSelected2FaType] = useState(\n 'googleAuthenticator',\n )\n const [confirmationOpen, setConfirmationOpen] = useState(false)\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n const formRef = useRef<HTMLFormElement>(null)\n\n const {\n getValues,\n handleSubmit,\n formState: { errors },\n control,\n } = useForm<PasswordSchema>({\n resolver: zodResolver(validationSchema),\n })\n\n const handlePostSubmit = async () => {\n setIsSubmitting(true)\n await sleep(1000)\n console.log('getValues', getValues())\n setConfirmationOpen(false)\n setIsSubmitting(false)\n }\n\n const onSubmit = async () => {\n setConfirmationOpen(true)\n }\n\n return (\n <div>\n <div className=\"mb-8\">\n <h4>Password</h4>\n <p>\n Remember, your password is your digital key to your account.\n Keep it safe, keep it secure!\n </p>\n </div>\n <Form\n ref={formRef}\n className=\"mb-8\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <FormItem\n label=\"Current password\"\n invalid={Boolean(errors.currentPassword)}\n errorMessage={errors.currentPassword?.message}\n >\n <Controller\n name=\"currentPassword\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"password\"\n autoComplete=\"off\"\n placeholder=\"•••••••••\"\n {...field}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"New password\"\n invalid={Boolean(errors.newPassword)}\n errorMessage={errors.newPassword?.message}\n >\n <Controller\n name=\"newPassword\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"password\"\n autoComplete=\"off\"\n placeholder=\"•••••••••\"\n {...field}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"Confirm new password\"\n invalid={Boolean(errors.confirmNewPassword)}\n errorMessage={errors.confirmNewPassword?.message}\n >\n <Controller\n name=\"confirmNewPassword\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"password\"\n autoComplete=\"off\"\n placeholder=\"•••••••••\"\n {...field}\n />\n )}\n />\n </FormItem>\n <div className=\"flex justify-end\">\n <Button variant=\"solid\" type=\"submit\">\n Update\n </Button>\n </div>\n </Form>\n <ConfirmDialog\n isOpen={confirmationOpen}\n type=\"warning\"\n title=\"Update password\"\n confirmButtonProps={{\n loading: isSubmitting,\n onClick: handlePostSubmit,\n }}\n onClose={() => setConfirmationOpen(false)}\n onRequestClose={() => setConfirmationOpen(false)}\n onCancel={() => setConfirmationOpen(false)}\n >\n <p>Are you sure you want to change your password?</p>\n </ConfirmDialog>\n <div className=\"mb-8\">\n <h4>2-Step verification</h4>\n <p>\n Your account holds great value to hackers. Enable two-step\n verification to safeguard your account!\n </p>\n <div className=\"mt-8\">\n {authenticatorList.map((authOption, index) => (\n <div\n key={authOption.value}\n className={classNames(\n 'py-6 border-gray-200 dark:border-gray-600',\n !isLastChild(authenticatorList, index) &&\n 'border-b',\n )}\n >\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex items-center gap-4\">\n <Avatar\n size={35}\n className=\"bg-transparent\"\n src={authOption.img}\n />\n <div>\n <h6>{authOption.label}</h6>\n <span>{authOption.desc}</span>\n </div>\n </div>\n <div>\n {selected2FaType === authOption.value ? (\n <Button\n size=\"sm\"\n customColorClass={() =>\n 'border-success ring-1 ring-success text-success hover:border-success hover:ring-success hover:text-success bg-transparent'\n }\n onClick={() =>\n setSelected2FaType('')\n }\n >\n Activated\n </Button>\n ) : (\n <Button\n size=\"sm\"\n onClick={() =>\n setSelected2FaType(\n authOption.value,\n )\n }\n >\n Enable\n </Button>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\nexport default SettingsSecurity\n"],"names":["authenticatorList","validationSchema","z","data","SettingsSecurity","selected2FaType","setSelected2FaType","useState","confirmationOpen","setConfirmationOpen","isSubmitting","setIsSubmitting","formRef","useRef","getValues","handleSubmit","errors","control","useForm","zodResolver","handlePostSubmit","sleep","jsxs","jsx","Form","FormItem","_a","Controller","field","Input","_b","_c","Button","ConfirmDialog","authOption","index","classNames","isLastChild","Avatar"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatCustomAction.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/components/ChatCustomAction.tsx"],"sourcesContent":["import { useRef, useState, useEffect } from 'react'\nimport Button from '@/components/ui/Button'\nimport Input from '@/components/ui/Input'\nimport Select from '@/components/ui/Select'\nimport Notification from '@/components/ui/Notification'\nimport toast from '@/components/ui/toast'\nimport { Form, FormItem } from '@/components/ui/Form'\nimport Dialog from '@/components/ui/Dialog'\nimport Tooltip from '@/components/ui/Tooltip'\nimport classNames from '@/utils/classNames'\nimport {\n TbThumbUp,\n TbThumbUpFilled,\n TbThumbDown,\n TbThumbDownFilled,\n TbCopy,\n TbCheck,\n} from 'react-icons/tb'\n\ntype ChatCustomActionProps = {\n content: string\n}\n\nconst responseOption = [\n { label: 'Not factually correct', value: 'notFactuallyCorrect' },\n { label: 'Harmful content', value: 'harmfulContent' },\n { label: 'Overeactive refusal', value: 'overeactiveRefusal' },\n { label: 'Other', value: 'other' },\n]\n\nconst ChatCustomAction = ({ content }: ChatCustomActionProps) => {\n const detailInput = useRef<HTMLTextAreaElement>(null)\n const [copied, setCopied] = useState(false)\n const [selected, setSelected] = useState('')\n const [responseSend, setResponSend] = useState('')\n const [responseDialog, setResponseDialog] = useState<{\n type: string\n open: boolean\n }>({\n type: '',\n open: false,\n })\n\n const btnClass =\n 'p-2 rounded-full hover:bg-black hover:bg-opacity-5 hover:text-gray-900 dark:hover:bg-black dark:hover:text-gray-100 dark:hover:bg-opacity-40 transition-colors duration-300 ease-in-out'\n\n useEffect(() => {\n if (copied && content) {\n navigator.clipboard.writeText(content)\n if (copied) {\n const copyFeedbackInterval = setTimeout(\n () => setCopied(false),\n 2000,\n )\n\n return () => {\n clearTimeout(copyFeedbackInterval)\n }\n }\n }\n }, [copied, content])\n\n const handleDialogClose = () => {\n setResponseDialog({\n type: '',\n open: false,\n })\n }\n\n const handleSubmit = () => {\n setResponSend(responseDialog.type)\n handleDialogClose()\n toast.push(\n <Notification type=\"success\">\n Thanks for your feedback!\n </Notification>,\n { placement: 'top-center' },\n )\n }\n\n return (\n <>\n <div className=\"flex mt-0.5\">\n <Tooltip title={copied ? 'Copied' : 'Copy'} placement=\"bottom\">\n <button\n className={classNames(btnClass, 'text-lg')}\n onClick={() => setCopied(true)}\n >\n {copied ? (\n <TbCheck className=\"text-emerald-500\" />\n ) : (\n <TbCopy />\n )}\n </button>\n </Tooltip>\n <Tooltip title=\"Good response\" placement=\"bottom\">\n <button\n className={classNames(btnClass, 'text-lg')}\n onClick={() =>\n setResponseDialog({ type: 'praise', open: true })\n }\n >\n {responseSend === 'praise' ? (\n <TbThumbUpFilled />\n ) : (\n <TbThumbUp />\n )}\n </button>\n </Tooltip>\n <Tooltip title=\"Bad response\" placement=\"bottom\">\n <button\n className={classNames(btnClass, 'text-lg')}\n onClick={() =>\n setResponseDialog({ type: 'blame', open: true })\n }\n >\n {responseSend === 'blame' ? (\n <TbThumbDownFilled />\n ) : (\n <TbThumbDown />\n )}\n </button>\n </Tooltip>\n </div>\n <Dialog\n isOpen={responseDialog.open}\n onClose={handleDialogClose}\n onRequestClose={handleDialogClose}\n >\n <h5 className=\"mb-4\">Feedback</h5>\n <Form onSubmit={handleSubmit}>\n {responseDialog.type === 'praise' && (\n <FormItem label=\"Please provide details: (optional)\">\n <Input\n ref={detailInput}\n textArea\n placeholder=\"What was statifying about this response?\"\n />\n </FormItem>\n )}\n {responseDialog.type === 'blame' && (\n <>\n <FormItem label=\"What type of issue do you wish to report? (optional)\">\n <Select\n options={responseOption}\n value={responseOption.filter(\n (response) =>\n response.value === selected,\n )}\n onChange={(option) =>\n setSelected(option?.value || '')\n }\n />\n </FormItem>\n <FormItem label=\"Please provide details: (optional)\">\n <Input\n ref={detailInput}\n textArea\n placeholder=\"What was unstatifying about this response?\"\n />\n </FormItem>\n </>\n )}\n </Form>\n <div className=\"flex justify-end gap-2\">\n <Button\n className=\"ltr:mr-2 rtl:ml-2\"\n variant=\"plain\"\n type=\"button\"\n onClick={handleDialogClose}\n >\n Cancel\n </Button>\n <Button\n variant=\"solid\"\n type=\"submit\"\n onClick={handleSubmit}\n >\n Submit\n </Button>\n </div>\n </Dialog>\n </>\n )\n}\n\nexport default ChatCustomAction\n"],"names":["responseOption","ChatCustomAction","content","detailInput","useRef","copied","setCopied","useState","selected","setSelected","responseSend","setResponSend","responseDialog","setResponseDialog","btnClass","useEffect","copyFeedbackInterval","handleDialogClose","handleSubmit","toast","jsx","Notification","jsxs","Fragment","Tooltip","classNames","TbCheck","TbCopy","TbThumbUpFilled","TbThumbUp","TbThumbDownFilled","TbThumbDown","Dialog","Form","FormItem","Input","Select","response","option","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChatCustomAction.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/components/ChatCustomAction.tsx"],"sourcesContent":["import { useRef, useState, useEffect } from 'react'\nimport Button from '@/components/ui/Button'\nimport Input from '@/components/ui/Input'\nimport Select from '@/components/ui/Select'\nimport Notification from '@/components/ui/Notification'\nimport toast from '@/components/ui/toast'\nimport { Form, FormItem } from '@/components/ui/Form'\nimport Dialog from '@/components/ui/Dialog'\nimport Tooltip from '@/components/ui/Tooltip'\nimport classNames from '@/utils/classNames'\nimport {\n TbThumbUp,\n TbThumbUpFilled,\n TbThumbDown,\n TbThumbDownFilled,\n TbCopy,\n TbCheck,\n} from 'react-icons/tb'\n\ntype ChatCustomActionProps = {\n content: string\n}\n\nconst responseOption = [\n { label: 'Not factually correct', value: 'notFactuallyCorrect' },\n { label: 'Harmful content', value: 'harmfulContent' },\n { label: 'Overeactive refusal', value: 'overeactiveRefusal' },\n { label: 'Other', value: 'other' },\n]\n\nconst ChatCustomAction = ({ content }: ChatCustomActionProps) => {\n const detailInput = useRef<HTMLTextAreaElement>(null)\n const [copied, setCopied] = useState(false)\n const [selected, setSelected] = useState('')\n const [responseSend, setResponSend] = useState('')\n const [responseDialog, setResponseDialog] = useState<{\n type: string\n open: boolean\n }>({\n type: '',\n open: false,\n })\n\n const btnClass =\n 'p-2 rounded-full hover:bg-black hover:bg-opacity-5 hover:text-gray-900 dark:hover:bg-black dark:hover:text-gray-100 dark:hover:bg-opacity-40 transition-colors duration-300 ease-in-out'\n\n useEffect(() => {\n if (copied && content) {\n navigator.clipboard.writeText(content)\n if (copied) {\n const copyFeedbackInterval = setTimeout(\n () => setCopied(false),\n 2000,\n )\n\n return () => {\n clearTimeout(copyFeedbackInterval)\n }\n }\n }\n }, [copied, content])\n\n const handleDialogClose = () => {\n setResponseDialog({\n type: '',\n open: false,\n })\n }\n\n const handleSubmit = () => {\n setResponSend(responseDialog.type)\n handleDialogClose()\n toast.push(\n <Notification type=\"success\">\n Thanks for your feedback!\n </Notification>,\n { placement: 'top-center' },\n )\n }\n\n return (\n <>\n <div className=\"flex mt-0.5\">\n <Tooltip title={copied ? 'Copied' : 'Copy'} placement=\"bottom\">\n <button\n className={classNames(btnClass, 'text-lg')}\n onClick={() => setCopied(true)}\n >\n {copied ? (\n <TbCheck className=\"text-emerald-500\" />\n ) : (\n <TbCopy />\n )}\n </button>\n </Tooltip>\n <Tooltip title=\"Good response\" placement=\"bottom\">\n <button\n className={classNames(btnClass, 'text-lg')}\n onClick={() =>\n setResponseDialog({ type: 'praise', open: true })\n }\n >\n {responseSend === 'praise' ? (\n <TbThumbUpFilled />\n ) : (\n <TbThumbUp />\n )}\n </button>\n </Tooltip>\n <Tooltip title=\"Bad response\" placement=\"bottom\">\n <button\n className={classNames(btnClass, 'text-lg')}\n onClick={() =>\n setResponseDialog({ type: 'blame', open: true })\n }\n >\n {responseSend === 'blame' ? (\n <TbThumbDownFilled />\n ) : (\n <TbThumbDown />\n )}\n </button>\n </Tooltip>\n </div>\n <Dialog\n isOpen={responseDialog.open}\n onClose={handleDialogClose}\n onRequestClose={handleDialogClose}\n >\n <h5 className=\"mb-4\">Feedback</h5>\n <Form onSubmit={handleSubmit}>\n {responseDialog.type === 'praise' && (\n <FormItem label=\"Please provide details: (optional)\">\n <Input\n ref={detailInput}\n textArea\n placeholder=\"What was statifying about this response?\"\n />\n </FormItem>\n )}\n {responseDialog.type === 'blame' && (\n <>\n <FormItem label=\"What type of issue do you wish to report? (optional)\">\n <Select\n options={responseOption}\n value={responseOption.filter(\n (response) =>\n response.value === selected,\n )}\n onChange={(option) =>\n setSelected(option?.value || '')\n }\n />\n </FormItem>\n <FormItem label=\"Please provide details: (optional)\">\n <Input\n ref={detailInput}\n textArea\n placeholder=\"What was unstatifying about this response?\"\n />\n </FormItem>\n </>\n )}\n </Form>\n <div className=\"flex justify-end gap-2\">\n <Button\n className=\"ltr:mr-2 rtl:ml-2\"\n variant=\"plain\"\n type=\"button\"\n onClick={handleDialogClose}\n >\n Cancel\n </Button>\n <Button\n variant=\"solid\"\n type=\"submit\"\n onClick={handleSubmit}\n >\n Submit\n </Button>\n </div>\n </Dialog>\n </>\n )\n}\n\nexport default ChatCustomAction\n"],"names":["responseOption","ChatCustomAction","content","detailInput","useRef","copied","setCopied","useState","selected","setSelected","responseSend","setResponSend","responseDialog","setResponseDialog","btnClass","useEffect","copyFeedbackInterval","handleDialogClose","handleSubmit","toast","jsx","Notification","jsxs","Fragment","Tooltip","classNames","TbCheck","TbCopy","TbThumbUpFilled","TbThumbUp","TbThumbDownFilled","TbThumbDown","Dialog","Form","FormItem","Input","Select","response","option","Button"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatCustomContent.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/components/ChatCustomContent.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useState, useMemo, createElement, useEffect, ReactNode } from 'react'\nimport useInterval from '@/utils/hooks/useInterval '\nimport { getCurrentNodeOverflow, getStringPosition } from '../utils'\nimport ReactHtmlParser from 'html-react-parser'\nimport { marked } from 'marked'\nimport type { CommonProps } from '@/@types/common'\n\ntype ChatCustomContentProps = {\n content: string\n triggerTyping: boolean\n onFinish?: () => void\n}\n\nconst AIWriter = ({\n children,\n delay = 25,\n onFinish = () => {},\n}: CommonProps & { delay?: number; onFinish?: () => void }) => {\n const [pos, setPos] = useState(0)\n\n const tokenLengths = useMemo(() => {\n const arr: number[] = []\n\n const traverseNodesAndCountTokens = (reactNode: any) => {\n const nodeChildren = reactNode?.props?.children\n\n if (Array.isArray(reactNode)) {\n reactNode.forEach((node) => {\n if (typeof node === 'object') {\n traverseNodesAndCountTokens(node)\n } else if (typeof node === 'string') {\n arr.push(node.split(' ').length)\n }\n })\n }\n\n if (nodeChildren === undefined) {\n if (typeof reactNode === 'string') {\n arr.push(reactNode.split(' ').length)\n }\n }\n\n // TODO mb try checking if it's a react element\n if (typeof nodeChildren === 'object') {\n traverseNodesAndCountTokens(nodeChildren)\n }\n if (typeof nodeChildren === 'string') {\n arr.push(nodeChildren.split(' ').length)\n }\n\n return arr\n }\n\n return traverseNodesAndCountTokens(children)\n }, [children])\n\n const totalTokens = useMemo(\n () => tokenLengths.reduce((acc, curr) => acc + curr, 0),\n [tokenLengths],\n )\n\n const nodex = useMemo(() => {\n let tmpCurrentLoopTokenPos = 0\n let tmpCurrentLoopNodePos = 0\n\n const traverseNodesAndInjectAIWriter: any = (reactNode: any) => {\n if (tmpCurrentLoopTokenPos > pos) {\n return null\n }\n\n const nodeChildren = reactNode?.props?.children\n\n if (Array.isArray(reactNode)) {\n const joinedNodes: ReactNode[] = []\n reactNode.forEach((node) => {\n if (typeof node === 'object') {\n joinedNodes.push(traverseNodesAndInjectAIWriter(node))\n } else if (typeof node === 'string') {\n tmpCurrentLoopTokenPos += node.split(' ').length\n tmpCurrentLoopNodePos++\n const [nodeIndex, currentNodePos] =\n getCurrentNodeOverflow(tokenLengths, pos)\n\n if (nodeIndex < tmpCurrentLoopNodePos) {\n joinedNodes.push(\n node.slice(\n 0,\n getStringPosition(\n node,\n ' ',\n currentNodePos,\n ),\n ),\n )\n }\n\n joinedNodes.push(node)\n }\n })\n\n return joinedNodes\n }\n\n if (nodeChildren === undefined) {\n if (typeof reactNode === 'string') {\n tmpCurrentLoopTokenPos += reactNode.split(' ').length\n tmpCurrentLoopNodePos++\n\n const [nodeIndex, currentNodePos] = getCurrentNodeOverflow(\n tokenLengths,\n pos,\n )\n\n if (nodeIndex < tmpCurrentLoopNodePos) {\n return reactNode.slice(\n 0,\n getStringPosition(reactNode, ' ', currentNodePos),\n )\n }\n\n return reactNode\n }\n }\n\n if (typeof nodeChildren === 'object') {\n return createElement(\n reactNode.type,\n reactNode?.props,\n traverseNodesAndInjectAIWriter(nodeChildren),\n )\n }\n\n if (typeof nodeChildren === 'string') {\n tmpCurrentLoopTokenPos += nodeChildren.split(' ').length\n tmpCurrentLoopNodePos++\n const [nodeIndex, currentNodePos] = getCurrentNodeOverflow(\n tokenLengths,\n pos,\n )\n\n if (nodeIndex < tmpCurrentLoopNodePos) {\n return createElement(\n reactNode.type,\n reactNode?.props,\n nodeChildren.slice(\n 0,\n getStringPosition(\n nodeChildren,\n ' ',\n currentNodePos,\n ),\n ),\n )\n }\n\n return reactNode\n }\n }\n\n return traverseNodesAndInjectAIWriter(children)\n }, [children, pos, tokenLengths])\n\n useInterval(\n () => {\n setPos((prevPos) => {\n if (prevPos + 1 >= totalTokens) {\n onFinish()\n }\n\n return prevPos + 1\n })\n },\n totalTokens > pos ? delay : null,\n )\n\n useEffect(() => {\n setPos(0)\n }, [children])\n\n return nodex\n}\n\nconst ChatCustomContent = ({\n content = '',\n triggerTyping,\n onFinish,\n}: ChatCustomContentProps) => {\n const finalContent = ReactHtmlParser(marked(content) as string)\n\n return (\n <>\n {triggerTyping ? (\n <AIWriter onFinish={onFinish}>{finalContent}</AIWriter>\n ) : (\n finalContent\n )}\n </>\n )\n}\n\nexport default ChatCustomContent\n"],"names":["AIWriter","children","delay","onFinish","pos","setPos","useState","tokenLengths","useMemo","arr","traverseNodesAndCountTokens","reactNode","nodeChildren","_a","node","totalTokens","acc","curr","nodex","tmpCurrentLoopTokenPos","tmpCurrentLoopNodePos","traverseNodesAndInjectAIWriter","joinedNodes","nodeIndex","currentNodePos","getCurrentNodeOverflow","getStringPosition","createElement","useInterval","prevPos","useEffect","ChatCustomContent","content","triggerTyping","finalContent","ReactHtmlParser","marked","jsx"],"mappings":";;;;;;AAcA,MAAMA,IAAW,CAAC;AAAA,EACd,UAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,UAAAC,IAAW,MAAM;AAAA,
|
|
1
|
+
{"version":3,"file":"ChatCustomContent.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/components/ChatCustomContent.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useState, useMemo, createElement, useEffect, ReactNode } from 'react'\nimport useInterval from '@/utils/hooks/useInterval '\nimport { getCurrentNodeOverflow, getStringPosition } from '../utils'\nimport ReactHtmlParser from 'html-react-parser'\nimport { marked } from 'marked'\nimport type { CommonProps } from '@/@types/common'\n\ntype ChatCustomContentProps = {\n content: string\n triggerTyping: boolean\n onFinish?: () => void\n}\n\nconst AIWriter = ({\n children,\n delay = 25,\n onFinish = () => {},\n}: CommonProps & { delay?: number; onFinish?: () => void }) => {\n const [pos, setPos] = useState(0)\n\n const tokenLengths = useMemo(() => {\n const arr: number[] = []\n\n const traverseNodesAndCountTokens = (reactNode: any) => {\n const nodeChildren = reactNode?.props?.children\n\n if (Array.isArray(reactNode)) {\n reactNode.forEach((node) => {\n if (typeof node === 'object') {\n traverseNodesAndCountTokens(node)\n } else if (typeof node === 'string') {\n arr.push(node.split(' ').length)\n }\n })\n }\n\n if (nodeChildren === undefined) {\n if (typeof reactNode === 'string') {\n arr.push(reactNode.split(' ').length)\n }\n }\n\n // TODO mb try checking if it's a react element\n if (typeof nodeChildren === 'object') {\n traverseNodesAndCountTokens(nodeChildren)\n }\n if (typeof nodeChildren === 'string') {\n arr.push(nodeChildren.split(' ').length)\n }\n\n return arr\n }\n\n return traverseNodesAndCountTokens(children)\n }, [children])\n\n const totalTokens = useMemo(\n () => tokenLengths.reduce((acc, curr) => acc + curr, 0),\n [tokenLengths],\n )\n\n const nodex = useMemo(() => {\n let tmpCurrentLoopTokenPos = 0\n let tmpCurrentLoopNodePos = 0\n\n const traverseNodesAndInjectAIWriter: any = (reactNode: any) => {\n if (tmpCurrentLoopTokenPos > pos) {\n return null\n }\n\n const nodeChildren = reactNode?.props?.children\n\n if (Array.isArray(reactNode)) {\n const joinedNodes: ReactNode[] = []\n reactNode.forEach((node) => {\n if (typeof node === 'object') {\n joinedNodes.push(traverseNodesAndInjectAIWriter(node))\n } else if (typeof node === 'string') {\n tmpCurrentLoopTokenPos += node.split(' ').length\n tmpCurrentLoopNodePos++\n const [nodeIndex, currentNodePos] =\n getCurrentNodeOverflow(tokenLengths, pos)\n\n if (nodeIndex < tmpCurrentLoopNodePos) {\n joinedNodes.push(\n node.slice(\n 0,\n getStringPosition(\n node,\n ' ',\n currentNodePos,\n ),\n ),\n )\n }\n\n joinedNodes.push(node)\n }\n })\n\n return joinedNodes\n }\n\n if (nodeChildren === undefined) {\n if (typeof reactNode === 'string') {\n tmpCurrentLoopTokenPos += reactNode.split(' ').length\n tmpCurrentLoopNodePos++\n\n const [nodeIndex, currentNodePos] = getCurrentNodeOverflow(\n tokenLengths,\n pos,\n )\n\n if (nodeIndex < tmpCurrentLoopNodePos) {\n return reactNode.slice(\n 0,\n getStringPosition(reactNode, ' ', currentNodePos),\n )\n }\n\n return reactNode\n }\n }\n\n if (typeof nodeChildren === 'object') {\n return createElement(\n reactNode.type,\n reactNode?.props,\n traverseNodesAndInjectAIWriter(nodeChildren),\n )\n }\n\n if (typeof nodeChildren === 'string') {\n tmpCurrentLoopTokenPos += nodeChildren.split(' ').length\n tmpCurrentLoopNodePos++\n const [nodeIndex, currentNodePos] = getCurrentNodeOverflow(\n tokenLengths,\n pos,\n )\n\n if (nodeIndex < tmpCurrentLoopNodePos) {\n return createElement(\n reactNode.type,\n reactNode?.props,\n nodeChildren.slice(\n 0,\n getStringPosition(\n nodeChildren,\n ' ',\n currentNodePos,\n ),\n ),\n )\n }\n\n return reactNode\n }\n }\n\n return traverseNodesAndInjectAIWriter(children)\n }, [children, pos, tokenLengths])\n\n useInterval(\n () => {\n setPos((prevPos) => {\n if (prevPos + 1 >= totalTokens) {\n onFinish()\n }\n\n return prevPos + 1\n })\n },\n totalTokens > pos ? delay : null,\n )\n\n useEffect(() => {\n setPos(0)\n }, [children])\n\n return nodex\n}\n\nconst ChatCustomContent = ({\n content = '',\n triggerTyping,\n onFinish,\n}: ChatCustomContentProps) => {\n const finalContent = ReactHtmlParser(marked(content) as string)\n\n return (\n <>\n {triggerTyping ? (\n <AIWriter onFinish={onFinish}>{finalContent}</AIWriter>\n ) : (\n finalContent\n )}\n </>\n )\n}\n\nexport default ChatCustomContent\n"],"names":["AIWriter","children","delay","onFinish","pos","setPos","useState","tokenLengths","useMemo","arr","traverseNodesAndCountTokens","reactNode","nodeChildren","_a","node","totalTokens","acc","curr","nodex","tmpCurrentLoopTokenPos","tmpCurrentLoopNodePos","traverseNodesAndInjectAIWriter","joinedNodes","nodeIndex","currentNodePos","getCurrentNodeOverflow","getStringPosition","createElement","useInterval","prevPos","useEffect","ChatCustomContent","content","triggerTyping","finalContent","ReactHtmlParser","marked","jsx"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatHistory.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/components/ChatHistory.tsx"],"sourcesContent":["import { Fragment } from 'react'\nimport ScrollBar from '@/components/ui/ScrollBar'\nimport ChatHistoryItem from './ChatHistoryItem'\nimport { usGenerativeChatStore } from '../store/generativeChatStore'\nimport { apiGetChatHistory } from '@/services/AiService'\n\nimport useSWR from 'swr'\nimport type { GetChatHistoryResponse } from '../types'\n\ntype ChatHistoryProps = {\n queryText?: string\n onClick?: () => void\n}\n\nconst ChatHistory = ({ queryText = '', onClick }: ChatHistoryProps) => {\n const {\n chatHistory,\n setChatHistory,\n setRenameDialog,\n setSelectedConversation,\n selectedConversation,\n } = usGenerativeChatStore()\n\n useSWR(\n ['/api/ai/chat/history'],\n () => apiGetChatHistory<GetChatHistoryResponse>(),\n {\n revalidateOnFocus: false,\n revalidateIfStale: false,\n revalidateOnReconnect: false,\n onSuccess: (data) => {\n setChatHistory(data)\n },\n },\n )\n\n const handleDelete = (id: string) => {\n setChatHistory(chatHistory.filter((item) => item.id !== id))\n setSelectedConversation('')\n }\n\n const handleArchive = (id: string) => {\n setChatHistory(chatHistory.filter((item) => item.id !== id))\n setSelectedConversation('')\n }\n\n const handleRename = (id: string, title: string) => {\n setRenameDialog({\n id,\n title,\n open: true,\n })\n }\n\n const handleClick = (id: string) => {\n setSelectedConversation(id)\n onClick?.()\n }\n\n return (\n <ScrollBar className=\"h-full\">\n <div className=\"flex flex-col gap-2 py-2 px-3\">\n {chatHistory\n .filter((item) =>\n item.title\n .toLowerCase()\n .includes(queryText.toLowerCase()),\n )\n .map((item) => {\n if (!item.enable) {\n return <Fragment key={item.id} />\n }\n return (\n <ChatHistoryItem\n key={item.id}\n data-testid={item.id}\n title={item.title}\n conversation={item.lastConversation}\n active={selectedConversation === item.id}\n onDelete={() => handleDelete(item.id)}\n onArchive={() => handleArchive(item.id)}\n onRename={() =>\n handleRename(item.id, item.title)\n }\n onClick={() => handleClick(item.id)}\n />\n )\n })}\n </div>\n </ScrollBar>\n )\n}\n\nexport default ChatHistory\n"],"names":["ChatHistory","queryText","onClick","chatHistory","setChatHistory","setRenameDialog","setSelectedConversation","selectedConversation","usGenerativeChatStore","useSWR","apiGetChatHistory","data","handleDelete","id","item","handleArchive","handleRename","title","handleClick","jsx","ScrollBar","ChatHistoryItem","Fragment"],"mappings":";;;;;;;;AAcA,MAAMA,IAAc,CAAC,EAAE,WAAAC,IAAY,IAAI,SAAAC,QAAgC;AACnE,QAAM;AAAA,IACF,aAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,sBAAAC;AAAA,EAAA,IACAC,EAAA;AAEJ,EAAAC;AAAA,IACI,CAAC,sBAAsB;AAAA,IACvB,MAAMC,EAAA;AAAA,IACN;AAAA,MACI,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,uBAAuB;AAAA,MACvB,WAAW,CAACC,MAAS;AACjB,QAAAP,EAAeO,CAAI;AAAA,
|
|
1
|
+
{"version":3,"file":"ChatHistory.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/components/ChatHistory.tsx"],"sourcesContent":["import { Fragment } from 'react'\nimport ScrollBar from '@/components/ui/ScrollBar'\nimport ChatHistoryItem from './ChatHistoryItem'\nimport { usGenerativeChatStore } from '../store/generativeChatStore'\nimport { apiGetChatHistory } from '@/services/AiService'\n\nimport useSWR from 'swr'\nimport type { GetChatHistoryResponse } from '../types'\n\ntype ChatHistoryProps = {\n queryText?: string\n onClick?: () => void\n}\n\nconst ChatHistory = ({ queryText = '', onClick }: ChatHistoryProps) => {\n const {\n chatHistory,\n setChatHistory,\n setRenameDialog,\n setSelectedConversation,\n selectedConversation,\n } = usGenerativeChatStore()\n\n useSWR(\n ['/api/ai/chat/history'],\n () => apiGetChatHistory<GetChatHistoryResponse>(),\n {\n revalidateOnFocus: false,\n revalidateIfStale: false,\n revalidateOnReconnect: false,\n onSuccess: (data) => {\n setChatHistory(data)\n },\n },\n )\n\n const handleDelete = (id: string) => {\n setChatHistory(chatHistory.filter((item) => item.id !== id))\n setSelectedConversation('')\n }\n\n const handleArchive = (id: string) => {\n setChatHistory(chatHistory.filter((item) => item.id !== id))\n setSelectedConversation('')\n }\n\n const handleRename = (id: string, title: string) => {\n setRenameDialog({\n id,\n title,\n open: true,\n })\n }\n\n const handleClick = (id: string) => {\n setSelectedConversation(id)\n onClick?.()\n }\n\n return (\n <ScrollBar className=\"h-full\">\n <div className=\"flex flex-col gap-2 py-2 px-3\">\n {chatHistory\n .filter((item) =>\n item.title\n .toLowerCase()\n .includes(queryText.toLowerCase()),\n )\n .map((item) => {\n if (!item.enable) {\n return <Fragment key={item.id} />\n }\n return (\n <ChatHistoryItem\n key={item.id}\n data-testid={item.id}\n title={item.title}\n conversation={item.lastConversation}\n active={selectedConversation === item.id}\n onDelete={() => handleDelete(item.id)}\n onArchive={() => handleArchive(item.id)}\n onRename={() =>\n handleRename(item.id, item.title)\n }\n onClick={() => handleClick(item.id)}\n />\n )\n })}\n </div>\n </ScrollBar>\n )\n}\n\nexport default ChatHistory\n"],"names":["ChatHistory","queryText","onClick","chatHistory","setChatHistory","setRenameDialog","setSelectedConversation","selectedConversation","usGenerativeChatStore","useSWR","apiGetChatHistory","data","handleDelete","id","item","handleArchive","handleRename","title","handleClick","jsx","ScrollBar","ChatHistoryItem","Fragment"],"mappings":";;;;;;;;AAcA,MAAMA,IAAc,CAAC,EAAE,WAAAC,IAAY,IAAI,SAAAC,QAAgC;AACnE,QAAM;AAAA,IACF,aAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,sBAAAC;AAAA,EAAA,IACAC,EAAA;AAEJ,EAAAC;AAAA,IACI,CAAC,sBAAsB;AAAA,IACvB,MAAMC,EAAA;AAAA,IACN;AAAA,MACI,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,uBAAuB;AAAA,MACvB,WAAW,CAACC,MAAS;AACjB,QAAAP,EAAeO,CAAI;AAAA,MACvB;AAAA,IAAA;AAAA,EACJ;AAGJ,QAAMC,IAAe,CAACC,MAAe;AACjC,IAAAT,EAAeD,EAAY,OAAO,CAACW,MAASA,EAAK,OAAOD,CAAE,CAAC,GAC3DP,EAAwB,EAAE;AAAA,EAC9B,GAEMS,IAAgB,CAACF,MAAe;AAClC,IAAAT,EAAeD,EAAY,OAAO,CAACW,MAASA,EAAK,OAAOD,CAAE,CAAC,GAC3DP,EAAwB,EAAE;AAAA,EAC9B,GAEMU,IAAe,CAACH,GAAYI,MAAkB;AAChD,IAAAZ,EAAgB;AAAA,MACZ,IAAAQ;AAAA,MACA,OAAAI;AAAA,MACA,MAAM;AAAA,IAAA,CACT;AAAA,EACL,GAEMC,IAAc,CAACL,MAAe;AAChC,IAAAP,EAAwBO,CAAE,GAC1BX,KAAA,QAAAA;AAAA,EACJ;AAEA,SACI,gBAAAiB,EAACC,KAAU,WAAU,UACjB,4BAAC,OAAA,EAAI,WAAU,iCACV,UAAAjB,EACI;AAAA,IAAO,CAACW,MACLA,EAAK,MACA,cACA,SAASb,EAAU,YAAA,CAAa;AAAA,EAAA,EAExC,IAAI,CAACa,MACGA,EAAK,SAIN,gBAAAK;AAAA,IAACE;AAAA,IAAA;AAAA,MAEG,eAAaP,EAAK;AAAA,MAClB,OAAOA,EAAK;AAAA,MACZ,cAAcA,EAAK;AAAA,MACnB,QAAQP,MAAyBO,EAAK;AAAA,MACtC,UAAU,MAAMF,EAAaE,EAAK,EAAE;AAAA,MACpC,WAAW,MAAMC,EAAcD,EAAK,EAAE;AAAA,MACtC,UAAU,MACNE,EAAaF,EAAK,IAAIA,EAAK,KAAK;AAAA,MAEpC,SAAS,MAAMI,EAAYJ,EAAK,EAAE;AAAA,IAAA;AAAA,IAV7BA,EAAK;AAAA,EAAA,IAJP,gBAAAK,EAACG,GAAA,IAAcR,EAAK,EAAI,CAiBtC,GACT,GACJ;AAER;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatHistoryItem.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/components/ChatHistoryItem.tsx"],"sourcesContent":["import { useState, useRef } from 'react'\nimport Dropdown from '@/components/ui/Dropdown'\nimport classNames from 'classnames'\nimport { TbDots, TbArchive, TbPencil, TbTrash } from 'react-icons/tb'\nimport type { DropdownRef } from '@/components/ui/Dropdown'\n\nimport type { MouseEvent, SyntheticEvent } from 'react'\n\ntype ChatHistoryItemProps = {\n title: string\n conversation: string\n active?: boolean\n onDelete?: () => void\n onArchive?: () => void\n onRename?: () => void\n onClick?: () => void\n}\n\nconst ChatHistoryItem = (props: ChatHistoryItemProps) => {\n const [dropdownOpen, setDropdownOpen] = useState(false)\n\n const dropdownRef = useRef<DropdownRef>(null)\n\n const {\n title,\n conversation,\n active,\n onRename,\n onArchive,\n onDelete,\n onClick,\n ...rest\n } = props\n\n const handleCallback = (\n e: SyntheticEvent<Element, Event>,\n callback?: () => void,\n ) => {\n e.stopPropagation()\n callback?.()\n }\n\n const handleDropdownToggleClick = (e: MouseEvent) => {\n e.stopPropagation()\n dropdownRef.current?.handleDropdownOpen()\n }\n\n return (\n <div\n className={classNames(\n 'rounded-xl p-3 px-5 hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer group relative',\n (dropdownOpen || active) && 'bg-gray-100 dark:bg-gray-700',\n )}\n onClick={onClick}\n {...rest}\n >\n <div>\n <div className=\"heading-text font-bold truncate\">{title}</div>\n <div className=\"truncate\">{conversation}</div>\n </div>\n <div\n className={classNames(\n 'rounded-xl absolute bottom-0 top-0 to-transparent ltr:right-0 ltr:bg-gradient-to-l rtl:left-0 rtl:bg-gradient-to-r group-hover:from-gray-100 dark:group-hover:from-gray-700 w-8 from-0% group-hover:w-20 group-hover:from-60% flex items-center justify-end',\n dropdownOpen &&\n 'from-gray-100 dark:from-gray-700 w-20 from-60%',\n )}\n >\n <Dropdown\n ref={dropdownRef}\n placement=\"bottom-end\"\n renderTitle={\n <div\n className={classNames(\n 'p-2 opacity-0 group-hover:opacity-100',\n dropdownOpen && 'opacity-100',\n )}\n >\n <TbDots\n className=\"text-xl\"\n onClick={handleDropdownToggleClick}\n />\n </div>\n }\n onOpen={(bool) => setDropdownOpen(bool)}\n >\n <Dropdown.Item\n eventKey=\"rename\"\n onClick={(e) => handleCallback(e, onRename)}\n >\n <TbPencil className=\"text-xl\" />\n <span>Rename</span>\n </Dropdown.Item>\n <Dropdown.Item\n eventKey=\"rename\"\n onClick={(e) => handleCallback(e, onArchive)}\n >\n <TbArchive className=\"text-xl\" />\n <span>Archive</span>\n </Dropdown.Item>\n <Dropdown.Item\n className=\"text-error\"\n eventKey=\"rename\"\n onClick={(e) => handleCallback(e, onDelete)}\n >\n <TbTrash className=\"text-xl text-error\" />\n <span className=\"text-error\">Deleted</span>\n </Dropdown.Item>\n </Dropdown>\n </div>\n </div>\n )\n}\n\nexport default ChatHistoryItem\n"],"names":["ChatHistoryItem","props","dropdownOpen","setDropdownOpen","useState","dropdownRef","useRef","title","conversation","active","onRename","onArchive","onDelete","onClick","rest","handleCallback","callback","handleDropdownToggleClick","_a","jsxs","classNames","jsx","Dropdown","TbDots","bool","TbPencil","TbArchive","TbTrash"],"mappings":";;;;;AAkBA,MAAMA,IAAkB,CAACC,MAAgC;AACrD,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAAS,EAAK,GAEhDC,IAAcC,EAAoB,IAAI,GAEtC;AAAA,IACF,OAAAC;AAAA,IACA,cAAAC;AAAA,IACA,QAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,SAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACHb,GAEEc,IAAiB,CACnB,GACAC,MACC;AACD,MAAE,gBAAA,GACFA,KAAA,QAAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"ChatHistoryItem.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/components/ChatHistoryItem.tsx"],"sourcesContent":["import { useState, useRef } from 'react'\nimport Dropdown from '@/components/ui/Dropdown'\nimport classNames from 'classnames'\nimport { TbDots, TbArchive, TbPencil, TbTrash } from 'react-icons/tb'\nimport type { DropdownRef } from '@/components/ui/Dropdown'\n\nimport type { MouseEvent, SyntheticEvent } from 'react'\n\ntype ChatHistoryItemProps = {\n title: string\n conversation: string\n active?: boolean\n onDelete?: () => void\n onArchive?: () => void\n onRename?: () => void\n onClick?: () => void\n}\n\nconst ChatHistoryItem = (props: ChatHistoryItemProps) => {\n const [dropdownOpen, setDropdownOpen] = useState(false)\n\n const dropdownRef = useRef<DropdownRef>(null)\n\n const {\n title,\n conversation,\n active,\n onRename,\n onArchive,\n onDelete,\n onClick,\n ...rest\n } = props\n\n const handleCallback = (\n e: SyntheticEvent<Element, Event>,\n callback?: () => void,\n ) => {\n e.stopPropagation()\n callback?.()\n }\n\n const handleDropdownToggleClick = (e: MouseEvent) => {\n e.stopPropagation()\n dropdownRef.current?.handleDropdownOpen()\n }\n\n return (\n <div\n className={classNames(\n 'rounded-xl p-3 px-5 hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer group relative',\n (dropdownOpen || active) && 'bg-gray-100 dark:bg-gray-700',\n )}\n onClick={onClick}\n {...rest}\n >\n <div>\n <div className=\"heading-text font-bold truncate\">{title}</div>\n <div className=\"truncate\">{conversation}</div>\n </div>\n <div\n className={classNames(\n 'rounded-xl absolute bottom-0 top-0 to-transparent ltr:right-0 ltr:bg-gradient-to-l rtl:left-0 rtl:bg-gradient-to-r group-hover:from-gray-100 dark:group-hover:from-gray-700 w-8 from-0% group-hover:w-20 group-hover:from-60% flex items-center justify-end',\n dropdownOpen &&\n 'from-gray-100 dark:from-gray-700 w-20 from-60%',\n )}\n >\n <Dropdown\n ref={dropdownRef}\n placement=\"bottom-end\"\n renderTitle={\n <div\n className={classNames(\n 'p-2 opacity-0 group-hover:opacity-100',\n dropdownOpen && 'opacity-100',\n )}\n >\n <TbDots\n className=\"text-xl\"\n onClick={handleDropdownToggleClick}\n />\n </div>\n }\n onOpen={(bool) => setDropdownOpen(bool)}\n >\n <Dropdown.Item\n eventKey=\"rename\"\n onClick={(e) => handleCallback(e, onRename)}\n >\n <TbPencil className=\"text-xl\" />\n <span>Rename</span>\n </Dropdown.Item>\n <Dropdown.Item\n eventKey=\"rename\"\n onClick={(e) => handleCallback(e, onArchive)}\n >\n <TbArchive className=\"text-xl\" />\n <span>Archive</span>\n </Dropdown.Item>\n <Dropdown.Item\n className=\"text-error\"\n eventKey=\"rename\"\n onClick={(e) => handleCallback(e, onDelete)}\n >\n <TbTrash className=\"text-xl text-error\" />\n <span className=\"text-error\">Deleted</span>\n </Dropdown.Item>\n </Dropdown>\n </div>\n </div>\n )\n}\n\nexport default ChatHistoryItem\n"],"names":["ChatHistoryItem","props","dropdownOpen","setDropdownOpen","useState","dropdownRef","useRef","title","conversation","active","onRename","onArchive","onDelete","onClick","rest","handleCallback","callback","handleDropdownToggleClick","_a","jsxs","classNames","jsx","Dropdown","TbDots","bool","TbPencil","TbArchive","TbTrash"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatHistoryRenameDialog.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/components/ChatHistoryRenameDialog.tsx"],"sourcesContent":["import { useEffect } from 'react'\nimport Dialog from '@/components/ui/Dialog'\nimport { Form, FormItem } from '@/components/ui/Form'\nimport Input from '@/components/ui/Input'\nimport Button from '@/components/ui/Button'\nimport { usGenerativeChatStore } from '../store/generativeChatStore'\nimport { useForm, Controller } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { z } from 'zod'\nimport type { ZodType } from 'zod'\n\ntype FormSchema = {\n title: string\n}\n\nconst validationSchema: ZodType<FormSchema> = z.object({\n title: z.string().min(1, 'Please do not leave chat title blank!'),\n})\n\nconst ChatHistoryRenameDialog = () => {\n const { renameDialog, setRenameDialog, setChatHistoryName } =\n usGenerativeChatStore()\n\n const {\n control,\n formState: { errors },\n handleSubmit,\n reset,\n } = useForm<FormSchema>({\n defaultValues: {\n title: renameDialog.title,\n },\n resolver: zodResolver(validationSchema),\n })\n\n useEffect(() => {\n if (renameDialog.open) {\n reset({\n title: renameDialog.title,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [renameDialog.title, renameDialog.open])\n\n const handleDialogClose = () => {\n setRenameDialog({\n id: '',\n title: '',\n open: false,\n })\n }\n\n const onFormSubmit = async ({ title }: FormSchema) => {\n setChatHistoryName({\n id: renameDialog.id,\n title,\n })\n handleDialogClose()\n }\n\n return (\n <Dialog\n isOpen={renameDialog.open}\n onClose={handleDialogClose}\n onRequestClose={handleDialogClose}\n >\n <h5>Rename chat</h5>\n <div className=\"mt-8\">\n <Form onSubmit={handleSubmit(onFormSubmit)}>\n <FormItem\n label=\"Chat title\"\n invalid={Boolean(errors.title)}\n errorMessage={errors.title?.message}\n >\n <Controller\n name=\"title\"\n control={control}\n rules={{ required: true }}\n render={({ field }) => (\n <Input\n placeholder=\"Rename chat\"\n type=\"text\"\n autoComplete=\"off\"\n {...field}\n />\n )}\n />\n </FormItem>\n <div className=\"flex justify-end gap-2\">\n <Button type=\"button\" onClick={handleDialogClose}>\n Cancel\n </Button>\n <Button variant=\"solid\" type=\"submit\">\n Rename\n </Button>\n </div>\n </Form>\n </div>\n </Dialog>\n )\n}\n\nexport default ChatHistoryRenameDialog\n"],"names":["validationSchema","z","ChatHistoryRenameDialog","renameDialog","setRenameDialog","setChatHistoryName","usGenerativeChatStore","control","errors","handleSubmit","reset","useForm","zodResolver","useEffect","handleDialogClose","onFormSubmit","title","jsxs","Dialog","jsx","Form","FormItem","_a","Controller","field","Input","Button"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAMA,IAAwCC,EAAE,OAAO;AAAA,EACnD,OAAOA,EAAE,OAAA,EAAS,IAAI,GAAG,uCAAuC;AACpE,CAAC,GAEKC,IAA0B,MAAM;;AAClC,QAAM,EAAE,cAAAC,GAAc,iBAAAC,GAAiB,oBAAAC,EAAA,IACnCC,EAAA,GAEE;AAAA,IACF,SAAAC;AAAA,IACA,WAAW,EAAE,QAAAC,EAAA;AAAA,IACb,cAAAC;AAAA,IACA,OAAAC;AAAA,EAAA,IACAC,EAAoB;AAAA,IACpB,eAAe;AAAA,MACX,OAAOR,EAAa;AAAA,IAAA;AAAA,IAExB,UAAUS,EAAYZ,CAAgB;AAAA,EAAA,CACzC;AAED,EAAAa,EAAU,MAAM;AACZ,IAAIV,EAAa,QACbO,EAAM;AAAA,MACF,OAAOP,EAAa;AAAA,IAAA,CACvB;AAAA,
|
|
1
|
+
{"version":3,"file":"ChatHistoryRenameDialog.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/components/ChatHistoryRenameDialog.tsx"],"sourcesContent":["import { useEffect } from 'react'\nimport Dialog from '@/components/ui/Dialog'\nimport { Form, FormItem } from '@/components/ui/Form'\nimport Input from '@/components/ui/Input'\nimport Button from '@/components/ui/Button'\nimport { usGenerativeChatStore } from '../store/generativeChatStore'\nimport { useForm, Controller } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { z } from 'zod'\nimport type { ZodType } from 'zod'\n\ntype FormSchema = {\n title: string\n}\n\nconst validationSchema: ZodType<FormSchema> = z.object({\n title: z.string().min(1, 'Please do not leave chat title blank!'),\n})\n\nconst ChatHistoryRenameDialog = () => {\n const { renameDialog, setRenameDialog, setChatHistoryName } =\n usGenerativeChatStore()\n\n const {\n control,\n formState: { errors },\n handleSubmit,\n reset,\n } = useForm<FormSchema>({\n defaultValues: {\n title: renameDialog.title,\n },\n resolver: zodResolver(validationSchema),\n })\n\n useEffect(() => {\n if (renameDialog.open) {\n reset({\n title: renameDialog.title,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [renameDialog.title, renameDialog.open])\n\n const handleDialogClose = () => {\n setRenameDialog({\n id: '',\n title: '',\n open: false,\n })\n }\n\n const onFormSubmit = async ({ title }: FormSchema) => {\n setChatHistoryName({\n id: renameDialog.id,\n title,\n })\n handleDialogClose()\n }\n\n return (\n <Dialog\n isOpen={renameDialog.open}\n onClose={handleDialogClose}\n onRequestClose={handleDialogClose}\n >\n <h5>Rename chat</h5>\n <div className=\"mt-8\">\n <Form onSubmit={handleSubmit(onFormSubmit)}>\n <FormItem\n label=\"Chat title\"\n invalid={Boolean(errors.title)}\n errorMessage={errors.title?.message}\n >\n <Controller\n name=\"title\"\n control={control}\n rules={{ required: true }}\n render={({ field }) => (\n <Input\n placeholder=\"Rename chat\"\n type=\"text\"\n autoComplete=\"off\"\n {...field}\n />\n )}\n />\n </FormItem>\n <div className=\"flex justify-end gap-2\">\n <Button type=\"button\" onClick={handleDialogClose}>\n Cancel\n </Button>\n <Button variant=\"solid\" type=\"submit\">\n Rename\n </Button>\n </div>\n </Form>\n </div>\n </Dialog>\n )\n}\n\nexport default ChatHistoryRenameDialog\n"],"names":["validationSchema","z","ChatHistoryRenameDialog","renameDialog","setRenameDialog","setChatHistoryName","usGenerativeChatStore","control","errors","handleSubmit","reset","useForm","zodResolver","useEffect","handleDialogClose","onFormSubmit","title","jsxs","Dialog","jsx","Form","FormItem","_a","Controller","field","Input","Button"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAMA,IAAwCC,EAAE,OAAO;AAAA,EACnD,OAAOA,EAAE,OAAA,EAAS,IAAI,GAAG,uCAAuC;AACpE,CAAC,GAEKC,IAA0B,MAAM;;AAClC,QAAM,EAAE,cAAAC,GAAc,iBAAAC,GAAiB,oBAAAC,EAAA,IACnCC,EAAA,GAEE;AAAA,IACF,SAAAC;AAAA,IACA,WAAW,EAAE,QAAAC,EAAA;AAAA,IACb,cAAAC;AAAA,IACA,OAAAC;AAAA,EAAA,IACAC,EAAoB;AAAA,IACpB,eAAe;AAAA,MACX,OAAOR,EAAa;AAAA,IAAA;AAAA,IAExB,UAAUS,EAAYZ,CAAgB;AAAA,EAAA,CACzC;AAED,EAAAa,EAAU,MAAM;AACZ,IAAIV,EAAa,QACbO,EAAM;AAAA,MACF,OAAOP,EAAa;AAAA,IAAA,CACvB;AAAA,EAGT,GAAG,CAACA,EAAa,OAAOA,EAAa,IAAI,CAAC;AAE1C,QAAMW,IAAoB,MAAM;AAC5B,IAAAV,EAAgB;AAAA,MACZ,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,MAAM;AAAA,IAAA,CACT;AAAA,EACL,GAEMW,IAAe,OAAO,EAAE,OAAAC,QAAwB;AAClD,IAAAX,EAAmB;AAAA,MACf,IAAIF,EAAa;AAAA,MACjB,OAAAa;AAAA,IAAA,CACH,GACDF,EAAA;AAAA,EACJ;AAEA,SACI,gBAAAG;AAAA,IAACC;AAAA,IAAA;AAAA,MACG,QAAQf,EAAa;AAAA,MACrB,SAASW;AAAA,MACT,gBAAgBA;AAAA,MAEhB,UAAA;AAAA,QAAA,gBAAAK,EAAC,QAAG,UAAA,cAAA,CAAW;AAAA,QACf,gBAAAA,EAAC,SAAI,WAAU,QACX,4BAACC,GAAA,EAAK,UAAUX,EAAaM,CAAY,GACrC,UAAA;AAAA,UAAA,gBAAAI;AAAA,YAACE;AAAA,YAAA;AAAA,cACG,OAAM;AAAA,cACN,SAAS,EAAQb,EAAO;AAAA,cACxB,eAAcc,IAAAd,EAAO,UAAP,gBAAAc,EAAc;AAAA,cAE5B,UAAA,gBAAAH;AAAA,gBAACI;AAAA,gBAAA;AAAA,kBACG,MAAK;AAAA,kBACL,SAAAhB;AAAA,kBACA,OAAO,EAAE,UAAU,GAAA;AAAA,kBACnB,QAAQ,CAAC,EAAE,OAAAiB,EAAA,MACP,gBAAAL;AAAA,oBAACM;AAAA,oBAAA;AAAA,sBACG,aAAY;AAAA,sBACZ,MAAK;AAAA,sBACL,cAAa;AAAA,sBACZ,GAAGD;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACR;AAAA,cAAA;AAAA,YAER;AAAA,UAAA;AAAA,UAEJ,gBAAAP,EAAC,OAAA,EAAI,WAAU,0BACX,UAAA;AAAA,YAAA,gBAAAE,EAACO,GAAA,EAAO,MAAK,UAAS,SAASZ,GAAmB,UAAA,UAElD;AAAA,8BACCY,GAAA,EAAO,SAAQ,SAAQ,MAAK,UAAS,UAAA,SAAA,CAEtC;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGZ;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatSideNav.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/components/ChatSideNav.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Card from '@/components/ui/Card'\nimport Button from '@/components/ui/Button'\nimport ChatHistory from './ChatHistory'\nimport { usGenerativeChatStore } from '../store/generativeChatStore'\nimport useDebounce from '@/utils/hooks/useDebounce'\nimport classNames from '@/utils/classNames'\nimport { TbSearch } from 'react-icons/tb'\nimport type { ChangeEvent } from 'react'\nimport type { CardProps } from '@/components/ui/Card'\n\ntype ChatSideNavProps = Pick<CardProps, 'className' | 'bodyClass'> & {\n onClick?: () => void\n}\n\nconst ChatSideNav = ({ className, bodyClass, onClick }: ChatSideNavProps) => {\n const [queryText, setQueryText] = useState('')\n\n const { setSelectedConversation } = usGenerativeChatStore()\n\n function handleDebounceFn(e: ChangeEvent<HTMLInputElement>) {\n setQueryText?.(e.target.value)\n }\n\n const debounceFn = useDebounce(handleDebounceFn, 500)\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n debounceFn(e)\n }\n\n const handleNewChat = () => {\n setSelectedConversation('')\n onClick?.()\n }\n\n return (\n <Card\n header={{\n content: (\n <div className=\"flex items-center gap-2 px-5 w-full h-[60px]\">\n <TbSearch className=\"text-xl\" />\n <input\n className=\"flex-1 h-full placeholder:text-gray-400 placeholder:text-base bg-transparent focus:outline-none heading-text\"\n placeholder=\"Search chat\"\n onChange={handleInputChange}\n />\n </div>\n ),\n className: 'p-0',\n }}\n className={classNames('flex-1 xl:max-w-[320px] h-full', className)}\n bodyClass={classNames('h-[calc(100%-60px-80px)] p-0', bodyClass)}\n >\n <ChatHistory queryText={queryText} onClick={onClick} />\n <div className=\"px-5 py-2\">\n <Button block variant=\"solid\" onClick={handleNewChat}>\n New chat\n </Button>\n </div>\n </Card>\n )\n}\n\nexport default ChatSideNav\n"],"names":["ChatSideNav","className","bodyClass","onClick","queryText","setQueryText","useState","setSelectedConversation","usGenerativeChatStore","handleDebounceFn","e","debounceFn","useDebounce","handleInputChange","handleNewChat","jsxs","Card","jsx","TbSearch","classNames","ChatHistory","Button"],"mappings":";;;;;;;;;;;AAeA,MAAMA,IAAc,CAAC,EAAE,WAAAC,GAAW,WAAAC,GAAW,SAAAC,QAAgC;AACzE,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAAS,EAAE,GAEvC,EAAE,yBAAAC,EAAA,IAA4BC,EAAA;AAEpC,WAASC,EAAiBC,GAAkC;AACxD,IAAAL,KAAA,QAAAA,EAAeK,EAAE,OAAO;AAAA,
|
|
1
|
+
{"version":3,"file":"ChatSideNav.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/components/ChatSideNav.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Card from '@/components/ui/Card'\nimport Button from '@/components/ui/Button'\nimport ChatHistory from './ChatHistory'\nimport { usGenerativeChatStore } from '../store/generativeChatStore'\nimport useDebounce from '@/utils/hooks/useDebounce'\nimport classNames from '@/utils/classNames'\nimport { TbSearch } from 'react-icons/tb'\nimport type { ChangeEvent } from 'react'\nimport type { CardProps } from '@/components/ui/Card'\n\ntype ChatSideNavProps = Pick<CardProps, 'className' | 'bodyClass'> & {\n onClick?: () => void\n}\n\nconst ChatSideNav = ({ className, bodyClass, onClick }: ChatSideNavProps) => {\n const [queryText, setQueryText] = useState('')\n\n const { setSelectedConversation } = usGenerativeChatStore()\n\n function handleDebounceFn(e: ChangeEvent<HTMLInputElement>) {\n setQueryText?.(e.target.value)\n }\n\n const debounceFn = useDebounce(handleDebounceFn, 500)\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n debounceFn(e)\n }\n\n const handleNewChat = () => {\n setSelectedConversation('')\n onClick?.()\n }\n\n return (\n <Card\n header={{\n content: (\n <div className=\"flex items-center gap-2 px-5 w-full h-[60px]\">\n <TbSearch className=\"text-xl\" />\n <input\n className=\"flex-1 h-full placeholder:text-gray-400 placeholder:text-base bg-transparent focus:outline-none heading-text\"\n placeholder=\"Search chat\"\n onChange={handleInputChange}\n />\n </div>\n ),\n className: 'p-0',\n }}\n className={classNames('flex-1 xl:max-w-[320px] h-full', className)}\n bodyClass={classNames('h-[calc(100%-60px-80px)] p-0', bodyClass)}\n >\n <ChatHistory queryText={queryText} onClick={onClick} />\n <div className=\"px-5 py-2\">\n <Button block variant=\"solid\" onClick={handleNewChat}>\n New chat\n </Button>\n </div>\n </Card>\n )\n}\n\nexport default ChatSideNav\n"],"names":["ChatSideNav","className","bodyClass","onClick","queryText","setQueryText","useState","setSelectedConversation","usGenerativeChatStore","handleDebounceFn","e","debounceFn","useDebounce","handleInputChange","handleNewChat","jsxs","Card","jsx","TbSearch","classNames","ChatHistory","Button"],"mappings":";;;;;;;;;;;AAeA,MAAMA,IAAc,CAAC,EAAE,WAAAC,GAAW,WAAAC,GAAW,SAAAC,QAAgC;AACzE,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAAS,EAAE,GAEvC,EAAE,yBAAAC,EAAA,IAA4BC,EAAA;AAEpC,WAASC,EAAiBC,GAAkC;AACxD,IAAAL,KAAA,QAAAA,EAAeK,EAAE,OAAO;AAAA,EAC5B;AAEA,QAAMC,IAAaC,EAAYH,GAAkB,GAAG,GAE9CI,IAAoB,CAACH,MAAqC;AAC5D,IAAAC,EAAWD,CAAC;AAAA,EAChB,GAEMI,IAAgB,MAAM;AACxB,IAAAP,EAAwB,EAAE,GAC1BJ,KAAA,QAAAA;AAAA,EACJ;AAEA,SACI,gBAAAY;AAAA,IAACC;AAAA,IAAA;AAAA,MACG,QAAQ;AAAA,QACJ,SACI,gBAAAD,EAAC,OAAA,EAAI,WAAU,gDACX,UAAA;AAAA,UAAA,gBAAAE,EAACC,GAAA,EAAS,WAAU,UAAA,CAAU;AAAA,UAC9B,gBAAAD;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAU;AAAA,cACV,aAAY;AAAA,cACZ,UAAUJ;AAAA,YAAA;AAAA,UAAA;AAAA,QACd,GACJ;AAAA,QAEJ,WAAW;AAAA,MAAA;AAAA,MAEf,WAAWM,EAAW,kCAAkClB,CAAS;AAAA,MACjE,WAAWkB,EAAW,gCAAgCjB,CAAS;AAAA,MAE/D,UAAA;AAAA,QAAA,gBAAAe,EAACG,GAAA,EAAY,WAAAhB,GAAsB,SAAAD,EAAA,CAAkB;AAAA,QACrD,gBAAAc,EAAC,OAAA,EAAI,WAAU,aACX,UAAA,gBAAAA,EAACI,GAAA,EAAO,OAAK,IAAC,SAAQ,SAAQ,SAASP,GAAe,sBAEtD,EAAA,CACJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGZ;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatView.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/components/ChatView.tsx"],"sourcesContent":["import { useRef, useEffect, useMemo } from 'react'\nimport Card from '@/components/ui/Card'\nimport ChatBox from '@/components/view/ChatBox'\nimport ChatLandingView from './ChatLandingView'\nimport ChatMobileNav from './ChatMobileNav'\nimport ChatCustomContent from './ChatCustomContent'\nimport ChatCustomAction from './ChatCustomAction'\nimport { usGenerativeChatStore } from '../store/generativeChatStore'\nimport useChatSend from '../hooks/useChatSend'\nimport type { ScrollBarRef } from '@/components/ui/ScrollBar'\n\nconst ChatView = () => {\n const scrollRef = useRef<ScrollBarRef>(null)\n const { selectedConversation, chatHistory, isTyping, disabledChatFresh } =\n usGenerativeChatStore()\n const { handleSend } = useChatSend()\n\n const scrollToBottom = () => {\n if (scrollRef.current?.getScrollElement) {\n const scrollElement = scrollRef.current.getScrollElement()\n if (scrollElement) {\n scrollElement.scrollTop = scrollElement.scrollHeight\n }\n }\n }\n\n useEffect(() => {\n scrollToBottom()\n }, [selectedConversation, chatHistory])\n\n const messageList = useMemo(() => {\n const chat = chatHistory.find(\n (chat) => chat.id === selectedConversation,\n )\n return chat?.conversation || []\n }, [selectedConversation, chatHistory])\n\n const handleInputChange = async ({\n value,\n }: {\n value: string\n attachments?: File[]\n }) => {\n await handleSend(value)\n }\n\n const handleFinish = (id: string) => {\n disabledChatFresh(id)\n scrollToBottom()\n }\n\n return (\n <Card className=\"flex-1 h-full\" bodyClass=\"h-full\">\n <ChatMobileNav />\n <ChatBox\n ref={scrollRef}\n messageList={messageList}\n placeholder=\"Enter a prompt here\"\n showMessageList={Boolean(selectedConversation)}\n showAvatar={true}\n avatarGap={true}\n containerClass=\"h-[calc(100%-30px)] xl:h-full\"\n messageListClass=\"h-[calc(100%-100px)] xl:h-[calc(100%-70px)]\"\n typing={\n isTyping\n ? {\n id: 'ai',\n name: 'Chat AI',\n avatarImageUrl: '/img/thumbs/ai.jpg',\n }\n : false\n }\n customRenderer={(message) => {\n if (message.sender.id === 'ai') {\n return (\n <ChatCustomContent\n content={message.content as string}\n triggerTyping={\n message.fresh ? message.fresh : false\n }\n onFinish={() => handleFinish(message.id)}\n />\n )\n }\n\n return message.content\n }}\n customAction={(message) => {\n if (message.sender.id === 'ai') {\n return (\n <ChatCustomAction\n content={message.content as string}\n />\n )\n }\n\n return null\n }}\n onInputChange={handleInputChange}\n >\n {!selectedConversation && <ChatLandingView />}\n </ChatBox>\n </Card>\n )\n}\n\nexport default ChatView\n"],"names":["ChatView","scrollRef","useRef","selectedConversation","chatHistory","isTyping","disabledChatFresh","usGenerativeChatStore","handleSend","useChatSend","scrollToBottom","_a","scrollElement","useEffect","messageList","useMemo","chat","handleInputChange","value","handleFinish","id","jsxs","Card","jsx","ChatMobileNav","ChatBox","message","ChatCustomContent","ChatCustomAction","ChatLandingView"],"mappings":";;;;;;;;;;;;AAWA,MAAMA,IAAW,MAAM;AACnB,QAAMC,IAAYC,EAAqB,IAAI,GACrC,EAAE,sBAAAC,GAAsB,aAAAC,GAAa,UAAAC,GAAU,mBAAAC,EAAA,IACjDC,EAAA,GACE,EAAE,YAAAC,EAAA,IAAeC,EAAA,GAEjBC,IAAiB,MAAM;;AACzB,SAAIC,IAAAV,EAAU,YAAV,QAAAU,EAAmB,kBAAkB;AACrC,YAAMC,IAAgBX,EAAU,QAAQ,iBAAA;AACxC,MAAIW,MACAA,EAAc,YAAYA,EAAc;AAAA,
|
|
1
|
+
{"version":3,"file":"ChatView.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/components/ChatView.tsx"],"sourcesContent":["import { useRef, useEffect, useMemo } from 'react'\nimport Card from '@/components/ui/Card'\nimport ChatBox from '@/components/view/ChatBox'\nimport ChatLandingView from './ChatLandingView'\nimport ChatMobileNav from './ChatMobileNav'\nimport ChatCustomContent from './ChatCustomContent'\nimport ChatCustomAction from './ChatCustomAction'\nimport { usGenerativeChatStore } from '../store/generativeChatStore'\nimport useChatSend from '../hooks/useChatSend'\nimport type { ScrollBarRef } from '@/components/ui/ScrollBar'\n\nconst ChatView = () => {\n const scrollRef = useRef<ScrollBarRef>(null)\n const { selectedConversation, chatHistory, isTyping, disabledChatFresh } =\n usGenerativeChatStore()\n const { handleSend } = useChatSend()\n\n const scrollToBottom = () => {\n if (scrollRef.current?.getScrollElement) {\n const scrollElement = scrollRef.current.getScrollElement()\n if (scrollElement) {\n scrollElement.scrollTop = scrollElement.scrollHeight\n }\n }\n }\n\n useEffect(() => {\n scrollToBottom()\n }, [selectedConversation, chatHistory])\n\n const messageList = useMemo(() => {\n const chat = chatHistory.find(\n (chat) => chat.id === selectedConversation,\n )\n return chat?.conversation || []\n }, [selectedConversation, chatHistory])\n\n const handleInputChange = async ({\n value,\n }: {\n value: string\n attachments?: File[]\n }) => {\n await handleSend(value)\n }\n\n const handleFinish = (id: string) => {\n disabledChatFresh(id)\n scrollToBottom()\n }\n\n return (\n <Card className=\"flex-1 h-full\" bodyClass=\"h-full\">\n <ChatMobileNav />\n <ChatBox\n ref={scrollRef}\n messageList={messageList}\n placeholder=\"Enter a prompt here\"\n showMessageList={Boolean(selectedConversation)}\n showAvatar={true}\n avatarGap={true}\n containerClass=\"h-[calc(100%-30px)] xl:h-full\"\n messageListClass=\"h-[calc(100%-100px)] xl:h-[calc(100%-70px)]\"\n typing={\n isTyping\n ? {\n id: 'ai',\n name: 'Chat AI',\n avatarImageUrl: '/img/thumbs/ai.jpg',\n }\n : false\n }\n customRenderer={(message) => {\n if (message.sender.id === 'ai') {\n return (\n <ChatCustomContent\n content={message.content as string}\n triggerTyping={\n message.fresh ? message.fresh : false\n }\n onFinish={() => handleFinish(message.id)}\n />\n )\n }\n\n return message.content\n }}\n customAction={(message) => {\n if (message.sender.id === 'ai') {\n return (\n <ChatCustomAction\n content={message.content as string}\n />\n )\n }\n\n return null\n }}\n onInputChange={handleInputChange}\n >\n {!selectedConversation && <ChatLandingView />}\n </ChatBox>\n </Card>\n )\n}\n\nexport default ChatView\n"],"names":["ChatView","scrollRef","useRef","selectedConversation","chatHistory","isTyping","disabledChatFresh","usGenerativeChatStore","handleSend","useChatSend","scrollToBottom","_a","scrollElement","useEffect","messageList","useMemo","chat","handleInputChange","value","handleFinish","id","jsxs","Card","jsx","ChatMobileNav","ChatBox","message","ChatCustomContent","ChatCustomAction","ChatLandingView"],"mappings":";;;;;;;;;;;;AAWA,MAAMA,IAAW,MAAM;AACnB,QAAMC,IAAYC,EAAqB,IAAI,GACrC,EAAE,sBAAAC,GAAsB,aAAAC,GAAa,UAAAC,GAAU,mBAAAC,EAAA,IACjDC,EAAA,GACE,EAAE,YAAAC,EAAA,IAAeC,EAAA,GAEjBC,IAAiB,MAAM;;AACzB,SAAIC,IAAAV,EAAU,YAAV,QAAAU,EAAmB,kBAAkB;AACrC,YAAMC,IAAgBX,EAAU,QAAQ,iBAAA;AACxC,MAAIW,MACAA,EAAc,YAAYA,EAAc;AAAA,IAEhD;AAAA,EACJ;AAEA,EAAAC,EAAU,MAAM;AACZ,IAAAH,EAAA;AAAA,EACJ,GAAG,CAACP,GAAsBC,CAAW,CAAC;AAEtC,QAAMU,IAAcC,EAAQ,MAAM;AAC9B,UAAMC,IAAOZ,EAAY;AAAA,MACrB,CAACY,MAASA,EAAK,OAAOb;AAAA,IAAA;AAE1B,YAAOa,KAAA,gBAAAA,EAAM,iBAAgB,CAAA;AAAA,EACjC,GAAG,CAACb,GAAsBC,CAAW,CAAC,GAEhCa,IAAoB,OAAO;AAAA,IAC7B,OAAAC;AAAA,EAAA,MAIE;AACF,UAAMV,EAAWU,CAAK;AAAA,EAC1B,GAEMC,IAAe,CAACC,MAAe;AACjC,IAAAd,EAAkBc,CAAE,GACpBV,EAAA;AAAA,EACJ;AAEA,SACI,gBAAAW,EAACC,GAAA,EAAK,WAAU,iBAAgB,WAAU,UACtC,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAc;AAAA,IACf,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACG,KAAKxB;AAAA,QACL,aAAAa;AAAA,QACA,aAAY;AAAA,QACZ,iBAAiB,EAAQX;AAAA,QACzB,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,gBAAe;AAAA,QACf,kBAAiB;AAAA,QACjB,QACIE,IACM;AAAA,UACI,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,gBAAgB;AAAA,QAAA,IAEpB;AAAA,QAEV,gBAAgB,CAACqB,MACTA,EAAQ,OAAO,OAAO,OAElB,gBAAAH;AAAA,UAACI;AAAA,UAAA;AAAA,YACG,SAASD,EAAQ;AAAA,YACjB,eACIA,EAAQ,QAAQA,EAAQ,QAAQ;AAAA,YAEpC,UAAU,MAAMP,EAAaO,EAAQ,EAAE;AAAA,UAAA;AAAA,QAAA,IAK5CA,EAAQ;AAAA,QAEnB,cAAc,CAACA,MACPA,EAAQ,OAAO,OAAO,OAElB,gBAAAH;AAAA,UAACK;AAAA,UAAA;AAAA,YACG,SAASF,EAAQ;AAAA,UAAA;AAAA,QAAA,IAKtB;AAAA,QAEX,eAAeT;AAAA,QAEd,UAAA,CAACd,KAAwB,gBAAAoB,EAACM,GAAA,CAAA,CAAgB;AAAA,MAAA;AAAA,IAAA;AAAA,EAC/C,GACJ;AAER;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChatSend.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/hooks/useChatSend.ts"],"sourcesContent":["import { usGenerativeChatStore } from '../store/generativeChatStore'\nimport { apiPostChat } from '@/services/AiService'\nimport dayjs from 'dayjs'\nimport uniqueId from 'lodash/uniqueId'\nimport type { PostAiChatResponse } from '../types'\n\nconst useChatSend = () => {\n const {\n selectedConversation,\n setSelectedConversation,\n pushChatHistory,\n pushConversation,\n setIsTyping,\n } = usGenerativeChatStore()\n\n const creteMyMessage = (id: string, prompt: string) => {\n pushConversation(id, {\n id: uniqueId('ai-conversation-'),\n sender: {\n id: '1',\n name: 'Angelina Gotelli',\n avatarImageUrl: '/img/avatars/thumb-1.jpg',\n },\n content: prompt,\n timestamp: dayjs().toDate(),\n type: 'regular',\n isMyMessage: true,\n })\n }\n\n const sendMessage = async (\n id: string,\n prompt: string,\n attachments?: File[],\n ) => {\n const resp = await apiPostChat<PostAiChatResponse>({\n prompt,\n attachments,\n })\n pushConversation(id, {\n id: uniqueId('ai-conversation-'),\n sender: {\n id: 'ai',\n name: 'Chat AI',\n avatarImageUrl: '/img/thumbs/ai.jpg',\n },\n content: resp.choices[0].message.content || '',\n timestamp: dayjs().toDate(),\n type: 'regular',\n isMyMessage: false,\n fresh: true,\n })\n setIsTyping(false)\n }\n\n const createConversation = async (\n id: string,\n prompt: string,\n attachments?: File[],\n ) => {\n setSelectedConversation(id)\n await sendMessage(id, prompt, attachments)\n }\n\n const handleSend = async (prompt: string, attachments?: File[]) => {\n setIsTyping(true)\n if (selectedConversation) {\n creteMyMessage(selectedConversation, prompt)\n await sendMessage(selectedConversation, prompt)\n } else {\n const newId = uniqueId('ai-chat-')\n pushChatHistory({\n id: newId,\n title: prompt,\n lastConversation: '',\n createdTime: dayjs().unix(),\n updatedTime: dayjs().unix(),\n enable: false,\n })\n creteMyMessage(newId, prompt)\n await createConversation(newId, prompt, attachments)\n }\n }\n\n return {\n handleSend,\n }\n}\n\nexport default useChatSend\n"],"names":["useChatSend","selectedConversation","setSelectedConversation","pushChatHistory","pushConversation","setIsTyping","usGenerativeChatStore","creteMyMessage","id","prompt","uniqueId","dayjs","sendMessage","attachments","resp","apiPostChat","createConversation","newId"],"mappings":";;;;AAMA,MAAMA,IAAc,MAAM;AACtB,QAAM;AAAA,IACF,sBAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,aAAAC;AAAA,EAAA,IACAC,EAAA,GAEEC,IAAiB,CAACC,GAAYC,MAAmB;AACnD,IAAAL,EAAiBI,GAAI;AAAA,MACjB,IAAIE,EAAS,kBAAkB;AAAA,MAC/B,QAAQ;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,gBAAgB;AAAA,MAAA;AAAA,MAEpB,SAASD;AAAA,MACT,WAAWE,EAAA,EAAQ,OAAA;AAAA,MACnB,MAAM;AAAA,MACN,aAAa;AAAA,IAAA,CAChB;AAAA,
|
|
1
|
+
{"version":3,"file":"useChatSend.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/hooks/useChatSend.ts"],"sourcesContent":["import { usGenerativeChatStore } from '../store/generativeChatStore'\nimport { apiPostChat } from '@/services/AiService'\nimport dayjs from 'dayjs'\nimport uniqueId from 'lodash/uniqueId'\nimport type { PostAiChatResponse } from '../types'\n\nconst useChatSend = () => {\n const {\n selectedConversation,\n setSelectedConversation,\n pushChatHistory,\n pushConversation,\n setIsTyping,\n } = usGenerativeChatStore()\n\n const creteMyMessage = (id: string, prompt: string) => {\n pushConversation(id, {\n id: uniqueId('ai-conversation-'),\n sender: {\n id: '1',\n name: 'Angelina Gotelli',\n avatarImageUrl: '/img/avatars/thumb-1.jpg',\n },\n content: prompt,\n timestamp: dayjs().toDate(),\n type: 'regular',\n isMyMessage: true,\n })\n }\n\n const sendMessage = async (\n id: string,\n prompt: string,\n attachments?: File[],\n ) => {\n const resp = await apiPostChat<PostAiChatResponse>({\n prompt,\n attachments,\n })\n pushConversation(id, {\n id: uniqueId('ai-conversation-'),\n sender: {\n id: 'ai',\n name: 'Chat AI',\n avatarImageUrl: '/img/thumbs/ai.jpg',\n },\n content: resp.choices[0].message.content || '',\n timestamp: dayjs().toDate(),\n type: 'regular',\n isMyMessage: false,\n fresh: true,\n })\n setIsTyping(false)\n }\n\n const createConversation = async (\n id: string,\n prompt: string,\n attachments?: File[],\n ) => {\n setSelectedConversation(id)\n await sendMessage(id, prompt, attachments)\n }\n\n const handleSend = async (prompt: string, attachments?: File[]) => {\n setIsTyping(true)\n if (selectedConversation) {\n creteMyMessage(selectedConversation, prompt)\n await sendMessage(selectedConversation, prompt)\n } else {\n const newId = uniqueId('ai-chat-')\n pushChatHistory({\n id: newId,\n title: prompt,\n lastConversation: '',\n createdTime: dayjs().unix(),\n updatedTime: dayjs().unix(),\n enable: false,\n })\n creteMyMessage(newId, prompt)\n await createConversation(newId, prompt, attachments)\n }\n }\n\n return {\n handleSend,\n }\n}\n\nexport default useChatSend\n"],"names":["useChatSend","selectedConversation","setSelectedConversation","pushChatHistory","pushConversation","setIsTyping","usGenerativeChatStore","creteMyMessage","id","prompt","uniqueId","dayjs","sendMessage","attachments","resp","apiPostChat","createConversation","newId"],"mappings":";;;;AAMA,MAAMA,IAAc,MAAM;AACtB,QAAM;AAAA,IACF,sBAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,aAAAC;AAAA,EAAA,IACAC,EAAA,GAEEC,IAAiB,CAACC,GAAYC,MAAmB;AACnD,IAAAL,EAAiBI,GAAI;AAAA,MACjB,IAAIE,EAAS,kBAAkB;AAAA,MAC/B,QAAQ;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,gBAAgB;AAAA,MAAA;AAAA,MAEpB,SAASD;AAAA,MACT,WAAWE,EAAA,EAAQ,OAAA;AAAA,MACnB,MAAM;AAAA,MACN,aAAa;AAAA,IAAA,CAChB;AAAA,EACL,GAEMC,IAAc,OAChBJ,GACAC,GACAI,MACC;AACD,UAAMC,IAAO,MAAMC,EAAgC;AAAA,MAC/C,QAAAN;AAAA,MACA,aAAAI;AAAA,IAAA,CACH;AACD,IAAAT,EAAiBI,GAAI;AAAA,MACjB,IAAIE,EAAS,kBAAkB;AAAA,MAC/B,QAAQ;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,gBAAgB;AAAA,MAAA;AAAA,MAEpB,SAASI,EAAK,QAAQ,CAAC,EAAE,QAAQ,WAAW;AAAA,MAC5C,WAAWH,EAAA,EAAQ,OAAA;AAAA,MACnB,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IAAA,CACV,GACDN,EAAY,EAAK;AAAA,EACrB,GAEMW,IAAqB,OACvBR,GACAC,GACAI,MACC;AACD,IAAAX,EAAwBM,CAAE,GAC1B,MAAMI,EAAYJ,GAAIC,GAAQI,CAAW;AAAA,EAC7C;AAsBA,SAAO;AAAA,IACH,YArBe,OAAOJ,GAAgBI,MAAyB;AAE/D,UADAR,EAAY,EAAI,GACZJ;AACA,QAAAM,EAAeN,GAAsBQ,CAAM,GAC3C,MAAMG,EAAYX,GAAsBQ,CAAM;AAAA,WAC3C;AACH,cAAMQ,IAAQP,EAAS,UAAU;AACjC,QAAAP,EAAgB;AAAA,UACZ,IAAIc;AAAA,UACJ,OAAOR;AAAA,UACP,kBAAkB;AAAA,UAClB,aAAaE,EAAA,EAAQ,KAAA;AAAA,UACrB,aAAaA,EAAA,EAAQ,KAAA;AAAA,UACrB,QAAQ;AAAA,QAAA,CACX,GACDJ,EAAeU,GAAOR,CAAM,GAC5B,MAAMO,EAAmBC,GAAOR,GAAQI,CAAW;AAAA,MACvD;AAAA,IACJ;AAAA,EAGI;AAER;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generativeChatStore.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/store/generativeChatStore.ts"],"sourcesContent":["import { create } from 'zustand'\nimport type { ChatHistories, ChatHistory, Conversation } from '../types'\n\ntype RenameDialog = {\n id: string\n title: string\n open: boolean\n}\n\nexport type GenerativeChatState = {\n selectedConversation: string\n selectedConversationRecord: string[]\n chatHistory: ChatHistories\n renameDialog: RenameDialog\n isTyping: boolean\n}\n\ntype GenerativeChatAction = {\n setSelectedConversation: (payload: string) => void\n setSelectedConversationRecord: (payload: string) => void\n setChatHistory: (payload: ChatHistories) => void\n setChatHistoryName: (payload: { id: string; title: string }) => void\n setRenameDialog: (payload: RenameDialog) => void\n setIsTyping: (payload: boolean) => void\n pushChatHistory: (payload: ChatHistory) => void\n pushConversation: (id: string, conversation: Conversation) => void\n disabledChatFresh: (id: string) => void\n}\n\nconst initialState: GenerativeChatState = {\n selectedConversation: '',\n selectedConversationRecord: [],\n chatHistory: [],\n renameDialog: {\n id: '',\n title: '',\n open: false,\n },\n isTyping: false,\n}\n\nexport const usGenerativeChatStore = create<\n GenerativeChatState & GenerativeChatAction\n>((set, get) => ({\n ...initialState,\n setSelectedConversation: (payload) =>\n set(() => ({ selectedConversation: payload })),\n setChatHistory: (payload) => set(() => ({ chatHistory: payload })),\n setChatHistoryName: (payload) =>\n set(() => {\n const chatHistory = get().chatHistory.map((chat) => {\n if (chat.id === payload.id) {\n chat.title = payload.title\n }\n return chat\n })\n return { chatHistory }\n }),\n setRenameDialog: (payload) => set(() => ({ renameDialog: payload })),\n setSelectedConversationRecord: (payload) =>\n set(() => {\n let record = get().selectedConversationRecord\n\n if (record.includes(payload)) {\n record = record.filter((item) => item !== payload)\n } else {\n record.push(payload)\n }\n\n return { selectedConversationRecord: record }\n }),\n pushChatHistory: (payload) =>\n set(() => ({ chatHistory: [...[payload], ...get().chatHistory] })),\n pushConversation: (id, conversation) =>\n set(() => {\n const chatHistory = get().chatHistory.map((chat) => {\n if (chat.id === id) {\n if (!chat.conversation) {\n chat.conversation = []\n }\n chat.conversation?.push(conversation)\n }\n return chat\n })\n return { chatHistory }\n }),\n setIsTyping: (payload) => set(() => ({ isTyping: payload })),\n disabledChatFresh: () =>\n set(() => {\n const chatHistory = get().chatHistory.map((chat) => {\n if (chat.id === get().selectedConversation) {\n chat.conversation = chat.conversation?.map(\n (conversation) => {\n if (conversation.fresh) {\n conversation.fresh = false\n }\n return conversation\n },\n )\n }\n return chat\n })\n return { chatHistory }\n }),\n}))\n"],"names":["initialState","usGenerativeChatStore","create","set","get","payload","chat","record","item","id","conversation","_a"],"mappings":";AA6BA,MAAMA,IAAoC;AAAA,EACtC,sBAAsB;AAAA,EACtB,4BAA4B,CAAA;AAAA,EAC5B,aAAa,CAAA;AAAA,EACb,cAAc;AAAA,IACV,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,EAAA;AAAA,EAEV,UAAU;AACd,GAEaC,IAAwBC,EAEnC,CAACC,GAAKC,OAAS;AAAA,EACb,GAAGJ;AAAA,EACH,yBAAyB,CAACK,MACtBF,EAAI,OAAO,EAAE,sBAAsBE,IAAU;AAAA,EACjD,gBAAgB,CAACA,MAAYF,EAAI,OAAO,EAAE,aAAaE,IAAU;AAAA,EACjE,oBAAoB,CAACA,MACjBF,EAAI,OAOO,EAAE,aANWC,EAAA,EAAM,YAAY,IAAI,CAACE,OACnCA,EAAK,OAAOD,EAAQ,OACpBC,EAAK,QAAQD,EAAQ,QAElBC,EACV,EACQ,EACZ;AAAA,EACL,iBAAiB,CAACD,MAAYF,EAAI,OAAO,EAAE,cAAcE,IAAU;AAAA,EACnE,+BAA+B,CAACA,MAC5BF,EAAI,MAAM;AACN,QAAII,IAASH,IAAM;AAEnB,WAAIG,EAAO,SAASF,CAAO,IACvBE,IAASA,EAAO,OAAO,CAACC,MAASA,MAASH,CAAO,IAEjDE,EAAO,KAAKF,CAAO,GAGhB,EAAE,4BAA4BE,EAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"generativeChatStore.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/store/generativeChatStore.ts"],"sourcesContent":["import { create } from 'zustand'\nimport type { ChatHistories, ChatHistory, Conversation } from '../types'\n\ntype RenameDialog = {\n id: string\n title: string\n open: boolean\n}\n\nexport type GenerativeChatState = {\n selectedConversation: string\n selectedConversationRecord: string[]\n chatHistory: ChatHistories\n renameDialog: RenameDialog\n isTyping: boolean\n}\n\ntype GenerativeChatAction = {\n setSelectedConversation: (payload: string) => void\n setSelectedConversationRecord: (payload: string) => void\n setChatHistory: (payload: ChatHistories) => void\n setChatHistoryName: (payload: { id: string; title: string }) => void\n setRenameDialog: (payload: RenameDialog) => void\n setIsTyping: (payload: boolean) => void\n pushChatHistory: (payload: ChatHistory) => void\n pushConversation: (id: string, conversation: Conversation) => void\n disabledChatFresh: (id: string) => void\n}\n\nconst initialState: GenerativeChatState = {\n selectedConversation: '',\n selectedConversationRecord: [],\n chatHistory: [],\n renameDialog: {\n id: '',\n title: '',\n open: false,\n },\n isTyping: false,\n}\n\nexport const usGenerativeChatStore = create<\n GenerativeChatState & GenerativeChatAction\n>((set, get) => ({\n ...initialState,\n setSelectedConversation: (payload) =>\n set(() => ({ selectedConversation: payload })),\n setChatHistory: (payload) => set(() => ({ chatHistory: payload })),\n setChatHistoryName: (payload) =>\n set(() => {\n const chatHistory = get().chatHistory.map((chat) => {\n if (chat.id === payload.id) {\n chat.title = payload.title\n }\n return chat\n })\n return { chatHistory }\n }),\n setRenameDialog: (payload) => set(() => ({ renameDialog: payload })),\n setSelectedConversationRecord: (payload) =>\n set(() => {\n let record = get().selectedConversationRecord\n\n if (record.includes(payload)) {\n record = record.filter((item) => item !== payload)\n } else {\n record.push(payload)\n }\n\n return { selectedConversationRecord: record }\n }),\n pushChatHistory: (payload) =>\n set(() => ({ chatHistory: [...[payload], ...get().chatHistory] })),\n pushConversation: (id, conversation) =>\n set(() => {\n const chatHistory = get().chatHistory.map((chat) => {\n if (chat.id === id) {\n if (!chat.conversation) {\n chat.conversation = []\n }\n chat.conversation?.push(conversation)\n }\n return chat\n })\n return { chatHistory }\n }),\n setIsTyping: (payload) => set(() => ({ isTyping: payload })),\n disabledChatFresh: () =>\n set(() => {\n const chatHistory = get().chatHistory.map((chat) => {\n if (chat.id === get().selectedConversation) {\n chat.conversation = chat.conversation?.map(\n (conversation) => {\n if (conversation.fresh) {\n conversation.fresh = false\n }\n return conversation\n },\n )\n }\n return chat\n })\n return { chatHistory }\n }),\n}))\n"],"names":["initialState","usGenerativeChatStore","create","set","get","payload","chat","record","item","id","conversation","_a"],"mappings":";AA6BA,MAAMA,IAAoC;AAAA,EACtC,sBAAsB;AAAA,EACtB,4BAA4B,CAAA;AAAA,EAC5B,aAAa,CAAA;AAAA,EACb,cAAc;AAAA,IACV,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,EAAA;AAAA,EAEV,UAAU;AACd,GAEaC,IAAwBC,EAEnC,CAACC,GAAKC,OAAS;AAAA,EACb,GAAGJ;AAAA,EACH,yBAAyB,CAACK,MACtBF,EAAI,OAAO,EAAE,sBAAsBE,IAAU;AAAA,EACjD,gBAAgB,CAACA,MAAYF,EAAI,OAAO,EAAE,aAAaE,IAAU;AAAA,EACjE,oBAAoB,CAACA,MACjBF,EAAI,OAOO,EAAE,aANWC,EAAA,EAAM,YAAY,IAAI,CAACE,OACnCA,EAAK,OAAOD,EAAQ,OACpBC,EAAK,QAAQD,EAAQ,QAElBC,EACV,EACQ,EACZ;AAAA,EACL,iBAAiB,CAACD,MAAYF,EAAI,OAAO,EAAE,cAAcE,IAAU;AAAA,EACnE,+BAA+B,CAACA,MAC5BF,EAAI,MAAM;AACN,QAAII,IAASH,IAAM;AAEnB,WAAIG,EAAO,SAASF,CAAO,IACvBE,IAASA,EAAO,OAAO,CAACC,MAASA,MAASH,CAAO,IAEjDE,EAAO,KAAKF,CAAO,GAGhB,EAAE,4BAA4BE,EAAA;AAAA,EACzC,CAAC;AAAA,EACL,iBAAiB,CAACF,MACdF,EAAI,OAAO,EAAE,aAAa,CAAKE,GAAU,GAAGD,IAAM,WAAW,IAAI;AAAA,EACrE,kBAAkB,CAACK,GAAIC,MACnBP,EAAI,OAUO,EAAE,aATWC,EAAA,EAAM,YAAY,IAAI,CAACE,MAAS;;AAChD,WAAIA,EAAK,OAAOG,MACPH,EAAK,iBACNA,EAAK,eAAe,CAAA,KAExBK,IAAAL,EAAK,iBAAL,QAAAK,EAAmB,KAAKD,KAErBJ;AAAA,EACX,CAAC,EACQ,EACZ;AAAA,EACL,aAAa,CAACD,MAAYF,EAAI,OAAO,EAAE,UAAUE,IAAU;AAAA,EAC3D,mBAAmB,MACfF,EAAI,OAcO,EAAE,aAbWC,EAAA,EAAM,YAAY,IAAI,CAACE,MAAS;;AAChD,WAAIA,EAAK,OAAOF,EAAA,EAAM,yBAClBE,EAAK,gBAAeK,IAAAL,EAAK,iBAAL,gBAAAK,EAAmB;AAAA,MACnC,CAACD,OACOA,EAAa,UACbA,EAAa,QAAQ,KAElBA;AAAA,QAIZJ;AAAA,EACX,CAAC,EACQ,EACZ;AACT,EAAE;"}
|