@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,90 @@
|
|
|
1
|
+
// src/taxonomy/skill-grouping.ts
|
|
2
|
+
import { CATEGORY_ORDER, normalizeSkillCategory } from "./skill-categories.js";
|
|
3
|
+
import { compareText } from "../format/compare-text.js";
|
|
4
|
+
function dedupeSkills(skills) {
|
|
5
|
+
const groups = /* @__PURE__ */ new Map();
|
|
6
|
+
for (const skill of skills) {
|
|
7
|
+
const key = skill.name.trim().toLowerCase();
|
|
8
|
+
const existing = groups.get(key);
|
|
9
|
+
const positions = skill.positionRkeys ?? [];
|
|
10
|
+
if (!existing) {
|
|
11
|
+
groups.set(key, {
|
|
12
|
+
...skill,
|
|
13
|
+
mergedRkeys: [skill.rkey],
|
|
14
|
+
positionRkeys: [...positions]
|
|
15
|
+
});
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
existing.mergedRkeys.push(skill.rkey);
|
|
19
|
+
if (!existing.category && skill.category) existing.category = skill.category;
|
|
20
|
+
const incomingSubCategory = skill.subCategory?.trim();
|
|
21
|
+
if (incomingSubCategory && !existing.subCategory?.trim()) {
|
|
22
|
+
existing.subCategory = incomingSubCategory;
|
|
23
|
+
}
|
|
24
|
+
if ((skill.endorsementCount ?? 0) > (existing.endorsementCount ?? 0)) {
|
|
25
|
+
existing.endorsementCount = skill.endorsementCount;
|
|
26
|
+
}
|
|
27
|
+
if (skill.endorsed) existing.endorsed = true;
|
|
28
|
+
if (skill.activityBacked) existing.activityBacked = true;
|
|
29
|
+
const merged = /* @__PURE__ */ new Set([...existing.positionRkeys ?? [], ...positions]);
|
|
30
|
+
existing.positionRkeys = Array.from(merged);
|
|
31
|
+
}
|
|
32
|
+
return Array.from(groups.values());
|
|
33
|
+
}
|
|
34
|
+
function groupSkillsByCategory(skills) {
|
|
35
|
+
const grouped = /* @__PURE__ */ new Map();
|
|
36
|
+
for (const skill of skills) {
|
|
37
|
+
const normalised = normalizeSkillCategory(skill.category) ?? "";
|
|
38
|
+
const key = CATEGORY_ORDER.includes(normalised) ? normalised : "other";
|
|
39
|
+
const bucket = grouped.get(key) ?? [];
|
|
40
|
+
bucket.push(skill);
|
|
41
|
+
grouped.set(key, bucket);
|
|
42
|
+
}
|
|
43
|
+
for (const [, groupSkills] of grouped) {
|
|
44
|
+
groupSkills.sort((a, b) => {
|
|
45
|
+
const countDiff = (b.endorsementCount ?? 0) - (a.endorsementCount ?? 0);
|
|
46
|
+
if (countDiff !== 0) return countDiff;
|
|
47
|
+
return compareText(a.name, b.name);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
const ordered = [];
|
|
51
|
+
for (const cat of CATEGORY_ORDER) {
|
|
52
|
+
const group = grouped.get(cat);
|
|
53
|
+
if (group?.length) ordered.push([cat, group]);
|
|
54
|
+
}
|
|
55
|
+
const otherGroup = grouped.get("other");
|
|
56
|
+
if (otherGroup?.length) ordered.push(["other", otherGroup]);
|
|
57
|
+
return ordered;
|
|
58
|
+
}
|
|
59
|
+
function groupSkillsBySubCategory(skills) {
|
|
60
|
+
const labels = /* @__PURE__ */ new Map();
|
|
61
|
+
const grouped = /* @__PURE__ */ new Map();
|
|
62
|
+
for (const skill of skills) {
|
|
63
|
+
const raw = skill.subCategory?.trim();
|
|
64
|
+
const key = raw ? raw.toLowerCase() : "";
|
|
65
|
+
if (raw && !labels.has(key)) labels.set(key, raw);
|
|
66
|
+
const bucket = grouped.get(key) ?? [];
|
|
67
|
+
bucket.push(skill);
|
|
68
|
+
grouped.set(key, bucket);
|
|
69
|
+
}
|
|
70
|
+
const sortByRank = (groupSkills) => [...groupSkills].sort((a, b) => {
|
|
71
|
+
const countDiff = (b.endorsementCount ?? 0) - (a.endorsementCount ?? 0);
|
|
72
|
+
if (countDiff !== 0) return countDiff;
|
|
73
|
+
return compareText(a.name, b.name);
|
|
74
|
+
});
|
|
75
|
+
const ordered = [];
|
|
76
|
+
for (const key of [...labels.keys()].sort(compareText)) {
|
|
77
|
+
const label = labels.get(key);
|
|
78
|
+
const group = grouped.get(key);
|
|
79
|
+
if (label && group?.length) ordered.push([label, sortByRank(group)]);
|
|
80
|
+
}
|
|
81
|
+
const ungrouped = grouped.get("");
|
|
82
|
+
if (ungrouped?.length) ordered.push([null, sortByRank(ungrouped)]);
|
|
83
|
+
return ordered;
|
|
84
|
+
}
|
|
85
|
+
export {
|
|
86
|
+
dedupeSkills,
|
|
87
|
+
groupSkillsByCategory,
|
|
88
|
+
groupSkillsBySubCategory
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=skill-grouping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/skill-grouping.ts"],"sourcesContent":["import type { ProfileSkill } from '../types/index.js';\n\nimport { CATEGORY_ORDER, normalizeSkillCategory } from './skill-categories.js';\nimport { compareText } from '../format/compare-text.js';\n\nexport type MergedProfileSkill = ProfileSkill & {\n mergedRkeys: string[];\n positionRkeys?: string[];\n};\n\n/**\n * Collapses skills that resolve to the same name (case-insensitive, trimmed).\n *\n * LinkedIn import creates one skill record per (skill, position) pair, so a\n * profile can have several \"Ruby\" rows. We surface them as a single chip with\n * all underlying rkeys exposed via `mergedRkeys` so edit/delete can fan out.\n */\nexport function dedupeSkills(skills: ProfileSkill[]): MergedProfileSkill[] {\n const groups = new Map<string, MergedProfileSkill>();\n\n for (const skill of skills) {\n const key = skill.name.trim().toLowerCase();\n const existing = groups.get(key);\n const positions = (skill as ProfileSkill & { positionRkeys?: string[] }).positionRkeys ?? [];\n\n if (!existing) {\n groups.set(key, {\n ...skill,\n mergedRkeys: [skill.rkey],\n positionRkeys: [...positions],\n });\n continue;\n }\n\n existing.mergedRkeys.push(skill.rkey);\n if (!existing.category && skill.category) existing.category = skill.category;\n const incomingSubCategory = skill.subCategory?.trim();\n if (incomingSubCategory && !existing.subCategory?.trim()) {\n existing.subCategory = incomingSubCategory;\n }\n if ((skill.endorsementCount ?? 0) > (existing.endorsementCount ?? 0)) {\n existing.endorsementCount = skill.endorsementCount;\n }\n if (skill.endorsed) existing.endorsed = true;\n if (skill.activityBacked) existing.activityBacked = true;\n const merged = new Set([...(existing.positionRkeys ?? []), ...positions]);\n existing.positionRkeys = Array.from(merged);\n }\n\n return Array.from(groups.values());\n}\n\n/**\n * Groups skills by category in CATEGORY_ORDER, with unknown/empty categories\n * collected under \"other\". Within each group: sorted by endorsementCount desc,\n * then alphabetical by name. Empty groups are omitted.\n */\nexport function groupSkillsByCategory<T extends ProfileSkill>(skills: T[]): [string, T[]][] {\n const grouped = new Map<string, T[]>();\n\n for (const skill of skills) {\n // Accepts the lexicon's own ref form (id.sifa.defs#technical) as well as\n // the bare token, so a record written to spec is not bucketed as \"other\".\n const normalised = normalizeSkillCategory(skill.category) ?? '';\n const key = (CATEGORY_ORDER as readonly string[]).includes(normalised) ? normalised : 'other';\n const bucket = grouped.get(key) ?? [];\n bucket.push(skill);\n grouped.set(key, bucket);\n }\n\n for (const [, groupSkills] of grouped) {\n groupSkills.sort((a, b) => {\n const countDiff = (b.endorsementCount ?? 0) - (a.endorsementCount ?? 0);\n if (countDiff !== 0) return countDiff;\n return compareText(a.name, b.name);\n });\n }\n\n const ordered: [string, T[]][] = [];\n for (const cat of CATEGORY_ORDER) {\n const group = grouped.get(cat);\n if (group?.length) ordered.push([cat, group]);\n }\n const otherGroup = grouped.get('other');\n if (otherGroup?.length) ordered.push(['other', otherGroup]);\n\n return ordered;\n}\n\n/**\n * Groups skills by their freeform `subCategory` label (#305), for renderers\n * that present skills in the user's own groups (Frontend, Backend, etc.).\n *\n * Labels are matched case-insensitively and surfaced under the first-seen\n * casing. Groups are ordered alphabetically by label; skills with no\n * `subCategory` collect under a trailing `null` bucket (omitted when empty).\n * Within each group: endorsementCount desc, then alphabetical by name.\n */\nexport function groupSkillsBySubCategory<T extends ProfileSkill>(\n skills: T[],\n): [string | null, T[]][] {\n const labels = new Map<string, string>();\n const grouped = new Map<string, T[]>();\n\n for (const skill of skills) {\n const raw = skill.subCategory?.trim();\n const key = raw ? raw.toLowerCase() : '';\n if (raw && !labels.has(key)) labels.set(key, raw);\n const bucket = grouped.get(key) ?? [];\n bucket.push(skill);\n grouped.set(key, bucket);\n }\n\n // Clone before sorting so the caller's arrays are never mutated in place.\n const sortByRank = (groupSkills: T[]): T[] =>\n [...groupSkills].sort((a, b) => {\n const countDiff = (b.endorsementCount ?? 0) - (a.endorsementCount ?? 0);\n if (countDiff !== 0) return countDiff;\n return compareText(a.name, b.name);\n });\n\n const ordered: [string | null, T[]][] = [];\n for (const key of [...labels.keys()].sort(compareText)) {\n const label = labels.get(key);\n const group = grouped.get(key);\n if (label && group?.length) ordered.push([label, sortByRank(group)]);\n }\n const ungrouped = grouped.get('');\n if (ungrouped?.length) ordered.push([null, sortByRank(ungrouped)]);\n\n return ordered;\n}\n"],"mappings":";AAEA,SAAS,gBAAgB,8BAA8B;AACvD,SAAS,mBAAmB;AAcrB,SAAS,aAAa,QAA8C;AACzE,QAAM,SAAS,oBAAI,IAAgC;AAEnD,aAAW,SAAS,QAAQ;AAC1B,UAAM,MAAM,MAAM,KAAK,KAAK,EAAE,YAAY;AAC1C,UAAM,WAAW,OAAO,IAAI,GAAG;AAC/B,UAAM,YAAa,MAAsD,iBAAiB,CAAC;AAE3F,QAAI,CAAC,UAAU;AACb,aAAO,IAAI,KAAK;AAAA,QACd,GAAG;AAAA,QACH,aAAa,CAAC,MAAM,IAAI;AAAA,QACxB,eAAe,CAAC,GAAG,SAAS;AAAA,MAC9B,CAAC;AACD;AAAA,IACF;AAEA,aAAS,YAAY,KAAK,MAAM,IAAI;AACpC,QAAI,CAAC,SAAS,YAAY,MAAM,SAAU,UAAS,WAAW,MAAM;AACpE,UAAM,sBAAsB,MAAM,aAAa,KAAK;AACpD,QAAI,uBAAuB,CAAC,SAAS,aAAa,KAAK,GAAG;AACxD,eAAS,cAAc;AAAA,IACzB;AACA,SAAK,MAAM,oBAAoB,MAAM,SAAS,oBAAoB,IAAI;AACpE,eAAS,mBAAmB,MAAM;AAAA,IACpC;AACA,QAAI,MAAM,SAAU,UAAS,WAAW;AACxC,QAAI,MAAM,eAAgB,UAAS,iBAAiB;AACpD,UAAM,SAAS,oBAAI,IAAI,CAAC,GAAI,SAAS,iBAAiB,CAAC,GAAI,GAAG,SAAS,CAAC;AACxE,aAAS,gBAAgB,MAAM,KAAK,MAAM;AAAA,EAC5C;AAEA,SAAO,MAAM,KAAK,OAAO,OAAO,CAAC;AACnC;AAOO,SAAS,sBAA8C,QAA8B;AAC1F,QAAM,UAAU,oBAAI,IAAiB;AAErC,aAAW,SAAS,QAAQ;AAG1B,UAAM,aAAa,uBAAuB,MAAM,QAAQ,KAAK;AAC7D,UAAM,MAAO,eAAqC,SAAS,UAAU,IAAI,aAAa;AACtF,UAAM,SAAS,QAAQ,IAAI,GAAG,KAAK,CAAC;AACpC,WAAO,KAAK,KAAK;AACjB,YAAQ,IAAI,KAAK,MAAM;AAAA,EACzB;AAEA,aAAW,CAAC,EAAE,WAAW,KAAK,SAAS;AACrC,gBAAY,KAAK,CAAC,GAAG,MAAM;AACzB,YAAM,aAAa,EAAE,oBAAoB,MAAM,EAAE,oBAAoB;AACrE,UAAI,cAAc,EAAG,QAAO;AAC5B,aAAO,YAAY,EAAE,MAAM,EAAE,IAAI;AAAA,IACnC,CAAC;AAAA,EACH;AAEA,QAAM,UAA2B,CAAC;AAClC,aAAW,OAAO,gBAAgB;AAChC,UAAM,QAAQ,QAAQ,IAAI,GAAG;AAC7B,QAAI,OAAO,OAAQ,SAAQ,KAAK,CAAC,KAAK,KAAK,CAAC;AAAA,EAC9C;AACA,QAAM,aAAa,QAAQ,IAAI,OAAO;AACtC,MAAI,YAAY,OAAQ,SAAQ,KAAK,CAAC,SAAS,UAAU,CAAC;AAE1D,SAAO;AACT;AAWO,SAAS,yBACd,QACwB;AACxB,QAAM,SAAS,oBAAI,IAAoB;AACvC,QAAM,UAAU,oBAAI,IAAiB;AAErC,aAAW,SAAS,QAAQ;AAC1B,UAAM,MAAM,MAAM,aAAa,KAAK;AACpC,UAAM,MAAM,MAAM,IAAI,YAAY,IAAI;AACtC,QAAI,OAAO,CAAC,OAAO,IAAI,GAAG,EAAG,QAAO,IAAI,KAAK,GAAG;AAChD,UAAM,SAAS,QAAQ,IAAI,GAAG,KAAK,CAAC;AACpC,WAAO,KAAK,KAAK;AACjB,YAAQ,IAAI,KAAK,MAAM;AAAA,EACzB;AAGA,QAAM,aAAa,CAAC,gBAClB,CAAC,GAAG,WAAW,EAAE,KAAK,CAAC,GAAG,MAAM;AAC9B,UAAM,aAAa,EAAE,oBAAoB,MAAM,EAAE,oBAAoB;AACrE,QAAI,cAAc,EAAG,QAAO;AAC5B,WAAO,YAAY,EAAE,MAAM,EAAE,IAAI;AAAA,EACnC,CAAC;AAEH,QAAM,UAAkC,CAAC;AACzC,aAAW,OAAO,CAAC,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,WAAW,GAAG;AACtD,UAAM,QAAQ,OAAO,IAAI,GAAG;AAC5B,UAAM,QAAQ,QAAQ,IAAI,GAAG;AAC7B,QAAI,SAAS,OAAO,OAAQ,SAAQ,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,CAAC;AAAA,EACrE;AACA,QAAM,YAAY,QAAQ,IAAI,EAAE;AAChC,MAAI,WAAW,OAAQ,SAAQ,KAAK,CAAC,MAAM,WAAW,SAAS,CAAC,CAAC;AAEjE,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// src/taxonomy/verification-providers.ts
|
|
2
|
+
var MU_VERIFIER_DIDS = [
|
|
3
|
+
"did:plc:ooensn4mr5mhznzypvxelfa3",
|
|
4
|
+
// eurosky.social -- coordinates the trusted-verifier program
|
|
5
|
+
"did:plc:durcipmx2rwgzzagbiumobs5",
|
|
6
|
+
// france-atmosphe.re
|
|
7
|
+
"did:plc:zsf5p7rqilz2qvyd7ezmxrfj",
|
|
8
|
+
// belgium-atmosphe.re
|
|
9
|
+
"did:plc:hd564mpf6bekrwzyhvujs54b",
|
|
10
|
+
// medsky.network
|
|
11
|
+
"did:plc:u5zp7npt5kpueado77kuihyz",
|
|
12
|
+
// npmx.dev
|
|
13
|
+
"did:plc:6tndl5lqrzjrx7ahjom2gjbq",
|
|
14
|
+
// stewardshiplab.org
|
|
15
|
+
"did:plc:vnycpb2e4lh4tc7oyr3n2jvh",
|
|
16
|
+
// newsmastfoundation.org
|
|
17
|
+
"did:plc:dsiqe4pszk5ldbjk66fyryjv"
|
|
18
|
+
// cpesr.fr
|
|
19
|
+
];
|
|
20
|
+
var VERIFICATION_PROVIDERS = {
|
|
21
|
+
bluesky: {
|
|
22
|
+
id: "bluesky",
|
|
23
|
+
label: "Bluesky",
|
|
24
|
+
priority: 0,
|
|
25
|
+
source: "bluesky-api",
|
|
26
|
+
verifierDids: []
|
|
27
|
+
},
|
|
28
|
+
mu: {
|
|
29
|
+
id: "mu",
|
|
30
|
+
label: "mu (Eurosky)",
|
|
31
|
+
priority: 1,
|
|
32
|
+
source: "firehose",
|
|
33
|
+
verifierDids: MU_VERIFIER_DIDS
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
function isKnownVerificationProvider(id) {
|
|
37
|
+
return Object.hasOwn(VERIFICATION_PROVIDERS, id);
|
|
38
|
+
}
|
|
39
|
+
function getVerificationProvider(id) {
|
|
40
|
+
return isKnownVerificationProvider(id) ? VERIFICATION_PROVIDERS[id] : void 0;
|
|
41
|
+
}
|
|
42
|
+
function resolveVerifierProvider(issuerDid) {
|
|
43
|
+
for (const provider of Object.values(VERIFICATION_PROVIDERS)) {
|
|
44
|
+
if (provider.source !== "firehose") continue;
|
|
45
|
+
if (provider.verifierDids.includes(issuerDid)) return provider.id;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
function primaryVerification(verifications) {
|
|
50
|
+
let best = null;
|
|
51
|
+
let bestPriority = Number.POSITIVE_INFINITY;
|
|
52
|
+
for (const verification of verifications) {
|
|
53
|
+
const provider = getVerificationProvider(verification.provider);
|
|
54
|
+
if (!provider) continue;
|
|
55
|
+
if (provider.priority < bestPriority) {
|
|
56
|
+
best = verification;
|
|
57
|
+
bestPriority = provider.priority;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return best;
|
|
61
|
+
}
|
|
62
|
+
export {
|
|
63
|
+
VERIFICATION_PROVIDERS,
|
|
64
|
+
getVerificationProvider,
|
|
65
|
+
isKnownVerificationProvider,
|
|
66
|
+
primaryVerification,
|
|
67
|
+
resolveVerifierProvider
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=verification-providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/verification-providers.ts"],"sourcesContent":["/**\n * Verification providers -- the trust roots Sifa recognizes for AT Protocol\n * `app.bsky.graph.verification` records.\n *\n * Framing (see decisions/2026-07-13-third-party-verification-providers.md, D4):\n * a verification checkmark is ONE low-tier trust layer, not Sifa's headline.\n * Most of what it certifies is \"this account is who they claim to be\" -- useful,\n * and worth carrying because it's an already-recognized network signal, but low\n * value on its own. It sits among Sifa's other trust signals and never becomes a\n * score or a gate. This registry only decides which issuers Sifa displays and\n * with what provenance.\n *\n * Data-only: badge colors and icons are consumer concerns (React DOM on web,\n * React Native on mobile), same split as {@link PLATFORM_LABELS}. Consumers map\n * a provider id to a token/color.\n */\n\nexport type VerificationProviderId = 'bluesky' | 'mu';\n\n/** How Sifa learns about a provider's verifications. */\nexport type VerificationSource = 'bluesky-api' | 'firehose';\n\nexport interface VerificationProvider {\n id: VerificationProviderId;\n /** Human label for the badge popover, e.g. \"Bluesky\", \"mu (Eurosky)\". */\n label: string;\n /**\n * Primary-display priority (D1): when an account holds verifications from\n * multiple providers, the lowest number wins the single inline badge and the\n * rest move into the popover. Must be unique across providers.\n */\n priority: number;\n /**\n * - `bluesky-api`: sourced from Bluesky's public-API `verifiedStatus`. Bluesky\n * maintains its own trusted-verifier set, so Sifa keeps no local DID list.\n * - `firehose`: sourced from the Jetstream, gated on {@link verifierDids}.\n */\n source: VerificationSource;\n /**\n * Trusted verifier DIDs for firehose-sourced providers. A verification record\n * counts only if its ISSUER DID is in this list. Empty for `bluesky-api`\n * providers (Bluesky's AppView owns that decision). DIDs, not handles: a handle\n * takeover must never confer verifier status.\n */\n verifierDids: readonly string[];\n}\n\n/**\n * A verification held by an account, as surfaced to the UI. `issuerDid` is\n * present for firehose-sourced providers and absent for `bluesky-api`.\n */\nexport interface AccountVerification {\n provider: VerificationProviderId;\n verifiedAt?: string | null;\n issuerDid?: string | null;\n}\n\n/**\n * mu / Eurosky trusted verifiers (see https://hello.mu.social/verification).\n * Sifa-maintained allowlist -- this is the governance commitment. Add a DID here\n * only after confirming the organization is a mu trusted verifier. Handles are\n * comments for humans; the DID is what the firehose issuer gate matches.\n */\nconst MU_VERIFIER_DIDS = [\n 'did:plc:ooensn4mr5mhznzypvxelfa3', // eurosky.social -- coordinates the trusted-verifier program\n 'did:plc:durcipmx2rwgzzagbiumobs5', // france-atmosphe.re\n 'did:plc:zsf5p7rqilz2qvyd7ezmxrfj', // belgium-atmosphe.re\n 'did:plc:hd564mpf6bekrwzyhvujs54b', // medsky.network\n 'did:plc:u5zp7npt5kpueado77kuihyz', // npmx.dev\n 'did:plc:6tndl5lqrzjrx7ahjom2gjbq', // stewardshiplab.org\n 'did:plc:vnycpb2e4lh4tc7oyr3n2jvh', // newsmastfoundation.org\n 'did:plc:dsiqe4pszk5ldbjk66fyryjv', // cpesr.fr\n] as const;\n\nexport const VERIFICATION_PROVIDERS: Record<VerificationProviderId, VerificationProvider> = {\n bluesky: {\n id: 'bluesky',\n label: 'Bluesky',\n priority: 0,\n source: 'bluesky-api',\n verifierDids: [],\n },\n mu: {\n id: 'mu',\n label: 'mu (Eurosky)',\n priority: 1,\n source: 'firehose',\n verifierDids: MU_VERIFIER_DIDS,\n },\n};\n\nexport function isKnownVerificationProvider(id: string): id is VerificationProviderId {\n // Object.hasOwn, not `in`: `in` also matches inherited Object.prototype keys\n // ('toString', 'constructor', ...), which would wrongly narrow those strings\n // and make getVerificationProvider return a prototype function.\n return Object.hasOwn(VERIFICATION_PROVIDERS, id);\n}\n\nexport function getVerificationProvider(id: string): VerificationProvider | undefined {\n return isKnownVerificationProvider(id) ? VERIFICATION_PROVIDERS[id] : undefined;\n}\n\n/**\n * The firehose issuer gate: given the DID that authored an\n * `app.bsky.graph.verification` record, return the provider it verifies for, or\n * `null` if the issuer is not a recognized firehose verifier. API-sourced\n * providers (Bluesky) are never matched here -- their verifications do not enter\n * through the firehose, so a self-issued record cannot resolve to them.\n */\nexport function resolveVerifierProvider(issuerDid: string): VerificationProviderId | null {\n for (const provider of Object.values(VERIFICATION_PROVIDERS)) {\n if (provider.source !== 'firehose') continue;\n if (provider.verifierDids.includes(issuerDid)) return provider.id;\n }\n return null;\n}\n\n/**\n * D1 primary-provider selection: from all verifications an account holds, pick\n * the one whose provider has the highest priority (lowest `priority` number) for\n * the single inline badge. The rest belong in the popover. Verifications from\n * unknown providers are ignored. Returns `null` when nothing is displayable.\n */\nexport function primaryVerification(\n verifications: readonly AccountVerification[],\n): AccountVerification | null {\n let best: AccountVerification | null = null;\n let bestPriority = Number.POSITIVE_INFINITY;\n for (const verification of verifications) {\n const provider = getVerificationProvider(verification.provider);\n if (!provider) continue;\n if (provider.priority < bestPriority) {\n best = verification;\n bestPriority = provider.priority;\n }\n }\n return best;\n}\n"],"mappings":";AA+DA,IAAM,mBAAmB;AAAA,EACvB;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAEO,IAAM,yBAA+E;AAAA,EAC1F,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,cAAc,CAAC;AAAA,EACjB;AAAA,EACA,IAAI;AAAA,IACF,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AACF;AAEO,SAAS,4BAA4B,IAA0C;AAIpF,SAAO,OAAO,OAAO,wBAAwB,EAAE;AACjD;AAEO,SAAS,wBAAwB,IAA8C;AACpF,SAAO,4BAA4B,EAAE,IAAI,uBAAuB,EAAE,IAAI;AACxE;AASO,SAAS,wBAAwB,WAAkD;AACxF,aAAW,YAAY,OAAO,OAAO,sBAAsB,GAAG;AAC5D,QAAI,SAAS,WAAW,WAAY;AACpC,QAAI,SAAS,aAAa,SAAS,SAAS,EAAG,QAAO,SAAS;AAAA,EACjE;AACA,SAAO;AACT;AAQO,SAAS,oBACd,eAC4B;AAC5B,MAAI,OAAmC;AACvC,MAAI,eAAe,OAAO;AAC1B,aAAW,gBAAgB,eAAe;AACxC,UAAM,WAAW,wBAAwB,aAAa,QAAQ;AAC9D,QAAI,CAAC,SAAU;AACf,QAAI,SAAS,WAAW,cAAc;AACpC,aAAO;AACP,qBAAe,SAAS;AAAA,IAC1B;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// src/taxonomy/workplace-type.ts
|
|
2
|
+
var WORKPLACE_TYPE_OPTIONS = [
|
|
3
|
+
{ value: "id.sifa.defs#onSite", label: "On-site" },
|
|
4
|
+
{ value: "id.sifa.defs#hybrid", label: "Hybrid" },
|
|
5
|
+
{ value: "id.sifa.defs#remoteLocal", label: "Remote (same country)" },
|
|
6
|
+
{ value: "id.sifa.defs#remoteRegion", label: "Remote (same region)" },
|
|
7
|
+
{ value: "id.sifa.defs#remoteGlobal", label: "Remote (anywhere)" }
|
|
8
|
+
];
|
|
9
|
+
var WORKPLACE_TYPE_LABELS = {
|
|
10
|
+
...Object.fromEntries(WORKPLACE_TYPE_OPTIONS.map((o) => [o.value, o.label])),
|
|
11
|
+
"id.sifa.defs#remote": "Remote"
|
|
12
|
+
};
|
|
13
|
+
function getWorkplaceTypeLabel(value) {
|
|
14
|
+
if (!value) return void 0;
|
|
15
|
+
return WORKPLACE_TYPE_LABELS[value] ?? value;
|
|
16
|
+
}
|
|
17
|
+
var WORKPLACE_TYPE_LEGACY_ALIASES = {
|
|
18
|
+
"id.sifa.defs#remote": "id.sifa.defs#remoteGlobal"
|
|
19
|
+
};
|
|
20
|
+
function normalizeWorkplaceTypes(values) {
|
|
21
|
+
const seen = /* @__PURE__ */ new Set();
|
|
22
|
+
const out = [];
|
|
23
|
+
for (const value of values) {
|
|
24
|
+
const canonical = WORKPLACE_TYPE_LEGACY_ALIASES[value] ?? value;
|
|
25
|
+
if (seen.has(canonical)) continue;
|
|
26
|
+
seen.add(canonical);
|
|
27
|
+
out.push(canonical);
|
|
28
|
+
}
|
|
29
|
+
return out;
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
WORKPLACE_TYPE_LABELS,
|
|
33
|
+
WORKPLACE_TYPE_LEGACY_ALIASES,
|
|
34
|
+
WORKPLACE_TYPE_OPTIONS,
|
|
35
|
+
getWorkplaceTypeLabel,
|
|
36
|
+
normalizeWorkplaceTypes
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=workplace-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/taxonomy/workplace-type.ts"],"sourcesContent":["/**\n * Workplace-type taxonomy. Mirrors `id.sifa.defs#workplaceType.knownValues`\n * from sifa-lexicons. `remote` is retained for legacy records but the scoped\n * variants (`remoteLocal`, `remoteRegion`, `remoteGlobal`) are preferred for\n * new records per the lexicon description.\n */\n\nexport interface WorkplaceTypeOption {\n value: string;\n label: string;\n}\n\nexport const WORKPLACE_TYPE_OPTIONS: WorkplaceTypeOption[] = [\n { value: 'id.sifa.defs#onSite', label: 'On-site' },\n { value: 'id.sifa.defs#hybrid', label: 'Hybrid' },\n { value: 'id.sifa.defs#remoteLocal', label: 'Remote (same country)' },\n { value: 'id.sifa.defs#remoteRegion', label: 'Remote (same region)' },\n { value: 'id.sifa.defs#remoteGlobal', label: 'Remote (anywhere)' },\n];\n\nexport const WORKPLACE_TYPE_LABELS: Record<string, string> = {\n ...Object.fromEntries(WORKPLACE_TYPE_OPTIONS.map((o) => [o.value, o.label])),\n 'id.sifa.defs#remote': 'Remote',\n};\n\n/** Resolve a label for a workplace-type token. Falls back to the raw value. */\nexport function getWorkplaceTypeLabel(value: string | undefined | null): string | undefined {\n if (!value) return undefined;\n return WORKPLACE_TYPE_LABELS[value] ?? value;\n}\n\n/**\n * Legacy workplace tokens the lexicon retains for old records, mapped to their\n * current canonical token. `id.sifa.defs#remote` is \"Treated as remoteGlobal by\n * AppViews\" per the lexicon, so it resolves to the scoped `remoteGlobal`.\n */\nexport const WORKPLACE_TYPE_LEGACY_ALIASES: Record<string, string> = {\n 'id.sifa.defs#remote': 'id.sifa.defs#remoteGlobal',\n};\n\n/**\n * Normalize a list of workplace-type tokens: resolve legacy aliases to their\n * canonical token, 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 normalizeWorkplaceTypes(values: readonly string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const value of values) {\n const canonical = WORKPLACE_TYPE_LEGACY_ALIASES[value] ?? value;\n if (seen.has(canonical)) continue;\n seen.add(canonical);\n out.push(canonical);\n }\n return out;\n}\n"],"mappings":";AAYO,IAAM,yBAAgD;AAAA,EAC3D,EAAE,OAAO,uBAAuB,OAAO,UAAU;AAAA,EACjD,EAAE,OAAO,uBAAuB,OAAO,SAAS;AAAA,EAChD,EAAE,OAAO,4BAA4B,OAAO,wBAAwB;AAAA,EACpE,EAAE,OAAO,6BAA6B,OAAO,uBAAuB;AAAA,EACpE,EAAE,OAAO,6BAA6B,OAAO,oBAAoB;AACnE;AAEO,IAAM,wBAAgD;AAAA,EAC3D,GAAG,OAAO,YAAY,uBAAuB,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAAA,EAC3E,uBAAuB;AACzB;AAGO,SAAS,sBAAsB,OAAsD;AAC1F,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,sBAAsB,KAAK,KAAK;AACzC;AAOO,IAAM,gCAAwD;AAAA,EACnE,uBAAuB;AACzB;AASO,SAAS,wBAAwB,QAAqC;AAC3E,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,MAAgB,CAAC;AACvB,aAAW,SAAS,QAAQ;AAC1B,UAAM,YAAY,8BAA8B,KAAK,KAAK;AAC1D,QAAI,KAAK,IAAI,SAAS,EAAG;AACzB,SAAK,IAAI,SAAS;AAClB,QAAI,KAAK,SAAS;AAAA,EACpB;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// src/tokens/colors.ts
|
|
2
|
+
var colors = {
|
|
3
|
+
/** Flexoki Blue -- Sifa's primary accent. */
|
|
4
|
+
primary: "#4385BE",
|
|
5
|
+
/** Flexoki Purple -- secondary accent, shared across Singi Labs products. */
|
|
6
|
+
secondary: "#8B7EC8"
|
|
7
|
+
};
|
|
8
|
+
export {
|
|
9
|
+
colors
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/tokens/colors.ts"],"sourcesContent":["/**\n * Sifa brand colors -- accent values from the Singi Labs design system.\n *\n * Source of truth: `Singi Labs/brand/design-system.md` §Colors. Sifa uses a\n * distinct Flexoki accent from sibling Singi Labs products (Barazo, Singi\n * Labs itself); Flexoki Purple is the shared secondary accent across the\n * product family.\n *\n * NOTE: Neutral scales (background, surface, border, text) are not encoded\n * here. They come from Radix Colors (12-step scales with automatic\n * light/dark mode) and resolve at runtime via CSS variables in\n * `sifa-web`'s `globals.css`. Encoding them as TS constants would\n * misrepresent how they're consumed.\n */\n\nexport const colors = {\n /** Flexoki Blue -- Sifa's primary accent. */\n primary: '#4385BE',\n /** Flexoki Purple -- secondary accent, shared across Singi Labs products. */\n secondary: '#8B7EC8',\n} as const;\n\nexport type Colors = typeof colors;\n"],"mappings":";AAeO,IAAM,SAAS;AAAA;AAAA,EAEpB,SAAS;AAAA;AAAA,EAET,WAAW;AACb;","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// src/tokens/icons.ts
|
|
2
|
+
var iconSet = "phosphor";
|
|
3
|
+
var iconWeights = {
|
|
4
|
+
/** UI chrome -- buttons, nav, default state. */
|
|
5
|
+
uiChrome: "regular",
|
|
6
|
+
/** Interactive / active states -- selected items, primary buttons. */
|
|
7
|
+
interactive: "bold",
|
|
8
|
+
/** Decorative / illustration -- empty states, hero sections. */
|
|
9
|
+
decorative: "duotone"
|
|
10
|
+
};
|
|
11
|
+
export {
|
|
12
|
+
iconSet,
|
|
13
|
+
iconWeights
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/tokens/icons.ts"],"sourcesContent":["/**\n * Sifa icon-set conventions.\n *\n * Source of truth: `Singi Labs/brand/design-system.md` §Icons. Phosphor\n * Icons is the only icon library used across Singi Labs products; mixing\n * icon families within a product is forbidden by convention.\n *\n * The weight conventions are guidance for consumers, not enforced. Encoded\n * here so tooling (e.g., a future \"design lint\" check) can reference them.\n */\n\nexport const iconSet = 'phosphor' as const;\n\nexport const iconWeights = {\n /** UI chrome -- buttons, nav, default state. */\n uiChrome: 'regular',\n /** Interactive / active states -- selected items, primary buttons. */\n interactive: 'bold',\n /** Decorative / illustration -- empty states, hero sections. */\n decorative: 'duotone',\n} as const;\n\nexport type IconSet = typeof iconSet;\nexport type IconWeights = typeof iconWeights;\n"],"mappings":";AAWO,IAAM,UAAU;AAEhB,IAAM,cAAc;AAAA;AAAA,EAEzB,UAAU;AAAA;AAAA,EAEV,aAAa;AAAA;AAAA,EAEb,YAAY;AACd;","names":[]}
|
package/dist/tokens/index.js
CHANGED
|
@@ -1,41 +1,12 @@
|
|
|
1
|
-
// src/tokens/
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
// src/tokens/index.ts
|
|
2
|
+
import { colors } from "./colors.js";
|
|
3
|
+
import { fonts, fontFallbackStacks } from "./typography.js";
|
|
4
|
+
import { iconSet, iconWeights } from "./icons.js";
|
|
5
|
+
export {
|
|
6
|
+
colors,
|
|
7
|
+
fontFallbackStacks,
|
|
8
|
+
fonts,
|
|
9
|
+
iconSet,
|
|
10
|
+
iconWeights
|
|
7
11
|
};
|
|
8
|
-
|
|
9
|
-
// src/tokens/typography.ts
|
|
10
|
-
var SYSTEM_SANS_FALLBACK = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif";
|
|
11
|
-
var SYSTEM_MONO_FALLBACK = "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
|
|
12
|
-
var INTL_SCRIPT_FALLBACK = "'Noto Sans', 'Noto Sans Arabic', 'Noto Sans Devanagari', 'Noto Sans Thai', 'Noto Sans Hebrew'";
|
|
13
|
-
var CJK_SYSTEM_FALLBACK = "'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Yu Gothic UI', 'Meiryo', 'Noto Sans CJK JP', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans CJK SC', 'PingFang TC', 'Microsoft JhengHei', 'Noto Sans CJK TC', 'Apple SD Gothic Neo', 'Malgun Gothic', 'Noto Sans CJK KR'";
|
|
14
|
-
var fonts = {
|
|
15
|
-
/** Body text -- iA Writer Quattro (self-hosted, OFL-licensed). */
|
|
16
|
-
sans: "iA Writer Quattro",
|
|
17
|
-
/** Headings (h1-h3) -- Space Grotesk Bold (self-hosted). Single weight (700). */
|
|
18
|
-
display: "Space Grotesk",
|
|
19
|
-
/** Code / monospace -- Source Code Pro (loaded via `next/font` in Next.js consumers). */
|
|
20
|
-
mono: "Source Code Pro"
|
|
21
|
-
};
|
|
22
|
-
var fontFallbackStacks = {
|
|
23
|
-
sans: `'${fonts.sans}', ${INTL_SCRIPT_FALLBACK}, ${CJK_SYSTEM_FALLBACK}, ${SYSTEM_SANS_FALLBACK}`,
|
|
24
|
-
display: `'${fonts.display}', '${fonts.sans}', ${INTL_SCRIPT_FALLBACK}, ${CJK_SYSTEM_FALLBACK}, system-ui, sans-serif`,
|
|
25
|
-
mono: `'${fonts.mono}', ${SYSTEM_MONO_FALLBACK}`
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
// src/tokens/icons.ts
|
|
29
|
-
var iconSet = "phosphor";
|
|
30
|
-
var iconWeights = {
|
|
31
|
-
/** UI chrome -- buttons, nav, default state. */
|
|
32
|
-
uiChrome: "regular",
|
|
33
|
-
/** Interactive / active states -- selected items, primary buttons. */
|
|
34
|
-
interactive: "bold",
|
|
35
|
-
/** Decorative / illustration -- empty states, hero sections. */
|
|
36
|
-
decorative: "duotone"
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export { colors, fontFallbackStacks, fonts, iconSet, iconWeights };
|
|
40
|
-
//# sourceMappingURL=index.js.map
|
|
41
12
|
//# sourceMappingURL=index.js.map
|
package/dist/tokens/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tokens/
|
|
1
|
+
{"version":3,"sources":["../../src/tokens/index.ts"],"sourcesContent":["/**\n * `@singi-labs/sifa-sdk/tokens` -- Sifa brand design tokens.\n *\n * Encoded from `Singi Labs/brand/design-system.md`. Optional for third\n * parties; primary consumers are `sifa-web` (Tailwind config + font CSS)\n * and the planned `sifa-app` (React Native style objects).\n *\n * Decision (2026-05-14, reaffirmed 2026-05-16): TS constants only. No CSS\n * variable strings, no Style Dictionary output. Consumers translate to\n * their own format.\n */\n\nexport { colors, type Colors } from './colors.js';\nexport { fonts, fontFallbackStacks, type Fonts, type FontFallbackStacks } from './typography.js';\nexport { iconSet, iconWeights, type IconSet, type IconWeights } from './icons.js';\n"],"mappings":";AAYA,SAAS,cAA2B;AACpC,SAAS,OAAO,0BAA+D;AAC/E,SAAS,SAAS,mBAAmD;","names":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// src/tokens/typography.ts
|
|
2
|
+
var SYSTEM_SANS_FALLBACK = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif";
|
|
3
|
+
var SYSTEM_MONO_FALLBACK = "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
|
|
4
|
+
var INTL_SCRIPT_FALLBACK = "'Noto Sans', 'Noto Sans Arabic', 'Noto Sans Devanagari', 'Noto Sans Thai', 'Noto Sans Hebrew'";
|
|
5
|
+
var CJK_SYSTEM_FALLBACK = "'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Yu Gothic UI', 'Meiryo', 'Noto Sans CJK JP', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans CJK SC', 'PingFang TC', 'Microsoft JhengHei', 'Noto Sans CJK TC', 'Apple SD Gothic Neo', 'Malgun Gothic', 'Noto Sans CJK KR'";
|
|
6
|
+
var fonts = {
|
|
7
|
+
/** Body text -- iA Writer Quattro (self-hosted, OFL-licensed). */
|
|
8
|
+
sans: "iA Writer Quattro",
|
|
9
|
+
/** Headings (h1-h3) -- Space Grotesk Bold (self-hosted). Single weight (700). */
|
|
10
|
+
display: "Space Grotesk",
|
|
11
|
+
/** Code / monospace -- Source Code Pro (loaded via `next/font` in Next.js consumers). */
|
|
12
|
+
mono: "Source Code Pro"
|
|
13
|
+
};
|
|
14
|
+
var fontFallbackStacks = {
|
|
15
|
+
sans: `'${fonts.sans}', ${INTL_SCRIPT_FALLBACK}, ${CJK_SYSTEM_FALLBACK}, ${SYSTEM_SANS_FALLBACK}`,
|
|
16
|
+
display: `'${fonts.display}', '${fonts.sans}', ${INTL_SCRIPT_FALLBACK}, ${CJK_SYSTEM_FALLBACK}, system-ui, sans-serif`,
|
|
17
|
+
mono: `'${fonts.mono}', ${SYSTEM_MONO_FALLBACK}`
|
|
18
|
+
};
|
|
19
|
+
export {
|
|
20
|
+
fontFallbackStacks,
|
|
21
|
+
fonts
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=typography.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/tokens/typography.ts"],"sourcesContent":["/**\n * Sifa typography tokens -- font families and fallback stacks.\n *\n * Source of truth: `Singi Labs/brand/design-system.md` §Typography. Three\n * families, with explicit fallback chains so consumers can paste straight\n * into a CSS `font-family` declaration or a React Native style.\n *\n * Self-hosted fonts (Sifa-web ships `iA Writer Quattro` + `Space Grotesk`\n * WOFF2 files; sifa-app will need to bundle equivalents). The SDK only\n * encodes the names + fallbacks; consumers handle font loading.\n */\n\nconst SYSTEM_SANS_FALLBACK = \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\";\nconst SYSTEM_MONO_FALLBACK = 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace';\n\n// Noto Sans subsets layered after the brand fonts to cover scripts the\n// brand fonts don't ship. Consumers wire @font-face with `unicode-range`\n// so browsers fetch a file only when a glyph in that range is rendered.\nconst INTL_SCRIPT_FALLBACK =\n \"'Noto Sans', 'Noto Sans Arabic', 'Noto Sans Devanagari', 'Noto Sans Thai', 'Noto Sans Hebrew'\";\n\n// OS-installed CJK fonts. Sifa intentionally does not ship CJK web fonts:\n// every CJK user already has an OS-level CJK font and vendoring them\n// would add 14+ MB. Listed JP-first, then SC, TC, KR, with Noto Sans CJK\n// per-script as the Linux fallback.\nconst CJK_SYSTEM_FALLBACK =\n \"'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Yu Gothic UI', 'Meiryo', 'Noto Sans CJK JP', \" +\n \"'PingFang SC', 'Microsoft YaHei', 'Noto Sans CJK SC', \" +\n \"'PingFang TC', 'Microsoft JhengHei', 'Noto Sans CJK TC', \" +\n \"'Apple SD Gothic Neo', 'Malgun Gothic', 'Noto Sans CJK KR'\";\n\nexport const fonts = {\n /** Body text -- iA Writer Quattro (self-hosted, OFL-licensed). */\n sans: 'iA Writer Quattro',\n /** Headings (h1-h3) -- Space Grotesk Bold (self-hosted). Single weight (700). */\n display: 'Space Grotesk',\n /** Code / monospace -- Source Code Pro (loaded via `next/font` in Next.js consumers). */\n mono: 'Source Code Pro',\n} as const;\n\nexport const fontFallbackStacks = {\n sans: `'${fonts.sans}', ${INTL_SCRIPT_FALLBACK}, ${CJK_SYSTEM_FALLBACK}, ${SYSTEM_SANS_FALLBACK}`,\n display: `'${fonts.display}', '${fonts.sans}', ${INTL_SCRIPT_FALLBACK}, ${CJK_SYSTEM_FALLBACK}, system-ui, sans-serif`,\n mono: `'${fonts.mono}', ${SYSTEM_MONO_FALLBACK}`,\n} as const;\n\nexport type Fonts = typeof fonts;\nexport type FontFallbackStacks = typeof fontFallbackStacks;\n"],"mappings":";AAYA,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAK7B,IAAM,uBACJ;AAMF,IAAM,sBACJ;AAKK,IAAM,QAAQ;AAAA;AAAA,EAEnB,MAAM;AAAA;AAAA,EAEN,SAAS;AAAA;AAAA,EAET,MAAM;AACR;AAEO,IAAM,qBAAqB;AAAA,EAChC,MAAM,IAAI,MAAM,IAAI,MAAM,oBAAoB,KAAK,mBAAmB,KAAK,oBAAoB;AAAA,EAC/F,SAAS,IAAI,MAAM,OAAO,OAAO,MAAM,IAAI,MAAM,oBAAoB,KAAK,mBAAmB;AAAA,EAC7F,MAAM,IAAI,MAAM,IAAI,MAAM,oBAAoB;AAChD;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["import type { AgentRef } from '../schemas/shared.js';\n\nexport interface LocationValue {\n city?: string;\n /** community.lexicon.location.address field -- preferred over `city`. */\n locality?: string;\n region?: string;\n country: string;\n countryCode?: string;\n postalCode?: string;\n geonameId?: number;\n}\n\nexport interface SkillRef {\n uri: string;\n}\n\nexport interface ProfilePosition {\n rkey: string;\n /**\n * Optional: omitted for self-employed / freelance / independent positions.\n * The lexicon and the record schema already make company optional.\n */\n company?: string;\n /**\n * Portable org entity identifier (Wikidata/ROR/LEI URI) written when the user\n * picks an organization from the resolver typeahead. Absent for free-text or\n * independent positions (#159).\n */\n entityRef?: string;\n /**\n * Resolved current canonical name of the durably-linked company (#240),\n * computed by the AppView at read time. Render this over `company` for a\n * linked position, so a name correction reaches every linked profile without\n * a PDS write. Absent for free-text or unresolved positions (fall back to\n * `company`).\n */\n entityName?: string;\n /**\n * Canonical org reference (#511): a nested mirror of the flat\n * name / did / entityRef fields. Prefer it when present; the nested\n * shape wins over the flat fields (resolveAgentRef precedence).\n */\n agentRef?: AgentRef;\n /**\n * Company-page slug for a durably-linked position, resolved by the AppView at\n * read time alongside `entityName` (#159). Lets a consumer link the company\n * name to its `/c/{domain}` page without re-resolving `entityRef`. `domain` is\n * the readable form, `publicId` the durable fallback; build the link as\n * `/c/${companyDomain ?? companyPublicId}`. Both absent for free-text /\n * unlinked positions.\n */\n companyDomain?: string;\n companyPublicId?: string;\n title: string;\n description?: string;\n startedAt: string;\n endedAt?: string;\n location?: LocationValue | null;\n employmentType?: string;\n /**\n * Party this role is held on behalf of, when the person represents someone else --\n * most often a fund whose board seat this is. A disclosure rather than a role type,\n * so it is a separate field from `employmentType`. Absent for independent roles.\n */\n onBehalfOf?: string;\n /** DID of the represented party, when known. May be an organization or a person. */\n onBehalfOfDid?: string;\n /** Portable entity identifier for the represented party (Wikidata/ROR/LEI URI). */\n onBehalfOfEntityRef?: string;\n workplaceType?: string;\n skills?: SkillRef[];\n linkedSkills?: ProfileSkill[];\n primary?: boolean;\n hidden?: boolean;\n}\n\nexport interface ProfileEducation {\n rkey: string;\n institution: string;\n /**\n * Portable org entity identifier (Wikidata/ROR/LEI URI) written when the user\n * links the institution to a resolved organization (#159/#241). Absent for\n * free-text entries. Mirrors `ProfilePosition.entityRef`; the AppView sends it\n * for display (the \"Linked\" badge).\n */\n entityRef?: string;\n /**\n * Resolved current canonical name of the durably-linked institution (#252),\n * computed by the AppView at read time. Render this over `institution` for a\n * linked entry, so a name correction reaches every linked profile without a\n * PDS write. Absent for free-text or unresolved entries (fall back to\n * `institution`).\n */\n entityName?: string;\n /**\n * Canonical org reference (#511): a nested mirror of the flat\n * name / did / entityRef fields. Prefer it when present; the nested\n * shape wins over the flat fields (resolveAgentRef precedence).\n */\n agentRef?: AgentRef;\n degree?: string;\n fieldOfStudy?: string;\n /** European Qualifications Framework level, 1 to 8 (8 = doctoral). */\n eqfLevel?: number;\n description?: string;\n activities?: string;\n startedAt?: string;\n endedAt?: string;\n hidden?: boolean;\n /** User-flagged primary education entry, surfaced in the Highlights block. */\n primary?: boolean;\n}\n\nexport interface ProfileSkill {\n rkey: string;\n name: string;\n /**\n * CID of the skill record, needed as a strongRef when endorsing it. Often\n * absent: only the firehose carries a CID, so a skill added moments ago has\n * none indexed yet. Pass it to `createEndorsement` when present and omit it\n * otherwise -- the AppView resolves it from the owner's PDS.\n */\n cid?: string;\n category?: string;\n /**\n * Freeform user-defined grouping label nested under `category` (e.g.\n * \"Frontend\", \"Backend\"). No known values; renderers decide the display\n * label. See `groupSkillsBySubCategory`.\n */\n subCategory?: string;\n endorsementCount?: number;\n endorsed?: boolean;\n /**\n * Names this skill was endorsed under, where they differ from what it is\n * called now. Absent when nothing has drifted.\n *\n * A rename keeps the same record, so endorsements follow it and stay\n * counted. Showing the original name is what keeps that honest: a reader can\n * see that a skill now called one thing was vouched for as another, instead\n * of the rename quietly laundering the endorsement.\n */\n endorsedAs?: string[];\n activityBacked?: boolean;\n}\n\nexport interface SkillSuggestion {\n canonicalName: string;\n slug: string;\n category: string;\n}\n\nexport interface Endorsement {\n endorserDid: string;\n endorserHandle: string;\n endorserDisplayName?: string;\n endorserAvatar?: string;\n comment?: string;\n relationshipContext?: string;\n createdAt: string;\n}\n\nexport interface EndorsementData {\n skillRkey: string;\n comment?: string;\n relationshipContext?: string;\n}\n\nexport interface ProfileLocation {\n rkey: string;\n type: string;\n label?: string | null;\n isPrimary: boolean;\n locationCountry?: string | null;\n locationRegion?: string | null;\n /** Legacy alias for `locationLocality`; emitted by sifa-api during the additive response window. */\n locationCity?: string | null;\n /** community.lexicon.location.address field name -- prefer over `locationCity`. */\n locationLocality?: string | null;\n countryCode?: string | null;\n location?: string | null;\n}\n\nexport interface ProfileCertification {\n rkey: string;\n name: string;\n /**\n * Issuing organization. The write contract names this field `authority`\n * everywhere (record schema, DB column, PDS record); the AppView read view\n * emits `authority` as the canonical field (#249). Optional during the\n * deprecation window while consumers migrate off the legacy `issuingOrg`\n * alias below.\n */\n authority?: string;\n /**\n * @deprecated Legacy read-view alias for {@link authority} (#249). Carries the\n * same value; will be dropped once web + SDK consumers read `authority`.\n */\n issuingOrg?: string;\n /**\n * Portable org entity identifier (Wikidata/ROR/LEI URI) linking the issuing\n * organization to a resolved entity (#159/#241). Absent for free-text entries.\n * Mirrors `ProfilePosition.entityRef`; the AppView sends it for display.\n */\n entityRef?: string;\n /**\n * Resolved current canonical name of the durably-linked issuing organization\n * (#252), computed by the AppView at read time. Render this over `authority`\n * for a linked entry. Absent for free-text or unresolved entries (fall back to\n * `authority`).\n */\n entityName?: string;\n /**\n * Canonical org reference (#511): a nested mirror of the flat\n * name / did / entityRef fields. Prefer it when present; the nested\n * shape wins over the flat fields (resolveAgentRef precedence).\n */\n agentRef?: AgentRef;\n issueDate?: string;\n expiryDate?: string;\n credentialUrl?: string;\n hidden?: boolean;\n}\n\nexport interface ProfileProject {\n rkey: string;\n name: string;\n /** The user's own role on the project (#596), e.g. Maintainer. */\n role?: string;\n description?: string;\n url?: string;\n startDate?: string;\n endDate?: string;\n /** Other people named on this project, hydrated from the stored DIDs. */\n members?: ProjectMemberCard[];\n /**\n * AT-URI of the same project as recorded elsewhere, when this entry\n * duplicates another person's. Set so consumers can tell the two describe one\n * project; both still render from their own owner's record.\n */\n /** AT-URI of the same record on another person's profile, when they keep one. */\n sameAs?: string;\n hidden?: boolean;\n /** User-flagged primary project, surfaced in the Highlights block. Ongoing only. */\n primary?: boolean;\n}\n\nexport interface PublicationContributor {\n name: string;\n orcidId?: string;\n did?: string;\n handle?: string;\n}\n\n/**\n * A co-author an importer produced that the profile owner can offer to link to\n * a Sifa account.\n *\n * Matched on verified ORCID iD only, never on name: \"A. Example\", \"Alice\n * Example\", and \"Example, A.\" are one person, and \"J. Smith\" is four hundred.\n *\n * A suggestion, never a claim. Nothing reaches any repository until the owner\n * acts, which is what makes ORCID re-syncing safe: matching writes nothing, so\n * a re-sync cannot generate a confirmation request.\n */\nexport interface AuthorSuggestion {\n /** ORCID iD the match was made on. The join key back to a contributor. */\n orcidId: string;\n did: string;\n handle: string;\n /** Display name on the matched account, for showing what is being proposed. */\n displayName?: string;\n}\n\n/**\n * A typed link from a work to another version or form of it\n * (`id.sifa.defs#relatedIdentifier`). `relationType` uses the DataCite\n * vocabulary, e.g. `IsPreprintOf` on a preprint pointing at its published\n * version. `identifierType` is `DOI` (the default when absent), `AT-URI` or `URL`.\n */\nexport interface RelatedIdentifier {\n identifier: string;\n identifierType?: string;\n relationType: string;\n}\n\nexport interface ProfilePublication {\n rkey: string;\n title: string;\n subtitle?: string;\n publisher?: string;\n date?: string;\n url?: string;\n description?: string;\n source?: 'sifa' | 'standard' | 'orcid';\n doi?: string;\n type?: string;\n typeLabel?: string;\n contributors?: PublicationContributor[];\n verified?: boolean;\n verifiedVia?: string;\n orcidPutCode?: number;\n hidden?: boolean;\n /** User-flagged primary publication, surfaced in the Highlights block. */\n primary?: boolean;\n orcidCorroborated?: boolean;\n pendingVerification?: boolean;\n appId?: string;\n /**\n * AT-URI of the parent `site.standard.publication` for Standard.site\n * articles — the subscribable unit. Used to group articles by publication\n * on the profile. Undefined for Sifa/ORCID publications.\n */\n publicationUri?: string | null;\n /** Canonical publication origin — the subscribe / link-out target. */\n publicationUrl?: string | null;\n /** Publication display name for the group header (falls back to host). */\n publicationName?: string | null;\n /**\n * Cover image URL for Standard.site articles — the document's `coverImage`\n * blob (CDN-served), falling back to the article page's og:image. Undefined\n * for Sifa/ORCID publications, null when none could be resolved.\n */\n image?: string | null;\n /**\n * Other versions or forms of this work: relations declared on the record\n * plus, for a DOI, those registered with DataCite or Crossref (#590). Feed\n * to `groupPublicationVersions` to fold a preprint under its published version.\n */\n relatedIdentifiers?: RelatedIdentifier[];\n}\n\nexport interface ProfileVolunteering {\n rkey: string;\n organization: string;\n /**\n * Portable org entity identifier (Wikidata/ROR/LEI URI) linking the\n * organization to a resolved entity (#159/#241). Absent for free-text entries.\n * Mirrors `ProfilePosition.entityRef`; the AppView sends it for display.\n */\n entityRef?: string;\n /**\n * Resolved current canonical name of the durably-linked organization (#252),\n * computed by the AppView at read time. Render this over `organization` for a\n * linked entry. Absent for free-text or unresolved entries (fall back to\n * `organization`).\n */\n entityName?: string;\n /**\n * Canonical org reference (#511): a nested mirror of the flat\n * name / did / entityRef fields. Prefer it when present; the nested\n * shape wins over the flat fields (resolveAgentRef precedence).\n */\n agentRef?: AgentRef;\n role?: string;\n cause?: string;\n startDate?: string;\n endDate?: string;\n description?: string;\n hidden?: boolean;\n}\n\nexport interface ProfileHonor {\n rkey: string;\n title: string;\n issuer?: string;\n /**\n * Portable org entity identifier (Wikidata/ROR/LEI URI) linking the issuer to a\n * resolved entity (#159/#241). Absent for free-text entries. Mirrors\n * `ProfilePosition.entityRef`; the AppView sends it for display.\n */\n entityRef?: string;\n /**\n * Resolved current canonical name of the durably-linked issuer (#252),\n * computed by the AppView at read time. Render this over `issuer` for a linked\n * entry. Absent for free-text or unresolved entries (fall back to `issuer`).\n */\n entityName?: string;\n /**\n * Canonical org reference (#511): a nested mirror of the flat\n * name / did / entityRef fields. Prefer it when present; the nested\n * shape wins over the flat fields (resolveAgentRef precedence).\n */\n agentRef?: AgentRef;\n date?: string;\n description?: string;\n hidden?: boolean;\n}\n\n/**\n * One proof link on an involvement record, as served by the AppView. Mirrors\n * `id.sifa.defs#artifactLink`, plus the computed rung-2 verification signal.\n */\nexport interface ProfileInvolvementLink {\n url: string;\n kind?: string;\n label?: string;\n /**\n * Rung-2 cross-ref: true when the link host matches one of the owner's\n * *verified* `externalAccount` records (GitHub, GitLab, ORCID, ...).\n * Computed by the AppView; deterministic host match, no new primitive.\n */\n verified?: boolean;\n /**\n * Platform token of the matched verified external account (e.g.\n * `id.sifa.defs#platformGithub`), for the badge label. Absent when\n * `verified` is not true.\n */\n verifiedPlatform?: string;\n}\n\n/**\n * An involvement entry as served by the AppView: an `id.sifa.profile.involvement`\n * record, or a mapped legacy `id.sifa.profile.volunteering` record (`legacy`),\n * grouped in the UI by `kind` via the SDK's involvement-kind taxonomy.\n */\n/** One artifact link on an investment (round announcement, portfolio page, filing). */\nexport interface ProfileInvestmentLink {\n url: string;\n kind?: string;\n label?: string;\n}\n\n/** A capital position: money the person put in. Roles with duties are positions. */\nexport interface ProfileInvestment {\n rkey: string;\n /** For a limited-partner entry this names the fund, not a portfolio company. */\n company: string;\n companyDid?: string;\n entityRef?: string;\n /** Resolved canonical name of the linked company. Render over `company` when present. */\n entityName?: string;\n /**\n * Canonical org reference (#511): a nested mirror of the flat\n * name / did / entityRef fields. Prefer it when present; the nested\n * shape wins over the flat fields (resolveAgentRef precedence).\n */\n agentRef?: AgentRef;\n /** How the capital went in. Angel, syndicate member or LP -- never GP. */\n role?: string;\n /** The company's funding stage at the time of the investment, not its stage today. */\n stage?: string;\n /** active / exited / written off / undisclosed. */\n status?: string;\n /** The vehicle the capital went through. Absent for a cheque in the person's own name. */\n via?: string;\n viaDid?: string;\n viaEntityRef?: string;\n /** Whole major currency units plus an ISO 4217 code. Absent unless the person opted in. */\n amount?: { value: number; currency: string };\n startedAt?: string;\n endedAt?: string;\n description?: string;\n links?: ProfileInvestmentLink[];\n hidden?: boolean;\n}\n\nexport interface ProfileInvolvement {\n rkey: string;\n /** Involvement-kind token; drives the display heading. Legacy rows map to charity. */\n kind: string;\n upstream?: string;\n upstreamDid?: string;\n upstreamUrl?: string;\n role?: string;\n description?: string;\n startedAt?: string;\n endedAt?: string;\n links?: ProfileInvolvementLink[];\n /**\n * Portable org entity identifier (Wikidata/ROR/LEI URI) written when the user\n * picks the upstream from the resolver typeahead. Absent for free-text or\n * one-off involvement.\n */\n entityRef?: string;\n /**\n * Resolved current canonical name of the durably-linked upstream, computed by\n * the AppView at read time. Render over `upstream` when present. Absent for\n * free-text or unresolved entries.\n */\n entityName?: string;\n /**\n * Canonical org reference (#511): a nested mirror of the flat\n * name / did / entityRef fields. Prefer it when present; the nested\n * shape wins over the flat fields (resolveAgentRef precedence).\n */\n agentRef?: AgentRef;\n location?: LocationValue | null;\n skills?: SkillRef[];\n /** Skill records resolved from `skills`, for display. */\n linkedSkills?: ProfileSkill[];\n /**\n * True when this row is a mapped legacy `id.sifa.profile.volunteering` record\n * (no `kind`), rendered under \"Volunteering\". Editing it backfills to an\n * `involvement` record and deletes the legacy one.\n */\n legacy?: boolean;\n hidden?: boolean;\n /** User-flagged primary involvement, surfaced in the Highlights block. Ongoing only. */\n primary?: boolean;\n /** Other people named on this involvement, hydrated from the stored DIDs. */\n collaborators?: ProjectMemberCard[];\n /** AT-URI of the same involvement as recorded on another person's profile. */\n sameAs?: string;\n}\n\nexport type LanguageProficiency =\n 'elementary' | 'limited_working' | 'professional_working' | 'full_professional' | 'native';\n\nexport interface ProfileLanguage {\n rkey: string;\n language: string;\n proficiency?: LanguageProficiency;\n hidden?: boolean;\n}\n\nexport interface ProfileCourse {\n rkey: string;\n name: string;\n institution?: string;\n /**\n * Portable org entity identifier (Wikidata/ROR/LEI URI) linking the institution\n * to a resolved entity (#159/#241). Absent for free-text entries. Mirrors\n * `ProfilePosition.entityRef`; the AppView sends it for display.\n */\n entityRef?: string;\n /**\n * Resolved current canonical name of the durably-linked institution (#252),\n * computed by the AppView at read time. Render this over `institution` for a\n * linked entry. Absent for free-text or unresolved entries (fall back to\n * `institution`).\n */\n entityName?: string;\n /**\n * Canonical org reference (#511): a nested mirror of the flat\n * name / did / entityRef fields. Prefer it when present; the nested\n * shape wins over the flat fields (resolveAgentRef precedence).\n */\n agentRef?: AgentRef;\n number?: string;\n /** rkey of the associated certification, resolved from the course's\n * `credential` at-uri. Used to join the course to a certification in the\n * same profile payload (for the linked-credential date and link). */\n credentialRkey?: string;\n /** Date the course was completed, as an RFC 3339 datetime. Optional; the\n * editor collects month granularity (YYYY-MM). */\n completedAt?: string;\n /** `id.sifa.defs#courseRole` token. Absent means the user took the course. */\n role?: string;\n /** Teaching period of a taught or assisted course (YYYY, YYYY-MM or YYYY-MM-DD). */\n startedAt?: string;\n endedAt?: string;\n /** rkey of the position the course was part of (taught under it, or taken\n * as part of the job). The AppView resolves it from the record's `position`\n * at-uri when building the profile view. */\n positionRkey?: string;\n /** rkey of the education record the course was part of, resolved by the\n * AppView from the record's `education` at-uri. */\n educationRkey?: string;\n hidden?: boolean;\n}\n\n/** A related link on a presentation or delivery, as returned by the AppView. */\nexport interface PresentationLinkView {\n uri: string;\n label?: string;\n type?: string;\n}\n\n/**\n * Another person named on someone's record, as rendered by the AppView.\n *\n * `displayName` and `avatar` are present when the person's identity may be\n * shown -- i.e. when {@link actorShowsIdentity} holds (`confirmed` or\n * `claimed`). Otherwise the card is a bare handle with no identity attached and\n * no link to a profile: naming someone is a claim, and until they affirm it (or\n * hold a claimed Sifa account that can be notified of the claim) the claim must\n * not borrow their face.\n */\nexport interface ActorCard {\n did: string;\n handle: string;\n displayName?: string;\n avatar?: string;\n /**\n * True when Sifa has indexed this account at all -- including an unclaimed\n * atproto account seen via the firehose, which still renders at /p/<handle>.\n * Broader than {@link claimed}; not on its own a reason to show identity.\n */\n hasSifaProfile?: boolean;\n /**\n * True when the named person has a claimed Sifa account (has authenticated\n * via OAuth). A claimed account can be notified of a pending claim, so its\n * identity is shown even before confirmation -- see {@link actorShowsIdentity}.\n */\n claimed?: boolean;\n /** True once the named person has published a matching `id.sifa.confirmation`. */\n confirmed?: boolean;\n /**\n * True when the record was materially changed after being confirmed -- a\n * rename, or a changed role. The confirmation stands until withdrawn, but the\n * UI should say the claim has moved since it was affirmed.\n */\n confirmedStale?: boolean;\n}\n\n/** @deprecated Use {@link ActorCard}. Kept so existing co-speaker call sites keep compiling. */\nexport type CoSpeaker = ActorCard;\n\n/**\n * Roles shipped today. The lexicon declares these as `knownValues`, so the\n * field itself stays a plain string: a consumer meeting a role it does not\n * recognise should show it rather than discard it.\n *\n * Display only. A record living in someone else's repository cannot grant\n * write access to anything, and the UI must not imply that it does.\n */\nexport const PROJECT_ROLES = [\n 'id.sifa.defs#projectOwner',\n 'id.sifa.defs#projectCore',\n 'id.sifa.defs#projectContributor',\n] as const;\n\nexport type ProjectRole = (typeof PROJECT_ROLES)[number];\n\n/** A person named as a member of a project, with their role alongside the actor card. */\nexport interface ProjectMemberCard extends ActorCard {\n role?: string;\n title?: string;\n}\n\n/** An occasion on which a presentation was delivered (the AppView view-model). */\nexport interface ProfilePresentationDelivery {\n rkey: string;\n /** rkey of the parent presentation when this delivery references one. */\n presentationRkey?: string | null;\n /** Co-speakers at this occasion, hydrated from the stored DIDs. */\n coSpeakers?: CoSpeaker[];\n /** AT-URI of the same session as recorded on another person's profile. */\n sameAs?: string;\n title?: string | null;\n role?: string | null;\n eventName?: string | null;\n /** YYYY-MM-DD, or YYYY-MM / YYYY when the exact day is unknown. */\n date?: string | null;\n location?: string | null;\n locationCountry?: string | null;\n locationRegion?: string | null;\n locationLocality?: string | null;\n countryCode?: string | null;\n /** Full community.lexicon.calendar.event mode token. */\n mode?: string | null;\n /** Full community.lexicon.calendar.event status token. */\n status?: string | null;\n links?: PresentationLinkView[];\n /** at-uri of the linked calendar event, when present. */\n eventUri?: string | null;\n hidden?: boolean;\n}\n\n/** A reusable presentation with its deliveries grouped underneath (AppView view-model). */\nexport interface ProfilePresentation {\n rkey: string;\n title: string;\n description?: string | null;\n /** Duration in minutes: a fixed value (min only) or a range. */\n duration?: { minMinutes: number; maxMinutes?: number } | null;\n intendedAudiences?: string[];\n links?: PresentationLinkView[];\n /** at-uri of a long-form write-up (Leaflet / site.standard document). */\n writeupUri?: string | null;\n /** Resolved URL of the uploaded cover image, when present. */\n coverImageUrl?: string | null;\n hidden?: boolean;\n /** User-flagged primary talk, surfaced in the Highlights block. Talks only, not sessions. */\n primary?: boolean;\n deliveries?: ProfilePresentationDelivery[];\n}\n\nexport interface TrustStat {\n key: string;\n label: string;\n value: number;\n}\n\nexport interface ActiveApp {\n id: string;\n name: string;\n category: string;\n recentCount: number;\n latestRecordAt?: string | null;\n}\n\nexport interface VerifiedAccount {\n platform: string;\n identifier: string;\n url?: string;\n}\n\nexport interface ExternalAccountKeytraceClaim {\n rkey: string;\n claimedAt: string;\n}\n\nexport interface ExternalAccount {\n rkey: string;\n platform: string;\n url: string;\n label?: string;\n feedUrl?: string;\n primary?: boolean;\n verifiable: boolean;\n verified: boolean;\n verifiedVia?: string | null;\n source?: 'sifa' | 'keytrace' | 'keyoxide' | 'marque';\n hidden?: boolean;\n keytraceVerified?: boolean;\n keytraceClaim?: ExternalAccountKeytraceClaim;\n}\n\nexport interface FeedItem {\n title: string;\n excerpt: string;\n url: string;\n timestamp: string;\n source: string;\n}\n\nexport interface PdsProviderInfo {\n name: string;\n host: string;\n}\n\nexport interface ProfileIndustry {\n industry: string;\n domain?: string;\n}\n\nexport interface ProfileOverrideSource {\n headline?: string;\n about?: string;\n displayName?: string;\n avatarUrl?: string;\n}\n\n/**\n * A structured physical address on the org view. Mirrors\n * `community.lexicon.location.address`; every field is optional.\n */\nexport interface OrgAddressView {\n country: string | null;\n postalCode: string | null;\n region: string | null;\n locality: string | null;\n street: string | null;\n name: string | null;\n}\n\n/** A featured link on the org view. Both `name` and `url` are present. */\nexport interface OrgLinkView {\n name: string;\n url: string;\n}\n\n/**\n * A self-declared industry/domain pair on the org view. Mirrors the person\n * profile's industry/domain shape; `industry` is always present, `domain` is an\n * optional refinement (`null` when absent).\n */\nexport interface OrgIndustryView {\n industry: string;\n domain: string | null;\n}\n\n/**\n * The org-profile fields exposed on the profile resolve when the org rendering\n * floor is met. Narrow on purpose: `contact` is never included (not rendered\n * publicly); record URI/CID are internal. Mirrors sifa-api's `OrgProfileView`.\n */\nexport interface OrgProfileView {\n name: string;\n description: string | null;\n website: string | null;\n /** Blob CID (or resolved URL) of the org logo, when present. */\n logoBlob: string | null;\n entityRefs: string[] | null;\n addresses: OrgAddressView[] | null;\n /** Self-selected headcount range (declared bucket, never calculated). */\n companySize: string | null;\n companyType: string | null;\n links: OrgLinkView[] | null;\n /** Self-declared industry/domain pairs. */\n industries: OrgIndustryView[] | null;\n /** Self-declared founding date (year / YYYY-MM / YYYY-MM-DD). */\n founded: string | null;\n /** Self-declared \"also known as\" names / acronyms. */\n aliases: string[] | null;\n}\n\n/**\n * A company entity recognized purely from the handle's registrable domain\n * (#160 auto-recognize), independent of any org record. Present on the verdict\n * when `recognized` is true. `domain` is the handle's registrable domain and\n * round-trips through `/c/<domain>`; `publicId` is nullable because entities\n * minted before the public_id backfill have none.\n */\nexport interface RecognizedEntity {\n publicId: string | null;\n domain: string;\n name: string;\n}\n\n/**\n * Server-computed org rendering-floor verdict (#160), carried on the profile\n * resolve so clients need no extra round-trip. Read it via the `useOrgProfile`\n * hook.\n *\n * `isOrg` is the CLAIMED floor: true when the account has an\n * `id.sifa.org.profile` record AND its handle is a custom registrable domain\n * (the authoritative, PSL-backed check lives server-side).\n *\n * `recognized` is INDEPENDENT of `isOrg`: true when the handle's registrable\n * domain resolves to a known, non-suppressed, non-natural-person company entity\n * in Sifa's DB, even with no org record yet (auto-recognize known-company\n * domains). A known company that has not yet claimed is\n * `recognized: true, isOrg: false`; a claimed recognized company is both true.\n * Use it to treat a recognized-but-unclaimed company account as a company\n * (company onboarding, `/c/` routing) before it claims.\n */\nexport interface OrgFloorVerdict {\n isOrg: boolean;\n orgProfile?: OrgProfileView;\n recognized: boolean;\n /**\n * Whether the account's handle is a custom registrable apex domain, i.e.\n * eligible to CLAIM an org page (#306). Mirrors the `isBindableHandleDomain`\n * floor the api enforces at write time, surfaced so the `/claim` wizard can\n * gate on eligibility BEFORE the authority consent rather than failing the\n * final PDS write. Independent of `isOrg`/`recognized` -- purely the handle's\n * shape, so a `*.bsky.social` account reads false and a not-yet-claimed\n * custom domain reads true.\n *\n * Optional here (a tolerant reader): the api always emits it, but a profile\n * payload cached before this field shipped may omit it. Gate on the explicit\n * `customDomain === false` for the up-front block; treat absent as unknown and\n * let the api 403 stay the authoritative backstop -- never enforce on this\n * field alone.\n */\n customDomain?: boolean;\n /**\n * Whether the account also keeps a visible personal profile, from\n * `id.sifa.org.profile.personalProfileVisible`. True only for a claimed org\n * (`isOrg`) that opted in -- the sole-trader case, where one DID carries both\n * a person facet at `/p/` and a company facet at `/c/` and neither route\n * redirects to the other. Absent or false is the exclusive default: the\n * account presents solely as an organization and `/p/` redirects to `/c/`.\n */\n personalProfileVisible?: boolean;\n /**\n * Invariant (not encoded in the type, matching the flat wire shape the api\n * sends): present whenever `recognized` is true, absent when false. Callers\n * that read it after narrowing on `recognized === true` should still\n * defensively check, since the type does not enforce the pairing.\n */\n recognizedEntity?: RecognizedEntity;\n}\n\n/**\n * The account owner's answer to \"are you a person, a company, or both?\".\n *\n * `'person'` and `'company'` are Sifa-local overrides stored in\n * `account_render_overrides` (set via `POST /api/account/render-preference`).\n * `'both'` is NOT stored here -- it is the portable\n * `id.sifa.org.profile.personalProfileVisible` declaration in the account's own\n * PDS, so any AppView can evaluate it without asking Sifa. Resolve the combined\n * answer with `resolveAccountFacetMode`.\n */\nexport type AccountFacetMode = 'person' | 'company' | 'both';\n\nexport interface Profile {\n did: string;\n handle: string;\n /**\n * Sifa-local render override, absent when the account has never set one\n * (auto: today's recognition behaviour). `'person'` is the escape hatch for a\n * personal domain that Sifa catalogued as a company.\n */\n renderPreference?: 'person' | 'company' | null;\n /**\n * Org rendering-floor verdict (#160). Present on the profile resolve; absent\n * on payloads that predate the field. When `org.isOrg` is true the account\n * renders as an organization (`/c/`).\n */\n org?: OrgFloorVerdict;\n displayName?: string;\n /**\n * Given (first) name from `id.sifa.profile.self.givenName`. Schema.org\n * `Person.givenName`. Optional; absent for users who haven't filled in\n * structured name fields. Consumers wanting a rendered name should use\n * `formatStructuredName(givenName, familyName) ?? displayName ?? handle`.\n */\n givenName?: string;\n /**\n * Family (last) name from `id.sifa.profile.self.familyName`. Schema.org\n * `Person.familyName`. See `givenName` for fallback guidance.\n */\n familyName?: string;\n /**\n * Free-form phonetic respelling of the user's name from\n * `id.sifa.profile.self.namePronunciation` (e.g. `Foo-kuh`). Optional; a\n * native field with no `app.bsky.actor.profile` equivalent. Text only.\n */\n namePronunciation?: string;\n /**\n * Resolved URL of the name-pronunciation audio clip from\n * `id.sifa.profile.self.namePronunciationAudio`, served from the user's PDS\n * (`com.atproto.sync.getBlob`). Optional; absent when no clip is set.\n */\n namePronunciationAudioUrl?: string;\n avatar?: string;\n pronouns?: string;\n headline?: string;\n about?: string;\n hasHeadlineOverride?: boolean;\n hasAboutOverride?: boolean;\n hasDisplayNameOverride?: boolean;\n hasAvatarUrlOverride?: boolean;\n source?: ProfileOverrideSource;\n industries?: ProfileIndustry[];\n location?: LocationValue | null;\n locations?: ProfileLocation[];\n /**\n * @deprecated Flat location field emitted at the response root during the\n * additive response window for `community.lexicon.location.address`.\n * Prefer the structured `locations[]` array (use the entry where\n * `isPrimary` is true).\n */\n locationCountry?: string | null;\n /**\n * @deprecated See `locationCountry`. Prefer `locations[].locationRegion`.\n */\n locationRegion?: string | null;\n /**\n * @deprecated Legacy alias for `locationLocality`; emitted alongside it\n * during the additive response window. Prefer `locations[].locationLocality`.\n */\n locationCity?: string | null;\n /**\n * @deprecated community.lexicon.location.address field name. Prefer\n * `locations[].locationLocality`.\n */\n locationLocality?: string | null;\n /**\n * @deprecated See `locationCountry`. Prefer `locations[].countryCode`.\n */\n countryCode?: string | null;\n website?: string;\n openTo?: string[];\n preferredWorkplace?: string[];\n availableFromUtc?: number;\n availableToUtc?: number;\n pdsProvider?: PdsProviderInfo | null;\n claimed: boolean;\n /**\n * User-set opt-out flag from `id.sifa.profile.self.discoverable`. When\n * `false`, the rendering app emits `noindex` and excludes the page from\n * sitemaps. Absent means default-true (current behavior for existing\n * records that predate this field).\n */\n discoverable?: boolean;\n isOwnProfile?: boolean;\n createdAt?: string;\n trustStats?: TrustStat[];\n verifiedAccounts?: VerifiedAccount[];\n activeApps?: ActiveApp[];\n blueskyVerified?: boolean;\n blueskyVerifiedAt?: string | null;\n followersCount: number;\n followingCount: number;\n connectionsCount: number;\n atprotoFollowersCount?: number;\n positions: ProfilePosition[];\n education: ProfileEducation[];\n skills: ProfileSkill[];\n certifications?: ProfileCertification[];\n projects?: ProfileProject[];\n publications?: ProfilePublication[];\n /**\n * Co-authors on imported publications that resolve to a Sifa account.\n *\n * Owner-only, and absent rather than empty for every other viewer, so a\n * consumer cannot tell \"no suggestions\" from \"not yours\". Join to a\n * publication contributor by `orcidId`.\n */\n authorSuggestions?: AuthorSuggestion[];\n volunteering?: ProfileVolunteering[];\n involvement?: ProfileInvolvement[];\n investments?: ProfileInvestment[];\n honors?: ProfileHonor[];\n languages?: ProfileLanguage[];\n courses?: ProfileCourse[];\n presentations?: ProfilePresentation[];\n presentationDeliveries?: ProfilePresentationDelivery[];\n externalAccounts?: ExternalAccount[];\n}\n"],"mappings":";AAymBO,IAAM,gBAAgB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=profile-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/{use-org-notification-emails-0hjt-dEw.d.ts → use-org-notification-emails-CWWi1D8t.d.ts}
RENAMED
|
@@ -4,9 +4,9 @@ import { K as SifaApiConfig, n as ProfileView, W as WriteResult, N as CreateResu
|
|
|
4
4
|
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
5
5
|
import { UseQueryOptions, UseMutationOptions, UseInfiniteQueryOptions, InfiniteData } from '@tanstack/react-query';
|
|
6
6
|
import { c as Profile, d as ProfilePosition, S as SkillRef, p as ExternalAccount, T as SkillSuggestion, s as OrgFloorVerdict } from './index-D9GC0u__.js';
|
|
7
|
-
import { s as sifaQueryKeys, aB as RefreshPdsResult, aS as UpdateProfileOverrideInput, aT as UpdateProfileSelfInput, aU as UploadAvatarResult, aV as UploadPronunciationAudioResult, al as PrimarySection, aM as SubCategoryBulkResult, aq as ProfileLocationInput, o as ExternalAccountInput, m as CreateExternalAccountResult, aW as VerifyExternalAccountResult, E as EndorsementInput, k as ConfirmationInput, l as ConfirmationSubjectInput, X as GivenConfirmation, ak as PendingConfirmationsPage, a6 as InboxCounts, n as DismissUnlinkedPositionInput, aR as UnlinkedPositionsResult, am as ProfileCompleteness, aA as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, a5 as HideProfileItemInput, a0 as HiddenActivityItem, a4 as HideActivityItemInput, aP as UnhideActivityItemInput, aL as StatsResponse, h as AppRegistryEntry, a1 as HiddenApp, b as AccountSummary, p as FeaturedProfile, aK as SimilarProfile, L as FetchSuggestionsOptions, aO as SuggestionsResponse, Q as FollowUserResult, v as FetchFollowListOptions, N as FollowListPage, U as FollowingResponse, x as FetchFollowingFeedOptions, T as FollowingFeedResponse, w as FetchFollowProfilePageOptions, P as FollowProfilePageResponse, F as FeatureAllowlistResponse, g as AdminReviewQueues, r as FetchActivityFeedOptions, c as ActivityFeedResponse, f as ActivityTeaserResponse, $ as HeatmapResponse, a8 as MyGithubPullRequestsResponse, A as AccountCheckResult, az as ReactionStatus, ay as ReactionResult, ax as ReactionError, aI as RoadmapVotesResponse, i as CastRoadmapVoteResult, D as DeleteAccountResult, aD as ResetProfileResult, aX as WipePreview, aC as RepoDeleteInput, aa as OrgClaimResult, ag as OrgProfileUpdateResult, ab as OrgDomainChallengeResult, ac as OrgDomainVerifyResult, ad as OrgNotificationEmailAddResult, ae as OrgNotificationEmailRemoveResult } from './org-
|
|
7
|
+
import { s as sifaQueryKeys, aB as RefreshPdsResult, aS as UpdateProfileOverrideInput, aT as UpdateProfileSelfInput, aU as UploadAvatarResult, aV as UploadPronunciationAudioResult, al as PrimarySection, aM as SubCategoryBulkResult, aq as ProfileLocationInput, o as ExternalAccountInput, m as CreateExternalAccountResult, aW as VerifyExternalAccountResult, E as EndorsementInput, k as ConfirmationInput, l as ConfirmationSubjectInput, X as GivenConfirmation, ak as PendingConfirmationsPage, a6 as InboxCounts, n as DismissUnlinkedPositionInput, aR as UnlinkedPositionsResult, am as ProfileCompleteness, aA as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, a5 as HideProfileItemInput, a0 as HiddenActivityItem, a4 as HideActivityItemInput, aP as UnhideActivityItemInput, aL as StatsResponse, h as AppRegistryEntry, a1 as HiddenApp, b as AccountSummary, p as FeaturedProfile, aK as SimilarProfile, L as FetchSuggestionsOptions, aO as SuggestionsResponse, Q as FollowUserResult, v as FetchFollowListOptions, N as FollowListPage, U as FollowingResponse, x as FetchFollowingFeedOptions, T as FollowingFeedResponse, w as FetchFollowProfilePageOptions, P as FollowProfilePageResponse, F as FeatureAllowlistResponse, g as AdminReviewQueues, r as FetchActivityFeedOptions, c as ActivityFeedResponse, f as ActivityTeaserResponse, $ as HeatmapResponse, a8 as MyGithubPullRequestsResponse, A as AccountCheckResult, az as ReactionStatus, ay as ReactionResult, ax as ReactionError, aI as RoadmapVotesResponse, i as CastRoadmapVoteResult, D as DeleteAccountResult, aD as ResetProfileResult, aX as WipePreview, aC as RepoDeleteInput, aa as OrgClaimResult, ag as OrgProfileUpdateResult, ab as OrgDomainChallengeResult, ac as OrgDomainVerifyResult, ad as OrgNotificationEmailAddResult, ae as OrgNotificationEmailRemoveResult } from './org-CxTEjjrm.js';
|
|
8
8
|
import { i as EntitySearchResponse, E as EntitySearchResult, c as EntityMintDomainResponse, g as EntityResolveDomainResponse, n as EntitySelectResponse, l as EntitySelectRequest, r as FeatureFlag } from './follow-profile-D1l6pulB.js';
|
|
9
|
-
import { O as OrgClaimRequestInput,
|
|
9
|
+
import { O as OrgClaimRequestInput, h as OrgProfileUpdateRequestInput, b as OrgDomainChallengeRequestInput, d as OrgDomainVerifyRequestInput, f as OrgNotificationEmailRequestInput } from './org-settings-BShvhyFp.js';
|
|
10
10
|
|
|
11
11
|
interface SifaProviderProps {
|
|
12
12
|
config: SifaApiConfig;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@singi-labs/sifa-sdk",
|
|
3
|
-
"version": "0.19.
|
|
3
|
+
"version": "0.19.45",
|
|
4
4
|
"description": "Sifa SDK — public client library for the Sifa AppView on AT Protocol. Shared by sifa-web and sifa-app.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -192,7 +192,7 @@
|
|
|
192
192
|
"./dist/badge/index.cjs"
|
|
193
193
|
],
|
|
194
194
|
"scripts": {
|
|
195
|
-
"build": "tsup",
|
|
195
|
+
"build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsup",
|
|
196
196
|
"dev": "tsup --watch",
|
|
197
197
|
"lint": "eslint",
|
|
198
198
|
"lint:fix": "eslint --fix",
|
|
@@ -207,7 +207,8 @@
|
|
|
207
207
|
"version-packages": "changeset version",
|
|
208
208
|
"release": "pnpm run build && changeset publish",
|
|
209
209
|
"build:flags": "node scripts/build-flags.mjs",
|
|
210
|
-
"sync:term-mappings": "node scripts/sync-term-mappings.mjs"
|
|
210
|
+
"sync:term-mappings": "node scripts/sync-term-mappings.mjs",
|
|
211
|
+
"check:dist": "node scripts/check-dist.mjs"
|
|
211
212
|
},
|
|
212
213
|
"engines": {
|
|
213
214
|
"node": ">=22"
|