@takuhon/ui 0.3.0 → 0.4.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.
package/dist/index.js CHANGED
@@ -44,7 +44,10 @@ function CareerTimeline({ careers }) {
44
44
  /* @__PURE__ */ jsxs("p", { className: styles.range, children: [
45
45
  /* @__PURE__ */ jsx("time", { dateTime: career.startDate, children: career.startDate }),
46
46
  " \u2013 ",
47
- isOngoing(career) ? "Present" : /* @__PURE__ */ jsx("time", { dateTime: career.endDate, children: career.endDate })
47
+ isOngoing(career) ? (
48
+ // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.
49
+ "Present"
50
+ ) : /* @__PURE__ */ jsx("time", { dateTime: career.endDate, children: career.endDate })
48
51
  ] }),
49
52
  career.location?.display ? /* @__PURE__ */ jsx("p", { className: styles.location, children: career.location.display }) : null,
50
53
  career.description ? /* @__PURE__ */ jsx("p", { className: styles.description, children: career.description }) : null
@@ -83,7 +86,10 @@ function Certifications({ certifications }) {
83
86
  /* @__PURE__ */ jsx2("p", { className: styles2.issuer, children: cert.issuingOrganization }),
84
87
  /* @__PURE__ */ jsxs2("p", { className: styles2.range, children: [
85
88
  /* @__PURE__ */ jsx2("time", { dateTime: cert.issueDate, children: cert.issueDate }),
86
- cert.expirationDate === null ? /* @__PURE__ */ jsx2("span", { className: styles2.tag, children: " \xB7 No expiration" }) : cert.expirationDate !== void 0 ? /* @__PURE__ */ jsxs2(Fragment2, { children: [
89
+ cert.expirationDate === null ? (
90
+ // TODO(i18n-phase-2): Localize the 'No expiration' label via the locale resolver.
91
+ /* @__PURE__ */ jsx2("span", { className: styles2.tag, children: " \xB7 No expiration" })
92
+ ) : cert.expirationDate !== void 0 ? /* @__PURE__ */ jsxs2(Fragment2, { children: [
87
93
  " \u2013 ",
88
94
  /* @__PURE__ */ jsx2("time", { dateTime: cert.expirationDate, children: cert.expirationDate })
89
95
  ] }) : null
@@ -195,7 +201,10 @@ function EducationTimeline({ education }) {
195
201
  /* @__PURE__ */ jsxs5("p", { className: styles5.range, children: [
196
202
  /* @__PURE__ */ jsx5("time", { dateTime: entry.startDate, children: entry.startDate }),
197
203
  " \u2013 ",
198
- isOngoing2(entry) ? "Present" : /* @__PURE__ */ jsx5("time", { dateTime: entry.endDate, children: entry.endDate })
204
+ isOngoing2(entry) ? (
205
+ // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.
206
+ "Present"
207
+ ) : /* @__PURE__ */ jsx5("time", { dateTime: entry.endDate, children: entry.endDate })
199
208
  ] }),
200
209
  entry.grade ? /* @__PURE__ */ jsx5("p", { className: styles5.grade, children: entry.grade }) : null,
201
210
  entry.description ? /* @__PURE__ */ jsx5("p", { className: styles5.description, children: entry.description }) : null
@@ -364,7 +373,10 @@ function Memberships({ memberships }) {
364
373
  /* @__PURE__ */ jsxs10("p", { className: styles10.range, children: [
365
374
  /* @__PURE__ */ jsx10("time", { dateTime: entry.startDate, children: entry.startDate }),
366
375
  " \u2013 ",
367
- isOngoing3(entry) ? "Present" : /* @__PURE__ */ jsx10("time", { dateTime: entry.endDate, children: entry.endDate })
376
+ isOngoing3(entry) ? (
377
+ // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.
378
+ "Present"
379
+ ) : /* @__PURE__ */ jsx10("time", { dateTime: entry.endDate, children: entry.endDate })
368
380
  ] }),
369
381
  entry.description ? /* @__PURE__ */ jsx10("p", { className: styles10.description, children: entry.description }) : null
370
382
  ] })
@@ -426,7 +438,7 @@ function Patents({ patents }) {
426
438
  /* @__PURE__ */ jsx11("time", { dateTime: entry.grantDate, children: entry.grantDate })
427
439
  ] }) : null
428
440
  ] }) : null,
429
- entry.coInventors && entry.coInventors.length > 0 ? /* @__PURE__ */ jsx11("p", { className: styles11.coInventors, children: `with ${entry.coInventors.join(", ")}` }) : null,
441
+ entry.coInventors && entry.coInventors.length > 0 ? /* @__PURE__ */ jsx11(Fragment3, { children: /* @__PURE__ */ jsx11("p", { className: styles11.coInventors, children: `with ${entry.coInventors.join(", ")}` }) }) : null,
430
442
  entry.description ? /* @__PURE__ */ jsx11("p", { className: styles11.description, children: entry.description }) : null
431
443
  ] }, entry.id)) })
