tegaki 0.0.1 → 0.2.3
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/CHANGELOG.md +25 -0
- package/FONTS-LICENSE.md +67 -0
- package/LICENSE +21 -0
- package/README.md +261 -0
- package/dist/index.d.mts +257 -0
- package/dist/index.mjs +920 -0
- package/dist/index.mjs.map +1 -0
- package/fonts/caveat/bundle.ts +300 -0
- package/fonts/caveat/caveat.ttf +0 -0
- package/fonts/caveat/font.json +24472 -0
- package/fonts/caveat/glyphData.json +1 -0
- package/fonts/caveat/svg/0.svg +12 -0
- package/fonts/caveat/svg/0.tsx +14 -0
- package/fonts/caveat/svg/1.svg +7 -0
- package/fonts/caveat/svg/1.tsx +9 -0
- package/fonts/caveat/svg/2.svg +10 -0
- package/fonts/caveat/svg/2.tsx +12 -0
- package/fonts/caveat/svg/3.svg +12 -0
- package/fonts/caveat/svg/3.tsx +14 -0
- package/fonts/caveat/svg/4.svg +12 -0
- package/fonts/caveat/svg/4.tsx +14 -0
- package/fonts/caveat/svg/5.svg +7 -0
- package/fonts/caveat/svg/5.tsx +9 -0
- package/fonts/caveat/svg/6.svg +7 -0
- package/fonts/caveat/svg/6.tsx +9 -0
- package/fonts/caveat/svg/7.svg +12 -0
- package/fonts/caveat/svg/7.tsx +14 -0
- package/fonts/caveat/svg/8.svg +10 -0
- package/fonts/caveat/svg/8.tsx +12 -0
- package/fonts/caveat/svg/9.svg +12 -0
- package/fonts/caveat/svg/9.tsx +14 -0
- package/fonts/caveat/svg/U+0021.svg +12 -0
- package/fonts/caveat/svg/U+0021.tsx +14 -0
- package/fonts/caveat/svg/U+0022.svg +12 -0
- package/fonts/caveat/svg/U+0022.tsx +14 -0
- package/fonts/caveat/svg/U+0023.svg +22 -0
- package/fonts/caveat/svg/U+0023.tsx +24 -0
- package/fonts/caveat/svg/U+0024.svg +12 -0
- package/fonts/caveat/svg/U+0024.tsx +14 -0
- package/fonts/caveat/svg/U+0025.svg +25 -0
- package/fonts/caveat/svg/U+0025.tsx +27 -0
- package/fonts/caveat/svg/U+0026.svg +10 -0
- package/fonts/caveat/svg/U+0026.tsx +12 -0
- package/fonts/caveat/svg/U+0027.svg +7 -0
- package/fonts/caveat/svg/U+0027.tsx +9 -0
- package/fonts/caveat/svg/U+0028.svg +7 -0
- package/fonts/caveat/svg/U+0028.tsx +9 -0
- package/fonts/caveat/svg/U+0029.svg +7 -0
- package/fonts/caveat/svg/U+0029.tsx +9 -0
- package/fonts/caveat/svg/U+002a.svg +17 -0
- package/fonts/caveat/svg/U+002a.tsx +19 -0
- package/fonts/caveat/svg/U+002b.svg +12 -0
- package/fonts/caveat/svg/U+002b.tsx +14 -0
- package/fonts/caveat/svg/U+002c.svg +7 -0
- package/fonts/caveat/svg/U+002c.tsx +9 -0
- package/fonts/caveat/svg/U+002d.svg +7 -0
- package/fonts/caveat/svg/U+002d.tsx +9 -0
- package/fonts/caveat/svg/U+002e.svg +7 -0
- package/fonts/caveat/svg/U+002e.tsx +9 -0
- package/fonts/caveat/svg/U+002f.svg +12 -0
- package/fonts/caveat/svg/U+002f.tsx +14 -0
- package/fonts/caveat/svg/U+003a.svg +12 -0
- package/fonts/caveat/svg/U+003a.tsx +14 -0
- package/fonts/caveat/svg/U+003b.svg +12 -0
- package/fonts/caveat/svg/U+003b.tsx +14 -0
- package/fonts/caveat/svg/U+003c.svg +12 -0
- package/fonts/caveat/svg/U+003c.tsx +14 -0
- package/fonts/caveat/svg/U+003d.svg +12 -0
- package/fonts/caveat/svg/U+003d.tsx +14 -0
- package/fonts/caveat/svg/U+003e.svg +12 -0
- package/fonts/caveat/svg/U+003e.tsx +14 -0
- package/fonts/caveat/svg/U+003f.svg +12 -0
- package/fonts/caveat/svg/U+003f.tsx +14 -0
- package/fonts/caveat/svg/U+0040.svg +7 -0
- package/fonts/caveat/svg/U+0040.tsx +9 -0
- package/fonts/caveat/svg/U+005c.svg +7 -0
- package/fonts/caveat/svg/U+005c.tsx +9 -0
- package/fonts/caveat/svg/U+005e.svg +7 -0
- package/fonts/caveat/svg/U+005e.tsx +9 -0
- package/fonts/caveat/svg/U+005f.svg +7 -0
- package/fonts/caveat/svg/U+005f.tsx +9 -0
- package/fonts/caveat/svg/U+0060.svg +7 -0
- package/fonts/caveat/svg/U+0060.tsx +9 -0
- package/fonts/caveat/svg/U+007c.svg +7 -0
- package/fonts/caveat/svg/U+007c.tsx +9 -0
- package/fonts/caveat/svg/U+007e.svg +7 -0
- package/fonts/caveat/svg/U+007e.tsx +9 -0
- package/fonts/caveat/svg/a.svg +7 -0
- package/fonts/caveat/svg/a.tsx +9 -0
- package/fonts/caveat/svg/b.svg +12 -0
- package/fonts/caveat/svg/b.tsx +14 -0
- package/fonts/caveat/svg/c.svg +7 -0
- package/fonts/caveat/svg/c.tsx +9 -0
- package/fonts/caveat/svg/d.svg +12 -0
- package/fonts/caveat/svg/d.tsx +14 -0
- package/fonts/caveat/svg/e.svg +7 -0
- package/fonts/caveat/svg/e.tsx +9 -0
- package/fonts/caveat/svg/f.svg +12 -0
- package/fonts/caveat/svg/f.tsx +14 -0
- package/fonts/caveat/svg/g.svg +15 -0
- package/fonts/caveat/svg/g.tsx +17 -0
- package/fonts/caveat/svg/h.svg +7 -0
- package/fonts/caveat/svg/h.tsx +9 -0
- package/fonts/caveat/svg/i.svg +12 -0
- package/fonts/caveat/svg/i.tsx +14 -0
- package/fonts/caveat/svg/j.svg +12 -0
- package/fonts/caveat/svg/j.tsx +14 -0
- package/fonts/caveat/svg/k.svg +15 -0
- package/fonts/caveat/svg/k.tsx +17 -0
- package/fonts/caveat/svg/l.svg +7 -0
- package/fonts/caveat/svg/l.tsx +9 -0
- package/fonts/caveat/svg/m.svg +17 -0
- package/fonts/caveat/svg/m.tsx +19 -0
- package/fonts/caveat/svg/n.svg +17 -0
- package/fonts/caveat/svg/n.tsx +19 -0
- package/fonts/caveat/svg/o.svg +7 -0
- package/fonts/caveat/svg/o.tsx +9 -0
- package/fonts/caveat/svg/p.svg +12 -0
- package/fonts/caveat/svg/p.tsx +14 -0
- package/fonts/caveat/svg/q.svg +7 -0
- package/fonts/caveat/svg/q.tsx +9 -0
- package/fonts/caveat/svg/r.svg +12 -0
- package/fonts/caveat/svg/r.tsx +14 -0
- package/fonts/caveat/svg/s.svg +7 -0
- package/fonts/caveat/svg/s.tsx +9 -0
- package/fonts/caveat/svg/t.svg +20 -0
- package/fonts/caveat/svg/t.tsx +22 -0
- package/fonts/caveat/svg/u.svg +12 -0
- package/fonts/caveat/svg/u.tsx +14 -0
- package/fonts/caveat/svg/upper_A.svg +12 -0
- package/fonts/caveat/svg/upper_A.tsx +14 -0
- package/fonts/caveat/svg/upper_B.svg +17 -0
- package/fonts/caveat/svg/upper_B.tsx +19 -0
- package/fonts/caveat/svg/upper_C.svg +7 -0
- package/fonts/caveat/svg/upper_C.tsx +9 -0
- package/fonts/caveat/svg/upper_D.svg +12 -0
- package/fonts/caveat/svg/upper_D.tsx +14 -0
- package/fonts/caveat/svg/upper_E.svg +12 -0
- package/fonts/caveat/svg/upper_E.tsx +14 -0
- package/fonts/caveat/svg/upper_F.svg +17 -0
- package/fonts/caveat/svg/upper_F.tsx +19 -0
- package/fonts/caveat/svg/upper_G.svg +7 -0
- package/fonts/caveat/svg/upper_G.tsx +9 -0
- package/fonts/caveat/svg/upper_H.svg +17 -0
- package/fonts/caveat/svg/upper_H.tsx +19 -0
- package/fonts/caveat/svg/upper_I.svg +17 -0
- package/fonts/caveat/svg/upper_I.tsx +19 -0
- package/fonts/caveat/svg/upper_J.svg +7 -0
- package/fonts/caveat/svg/upper_J.tsx +9 -0
- package/fonts/caveat/svg/upper_K.svg +12 -0
- package/fonts/caveat/svg/upper_K.tsx +14 -0
- package/fonts/caveat/svg/upper_L.svg +7 -0
- package/fonts/caveat/svg/upper_L.tsx +9 -0
- package/fonts/caveat/svg/upper_M.svg +17 -0
- package/fonts/caveat/svg/upper_M.tsx +19 -0
- package/fonts/caveat/svg/upper_N.svg +7 -0
- package/fonts/caveat/svg/upper_N.tsx +9 -0
- package/fonts/caveat/svg/upper_O.svg +7 -0
- package/fonts/caveat/svg/upper_O.tsx +9 -0
- package/fonts/caveat/svg/upper_P.svg +12 -0
- package/fonts/caveat/svg/upper_P.tsx +14 -0
- package/fonts/caveat/svg/upper_Q.svg +15 -0
- package/fonts/caveat/svg/upper_Q.tsx +17 -0
- package/fonts/caveat/svg/upper_R.svg +12 -0
- package/fonts/caveat/svg/upper_R.tsx +14 -0
- package/fonts/caveat/svg/upper_S.svg +7 -0
- package/fonts/caveat/svg/upper_S.tsx +9 -0
- package/fonts/caveat/svg/upper_T.svg +12 -0
- package/fonts/caveat/svg/upper_T.tsx +14 -0
- package/fonts/caveat/svg/upper_U.svg +15 -0
- package/fonts/caveat/svg/upper_U.tsx +17 -0
- package/fonts/caveat/svg/upper_V.svg +12 -0
- package/fonts/caveat/svg/upper_V.tsx +14 -0
- package/fonts/caveat/svg/upper_W.svg +12 -0
- package/fonts/caveat/svg/upper_W.tsx +14 -0
- package/fonts/caveat/svg/upper_X.svg +12 -0
- package/fonts/caveat/svg/upper_X.tsx +14 -0
- package/fonts/caveat/svg/upper_Y.svg +12 -0
- package/fonts/caveat/svg/upper_Y.tsx +14 -0
- package/fonts/caveat/svg/upper_Z.svg +7 -0
- package/fonts/caveat/svg/upper_Z.tsx +9 -0
- package/fonts/caveat/svg/v.svg +7 -0
- package/fonts/caveat/svg/v.tsx +9 -0
- package/fonts/caveat/svg/w.svg +12 -0
- package/fonts/caveat/svg/w.tsx +14 -0
- package/fonts/caveat/svg/x.svg +17 -0
- package/fonts/caveat/svg/x.tsx +19 -0
- package/fonts/caveat/svg/y.svg +12 -0
- package/fonts/caveat/svg/y.tsx +14 -0
- package/fonts/caveat/svg/z.svg +7 -0
- package/fonts/caveat/svg/z.tsx +9 -0
- package/fonts/italianno/bundle.ts +300 -0
- package/fonts/italianno/font.json +33410 -0
- package/fonts/italianno/glyphData.json +1 -0
- package/fonts/italianno/italianno.ttf +0 -0
- package/fonts/italianno/svg/0.svg +10 -0
- package/fonts/italianno/svg/0.tsx +12 -0
- package/fonts/italianno/svg/1.svg +17 -0
- package/fonts/italianno/svg/1.tsx +19 -0
- package/fonts/italianno/svg/2.svg +12 -0
- package/fonts/italianno/svg/2.tsx +14 -0
- package/fonts/italianno/svg/3.svg +17 -0
- package/fonts/italianno/svg/3.tsx +19 -0
- package/fonts/italianno/svg/4.svg +22 -0
- package/fonts/italianno/svg/4.tsx +24 -0
- package/fonts/italianno/svg/5.svg +12 -0
- package/fonts/italianno/svg/5.tsx +14 -0
- package/fonts/italianno/svg/6.svg +13 -0
- package/fonts/italianno/svg/6.tsx +15 -0
- package/fonts/italianno/svg/7.svg +12 -0
- package/fonts/italianno/svg/7.tsx +14 -0
- package/fonts/italianno/svg/8.svg +7 -0
- package/fonts/italianno/svg/8.tsx +9 -0
- package/fonts/italianno/svg/9.svg +12 -0
- package/fonts/italianno/svg/9.tsx +14 -0
- package/fonts/italianno/svg/U+0021.svg +12 -0
- package/fonts/italianno/svg/U+0021.tsx +14 -0
- package/fonts/italianno/svg/U+0022.svg +15 -0
- package/fonts/italianno/svg/U+0022.tsx +17 -0
- package/fonts/italianno/svg/U+0023.svg +22 -0
- package/fonts/italianno/svg/U+0023.tsx +24 -0
- package/fonts/italianno/svg/U+0024.svg +25 -0
- package/fonts/italianno/svg/U+0024.tsx +27 -0
- package/fonts/italianno/svg/U+0025.svg +22 -0
- package/fonts/italianno/svg/U+0025.tsx +24 -0
- package/fonts/italianno/svg/U+0026.svg +17 -0
- package/fonts/italianno/svg/U+0026.tsx +19 -0
- package/fonts/italianno/svg/U+0027.svg +7 -0
- package/fonts/italianno/svg/U+0027.tsx +9 -0
- package/fonts/italianno/svg/U+0028.svg +7 -0
- package/fonts/italianno/svg/U+0028.tsx +9 -0
- package/fonts/italianno/svg/U+0029.svg +7 -0
- package/fonts/italianno/svg/U+0029.tsx +9 -0
- package/fonts/italianno/svg/U+002a.svg +22 -0
- package/fonts/italianno/svg/U+002a.tsx +24 -0
- package/fonts/italianno/svg/U+002b.svg +12 -0
- package/fonts/italianno/svg/U+002b.tsx +14 -0
- package/fonts/italianno/svg/U+002c.svg +12 -0
- package/fonts/italianno/svg/U+002c.tsx +14 -0
- package/fonts/italianno/svg/U+002d.svg +7 -0
- package/fonts/italianno/svg/U+002d.tsx +9 -0
- package/fonts/italianno/svg/U+002e.svg +7 -0
- package/fonts/italianno/svg/U+002e.tsx +9 -0
- package/fonts/italianno/svg/U+002f.svg +7 -0
- package/fonts/italianno/svg/U+002f.tsx +9 -0
- package/fonts/italianno/svg/U+003a.svg +12 -0
- package/fonts/italianno/svg/U+003a.tsx +14 -0
- package/fonts/italianno/svg/U+003b.svg +12 -0
- package/fonts/italianno/svg/U+003b.tsx +14 -0
- package/fonts/italianno/svg/U+003c.svg +7 -0
- package/fonts/italianno/svg/U+003c.tsx +9 -0
- package/fonts/italianno/svg/U+003d.svg +12 -0
- package/fonts/italianno/svg/U+003d.tsx +14 -0
- package/fonts/italianno/svg/U+003e.svg +12 -0
- package/fonts/italianno/svg/U+003e.tsx +14 -0
- package/fonts/italianno/svg/U+003f.svg +12 -0
- package/fonts/italianno/svg/U+003f.tsx +14 -0
- package/fonts/italianno/svg/U+0040.svg +15 -0
- package/fonts/italianno/svg/U+0040.tsx +17 -0
- package/fonts/italianno/svg/U+005c.svg +7 -0
- package/fonts/italianno/svg/U+005c.tsx +9 -0
- package/fonts/italianno/svg/U+005e.svg +12 -0
- package/fonts/italianno/svg/U+005e.tsx +14 -0
- package/fonts/italianno/svg/U+005f.svg +3 -0
- package/fonts/italianno/svg/U+005f.tsx +5 -0
- package/fonts/italianno/svg/U+0060.svg +10 -0
- package/fonts/italianno/svg/U+0060.tsx +12 -0
- package/fonts/italianno/svg/U+007c.svg +7 -0
- package/fonts/italianno/svg/U+007c.tsx +9 -0
- package/fonts/italianno/svg/U+007e.svg +7 -0
- package/fonts/italianno/svg/U+007e.tsx +9 -0
- package/fonts/italianno/svg/a.svg +12 -0
- package/fonts/italianno/svg/a.tsx +14 -0
- package/fonts/italianno/svg/b.svg +10 -0
- package/fonts/italianno/svg/b.tsx +12 -0
- package/fonts/italianno/svg/c.svg +10 -0
- package/fonts/italianno/svg/c.tsx +12 -0
- package/fonts/italianno/svg/d.svg +15 -0
- package/fonts/italianno/svg/d.tsx +17 -0
- package/fonts/italianno/svg/e.svg +12 -0
- package/fonts/italianno/svg/e.tsx +14 -0
- package/fonts/italianno/svg/f.svg +12 -0
- package/fonts/italianno/svg/f.tsx +14 -0
- package/fonts/italianno/svg/g.svg +12 -0
- package/fonts/italianno/svg/g.tsx +14 -0
- package/fonts/italianno/svg/h.svg +12 -0
- package/fonts/italianno/svg/h.tsx +14 -0
- package/fonts/italianno/svg/i.svg +17 -0
- package/fonts/italianno/svg/i.tsx +19 -0
- package/fonts/italianno/svg/j.svg +12 -0
- package/fonts/italianno/svg/j.tsx +14 -0
- package/fonts/italianno/svg/k.svg +17 -0
- package/fonts/italianno/svg/k.tsx +19 -0
- package/fonts/italianno/svg/l.svg +15 -0
- package/fonts/italianno/svg/l.tsx +17 -0
- package/fonts/italianno/svg/m.svg +27 -0
- package/fonts/italianno/svg/m.tsx +29 -0
- package/fonts/italianno/svg/n.svg +22 -0
- package/fonts/italianno/svg/n.tsx +24 -0
- package/fonts/italianno/svg/o.svg +20 -0
- package/fonts/italianno/svg/o.tsx +22 -0
- package/fonts/italianno/svg/p.svg +12 -0
- package/fonts/italianno/svg/p.tsx +14 -0
- package/fonts/italianno/svg/q.svg +17 -0
- package/fonts/italianno/svg/q.tsx +19 -0
- package/fonts/italianno/svg/r.svg +22 -0
- package/fonts/italianno/svg/r.tsx +24 -0
- package/fonts/italianno/svg/s.svg +15 -0
- package/fonts/italianno/svg/s.tsx +17 -0
- package/fonts/italianno/svg/t.svg +17 -0
- package/fonts/italianno/svg/t.tsx +19 -0
- package/fonts/italianno/svg/u.svg +12 -0
- package/fonts/italianno/svg/u.tsx +14 -0
- package/fonts/italianno/svg/upper_A.svg +17 -0
- package/fonts/italianno/svg/upper_A.tsx +19 -0
- package/fonts/italianno/svg/upper_B.svg +27 -0
- package/fonts/italianno/svg/upper_B.tsx +29 -0
- package/fonts/italianno/svg/upper_C.svg +7 -0
- package/fonts/italianno/svg/upper_C.tsx +9 -0
- package/fonts/italianno/svg/upper_D.svg +12 -0
- package/fonts/italianno/svg/upper_D.tsx +14 -0
- package/fonts/italianno/svg/upper_E.svg +17 -0
- package/fonts/italianno/svg/upper_E.tsx +19 -0
- package/fonts/italianno/svg/upper_F.svg +17 -0
- package/fonts/italianno/svg/upper_F.tsx +19 -0
- package/fonts/italianno/svg/upper_G.svg +20 -0
- package/fonts/italianno/svg/upper_G.tsx +22 -0
- package/fonts/italianno/svg/upper_H.svg +17 -0
- package/fonts/italianno/svg/upper_H.tsx +19 -0
- package/fonts/italianno/svg/upper_I.svg +12 -0
- package/fonts/italianno/svg/upper_I.tsx +14 -0
- package/fonts/italianno/svg/upper_J.svg +10 -0
- package/fonts/italianno/svg/upper_J.tsx +12 -0
- package/fonts/italianno/svg/upper_K.svg +20 -0
- package/fonts/italianno/svg/upper_K.tsx +22 -0
- package/fonts/italianno/svg/upper_L.svg +12 -0
- package/fonts/italianno/svg/upper_L.tsx +14 -0
- package/fonts/italianno/svg/upper_M.svg +17 -0
- package/fonts/italianno/svg/upper_M.tsx +19 -0
- package/fonts/italianno/svg/upper_N.svg +17 -0
- package/fonts/italianno/svg/upper_N.tsx +19 -0
- package/fonts/italianno/svg/upper_O.svg +17 -0
- package/fonts/italianno/svg/upper_O.tsx +19 -0
- package/fonts/italianno/svg/upper_P.svg +22 -0
- package/fonts/italianno/svg/upper_P.tsx +24 -0
- package/fonts/italianno/svg/upper_Q.svg +12 -0
- package/fonts/italianno/svg/upper_Q.tsx +14 -0
- package/fonts/italianno/svg/upper_R.svg +15 -0
- package/fonts/italianno/svg/upper_R.tsx +17 -0
- package/fonts/italianno/svg/upper_S.svg +12 -0
- package/fonts/italianno/svg/upper_S.tsx +14 -0
- package/fonts/italianno/svg/upper_T.svg +17 -0
- package/fonts/italianno/svg/upper_T.tsx +19 -0
- package/fonts/italianno/svg/upper_U.svg +17 -0
- package/fonts/italianno/svg/upper_U.tsx +19 -0
- package/fonts/italianno/svg/upper_V.svg +17 -0
- package/fonts/italianno/svg/upper_V.tsx +19 -0
- package/fonts/italianno/svg/upper_W.svg +17 -0
- package/fonts/italianno/svg/upper_W.tsx +19 -0
- package/fonts/italianno/svg/upper_X.svg +22 -0
- package/fonts/italianno/svg/upper_X.tsx +24 -0
- package/fonts/italianno/svg/upper_Y.svg +22 -0
- package/fonts/italianno/svg/upper_Y.tsx +24 -0
- package/fonts/italianno/svg/upper_Z.svg +12 -0
- package/fonts/italianno/svg/upper_Z.tsx +14 -0
- package/fonts/italianno/svg/v.svg +17 -0
- package/fonts/italianno/svg/v.tsx +19 -0
- package/fonts/italianno/svg/w.svg +17 -0
- package/fonts/italianno/svg/w.tsx +19 -0
- package/fonts/italianno/svg/x.svg +15 -0
- package/fonts/italianno/svg/x.tsx +17 -0
- package/fonts/italianno/svg/y.svg +12 -0
- package/fonts/italianno/svg/y.tsx +14 -0
- package/fonts/italianno/svg/z.svg +17 -0
- package/fonts/italianno/svg/z.tsx +19 -0
- package/fonts/parisienne/bundle.ts +300 -0
- package/fonts/parisienne/font.json +36222 -0
- package/fonts/parisienne/glyphData.json +1 -0
- package/fonts/parisienne/parisienne.ttf +0 -0
- package/fonts/parisienne/svg/0.svg +7 -0
- package/fonts/parisienne/svg/0.tsx +9 -0
- package/fonts/parisienne/svg/1.svg +12 -0
- package/fonts/parisienne/svg/1.tsx +14 -0
- package/fonts/parisienne/svg/2.svg +7 -0
- package/fonts/parisienne/svg/2.tsx +9 -0
- package/fonts/parisienne/svg/3.svg +7 -0
- package/fonts/parisienne/svg/3.tsx +9 -0
- package/fonts/parisienne/svg/4.svg +17 -0
- package/fonts/parisienne/svg/4.tsx +19 -0
- package/fonts/parisienne/svg/5.svg +10 -0
- package/fonts/parisienne/svg/5.tsx +12 -0
- package/fonts/parisienne/svg/6.svg +7 -0
- package/fonts/parisienne/svg/6.tsx +9 -0
- package/fonts/parisienne/svg/7.svg +12 -0
- package/fonts/parisienne/svg/7.tsx +14 -0
- package/fonts/parisienne/svg/8.svg +7 -0
- package/fonts/parisienne/svg/8.tsx +9 -0
- package/fonts/parisienne/svg/9.svg +7 -0
- package/fonts/parisienne/svg/9.tsx +9 -0
- package/fonts/parisienne/svg/U+0021.svg +10 -0
- package/fonts/parisienne/svg/U+0021.tsx +12 -0
- package/fonts/parisienne/svg/U+0022.svg +12 -0
- package/fonts/parisienne/svg/U+0022.tsx +14 -0
- package/fonts/parisienne/svg/U+0023.svg +22 -0
- package/fonts/parisienne/svg/U+0023.tsx +24 -0
- package/fonts/parisienne/svg/U+0024.svg +15 -0
- package/fonts/parisienne/svg/U+0024.tsx +17 -0
- package/fonts/parisienne/svg/U+0025.svg +22 -0
- package/fonts/parisienne/svg/U+0025.tsx +24 -0
- package/fonts/parisienne/svg/U+0026.svg +17 -0
- package/fonts/parisienne/svg/U+0026.tsx +19 -0
- package/fonts/parisienne/svg/U+0027.svg +7 -0
- package/fonts/parisienne/svg/U+0027.tsx +9 -0
- package/fonts/parisienne/svg/U+0028.svg +7 -0
- package/fonts/parisienne/svg/U+0028.tsx +9 -0
- package/fonts/parisienne/svg/U+0029.svg +7 -0
- package/fonts/parisienne/svg/U+0029.tsx +9 -0
- package/fonts/parisienne/svg/U+002a.svg +22 -0
- package/fonts/parisienne/svg/U+002a.tsx +24 -0
- package/fonts/parisienne/svg/U+002b.svg +12 -0
- package/fonts/parisienne/svg/U+002b.tsx +14 -0
- package/fonts/parisienne/svg/U+002c.svg +7 -0
- package/fonts/parisienne/svg/U+002c.tsx +9 -0
- package/fonts/parisienne/svg/U+002d.svg +7 -0
- package/fonts/parisienne/svg/U+002d.tsx +9 -0
- package/fonts/parisienne/svg/U+002e.svg +7 -0
- package/fonts/parisienne/svg/U+002e.tsx +9 -0
- package/fonts/parisienne/svg/U+002f.svg +7 -0
- package/fonts/parisienne/svg/U+002f.tsx +9 -0
- package/fonts/parisienne/svg/U+003a.svg +8 -0
- package/fonts/parisienne/svg/U+003a.tsx +10 -0
- package/fonts/parisienne/svg/U+003b.svg +10 -0
- package/fonts/parisienne/svg/U+003b.tsx +12 -0
- package/fonts/parisienne/svg/U+003c.svg +7 -0
- package/fonts/parisienne/svg/U+003c.tsx +9 -0
- package/fonts/parisienne/svg/U+003d.svg +12 -0
- package/fonts/parisienne/svg/U+003d.tsx +14 -0
- package/fonts/parisienne/svg/U+003e.svg +7 -0
- package/fonts/parisienne/svg/U+003e.tsx +9 -0
- package/fonts/parisienne/svg/U+003f.svg +10 -0
- package/fonts/parisienne/svg/U+003f.tsx +12 -0
- package/fonts/parisienne/svg/U+0040.svg +15 -0
- package/fonts/parisienne/svg/U+0040.tsx +17 -0
- package/fonts/parisienne/svg/U+005c.svg +7 -0
- package/fonts/parisienne/svg/U+005c.tsx +9 -0
- package/fonts/parisienne/svg/U+005e.svg +7 -0
- package/fonts/parisienne/svg/U+005e.tsx +9 -0
- package/fonts/parisienne/svg/U+005f.svg +7 -0
- package/fonts/parisienne/svg/U+005f.tsx +9 -0
- package/fonts/parisienne/svg/U+0060.svg +10 -0
- package/fonts/parisienne/svg/U+0060.tsx +12 -0
- package/fonts/parisienne/svg/U+007c.svg +7 -0
- package/fonts/parisienne/svg/U+007c.tsx +9 -0
- package/fonts/parisienne/svg/U+007e.svg +7 -0
- package/fonts/parisienne/svg/U+007e.tsx +9 -0
- package/fonts/parisienne/svg/a.svg +15 -0
- package/fonts/parisienne/svg/a.tsx +17 -0
- package/fonts/parisienne/svg/b.svg +7 -0
- package/fonts/parisienne/svg/b.tsx +9 -0
- package/fonts/parisienne/svg/c.svg +12 -0
- package/fonts/parisienne/svg/c.tsx +14 -0
- package/fonts/parisienne/svg/d.svg +12 -0
- package/fonts/parisienne/svg/d.tsx +14 -0
- package/fonts/parisienne/svg/e.svg +17 -0
- package/fonts/parisienne/svg/e.tsx +19 -0
- package/fonts/parisienne/svg/f.svg +12 -0
- package/fonts/parisienne/svg/f.tsx +14 -0
- package/fonts/parisienne/svg/g.svg +10 -0
- package/fonts/parisienne/svg/g.tsx +12 -0
- package/fonts/parisienne/svg/h.svg +12 -0
- package/fonts/parisienne/svg/h.tsx +14 -0
- package/fonts/parisienne/svg/i.svg +12 -0
- package/fonts/parisienne/svg/i.tsx +14 -0
- package/fonts/parisienne/svg/j.svg +17 -0
- package/fonts/parisienne/svg/j.tsx +19 -0
- package/fonts/parisienne/svg/k.svg +17 -0
- package/fonts/parisienne/svg/k.tsx +19 -0
- package/fonts/parisienne/svg/l.svg +7 -0
- package/fonts/parisienne/svg/l.tsx +9 -0
- package/fonts/parisienne/svg/m.svg +17 -0
- package/fonts/parisienne/svg/m.tsx +19 -0
- package/fonts/parisienne/svg/n.svg +12 -0
- package/fonts/parisienne/svg/n.tsx +14 -0
- package/fonts/parisienne/svg/o.svg +15 -0
- package/fonts/parisienne/svg/o.tsx +17 -0
- package/fonts/parisienne/svg/p.svg +12 -0
- package/fonts/parisienne/svg/p.tsx +14 -0
- package/fonts/parisienne/svg/q.svg +12 -0
- package/fonts/parisienne/svg/q.tsx +14 -0
- package/fonts/parisienne/svg/r.svg +7 -0
- package/fonts/parisienne/svg/r.tsx +9 -0
- package/fonts/parisienne/svg/s.svg +17 -0
- package/fonts/parisienne/svg/s.tsx +19 -0
- package/fonts/parisienne/svg/t.svg +20 -0
- package/fonts/parisienne/svg/t.tsx +22 -0
- package/fonts/parisienne/svg/u.svg +12 -0
- package/fonts/parisienne/svg/u.tsx +14 -0
- package/fonts/parisienne/svg/upper_A.svg +10 -0
- package/fonts/parisienne/svg/upper_A.tsx +12 -0
- package/fonts/parisienne/svg/upper_B.svg +12 -0
- package/fonts/parisienne/svg/upper_B.tsx +14 -0
- package/fonts/parisienne/svg/upper_C.svg +7 -0
- package/fonts/parisienne/svg/upper_C.tsx +9 -0
- package/fonts/parisienne/svg/upper_D.svg +7 -0
- package/fonts/parisienne/svg/upper_D.tsx +9 -0
- package/fonts/parisienne/svg/upper_E.svg +10 -0
- package/fonts/parisienne/svg/upper_E.tsx +12 -0
- package/fonts/parisienne/svg/upper_F.svg +22 -0
- package/fonts/parisienne/svg/upper_F.tsx +24 -0
- package/fonts/parisienne/svg/upper_G.svg +15 -0
- package/fonts/parisienne/svg/upper_G.tsx +17 -0
- package/fonts/parisienne/svg/upper_H.svg +15 -0
- package/fonts/parisienne/svg/upper_H.tsx +17 -0
- package/fonts/parisienne/svg/upper_I.svg +15 -0
- package/fonts/parisienne/svg/upper_I.tsx +17 -0
- package/fonts/parisienne/svg/upper_J.svg +15 -0
- package/fonts/parisienne/svg/upper_J.tsx +17 -0
- package/fonts/parisienne/svg/upper_K.svg +12 -0
- package/fonts/parisienne/svg/upper_K.tsx +14 -0
- package/fonts/parisienne/svg/upper_L.svg +7 -0
- package/fonts/parisienne/svg/upper_L.tsx +9 -0
- package/fonts/parisienne/svg/upper_M.svg +15 -0
- package/fonts/parisienne/svg/upper_M.tsx +17 -0
- package/fonts/parisienne/svg/upper_N.svg +12 -0
- package/fonts/parisienne/svg/upper_N.tsx +14 -0
- package/fonts/parisienne/svg/upper_O.svg +7 -0
- package/fonts/parisienne/svg/upper_O.tsx +9 -0
- package/fonts/parisienne/svg/upper_P.svg +12 -0
- package/fonts/parisienne/svg/upper_P.tsx +14 -0
- package/fonts/parisienne/svg/upper_Q.svg +15 -0
- package/fonts/parisienne/svg/upper_Q.tsx +17 -0
- package/fonts/parisienne/svg/upper_R.svg +12 -0
- package/fonts/parisienne/svg/upper_R.tsx +14 -0
- package/fonts/parisienne/svg/upper_S.svg +7 -0
- package/fonts/parisienne/svg/upper_S.tsx +9 -0
- package/fonts/parisienne/svg/upper_T.svg +12 -0
- package/fonts/parisienne/svg/upper_T.tsx +14 -0
- package/fonts/parisienne/svg/upper_U.svg +17 -0
- package/fonts/parisienne/svg/upper_U.tsx +19 -0
- package/fonts/parisienne/svg/upper_V.svg +7 -0
- package/fonts/parisienne/svg/upper_V.tsx +9 -0
- package/fonts/parisienne/svg/upper_W.svg +12 -0
- package/fonts/parisienne/svg/upper_W.tsx +14 -0
- package/fonts/parisienne/svg/upper_X.svg +27 -0
- package/fonts/parisienne/svg/upper_X.tsx +29 -0
- package/fonts/parisienne/svg/upper_Y.svg +15 -0
- package/fonts/parisienne/svg/upper_Y.tsx +17 -0
- package/fonts/parisienne/svg/upper_Z.svg +12 -0
- package/fonts/parisienne/svg/upper_Z.tsx +14 -0
- package/fonts/parisienne/svg/v.svg +7 -0
- package/fonts/parisienne/svg/v.tsx +9 -0
- package/fonts/parisienne/svg/w.svg +17 -0
- package/fonts/parisienne/svg/w.tsx +19 -0
- package/fonts/parisienne/svg/x.svg +17 -0
- package/fonts/parisienne/svg/x.tsx +19 -0
- package/fonts/parisienne/svg/y.svg +17 -0
- package/fonts/parisienne/svg/y.tsx +19 -0
- package/fonts/parisienne/svg/z.svg +12 -0
- package/fonts/parisienne/svg/z.tsx +14 -0
- package/fonts/tangerine/bundle.ts +300 -0
- package/fonts/tangerine/font.json +31512 -0
- package/fonts/tangerine/glyphData.json +1 -0
- package/fonts/tangerine/svg/0.svg +7 -0
- package/fonts/tangerine/svg/0.tsx +9 -0
- package/fonts/tangerine/svg/1.svg +12 -0
- package/fonts/tangerine/svg/1.tsx +14 -0
- package/fonts/tangerine/svg/2.svg +12 -0
- package/fonts/tangerine/svg/2.tsx +14 -0
- package/fonts/tangerine/svg/3.svg +12 -0
- package/fonts/tangerine/svg/3.tsx +14 -0
- package/fonts/tangerine/svg/4.svg +12 -0
- package/fonts/tangerine/svg/4.tsx +14 -0
- package/fonts/tangerine/svg/5.svg +7 -0
- package/fonts/tangerine/svg/5.tsx +9 -0
- package/fonts/tangerine/svg/6.svg +7 -0
- package/fonts/tangerine/svg/6.tsx +9 -0
- package/fonts/tangerine/svg/7.svg +12 -0
- package/fonts/tangerine/svg/7.tsx +14 -0
- package/fonts/tangerine/svg/8.svg +7 -0
- package/fonts/tangerine/svg/8.tsx +9 -0
- package/fonts/tangerine/svg/9.svg +7 -0
- package/fonts/tangerine/svg/9.tsx +9 -0
- package/fonts/tangerine/svg/U+0021.svg +12 -0
- package/fonts/tangerine/svg/U+0021.tsx +14 -0
- package/fonts/tangerine/svg/U+0022.svg +12 -0
- package/fonts/tangerine/svg/U+0022.tsx +14 -0
- package/fonts/tangerine/svg/U+0023.svg +22 -0
- package/fonts/tangerine/svg/U+0023.tsx +24 -0
- package/fonts/tangerine/svg/U+0024.svg +12 -0
- package/fonts/tangerine/svg/U+0024.tsx +14 -0
- package/fonts/tangerine/svg/U+0025.svg +17 -0
- package/fonts/tangerine/svg/U+0025.tsx +19 -0
- package/fonts/tangerine/svg/U+0026.svg +7 -0
- package/fonts/tangerine/svg/U+0026.tsx +9 -0
- package/fonts/tangerine/svg/U+0027.svg +7 -0
- package/fonts/tangerine/svg/U+0027.tsx +9 -0
- package/fonts/tangerine/svg/U+0028.svg +7 -0
- package/fonts/tangerine/svg/U+0028.tsx +9 -0
- package/fonts/tangerine/svg/U+0029.svg +7 -0
- package/fonts/tangerine/svg/U+0029.tsx +9 -0
- package/fonts/tangerine/svg/U+002a.svg +17 -0
- package/fonts/tangerine/svg/U+002a.tsx +19 -0
- package/fonts/tangerine/svg/U+002b.svg +12 -0
- package/fonts/tangerine/svg/U+002b.tsx +14 -0
- package/fonts/tangerine/svg/U+002c.svg +10 -0
- package/fonts/tangerine/svg/U+002c.tsx +12 -0
- package/fonts/tangerine/svg/U+002d.svg +7 -0
- package/fonts/tangerine/svg/U+002d.tsx +9 -0
- package/fonts/tangerine/svg/U+002e.svg +10 -0
- package/fonts/tangerine/svg/U+002e.tsx +12 -0
- package/fonts/tangerine/svg/U+002f.svg +7 -0
- package/fonts/tangerine/svg/U+002f.tsx +9 -0
- package/fonts/tangerine/svg/U+003a.svg +12 -0
- package/fonts/tangerine/svg/U+003a.tsx +14 -0
- package/fonts/tangerine/svg/U+003b.svg +12 -0
- package/fonts/tangerine/svg/U+003b.tsx +14 -0
- package/fonts/tangerine/svg/U+003c.svg +12 -0
- package/fonts/tangerine/svg/U+003c.tsx +14 -0
- package/fonts/tangerine/svg/U+003d.svg +12 -0
- package/fonts/tangerine/svg/U+003d.tsx +14 -0
- package/fonts/tangerine/svg/U+003e.svg +12 -0
- package/fonts/tangerine/svg/U+003e.tsx +14 -0
- package/fonts/tangerine/svg/U+003f.svg +12 -0
- package/fonts/tangerine/svg/U+003f.tsx +14 -0
- package/fonts/tangerine/svg/U+0040.svg +15 -0
- package/fonts/tangerine/svg/U+0040.tsx +17 -0
- package/fonts/tangerine/svg/U+005c.svg +7 -0
- package/fonts/tangerine/svg/U+005c.tsx +9 -0
- package/fonts/tangerine/svg/U+005e.svg +12 -0
- package/fonts/tangerine/svg/U+005e.tsx +14 -0
- package/fonts/tangerine/svg/U+005f.svg +7 -0
- package/fonts/tangerine/svg/U+005f.tsx +9 -0
- package/fonts/tangerine/svg/U+0060.svg +7 -0
- package/fonts/tangerine/svg/U+0060.tsx +9 -0
- package/fonts/tangerine/svg/U+007c.svg +7 -0
- package/fonts/tangerine/svg/U+007c.tsx +9 -0
- package/fonts/tangerine/svg/U+007e.svg +7 -0
- package/fonts/tangerine/svg/U+007e.tsx +9 -0
- package/fonts/tangerine/svg/a.svg +12 -0
- package/fonts/tangerine/svg/a.tsx +14 -0
- package/fonts/tangerine/svg/b.svg +7 -0
- package/fonts/tangerine/svg/b.tsx +9 -0
- package/fonts/tangerine/svg/c.svg +7 -0
- package/fonts/tangerine/svg/c.tsx +9 -0
- package/fonts/tangerine/svg/d.svg +12 -0
- package/fonts/tangerine/svg/d.tsx +14 -0
- package/fonts/tangerine/svg/e.svg +15 -0
- package/fonts/tangerine/svg/e.tsx +17 -0
- package/fonts/tangerine/svg/f.svg +15 -0
- package/fonts/tangerine/svg/f.tsx +17 -0
- package/fonts/tangerine/svg/g.svg +12 -0
- package/fonts/tangerine/svg/g.tsx +14 -0
- package/fonts/tangerine/svg/h.svg +12 -0
- package/fonts/tangerine/svg/h.tsx +14 -0
- package/fonts/tangerine/svg/i.svg +15 -0
- package/fonts/tangerine/svg/i.tsx +17 -0
- package/fonts/tangerine/svg/j.svg +12 -0
- package/fonts/tangerine/svg/j.tsx +14 -0
- package/fonts/tangerine/svg/k.svg +12 -0
- package/fonts/tangerine/svg/k.tsx +14 -0
- package/fonts/tangerine/svg/l.svg +7 -0
- package/fonts/tangerine/svg/l.tsx +9 -0
- package/fonts/tangerine/svg/m.svg +17 -0
- package/fonts/tangerine/svg/m.tsx +19 -0
- package/fonts/tangerine/svg/n.svg +12 -0
- package/fonts/tangerine/svg/n.tsx +14 -0
- package/fonts/tangerine/svg/o.svg +12 -0
- package/fonts/tangerine/svg/o.tsx +14 -0
- package/fonts/tangerine/svg/p.svg +17 -0
- package/fonts/tangerine/svg/p.tsx +19 -0
- package/fonts/tangerine/svg/q.svg +15 -0
- package/fonts/tangerine/svg/q.tsx +17 -0
- package/fonts/tangerine/svg/r.svg +17 -0
- package/fonts/tangerine/svg/r.tsx +19 -0
- package/fonts/tangerine/svg/s.svg +10 -0
- package/fonts/tangerine/svg/s.tsx +12 -0
- package/fonts/tangerine/svg/t.svg +17 -0
- package/fonts/tangerine/svg/t.tsx +19 -0
- package/fonts/tangerine/svg/u.svg +17 -0
- package/fonts/tangerine/svg/u.tsx +19 -0
- package/fonts/tangerine/svg/upper_A.svg +20 -0
- package/fonts/tangerine/svg/upper_A.tsx +22 -0
- package/fonts/tangerine/svg/upper_B.svg +17 -0
- package/fonts/tangerine/svg/upper_B.tsx +19 -0
- package/fonts/tangerine/svg/upper_C.svg +7 -0
- package/fonts/tangerine/svg/upper_C.tsx +9 -0
- package/fonts/tangerine/svg/upper_D.svg +12 -0
- package/fonts/tangerine/svg/upper_D.tsx +14 -0
- package/fonts/tangerine/svg/upper_E.svg +7 -0
- package/fonts/tangerine/svg/upper_E.tsx +9 -0
- package/fonts/tangerine/svg/upper_F.svg +17 -0
- package/fonts/tangerine/svg/upper_F.tsx +19 -0
- package/fonts/tangerine/svg/upper_G.svg +12 -0
- package/fonts/tangerine/svg/upper_G.tsx +14 -0
- package/fonts/tangerine/svg/upper_H.svg +12 -0
- package/fonts/tangerine/svg/upper_H.tsx +14 -0
- package/fonts/tangerine/svg/upper_I.svg +7 -0
- package/fonts/tangerine/svg/upper_I.tsx +9 -0
- package/fonts/tangerine/svg/upper_J.svg +7 -0
- package/fonts/tangerine/svg/upper_J.tsx +9 -0
- package/fonts/tangerine/svg/upper_K.svg +17 -0
- package/fonts/tangerine/svg/upper_K.tsx +19 -0
- package/fonts/tangerine/svg/upper_L.svg +7 -0
- package/fonts/tangerine/svg/upper_L.tsx +9 -0
- package/fonts/tangerine/svg/upper_M.svg +12 -0
- package/fonts/tangerine/svg/upper_M.tsx +14 -0
- package/fonts/tangerine/svg/upper_N.svg +15 -0
- package/fonts/tangerine/svg/upper_N.tsx +17 -0
- package/fonts/tangerine/svg/upper_O.svg +7 -0
- package/fonts/tangerine/svg/upper_O.tsx +9 -0
- package/fonts/tangerine/svg/upper_P.svg +12 -0
- package/fonts/tangerine/svg/upper_P.tsx +14 -0
- package/fonts/tangerine/svg/upper_Q.svg +12 -0
- package/fonts/tangerine/svg/upper_Q.tsx +14 -0
- package/fonts/tangerine/svg/upper_R.svg +12 -0
- package/fonts/tangerine/svg/upper_R.tsx +14 -0
- package/fonts/tangerine/svg/upper_S.svg +7 -0
- package/fonts/tangerine/svg/upper_S.tsx +9 -0
- package/fonts/tangerine/svg/upper_T.svg +7 -0
- package/fonts/tangerine/svg/upper_T.tsx +9 -0
- package/fonts/tangerine/svg/upper_U.svg +12 -0
- package/fonts/tangerine/svg/upper_U.tsx +14 -0
- package/fonts/tangerine/svg/upper_V.svg +12 -0
- package/fonts/tangerine/svg/upper_V.tsx +14 -0
- package/fonts/tangerine/svg/upper_W.svg +17 -0
- package/fonts/tangerine/svg/upper_W.tsx +19 -0
- package/fonts/tangerine/svg/upper_X.svg +12 -0
- package/fonts/tangerine/svg/upper_X.tsx +14 -0
- package/fonts/tangerine/svg/upper_Y.svg +12 -0
- package/fonts/tangerine/svg/upper_Y.tsx +14 -0
- package/fonts/tangerine/svg/upper_Z.svg +17 -0
- package/fonts/tangerine/svg/upper_Z.tsx +19 -0
- package/fonts/tangerine/svg/v.svg +12 -0
- package/fonts/tangerine/svg/v.tsx +14 -0
- package/fonts/tangerine/svg/w.svg +25 -0
- package/fonts/tangerine/svg/w.tsx +27 -0
- package/fonts/tangerine/svg/x.svg +17 -0
- package/fonts/tangerine/svg/x.tsx +19 -0
- package/fonts/tangerine/svg/y.svg +12 -0
- package/fonts/tangerine/svg/y.tsx +14 -0
- package/fonts/tangerine/svg/z.svg +20 -0
- package/fonts/tangerine/svg/z.tsx +22 -0
- package/fonts/tangerine/tangerine.ttf +0 -0
- package/package.json +64 -6
- package/src/env.d.ts +10 -0
- package/src/index.ts +10 -0
- package/src/lib/TegakiRenderer.tsx +611 -0
- package/src/lib/drawFallbackGlyph.ts +70 -0
- package/src/lib/drawGlyph.ts +374 -0
- package/src/lib/effects.ts +56 -0
- package/src/lib/textLayout.ts +114 -0
- package/src/lib/timeline.ts +65 -0
- package/src/lib/utils.ts +22 -0
- package/src/types.test.ts +92 -0
- package/src/types.ts +114 -0
- package/index.js +0 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# tegaki
|
|
2
|
+
|
|
3
|
+
## 0.2.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`d171776`](https://github.com/KurtGokhan/tegaki/commit/d171776e48eae2063246209e8b56bf9e9185f4c7) Thanks [@KurtGokhan](https://github.com/KurtGokhan)! - Fix layout issues when font is being loaded. Fix layout being calculated with ligatures.
|
|
8
|
+
|
|
9
|
+
## 0.2.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [`4f5c639`](https://github.com/KurtGokhan/tegaki/commit/4f5c639799056093a8797dbb6a84cd6989500811) Thanks [@KurtGokhan](https://github.com/KurtGokhan)! - changeset fix
|
|
14
|
+
|
|
15
|
+
## 0.2.1
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- [`1b079f5`](https://github.com/KurtGokhan/tegaki/commit/1b079f5dd6cb174b9b272c5e217dd1df1e5c0b12) Thanks [@KurtGokhan](https://github.com/KurtGokhan)! - initial release
|
|
20
|
+
|
|
21
|
+
## 0.2.0
|
|
22
|
+
|
|
23
|
+
### Minor Changes
|
|
24
|
+
|
|
25
|
+
- [`273bd36`](https://github.com/KurtGokhan/tegaki/commit/273bd36ece40ad3629aad2f62d3bcf3849a59cf0) Thanks [@KurtGokhan](https://github.com/KurtGokhan)! - Beta release of Tegaki, a handwriting animation library for JavaScript and React. This release includes basic support for rendering handwriting animations, as well as a browser based animation generator. Future updates will focus on improving stroke orders for better natural handwriting estimation. We welcome feedback and contributions from the community to help make Tegaki even better!
|
package/FONTS-LICENSE.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Bundled Font Licenses
|
|
2
|
+
|
|
3
|
+
The `tegaki` package includes pre-generated bundles for the following fonts.
|
|
4
|
+
All fonts are licensed under the [SIL Open Font License, Version 1.1](https://openfontlicense.org/).
|
|
5
|
+
|
|
6
|
+
## Caveat
|
|
7
|
+
|
|
8
|
+
- **Designer**: Impallari Type
|
|
9
|
+
- **Copyright**: Copyright 2014 The Caveat Project Authors (https://github.com/googlefonts/caveat)
|
|
10
|
+
- **License**: SIL Open Font License, Version 1.1
|
|
11
|
+
|
|
12
|
+
## Italianno
|
|
13
|
+
|
|
14
|
+
- **Designer**: Robert Leuschke
|
|
15
|
+
- **Copyright**: Copyright 2009 The Italianno Project Authors (https://github.com/googlefonts/italianno)
|
|
16
|
+
- **License**: SIL Open Font License, Version 1.1
|
|
17
|
+
|
|
18
|
+
## Tangerine
|
|
19
|
+
|
|
20
|
+
- **Designer**: Toshi Omagari
|
|
21
|
+
- **Copyright**: Copyright (c) 2010 by Toshi Omagari
|
|
22
|
+
- **License**: SIL Open Font License, Version 1.1
|
|
23
|
+
|
|
24
|
+
## Parisienne
|
|
25
|
+
|
|
26
|
+
- **Designer**: Brian J. Bonislawsky (Astigmatic)
|
|
27
|
+
- **Copyright**: Copyright (c) 2012 by Brian J. Bonislawsky DBA Astigmatic (AOETI)
|
|
28
|
+
- **License**: SIL Open Font License, Version 1.1
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## SIL Open Font License, Version 1.1
|
|
33
|
+
|
|
34
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
35
|
+
the Font Software, to use, study, copy, merge, embed, modify, redistribute, and
|
|
36
|
+
sell modified and unmodified copies of the Font Software, subject to the
|
|
37
|
+
following conditions:
|
|
38
|
+
|
|
39
|
+
1. Neither the Font Software nor any of its individual components, in Original
|
|
40
|
+
or Modified Versions, may be sold by itself.
|
|
41
|
+
|
|
42
|
+
2. Original or Modified Versions of the Font Software may be bundled,
|
|
43
|
+
redistributed and/or sold with any software, provided that each copy contains
|
|
44
|
+
the above copyright notice and this license. These can be included either as
|
|
45
|
+
stand-alone text files, human-readable headers or in the appropriate
|
|
46
|
+
machine-readable metadata fields within text or binary files as long as those
|
|
47
|
+
fields can be easily viewed by the user.
|
|
48
|
+
|
|
49
|
+
3. No Modified Version of the Font Software may use the Reserved Font Name(s)
|
|
50
|
+
unless explicit written permission is granted by the corresponding Copyright
|
|
51
|
+
Holder.
|
|
52
|
+
|
|
53
|
+
4. The Font Software, modified or unmodified, in part or in whole, must be
|
|
54
|
+
distributed entirely under this license, and must not be distributed under
|
|
55
|
+
any other license.
|
|
56
|
+
|
|
57
|
+
5. The Font Software may not be used in products or activities that are illegal
|
|
58
|
+
or harmful, or promote illegal or harmful actions.
|
|
59
|
+
|
|
60
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
61
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
62
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR
|
|
63
|
+
OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM,
|
|
64
|
+
DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL,
|
|
65
|
+
OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
66
|
+
ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER
|
|
67
|
+
DEALINGS IN THE FONT SOFTWARE.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Gokhan Kurt
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="media/tegaki-card.png" alt="Tegaki" width="640" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h3 align="center">Handwriting animation for any font</h3>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
Tegaki (手書き) generates stroke data from fonts and renders animated handwriting in React.<br />
|
|
9
|
+
No manual path authoring. No native dependencies. Just pick a font.
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
<a href="https://www.npmjs.com/package/tegaki"><img src="https://img.shields.io/npm/v/tegaki" alt="npm" /></a>
|
|
14
|
+
<a href="https://github.com/KurtGokhan/tegaki/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/tegaki" alt="license" /></a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## How it works
|
|
20
|
+
|
|
21
|
+
**1. Generate** a font bundle from any Google Font (or a local `.ttf`):
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx tegaki-generator generate "Caveat"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Each glyph is run through a processing pipeline — flatten bezier curves, rasterize, skeletonize via Zhang-Suen thinning, trace polylines, compute stroke widths via distance transform, determine stroke order — and the result is a set of animated SVGs with timing data.
|
|
28
|
+
|
|
29
|
+
**2. Render** the animated text in React:
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { TegakiRenderer } from 'tegaki';
|
|
33
|
+
import font from './output/caveat/bundle.ts';
|
|
34
|
+
|
|
35
|
+
await font.registerFontFace();
|
|
36
|
+
|
|
37
|
+
function App() {
|
|
38
|
+
return (
|
|
39
|
+
<TegakiRenderer font={font} style={{ fontSize: '48px' }}>
|
|
40
|
+
Hello World
|
|
41
|
+
</TegakiRenderer>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The text draws itself stroke by stroke, with accurate widths and natural timing.
|
|
47
|
+
|
|
48
|
+
## Install
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npm install tegaki
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The generator is a separate package, only needed at build time:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npm install -D tegaki-generator
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Built-in fonts
|
|
61
|
+
|
|
62
|
+
Tegaki ships with pre-generated bundles for four Google Fonts, ready to use without running the generator:
|
|
63
|
+
|
|
64
|
+
- **Caveat** — `tegaki/fonts/caveat`
|
|
65
|
+
- **Italianno** — `tegaki/fonts/italianno`
|
|
66
|
+
- **Tangerine** — `tegaki/fonts/tangerine`
|
|
67
|
+
- **Parisienne** — `tegaki/fonts/parisienne`
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
import { TegakiRenderer } from 'tegaki';
|
|
71
|
+
import caveat from 'tegaki/fonts/caveat';
|
|
72
|
+
|
|
73
|
+
await caveat.registerFontFace();
|
|
74
|
+
|
|
75
|
+
function App() {
|
|
76
|
+
return (
|
|
77
|
+
<TegakiRenderer font={caveat} style={{ fontSize: '48px' }}>
|
|
78
|
+
Hello World
|
|
79
|
+
</TegakiRenderer>
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
These bundles include all printable ASCII characters (letters, digits, punctuation). For other fonts, use the generator.
|
|
85
|
+
|
|
86
|
+
All bundled fonts are licensed under the [SIL Open Font License](https://openfontlicense.org/). See [FONTS-LICENSE.md](packages/renderer/FONTS-LICENSE.md) for full attribution.
|
|
87
|
+
|
|
88
|
+
## `<TegakiRenderer>` props
|
|
89
|
+
|
|
90
|
+
| Prop | Type | Default | Description |
|
|
91
|
+
|------|------|---------|-------------|
|
|
92
|
+
| `font` | `TegakiBundle` | — | Font bundle with animated glyph SVGs |
|
|
93
|
+
| `text` | `string` | — | Text to animate (or pass as `children`) |
|
|
94
|
+
| `children` | `string \| number` | — | Text content, coerced to string |
|
|
95
|
+
| `time` | `TimeControlProp` | — | Time control mode (see below) |
|
|
96
|
+
| `onComplete` | `() => void` | — | Called when animation reaches the end |
|
|
97
|
+
| `mode` | `'svg' \| 'canvas'` | `'svg'` | Rendering mode |
|
|
98
|
+
| `showOverlay` | `boolean` | `false` | Show debug text overlay |
|
|
99
|
+
|
|
100
|
+
Plus all standard `<div>` props (`className`, `style`, etc.).
|
|
101
|
+
|
|
102
|
+
### Time control modes
|
|
103
|
+
|
|
104
|
+
The `time` prop accepts three modes via a discriminated union:
|
|
105
|
+
|
|
106
|
+
| Value | Mode | Description |
|
|
107
|
+
|-------|------|-------------|
|
|
108
|
+
| *omitted* | Uncontrolled | Auto-plays with default settings |
|
|
109
|
+
| `number` | Controlled | Shorthand for `{ mode: 'controlled', value: n }` |
|
|
110
|
+
| `'css'` | CSS | Shorthand for `{ mode: 'css' }` |
|
|
111
|
+
| `{ mode: 'controlled', value }` | Controlled | You drive the time directly |
|
|
112
|
+
| `{ mode: 'uncontrolled', ... }` | Uncontrolled | Component manages playback |
|
|
113
|
+
| `{ mode: 'css' }` | CSS | Driven by `--tegaki-progress` CSS property |
|
|
114
|
+
|
|
115
|
+
#### Uncontrolled
|
|
116
|
+
|
|
117
|
+
The component manages its own playback — auto-plays on mount, responds to `speed`, `playing`, and `loop`.
|
|
118
|
+
|
|
119
|
+
```tsx
|
|
120
|
+
// Default: auto-play at 1x
|
|
121
|
+
<TegakiRenderer font={font}>Hello</TegakiRenderer>
|
|
122
|
+
|
|
123
|
+
// With options
|
|
124
|
+
<TegakiRenderer font={font} time={{ mode: 'uncontrolled', speed: 2, loop: true }}>
|
|
125
|
+
Hello
|
|
126
|
+
</TegakiRenderer>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
| Option | Type | Default | Description |
|
|
130
|
+
|--------|------|---------|-------------|
|
|
131
|
+
| `initialTime` | `number` | `0` | Starting time in seconds |
|
|
132
|
+
| `speed` | `number` | `1` | Playback speed multiplier |
|
|
133
|
+
| `playing` | `boolean` | `true` | Whether animation is playing |
|
|
134
|
+
| `loop` | `boolean` | `false` | Restart when animation ends |
|
|
135
|
+
| `onTimeChange` | `(time: number) => void` | — | Called each frame with current time |
|
|
136
|
+
|
|
137
|
+
#### Controlled
|
|
138
|
+
|
|
139
|
+
You provide the exact time. Useful for syncing with a slider, streaming text, or external state.
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
<TegakiRenderer font={font} time={currentTime}>Hello</TegakiRenderer>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
#### CSS
|
|
146
|
+
|
|
147
|
+
Animation progress is driven by the `--tegaki-progress` CSS custom property (0–1). This enables pure-CSS control via animations, transitions, or scroll-timeline — no JS bridge needed.
|
|
148
|
+
|
|
149
|
+
```tsx
|
|
150
|
+
<TegakiRenderer font={font} time="css" style={...}>Hello</TegakiRenderer>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
```css
|
|
154
|
+
/* Example: scroll-driven animation */
|
|
155
|
+
.scroll-container {
|
|
156
|
+
overflow-x: scroll;
|
|
157
|
+
scroll-timeline: --tegaki inline;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.tegaki-wrapper {
|
|
161
|
+
animation: tegaki-reveal linear both;
|
|
162
|
+
animation-timeline: --tegaki;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
@keyframes tegaki-reveal {
|
|
166
|
+
from { --tegaki-progress: 0; }
|
|
167
|
+
to { --tegaki-progress: 1; }
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### CSS custom properties
|
|
172
|
+
|
|
173
|
+
The component exposes these CSS custom properties on its root element in all modes:
|
|
174
|
+
|
|
175
|
+
| Property | Direction | Description |
|
|
176
|
+
|----------|-----------|-------------|
|
|
177
|
+
| `--tegaki-duration` | Output | Total animation length in seconds |
|
|
178
|
+
| `--tegaki-time` | Output | Current time in seconds |
|
|
179
|
+
| `--tegaki-progress` | Input (CSS mode) / Output | Current progress (0–1) |
|
|
180
|
+
|
|
181
|
+
All three are registered via `CSS.registerProperty` as `<number>` with `inherits: true`, making them animatable and transitionable.
|
|
182
|
+
|
|
183
|
+
### `computeTimeline(text, font)`
|
|
184
|
+
|
|
185
|
+
Returns timing info for a string without rendering anything:
|
|
186
|
+
|
|
187
|
+
```ts
|
|
188
|
+
import { computeTimeline } from 'tegaki';
|
|
189
|
+
|
|
190
|
+
const { entries, totalDuration } = computeTimeline('Hello', font);
|
|
191
|
+
// totalDuration: 2.45 (seconds)
|
|
192
|
+
// entries: [{ char: 'H', offset: 0, duration: 0.52, hasSvg: true }, ...]
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Generating font bundles
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
npx tegaki-generator generate [family] [options]
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
| Option | Description | Default |
|
|
202
|
+
|--------|-------------|---------|
|
|
203
|
+
| `family` | Google Fonts family name | `Caveat` |
|
|
204
|
+
| `-o, --output` | Output directory | `output/<family>` |
|
|
205
|
+
| `-r, --resolution` | Bitmap resolution for skeletonization | `400` |
|
|
206
|
+
| `-c, --chars` | Characters to process | printable ASCII |
|
|
207
|
+
| `-f, --force` | Re-download cached font | `false` |
|
|
208
|
+
| `-d, --debug` | Write intermediate visualizations | `false` |
|
|
209
|
+
| `-l, --lineCap` | Stroke cap style (`auto`/`round`/`butt`/`square`) | `auto` |
|
|
210
|
+
| `--skeletonMethod` | Algorithm (`zhang-suen` / `guo-hall` / `lee` / `medial-axis` / `thin` / `voronoi`) | `zhang-suen` |
|
|
211
|
+
|
|
212
|
+
Output structure:
|
|
213
|
+
|
|
214
|
+
```
|
|
215
|
+
output/caveat/
|
|
216
|
+
font.json # Full glyph data (coordinates, strokes, timing)
|
|
217
|
+
caveat.ttf # Original font file
|
|
218
|
+
bundle.ts # Import this in your app
|
|
219
|
+
svg/
|
|
220
|
+
A.svg # Animated SVG per glyph
|
|
221
|
+
A.tsx # React component per glyph
|
|
222
|
+
...
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Import `bundle.ts` — it bundles all glyph components and font metadata into a `TegakiBundle`.
|
|
226
|
+
|
|
227
|
+
## Pipeline
|
|
228
|
+
|
|
229
|
+
The entire processing pipeline is pure TypeScript — no canvas, no native image libraries, no Python. It runs identically in Node/Bun and in the browser.
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
Font file
|
|
233
|
+
→ Flatten bezier curves to polylines
|
|
234
|
+
→ Rasterize to binary bitmap (scanline fill, nonzero winding)
|
|
235
|
+
→ Skeletonize to 1px-wide skeleton (Zhang-Suen thinning)
|
|
236
|
+
→ Trace skeleton into polylines (spur pruning + RDP simplification)
|
|
237
|
+
→ Compute stroke width at each point (distance transform)
|
|
238
|
+
→ Order strokes top-to-bottom, left-to-right
|
|
239
|
+
→ Generate animated SVG with per-stroke timing
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Packages
|
|
243
|
+
|
|
244
|
+
| Package | npm | Description |
|
|
245
|
+
|---------|-----|-------------|
|
|
246
|
+
| [`tegaki`](packages/renderer) | [](https://www.npmjs.com/package/tegaki) | React component for animated handwriting |
|
|
247
|
+
| [`tegaki-generator`](packages/generator) | [](https://www.npmjs.com/package/tegaki-generator) | CLI that generates font bundles |
|
|
248
|
+
| [`@tegaki/website`](packages/website) | — | Interactive preview app |
|
|
249
|
+
|
|
250
|
+
## Contributing
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
bun install # Install dependencies
|
|
254
|
+
bun dev # Start dev server (website)
|
|
255
|
+
bun start # Run the CLI (generator)
|
|
256
|
+
bun checks # Lint + typecheck + tests
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## License
|
|
260
|
+
|
|
261
|
+
[MIT](LICENSE)
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import * as _$react from "react";
|
|
2
|
+
import { ComponentProps } from "react";
|
|
3
|
+
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
4
|
+
|
|
5
|
+
//#region src/types.d.ts
|
|
6
|
+
type LineCap = 'round' | 'butt' | 'square';
|
|
7
|
+
interface Point {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
}
|
|
11
|
+
interface TimedPoint extends Point {
|
|
12
|
+
t: number;
|
|
13
|
+
width: number;
|
|
14
|
+
}
|
|
15
|
+
interface BBox {
|
|
16
|
+
x1: number;
|
|
17
|
+
y1: number;
|
|
18
|
+
x2: number;
|
|
19
|
+
y2: number;
|
|
20
|
+
}
|
|
21
|
+
interface Stroke {
|
|
22
|
+
points: TimedPoint[];
|
|
23
|
+
order: number;
|
|
24
|
+
length: number;
|
|
25
|
+
animationDuration: number;
|
|
26
|
+
delay: number;
|
|
27
|
+
}
|
|
28
|
+
interface GlyphData {
|
|
29
|
+
char: string;
|
|
30
|
+
unicode: number;
|
|
31
|
+
advanceWidth: number;
|
|
32
|
+
boundingBox: BBox;
|
|
33
|
+
path: string;
|
|
34
|
+
skeleton: Point[][];
|
|
35
|
+
strokes: Stroke[];
|
|
36
|
+
totalLength: number;
|
|
37
|
+
totalAnimationDuration: number;
|
|
38
|
+
}
|
|
39
|
+
interface FontOutput {
|
|
40
|
+
font: {
|
|
41
|
+
family: string;
|
|
42
|
+
style: string;
|
|
43
|
+
unitsPerEm: number;
|
|
44
|
+
ascender: number;
|
|
45
|
+
descender: number;
|
|
46
|
+
lineCap: LineCap;
|
|
47
|
+
};
|
|
48
|
+
glyphs: Record<string, GlyphData>;
|
|
49
|
+
}
|
|
50
|
+
interface PathCommand {
|
|
51
|
+
type: 'M' | 'L' | 'Q' | 'C' | 'Z';
|
|
52
|
+
x: number;
|
|
53
|
+
y: number;
|
|
54
|
+
x1?: number;
|
|
55
|
+
y1?: number;
|
|
56
|
+
x2?: number;
|
|
57
|
+
y2?: number;
|
|
58
|
+
}
|
|
59
|
+
interface TegakiGlyphData {
|
|
60
|
+
advanceWidth: number;
|
|
61
|
+
strokes: {
|
|
62
|
+
points: {
|
|
63
|
+
x: number;
|
|
64
|
+
y: number;
|
|
65
|
+
t: number;
|
|
66
|
+
width: number;
|
|
67
|
+
}[];
|
|
68
|
+
delay: number;
|
|
69
|
+
animationDuration: number;
|
|
70
|
+
}[];
|
|
71
|
+
}
|
|
72
|
+
type BaseEffectConfig = {
|
|
73
|
+
enabled?: boolean;
|
|
74
|
+
};
|
|
75
|
+
/** A length value: plain number is pixels, string `"${number}em"` is relative to font size. */
|
|
76
|
+
type CSSLength = number | `${number}em`;
|
|
77
|
+
type TegakiEffectConfigs = {
|
|
78
|
+
glow: BaseEffectConfig & {
|
|
79
|
+
radius?: CSSLength;
|
|
80
|
+
color?: string;
|
|
81
|
+
offsetX?: number;
|
|
82
|
+
offsetY?: number;
|
|
83
|
+
};
|
|
84
|
+
wobble: BaseEffectConfig & {
|
|
85
|
+
amplitude?: number;
|
|
86
|
+
frequency?: number;
|
|
87
|
+
mode?: 'sine' | 'noise';
|
|
88
|
+
};
|
|
89
|
+
pressureWidth: BaseEffectConfig & {
|
|
90
|
+
strength?: number;
|
|
91
|
+
};
|
|
92
|
+
taper: BaseEffectConfig & {
|
|
93
|
+
startLength?: number;
|
|
94
|
+
endLength?: number;
|
|
95
|
+
};
|
|
96
|
+
gradient: BaseEffectConfig & {
|
|
97
|
+
colors?: string[] | 'rainbow';
|
|
98
|
+
saturation?: number;
|
|
99
|
+
lightness?: number;
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
type TegakiEffectName = keyof TegakiEffectConfigs;
|
|
103
|
+
/** Effects that can only appear once (cannot be used with custom keys). */
|
|
104
|
+
type TegakiSingletonEffectName = 'pressureWidth' | 'wobble' | 'taper' | 'gradient';
|
|
105
|
+
/** Effects that can be duplicated with custom keys. */
|
|
106
|
+
type TegakiMultiEffectName = Exclude<TegakiEffectName, TegakiSingletonEffectName>;
|
|
107
|
+
type TegakiCustomEffect = { [K in TegakiMultiEffectName]: TegakiEffectConfigs[K] & {
|
|
108
|
+
effect: K;
|
|
109
|
+
order?: number;
|
|
110
|
+
} }[TegakiMultiEffectName];
|
|
111
|
+
/** Validates an effects object: known keys infer `effect`, unknown keys require it (singleton effects excluded). */
|
|
112
|
+
type TegakiEffects<T> = { [K in keyof T]: K extends TegakiEffectName ? (TegakiEffectConfigs[K] & {
|
|
113
|
+
effect?: K;
|
|
114
|
+
order?: number;
|
|
115
|
+
}) | boolean : TegakiCustomEffect | boolean };
|
|
116
|
+
interface TegakiBundle {
|
|
117
|
+
family: string;
|
|
118
|
+
lineCap: LineCap;
|
|
119
|
+
fontUrl: string;
|
|
120
|
+
unitsPerEm: number;
|
|
121
|
+
ascender: number;
|
|
122
|
+
descender: number;
|
|
123
|
+
glyphs: Record<string, _$react.FC<_$react.SVGProps<SVGSVGElement>>>;
|
|
124
|
+
glyphData?: Record<string, TegakiGlyphData>;
|
|
125
|
+
glyphTimings: Record<string, number>;
|
|
126
|
+
registerFontFace: () => Promise<void>;
|
|
127
|
+
}
|
|
128
|
+
//#endregion
|
|
129
|
+
//#region src/lib/effects.d.ts
|
|
130
|
+
interface ResolvedEffect<K extends TegakiEffectName = TegakiEffectName> {
|
|
131
|
+
effect: K;
|
|
132
|
+
order: number;
|
|
133
|
+
config: TegakiEffectConfigs[K];
|
|
134
|
+
}
|
|
135
|
+
//#endregion
|
|
136
|
+
//#region src/lib/drawGlyph.d.ts
|
|
137
|
+
interface GlyphPosition {
|
|
138
|
+
/** X offset in CSS pixels */
|
|
139
|
+
x: number;
|
|
140
|
+
/** Y offset in CSS pixels (top of em square) */
|
|
141
|
+
y: number;
|
|
142
|
+
/** Font size in CSS pixels */
|
|
143
|
+
fontSize: number;
|
|
144
|
+
/** Units per em from the font */
|
|
145
|
+
unitsPerEm: number;
|
|
146
|
+
/** Font ascender in font units */
|
|
147
|
+
ascender: number;
|
|
148
|
+
/** Font descender in font units (negative) */
|
|
149
|
+
descender: number;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Draw a single glyph's strokes onto a canvas context, animated up to `localTime`.
|
|
153
|
+
* `localTime` is seconds relative to this glyph's start (0 = glyph begins).
|
|
154
|
+
*/
|
|
155
|
+
declare function drawGlyph(ctx: CanvasRenderingContext2D, glyph: TegakiGlyphData, pos: GlyphPosition, localTime: number, lineCap: LineCap, color: string, effects?: ResolvedEffect[], seed?: number, segmentSize?: number): void;
|
|
156
|
+
//#endregion
|
|
157
|
+
//#region src/lib/timeline.d.ts
|
|
158
|
+
interface TimelineConfig {
|
|
159
|
+
/** Pause between glyphs (seconds). Default: `0.1` */
|
|
160
|
+
glyphGap?: number;
|
|
161
|
+
/** Pause after a space character (seconds). Default: `0.15` */
|
|
162
|
+
wordGap?: number;
|
|
163
|
+
/** Pause after a newline / line break (seconds). Default: `0.3` */
|
|
164
|
+
lineGap?: number;
|
|
165
|
+
/** Duration for characters without glyph SVGs (seconds). Default: `0.2` */
|
|
166
|
+
unknownDuration?: number;
|
|
167
|
+
}
|
|
168
|
+
interface TimelineEntry {
|
|
169
|
+
char: string;
|
|
170
|
+
offset: number;
|
|
171
|
+
duration: number;
|
|
172
|
+
hasSvg: boolean;
|
|
173
|
+
}
|
|
174
|
+
interface Timeline {
|
|
175
|
+
entries: TimelineEntry[];
|
|
176
|
+
totalDuration: number;
|
|
177
|
+
}
|
|
178
|
+
declare function computeTimeline(text: string, font: TegakiBundle, config?: TimelineConfig): Timeline;
|
|
179
|
+
//#endregion
|
|
180
|
+
//#region src/lib/utils.d.ts
|
|
181
|
+
type Coercible = string | number | boolean | null | undefined | readonly Coercible[];
|
|
182
|
+
//#endregion
|
|
183
|
+
//#region src/lib/TegakiRenderer.d.ts
|
|
184
|
+
type TimeControlMode = {
|
|
185
|
+
controlled: {
|
|
186
|
+
mode: 'controlled'; /** Current time in seconds. */
|
|
187
|
+
value: number;
|
|
188
|
+
};
|
|
189
|
+
uncontrolled: {
|
|
190
|
+
mode: 'uncontrolled'; /** Initial time in seconds. Default: `0` */
|
|
191
|
+
initialTime?: number; /** Playback speed multiplier. Default: `1` */
|
|
192
|
+
speed?: number; /** Whether animation is playing. Default: `true` */
|
|
193
|
+
playing?: boolean; /** Loop animation when it reaches the end. Default: `false` */
|
|
194
|
+
loop?: boolean;
|
|
195
|
+
/**
|
|
196
|
+
* Catch-up strength. When positive, playback speeds up when there is a
|
|
197
|
+
* large amount of remaining animation and decays back to normal gradually.
|
|
198
|
+
* `0` disables catch-up (default). Higher values ramp up more aggressively.
|
|
199
|
+
* Typical range: `0.2` – `2`.
|
|
200
|
+
*/
|
|
201
|
+
catchUp?: number; /** Called on every frame with the current time. */
|
|
202
|
+
onTimeChange?: (time: number) => void;
|
|
203
|
+
};
|
|
204
|
+
css: {
|
|
205
|
+
mode: 'css';
|
|
206
|
+
};
|
|
207
|
+
};
|
|
208
|
+
/**
|
|
209
|
+
* A plain number is shorthand for `{ mode: 'controlled', value: number }`.
|
|
210
|
+
* `'css'` is shorthand for `{ mode: 'css' }`.
|
|
211
|
+
* Omit for uncontrolled mode with default settings.
|
|
212
|
+
*/
|
|
213
|
+
type TimeControlProp = null | undefined | number | 'css' | TimeControlMode[keyof TimeControlMode];
|
|
214
|
+
interface TegakiRendererProps<E extends TegakiEffects<E> = Record<string, never>> extends Omit<ComponentProps<'div'>, 'children'> {
|
|
215
|
+
/** TegakiBundle with font data and animated glyph SVGs. */
|
|
216
|
+
font?: TegakiBundle;
|
|
217
|
+
/** Text to animate. Takes precedence over children. */
|
|
218
|
+
text?: string;
|
|
219
|
+
/** Children coerced to string. Strings and numbers are kept; everything else is ignored. */
|
|
220
|
+
children?: Coercible;
|
|
221
|
+
/**
|
|
222
|
+
* Time control. Accepts a number (controlled shorthand), or an object
|
|
223
|
+
* specifying the mode (`'controlled'`, `'uncontrolled'`, or `'css'`).
|
|
224
|
+
* Omit for uncontrolled playback with default settings.
|
|
225
|
+
*/
|
|
226
|
+
time?: TimeControlProp;
|
|
227
|
+
/** Called once when the animation reaches the end of the timeline. */
|
|
228
|
+
onComplete?: () => void;
|
|
229
|
+
/** Rendering mode. `'canvas'` draws strokes on a `<canvas>` (requires
|
|
230
|
+
* `font.glyphData`), `'svg'` uses animated SVG elements. Default: `'canvas'` */
|
|
231
|
+
mode?: 'canvas' | 'svg';
|
|
232
|
+
/** Visual effects applied during canvas rendering. */
|
|
233
|
+
effects?: E;
|
|
234
|
+
/** Maximum segment size in pixels for effect subdivision. Lower values produce
|
|
235
|
+
* smoother effects but cost more to render. Default: `2` */
|
|
236
|
+
segmentSize?: number;
|
|
237
|
+
/** Timeline timing configuration (gap between glyphs, words, lines, etc.). */
|
|
238
|
+
timing?: TimelineConfig;
|
|
239
|
+
/** Show debug text overlay. */
|
|
240
|
+
showOverlay?: boolean;
|
|
241
|
+
}
|
|
242
|
+
declare function TegakiRenderer<const E extends TegakiEffects<E> = Record<string, never>>({
|
|
243
|
+
font,
|
|
244
|
+
text,
|
|
245
|
+
children,
|
|
246
|
+
time: timeProp,
|
|
247
|
+
onComplete,
|
|
248
|
+
mode,
|
|
249
|
+
effects,
|
|
250
|
+
segmentSize,
|
|
251
|
+
timing,
|
|
252
|
+
showOverlay,
|
|
253
|
+
...props
|
|
254
|
+
}: TegakiRendererProps<E>): _$react_jsx_runtime0.JSX.Element;
|
|
255
|
+
//#endregion
|
|
256
|
+
export { BBox, CSSLength, FontOutput, GlyphData, LineCap, PathCommand, Point, Stroke, TegakiBundle, type TegakiEffectConfigs, TegakiEffectName, type TegakiEffects, TegakiGlyphData, TegakiMultiEffectName, TegakiRenderer, type TegakiRendererProps, TegakiSingletonEffectName, type TimeControlMode, type TimeControlProp, TimedPoint, type Timeline, type TimelineConfig, computeTimeline, drawGlyph };
|
|
257
|
+
//# sourceMappingURL=index.d.mts.map
|