@datalayer/core 1.1.43 → 1.1.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/lib/components/billing/BillingEntitySelect.d.ts +35 -0
  2. package/lib/components/billing/{BillableAccountSelect.js → BillingEntitySelect.js} +39 -41
  3. package/lib/components/billing/index.d.ts +1 -1
  4. package/lib/components/billing/index.js +1 -1
  5. package/lib/components/checkout/StripeCheckout.js +5 -5
  6. package/lib/components/display/VisuallyHidden.d.ts +1 -1
  7. package/lib/components/display/index.d.ts +0 -1
  8. package/lib/components/display/index.js +0 -1
  9. package/lib/components/principal/Principal.js +4 -2
  10. package/lib/components/principal/PrincipalBadge.js +21 -0
  11. package/lib/components/principal/PrincipalDetailsOverlay.js +72 -37
  12. package/lib/components/principal/PrincipalSwitcherMenu.d.ts +3 -3
  13. package/lib/components/principal/PrincipalSwitcherMenu.js +130 -111
  14. package/lib/config/Configuration.d.ts +18 -0
  15. package/lib/hooks/index.d.ts +2 -2
  16. package/lib/hooks/index.js +2 -2
  17. package/lib/hooks/useBillingEntityStore.d.ts +31 -0
  18. package/lib/hooks/useBillingEntityStore.js +53 -0
  19. package/lib/hooks/useCache.d.ts +34 -33
  20. package/lib/hooks/useCache.js +32 -16
  21. package/lib/hooks/useSelectedBillingEntity.d.ts +14 -0
  22. package/lib/hooks/{useSelectedBillableAccount.js → useSelectedBillingEntity.js} +14 -14
  23. package/lib/hooks/useSelectedPrincipal.d.ts +1 -1
  24. package/lib/hooks/useSelectedPrincipal.js +1 -1
  25. package/lib/otel/client/OtelClient.js +2 -3
  26. package/lib/otel/hooks/index.js +6 -6
  27. package/lib/otel/views/OtelLive.js +2 -2
  28. package/lib/state/substates/CoreState.d.ts +11 -0
  29. package/lib/state/substates/CoreState.js +18 -0
  30. package/package.json +4 -4
  31. package/lib/components/billing/BillableAccountSelect.d.ts +0 -35
  32. package/lib/components/display/LiveRelativeTime.d.ts +0 -1
  33. package/lib/components/display/LiveRelativeTime.js +0 -10
  34. package/lib/hooks/useBillableAccountStore.d.ts +0 -31
  35. package/lib/hooks/useBillableAccountStore.js +0 -53
  36. package/lib/hooks/useSelectedBillableAccount.d.ts +0 -14
@@ -265,7 +265,7 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
265
265
  password: string;
266
266
  }, unknown>;
267
267
  useLogout: () => import("@tanstack/react-query").UseMutationResult<any, Error, void, unknown>;
268
- useMe: (token?: string) => import("@tanstack/react-query").UseQueryResult<IUser | null | undefined, Error>;
268
+ useMe: (token?: string) => import("@tanstack/react-query").UseQueryResult<NoInfer<IUser | null | undefined>, Error>;
269
269
  useUpdateMe: () => import("@tanstack/react-query").UseMutationResult<any, Error, {
270
270
  email: string;
271
271
  firstName: string;
@@ -356,11 +356,11 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
356
356
  body: object;
357
357
  token: string;
358
358
  }, unknown>;
359
- useUser: (userId: string) => import("@tanstack/react-query").UseQueryResult<IUser | undefined, Error>;
359
+ useUser: (userId: string) => import("@tanstack/react-query").UseQueryResult<NoInfer<IUser | undefined>, Error>;
360
360
  useUserByHandle: (handle: string) => import("@tanstack/react-query").UseQueryResult<any, Error>;
361
361
  useUserPublicProfileByHandle: (handle: string) => import("@tanstack/react-query").UseQueryResult<any, Error>;
362
- useSearchUsers: (namingPattern: string) => import("@tanstack/react-query").UseQueryResult<IUser[], Error>;
363
- useUsersByUids: (userIds: string[]) => import("@tanstack/react-query").UseQueryResult<IUser[], Error>;
362
+ useSearchUsers: (namingPattern: string) => import("@tanstack/react-query").UseQueryResult<NoInfer<IUser[]>, Error>;
363
+ useUsersByUids: (userIds: string[]) => import("@tanstack/react-query").UseQueryResult<NoInfer<IUser[]>, Error>;
364
364
  useUpdateUserOnboarding: () => import("@tanstack/react-query").UseMutationResult<any, Error, IUserOnboarding, unknown>;
365
365
  useUpdateUserSettings: () => import("@tanstack/react-query").UseMutationResult<any, Error, {
366
366
  userId: string;
@@ -411,11 +411,11 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
411
411
  }, unknown>;