432
444
  ] });
@@ -494,7 +506,10 @@ function ProjectsList({ projects }) {
494
506
  project.startDate !== void 0 ? /* @__PURE__ */ jsxs13("p", { className: styles13.range, children: [
495
507
  /* @__PURE__ */ jsx13("time", { dateTime: project.startDate, children: project.startDate }),
496
508
  " \u2013 ",
497
- project.endDate ? /* @__PURE__ */ jsx13("time", { dateTime: project.endDate, children: project.endDate }) : "Present"
509
+ project.endDate ? /* @__PURE__ */ jsx13("time", { dateTime: project.endDate, children: project.endDate }) : (
510
+ // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.
511
+ "Present"
512
+ )
498
513
  ] }) : null,
499
514
  project.description ? /* @__PURE__ */ jsx13("p", { className: styles13.description, children: project.description }) : null,
500
515
  project.tags && project.tags.length > 0 ? /* @__PURE__ */ jsx13("ul", { className: styles13.tags, "aria-label": "Tags", children: project.tags.map((tag) => /* @__PURE__ */ jsx13("li", { className: styles13.tag, children: tag }, tag)) }) : null
@@ -634,7 +649,10 @@ function Volunteering({ volunteering }) {
634
649
  /* @__PURE__ */ jsxs16("p", { className: styles16.range, children: [
635
650
  /* @__PURE__ */ jsx16("time", { dateTime: entry.startDate, children: entry.startDate }),
636
651
  " \u2013 ",
637
- isOngoing4(entry) ? "Present" : /* @__PURE__ */ jsx16("time", { dateTime: entry.endDate, children: entry.endDate })
652
+ isOngoing4(entry) ? (
653
+ // TODO(i18n-phase-2): Localize the 'Present' label via the locale resolver.
654
+ "Present"
655
+ ) : /* @__PURE__ */ jsx16("time", { dateTime: entry.endDate, children: entry.endDate })
638
656
  ] }),
639
657
  entry.description ? /* @__PURE__ */ jsx16("p", { className: styles16.description, children: entry.description }) : null
640
658
  ] })
