@takuhon/ui 0.4.0 → 0.5.0

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.
@@ -0,0 +1,83 @@
1
+ .section {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: var(--takuhon-space-3);
5
+ margin-top: var(--takuhon-space-5);
6
+ }
7
+
8
+ .heading {
9
+ margin: 0;
10
+ font-size: var(--takuhon-font-size-xl);
11
+ color: var(--takuhon-color-text);
12
+ }
13
+
14
+ .list {
15
+ list-style: none;
16
+ margin: 0;
17
+ padding: 0;
18
+ display: flex;
19
+ flex-direction: column;
20
+ gap: var(--takuhon-space-3);
21
+ }
22
+
23
+ .item {
24
+ display: flex;
25
+ flex-direction: column;
26
+ gap: var(--takuhon-space-2);
27
+ padding: var(--takuhon-space-3);
28
+ background-color: var(--takuhon-color-surface);
29
+ border: 1px solid var(--takuhon-color-border);
30
+ border-radius: var(--takuhon-radius-md);
31
+ }
32
+
33
+ .body {
34
+ margin: 0;
35
+ }
36
+
37
+ .quote {
38
+ margin: 0;
39
+ font-size: var(--takuhon-font-size-base);
40
+ line-height: var(--takuhon-line-height);
41
+ color: var(--takuhon-color-text);
42
+ }
43
+
44
+ .attribution {
45
+ margin: 0;
46
+ display: flex;
47
+ flex-wrap: wrap;
48
+ align-items: baseline;
49
+ gap: var(--takuhon-space-2);
50
+ }
51
+
52
+ .author {
53
+ font-weight: 600;
54
+ color: var(--takuhon-color-text);
55
+ font-size: var(--takuhon-font-size-base);
56
+ }
57
+
58
+ .link {
59
+ color: inherit;
60
+ text-decoration: none;
61
+ }
62
+
63
+ .link:hover,
64
+ .link:focus-visible {
65
+ text-decoration: underline;
66
+ color: var(--takuhon-color-primary);
67
+ }
68
+
69
+ .link:focus-visible {
70
+ outline: 2px solid var(--takuhon-color-primary);
71
+ outline-offset: 2px;
72
+ }
73
+
74
+ .headline {
75
+ font-size: var(--takuhon-font-size-sm);
76
+ color: var(--takuhon-color-text-muted);
77
+ }
78
+
79
+ .meta {
80
+ margin: 0;
81
+ font-size: var(--takuhon-font-size-sm);
82
+ color: var(--takuhon-color-text-muted);
83
+ }
@@ -0,0 +1,68 @@
1
+ .section {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: var(--takuhon-space-3);
5
+ margin-top: var(--takuhon-space-5);
6
+ }
7
+
8
+ .heading {
9
+ margin: 0;
10
+ font-size: var(--takuhon-font-size-xl);
11
+ color: var(--takuhon-color-text);
12
+ }
13
+
14
+ .list {
15
+ list-style: none;
16
+ margin: 0;
17
+ padding: 0;
18
+ display: flex;
19
+ flex-direction: column;
20
+ gap: var(--takuhon-space-3);
21
+ }
22
+
23
+ .item {
24
+ display: flex;
25
+ flex-direction: column;
26
+ gap: var(--takuhon-space-1);
27
+ }
28
+
29
+ .title {
30
+ margin: 0;
31
+ font-weight: 600;
32
+ color: var(--takuhon-color-text);
33
+ font-size: var(--takuhon-font-size-base);
34
+ }
35
+
36
+ .link {
37
+ color: inherit;
38
+ text-decoration: none;
39
+ }
40
+
41
+ .link:hover,
42
+ .link:focus-visible {
43
+ text-decoration: underline;
44
+ color: var(--takuhon-color-primary);
45
+ }
46
+
47
+ .link:focus-visible {
48
+ outline: 2px solid var(--takuhon-color-primary);
49
+ outline-offset: 2px;
50
+ }
51
+
52
+ .meta {
53
+ margin: 0;
54
+ font-size: var(--takuhon-font-size-sm);
55
+ color: var(--takuhon-color-text-muted);
56
+ }
57
+
58
+ .score {
59
+ font-weight: 600;
60
+ color: var(--takuhon-color-text);
61
+ }
62
+
63
+ .description {
64
+ margin: 0;
65
+ font-size: var(--takuhon-font-size-base);
66
+ line-height: var(--takuhon-line-height);
67
+ color: var(--takuhon-color-text);
68
+ }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { LocalizedTakuhon, LocalizedProfile, LocalizedLink, LocalizedCareer, LocalizedEducation, LocalizedCertification, LocalizedMembership, LocalizedVolunteering, LocalizedHonor, LocalizedPublication, LocalizedLanguage, LocalizedCourse, LocalizedPatent, LocalizedProject, Skill, Contact, LocaleTag } from '@takuhon/core';
1
+ import { LocalizedTakuhon, LocalizedProfile, LocalizedLink, LocalizedCareer, LocalizedEducation, LocalizedCertification, LocalizedMembership, LocalizedVolunteering, LocalizedHonor, LocalizedRecommendation, LocalizedPublication, LocalizedLanguage, LocalizedTestScore, LocalizedCourse, LocalizedPatent, LocalizedProject, Skill, Contact, LocaleTag } from '@takuhon/core';
2
2
 