412
412
  useUsages: (scopeOrOptions?: {
413
413
  accountUid?: string;
414
- } | Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">, options?: Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<unknown[], Error>;
415
- useUsagesForUser: (userId: string, options?: Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<unknown[], Error>;
416
- usePlatformUsages: (options?: Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<unknown[], Error>;
417
- useOrganization: (organizationId: string) => import("@tanstack/react-query").UseQueryResult<IOrganization, Error>;
418
- useOrganizationByHandle: (handle: string) => import("@tanstack/react-query").UseQueryResult<IOrganization | null, Error>;
414
+ } | Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">, options?: Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<NoInfer<unknown[]>, Error>;
415
+ useUsagesForUser: (userId: string, options?: Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<NoInfer<unknown[]>, Error>;
416
+ usePlatformUsages: (options?: Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<NoInfer<unknown[]>, Error>;
417
+ useOrganization: (organizationId: string) => import("@tanstack/react-query").UseQueryResult<NoInfer<IOrganization>, Error>;
418
+ useOrganizationByHandle: (handle: string) => import("@tanstack/react-query").UseQueryResult<NoInfer<IOrganization | null>, Error>;
419
419
  useOrganizationPublicProfileByHandle: (handle: string) => import("@tanstack/react-query").UseQueryResult<any, Error>;
420
420
  useUserOrganizations: () => import("@tanstack/react-query").UseQueryResult<any, Error>;
421
421
  useCreateOrganization: () => import("@tanstack/react-query").UseMutationResult<any, Error, Partial<IOrganization>, unknown>;
@@ -442,8 +442,8 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
442
442
  useRefreshUserOrganizations: () => import("@tanstack/react-query").UseMutationResult<any, Error, void, unknown>;
443
443
  useUserOrganizationById: (organizationId: string) => any;
444
444
  useClearCachedOrganizations: (options?: UseMutationOptions<void, Error, void>) => import("@tanstack/react-query").UseMutationResult<void, Error, void, unknown>;
445
- useTeam: (teamId: string, organizationId: string) => import("@tanstack/react-query").UseQueryResult<ITeam, Error>;
446
- useTeamByHandle: (handle: string) => import("@tanstack/react-query").UseQueryResult<ITeam | null, Error>;
445
+ useTeam: (teamId: string, organizationId: string) => import("@tanstack/react-query").UseQueryResult<NoInfer<ITeam>, Error>;
446
+ useTeamByHandle: (handle: string) => import("@tanstack/react-query").UseQueryResult<NoInfer<ITeam | null>, Error>;
447
447
  useTeamsByOrganization: (organizationId: string) => import("@tanstack/react-query").UseQueryResult<any, Error>;
448
448
  useCreateTeam: () => import("@tanstack/react-query").UseMutationResult<any, Error, {
449
449
  team: Partial<ITeam>;
@@ -474,7 +474,7 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
474
474
  }, unknown>;
475
475
  useRefreshTeams: () => import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
476
476
  useClearCachedTeams: (options?: UseMutationOptions<void, Error, void>) => import("@tanstack/react-query").UseMutationResult<void, Error, void, unknown>;
477
- useSchools: () => import("@tanstack/react-query").UseQueryResult<ISchool[], Error>;
477
+ useSchools: () => import("@tanstack/react-query").UseQueryResult<NoInfer<ISchool[]>, Error>;
478
478
  useRefreshSchools: (options?: UseMutationOptions<unknown, Error, void>) => import("@tanstack/react-query").UseMutationResult<unknown, Error, void, unknown>;
479
479
  useSpace: (spaceId: string) => import("@tanstack/react-query").UseQueryResult<any, Error>;
480
480
  useOrganizationSpace: (organizationId: string, spaceId: string) => import("@tanstack/react-query").UseQueryResult<any, Error>;
@@ -720,11 +720,11 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
720
720
  }, unknown>;
721
721
  useRefreshSpaceAssignments: (options?: UseMutationOptions<unknown, Error, string>) => import("@tanstack/react-query").UseMutationResult<unknown, Error, string, unknown>;
722
722
  useDeleteItem: () => import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
723
- useSpaceItems: (spaceId: string) => import("@tanstack/react-query").UseQueryResult<any[], Error>;
724
- useSpaceDefaultItems: (spaceId: string | undefined) => import("@tanstack/react-query").UseQueryResult<{
723
+ useSpaceItems: (spaceId: string) => import("@tanstack/react-query").UseQueryResult<NoInfer<any[]>, Error>;
724
+ useSpaceDefaultItems: (spaceId: string | undefined) => import("@tanstack/react-query").UseQueryResult<NoInfer<{
725
725
  defaultNotebookUid: string | null;
726
726
  defaultDocumentUid: string | null;
727
- }, Error>;
727
+ }>, Error>;
728
728
  useMakeItemPublic: () => import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
729
729
  useMakeItemPrivate: () => import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
730
730
  useSearchPublicItems: () => import("@tanstack/react-query").UseMutationResult<any, Error, {
@@ -749,7 +749,7 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
749
749
  useDatasource: (datasourceId: string, options?: {
750
750
  principalUid?: string;
751
751
  principalKind?: "personal" | "organization" | "team";
752
- }) => import("@tanstack/react-query").UseQueryResult<IDatasource | null | undefined, Error>;
752
+ }) => import("@tanstack/react-query").UseQueryResult<NoInfer<IDatasource | null | undefined>, Error>;
753
753
  useDatasources: (options?: {
754
754
  principalUid?: string;
755
755
  principalKind?: "personal" | "organization" | "team";
@@ -769,7 +769,7 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
769
769
  refetchOnMount?: boolean | "always";
770
770
  staleTime?: number;
771
771
  gcTime?: number;
772
- }) => import("@tanstack/react-query").UseQueryResult<ISecret | null | undefined, Error>;
772
+ }) => import("@tanstack/react-query").UseQueryResult<NoInfer<ISecret | null | undefined>, Error>;
773
773
  useSecrets: (options?: {
774
774
  principalUid?: string;
775
775
  principalKind?: "personal" | "organization" | "team";
@@ -786,12 +786,12 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
786
786
  principalUid?: string;
787
787
  principalKind?: "personal" | "organization" | "team";
788
788
  }) => import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
