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>