@@ -697,22 +715,39 @@ function LocaleSwitcher({
697
715
  import { generateJsonLd } from "@takuhon/core";
698
716
  import { useEffect } from "react";
699
717
  import { Fragment as Fragment4, jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
700
- function buildLocaleUrl(pageUrl, locale) {
718
+ function primarySubtag(tag) {
719
+ const dash = tag.indexOf("-");
720
+ return (dash === -1 ? tag : tag.slice(0, dash)).toLowerCase();
721
+ }
722
+ function isLocaleSegment(segment, availableLocales) {
723
+ const lower = segment.toLowerCase();
724
+ const primary = primarySubtag(segment);
725
+ return availableLocales.some(
726
+ (loc) => loc.toLowerCase() === lower || primarySubtag(loc) === primary
727
+ );
728
+ }
729
+ function localeNeutralUrl(pageUrl, availableLocales) {
701
730
  try {
702
731
  const url = new URL(pageUrl);
703
- url.searchParams.set("lang", locale);
732
+ url.searchParams.delete("lang");
733
+ const segments = url.pathname.split("/");
734
+ const first = segments[1];
735
+ if (first !== void 0 && first !== "" && isLocaleSegment(first, availableLocales)) {
736
+ segments.splice(1, 1);
737
+ url.pathname = segments.join("/") || "/";
738
+ }
704
739
  return url.toString();
705
740
  } catch {
706
741
  return pageUrl;
707
742
  }
708
743
  }
709
- function stripLangParam(pageUrl) {
744
+ function withLocalePrefix(neutralUrl, locale) {
710
745
  try {
711
- const url = new URL(pageUrl);
712
- url.searchParams.delete("lang");
746
+ const url = new URL(neutralUrl);
747
+ url.pathname = url.pathname === "/" ? `/${locale}/` : `/${locale}${url.pathname}`;
713
748
  return url.toString();
714
749
  } catch {
715
- return pageUrl;
750
+ return neutralUrl;
716
751
  }
717
752
  }
718
753
  function absolutizeUrl(url, base) {
@@ -730,7 +765,7 @@ function detectSiteUrl(explicit) {
730
765
  return void 0;
731
766
  }
732
767
  function detectPageUrl(explicit, siteUrl) {
733
- if (explicit) return stripLangParam(explicit);
768
+ if (explicit) return explicit;
734
769
  if (typeof window !== "undefined") {
735
770
  return window.location.origin + window.location.pathname;
736
771
  }
@@ -744,12 +779,13 @@ function TakuhonHead({ data, siteUrl, pageUrl }) {
744
779
  const ogDescription = profile.tagline ?? profile.bio;
745
780
  const ogImage = absolutizeUrl(profile.avatar?.url, resolvedSiteUrl);
746
781
  const twitterCard = profile.avatar ? "summary_large_image" : "summary";
747
- const canonical = resolvedPageUrl ? buildLocaleUrl(resolvedPageUrl, resolvedLocale) : void 0;
748
- const alternates = resolvedPageUrl ? settings.availableLocales.map((loc) => ({
782
+ const neutralPageUrl = resolvedPageUrl ? localeNeutralUrl(resolvedPageUrl, settings.availableLocales) : void 0;
783
+ const canonical = neutralPageUrl ? withLocalePrefix(neutralPageUrl, resolvedLocale) : void 0;
784
+ const alternates = neutralPageUrl ? settings.availableLocales.map((loc) => ({
749
785
  locale: loc,
750
- href: buildLocaleUrl(resolvedPageUrl, loc)
786
+ href: withLocalePrefix(neutralPageUrl, loc)
751
787
  })) : [];
752
- const xDefaultHref = resolvedPageUrl ? buildLocaleUrl(resolvedPageUrl, settings.defaultLocale) : void 0;
788
+ const xDefaultHref = neutralPageUrl ? withLocalePrefix(neutralPageUrl, settings.defaultLocale) : void 0;
753
789
  const ogAlternates = settings.availableLocales.filter((loc) => loc !== resolvedLocale);
754
790
  const emitJsonLd = settings.enableJsonLd !== false;
755
791
  const jsonLdPayload = emitJsonLd ? JSON.stringify(generateJsonLd(data)) : null;
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 '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 <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 '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 '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 {'Filed '}\n <time dateTime={entry.filingDate}>{entry.filingDate}</time>\n </>\n ) : null}\n {entry.filingDate && entry.grantDate ? ' · ' : null}\n {entry.grantDate ? (\n <>\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 <p className={styles.coInventors}>{`with ${entry.coInventors.join(', ')}`}</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 { 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 '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 '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 buildLocaleUrl(pageUrl: string, locale: string): string {\n try {\n const url = new URL(pageUrl);\n url.searchParams.set('lang', locale);\n return url.toString();\n } catch {\n return pageUrl;\n }\n}\n\nfunction stripLangParam(pageUrl: string): string {\n try {\n const url = new URL(pageUrl);\n url.searchParams.delete('lang');\n return url.toString();\n } catch {\n return pageUrl;\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 stripLangParam(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 const canonical = resolvedPageUrl ? buildLocaleUrl(resolvedPageUrl, resolvedLocale) : undefined;\n const alternates = resolvedPageUrl\n ? settings.availableLocales.map((loc) => ({\n locale: loc,\n href: buildLocaleUrl(resolvedPageUrl, loc),\n }))\n : [];\n const xDefaultHref = resolvedPageUrl\n ? buildLocaleUrl(resolvedPageUrl, 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/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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@takuhon/ui",
3
- "version": "0.3.0",
3
+ "version": "0.4.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.3.0"
46
+ "@takuhon/core": "0.4.0"
47
47
  },
48
48
  "peerDependencies": {
49
49
  "react": ">=19",