789
- useToken: (tokenId: string) => import("@tanstack/react-query").UseQueryResult<IIAMToken | null | undefined, Error>;
790
- useTokens: () => import("@tanstack/react-query").UseQueryResult<(IIAMToken | undefined)[], Error>;
789
+ useToken: (tokenId: string) => import("@tanstack/react-query").UseQueryResult<NoInfer<IIAMToken | null | undefined>, Error>;
790
+ useTokens: () => import("@tanstack/react-query").UseQueryResult<NoInfer<(IIAMToken | undefined)[]>, Error>;
791
791
  useCreateToken: () => import("@tanstack/react-query").UseMutationResult<any, Error, Omit<IIAMToken, "id" | "value">, unknown>;
792
792
  useUpdateToken: () => import("@tanstack/react-query").UseMutationResult<any, Error, IIAMToken, unknown>;
793
793
  useDeleteToken: () => import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
794
- useInvite: (token: string) => import("@tanstack/react-query").UseQueryResult<import("..").IInvite | undefined, Error>;
794
+ useInvite: (token: string) => import("@tanstack/react-query").UseQueryResult<NoInfer<import("..").IInvite | undefined>, Error>;
795
795
  useInvitesByUser: (accountId: string) => import("@tanstack/react-query").UseQueryResult<any, Error>;
796
796
  usePutInvite: () => import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
797
797
  useRequestInvite: (options?: UseMutationOptions<unknown, Error, {
@@ -823,8 +823,8 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
823
823
  useClearCachedInvites: (options?: UseMutationOptions<void, Error, void>) => import("@tanstack/react-query").UseMutationResult<void, Error, void, unknown>;
824
824
  useContact: (contactId: string, options?: {
825
825
  enabled?: boolean;
826
- }) => import("@tanstack/react-query").UseQueryResult<IContact | undefined, Error>;
827
- useContactByHandle: (handle: string) => import("@tanstack/react-query").UseQueryResult<IContact | null | undefined, Error>;
826
+ }) => import("@tanstack/react-query").UseQueryResult<NoInfer<IContact | undefined>, Error>;
827
+ useContactByHandle: (handle: string) => import("@tanstack/react-query").UseQueryResult<NoInfer<IContact | null | undefined>, Error>;
828
828
  useSearchContacts: (query: string) => import("@tanstack/react-query").UseQueryResult<any, Error>;
829
829
  useCreateContact: () => import("@tanstack/react-query").UseMutationResult<any, Error, IContact, unknown>;
830
830
  useUpdateContact: () => import("@tanstack/react-query").UseMutationResult<any, Error, {
@@ -862,12 +862,12 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
862
862
  contactId: string;
863
863
  }, unknown>;
864
864
  useRefreshContact: (options?: UseMutationOptions<unknown, Error, string>) => import("@tanstack/react-query").UseMutationResult<unknown, Error, string, unknown>;
