@iblai/iblai-js 1.4.17 → 1.4.18
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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import React__default, { useRef, useEffect, useState, useCallback, useLayoutEffect, forwardRef, createElement as createElement$1, useMemo, createContext, useReducer, useImperativeHandle, useContext, useDebugValue, isValidElement, Children, PureComponent, cloneElement, Component } from 'react';
|
|
3
3
|
import { LOCAL_STORAGE_KEYS, TimeTracker, getInitials, useTenantMetadata, isAlphaNumeric32, checkRbacPermission, getTimeAgo, REQUIRED_ACTIONS_FOR_GROUPS, formatRelativeTime as formatRelativeTime$2, ANONYMOUS_USERNAME, combineCSVData, redirectToAuthSpaJoinTenant, redirectToAuthSpa, getAuthSpaJoinUrl } from '@iblai/web-utils';
|
|
4
|
-
import { useTimeTrackingMutation, useGetUserMetadataQuery, useGetUserMetadataEdxQuery, useUpdateUserMetadataMutation, useUpdateUserMetadataEdxMutation, useUploadProfileImageMutation, useResetPasswordMutation, useSelfRetireMutation, useCreateUserInstitutionMutation, useGetUserInstitutionsQuery, useCreateUserEducationMutation, useUpdateUserEducationMutation, useDeleteUserEducationMutation, useGetUserEducationQuery, useCreateUserCompanyMutation, useGetUserCompaniesQuery, useCreateUserExperienceMutation, useUpdateUserExperienceMutation, useDeleteUserExperienceMutation, useGetUserExperienceQuery, useGetUserResumeQuery, useCreateUserResumeMutation, useGetMySubscriptionsQuery, useGetItemSubscriptionQuery, useCancelSubscriptionMutation, useCreateGlobalMemoryMutation, useGetMemsearchStatusQuery, useGetUserMemorySettingsQuery, useUpdateUserMemorySettingsMutation, useGetGlobalMemoriesQuery, useDeleteGlobalMemoryMutation, useInviteUserMutation, usePlatformInvitationsQuery, useCreateCatalogInvitationCourseBulkMutation, useGetCatalogInvitationsCourseQuery, useLazyPlatformUsersQuery, useLazyPlatformUserGroupsQuery, useGetPersonnalizedSearchQuery, useCreateCatalogInvitationProgramBulkMutation, useGetCatalogInvitationsProgramQuery, useGetNotificationsCountQuery, useLazyGetNotificationsQuery, useMarkAllAsReadMutation, useCreateNotificationPreviewMutation, useSendNotificationMutation, useGetMentorsQuery, useGetRbacPoliciesQuery, usePlatformUsersQuery, usePlatformUserGroupsQuery, useUpdateTemplateMutation, useGetTemplateDetailsQuery, useGetTemplatesQuery, useLazyGetTemplateDetailsQuery, useToggleTemplateMutation, useGetTopicsStatsQuery, useGetUsersStatsQuery, useGetSessionStatsQuery, useGetTopicsDetailsStatsQuery, useGetAccessTimeHeatmapQuery, useGetUserDetailsStatsQuery, useGetTranscriptsConversationHeadlineQuery, useGetAverageRatingQuery, useGetFinancialStatsQuery, useGetDetailedFinancialStatsQuery, useGetTranscriptsMessagesDetailsQuery, useGetTranscriptsMessagesQuery, useGetReportDetailQuery, useLazyGetDownloadReportFromURLQuery, useGetReportsQuery, useCreateReportMutation, useGetMentorPublicSettingsQuery, useGetContentAnalyticsQuery, useGetContentAnalyticsDetailsQuery, useGetRevenueQuery, useListPaywallsQuery, useListSubscribersQuery, useGetAuditLogsQuery, useLazyGetCourseMetaDataQuery, useLazyGetCourseCompletionOutlinesQuery, useLazyGetCourseEligibilityQuery, useLazyGetUserEnrolledCoursesQuery, useLazyGetUserAssignedCoursesQuery, useLazyGetUserCredentialsQuery, useLazyGetOverTimeActivityQuery, useLazyGetCatalogSearchQuery, useGetUserEarnedSkillsQuery, useGetUserReportedSkillsQuery, useGetUserDesiredSkillsQuery, useCreateOrUpdateUserReportedSkillMutation, useCreateOrUpdateUserDesiredSkillMutation, useLazyGetPathwayListQuery, useLazyGetUserAssignedPathwaysQuery, useLazyGetUserEnrolledPathwaysQuery, useLazyGetPathwayCompletionQuery, useLazyGetProgramListQuery, useLazyGetProgramCompletionQuery, useLazyGetUserEnrolledProgramsQuery, useLazyGetAssignedProgramsQuery, useLazyGetUserSkillsPointsQuery, useLazyGetUserReportedSkillsQuery, useLazyGetUserDesiredSkillsQuery, useLazyGetUserCatalogPathwaysQuery, useLazyGetPerLearnerInfoQuery, useLazyGetEdxSSOTokenQuery, useCreateCourseEnrollmentMutation, useCreateStripeCheckoutSessionMutation, useLazyGetCourseProgressQuery, useLazyGetCourseCompletionQuery, useUpdateExamAttemptMutation, useStartExamMutation, useLazyGetExamInfoQuery, useCreateCheckoutMutation } from '@iblai/data-layer';
|
|
4
|
+
import { useTimeTrackingMutation, useGetUserMetadataQuery, useGetUserMetadataEdxQuery, useUpdateUserMetadataMutation, useUpdateUserMetadataEdxMutation, useUploadProfileImageMutation, useResetPasswordMutation, useSelfRetireMutation, useCreateUserInstitutionMutation, useGetUserInstitutionsQuery, useCreateUserEducationMutation, useUpdateUserEducationMutation, useDeleteUserEducationMutation, useGetUserEducationQuery, useCreateUserCompanyMutation, useGetUserCompaniesQuery, useCreateUserExperienceMutation, useUpdateUserExperienceMutation, useDeleteUserExperienceMutation, useGetUserExperienceQuery, useGetUserResumeQuery, useCreateUserResumeMutation, useGetMySubscriptionsQuery, useGetItemSubscriptionQuery, useCancelSubscriptionMutation, useCreateGlobalMemoryMutation, useGetMemsearchStatusQuery, useGetUserMemorySettingsQuery, useUpdateUserMemorySettingsMutation, useGetGlobalMemoriesQuery, useDeleteGlobalMemoryMutation, useInviteUserMutation, usePlatformInvitationsQuery, useCreateCatalogInvitationCourseBulkMutation, useGetCatalogInvitationsCourseQuery, useLazyPlatformUsersQuery, useLazyPlatformUserGroupsQuery, useGetPersonnalizedSearchQuery, useCreateCatalogInvitationProgramBulkMutation, useGetCatalogInvitationsProgramQuery, useGetNotificationsCountQuery, useLazyGetNotificationsQuery, useMarkAllAsReadMutation, useCreateNotificationPreviewMutation, useSendNotificationMutation, useGetMentorsQuery, useGetRbacPoliciesQuery, usePlatformUsersQuery, usePlatformUserGroupsQuery, useUpdateTemplateMutation, useGetTemplateDetailsQuery, useGetTemplatesQuery, useLazyGetTemplateDetailsQuery, useToggleTemplateMutation, useGetTopicsStatsQuery, useGetUsersStatsQuery, useGetSessionStatsQuery, useGetTopicsDetailsStatsQuery, useGetAccessTimeHeatmapQuery, useGetUserDetailsStatsQuery, useGetTranscriptsConversationHeadlineQuery, useGetAverageRatingQuery, useGetFinancialStatsQuery, useGetDetailedFinancialStatsQuery, useGetTranscriptsMessagesDetailsQuery, useGetTranscriptsMessagesQuery, useGetReportDetailQuery, useLazyGetDownloadReportFromURLQuery, useGetReportsQuery, useCreateReportMutation, useGetMentorPublicSettingsQuery, useGetContentAnalyticsQuery, useGetContentAnalyticsDetailsQuery, useGetRevenueQuery, useListPaywallsQuery, useListSubscribersQuery, useGetAuditLogsQuery, useLazyGetCourseMetaDataQuery, useLazyGetCourseCompletionOutlinesQuery, useLazyGetCourseEligibilityQuery, useLazyGetUserEnrolledCoursesQuery, useLazyGetUserAssignedCoursesQuery, useLazyGetUserCredentialsQuery, useLazyGetOverTimeActivityQuery, useLazyGetCatalogSearchQuery, useGetUserEarnedSkillsQuery, useGetUserReportedSkillsQuery, useGetUserDesiredSkillsQuery, useCreateOrUpdateUserReportedSkillMutation, useCreateOrUpdateUserDesiredSkillMutation, useLazyGetPathwayListQuery, useLazyGetUserAssignedPathwaysQuery, useLazyGetUserEnrolledPathwaysQuery, useLazyGetPathwayCompletionQuery, useLazyGetProgramListQuery, useLazyGetProgramCompletionQuery, useLazyGetUserEnrolledProgramsQuery, useLazyGetAssignedProgramsQuery, useLazyGetUserSkillsPointsQuery, useLazyGetUserReportedSkillsQuery, useLazyGetUserDesiredSkillsQuery, useLazyGetUserCatalogPathwaysQuery, useLazyGetPerLearnerInfoQuery, useLazyGetEdxSSOTokenQuery, useCreateCourseEnrollmentMutation, useCreateStripeCheckoutSessionMutation, useLazyGetCourseProgressQuery, useLazyGetCourseCompletionQuery, useLazyGetPersonnalizedSearchQuery, useUpdateExamAttemptMutation, useStartExamMutation, useLazyGetExamInfoQuery, useCreateCheckoutMutation } from '@iblai/data-layer';
|
|
5
5
|
import { toast, Toaster as Toaster$1 } from 'sonner';
|
|
6
6
|
import { jsx, Fragment as Fragment$1, jsxs } from 'react/jsx-runtime';
|
|
7
7
|
import * as ReactDOM from 'react-dom';
|
|
@@ -11,6 +11,7 @@ import { NotificationSourceTypeEnum, StateEnum } from '@iblai/iblai-api';
|
|
|
11
11
|
import { useSearchParams, useRouter, usePathname } from 'next/navigation';
|
|
12
12
|
import { skipToken } from '@reduxjs/toolkit/query';
|
|
13
13
|
import Image$4 from 'next/image';
|
|
14
|
+
import ReactPaginate from 'react-paginate';
|
|
14
15
|
|
|
15
16
|
function useIframeMessageHandler({ handlers, allowedOrigins, defaultHandler, }) {
|
|
16
17
|
const handlersRef = useRef(handlers);
|
|
@@ -98897,7 +98898,7 @@ function callOrReturn(value, context = void 0, ...props) {
|
|
|
98897
98898
|
}
|
|
98898
98899
|
|
|
98899
98900
|
// src/utilities/isEmptyObject.ts
|
|
98900
|
-
function isEmptyObject(value = {}) {
|
|
98901
|
+
function isEmptyObject$1(value = {}) {
|
|
98901
98902
|
return Object.keys(value).length === 0 && value.constructor === Object;
|
|
98902
98903
|
}
|
|
98903
98904
|
|
|
@@ -99157,7 +99158,7 @@ function cleanUpSchemaItem(data) {
|
|
|
99157
99158
|
return Object.fromEntries(
|
|
99158
99159
|
// @ts-ignore
|
|
99159
99160
|
Object.entries(data).filter(([key, value]) => {
|
|
99160
|
-
if (key === "attrs" && isEmptyObject(value)) {
|
|
99161
|
+
if (key === "attrs" && isEmptyObject$1(value)) {
|
|
99161
99162
|
return false;
|
|
99162
99163
|
}
|
|
99163
99164
|
return value !== null && value !== void 0;
|
|
@@ -119878,7 +119879,7 @@ function DropdownNav(props) {
|
|
|
119878
119879
|
* @group Components
|
|
119879
119880
|
* @see https://daypicker.dev/guides/custom-components
|
|
119880
119881
|
*/
|
|
119881
|
-
function Footer(props) {
|
|
119882
|
+
function Footer$1(props) {
|
|
119882
119883
|
return React__default.createElement("div", { ...props });
|
|
119883
119884
|
}
|
|
119884
119885
|
|
|
@@ -120120,7 +120121,7 @@ var components$1 = /*#__PURE__*/Object.freeze({
|
|
|
120120
120121
|
DayButton: DayButton,
|
|
120121
120122
|
Dropdown: Dropdown,
|
|
120122
120123
|
DropdownNav: DropdownNav,
|
|
120123
|
-
Footer: Footer,
|
|
120124
|
+
Footer: Footer$1,
|
|
120124
120125
|
Month: Month,
|
|
120125
120126
|
MonthCaption: MonthCaption,
|
|
120126
120127
|
MonthGrid: MonthGrid,
|
|
@@ -189950,6 +189951,19 @@ const CourseOutlineContext = createContext({
|
|
|
189950
189951
|
refetchCourseOutline: () => { },
|
|
189951
189952
|
});
|
|
189952
189953
|
|
|
189954
|
+
const FacetFilterContext = createContext({
|
|
189955
|
+
facetsLoading: false,
|
|
189956
|
+
isError: false,
|
|
189957
|
+
filteredFacets: [],
|
|
189958
|
+
facets: [],
|
|
189959
|
+
handleToggleFacet: () => { },
|
|
189960
|
+
handleFilterFacets: () => { },
|
|
189961
|
+
isFacetTermSelected: () => false,
|
|
189962
|
+
handleSelectFacets: () => { },
|
|
189963
|
+
filterDrawerOpen: false,
|
|
189964
|
+
setFilterDrawerOpen: () => { },
|
|
189965
|
+
});
|
|
189966
|
+
|
|
189953
189967
|
/**
|
|
189954
189968
|
* Pure utility helpers for the edX iframe course navigation.
|
|
189955
189969
|
*
|
|
@@ -190621,6 +190635,300 @@ const useCourseDetail = ({ courseId, dmUrl, courseEligibilityEnabled = false, on
|
|
|
190621
190635
|
};
|
|
190622
190636
|
};
|
|
190623
190637
|
|
|
190638
|
+
const isEmptyArray = (value) => !Array.isArray(value) || value.length === 0;
|
|
190639
|
+
const isEmptyObject = (value) => !value || typeof value !== 'object' || Object.keys(value).length === 0;
|
|
190640
|
+
/**
|
|
190641
|
+
* Prop-driven port of skillsai's `hooks/discover/use-discover.ts`.
|
|
190642
|
+
*
|
|
190643
|
+
* Differences from the skillsai version:
|
|
190644
|
+
* - No `next/navigation`. The single place it was used (clearing `?q=` when
|
|
190645
|
+
* the user unselects the search facet) is delegated to `onNavigate`; if
|
|
190646
|
+
* omitted, we fall back to `window.history.replaceState`.
|
|
190647
|
+
* - No `lodash` / `use-debounce` — replaced with native checks and a small
|
|
190648
|
+
* local debounce to stay dependency-light.
|
|
190649
|
+
* - LMS URL is passed in (`lmsUrl`) instead of read from a `config` object.
|
|
190650
|
+
*/
|
|
190651
|
+
const useDiscover = ({ limit = 12, lmsUrl = '', onNavigate, tenantOverride, usernameOverride, } = {}) => {
|
|
190652
|
+
var _a, _b, _c;
|
|
190653
|
+
const tenant = tenantOverride !== null && tenantOverride !== void 0 ? tenantOverride : getTenant();
|
|
190654
|
+
const username = (_a = usernameOverride !== null && usernameOverride !== void 0 ? usernameOverride : getUserName()) !== null && _a !== void 0 ? _a : '';
|
|
190655
|
+
const { metadata } = useTenantMetadata({ org: tenant });
|
|
190656
|
+
const [getPersonnalizedSearch, { isError }] = useLazyGetPersonnalizedSearchQuery();
|
|
190657
|
+
const [pagination, setPagination] = useState(null);
|
|
190658
|
+
const [facets, setFacets] = useState([]);
|
|
190659
|
+
const [filteredFacets, setFilteredFacets] = useState([]);
|
|
190660
|
+
const [contents, setContents] = useState([]);
|
|
190661
|
+
const [page, setPage] = useState(1);
|
|
190662
|
+
const [facetsLoading, setFacetsLoading] = useState(false);
|
|
190663
|
+
const [contentsLoading, setContentsLoading] = useState(false);
|
|
190664
|
+
const [selectedFacets, setSelectedFacets] = useState({
|
|
190665
|
+
content: ['courses'],
|
|
190666
|
+
});
|
|
190667
|
+
const isFacetTermSelected = useCallback((facetSlug, term) => {
|
|
190668
|
+
var _a;
|
|
190669
|
+
return Boolean((_a = selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets[facetSlug]) === null || _a === void 0 ? void 0 : _a.includes(term));
|
|
190670
|
+
}, [selectedFacets]);
|
|
190671
|
+
const handleSelectFacets = useCallback((facetSlug, term) => {
|
|
190672
|
+
if (facetSlug === 'q') {
|
|
190673
|
+
if (typeof window !== 'undefined') {
|
|
190674
|
+
const url = new URL(window.location.href);
|
|
190675
|
+
url.searchParams.set('q', '');
|
|
190676
|
+
const next = url.pathname + url.search;
|
|
190677
|
+
if (onNavigate) {
|
|
190678
|
+
onNavigate(next);
|
|
190679
|
+
}
|
|
190680
|
+
else {
|
|
190681
|
+
window.history.replaceState({}, '', next);
|
|
190682
|
+
}
|
|
190683
|
+
}
|
|
190684
|
+
}
|
|
190685
|
+
setSelectedFacets((prev) => {
|
|
190686
|
+
if (!prev)
|
|
190687
|
+
return { [facetSlug]: [term] };
|
|
190688
|
+
const current = prev[facetSlug] || [];
|
|
190689
|
+
return {
|
|
190690
|
+
...prev,
|
|
190691
|
+
[facetSlug]: current.includes(term)
|
|
190692
|
+
? current.filter((t) => t !== term)
|
|
190693
|
+
: [...current, term],
|
|
190694
|
+
};
|
|
190695
|
+
});
|
|
190696
|
+
setPage(1);
|
|
190697
|
+
}, [onNavigate]);
|
|
190698
|
+
const handleFormatFacets = (allFacets) => {
|
|
190699
|
+
try {
|
|
190700
|
+
const formatted = [];
|
|
190701
|
+
Object.keys(allFacets).forEach((key) => {
|
|
190702
|
+
const group = allFacets[key];
|
|
190703
|
+
const source = !isEmptyObject(group === null || group === void 0 ? void 0 : group.terms) ? group.terms : group;
|
|
190704
|
+
const terms = Object.keys(source || {})
|
|
190705
|
+
.filter((term) => source[term] > 0)
|
|
190706
|
+
.map((term) => ({ key: term, count: source[term] || 0 }));
|
|
190707
|
+
if (terms.length > 0) {
|
|
190708
|
+
formatted.push({
|
|
190709
|
+
slug: key,
|
|
190710
|
+
label: key.charAt(0).toUpperCase() + key.slice(1),
|
|
190711
|
+
expanded: false,
|
|
190712
|
+
terms,
|
|
190713
|
+
});
|
|
190714
|
+
}
|
|
190715
|
+
});
|
|
190716
|
+
return formatted;
|
|
190717
|
+
}
|
|
190718
|
+
catch (_a) {
|
|
190719
|
+
return [];
|
|
190720
|
+
}
|
|
190721
|
+
};
|
|
190722
|
+
const handleFetchData = useCallback(async (onlyFacets = false) => {
|
|
190723
|
+
var _a, _b, _c, _d, _e;
|
|
190724
|
+
if (onlyFacets) {
|
|
190725
|
+
setFacetsLoading(true);
|
|
190726
|
+
}
|
|
190727
|
+
else {
|
|
190728
|
+
setContentsLoading(true);
|
|
190729
|
+
}
|
|
190730
|
+
try {
|
|
190731
|
+
const includeTenant = !(metadata === null || metadata === void 0 ? void 0 : metadata.skills_include_community_courses);
|
|
190732
|
+
const response = await (onlyFacets
|
|
190733
|
+
? getPersonnalizedSearch([
|
|
190734
|
+
{
|
|
190735
|
+
username,
|
|
190736
|
+
...(includeTenant && { tenant }),
|
|
190737
|
+
returnFacet: true,
|
|
190738
|
+
},
|
|
190739
|
+
], true)
|
|
190740
|
+
: getPersonnalizedSearch([
|
|
190741
|
+
{
|
|
190742
|
+
username,
|
|
190743
|
+
...(includeTenant && { tenant }),
|
|
190744
|
+
limit,
|
|
190745
|
+
offset: (page - 1) * limit,
|
|
190746
|
+
...(!isEmptyArray(selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets.q) && { query: selectedFacets.q[0] }),
|
|
190747
|
+
...(!isEmptyArray(selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets.content) && {
|
|
190748
|
+
content: selectedFacets.content,
|
|
190749
|
+
}),
|
|
190750
|
+
...(!isEmptyArray(selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets.language) && {
|
|
190751
|
+
language: selectedFacets.language,
|
|
190752
|
+
}),
|
|
190753
|
+
...(!isEmptyArray(selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets.level) && { level: selectedFacets.level }),
|
|
190754
|
+
...(!isEmptyArray(selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets.provider) && {
|
|
190755
|
+
provider: selectedFacets.provider,
|
|
190756
|
+
}),
|
|
190757
|
+
...(!isEmptyArray(selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets.topics) && {
|
|
190758
|
+
topics: selectedFacets.topics,
|
|
190759
|
+
}),
|
|
190760
|
+
...(!isEmptyArray(selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets.tags) && { tags: selectedFacets.tags }),
|
|
190761
|
+
...(!isEmptyArray(selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets.promotion) && {
|
|
190762
|
+
promotion: selectedFacets.promotion,
|
|
190763
|
+
}),
|
|
190764
|
+
...(!isEmptyArray(selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets['course duration']) && {
|
|
190765
|
+
duration: selectedFacets['course duration'],
|
|
190766
|
+
}),
|
|
190767
|
+
...(!isEmptyArray(selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets.certificate) && {
|
|
190768
|
+
certificate: selectedFacets.certificate,
|
|
190769
|
+
}),
|
|
190770
|
+
...(!isEmptyArray(selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets.price) && {
|
|
190771
|
+
price: selectedFacets.price.at(-1),
|
|
190772
|
+
}),
|
|
190773
|
+
...(!isEmptyArray(selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets.subject) && {
|
|
190774
|
+
subject: selectedFacets.subject,
|
|
190775
|
+
}),
|
|
190776
|
+
...(!isEmptyArray(selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets.skills) && {
|
|
190777
|
+
skills: selectedFacets.skills,
|
|
190778
|
+
}),
|
|
190779
|
+
},
|
|
190780
|
+
], true));
|
|
190781
|
+
if (isError) {
|
|
190782
|
+
throw new Error('Error fetching data');
|
|
190783
|
+
}
|
|
190784
|
+
if (onlyFacets) {
|
|
190785
|
+
const formatted = handleFormatFacets(((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.facets) || {});
|
|
190786
|
+
setFacets(formatted);
|
|
190787
|
+
setFilteredFacets(formatted);
|
|
190788
|
+
setFacetsLoading(false);
|
|
190789
|
+
}
|
|
190790
|
+
else {
|
|
190791
|
+
setContents(((_b = response === null || response === void 0 ? void 0 : response.data) === null || _b === void 0 ? void 0 : _b.results) || []);
|
|
190792
|
+
setPagination({
|
|
190793
|
+
count: ((_c = response === null || response === void 0 ? void 0 : response.data) === null || _c === void 0 ? void 0 : _c.count) || 0,
|
|
190794
|
+
current_page: ((_d = response === null || response === void 0 ? void 0 : response.data) === null || _d === void 0 ? void 0 : _d.current_page) || 0,
|
|
190795
|
+
total_pages: ((_e = response === null || response === void 0 ? void 0 : response.data) === null || _e === void 0 ? void 0 : _e.total_pages) || 0,
|
|
190796
|
+
});
|
|
190797
|
+
setContentsLoading(false);
|
|
190798
|
+
}
|
|
190799
|
+
}
|
|
190800
|
+
catch (_f) {
|
|
190801
|
+
if (onlyFacets) {
|
|
190802
|
+
setFacets([]);
|
|
190803
|
+
setFilteredFacets([]);
|
|
190804
|
+
setFacetsLoading(false);
|
|
190805
|
+
}
|
|
190806
|
+
else {
|
|
190807
|
+
setContentsLoading(false);
|
|
190808
|
+
}
|
|
190809
|
+
}
|
|
190810
|
+
}, [
|
|
190811
|
+
getPersonnalizedSearch,
|
|
190812
|
+
limit,
|
|
190813
|
+
metadata === null || metadata === void 0 ? void 0 : metadata.skills_include_community_courses,
|
|
190814
|
+
page,
|
|
190815
|
+
selectedFacets,
|
|
190816
|
+
tenant,
|
|
190817
|
+
username,
|
|
190818
|
+
isError,
|
|
190819
|
+
]);
|
|
190820
|
+
const handleToggleFacet = useCallback((slug) => {
|
|
190821
|
+
const next = facets.map((facet) => facet.slug === slug ? { ...facet, expanded: !facet.expanded } : facet);
|
|
190822
|
+
setFacets(next);
|
|
190823
|
+
setFilteredFacets(next);
|
|
190824
|
+
}, [facets]);
|
|
190825
|
+
const handleFormatContents = useCallback(({ type, data }) => {
|
|
190826
|
+
var _a, _b, _c, _d, _e;
|
|
190827
|
+
switch (type) {
|
|
190828
|
+
case 'program':
|
|
190829
|
+
return {
|
|
190830
|
+
...data,
|
|
190831
|
+
title: data === null || data === void 0 ? void 0 : data.name,
|
|
190832
|
+
contentType: type,
|
|
190833
|
+
url: `/programs/${data === null || data === void 0 ? void 0 : data.program_key}?platform=${data === null || data === void 0 ? void 0 : data.platform}`,
|
|
190834
|
+
image: ((_a = data === null || data === void 0 ? void 0 : data.data) === null || _a === void 0 ? void 0 : _a.card_image)
|
|
190835
|
+
? String((_b = data === null || data === void 0 ? void 0 : data.data) === null || _b === void 0 ? void 0 : _b.card_image).startsWith('http')
|
|
190836
|
+
? (_c = data === null || data === void 0 ? void 0 : data.data) === null || _c === void 0 ? void 0 : _c.card_image
|
|
190837
|
+
: `${lmsUrl}${(_d = data === null || data === void 0 ? void 0 : data.data) === null || _d === void 0 ? void 0 : _d.card_image}`
|
|
190838
|
+
: '',
|
|
190839
|
+
id: data === null || data === void 0 ? void 0 : data.program_key,
|
|
190840
|
+
};
|
|
190841
|
+
case 'pathway':
|
|
190842
|
+
return {
|
|
190843
|
+
...data,
|
|
190844
|
+
title: data === null || data === void 0 ? void 0 : data.name,
|
|
190845
|
+
contentType: type,
|
|
190846
|
+
url: `/pathways/${data === null || data === void 0 ? void 0 : data.pathway_uuid}?platform=${encodeURI((data === null || data === void 0 ? void 0 : data.platform) || '')}&user_related=false&pathway_id=${encodeURIComponent((data === null || data === void 0 ? void 0 : data.pathway_id) || '')}`,
|
|
190847
|
+
image: '',
|
|
190848
|
+
id: data === null || data === void 0 ? void 0 : data.pathway_uuid,
|
|
190849
|
+
};
|
|
190850
|
+
default: {
|
|
190851
|
+
return {
|
|
190852
|
+
...data,
|
|
190853
|
+
title: data === null || data === void 0 ? void 0 : data.name,
|
|
190854
|
+
contentType: type,
|
|
190855
|
+
url: `/courses/${data === null || data === void 0 ? void 0 : data.course_id}`,
|
|
190856
|
+
image: `${lmsUrl}${((_e = data === null || data === void 0 ? void 0 : data.edx_data) === null || _e === void 0 ? void 0 : _e.course_image_asset_path) || ''}`,
|
|
190857
|
+
id: data === null || data === void 0 ? void 0 : data.course_id,
|
|
190858
|
+
};
|
|
190859
|
+
}
|
|
190860
|
+
}
|
|
190861
|
+
}, [lmsUrl]);
|
|
190862
|
+
const handleFilterFacets = useCallback((facetSlug, searchTerm) => {
|
|
190863
|
+
try {
|
|
190864
|
+
if (!searchTerm) {
|
|
190865
|
+
throw new Error();
|
|
190866
|
+
}
|
|
190867
|
+
const target = facets.find((f) => f.slug === facetSlug);
|
|
190868
|
+
const matches = target === null || target === void 0 ? void 0 : target.terms.filter((t) => String(t.key).toLowerCase().includes(String(searchTerm).toLowerCase()));
|
|
190869
|
+
if (!matches || matches.length === 0) {
|
|
190870
|
+
throw new Error();
|
|
190871
|
+
}
|
|
190872
|
+
setFilteredFacets(facets.map((facet) => facet.slug === facetSlug ? { ...facet, terms: [...matches] } : facet));
|
|
190873
|
+
}
|
|
190874
|
+
catch (_a) {
|
|
190875
|
+
setFilteredFacets(facets);
|
|
190876
|
+
}
|
|
190877
|
+
}, [facets]);
|
|
190878
|
+
// Minimal local debounce — replaces `use-debounce` without a new dep.
|
|
190879
|
+
const debounceRef = useRef(null);
|
|
190880
|
+
const handleFetchSearchContents = useCallback(() => {
|
|
190881
|
+
if (debounceRef.current)
|
|
190882
|
+
clearTimeout(debounceRef.current);
|
|
190883
|
+
debounceRef.current = setTimeout(() => {
|
|
190884
|
+
void handleFetchData();
|
|
190885
|
+
}, 500);
|
|
190886
|
+
}, [handleFetchData]);
|
|
190887
|
+
useEffect(() => {
|
|
190888
|
+
void handleFetchData(true);
|
|
190889
|
+
}, []);
|
|
190890
|
+
useEffect(() => {
|
|
190891
|
+
handleFetchSearchContents();
|
|
190892
|
+
return () => {
|
|
190893
|
+
if (debounceRef.current)
|
|
190894
|
+
clearTimeout(debounceRef.current);
|
|
190895
|
+
};
|
|
190896
|
+
}, [(_b = selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets.q) === null || _b === void 0 ? void 0 : _b.length, (_c = selectedFacets === null || selectedFacets === void 0 ? void 0 : selectedFacets.content) === null || _c === void 0 ? void 0 : _c.length, page, handleFetchSearchContents]);
|
|
190897
|
+
return useMemo(() => ({
|
|
190898
|
+
contents,
|
|
190899
|
+
facets,
|
|
190900
|
+
filteredFacets,
|
|
190901
|
+
contentsLoading,
|
|
190902
|
+
facetsLoading,
|
|
190903
|
+
isError,
|
|
190904
|
+
handleToggleFacet,
|
|
190905
|
+
handleSelectFacets,
|
|
190906
|
+
selectedFacets,
|
|
190907
|
+
isFacetTermSelected,
|
|
190908
|
+
handleFormatContents,
|
|
190909
|
+
pagination,
|
|
190910
|
+
page,
|
|
190911
|
+
setPage,
|
|
190912
|
+
handleFilterFacets,
|
|
190913
|
+
setSelectedFacets,
|
|
190914
|
+
}), [
|
|
190915
|
+
contents,
|
|
190916
|
+
facets,
|
|
190917
|
+
filteredFacets,
|
|
190918
|
+
contentsLoading,
|
|
190919
|
+
facetsLoading,
|
|
190920
|
+
isError,
|
|
190921
|
+
handleToggleFacet,
|
|
190922
|
+
handleSelectFacets,
|
|
190923
|
+
selectedFacets,
|
|
190924
|
+
isFacetTermSelected,
|
|
190925
|
+
handleFormatContents,
|
|
190926
|
+
pagination,
|
|
190927
|
+
page,
|
|
190928
|
+
handleFilterFacets,
|
|
190929
|
+
]);
|
|
190930
|
+
};
|
|
190931
|
+
|
|
190624
190932
|
/**
|
|
190625
190933
|
* Hierarchical course outline (chapters → lessons → sublessons) with
|
|
190626
190934
|
* completion progress indicators and collapsible tree UI.
|
|
@@ -190894,6 +191202,93 @@ const CourseContentLoading = () => {
|
|
|
190894
191202
|
return (jsxs("div", { className: "flex min-h-screen flex-col", children: [jsx("div", { className: "h-16 flex-shrink-0 border-b border-gray-200 bg-white md:h-20" }), jsxs("div", { className: "flex flex-1 flex-col md:flex-row", children: [jsxs("div", { className: "w-full border-r border-gray-200 md:w-72", children: [jsx("div", { className: "border-b border-gray-200 p-4", children: jsx(Skeleton, { className: "h-6 w-48" }) }), jsx("div", { className: "space-y-4 p-4", children: Array.from({ length: 6 }, (_v, i) => (jsxs("div", { className: "space-y-2", children: [jsx(Skeleton, { className: "h-5 w-full" }), i === 0 && (jsxs("div", { className: "space-y-2 pl-4", children: [jsx(Skeleton, { className: "h-4 w-5/6" }), jsx(Skeleton, { className: "h-4 w-4/6" })] }))] }, i))) })] }), jsxs("div", { className: "flex flex-1 flex-col", children: [jsxs("div", { className: "border-b border-gray-200", children: [jsx("div", { className: "flex p-4", children: Array.from({ length: 5 }, (_v, i) => (jsx(Skeleton, { className: "mx-2 h-4 w-16" }, i))) }), jsxs("div", { className: "flex items-center justify-between bg-gray-50 p-4", children: [jsxs("div", { className: "flex items-center", children: [jsx(Skeleton, { className: "mr-2 h-3 w-24" }), jsx(Skeleton, { className: "mx-1 h-3 w-3" }), jsx(Skeleton, { className: "mr-2 h-3 w-32" }), jsx(Skeleton, { className: "mx-1 h-3 w-3" }), jsx(Skeleton, { className: "h-3 w-16" })] }), jsxs("div", { className: "flex items-center", children: [jsx(Skeleton, { className: "mr-4 h-3 w-16" }), jsx(Skeleton, { className: "h-3 w-16" })] })] })] }), jsx("div", { className: "h-full bg-amber-50 p-6", children: jsxs("div", { className: "mx-auto max-w-4xl", children: [jsx(Skeleton, { className: "mb-4 h-8 w-64" }), jsx(Skeleton, { className: "mb-2 h-4 w-full" }), jsx(Skeleton, { className: "mb-6 h-4 w-5/6" }), jsx("div", { className: "mb-6 aspect-video rounded-md bg-gray-200" }), jsxs("div", { className: "mb-6 rounded-md border border-gray-200 bg-white p-4", children: [jsx(Skeleton, { className: "mb-2 h-5 w-40" }), jsx(Skeleton, { className: "mb-2 h-4 w-full" }), jsx(Skeleton, { className: "mb-2 h-4 w-full" }), jsx(Skeleton, { className: "h-4 w-3/4" })] }), jsxs("div", { className: "flex items-center justify-between", children: [jsx(Skeleton, { className: "h-10 w-32" }), jsx(Skeleton, { className: "h-10 w-32" })] })] }) })] })] })] }));
|
|
190895
191203
|
};
|
|
190896
191204
|
|
|
191205
|
+
const SkeletonDiscoverFilterBox = () => {
|
|
191206
|
+
return (jsxs("div", { className: "mb-2 flex items-center justify-between", children: [jsx("div", { className: "h-4 w-20 animate-pulse rounded bg-gray-200" }), jsx("div", { className: "h-4 w-4 animate-pulse rounded bg-gray-200" })] }));
|
|
191207
|
+
};
|
|
191208
|
+
|
|
191209
|
+
/**
|
|
191210
|
+
* Renders the full list of discoverable facet groups (content type, language,
|
|
191211
|
+
* level, etc.) with expand/collapse and per-term search. Reads all state from
|
|
191212
|
+
* `FacetFilterContext`; pair it with `useDiscover` or your own provider.
|
|
191213
|
+
*/
|
|
191214
|
+
const DiscoverFacetsFilter = () => {
|
|
191215
|
+
const { facetsLoading, isError, facets, handleToggleFacet, handleFilterFacets, isFacetTermSelected, handleSelectFacets, } = useContext(FacetFilterContext);
|
|
191216
|
+
if (facetsLoading) {
|
|
191217
|
+
return (jsx("div", { className: "mb-4", children: jsx(SkeletonMultiplier, { multiplier: 10, Skeleton: SkeletonDiscoverFilterBox }) }));
|
|
191218
|
+
}
|
|
191219
|
+
if (isError || (!isError && facets.length === 0)) {
|
|
191220
|
+
return jsx(DefaultEmptyBox, { message: "No content filters found." });
|
|
191221
|
+
}
|
|
191222
|
+
return (jsx(Fragment$1, { children: facets.map((facet, index) => (jsxs("div", { className: "mb-4", "data-testid": "facet-filter", children: [jsxs("div", { className: "mb-2 flex cursor-pointer items-center justify-between", onClick: () => handleToggleFacet(facet === null || facet === void 0 ? void 0 : facet.slug), children: [jsx("h4", { className: "text-sm font-medium text-gray-700 capitalize", children: facet === null || facet === void 0 ? void 0 : facet.label }), (facet === null || facet === void 0 ? void 0 : facet.expanded) ? (jsx(ChevronUp, { className: "h-4 w-4 text-gray-500" })) : (jsx(ChevronDown, { className: "h-4 w-4 text-gray-500" }))] }), (facet === null || facet === void 0 ? void 0 : facet.expanded) && (jsxs("div", { className: "space-y-3", children: [jsx("div", { className: "mb-2 rounded-md bg-gray-100 p-2", children: jsx("input", { type: "text", placeholder: "Filter", className: "w-full border-none bg-transparent text-sm focus:outline-none", onChange: (e) => handleFilterFacets(facet.slug, e.target.value) }) }), facet === null || facet === void 0 ? void 0 : facet.terms.map((term, termIndex) => (jsxs("div", { className: "flex items-center", children: [jsx("input", { type: "checkbox", id: `${facet.slug}-${term.key}`, className: "h-4 w-4 rounded border-gray-300 text-amber-500 accent-amber-500 focus:ring-amber-500", checked: isFacetTermSelected(facet.slug, term.key) || false, onChange: () => handleSelectFacets(facet.slug, term.key) }), jsxs("label", { htmlFor: `${facet.slug}-${term.key}`, className: "ml-2 text-sm text-gray-700 capitalize", children: [term.key, " (", term.count, ")"] })] }, `${facet.slug}-${term.key}-${termIndex}`)))] }))] }, index))) }));
|
|
191223
|
+
};
|
|
191224
|
+
|
|
191225
|
+
/**
|
|
191226
|
+
* Mobile drawer version of `<DiscoverFacetsFilter />`. Reads `filterDrawerOpen`
|
|
191227
|
+
* + `setFilterDrawerOpen` from `FacetFilterContext` and renders the same facet
|
|
191228
|
+
* list inside a left-side Sheet.
|
|
191229
|
+
*/
|
|
191230
|
+
const DiscoverFilterDrawer = () => {
|
|
191231
|
+
const { filterDrawerOpen, setFilterDrawerOpen } = useContext(FacetFilterContext);
|
|
191232
|
+
return (jsx(Sheet, { open: filterDrawerOpen, onOpenChange: setFilterDrawerOpen, children: jsxs(SheetContent, { side: "left", className: "flex w-72 flex-col p-0", children: [jsx(SheetHeader, { className: "flex flex-row items-center justify-between border-b border-gray-200 p-4", children: jsx(SheetTitle, { className: "text-left font-semibold text-gray-800", children: "Explore Content" }) }), jsx("div", { className: "flex-1 overflow-y-auto p-6 pb-16", style: {
|
|
191233
|
+
scrollbarWidth: 'none',
|
|
191234
|
+
msOverflowStyle: 'none',
|
|
191235
|
+
}, children: jsx(DiscoverFacetsFilter, {}) })] }) }));
|
|
191236
|
+
};
|
|
191237
|
+
|
|
191238
|
+
/**
|
|
191239
|
+
* Prop-driven port of skillsai's `DiscoverContentCard`. Renders a single
|
|
191240
|
+
* content tile (course / pathway / program / article) with cover image and
|
|
191241
|
+
* capitalized `contentType` badge. Uses a plain `<img>` so it works outside
|
|
191242
|
+
* Next.js — replace the image element on the caller side if you need
|
|
191243
|
+
* `next/image` optimization.
|
|
191244
|
+
*/
|
|
191245
|
+
const DiscoverContentCard = ({ content, onSelect, className = '', }) => {
|
|
191246
|
+
const [fallbackImage] = useState(() => getRandomCourseImage());
|
|
191247
|
+
return (jsx("div", { onClick: () => onSelect === null || onSelect === void 0 ? void 0 : onSelect(content), className: `block h-full ${className}`, "data-testid": "discover-content-card", children: jsxs("div", { className: "flex h-full w-full cursor-pointer flex-col overflow-hidden rounded-md border border-gray-200 bg-white shadow-sm transition-transform duration-500 ease-in-out hover:scale-105", children: [jsxs("div", { className: "relative aspect-video w-full overflow-hidden", children: [jsx("img", { src: content.image || fallbackImage, alt: content.title, className: "absolute inset-0 h-full w-full object-cover", onError: (e) => {
|
|
191248
|
+
e.currentTarget.src = fallbackImage;
|
|
191249
|
+
} }), jsx("div", { className: "absolute bottom-2 left-2 rounded-sm bg-amber-500 px-2 py-1 text-xs text-white uppercase", children: content.contentType })] }), jsx("div", { className: "flex flex-1 flex-col justify-between p-4 pb-6", children: jsx("div", { children: jsx("h3", { className: "line-clamp-2 h-10 text-xs font-medium text-gray-900 sm:text-sm", children: content.title }) }) })] }) }));
|
|
191250
|
+
};
|
|
191251
|
+
|
|
191252
|
+
const defaultRenderLink = (props) => (
|
|
191253
|
+
// eslint-disable-next-line jsx-a11y/anchor-has-content
|
|
191254
|
+
jsx("a", { target: "_blank", rel: "noreferrer", ...props }));
|
|
191255
|
+
/**
|
|
191256
|
+
* Prop-driven port of skillsai's `components/footer.tsx`. The original read
|
|
191257
|
+
* chat state + tenant metadata + config internally; callers now pass those
|
|
191258
|
+
* pre-resolved so this component stays framework-agnostic.
|
|
191259
|
+
*/
|
|
191260
|
+
const Footer = ({ menus = [], copyright, chatOpen = false, renderLink = defaultRenderLink, className = '', }) => {
|
|
191261
|
+
return (jsxs("footer", { className: `${chatOpen ? 'hidden sm:flex' : 'flex'} fixed bottom-0 left-0 z-40 items-center justify-between border-t border-gray-200 bg-white px-6 py-3 text-sm text-gray-600 transition-all duration-300 ${chatOpen ? 'w-[calc(100%-var(--chat-width))]' : 'w-full'} ${className}`, children: [jsx("div", { className: "flex space-x-6", children: menus.map((menu, index) => {
|
|
191262
|
+
const linkElement = renderLink({
|
|
191263
|
+
href: menu.link,
|
|
191264
|
+
className: 'transition-colors hover:text-amber-500',
|
|
191265
|
+
children: menu.label,
|
|
191266
|
+
});
|
|
191267
|
+
return cloneElement(linkElement, { key: `footer-menu-${index}` });
|
|
191268
|
+
}) }), copyright && jsx("div", { children: copyright })] }));
|
|
191269
|
+
};
|
|
191270
|
+
|
|
191271
|
+
/**
|
|
191272
|
+
* Wrapper around `react-paginate` that fixes an accessibility issue: the
|
|
191273
|
+
* library renders `<ul role="navigation">`, which is invalid — navigation
|
|
191274
|
+
* landmarks belong on a `<nav>`. We wrap in a `<nav aria-label="Pagination">`
|
|
191275
|
+
* and rewrite the inner `<ul>` role to `list`.
|
|
191276
|
+
*
|
|
191277
|
+
* `react-paginate` is declared as an optional peer dependency; consumers must
|
|
191278
|
+
* install it themselves.
|
|
191279
|
+
*/
|
|
191280
|
+
const AccessiblePaginate = (props) => {
|
|
191281
|
+
const containerRef = useRef(null);
|
|
191282
|
+
useEffect(() => {
|
|
191283
|
+
var _a;
|
|
191284
|
+
const ul = (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('ul');
|
|
191285
|
+
if (ul) {
|
|
191286
|
+
ul.setAttribute('role', 'list');
|
|
191287
|
+
}
|
|
191288
|
+
});
|
|
191289
|
+
return (jsx("nav", { "aria-label": "Pagination", children: jsx("div", { ref: containerRef, children: jsx(ReactPaginate, { ...props }) }) }));
|
|
191290
|
+
};
|
|
191291
|
+
|
|
190897
191292
|
/**
|
|
190898
191293
|
* LoginButton Component
|
|
190899
191294
|
*
|
|
@@ -192551,5 +192946,5 @@ var event = /*#__PURE__*/Object.freeze({
|
|
|
192551
192946
|
listen: listen
|
|
192552
192947
|
});
|
|
192553
192948
|
|
|
192554
|
-
export { ACCESS_COURSE_LABEL, AccessTimeHeatmap, AddSkillDialog, AlertsTab, AnalyticsAuditLogStats, AnalyticsCourseDetail, AnalyticsCourses, AnalyticsFinancialStats, AnalyticsLayout, AnalyticsMonetizationStats, AnalyticsOverview, AnalyticsProgramDetail, AnalyticsPrograms, AnalyticsReportDownload, AnalyticsReports, AnalyticsSettingsProvider, AnalyticsTopicsStats, AnalyticsTranscriptsStats, AnalyticsUsersStats, BUY_NOW_LABEL, ChartCardWrapper, ChartFiltersProvider, ChatContext, ChatProvider, CompanyDialog, ConnectorManagementDialog, CopyButtonIcon, CourseAccessGuard, CourseCardSkeleton, CourseContentLoading, CourseOutline, CourseOutlineContext, CourseOutlineDrawer, CreateWorkflowModal, CredentialBox, CredentialMiniBoxSkeleton, CustomDateRangePicker, CustomTooltip, DefaultEmptyBox, DeleteWorkflowModal, ENROLL_NOW_COURSE_STARTING_SOON_LABEL, ENROLL_NOW_LABEL, EditAlertDialog, EducationBox, EducationDialog, EducationTab, EdxIframeContext, EmptyStats, ExperienceBox, ExperienceDialog, ExperienceTab, GroupsFilterDropdown, INVITATION_ONLY_LABEL, InstitutionDialog, InviteUserDialog, InvitedUsersDialog, Loader, LocalLLMTab, LoginButton, Markdown, NotificationDisplay, NotificationDropdown, PaywallModal, Profile, ProfileTimeChart, REQUEST_ACCESS_COURSE_STARTING_SOON_LABEL, REQUEST_ACCESS_LABEL, ResumeBox, ResumeTab, RichTextEditor, SearchableMultiSelect, SendNotificationDialog, SignupButton, SkeletonActivityStatBox, SkeletonAddSkillsLoading, SkeletonCreatePathwaySearchList, SkeletonEducationBox, SkeletonMultiplier, SkeletonPathwayBox, SkeletonProfileInfoCard, SkeletonSkillBox, SkillBox, SkillDetailModal, SkillLeaderboardChart, SkillsBox, Spinner, StatCard, TAURI_COMMANDS, TAURI_EVENTS, TenantSwitcher, TimeFilter, TimeTrackingProvider, TimedExam, ToolDialogs, TopBanner, UserAvatar, Version, WorkflowSidebar, addBookmarksTab, findLastResumeBlock, findSequentialParent, flattenVerticalBlocks, getFirstAvailableUnit, getNextUnitIframe, getOrg, getParentBlockById, getParentsInfosFromSublessonId, getPreviousUnitIframe, getRandomCourseImage, getTenant, getUnitToIframe, getUserId, getUserName, inBrowserPrint, inIframe, initialModelDownloadState, isLocalLLMEnabled, isTauriApp, components as markdownComponents, sanitizeCss, setLocalLLMEnabled, useAnalyticsSettings, useAuditLog, useCatalogSearch, useChartFilters, useChatState, useCourseDetail, useCourseMetadata, useCourses, useEdxIframe, useFinancial, useIframeMessageHandler, useLocalStorage, useModelDownload, useMonetization, useOverview, useProfileActivityStats, useProfileCredentials, useProfilePathways, useProfilePrograms, useProfileSkills, useProfileTimeSpent, usePrograms, useReports, useTauri, useTimeTracking, useTopics, useTranscripts, useUserCourses, useUserMetadata, useUsers };
|
|
192949
|
+
export { ACCESS_COURSE_LABEL, AccessTimeHeatmap, AccessiblePaginate, AddSkillDialog, AlertsTab, AnalyticsAuditLogStats, AnalyticsCourseDetail, AnalyticsCourses, AnalyticsFinancialStats, AnalyticsLayout, AnalyticsMonetizationStats, AnalyticsOverview, AnalyticsProgramDetail, AnalyticsPrograms, AnalyticsReportDownload, AnalyticsReports, AnalyticsSettingsProvider, AnalyticsTopicsStats, AnalyticsTranscriptsStats, AnalyticsUsersStats, BUY_NOW_LABEL, ChartCardWrapper, ChartFiltersProvider, ChatContext, ChatProvider, CompanyDialog, ConnectorManagementDialog, CopyButtonIcon, CourseAccessGuard, CourseCardSkeleton, CourseContentLoading, CourseOutline, CourseOutlineContext, CourseOutlineDrawer, CreateWorkflowModal, CredentialBox, CredentialMiniBoxSkeleton, CustomDateRangePicker, CustomTooltip, DefaultEmptyBox, DeleteWorkflowModal, DiscoverContentCard, DiscoverFacetsFilter, DiscoverFilterDrawer, ENROLL_NOW_COURSE_STARTING_SOON_LABEL, ENROLL_NOW_LABEL, EditAlertDialog, EducationBox, EducationDialog, EducationTab, EdxIframeContext, EmptyStats, ExperienceBox, ExperienceDialog, ExperienceTab, FacetFilterContext, Footer, GroupsFilterDropdown, INVITATION_ONLY_LABEL, InstitutionDialog, InviteUserDialog, InvitedUsersDialog, Loader, LocalLLMTab, LoginButton, Markdown, NotificationDisplay, NotificationDropdown, PaywallModal, Profile, ProfileTimeChart, REQUEST_ACCESS_COURSE_STARTING_SOON_LABEL, REQUEST_ACCESS_LABEL, ResumeBox, ResumeTab, RichTextEditor, SearchableMultiSelect, SendNotificationDialog, SignupButton, SkeletonActivityStatBox, SkeletonAddSkillsLoading, SkeletonCreatePathwaySearchList, SkeletonDiscoverFilterBox, SkeletonEducationBox, SkeletonMultiplier, SkeletonPathwayBox, SkeletonProfileInfoCard, SkeletonSkillBox, SkillBox, SkillDetailModal, SkillLeaderboardChart, SkillsBox, Spinner, StatCard, TAURI_COMMANDS, TAURI_EVENTS, TenantSwitcher, TimeFilter, TimeTrackingProvider, TimedExam, ToolDialogs, TopBanner, UserAvatar, Version, WorkflowSidebar, addBookmarksTab, findLastResumeBlock, findSequentialParent, flattenVerticalBlocks, getFirstAvailableUnit, getNextUnitIframe, getOrg, getParentBlockById, getParentsInfosFromSublessonId, getPreviousUnitIframe, getRandomCourseImage, getTenant, getUnitToIframe, getUserId, getUserName, inBrowserPrint, inIframe, initialModelDownloadState, isLocalLLMEnabled, isTauriApp, components as markdownComponents, sanitizeCss, setLocalLLMEnabled, useAnalyticsSettings, useAuditLog, useCatalogSearch, useChartFilters, useChatState, useCourseDetail, useCourseMetadata, useCourses, useDiscover, useEdxIframe, useFinancial, useIframeMessageHandler, useLocalStorage, useModelDownload, useMonetization, useOverview, useProfileActivityStats, useProfileCredentials, useProfilePathways, useProfilePrograms, useProfileSkills, useProfileTimeSpent, usePrograms, useReports, useTauri, useTimeTracking, useTopics, useTranscripts, useUserCourses, useUserMetadata, useUsers };
|
|
192555
192950
|
//# sourceMappingURL=index.esm.js.map
|