3
3
  interface TakuhonProfileProps {
4
4
  data: LocalizedTakuhon;
@@ -45,6 +45,11 @@ interface HonorsListProps {
45
45
  }
46
46
  declare function HonorsList({ honors }: HonorsListProps): React.JSX.Element | null;
47
47
 
48
+ interface RecommendationsProps {
49
+ recommendations: LocalizedRecommendation[];
50
+ }
51
+ declare function Recommendations({ recommendations, }: RecommendationsProps): React.JSX.Element | null;
52
+
48
53
  interface PublicationsProps {
49
54
  publications: LocalizedPublication[];
50
55
  }
@@ -55,6 +60,11 @@ interface LanguagesProps {
55
60
  }
56
61
  declare function Languages({ languages }: LanguagesProps): React.JSX.Element | null;
57
62
 
63
+ interface TestScoresProps {
64
+ testScores: LocalizedTestScore[];
65
+ }
66
+ declare function TestScores({ testScores }: TestScoresProps): React.JSX.Element | null;
67
+
58
68
  interface CoursesProps {
59
69
  courses: LocalizedCourse[];
60
70
  }
@@ -98,4 +108,4 @@ interface TakuhonHeadProps {
98
108
  }
99
109
  declare function TakuhonHead({ data, siteUrl, pageUrl }: TakuhonHeadProps): React.JSX.Element;
100
110
 
101
- export { CareerTimeline, type CareerTimelineProps, Certifications, type CertificationsProps, ContactInfo, type ContactInfoProps, Courses, type CoursesProps, EducationTimeline, type EducationTimelineProps, Footer, HonorsList, type HonorsListProps, Languages, type LanguagesProps, LinksList, type LinksListProps, LocaleSwitcher, type LocaleSwitcherProps, Memberships, type MembershipsProps, Patents, type PatentsProps, ProfileHeader, type ProfileHeaderProps, ProjectsList, type ProjectsListProps, Publications, type PublicationsProps, SkillsList, type SkillsListProps, TakuhonHead, type TakuhonHeadProps, TakuhonProfile, type TakuhonProfileProps, Volunteering, type VolunteeringProps };
111
+ export { CareerTimeline, type CareerTimelineProps, Certifications, type CertificationsProps, ContactInfo, type ContactInfoProps, Courses, type CoursesProps, EducationTimeline, type EducationTimelineProps, Footer, HonorsList, type HonorsListProps, Languages, type LanguagesProps, LinksList, type LinksListProps, LocaleSwitcher, type LocaleSwitcherProps, Memberships, type MembershipsProps, Patents, type PatentsProps, ProfileHeader, type ProfileHeaderProps, ProjectsList, type ProjectsListProps, Publications, type PublicationsProps, Recommendations, type RecommendationsProps, SkillsList, type SkillsListProps, TakuhonHead, type TakuhonHeadProps, TakuhonProfile, type TakuhonProfileProps, TestScores, type TestScoresProps, Volunteering, type VolunteeringProps };
package/dist/index.js CHANGED
@@ -522,7 +522,7 @@ function ProjectsList({ projects }) {
522
522
 
523
523
  // src/components/Publications.tsx
524
524
  import styles14 from "./Publications.module-INRTHJMO.module.css";
525
- import { jsx as jsx14, jsxs as jsxs14 } from "react/jsx-runtime";
525
+ import { Fragment as Fragment4, jsx as jsx14, jsxs as jsxs14 } from "react/jsx-runtime";
526
526
  function sortPublications(entries) {
527
527
  return [...entries].sort((a, b) => {
528
528
  const aOrder = a.order ?? Number.POSITIVE_INFINITY;
@@ -552,7 +552,7 @@ function Publications({ publications }) {
552
552
  ) : entry.title }),
553
553
  entry.publisher ? /* @__PURE__ */ jsx14("p", { className: styles14.publisher, children: entry.publisher }) : null,
554
554
  /* @__PURE__ */ jsx14("p", { className: styles14.date, children: /* @__PURE__ */ jsx14("time", { dateTime: entry.date, children: entry.date }) }),
555
- entry.coAuthors && entry.coAuthors.length > 0 ? /* @__PURE__ */ jsx14("p", { className: styles14.coAuthors, children: `with ${entry.coAuthors.join(", ")}` }) : null,
555
+ entry.coAuthors && entry.coAuthors.length > 0 ? /* @__PURE__ */ jsx14(Fragment4, { children: /* @__PURE__ */ jsx14("p", { className: styles14.coAuthors, children: `with ${entry.coAuthors.join(", ")}` }) }) : null,
556
556
  entry.doi ? (() => {
557
557
  const bare = normalizeDoi(entry.doi);
558
558
  return /* @__PURE__ */ jsx14("p", { className: styles14.doi, children: /* @__PURE__ */ jsx14(
@@ -571,9 +571,48 @@ function Publications({ publications }) {
571
571
  ] });
572
572
  }
573
573
 
574
- // src/components/SkillsList.tsx
575
- import styles15 from "./SkillsList.module-XIAWE55H.module.css";
574
+ // src/components/Recommendations.tsx
575
+ import styles15 from "./Recommendations.module-HQSBHXLM.module.css";
576
576
  import { jsx as jsx15, jsxs as jsxs15 } from "react/jsx-runtime";
577
+ function sortRecommendations(entries) {
578
+ return [...entries].sort((a, b) => {
579
+ const aOrder = a.order ?? Number.POSITIVE_INFINITY;
580
+ const bOrder = b.order ?? Number.POSITIVE_INFINITY;
581
+ if (aOrder !== bOrder) return aOrder - bOrder;
582
+ return (b.date ?? "").localeCompare(a.date ?? "");
583
+ });
584
+ }
585
+ function Recommendations({
586
+ recommendations
587
+ }) {
588
+ if (recommendations.length === 0) return null;
589
+ const ordered = sortRecommendations(recommendations);
590
+ return /* @__PURE__ */ jsxs15("section", { className: styles15.section, "aria-labelledby": "takuhon-recommendations-heading", children: [
591
+ /* @__PURE__ */ jsx15("h2", { id: "takuhon-recommendations-heading", className: styles15.heading, children: "Recommendations" }),
592
+ /* @__PURE__ */ jsx15("ul", { className: styles15.list, children: ordered.map((entry) => /* @__PURE__ */ jsxs15("li", { className: styles15.item, children: [
593
+ /* @__PURE__ */ jsx15("blockquote", { className: styles15.body, children: /* @__PURE__ */ jsx15("p", { className: styles15.quote, children: entry.body }) }),
594
+ /* @__PURE__ */ jsxs15("p", { className: styles15.attribution, children: [
595
+ /* @__PURE__ */ jsx15("span", { className: styles15.author, children: entry.author.url ? /* @__PURE__ */ jsx15(
596
+ "a",
597
+ {
598
+ className: styles15.link,
599
+ href: entry.author.url,
600
+ target: "_blank",
601
+ rel: "noopener noreferrer",
602
+ children: entry.author.name
603
+ }
604
+ ) : entry.author.name }),
605
+ entry.author.headline ? /* @__PURE__ */ jsx15("span", { className: styles15.headline, children: entry.author.headline }) : null
606
+ ] }),
607
+ entry.relationship ? /* @__PURE__ */ jsx15("p", { className: styles15.meta, children: entry.relationship }) : null,
608
+ entry.date ? /* @__PURE__ */ jsx15("p", { className: styles15.meta, children: /* @__PURE__ */ jsx15("time", { dateTime: entry.date, children: entry.date }) }) : null
609
+ ] }, entry.id)) })
610
+ ] });
611
+ }
612
+
613
+ // src/components/SkillsList.tsx
614
+ import styles16 from "./SkillsList.module-XIAWE55H.module.css";
615
+ import { jsx as jsx16, jsxs as jsxs16 } from "react/jsx-runtime";
577
616
  function groupSkills(skills) {
578
617
  const sorted = [...skills].sort((a, b) => {
579
618
  const aOrder = a.order ?? Number.POSITIVE_INFINITY;
@@ -595,21 +634,58 @@ function groupSkills(skills) {
595
634
  function SkillsList({ skills }) {
596
635
  if (skills.length === 0) return null;
597
636
  const groups = groupSkills(skills);
598
- return /* @__PURE__ */ jsxs15("section", { className: styles15.section, "aria-labelledby": "takuhon-skills-heading", children: [
599
- /* @__PURE__ */ jsx15("h2", { id: "takuhon-skills-heading", className: styles15.heading, children: "Skills" }),
600
- /* @__PURE__ */ jsx15("div", { className: styles15.groups, children: groups.map((group) => /* @__PURE__ */ jsxs15("div", { className: styles15.group, children: [
601
- /* @__PURE__ */ jsx15("h3", { className: styles15.category, children: group.category }),
602
- /* @__PURE__ */ jsx15("ul", { className: styles15.list, "aria-label": `${group.category} skills`, children: group.skills.map((skill) => /* @__PURE__ */ jsx15("li", { className: styles15.item, children: skill.label }, skill.id)) })
637
+ return /* @__PURE__ */ jsxs16("section", { className: styles16.section, "aria-labelledby": "takuhon-skills-heading", children: [
638
+ /* @__PURE__ */ jsx16("h2", { id: "takuhon-skills-heading", className: styles16.heading, children: "Skills" }),
639
+ /* @__PURE__ */ jsx16("div", { className: styles16.groups, children: groups.map((group) => /* @__PURE__ */ jsxs16("div", { className: styles16.group, children: [
640
+ /* @__PURE__ */ jsx16("h3", { className: styles16.category, children: group.category }),
641
+ /* @__PURE__ */ jsx16("ul", { className: styles16.list, "aria-label": `${group.category} skills`, children: group.skills.map((skill) => /* @__PURE__ */ jsx16("li", { className: styles16.item, children: skill.label }, skill.id)) })
603
642
  ] }, group.category)) })
604
643
  ] });
605
644
  }
606
645
 
607
646
  // src/components/TakuhonProfile.tsx
608
- import styles17 from "./TakuhonProfile.module-QUEORIHA.module.css";
647
+ import styles19 from "./TakuhonProfile.module-QUEORIHA.module.css";
648
+
649
+ // src/components/TestScores.tsx
650
+ import styles17 from "./TestScores.module-PG7VGFS6.module.css";
651
+ import { jsx as jsx17, jsxs as jsxs17 } from "react/jsx-runtime";
652
+ function sortTestScores(entries) {
653
+ return [...entries].sort((a, b) => {
654
+ const aOrder = a.order ?? Number.POSITIVE_INFINITY;
655
+ const bOrder = b.order ?? Number.POSITIVE_INFINITY;
656
+ if (aOrder !== bOrder) return aOrder - bOrder;
657
+ return b.date.localeCompare(a.date);
658
+ });
659
+ }
660
+ function TestScores({ testScores }) {
661
+ if (testScores.length === 0) return null;
662
+ const ordered = sortTestScores(testScores);
663
+ return /* @__PURE__ */ jsxs17("section", { className: styles17.section, "aria-labelledby": "takuhon-test-scores-heading", children: [
664
+ /* @__PURE__ */ jsx17("h2", { id: "takuhon-test-scores-heading", className: styles17.heading, children: "Test Scores" }),
665
+ /* @__PURE__ */ jsx17("ul", { className: styles17.list, children: ordered.map((entry) => /* @__PURE__ */ jsxs17("li", { className: styles17.item, children: [
666
+ /* @__PURE__ */ jsx17("p", { className: styles17.title, children: entry.url ? /* @__PURE__ */ jsx17(
667
+ "a",
668
+ {
669
+ className: styles17.link,
670
+ href: entry.url,
671
+ target: "_blank",
672
+ rel: "noopener noreferrer",
673
+ children: entry.title
674
+ }
675
+ ) : entry.title }),
676
+ /* @__PURE__ */ jsxs17("p", { className: styles17.meta, children: [
677
+ /* @__PURE__ */ jsx17("span", { className: styles17.score, children: entry.score }),
678
+ " \xB7 ",
679
+ /* @__PURE__ */ jsx17("time", { dateTime: entry.date, children: entry.date })
680
+ ] }),
681
+ entry.description ? /* @__PURE__ */ jsx17("p", { className: styles17.description, children: entry.description }) : null
682
+ ] }, entry.id)) })
683
+ ] });
684
+ }
609
685
 
610
686
  // src/components/Volunteering.tsx
611
- import styles16 from "./Volunteering.module-TDRC6QVK.module.css";
612
- import { jsx as jsx16, jsxs as jsxs16 } from "react/jsx-runtime";
687
+ import styles18 from "./Volunteering.module-TDRC6QVK.module.css";
688
+ import { jsx as jsx18, jsxs as jsxs18 } from "react/jsx-runtime";
613
689
  function sortVolunteering(entries) {
614
690
  return [...entries].sort((a, b) => {
615
691
  const aOrder = a.order ?? Number.POSITIVE_INFINITY;
@@ -624,69 +700,71 @@ function isOngoing4(entry) {
624
700
  function Volunteering({ volunteering }) {
625
701
  if (volunteering.length === 0) return null;
626
702
  const ordered = sortVolunteering(volunteering);
627
- return /* @__PURE__ */ jsxs16("section", { className: styles16.section, "aria-labelledby": "takuhon-volunteering-heading", children: [
628
- /* @__PURE__ */ jsx16("h2", { id: "takuhon-volunteering-heading", className: styles16.heading, children: "Volunteering" }),
629
- /* @__PURE__ */ jsx16("ol", { className: styles16.list, children: ordered.map((entry) => /* @__PURE__ */ jsxs16("li", { className: styles16.item, children: [
630
- /* @__PURE__ */ jsx16("div", { className: styles16.timelineMarker, "aria-hidden": "true" }),
631
- /* @__PURE__ */ jsxs16("div", { className: styles16.content, children: [
632
- /* @__PURE__ */ jsx16("p", { className: styles16.organization, children: entry.url ? /* @__PURE__ */ jsx16(
703
+ return /* @__PURE__ */ jsxs18("section", { className: styles18.section, "aria-labelledby": "takuhon-volunteering-heading", children: [
704
+ /* @__PURE__ */ jsx18("h2", { id: "takuhon-volunteering-heading", className: styles18.heading, children: "Volunteering" }),
705
+ /* @__PURE__ */ jsx18("ol", { className: styles18.list, children: ordered.map((entry) => /* @__PURE__ */ jsxs18("li", { className: styles18.item, children: [
706
+ /* @__PURE__ */ jsx18("div", { className: styles18.timelineMarker, "aria-hidden": "true" }),
707
+ /* @__PURE__ */ jsxs18("div", { className: styles18.content, children: [
708
+ /* @__PURE__ */ jsx18("p", { className: styles18.organization, children: entry.url ? /* @__PURE__ */ jsx18(
633
709
  "a",
634
710
  {
635
- className: styles16.link,
711
+ className: styles18.link,
636
712
  href: entry.url,
637
713
  target: "_blank",
638
714
  rel: "noopener noreferrer",
639
715
  children: entry.organization
640
716
  }
641
717
  ) : entry.organization }),
642
- /* @__PURE__ */ jsxs16("p", { className: styles16.role, children: [
718
+ /* @__PURE__ */ jsxs18("p", { className: styles18.role, children: [
643
719
  entry.role,
644
- entry.cause ? /* @__PURE__ */ jsxs16("span", { className: styles16.cause, children: [
645
- /* @__PURE__ */ jsx16("span", { className: styles16.srOnly, children: "Cause: " }),
720
+ entry.cause ? /* @__PURE__ */ jsxs18("span", { className: styles18.cause, children: [
721
+ /* @__PURE__ */ jsx18("span", { className: styles18.srOnly, children: "Cause: " }),
646
722
  entry.cause
647
723
  ] }) : null
648
724
  ] }),
649
- /* @__PURE__ */ jsxs16("p", { className: styles16.range, children: [
650
- /* @__PURE__ */ jsx16("time", { dateTime: entry.startDate, children: entry.startDate }),
725
+ /* @__PURE__ */ jsxs18("p", { className: styles18.range, children: [
726
+ /* @__PURE__ */ jsx18("time", { dateTime: entry.startDate, children: entry.startDate }),
651
727
  " \u2013 ",
652
728
  isOngoing4(entry) ? (
653
729
  // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.
654
730
  "Present"
655
- ) : /* @__PURE__ */ jsx16("time", { dateTime: entry.endDate, children: entry.endDate })
731
+ ) : /* @__PURE__ */ jsx18("time", { dateTime: entry.endDate, children: entry.endDate })
656
732
  ] }),
657
- entry.description ? /* @__PURE__ */ jsx16("p", { className: styles16.description, children: entry.description }) : null
733
+ entry.description ? /* @__PURE__ */ jsx18("p", { className: styles18.description, children: entry.description }) : null
658
734
  ] })
659
735
  ] }, entry.id)) })
660
736
  ] });
661
737
  }
662
738
 
663
739
  // src/components/TakuhonProfile.tsx
664
- import { jsx as jsx17, jsxs as jsxs17 } from "react/jsx-runtime";
740
+ import { jsx as jsx19, jsxs as jsxs19 } from "react/jsx-runtime";
665
741
  function TakuhonProfile({ data }) {
666
742
  const showFooter = data.settings.showPoweredBy !== false;
667
- return /* @__PURE__ */ jsxs17("article", { className: styles17.root, children: [
668
- /* @__PURE__ */ jsx17(ProfileHeader, { profile: data.profile }),
669
- /* @__PURE__ */ jsx17(LinksList, { links: data.links }),
670
- /* @__PURE__ */ jsx17(EducationTimeline, { education: data.education }),
671
- /* @__PURE__ */ jsx17(Courses, { courses: data.courses }),
672
- /* @__PURE__ */ jsx17(CareerTimeline, { careers: data.careers }),
673
- /* @__PURE__ */ jsx17(Memberships, { memberships: data.memberships }),
674
- /* @__PURE__ */ jsx17(Certifications, { certifications: data.certifications }),
675
- /* @__PURE__ */ jsx17(Patents, { patents: data.patents }),
676
- /* @__PURE__ */ jsx17(ProjectsList, { projects: data.projects }),
677
- /* @__PURE__ */ jsx17(Publications, { publications: data.publications }),
678
- /* @__PURE__ */ jsx17(HonorsList, { honors: data.honors }),
679
- /* @__PURE__ */ jsx17(Volunteering, { volunteering: data.volunteering }),
680
- /* @__PURE__ */ jsx17(SkillsList, { skills: data.skills }),
681
- /* @__PURE__ */ jsx17(Languages, { languages: data.languages }),
682
- /* @__PURE__ */ jsx17(ContactInfo, { contact: data.contact }),
683
- showFooter ? /* @__PURE__ */ jsx17(Footer, {}) : null
743
+ return /* @__PURE__ */ jsxs19("article", { className: styles19.root, children: [
744
+ /* @__PURE__ */ jsx19(ProfileHeader, { profile: data.profile }),
745
+ /* @__PURE__ */ jsx19(LinksList, { links: data.links }),
746
+ /* @__PURE__ */ jsx19(EducationTimeline, { education: data.education }),
747
+ /* @__PURE__ */ jsx19(Courses, { courses: data.courses }),
748
+ /* @__PURE__ */ jsx19(CareerTimeline, { careers: data.careers }),
749
+ /* @__PURE__ */ jsx19(Memberships, { memberships: data.memberships }),
750
+ /* @__PURE__ */ jsx19(Certifications, { certifications: data.certifications }),
751
+ /* @__PURE__ */ jsx19(Patents, { patents: data.patents }),
752
+ /* @__PURE__ */ jsx19(ProjectsList, { projects: data.projects }),
753
+ /* @__PURE__ */ jsx19(Publications, { publications: data.publications }),
754
+ /* @__PURE__ */ jsx19(HonorsList, { honors: data.honors }),
755
+ /* @__PURE__ */ jsx19(Recommendations, { recommendations: data.recommendations }),
756
+ /* @__PURE__ */ jsx19(Volunteering, { volunteering: data.volunteering }),
757
+ /* @__PURE__ */ jsx19(SkillsList, { skills: data.skills }),
758
+ /* @__PURE__ */ jsx19(Languages, { languages: data.languages }),
759
+ /* @__PURE__ */ jsx19(TestScores, { testScores: data.testScores }),
760
+ /* @__PURE__ */ jsx19(ContactInfo, { contact: data.contact }),
761
+ showFooter ? /* @__PURE__ */ jsx19(Footer, {}) : null
684
762
  ] });
685
763
  }
686
764
 
687
765
  // src/components/LocaleSwitcher.tsx
688
- import styles18 from "./LocaleSwitcher.module-QVLPVGLG.module.css";
689
- import { jsx as jsx18 } from "react/jsx-runtime";
766
+ import styles20 from "./LocaleSwitcher.module-QVLPVGLG.module.css";
767
+ import { jsx as jsx20 } from "react/jsx-runtime";
690
768
  var DEFAULT_ARIA_LABEL = "Select language";
691
769
  function LocaleSwitcher({
692
770
  availableLocales,
@@ -697,16 +775,16 @@ function LocaleSwitcher({
697
775
  }) {
698
776
  const label = ariaLabel ?? DEFAULT_ARIA_LABEL;
699
777
  const format = formatLocale ?? ((locale) => locale);
700
- return /* @__PURE__ */ jsx18("div", { className: styles18.wrapper, children: /* @__PURE__ */ jsx18(
778
+ return /* @__PURE__ */ jsx20("div", { className: styles20.wrapper, children: /* @__PURE__ */ jsx20(
701
779
  "select",
702
780
  {
703
- className: styles18.select,
781
+ className: styles20.select,
704
782
  "aria-label": label,
705
783
  value: currentLocale,
706
784
  onChange: (event) => {
707
785
  onSelect(event.target.value);
708
786
  },
709
- children: availableLocales.map((locale) => /* @__PURE__ */ jsx18("option", { value: locale, children: format(locale) }, locale))
787
+ children: availableLocales.map((locale) => /* @__PURE__ */ jsx20("option", { value: locale, children: format(locale) }, locale))
710
788
  }
711
789
  ) });
712
790
  }
@@ -714,7 +792,7 @@ function LocaleSwitcher({
714
792
  // src/components/TakuhonHead.tsx
715
793
  import { generateJsonLd } from "@takuhon/core";
716
794
  import { useEffect } from "react";
717
- import { Fragment as Fragment4, jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
795
+ import { Fragment as Fragment5, jsx as jsx21, jsxs as jsxs20 } from "react/jsx-runtime";
718
796
  function primarySubtag(tag) {
719
797
  const dash = tag.indexOf("-");
720
798
  return (dash === -1 ? tag : tag.slice(0, dash)).toLowerCase();
@@ -799,20 +877,20 @@ function TakuhonHead({ data, siteUrl, pageUrl }) {
799
877
  script.remove();
800
878
  };
801
879
  }, [jsonLdPayload]);
802
- return /* @__PURE__ */ jsxs18(Fragment4, { children: [
803
- /* @__PURE__ */ jsx19("title", { children: profile.displayName }),
804
- description ? /* @__PURE__ */ jsx19("meta", { name: "description", content: description }) : null,
805
- canonical ? /* @__PURE__ */ jsx19("link", { rel: "canonical", href: canonical }) : null,
806
- /* @__PURE__ */ jsx19("meta", { property: "og:title", content: profile.displayName }),
807
- ogDescription ? /* @__PURE__ */ jsx19("meta", { property: "og:description", content: ogDescription }) : null,
808
- canonical ? /* @__PURE__ */ jsx19("meta", { property: "og:url", content: canonical }) : null,
809
- ogImage ? /* @__PURE__ */ jsx19("meta", { property: "og:image", content: ogImage }) : null,
810
- /* @__PURE__ */ jsx19("meta", { property: "og:type", content: "profile" }),
811
- /* @__PURE__ */ jsx19("meta", { property: "og:locale", content: resolvedLocale }),
812
- ogAlternates.map((loc) => /* @__PURE__ */ jsx19("meta", { property: "og:locale:alternate", content: loc }, loc)),
813
- /* @__PURE__ */ jsx19("meta", { name: "twitter:card", content: twitterCard }),
814
- alternates.map(({ locale, href }) => /* @__PURE__ */ jsx19("link", { rel: "alternate", hrefLang: locale, href }, locale)),
815
- xDefaultHref ? /* @__PURE__ */ jsx19("link", { rel: "alternate", hrefLang: "x-default", href: xDefaultHref }) : null
880
+ return /* @__PURE__ */ jsxs20(Fragment5, { children: [
881
+ /* @__PURE__ */ jsx21("title", { children: profile.displayName }),
882
+ description ? /* @__PURE__ */ jsx21("meta", { name: "description", content: description }) : null,
883
+ canonical ? /* @__PURE__ */ jsx21("link", { rel: "canonical", href: canonical }) : null,
884
+ /* @__PURE__ */ jsx21("meta", { property: "og:title", content: profile.displayName }),
885
+ ogDescription ? /* @__PURE__ */ jsx21("meta", { property: "og:description", content: ogDescription }) : null,
886
+ canonical ? /* @__PURE__ */ jsx21("meta", { property: "og:url", content: canonical }) : null,
887
+ ogImage ? /* @__PURE__ */ jsx21("meta", { property: "og:image", content: ogImage }) : null,
888
+ /* @__PURE__ */ jsx21("meta", { property: "og:type", content: "profile" }),
889
+ /* @__PURE__ */ jsx21("meta", { property: "og:locale", content: resolvedLocale }),
890
+ ogAlternates.map((loc) => /* @__PURE__ */ jsx21("meta", { property: "og:locale:alternate", content: loc }, loc)),
891
+ /* @__PURE__ */ jsx21("meta", { name: "twitter:card", content: twitterCard }),
892
+ alternates.map(({ locale, href }) => /* @__PURE__ */ jsx21("link", { rel: "alternate", hrefLang: locale, href }, locale)),
893
+ xDefaultHref ? /* @__PURE__ */ jsx21("link", { rel: "alternate", hrefLang: "x-default", href: xDefaultHref }) : null
816
894
  ] });
817
895
  }
818
896
  export {
@@ -831,9 +909,11 @@ export {
831
909
  ProfileHeader,
832
910
  ProjectsList,
833
911
  Publications,
912
+ Recommendations,
834
913
  SkillsList,
835
914
  TakuhonHead,
836
915
  TakuhonProfile,
916
+ TestScores,
837
917
  Volunteering
838
918
  };
839
919
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/TakuhonProfile.tsx","../src/components/CareerTimeline.tsx","../src/components/Certifications.tsx","../src/components/ContactInfo.tsx","../src/components/Courses.tsx","../src/components/EducationTimeline.tsx","../src/components/Footer.tsx","../src/components/HonorsList.tsx","../src/components/Languages.tsx","../src/components/LinksList.tsx","../src/components/Memberships.tsx","../src/components/Patents.tsx","../src/components/ProfileHeader.tsx","../src/components/ProjectsList.tsx","../src/components/Publications.tsx","../src/components/SkillsList.tsx","../src/components/Volunteering.tsx","../src/components/LocaleSwitcher.tsx","../src/components/TakuhonHead.tsx"],"sourcesContent":["import type { LocalizedTakuhon } from '@takuhon/core';\n\nimport '../styles/tokens.css';\n\nimport { CareerTimeline } from './CareerTimeline.js';\nimport { Certifications } from './Certifications.js';\nimport { ContactInfo } from './ContactInfo.js';\nimport { Courses } from './Courses.js';\nimport { EducationTimeline } from './EducationTimeline.js';\nimport { Footer } from './Footer.js';\nimport { HonorsList } from './HonorsList.js';\nimport { Languages } from './Languages.js';\nimport { LinksList } from './LinksList.js';\nimport { Memberships } from './Memberships.js';\nimport { Patents } from './Patents.js';\nimport { ProfileHeader } from './ProfileHeader.js';\nimport { ProjectsList } from './ProjectsList.js';\nimport { Publications } from './Publications.js';\nimport { SkillsList } from './SkillsList.js';\nimport styles from './TakuhonProfile.module.css';\nimport { Volunteering } from './Volunteering.js';\n\nexport interface TakuhonProfileProps {\n data: LocalizedTakuhon;\n}\n\nexport function TakuhonProfile({ data }: TakuhonProfileProps): React.JSX.Element {\n const showFooter = data.settings.showPoweredBy !== false;\n\n return (\n <article className={styles.root}>\n <ProfileHeader profile={data.profile} />\n <LinksList links={data.links} />\n <EducationTimeline education={data.education} />\n <Courses courses={data.courses} />\n <CareerTimeline careers={data.careers} />\n <Memberships memberships={data.memberships} />\n <Certifications certifications={data.certifications} />\n <Patents patents={data.patents} />\n <ProjectsList projects={data.projects} />\n <Publications publications={data.publications} />\n <HonorsList honors={data.honors} />\n <Volunteering volunteering={data.volunteering} />\n <SkillsList skills={data.skills} />\n <Languages languages={data.languages} />\n <ContactInfo contact={data.contact} />\n {showFooter ? <Footer /> : null}\n </article>\n );\n}\n","import type { LocalizedCareer } from '@takuhon/core';\n\nimport styles from './CareerTimeline.module.css';\n\nexport interface CareerTimelineProps {\n careers: LocalizedCareer[];\n}\n\nfunction sortCareers(careers: LocalizedCareer[]): LocalizedCareer[] {\n return [...careers].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.startDate.localeCompare(a.startDate);\n });\n}\n\nfunction isOngoing(career: LocalizedCareer): boolean {\n return career.isCurrent === true || career.endDate === null || career.endDate === undefined;\n}\n\nexport function CareerTimeline({ careers }: CareerTimelineProps): React.JSX.Element | null {\n if (careers.length === 0) return null;\n const ordered = sortCareers(careers);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-career-heading\">\n <h2 id=\"takuhon-career-heading\" className={styles.heading}>\n Career\n </h2>\n <ol className={styles.list}>\n {ordered.map((career) => (\n <li key={career.id} className={styles.item}>\n <div className={styles.timelineMarker} aria-hidden=\"true\" />\n <div className={styles.content}>\n <p className={styles.role}>\n {career.url ? (\n <a\n className={styles.organizationLink}\n href={career.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {career.role} · {career.organization}\n </a>\n ) : (\n <>\n {career.role} · {career.organization}\n </>\n )}\n </p>\n <p className={styles.range}>\n <time dateTime={career.startDate}>{career.startDate}</time>\n {' – '}\n {isOngoing(career) ? (\n // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.\n 'Present'\n ) : (\n <time dateTime={career.endDate!}>{career.endDate}</time>\n )}\n </p>\n {career.location?.display ? (\n <p className={styles.location}>{career.location.display}</p>\n ) : null}\n {career.description ? (\n <p className={styles.description}>{career.description}</p>\n ) : null}\n </div>\n </li>\n ))}\n </ol>\n </section>\n );\n}\n","import type { LocalizedCertification } from '@takuhon/core';\n\nimport styles from './Certifications.module.css';\n\nexport interface CertificationsProps {\n certifications: LocalizedCertification[];\n}\n\nfunction sortCerts(certs: LocalizedCertification[]): LocalizedCertification[] {\n return [...certs].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.issueDate.localeCompare(a.issueDate);\n });\n}\n\nexport function Certifications({ certifications }: CertificationsProps): React.JSX.Element | null {\n if (certifications.length === 0) return null;\n const ordered = sortCerts(certifications);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-certifications-heading\">\n <h2 id=\"takuhon-certifications-heading\" className={styles.heading}>\n Certifications\n </h2>\n <ul className={styles.list}>\n {ordered.map((cert) => (\n <li key={cert.id} className={styles.item}>\n <p className={styles.title}>\n {cert.url ? (\n <a\n className={styles.link}\n href={cert.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {cert.title}\n </a>\n ) : (\n cert.title\n )}\n </p>\n <p className={styles.issuer}>{cert.issuingOrganization}</p>\n <p className={styles.range}>\n <time dateTime={cert.issueDate}>{cert.issueDate}</time>\n {cert.expirationDate === null ? (\n // TODO(i18n-phase-2): Localize the 'No expiration' label via the locale resolver.\n <span className={styles.tag}> · No expiration</span>\n ) : cert.expirationDate !== undefined ? (\n <>\n {' – '}\n <time dateTime={cert.expirationDate}>{cert.expirationDate}</time>\n </>\n ) : null}\n </p>\n {/* credentialId is intentionally not rendered by default — the API\n privacy filter strips it for public responses unless\n meta.privacy.hideCredentialIds is explicitly false. */}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { Contact } from '@takuhon/core';\n\nimport styles from './ContactInfo.module.css';\n\nexport interface ContactInfoProps {\n contact: Contact;\n}\n\nexport function ContactInfo({ contact }: ContactInfoProps): React.JSX.Element | null {\n const showEmail = contact.showEmail === true && contact.email !== undefined;\n if (!showEmail && contact.formUrl === undefined) return null;\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-contact-heading\">\n <h2 id=\"takuhon-contact-heading\" className={styles.heading}>\n Contact\n </h2>\n <ul className={styles.list}>\n {showEmail && contact.email !== undefined ? (\n <li className={styles.item}>\n <a className={styles.link} href={`mailto:${contact.email}`}>\n {contact.email}\n </a>\n </li>\n ) : null}\n {contact.formUrl !== undefined ? (\n <li className={styles.item}>\n <a\n className={styles.link}\n href={contact.formUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Contact form\n </a>\n </li>\n ) : null}\n </ul>\n </section>\n );\n}\n","import type { LocalizedCourse } from '@takuhon/core';\n\nimport styles from './Courses.module.css';\n\nexport interface CoursesProps {\n courses: LocalizedCourse[];\n}\n\nfunction sortCourses(entries: LocalizedCourse[]): LocalizedCourse[] {\n return [...entries].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return (b.completionDate ?? '').localeCompare(a.completionDate ?? '');\n });\n}\n\nexport function Courses({ courses }: CoursesProps): React.JSX.Element | null {\n if (courses.length === 0) return null;\n const ordered = sortCourses(courses);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-courses-heading\">\n <h2 id=\"takuhon-courses-heading\" className={styles.heading}>\n Courses\n </h2>\n <ul className={styles.list}>\n {ordered.map((entry) => (\n <li key={entry.id} className={styles.item}>\n <p className={styles.title}>\n {entry.certificateUrl ? (\n <a\n className={styles.link}\n href={entry.certificateUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.title}\n </a>\n ) : (\n entry.title\n )}\n </p>\n {entry.provider ? <p className={styles.provider}>{entry.provider}</p> : null}\n {entry.courseNumber ? (\n <p className={styles.courseNumber}>{entry.courseNumber}</p>\n ) : null}\n {entry.completionDate ? (\n <p className={styles.date}>\n <time dateTime={entry.completionDate}>{entry.completionDate}</time>\n </p>\n ) : null}\n {entry.description ? <p className={styles.description}>{entry.description}</p> : null}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { LocalizedEducation } from '@takuhon/core';\n\nimport styles from './EducationTimeline.module.css';\n\nexport interface EducationTimelineProps {\n education: LocalizedEducation[];\n}\n\nfunction sortEducation(entries: LocalizedEducation[]): LocalizedEducation[] {\n return [...entries].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.startDate.localeCompare(a.startDate);\n });\n}\n\nfunction isOngoing(entry: LocalizedEducation): boolean {\n return entry.isCurrent === true || entry.endDate === null || entry.endDate === undefined;\n}\n\nfunction composeStudyLine(entry: LocalizedEducation): string | undefined {\n if (entry.degree !== undefined && entry.fieldOfStudy !== undefined) {\n return `${entry.degree} · ${entry.fieldOfStudy}`;\n }\n return entry.degree ?? entry.fieldOfStudy;\n}\n\nexport function EducationTimeline({ education }: EducationTimelineProps): React.JSX.Element | null {\n if (education.length === 0) return null;\n const ordered = sortEducation(education);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-education-heading\">\n <h2 id=\"takuhon-education-heading\" className={styles.heading}>\n Education\n </h2>\n <ol className={styles.list}>\n {ordered.map((entry) => {\n const study = composeStudyLine(entry);\n return (\n <li key={entry.id} className={styles.item}>\n <div className={styles.timelineMarker} aria-hidden=\"true\" />\n <div className={styles.content}>\n <p className={styles.institution}>\n {entry.url ? (\n <a\n className={styles.link}\n href={entry.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.institution}\n </a>\n ) : (\n entry.institution\n )}\n </p>\n {study ? <p className={styles.study}>{study}</p> : null}\n <p className={styles.range}>\n <time dateTime={entry.startDate}>{entry.startDate}</time>\n {' – '}\n {isOngoing(entry) ? (\n // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.\n 'Present'\n ) : (\n <time dateTime={entry.endDate!}>{entry.endDate}</time>\n )}\n </p>\n {entry.grade ? <p className={styles.grade}>{entry.grade}</p> : null}\n {entry.description ? (\n <p className={styles.description}>{entry.description}</p>\n ) : null}\n </div>\n </li>\n );\n })}\n </ol>\n </section>\n );\n}\n","import styles from './Footer.module.css';\n\nexport function Footer(): React.JSX.Element {\n return (\n <footer className={styles.footer}>\n <p className={styles.line}>\n Powered by{' '}\n <a\n className={styles.link}\n href=\"https://github.com/takuhon-dev/takuhon\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n takuhon\n </a>\n </p>\n </footer>\n );\n}\n","import type { LocalizedHonor } from '@takuhon/core';\n\nimport styles from './HonorsList.module.css';\n\nexport interface HonorsListProps {\n honors: LocalizedHonor[];\n}\n\nfunction sortHonors(honors: LocalizedHonor[]): LocalizedHonor[] {\n return [...honors].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.date.localeCompare(a.date);\n });\n}\n\nexport function HonorsList({ honors }: HonorsListProps): React.JSX.Element | null {\n if (honors.length === 0) return null;\n const ordered = sortHonors(honors);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-honors-heading\">\n <h2 id=\"takuhon-honors-heading\" className={styles.heading}>\n Honors &amp; Awards\n </h2>\n <ul className={styles.list}>\n {ordered.map((honor) => (\n <li key={honor.id} className={styles.item}>\n <p className={styles.title}>\n {honor.url ? (\n <a\n className={styles.link}\n href={honor.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {honor.title}\n </a>\n ) : (\n honor.title\n )}\n </p>\n <p className={styles.meta}>\n {honor.issuer}\n {' · '}\n <time dateTime={honor.date}>{honor.date}</time>\n </p>\n {honor.description ? <p className={styles.description}>{honor.description}</p> : null}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { LanguageProficiency, LocalizedLanguage } from '@takuhon/core';\n\nimport styles from './Languages.module.css';\n\nexport interface LanguagesProps {\n languages: LocalizedLanguage[];\n}\n\nconst PROFICIENCY_LABEL: Record<LanguageProficiency, string> = {\n native: 'Native',\n fluent: 'Fluent',\n professional: 'Professional working',\n intermediate: 'Intermediate',\n basic: 'Basic',\n};\n\nfunction sortLanguages(languages: LocalizedLanguage[]): LocalizedLanguage[] {\n return [...languages].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n return aOrder - bOrder;\n });\n}\n\nexport function Languages({ languages }: LanguagesProps): React.JSX.Element | null {\n if (languages.length === 0) return null;\n const ordered = sortLanguages(languages);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-languages-heading\">\n <h2 id=\"takuhon-languages-heading\" className={styles.heading}>\n Languages\n </h2>\n <ul className={styles.list}>\n {ordered.map((entry) => (\n <li key={entry.id} className={styles.item}>\n <span className={styles.name} lang={entry.language}>\n {entry.displayName ?? entry.language}\n </span>\n <span className={styles.proficiency}>{PROFICIENCY_LABEL[entry.proficiency]}</span>\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { LocalizedLink } from '@takuhon/core';\n\nimport styles from './LinksList.module.css';\n\nexport interface LinksListProps {\n links: LocalizedLink[];\n}\n\nfunction sortLinks(links: LocalizedLink[]): LocalizedLink[] {\n return [...links].sort((a, b) => {\n const aFeatured = a.featured ? 1 : 0;\n const bFeatured = b.featured ? 1 : 0;\n if (aFeatured !== bFeatured) return bFeatured - aFeatured;\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n return aOrder - bOrder;\n });\n}\n\nfunction formatLinkLabel(link: LocalizedLink): string {\n if (link.label) return link.label;\n if (link.type === 'custom') return link.id;\n return link.type;\n}\n\nexport function LinksList({ links }: LinksListProps): React.JSX.Element | null {\n if (links.length === 0) return null;\n\n const ordered = sortLinks(links);\n\n return (\n <nav aria-label=\"Profile links\" className={styles.nav}>\n <ul className={styles.list}>\n {ordered.map((link) => (\n <li key={link.id} className={styles.item}>\n <a\n className={styles.link}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-featured={link.featured ? 'true' : undefined}\n >\n {link.iconUrl ? <img className={styles.icon} src={link.iconUrl} alt=\"\" /> : null}\n <span className={styles.label}>{formatLinkLabel(link)}</span>\n </a>\n </li>\n ))}\n </ul>\n </nav>\n );\n}\n","import type { LocalizedMembership } from '@takuhon/core';\n\nimport styles from './Memberships.module.css';\n\nexport interface MembershipsProps {\n memberships: LocalizedMembership[];\n}\n\nfunction sortMemberships(entries: LocalizedMembership[]): LocalizedMembership[] {\n return [...entries].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.startDate.localeCompare(a.startDate);\n });\n}\n\nfunction isOngoing(entry: LocalizedMembership): boolean {\n return entry.isCurrent === true || entry.endDate === null || entry.endDate === undefined;\n}\n\nexport function Memberships({ memberships }: MembershipsProps): React.JSX.Element | null {\n if (memberships.length === 0) return null;\n const ordered = sortMemberships(memberships);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-memberships-heading\">\n <h2 id=\"takuhon-memberships-heading\" className={styles.heading}>\n Memberships\n </h2>\n <ol className={styles.list}>\n {ordered.map((entry) => (\n <li key={entry.id} className={styles.item}>\n <div className={styles.timelineMarker} aria-hidden=\"true\" />\n <div className={styles.content}>\n <p className={styles.organization}>\n {entry.url ? (\n <a\n className={styles.link}\n href={entry.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.organization}\n </a>\n ) : (\n entry.organization\n )}\n </p>\n {entry.role ? <p className={styles.role}>{entry.role}</p> : null}\n <p className={styles.range}>\n <time dateTime={entry.startDate}>{entry.startDate}</time>\n {' – '}\n {isOngoing(entry) ? (\n // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.\n 'Present'\n ) : (\n <time dateTime={entry.endDate!}>{entry.endDate}</time>\n )}\n </p>\n {entry.description ? <p className={styles.description}>{entry.description}</p> : null}\n </div>\n </li>\n ))}\n </ol>\n </section>\n );\n}\n","import type { LocalizedPatent, PatentStatus } from '@takuhon/core';\n\nimport styles from './Patents.module.css';\n\nexport interface PatentsProps {\n patents: LocalizedPatent[];\n}\n\n// TODO(i18n-phase-2): Extract these labels into the locale resolver once Phase 2 i18n lands,\n// mirroring the PROFICIENCY_LABEL pattern in Languages.tsx.\nconst STATUS_LABEL: Record<PatentStatus, string> = {\n pending: 'Pending',\n issued: 'Issued',\n expired: 'Expired',\n abandoned: 'Abandoned',\n};\n\nfunction sortPatents(entries: LocalizedPatent[]): LocalizedPatent[] {\n return [...entries].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n const aDate = a.grantDate ?? a.filingDate ?? '';\n const bDate = b.grantDate ?? b.filingDate ?? '';\n return bDate.localeCompare(aDate);\n });\n}\n\nexport function Patents({ patents }: PatentsProps): React.JSX.Element | null {\n if (patents.length === 0) return null;\n const ordered = sortPatents(patents);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-patents-heading\">\n <h2 id=\"takuhon-patents-heading\" className={styles.heading}>\n Patents\n </h2>\n <ul className={styles.list}>\n {ordered.map((entry) => (\n <li key={entry.id} className={styles.item}>\n <p className={styles.title}>\n {entry.url ? (\n <a\n className={styles.link}\n href={entry.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.title}\n </a>\n ) : (\n entry.title\n )}\n <span className={styles.statusBadge} data-status={entry.status}>\n <span className={styles.srOnly}>Status: </span>\n {STATUS_LABEL[entry.status]}\n </span>\n </p>\n <p className={styles.patentNumber}>{entry.patentNumber}</p>\n {entry.office ? <p className={styles.office}>{entry.office}</p> : null}\n {entry.filingDate !== undefined || entry.grantDate !== undefined ? (\n <p className={styles.dates}>\n {entry.filingDate ? (\n <>\n {/* TODO(i18n-phase-2): Localize the 'Filed' label via the locale resolver. */}\n {'Filed '}\n <time dateTime={entry.filingDate}>{entry.filingDate}</time>\n </>\n ) : null}\n {entry.filingDate && entry.grantDate ? ' · ' : null}\n {entry.grantDate ? (\n <>\n {/* TODO(i18n-phase-2): Localize the 'Granted' label via the locale resolver. */}\n {'Granted '}\n <time dateTime={entry.grantDate}>{entry.grantDate}</time>\n </>\n ) : null}\n </p>\n ) : null}\n {entry.coInventors && entry.coInventors.length > 0 ? (\n <>\n {/* TODO(i18n-phase-2): Localize the 'with' prefix via the locale resolver. */}\n <p className={styles.coInventors}>{`with ${entry.coInventors.join(', ')}`}</p>\n </>\n ) : null}\n {entry.description ? <p className={styles.description}>{entry.description}</p> : null}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { LocalizedProfile } from '@takuhon/core';\n\nimport styles from './ProfileHeader.module.css';\n\nexport interface ProfileHeaderProps {\n profile: LocalizedProfile;\n}\n\nexport function ProfileHeader({ profile }: ProfileHeaderProps): React.JSX.Element {\n const locationLabel = profile.location?.display ?? profile.location?.locality;\n\n return (\n <header className={styles.header}>\n {profile.avatar ? (\n <img\n className={styles.avatar}\n src={profile.avatar.url}\n alt={profile.avatar.alt ?? ''}\n width={128}\n height={128}\n loading=\"eager\"\n decoding=\"async\"\n />\n ) : null}\n <h1 className={styles.displayName}>{profile.displayName}</h1>\n {profile.tagline ? <p className={styles.tagline}>{profile.tagline}</p> : null}\n {locationLabel ? <p className={styles.location}>{locationLabel}</p> : null}\n {profile.bio ? <p className={styles.bio}>{profile.bio}</p> : null}\n </header>\n );\n}\n","import type { LocalizedProject } from '@takuhon/core';\n\nimport styles from './ProjectsList.module.css';\n\nexport interface ProjectsListProps {\n projects: LocalizedProject[];\n}\n\nfunction sortProjects(projects: LocalizedProject[]): LocalizedProject[] {\n return [...projects].sort((a, b) => {\n const aHighlighted = a.highlighted ? 1 : 0;\n const bHighlighted = b.highlighted ? 1 : 0;\n if (aHighlighted !== bHighlighted) return bHighlighted - aHighlighted;\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n return aOrder - bOrder;\n });\n}\n\nexport function ProjectsList({ projects }: ProjectsListProps): React.JSX.Element | null {\n if (projects.length === 0) return null;\n const ordered = sortProjects(projects);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-projects-heading\">\n <h2 id=\"takuhon-projects-heading\" className={styles.heading}>\n Projects\n </h2>\n <ul className={styles.list}>\n {ordered.map((project) => (\n <li\n key={project.id}\n className={styles.item}\n data-highlighted={project.highlighted ? 'true' : undefined}\n >\n <p className={styles.title}>\n {project.url ? (\n <a\n className={styles.titleLink}\n href={project.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {project.title}\n </a>\n ) : (\n project.title\n )}\n </p>\n {project.startDate !== undefined ? (\n <p className={styles.range}>\n <time dateTime={project.startDate}>{project.startDate}</time>\n {' – '}\n {project.endDate ? (\n <time dateTime={project.endDate}>{project.endDate}</time>\n ) : (\n // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.\n 'Present'\n )}\n </p>\n ) : null}\n {project.description ? (\n <p className={styles.description}>{project.description}</p>\n ) : null}\n {project.tags && project.tags.length > 0 ? (\n <ul className={styles.tags} aria-label=\"Tags\">\n {project.tags.map((tag) => (\n <li key={tag} className={styles.tag}>\n {tag}\n </li>\n ))}\n </ul>\n ) : null}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { LocalizedPublication } from '@takuhon/core';\n\nimport styles from './Publications.module.css';\n\nexport interface PublicationsProps {\n publications: LocalizedPublication[];\n}\n\nfunction sortPublications(entries: LocalizedPublication[]): LocalizedPublication[] {\n return [...entries].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.date.localeCompare(a.date);\n });\n}\n\n// Strip an optional doi.org URL prefix so the rendered href is always\n// `https://doi.org/<bare-identifier>`. Defensive against fixtures that\n// inadvertently store a full URL instead of the bare DOI per spec §6.15.\nfunction normalizeDoi(doi: string): string {\n return doi.replace(/^https?:\\/\\/(?:dx\\.)?doi\\.org\\//i, '');\n}\n\nexport function Publications({ publications }: PublicationsProps): React.JSX.Element | null {\n if (publications.length === 0) return null;\n const ordered = sortPublications(publications);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-publications-heading\">\n <h2 id=\"takuhon-publications-heading\" className={styles.heading}>\n Publications\n </h2>\n <ul className={styles.list}>\n {ordered.map((entry) => (\n <li key={entry.id} className={styles.item}>\n <p className={styles.title}>\n {entry.url ? (\n <a\n className={styles.link}\n href={entry.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.title}\n </a>\n ) : (\n entry.title\n )}\n </p>\n {entry.publisher ? <p className={styles.publisher}>{entry.publisher}</p> : null}\n <p className={styles.date}>\n <time dateTime={entry.date}>{entry.date}</time>\n </p>\n {entry.coAuthors && entry.coAuthors.length > 0 ? (\n <p className={styles.coAuthors}>{`with ${entry.coAuthors.join(', ')}`}</p>\n ) : null}\n {entry.doi\n ? (() => {\n const bare = normalizeDoi(entry.doi);\n return (\n <p className={styles.doi}>\n <a\n className={styles.link}\n href={`https://doi.org/${bare}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {`doi:${bare}`}\n </a>\n </p>\n );\n })()\n : null}\n {entry.description ? <p className={styles.description}>{entry.description}</p> : null}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { Skill } from '@takuhon/core';\n\nimport styles from './SkillsList.module.css';\n\nexport interface SkillsListProps {\n skills: Skill[];\n}\n\ninterface SkillGroup {\n category: string;\n skills: Skill[];\n}\n\nfunction groupSkills(skills: Skill[]): SkillGroup[] {\n const sorted = [...skills].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n return aOrder - bOrder;\n });\n const groups = new Map<string, Skill[]>();\n for (const skill of sorted) {\n const key = skill.category ?? 'other';\n const bucket = groups.get(key);\n if (bucket) {\n bucket.push(skill);\n } else {\n groups.set(key, [skill]);\n }\n }\n return [...groups.entries()].map(([category, items]) => ({ category, skills: items }));\n}\n\nexport function SkillsList({ skills }: SkillsListProps): React.JSX.Element | null {\n if (skills.length === 0) return null;\n const groups = groupSkills(skills);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-skills-heading\">\n <h2 id=\"takuhon-skills-heading\" className={styles.heading}>\n Skills\n </h2>\n <div className={styles.groups}>\n {groups.map((group) => (\n <div key={group.category} className={styles.group}>\n <h3 className={styles.category}>{group.category}</h3>\n <ul className={styles.list} aria-label={`${group.category} skills`}>\n {group.skills.map((skill) => (\n <li key={skill.id} className={styles.item}>\n {skill.label}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </section>\n );\n}\n","import type { LocalizedVolunteering } from '@takuhon/core';\n\nimport styles from './Volunteering.module.css';\n\nexport interface VolunteeringProps {\n volunteering: LocalizedVolunteering[];\n}\n\nfunction sortVolunteering(entries: LocalizedVolunteering[]): LocalizedVolunteering[] {\n return [...entries].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.startDate.localeCompare(a.startDate);\n });\n}\n\nfunction isOngoing(entry: LocalizedVolunteering): boolean {\n return entry.isCurrent === true || entry.endDate === null || entry.endDate === undefined;\n}\n\nexport function Volunteering({ volunteering }: VolunteeringProps): React.JSX.Element | null {\n if (volunteering.length === 0) return null;\n const ordered = sortVolunteering(volunteering);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-volunteering-heading\">\n <h2 id=\"takuhon-volunteering-heading\" className={styles.heading}>\n Volunteering\n </h2>\n <ol className={styles.list}>\n {ordered.map((entry) => (\n <li key={entry.id} className={styles.item}>\n <div className={styles.timelineMarker} aria-hidden=\"true\" />\n <div className={styles.content}>\n <p className={styles.organization}>\n {entry.url ? (\n <a\n className={styles.link}\n href={entry.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.organization}\n </a>\n ) : (\n entry.organization\n )}\n </p>\n <p className={styles.role}>\n {entry.role}\n {entry.cause ? (\n <span className={styles.cause}>\n <span className={styles.srOnly}>Cause: </span>\n {entry.cause}\n </span>\n ) : null}\n </p>\n <p className={styles.range}>\n <time dateTime={entry.startDate}>{entry.startDate}</time>\n {' – '}\n {isOngoing(entry) ? (\n // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.\n 'Present'\n ) : (\n <time dateTime={entry.endDate!}>{entry.endDate}</time>\n )}\n </p>\n {entry.description ? <p className={styles.description}>{entry.description}</p> : null}\n </div>\n </li>\n ))}\n </ol>\n </section>\n );\n}\n","import type { LocaleTag } from '@takuhon/core';\n\nimport styles from './LocaleSwitcher.module.css';\n\nexport interface LocaleSwitcherProps {\n availableLocales: LocaleTag[];\n currentLocale: LocaleTag;\n onSelect: (locale: LocaleTag) => void;\n ariaLabel?: string;\n formatLocale?: (locale: LocaleTag) => string;\n}\n\nconst DEFAULT_ARIA_LABEL = 'Select language';\n\nexport function LocaleSwitcher({\n availableLocales,\n currentLocale,\n onSelect,\n ariaLabel,\n formatLocale,\n}: LocaleSwitcherProps): React.JSX.Element {\n const label = ariaLabel ?? DEFAULT_ARIA_LABEL;\n const format = formatLocale ?? ((locale: LocaleTag) => locale);\n return (\n <div className={styles.wrapper}>\n <select\n className={styles.select}\n aria-label={label}\n value={currentLocale}\n onChange={(event) => {\n onSelect(event.target.value);\n }}\n >\n {availableLocales.map((locale) => (\n <option key={locale} value={locale}>\n {format(locale)}\n </option>\n ))}\n </select>\n </div>\n );\n}\n","import { generateJsonLd, type LocalizedTakuhon } from '@takuhon/core';\nimport { useEffect } from 'react';\n\nexport interface TakuhonHeadProps {\n data: LocalizedTakuhon;\n siteUrl?: string;\n pageUrl?: string;\n}\n\nfunction primarySubtag(tag: string): string {\n const dash = tag.indexOf('-');\n return (dash === -1 ? tag : tag.slice(0, dash)).toLowerCase();\n}\n\n/**\n * Whether a leading path segment should be treated as a locale prefix.\n * Mirrors the server resolver's `matchAvailable` so the two surfaces agree:\n * an exact (case-insensitive) match, or a primary-subtag match so a\n * regional segment like `en-US` is recognized against an available `en`.\n */\nfunction isLocaleSegment(segment: string, availableLocales: readonly string[]): boolean {\n const lower = segment.toLowerCase();\n const primary = primarySubtag(segment);\n return availableLocales.some(\n (loc) => loc.toLowerCase() === lower || primarySubtag(loc) === primary,\n );\n}\n\n/**\n * Remove a leading `/{locale}` path segment (when it is recognizable as a\n * locale per {@link isLocaleSegment}) and any legacy `?lang=` query,\n * yielding a locale-neutral base URL. This prevents stacking (`/ja/en/...`,\n * `/en/en-US/...`) when the current page is already locale-prefixed: the\n * existing segment is stripped before {@link withLocalePrefix} re-adds the\n * target locale.\n */\nfunction localeNeutralUrl(pageUrl: string, availableLocales: readonly string[]): string {\n try {\n const url = new URL(pageUrl);\n url.searchParams.delete('lang');\n const segments = url.pathname.split('/');\n const first = segments[1];\n if (first !== undefined && first !== '' && isLocaleSegment(first, availableLocales)) {\n segments.splice(1, 1);\n url.pathname = segments.join('/') || '/';\n }\n return url.toString();\n } catch {\n return pageUrl;\n }\n}\n\n/**\n * Prepend a `/{locale}` path segment to a locale-neutral URL, producing\n * the canonical path form (`https://site/profile` → `https://site/ja/profile`,\n * `https://site/` → `https://site/ja/`). The path form is the advertised\n * URL; `?lang=` remains a resolution input but is never emitted here.\n *\n * This is deployment-agnostic: it inserts a locale segment into whatever\n * page URL `TakuhonHead` is given, regardless of how that page is routed.\n * The built-in `@takuhon/api` public app resolves the path prefix for its\n * own surfaces (`/`, `/api/profile`, `/api/jsonld`); the canonical\n * deployment serves the rendered profile at the site root, so its `/ja/`\n * form resolves out of the box. A deployment that serves the HTML profile\n * at another path is responsible for routing that locale-prefixed page.\n */\nfunction withLocalePrefix(neutralUrl: string, locale: string): string {\n try {\n const url = new URL(neutralUrl);\n url.pathname = url.pathname === '/' ? `/${locale}/` : `/${locale}${url.pathname}`;\n return url.toString();\n } catch {\n return neutralUrl;\n }\n}\n\nfunction absolutizeUrl(url: string | undefined, base: string | undefined): string | undefined {\n if (!url) return undefined;\n if (!base) return url;\n try {\n return new URL(url, base).toString();\n } catch {\n return url;\n }\n}\n\nfunction detectSiteUrl(explicit: string | undefined): string | undefined {\n if (explicit) return explicit;\n if (typeof window !== 'undefined') return window.location.origin;\n return undefined;\n}\n\nfunction detectPageUrl(\n explicit: string | undefined,\n siteUrl: string | undefined,\n): string | undefined {\n if (explicit) return explicit;\n if (typeof window !== 'undefined') {\n return window.location.origin + window.location.pathname;\n }\n return siteUrl;\n}\n\nexport function TakuhonHead({ data, siteUrl, pageUrl }: TakuhonHeadProps): React.JSX.Element {\n const resolvedSiteUrl = detectSiteUrl(siteUrl);\n const resolvedPageUrl = detectPageUrl(pageUrl, resolvedSiteUrl);\n\n const { profile, settings, resolvedLocale } = data;\n const description = profile.bio ?? profile.tagline;\n const ogDescription = profile.tagline ?? profile.bio;\n const ogImage = absolutizeUrl(profile.avatar?.url, resolvedSiteUrl);\n const twitterCard = profile.avatar ? 'summary_large_image' : 'summary';\n\n // Locale-neutral base, so canonical/alternates emit one clean path form\n // per locale (`/ja/...`) and never stack when the current page is\n // already locale-prefixed.\n const neutralPageUrl = resolvedPageUrl\n ? localeNeutralUrl(resolvedPageUrl, settings.availableLocales)\n : undefined;\n\n const canonical = neutralPageUrl ? withLocalePrefix(neutralPageUrl, resolvedLocale) : undefined;\n const alternates = neutralPageUrl\n ? settings.availableLocales.map((loc) => ({\n locale: loc,\n href: withLocalePrefix(neutralPageUrl, loc),\n }))\n : [];\n const xDefaultHref = neutralPageUrl\n ? withLocalePrefix(neutralPageUrl, settings.defaultLocale)\n : undefined;\n\n const ogAlternates = settings.availableLocales.filter((loc) => loc !== resolvedLocale);\n\n const emitJsonLd = settings.enableJsonLd !== false;\n const jsonLdPayload = emitJsonLd ? JSON.stringify(generateJsonLd(data)) : null;\n\n useEffect(() => {\n if (!jsonLdPayload) return;\n const script = document.createElement('script');\n script.type = 'application/ld+json';\n script.textContent = jsonLdPayload;\n document.head.appendChild(script);\n return () => {\n script.remove();\n };\n }, [jsonLdPayload]);\n\n return (\n <>\n <title>{profile.displayName}</title>\n {description ? <meta name=\"description\" content={description} /> : null}\n {canonical ? <link rel=\"canonical\" href={canonical} /> : null}\n\n <meta property=\"og:title\" content={profile.displayName} />\n {ogDescription ? <meta property=\"og:description\" content={ogDescription} /> : null}\n {canonical ? <meta property=\"og:url\" content={canonical} /> : null}\n {ogImage ? <meta property=\"og:image\" content={ogImage} /> : null}\n <meta property=\"og:type\" content=\"profile\" />\n <meta property=\"og:locale\" content={resolvedLocale} />\n {ogAlternates.map((loc) => (\n <meta key={loc} property=\"og:locale:alternate\" content={loc} />\n ))}\n\n <meta name=\"twitter:card\" content={twitterCard} />\n\n {alternates.map(({ locale, href }) => (\n <link key={locale} rel=\"alternate\" hrefLang={locale} href={href} />\n ))}\n {xDefaultHref ? <link rel=\"alternate\" hrefLang=\"x-default\" href={xDefaultHref} /> : null}\n </>\n );\n}\n"],"mappings":"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","names":["styles","Fragment","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","isOngoing","styles","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","isOngoing","styles","Fragment","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","styles","styles","jsx","jsxs","isOngoing","jsx","jsxs","styles","styles","jsx","Fragment","jsx","jsxs"]}
1
+ {"version":3,"sources":["../src/components/TakuhonProfile.tsx","../src/components/CareerTimeline.tsx","../src/components/Certifications.tsx","../src/components/ContactInfo.tsx","../src/components/Courses.tsx","../src/components/EducationTimeline.tsx","../src/components/Footer.tsx","../src/components/HonorsList.tsx","../src/components/Languages.tsx","../src/components/LinksList.tsx","../src/components/Memberships.tsx","../src/components/Patents.tsx","../src/components/ProfileHeader.tsx","../src/components/ProjectsList.tsx","../src/components/Publications.tsx","../src/components/Recommendations.tsx","../src/components/SkillsList.tsx","../src/components/TestScores.tsx","../src/components/Volunteering.tsx","../src/components/LocaleSwitcher.tsx","../src/components/TakuhonHead.tsx"],"sourcesContent":["import type { LocalizedTakuhon } from '@takuhon/core';\n\nimport '../styles/tokens.css';\n\nimport { CareerTimeline } from './CareerTimeline.js';\nimport { Certifications } from './Certifications.js';\nimport { ContactInfo } from './ContactInfo.js';\nimport { Courses } from './Courses.js';\nimport { EducationTimeline } from './EducationTimeline.js';\nimport { Footer } from './Footer.js';\nimport { HonorsList } from './HonorsList.js';\nimport { Languages } from './Languages.js';\nimport { LinksList } from './LinksList.js';\nimport { Memberships } from './Memberships.js';\nimport { Patents } from './Patents.js';\nimport { ProfileHeader } from './ProfileHeader.js';\nimport { ProjectsList } from './ProjectsList.js';\nimport { Publications } from './Publications.js';\nimport { Recommendations } from './Recommendations.js';\nimport { SkillsList } from './SkillsList.js';\nimport styles from './TakuhonProfile.module.css';\nimport { TestScores } from './TestScores.js';\nimport { Volunteering } from './Volunteering.js';\n\nexport interface TakuhonProfileProps {\n data: LocalizedTakuhon;\n}\n\nexport function TakuhonProfile({ data }: TakuhonProfileProps): React.JSX.Element {\n const showFooter = data.settings.showPoweredBy !== false;\n\n return (\n <article className={styles.root}>\n <ProfileHeader profile={data.profile} />\n <LinksList links={data.links} />\n <EducationTimeline education={data.education} />\n <Courses courses={data.courses} />\n <CareerTimeline careers={data.careers} />\n <Memberships memberships={data.memberships} />\n <Certifications certifications={data.certifications} />\n <Patents patents={data.patents} />\n <ProjectsList projects={data.projects} />\n <Publications publications={data.publications} />\n <HonorsList honors={data.honors} />\n <Recommendations recommendations={data.recommendations} />\n <Volunteering volunteering={data.volunteering} />\n <SkillsList skills={data.skills} />\n <Languages languages={data.languages} />\n <TestScores testScores={data.testScores} />\n <ContactInfo contact={data.contact} />\n {showFooter ? <Footer /> : null}\n </article>\n );\n}\n","import type { LocalizedCareer } from '@takuhon/core';\n\nimport styles from './CareerTimeline.module.css';\n\nexport interface CareerTimelineProps {\n careers: LocalizedCareer[];\n}\n\nfunction sortCareers(careers: LocalizedCareer[]): LocalizedCareer[] {\n return [...careers].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.startDate.localeCompare(a.startDate);\n });\n}\n\nfunction isOngoing(career: LocalizedCareer): boolean {\n return career.isCurrent === true || career.endDate === null || career.endDate === undefined;\n}\n\nexport function CareerTimeline({ careers }: CareerTimelineProps): React.JSX.Element | null {\n if (careers.length === 0) return null;\n const ordered = sortCareers(careers);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-career-heading\">\n <h2 id=\"takuhon-career-heading\" className={styles.heading}>\n Career\n </h2>\n <ol className={styles.list}>\n {ordered.map((career) => (\n <li key={career.id} className={styles.item}>\n <div className={styles.timelineMarker} aria-hidden=\"true\" />\n <div className={styles.content}>\n <p className={styles.role}>\n {career.url ? (\n <a\n className={styles.organizationLink}\n href={career.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {career.role} · {career.organization}\n </a>\n ) : (\n <>\n {career.role} · {career.organization}\n </>\n )}\n </p>\n <p className={styles.range}>\n <time dateTime={career.startDate}>{career.startDate}</time>\n {' – '}\n {isOngoing(career) ? (\n // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.\n 'Present'\n ) : (\n <time dateTime={career.endDate!}>{career.endDate}</time>\n )}\n </p>\n {career.location?.display ? (\n <p className={styles.location}>{career.location.display}</p>\n ) : null}\n {career.description ? (\n <p className={styles.description}>{career.description}</p>\n ) : null}\n </div>\n </li>\n ))}\n </ol>\n </section>\n );\n}\n","import type { LocalizedCertification } from '@takuhon/core';\n\nimport styles from './Certifications.module.css';\n\nexport interface CertificationsProps {\n certifications: LocalizedCertification[];\n}\n\nfunction sortCerts(certs: LocalizedCertification[]): LocalizedCertification[] {\n return [...certs].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.issueDate.localeCompare(a.issueDate);\n });\n}\n\nexport function Certifications({ certifications }: CertificationsProps): React.JSX.Element | null {\n if (certifications.length === 0) return null;\n const ordered = sortCerts(certifications);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-certifications-heading\">\n <h2 id=\"takuhon-certifications-heading\" className={styles.heading}>\n Certifications\n </h2>\n <ul className={styles.list}>\n {ordered.map((cert) => (\n <li key={cert.id} className={styles.item}>\n <p className={styles.title}>\n {cert.url ? (\n <a\n className={styles.link}\n href={cert.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {cert.title}\n </a>\n ) : (\n cert.title\n )}\n </p>\n <p className={styles.issuer}>{cert.issuingOrganization}</p>\n <p className={styles.range}>\n <time dateTime={cert.issueDate}>{cert.issueDate}</time>\n {cert.expirationDate === null ? (\n // TODO(i18n-phase-2): Localize the 'No expiration' label via the locale resolver.\n <span className={styles.tag}> · No expiration</span>\n ) : cert.expirationDate !== undefined ? (\n <>\n {' – '}\n <time dateTime={cert.expirationDate}>{cert.expirationDate}</time>\n </>\n ) : null}\n </p>\n {/* credentialId is intentionally not rendered by default — the API\n privacy filter strips it for public responses unless\n meta.privacy.hideCredentialIds is explicitly false. */}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { Contact } from '@takuhon/core';\n\nimport styles from './ContactInfo.module.css';\n\nexport interface ContactInfoProps {\n contact: Contact;\n}\n\nexport function ContactInfo({ contact }: ContactInfoProps): React.JSX.Element | null {\n const showEmail = contact.showEmail === true && contact.email !== undefined;\n if (!showEmail && contact.formUrl === undefined) return null;\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-contact-heading\">\n <h2 id=\"takuhon-contact-heading\" className={styles.heading}>\n Contact\n </h2>\n <ul className={styles.list}>\n {showEmail && contact.email !== undefined ? (\n <li className={styles.item}>\n <a className={styles.link} href={`mailto:${contact.email}`}>\n {contact.email}\n </a>\n </li>\n ) : null}\n {contact.formUrl !== undefined ? (\n <li className={styles.item}>\n <a\n className={styles.link}\n href={contact.formUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Contact form\n </a>\n </li>\n ) : null}\n </ul>\n </section>\n );\n}\n","import type { LocalizedCourse } from '@takuhon/core';\n\nimport styles from './Courses.module.css';\n\nexport interface CoursesProps {\n courses: LocalizedCourse[];\n}\n\nfunction sortCourses(entries: LocalizedCourse[]): LocalizedCourse[] {\n return [...entries].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return (b.completionDate ?? '').localeCompare(a.completionDate ?? '');\n });\n}\n\nexport function Courses({ courses }: CoursesProps): React.JSX.Element | null {\n if (courses.length === 0) return null;\n const ordered = sortCourses(courses);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-courses-heading\">\n <h2 id=\"takuhon-courses-heading\" className={styles.heading}>\n Courses\n </h2>\n <ul className={styles.list}>\n {ordered.map((entry) => (\n <li key={entry.id} className={styles.item}>\n <p className={styles.title}>\n {entry.certificateUrl ? (\n <a\n className={styles.link}\n href={entry.certificateUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.title}\n </a>\n ) : (\n entry.title\n )}\n </p>\n {entry.provider ? <p className={styles.provider}>{entry.provider}</p> : null}\n {entry.courseNumber ? (\n <p className={styles.courseNumber}>{entry.courseNumber}</p>\n ) : null}\n {entry.completionDate ? (\n <p className={styles.date}>\n <time dateTime={entry.completionDate}>{entry.completionDate}</time>\n </p>\n ) : null}\n {entry.description ? <p className={styles.description}>{entry.description}</p> : null}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { LocalizedEducation } from '@takuhon/core';\n\nimport styles from './EducationTimeline.module.css';\n\nexport interface EducationTimelineProps {\n education: LocalizedEducation[];\n}\n\nfunction sortEducation(entries: LocalizedEducation[]): LocalizedEducation[] {\n return [...entries].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.startDate.localeCompare(a.startDate);\n });\n}\n\nfunction isOngoing(entry: LocalizedEducation): boolean {\n return entry.isCurrent === true || entry.endDate === null || entry.endDate === undefined;\n}\n\nfunction composeStudyLine(entry: LocalizedEducation): string | undefined {\n if (entry.degree !== undefined && entry.fieldOfStudy !== undefined) {\n return `${entry.degree} · ${entry.fieldOfStudy}`;\n }\n return entry.degree ?? entry.fieldOfStudy;\n}\n\nexport function EducationTimeline({ education }: EducationTimelineProps): React.JSX.Element | null {\n if (education.length === 0) return null;\n const ordered = sortEducation(education);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-education-heading\">\n <h2 id=\"takuhon-education-heading\" className={styles.heading}>\n Education\n </h2>\n <ol className={styles.list}>\n {ordered.map((entry) => {\n const study = composeStudyLine(entry);\n return (\n <li key={entry.id} className={styles.item}>\n <div className={styles.timelineMarker} aria-hidden=\"true\" />\n <div className={styles.content}>\n <p className={styles.institution}>\n {entry.url ? (\n <a\n className={styles.link}\n href={entry.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.institution}\n </a>\n ) : (\n entry.institution\n )}\n </p>\n {study ? <p className={styles.study}>{study}</p> : null}\n <p className={styles.range}>\n <time dateTime={entry.startDate}>{entry.startDate}</time>\n {' – '}\n {isOngoing(entry) ? (\n // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.\n 'Present'\n ) : (\n <time dateTime={entry.endDate!}>{entry.endDate}</time>\n )}\n </p>\n {entry.grade ? <p className={styles.grade}>{entry.grade}</p> : null}\n {entry.description ? (\n <p className={styles.description}>{entry.description}</p>\n ) : null}\n </div>\n </li>\n );\n })}\n </ol>\n </section>\n );\n}\n","import styles from './Footer.module.css';\n\nexport function Footer(): React.JSX.Element {\n return (\n <footer className={styles.footer}>\n <p className={styles.line}>\n Powered by{' '}\n <a\n className={styles.link}\n href=\"https://github.com/takuhon-dev/takuhon\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n takuhon\n </a>\n </p>\n </footer>\n );\n}\n","import type { LocalizedHonor } from '@takuhon/core';\n\nimport styles from './HonorsList.module.css';\n\nexport interface HonorsListProps {\n honors: LocalizedHonor[];\n}\n\nfunction sortHonors(honors: LocalizedHonor[]): LocalizedHonor[] {\n return [...honors].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.date.localeCompare(a.date);\n });\n}\n\nexport function HonorsList({ honors }: HonorsListProps): React.JSX.Element | null {\n if (honors.length === 0) return null;\n const ordered = sortHonors(honors);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-honors-heading\">\n <h2 id=\"takuhon-honors-heading\" className={styles.heading}>\n Honors &amp; Awards\n </h2>\n <ul className={styles.list}>\n {ordered.map((honor) => (\n <li key={honor.id} className={styles.item}>\n <p className={styles.title}>\n {honor.url ? (\n <a\n className={styles.link}\n href={honor.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {honor.title}\n </a>\n ) : (\n honor.title\n )}\n </p>\n <p className={styles.meta}>\n {honor.issuer}\n {' · '}\n <time dateTime={honor.date}>{honor.date}</time>\n </p>\n {honor.description ? <p className={styles.description}>{honor.description}</p> : null}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { LanguageProficiency, LocalizedLanguage } from '@takuhon/core';\n\nimport styles from './Languages.module.css';\n\nexport interface LanguagesProps {\n languages: LocalizedLanguage[];\n}\n\nconst PROFICIENCY_LABEL: Record<LanguageProficiency, string> = {\n native: 'Native',\n fluent: 'Fluent',\n professional: 'Professional working',\n intermediate: 'Intermediate',\n basic: 'Basic',\n};\n\nfunction sortLanguages(languages: LocalizedLanguage[]): LocalizedLanguage[] {\n return [...languages].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n return aOrder - bOrder;\n });\n}\n\nexport function Languages({ languages }: LanguagesProps): React.JSX.Element | null {\n if (languages.length === 0) return null;\n const ordered = sortLanguages(languages);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-languages-heading\">\n <h2 id=\"takuhon-languages-heading\" className={styles.heading}>\n Languages\n </h2>\n <ul className={styles.list}>\n {ordered.map((entry) => (\n <li key={entry.id} className={styles.item}>\n <span className={styles.name} lang={entry.language}>\n {entry.displayName ?? entry.language}\n </span>\n <span className={styles.proficiency}>{PROFICIENCY_LABEL[entry.proficiency]}</span>\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { LocalizedLink } from '@takuhon/core';\n\nimport styles from './LinksList.module.css';\n\nexport interface LinksListProps {\n links: LocalizedLink[];\n}\n\nfunction sortLinks(links: LocalizedLink[]): LocalizedLink[] {\n return [...links].sort((a, b) => {\n const aFeatured = a.featured ? 1 : 0;\n const bFeatured = b.featured ? 1 : 0;\n if (aFeatured !== bFeatured) return bFeatured - aFeatured;\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n return aOrder - bOrder;\n });\n}\n\nfunction formatLinkLabel(link: LocalizedLink): string {\n if (link.label) return link.label;\n if (link.type === 'custom') return link.id;\n return link.type;\n}\n\nexport function LinksList({ links }: LinksListProps): React.JSX.Element | null {\n if (links.length === 0) return null;\n\n const ordered = sortLinks(links);\n\n return (\n <nav aria-label=\"Profile links\" className={styles.nav}>\n <ul className={styles.list}>\n {ordered.map((link) => (\n <li key={link.id} className={styles.item}>\n <a\n className={styles.link}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-featured={link.featured ? 'true' : undefined}\n >\n {link.iconUrl ? <img className={styles.icon} src={link.iconUrl} alt=\"\" /> : null}\n <span className={styles.label}>{formatLinkLabel(link)}</span>\n </a>\n </li>\n ))}\n </ul>\n </nav>\n );\n}\n","import type { LocalizedMembership } from '@takuhon/core';\n\nimport styles from './Memberships.module.css';\n\nexport interface MembershipsProps {\n memberships: LocalizedMembership[];\n}\n\nfunction sortMemberships(entries: LocalizedMembership[]): LocalizedMembership[] {\n return [...entries].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.startDate.localeCompare(a.startDate);\n });\n}\n\nfunction isOngoing(entry: LocalizedMembership): boolean {\n return entry.isCurrent === true || entry.endDate === null || entry.endDate === undefined;\n}\n\nexport function Memberships({ memberships }: MembershipsProps): React.JSX.Element | null {\n if (memberships.length === 0) return null;\n const ordered = sortMemberships(memberships);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-memberships-heading\">\n <h2 id=\"takuhon-memberships-heading\" className={styles.heading}>\n Memberships\n </h2>\n <ol className={styles.list}>\n {ordered.map((entry) => (\n <li key={entry.id} className={styles.item}>\n <div className={styles.timelineMarker} aria-hidden=\"true\" />\n <div className={styles.content}>\n <p className={styles.organization}>\n {entry.url ? (\n <a\n className={styles.link}\n href={entry.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.organization}\n </a>\n ) : (\n entry.organization\n )}\n </p>\n {entry.role ? <p className={styles.role}>{entry.role}</p> : null}\n <p className={styles.range}>\n <time dateTime={entry.startDate}>{entry.startDate}</time>\n {' – '}\n {isOngoing(entry) ? (\n // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.\n 'Present'\n ) : (\n <time dateTime={entry.endDate!}>{entry.endDate}</time>\n )}\n </p>\n {entry.description ? <p className={styles.description}>{entry.description}</p> : null}\n </div>\n </li>\n ))}\n </ol>\n </section>\n );\n}\n","import type { LocalizedPatent, PatentStatus } from '@takuhon/core';\n\nimport styles from './Patents.module.css';\n\nexport interface PatentsProps {\n patents: LocalizedPatent[];\n}\n\n// TODO(i18n-phase-2): Extract these labels into the locale resolver once Phase 2 i18n lands,\n// mirroring the PROFICIENCY_LABEL pattern in Languages.tsx.\nconst STATUS_LABEL: Record<PatentStatus, string> = {\n pending: 'Pending',\n issued: 'Issued',\n expired: 'Expired',\n abandoned: 'Abandoned',\n};\n\nfunction sortPatents(entries: LocalizedPatent[]): LocalizedPatent[] {\n return [...entries].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n const aDate = a.grantDate ?? a.filingDate ?? '';\n const bDate = b.grantDate ?? b.filingDate ?? '';\n return bDate.localeCompare(aDate);\n });\n}\n\nexport function Patents({ patents }: PatentsProps): React.JSX.Element | null {\n if (patents.length === 0) return null;\n const ordered = sortPatents(patents);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-patents-heading\">\n <h2 id=\"takuhon-patents-heading\" className={styles.heading}>\n Patents\n </h2>\n <ul className={styles.list}>\n {ordered.map((entry) => (\n <li key={entry.id} className={styles.item}>\n <p className={styles.title}>\n {entry.url ? (\n <a\n className={styles.link}\n href={entry.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.title}\n </a>\n ) : (\n entry.title\n )}\n <span className={styles.statusBadge} data-status={entry.status}>\n <span className={styles.srOnly}>Status: </span>\n {STATUS_LABEL[entry.status]}\n </span>\n </p>\n <p className={styles.patentNumber}>{entry.patentNumber}</p>\n {entry.office ? <p className={styles.office}>{entry.office}</p> : null}\n {entry.filingDate !== undefined || entry.grantDate !== undefined ? (\n <p className={styles.dates}>\n {entry.filingDate ? (\n <>\n {/* TODO(i18n-phase-2): Localize the 'Filed' label via the locale resolver. */}\n {'Filed '}\n <time dateTime={entry.filingDate}>{entry.filingDate}</time>\n </>\n ) : null}\n {entry.filingDate && entry.grantDate ? ' · ' : null}\n {entry.grantDate ? (\n <>\n {/* TODO(i18n-phase-2): Localize the 'Granted' label via the locale resolver. */}\n {'Granted '}\n <time dateTime={entry.grantDate}>{entry.grantDate}</time>\n </>\n ) : null}\n </p>\n ) : null}\n {entry.coInventors && entry.coInventors.length > 0 ? (\n <>\n {/* TODO(i18n-phase-2): Localize the 'with' prefix via the locale resolver. */}\n <p className={styles.coInventors}>{`with ${entry.coInventors.join(', ')}`}</p>\n </>\n ) : null}\n {entry.description ? <p className={styles.description}>{entry.description}</p> : null}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { LocalizedProfile } from '@takuhon/core';\n\nimport styles from './ProfileHeader.module.css';\n\nexport interface ProfileHeaderProps {\n profile: LocalizedProfile;\n}\n\nexport function ProfileHeader({ profile }: ProfileHeaderProps): React.JSX.Element {\n const locationLabel = profile.location?.display ?? profile.location?.locality;\n\n return (\n <header className={styles.header}>\n {profile.avatar ? (\n <img\n className={styles.avatar}\n src={profile.avatar.url}\n alt={profile.avatar.alt ?? ''}\n width={128}\n height={128}\n loading=\"eager\"\n decoding=\"async\"\n />\n ) : null}\n <h1 className={styles.displayName}>{profile.displayName}</h1>\n {profile.tagline ? <p className={styles.tagline}>{profile.tagline}</p> : null}\n {locationLabel ? <p className={styles.location}>{locationLabel}</p> : null}\n {profile.bio ? <p className={styles.bio}>{profile.bio}</p> : null}\n </header>\n );\n}\n","import type { LocalizedProject } from '@takuhon/core';\n\nimport styles from './ProjectsList.module.css';\n\nexport interface ProjectsListProps {\n projects: LocalizedProject[];\n}\n\nfunction sortProjects(projects: LocalizedProject[]): LocalizedProject[] {\n return [...projects].sort((a, b) => {\n const aHighlighted = a.highlighted ? 1 : 0;\n const bHighlighted = b.highlighted ? 1 : 0;\n if (aHighlighted !== bHighlighted) return bHighlighted - aHighlighted;\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n return aOrder - bOrder;\n });\n}\n\nexport function ProjectsList({ projects }: ProjectsListProps): React.JSX.Element | null {\n if (projects.length === 0) return null;\n const ordered = sortProjects(projects);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-projects-heading\">\n <h2 id=\"takuhon-projects-heading\" className={styles.heading}>\n Projects\n </h2>\n <ul className={styles.list}>\n {ordered.map((project) => (\n <li\n key={project.id}\n className={styles.item}\n data-highlighted={project.highlighted ? 'true' : undefined}\n >\n <p className={styles.title}>\n {project.url ? (\n <a\n className={styles.titleLink}\n href={project.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {project.title}\n </a>\n ) : (\n project.title\n )}\n </p>\n {project.startDate !== undefined ? (\n <p className={styles.range}>\n <time dateTime={project.startDate}>{project.startDate}</time>\n {' – '}\n {project.endDate ? (\n <time dateTime={project.endDate}>{project.endDate}</time>\n ) : (\n // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.\n 'Present'\n )}\n </p>\n ) : null}\n {project.description ? (\n <p className={styles.description}>{project.description}</p>\n ) : null}\n {project.tags && project.tags.length > 0 ? (\n <ul className={styles.tags} aria-label=\"Tags\">\n {project.tags.map((tag) => (\n <li key={tag} className={styles.tag}>\n {tag}\n </li>\n ))}\n </ul>\n ) : null}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { LocalizedPublication } from '@takuhon/core';\n\nimport styles from './Publications.module.css';\n\nexport interface PublicationsProps {\n publications: LocalizedPublication[];\n}\n\nfunction sortPublications(entries: LocalizedPublication[]): LocalizedPublication[] {\n return [...entries].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.date.localeCompare(a.date);\n });\n}\n\n// Strip an optional doi.org URL prefix so the rendered href is always\n// `https://doi.org/<bare-identifier>`. Defensive against fixtures that\n// inadvertently store a full URL instead of the bare DOI per spec §6.15.\nfunction normalizeDoi(doi: string): string {\n return doi.replace(/^https?:\\/\\/(?:dx\\.)?doi\\.org\\//i, '');\n}\n\nexport function Publications({ publications }: PublicationsProps): React.JSX.Element | null {\n if (publications.length === 0) return null;\n const ordered = sortPublications(publications);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-publications-heading\">\n <h2 id=\"takuhon-publications-heading\" className={styles.heading}>\n Publications\n </h2>\n <ul className={styles.list}>\n {ordered.map((entry) => (\n <li key={entry.id} className={styles.item}>\n <p className={styles.title}>\n {entry.url ? (\n <a\n className={styles.link}\n href={entry.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.title}\n </a>\n ) : (\n entry.title\n )}\n </p>\n {entry.publisher ? <p className={styles.publisher}>{entry.publisher}</p> : null}\n <p className={styles.date}>\n <time dateTime={entry.date}>{entry.date}</time>\n </p>\n {entry.coAuthors && entry.coAuthors.length > 0 ? (\n <>\n {/* TODO(i18n-phase-2): Localize the 'with' prefix via the locale resolver. */}\n <p className={styles.coAuthors}>{`with ${entry.coAuthors.join(', ')}`}</p>\n </>\n ) : null}\n {entry.doi\n ? (() => {\n const bare = normalizeDoi(entry.doi);\n return (\n <p className={styles.doi}>\n <a\n className={styles.link}\n href={`https://doi.org/${bare}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {`doi:${bare}`}\n </a>\n </p>\n );\n })()\n : null}\n {entry.description ? <p className={styles.description}>{entry.description}</p> : null}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { LocalizedRecommendation } from '@takuhon/core';\n\nimport styles from './Recommendations.module.css';\n\nexport interface RecommendationsProps {\n recommendations: LocalizedRecommendation[];\n}\n\nfunction sortRecommendations(entries: LocalizedRecommendation[]): LocalizedRecommendation[] {\n return [...entries].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return (b.date ?? '').localeCompare(a.date ?? '');\n });\n}\n\nexport function Recommendations({\n recommendations,\n}: RecommendationsProps): React.JSX.Element | null {\n if (recommendations.length === 0) return null;\n const ordered = sortRecommendations(recommendations);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-recommendations-heading\">\n <h2 id=\"takuhon-recommendations-heading\" className={styles.heading}>\n Recommendations\n </h2>\n <ul className={styles.list}>\n {ordered.map((entry) => (\n <li key={entry.id} className={styles.item}>\n <blockquote className={styles.body}>\n <p className={styles.quote}>{entry.body}</p>\n </blockquote>\n <p className={styles.attribution}>\n <span className={styles.author}>\n {entry.author.url ? (\n <a\n className={styles.link}\n href={entry.author.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.author.name}\n </a>\n ) : (\n entry.author.name\n )}\n </span>\n {entry.author.headline ? (\n <span className={styles.headline}>{entry.author.headline}</span>\n ) : null}\n </p>\n {entry.relationship ? <p className={styles.meta}>{entry.relationship}</p> : null}\n {entry.date ? (\n <p className={styles.meta}>\n <time dateTime={entry.date}>{entry.date}</time>\n </p>\n ) : null}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { Skill } from '@takuhon/core';\n\nimport styles from './SkillsList.module.css';\n\nexport interface SkillsListProps {\n skills: Skill[];\n}\n\ninterface SkillGroup {\n category: string;\n skills: Skill[];\n}\n\nfunction groupSkills(skills: Skill[]): SkillGroup[] {\n const sorted = [...skills].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n return aOrder - bOrder;\n });\n const groups = new Map<string, Skill[]>();\n for (const skill of sorted) {\n const key = skill.category ?? 'other';\n const bucket = groups.get(key);\n if (bucket) {\n bucket.push(skill);\n } else {\n groups.set(key, [skill]);\n }\n }\n return [...groups.entries()].map(([category, items]) => ({ category, skills: items }));\n}\n\nexport function SkillsList({ skills }: SkillsListProps): React.JSX.Element | null {\n if (skills.length === 0) return null;\n const groups = groupSkills(skills);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-skills-heading\">\n <h2 id=\"takuhon-skills-heading\" className={styles.heading}>\n Skills\n </h2>\n <div className={styles.groups}>\n {groups.map((group) => (\n <div key={group.category} className={styles.group}>\n <h3 className={styles.category}>{group.category}</h3>\n <ul className={styles.list} aria-label={`${group.category} skills`}>\n {group.skills.map((skill) => (\n <li key={skill.id} className={styles.item}>\n {skill.label}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </section>\n );\n}\n","import type { LocalizedTestScore } from '@takuhon/core';\n\nimport styles from './TestScores.module.css';\n\nexport interface TestScoresProps {\n testScores: LocalizedTestScore[];\n}\n\nfunction sortTestScores(entries: LocalizedTestScore[]): LocalizedTestScore[] {\n return [...entries].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.date.localeCompare(a.date);\n });\n}\n\nexport function TestScores({ testScores }: TestScoresProps): React.JSX.Element | null {\n if (testScores.length === 0) return null;\n const ordered = sortTestScores(testScores);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-test-scores-heading\">\n <h2 id=\"takuhon-test-scores-heading\" className={styles.heading}>\n Test Scores\n </h2>\n <ul className={styles.list}>\n {ordered.map((entry) => (\n <li key={entry.id} className={styles.item}>\n <p className={styles.title}>\n {entry.url ? (\n <a\n className={styles.link}\n href={entry.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.title}\n </a>\n ) : (\n entry.title\n )}\n </p>\n <p className={styles.meta}>\n <span className={styles.score}>{entry.score}</span>\n {' · '}\n <time dateTime={entry.date}>{entry.date}</time>\n </p>\n {entry.description ? <p className={styles.description}>{entry.description}</p> : null}\n </li>\n ))}\n </ul>\n </section>\n );\n}\n","import type { LocalizedVolunteering } from '@takuhon/core';\n\nimport styles from './Volunteering.module.css';\n\nexport interface VolunteeringProps {\n volunteering: LocalizedVolunteering[];\n}\n\nfunction sortVolunteering(entries: LocalizedVolunteering[]): LocalizedVolunteering[] {\n return [...entries].sort((a, b) => {\n const aOrder = a.order ?? Number.POSITIVE_INFINITY;\n const bOrder = b.order ?? Number.POSITIVE_INFINITY;\n if (aOrder !== bOrder) return aOrder - bOrder;\n return b.startDate.localeCompare(a.startDate);\n });\n}\n\nfunction isOngoing(entry: LocalizedVolunteering): boolean {\n return entry.isCurrent === true || entry.endDate === null || entry.endDate === undefined;\n}\n\nexport function Volunteering({ volunteering }: VolunteeringProps): React.JSX.Element | null {\n if (volunteering.length === 0) return null;\n const ordered = sortVolunteering(volunteering);\n\n return (\n <section className={styles.section} aria-labelledby=\"takuhon-volunteering-heading\">\n <h2 id=\"takuhon-volunteering-heading\" className={styles.heading}>\n Volunteering\n </h2>\n <ol className={styles.list}>\n {ordered.map((entry) => (\n <li key={entry.id} className={styles.item}>\n <div className={styles.timelineMarker} aria-hidden=\"true\" />\n <div className={styles.content}>\n <p className={styles.organization}>\n {entry.url ? (\n <a\n className={styles.link}\n href={entry.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.organization}\n </a>\n ) : (\n entry.organization\n )}\n </p>\n <p className={styles.role}>\n {entry.role}\n {entry.cause ? (\n <span className={styles.cause}>\n <span className={styles.srOnly}>Cause: </span>\n {entry.cause}\n </span>\n ) : null}\n </p>\n <p className={styles.range}>\n <time dateTime={entry.startDate}>{entry.startDate}</time>\n {' – '}\n {isOngoing(entry) ? (\n // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.\n 'Present'\n ) : (\n <time dateTime={entry.endDate!}>{entry.endDate}</time>\n )}\n </p>\n {entry.description ? <p className={styles.description}>{entry.description}</p> : null}\n </div>\n </li>\n ))}\n </ol>\n </section>\n );\n}\n","import type { LocaleTag } from '@takuhon/core';\n\nimport styles from './LocaleSwitcher.module.css';\n\nexport interface LocaleSwitcherProps {\n availableLocales: LocaleTag[];\n currentLocale: LocaleTag;\n onSelect: (locale: LocaleTag) => void;\n ariaLabel?: string;\n formatLocale?: (locale: LocaleTag) => string;\n}\n\nconst DEFAULT_ARIA_LABEL = 'Select language';\n\nexport function LocaleSwitcher({\n availableLocales,\n currentLocale,\n onSelect,\n ariaLabel,\n formatLocale,\n}: LocaleSwitcherProps): React.JSX.Element {\n const label = ariaLabel ?? DEFAULT_ARIA_LABEL;\n const format = formatLocale ?? ((locale: LocaleTag) => locale);\n return (\n <div className={styles.wrapper}>\n <select\n className={styles.select}\n aria-label={label}\n value={currentLocale}\n onChange={(event) => {\n onSelect(event.target.value);\n }}\n >\n {availableLocales.map((locale) => (\n <option key={locale} value={locale}>\n {format(locale)}\n </option>\n ))}\n </select>\n </div>\n );\n}\n","import { generateJsonLd, type LocalizedTakuhon } from '@takuhon/core';\nimport { useEffect } from 'react';\n\nexport interface TakuhonHeadProps {\n data: LocalizedTakuhon;\n siteUrl?: string;\n pageUrl?: string;\n}\n\nfunction primarySubtag(tag: string): string {\n const dash = tag.indexOf('-');\n return (dash === -1 ? tag : tag.slice(0, dash)).toLowerCase();\n}\n\n/**\n * Whether a leading path segment should be treated as a locale prefix.\n * Mirrors the server resolver's `matchAvailable` so the two surfaces agree:\n * an exact (case-insensitive) match, or a primary-subtag match so a\n * regional segment like `en-US` is recognized against an available `en`.\n */\nfunction isLocaleSegment(segment: string, availableLocales: readonly string[]): boolean {\n const lower = segment.toLowerCase();\n const primary = primarySubtag(segment);\n return availableLocales.some(\n (loc) => loc.toLowerCase() === lower || primarySubtag(loc) === primary,\n );\n}\n\n/**\n * Remove a leading `/{locale}` path segment (when it is recognizable as a\n * locale per {@link isLocaleSegment}) and any legacy `?lang=` query,\n * yielding a locale-neutral base URL. This prevents stacking (`/ja/en/...`,\n * `/en/en-US/...`) when the current page is already locale-prefixed: the\n * existing segment is stripped before {@link withLocalePrefix} re-adds the\n * target locale.\n */\nfunction localeNeutralUrl(pageUrl: string, availableLocales: readonly string[]): string {\n try {\n const url = new URL(pageUrl);\n url.searchParams.delete('lang');\n const segments = url.pathname.split('/');\n const first = segments[1];\n if (first !== undefined && first !== '' && isLocaleSegment(first, availableLocales)) {\n segments.splice(1, 1);\n url.pathname = segments.join('/') || '/';\n }\n return url.toString();\n } catch {\n return pageUrl;\n }\n}\n\n/**\n * Prepend a `/{locale}` path segment to a locale-neutral URL, producing\n * the canonical path form (`https://site/profile` → `https://site/ja/profile`,\n * `https://site/` → `https://site/ja/`). The path form is the advertised\n * URL; `?lang=` remains a resolution input but is never emitted here.\n *\n * This is deployment-agnostic: it inserts a locale segment into whatever\n * page URL `TakuhonHead` is given, regardless of how that page is routed.\n * The built-in `@takuhon/api` public app resolves the path prefix for its\n * own surfaces (`/`, `/api/profile`, `/api/jsonld`); the canonical\n * deployment serves the rendered profile at the site root, so its `/ja/`\n * form resolves out of the box. A deployment that serves the HTML profile\n * at another path is responsible for routing that locale-prefixed page.\n */\nfunction withLocalePrefix(neutralUrl: string, locale: string): string {\n try {\n const url = new URL(neutralUrl);\n url.pathname = url.pathname === '/' ? `/${locale}/` : `/${locale}${url.pathname}`;\n return url.toString();\n } catch {\n return neutralUrl;\n }\n}\n\nfunction absolutizeUrl(url: string | undefined, base: string | undefined): string | undefined {\n if (!url) return undefined;\n if (!base) return url;\n try {\n return new URL(url, base).toString();\n } catch {\n return url;\n }\n}\n\nfunction detectSiteUrl(explicit: string | undefined): string | undefined {\n if (explicit) return explicit;\n if (typeof window !== 'undefined') return window.location.origin;\n return undefined;\n}\n\nfunction detectPageUrl(\n explicit: string | undefined,\n siteUrl: string | undefined,\n): string | undefined {\n if (explicit) return explicit;\n if (typeof window !== 'undefined') {\n return window.location.origin + window.location.pathname;\n }\n return siteUrl;\n}\n\nexport function TakuhonHead({ data, siteUrl, pageUrl }: TakuhonHeadProps): React.JSX.Element {\n const resolvedSiteUrl = detectSiteUrl(siteUrl);\n const resolvedPageUrl = detectPageUrl(pageUrl, resolvedSiteUrl);\n\n const { profile, settings, resolvedLocale } = data;\n const description = profile.bio ?? profile.tagline;\n const ogDescription = profile.tagline ?? profile.bio;\n const ogImage = absolutizeUrl(profile.avatar?.url, resolvedSiteUrl);\n const twitterCard = profile.avatar ? 'summary_large_image' : 'summary';\n\n // Locale-neutral base, so canonical/alternates emit one clean path form\n // per locale (`/ja/...`) and never stack when the current page is\n // already locale-prefixed.\n const neutralPageUrl = resolvedPageUrl\n ? localeNeutralUrl(resolvedPageUrl, settings.availableLocales)\n : undefined;\n\n const canonical = neutralPageUrl ? withLocalePrefix(neutralPageUrl, resolvedLocale) : undefined;\n const alternates = neutralPageUrl\n ? settings.availableLocales.map((loc) => ({\n locale: loc,\n href: withLocalePrefix(neutralPageUrl, loc),\n }))\n : [];\n const xDefaultHref = neutralPageUrl\n ? withLocalePrefix(neutralPageUrl, settings.defaultLocale)\n : undefined;\n\n const ogAlternates = settings.availableLocales.filter((loc) => loc !== resolvedLocale);\n\n const emitJsonLd = settings.enableJsonLd !== false;\n const jsonLdPayload = emitJsonLd ? JSON.stringify(generateJsonLd(data)) : null;\n\n useEffect(() => {\n if (!jsonLdPayload) return;\n const script = document.createElement('script');\n script.type = 'application/ld+json';\n script.textContent = jsonLdPayload;\n document.head.appendChild(script);\n return () => {\n script.remove();\n };\n }, [jsonLdPayload]);\n\n return (\n <>\n <title>{profile.displayName}</title>\n {description ? <meta name=\"description\" content={description} /> : null}\n {canonical ? <link rel=\"canonical\" href={canonical} /> : null}\n\n <meta property=\"og:title\" content={profile.displayName} />\n {ogDescription ? <meta property=\"og:description\" content={ogDescription} /> : null}\n {canonical ? <meta property=\"og:url\" content={canonical} /> : null}\n {ogImage ? <meta property=\"og:image\" content={ogImage} /> : null}\n <meta property=\"og:type\" content=\"profile\" />\n <meta property=\"og:locale\" content={resolvedLocale} />\n {ogAlternates.map((loc) => (\n <meta key={loc} property=\"og:locale:alternate\" content={loc} />\n ))}\n\n <meta name=\"twitter:card\" content={twitterCard} />\n\n {alternates.map(({ locale, href }) => (\n <link key={locale} rel=\"alternate\" hrefLang={locale} href={href} />\n ))}\n {xDefaultHref ? <link rel=\"alternate\" hrefLang=\"x-default\" href={xDefaultHref} /> : null}\n </>\n );\n}\n"],"mappings":"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","names":["styles","Fragment","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","isOngoing","styles","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","isOngoing","styles","Fragment","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","styles","Fragment","jsx","jsxs","styles","jsx","jsxs","styles","jsx","jsxs","styles","styles","jsx","jsxs","styles","jsx","jsxs","isOngoing","jsx","jsxs","styles","styles","jsx","Fragment","jsx","jsxs"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@takuhon/ui",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "React mobile-first profile UI and minimal admin editor components for takuhon",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Takuhon contributors",
@@ -43,7 +43,7 @@
43
43
  "node": ">=22.0.0"
44
44
  },
45
45
  "dependencies": {
46
- "@takuhon/core": "0.4.0"
46
+ "@takuhon/core": "0.5.0"
47
47
  },
48
48
  "peerDependencies": {
49
49
  "react": ">=19",