865
- useInbounds: (options?: Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<unknown[], Error>;
865
+ useInbounds: (options?: Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<NoInfer<unknown[]>, Error>;
866
866
  useInbound: (id: string, options?: UseQueryOptions<unknown, Error>) => import("@tanstack/react-query").UseQueryResult<unknown, Error>;
867
867
  useInboundByHandle: (handle: string, options?: UseQueryOptions<unknown, Error>) => import("@tanstack/react-query").UseQueryResult<unknown, Error>;
868
868
  useRefreshInbound: (options?: UseMutationOptions<unknown, Error, string>) => import("@tanstack/react-query").UseMutationResult<unknown, Error, string, unknown>;
869
869
  useOutbound: (outboundId: string, options?: Omit<UseQueryOptions<unknown>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<unknown, Error>;
870
- useOutbounds: (options?: Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<unknown[], Error>;
870
+ useOutbounds: (options?: Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<NoInfer<unknown[]>, Error>;
871
871
  useDraftBulkEmailsOutbounds: () => import("@tanstack/react-query").UseMutationResult<any, Error, unknown, unknown>;
872
872
  useTryBulkEmailsOutbounds: () => import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
873
873
  useLaunchBulkEmailsOutbounds: () => import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
@@ -875,6 +875,7 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
875
875
  userId: string;
876
876
  recipient: string;
877
877
  subject: string;
878
+ htmlContent?: string;
878
879
  content: string;
879
880
  }, unknown>;
880
881
  useDeleteOutbound: () => import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
@@ -907,9 +908,9 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
907
908
  }, options?: Omit<UseQueryOptions<any>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<any, Error>;
908
909
  useSubscriptionPlans: (scope?: {
909
910
  accountUid?: string;
910
- }, options?: Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<unknown[], Error>;
911
- useEligibleSubscriptionAccounts: (options?: Omit<UseQueryOptions<any[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<any[], Error>;
912
- useSubscriptionAccountsDetails: (accountUids: string[], options?: Omit<UseQueryOptions<any[]>, "queryKey" | "queryFn" | "enabled">) => import("@tanstack/react-query").UseQueryResult<any[], Error>;
911
+ }, options?: Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<NoInfer<unknown[]>, Error>;
912
+ useEligibleSubscriptionAccounts: (options?: Omit<UseQueryOptions<any[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<NoInfer<any[]>, Error>;
913
+ useSubscriptionAccountsDetails: (accountUids: string[], options?: Omit<UseQueryOptions<any[]>, "queryKey" | "queryFn" | "enabled">) => import("@tanstack/react-query").UseQueryResult<NoInfer<any[]>, Error>;
913
914
  useCancelSubscription: (scope?: {
914
915
  accountUid?: string;
915
916
  }) => import("@tanstack/react-query").UseMutationResult<any, Error, void, unknown>;
@@ -919,7 +920,7 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
919
920
  useUserSubscription: (userId: string | undefined, options?: Omit<UseQueryOptions<any>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<any, Error>;
920
921
  useResetUserSubscription: () => import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
921
922
  useBurnCredit: () => import("@tanstack/react-query").UseMutationResult<any, Error, number, unknown>;
922
- useTopUpPrices: (options?: Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<unknown[], Error>;
923
+ useTopUpPrices: (options?: Omit<UseQueryOptions<unknown[]>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<NoInfer<unknown[]>, Error>;
923
924
  useRequestPlatformSupport: () => import("@tanstack/react-query").UseMutationResult<any, Error, {
924
925
  subject: string;
925
926
  message: string;
@@ -936,20 +937,20 @@ export declare const useCache: ({ loginRoute }?: CacheProps) => {
936
937
  useUserSurveys: (userId: string, options?: Omit<UseQueryOptions<unknown>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<unknown, Error>;
937
938
  useGrowthKPI: (options?: Omit<UseQueryOptions<unknown>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<unknown, Error>;
938
939
  useGrowthContactsKPI: (options?: Omit<UseQueryOptions<unknown>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<unknown, Error>;
939
- useRayClusters: () => import("@tanstack/react-query").UseQueryResult<{
940
+ useRayClusters: () => import("@tanstack/react-query").UseQueryResult<NoInfer<{
940
941
  clusters: any[];
941
942
  namespaces: string[];
942
- }, Error>;
943
+ }>, Error>;
943
944
  useRayCluster: (namespace?: string, clusterName?: string) => import("@tanstack/react-query").UseQueryResult<any, Error>;
944
945
  useCreateRayCluster: () => import("@tanstack/react-query").UseMutationResult<any, Error, Record<string, unknown>, unknown>;
945
946
  useDeleteRayCluster: (namespace?: string) => import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
946
- useRayJobs: (namespace?: string, clusterName?: string) => import("@tanstack/react-query").UseQueryResult<any[], Error>;
947
+ useRayJobs: (namespace?: string, clusterName?: string) => import("@tanstack/react-query").UseQueryResult<NoInfer<any[]>, Error>;
947
948
  useSubmitRayJob: (clusterName: string) => import("@tanstack/react-query").UseMutationResult<any, Error, Record<string, unknown>, unknown>;
948
949
  useDeleteRayJob: (namespace?: string) => import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
949
- useRayJobLogs: (jobName: string, namespace?: string, tailLines?: number, enabled?: boolean) => import("@tanstack/react-query").UseQueryResult<{
950
+ useRayJobLogs: (jobName: string, namespace?: string, tailLines?: number, enabled?: boolean) => import("@tanstack/react-query").UseQueryResult<NoInfer<{
950
951
  logs: string;
951
952
  status: string;
952
- }, Error>;
953
+ }>, Error>;
953
954
  queryKeys: {
954
955
  readonly auth: {
955
956
  readonly me: () => readonly ["auth", "me"];
@@ -420,19 +420,23 @@ export const useCache = ({ loginRoute = '/login' } = {}) => {
420
420
  codeStudent: studentItem.code_student_t ?? studentItem.codeStudent,
421
421
  completed,
422
422
  pass,
423
- nbgrades: studentItem.nbgrades ??
424
- studentItem.grades ??
425
- [],
423
+ nbgrades: studentItem.nbgrades ?? studentItem.grades ?? [],
426
424
  nbgradesTotalPoints: studentItem.nbgrades_total_points_f ??
427
425
  studentItem.nbgradesTotalPoints ??
428
426
  studentItem.total_points_f ??
429
- ((studentItem.item_type_s ?? studentItem.itemType ?? studentItem.type_s ?? studentItem.type) === 'assignment'
427
+ ((studentItem.item_type_s ??
428
+ studentItem.itemType ??
429
+ studentItem.type_s ??
430
+ studentItem.type) === 'assignment'
430
431
  ? 0
431
432
  : undefined),
432
433
  nbgradesTotalScore: studentItem.nbgrades_total_score_f ??
433
434
  studentItem.nbgradesTotalScore ??
434
435
  studentItem.total_score_f ??
435
- ((studentItem.item_type_s ?? studentItem.itemType ?? studentItem.type_s ?? studentItem.type) === 'assignment'
436
+ ((studentItem.item_type_s ??
437
+ studentItem.itemType ??
438
+ studentItem.type_s ??
439
+ studentItem.type) === 'assignment'
436
440
  ? 0
437
441
  : undefined),
438
442
  };
@@ -869,9 +873,7 @@ export const useCache = ({ loginRoute = '/login' } = {}) => {
869
873
  let itemIds = new Array();
870
874
  const rawItemUids = raw_course.item_uids_s;
871
875
  if (Array.isArray(rawItemUids)) {
872
- itemIds = Array.from(new Set(rawItemUids
873
- .map(uid => String(uid || '').trim())
874
- .filter(Boolean)));
876
+ itemIds = Array.from(new Set(rawItemUids.map(uid => String(uid || '').trim()).filter(Boolean)));
875
877
  }
876
878
  else if (typeof rawItemUids === 'string' && rawItemUids !== '()') {
877
879
  itemIds = Array.from(new Set(rawItemUids
@@ -4721,11 +4723,17 @@ export const useCache = ({ loginRoute = '/login' } = {}) => {
4721
4723
  */
4722
4724
  const useSendOutboundEmailToUser = () => {
4723
4725
  return useMutation({
4724
- mutationFn: async ({ userId, recipient, subject, content, }) => {
4726
+ mutationFn: async ({ userId, recipient, subject, htmlContent, content, }) => {
4725
4727
  return requestDatalayer({
4726
4728
  url: `${configuration.growthUrl}/api/growth/v1/outbounds/email`,
4727
4729
  method: 'POST',
4728
- body: { userId, recipient, subject, content },
4730
+ body: {
4731
+ userId,
4732
+ recipient,
4733
+ subject,
4734
+ content,
4735
+ htmlContent: htmlContent || content,
4736
+ },
4729
4737
  });
4730
4738
  },
4731
4739
  });
@@ -4864,9 +4872,9 @@ export const useCache = ({ loginRoute = '/login' } = {}) => {
4864
4872
  return url;
4865
4873
  }
4866
4874
  const separator = url.includes('?') ? '&' : '?';
4867
- const parts = [`billable_account_uid=${encodeURIComponent(accountUid)}`];
4875
+ const parts = [`billing_entity_uid=${encodeURIComponent(accountUid)}`];
4868
4876
  if (accountKind) {
4869
- parts.push(`billable_account_kind=${encodeURIComponent(accountKind)}`);
4877
+ parts.push(`billing_entity_kind=${encodeURIComponent(accountKind)}`);
4870
4878
  }
4871
4879
  return `${url}${separator}${parts.join('&')}`;
4872
4880
  };
@@ -6540,8 +6548,12 @@ export const useCache = ({ loginRoute = '/login' } = {}) => {
6540
6548
  return useMutation({
6541
6549
  mutationFn: async (variables) => {
6542
6550
  const datasetId = typeof variables === 'string' ? variables : variables.datasetId;
6543
- const selectedPrincipalUid = typeof variables === 'string' ? undefined : variables.selectedPrincipalUid;
6544
- const selectedPrincipalKind = typeof variables === 'string' ? undefined : variables.selectedPrincipalKind;
6551
+ const selectedPrincipalUid = typeof variables === 'string'
6552
+ ? undefined
6553
+ : variables.selectedPrincipalUid;
6554
+ const selectedPrincipalKind = typeof variables === 'string'
6555
+ ? undefined
6556
+ : variables.selectedPrincipalKind;
6545
6557
  const params = new URLSearchParams();
6546
6558
  if (selectedPrincipalUid) {
6547
6559
  params.set('selected_principal_uid', selectedPrincipalUid);
@@ -6574,8 +6586,12 @@ export const useCache = ({ loginRoute = '/login' } = {}) => {
6574
6586
  return useMutation({
6575
6587
  mutationFn: async (variables) => {
6576
6588
  const spaceId = typeof variables === 'string' ? variables : variables.spaceId;
6577
- const selectedPrincipalUid = typeof variables === 'string' ? undefined : variables.selectedPrincipalUid;
6578
- const selectedPrincipalKind = typeof variables === 'string' ? undefined : variables.selectedPrincipalKind;
6589
+ const selectedPrincipalUid = typeof variables === 'string'
6590
+ ? undefined
6591
+ : variables.selectedPrincipalUid;
6592
+ const selectedPrincipalKind = typeof variables === 'string'
6593
+ ? undefined
6594
+ : variables.selectedPrincipalKind;
6579
6595
  const params = new URLSearchParams();
6580
6596
  if (selectedPrincipalUid) {
6581
6597
  params.set('selected_principal_uid', selectedPrincipalUid);
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Read-only selector for the currently scoped billing entity.
3
+ *
4
+ * Use this for billing, quotas, plans, credits, agents, and runtime capacity.
5
+ * For visibility/creation/sharing scope, use {@link useSelectedPrincipal}.
6
+ */
7
+ export declare function useSelectedBillingEntity(): {
8
+ billingEntityKind: string;
9
+ billingEntityUid: string | undefined;
10
+ billingEntityHandle: string | undefined;
11
+ isUserAccount: boolean;
12
+ isOrganizationAccount: boolean;
13
+ };
14
+ export default useSelectedBillingEntity;
@@ -2,35 +2,35 @@
2
2
  * Copyright (c) 2023-2025 Datalayer, Inc.
3
3
  * Distributed under the terms of the Modified BSD License.
4
4
  */
5
- import { useBillableAccountStore } from './useBillableAccountStore.js';
5
+ import { useBillingEntityStore } from './useBillingEntityStore.js';
6
6
  import { useSelectedPrincipal } from './useSelectedPrincipal.js';
7
7
  /**
8
- * Read-only selector for the currently scoped billable account.
8
+ * Read-only selector for the currently scoped billing entity.
9
9
  *
10
10
  * Use this for billing, quotas, plans, credits, agents, and runtime capacity.
11
11
  * For visibility/creation/sharing scope, use {@link useSelectedPrincipal}.
12
12
  */
13
- export function useSelectedBillableAccount() {
14
- const persistedUid = useBillableAccountStore(state => state.billableAccountUid);
15
- const persistedHandle = useBillableAccountStore(state => state.billableAccountHandle);
13
+ export function useSelectedBillingEntity() {
14
+ const persistedUid = useBillingEntityStore(state => state.billingEntityUid);
15
+ const persistedHandle = useBillingEntityStore(state => state.billingEntityHandle);
16
16
  const { selectedPrincipalKind, selectedPrincipalUid, selectedPrincipalHandle, selectedTeamParentOrganizationUid, selectedTeamParentOrganizationHandle, } = useSelectedPrincipal();
17
- const billableAccountKind = selectedPrincipalKind === 'team'
17
+ const billingEntityKind = selectedPrincipalKind === 'team'
18
18
  ? 'organization'
19
19
  : selectedPrincipalKind === 'organization'
20
20
  ? 'organization'
21
21
  : 'user';
22
- const billableAccountUid = selectedPrincipalKind === 'team'
22
+ const billingEntityUid = selectedPrincipalKind === 'team'
23
23
  ? selectedTeamParentOrganizationUid || persistedUid
24
24
  : selectedPrincipalUid || persistedUid;
25
- const billableAccountHandle = selectedPrincipalKind === 'team'
25
+ const billingEntityHandle = selectedPrincipalKind === 'team'
26
26
  ? selectedTeamParentOrganizationHandle || persistedHandle
27
27
  : selectedPrincipalHandle || persistedHandle;
28
28
  return {
29
- billableAccountKind,
30
- billableAccountUid,
31
- billableAccountHandle,
32
- isUserAccount: billableAccountKind === 'user',
33
- isOrganizationAccount: billableAccountKind === 'organization',
29
+ billingEntityKind,
30
+ billingEntityUid,
31
+ billingEntityHandle,
32
+ isUserAccount: billingEntityKind === 'user',
33
+ isOrganizationAccount: billingEntityKind === 'organization',
34
34
  };
35
35
  }
36
- export default useSelectedBillableAccount;
36
+ export default useSelectedBillingEntity;
@@ -2,7 +2,7 @@
2
2
  * Read-only selector for the currently selected principal (UI scope).
3
3
  *
4
4
  * Use this for visibility, creation, and sharing of artifacts.
5
- * For billing, quotas, plans, and agents, use {@link useSelectedBillableAccount}.
5
+ * For billing, quotas, plans, and agents, use {@link useSelectedBillingEntity}.
6
6
  */
7
7
  export declare function useSelectedPrincipal(): {
8
8
  selectedPrincipalKind: import("./usePrincipalStore").PrincipalKind;
@@ -7,7 +7,7 @@ import { usePrincipalStore } from './usePrincipalStore.js';
7
7
  * Read-only selector for the currently selected principal (UI scope).
8
8
  *
9
9
  * Use this for visibility, creation, and sharing of artifacts.
10
- * For billing, quotas, plans, and agents, use {@link useSelectedBillableAccount}.
10
+ * For billing, quotas, plans, and agents, use {@link useSelectedBillingEntity}.
11
11
  */
12
12
  export function useSelectedPrincipal() {
13
13
  const selectedPrincipalKind = usePrincipalStore(state => state.selectedPrincipalKind);
@@ -16,7 +16,7 @@
16
16
  * const { data: spans } = await client.fetchTraces({ limit: 50 });
17
17
  * ```
18
18
  */
19
- import { coreStore } from '../../state/substates/CoreState.js';
19
+ import { getOtelConsumeUrl } from '../../state/substates/CoreState.js';
20
20
  import { resolveOtelAuth } from '../auth.js';
21
21
  // ── Fetch helper ────────────────────────────────────────────────────────────
22
22
  async function otelFetch(url, token, userUid, options) {
@@ -125,8 +125,7 @@ export class OtelClient {
125
125
  token;
126
126
  userUid;
127
127
  constructor(options) {
128
- this.baseUrl =
129
- options.baseUrl ?? coreStore.getState().configuration.otelUrl;
128
+ this.baseUrl = options.baseUrl ?? getOtelConsumeUrl();
130
129
  const auth = resolveOtelAuth(options.token, options.userUid);
131
130
  this.token = auth.token;
132
131
  this.userUid = auth.userUid;
@@ -8,7 +8,7 @@
8
8
  * @module otel/hooks
9
9
  */
10
10
  import { useCallback, useEffect, useRef, useState } from 'react';
11
- import { coreStore } from '../../state/substates/CoreState.js';
11
+ import { getOtelConsumeUrl } from '../../state/substates/CoreState.js';
12
12
  import { buildOtelWebSocketUrl, resolveOtelAuth } from '../auth.js';
13
13
  // ── Global 401 handler ──────────────────────────────────────────────
14
14
  let _onUnauthorized = null;
@@ -189,7 +189,7 @@ function normalizeMetric(raw) {
189
189
  // ── useOtelTraces ───────────────────────────────────────────────────
190
190
  /** Fetch a list of traces / spans from the OTEL service. */
191
191
  export function useOtelTraces(options) {
192
- const { token, baseUrl = coreStore.getState().configuration.otelUrl, serviceName, limit = 50, autoRefreshMs, } = options;
192
+ const { token, baseUrl = getOtelConsumeUrl(), serviceName, limit = 50, autoRefreshMs, } = options;
193
193
  const [traces, setTraces] = useState([]);
194
194
  const [loading, setLoading] = useState(true);
195
195
  const [error, setError] = useState(null);
@@ -246,7 +246,7 @@ export function useOtelTrace(options) {
246
246
  // ── useOtelLogs ─────────────────────────────────────────────────────
247
247
  /** Fetch log records from the OTEL service. */
248
248
  export function useOtelLogs(options) {
249
- const { token, baseUrl = coreStore.getState().configuration.otelUrl, serviceName, severity, traceId, limit = 100, autoRefreshMs, } = options;
249
+ const { token, baseUrl = getOtelConsumeUrl(), serviceName, severity, traceId, limit = 100, autoRefreshMs, } = options;
250
250
  const [logs, setLogs] = useState([]);
251
251
  const [loading, setLoading] = useState(true);
252
252
  const [error, setError] = useState(null);
@@ -283,7 +283,7 @@ export function useOtelLogs(options) {
283
283
  // ── useOtelMetrics ──────────────────────────────────────────────────
284
284
  /** Fetch metrics from the OTEL service. */
285
285
  export function useOtelMetrics(options) {
286
- const { token, baseUrl = coreStore.getState().configuration.otelUrl, serviceName, metricName, limit = 50, autoRefreshMs, } = options;
286
+ const { token, baseUrl = getOtelConsumeUrl(), serviceName, metricName, limit = 50, autoRefreshMs, } = options;
287
287
  const [metrics, setMetrics] = useState([]);
288
288
  const [loading, setLoading] = useState(true);
289
289
  const [error, setError] = useState(null);
@@ -318,7 +318,7 @@ export function useOtelMetrics(options) {
318
318
  // ── useOtelServices ─────────────────────────────────────────────────
319
319
  /** Fetch list of observed service names. */
320
320
  export function useOtelServices(options) {
321
- const { token, baseUrl = coreStore.getState().configuration.otelUrl } = options;
321
+ const { token, baseUrl = getOtelConsumeUrl() } = options;
322
322
  const [services, setServices] = useState([]);
323
323
  const [loading, setLoading] = useState(true);
324
324
  useEffect(() => {
@@ -437,7 +437,7 @@ export function useOtelQuery(options) {
437
437
  * @returns `{ connected, error, close }` – reactive connection state.
438
438
  */
439
439
  export function useOtelWebSocket(options) {
440
- const { baseUrl = coreStore.getState().configuration.otelUrl, token, userUid, autoReconnect = true, reconnectDelayMs = 3000, callbacks, } = options;
440
+ const { baseUrl = getOtelConsumeUrl(), token, userUid, autoReconnect = true, reconnectDelayMs = 3000, callbacks, } = options;
441
441
  const [connected, setConnected] = useState(false);
442
442
  const [error, setError] = useState(null);
443
443
  const wsRef = useRef(null);
@@ -15,7 +15,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
15
15
  import { useState, useCallback, useMemo, useEffect, useRef, } from 'react';
16
16
  import { Box, Text, Button, Label } from '@primer/react';
17
17
  import { GitBranchIcon, ClockIcon } from '@primer/octicons-react';
18
- import { coreStore } from '../../state/substates/CoreState.js';
18
+ import { getOtelConsumeUrl } from '../../state/substates/CoreState.js';
19
19
  import { useOtelTraces, useOtelTrace, useOtelLogs, useOtelMetrics, useOtelServices, useOtelWebSocket, } from '../hooks/index.js';
20
20
  import { OtelSearchBar } from './OtelSearchBar.js';
21
21
  import { OtelTimelineRangeSlider } from './OtelTimelineRangeSlider.js';
@@ -51,7 +51,7 @@ function buildHistogram(timestamps, start, end, buckets) {
51
51
  }));
52
52
  }
53
53
  // ── OtelLive ────────────────────────────────────────────────────────
54
- export const OtelLive = ({ baseUrl = coreStore.getState().configuration.otelUrl, wsBaseUrl, token, autoRefreshMs = 5000, defaultSignal = 'traces', limit = 200, onSignalRef, }) => {
54
+ export const OtelLive = ({ baseUrl = getOtelConsumeUrl(), wsBaseUrl, token, autoRefreshMs = 5000, defaultSignal = 'traces', limit = 200, onSignalRef, }) => {
55
55
  // ── state ──
56
56
  const [signal, setSignalState] = useState(() => {
57
57
  try {
@@ -22,4 +22,15 @@ export type DatalayerCoreState = {
22
22
  export declare const coreStore: import("zustand").StoreApi<DatalayerCoreState>;
23
23
  export declare function useCoreStore(): DatalayerCoreState;
24
24
  export declare function useCoreStore<T>(selector: (state: DatalayerCoreState) => T): T;
25
+ /**
26
+ * Resolve the OTEL base URL used to *consume* (read/query) telemetry.
27
+ *
28
+ * Prefers `otelInUrl` when set, otherwise falls back to `otelUrl`. This allows
29
+ * local development to fetch telemetry from a remote (e.g. production) OTEL
30
+ * service even when the local runtime exports telemetry to a different endpoint.
31
+ *
32
+ * Mirrors the `DATALAYER_OTEL_IN_URL` (consume) / `DATALAYER_OTEL_URL` (export)
33
+ * split on the backend/build side.
34
+ */
35
+ export declare const getOtelConsumeUrl: () => string;
25
36
  export default useCoreStore;
@@ -24,6 +24,10 @@ let initialConfiguration = {
24
24
  aiInferenceUrl: 'https://prod1.datalayer.run',
25
25
  mcpServersUrl: 'https://prod1.datalayer.run',
26
26
  otelUrl: 'https://prod1.datalayer.run',
27
+ // Defaults to prod so telemetry is consumed from the production OTEL service
28
+ // even when runtimes export elsewhere (see `getOtelConsumeUrl` and the
29
+ // `DATALAYER_OTEL_IN_URL` env var). Override to '' to consume from `otelUrl`.
30
+ otelInUrl: 'https://prod1.datalayer.run',
27
31
  growthUrl: 'https://prod1.datalayer.run',
28
32
  inboundsUrl: 'https://prod1.datalayer.run',
29
33
  successUrl: 'https://prod1.datalayer.run',
@@ -97,4 +101,18 @@ export const coreStore = createStore((set, get) => ({
97
101
  export function useCoreStore(selector) {
98
102
  return useStore(coreStore, selector);
99
103
  }
104
+ /**
105
+ * Resolve the OTEL base URL used to *consume* (read/query) telemetry.
106
+ *
107
+ * Prefers `otelInUrl` when set, otherwise falls back to `otelUrl`. This allows
108
+ * local development to fetch telemetry from a remote (e.g. production) OTEL
109
+ * service even when the local runtime exports telemetry to a different endpoint.
110
+ *
111
+ * Mirrors the `DATALAYER_OTEL_IN_URL` (consume) / `DATALAYER_OTEL_URL` (export)
112
+ * split on the backend/build side.
113
+ */
114
+ export const getOtelConsumeUrl = () => {
115
+ const cfg = coreStore.getState().configuration;
116
+ return cfg.otelInUrl || cfg.otelUrl;
117
+ };
100
118
  export default useCoreStore;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalayer/core",
3
- "version": "1.1.43",
3
+ "version": "1.1.46",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  ".",
@@ -131,9 +131,9 @@
131
131
  "@primer/behaviors": "^1.8.4",
132
132
  "@primer/brand-primitives": "^0.51.0",
133
133
  "@primer/css": "^21.5.1",
134
- "@primer/octicons-react": "^19.15.1",
135
- "@primer/primitives": "^10.5.0",
136
- "@primer/react": "^37.19.0",
134
+ "@primer/octicons-react": "^19.29.1",
135
+ "@primer/primitives": "^10.7.0",
136
+ "@primer/react": "^37.31.0",
137
137
  "@primer/react-brand": "^0.58.0",
138
138
  "@stripe/react-stripe-js": "^6.3.0",
139
139
  "@stripe/stripe-js": "^9.4.0",
@@ -1,35 +0,0 @@
1
- export type BillableAccountType = 'user' | 'organization' | 'team';
2
- export type BillableAccount = {
3
- accountUid: string;
4
- accountType: BillableAccountType;
5
- accountHandle: string;
6
- accountName: string;
7
- planName: string;
8
- isEligible: boolean;
9
- isPaidPlan: boolean;
10
- sourceOrganizationUid?: string;
11
- sourceOrganizationHandle?: string;
12
- teamHandle?: string;
13
- };
14
- export type BillableAccountSelectProps = {
15
- value: string;
16
- onChange: (accountUid: string) => void;
17
- onSelectedAccountChange?: (account: BillableAccount | undefined) => void;
18
- onAccountsResolved?: (state: {
19
- accounts: BillableAccount[];
20
- eligibleAccounts: BillableAccount[];
21
- isLoading: boolean;
22
- hasEligibleAccount: boolean;
23
- }) => void;
24
- disabled?: boolean;
25
- label?: string;
26
- caption?: string;
27
- emptyMessage?: string;
28
- flashMessage?: string;
29
- width?: string | number;
30
- preferOrganizationDefault?: boolean;
31
- };
32
- export declare function resolveBillablePlanTier(value: unknown): 'free' | 'pro';
33
- export declare function formatBillableAccountPlanLabel(planName: string): string;
34
- export declare function BillableAccountSelect({ value, onChange, onSelectedAccountChange, onAccountsResolved, disabled, label, caption, emptyMessage, flashMessage, width, preferOrganizationDefault, }: BillableAccountSelectProps): JSX.Element;
35
- export default BillableAccountSelect;
@@ -1 +0,0 @@
1
- export { LiveRelativeTime } from '../time/LiveRelativeTime';
@@ -1,10 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2025 Datalayer, Inc.
3
- * Distributed under the terms of the Modified BSD License.
4
- */
5
- /*
6
- * Copyright (c) 2023-2026 Datalayer, Inc.
7
- * Distributed under the terms of the Modified BSD License.
8
- */
9
- // Backward compatibility export. Use ../../components/time/LiveRelativeTime.
10
- export { LiveRelativeTime } from '../time/LiveRelativeTime.js';