@singi-labs/sifa-sdk 0.12.29 → 0.12.31

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 (35) hide show
  1. package/dist/{adult-content-DdY7S5nN.d.cts → adult-content-BHIB4rxu.d.cts} +8 -0
  2. package/dist/{adult-content-DdY7S5nN.d.ts → adult-content-BHIB4rxu.d.ts} +8 -0
  3. package/dist/{index-ipyzSVry.d.cts → index-C95t5Gg5.d.cts} +2 -2
  4. package/dist/{index-wMuFhu7d.d.ts → index-CZAG8uku.d.ts} +3 -3
  5. package/dist/{index-ZXWW6RsR.d.cts → index-O2oJHRq0.d.cts} +3 -3
  6. package/dist/{index-B6GHpvcg.d.ts → index-ZoAKneCP.d.ts} +2 -2
  7. package/dist/index.cjs +132 -1
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +36 -4
  10. package/dist/index.d.ts +36 -4
  11. package/dist/index.js +129 -2
  12. package/dist/index.js.map +1 -1
  13. package/dist/{org-Dme1VvNa.d.cts → org-DWAqK-TV.d.cts} +1 -1
  14. package/dist/{org-CLRdUB1W.d.ts → org-Octhy3vS.d.ts} +1 -1
  15. package/dist/{profile-summary-DjRf3Snf.d.cts → profile-summary-DsaEk_GD.d.cts} +1 -1
  16. package/dist/{profile-summary-B9SuY-EU.d.ts → profile-summary-sWTKu58A.d.ts} +1 -1
  17. package/dist/query/fetchers/index.d.cts +4 -4
  18. package/dist/query/fetchers/index.d.ts +4 -4
  19. package/dist/query/hooks/index.d.cts +3 -3
  20. package/dist/query/hooks/index.d.ts +3 -3
  21. package/dist/query/index.d.cts +6 -6
  22. package/dist/query/index.d.ts +6 -6
  23. package/dist/schemas/index.cjs +1 -0
  24. package/dist/schemas/index.cjs.map +1 -1
  25. package/dist/schemas/index.d.cts +4 -1
  26. package/dist/schemas/index.d.ts +4 -1
  27. package/dist/schemas/index.js +1 -0
  28. package/dist/schemas/index.js.map +1 -1
  29. package/dist/schemas/write/index.cjs +40 -1
  30. package/dist/schemas/write/index.cjs.map +1 -1
  31. package/dist/schemas/write/index.d.cts +1 -0
  32. package/dist/schemas/write/index.d.ts +1 -0
  33. package/dist/schemas/write/index.js +40 -1
  34. package/dist/schemas/write/index.js.map +1 -1
  35. package/package.json +1 -1
