@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 +54 -18
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
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) ?
|
|
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 ?
|
|
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) ?
|
|
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) ?
|
|
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 }) :
|
|
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) ?
|
|
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
|
|
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.
|
|
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
|
|
744
|
+
function withLocalePrefix(neutralUrl, locale) {
|
|
710
745
|
try {
|
|
711
|
-
const url = new URL(
|
|
712
|
-
url.
|
|
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
|
|
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
|
|
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
|
|
748
|
-
const
|
|
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:
|
|
786
|
+
href: withLocalePrefix(neutralPageUrl, loc)
|
|
751
787
|
})) : [];
|
|
752
|
-
const xDefaultHref =
|
|
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 & 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":";AAEA,OAAO;;;ACAP,OAAO,YAAY;AAyBb,SAmBY,UAnBZ,KAUY,YAVZ;AAnBN,SAAS,YAAY,SAA+C;AAClE,SAAO,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,QAAI,WAAW,OAAQ,QAAO,SAAS;AACvC,WAAO,EAAE,UAAU,cAAc,EAAE,SAAS;AAAA,EAC9C,CAAC;AACH;AAEA,SAAS,UAAU,QAAkC;AACnD,SAAO,OAAO,cAAc,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY;AACpF;AAEO,SAAS,eAAe,EAAE,QAAQ,GAAkD;AACzF,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,QAAM,UAAU,YAAY,OAAO;AAEnC,SACE,qBAAC,aAAQ,WAAW,OAAO,SAAS,mBAAgB,0BAClD;AAAA,wBAAC,QAAG,IAAG,0BAAyB,WAAW,OAAO,SAAS,oBAE3D;AAAA,IACA,oBAAC,QAAG,WAAW,OAAO,MACnB,kBAAQ,IAAI,CAAC,WACZ,qBAAC,QAAmB,WAAW,OAAO,MACpC;AAAA,0BAAC,SAAI,WAAW,OAAO,gBAAgB,eAAY,QAAO;AAAA,MAC1D,qBAAC,SAAI,WAAW,OAAO,SACrB;AAAA,4BAAC,OAAE,WAAW,OAAO,MAClB,iBAAO,MACN;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,OAAO;AAAA,YAClB,MAAM,OAAO;AAAA,YACb,QAAO;AAAA,YACP,KAAI;AAAA,YAEH;AAAA,qBAAO;AAAA,cAAK;AAAA,cAAI,OAAO;AAAA;AAAA;AAAA,QAC1B,IAEA,iCACG;AAAA,iBAAO;AAAA,UAAK;AAAA,UAAI,OAAO;AAAA,WAC1B,GAEJ;AAAA,QACA,qBAAC,OAAE,WAAW,OAAO,OACnB;AAAA,8BAAC,UAAK,UAAU,OAAO,WAAY,iBAAO,WAAU;AAAA,UACnD;AAAA,UACA,UAAU,MAAM,IACf,YAEA,oBAAC,UAAK,UAAU,OAAO,SAAW,iBAAO,SAAQ;AAAA,WAErD;AAAA,QACC,OAAO,UAAU,UAChB,oBAAC,OAAE,WAAW,OAAO,UAAW,iBAAO,SAAS,SAAQ,IACtD;AAAA,QACH,OAAO,cACN,oBAAC,OAAE,WAAW,OAAO,aAAc,iBAAO,aAAY,IACpD;AAAA,SACN;AAAA,SAlCO,OAAO,EAmChB,CACD,GACH;AAAA,KACF;AAEJ;;;ACtEA,OAAOA,aAAY;AAqBb,SA0BU,YAAAC,WA1BV,OAAAC,MA0BU,QAAAC,aA1BV;AAfN,SAAS,UAAU,OAA2D;AAC5E,SAAO,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM;AAC/B,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,QAAI,WAAW,OAAQ,QAAO,SAAS;AACvC,WAAO,EAAE,UAAU,cAAc,EAAE,SAAS;AAAA,EAC9C,CAAC;AACH;AAEO,SAAS,eAAe,EAAE,eAAe,GAAkD;AAChG,MAAI,eAAe,WAAW,EAAG,QAAO;AACxC,QAAM,UAAU,UAAU,cAAc;AAExC,SACE,gBAAAA,MAAC,aAAQ,WAAWH,QAAO,SAAS,mBAAgB,kCAClD;AAAA,oBAAAE,KAAC,QAAG,IAAG,kCAAiC,WAAWF,QAAO,SAAS,4BAEnE;AAAA,IACA,gBAAAE,KAAC,QAAG,WAAWF,QAAO,MACnB,kBAAQ,IAAI,CAAC,SACZ,gBAAAG,MAAC,QAAiB,WAAWH,QAAO,MAClC;AAAA,sBAAAE,KAAC,OAAE,WAAWF,QAAO,OAClB,eAAK,MACJ,gBAAAE;AAAA,QAAC;AAAA;AAAA,UACC,WAAWF,QAAO;AAAA,UAClB,MAAM,KAAK;AAAA,UACX,QAAO;AAAA,UACP,KAAI;AAAA,UAEH,eAAK;AAAA;AAAA,MACR,IAEA,KAAK,OAET;AAAA,MACA,gBAAAE,KAAC,OAAE,WAAWF,QAAO,QAAS,eAAK,qBAAoB;AAAA,MACvD,gBAAAG,MAAC,OAAE,WAAWH,QAAO,OACnB;AAAA,wBAAAE,KAAC,UAAK,UAAU,KAAK,WAAY,eAAK,WAAU;AAAA,QAC/C,KAAK,mBAAmB,OACvB,gBAAAA,KAAC,UAAK,WAAWF,QAAO,KAAK,iCAAgB,IAC3C,KAAK,mBAAmB,SAC1B,gBAAAG,MAAAF,WAAA,EACG;AAAA;AAAA,UACD,gBAAAC,KAAC,UAAK,UAAU,KAAK,gBAAiB,eAAK,gBAAe;AAAA,WAC5D,IACE;AAAA,SACN;AAAA,SA1BO,KAAK,EA8Bd,CACD,GACH;AAAA,KACF;AAEJ;;;AC7DA,OAAOE,aAAY;AAYb,gBAAAC,MAGA,QAAAC,aAHA;AANC,SAAS,YAAY,EAAE,QAAQ,GAA+C;AACnF,QAAM,YAAY,QAAQ,cAAc,QAAQ,QAAQ,UAAU;AAClE,MAAI,CAAC,aAAa,QAAQ,YAAY,OAAW,QAAO;AAExD,SACE,gBAAAA,MAAC,aAAQ,WAAWF,QAAO,SAAS,mBAAgB,2BAClD;AAAA,oBAAAC,KAAC,QAAG,IAAG,2BAA0B,WAAWD,QAAO,SAAS,qBAE5D;AAAA,IACA,gBAAAE,MAAC,QAAG,WAAWF,QAAO,MACnB;AAAA,mBAAa,QAAQ,UAAU,SAC9B,gBAAAC,KAAC,QAAG,WAAWD,QAAO,MACpB,0BAAAC,KAAC,OAAE,WAAWD,QAAO,MAAM,MAAM,UAAU,QAAQ,KAAK,IACrD,kBAAQ,OACX,GACF,IACE;AAAA,MACH,QAAQ,YAAY,SACnB,gBAAAC,KAAC,QAAG,WAAWD,QAAO,MACpB,0BAAAC;AAAA,QAAC;AAAA;AAAA,UACC,WAAWD,QAAO;AAAA,UAClB,MAAM,QAAQ;AAAA,UACd,QAAO;AAAA,UACP,KAAI;AAAA,UACL;AAAA;AAAA,MAED,GACF,IACE;AAAA,OACN;AAAA,KACF;AAEJ;;;ACtCA,OAAOG,aAAY;AAqBb,gBAAAC,MAKI,QAAAC,aALJ;AAfN,SAAS,YAAY,SAA+C;AAClE,SAAO,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,QAAI,WAAW,OAAQ,QAAO,SAAS;AACvC,YAAQ,EAAE,kBAAkB,IAAI,cAAc,EAAE,kBAAkB,EAAE;AAAA,EACtE,CAAC;AACH;AAEO,SAAS,QAAQ,EAAE,QAAQ,GAA2C;AAC3E,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,QAAM,UAAU,YAAY,OAAO;AAEnC,SACE,gBAAAA,MAAC,aAAQ,WAAWF,QAAO,SAAS,mBAAgB,2BAClD;AAAA,oBAAAC,KAAC,QAAG,IAAG,2BAA0B,WAAWD,QAAO,SAAS,qBAE5D;AAAA,IACA,gBAAAC,KAAC,QAAG,WAAWD,QAAO,MACnB,kBAAQ,IAAI,CAAC,UACZ,gBAAAE,MAAC,QAAkB,WAAWF,QAAO,MACnC;AAAA,sBAAAC,KAAC,OAAE,WAAWD,QAAO,OAClB,gBAAM,iBACL,gBAAAC;AAAA,QAAC;AAAA;AAAA,UACC,WAAWD,QAAO;AAAA,UAClB,MAAM,MAAM;AAAA,UACZ,QAAO;AAAA,UACP,KAAI;AAAA,UAEH,gBAAM;AAAA;AAAA,MACT,IAEA,MAAM,OAEV;AAAA,MACC,MAAM,WAAW,gBAAAC,KAAC,OAAE,WAAWD,QAAO,UAAW,gBAAM,UAAS,IAAO;AAAA,MACvE,MAAM,eACL,gBAAAC,KAAC,OAAE,WAAWD,QAAO,cAAe,gBAAM,cAAa,IACrD;AAAA,MACH,MAAM,iBACL,gBAAAC,KAAC,OAAE,WAAWD,QAAO,MACnB,0BAAAC,KAAC,UAAK,UAAU,MAAM,gBAAiB,gBAAM,gBAAe,GAC9D,IACE;AAAA,MACH,MAAM,cAAc,gBAAAA,KAAC,OAAE,WAAWD,QAAO,aAAc,gBAAM,aAAY,IAAO;AAAA,SAxB1E,MAAM,EAyBf,CACD,GACH;AAAA,KACF;AAEJ;;;ACxDA,OAAOG,aAAY;AAgCb,gBAAAC,MAyBU,QAAAC,aAzBV;AA1BN,SAAS,cAAc,SAAqD;AAC1E,SAAO,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,QAAI,WAAW,OAAQ,QAAO,SAAS;AACvC,WAAO,EAAE,UAAU,cAAc,EAAE,SAAS;AAAA,EAC9C,CAAC;AACH;AAEA,SAASC,WAAU,OAAoC;AACrD,SAAO,MAAM,cAAc,QAAQ,MAAM,YAAY,QAAQ,MAAM,YAAY;AACjF;AAEA,SAAS,iBAAiB,OAA+C;AACvE,MAAI,MAAM,WAAW,UAAa,MAAM,iBAAiB,QAAW;AAClE,WAAO,GAAG,MAAM,MAAM,SAAM,MAAM,YAAY;AAAA,EAChD;AACA,SAAO,MAAM,UAAU,MAAM;AAC/B;AAEO,SAAS,kBAAkB,EAAE,UAAU,GAAqD;AACjG,MAAI,UAAU,WAAW,EAAG,QAAO;AACnC,QAAM,UAAU,cAAc,SAAS;AAEvC,SACE,gBAAAD,MAAC,aAAQ,WAAWF,QAAO,SAAS,mBAAgB,6BAClD;AAAA,oBAAAC,KAAC,QAAG,IAAG,6BAA4B,WAAWD,QAAO,SAAS,uBAE9D;AAAA,IACA,gBAAAC,KAAC,QAAG,WAAWD,QAAO,MACnB,kBAAQ,IAAI,CAAC,UAAU;AACtB,YAAM,QAAQ,iBAAiB,KAAK;AACpC,aACE,gBAAAE,MAAC,QAAkB,WAAWF,QAAO,MACnC;AAAA,wBAAAC,KAAC,SAAI,WAAWD,QAAO,gBAAgB,eAAY,QAAO;AAAA,QAC1D,gBAAAE,MAAC,SAAI,WAAWF,QAAO,SACrB;AAAA,0BAAAC,KAAC,OAAE,WAAWD,QAAO,aAClB,gBAAM,MACL,gBAAAC;AAAA,YAAC;AAAA;AAAA,cACC,WAAWD,QAAO;AAAA,cAClB,MAAM,MAAM;AAAA,cACZ,QAAO;AAAA,cACP,KAAI;AAAA,cAEH,gBAAM;AAAA;AAAA,UACT,IAEA,MAAM,aAEV;AAAA,UACC,QAAQ,gBAAAC,KAAC,OAAE,WAAWD,QAAO,OAAQ,iBAAM,IAAO;AAAA,UACnD,gBAAAE,MAAC,OAAE,WAAWF,QAAO,OACnB;AAAA,4BAAAC,KAAC,UAAK,UAAU,MAAM,WAAY,gBAAM,WAAU;AAAA,YACjD;AAAA,YACAE,WAAU,KAAK,IACd,YAEA,gBAAAF,KAAC,UAAK,UAAU,MAAM,SAAW,gBAAM,SAAQ;AAAA,aAEnD;AAAA,UACC,MAAM,QAAQ,gBAAAA,KAAC,OAAE,WAAWD,QAAO,OAAQ,gBAAM,OAAM,IAAO;AAAA,UAC9D,MAAM,cACL,gBAAAC,KAAC,OAAE,WAAWD,QAAO,aAAc,gBAAM,aAAY,IACnD;AAAA,WACN;AAAA,WA/BO,MAAM,EAgCf;AAAA,IAEJ,CAAC,GACH;AAAA,KACF;AAEJ;;;AC/EA,OAAOI,aAAY;AAKb,SAEE,OAAAC,MAFF,QAAAC,aAAA;AAHC,SAAS,SAA4B;AAC1C,SACE,gBAAAD,KAAC,YAAO,WAAWD,QAAO,QACxB,0BAAAE,MAAC,OAAE,WAAWF,QAAO,MAAM;AAAA;AAAA,IACd;AAAA,IACX,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,WAAWD,QAAO;AAAA,QAClB,MAAK;AAAA,QACL,QAAO;AAAA,QACP,KAAI;AAAA,QACL;AAAA;AAAA,IAED;AAAA,KACF,GACF;AAEJ;;;AChBA,OAAOG,aAAY;AAqBb,gBAAAC,MAoBM,QAAAC,aApBN;AAfN,SAAS,WAAW,QAA4C;AAC9D,SAAO,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM;AAChC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,QAAI,WAAW,OAAQ,QAAO,SAAS;AACvC,WAAO,EAAE,KAAK,cAAc,EAAE,IAAI;AAAA,EACpC,CAAC;AACH;AAEO,SAAS,WAAW,EAAE,OAAO,GAA8C;AAChF,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,QAAM,UAAU,WAAW,MAAM;AAEjC,SACE,gBAAAA,MAAC,aAAQ,WAAWF,QAAO,SAAS,mBAAgB,0BAClD;AAAA,oBAAAC,KAAC,QAAG,IAAG,0BAAyB,WAAWD,QAAO,SAAS,6BAE3D;AAAA,IACA,gBAAAC,KAAC,QAAG,WAAWD,QAAO,MACnB,kBAAQ,IAAI,CAAC,UACZ,gBAAAE,MAAC,QAAkB,WAAWF,QAAO,MACnC;AAAA,sBAAAC,KAAC,OAAE,WAAWD,QAAO,OAClB,gBAAM,MACL,gBAAAC;AAAA,QAAC;AAAA;AAAA,UACC,WAAWD,QAAO;AAAA,UAClB,MAAM,MAAM;AAAA,UACZ,QAAO;AAAA,UACP,KAAI;AAAA,UAEH,gBAAM;AAAA;AAAA,MACT,IAEA,MAAM,OAEV;AAAA,MACA,gBAAAE,MAAC,OAAE,WAAWF,QAAO,MAClB;AAAA,cAAM;AAAA,QACN;AAAA,QACD,gBAAAC,KAAC,UAAK,UAAU,MAAM,MAAO,gBAAM,MAAK;AAAA,SAC1C;AAAA,MACC,MAAM,cAAc,gBAAAA,KAAC,OAAE,WAAWD,QAAO,aAAc,gBAAM,aAAY,IAAO;AAAA,SApB1E,MAAM,EAqBf,CACD,GACH;AAAA,KACF;AAEJ;;;ACpDA,OAAOG,aAAY;AA4Bb,gBAAAC,MAKI,QAAAC,aALJ;AAtBN,IAAM,oBAAyD;AAAA,EAC7D,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,cAAc;AAAA,EACd,OAAO;AACT;AAEA,SAAS,cAAc,WAAqD;AAC1E,SAAO,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,MAAM;AACnC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,WAAO,SAAS;AAAA,EAClB,CAAC;AACH;AAEO,SAAS,UAAU,EAAE,UAAU,GAA6C;AACjF,MAAI,UAAU,WAAW,EAAG,QAAO;AACnC,QAAM,UAAU,cAAc,SAAS;AAEvC,SACE,gBAAAA,MAAC,aAAQ,WAAWF,QAAO,SAAS,mBAAgB,6BAClD;AAAA,oBAAAC,KAAC,QAAG,IAAG,6BAA4B,WAAWD,QAAO,SAAS,uBAE9D;AAAA,IACA,gBAAAC,KAAC,QAAG,WAAWD,QAAO,MACnB,kBAAQ,IAAI,CAAC,UACZ,gBAAAE,MAAC,QAAkB,WAAWF,QAAO,MACnC;AAAA,sBAAAC,KAAC,UAAK,WAAWD,QAAO,MAAM,MAAM,MAAM,UACvC,gBAAM,eAAe,MAAM,UAC9B;AAAA,MACA,gBAAAC,KAAC,UAAK,WAAWD,QAAO,aAAc,4BAAkB,MAAM,WAAW,GAAE;AAAA,SAJpE,MAAM,EAKf,CACD,GACH;AAAA,KACF;AAEJ;;;AC3CA,OAAOG,aAAY;AAiCP,SAOkB,OAAAC,MAPlB,QAAAC,aAAA;AA3BZ,SAAS,UAAU,OAAyC;AAC1D,SAAO,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM;AAC/B,UAAM,YAAY,EAAE,WAAW,IAAI;AACnC,UAAM,YAAY,EAAE,WAAW,IAAI;AACnC,QAAI,cAAc,UAAW,QAAO,YAAY;AAChD,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,WAAO,SAAS;AAAA,EAClB,CAAC;AACH;AAEA,SAAS,gBAAgB,MAA6B;AACpD,MAAI,KAAK,MAAO,QAAO,KAAK;AAC5B,MAAI,KAAK,SAAS,SAAU,QAAO,KAAK;AACxC,SAAO,KAAK;AACd;AAEO,SAAS,UAAU,EAAE,MAAM,GAA6C;AAC7E,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,QAAM,UAAU,UAAU,KAAK;AAE/B,SACE,gBAAAD,KAAC,SAAI,cAAW,iBAAgB,WAAWD,QAAO,KAChD,0BAAAC,KAAC,QAAG,WAAWD,QAAO,MACnB,kBAAQ,IAAI,CAAC,SACZ,gBAAAC,KAAC,QAAiB,WAAWD,QAAO,MAClC,0BAAAE;AAAA,IAAC;AAAA;AAAA,MACC,WAAWF,QAAO;AAAA,MAClB,MAAM,KAAK;AAAA,MACX,QAAO;AAAA,MACP,KAAI;AAAA,MACJ,iBAAe,KAAK,WAAW,SAAS;AAAA,MAEvC;AAAA,aAAK,UAAU,gBAAAC,KAAC,SAAI,WAAWD,QAAO,MAAM,KAAK,KAAK,SAAS,KAAI,IAAG,IAAK;AAAA,QAC5E,gBAAAC,KAAC,UAAK,WAAWD,QAAO,OAAQ,0BAAgB,IAAI,GAAE;AAAA;AAAA;AAAA,EACxD,KAVO,KAAK,EAWd,CACD,GACH,GACF;AAEJ;;;AChDA,OAAOG,cAAY;AAyBb,gBAAAC,OAuBQ,QAAAC,cAvBR;AAnBN,SAAS,gBAAgB,SAAuD;AAC9E,SAAO,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,QAAI,WAAW,OAAQ,QAAO,SAAS;AACvC,WAAO,EAAE,UAAU,cAAc,EAAE,SAAS;AAAA,EAC9C,CAAC;AACH;AAEA,SAASC,WAAU,OAAqC;AACtD,SAAO,MAAM,cAAc,QAAQ,MAAM,YAAY,QAAQ,MAAM,YAAY;AACjF;AAEO,SAAS,YAAY,EAAE,YAAY,GAA+C;AACvF,MAAI,YAAY,WAAW,EAAG,QAAO;AACrC,QAAM,UAAU,gBAAgB,WAAW;AAE3C,SACE,gBAAAD,OAAC,aAAQ,WAAWF,SAAO,SAAS,mBAAgB,+BAClD;AAAA,oBAAAC,MAAC,QAAG,IAAG,+BAA8B,WAAWD,SAAO,SAAS,yBAEhE;AAAA,IACA,gBAAAC,MAAC,QAAG,WAAWD,SAAO,MACnB,kBAAQ,IAAI,CAAC,UACZ,gBAAAE,OAAC,QAAkB,WAAWF,SAAO,MACnC;AAAA,sBAAAC,MAAC,SAAI,WAAWD,SAAO,gBAAgB,eAAY,QAAO;AAAA,MAC1D,gBAAAE,OAAC,SAAI,WAAWF,SAAO,SACrB;AAAA,wBAAAC,MAAC,OAAE,WAAWD,SAAO,cAClB,gBAAM,MACL,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAWD,SAAO;AAAA,YAClB,MAAM,MAAM;AAAA,YACZ,QAAO;AAAA,YACP,KAAI;AAAA,YAEH,gBAAM;AAAA;AAAA,QACT,IAEA,MAAM,cAEV;AAAA,QACC,MAAM,OAAO,gBAAAC,MAAC,OAAE,WAAWD,SAAO,MAAO,gBAAM,MAAK,IAAO;AAAA,QAC5D,gBAAAE,OAAC,OAAE,WAAWF,SAAO,OACnB;AAAA,0BAAAC,MAAC,UAAK,UAAU,MAAM,WAAY,gBAAM,WAAU;AAAA,UACjD;AAAA,UACAE,WAAU,KAAK,IACd,YAEA,gBAAAF,MAAC,UAAK,UAAU,MAAM,SAAW,gBAAM,SAAQ;AAAA,WAEnD;AAAA,QACC,MAAM,cAAc,gBAAAA,MAAC,OAAE,WAAWD,SAAO,aAAc,gBAAM,aAAY,IAAO;AAAA,SACnF;AAAA,SA5BO,MAAM,EA6Bf,CACD,GACH;AAAA,KACF;AAEJ;;;AChEA,OAAOI,cAAY;AAgCb,SA6BY,YAAAC,WA7BZ,OAAAC,OAmBQ,QAAAC,cAnBR;AAxBN,IAAM,eAA6C;AAAA,EACjD,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AACb;AAEA,SAAS,YAAY,SAA+C;AAClE,SAAO,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,QAAI,WAAW,OAAQ,QAAO,SAAS;AACvC,UAAM,QAAQ,EAAE,aAAa,EAAE,cAAc;AAC7C,UAAM,QAAQ,EAAE,aAAa,EAAE,cAAc;AAC7C,WAAO,MAAM,cAAc,KAAK;AAAA,EAClC,CAAC;AACH;AAEO,SAAS,QAAQ,EAAE,QAAQ,GAA2C;AAC3E,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,QAAM,UAAU,YAAY,OAAO;AAEnC,SACE,gBAAAA,OAAC,aAAQ,WAAWH,SAAO,SAAS,mBAAgB,2BAClD;AAAA,oBAAAE,MAAC,QAAG,IAAG,2BAA0B,WAAWF,SAAO,SAAS,qBAE5D;AAAA,IACA,gBAAAE,MAAC,QAAG,WAAWF,SAAO,MACnB,kBAAQ,IAAI,CAAC,UACZ,gBAAAG,OAAC,QAAkB,WAAWH,SAAO,MACnC;AAAA,sBAAAG,OAAC,OAAE,WAAWH,SAAO,OAClB;AAAA,cAAM,MACL,gBAAAE;AAAA,UAAC;AAAA;AAAA,YACC,WAAWF,SAAO;AAAA,YAClB,MAAM,MAAM;AAAA,YACZ,QAAO;AAAA,YACP,KAAI;AAAA,YAEH,gBAAM;AAAA;AAAA,QACT,IAEA,MAAM;AAAA,QAER,gBAAAG,OAAC,UAAK,WAAWH,SAAO,aAAa,eAAa,MAAM,QACtD;AAAA,0BAAAE,MAAC,UAAK,WAAWF,SAAO,QAAQ,sBAAQ;AAAA,UACvC,aAAa,MAAM,MAAM;AAAA,WAC5B;AAAA,SACF;AAAA,MACA,gBAAAE,MAAC,OAAE,WAAWF,SAAO,cAAe,gBAAM,cAAa;AAAA,MACtD,MAAM,SAAS,gBAAAE,MAAC,OAAE,WAAWF,SAAO,QAAS,gBAAM,QAAO,IAAO;AAAA,MACjE,MAAM,eAAe,UAAa,MAAM,cAAc,SACrD,gBAAAG,OAAC,OAAE,WAAWH,SAAO,OAClB;AAAA,cAAM,aACL,gBAAAG,OAAAF,WAAA,EACG;AAAA;AAAA,UACD,gBAAAC,MAAC,UAAK,UAAU,MAAM,YAAa,gBAAM,YAAW;AAAA,WACtD,IACE;AAAA,QACH,MAAM,cAAc,MAAM,YAAY,WAAQ;AAAA,QAC9C,MAAM,YACL,gBAAAC,OAAAF,WAAA,EACG;AAAA;AAAA,UACD,gBAAAC,MAAC,UAAK,UAAU,MAAM,WAAY,gBAAM,WAAU;AAAA,WACpD,IACE;AAAA,SACN,IACE;AAAA,MACH,MAAM,eAAe,MAAM,YAAY,SAAS,IAC/C,gBAAAA,MAAC,OAAE,WAAWF,SAAO,aAAc,kBAAQ,MAAM,YAAY,KAAK,IAAI,CAAC,IAAG,IACxE;AAAA,MACH,MAAM,cAAc,gBAAAE,MAAC,OAAE,WAAWF,SAAO,aAAc,gBAAM,aAAY,IAAO;AAAA,SAzC1E,MAAM,EA0Cf,CACD,GACH;AAAA,KACF;AAEJ;;;ACpFA,OAAOI,cAAY;AAUf,SAEI,OAAAC,OAFJ,QAAAC,cAAA;AAJG,SAAS,cAAc,EAAE,QAAQ,GAA0C;AAChF,QAAM,gBAAgB,QAAQ,UAAU,WAAW,QAAQ,UAAU;AAErE,SACE,gBAAAA,OAAC,YAAO,WAAWF,SAAO,QACvB;AAAA,YAAQ,SACP,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,WAAWD,SAAO;AAAA,QAClB,KAAK,QAAQ,OAAO;AAAA,QACpB,KAAK,QAAQ,OAAO,OAAO;AAAA,QAC3B,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAQ;AAAA,QACR,UAAS;AAAA;AAAA,IACX,IACE;AAAA,IACJ,gBAAAC,MAAC,QAAG,WAAWD,SAAO,aAAc,kBAAQ,aAAY;AAAA,IACvD,QAAQ,UAAU,gBAAAC,MAAC,OAAE,WAAWD,SAAO,SAAU,kBAAQ,SAAQ,IAAO;AAAA,IACxE,gBAAgB,gBAAAC,MAAC,OAAE,WAAWD,SAAO,UAAW,yBAAc,IAAO;AAAA,IACrE,QAAQ,MAAM,gBAAAC,MAAC,OAAE,WAAWD,SAAO,KAAM,kBAAQ,KAAI,IAAO;AAAA,KAC/D;AAEJ;;;AC5BA,OAAOG,cAAY;AAuBb,gBAAAC,OAyBQ,QAAAC,cAzBR;AAjBN,SAAS,aAAa,UAAkD;AACtE,SAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM;AAClC,UAAM,eAAe,EAAE,cAAc,IAAI;AACzC,UAAM,eAAe,EAAE,cAAc,IAAI;AACzC,QAAI,iBAAiB,aAAc,QAAO,eAAe;AACzD,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,WAAO,SAAS;AAAA,EAClB,CAAC;AACH;AAEO,SAAS,aAAa,EAAE,SAAS,GAAgD;AACtF,MAAI,SAAS,WAAW,EAAG,QAAO;AAClC,QAAM,UAAU,aAAa,QAAQ;AAErC,SACE,gBAAAA,OAAC,aAAQ,WAAWF,SAAO,SAAS,mBAAgB,4BAClD;AAAA,oBAAAC,MAAC,QAAG,IAAG,4BAA2B,WAAWD,SAAO,SAAS,sBAE7D;AAAA,IACA,gBAAAC,MAAC,QAAG,WAAWD,SAAO,MACnB,kBAAQ,IAAI,CAAC,YACZ,gBAAAE;AAAA,MAAC;AAAA;AAAA,QAEC,WAAWF,SAAO;AAAA,QAClB,oBAAkB,QAAQ,cAAc,SAAS;AAAA,QAEjD;AAAA,0BAAAC,MAAC,OAAE,WAAWD,SAAO,OAClB,kBAAQ,MACP,gBAAAC;AAAA,YAAC;AAAA;AAAA,cACC,WAAWD,SAAO;AAAA,cAClB,MAAM,QAAQ;AAAA,cACd,QAAO;AAAA,cACP,KAAI;AAAA,cAEH,kBAAQ;AAAA;AAAA,UACX,IAEA,QAAQ,OAEZ;AAAA,UACC,QAAQ,cAAc,SACrB,gBAAAE,OAAC,OAAE,WAAWF,SAAO,OACnB;AAAA,4BAAAC,MAAC,UAAK,UAAU,QAAQ,WAAY,kBAAQ,WAAU;AAAA,YACrD;AAAA,YACA,QAAQ,UACP,gBAAAA,MAAC,UAAK,UAAU,QAAQ,SAAU,kBAAQ,SAAQ,IAElD;AAAA,aAEJ,IACE;AAAA,UACH,QAAQ,cACP,gBAAAA,MAAC,OAAE,WAAWD,SAAO,aAAc,kBAAQ,aAAY,IACrD;AAAA,UACH,QAAQ,QAAQ,QAAQ,KAAK,SAAS,IACrC,gBAAAC,MAAC,QAAG,WAAWD,SAAO,MAAM,cAAW,QACpC,kBAAQ,KAAK,IAAI,CAAC,QACjB,gBAAAC,MAAC,QAAa,WAAWD,SAAO,KAC7B,iBADM,GAET,CACD,GACH,IACE;AAAA;AAAA;AAAA,MAxCC,QAAQ;AAAA,IAyCf,CACD,GACH;AAAA,KACF;AAEJ;;;AC3EA,OAAOG,cAAY;AA4Bb,gBAAAC,OAKI,QAAAC,cALJ;AAtBN,SAAS,iBAAiB,SAAyD;AACjF,SAAO,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,QAAI,WAAW,OAAQ,QAAO,SAAS;AACvC,WAAO,EAAE,KAAK,cAAc,EAAE,IAAI;AAAA,EACpC,CAAC;AACH;AAKA,SAAS,aAAa,KAAqB;AACzC,SAAO,IAAI,QAAQ,oCAAoC,EAAE;AAC3D;AAEO,SAAS,aAAa,EAAE,aAAa,GAAgD;AAC1F,MAAI,aAAa,WAAW,EAAG,QAAO;AACtC,QAAM,UAAU,iBAAiB,YAAY;AAE7C,SACE,gBAAAA,OAAC,aAAQ,WAAWF,SAAO,SAAS,mBAAgB,gCAClD;AAAA,oBAAAC,MAAC,QAAG,IAAG,gCAA+B,WAAWD,SAAO,SAAS,0BAEjE;AAAA,IACA,gBAAAC,MAAC,QAAG,WAAWD,SAAO,MACnB,kBAAQ,IAAI,CAAC,UACZ,gBAAAE,OAAC,QAAkB,WAAWF,SAAO,MACnC;AAAA,sBAAAC,MAAC,OAAE,WAAWD,SAAO,OAClB,gBAAM,MACL,gBAAAC;AAAA,QAAC;AAAA;AAAA,UACC,WAAWD,SAAO;AAAA,UAClB,MAAM,MAAM;AAAA,UACZ,QAAO;AAAA,UACP,KAAI;AAAA,UAEH,gBAAM;AAAA;AAAA,MACT,IAEA,MAAM,OAEV;AAAA,MACC,MAAM,YAAY,gBAAAC,MAAC,OAAE,WAAWD,SAAO,WAAY,gBAAM,WAAU,IAAO;AAAA,MAC3E,gBAAAC,MAAC,OAAE,WAAWD,SAAO,MACnB,0BAAAC,MAAC,UAAK,UAAU,MAAM,MAAO,gBAAM,MAAK,GAC1C;AAAA,MACC,MAAM,aAAa,MAAM,UAAU,SAAS,IAC3C,gBAAAA,MAAC,OAAE,WAAWD,SAAO,WAAY,kBAAQ,MAAM,UAAU,KAAK,IAAI,CAAC,IAAG,IACpE;AAAA,MACH,MAAM,OACF,MAAM;AACL,cAAM,OAAO,aAAa,MAAM,GAAG;AACnC,eACE,gBAAAC,MAAC,OAAE,WAAWD,SAAO,KACnB,0BAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAWD,SAAO;AAAA,YAClB,MAAM,mBAAmB,IAAI;AAAA,YAC7B,QAAO;AAAA,YACP,KAAI;AAAA,YAEH,iBAAO,IAAI;AAAA;AAAA,QACd,GACF;AAAA,MAEJ,GAAG,IACH;AAAA,MACH,MAAM,cAAc,gBAAAC,MAAC,OAAE,WAAWD,SAAO,aAAc,gBAAM,aAAY,IAAO;AAAA,SAvC1E,MAAM,EAwCf,CACD,GACH;AAAA,KACF;AAEJ;;;AC9EA,OAAOG,cAAY;AAoCb,gBAAAC,OAKI,QAAAC,cALJ;AAzBN,SAAS,YAAY,QAA+B;AAClD,QAAM,SAAS,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM;AACxC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,WAAO,SAAS;AAAA,EAClB,CAAC;AACD,QAAM,SAAS,oBAAI,IAAqB;AACxC,aAAW,SAAS,QAAQ;AAC1B,UAAM,MAAM,MAAM,YAAY;AAC9B,UAAM,SAAS,OAAO,IAAI,GAAG;AAC7B,QAAI,QAAQ;AACV,aAAO,KAAK,KAAK;AAAA,IACnB,OAAO;AACL,aAAO,IAAI,KAAK,CAAC,KAAK,CAAC;AAAA,IACzB;AAAA,EACF;AACA,SAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,UAAU,KAAK,OAAO,EAAE,UAAU,QAAQ,MAAM,EAAE;AACvF;AAEO,SAAS,WAAW,EAAE,OAAO,GAA8C;AAChF,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,QAAM,SAAS,YAAY,MAAM;AAEjC,SACE,gBAAAA,OAAC,aAAQ,WAAWF,SAAO,SAAS,mBAAgB,0BAClD;AAAA,oBAAAC,MAAC,QAAG,IAAG,0BAAyB,WAAWD,SAAO,SAAS,oBAE3D;AAAA,IACA,gBAAAC,MAAC,SAAI,WAAWD,SAAO,QACpB,iBAAO,IAAI,CAAC,UACX,gBAAAE,OAAC,SAAyB,WAAWF,SAAO,OAC1C;AAAA,sBAAAC,MAAC,QAAG,WAAWD,SAAO,UAAW,gBAAM,UAAS;AAAA,MAChD,gBAAAC,MAAC,QAAG,WAAWD,SAAO,MAAM,cAAY,GAAG,MAAM,QAAQ,WACtD,gBAAM,OAAO,IAAI,CAAC,UACjB,gBAAAC,MAAC,QAAkB,WAAWD,SAAO,MAClC,gBAAM,SADA,MAAM,EAEf,CACD,GACH;AAAA,SARQ,MAAM,QAShB,CACD,GACH;AAAA,KACF;AAEJ;;;AftCA,OAAOG,cAAY;;;AgBjBnB,OAAOC,cAAY;AAyBb,gBAAAC,OAyBY,QAAAC,cAzBZ;AAnBN,SAAS,iBAAiB,SAA2D;AACnF,SAAO,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,UAAM,SAAS,EAAE,SAAS,OAAO;AACjC,QAAI,WAAW,OAAQ,QAAO,SAAS;AACvC,WAAO,EAAE,UAAU,cAAc,EAAE,SAAS;AAAA,EAC9C,CAAC;AACH;AAEA,SAASC,WAAU,OAAuC;AACxD,SAAO,MAAM,cAAc,QAAQ,MAAM,YAAY,QAAQ,MAAM,YAAY;AACjF;AAEO,SAAS,aAAa,EAAE,aAAa,GAAgD;AAC1F,MAAI,aAAa,WAAW,EAAG,QAAO;AACtC,QAAM,UAAU,iBAAiB,YAAY;AAE7C,SACE,gBAAAD,OAAC,aAAQ,WAAWF,SAAO,SAAS,mBAAgB,gCAClD;AAAA,oBAAAC,MAAC,QAAG,IAAG,gCAA+B,WAAWD,SAAO,SAAS,0BAEjE;AAAA,IACA,gBAAAC,MAAC,QAAG,WAAWD,SAAO,MACnB,kBAAQ,IAAI,CAAC,UACZ,gBAAAE,OAAC,QAAkB,WAAWF,SAAO,MACnC;AAAA,sBAAAC,MAAC,SAAI,WAAWD,SAAO,gBAAgB,eAAY,QAAO;AAAA,MAC1D,gBAAAE,OAAC,SAAI,WAAWF,SAAO,SACrB;AAAA,wBAAAC,MAAC,OAAE,WAAWD,SAAO,cAClB,gBAAM,MACL,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAWD,SAAO;AAAA,YAClB,MAAM,MAAM;AAAA,YACZ,QAAO;AAAA,YACP,KAAI;AAAA,YAEH,gBAAM;AAAA;AAAA,QACT,IAEA,MAAM,cAEV;AAAA,QACA,gBAAAE,OAAC,OAAE,WAAWF,SAAO,MAClB;AAAA,gBAAM;AAAA,UACN,MAAM,QACL,gBAAAE,OAAC,UAAK,WAAWF,SAAO,OACtB;AAAA,4BAAAC,MAAC,UAAK,WAAWD,SAAO,QAAQ,qBAAO;AAAA,YACtC,MAAM;AAAA,aACT,IACE;AAAA,WACN;AAAA,QACA,gBAAAE,OAAC,OAAE,WAAWF,SAAO,OACnB;AAAA,0BAAAC,MAAC,UAAK,UAAU,MAAM,WAAY,gBAAM,WAAU;AAAA,UACjD;AAAA,UACAE,WAAU,KAAK,IACd,YAEA,gBAAAF,MAAC,UAAK,UAAU,MAAM,SAAW,gBAAM,SAAQ;AAAA,WAEnD;AAAA,QACC,MAAM,cAAc,gBAAAA,MAAC,OAAE,WAAWD,SAAO,aAAc,gBAAM,aAAY,IAAO;AAAA,SACnF;AAAA,SApCO,MAAM,EAqCf,CACD,GACH;AAAA,KACF;AAEJ;;;AhB5CI,SACE,OAAAI,OADF,QAAAC,cAAA;AAJG,SAAS,eAAe,EAAE,KAAK,GAA2C;AAC/E,QAAM,aAAa,KAAK,SAAS,kBAAkB;AAEnD,SACE,gBAAAA,OAAC,aAAQ,WAAWC,SAAO,MACzB;AAAA,oBAAAF,MAAC,iBAAc,SAAS,KAAK,SAAS;AAAA,IACtC,gBAAAA,MAAC,aAAU,OAAO,KAAK,OAAO;AAAA,IAC9B,gBAAAA,MAAC,qBAAkB,WAAW,KAAK,WAAW;AAAA,IAC9C,gBAAAA,MAAC,WAAQ,SAAS,KAAK,SAAS;AAAA,IAChC,gBAAAA,MAAC,kBAAe,SAAS,KAAK,SAAS;AAAA,IACvC,gBAAAA,MAAC,eAAY,aAAa,KAAK,aAAa;AAAA,IAC5C,gBAAAA,MAAC,kBAAe,gBAAgB,KAAK,gBAAgB;AAAA,IACrD,gBAAAA,MAAC,WAAQ,SAAS,KAAK,SAAS;AAAA,IAChC,gBAAAA,MAAC,gBAAa,UAAU,KAAK,UAAU;AAAA,IACvC,gBAAAA,MAAC,gBAAa,cAAc,KAAK,cAAc;AAAA,IAC/C,gBAAAA,MAAC,cAAW,QAAQ,KAAK,QAAQ;AAAA,IACjC,gBAAAA,MAAC,gBAAa,cAAc,KAAK,cAAc;AAAA,IAC/C,gBAAAA,MAAC,cAAW,QAAQ,KAAK,QAAQ;AAAA,IACjC,gBAAAA,MAAC,aAAU,WAAW,KAAK,WAAW;AAAA,IACtC,gBAAAA,MAAC,eAAY,SAAS,KAAK,SAAS;AAAA,IACnC,aAAa,gBAAAA,MAAC,UAAO,IAAK;AAAA,KAC7B;AAEJ;;;AiB/CA,OAAOG,cAAY;AAgCT,gBAAAC,aAAA;AAtBV,IAAM,qBAAqB;AAEpB,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2C;AACzC,QAAM,QAAQ,aAAa;AAC3B,QAAM,SAAS,iBAAiB,CAAC,WAAsB;AACvD,SACE,gBAAAA,MAAC,SAAI,WAAWD,SAAO,SACrB,0BAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAWD,SAAO;AAAA,MAClB,cAAY;AAAA,MACZ,OAAO;AAAA,MACP,UAAU,CAAC,UAAU;AACnB,iBAAS,MAAM,OAAO,KAAK;AAAA,MAC7B;AAAA,MAEC,2BAAiB,IAAI,CAAC,WACrB,gBAAAC,MAAC,YAAoB,OAAO,QACzB,iBAAO,MAAM,KADH,MAEb,CACD;AAAA;AAAA,EACH,GACF;AAEJ;;;ACzCA,SAAS,sBAA6C;AACtD,SAAS,iBAAiB;AA6FtB,qBAAAC,WACE,OAAAC,OADF,QAAAC,cAAA;AArFJ,SAAS,eAAe,SAAiB,QAAwB;AAC/D,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,QAAI,aAAa,IAAI,QAAQ,MAAM;AACnC,WAAO,IAAI,SAAS;AAAA,EACtB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,eAAe,SAAyB;AAC/C,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,QAAI,aAAa,OAAO,MAAM;AAC9B,WAAO,IAAI,SAAS;AAAA,EACtB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,cAAc,KAAyB,MAA8C;AAC5F,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI;AACF,WAAO,IAAI,IAAI,KAAK,IAAI,EAAE,SAAS;AAAA,EACrC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,cAAc,UAAkD;AACvE,MAAI,SAAU,QAAO;AACrB,MAAI,OAAO,WAAW,YAAa,QAAO,OAAO,SAAS;AAC1D,SAAO;AACT;AAEA,SAAS,cACP,UACA,SACoB;AACpB,MAAI,SAAU,QAAO,eAAe,QAAQ;AAC5C,MAAI,OAAO,WAAW,aAAa;AACjC,WAAO,OAAO,SAAS,SAAS,OAAO,SAAS;AAAA,EAClD;AACA,SAAO;AACT;AAEO,SAAS,YAAY,EAAE,MAAM,SAAS,QAAQ,GAAwC;AAC3F,QAAM,kBAAkB,cAAc,OAAO;AAC7C,QAAM,kBAAkB,cAAc,SAAS,eAAe;AAE9D,QAAM,EAAE,SAAS,UAAU,eAAe,IAAI;AAC9C,QAAM,cAAc,QAAQ,OAAO,QAAQ;AAC3C,QAAM,gBAAgB,QAAQ,WAAW,QAAQ;AACjD,QAAM,UAAU,cAAc,QAAQ,QAAQ,KAAK,eAAe;AAClE,QAAM,cAAc,QAAQ,SAAS,wBAAwB;AAE7D,QAAM,YAAY,kBAAkB,eAAe,iBAAiB,cAAc,IAAI;AACtF,QAAM,aAAa,kBACf,SAAS,iBAAiB,IAAI,CAAC,SAAS;AAAA,IACtC,QAAQ;AAAA,IACR,MAAM,eAAe,iBAAiB,GAAG;AAAA,EAC3C,EAAE,IACF,CAAC;AACL,QAAM,eAAe,kBACjB,eAAe,iBAAiB,SAAS,aAAa,IACtD;AAEJ,QAAM,eAAe,SAAS,iBAAiB,OAAO,CAAC,QAAQ,QAAQ,cAAc;AAErF,QAAM,aAAa,SAAS,iBAAiB;AAC7C,QAAM,gBAAgB,aAAa,KAAK,UAAU,eAAe,IAAI,CAAC,IAAI;AAE1E,YAAU,MAAM;AACd,QAAI,CAAC,cAAe;AACpB,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,OAAO;AACd,WAAO,cAAc;AACrB,aAAS,KAAK,YAAY,MAAM;AAChC,WAAO,MAAM;AACX,aAAO,OAAO;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,aAAa,CAAC;AAElB,SACE,gBAAAA,OAAAF,WAAA,EACE;AAAA,oBAAAC,MAAC,WAAO,kBAAQ,aAAY;AAAA,IAC3B,cAAc,gBAAAA,MAAC,UAAK,MAAK,eAAc,SAAS,aAAa,IAAK;AAAA,IAClE,YAAY,gBAAAA,MAAC,UAAK,KAAI,aAAY,MAAM,WAAW,IAAK;AAAA,IAEzD,gBAAAA,MAAC,UAAK,UAAS,YAAW,SAAS,QAAQ,aAAa;AAAA,IACvD,gBAAgB,gBAAAA,MAAC,UAAK,UAAS,kBAAiB,SAAS,eAAe,IAAK;AAAA,IAC7E,YAAY,gBAAAA,MAAC,UAAK,UAAS,UAAS,SAAS,WAAW,IAAK;AAAA,IAC7D,UAAU,gBAAAA,MAAC,UAAK,UAAS,YAAW,SAAS,SAAS,IAAK;AAAA,IAC5D,gBAAAA,MAAC,UAAK,UAAS,WAAU,SAAQ,WAAU;AAAA,IAC3C,gBAAAA,MAAC,UAAK,UAAS,aAAY,SAAS,gBAAgB;AAAA,IACnD,aAAa,IAAI,CAAC,QACjB,gBAAAA,MAAC,UAAe,UAAS,uBAAsB,SAAS,OAA7C,GAAkD,CAC9D;AAAA,IAED,gBAAAA,MAAC,UAAK,MAAK,gBAAe,SAAS,aAAa;AAAA,IAE/C,WAAW,IAAI,CAAC,EAAE,QAAQ,KAAK,MAC9B,gBAAAA,MAAC,UAAkB,KAAI,aAAY,UAAU,QAAQ,QAA1C,MAAsD,CAClE;AAAA,IACA,eAAe,gBAAAA,MAAC,UAAK,KAAI,aAAY,UAAS,aAAY,MAAM,cAAc,IAAK;AAAA,KACtF;AAEJ;","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 & 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
|
+
"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.
|
|
46
|
+
"@takuhon/core": "0.4.0"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"react": ">=19",
|