@singi-labs/sifa-sdk 0.19.44 → 0.19.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atproto/index.js +9 -3
- package/dist/atproto/index.js.map +1 -1
- package/dist/badge/index.js +5 -141
- package/dist/badge/index.js.map +1 -1
- package/dist/cards/adult-content.js +14 -0
- package/dist/cards/adult-content.js.map +1 -0
- package/dist/cards/app-url-patterns.js +369 -0
- package/dist/cards/app-url-patterns.js.map +1 -0
- package/dist/cards/index.js +24 -0
- package/dist/cards/index.js.map +1 -0
- package/dist/cards/resolve-card-url.js +198 -0
- package/dist/cards/resolve-card-url.js.map +1 -0
- package/dist/cards/visibility.js +45 -0
- package/dist/cards/visibility.js.map +1 -0
- package/dist/flags/index.js +4 -3
- package/dist/flags/index.js.map +1 -1
- package/dist/format/collapse-contributors.js +19 -0
- package/dist/format/collapse-contributors.js.map +1 -0
- package/dist/format/company-name.js +61 -0
- package/dist/format/company-name.js.map +1 -0
- package/dist/format/compare-text.js +9 -0
- package/dist/format/compare-text.js.map +1 -0
- package/dist/format/doi.js +8 -0
- package/dist/format/doi.js.map +1 -0
- package/dist/format/embed.js +131 -0
- package/dist/format/embed.js.map +1 -0
- package/dist/format/endorsement-context.js +35 -0
- package/dist/format/endorsement-context.js.map +1 -0
- package/dist/format/format-display-url.js +42 -0
- package/dist/format/format-display-url.js.map +1 -0
- package/dist/format/format-duration.js +13 -0
- package/dist/format/format-duration.js.map +1 -0
- package/dist/format/format-time.js +30 -0
- package/dist/format/format-time.js.map +1 -0
- package/dist/format/handle-utils.js +19 -0
- package/dist/format/handle-utils.js.map +1 -0
- package/dist/format/index.js +100 -0
- package/dist/format/index.js.map +1 -0
- package/dist/format/location-segments.js +29 -0
- package/dist/format/location-segments.js.map +1 -0
- package/dist/format/location-utils.js +42 -0
- package/dist/format/location-utils.js.map +1 -0
- package/dist/format/meta-description.js +35 -0
- package/dist/format/meta-description.js.map +1 -0
- package/dist/format/normalize-company-key.js +12 -0
- package/dist/format/normalize-company-key.js.map +1 -0
- package/dist/format/normalize-legal-form.js +71 -0
- package/dist/format/normalize-legal-form.js.map +1 -0
- package/dist/format/pds-utils.js +73 -0
- package/dist/format/pds-utils.js.map +1 -0
- package/dist/format/sort-by-date.js +39 -0
- package/dist/format/sort-by-date.js.map +1 -0
- package/dist/format/summarize-deliveries.js +37 -0
- package/dist/format/summarize-deliveries.js.map +1 -0
- package/dist/format/talk-slug.js +21 -0
- package/dist/format/talk-slug.js.map +1 -0
- package/dist/format/text-sanitize.js +29 -0
- package/dist/format/text-sanitize.js.map +1 -0
- package/dist/format/text-truncate.js +14 -0
- package/dist/format/text-truncate.js.map +1 -0
- package/dist/format/time-utils.js +19 -0
- package/dist/format/time-utils.js.map +1 -0
- package/dist/format/timeline.js +29 -0
- package/dist/format/timeline.js.map +1 -0
- package/dist/format/wcag-contrast.js +34 -0
- package/dist/format/wcag-contrast.js.map +1 -0
- package/dist/import/index.js +22 -0
- package/dist/import/index.js.map +1 -0
- package/dist/import/presentation-csv.js +116 -0
- package/dist/import/presentation-csv.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +675 -7086
- package/dist/index.js.map +1 -1
- package/dist/jev/index.js +18 -5
- package/dist/jev/index.js.map +1 -1
- package/dist/jsonld/index.js +30 -987
- package/dist/jsonld/index.js.map +1 -1
- package/dist/jsonld/profile.js +222 -0
- package/dist/jsonld/profile.js.map +1 -0
- package/dist/jsonld/terms.js +496 -0
- package/dist/jsonld/terms.js.map +1 -0
- package/dist/jsonld/url.js +17 -0
- package/dist/jsonld/url.js.map +1 -0
- package/dist/jsonld/works-graph.js +41 -0
- package/dist/jsonld/works-graph.js.map +1 -0
- package/dist/jsonld/works.js +178 -0
- package/dist/jsonld/works.js.map +1 -0
- package/dist/logic/actor-identity.js +8 -0
- package/dist/logic/actor-identity.js.map +1 -0
- package/dist/logic/agent-ref.js +24 -0
- package/dist/logic/agent-ref.js.map +1 -0
- package/dist/logic/company-page-indexable.js +23 -0
- package/dist/logic/company-page-indexable.js.map +1 -0
- package/dist/logic/date-lookahead.js +31 -0
- package/dist/logic/date-lookahead.js.map +1 -0
- package/dist/logic/domain-detect.js +43 -0
- package/dist/logic/domain-detect.js.map +1 -0
- package/dist/logic/entity-disambiguation.js +24 -0
- package/dist/logic/entity-disambiguation.js.map +1 -0
- package/dist/logic/entity-ref-anchor.js +33 -0
- package/dist/logic/entity-ref-anchor.js.map +1 -0
- package/dist/logic/index.js +91 -0
- package/dist/logic/index.js.map +1 -0
- package/dist/logic/org-floor.js +66 -0
- package/dist/logic/org-floor.js.map +1 -0
- package/dist/logic/primary-item.js +9 -0
- package/dist/logic/primary-item.js.map +1 -0
- package/dist/logic/primary-position.js +16 -0
- package/dist/logic/primary-position.js.map +1 -0
- package/dist/logic/profile-completeness.js +21 -0
- package/dist/logic/profile-completeness.js.map +1 -0
- package/dist/logic/profile-dimensions.js +50 -0
- package/dist/logic/profile-dimensions.js.map +1 -0
- package/dist/logic/profile-summary.js +23 -0
- package/dist/logic/profile-summary.js.map +1 -0
- package/dist/logic/pseudo-employer.js +34 -0
- package/dist/logic/pseudo-employer.js.map +1 -0
- package/dist/logic/recent-activity.js +10 -0
- package/dist/logic/recent-activity.js.map +1 -0
- package/dist/logic/self-app.js +10 -0
- package/dist/logic/self-app.js.map +1 -0
- package/dist/{org-BCrvebcf.d.ts → org-CxTEjjrm.d.ts} +1 -1
- package/dist/{org-settings-C73Sin5E.d.ts → org-settings-BShvhyFp.d.ts} +1 -1
- package/dist/profile/headline-role-dedupe.js +12 -0
- package/dist/profile/headline-role-dedupe.js.map +1 -0
- package/dist/profile/highlights.js +200 -0
- package/dist/profile/highlights.js.map +1 -0
- package/dist/profile/index.js +66 -0
- package/dist/profile/index.js.map +1 -0
- package/dist/profile/involvement-grouping.js +31 -0
- package/dist/profile/involvement-grouping.js.map +1 -0
- package/dist/profile/language-sort.js +24 -0
- package/dist/profile/language-sort.js.map +1 -0
- package/dist/profile/publication-versions.js +98 -0
- package/dist/profile/publication-versions.js.map +1 -0
- package/dist/profile/range-sort.js +14 -0
- package/dist/profile/range-sort.js.map +1 -0
- package/dist/profile/section-model.js +122 -0
- package/dist/profile/section-model.js.map +1 -0
- package/dist/profile/section-sorts.js +33 -0
- package/dist/profile/section-sorts.js.map +1 -0
- package/dist/publishers/index.js +16 -0
- package/dist/publishers/index.js.map +1 -0
- package/dist/publishers/registry.js +87 -0
- package/dist/publishers/registry.js.map +1 -0
- package/dist/publishing/index.js +46 -184
- package/dist/publishing/index.js.map +1 -1
- package/dist/publishing/linkblog.js +42 -0
- package/dist/publishing/linkblog.js.map +1 -0
- package/dist/publishing/registry.js +32 -0
- package/dist/publishing/registry.js.map +1 -0
- package/dist/publishing/schemas.js +74 -0
- package/dist/publishing/schemas.js.map +1 -0
- package/dist/publishing/types.js +32 -0
- package/dist/publishing/types.js.map +1 -0
- package/dist/query/client.js +119 -0
- package/dist/query/client.js.map +1 -0
- package/dist/query/config.js +23 -0
- package/dist/query/config.js.map +1 -0
- package/dist/query/fetchers/accounts.js +29 -0
- package/dist/query/fetchers/accounts.js.map +1 -0
- package/dist/query/fetchers/activity-items-hide.js +31 -0
- package/dist/query/fetchers/activity-items-hide.js.map +1 -0
- package/dist/query/fetchers/activity.js +61 -0
- package/dist/query/fetchers/activity.js.map +1 -0
- package/dist/query/fetchers/actor.js +30 -0
- package/dist/query/fetchers/actor.js.map +1 -0
- package/dist/query/fetchers/admin-feature-allowlists.js +41 -0
- package/dist/query/fetchers/admin-feature-allowlists.js.map +1 -0
- package/dist/query/fetchers/admin-review-queues.js +30 -0
- package/dist/query/fetchers/admin-review-queues.js.map +1 -0
- package/dist/query/fetchers/apps.js +31 -0
- package/dist/query/fetchers/apps.js.map +1 -0
- package/dist/query/fetchers/bsky-preferences.js +55 -0
- package/dist/query/fetchers/bsky-preferences.js.map +1 -0
- package/dist/query/fetchers/confirmations.js +55 -0
- package/dist/query/fetchers/confirmations.js.map +1 -0
- package/dist/query/fetchers/destructive.js +34 -0
- package/dist/query/fetchers/destructive.js.map +1 -0
- package/dist/query/fetchers/discovery.js +67 -0
- package/dist/query/fetchers/discovery.js.map +1 -0
- package/dist/query/fetchers/education.js +23 -0
- package/dist/query/fetchers/education.js.map +1 -0
- package/dist/query/fetchers/endorsement-inbox.js +36 -0
- package/dist/query/fetchers/endorsement-inbox.js.map +1 -0
- package/dist/query/fetchers/endorsement.js +23 -0
- package/dist/query/fetchers/endorsement.js.map +1 -0
- package/dist/query/fetchers/endorsements.js +20 -0
- package/dist/query/fetchers/endorsements.js.map +1 -0
- package/dist/query/fetchers/entities.js +65 -0
- package/dist/query/fetchers/entities.js.map +1 -0
- package/dist/query/fetchers/external-accounts.js +74 -0
- package/dist/query/fetchers/external-accounts.js.map +1 -0
- package/dist/query/fetchers/follow-extras.js +38 -0
- package/dist/query/fetchers/follow-extras.js.map +1 -0
- package/dist/query/fetchers/follow.js +105 -0
- package/dist/query/fetchers/follow.js.map +1 -0
- package/dist/query/fetchers/get-profile-view.js +21 -0
- package/dist/query/fetchers/get-profile-view.js.map +1 -0
- package/dist/query/fetchers/github-prs.js +45 -0
- package/dist/query/fetchers/github-prs.js.map +1 -0
- package/dist/query/fetchers/inbox.js +29 -0
- package/dist/query/fetchers/inbox.js.map +1 -0
- package/dist/query/fetchers/index.d.ts +2 -2
- package/dist/query/fetchers/index.js +360 -2045
- package/dist/query/fetchers/index.js.map +1 -1
- package/dist/query/fetchers/investments.js +18 -0
- package/dist/query/fetchers/investments.js.map +1 -0
- package/dist/query/fetchers/keytrace-claims.js +23 -0
- package/dist/query/fetchers/keytrace-claims.js.map +1 -0
- package/dist/query/fetchers/marque-domains.js +23 -0
- package/dist/query/fetchers/marque-domains.js.map +1 -0
- package/dist/query/fetchers/network-map.js +36 -0
- package/dist/query/fetchers/network-map.js.map +1 -0
- package/dist/query/fetchers/org.js +48 -0
- package/dist/query/fetchers/org.js.map +1 -0
- package/dist/query/fetchers/positions.js +77 -0
- package/dist/query/fetchers/positions.js.map +1 -0
- package/dist/query/fetchers/profile-completeness.js +45 -0
- package/dist/query/fetchers/profile-completeness.js.map +1 -0
- package/dist/query/fetchers/profile-items-hide.js +36 -0
- package/dist/query/fetchers/profile-items-hide.js.map +1 -0
- package/dist/query/fetchers/profile-locations.js +23 -0
- package/dist/query/fetchers/profile-locations.js.map +1 -0
- package/dist/query/fetchers/profile-mutations.js +82 -0
- package/dist/query/fetchers/profile-mutations.js.map +1 -0
- package/dist/query/fetchers/profile-summary.js +14 -0
- package/dist/query/fetchers/profile-summary.js.map +1 -0
- package/dist/query/fetchers/profile.js +31 -0
- package/dist/query/fetchers/profile.js.map +1 -0
- package/dist/query/fetchers/publications.js +66 -0
- package/dist/query/fetchers/publications.js.map +1 -0
- package/dist/query/fetchers/quoted-posts.js +40 -0
- package/dist/query/fetchers/quoted-posts.js.map +1 -0
- package/dist/query/fetchers/reactions.js +85 -0
- package/dist/query/fetchers/reactions.js.map +1 -0
- package/dist/query/fetchers/received-endorsements.js +20 -0
- package/dist/query/fetchers/received-endorsements.js.map +1 -0
- package/dist/query/fetchers/reciprocity.js +23 -0
- package/dist/query/fetchers/reciprocity.js.map +1 -0
- package/dist/query/fetchers/records.js +27 -0
- package/dist/query/fetchers/records.js.map +1 -0
- package/dist/query/fetchers/repo-inventory.js +23 -0
- package/dist/query/fetchers/repo-inventory.js.map +1 -0
- package/dist/query/fetchers/roadmap.js +73 -0
- package/dist/query/fetchers/roadmap.js.map +1 -0
- package/dist/query/fetchers/rpg.js +36 -0
- package/dist/query/fetchers/rpg.js.map +1 -0
- package/dist/query/fetchers/search.js +78 -0
- package/dist/query/fetchers/search.js.map +1 -0
- package/dist/query/fetchers/section-primary.js +23 -0
- package/dist/query/fetchers/section-primary.js.map +1 -0
- package/dist/query/fetchers/skills.js +30 -0
- package/dist/query/fetchers/skills.js.map +1 -0
- package/dist/query/fetchers/speakers.js +42 -0
- package/dist/query/fetchers/speakers.js.map +1 -0
- package/dist/query/fetchers/stats.js +16 -0
- package/dist/query/fetchers/stats.js.map +1 -0
- package/dist/query/fetchers/stream.js +30 -0
- package/dist/query/fetchers/stream.js.map +1 -0
- package/dist/query/fetchers/unlinked-positions.js +30 -0
- package/dist/query/fetchers/unlinked-positions.js.map +1 -0
- package/dist/query/hooks/index.d.ts +3 -3
- package/dist/query/hooks/index.js +283 -3555
- package/dist/query/hooks/index.js.map +1 -1
- package/dist/query/hooks/use-accounts.js +19 -0
- package/dist/query/hooks/use-accounts.js.map +1 -0
- package/dist/query/hooks/use-activity-items-hide.js +52 -0
- package/dist/query/hooks/use-activity-items-hide.js.map +1 -0
- package/dist/query/hooks/use-activity.js +44 -0
- package/dist/query/hooks/use-activity.js.map +1 -0
- package/dist/query/hooks/use-admin-review-queues.js +21 -0
- package/dist/query/hooks/use-admin-review-queues.js.map +1 -0
- package/dist/query/hooks/use-apps.js +31 -0
- package/dist/query/hooks/use-apps.js.map +1 -0
- package/dist/query/hooks/use-bsky-content-prefs.js +45 -0
- package/dist/query/hooks/use-bsky-content-prefs.js.map +1 -0
- package/dist/query/hooks/use-confirmations.js +121 -0
- package/dist/query/hooks/use-confirmations.js.map +1 -0
- package/dist/query/hooks/use-create-position.js +28 -0
- package/dist/query/hooks/use-create-position.js.map +1 -0
- package/dist/query/hooks/use-destructive.js +63 -0
- package/dist/query/hooks/use-destructive.js.map +1 -0
- package/dist/query/hooks/use-discovery.js +53 -0
- package/dist/query/hooks/use-discovery.js.map +1 -0
- package/dist/query/hooks/use-education-mutations.js +67 -0
- package/dist/query/hooks/use-education-mutations.js.map +1 -0
- package/dist/query/hooks/use-endorsement-inbox.js +80 -0
- package/dist/query/hooks/use-endorsement-inbox.js.map +1 -0
- package/dist/query/hooks/use-endorsement-mutations.js +33 -0
- package/dist/query/hooks/use-endorsement-mutations.js.map +1 -0
- package/dist/query/hooks/use-endorsement.js +20 -0
- package/dist/query/hooks/use-endorsement.js.map +1 -0
- package/dist/query/hooks/use-entity-search.js +73 -0
- package/dist/query/hooks/use-entity-search.js.map +1 -0
- package/dist/query/hooks/use-external-accounts.js +143 -0
- package/dist/query/hooks/use-external-accounts.js.map +1 -0
- package/dist/query/hooks/use-feature-allowlist.js +104 -0
- package/dist/query/hooks/use-feature-allowlist.js.map +1 -0
- package/dist/query/hooks/use-follow-extras.js +38 -0
- package/dist/query/hooks/use-follow-extras.js.map +1 -0
- package/dist/query/hooks/use-follow.js +113 -0
- package/dist/query/hooks/use-follow.js.map +1 -0
- package/dist/query/hooks/use-get-profile-view.js +20 -0
- package/dist/query/hooks/use-get-profile-view.js.map +1 -0
- package/dist/query/hooks/use-github-prs.js +21 -0
- package/dist/query/hooks/use-github-prs.js.map +1 -0
- package/dist/query/hooks/use-inbox.js +19 -0
- package/dist/query/hooks/use-inbox.js.map +1 -0
- package/dist/query/hooks/use-investment-mutations.js +65 -0
- package/dist/query/hooks/use-investment-mutations.js.map +1 -0
- package/dist/query/hooks/use-keytrace-claims.js +50 -0
- package/dist/query/hooks/use-keytrace-claims.js.map +1 -0
- package/dist/query/hooks/use-location-mutations.js +71 -0
- package/dist/query/hooks/use-location-mutations.js.map +1 -0
- package/dist/query/hooks/use-marque-domains.js +50 -0
- package/dist/query/hooks/use-marque-domains.js.map +1 -0
- package/dist/query/hooks/use-org-claim.js +29 -0
- package/dist/query/hooks/use-org-claim.js.map +1 -0
- package/dist/query/hooks/use-org-domains.js +28 -0
- package/dist/query/hooks/use-org-domains.js.map +1 -0
- package/dist/query/hooks/use-org-notification-emails.js +28 -0
- package/dist/query/hooks/use-org-notification-emails.js.map +1 -0
- package/dist/query/hooks/use-org-profile-settings.js +29 -0
- package/dist/query/hooks/use-org-profile-settings.js.map +1 -0
- package/dist/query/hooks/use-org-profile.js +21 -0
- package/dist/query/hooks/use-org-profile.js.map +1 -0
- package/dist/query/hooks/use-position-mutations.js +128 -0
- package/dist/query/hooks/use-position-mutations.js.map +1 -0
- package/dist/query/hooks/use-profile-completeness.js +21 -0
- package/dist/query/hooks/use-profile-completeness.js.map +1 -0
- package/dist/query/hooks/use-profile-items-hide.js +53 -0
- package/dist/query/hooks/use-profile-items-hide.js.map +1 -0
- package/dist/query/hooks/use-profile-mutations.js +143 -0
- package/dist/query/hooks/use-profile-mutations.js.map +1 -0
- package/dist/query/hooks/use-profile.js +30 -0
- package/dist/query/hooks/use-profile.js.map +1 -0
- package/dist/query/hooks/use-publication-mutations.js +90 -0
- package/dist/query/hooks/use-publication-mutations.js.map +1 -0
- package/dist/query/hooks/use-reaction-mutations.js +48 -0
- package/dist/query/hooks/use-reaction-mutations.js.map +1 -0
- package/dist/query/hooks/use-reactions.js +32 -0
- package/dist/query/hooks/use-reactions.js.map +1 -0
- package/dist/query/hooks/use-received-endorsements.js +23 -0
- package/dist/query/hooks/use-received-endorsements.js.map +1 -0
- package/dist/query/hooks/use-reciprocity.js +19 -0
- package/dist/query/hooks/use-reciprocity.js.map +1 -0
- package/dist/query/hooks/use-record-mutations.js +67 -0
- package/dist/query/hooks/use-record-mutations.js.map +1 -0
- package/dist/query/hooks/use-repo-inventory.js +43 -0
- package/dist/query/hooks/use-repo-inventory.js.map +1 -0
- package/dist/query/hooks/use-roadmap-mutations.js +51 -0
- package/dist/query/hooks/use-roadmap-mutations.js.map +1 -0
- package/dist/query/hooks/use-roadmap.js +31 -0
- package/dist/query/hooks/use-roadmap.js.map +1 -0
- package/dist/query/hooks/use-search.js +63 -0
- package/dist/query/hooks/use-search.js.map +1 -0
- package/dist/query/hooks/use-section-primary-mutations.js +53 -0
- package/dist/query/hooks/use-section-primary-mutations.js.map +1 -0
- package/dist/query/hooks/use-skill-mutations.js +91 -0
- package/dist/query/hooks/use-skill-mutations.js.map +1 -0
- package/dist/query/hooks/use-stats.js +19 -0
- package/dist/query/hooks/use-stats.js.map +1 -0
- package/dist/query/hooks/use-stream.js +20 -0
- package/dist/query/hooks/use-stream.js.map +1 -0
- package/dist/query/hooks/use-unlinked-positions.js +45 -0
- package/dist/query/hooks/use-unlinked-positions.js.map +1 -0
- package/dist/query/index.d.ts +4 -4
- package/dist/query/index.js +685 -3744
- package/dist/query/index.js.map +1 -1
- package/dist/query/keys.js +138 -0
- package/dist/query/keys.js.map +1 -0
- package/dist/repo/groups.js +81 -0
- package/dist/repo/groups.js.map +1 -0
- package/dist/repo/index.js +9 -0
- package/dist/repo/index.js.map +1 -0
- package/dist/repo/labels.js +121 -0
- package/dist/repo/labels.js.map +1 -0
- package/dist/repo/types.js +1 -0
- package/dist/repo/types.js.map +1 -0
- package/dist/resume/index.js +5 -179
- package/dist/resume/index.js.map +1 -1
- package/dist/resume/json-resume.js +153 -0
- package/dist/resume/json-resume.js.map +1 -0
- package/dist/roadmap/index.js +101 -0
- package/dist/roadmap/index.js.map +1 -0
- package/dist/rpg/catalog.js +101 -0
- package/dist/rpg/catalog.js.map +1 -0
- package/dist/rpg/index.js +13 -116
- package/dist/rpg/index.js.map +1 -1
- package/dist/rpg/unlocks.js +21 -0
- package/dist/rpg/unlocks.js.map +1 -0
- package/dist/schemas/blob-ref.js +12 -0
- package/dist/schemas/blob-ref.js.map +1 -0
- package/dist/schemas/confirmation.js +23 -0
- package/dist/schemas/confirmation.js.map +1 -0
- package/dist/schemas/endorsement-confirmation.js +18 -0
- package/dist/schemas/endorsement-confirmation.js.map +1 -0
- package/dist/schemas/endorsement.js +19 -0
- package/dist/schemas/endorsement.js.map +1 -0
- package/dist/schemas/entity.js +74 -0
- package/dist/schemas/entity.js.map +1 -0
- package/dist/schemas/feed.js +73 -0
- package/dist/schemas/feed.js.map +1 -0
- package/dist/schemas/follow-profile.js +32 -0
- package/dist/schemas/follow-profile.js.map +1 -0
- package/dist/schemas/graph-follow.js +19 -0
- package/dist/schemas/graph-follow.js.map +1 -0
- package/dist/schemas/index.js +164 -629
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/org-employment-attestation.js +28 -0
- package/dist/schemas/org-employment-attestation.js.map +1 -0
- package/dist/schemas/org-profile.js +64 -0
- package/dist/schemas/org-profile.js.map +1 -0
- package/dist/schemas/profile-certification.js +28 -0
- package/dist/schemas/profile-certification.js.map +1 -0
- package/dist/schemas/profile-course.js +32 -0
- package/dist/schemas/profile-course.js.map +1 -0
- package/dist/schemas/profile-education.js +33 -0
- package/dist/schemas/profile-education.js.map +1 -0
- package/dist/schemas/profile-external-account.js +15 -0
- package/dist/schemas/profile-external-account.js.map +1 -0
- package/dist/schemas/profile-honor.js +18 -0
- package/dist/schemas/profile-honor.js.map +1 -0
- package/dist/schemas/profile-investment.js +48 -0
- package/dist/schemas/profile-investment.js.map +1 -0
- package/dist/schemas/profile-involvement.js +47 -0
- package/dist/schemas/profile-involvement.js.map +1 -0
- package/dist/schemas/profile-language.js +12 -0
- package/dist/schemas/profile-language.js.map +1 -0
- package/dist/schemas/profile-position.js +42 -0
- package/dist/schemas/profile-position.js.map +1 -0
- package/dist/schemas/profile-presentation-delivery.js +38 -0
- package/dist/schemas/profile-presentation-delivery.js.map +1 -0
- package/dist/schemas/profile-presentation.js +36 -0
- package/dist/schemas/profile-presentation.js.map +1 -0
- package/dist/schemas/profile-project.js +48 -0
- package/dist/schemas/profile-project.js.map +1 -0
- package/dist/schemas/profile-publication.js +30 -0
- package/dist/schemas/profile-publication.js.map +1 -0
- package/dist/schemas/profile-self.js +22 -0
- package/dist/schemas/profile-self.js.map +1 -0
- package/dist/schemas/profile-skill.js +13 -0
- package/dist/schemas/profile-skill.js.map +1 -0
- package/dist/schemas/profile-volunteering.js +20 -0
- package/dist/schemas/profile-volunteering.js.map +1 -0
- package/dist/schemas/shared.js +56 -0
- package/dist/schemas/shared.js.map +1 -0
- package/dist/schemas/write/certification.js +16 -0
- package/dist/schemas/write/certification.js.map +1 -0
- package/dist/schemas/write/course.js +36 -0
- package/dist/schemas/write/course.js.map +1 -0
- package/dist/schemas/write/education.js +18 -0
- package/dist/schemas/write/education.js.map +1 -0
- package/dist/schemas/write/external-account.js +13 -0
- package/dist/schemas/write/external-account.js.map +1 -0
- package/dist/schemas/write/honor.js +14 -0
- package/dist/schemas/write/honor.js.map +1 -0
- package/dist/schemas/write/index.d.ts +1 -1
- package/dist/schemas/write/index.js +89 -593
- package/dist/schemas/write/index.js.map +1 -1
- package/dist/schemas/write/investment.js +32 -0
- package/dist/schemas/write/investment.js.map +1 -0
- package/dist/schemas/write/involvement.js +34 -0
- package/dist/schemas/write/involvement.js.map +1 -0
- package/dist/schemas/write/language.js +10 -0
- package/dist/schemas/write/language.js.map +1 -0
- package/dist/schemas/write/org-claim.js +56 -0
- package/dist/schemas/write/org-claim.js.map +1 -0
- package/dist/schemas/write/org-employment-attestation.js +19 -0
- package/dist/schemas/write/org-employment-attestation.js.map +1 -0
- package/dist/schemas/write/org-profile.js +54 -0
- package/dist/schemas/write/org-profile.js.map +1 -0
- package/dist/schemas/write/org-settings.js +81 -0
- package/dist/schemas/write/org-settings.js.map +1 -0
- package/dist/schemas/write/position.js +24 -0
- package/dist/schemas/write/position.js.map +1 -0
- package/dist/schemas/write/presentation-delivery.js +34 -0
- package/dist/schemas/write/presentation-delivery.js.map +1 -0
- package/dist/schemas/write/presentation.js +23 -0
- package/dist/schemas/write/presentation.js.map +1 -0
- package/dist/schemas/write/profile-location.js +21 -0
- package/dist/schemas/write/profile-location.js.map +1 -0
- package/dist/schemas/write/profile-self.js +27 -0
- package/dist/schemas/write/profile-self.js.map +1 -0
- package/dist/schemas/write/project.js +27 -0
- package/dist/schemas/write/project.js.map +1 -0
- package/dist/schemas/write/publication.js +41 -0
- package/dist/schemas/write/publication.js.map +1 -0
- package/dist/schemas/write/shared.js +96 -0
- package/dist/schemas/write/shared.js.map +1 -0
- package/dist/schemas/write/skill.js +18 -0
- package/dist/schemas/write/skill.js.map +1 -0
- package/dist/schemas/write/volunteering.js +16 -0
- package/dist/schemas/write/volunteering.js.map +1 -0
- package/dist/stream/activity-item.js +1 -0
- package/dist/stream/activity-item.js.map +1 -0
- package/dist/stream/index.js +49 -0
- package/dist/stream/index.js.map +1 -0
- package/dist/stream/stream-card-vm-schema.js +265 -0
- package/dist/stream/stream-card-vm-schema.js.map +1 -0
- package/dist/stream/stream-card-vm.js +1 -0
- package/dist/stream/stream-card-vm.js.map +1 -0
- package/dist/stream/to-stream-card-vm.js +793 -0
- package/dist/stream/to-stream-card-vm.js.map +1 -0
- package/dist/stream/two-tier.js +30 -0
- package/dist/stream/two-tier.js.map +1 -0
- package/dist/stream/verbs.js +120 -0
- package/dist/stream/verbs.js.map +1 -0
- package/dist/taxonomy/activity-tiers.js +956 -0
- package/dist/taxonomy/activity-tiers.js.map +1 -0
- package/dist/taxonomy/app-categories.js +42 -0
- package/dist/taxonomy/app-categories.js.map +1 -0
- package/dist/taxonomy/app-category-map.js +166 -0
- package/dist/taxonomy/app-category-map.js.map +1 -0
- package/dist/taxonomy/artifact-link-kind.js +29 -0
- package/dist/taxonomy/artifact-link-kind.js.map +1 -0
- package/dist/taxonomy/calendar-event.js +28 -0
- package/dist/taxonomy/calendar-event.js.map +1 -0
- package/dist/taxonomy/continents.js +215 -0
- package/dist/taxonomy/continents.js.map +1 -0
- package/dist/taxonomy/countries.js +203 -0
- package/dist/taxonomy/countries.js.map +1 -0
- package/dist/taxonomy/course-role.js +37 -0
- package/dist/taxonomy/course-role.js.map +1 -0
- package/dist/taxonomy/employment-type.js +82 -0
- package/dist/taxonomy/employment-type.js.map +1 -0
- package/dist/taxonomy/eqf-level.js +59 -0
- package/dist/taxonomy/eqf-level.js.map +1 -0
- package/dist/taxonomy/index.js +263 -0
- package/dist/taxonomy/index.js.map +1 -0
- package/dist/taxonomy/industry-taxonomy.js +281 -0
- package/dist/taxonomy/industry-taxonomy.js.map +1 -0
- package/dist/taxonomy/investment.js +54 -0
- package/dist/taxonomy/investment.js.map +1 -0
- package/dist/taxonomy/involvement-kind.js +30 -0
- package/dist/taxonomy/involvement-kind.js.map +1 -0
- package/dist/taxonomy/open-to.js +128 -0
- package/dist/taxonomy/open-to.js.map +1 -0
- package/dist/taxonomy/platforms.js +56 -0
- package/dist/taxonomy/platforms.js.map +1 -0
- package/dist/taxonomy/presentation-link-type.js +22 -0
- package/dist/taxonomy/presentation-link-type.js.map +1 -0
- package/dist/taxonomy/presentation-role.js +21 -0
- package/dist/taxonomy/presentation-role.js.map +1 -0
- package/dist/taxonomy/publication-type.js +54 -0
- package/dist/taxonomy/publication-type.js.map +1 -0
- package/dist/taxonomy/relational.js +25 -0
- package/dist/taxonomy/relational.js.map +1 -0
- package/dist/taxonomy/search-filter-defs.js +66 -0
- package/dist/taxonomy/search-filter-defs.js.map +1 -0
- package/dist/taxonomy/skill-categories.js +28 -0
- package/dist/taxonomy/skill-categories.js.map +1 -0
- package/dist/taxonomy/skill-display-groups.js +12 -0
- package/dist/taxonomy/skill-display-groups.js.map +1 -0
- package/dist/taxonomy/skill-grouping.js +90 -0
- package/dist/taxonomy/skill-grouping.js.map +1 -0
- package/dist/taxonomy/verification-providers.js +69 -0
- package/dist/taxonomy/verification-providers.js.map +1 -0
- package/dist/taxonomy/workplace-type.js +38 -0
- package/dist/taxonomy/workplace-type.js.map +1 -0
- package/dist/tokens/colors.js +11 -0
- package/dist/tokens/colors.js.map +1 -0
- package/dist/tokens/icons.js +15 -0
- package/dist/tokens/icons.js.map +1 -0
- package/dist/tokens/index.js +10 -39
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/typography.js +23 -0
- package/dist/tokens/typography.js.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/profile-view.js +1 -0
- package/dist/types/profile-view.js.map +1 -0
- package/dist/{use-org-notification-emails-0hjt-dEw.d.ts → use-org-notification-emails-CWWi1D8t.d.ts} +2 -2
- package/package.json +4 -3
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// src/taxonomy/investment.ts
|
|
2
|
+
var INVESTMENT_ROLE_OPTIONS = [
|
|
3
|
+
{ value: "id.sifa.defs#angelInvestment", label: "Angel" },
|
|
4
|
+
{ value: "id.sifa.defs#syndicateInvestment", label: "Syndicate member" },
|
|
5
|
+
{ value: "id.sifa.defs#limitedPartner", label: "Limited partner" },
|
|
6
|
+
{ value: "id.sifa.defs#otherInvestment", label: "Other" }
|
|
7
|
+
];
|
|
8
|
+
var INVESTMENT_STAGE_OPTIONS = [
|
|
9
|
+
{ value: "id.sifa.defs#stagePreSeed", label: "Pre-seed" },
|
|
10
|
+
{ value: "id.sifa.defs#stageSeed", label: "Seed" },
|
|
11
|
+
{ value: "id.sifa.defs#stageSeriesA", label: "Series A" },
|
|
12
|
+
{ value: "id.sifa.defs#stageSeriesB", label: "Series B" },
|
|
13
|
+
{ value: "id.sifa.defs#stageSeriesCPlus", label: "Series C or later" },
|
|
14
|
+
{ value: "id.sifa.defs#stageGrowth", label: "Growth" },
|
|
15
|
+
{ value: "id.sifa.defs#stageSecondary", label: "Secondary" },
|
|
16
|
+
{ value: "id.sifa.defs#stageOther", label: "Other" }
|
|
17
|
+
];
|
|
18
|
+
var INVESTMENT_STATUS_OPTIONS = [
|
|
19
|
+
{ value: "id.sifa.defs#investmentActive", label: "Active" },
|
|
20
|
+
{ value: "id.sifa.defs#investmentExited", label: "Exited" },
|
|
21
|
+
{ value: "id.sifa.defs#investmentWrittenOff", label: "Written off" },
|
|
22
|
+
{ value: "id.sifa.defs#investmentUndisclosed", label: "Undisclosed" }
|
|
23
|
+
];
|
|
24
|
+
function toLabels(options) {
|
|
25
|
+
return Object.fromEntries(options.map((o) => [o.value, o.label]));
|
|
26
|
+
}
|
|
27
|
+
var INVESTMENT_ROLE_LABELS = toLabels(INVESTMENT_ROLE_OPTIONS);
|
|
28
|
+
var INVESTMENT_STAGE_LABELS = toLabels(INVESTMENT_STAGE_OPTIONS);
|
|
29
|
+
var INVESTMENT_STATUS_LABELS = toLabels(INVESTMENT_STATUS_OPTIONS);
|
|
30
|
+
function resolve(labels, value) {
|
|
31
|
+
if (!value) return void 0;
|
|
32
|
+
return labels[value] ?? value;
|
|
33
|
+
}
|
|
34
|
+
function getInvestmentRoleLabel(value) {
|
|
35
|
+
return resolve(INVESTMENT_ROLE_LABELS, value);
|
|
36
|
+
}
|
|
37
|
+
function getInvestmentStageLabel(value) {
|
|
38
|
+
return resolve(INVESTMENT_STAGE_LABELS, value);
|
|
39
|
+
}
|
|
40
|
+
function getInvestmentStatusLabel(value) {
|
|
41
|
+
return resolve(INVESTMENT_STATUS_LABELS, value);
|
|
42
|
+
}
|
|
43
|
+
export {
|
|
44
|
+
INVESTMENT_ROLE_LABELS,
|
|
45
|
+
INVESTMENT_ROLE_OPTIONS,
|
|
46
|
+
INVESTMENT_STAGE_LABELS,
|
|
47
|
+
INVESTMENT_STAGE_OPTIONS,
|
|
48
|
+
INVESTMENT_STATUS_LABELS,
|
|
49
|
+
INVESTMENT_STATUS_OPTIONS,
|
|
50
|
+
getInvestmentRoleLabel,
|
|
51
|
+
getInvestmentStageLabel,
|
|
52
|
+
getInvestmentStatusLabel
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=investment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/investment.ts"],"sourcesContent":["/**\n * Investment taxonomy. Mirrors `id.sifa.defs#investmentRole`, `#investmentStage`\n * and `#investmentStatus` from sifa-lexicons.\n *\n * These describe a capital position: money the person put in. Roles with duties --\n * board seats, advisory work -- are positions, not investments, and carry their own\n * `employmentType` values instead.\n */\n\nexport interface InvestmentOption {\n value: string;\n label: string;\n}\n\n/**\n * How the capital went in.\n *\n * General partner is deliberately absent. Running a fund is a role, recorded as an\n * `id.sifa.profile.position`, and offering it here would invite listing a fund's\n * entire portfolio as personal cheques. A partner's own commitment to their fund is\n * a `limitedPartner` entry naming that fund.\n */\nexport const INVESTMENT_ROLE_OPTIONS: InvestmentOption[] = [\n { value: 'id.sifa.defs#angelInvestment', label: 'Angel' },\n { value: 'id.sifa.defs#syndicateInvestment', label: 'Syndicate member' },\n { value: 'id.sifa.defs#limitedPartner', label: 'Limited partner' },\n { value: 'id.sifa.defs#otherInvestment', label: 'Other' },\n];\n\n/** The company's funding stage at the time of the investment, not its stage today. */\nexport const INVESTMENT_STAGE_OPTIONS: InvestmentOption[] = [\n { value: 'id.sifa.defs#stagePreSeed', label: 'Pre-seed' },\n { value: 'id.sifa.defs#stageSeed', label: 'Seed' },\n { value: 'id.sifa.defs#stageSeriesA', label: 'Series A' },\n { value: 'id.sifa.defs#stageSeriesB', label: 'Series B' },\n { value: 'id.sifa.defs#stageSeriesCPlus', label: 'Series C or later' },\n { value: 'id.sifa.defs#stageGrowth', label: 'Growth' },\n { value: 'id.sifa.defs#stageSecondary', label: 'Secondary' },\n { value: 'id.sifa.defs#stageOther', label: 'Other' },\n];\n\n/**\n * Where the position stands now. Recording a write-off is showing your work; nothing\n * in Sifa derives a hit rate or a return from these values.\n */\nexport const INVESTMENT_STATUS_OPTIONS: InvestmentOption[] = [\n { value: 'id.sifa.defs#investmentActive', label: 'Active' },\n { value: 'id.sifa.defs#investmentExited', label: 'Exited' },\n { value: 'id.sifa.defs#investmentWrittenOff', label: 'Written off' },\n { value: 'id.sifa.defs#investmentUndisclosed', label: 'Undisclosed' },\n];\n\nfunction toLabels(options: InvestmentOption[]): Record<string, string> {\n return Object.fromEntries(options.map((o) => [o.value, o.label]));\n}\n\nexport const INVESTMENT_ROLE_LABELS: Record<string, string> = toLabels(INVESTMENT_ROLE_OPTIONS);\nexport const INVESTMENT_STAGE_LABELS: Record<string, string> = toLabels(INVESTMENT_STAGE_OPTIONS);\nexport const INVESTMENT_STATUS_LABELS: Record<string, string> = toLabels(INVESTMENT_STATUS_OPTIONS);\n\nfunction resolve(\n labels: Record<string, string>,\n value: string | undefined | null,\n): string | undefined {\n if (!value) return undefined;\n return labels[value] ?? value;\n}\n\n/** Resolve a label for an investment-role token. Falls back to the raw value. */\nexport function getInvestmentRoleLabel(value: string | undefined | null): string | undefined {\n return resolve(INVESTMENT_ROLE_LABELS, value);\n}\n\n/** Resolve a label for an investment-stage token. Falls back to the raw value. */\nexport function getInvestmentStageLabel(value: string | undefined | null): string | undefined {\n return resolve(INVESTMENT_STAGE_LABELS, value);\n}\n\n/** Resolve a label for an investment-status token. Falls back to the raw value. */\nexport function getInvestmentStatusLabel(value: string | undefined | null): string | undefined {\n return resolve(INVESTMENT_STATUS_LABELS, value);\n}\n"],"mappings":";AAsBO,IAAM,0BAA8C;AAAA,EACzD,EAAE,OAAO,gCAAgC,OAAO,QAAQ;AAAA,EACxD,EAAE,OAAO,oCAAoC,OAAO,mBAAmB;AAAA,EACvE,EAAE,OAAO,+BAA+B,OAAO,kBAAkB;AAAA,EACjE,EAAE,OAAO,gCAAgC,OAAO,QAAQ;AAC1D;AAGO,IAAM,2BAA+C;AAAA,EAC1D,EAAE,OAAO,6BAA6B,OAAO,WAAW;AAAA,EACxD,EAAE,OAAO,0BAA0B,OAAO,OAAO;AAAA,EACjD,EAAE,OAAO,6BAA6B,OAAO,WAAW;AAAA,EACxD,EAAE,OAAO,6BAA6B,OAAO,WAAW;AAAA,EACxD,EAAE,OAAO,iCAAiC,OAAO,oBAAoB;AAAA,EACrE,EAAE,OAAO,4BAA4B,OAAO,SAAS;AAAA,EACrD,EAAE,OAAO,+BAA+B,OAAO,YAAY;AAAA,EAC3D,EAAE,OAAO,2BAA2B,OAAO,QAAQ;AACrD;AAMO,IAAM,4BAAgD;AAAA,EAC3D,EAAE,OAAO,iCAAiC,OAAO,SAAS;AAAA,EAC1D,EAAE,OAAO,iCAAiC,OAAO,SAAS;AAAA,EAC1D,EAAE,OAAO,qCAAqC,OAAO,cAAc;AAAA,EACnE,EAAE,OAAO,sCAAsC,OAAO,cAAc;AACtE;AAEA,SAAS,SAAS,SAAqD;AACrE,SAAO,OAAO,YAAY,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAClE;AAEO,IAAM,yBAAiD,SAAS,uBAAuB;AACvF,IAAM,0BAAkD,SAAS,wBAAwB;AACzF,IAAM,2BAAmD,SAAS,yBAAyB;AAElG,SAAS,QACP,QACA,OACoB;AACpB,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,OAAO,KAAK,KAAK;AAC1B;AAGO,SAAS,uBAAuB,OAAsD;AAC3F,SAAO,QAAQ,wBAAwB,KAAK;AAC9C;AAGO,SAAS,wBAAwB,OAAsD;AAC5F,SAAO,QAAQ,yBAAyB,KAAK;AAC/C;AAGO,SAAS,yBAAyB,OAAsD;AAC7F,SAAO,QAAQ,0BAA0B,KAAK;AAChD;","names":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// src/taxonomy/involvement-kind.ts
|
|
2
|
+
var INVOLVEMENT_KIND_OPTIONS = [
|
|
3
|
+
{ value: "id.sifa.defs#involvementOpenSource", label: "Open source", heading: "Open Source" },
|
|
4
|
+
{ value: "id.sifa.defs#involvementCommunity", label: "Community", heading: "Community" },
|
|
5
|
+
{ value: "id.sifa.defs#involvementCharity", label: "Volunteering", heading: "Volunteering" },
|
|
6
|
+
{ value: "id.sifa.defs#involvementCivic", label: "Civic", heading: "Civic" },
|
|
7
|
+
{ value: "id.sifa.defs#involvementOther", label: "Other", heading: "Other" }
|
|
8
|
+
];
|
|
9
|
+
var INVOLVEMENT_KIND_LABELS = Object.fromEntries(
|
|
10
|
+
INVOLVEMENT_KIND_OPTIONS.map((o) => [o.value, o.label])
|
|
11
|
+
);
|
|
12
|
+
var INVOLVEMENT_KIND_HEADINGS = Object.fromEntries(
|
|
13
|
+
INVOLVEMENT_KIND_OPTIONS.map((o) => [o.value, o.heading])
|
|
14
|
+
);
|
|
15
|
+
function getInvolvementKindLabel(value) {
|
|
16
|
+
if (!value) return void 0;
|
|
17
|
+
return INVOLVEMENT_KIND_LABELS[value] ?? value;
|
|
18
|
+
}
|
|
19
|
+
function getInvolvementKindHeading(value) {
|
|
20
|
+
if (!value) return "Other";
|
|
21
|
+
return INVOLVEMENT_KIND_HEADINGS[value] ?? "Other";
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
INVOLVEMENT_KIND_HEADINGS,
|
|
25
|
+
INVOLVEMENT_KIND_LABELS,
|
|
26
|
+
INVOLVEMENT_KIND_OPTIONS,
|
|
27
|
+
getInvolvementKindHeading,
|
|
28
|
+
getInvolvementKindLabel
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=involvement-kind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/involvement-kind.ts"],"sourcesContent":["/**\n * Involvement-kind taxonomy. Mirrors `id.sifa.defs#involvementKind.knownValues`\n * from sifa-lexicons. `label` is the picker/select label; `heading` is the\n * profile section heading a record of this kind renders under (charity records,\n * including mapped legacy `volunteering`, render under \"Volunteering\").\n */\n\nexport interface InvolvementKindOption {\n value: string;\n label: string;\n heading: string;\n}\n\nexport const INVOLVEMENT_KIND_OPTIONS: InvolvementKindOption[] = [\n { value: 'id.sifa.defs#involvementOpenSource', label: 'Open source', heading: 'Open Source' },\n { value: 'id.sifa.defs#involvementCommunity', label: 'Community', heading: 'Community' },\n { value: 'id.sifa.defs#involvementCharity', label: 'Volunteering', heading: 'Volunteering' },\n { value: 'id.sifa.defs#involvementCivic', label: 'Civic', heading: 'Civic' },\n { value: 'id.sifa.defs#involvementOther', label: 'Other', heading: 'Other' },\n];\n\nexport const INVOLVEMENT_KIND_LABELS: Record<string, string> = Object.fromEntries(\n INVOLVEMENT_KIND_OPTIONS.map((o) => [o.value, o.label]),\n);\n\nexport const INVOLVEMENT_KIND_HEADINGS: Record<string, string> = Object.fromEntries(\n INVOLVEMENT_KIND_OPTIONS.map((o) => [o.value, o.heading]),\n);\n\n/** Resolve the select label for an involvement-kind token. Falls back to the raw value. */\nexport function getInvolvementKindLabel(value: string | undefined | null): string | undefined {\n if (!value) return undefined;\n return INVOLVEMENT_KIND_LABELS[value] ?? value;\n}\n\n/**\n * Resolve the display-section heading for an involvement-kind token. Unknown\n * kinds (including a future token an older client hasn't learned) fall under\n * \"Other\" so a record is never dropped from the profile.\n */\nexport function getInvolvementKindHeading(value: string | undefined | null): string {\n if (!value) return 'Other';\n return INVOLVEMENT_KIND_HEADINGS[value] ?? 'Other';\n}\n"],"mappings":";AAaO,IAAM,2BAAoD;AAAA,EAC/D,EAAE,OAAO,sCAAsC,OAAO,eAAe,SAAS,cAAc;AAAA,EAC5F,EAAE,OAAO,qCAAqC,OAAO,aAAa,SAAS,YAAY;AAAA,EACvF,EAAE,OAAO,mCAAmC,OAAO,gBAAgB,SAAS,eAAe;AAAA,EAC3F,EAAE,OAAO,iCAAiC,OAAO,SAAS,SAAS,QAAQ;AAAA,EAC3E,EAAE,OAAO,iCAAiC,OAAO,SAAS,SAAS,QAAQ;AAC7E;AAEO,IAAM,0BAAkD,OAAO;AAAA,EACpE,yBAAyB,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AACxD;AAEO,IAAM,4BAAoD,OAAO;AAAA,EACtE,yBAAyB,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;AAC1D;AAGO,SAAS,wBAAwB,OAAsD;AAC5F,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,wBAAwB,KAAK,KAAK;AAC3C;AAOO,SAAS,0BAA0B,OAA0C;AAClF,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,0BAA0B,KAAK,KAAK;AAC7C;","names":[]}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// src/taxonomy/open-to.ts
|
|
2
|
+
var OPEN_TO_OPTIONS = [
|
|
3
|
+
{
|
|
4
|
+
value: "id.sifa.defs#fullTimeRoles",
|
|
5
|
+
labelKey: "fullTimeRoles",
|
|
6
|
+
label: "Full-time roles",
|
|
7
|
+
token: "fullTime",
|
|
8
|
+
group: "work"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
value: "id.sifa.defs#partTimeRoles",
|
|
12
|
+
labelKey: "partTimeRoles",
|
|
13
|
+
label: "Part-time roles",
|
|
14
|
+
token: "partTime",
|
|
15
|
+
group: "work"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
value: "id.sifa.defs#contractRoles",
|
|
19
|
+
labelKey: "contractRoles",
|
|
20
|
+
label: "Contract roles",
|
|
21
|
+
token: "contract",
|
|
22
|
+
group: "work"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
value: "id.sifa.defs#commissions",
|
|
26
|
+
labelKey: "commissions",
|
|
27
|
+
label: "Commissioned work",
|
|
28
|
+
token: "commissions",
|
|
29
|
+
group: "work"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
value: "id.sifa.defs#boardPositions",
|
|
33
|
+
labelKey: "boardPositions",
|
|
34
|
+
label: "Board positions",
|
|
35
|
+
token: "board",
|
|
36
|
+
group: "work"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
value: "id.sifa.defs#speakingEngagements",
|
|
40
|
+
labelKey: "speakingEngagements",
|
|
41
|
+
label: "Speaking engagements",
|
|
42
|
+
token: "speaking",
|
|
43
|
+
group: "work"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
value: "id.sifa.defs#mentoringOthers",
|
|
47
|
+
labelKey: "mentoringOthers",
|
|
48
|
+
label: "Mentoring others",
|
|
49
|
+
token: "mentor",
|
|
50
|
+
group: "mentorship"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
value: "id.sifa.defs#beingMentored",
|
|
54
|
+
labelKey: "beingMentored",
|
|
55
|
+
label: "Being mentored",
|
|
56
|
+
token: "mentee",
|
|
57
|
+
group: "mentorship"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
value: "id.sifa.defs#collaborations",
|
|
61
|
+
labelKey: "collaborations",
|
|
62
|
+
label: "Collaborations",
|
|
63
|
+
token: "collab",
|
|
64
|
+
group: "peer"
|
|
65
|
+
}
|
|
66
|
+
];
|
|
67
|
+
var OPEN_TO_TOKEN_LABELS = Object.fromEntries(
|
|
68
|
+
OPEN_TO_OPTIONS.map((o) => [o.token, o.label])
|
|
69
|
+
);
|
|
70
|
+
var OPEN_TO_GROUP_LABELS = {
|
|
71
|
+
work: "Work",
|
|
72
|
+
mentorship: "Mentorship",
|
|
73
|
+
peer: "Peer"
|
|
74
|
+
};
|
|
75
|
+
var OPEN_TO_TOKEN_TO_VALUE = Object.fromEntries(
|
|
76
|
+
OPEN_TO_OPTIONS.map((o) => [o.token, o.value])
|
|
77
|
+
);
|
|
78
|
+
var OPEN_TO_VALUE_TO_TOKEN = Object.fromEntries(
|
|
79
|
+
OPEN_TO_OPTIONS.map((o) => [o.value, o.token])
|
|
80
|
+
);
|
|
81
|
+
var OPEN_TO_TOKENS = OPEN_TO_OPTIONS.map((o) => o.token);
|
|
82
|
+
function openToTokenToValue(token) {
|
|
83
|
+
if (!token) return void 0;
|
|
84
|
+
return OPEN_TO_TOKEN_TO_VALUE[token];
|
|
85
|
+
}
|
|
86
|
+
function openToValueToToken(value) {
|
|
87
|
+
if (!value) return void 0;
|
|
88
|
+
return OPEN_TO_VALUE_TO_TOKEN[value];
|
|
89
|
+
}
|
|
90
|
+
var OPEN_TO_LEGACY_ALIASES = {
|
|
91
|
+
"id.sifa.defs#mentoring": "mentoringOthers"
|
|
92
|
+
};
|
|
93
|
+
var OPEN_TO_LABEL_KEY_MAP = {
|
|
94
|
+
...Object.fromEntries(OPEN_TO_OPTIONS.map((o) => [o.value, o.labelKey])),
|
|
95
|
+
...OPEN_TO_LEGACY_ALIASES
|
|
96
|
+
};
|
|
97
|
+
function getOpenToLabelKey(value) {
|
|
98
|
+
if (!value) return void 0;
|
|
99
|
+
return OPEN_TO_LABEL_KEY_MAP[value];
|
|
100
|
+
}
|
|
101
|
+
var OPEN_TO_LEGACY_VALUE_ALIASES = {
|
|
102
|
+
"id.sifa.defs#mentoring": "id.sifa.defs#mentoringOthers"
|
|
103
|
+
};
|
|
104
|
+
function normalizeOpenTo(values) {
|
|
105
|
+
const seen = /* @__PURE__ */ new Set();
|
|
106
|
+
const out = [];
|
|
107
|
+
for (const value of values) {
|
|
108
|
+
const canonical = OPEN_TO_LEGACY_VALUE_ALIASES[value] ?? value;
|
|
109
|
+
if (seen.has(canonical)) continue;
|
|
110
|
+
seen.add(canonical);
|
|
111
|
+
out.push(canonical);
|
|
112
|
+
}
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
export {
|
|
116
|
+
OPEN_TO_GROUP_LABELS,
|
|
117
|
+
OPEN_TO_LEGACY_VALUE_ALIASES,
|
|
118
|
+
OPEN_TO_OPTIONS,
|
|
119
|
+
OPEN_TO_TOKENS,
|
|
120
|
+
OPEN_TO_TOKEN_LABELS,
|
|
121
|
+
OPEN_TO_TOKEN_TO_VALUE,
|
|
122
|
+
OPEN_TO_VALUE_TO_TOKEN,
|
|
123
|
+
getOpenToLabelKey,
|
|
124
|
+
normalizeOpenTo,
|
|
125
|
+
openToTokenToValue,
|
|
126
|
+
openToValueToToken
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=open-to.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/open-to.ts"],"sourcesContent":["/**\n * \"Open to\" taxonomy. Mirrors `id.sifa.defs#openToWorkStatus.knownValues` from\n * sifa-lexicons. Surfaces a single source of truth for the editor (where the\n * user picks values) and the IdentityCard (where badges are rendered).\n *\n * Shape matches `INDUSTRY_OPTIONS`: `{ value, labelKey }` so consumers can run\n * `labelKey` through their own i18n layer (e.g. next-intl `useTranslations`).\n */\n\nexport type OpenToGroup = 'work' | 'mentorship' | 'peer';\n\nexport interface OpenToOption {\n value: string;\n labelKey: string;\n /**\n * Literal English label. Canonical for consumers without an i18n layer (the\n * mobile app). Web can keep resolving `labelKey`; the en.json English MUST\n * match this string so the two never drift.\n */\n label: string;\n token: string;\n group: OpenToGroup;\n}\n\nexport const OPEN_TO_OPTIONS: OpenToOption[] = [\n {\n value: 'id.sifa.defs#fullTimeRoles',\n labelKey: 'fullTimeRoles',\n label: 'Full-time roles',\n token: 'fullTime',\n group: 'work',\n },\n {\n value: 'id.sifa.defs#partTimeRoles',\n labelKey: 'partTimeRoles',\n label: 'Part-time roles',\n token: 'partTime',\n group: 'work',\n },\n {\n value: 'id.sifa.defs#contractRoles',\n labelKey: 'contractRoles',\n label: 'Contract roles',\n token: 'contract',\n group: 'work',\n },\n {\n value: 'id.sifa.defs#commissions',\n labelKey: 'commissions',\n label: 'Commissioned work',\n token: 'commissions',\n group: 'work',\n },\n {\n value: 'id.sifa.defs#boardPositions',\n labelKey: 'boardPositions',\n label: 'Board positions',\n token: 'board',\n group: 'work',\n },\n {\n value: 'id.sifa.defs#speakingEngagements',\n labelKey: 'speakingEngagements',\n label: 'Speaking engagements',\n token: 'speaking',\n group: 'work',\n },\n {\n value: 'id.sifa.defs#mentoringOthers',\n labelKey: 'mentoringOthers',\n label: 'Mentoring others',\n token: 'mentor',\n group: 'mentorship',\n },\n {\n value: 'id.sifa.defs#beingMentored',\n labelKey: 'beingMentored',\n label: 'Being mentored',\n token: 'mentee',\n group: 'mentorship',\n },\n {\n value: 'id.sifa.defs#collaborations',\n labelKey: 'collaborations',\n label: 'Collaborations',\n token: 'collab',\n group: 'peer',\n },\n];\n\n/** Map short token -> literal English label (for consumers without i18n). */\nexport const OPEN_TO_TOKEN_LABELS: Record<string, string> = Object.fromEntries(\n OPEN_TO_OPTIONS.map((o) => [o.token, o.label]),\n);\n\n/** Open-to groups in canonical display order, with their literal headers. */\nexport const OPEN_TO_GROUP_LABELS: Record<OpenToGroup, string> = {\n work: 'Work',\n mentorship: 'Mentorship',\n peer: 'Peer',\n};\n\n/** Map short token (e.g. \"fullTime\") -> lex value (e.g. \"id.sifa.defs#fullTimeRoles\"). */\nexport const OPEN_TO_TOKEN_TO_VALUE: Record<string, string> = Object.fromEntries(\n OPEN_TO_OPTIONS.map((o) => [o.token, o.value]),\n);\n\n/** Map lex value -> short token. */\nexport const OPEN_TO_VALUE_TO_TOKEN: Record<string, string> = Object.fromEntries(\n OPEN_TO_OPTIONS.map((o) => [o.value, o.token]),\n);\n\n/** All valid tokens, useful for runtime validation. */\nexport const OPEN_TO_TOKENS: readonly string[] = OPEN_TO_OPTIONS.map((o) => o.token);\n\n/** Resolve a token to its lex value, returning `undefined` if unknown. */\nexport function openToTokenToValue(token: string | undefined | null): string | undefined {\n if (!token) return undefined;\n return OPEN_TO_TOKEN_TO_VALUE[token];\n}\n\n/** Resolve a lex value to its token, returning `undefined` if unknown. */\nexport function openToValueToToken(value: string | undefined | null): string | undefined {\n if (!value) return undefined;\n return OPEN_TO_VALUE_TO_TOKEN[value];\n}\n\n/**\n * Legacy aliases — tokens the lexicon used to expose but doesn't anymore.\n * Records written before the lexicon migration may still carry them; resolve\n * them to the closest current `labelKey` for display.\n */\nconst OPEN_TO_LEGACY_ALIASES: Record<string, string> = {\n 'id.sifa.defs#mentoring': 'mentoringOthers',\n};\n\nconst OPEN_TO_LABEL_KEY_MAP: Record<string, string> = {\n ...Object.fromEntries(OPEN_TO_OPTIONS.map((o) => [o.value, o.labelKey])),\n ...OPEN_TO_LEGACY_ALIASES,\n};\n\n/**\n * Resolve a `labelKey` for an `openToWorkStatus` token. Returns `undefined`\n * for tokens not in the canonical set or the legacy alias map, so callers\n * can choose their own fallback (e.g. render the raw value).\n */\nexport function getOpenToLabelKey(value: string | undefined | null): string | undefined {\n if (!value) return undefined;\n return OPEN_TO_LABEL_KEY_MAP[value];\n}\n\n/**\n * Legacy `openToWorkStatus` values mapped to their current canonical value.\n * Mirrors {@link OPEN_TO_LEGACY_ALIASES} but resolves to the full lex value\n * (not just the `labelKey`) so it can rewrite stored records.\n */\nexport const OPEN_TO_LEGACY_VALUE_ALIASES: Record<string, string> = {\n 'id.sifa.defs#mentoring': 'id.sifa.defs#mentoringOthers',\n};\n\n/**\n * Normalize a list of `openTo` values: resolve legacy aliases to their\n * canonical value, then dedup while preserving first-seen order. Unknown tokens\n * pass through untouched (forward-compat). Used by the editor (so a legacy token\n * maps onto a real option and migrates forward on save) and by display (so a\n * record carrying both the legacy and canonical token renders a single badge).\n */\nexport function normalizeOpenTo(values: readonly string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const value of values) {\n const canonical = OPEN_TO_LEGACY_VALUE_ALIASES[value] ?? value;\n if (seen.has(canonical)) continue;\n seen.add(canonical);\n out.push(canonical);\n }\n return out;\n}\n"],"mappings":";AAwBO,IAAM,kBAAkC;AAAA,EAC7C;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AACF;AAGO,IAAM,uBAA+C,OAAO;AAAA,EACjE,gBAAgB,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AAC/C;AAGO,IAAM,uBAAoD;AAAA,EAC/D,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,MAAM;AACR;AAGO,IAAM,yBAAiD,OAAO;AAAA,EACnE,gBAAgB,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AAC/C;AAGO,IAAM,yBAAiD,OAAO;AAAA,EACnE,gBAAgB,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AAC/C;AAGO,IAAM,iBAAoC,gBAAgB,IAAI,CAAC,MAAM,EAAE,KAAK;AAG5E,SAAS,mBAAmB,OAAsD;AACvF,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,uBAAuB,KAAK;AACrC;AAGO,SAAS,mBAAmB,OAAsD;AACvF,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,uBAAuB,KAAK;AACrC;AAOA,IAAM,yBAAiD;AAAA,EACrD,0BAA0B;AAC5B;AAEA,IAAM,wBAAgD;AAAA,EACpD,GAAG,OAAO,YAAY,gBAAgB,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAAA,EACvE,GAAG;AACL;AAOO,SAAS,kBAAkB,OAAsD;AACtF,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,sBAAsB,KAAK;AACpC;AAOO,IAAM,+BAAuD;AAAA,EAClE,0BAA0B;AAC5B;AASO,SAAS,gBAAgB,QAAqC;AACnE,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,MAAgB,CAAC;AACvB,aAAW,SAAS,QAAQ;AAC1B,UAAM,YAAY,6BAA6B,KAAK,KAAK;AACzD,QAAI,KAAK,IAAI,SAAS,EAAG;AACzB,SAAK,IAAI,SAAS;AAClB,QAAI,KAAK,SAAS;AAAA,EACpB;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// src/taxonomy/platforms.ts
|
|
2
|
+
var PLATFORM_LABELS = {
|
|
3
|
+
bluesky: "Bluesky",
|
|
4
|
+
github: "GitHub",
|
|
5
|
+
codeberg: "Codeberg",
|
|
6
|
+
gitlab: "GitLab",
|
|
7
|
+
forgejo: "Forgejo",
|
|
8
|
+
gitea: "Gitea",
|
|
9
|
+
linkedin: "LinkedIn",
|
|
10
|
+
youtube: "YouTube",
|
|
11
|
+
twitter: "X (Twitter)",
|
|
12
|
+
instagram: "Instagram",
|
|
13
|
+
substack: "Substack",
|
|
14
|
+
tangled: "Tangled",
|
|
15
|
+
dns: "Domain",
|
|
16
|
+
website: "Website",
|
|
17
|
+
rss: "RSS",
|
|
18
|
+
fediverse: "Fediverse",
|
|
19
|
+
orcid: "ORCID",
|
|
20
|
+
keyoxide: "Keyoxide"
|
|
21
|
+
};
|
|
22
|
+
var PLATFORM_TOKEN_PREFIX = "id.sifa.defs#platform";
|
|
23
|
+
var PLATFORM_ALIASES = {
|
|
24
|
+
activitypub: "fediverse",
|
|
25
|
+
mastodon: "fediverse"
|
|
26
|
+
};
|
|
27
|
+
function normalizePlatformId(platform) {
|
|
28
|
+
const code = platform.startsWith(PLATFORM_TOKEN_PREFIX) ? platform.slice(PLATFORM_TOKEN_PREFIX.length).toLowerCase() : platform;
|
|
29
|
+
return PLATFORM_ALIASES[code.toLowerCase()] ?? code;
|
|
30
|
+
}
|
|
31
|
+
function isKnownPlatform(platform) {
|
|
32
|
+
return platform in PLATFORM_LABELS;
|
|
33
|
+
}
|
|
34
|
+
function getPlatformLabel(platform) {
|
|
35
|
+
const normalized = normalizePlatformId(platform);
|
|
36
|
+
return isKnownPlatform(normalized) ? PLATFORM_LABELS[normalized] : PLATFORM_LABELS.website;
|
|
37
|
+
}
|
|
38
|
+
var EXCLUDED_FROM_DROPDOWN = /* @__PURE__ */ new Set(["bluesky", "dns", "tangled"]);
|
|
39
|
+
var PLATFORM_OPTIONS = Object.entries(PLATFORM_LABELS).filter(([value]) => !EXCLUDED_FROM_DROPDOWN.has(value)).map(([value, label]) => ({ value, label }));
|
|
40
|
+
function getFaviconUrl(siteUrl) {
|
|
41
|
+
try {
|
|
42
|
+
const { hostname } = new URL(siteUrl);
|
|
43
|
+
return `https://www.google.com/s2/favicons?domain=${encodeURIComponent(hostname)}&sz=32`;
|
|
44
|
+
} catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export {
|
|
49
|
+
PLATFORM_LABELS,
|
|
50
|
+
PLATFORM_OPTIONS,
|
|
51
|
+
getFaviconUrl,
|
|
52
|
+
getPlatformLabel,
|
|
53
|
+
isKnownPlatform,
|
|
54
|
+
normalizePlatformId
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=platforms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/platforms.ts"],"sourcesContent":["/**\n * Platform identifiers, labels, and URL helpers used in profile external accounts.\n *\n * This file is intentionally data-only -- icon mapping is platform-specific\n * (React DOM components on web, React Native components on mobile) and lives\n * in the consumer.\n */\n\nexport const PLATFORM_LABELS = {\n bluesky: 'Bluesky',\n github: 'GitHub',\n codeberg: 'Codeberg',\n gitlab: 'GitLab',\n forgejo: 'Forgejo',\n gitea: 'Gitea',\n linkedin: 'LinkedIn',\n youtube: 'YouTube',\n twitter: 'X (Twitter)',\n instagram: 'Instagram',\n substack: 'Substack',\n tangled: 'Tangled',\n dns: 'Domain',\n website: 'Website',\n rss: 'RSS',\n fediverse: 'Fediverse',\n orcid: 'ORCID',\n keyoxide: 'Keyoxide',\n} as const;\n\nexport type PlatformId = keyof typeof PLATFORM_LABELS;\n\n/** Prefix of the lexicon platform knownValue tokens (e.g. id.sifa.defs#platformLinkedin). */\nconst PLATFORM_TOKEN_PREFIX = 'id.sifa.defs#platform';\n\n/**\n * Normalize a platform value to the short code used throughout the app (the\n * editor, the API `VALID_PLATFORMS` enum, the DB, and {@link PLATFORM_LABELS}).\n *\n * External-account records may carry `platform` as the raw lexicon knownValue\n * token (`id.sifa.defs#platformLinkedin`) instead of the short code — written by\n * some third-party apps. This maps the token to its lowercase suffix\n * (`linkedin`) and passes short codes / unknown values through unchanged.\n */\n/**\n * Synonyms written by third-party tools and keytrace claims (whose `type` is\n * surfaced as the platform) for the same underlying network, mapped to the\n * canonical short code. Without this, a keytrace-verified Mastodon account\n * arrives as `activitypub`, an unknown platform that renders as a generic\n * website and is skipped by Fediverse ingestion.\n */\nconst PLATFORM_ALIASES: Record<string, PlatformId> = {\n activitypub: 'fediverse',\n mastodon: 'fediverse',\n};\n\nexport function normalizePlatformId(platform: string): string {\n const code = platform.startsWith(PLATFORM_TOKEN_PREFIX)\n ? platform.slice(PLATFORM_TOKEN_PREFIX.length).toLowerCase()\n : platform;\n return PLATFORM_ALIASES[code.toLowerCase()] ?? code;\n}\n\nexport function isKnownPlatform(platform: string): platform is PlatformId {\n return platform in PLATFORM_LABELS;\n}\n\nexport function getPlatformLabel(platform: string): string {\n const normalized = normalizePlatformId(platform);\n return isKnownPlatform(normalized) ? PLATFORM_LABELS[normalized] : PLATFORM_LABELS.website;\n}\n\n/** Platforms excluded from the \"Add Links\" dropdown (auto-derived or not accepted by API). */\nconst EXCLUDED_FROM_DROPDOWN = new Set<PlatformId>(['bluesky', 'dns', 'tangled']);\n\n/** Platforms available in the \"Add Links\" dropdown. */\nexport const PLATFORM_OPTIONS: ReadonlyArray<{ value: PlatformId; label: string }> = (\n Object.entries(PLATFORM_LABELS) as [PlatformId, string][]\n)\n .filter(([value]) => !EXCLUDED_FROM_DROPDOWN.has(value))\n .map(([value, label]) => ({ value, label }));\n\n/**\n * Build a favicon URL for a given site URL using Google's public favicon service.\n * Returns `null` if the URL cannot be parsed.\n */\nexport function getFaviconUrl(siteUrl: string): string | null {\n try {\n const { hostname } = new URL(siteUrl);\n return `https://www.google.com/s2/favicons?domain=${encodeURIComponent(hostname)}&sz=32`;\n } catch {\n return null;\n }\n}\n"],"mappings":";AAQO,IAAM,kBAAkB;AAAA,EAC7B,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,UAAU;AAAA,EACV,SAAS;AAAA,EACT,KAAK;AAAA,EACL,SAAS;AAAA,EACT,KAAK;AAAA,EACL,WAAW;AAAA,EACX,OAAO;AAAA,EACP,UAAU;AACZ;AAKA,IAAM,wBAAwB;AAkB9B,IAAM,mBAA+C;AAAA,EACnD,aAAa;AAAA,EACb,UAAU;AACZ;AAEO,SAAS,oBAAoB,UAA0B;AAC5D,QAAM,OAAO,SAAS,WAAW,qBAAqB,IAClD,SAAS,MAAM,sBAAsB,MAAM,EAAE,YAAY,IACzD;AACJ,SAAO,iBAAiB,KAAK,YAAY,CAAC,KAAK;AACjD;AAEO,SAAS,gBAAgB,UAA0C;AACxE,SAAO,YAAY;AACrB;AAEO,SAAS,iBAAiB,UAA0B;AACzD,QAAM,aAAa,oBAAoB,QAAQ;AAC/C,SAAO,gBAAgB,UAAU,IAAI,gBAAgB,UAAU,IAAI,gBAAgB;AACrF;AAGA,IAAM,yBAAyB,oBAAI,IAAgB,CAAC,WAAW,OAAO,SAAS,CAAC;AAGzE,IAAM,mBACX,OAAO,QAAQ,eAAe,EAE7B,OAAO,CAAC,CAAC,KAAK,MAAM,CAAC,uBAAuB,IAAI,KAAK,CAAC,EACtD,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,EAAE,OAAO,MAAM,EAAE;AAMtC,SAAS,cAAc,SAAgC;AAC5D,MAAI;AACF,UAAM,EAAE,SAAS,IAAI,IAAI,IAAI,OAAO;AACpC,WAAO,6CAA6C,mBAAmB,QAAQ,CAAC;AAAA,EAClF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// src/taxonomy/presentation-link-type.ts
|
|
2
|
+
var PRESENTATION_LINK_TYPE_OPTIONS = [
|
|
3
|
+
{ value: "id.sifa.defs#linkSlides", label: "Slides" },
|
|
4
|
+
{ value: "id.sifa.defs#linkRecording", label: "Recording" },
|
|
5
|
+
{ value: "id.sifa.defs#linkEvent", label: "Event page" },
|
|
6
|
+
{ value: "id.sifa.defs#linkRegistration", label: "Registration" },
|
|
7
|
+
{ value: "id.sifa.defs#linkWriteup", label: "Write-up" },
|
|
8
|
+
{ value: "id.sifa.defs#linkOther", label: "Link" }
|
|
9
|
+
];
|
|
10
|
+
var PRESENTATION_LINK_TYPE_LABELS = Object.fromEntries(
|
|
11
|
+
PRESENTATION_LINK_TYPE_OPTIONS.map((o) => [o.value, o.label])
|
|
12
|
+
);
|
|
13
|
+
function getPresentationLinkTypeLabel(value) {
|
|
14
|
+
if (!value) return void 0;
|
|
15
|
+
return PRESENTATION_LINK_TYPE_LABELS[value] ?? value;
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
PRESENTATION_LINK_TYPE_LABELS,
|
|
19
|
+
PRESENTATION_LINK_TYPE_OPTIONS,
|
|
20
|
+
getPresentationLinkTypeLabel
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=presentation-link-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/presentation-link-type.ts"],"sourcesContent":["/**\n * Presentation link-type taxonomy. Mirrors\n * `id.sifa.defs#presentationLinkType.knownValues` from sifa-lexicons. Used to\n * pick an icon and a default label for a presentation or delivery link.\n */\n\nexport interface PresentationLinkTypeOption {\n value: string;\n label: string;\n}\n\nexport const PRESENTATION_LINK_TYPE_OPTIONS: PresentationLinkTypeOption[] = [\n { value: 'id.sifa.defs#linkSlides', label: 'Slides' },\n { value: 'id.sifa.defs#linkRecording', label: 'Recording' },\n { value: 'id.sifa.defs#linkEvent', label: 'Event page' },\n { value: 'id.sifa.defs#linkRegistration', label: 'Registration' },\n { value: 'id.sifa.defs#linkWriteup', label: 'Write-up' },\n { value: 'id.sifa.defs#linkOther', label: 'Link' },\n];\n\nexport const PRESENTATION_LINK_TYPE_LABELS: Record<string, string> = Object.fromEntries(\n PRESENTATION_LINK_TYPE_OPTIONS.map((o) => [o.value, o.label]),\n);\n\n/** Resolve a label for a presentation link-type token. Falls back to the raw value. */\nexport function getPresentationLinkTypeLabel(value: string | undefined | null): string | undefined {\n if (!value) return undefined;\n return PRESENTATION_LINK_TYPE_LABELS[value] ?? value;\n}\n"],"mappings":";AAWO,IAAM,iCAA+D;AAAA,EAC1E,EAAE,OAAO,2BAA2B,OAAO,SAAS;AAAA,EACpD,EAAE,OAAO,8BAA8B,OAAO,YAAY;AAAA,EAC1D,EAAE,OAAO,0BAA0B,OAAO,aAAa;AAAA,EACvD,EAAE,OAAO,iCAAiC,OAAO,eAAe;AAAA,EAChE,EAAE,OAAO,4BAA4B,OAAO,WAAW;AAAA,EACvD,EAAE,OAAO,0BAA0B,OAAO,OAAO;AACnD;AAEO,IAAM,gCAAwD,OAAO;AAAA,EAC1E,+BAA+B,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AAC9D;AAGO,SAAS,6BAA6B,OAAsD;AACjG,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,8BAA8B,KAAK,KAAK;AACjD;","names":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// src/taxonomy/presentation-role.ts
|
|
2
|
+
var PRESENTATION_ROLE_OPTIONS = [
|
|
3
|
+
{ value: "id.sifa.defs#presenter", label: "Presenter" },
|
|
4
|
+
{ value: "id.sifa.defs#panelist", label: "Panelist" },
|
|
5
|
+
{ value: "id.sifa.defs#keynote", label: "Keynote" },
|
|
6
|
+
{ value: "id.sifa.defs#workshop", label: "Workshop" },
|
|
7
|
+
{ value: "id.sifa.defs#host", label: "Host" }
|
|
8
|
+
];
|
|
9
|
+
var PRESENTATION_ROLE_LABELS = Object.fromEntries(
|
|
10
|
+
PRESENTATION_ROLE_OPTIONS.map((o) => [o.value, o.label])
|
|
11
|
+
);
|
|
12
|
+
function getPresentationRoleLabel(value) {
|
|
13
|
+
if (!value) return void 0;
|
|
14
|
+
return PRESENTATION_ROLE_LABELS[value] ?? value;
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
PRESENTATION_ROLE_LABELS,
|
|
18
|
+
PRESENTATION_ROLE_OPTIONS,
|
|
19
|
+
getPresentationRoleLabel
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=presentation-role.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/presentation-role.ts"],"sourcesContent":["/**\n * Presentation-role taxonomy. Mirrors `id.sifa.defs#presentationRole.knownValues`\n * from sifa-lexicons. The role describes how the person took part in a single\n * delivery (it can differ between deliveries of the same presentation).\n */\n\nexport interface PresentationRoleOption {\n value: string;\n label: string;\n}\n\nexport const PRESENTATION_ROLE_OPTIONS: PresentationRoleOption[] = [\n { value: 'id.sifa.defs#presenter', label: 'Presenter' },\n { value: 'id.sifa.defs#panelist', label: 'Panelist' },\n { value: 'id.sifa.defs#keynote', label: 'Keynote' },\n { value: 'id.sifa.defs#workshop', label: 'Workshop' },\n { value: 'id.sifa.defs#host', label: 'Host' },\n];\n\nexport const PRESENTATION_ROLE_LABELS: Record<string, string> = Object.fromEntries(\n PRESENTATION_ROLE_OPTIONS.map((o) => [o.value, o.label]),\n);\n\n/** Resolve a label for a presentation-role token. Falls back to the raw value. */\nexport function getPresentationRoleLabel(value: string | undefined | null): string | undefined {\n if (!value) return undefined;\n return PRESENTATION_ROLE_LABELS[value] ?? value;\n}\n"],"mappings":";AAWO,IAAM,4BAAsD;AAAA,EACjE,EAAE,OAAO,0BAA0B,OAAO,YAAY;AAAA,EACtD,EAAE,OAAO,yBAAyB,OAAO,WAAW;AAAA,EACpD,EAAE,OAAO,wBAAwB,OAAO,UAAU;AAAA,EAClD,EAAE,OAAO,yBAAyB,OAAO,WAAW;AAAA,EACpD,EAAE,OAAO,qBAAqB,OAAO,OAAO;AAC9C;AAEO,IAAM,2BAAmD,OAAO;AAAA,EACrE,0BAA0B,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AACzD;AAGO,SAAS,yBAAyB,OAAsD;AAC7F,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,yBAAyB,KAAK,KAAK;AAC5C;","names":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// src/taxonomy/publication-type.ts
|
|
2
|
+
var PUBLICATION_TYPE_OPTIONS = [
|
|
3
|
+
{ value: "journal-article", label: "Journal Article" },
|
|
4
|
+
{ value: "conference-paper", label: "Conference Paper" },
|
|
5
|
+
{ value: "conference-abstract", label: "Conference Abstract" },
|
|
6
|
+
{ value: "conference-poster", label: "Conference Poster" },
|
|
7
|
+
{ value: "book", label: "Book" },
|
|
8
|
+
{ value: "book-chapter", label: "Book Chapter" },
|
|
9
|
+
{ value: "book-review", label: "Book Review" },
|
|
10
|
+
{ value: "edited-book", label: "Edited Book" },
|
|
11
|
+
{ value: "dissertation", label: "Dissertation" },
|
|
12
|
+
{ value: "preprint", label: "Preprint" },
|
|
13
|
+
{ value: "dataset", label: "Dataset" },
|
|
14
|
+
{ value: "report", label: "Report" },
|
|
15
|
+
{ value: "review", label: "Review" },
|
|
16
|
+
{ value: "patent", label: "Patent" },
|
|
17
|
+
{ value: "software", label: "Software" },
|
|
18
|
+
{ value: "working-paper", label: "Working Paper" },
|
|
19
|
+
{ value: "artistic-performance", label: "Artistic Performance" },
|
|
20
|
+
{ value: "lecture-speech", label: "Lecture/Speech" },
|
|
21
|
+
{ value: "online-resource", label: "Online Resource" },
|
|
22
|
+
{ value: "newspaper-article", label: "Newspaper Article" },
|
|
23
|
+
{ value: "research-technique", label: "Research Technique" },
|
|
24
|
+
{ value: "standards-and-policy", label: "Standards & Policy" },
|
|
25
|
+
{ value: "technical-standard", label: "Technical Standard" },
|
|
26
|
+
{ value: "registered-copyright", label: "Registered Copyright" },
|
|
27
|
+
{ value: "translation", label: "Translation" },
|
|
28
|
+
{ value: "dictionary-entry", label: "Dictionary Entry" },
|
|
29
|
+
{ value: "encyclopedia-entry", label: "Encyclopedia Entry" },
|
|
30
|
+
{ value: "supervised-student-publication", label: "Supervised Student Publication" },
|
|
31
|
+
{ value: "annotation", label: "Annotation" },
|
|
32
|
+
{ value: "test", label: "Test" },
|
|
33
|
+
{ value: "spin-off-company", label: "Spin-off Company" },
|
|
34
|
+
{ value: "disclosure", label: "Disclosure" },
|
|
35
|
+
{ value: "license", label: "License" },
|
|
36
|
+
{ value: "trademark", label: "Trademark" },
|
|
37
|
+
{ value: "design", label: "Design" },
|
|
38
|
+
// ORCID's catch-all. Labelled "Publication" rather than "Other" because it is
|
|
39
|
+
// what shows on the card, and a badge reading "Other" tells a reader nothing.
|
|
40
|
+
{ value: "other", label: "Publication" }
|
|
41
|
+
];
|
|
42
|
+
var PUBLICATION_TYPE_LABELS = Object.fromEntries(
|
|
43
|
+
PUBLICATION_TYPE_OPTIONS.map((o) => [o.value, o.label])
|
|
44
|
+
);
|
|
45
|
+
function getPublicationTypeLabel(value) {
|
|
46
|
+
if (!value) return void 0;
|
|
47
|
+
return PUBLICATION_TYPE_LABELS[value] ?? "Publication";
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
PUBLICATION_TYPE_LABELS,
|
|
51
|
+
PUBLICATION_TYPE_OPTIONS,
|
|
52
|
+
getPublicationTypeLabel
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=publication-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/publication-type.ts"],"sourcesContent":["/**\n * Publication-type taxonomy. Mirrors `id.sifa.profile.publication.type`\n * `knownValues` from sifa-lexicons.\n *\n * The values are ORCID's work-type vocabulary rather than `id.sifa.defs` tokens,\n * unlike every other enum here. That is deliberate: the vocabulary is ORCID's,\n * not Sifa's. It is what the data arrives in and what the AppView stores and\n * serves unmapped, so a synced work round-trips with no translation table.\n * Minting Sifa tokens would make Sifa the owner of a bibliographic vocabulary it\n * did not design. COAR Resource Types stays the anchor a consumer maps to.\n *\n * The set is open. A publication that reached Sifa from Standard.site, RSS, or a\n * hand-typed entry need not fit ORCID's list, so an unknown value is kept as\n * written rather than dropped.\n */\n\nexport interface PublicationTypeOption {\n value: string;\n label: string;\n}\n\nexport const PUBLICATION_TYPE_OPTIONS: PublicationTypeOption[] = [\n { value: 'journal-article', label: 'Journal Article' },\n { value: 'conference-paper', label: 'Conference Paper' },\n { value: 'conference-abstract', label: 'Conference Abstract' },\n { value: 'conference-poster', label: 'Conference Poster' },\n { value: 'book', label: 'Book' },\n { value: 'book-chapter', label: 'Book Chapter' },\n { value: 'book-review', label: 'Book Review' },\n { value: 'edited-book', label: 'Edited Book' },\n { value: 'dissertation', label: 'Dissertation' },\n { value: 'preprint', label: 'Preprint' },\n { value: 'dataset', label: 'Dataset' },\n { value: 'report', label: 'Report' },\n { value: 'review', label: 'Review' },\n { value: 'patent', label: 'Patent' },\n { value: 'software', label: 'Software' },\n { value: 'working-paper', label: 'Working Paper' },\n { value: 'artistic-performance', label: 'Artistic Performance' },\n { value: 'lecture-speech', label: 'Lecture/Speech' },\n { value: 'online-resource', label: 'Online Resource' },\n { value: 'newspaper-article', label: 'Newspaper Article' },\n { value: 'research-technique', label: 'Research Technique' },\n { value: 'standards-and-policy', label: 'Standards & Policy' },\n { value: 'technical-standard', label: 'Technical Standard' },\n { value: 'registered-copyright', label: 'Registered Copyright' },\n { value: 'translation', label: 'Translation' },\n { value: 'dictionary-entry', label: 'Dictionary Entry' },\n { value: 'encyclopedia-entry', label: 'Encyclopedia Entry' },\n { value: 'supervised-student-publication', label: 'Supervised Student Publication' },\n { value: 'annotation', label: 'Annotation' },\n { value: 'test', label: 'Test' },\n { value: 'spin-off-company', label: 'Spin-off Company' },\n { value: 'disclosure', label: 'Disclosure' },\n { value: 'license', label: 'License' },\n { value: 'trademark', label: 'Trademark' },\n { value: 'design', label: 'Design' },\n // ORCID's catch-all. Labelled \"Publication\" rather than \"Other\" because it is\n // what shows on the card, and a badge reading \"Other\" tells a reader nothing.\n { value: 'other', label: 'Publication' },\n];\n\nexport const PUBLICATION_TYPE_LABELS: Record<string, string> = Object.fromEntries(\n PUBLICATION_TYPE_OPTIONS.map((o) => [o.value, o.label]),\n);\n\n/**\n * Resolve a label for a publication type.\n *\n * An unrecognized value falls back to the generic label rather than being shown\n * raw: an ORCID work type is a slug, and rendering \"spin-off-company\" verbatim\n * on a card reads as a bug. A caller that wants the raw value already has it.\n */\nexport function getPublicationTypeLabel(value: string | undefined | null): string | undefined {\n if (!value) return undefined;\n return PUBLICATION_TYPE_LABELS[value] ?? 'Publication';\n}\n"],"mappings":";AAqBO,IAAM,2BAAoD;AAAA,EAC/D,EAAE,OAAO,mBAAmB,OAAO,kBAAkB;AAAA,EACrD,EAAE,OAAO,oBAAoB,OAAO,mBAAmB;AAAA,EACvD,EAAE,OAAO,uBAAuB,OAAO,sBAAsB;AAAA,EAC7D,EAAE,OAAO,qBAAqB,OAAO,oBAAoB;AAAA,EACzD,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,gBAAgB,OAAO,eAAe;AAAA,EAC/C,EAAE,OAAO,eAAe,OAAO,cAAc;AAAA,EAC7C,EAAE,OAAO,eAAe,OAAO,cAAc;AAAA,EAC7C,EAAE,OAAO,gBAAgB,OAAO,eAAe;AAAA,EAC/C,EAAE,OAAO,YAAY,OAAO,WAAW;AAAA,EACvC,EAAE,OAAO,WAAW,OAAO,UAAU;AAAA,EACrC,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,EACnC,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,EACnC,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,EACnC,EAAE,OAAO,YAAY,OAAO,WAAW;AAAA,EACvC,EAAE,OAAO,iBAAiB,OAAO,gBAAgB;AAAA,EACjD,EAAE,OAAO,wBAAwB,OAAO,uBAAuB;AAAA,EAC/D,EAAE,OAAO,kBAAkB,OAAO,iBAAiB;AAAA,EACnD,EAAE,OAAO,mBAAmB,OAAO,kBAAkB;AAAA,EACrD,EAAE,OAAO,qBAAqB,OAAO,oBAAoB;AAAA,EACzD,EAAE,OAAO,sBAAsB,OAAO,qBAAqB;AAAA,EAC3D,EAAE,OAAO,wBAAwB,OAAO,qBAAqB;AAAA,EAC7D,EAAE,OAAO,sBAAsB,OAAO,qBAAqB;AAAA,EAC3D,EAAE,OAAO,wBAAwB,OAAO,uBAAuB;AAAA,EAC/D,EAAE,OAAO,eAAe,OAAO,cAAc;AAAA,EAC7C,EAAE,OAAO,oBAAoB,OAAO,mBAAmB;AAAA,EACvD,EAAE,OAAO,sBAAsB,OAAO,qBAAqB;AAAA,EAC3D,EAAE,OAAO,kCAAkC,OAAO,iCAAiC;AAAA,EACnF,EAAE,OAAO,cAAc,OAAO,aAAa;AAAA,EAC3C,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,oBAAoB,OAAO,mBAAmB;AAAA,EACvD,EAAE,OAAO,cAAc,OAAO,aAAa;AAAA,EAC3C,EAAE,OAAO,WAAW,OAAO,UAAU;AAAA,EACrC,EAAE,OAAO,aAAa,OAAO,YAAY;AAAA,EACzC,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA;AAAA;AAAA,EAGnC,EAAE,OAAO,SAAS,OAAO,cAAc;AACzC;AAEO,IAAM,0BAAkD,OAAO;AAAA,EACpE,yBAAyB,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AACxD;AASO,SAAS,wBAAwB,OAAsD;AAC5F,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,wBAAwB,KAAK,KAAK;AAC3C;","names":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// src/taxonomy/relational.ts
|
|
2
|
+
var RELATIONAL_SEGMENTS = /* @__PURE__ */ new Set([
|
|
3
|
+
"comment",
|
|
4
|
+
"reply",
|
|
5
|
+
"like",
|
|
6
|
+
"repost",
|
|
7
|
+
"follow",
|
|
8
|
+
"connection",
|
|
9
|
+
"rsvp",
|
|
10
|
+
"endorse",
|
|
11
|
+
"endorsement",
|
|
12
|
+
"bookmark",
|
|
13
|
+
"member",
|
|
14
|
+
"membership",
|
|
15
|
+
"vouch"
|
|
16
|
+
]);
|
|
17
|
+
function isRelationalActivity(nsid) {
|
|
18
|
+
if (!nsid || !nsid.includes(".")) return false;
|
|
19
|
+
const segment = nsid.slice(nsid.lastIndexOf(".") + 1);
|
|
20
|
+
return RELATIONAL_SEGMENTS.has(segment);
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
isRelationalActivity
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=relational.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/relational.ts"],"sourcesContent":["/**\n * Whether an activity is *relational*: a reaction to, or a reference to,\n * something someone else made (a comment, reply, like, follow, RSVP,\n * endorsement, bookmark, membership, ...). Distinct from the\n * `creation` / `action` / `filtered` tier, which governs public-profile\n * visibility rather than presentation.\n *\n * The two-tier timeline uses this so a relational item ALWAYS renders as a\n * compact line, never a rich card — even when the record happens to carry\n * media. Otherwise a comment on someone's photo could inline that photo, which\n * is exactly what the line model avoids: it shows \"commented on {thing}\" and\n * links out, rather than reproducing another person's content.\n *\n * Kept as a curated code-level signal rather than a field on the public\n * `activity-tiers.json` (served at `/.well-known/`) so it has no blast radius\n * on the tier data or the profile surfaces that consume it.\n *\n * Matches on the final NSID segment, which is how these records name their\n * relational nature across apps (`*.comment`, `*.rsvp`, `*.membership`, ...).\n */\nconst RELATIONAL_SEGMENTS: ReadonlySet<string> = new Set([\n 'comment',\n 'reply',\n 'like',\n 'repost',\n 'follow',\n 'connection',\n 'rsvp',\n 'endorse',\n 'endorsement',\n 'bookmark',\n 'member',\n 'membership',\n 'vouch',\n]);\n\nexport function isRelationalActivity(nsid: string): boolean {\n if (!nsid || !nsid.includes('.')) return false;\n const segment = nsid.slice(nsid.lastIndexOf('.') + 1);\n return RELATIONAL_SEGMENTS.has(segment);\n}\n"],"mappings":";AAoBA,IAAM,sBAA2C,oBAAI,IAAI;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,SAAS,qBAAqB,MAAuB;AAC1D,MAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,GAAG,EAAG,QAAO;AACzC,QAAM,UAAU,KAAK,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC;AACpD,SAAO,oBAAoB,IAAI,OAAO;AACxC;","names":[]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// src/taxonomy/search-filter-defs.ts
|
|
2
|
+
var SEARCH_FILTER_DEFS = [
|
|
3
|
+
{
|
|
4
|
+
key: "skill",
|
|
5
|
+
label: "Skill",
|
|
6
|
+
control: "skill-typeahead",
|
|
7
|
+
optionSource: { kind: "typeahead" },
|
|
8
|
+
order: 1,
|
|
9
|
+
peopleOnly: true
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
key: "country",
|
|
13
|
+
label: "Country",
|
|
14
|
+
allLabel: "All countries",
|
|
15
|
+
control: "select",
|
|
16
|
+
optionSource: { kind: "facet", ref: "countries" },
|
|
17
|
+
order: 2
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
key: "industry",
|
|
21
|
+
label: "Industry",
|
|
22
|
+
allLabel: "All industries",
|
|
23
|
+
control: "select",
|
|
24
|
+
optionSource: { kind: "taxonomy", ref: "industry" },
|
|
25
|
+
order: 3
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
key: "domain",
|
|
29
|
+
label: "Domain",
|
|
30
|
+
allLabel: "All domains",
|
|
31
|
+
control: "select",
|
|
32
|
+
optionSource: { kind: "taxonomy", ref: "domain" },
|
|
33
|
+
order: 4,
|
|
34
|
+
dependsOn: "industry"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
key: "workplace",
|
|
38
|
+
label: "Workplace",
|
|
39
|
+
allLabel: "Any arrangement",
|
|
40
|
+
control: "select",
|
|
41
|
+
optionSource: { kind: "taxonomy", ref: "workplace" },
|
|
42
|
+
order: 5,
|
|
43
|
+
peopleOnly: true
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
key: "openTo",
|
|
47
|
+
label: "Open to",
|
|
48
|
+
control: "multi-select",
|
|
49
|
+
optionSource: { kind: "taxonomy", ref: "openTo" },
|
|
50
|
+
order: 6,
|
|
51
|
+
peopleOnly: true
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
key: "app",
|
|
55
|
+
label: "App",
|
|
56
|
+
allLabel: "All apps",
|
|
57
|
+
control: "select",
|
|
58
|
+
optionSource: { kind: "facet", ref: "apps" },
|
|
59
|
+
order: 7,
|
|
60
|
+
hidden: true
|
|
61
|
+
}
|
|
62
|
+
];
|
|
63
|
+
export {
|
|
64
|
+
SEARCH_FILTER_DEFS
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=search-filter-defs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/search-filter-defs.ts"],"sourcesContent":["import type { SearchFilters } from '../query/fetchers/search.js';\n\n/**\n * Shared presentation metadata for the profile-search filters, so every Sifa\n * client (web and app) renders the same filters, in the same order, with the\n * same labels. The filter SET and its query mapping live in `SearchFilters` /\n * `fetchSearchProfiles`; the OPTION values come from `fetchSearchFilters` (server\n * facets) and the static taxonomies; this ties the two together with the\n * label/order/control the UI needs. Labels are literal English (canonical) so a\n * client without an i18n layer never has to keep its own copy.\n */\n\n/** How a filter is rendered. */\nexport type SearchFilterControl = 'skill-typeahead' | 'select' | 'multi-select';\n\n/** Where a control sources its option values. */\nexport type SearchFilterOptionSource =\n /** Static SDK taxonomy (INDUSTRY_OPTIONS, WORKPLACE_TYPE_OPTIONS, OPEN_TO_OPTIONS, or an industry's domains). */\n | { kind: 'taxonomy'; ref: 'industry' | 'domain' | 'workplace' | 'openTo' }\n /** Server facet from `fetchSearchFilters` (FilterOptions). */\n | { kind: 'facet'; ref: 'countries' | 'industries' | 'apps' | 'openTo' }\n /** Debounced typeahead (`fetchSkillSuggestions`); the value is free text. */\n | { kind: 'typeahead' };\n\nexport interface SearchFilterDef {\n /** Matches the `SearchFilters` key it writes (enforced by the type). */\n key: Exclude<keyof SearchFilters, 'q' | 'limit'>;\n /** Literal English filter label. */\n label: string;\n /** Label for the \"no selection\" / all option on `select` controls. */\n allLabel?: string;\n control: SearchFilterControl;\n optionSource: SearchFilterOptionSource;\n /** Render order (ascending). Explicit so it can't drift from array order. */\n order: number;\n /** Shown only when this other filter has a value (domain needs an industry). */\n dependsOn?: Exclude<keyof SearchFilters, 'q' | 'limit'>;\n /** Hidden when searching companies rather than people. */\n peopleOnly?: boolean;\n /** Defined in the type but not yet surfaced in any UI (e.g. `app`). */\n hidden?: boolean;\n}\n\n/**\n * Canonical filter list, in render order. `q` (free text) is deliberately not\n * here: it is the primary search box, not a sidebar filter. Consumers should\n * skip `hidden` defs and, when searching companies, `peopleOnly` defs.\n */\nexport const SEARCH_FILTER_DEFS: readonly SearchFilterDef[] = [\n {\n key: 'skill',\n label: 'Skill',\n control: 'skill-typeahead',\n optionSource: { kind: 'typeahead' },\n order: 1,\n peopleOnly: true,\n },\n {\n key: 'country',\n label: 'Country',\n allLabel: 'All countries',\n control: 'select',\n optionSource: { kind: 'facet', ref: 'countries' },\n order: 2,\n },\n {\n key: 'industry',\n label: 'Industry',\n allLabel: 'All industries',\n control: 'select',\n optionSource: { kind: 'taxonomy', ref: 'industry' },\n order: 3,\n },\n {\n key: 'domain',\n label: 'Domain',\n allLabel: 'All domains',\n control: 'select',\n optionSource: { kind: 'taxonomy', ref: 'domain' },\n order: 4,\n dependsOn: 'industry',\n },\n {\n key: 'workplace',\n label: 'Workplace',\n allLabel: 'Any arrangement',\n control: 'select',\n optionSource: { kind: 'taxonomy', ref: 'workplace' },\n order: 5,\n peopleOnly: true,\n },\n {\n key: 'openTo',\n label: 'Open to',\n control: 'multi-select',\n optionSource: { kind: 'taxonomy', ref: 'openTo' },\n order: 6,\n peopleOnly: true,\n },\n {\n key: 'app',\n label: 'App',\n allLabel: 'All apps',\n control: 'select',\n optionSource: { kind: 'facet', ref: 'apps' },\n order: 7,\n hidden: true,\n },\n];\n"],"mappings":";AAgDO,IAAM,qBAAiD;AAAA,EAC5D;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,IACT,cAAc,EAAE,MAAM,YAAY;AAAA,IAClC,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,IACT,cAAc,EAAE,MAAM,SAAS,KAAK,YAAY;AAAA,IAChD,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,IACT,cAAc,EAAE,MAAM,YAAY,KAAK,WAAW;AAAA,IAClD,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,IACT,cAAc,EAAE,MAAM,YAAY,KAAK,SAAS;AAAA,IAChD,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,IACT,cAAc,EAAE,MAAM,YAAY,KAAK,YAAY;AAAA,IACnD,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,IACT,cAAc,EAAE,MAAM,YAAY,KAAK,SAAS;AAAA,IAChD,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,IACT,cAAc,EAAE,MAAM,SAAS,KAAK,OAAO;AAAA,IAC3C,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AACF;","names":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// src/taxonomy/skill-categories.ts
|
|
2
|
+
var SKILL_CATEGORIES = [
|
|
3
|
+
{ value: "technical", label: "Technical" },
|
|
4
|
+
{ value: "business", label: "Business" },
|
|
5
|
+
{ value: "creative", label: "Creative" },
|
|
6
|
+
{ value: "interpersonal", label: "Interpersonal" },
|
|
7
|
+
{ value: "industry", label: "Industry" },
|
|
8
|
+
{ value: "community", label: "Community" },
|
|
9
|
+
{ value: "security", label: "Security" }
|
|
10
|
+
];
|
|
11
|
+
var CATEGORY_ORDER = SKILL_CATEGORIES.map((c) => c.value);
|
|
12
|
+
var CATEGORY_LABELS = {
|
|
13
|
+
...Object.fromEntries(SKILL_CATEGORIES.map((c) => [c.value, c.label])),
|
|
14
|
+
other: "Other"
|
|
15
|
+
};
|
|
16
|
+
function normalizeSkillCategory(value) {
|
|
17
|
+
if (typeof value !== "string") return void 0;
|
|
18
|
+
const afterRef = value.includes("#") ? value.slice(value.lastIndexOf("#") + 1) : value;
|
|
19
|
+
const token = afterRef.trim().toLowerCase();
|
|
20
|
+
return token === "" ? void 0 : token;
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
CATEGORY_LABELS,
|
|
24
|
+
CATEGORY_ORDER,
|
|
25
|
+
SKILL_CATEGORIES,
|
|
26
|
+
normalizeSkillCategory
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=skill-categories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/skill-categories.ts"],"sourcesContent":["export const SKILL_CATEGORIES = [\n { value: 'technical', label: 'Technical' },\n { value: 'business', label: 'Business' },\n { value: 'creative', label: 'Creative' },\n { value: 'interpersonal', label: 'Interpersonal' },\n { value: 'industry', label: 'Industry' },\n { value: 'community', label: 'Community' },\n { value: 'security', label: 'Security' },\n] as const;\n\nexport type SkillCategory = (typeof SKILL_CATEGORIES)[number]['value'];\n\nexport const CATEGORY_ORDER: ReadonlyArray<SkillCategory> = SKILL_CATEGORIES.map((c) => c.value);\n\nexport const CATEGORY_LABELS: Record<SkillCategory | 'other', string> = {\n ...(Object.fromEntries(SKILL_CATEGORIES.map((c) => [c.value, c.label])) as Record<\n SkillCategory,\n string\n >),\n other: 'Other',\n};\n\n/**\n * Reduces a `category` value from a skill record to a bare token.\n *\n * `id.sifa.profile.skill` publishes its `knownValues` in lexicon-ref form\n * (`id.sifa.defs#technical`), so a client writing that is following the\n * lexicon. Sifa's own surfaces store and compare bare tokens (`technical`), and\n * without this the ref form falls through to the \"other\" bucket. Both forms are\n * legal: `knownValues` is advisory in AT Protocol, not a closed enum.\n *\n * Normalising is not validating. An unrecognised value is returned as-is, in\n * lowercase, and callers decide what to do with it (`groupSkillsByCategory`\n * buckets it as \"other\").\n */\nexport function normalizeSkillCategory(value: string | undefined | null): string | undefined {\n if (typeof value !== 'string') return undefined;\n const afterRef = value.includes('#') ? value.slice(value.lastIndexOf('#') + 1) : value;\n const token = afterRef.trim().toLowerCase();\n return token === '' ? undefined : token;\n}\n"],"mappings":";AAAO,IAAM,mBAAmB;AAAA,EAC9B,EAAE,OAAO,aAAa,OAAO,YAAY;AAAA,EACzC,EAAE,OAAO,YAAY,OAAO,WAAW;AAAA,EACvC,EAAE,OAAO,YAAY,OAAO,WAAW;AAAA,EACvC,EAAE,OAAO,iBAAiB,OAAO,gBAAgB;AAAA,EACjD,EAAE,OAAO,YAAY,OAAO,WAAW;AAAA,EACvC,EAAE,OAAO,aAAa,OAAO,YAAY;AAAA,EACzC,EAAE,OAAO,YAAY,OAAO,WAAW;AACzC;AAIO,IAAM,iBAA+C,iBAAiB,IAAI,CAAC,MAAM,EAAE,KAAK;AAExF,IAAM,kBAA2D;AAAA,EACtE,GAAI,OAAO,YAAY,iBAAiB,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAAA,EAItE,OAAO;AACT;AAeO,SAAS,uBAAuB,OAAsD;AAC3F,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,WAAW,MAAM,SAAS,GAAG,IAAI,MAAM,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI;AACjF,QAAM,QAAQ,SAAS,KAAK,EAAE,YAAY;AAC1C,SAAO,UAAU,KAAK,SAAY;AACpC;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// src/taxonomy/skill-display-groups.ts
|
|
2
|
+
import { groupSkillsBySubCategory } from "./skill-grouping.js";
|
|
3
|
+
function groupSkillsForDisplay(skills, options = {}) {
|
|
4
|
+
const grouped = groupSkillsBySubCategory(skills);
|
|
5
|
+
const labelled = grouped.filter(([label]) => label !== null);
|
|
6
|
+
const groups = options.ungroupedFirst ? [...grouped.filter(([label]) => label === null), ...labelled] : grouped;
|
|
7
|
+
return { groups, showLabels: labelled.length >= 2 };
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
groupSkillsForDisplay
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=skill-display-groups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/skill-display-groups.ts"],"sourcesContent":["import type { ProfileSkill } from '../types/index.js';\n\nimport { groupSkillsBySubCategory } from './skill-grouping.js';\n\nexport interface SkillDisplayGroups<T extends ProfileSkill> {\n /** Sub-groups for one category; a `null` label is the unlabelled bucket. */\n groups: [string | null, T[]][];\n /**\n * Whether sub-category labels carry information here. False when the category\n * has fewer than two distinct sub-categories, where a lone label says nothing\n * the category heading does not already say.\n */\n showLabels: boolean;\n}\n\nexport interface SkillDisplayGroupsOptions {\n /**\n * Put the unlabelled bucket first instead of last. Inline chip rendering\n * reads fine with it trailing, but in a linear document (markdown, docx,\n * print) trailing unlabelled entries appear to belong to the sub-heading\n * above them, so documents want it directly under the category heading.\n */\n ungroupedFirst?: boolean;\n}\n\n/**\n * Prepares one category's skills for display: the sub-groups, plus whether to\n * label them (the render rule from #314).\n *\n * Shared so the profile, print, markdown and docx surfaces group identically\n * rather than each re-deriving the threshold.\n */\nexport function groupSkillsForDisplay<T extends ProfileSkill>(\n skills: T[],\n options: SkillDisplayGroupsOptions = {},\n): SkillDisplayGroups<T> {\n const grouped = groupSkillsBySubCategory(skills);\n const labelled = grouped.filter(([label]) => label !== null);\n\n const groups = options.ungroupedFirst\n ? [...grouped.filter(([label]) => label === null), ...labelled]\n : grouped;\n\n return { groups, showLabels: labelled.length >= 2 };\n}\n"],"mappings":";AAEA,SAAS,gCAAgC;AA8BlC,SAAS,sBACd,QACA,UAAqC,CAAC,GACf;AACvB,QAAM,UAAU,yBAAyB,MAAM;AAC/C,QAAM,WAAW,QAAQ,OAAO,CAAC,CAAC,KAAK,MAAM,UAAU,IAAI;AAE3D,QAAM,SAAS,QAAQ,iBACnB,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC,KAAK,MAAM,UAAU,IAAI,GAAG,GAAG,QAAQ,IAC5D;AAEJ,SAAO,EAAE,QAAQ,YAAY,SAAS,UAAU,EAAE;AACpD;","names":[]}
|