@@ -74,6 +74,12 @@ interface ProfileSkill {
74
74
  rkey: string;
75
75
  name: string;
76
76
  category?: string;
77
+ /**
78
+ * Freeform user-defined grouping label nested under `category` (e.g.
79
+ * "Frontend", "Backend"). No known values; renderers decide the display
80
+ * label. See `groupSkillsBySubCategory`.
81
+ */
82
+ subCategory?: string;
77
83
  endorsementCount?: number;
78
84
  endorsed?: boolean;
79
85
  activityBacked?: boolean;
@@ -690,6 +696,8 @@ interface SkillView {
690
696
  rkey: string;
691
697
  name: string;
692
698
  category?: string;
699
+ /** Freeform user-defined grouping label nested under `category` (#305). */
700
+ subCategory?: string;
693
701
  positionRkeys?: string[];
694
702
  }
695
703
  interface CertificationView {
@@ -74,6 +74,12 @@ interface ProfileSkill {
74
74
  rkey: string;
75
75
  name: string;
76
76
  category?: string;
77
+ /**
78
+ * Freeform user-defined grouping label nested under `category` (e.g.
79
+ * "Frontend", "Backend"). No known values; renderers decide the display
80
+ * label. See `groupSkillsBySubCategory`.
81
+ */
82
+ subCategory?: string;
77
83
  endorsementCount?: number;
78
84
  endorsed?: boolean;
79
85
  activityBacked?: boolean;
@@ -690,6 +696,8 @@ interface SkillView {
690
696
  rkey: string;
691
697
  name: string;
692
698
  category?: string;
699
+ /** Freeform user-defined grouping label nested under `category` (#305). */
700
+ subCategory?: string;
693
701
  positionRkeys?: string[];
694
702
  }
695
703
  interface CertificationView {
@@ -1,9 +1,9 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
- import { S as SifaApiConfig, s as sifaQueryKeys, W as WriteResult, ah as RefreshPdsResult, aw as UpdateProfileOverrideInput, ax as UpdateProfileSelfInput, ay as UploadAvatarResult, j as CreateResult, a5 as ProfileLocationInput, k as ExternalAccountInput, i as CreateExternalAccountResult, az as VerifyExternalAccountResult, E as EndorsementInput, ag as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, R as HideProfileItemInput, at as StatsResponse, g as AppRegistryEntry, O as HiddenApp, x as FilterOptions, ao as SearchFilters, ap as SearchResponse, as as SkillSearchResult, l as FeaturedProfile, ar as SimilarProfile, w as FetchSuggestionsOptions, av as SuggestionsResponse, H as FollowUserResult, o as FetchFollowListOptions, y as FollowListPage, I as FollowingResponse, q as FetchFollowingFeedOptions, p as FetchFollowProfilePageOptions, G as FollowProfilePageResponse, F as FeatureAllowlistResponse, m as FetchActivityFeedOptions, b as ActivityFeedResponse, e as ActivityTeaserResponse, N as HeatmapResponse, U as MyGithubPullRequestsResponse, a as AccountCheckResult, af as ReactionStatus, ae as ReactionResult, ad as ReactionError, an as RoadmapVotesResponse, C as CastRoadmapVoteResult, D as DeleteAccountResult, ai as ResetProfileResult, X as OrgClaimResult, a1 as OrgProfileUpdateResult, Y as OrgDomainChallengeResult, Z as OrgDomainVerifyResult, _ as OrgNotificationEmailAddResult, $ as OrgNotificationEmailRemoveResult } from './org-Dme1VvNa.cjs';
3
+ import { S as SifaApiConfig, s as sifaQueryKeys, W as WriteResult, ah as RefreshPdsResult, aw as UpdateProfileOverrideInput, ax as UpdateProfileSelfInput, ay as UploadAvatarResult, j as CreateResult, a5 as ProfileLocationInput, k as ExternalAccountInput, i as CreateExternalAccountResult, az as VerifyExternalAccountResult, E as EndorsementInput, ag as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, R as HideProfileItemInput, at as StatsResponse, g as AppRegistryEntry, O as HiddenApp, x as FilterOptions, ao as SearchFilters, ap as SearchResponse, as as SkillSearchResult, l as FeaturedProfile, ar as SimilarProfile, w as FetchSuggestionsOptions, av as SuggestionsResponse, H as FollowUserResult, o as FetchFollowListOptions, y as FollowListPage, I as FollowingResponse, q as FetchFollowingFeedOptions, p as FetchFollowProfilePageOptions, G as FollowProfilePageResponse, F as FeatureAllowlistResponse, m as FetchActivityFeedOptions, b as ActivityFeedResponse, e as ActivityTeaserResponse, N as HeatmapResponse, U as MyGithubPullRequestsResponse, a as AccountCheckResult, af as ReactionStatus, ae as ReactionResult, ad as ReactionError, an as RoadmapVotesResponse, C as CastRoadmapVoteResult, D as DeleteAccountResult, ai as ResetProfileResult, X as OrgClaimResult, a1 as OrgProfileUpdateResult, Y as OrgDomainChallengeResult, Z as OrgDomainVerifyResult, _ as OrgNotificationEmailAddResult, $ as OrgNotificationEmailRemoveResult } from './org-DWAqK-TV.cjs';
4
4
  import * as _tanstack_react_query from '@tanstack/react-query';
5
5
  import { UseQueryOptions, UseMutationOptions, UseInfiniteQueryOptions, InfiniteData } from '@tanstack/react-query';
6
- import { e as Profile, P as ProfileView, f as ProfilePosition, a6 as SkillRef, E as ExternalAccount, S as SkillSuggestion, M as OrgFloorVerdict } from './adult-content-DdY7S5nN.cjs';
6
+ import { e as Profile, P as ProfileView, f as ProfilePosition, a6 as SkillRef, E as ExternalAccount, S as SkillSuggestion, M as OrgFloorVerdict } from './adult-content-BHIB4rxu.cjs';
7
7
  import { m as EntitySearchResponse, E as EntitySearchResult, g as EntityMintDomainResponse, k as EntityResolveDomainResponse, r as EntitySelectResponse, p as EntitySelectRequest, F as FollowFeedPage, c as FeatureFlag } from './feed-D2ZV8Eaj.cjs';
8
8
  import { O as OrgClaimRequestInput, h as OrgProfileUpdateRequestInput, b as OrgDomainChallengeRequestInput, d as OrgDomainVerifyRequestInput, f as OrgNotificationEmailRequestInput } from './org-settings-CmaSX5ZI.cjs';
9
9
 
@@ -1,7 +1,7 @@
1
- import { S as SifaApiConfig, A as ApiFetchOptions, j as CreateResult, W as WriteResult } from './org-CLRdUB1W.js';
2
- import { e as Profile, P as ProfileView, f as ProfilePosition, a6 as SkillRef } from './adult-content-DdY7S5nN.js';
1
+ import { S as SifaApiConfig, A as ApiFetchOptions, j as CreateResult, W as WriteResult } from './org-Octhy3vS.js';
2
+ import { e as Profile, P as ProfileView, f as ProfilePosition, a6 as SkillRef } from './adult-content-BHIB4rxu.js';
3
3
  import { m as EntitySearchResponse, E as EntitySearchResult, g as EntityMintDomainResponse, k as EntityResolveDomainResponse, p as EntitySelectRequest, r as EntitySelectResponse } from './feed-D2ZV8Eaj.js';
4
- import { S as SummarizeProfileViewOptions, P as ProfileSummary } from './profile-summary-B9SuY-EU.js';
4
+ import { S as SummarizeProfileViewOptions, P as ProfileSummary } from './profile-summary-sWTKu58A.js';
5
5
 
6
6
  /**
7
7
  * Read the aggregated profile for a handle or DID.
@@ -1,7 +1,7 @@
1
- import { S as SifaApiConfig, A as ApiFetchOptions, j as CreateResult, W as WriteResult } from './org-Dme1VvNa.cjs';
2
- import { e as Profile, P as ProfileView, f as ProfilePosition, a6 as SkillRef } from './adult-content-DdY7S5nN.cjs';
1
+ import { S as SifaApiConfig, A as ApiFetchOptions, j as CreateResult, W as WriteResult } from './org-DWAqK-TV.cjs';
2
+ import { e as Profile, P as ProfileView, f as ProfilePosition, a6 as SkillRef } from './adult-content-BHIB4rxu.cjs';
3
3
  import { m as EntitySearchResponse, E as EntitySearchResult, g as EntityMintDomainResponse, k as EntityResolveDomainResponse, p as EntitySelectRequest, r as EntitySelectResponse } from './feed-D2ZV8Eaj.cjs';
4
- import { S as SummarizeProfileViewOptions, P as ProfileSummary } from './profile-summary-DjRf3Snf.cjs';
4
+ import { S as SummarizeProfileViewOptions, P as ProfileSummary } from './profile-summary-DsaEk_GD.cjs';
5
5
 
6
6
  /**
7
7
  * Read the aggregated profile for a handle or DID.
@@ -1,9 +1,9 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
- import { S as SifaApiConfig, s as sifaQueryKeys, W as WriteResult, ah as RefreshPdsResult, aw as UpdateProfileOverrideInput, ax as UpdateProfileSelfInput, ay as UploadAvatarResult, j as CreateResult, a5 as ProfileLocationInput, k as ExternalAccountInput, i as CreateExternalAccountResult, az as VerifyExternalAccountResult, E as EndorsementInput, ag as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, R as HideProfileItemInput, at as StatsResponse, g as AppRegistryEntry, O as HiddenApp, x as FilterOptions, ao as SearchFilters, ap as SearchResponse, as as SkillSearchResult, l as FeaturedProfile, ar as SimilarProfile, w as FetchSuggestionsOptions, av as SuggestionsResponse, H as FollowUserResult, o as FetchFollowListOptions, y as FollowListPage, I as FollowingResponse, q as FetchFollowingFeedOptions, p as FetchFollowProfilePageOptions, G as FollowProfilePageResponse, F as FeatureAllowlistResponse, m as FetchActivityFeedOptions, b as ActivityFeedResponse, e as ActivityTeaserResponse, N as HeatmapResponse, U as MyGithubPullRequestsResponse, a as AccountCheckResult, af as ReactionStatus, ae as ReactionResult, ad as ReactionError, an as RoadmapVotesResponse, C as CastRoadmapVoteResult, D as DeleteAccountResult, ai as ResetProfileResult, X as OrgClaimResult, a1 as OrgProfileUpdateResult, Y as OrgDomainChallengeResult, Z as OrgDomainVerifyResult, _ as OrgNotificationEmailAddResult, $ as OrgNotificationEmailRemoveResult } from './org-CLRdUB1W.js';
3
+ import { S as SifaApiConfig, s as sifaQueryKeys, W as WriteResult, ah as RefreshPdsResult, aw as UpdateProfileOverrideInput, ax as UpdateProfileSelfInput, ay as UploadAvatarResult, j as CreateResult, a5 as ProfileLocationInput, k as ExternalAccountInput, i as CreateExternalAccountResult, az as VerifyExternalAccountResult, E as EndorsementInput, ag as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, R as HideProfileItemInput, at as StatsResponse, g as AppRegistryEntry, O as HiddenApp, x as FilterOptions, ao as SearchFilters, ap as SearchResponse, as as SkillSearchResult, l as FeaturedProfile, ar as SimilarProfile, w as FetchSuggestionsOptions, av as SuggestionsResponse, H as FollowUserResult, o as FetchFollowListOptions, y as FollowListPage, I as FollowingResponse, q as FetchFollowingFeedOptions, p as FetchFollowProfilePageOptions, G as FollowProfilePageResponse, F as FeatureAllowlistResponse, m as FetchActivityFeedOptions, b as ActivityFeedResponse, e as ActivityTeaserResponse, N as HeatmapResponse, U as MyGithubPullRequestsResponse, a as AccountCheckResult, af as ReactionStatus, ae as ReactionResult, ad as ReactionError, an as RoadmapVotesResponse, C as CastRoadmapVoteResult, D as DeleteAccountResult, ai as ResetProfileResult, X as OrgClaimResult, a1 as OrgProfileUpdateResult, Y as OrgDomainChallengeResult, Z as OrgDomainVerifyResult, _ as OrgNotificationEmailAddResult, $ as OrgNotificationEmailRemoveResult } from './org-Octhy3vS.js';
4
4
  import * as _tanstack_react_query from '@tanstack/react-query';
5
5
  import { UseQueryOptions, UseMutationOptions, UseInfiniteQueryOptions, InfiniteData } from '@tanstack/react-query';
6
- import { e as Profile, P as ProfileView, f as ProfilePosition, a6 as SkillRef, E as ExternalAccount, S as SkillSuggestion, M as OrgFloorVerdict } from './adult-content-DdY7S5nN.js';
6
+ import { e as Profile, P as ProfileView, f as ProfilePosition, a6 as SkillRef, E as ExternalAccount, S as SkillSuggestion, M as OrgFloorVerdict } from './adult-content-BHIB4rxu.js';
7
7
  import { m as EntitySearchResponse, E as EntitySearchResult, g as EntityMintDomainResponse, k as EntityResolveDomainResponse, r as EntitySelectResponse, p as EntitySelectRequest, F as FollowFeedPage, c as FeatureFlag } from './feed-D2ZV8Eaj.js';
8
8
  import { O as OrgClaimRequestInput, h as OrgProfileUpdateRequestInput, b as OrgDomainChallengeRequestInput, d as OrgDomainVerifyRequestInput, f as OrgNotificationEmailRequestInput } from './org-settings-CmaSX5ZI.js';
9
9
 
package/dist/index.cjs CHANGED
@@ -864,6 +864,10 @@ function dedupeSkills(skills) {
864
864
  }
865
865
  existing.mergedRkeys.push(skill.rkey);
866
866
  if (!existing.category && skill.category) existing.category = skill.category;
867
+ const incomingSubCategory = skill.subCategory?.trim();
868
+ if (incomingSubCategory && !existing.subCategory?.trim()) {
869
+ existing.subCategory = incomingSubCategory;
870
+ }
867
871
  if ((skill.endorsementCount ?? 0) > (existing.endorsementCount ?? 0)) {
868
872
  existing.endorsementCount = skill.endorsementCount;
869
873
  }
@@ -899,6 +903,32 @@ function groupSkillsByCategory(skills) {
899
903
  if (otherGroup?.length) ordered.push(["other", otherGroup]);
900
904
  return ordered;
901
905
  }
906
+ function groupSkillsBySubCategory(skills) {
907
+ const labels = /* @__PURE__ */ new Map();
908
+ const grouped = /* @__PURE__ */ new Map();
909
+ for (const skill of skills) {
910
+ const raw = skill.subCategory?.trim();
911
+ const key = raw ? raw.toLowerCase() : "";
912
+ if (raw && !labels.has(key)) labels.set(key, raw);
913
+ const bucket = grouped.get(key) ?? [];
914
+ bucket.push(skill);
915
+ grouped.set(key, bucket);
916
+ }
917
+ const sortByRank = (groupSkills) => [...groupSkills].sort((a, b) => {
918
+ const countDiff = (b.endorsementCount ?? 0) - (a.endorsementCount ?? 0);
919
+ if (countDiff !== 0) return countDiff;
920
+ return a.name.localeCompare(b.name);
921
+ });
922
+ const ordered = [];
923
+ for (const key of [...labels.keys()].sort((a, b) => a.localeCompare(b))) {
924
+ const label = labels.get(key);
925
+ const group = grouped.get(key);
926
+ if (label && group?.length) ordered.push([label, sortByRank(group)]);
927
+ }
928
+ const ungrouped = grouped.get("");
929
+ if (ungrouped?.length) ordered.push([null, sortByRank(ungrouped)]);
930
+ return ordered;
931
+ }
902
932
 
903
933
  // src/taxonomy/app-categories.ts
904
934
  var APP_CATEGORIES = {
@@ -4676,6 +4706,7 @@ var ProfileSelfRecordSchema = zod.z.object({
4676
4706
  var ProfileSkillRecordSchema = zod.z.object({
4677
4707
  name: zod.z.string().min(1).refine(maxGraphemes(64)).max(640),
4678
4708
  category: zod.z.string().optional(),
4709
+ subCategory: zod.z.string().refine(maxGraphemes(64)).max(640).optional(),
4679
4710
  createdAt: datetimeSchema
4680
4711
  });
4681
4712
  var ProfileVolunteeringRecordSchema = zod.z.object({
@@ -4692,8 +4723,104 @@ var ProfileVolunteeringRecordSchema = zod.z.object({
4692
4723
  createdAt: datetimeSchema
4693
4724
  });
4694
4725
 
4726
+ // src/roadmap/index.ts
4727
+ var ROADMAP_ISSUES_REPO = "singi-labs/sifa-workspace";
4728
+ var ROADMAP_ITEM_META = {
4729
+ endorsementsAttestations: {
4730
+ description: "Let colleagues vouch for your skills and experience, recorded as attestations you carry with you.",
4731
+ issues: [3, 166]
4732
+ },
4733
+ notifications: {
4734
+ description: "Get told when someone endorses you, links a company, or acts on your profile.",
4735
+ issues: [158]
4736
+ },
4737
+ verifiedConnections: {
4738
+ description: "Confirm real working relationships, not just follows.",
4739
+ issues: []
4740
+ },
4741
+ profileAnalytics: {
4742
+ description: "See who views your profile and how people find you.",
4743
+ issues: []
4744
+ },
4745
+ jobProfiles: {
4746
+ description: "Structured work history that stays with your identity across the network.",
4747
+ issues: [102]
4748
+ },
4749
+ eventRsvp: {
4750
+ description: "Show the talks and events you're attending or speaking at.",
4751
+ issues: [214]
4752
+ },
4753
+ companyPages: {
4754
+ description: "Claimable organization pages that link the people who work there.",
4755
+ issues: [73]
4756
+ },
4757
+ advancedSearch: {
4758
+ description: "Search across categories, with filters and forgiving name matching.",
4759
+ issues: [5]
4760
+ },
4761
+ multiAccountLinking: {
4762
+ description: "Tie several atproto accounts to one professional identity.",
4763
+ issues: [8]
4764
+ },
4765
+ mobileApps: {
4766
+ description: "Native iOS and Android apps.",
4767
+ issues: [114]
4768
+ },
4769
+ atmosphereStream: {
4770
+ description: "One feed that gathers your activity from across the atproto network.",
4771
+ issues: [7, 12]
4772
+ },
4773
+ localizationMultiLanguage: {
4774
+ description: "The interface in your own language.",
4775
+ issues: [218]
4776
+ },
4777
+ rssFediverseIngestion: {
4778
+ description: "Pull in posts from RSS feeds and the Fediverse.",
4779
+ issues: [111]
4780
+ },
4781
+ githubFeedIngestion: {
4782
+ description: "Bring your GitHub activity into your track record.",
4783
+ issues: [95]
4784
+ },
4785
+ compensationInformation: {
4786
+ description: "Add optional pay and compensation context to your roles.",
4787
+ issues: [81]
4788
+ },
4789
+ embedCustomization: {
4790
+ description: "Choose which fields show in your embeddable profile card.",
4791
+ issues: [117]
4792
+ },
4793
+ academicLexicon: {
4794
+ description: "Schema and features built for researchers and academics.",
4795
+ issues: [119, 148]
4796
+ },
4797
+ journalismLexicon: {
4798
+ description: "Schema and features built for journalists.",
4799
+ issues: [121]
4800
+ },
4801
+ skillEvidenceGithub: {
4802
+ description: "Back up skill claims with the languages in your GitHub repositories.",
4803
+ issues: [107]
4804
+ },
4805
+ latexCvExport: {
4806
+ description: "Export your profile as a LaTeX CV.",
4807
+ issues: [113]
4808
+ },
4809
+ jsonResumeImportExport: {
4810
+ description: "Move your profile in and out using the JSON Resume standard.",
4811
+ issues: [151]
4812
+ },
4813
+ linkedClaimsResearch: {
4814
+ description: "Exploring the LinkedClaims spec for portable, verifiable endorsements.",
4815
+ issues: [155]
4816
+ }
4817
+ };
4818
+ function roadmapIssueUrl(issue) {
4819
+ return `https://github.com/${ROADMAP_ISSUES_REPO}/issues/${issue}`;
4820
+ }
4821
+
4695
4822
  // src/index.ts
4696
- var SIFA_SDK_VERSION = "0.12.29";
4823
+ var SIFA_SDK_VERSION = "0.12.31";
4697
4824
 
4698
4825
  exports.ACTIVITY_TIERS = ACTIVITY_TIERS;
4699
4826
  exports.ACTIVITY_VERBS = ACTIVITY_VERBS;
@@ -4779,6 +4906,8 @@ exports.ProfileSelfRecordSchema = ProfileSelfRecordSchema;
4779
4906
  exports.ProfileSkillRecordSchema = ProfileSkillRecordSchema;
4780
4907
  exports.ProfileVolunteeringRecordSchema = ProfileVolunteeringRecordSchema;
4781
4908
  exports.PublicationAuthorSchema = PublicationAuthorSchema;
4909
+ exports.ROADMAP_ISSUES_REPO = ROADMAP_ISSUES_REPO;
4910
+ exports.ROADMAP_ITEM_META = ROADMAP_ITEM_META;
4782
4911
  exports.SECTION_GROUPS = SECTION_GROUPS;
4783
4912
  exports.SECTION_LABELS = SECTION_LABELS;
4784
4913
  exports.SIFA_SDK_VERSION = SIFA_SDK_VERSION;
@@ -4853,6 +4982,7 @@ exports.getVisibleSectionIds = getVisibleSectionIds;
4853
4982
  exports.getWorkplaceTypeLabel = getWorkplaceTypeLabel;
4854
4983
  exports.groupInvolvementByHeading = groupInvolvementByHeading;
4855
4984
  exports.groupSkillsByCategory = groupSkillsByCategory;
4985
+ exports.groupSkillsBySubCategory = groupSkillsBySubCategory;
4856
4986
  exports.hasAdultContent = hasAdultContent;
4857
4987
  exports.hoistPrimary = hoistPrimary;
4858
4988
  exports.isAppCategory = isAppCategory;
@@ -4901,6 +5031,7 @@ exports.resolveCardUrl = resolveCardUrl;
4901
5031
  exports.resolveEmbed = resolveEmbed;
4902
5032
  exports.resolveVerifierProvider = resolveVerifierProvider;
4903
5033
  exports.rgbToString = rgbToString;
5034
+ exports.roadmapIssueUrl = roadmapIssueUrl;
4904
5035
  exports.sanitizeDisplayText = sanitizeDisplayText;
4905
5036
  exports.sanitizeHandleInput = sanitizeHandleInput;
4906
5037
  exports.searchResultDisambiguation = searchResultDisambiguation;