master
1---
2interface RubyPair {
3 base: string;
4 text: string;
5}
6
7type Props = (RubyPair | { pairs: RubyPair[] | [string, string][] }) & {
8 rp?: [string, string];
9};
10
11const props = Astro.props;
12const rpContent = props.rp || ['(', ')'];
13const pairs = (() => {
14 const p = 'pairs' in props ? props.pairs : ([props] as RubyPair[]);
15 if (p.length < 1) return p;
16 if ('base' in p[0]) return p;
17 return (p as [string, string][]).map(([base, text]) => ({ base, text }));
18})() as RubyPair[];
19---
20
21<ruby>
22 {
23 pairs.map(({ base, text }) => {
24 return (
25 <Fragment>
26 {base}
27 <rp>{rpContent[0]}</rp>
28 <rt>{text}</rt>
29 <rp>{rpContent[1]}</rp>
30 </Fragment>
31 );
32 })
33 }
34</ruby>