From 636b0323075225c584b62719ed51e75521bb7ffb Mon Sep 17 00:00:00 2001 From: aura Date: Tue, 17 Feb 2026 22:39:42 +0100 Subject: push source --- moneyjsx/package.json | 32 + moneyjsx/src/api.tsx | 80 ++ moneyjsx/src/ascii-art.tsx | 165 ++++ moneyjsx/src/chat.tsx | 1023 ++++++++++++++++++++ moneyjsx/src/components.tsx | 238 +++++ moneyjsx/src/first-landing.tsx | 55 ++ moneyjsx/src/header.tsx | 98 ++ moneyjsx/src/home.tsx | 90 ++ moneyjsx/src/index-page.tsx | 32 + moneyjsx/src/index.html | 93 ++ moneyjsx/src/jsx.tsx | 239 +++++ moneyjsx/src/login.tsx | 29 + moneyjsx/src/payment-success.tsx | 19 + moneyjsx/src/settings.tsx | 402 ++++++++ moneyjsx/src/support-api.tsx | 214 ++++ moneyjsx/src/support-models.tsx | 114 +++ moneyjsx/src/support-tos.tsx | 69 ++ moneyjsx/src/support-tutorial.tsx | 156 +++ moneyjsx/src/support.tsx | 18 + moneyjsx/src/terminal.tsx | 275 ++++++ moneyjsx/src/tsconfig.json | 121 +++ moneyjsx/src/upgrade.tsx | 206 ++++ moneyjsx/src/user.tsx | 261 +++++ moneyjsx/src/util.tsx | 83 ++ moneyjsx/static/fonts/LICENSE.TXT | 428 ++++++++ moneyjsx/static/fonts/README.NFO | 45 + moneyjsx/static/fonts/README.TXT | 46 + moneyjsx/static/fonts/Web437_ACM_VGA_8x14.woff | Bin 0 -> 9836 bytes moneyjsx/static/fonts/Web437_ACM_VGA_8x16.woff | Bin 0 -> 9996 bytes moneyjsx/static/fonts/Web437_ACM_VGA_8x8.woff | Bin 0 -> 9184 bytes moneyjsx/static/fonts/Web437_ACM_VGA_9x14.woff | Bin 0 -> 9856 bytes moneyjsx/static/fonts/Web437_ACM_VGA_9x16.woff | Bin 0 -> 10008 bytes moneyjsx/static/fonts/Web437_ACM_VGA_9x8.woff | Bin 0 -> 9216 bytes moneyjsx/static/fonts/Web437_AMI_EGA_8x14.woff | Bin 0 -> 9596 bytes moneyjsx/static/fonts/Web437_AMI_EGA_8x8-2y.woff | Bin 0 -> 9184 bytes moneyjsx/static/fonts/Web437_AMI_EGA_8x8.woff | Bin 0 -> 8884 bytes moneyjsx/static/fonts/Web437_AMI_EGA_9x14.woff | Bin 0 -> 9604 bytes moneyjsx/static/fonts/Web437_AST_PremiumExec.woff | Bin 0 -> 9996 bytes moneyjsx/static/fonts/Web437_ATI_8x14.woff | Bin 0 -> 9664 bytes moneyjsx/static/fonts/Web437_ATI_8x16.woff | Bin 0 -> 9848 bytes moneyjsx/static/fonts/Web437_ATI_8x8-2y.woff | Bin 0 -> 9208 bytes moneyjsx/static/fonts/Web437_ATI_8x8.woff | Bin 0 -> 8896 bytes moneyjsx/static/fonts/Web437_ATI_9x14.woff | Bin 0 -> 9696 bytes moneyjsx/static/fonts/Web437_ATI_9x16.woff | Bin 0 -> 9892 bytes moneyjsx/static/fonts/Web437_ATI_9x8.woff | Bin 0 -> 8924 bytes moneyjsx/static/fonts/Web437_ATI_SmallW_6x8.woff | Bin 0 -> 9004 bytes moneyjsx/static/fonts/Web437_ATT_PC6300-2x.woff | Bin 0 -> 10136 bytes moneyjsx/static/fonts/Web437_ATT_PC6300.woff | Bin 0 -> 9940 bytes moneyjsx/static/fonts/Web437_Acer710_CGA-2y.woff | Bin 0 -> 9544 bytes moneyjsx/static/fonts/Web437_Acer710_CGA.woff | Bin 0 -> 9264 bytes moneyjsx/static/fonts/Web437_Acer710_Mono.woff | Bin 0 -> 9876 bytes moneyjsx/static/fonts/Web437_Acer_VGA_8x8-2y.woff | Bin 0 -> 9252 bytes moneyjsx/static/fonts/Web437_Acer_VGA_8x8.woff | Bin 0 -> 8936 bytes moneyjsx/static/fonts/Web437_Acer_VGA_9x8.woff | Bin 0 -> 8952 bytes moneyjsx/static/fonts/Web437_Amstrad_PC-2y.woff | Bin 0 -> 9164 bytes moneyjsx/static/fonts/Web437_Amstrad_PC.woff | Bin 0 -> 8872 bytes moneyjsx/static/fonts/Web437_ApricotPortable.woff | Bin 0 -> 9376 bytes moneyjsx/static/fonts/Web437_ApricotXenC.woff | Bin 0 -> 9928 bytes moneyjsx/static/fonts/Web437_Apricot_200L-2y.woff | Bin 0 -> 9376 bytes moneyjsx/static/fonts/Web437_Apricot_200L.woff | Bin 0 -> 9056 bytes moneyjsx/static/fonts/Web437_Apricot_256L-2y.woff | Bin 0 -> 9848 bytes moneyjsx/static/fonts/Web437_Apricot_256L.woff | Bin 0 -> 9612 bytes moneyjsx/static/fonts/Web437_Apricot_Mono.woff | Bin 0 -> 10332 bytes moneyjsx/static/fonts/Web437_CL_EagleIII_8x16.woff | Bin 0 -> 9876 bytes moneyjsx/static/fonts/Web437_CL_EagleIII_9x16.woff | Bin 0 -> 9700 bytes moneyjsx/static/fonts/Web437_CL_EagleII_8x16.woff | Bin 0 -> 9988 bytes moneyjsx/static/fonts/Web437_CL_EagleII_9x16.woff | Bin 0 -> 9880 bytes moneyjsx/static/fonts/Web437_CL_Stingray_8x16.woff | Bin 0 -> 10004 bytes .../static/fonts/Web437_CL_Stingray_8x16_bold.woff | Bin 0 -> 9608 bytes moneyjsx/static/fonts/Web437_CL_Stingray_8x19.woff | Bin 0 -> 10056 bytes .../static/fonts/Web437_CL_Stingray_8x19_bold.woff | Bin 0 -> 9620 bytes moneyjsx/static/fonts/Web437_CompaqThin_8x14.woff | Bin 0 -> 10400 bytes moneyjsx/static/fonts/Web437_CompaqThin_8x16.woff | Bin 0 -> 10696 bytes moneyjsx/static/fonts/Web437_CompaqThin_8x8.woff | Bin 0 -> 9480 bytes moneyjsx/static/fonts/Web437_Compaq_Port3-2x.woff | Bin 0 -> 10132 bytes moneyjsx/static/fonts/Web437_Compaq_Port3.woff | Bin 0 -> 9884 bytes moneyjsx/static/fonts/Web437_Compis.woff | Bin 0 -> 10092 bytes moneyjsx/static/fonts/Web437_Copam_BIOS-2y.woff | Bin 0 -> 9328 bytes moneyjsx/static/fonts/Web437_Copam_BIOS.woff | Bin 0 -> 9020 bytes moneyjsx/static/fonts/Web437_Cordata_PPC-21.woff | Bin 0 -> 11356 bytes moneyjsx/static/fonts/Web437_Cordata_PPC-400.woff | Bin 0 -> 12148 bytes moneyjsx/static/fonts/Web437_DG_One-2y.woff | Bin 0 -> 9220 bytes moneyjsx/static/fonts/Web437_DG_One-2y_bold.woff | Bin 0 -> 9164 bytes moneyjsx/static/fonts/Web437_DG_One.woff | Bin 0 -> 8888 bytes moneyjsx/static/fonts/Web437_DG_One_bold.woff | Bin 0 -> 8772 bytes moneyjsx/static/fonts/Web437_DOS-V_TWN16.woff | Bin 0 -> 10016 bytes moneyjsx/static/fonts/Web437_DOS-V_TWN19.woff | Bin 0 -> 10068 bytes moneyjsx/static/fonts/Web437_DOS-V_re_ANK16.woff | Bin 0 -> 11200 bytes moneyjsx/static/fonts/Web437_DOS-V_re_ANK19.woff | Bin 0 -> 11212 bytes moneyjsx/static/fonts/Web437_DOS-V_re_ANK24.woff | Bin 0 -> 12792 bytes moneyjsx/static/fonts/Web437_DOS-V_re_ANK30.woff | Bin 0 -> 13028 bytes moneyjsx/static/fonts/Web437_DOS-V_re_JPN12.woff | Bin 0 -> 9516 bytes moneyjsx/static/fonts/Web437_DOS-V_re_JPN16.woff | Bin 0 -> 11432 bytes moneyjsx/static/fonts/Web437_DOS-V_re_JPN19.woff | Bin 0 -> 11528 bytes moneyjsx/static/fonts/Web437_DOS-V_re_JPN24.woff | Bin 0 -> 13016 bytes moneyjsx/static/fonts/Web437_DOS-V_re_JPN30.woff | Bin 0 -> 13248 bytes moneyjsx/static/fonts/Web437_DOS-V_re_PRC16.woff | Bin 0 -> 11372 bytes moneyjsx/static/fonts/Web437_DOS-V_re_PRC19.woff | Bin 0 -> 11412 bytes moneyjsx/static/fonts/Web437_DTK_BIOS-2y.woff | Bin 0 -> 9480 bytes moneyjsx/static/fonts/Web437_DTK_BIOS.woff | Bin 0 -> 9080 bytes .../static/fonts/Web437_EagleSpCGA_Alt1-2y.woff | Bin 0 -> 9168 bytes moneyjsx/static/fonts/Web437_EagleSpCGA_Alt1.woff | Bin 0 -> 8840 bytes .../static/fonts/Web437_EagleSpCGA_Alt2-2y.woff | Bin 0 -> 9076 bytes moneyjsx/static/fonts/Web437_EagleSpCGA_Alt2.woff | Bin 0 -> 8812 bytes .../static/fonts/Web437_EagleSpCGA_Alt3-2y.woff | Bin 0 -> 9584 bytes moneyjsx/static/fonts/Web437_EagleSpCGA_Alt3.woff | Bin 0 -> 9304 bytes moneyjsx/static/fonts/Web437_EpsonMGA-2y.woff | Bin 0 -> 9196 bytes moneyjsx/static/fonts/Web437_EpsonMGA.woff | Bin 0 -> 8908 bytes moneyjsx/static/fonts/Web437_EpsonMGA_Alt-2y.woff | Bin 0 -> 9680 bytes moneyjsx/static/fonts/Web437_EpsonMGA_Alt.woff | Bin 0 -> 9392 bytes moneyjsx/static/fonts/Web437_EpsonMGA_Mono.woff | Bin 0 -> 9720 bytes moneyjsx/static/fonts/Web437_EuroPC_CGA-2y.woff | Bin 0 -> 9208 bytes moneyjsx/static/fonts/Web437_EuroPC_CGA.woff | Bin 0 -> 8936 bytes moneyjsx/static/fonts/Web437_EuroPC_Mono.woff | Bin 0 -> 9908 bytes moneyjsx/static/fonts/Web437_EverexME_5x8.woff | Bin 0 -> 8376 bytes moneyjsx/static/fonts/Web437_EverexME_7x8.woff | Bin 0 -> 9048 bytes moneyjsx/static/fonts/Web437_EverexME_8x16.woff | Bin 0 -> 9828 bytes .../static/fonts/Web437_FMTowns_re_8x16-2x.woff | Bin 0 -> 11304 bytes moneyjsx/static/fonts/Web437_FMTowns_re_8x16.woff | Bin 0 -> 11052 bytes moneyjsx/static/fonts/Web437_FMTowns_re_8x8.woff | Bin 0 -> 9432 bytes moneyjsx/static/fonts/Web437_HP_100LX_10x11.woff | Bin 0 -> 10116 bytes moneyjsx/static/fonts/Web437_HP_100LX_16x12.woff | Bin 0 -> 11196 bytes moneyjsx/static/fonts/Web437_HP_100LX_6x8-2x.woff | Bin 0 -> 9020 bytes moneyjsx/static/fonts/Web437_HP_100LX_6x8.woff | Bin 0 -> 8800 bytes moneyjsx/static/fonts/Web437_HP_100LX_8x8-2x.woff | Bin 0 -> 9588 bytes moneyjsx/static/fonts/Web437_HP_100LX_8x8.woff | Bin 0 -> 9264 bytes moneyjsx/static/fonts/Web437_HP_150_re.woff | Bin 0 -> 10860 bytes moneyjsx/static/fonts/Web437_IBM_3270pc.woff | Bin 0 -> 9768 bytes moneyjsx/static/fonts/Web437_IBM_BIOS-2x.woff | Bin 0 -> 9100 bytes moneyjsx/static/fonts/Web437_IBM_BIOS-2y.woff | Bin 0 -> 9220 bytes moneyjsx/static/fonts/Web437_IBM_BIOS.woff | Bin 0 -> 8832 bytes moneyjsx/static/fonts/Web437_IBM_CGA-2y.woff | Bin 0 -> 9212 bytes moneyjsx/static/fonts/Web437_IBM_CGA.woff | Bin 0 -> 8808 bytes moneyjsx/static/fonts/Web437_IBM_CGAthin-2y.woff | Bin 0 -> 10028 bytes moneyjsx/static/fonts/Web437_IBM_CGAthin.woff | Bin 0 -> 9484 bytes moneyjsx/static/fonts/Web437_IBM_Conv-2x.woff | Bin 0 -> 9720 bytes moneyjsx/static/fonts/Web437_IBM_Conv-2y.woff | Bin 0 -> 9768 bytes moneyjsx/static/fonts/Web437_IBM_Conv.woff | Bin 0 -> 9348 bytes moneyjsx/static/fonts/Web437_IBM_DOS_ISO8-2x.woff | Bin 0 -> 10512 bytes moneyjsx/static/fonts/Web437_IBM_DOS_ISO8.woff | Bin 0 -> 10288 bytes moneyjsx/static/fonts/Web437_IBM_DOS_ISO9-2x.woff | Bin 0 -> 10528 bytes moneyjsx/static/fonts/Web437_IBM_DOS_ISO9.woff | Bin 0 -> 10288 bytes moneyjsx/static/fonts/Web437_IBM_EGA_8x14-2x.woff | Bin 0 -> 9980 bytes moneyjsx/static/fonts/Web437_IBM_EGA_8x14.woff | Bin 0 -> 9688 bytes moneyjsx/static/fonts/Web437_IBM_EGA_8x8-2x.woff | Bin 0 -> 9116 bytes moneyjsx/static/fonts/Web437_IBM_EGA_8x8.woff | Bin 0 -> 8844 bytes moneyjsx/static/fonts/Web437_IBM_EGA_9x14-2x.woff | Bin 0 -> 10044 bytes moneyjsx/static/fonts/Web437_IBM_EGA_9x14.woff | Bin 0 -> 9732 bytes moneyjsx/static/fonts/Web437_IBM_EGA_9x8-2x.woff | Bin 0 -> 9152 bytes moneyjsx/static/fonts/Web437_IBM_EGA_9x8.woff | Bin 0 -> 8860 bytes moneyjsx/static/fonts/Web437_IBM_MDA.woff | Bin 0 -> 9864 bytes moneyjsx/static/fonts/Web437_IBM_Model30r0-2x.woff | Bin 0 -> 10100 bytes moneyjsx/static/fonts/Web437_IBM_Model30r0.woff | Bin 0 -> 9844 bytes moneyjsx/static/fonts/Web437_IBM_Model3x_Alt1.woff | Bin 0 -> 10884 bytes moneyjsx/static/fonts/Web437_IBM_Model3x_Alt2.woff | Bin 0 -> 10484 bytes moneyjsx/static/fonts/Web437_IBM_Model3x_Alt3.woff | Bin 0 -> 10612 bytes moneyjsx/static/fonts/Web437_IBM_Model3x_Alt4.woff | Bin 0 -> 10404 bytes moneyjsx/static/fonts/Web437_IBM_PGC-2x.woff | Bin 0 -> 10012 bytes moneyjsx/static/fonts/Web437_IBM_PGC.woff | Bin 0 -> 9760 bytes moneyjsx/static/fonts/Web437_IBM_PS-55_re.woff | Bin 0 -> 13312 bytes moneyjsx/static/fonts/Web437_IBM_VGA_8x14-2x.woff | Bin 0 -> 9976 bytes moneyjsx/static/fonts/Web437_IBM_VGA_8x14.woff | Bin 0 -> 9684 bytes moneyjsx/static/fonts/Web437_IBM_VGA_8x16-2x.woff | Bin 0 -> 10060 bytes moneyjsx/static/fonts/Web437_IBM_VGA_8x16.woff | Bin 0 -> 9788 bytes moneyjsx/static/fonts/Web437_IBM_VGA_9x14-2x.woff | Bin 0 -> 10040 bytes moneyjsx/static/fonts/Web437_IBM_VGA_9x14.woff | Bin 0 -> 9732 bytes moneyjsx/static/fonts/Web437_IBM_VGA_9x16-2x.woff | Bin 0 -> 10112 bytes moneyjsx/static/fonts/Web437_IBM_VGA_9x16.woff | Bin 0 -> 9804 bytes moneyjsx/static/fonts/Web437_IBM_VGA_9x8-2x.woff | Bin 0 -> 9152 bytes moneyjsx/static/fonts/Web437_IBM_VGA_9x8.woff | Bin 0 -> 8860 bytes moneyjsx/static/fonts/Web437_IBM_XGA-AI_12x20.woff | Bin 0 -> 12884 bytes moneyjsx/static/fonts/Web437_IBM_XGA-AI_12x23.woff | Bin 0 -> 11308 bytes moneyjsx/static/fonts/Web437_IBM_XGA-AI_7x15.woff | Bin 0 -> 9968 bytes moneyjsx/static/fonts/Web437_IGS_VGA_8x16.woff | Bin 0 -> 9904 bytes moneyjsx/static/fonts/Web437_IGS_VGA_9x16.woff | Bin 0 -> 9960 bytes moneyjsx/static/fonts/Web437_ITT_Xtra-2y.woff | Bin 0 -> 9064 bytes moneyjsx/static/fonts/Web437_ITT_Xtra.woff | Bin 0 -> 8808 bytes moneyjsx/static/fonts/Web437_Kaypro2K_G-2y.woff | Bin 0 -> 9884 bytes moneyjsx/static/fonts/Web437_Kaypro2K_G.woff | Bin 0 -> 9392 bytes .../static/fonts/Web437_LE_Model_D_CGA-2y.woff | Bin 0 -> 9488 bytes moneyjsx/static/fonts/Web437_LE_Model_D_CGA.woff | Bin 0 -> 9248 bytes moneyjsx/static/fonts/Web437_LE_Model_D_Mono.woff | Bin 0 -> 9972 bytes moneyjsx/static/fonts/Web437_MBytePC230_8x16.woff | Bin 0 -> 10220 bytes .../static/fonts/Web437_MBytePC230_CGA-2y.woff | Bin 0 -> 9428 bytes moneyjsx/static/fonts/Web437_MBytePC230_CGA.woff | Bin 0 -> 9164 bytes moneyjsx/static/fonts/Web437_MBytePC230_EGA.woff | Bin 0 -> 10120 bytes moneyjsx/static/fonts/Web437_MBytePC230_Mono.woff | Bin 0 -> 10144 bytes moneyjsx/static/fonts/Web437_Master_512-2y.woff | Bin 0 -> 9192 bytes .../static/fonts/Web437_Master_512-2y_bold.woff | Bin 0 -> 8476 bytes moneyjsx/static/fonts/Web437_Master_512-M7.woff | Bin 0 -> 9192 bytes .../static/fonts/Web437_Master_512-M7_bold.woff | Bin 0 -> 8480 bytes moneyjsx/static/fonts/Web437_Master_512.woff | Bin 0 -> 8916 bytes moneyjsx/static/fonts/Web437_Master_512_bold.woff | Bin 0 -> 8236 bytes moneyjsx/static/fonts/Web437_Mindset-2x.woff | Bin 0 -> 9484 bytes moneyjsx/static/fonts/Web437_Mindset-2y.woff | Bin 0 -> 9452 bytes moneyjsx/static/fonts/Web437_Mindset.woff | Bin 0 -> 9136 bytes moneyjsx/static/fonts/Web437_NEC_APC3_8x16-2x.woff | Bin 0 -> 11240 bytes moneyjsx/static/fonts/Web437_NEC_APC3_8x16.woff | Bin 0 -> 10988 bytes moneyjsx/static/fonts/Web437_NEC_APC3_8x8-2y.woff | Bin 0 -> 9268 bytes moneyjsx/static/fonts/Web437_NEC_APC3_8x8.woff | Bin 0 -> 8956 bytes .../static/fonts/Web437_NEC_MultiSpeed-2x.woff | Bin 0 -> 9784 bytes .../fonts/Web437_NEC_MultiSpeed-2x_bold.woff | Bin 0 -> 9396 bytes moneyjsx/static/fonts/Web437_NEC_MultiSpeed.woff | Bin 0 -> 9480 bytes .../static/fonts/Web437_NEC_MultiSpeed_bold.woff | Bin 0 -> 9044 bytes moneyjsx/static/fonts/Web437_Nix8810_M15.woff | Bin 0 -> 9976 bytes moneyjsx/static/fonts/Web437_Nix8810_M16.woff | Bin 0 -> 10148 bytes moneyjsx/static/fonts/Web437_Nix8810_M35-2y.woff | Bin 0 -> 9280 bytes moneyjsx/static/fonts/Web437_Nix8810_M35.woff | Bin 0 -> 9000 bytes .../static/fonts/Web437_OlivettiThin_8x14.woff | Bin 0 -> 9932 bytes .../static/fonts/Web437_OlivettiThin_8x16.woff | Bin 0 -> 9992 bytes .../static/fonts/Web437_OlivettiThin_9x14.woff | Bin 0 -> 9988 bytes .../static/fonts/Web437_OlivettiThin_9x16.woff | Bin 0 -> 10112 bytes moneyjsx/static/fonts/Web437_Olivetti_M15-2y.woff | Bin 0 -> 9176 bytes moneyjsx/static/fonts/Web437_Olivetti_M15.woff | Bin 0 -> 8948 bytes moneyjsx/static/fonts/Web437_Paradise132_7x16.woff | Bin 0 -> 10020 bytes moneyjsx/static/fonts/Web437_Paradise132_7x9.woff | Bin 0 -> 8996 bytes moneyjsx/static/fonts/Web437_Philips_YES_G-2x.woff | Bin 0 -> 9880 bytes moneyjsx/static/fonts/Web437_Philips_YES_G-2y.woff | Bin 0 -> 9888 bytes moneyjsx/static/fonts/Web437_Philips_YES_G.woff | Bin 0 -> 9600 bytes moneyjsx/static/fonts/Web437_Philips_YES_T-2y.woff | Bin 0 -> 9836 bytes moneyjsx/static/fonts/Web437_Philips_YES_T.woff | Bin 0 -> 9548 bytes moneyjsx/static/fonts/Web437_PhoenixEGA_8x14.woff | Bin 0 -> 9668 bytes moneyjsx/static/fonts/Web437_PhoenixEGA_8x16.woff | Bin 0 -> 9816 bytes .../static/fonts/Web437_PhoenixEGA_8x8-2y.woff | Bin 0 -> 9084 bytes moneyjsx/static/fonts/Web437_PhoenixEGA_8x8.woff | Bin 0 -> 8844 bytes moneyjsx/static/fonts/Web437_PhoenixEGA_9x14.woff | Bin 0 -> 9720 bytes moneyjsx/static/fonts/Web437_PhoenixVGA_8x14.woff | Bin 0 -> 9680 bytes moneyjsx/static/fonts/Web437_PhoenixVGA_8x16.woff | Bin 0 -> 9756 bytes moneyjsx/static/fonts/Web437_PhoenixVGA_8x8.woff | Bin 0 -> 8856 bytes moneyjsx/static/fonts/Web437_PhoenixVGA_9x14.woff | Bin 0 -> 9688 bytes moneyjsx/static/fonts/Web437_PhoenixVGA_9x16.woff | Bin 0 -> 9764 bytes moneyjsx/static/fonts/Web437_PhoenixVGA_9x8.woff | Bin 0 -> 8888 bytes moneyjsx/static/fonts/Web437_Phoenix_BIOS-2y.woff | Bin 0 -> 9376 bytes moneyjsx/static/fonts/Web437_Phoenix_BIOS.woff | Bin 0 -> 9012 bytes moneyjsx/static/fonts/Web437_Portfolio_6x8.woff | Bin 0 -> 8676 bytes moneyjsx/static/fonts/Web437_RM_Nimbus-2y.woff | Bin 0 -> 9180 bytes moneyjsx/static/fonts/Web437_RM_Nimbus.woff | Bin 0 -> 8872 bytes .../static/fonts/Web437_Rainbow100_re_132.woff | Bin 0 -> 9128 bytes moneyjsx/static/fonts/Web437_Rainbow100_re_40.woff | Bin 0 -> 8960 bytes moneyjsx/static/fonts/Web437_Rainbow100_re_66.woff | Bin 0 -> 8956 bytes moneyjsx/static/fonts/Web437_Rainbow100_re_80.woff | Bin 0 -> 9136 bytes moneyjsx/static/fonts/Web437_Robotron_A7100.woff | Bin 0 -> 9868 bytes moneyjsx/static/fonts/Web437_STB_AutoEGA_8x14.woff | Bin 0 -> 9744 bytes moneyjsx/static/fonts/Web437_STB_AutoEGA_9x14.woff | Bin 0 -> 9804 bytes moneyjsx/static/fonts/Web437_SanyoMBC16-2y.woff | Bin 0 -> 9616 bytes moneyjsx/static/fonts/Web437_SanyoMBC16.woff | Bin 0 -> 9284 bytes moneyjsx/static/fonts/Web437_SanyoMBC55x-2y.woff | Bin 0 -> 9096 bytes moneyjsx/static/fonts/Web437_SanyoMBC55x.woff | Bin 0 -> 8832 bytes moneyjsx/static/fonts/Web437_SanyoMBC775-2y.woff | Bin 0 -> 9252 bytes moneyjsx/static/fonts/Web437_SanyoMBC775.woff | Bin 0 -> 8940 bytes moneyjsx/static/fonts/Web437_SeequaCm-2y.woff | Bin 0 -> 9176 bytes moneyjsx/static/fonts/Web437_SeequaCm.woff | Bin 0 -> 8884 bytes moneyjsx/static/fonts/Web437_Sharp_PC3K-2x.woff | Bin 0 -> 9108 bytes moneyjsx/static/fonts/Web437_Sharp_PC3K.woff | Bin 0 -> 8772 bytes .../static/fonts/Web437_Sharp_PC3K_Alt-2x.woff | Bin 0 -> 9528 bytes moneyjsx/static/fonts/Web437_Sharp_PC3K_Alt.woff | Bin 0 -> 9264 bytes moneyjsx/static/fonts/Web437_Siemens_PC-D.woff | Bin 0 -> 9676 bytes moneyjsx/static/fonts/Web437_Sigma_RM_8x14.woff | Bin 0 -> 9836 bytes moneyjsx/static/fonts/Web437_Sigma_RM_8x16.woff | Bin 0 -> 9940 bytes moneyjsx/static/fonts/Web437_Sigma_RM_8x8.woff | Bin 0 -> 9088 bytes moneyjsx/static/fonts/Web437_Sigma_RM_9x14.woff | Bin 0 -> 9864 bytes moneyjsx/static/fonts/Web437_Sigma_RM_9x16.woff | Bin 0 -> 9984 bytes moneyjsx/static/fonts/Web437_Sigma_RM_9x8.woff | Bin 0 -> 9116 bytes moneyjsx/static/fonts/Web437_SperryPC_8x16.woff | Bin 0 -> 11120 bytes moneyjsx/static/fonts/Web437_SperryPC_CGA-2y.woff | Bin 0 -> 9716 bytes moneyjsx/static/fonts/Web437_SperryPC_CGA.woff | Bin 0 -> 9428 bytes .../static/fonts/Web437_Tandy1K-II_200L-2x.woff | Bin 0 -> 9292 bytes .../static/fonts/Web437_Tandy1K-II_200L-2y.woff | Bin 0 -> 9416 bytes moneyjsx/static/fonts/Web437_Tandy1K-II_200L.woff | Bin 0 -> 8988 bytes .../static/fonts/Web437_Tandy1K-II_225L-2y.woff | Bin 0 -> 9452 bytes moneyjsx/static/fonts/Web437_Tandy1K-II_225L.woff | Bin 0 -> 9016 bytes moneyjsx/static/fonts/Web437_Tandy1K-II_Mono.woff | Bin 0 -> 9824 bytes .../static/fonts/Web437_Tandy1K-I_200L-2x.woff | Bin 0 -> 9404 bytes .../static/fonts/Web437_Tandy1K-I_200L-2y.woff | Bin 0 -> 9424 bytes moneyjsx/static/fonts/Web437_Tandy1K-I_200L.woff | Bin 0 -> 9112 bytes .../static/fonts/Web437_Tandy1K-I_225L-2y.woff | Bin 0 -> 9432 bytes moneyjsx/static/fonts/Web437_Tandy1K-I_225L.woff | Bin 0 -> 9140 bytes moneyjsx/static/fonts/Web437_Tandy2K-2x.woff | Bin 0 -> 10196 bytes moneyjsx/static/fonts/Web437_Tandy2K.woff | Bin 0 -> 9920 bytes moneyjsx/static/fonts/Web437_Tandy2K_G-2x.woff | Bin 0 -> 10296 bytes moneyjsx/static/fonts/Web437_Tandy2K_G-TV.woff | Bin 0 -> 9396 bytes moneyjsx/static/fonts/Web437_Tandy2K_G.woff | Bin 0 -> 10028 bytes moneyjsx/static/fonts/Web437_TelePC-2y.woff | Bin 0 -> 9824 bytes moneyjsx/static/fonts/Web437_TelePC.woff | Bin 0 -> 9532 bytes moneyjsx/static/fonts/Web437_Ti_Pro.woff | Bin 0 -> 10236 bytes moneyjsx/static/fonts/Web437_ToshibaSat_8x14.woff | Bin 0 -> 9632 bytes moneyjsx/static/fonts/Web437_ToshibaSat_8x16.woff | Bin 0 -> 9744 bytes moneyjsx/static/fonts/Web437_ToshibaSat_8x8.woff | Bin 0 -> 9000 bytes moneyjsx/static/fonts/Web437_ToshibaSat_9x14.woff | Bin 0 -> 9620 bytes moneyjsx/static/fonts/Web437_ToshibaSat_9x16.woff | Bin 0 -> 9752 bytes moneyjsx/static/fonts/Web437_ToshibaSat_9x8.woff | Bin 0 -> 9004 bytes moneyjsx/static/fonts/Web437_ToshibaT300_8x16.woff | Bin 0 -> 11628 bytes .../static/fonts/Web437_ToshibaT300_8x8-2y.woff | Bin 0 -> 9684 bytes moneyjsx/static/fonts/Web437_ToshibaT300_8x8.woff | Bin 0 -> 9384 bytes moneyjsx/static/fonts/Web437_ToshibaTxL1_8x16.woff | Bin 0 -> 10032 bytes moneyjsx/static/fonts/Web437_ToshibaTxL1_8x8.woff | Bin 0 -> 9464 bytes moneyjsx/static/fonts/Web437_ToshibaTxL2_8x16.woff | Bin 0 -> 10964 bytes moneyjsx/static/fonts/Web437_ToshibaTxL2_8x8.woff | Bin 0 -> 9948 bytes .../static/fonts/Web437_TridentEarly_8x11.woff | Bin 0 -> 9372 bytes .../static/fonts/Web437_TridentEarly_8x14.woff | Bin 0 -> 9748 bytes .../static/fonts/Web437_TridentEarly_8x16.woff | Bin 0 -> 9964 bytes moneyjsx/static/fonts/Web437_TridentEarly_8x8.woff | Bin 0 -> 8924 bytes .../static/fonts/Web437_TridentEarly_9x14.woff | Bin 0 -> 9792 bytes .../static/fonts/Web437_TridentEarly_9x16.woff | Bin 0 -> 9980 bytes moneyjsx/static/fonts/Web437_TridentEarly_9x8.woff | Bin 0 -> 8952 bytes moneyjsx/static/fonts/Web437_Trident_8x11.woff | Bin 0 -> 9280 bytes moneyjsx/static/fonts/Web437_Trident_8x14.woff | Bin 0 -> 9692 bytes moneyjsx/static/fonts/Web437_Trident_8x16.woff | Bin 0 -> 9816 bytes moneyjsx/static/fonts/Web437_Trident_8x8.woff | Bin 0 -> 8984 bytes moneyjsx/static/fonts/Web437_Trident_9x14.woff | Bin 0 -> 9728 bytes moneyjsx/static/fonts/Web437_Trident_9x16.woff | Bin 0 -> 9852 bytes moneyjsx/static/fonts/Web437_Trident_9x8.woff | Bin 0 -> 9004 bytes .../static/fonts/Web437_TsengEVA_132_6x14.woff | Bin 0 -> 9392 bytes moneyjsx/static/fonts/Web437_TsengEVA_132_6x8.woff | Bin 0 -> 8788 bytes moneyjsx/static/fonts/Web437_VTech_BIOS-2y.woff | Bin 0 -> 9916 bytes moneyjsx/static/fonts/Web437_VTech_BIOS.woff | Bin 0 -> 9380 bytes moneyjsx/static/fonts/Web437_Verite_8x14.woff | Bin 0 -> 9848 bytes moneyjsx/static/fonts/Web437_Verite_8x16.woff | Bin 0 -> 9940 bytes moneyjsx/static/fonts/Web437_Verite_8x8-2y.woff | Bin 0 -> 9344 bytes moneyjsx/static/fonts/Web437_Verite_8x8.woff | Bin 0 -> 9060 bytes moneyjsx/static/fonts/Web437_Verite_9x14.woff | Bin 0 -> 9848 bytes moneyjsx/static/fonts/Web437_Verite_9x16.woff | Bin 0 -> 9940 bytes moneyjsx/static/fonts/Web437_Verite_9x8.woff | Bin 0 -> 9088 bytes .../static/fonts/Web437_Wang_Pro_Color-2y.woff | Bin 0 -> 9164 bytes moneyjsx/static/fonts/Web437_Wang_Pro_Color.woff | Bin 0 -> 8920 bytes moneyjsx/static/fonts/Web437_Wang_Pro_Mono.woff | Bin 0 -> 9824 bytes moneyjsx/static/fonts/Web437_Wyse700a-2y.woff | Bin 0 -> 11208 bytes moneyjsx/static/fonts/Web437_Wyse700a.woff | Bin 0 -> 10920 bytes moneyjsx/static/fonts/Web437_Wyse700b-2y.woff | Bin 0 -> 11192 bytes moneyjsx/static/fonts/Web437_Wyse700b.woff | Bin 0 -> 10888 bytes moneyjsx/static/fonts/Web437_Zenith_Z-100.woff | Bin 0 -> 9792 bytes moneyjsx/static/fonts/Web437_Zenith_Z-100_Alt.woff | Bin 0 -> 9288 bytes moneyjsx/static/fonts/WebPlus_AST_PremiumExec.woff | Bin 0 -> 22996 bytes moneyjsx/static/fonts/WebPlus_Amstrad_PC-2y.woff | Bin 0 -> 20984 bytes moneyjsx/static/fonts/WebPlus_Amstrad_PC.woff | Bin 0 -> 20484 bytes moneyjsx/static/fonts/WebPlus_Cordata_PPC-21.woff | Bin 0 -> 27860 bytes moneyjsx/static/fonts/WebPlus_Cordata_PPC-400.woff | Bin 0 -> 30876 bytes moneyjsx/static/fonts/WebPlus_HP_100LX_10x11.woff | Bin 0 -> 23168 bytes moneyjsx/static/fonts/WebPlus_HP_100LX_16x12.woff | Bin 0 -> 26132 bytes moneyjsx/static/fonts/WebPlus_HP_100LX_6x8-2x.woff | Bin 0 -> 20668 bytes moneyjsx/static/fonts/WebPlus_HP_100LX_6x8.woff | Bin 0 -> 20192 bytes moneyjsx/static/fonts/WebPlus_HP_100LX_8x8-2x.woff | Bin 0 -> 22424 bytes moneyjsx/static/fonts/WebPlus_HP_100LX_8x8.woff | Bin 0 -> 21300 bytes moneyjsx/static/fonts/WebPlus_HP_150_re.woff | Bin 0 -> 26088 bytes moneyjsx/static/fonts/WebPlus_IBM_BIOS-2x.woff | Bin 0 -> 21984 bytes moneyjsx/static/fonts/WebPlus_IBM_BIOS-2y.woff | Bin 0 -> 21836 bytes moneyjsx/static/fonts/WebPlus_IBM_BIOS.woff | Bin 0 -> 21260 bytes moneyjsx/static/fonts/WebPlus_IBM_CGA-2y.woff | Bin 0 -> 20892 bytes moneyjsx/static/fonts/WebPlus_IBM_CGA.woff | Bin 0 -> 20288 bytes moneyjsx/static/fonts/WebPlus_IBM_CGAthin-2y.woff | Bin 0 -> 23472 bytes moneyjsx/static/fonts/WebPlus_IBM_CGAthin.woff | Bin 0 -> 22860 bytes moneyjsx/static/fonts/WebPlus_IBM_EGA_8x14-2x.woff | Bin 0 -> 23340 bytes moneyjsx/static/fonts/WebPlus_IBM_EGA_8x14.woff | Bin 0 -> 22572 bytes moneyjsx/static/fonts/WebPlus_IBM_EGA_8x8-2x.woff | Bin 0 -> 21996 bytes moneyjsx/static/fonts/WebPlus_IBM_EGA_8x8.woff | Bin 0 -> 21276 bytes moneyjsx/static/fonts/WebPlus_IBM_EGA_9x14-2x.woff | Bin 0 -> 23424 bytes moneyjsx/static/fonts/WebPlus_IBM_EGA_9x14.woff | Bin 0 -> 22708 bytes moneyjsx/static/fonts/WebPlus_IBM_EGA_9x8-2x.woff | Bin 0 -> 22032 bytes moneyjsx/static/fonts/WebPlus_IBM_EGA_9x8.woff | Bin 0 -> 21316 bytes moneyjsx/static/fonts/WebPlus_IBM_MDA.woff | Bin 0 -> 23316 bytes moneyjsx/static/fonts/WebPlus_IBM_VGA_8x14-2x.woff | Bin 0 -> 23340 bytes moneyjsx/static/fonts/WebPlus_IBM_VGA_8x14.woff | Bin 0 -> 22572 bytes moneyjsx/static/fonts/WebPlus_IBM_VGA_8x16-2x.woff | Bin 0 -> 23280 bytes moneyjsx/static/fonts/WebPlus_IBM_VGA_8x16.woff | Bin 0 -> 22584 bytes moneyjsx/static/fonts/WebPlus_IBM_VGA_9x14-2x.woff | Bin 0 -> 23424 bytes moneyjsx/static/fonts/WebPlus_IBM_VGA_9x14.woff | Bin 0 -> 22708 bytes moneyjsx/static/fonts/WebPlus_IBM_VGA_9x16-2x.woff | Bin 0 -> 23444 bytes moneyjsx/static/fonts/WebPlus_IBM_VGA_9x16.woff | Bin 0 -> 22712 bytes moneyjsx/static/fonts/WebPlus_IBM_VGA_9x8-2x.woff | Bin 0 -> 22032 bytes moneyjsx/static/fonts/WebPlus_IBM_VGA_9x8.woff | Bin 0 -> 21312 bytes .../static/fonts/WebPlus_IBM_XGA-AI_12x20.woff | Bin 0 -> 31516 bytes .../static/fonts/WebPlus_Rainbow100_re_132.woff | Bin 0 -> 21236 bytes .../static/fonts/WebPlus_Rainbow100_re_40.woff | Bin 0 -> 20868 bytes .../static/fonts/WebPlus_Rainbow100_re_66.woff | Bin 0 -> 20880 bytes .../static/fonts/WebPlus_Rainbow100_re_80.woff | Bin 0 -> 21236 bytes .../static/fonts/WebPlus_Tandy1K-II_200L-2x.woff | Bin 0 -> 22324 bytes .../static/fonts/WebPlus_Tandy1K-II_200L-2y.woff | Bin 0 -> 22196 bytes moneyjsx/static/fonts/WebPlus_Tandy1K-II_200L.woff | Bin 0 -> 21532 bytes .../static/fonts/WebPlus_Tandy1K-II_225L-2y.woff | Bin 0 -> 22256 bytes moneyjsx/static/fonts/WebPlus_Tandy1K-II_225L.woff | Bin 0 -> 21596 bytes moneyjsx/static/fonts/WebPlus_ToshibaSat_8x14.woff | Bin 0 -> 21904 bytes moneyjsx/static/fonts/WebPlus_ToshibaSat_8x16.woff | Bin 0 -> 22164 bytes moneyjsx/static/fonts/WebPlus_ToshibaSat_8x8.woff | Bin 0 -> 20708 bytes moneyjsx/static/fonts/WebPlus_ToshibaSat_9x14.woff | Bin 0 -> 21908 bytes moneyjsx/static/fonts/WebPlus_ToshibaSat_9x16.woff | Bin 0 -> 22172 bytes moneyjsx/static/fonts/WebPlus_ToshibaSat_9x8.woff | Bin 0 -> 21048 bytes .../static/fonts/WebPlus_ToshibaTxL1_8x16.woff | Bin 0 -> 24320 bytes .../static/fonts/WebPlus_ToshibaTxL2_8x16.woff | Bin 0 -> 27420 bytes moneyjsx/static/highlight.css | 7 + moneyjsx/static/main.css | 882 +++++++++++++++++ moneyjsx/static/prompts.json | 104 ++ moneyjsx/tsconfig.json | 120 +++ moneyjsx/types/custom.d.ts | 8 + moneyjsx/webpack-dev.config.cjs | 45 + moneyjsx/webpack-prod.config.cjs | 48 + 395 files changed, 5845 insertions(+) create mode 100644 moneyjsx/package.json create mode 100644 moneyjsx/src/api.tsx create mode 100644 moneyjsx/src/ascii-art.tsx create mode 100644 moneyjsx/src/chat.tsx create mode 100644 moneyjsx/src/components.tsx create mode 100644 moneyjsx/src/first-landing.tsx create mode 100644 moneyjsx/src/header.tsx create mode 100644 moneyjsx/src/home.tsx create mode 100644 moneyjsx/src/index-page.tsx create mode 100644 moneyjsx/src/index.html create mode 100644 moneyjsx/src/jsx.tsx create mode 100644 moneyjsx/src/login.tsx create mode 100644 moneyjsx/src/payment-success.tsx create mode 100644 moneyjsx/src/settings.tsx create mode 100644 moneyjsx/src/support-api.tsx create mode 100644 moneyjsx/src/support-models.tsx create mode 100644 moneyjsx/src/support-tos.tsx create mode 100644 moneyjsx/src/support-tutorial.tsx create mode 100644 moneyjsx/src/support.tsx create mode 100644 moneyjsx/src/terminal.tsx create mode 100644 moneyjsx/src/tsconfig.json create mode 100644 moneyjsx/src/upgrade.tsx create mode 100644 moneyjsx/src/user.tsx create mode 100644 moneyjsx/src/util.tsx create mode 100644 moneyjsx/static/fonts/LICENSE.TXT create mode 100644 moneyjsx/static/fonts/README.NFO create mode 100644 moneyjsx/static/fonts/README.TXT create mode 100644 moneyjsx/static/fonts/Web437_ACM_VGA_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_ACM_VGA_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_ACM_VGA_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_ACM_VGA_9x14.woff create mode 100644 moneyjsx/static/fonts/Web437_ACM_VGA_9x16.woff create mode 100644 moneyjsx/static/fonts/Web437_ACM_VGA_9x8.woff create mode 100644 moneyjsx/static/fonts/Web437_AMI_EGA_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_AMI_EGA_8x8-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_AMI_EGA_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_AMI_EGA_9x14.woff create mode 100644 moneyjsx/static/fonts/Web437_AST_PremiumExec.woff create mode 100644 moneyjsx/static/fonts/Web437_ATI_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_ATI_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_ATI_8x8-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_ATI_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_ATI_9x14.woff create mode 100644 moneyjsx/static/fonts/Web437_ATI_9x16.woff create mode 100644 moneyjsx/static/fonts/Web437_ATI_9x8.woff create mode 100644 moneyjsx/static/fonts/Web437_ATI_SmallW_6x8.woff create mode 100644 moneyjsx/static/fonts/Web437_ATT_PC6300-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_ATT_PC6300.woff create mode 100644 moneyjsx/static/fonts/Web437_Acer710_CGA-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Acer710_CGA.woff create mode 100644 moneyjsx/static/fonts/Web437_Acer710_Mono.woff create mode 100644 moneyjsx/static/fonts/Web437_Acer_VGA_8x8-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Acer_VGA_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_Acer_VGA_9x8.woff create mode 100644 moneyjsx/static/fonts/Web437_Amstrad_PC-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Amstrad_PC.woff create mode 100644 moneyjsx/static/fonts/Web437_ApricotPortable.woff create mode 100644 moneyjsx/static/fonts/Web437_ApricotXenC.woff create mode 100644 moneyjsx/static/fonts/Web437_Apricot_200L-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Apricot_200L.woff create mode 100644 moneyjsx/static/fonts/Web437_Apricot_256L-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Apricot_256L.woff create mode 100644 moneyjsx/static/fonts/Web437_Apricot_Mono.woff create mode 100644 moneyjsx/static/fonts/Web437_CL_EagleIII_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_CL_EagleIII_9x16.woff create mode 100644 moneyjsx/static/fonts/Web437_CL_EagleII_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_CL_EagleII_9x16.woff create mode 100644 moneyjsx/static/fonts/Web437_CL_Stingray_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_CL_Stingray_8x16_bold.woff create mode 100644 moneyjsx/static/fonts/Web437_CL_Stingray_8x19.woff create mode 100644 moneyjsx/static/fonts/Web437_CL_Stingray_8x19_bold.woff create mode 100644 moneyjsx/static/fonts/Web437_CompaqThin_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_CompaqThin_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_CompaqThin_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_Compaq_Port3-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_Compaq_Port3.woff create mode 100644 moneyjsx/static/fonts/Web437_Compis.woff create mode 100644 moneyjsx/static/fonts/Web437_Copam_BIOS-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Copam_BIOS.woff create mode 100644 moneyjsx/static/fonts/Web437_Cordata_PPC-21.woff create mode 100644 moneyjsx/static/fonts/Web437_Cordata_PPC-400.woff create mode 100644 moneyjsx/static/fonts/Web437_DG_One-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_DG_One-2y_bold.woff create mode 100644 moneyjsx/static/fonts/Web437_DG_One.woff create mode 100644 moneyjsx/static/fonts/Web437_DG_One_bold.woff create mode 100644 moneyjsx/static/fonts/Web437_DOS-V_TWN16.woff create mode 100644 moneyjsx/static/fonts/Web437_DOS-V_TWN19.woff create mode 100644 moneyjsx/static/fonts/Web437_DOS-V_re_ANK16.woff create mode 100644 moneyjsx/static/fonts/Web437_DOS-V_re_ANK19.woff create mode 100644 moneyjsx/static/fonts/Web437_DOS-V_re_ANK24.woff create mode 100644 moneyjsx/static/fonts/Web437_DOS-V_re_ANK30.woff create mode 100644 moneyjsx/static/fonts/Web437_DOS-V_re_JPN12.woff create mode 100644 moneyjsx/static/fonts/Web437_DOS-V_re_JPN16.woff create mode 100644 moneyjsx/static/fonts/Web437_DOS-V_re_JPN19.woff create mode 100644 moneyjsx/static/fonts/Web437_DOS-V_re_JPN24.woff create mode 100644 moneyjsx/static/fonts/Web437_DOS-V_re_JPN30.woff create mode 100644 moneyjsx/static/fonts/Web437_DOS-V_re_PRC16.woff create mode 100644 moneyjsx/static/fonts/Web437_DOS-V_re_PRC19.woff create mode 100644 moneyjsx/static/fonts/Web437_DTK_BIOS-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_DTK_BIOS.woff create mode 100644 moneyjsx/static/fonts/Web437_EagleSpCGA_Alt1-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_EagleSpCGA_Alt1.woff create mode 100644 moneyjsx/static/fonts/Web437_EagleSpCGA_Alt2-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_EagleSpCGA_Alt2.woff create mode 100644 moneyjsx/static/fonts/Web437_EagleSpCGA_Alt3-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_EagleSpCGA_Alt3.woff create mode 100644 moneyjsx/static/fonts/Web437_EpsonMGA-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_EpsonMGA.woff create mode 100644 moneyjsx/static/fonts/Web437_EpsonMGA_Alt-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_EpsonMGA_Alt.woff create mode 100644 moneyjsx/static/fonts/Web437_EpsonMGA_Mono.woff create mode 100644 moneyjsx/static/fonts/Web437_EuroPC_CGA-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_EuroPC_CGA.woff create mode 100644 moneyjsx/static/fonts/Web437_EuroPC_Mono.woff create mode 100644 moneyjsx/static/fonts/Web437_EverexME_5x8.woff create mode 100644 moneyjsx/static/fonts/Web437_EverexME_7x8.woff create mode 100644 moneyjsx/static/fonts/Web437_EverexME_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_FMTowns_re_8x16-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_FMTowns_re_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_FMTowns_re_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_HP_100LX_10x11.woff create mode 100644 moneyjsx/static/fonts/Web437_HP_100LX_16x12.woff create mode 100644 moneyjsx/static/fonts/Web437_HP_100LX_6x8-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_HP_100LX_6x8.woff create mode 100644 moneyjsx/static/fonts/Web437_HP_100LX_8x8-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_HP_100LX_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_HP_150_re.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_3270pc.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_BIOS-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_BIOS-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_BIOS.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_CGA-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_CGA.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_CGAthin-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_CGAthin.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_Conv-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_Conv-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_Conv.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_DOS_ISO8-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_DOS_ISO8.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_DOS_ISO9-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_DOS_ISO9.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_EGA_8x14-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_EGA_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_EGA_8x8-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_EGA_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_EGA_9x14-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_EGA_9x14.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_EGA_9x8-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_EGA_9x8.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_MDA.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_Model30r0-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_Model30r0.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_Model3x_Alt1.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_Model3x_Alt2.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_Model3x_Alt3.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_Model3x_Alt4.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_PGC-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_PGC.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_PS-55_re.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_VGA_8x14-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_VGA_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_VGA_8x16-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_VGA_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_VGA_9x14-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_VGA_9x14.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_VGA_9x16-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_VGA_9x16.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_VGA_9x8-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_VGA_9x8.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_XGA-AI_12x20.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_XGA-AI_12x23.woff create mode 100644 moneyjsx/static/fonts/Web437_IBM_XGA-AI_7x15.woff create mode 100644 moneyjsx/static/fonts/Web437_IGS_VGA_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_IGS_VGA_9x16.woff create mode 100644 moneyjsx/static/fonts/Web437_ITT_Xtra-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_ITT_Xtra.woff create mode 100644 moneyjsx/static/fonts/Web437_Kaypro2K_G-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Kaypro2K_G.woff create mode 100644 moneyjsx/static/fonts/Web437_LE_Model_D_CGA-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_LE_Model_D_CGA.woff create mode 100644 moneyjsx/static/fonts/Web437_LE_Model_D_Mono.woff create mode 100644 moneyjsx/static/fonts/Web437_MBytePC230_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_MBytePC230_CGA-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_MBytePC230_CGA.woff create mode 100644 moneyjsx/static/fonts/Web437_MBytePC230_EGA.woff create mode 100644 moneyjsx/static/fonts/Web437_MBytePC230_Mono.woff create mode 100644 moneyjsx/static/fonts/Web437_Master_512-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Master_512-2y_bold.woff create mode 100644 moneyjsx/static/fonts/Web437_Master_512-M7.woff create mode 100644 moneyjsx/static/fonts/Web437_Master_512-M7_bold.woff create mode 100644 moneyjsx/static/fonts/Web437_Master_512.woff create mode 100644 moneyjsx/static/fonts/Web437_Master_512_bold.woff create mode 100644 moneyjsx/static/fonts/Web437_Mindset-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_Mindset-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Mindset.woff create mode 100644 moneyjsx/static/fonts/Web437_NEC_APC3_8x16-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_NEC_APC3_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_NEC_APC3_8x8-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_NEC_APC3_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_NEC_MultiSpeed-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_NEC_MultiSpeed-2x_bold.woff create mode 100644 moneyjsx/static/fonts/Web437_NEC_MultiSpeed.woff create mode 100644 moneyjsx/static/fonts/Web437_NEC_MultiSpeed_bold.woff create mode 100644 moneyjsx/static/fonts/Web437_Nix8810_M15.woff create mode 100644 moneyjsx/static/fonts/Web437_Nix8810_M16.woff create mode 100644 moneyjsx/static/fonts/Web437_Nix8810_M35-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Nix8810_M35.woff create mode 100644 moneyjsx/static/fonts/Web437_OlivettiThin_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_OlivettiThin_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_OlivettiThin_9x14.woff create mode 100644 moneyjsx/static/fonts/Web437_OlivettiThin_9x16.woff create mode 100644 moneyjsx/static/fonts/Web437_Olivetti_M15-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Olivetti_M15.woff create mode 100644 moneyjsx/static/fonts/Web437_Paradise132_7x16.woff create mode 100644 moneyjsx/static/fonts/Web437_Paradise132_7x9.woff create mode 100644 moneyjsx/static/fonts/Web437_Philips_YES_G-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_Philips_YES_G-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Philips_YES_G.woff create mode 100644 moneyjsx/static/fonts/Web437_Philips_YES_T-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Philips_YES_T.woff create mode 100644 moneyjsx/static/fonts/Web437_PhoenixEGA_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_PhoenixEGA_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_PhoenixEGA_8x8-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_PhoenixEGA_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_PhoenixEGA_9x14.woff create mode 100644 moneyjsx/static/fonts/Web437_PhoenixVGA_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_PhoenixVGA_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_PhoenixVGA_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_PhoenixVGA_9x14.woff create mode 100644 moneyjsx/static/fonts/Web437_PhoenixVGA_9x16.woff create mode 100644 moneyjsx/static/fonts/Web437_PhoenixVGA_9x8.woff create mode 100644 moneyjsx/static/fonts/Web437_Phoenix_BIOS-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Phoenix_BIOS.woff create mode 100644 moneyjsx/static/fonts/Web437_Portfolio_6x8.woff create mode 100644 moneyjsx/static/fonts/Web437_RM_Nimbus-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_RM_Nimbus.woff create mode 100644 moneyjsx/static/fonts/Web437_Rainbow100_re_132.woff create mode 100644 moneyjsx/static/fonts/Web437_Rainbow100_re_40.woff create mode 100644 moneyjsx/static/fonts/Web437_Rainbow100_re_66.woff create mode 100644 moneyjsx/static/fonts/Web437_Rainbow100_re_80.woff create mode 100644 moneyjsx/static/fonts/Web437_Robotron_A7100.woff create mode 100644 moneyjsx/static/fonts/Web437_STB_AutoEGA_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_STB_AutoEGA_9x14.woff create mode 100644 moneyjsx/static/fonts/Web437_SanyoMBC16-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_SanyoMBC16.woff create mode 100644 moneyjsx/static/fonts/Web437_SanyoMBC55x-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_SanyoMBC55x.woff create mode 100644 moneyjsx/static/fonts/Web437_SanyoMBC775-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_SanyoMBC775.woff create mode 100644 moneyjsx/static/fonts/Web437_SeequaCm-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_SeequaCm.woff create mode 100644 moneyjsx/static/fonts/Web437_Sharp_PC3K-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_Sharp_PC3K.woff create mode 100644 moneyjsx/static/fonts/Web437_Sharp_PC3K_Alt-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_Sharp_PC3K_Alt.woff create mode 100644 moneyjsx/static/fonts/Web437_Siemens_PC-D.woff create mode 100644 moneyjsx/static/fonts/Web437_Sigma_RM_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_Sigma_RM_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_Sigma_RM_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_Sigma_RM_9x14.woff create mode 100644 moneyjsx/static/fonts/Web437_Sigma_RM_9x16.woff create mode 100644 moneyjsx/static/fonts/Web437_Sigma_RM_9x8.woff create mode 100644 moneyjsx/static/fonts/Web437_SperryPC_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_SperryPC_CGA-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_SperryPC_CGA.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy1K-II_200L-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy1K-II_200L-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy1K-II_200L.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy1K-II_225L-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy1K-II_225L.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy1K-II_Mono.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy1K-I_200L-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy1K-I_200L-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy1K-I_200L.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy1K-I_225L-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy1K-I_225L.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy2K-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy2K.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy2K_G-2x.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy2K_G-TV.woff create mode 100644 moneyjsx/static/fonts/Web437_Tandy2K_G.woff create mode 100644 moneyjsx/static/fonts/Web437_TelePC-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_TelePC.woff create mode 100644 moneyjsx/static/fonts/Web437_Ti_Pro.woff create mode 100644 moneyjsx/static/fonts/Web437_ToshibaSat_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_ToshibaSat_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_ToshibaSat_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_ToshibaSat_9x14.woff create mode 100644 moneyjsx/static/fonts/Web437_ToshibaSat_9x16.woff create mode 100644 moneyjsx/static/fonts/Web437_ToshibaSat_9x8.woff create mode 100644 moneyjsx/static/fonts/Web437_ToshibaT300_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_ToshibaT300_8x8-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_ToshibaT300_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_ToshibaTxL1_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_ToshibaTxL1_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_ToshibaTxL2_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_ToshibaTxL2_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_TridentEarly_8x11.woff create mode 100644 moneyjsx/static/fonts/Web437_TridentEarly_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_TridentEarly_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_TridentEarly_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_TridentEarly_9x14.woff create mode 100644 moneyjsx/static/fonts/Web437_TridentEarly_9x16.woff create mode 100644 moneyjsx/static/fonts/Web437_TridentEarly_9x8.woff create mode 100644 moneyjsx/static/fonts/Web437_Trident_8x11.woff create mode 100644 moneyjsx/static/fonts/Web437_Trident_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_Trident_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_Trident_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_Trident_9x14.woff create mode 100644 moneyjsx/static/fonts/Web437_Trident_9x16.woff create mode 100644 moneyjsx/static/fonts/Web437_Trident_9x8.woff create mode 100644 moneyjsx/static/fonts/Web437_TsengEVA_132_6x14.woff create mode 100644 moneyjsx/static/fonts/Web437_TsengEVA_132_6x8.woff create mode 100644 moneyjsx/static/fonts/Web437_VTech_BIOS-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_VTech_BIOS.woff create mode 100644 moneyjsx/static/fonts/Web437_Verite_8x14.woff create mode 100644 moneyjsx/static/fonts/Web437_Verite_8x16.woff create mode 100644 moneyjsx/static/fonts/Web437_Verite_8x8-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Verite_8x8.woff create mode 100644 moneyjsx/static/fonts/Web437_Verite_9x14.woff create mode 100644 moneyjsx/static/fonts/Web437_Verite_9x16.woff create mode 100644 moneyjsx/static/fonts/Web437_Verite_9x8.woff create mode 100644 moneyjsx/static/fonts/Web437_Wang_Pro_Color-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Wang_Pro_Color.woff create mode 100644 moneyjsx/static/fonts/Web437_Wang_Pro_Mono.woff create mode 100644 moneyjsx/static/fonts/Web437_Wyse700a-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Wyse700a.woff create mode 100644 moneyjsx/static/fonts/Web437_Wyse700b-2y.woff create mode 100644 moneyjsx/static/fonts/Web437_Wyse700b.woff create mode 100644 moneyjsx/static/fonts/Web437_Zenith_Z-100.woff create mode 100644 moneyjsx/static/fonts/Web437_Zenith_Z-100_Alt.woff create mode 100644 moneyjsx/static/fonts/WebPlus_AST_PremiumExec.woff create mode 100644 moneyjsx/static/fonts/WebPlus_Amstrad_PC-2y.woff create mode 100644 moneyjsx/static/fonts/WebPlus_Amstrad_PC.woff create mode 100644 moneyjsx/static/fonts/WebPlus_Cordata_PPC-21.woff create mode 100644 moneyjsx/static/fonts/WebPlus_Cordata_PPC-400.woff create mode 100644 moneyjsx/static/fonts/WebPlus_HP_100LX_10x11.woff create mode 100644 moneyjsx/static/fonts/WebPlus_HP_100LX_16x12.woff create mode 100644 moneyjsx/static/fonts/WebPlus_HP_100LX_6x8-2x.woff create mode 100644 moneyjsx/static/fonts/WebPlus_HP_100LX_6x8.woff create mode 100644 moneyjsx/static/fonts/WebPlus_HP_100LX_8x8-2x.woff create mode 100644 moneyjsx/static/fonts/WebPlus_HP_100LX_8x8.woff create mode 100644 moneyjsx/static/fonts/WebPlus_HP_150_re.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_BIOS-2x.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_BIOS-2y.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_BIOS.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_CGA-2y.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_CGA.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_CGAthin-2y.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_CGAthin.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_EGA_8x14-2x.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_EGA_8x14.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_EGA_8x8-2x.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_EGA_8x8.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_EGA_9x14-2x.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_EGA_9x14.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_EGA_9x8-2x.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_EGA_9x8.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_MDA.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_VGA_8x14-2x.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_VGA_8x14.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_VGA_8x16-2x.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_VGA_8x16.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_VGA_9x14-2x.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_VGA_9x14.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_VGA_9x16-2x.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_VGA_9x16.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_VGA_9x8-2x.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_VGA_9x8.woff create mode 100644 moneyjsx/static/fonts/WebPlus_IBM_XGA-AI_12x20.woff create mode 100644 moneyjsx/static/fonts/WebPlus_Rainbow100_re_132.woff create mode 100644 moneyjsx/static/fonts/WebPlus_Rainbow100_re_40.woff create mode 100644 moneyjsx/static/fonts/WebPlus_Rainbow100_re_66.woff create mode 100644 moneyjsx/static/fonts/WebPlus_Rainbow100_re_80.woff create mode 100644 moneyjsx/static/fonts/WebPlus_Tandy1K-II_200L-2x.woff create mode 100644 moneyjsx/static/fonts/WebPlus_Tandy1K-II_200L-2y.woff create mode 100644 moneyjsx/static/fonts/WebPlus_Tandy1K-II_200L.woff create mode 100644 moneyjsx/static/fonts/WebPlus_Tandy1K-II_225L-2y.woff create mode 100644 moneyjsx/static/fonts/WebPlus_Tandy1K-II_225L.woff create mode 100644 moneyjsx/static/fonts/WebPlus_ToshibaSat_8x14.woff create mode 100644 moneyjsx/static/fonts/WebPlus_ToshibaSat_8x16.woff create mode 100644 moneyjsx/static/fonts/WebPlus_ToshibaSat_8x8.woff create mode 100644 moneyjsx/static/fonts/WebPlus_ToshibaSat_9x14.woff create mode 100644 moneyjsx/static/fonts/WebPlus_ToshibaSat_9x16.woff create mode 100644 moneyjsx/static/fonts/WebPlus_ToshibaSat_9x8.woff create mode 100644 moneyjsx/static/fonts/WebPlus_ToshibaTxL1_8x16.woff create mode 100644 moneyjsx/static/fonts/WebPlus_ToshibaTxL2_8x16.woff create mode 100644 moneyjsx/static/highlight.css create mode 100644 moneyjsx/static/main.css create mode 100644 moneyjsx/static/prompts.json create mode 100644 moneyjsx/tsconfig.json create mode 100644 moneyjsx/types/custom.d.ts create mode 100644 moneyjsx/webpack-dev.config.cjs create mode 100644 moneyjsx/webpack-prod.config.cjs (limited to 'moneyjsx') diff --git a/moneyjsx/package.json b/moneyjsx/package.json new file mode 100644 index 0000000..4418f02 --- /dev/null +++ b/moneyjsx/package.json @@ -0,0 +1,32 @@ +{ + "type": "module", + "name": "jqueryjsx", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "build": "webpack --config webpack-prod.config.cjs", + "start": "webpack serve --open --config webpack-dev.config.cjs" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "@types/jquery": "^3.5.32", + "@types/react": "^18.3.12", + "copy-webpack-plugin": "^12.0.2", + "css-loader": "^7.1.2", + "highlight.js": "^11.11.1", + "html-webpack-plugin": "^5.6.3", + "jquery": "^4.0.0-beta.2", + "jsx-runtime": "^1.2.0", + "nakedjsx": "^0.17.2", + "style-loader": "^4.0.0", + "typescript": "^5.6.3" + }, + "devDependencies": { + "ts-loader": "^9.5.1", + "webpack": "^5.95.0", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^5.1.0" + } +} diff --git a/moneyjsx/src/api.tsx b/moneyjsx/src/api.tsx new file mode 100644 index 0000000..4ca79c2 --- /dev/null +++ b/moneyjsx/src/api.tsx @@ -0,0 +1,80 @@ +// todo: change this +export const url = "https://api.axonbox.net"; +export let models: Model[] = []; + +export interface ReqParams { + method: string, + body?: string, +} + +export interface Model { + name: string, + capabilities: any, + description: { + full: string, + short: string, + }, + license: string, + free: number +} + +export async function post( endpoint: string, body: Object ) { + return await req( endpoint, { + method: "POST", + body: JSON.stringify( body ), + } ); +} + +export async function req( endpoint: string, params: ReqParams ) { + const res = await fetch( `${url}/${endpoint}`, { + method: params.method, + headers: { + "Content-Type": "application/json", + }, + body: params.body, + } ); + + if( !res.ok ) { + let json = null; + try { + json = await res.json(); + } catch( e: any ) { + throw new Error( "error contacting server" ); + } + + throw new Error( json.msg ); + } + + const json = await res.json(); + if( json.status != 'ok' ) + throw new Error( json.msg ); + return json; +} + +export async function updateModels() { + parseModels(); + + try { + const res = await post( 'models', {} ); + models = res.models as Model[]; + localStorage.setItem( 'models', JSON.stringify( models ) ); + } catch( e: any ) { + throw new Error( e.message ); + } +} + +export function getModelFromName( name: string ) { + for( let model of models ) { + if( model.name === name ) + return model; + } + + return null; +} + +/** + * parses existing models from localStorage +**/ +export function parseModels() { + models = JSON.parse( localStorage.getItem( 'models' ) || '[]' ) as Model[]; +} diff --git a/moneyjsx/src/ascii-art.tsx b/moneyjsx/src/ascii-art.tsx new file mode 100644 index 0000000..d2f53b3 --- /dev/null +++ b/moneyjsx/src/ascii-art.tsx @@ -0,0 +1,165 @@ +import * as JSX from "./jsx"; +import $ from "jquery"; + +export default function AsciiArt() { + const ret =
+ { asciiArtStr } +
; + + setTimeout( doAsciiArt ); + return ret; +} + +let startTime = 0.0; +let anim = 0.0; + +function animFunc( a: number ) { + let ringRadius = anim; + let radius = a; + + let dist = ringRadius - radius; + + dist = Math.abs( dist ); + + let ret = Math.pow( dist, 0.1 + 0.8 * Math.pow( (anim + 0.5) / 2, 1.6 ) ); + let remain = ret % 0.12; + return ret - remain; +} + +function hexToRgb( hex: string ) { + let r = parseInt( hex.slice( 1, 3 ), 16 ); + let g = parseInt( hex.slice( 3, 5 ), 16 ); + let b = parseInt( hex.slice( 5, 7 ), 16 ); + return [ r, g, b ]; +} + +function lerpColor( c1: number[], c2: number[], t: number ) { + let r1 = c1[0], g1 = c1[1], b1 = c1[2]; + let r2 = c2[0], g2 = c2[1], b2 = c2[2]; + let r = r1 + ( r2 - r1 ) * t; + let g = g1 + ( g2 - g1 ) * t; + let b = b1 + ( b2 - b1 ) * t; + return [ Math.round( r ), Math.round( g ), Math.round( b ) ]; +} + +function getDist( x: number, y: number ) { + const x1 = 0.5 - x / 125; + const y1 = 0.5 - y / 63; + return Math.sqrt( x1 * x1 + y1 * y1 ); +} + +let isDoingAnim = false; +function doAsciiArt() { + let div = $( "#ascii-art" ); + if( !div.length ) { isDoingAnim = false; return; } + isDoingAnim = true; + + let deltaTime = ( Date.now() - startTime ) * 0.001; + startTime = Date.now(); + anim += .5 * deltaTime; + + if( anim > 2 ) + anim = -0.5; + + let rootColor = hexToRgb( $( ':root' ).css( '--front' ) ); + let innerStr = ""; + for( let i = 0; i < asciiArtStr.length; ++i ) { + let x = i % 125; + let y = Math.floor( i / 125 ); + + if( x == 124 ) { + continue; + } + if( asciiArtStr[i] == ',' || asciiArtStr[i] == ' ' || asciiArtStr[i] == '\t' ) { + innerStr += asciiArtStr[i]; + continue; + } + + let dist = getDist( x, y ); + if( dist < 0.133 ) { + innerStr += asciiArtStr[i]; + continue; + } + + let color = []; + if( asciiArtStr[i] == '#' ) { + let a = animFunc( dist * 2 ); + color = lerpColor( rootColor, [255, 255, 255, 1], a ); + color[3] = Math.max( Math.min( 1, Math.pow( dist, 2 ) + (1.0 - a) ), 0.8 ); + } + else { + color = [255, 255, 255, Math.max( 0.05, 1.0 - animFunc( (dist - 0.1) * 2 ) ) ]; + } + // appending string is faster than jsx + innerStr += `${asciiArtStr[i]}`; + } + + div.html( innerStr ); + setTimeout( doAsciiArt, 75 ); +} + +const asciiArtStr = ` + # # # # + # # # # + # # # # + # # # # + # # # # + # # # # + # # # # + # # # # + # # # # + # # # # + # # # # + # # .. # # + # # .. # # + # # .### ### + # # ### ### .. + # # # # .... + # # # # .... + # # # # .. + # # # # + # # # # + .. ############################################## + ................................... ###.. ### ........... ### .........### + .................................. ####+############################################ + #######################################+# #.# + #####-# #.# + #################################### # # #.# + # # #.# + ######################################### #.#...................................... + ### #.#...............--..................... + ######################################### | ##################.###################### + # # ,---.. ,,---.,---.|---.,---.. , ### ### ###... + ################ ,---| >< | || || || | >< ################ ### #################### + ########################### .. ### \`---^' \`\`---'\` '\`---'\`---'' \` #.# ... ### ### + ################## #.# ... ####### + ######################### ... # # #.# . ################## + ############################. #.# #.# # # .............. + ###- #.# #-########################............... + ############################- # # #+# ...###...... ...... + .........................##############-# #-########################.... .. + .........................###. #-# #.# ....................... + ..............+########################################################## ...................... + .................###................... ### ### ...### .......... + .............. ############################################## + ....# #..... # # + ... ... # # # # + ................ # # # # + .................. # # # # + .......################## # # . + .....###### ### # # + ####+###################. # # + ######+ .............. # # + # # ................. # # + # # ...... # # + # # # # + # # # # + # # # # + # # # # + # # # # + # # # # + # # # # + # # # # + # # # # + # # # # +`; diff --git a/moneyjsx/src/chat.tsx b/moneyjsx/src/chat.tsx new file mode 100644 index 0000000..56798ab --- /dev/null +++ b/moneyjsx/src/chat.tsx @@ -0,0 +1,1023 @@ +import $ from 'jquery'; +import * as JSX from './jsx'; +import * as api from './api'; +import * as user from './user'; +import * as util from './util'; + +import { Spinner, OkCancelPopup, addPopup, OkPopup } from './components'; + +let chat_id = ''; +let chat_name = 'new chat'; // todo: use or rm +export let msglog: Msg[] = []; +export let file_list: MsgFile[] = []; +let hljs = null; +// todo: send done msg from server when tool limit is reached and dont append line +// to prevent empty spinner +let needs_append = false; +let in_code_block = false; +let in_reason_block = false; +let was_in_reason = false; +let reason_buf = ''; +let code_block_buf = ''; +let tool_buffer = ''; + +export interface MsgFile { + name: string, + type: string, + content: string +}; + +export interface Msg { + content: string, + role: string, + timestamp: string, + toolCall?: string, + images?: string[], + files?: MsgFile[], +}; + +export interface ClientOptions { + seed?: number, + temperature?: number, +}; + +export interface ChatReq { + model: string, + messages: Msg[], + system: string, + chatfile?: string, + options?: ClientOptions, + generateTitle: boolean, + token: string +}; + +export interface ToolCall { + name: string, + parameters: any +}; + +interface ChatJsonRes { + done: boolean, + chunks?: string[], + msgs?: Msg[], + title?: string, + err?: string, +}; + +function getChatId() { + const url = new URL( window.location.href ); + const id = url.searchParams.get( 'id' ); + if( !id ) { + chat_id = ''; + msglog = []; + return null; + } + + if( id == '0' ) { + chat_id = ''; + msglog = []; + return null; + } + + chat_id = id.slice(); + return chat_id; +} + +export async function createChat() { + const res = await user.createChat(); + chat_id = res.chatId; + chat_name = 'new chat'; + + JSX.pushParams( { id: chat_id } ); + await user.updatePrefs(); // todo : error handle this w text box when component made + return getChatId(); +} + +function isToolStr( str: string ) : boolean { + const model = api.getModelFromName( user.settings.site_prefs.model || '' ); + if( !model ) + return false; + + const trimmed = str.replace( /\s+/g, '' ).toLowerCase(); + + for( let tool in model.capabilities ) { + const str = `{"name":"${tool.toLowerCase()}"`; + let matched = true; + + for( let i = 0; i < Math.min( trimmed.length, str.length ); ++i ) { + if( trimmed[i] !== str[i] ) { + matched = false; + break; + } + } + + if( matched ) + return true; + } + + return false; +} + + +let chunk_buf = ''; +function parseChatJson( rawjson: string, is_done: boolean ) : ChatJsonRes { + let msgs = rawjson.split( '\n' ); + let clean_done = false; + let ret_msgs: Msg[] = []; + let ret_chunks: string[] = []; + let title: string = ''; + + for( let raw of msgs ) { + if( !raw.length ) + continue; + + let json = null; + try { + json = JSON.parse( chunk_buf + raw ); + } catch( e: any ) { + chunk_buf += raw; + return { done: false }; + } + + chunk_buf = ''; + + if( json.done ) + clean_done = true; + + if( !clean_done && is_done ) + return { done: true, err: "the stream was closed abruptly. please try again." }; + else if( json.status == 'error' || json.status == 'busy' ) + return { done: true, err: json.msg }; + + if( json.status != 'ok' ) + return { done: true, err: json.msg || 'unknown error' }; + + let chunk: string = json.response; + if( json.finalMsg && json.finalMsg.length > 0 ) { + ret_msgs.push( { timestamp: (new Date()).toLocaleString(), role: 'assistant', content: json.finalMsg } ); + if( json.title && !title.length ) + title = json.title; + } else if( json.tool ) { + ret_msgs.push( { timestamp: (new Date()).toLocaleString(), role: 'tool', content: chunk } ); + } else { + ret_chunks.push( chunk ); + } + } + + return { + done: clean_done || is_done, + title: title.length > 0 ? title : null, + msgs: ret_msgs, + chunks: ret_chunks + }; +} + +function appendUserLine( msg: string, files?: MsgFile[] ) { + const terminal = $( "#terminal-inner" ); + const isbottom = terminal[0].scrollTop == (terminal[0] as any).scrollTopMax; + $( "#terminal-inner" ).append( +
+
+ { user.settings.nickname } + +
+
+ { msg } +
+ { files && } +
+ ); + + if( isbottom ) + terminal.scrollTop( terminal[0].scrollHeight ); +} + +function appendModelLine() { + const terminal = $( "#terminal-inner" ); + const isbottom = terminal[0].scrollTop == (terminal[0] as any).scrollTopMax; + + $( "#terminal-inner" ).append(
+
+ { user.settings.site_prefs.model || 'err' } + +
+
+ +
+
); + + if( isbottom ) + terminal.scrollTop( terminal[0].scrollHeight ); +} + +// inserts a new text div +function appendText() { + const terminal = $( "#terminal-inner" ); + const isbottom = terminal[0].scrollTop == (terminal[0] as any).scrollTopMax; + + $( ".chat-line" ).last().append(
); + + if( isbottom ) + terminal.scrollTop( terminal[0].scrollHeight ); +} + +// inserts a new code div +function appendCode( lang?: string ) { + if( lang ) { + $( ".chat-line" ).last().append( +
+        
{ lang }
+ +
+ ); + } else { + $( ".chat-line" ).last().append(
); + } +} + + +function ToolInfo( props: any ) { + return
+
+ { props.title } +
+
+ { props.collapsed ? '+' : '-' } +
+
+} + +function appendReason() { + const collapseToggle = () => { + let list = el.find( '.reason-output' ); + let btn = el.find( '.tool-call-collapse' ); + + const open = list.css( 'display' ) == 'block'; + if( !open ) { + list.css( 'display', 'block' ); + btn.text( '-' ); + } else { + list.css( 'display', 'none' ); + btn.text( '+' ); + } + }; + + const el = $(
); + const ti = $( ); + ti.find( ".tool-call-title" ).append( ); + el.append( ti ); + el.append( ); + + $( ".chat-line" ).last().find( ".chat-content" ).replaceWith( el ); +} + +function outputReason( buf: string ) { + const el = $( ".reason-output" ).last(); + const txt = el.text(); + el.text( txt + buf ); +} + +function outputTool( tool: ToolCall, appendLine?: boolean ) { + const content = $( ".chat-line" ).last().find( ".chat-content" ); + if( needs_append || content.text().length > 1 ) + appendModelLine(); + + const collapseToggle = () => { + let list = el.find( '.tool-call-list' ); + let btn = el.find( '.tool-call-collapse' ); + + const open = list.css( 'display' ) == 'block'; + if( !open ) { + list.css( 'display', 'block' ); + btn.text( '-' ); + } else { + list.css( 'display', 'none' ); + btn.text( '+' ); + } + }; + + const el = $(
); + const trimmed = tool.name.replace( /\s+/g, '' ); + switch( trimmed.toLowerCase() ) { + case 'notes': + el.append( ); + el.append(
{ tool.parameters.contents || '' }
); + break; + case 'web': + el.append( ); + el.append(
{ tool.parameters.url || '' }
); + if( appendLine ) needs_append = true; + break; + case 'remind': + el.append( ); + el.append(
{ tool.parameters.keywords ? tool.parameters.keywords.join( ' ' ) : '' }
); + if( appendLine ) needs_append = true; + break; + } + if( in_reason_block ) { + $( ".chat-line" ).last().find( ".tool-call" ).find( ".spinner" ).remove(); + $( ".chat-line" ).last().append( el ); + appendModelLine(); + needs_append = false; + appendReason(); + } + else { + $( ".chat-line" ).last().find( ".chat-content" ).replaceWith( el ); + } +} + +function outputError( e: string ) { + const terminal = $( "#terminal-inner" ); + const isbottom = terminal[0].scrollTop == (terminal[0] as any).scrollTopMax; + + if( needs_append ) { + appendModelLine(); + needs_append = false; + } + + let el = $( ".chat-line" ).last(); + el.empty(); + el.append(
{ e }
); + + if( isbottom ) + terminal.scrollTop( terminal[0].scrollHeight ); +} + +function outputChunk( chunk: string ) { + const terminal = $( "#terminal-inner" ); + const isbottom = terminal[0].scrollTop == (terminal[0] as any).scrollTopMax; + + if( needs_append ) { + appendModelLine(); + needs_append = false; + } + + let el = $( ".chat-line" ).last().find( ".chat-content" ).last(); + el.find( '.spinner' ).remove(); + el.text( el.text() + chunk ); + + if( isbottom ) + terminal.scrollTop( terminal[0].scrollHeight ); +} + +function outputCode( chunk: string ) { + const terminal = $( "#terminal-inner" ); + const isbottom = terminal[0].scrollTop == (terminal[0] as any).scrollTopMax; + + if( needs_append ) { + appendModelLine(); + needs_append = false; + } + + let el = $( ".chat-line" ).last().find( "code" ).last(); + el.find( '.spinner' ).remove(); + el.text( el.text() + chunk ); + + if( hljs ) + hljs.highlightElement( el[0] ); + + if( isbottom ) + terminal.scrollTop( terminal[0].scrollHeight ); +} + +function checkToolBuffer( chunk: string ) { + tool_buffer += chunk; + + let tool: ToolCall | null = null; + if( isToolStr( tool_buffer ) ) { + try { + tool = JSON.parse( tool_buffer ); + outputTool( tool, true ); + tool_buffer = ''; + } catch( e: any ) {} + + return true; + } + + let buf = tool_buffer.slice(); + tool_buffer = ''; + return buf; +} + + +/// returns 1 and sets in_reason_block if the msg starts with a reason token +/// returns -1 if the msg does not match a reason token +/// returns 0 if the reason token is partially completed +function checkReasonBuffer( chunk: string ) { + const buf = chunk.toLowerCase(); + const wanted_begin = ''; + if( !in_reason_block ) { + if( buf == wanted_begin || (buf.length > wanted_begin.length && buf.startsWith( wanted_begin )) ) { + appendReason(); + in_reason_block = true; + return 1; + } + if( wanted_begin.startsWith( buf ) ) + return 0; + + return -1; + } + + const wanted_end = ''; + if( buf == wanted_end || (buf.length > wanted_end.length && buf.startsWith( wanted_end )) ) { + $( ".chat-line" ).last().append(
{ '\n' }
); + $( ".tool-call" ).last().find( ".spinner" ).remove(); + in_reason_block = false; + was_in_reason = true; + return 1; + } + if( wanted_end.endsWith( buf ) ) + return 0; + + return -1; +} + +// todo: clean, static return type. maybe nullable string +function checkCodeBuffer( chunk: string ) { + const backtick = chunk.search( '`' ); + if( backtick != -1 ) { + code_block_buf += chunk.slice( backtick ); + return true; + } + + let buf = chunk; + let parts = chunk.split( '\n' ); + if( code_block_buf.startsWith( '```' ) ) { + if( parts.length <= 1 ) + return true; + + buf = parts[1]; + if( !in_code_block ) { + appendCode(); + const lang = parts[0].substring( 3 ); + if( lang.length > 0 ) { + $( ".chat-line" ).last().find( "code" ).insertBefore( +
+ { lang } +
+ ); + } + } + else + appendText(); + in_code_block = !in_code_block; + code_block_buf = ''; + } + + return buf; +} + +function resetBuffers() { + in_reason_block = false; + in_code_block = false; + was_in_reason = false; + needs_append = false; + reason_buf = ''; + tool_buffer = ''; + code_block_buf = ''; +} + +// returns true when stream completes +function handleChatJson( res: ChatJsonRes ) : boolean { + const model = api.getModelFromName( user.settings.site_prefs.model! ); + tool_buffer = ''; + + if( res.err ) { + outputError( res.err ); + } + else if( res.chunks ) { + for( let chunk of res.chunks ) { + let buf = checkToolBuffer( chunk ); + if( buf === true ) + continue; + + if( model.capabilities.thinker ) { + const reason = checkReasonBuffer( buf ); + if( reason > -1 ) + continue; + + if( in_reason_block ) { + outputReason( buf ); + continue; + } + } + + if( was_in_reason ) { + while( buf.startsWith( '\n' ) ) + buf = buf.slice( 1 ); + } + + // todo: fix, this is str8 fkn voodoo . + buf = checkCodeBuffer( buf ); + if( buf === true ) + continue; + if( in_code_block ) + outputCode( buf ); + else + outputChunk( buf ); + } + } + + if( res.msgs ) { + for( let msg of res.msgs ) { + msglog.push( msg ); + } + } + + if( res.title ) { + user.updatePrefs().then( () => { + $( "#chat-list" ).replaceWith( ); + }).catch( ( e: any ) => { + outputError( e.msg ); + }); + + updateChatTitle( res.title ); + } + + return res.done; +} + +function makeChatReq() : ChatReq { + return { + model: user.settings.site_prefs.model!, + messages: msglog, + system: user.settings.prompt_data.system || '', + chatfile: getChatId(), + token: localStorage.getItem( 'session' ), + generateTitle: true + }; +} + +export async function sendChatReq( cur_chat: string ) { + let res = null; + try { + const req = makeChatReq(); + res = await fetch( `${api.url}/chat`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify( req ) + } ); + } catch( e: any ) { + return outputError( e.message ); + } + + if( !res.ok ) { + let json = null; + try{ + json = await res.json(); + } catch { + return outputError( `error contacting server (${res.statusCode}). are you connected to the internet?` ); + } + + return outputError( json.msg ); + } + + if( chat_id != cur_chat ) + return; + + const reader = res.body?.getReader(); + const decoder = new TextDecoder(); + if( !reader ) + return outputError( "can't read response" ); + + resetBuffers(); + return new Promise( ( resolve ) => { + const readLoop = async() => { + if( chat_id != cur_chat ) + return resolve( true ); + + const { value, done } = await reader.read(); + const raw = decoder.decode( value, { stream: true } ); + const parsed = parseChatJson( raw, done ); + if( handleChatJson( parsed ) ) + return resolve( true ); + + setTimeout( readLoop, 50 ); + } + + setTimeout( readLoop, 50 ); + } ); +} + +function disableInput() { $( "#chat-input" ).remove(); } +function appendInput() { + const terminal = $( "#terminal-inner" ); + const isbottom = terminal[0].scrollTop == (terminal[0] as any).scrollTopMax; + + $( "#terminal-inner" ).append( ); + + if( isbottom ) + terminal.scrollTop( terminal[0].scrollHeight ); +} + +export async function onChat( msg: string ) { + disableInput(); + + appendUserLine( msg, file_list ); + appendModelLine(); + let id = getChatId(); + if( !id ) { + try { id = await createChat() } + catch( e: any ) { + return outputError( "error creating chat: " + e.message ); + } + } + + if( file_list.length ) { + msglog.push( { timestamp: (new Date()).toLocaleString(), content: msg, role: 'user', files: file_list } ); + } + else { + msglog.push( { timestamp: (new Date()).toLocaleString(), content: msg, role: 'user' } ); + } + file_list = []; + await sendChatReq( id ); + + if( getChatId() == id ) + appendInput(); +} + +async function getChatHistory() { + if( !getChatId() ) + throw new Error( 'chat_id not set' ); + + try { + const res = await api.post( 'get-chat', { token: localStorage.getItem( 'session' ), chatId: chat_id } ); + return res; + } catch( e: any ) {} // todo: handle error ? + + return null; +} + +function updateChatTitle( name: string ) { + $( "#chat-name" ).text( name.substring( 0, 500 ) ); + let cur_name = name; + if( cur_name.length > 25 ) { + cur_name = cur_name.substring( 0, 25 ) + "..."; + } + + $( "#chat-selection-current" ).text( cur_name ); +} + +function outputChatTextForHistory( msg: string ) { + let chunks = msg.split( "```" ); + + let in_code = false; + for( let chunk of chunks ) { + if( !in_code ) { + appendText(); + outputChunk( chunk ); + } else { + const newl = chunk.indexOf( "\n" ); + let lang = null; + + if( newl != -1 ) { + lang = chunk.substring( 0, newl ); + chunk = chunk.substring( newl + 1 ); + } + + appendCode( lang ); + outputCode( chunk ); + } + + in_code = !in_code; + } +} + +function outputToolForHistory( msg: Msg ) { + let cur_idx = 0; + let open = -1; + let close = msg.content.lastIndexOf( '}' ); + open = msg.content.indexOf( "{", cur_idx ); // why is this assigned here & not on def ? also, cur_idx will never not be 0 ??? + + if( open == -1 || close == -1 ) { + outputChatTextForHistory( msg.content ); + return; + } + + let slice = msg.content.substring( open, close + 1 ); + try { + const parsed = JSON.parse( slice ); + if( open != 0 ) + outputChatTextForHistory( msg.content.substring( 0, open ) ); + if( parsed.name ) + outputTool( parsed ); + else + outputChatTextForHistory( msg.content ); + } catch( e ) { + outputChatTextForHistory( msg.content ); + } +} + +function outputChatHistory( history: Msg[] ) { + for( let msg of history ) { + if( msg.role == 'assistant' ) { + appendModelLine(); + const content = $( ".chat-line" ).last().find( ".chat-content" ); + content.empty(); + + if( msg.toolCall ) { + outputToolForHistory( msg ); + } + else { + outputChatTextForHistory( msg.content ); + } + } + else if( msg.role == 'user' ) { + appendUserLine( msg.content, msg.files ); + } + } + + setTimeout( () => { + const inner = $( "#terminal-inner" ); + inner.scrollTop( inner.prop( "scrollTopMax" ) ); + + if( history.length > 0 ) { + $( "#suggested-prompts" ).remove(); + } + } ); +} + +// don't ask me what the fuck is happening here, this is some javascript voodoo +// - nave +async function onInputKeyPress( e: KeyboardEvent ) { + let self = $( e.target as HTMLElement ); + const text = self[0].innerText; + + $( "#suggested-prompts" ).remove(); + + if( e.key == 'Enter' ) { + if( e.shiftKey ) + return; + + e.preventDefault(); + e.stopPropagation(); + + if( text.length > 0 ) { + await onChat( text ); + } + } +} + +function handleAttachments() { + $( "#cmd-files" ).remove(); + $( "#cmd" ).append( ); +} + +function onFileReadEvent( e: Event, img: boolean, name: string ) { + let contents = (e.target as any).result; + let b64 = contents.split( 'base64,' )[1]; + + if( img ) { + return; + } + + let txt = atob( b64 ); + if( txt.length > 1024 * 20 ) // todo: arbitrary change prolly + return; + + file_list.push( { name, type: 'text', content: txt } ); + handleAttachments(); +} + +async function onPaste( e: ClipboardEvent ) { + const model = api.getModelFromName( user.settings.site_prefs.model ); + if( !model ) return; + + const vision = !!model.capabilities.vision; + const items = e.clipboardData.items; + + if( !items || !items.length ) + return; + + for( let it of items ) { + if( it.type == 'text/html' ) + continue; + + if( it.kind.startsWith( 'string' ) ) { + let s = e.clipboardData.getData( 'text' ); + if( s.length > 512 ) { + e.preventDefault(); + file_list.push( { + name: `file${file_list.length}.txt`, + content: s, + type: 'text' + } ); + handleAttachments(); + } + } + else { + let isImg = false; + if( it.type.startsWith( 'image' ) ) { + if( !vision ) + continue; + isImg = true; + } + + let blob = it.getAsFile(); + let reader = new FileReader(); + + reader.onload = ( e ) => onFileReadEvent( e, isImg, blob.name ); + reader.readAsDataURL( blob ); + e.preventDefault(); + } + } +} + +function removeFile( key: number ) { + file_list.splice( key, 1 ); + + handleAttachments(); +} + +function ChatFile( props: any ) { + return
+ { props.name.toString() }  + { util.sizeHumanReadable( props.size ) }  + { props.key !== undefined && + removeFile( props.key ) } + href="#" + > + remove + + } +
+} + +function ChatFiles( props: any ) { + if( !props.files.length ) + return
+ + const show_remove = props.noremove === undefined; + + return
+
+ Attachments: +
+ { props.files.map( ( f: MsgFile, i: number ) => { + if( !show_remove ) + return + return + } ) } +
+} + +export function ChatCmdLine() { + return
+
+
+} + +export function ChatInput( props: any ) { + const task = async () => { + const chat_id = getChatId(); + if( !chat_id ) { + return; + } + + disableInput(); + $( "#terminal-inner" ).empty(); + const spinner = $( ); + $( "#terminal-inner" ).append( spinner ); + + const chat = await getChatHistory(); + if( !chat ) { + msglog = []; + spinner.remove(); + return appendInput(); + } + + try { + msglog = JSON.parse( chat.contents ); + outputChatHistory( JSON.parse( chat.contents ) ); + } catch( e: any ) { + msglog = []; + } + + updateChatTitle( chat.name ); + spinner.remove(); + setTimeout( appendInput ); + }; + + if( !props.noupdate ) + setTimeout( task ); + + const ret = $(
+
+
+ { user.settings.nickname }:  +
+ +
+
+
); + + return ret[0]; +} + +function onSidebarHover() { $( "#chat-selection-sidebar" ).show(); } +function onSidebarLeave() { $( "#chat-selection-sidebar" ).hide(); } + +async function deleteChat( id: string ) { + try { + await user.deleteChat( id ); + await user.updatePrefs(); + + if( id == getChatId() ) + JSX.navigateParams( "/terminal", {} ); + else { + $( "#chat-list" ).replaceWith( ); + } + + const popup = $( + Chat deleted. + ); + + addPopup( popup ); + } catch( e: any ) { + const popup = $( + Error deleting chat: { e.message } + ); + + addPopup( popup ); + } +} + +function showDeletePopup( id: string, name: string ) { + const popup = $( { deleteChat( id ) } }> +
+ Are you sure you want to delete {name}? +
+
); + + addPopup( popup ); +} + +function ChatListEntry( props: any ) { + let title = props.title; + if( title.length > 20 ) { + title = title.substring( 0, 20 ) + '...'; + } + + return
+
JSX.navigateParams( "/terminal", props.id != '0' ? { id: props.id } : {} ) }> + { title } +
+ { + (() => { + if( props.id != 0 ) + return + })() + } +
+} + +let hljs_imported = 0; +async function importHlJs() { + if( hljs ) return; + if( hljs_imported ) return; + + hljs_imported = 1; + hljs = ( await import( 'highlight.js' ) ).default; + + $( ".chat-line.code" ).each( ( e ) => { + hljs.highlightElement( e[0] ); + } ); +} + +export function ChatList() { + if( !hljs ) { + importHlJs(); + } + + setTimeout( () => { + if( !user.settings.chat_files || !user.settings.chat_files.files ) + return; + + const files = user.settings.chat_files.files; + const entries = files.reverse().map( ( file: user.ChatFile ) => { + return + } ); + for( let e of entries ) + $( "#chat-selection-sidebar" ).append( e ); + } ); + + return
+
+ current chat +
+
+ new chat +
+
+
+ +
+} diff --git a/moneyjsx/src/components.tsx b/moneyjsx/src/components.tsx new file mode 100644 index 0000000..ff317af --- /dev/null +++ b/moneyjsx/src/components.tsx @@ -0,0 +1,238 @@ +import $ from "jquery"; +import * as JSX from "./jsx"; +import { Header } from "./header" + +const popup_stack = []; +window.onclick = ( e: Event ) => { + if( !e.target ) return; + + if( popup_stack.length > 0 ) { + const last = popup_stack[popup_stack.length - 1]; + if( last.el[0] == e.target || last.el.find( e.target ).length != 0 ) return; + e.preventDefault(); + e.stopPropagation(); + if( last.fn ) + last.fn(); + + popup_stack.pop(); + last.el.remove(); + } +} + +/** + * appends an element to the DOM and saves it in the popup stack to be removed. +**/ +export function addPopup( element: JQuery ) { + document.body.appendChild( element[0] ); + setTimeout( () => popup_stack.push( { el: element, fn: null } ) ); +} + +/** + * closes the topmost popup +**/ +export function closePopup() { + if( popup_stack.length > 0 ) { + const last = popup_stack[popup_stack.length - 1]; + if( last.fn ) + last.fn(); + + popup_stack.pop(); + setTimeout( () => last.el.remove() ); + } +} + +/** + * sets a callback that will get executed once the current popup is closed + **/ +export function onPopupClosed( fn: Function ) { + setTimeout( () => { + if( popup_stack.length > 0 ) { + popup_stack[popup_stack.length - 1].fn = fn; + } + } ); +} + +/* + * accepts "folded" prop +**/ +export function RolldownListItem( props: any ) { + const ret =
+
+
>
+
{props.folded}
+
+
+
{props.children}
+
+
; + + ret.onclick = () => { + $( ret ).toggleClass( "active" ); + $( ret ).find( ".rolldown-expanded-container" ).toggleClass( 'active' ); + }; + + return ret; +} + +export function Spinner( props: any ) { + let spinner_steps = [ + '/', + '-', + '\\', + '|', + '/', + '-', + '\\', + '|' + ]; + + const id = props.id || ''; + + let el = $(
); + let i = 0; + let loop = () => { + el.text( spinner_steps[i++] ); + if( i > spinner_steps.length ) + i = 0; + + if( el[0].isConnected ) + setTimeout( loop, 100 ); + }; + + setTimeout( loop, 100 ); + return el[0]; +} + +/* + * accepts title prop +**/ +export function RolldownList( props: any ) { + return +
+ { props.children } +
+
+} + +/* + * accepts title prop and optional innerStyle +**/ +export function GroupBox( props: any ) { + return
+ + {props.title} + + + {props.children} + +
+} + +export function Page( props: any ) { + return <> +
+
+ {props.children} +
+ +} + +export function DropdownItem( props: any ) { + return +} + +/** + * supports innerStyle for styling the actual dropdown picker + **/ +export function Dropdown( props: any ) { + const children = props.children; + let title = props.title; + let inline = props.inline; + let onchange = props.onchange; + let classes = props.class || ''; + let style = props.style || ""; + let id = props.id || ''; + let innerStyle = props.innerStyle || ""; + + const showItems = ( e: Event ) => { + e.preventDefault(); + const target = $( e.target as HTMLElement ); + + const newDropdown = $( ); + target.parent().append( newDropdown[0] ); + setTimeout( () => popup_stack.push( { el: newDropdown, fn: null } ) ); + } + + if( inline ) { + return + } + else { + return <> + + + + } +} + +export function OkPopup( props: any ) { + const children = props.children; + const classes = props.class || ''; + const style = props.style || ''; + const id = props.id || ''; + + const onclick = ( e: Event ) => { + e.preventDefault(); + e.stopPropagation(); + if( props.onclick ) + props.onclick(); + + closePopup(); + } + + return
+ { children } +
+ +
+
+} + +export function OkCancelPopup( props: any ) { + const children = props.children; + const classes = props.class || ''; + const style = props.style || ''; + const id = props.id || ''; + + const onclick = ( e: Event ) => { + e.preventDefault(); + e.stopPropagation(); + if( props.onclick ) + props.onclick(); + + closePopup(); + } + + const oncancel = ( e: Event ) => { + e.preventDefault(); + e.stopPropagation(); + + closePopup(); + } + + return
+ { children } +
+ + +
+
+} diff --git a/moneyjsx/src/first-landing.tsx b/moneyjsx/src/first-landing.tsx new file mode 100644 index 0000000..8d01512 --- /dev/null +++ b/moneyjsx/src/first-landing.tsx @@ -0,0 +1,55 @@ +import * as JSX from './jsx'; +import * as user from './user'; + +import $ from 'jquery'; + +import { GroupBox, Page, Spinner } from './components'; + +async function saveNickname() { + const username = $( '#username-input' ).val() as string; + const spinner = $( ); + $( "#confirm-btn" ).append( spinner ); + + if( username.length > 1 ) { + try { + await user.savePrefs( { nickname: username } ); + localStorage.removeItem( 'needs-setup' ); + JSX.navigateParams( "/terminal", {} ); + } catch( e: any ) { + $( "#landing-error" ).text( e.message ); + $( "#landing-error" ).show(); + } + } + + spinner.remove(); +} + +export default function FirstLanding() { + if( user.settings && user.settings.nickname && user.settings.nickname.length > 1 ) + setTimeout( () => JSX.navigateParams( "/terminal", {} ) ); + + if( !user.is_loggedin ) { + setTimeout( () => JSX.navigate( "/" ) ); + return not logged in + } + + return + +
+ Welcome to axonbox.net +
+
+ Please input a username. This can be changed at any time. +
+ + +
+ +
+
+
+} diff --git a/moneyjsx/src/header.tsx b/moneyjsx/src/header.tsx new file mode 100644 index 0000000..e79e256 --- /dev/null +++ b/moneyjsx/src/header.tsx @@ -0,0 +1,98 @@ +import $ from 'jquery'; +import * as JSX from './jsx'; +import * as user from './user'; +import * as settings from './settings'; +import { Dropdown, DropdownItem, Spinner, addPopup } from './components'; + + +async function logout() { + await user.logout(); +} + +/** + * NavItem component + * takes in title and route, optionally "disabled" +**/ +function NavItem( props: any ) { + const url = new URL( window.location.href ); + var style = `height: 45px;`; + var onclick = () => JSX.navigate( props.route ); + if( props.disabled || url.pathname == props.route ) { + style += "color: #888;pointer-events: none;"; + onclick = null; + } + + return + [ { props.title } ] + +} + +function SettingsButton( props: any ) { + let openSettings = settings.openPopup; + let style = `height: 45px;`; + + if( props.disabled ) { + openSettings = null; + style += "color: #888; pointer-events: none;"; + } + + return + [ Settings ] + +} + +function EmailInput() { + const sendLink = async () => { + const email = $( "#login-email" ).val().toString(); + $( "#login-btn-wrapper" ).append( ); + + const res = await user.sendLoginLink( email ); + if( res === true ) { + $( "#header-login-dropdown" ).replaceWith( +
Success! Check your inbox for a login link.
+ ); + } else { + $( "#header-login-dropdown" ).replaceWith( +
Error sending email: { res }
+ ); + } + }; + + return
+
+ Log in + +
+ +
+
+
+} + +function showLoginPopup() { + addPopup( $( ) ); +} + +export function Header() { + return +} diff --git a/moneyjsx/src/home.tsx b/moneyjsx/src/home.tsx new file mode 100644 index 0000000..cd53eaf --- /dev/null +++ b/moneyjsx/src/home.tsx @@ -0,0 +1,90 @@ +import $ from "jquery"; +import * as JSX from "./jsx"; +import AsciiArt from "./ascii-art" +import { GroupBox, Page, RolldownList, RolldownListItem } from "./components"; + +const text_l = [ + "Have you considered how public AI tools might expose proprietary information?", + "What would the impact be if the sensitive data you have shared with AI tool was leaked?", + "How does your current AI provider handle security indicents? How transparent are they, really?", + "What happens to your data after it is shared with public AI tools?", + "Are you comfortable with the AI models that you interact with being retrained on the data you've shared with it?", +]; + +const text_r = [ + "Unrestricted prompt and tooling customization.", + "100% private LLM access with dedicated personal instances.", + "Frictionless access and removal for all of your shared information.", + "Long-term memory, web access, and notes provided with base configuration.", + "Custom embedded 'modules' available by direct contact via support page.", + "Unlimited API calls.", +]; + +function runTypewriter( messages: string[], elId: string ) { + const el = $( elId ).find( ".groupbody" ); + if( !el ) return; + + const type = ( el: JQuery, str: string ) => { + const span = $( ); + span.html( "> " ); + el.append( span ); + + let i = 0; + const typeWord = () => { + const words = str.split( ' ' ); + if( i < words.length ) { + span.html( span.html() + words[i] + ' ' ); + setTimeout( typeWord, 25 + Math.random() * 100 ); + } + ++i; + }; + typeWord(); + } + + for( let msg of messages ) { + type( el, msg ); + el.append(
); + } +} + +function HomeInfo() { + const ret =
+ + +
; + + setTimeout( () => { + runTypewriter( text_l, "#q2a" ); + runTypewriter( text_r, "#features" ); + } ); + return ret; +} + +function HomeFaq() { + return + + Unlike many of our competitors, we do not harvest or sell your personal data. We are hobbyists that simply want to provide the best possible service to assist you in achieving your goals. + + + We pride ourselves in the fact that we are small and tight-knit team of hobbyist developers with a passion to create and ship tools that can help reshape your daily life. + + + We believe that competition is a benefit in society. If we are successful in our growth, we can apply pressure towards others to stop data-brokering practices and instead focus on delivering real transparency and an ideal product. + + + At the moment, we utilize Stripe to accept payments. If you have issues with this, please reach out to us on Twitter. We gladly accept BTC, and would prefer it for any custom work we may perform for you. + + + The best form of contact will be through our support account here on Twitter. Alternatively, you can email us here. However, since we are a small team, Twitter would be the most convenient. + + +} + +export default function Home() { + return + +

Welcome your new second-in-command

+ + +
; +} diff --git a/moneyjsx/src/index-page.tsx b/moneyjsx/src/index-page.tsx new file mode 100644 index 0000000..a7130d2 --- /dev/null +++ b/moneyjsx/src/index-page.tsx @@ -0,0 +1,32 @@ +import * as JSX from "./jsx"; +import * as user from "./user"; + +import PaymentSuccess from "./payment-success"; +import FirstLanding from "./first-landing"; +import Tutorial from "./support-tutorial" +import Terminal from "./terminal"; +import Support from "./support"; +import Upgrade from "./upgrade"; +import Models from "./support-models"; +import Login from "./login"; +import Home from "./home"; +import ToS from "./support-tos"; +import Api from "./support-api"; + +JSX.addRoute( "/payment-success", () => ); +JSX.addRoute( "/first-landing", () => ); +JSX.addRoute( "/terminal", () => ); +JSX.addRoute( "/tutorial", () => ); +JSX.addRoute( "/support", () => ); +JSX.addRoute( "/upgrade", () => ); +JSX.addRoute( "/models", () => ); +JSX.addRoute( "/login", () => ); +JSX.addRoute( "/tos", () => ); +JSX.addRoute( "/api", () => ); +JSX.addRoute( "/", () => ); + +window.onpopstate = JSX.onPopState; +JSX.onPreNavigate( user.onNavigate ); + +const url = new URL( window.location.href ); +JSX.navigateParams( url.pathname, url.searchParams.entries() ); diff --git a/moneyjsx/src/index.html b/moneyjsx/src/index.html new file mode 100644 index 0000000..bebbed2 --- /dev/null +++ b/moneyjsx/src/index.html @@ -0,0 +1,93 @@ + + + + + + + axonbox.net + + + + + + + +
+
+ +
+
+ + + diff --git a/moneyjsx/src/jsx.tsx b/moneyjsx/src/jsx.tsx new file mode 100644 index 0000000..f167877 --- /dev/null +++ b/moneyjsx/src/jsx.tsx @@ -0,0 +1,239 @@ +import $ from 'jquery'; +const assetAttributeNames = new Set( ['data', 'srcset', 'src', 'href'] ); + +export interface Route { + path: string, + component: Function, +}; + +const routes = []; +let err404page = "/"; +let rootId = "moneyjsx-root"; +let onprenavigate: Function = () => {}; +let onpostnavigate: Function = () => {}; + +/** + * sets the id of the element to be replaced by the navigator + **/ +export function setRootId( rootId: string ) { + rootId = rootId; +} + +/** + * adds a route component to the routes list + * the component function must return either a jquery or a DOM element + **/ +export function addRoute( name: string, component: Function ) { + routes[name] = component; +} + +/** + * sets the route for a 404 page + **/ +export function set404Route( name: string ) { + err404page = name; +} + +/** + * sets the callback that will get called when a route changes + **/ +export function onPreNavigate( callback: Function ) { + onprenavigate = callback; +} + +/** + * sets the callback that will get called when a route changes + **/ +export function onPostNavigate( callback: Function ) { + onpostnavigate = callback; +} + +/** + * replaces the root element with the route component + **/ +export function navigate( route: string ) { + let url = new URL( window.location.href ); + url.pathname = route; + if( !routes[route] ) { + return navigate( err404page ); + } + window.history.pushState( {}, null, url.href ); + + onprenavigate(); + const el = $( routes[route]() ); + + $( `#${rootId}` ).children().remove(); + $( `#${rootId}` ).append( el ); + onpostnavigate(); +} + +/** + * navigate with params. see: navigate + **/ +export function navigateParams( route: string, params: any ) { + let url = new URL( window.location.href ); + let uparams = new URLSearchParams( params ); + url.pathname = route; + url.search = uparams.toString(); + if( !routes[route] ) { + return navigate( err404page ); + } + window.history.pushState( {}, null, url.href ); + + onprenavigate(); + const el = $( routes[route]() ); + + $( `#${rootId}` ).children().remove(); + $( `#${rootId}` ).append( el ); + onpostnavigate(); +} + +/** + * wrapper for history.pushState + **/ +export function pushParams( params: any ) { + const url = new URL( window.location.href ); + url.search = new URLSearchParams( params ).toString(); + + window.history.pushState( {}, null, url.href ); +} + +/** + * navigates without adding a history entry + * useful for e.g. re-rendering a page after waiting for a data callback +**/ +export function navigateParamsSilent( route: string, params: any ) { + let url = new URL( window.location.href ); + let uparams = new URLSearchParams( params ); + url.pathname = route; + url.search = uparams.toString(); + if( !routes[route] ) { + return navigateSilent( err404page ); + } + + onprenavigate(); + const el = $( routes[route]() ); + + $( `#${rootId}` ).children().remove(); + $( `#${rootId}` ).append( el ); + onpostnavigate(); +} + +/** + * see: navigateParamsSilent + **/ +export function navigateSilent( route: string ) { + let url = new URL( window.location.href ); + url.pathname = route; + if( !routes[route] ) { + return navigateSilent( err404page ); + } + + onprenavigate(); + const el = $( routes[route]() ); + + $( `#${rootId}` ).children().remove(); + $( `#${rootId}` ).append( el ); + onpostnavigate(); +} + +/** + * action when the back button is pressed +**/ +export function onPopState() { + let url = new URL( window.location.href ); + let uparams = new URLSearchParams( url.searchParams ); + url.search = uparams.toString(); + if( !routes[url.pathname] ) { + return navigateSilent( err404page ); + } + + onprenavigate(); + const el = $( routes[url.pathname]() ); + + $( `#${rootId}` ).children().remove(); + $( `#${rootId}` ).append( el ); + onpostnavigate(); +} + +export function getRoutes() : Route[] { + return routes; +} + + +// internal stuff below + +const originalAppendChild = Element.prototype.appendChild; +Element.prototype.appendChild = function( child: any ) { + if( Array.isArray( child ) ) { + for( const childArrayMember of child ) + this.appendChild( childArrayMember ); + + return child; + } + else if( typeof child === 'string' ) { + return originalAppendChild.call( this, document.createTextNode( child ) ); + } + else if( child ) { + return originalAppendChild.call( this, child ); + } +}; + +export function createElement( tag: any, props: any, ...children: any ) { + props = props || {}; + + if( typeof tag === "function" ) { + props.children = children; + return tag( props ); + } + + if( tag === 'raw-content' ) { + const dummy = document.createElement( 'div' ); + dummy.innerHTML = props.content; + return [...dummy.children]; + } + + const element = document.createElement( tag ); + + for( const [name, value] of Object.entries( props ) ) { + if( name.startsWith( 'on' ) ) { + const lowercaseName = name.toLowerCase(); + + if( lowercaseName in window ) { + element.addEventListener( lowercaseName.substring(2 ), value ); + continue; + } + } + + if( name == 'ref' ) { + ( value as any ).current = element; + continue; + } + + if( value === false ) + continue; + + if( value === true ) { + element.setAttribute( name, '' ); + continue; + } + + if( assetAttributeNames.has( name ) ) { + if( typeof value === 'string' ) { + element.setAttribute( name, value ); + } + continue; + } + + element.setAttribute( name, value ); + }; + + for( const child of children ) + element.appendChild( child ); + + return element; +} + +export function createFragment( props: any ) { + return props.children; +} diff --git a/moneyjsx/src/login.tsx b/moneyjsx/src/login.tsx new file mode 100644 index 0000000..0be6acc --- /dev/null +++ b/moneyjsx/src/login.tsx @@ -0,0 +1,29 @@ +import $ from 'jquery'; +import * as JSX from './jsx'; +import * as user from './user'; +import { GroupBox, Page } from './components'; + +export default function Login() { + if( user.is_loggedin ) + return JSX.navigateParams( "/", {} ); + + const url = new URL( window.location.href ); + const code = url.searchParams.get( "token" ); + let msg = "You should be redirected shortly..."; + if( !code ) { + msg = "The link you followed is invalid."; + } + else { + user.onLogin( code ).then( () => { + JSX.navigateParams( '/terminal', {} ); + } ).catch( ( e: any ) => { + $( "#login-msg" ).text( e.message ); + } ); + } + + return + + { msg } + + +} diff --git a/moneyjsx/src/payment-success.tsx b/moneyjsx/src/payment-success.tsx new file mode 100644 index 0000000..30316fb --- /dev/null +++ b/moneyjsx/src/payment-success.tsx @@ -0,0 +1,19 @@ +import * as JSX from './jsx'; +import { Page, GroupBox } from './components'; + +export default function PaymentSuccess( props: any ) { + setTimeout( () => JSX.navigateParams( "/terminal", {} ), 1000 ); + + return + +
+ Your payment was successful. You should be redirected shortly... +
+
+ +
+
+
+} diff --git a/moneyjsx/src/settings.tsx b/moneyjsx/src/settings.tsx new file mode 100644 index 0000000..ba39126 --- /dev/null +++ b/moneyjsx/src/settings.tsx @@ -0,0 +1,402 @@ +import $ from "jquery"; +import * as JSX from "./jsx"; +import * as api from "./api"; +import * as util from "./util"; +import * as user from "./user"; +import * as terminal from "./terminal"; +import { + addPopup, onPopupClosed, closePopup, + Dropdown, DropdownItem, + Spinner, + OkPopup, OkCancelPopup +} from "./components"; + +let old_font = ''; +const fonts = [ + 'Terminal', + 'Arial', + 'Monospace', + 'Sans-serif', + 'Serif', + 'Times' +]; + +function showDeleteTokenPopup( id: number ) { + const deleteToken = async() => { + try { + await user.deleteToken( id ); + $( `#token-${ id }` ).remove(); + } catch( e: any ) { + addPopup( $( + Error deleting token: { e.message } + ) ); + } + } + + addPopup( $( + + Are you sure you want to erase this API token? + + ) ); +} + +function showDeleteAllTokensPopup() { + const deleteTokens = async() => { + try { + await user.deleteAllTokens(); + closePopup(); + } catch( e: any ) { + addPopup( $( + Error deleting all tokens: { e.message } + ) ); + } + } + + addPopup( $( + + Are you sure you want to erase all API tokens? + + ) ); +} + +function TokenEntry( props: any ) { + const token = props.token; + + return
+ { token.value } + +
+} + +async function createNewToken( e: Event ) { + const btn = $( e.target ); + + e.preventDefault(); + e.stopPropagation(); + + const spinner = $( ); + btn.append( spinner ); + + try { + const token = await user.createToken(); + const tokens = await user.getTokens(); + // re-draw token popup + closePopup(); + addPopup( $( ) ); + + const copyTokenToClipboard = () => { navigator.clipboard.writeText( token ); } + addPopup( $( + + Your api token has been created.
+ Make sure to save it as it will not be shown to you again.
+
+ { token } +
+ + Press OK to copy the token to clipboard. +
+ ) ); + } catch( e: any ) { + addPopup( $( + + Error creating token: { e.message } + + ) ); + } + + spinner.remove(); +} + +function TokensPopup( props: any ) { + return
+ { props.tokens.length > 0 && +
+ { props.tokens.map( ( tok: any ) => { + return + } ) } +
+ } + { + props.tokens.length == 0 &&
+ No api tokens have been created. +
+ } +
+ + +
+
+} + +async function openTokensPopup() { + let spinner = $( ); + $( "#tokens-btn" ).append( spinner ); + try { + const tokens = await user.getTokens(); + spinner.remove(); + + return addPopup( $( ) ); + } catch( e: any ) { + spinner.remove(); + return addPopup( $( { e.message } ) ); + } +} + + +function showDeleteNotePopup( note_id: string ) { + const deleteNote = async() => { + try { + await user.deleteNote( note_id ); + $( `#note-${ note_id }` ).remove(); + } catch( e: any ) { + addPopup( $( + + Error deleting note
{ e.message } +
+ ) ); + } + } + + addPopup( $( + + Are you sure you want to delete this note? + + ) ); +} + +function showDeleteAllNotesPopup() { + addPopup( $( + { await user.deleteAllNotes(); closePopup(); } }> + Are you sure you want to delete all notes? + + ) ); +} + +function NotesPopup( props: any ) { + return
+
+ { props.notes.map( ( n: any ) => { + return
+ { n.content.split(' : ')[1] } + +
+ } ) } +
+
+ +
+
+} + +async function openNotesPopup() { + let spinner = $( ); + $( "#notes-btn" ).append( spinner ); + try { + const notes = await user.getNotes(); + spinner.remove(); + if( notes.length == 0 ) + return addPopup( $( No notes found ) ); + + return addPopup( $( ) ); + } catch( e: any ) { + spinner.remove(); + return addPopup( $( { e.message } ) ); + } +} + +function onSettingsClosed() { + if( old_font.length > 0 ) { + const style = document.documentElement.style; + style.setProperty( "--site-font", old_font ); + } +} + +function onFontChanged( e: Event ) { + const el = $( e.target ); + const font = el.text(); + if( !old_font.length ) + old_font = user.settings.site_prefs.font; + + user.settings.site_prefs.font = font; + const style = document.documentElement.style; + style.setProperty( "--site-font", font ); + + $( "#settings-font" ).text( font ); + closePopup(); +} + +function onModelChanged( e: Event ) { + const el = $( e.target ); + const model = el.text(); + + if( user.settings.plan.plan == 'free' ) { + for( let m of api.models ) { + if( m.name == model && !m.free ) { + const popup = $( JSX.navigateParams( "/upgrade", {} ) }> + This model is only available for paid users. + Please upgrade your plan to use it. + ); + + return addPopup( popup ); + } + } + } + + user.settings.site_prefs.model = model; + + $( "#settings-model" ).text( model ); + closePopup(); +} + +async function save() { + const newprefs = { + site_prefs: user.settings.site_prefs, + prompt_data: user.settings.prompt_data, + nickname: user.settings.nickname + }; + + const newprompt = $( "#system-prompt" ).val(); + newprefs.prompt_data.system = newprompt as string; + + const newname = $( "#uname-setting" ).val() as string; + if( newname.length > 1 ) + newprefs.nickname = newname; + + $( "#settings-spinner-wrapper" ).append( ); + try { + await user.savePrefs( newprefs ); + } catch( e: any ) { + $( "#settings-spinner-wrapper" ).empty(); + $( "#settings-spinner-wrapper" ).append(
{ e.message }
); + return; + } + + old_font = ''; + $( "#settings-spinner-wrapper" ).empty(); + $( "#username" ).text( user.settings.nickname ); + $( "#uname-setting" ).attr( "placeholder", user.settings.nickname ); + terminal.updateCapabilitiesDisplay(); +} + +function PlanDisplay() { + const el = $(
); + if( user.settings.plan.plan == 'free' ) { + el.append( + + Plan: free  + JSX.navigate( "/upgrade" ) }>[ upgrade ] + + ); + } else { + el.append( + + Plan: { user.settings.plan.plan } + + ); + + let days_left = ''; + if( user.settings.plan.endTime == -1 ) + days_left = 'inf'; + else + days_left = Math.floor( ( user.settings.plan.endTime - Date.now() ) / 60000 / 60 / 24 ).toString(); + el.append( + + Time left: { days_left.toString() } days + + ); + } + + return el[0]; +} + +async function downloadAllData() { + const spinner = $( ); + $( "#settings-spinner-wrapper" ).append( spinner ); + + try { + await user.downloadAllData(); + } catch( e: any ) { + addPopup( $( + + Error processing request: { e.message } + + ) ); + } + + spinner.remove(); +} + +async function invalidateAllSessions() { + const spinner = $( ); + $( "#settings-spinner-wrapper" ).append( spinner ); + + try { + await user.invalidateAllSessions(); + } catch( e: any ) { + addPopup( $( + + Error invalidating sessions: { e.message } + + ) ); + } + + spinner.remove(); +} + +function SettingsPopup() { + return
+
+
+
+ +
+
+
+ + +
+
+ + + { fonts.map( ( f ) => { f } ) } + +
+
+ + + { api.models.map( ( m ) => { + if( m.free || user.settings.plan.plan == 'paid' ) + return { m.name }; + return { m.name }; + } ) } + +
+
+ + +
+ +
+
+ +
+ + + +
+
+
; +} + +export function openPopup() { + if( !user.is_loggedin ) + return; + const el = $( ); + addPopup( el ); + onPopupClosed( onSettingsClosed ); +} diff --git a/moneyjsx/src/support-api.tsx b/moneyjsx/src/support-api.tsx new file mode 100644 index 0000000..abb4072 --- /dev/null +++ b/moneyjsx/src/support-api.tsx @@ -0,0 +1,214 @@ +import * as JSX from './jsx'; + +import $ from 'jquery'; + +import { Page, GroupBox } from './components'; + +export default function Api() { + return + +
+ +

POST /update-settings

+

Updates user settings based on the preferences provided.

+ +

Request

+

Body:

+
{ `{
+  "token": "JWT token",
+  "prefs": {
+    "nickname": "string",
+    "prompt_data": { "system": "string" },
+    "site_prefs": { "model": "string" }
+  }
+}` }
+ +

Responses

+
{ $( `{
+  "status": "ok" | "error",
+  "msg": "settings updated" | "error message",
+  "userprefs": {
+    "uuid": "string", /* the user uuid */
+    "nickname": "string", /* the user's set nickname */
+    "prompt_data": { "system": "string" }, /* the custom system prompt */
+    "site_prefs": { "model": "string" },  /* the user preferred model */
+    "chat_files": { "files": [ { "id": "string", "name": "string" } ] }, /* list of user's chat files */
+  }
+}` )[0] }
+
    +
  • 200 OK: Settings updated successfully
  • +
  • 400 Bad Request: Invalid value or nickname out of allowed range
  • +
  • 401 Unauthorized: Invalid or expired token
  • +
  • 500 Internal Server Error: General server error
  • +
+ +
+ +

POST /settings

+

Fetches user settings.

+ +

Request

+

Body:

+
{ `{
+  "token": "JWT token"
+}` }
+ +

Responses

+
{ $( `{
+  "uuid": "string", /* the user uuid */
+  "nickname": "string", /* the user's set nickname */
+  "prompt_data": { "system": "string" }, /* the custom system prompt */
+  "site_prefs": { "model": "string" },  /* the user preferred model */
+  "chat_files": { "files": [ { "id": "string", "name": "string" } ] }, /* list of user's chat files */
+}` )[0] }
+
    +
  • 200 OK: Returns user preferences
  • +
  • 401 Unauthorized: Invalid or expired token
  • +
  • 500 Internal Server Error: No user data found
  • +
+ +
+ +

POST /create-chat

+

Creates a new chat file for the user.

+ +

Request

+

Body:

+
{ `{
+  "token": "JWT token"
+}` }
+ +

Responses

+
{ $( `{
+  "status": "ok" | "nodata" | "error",
+  "msg": "chat created" | "error message",
+  "chatId": "string" /* the uuid/filename of the newly created chat. */
+}` )[0] }
+
    +
  • 200 OK: Chat created with ID and topic name
  • +
  • 400 Bad Request: Missing user data
  • +
  • 401 Unauthorized: Invalid or expired token
  • +
  • 500 Internal Server Error: Error creating chat file or updating database
  • +
+ +
+ +

POST /get-chat

+

Fetches the contents of a specified chat file.

+ +

Request

+

Body:

+
{ $( `{
+  "token": "JWT token",
+  "chatId": "string" /* chat file uuid */
+}` )[0] }
+ +

Responses

~ +
{ `{
+  "status": "ok" | "error",
+  "msg": "chat not found" | "error message",
+  "contents": [ { }, ... ]
+}` }
+
    +
  • 200 OK: Returns chat file contents
  • +
  • 401 Unauthorized: Invalid or expired token
  • +
  • 404 Not Found: Chat does not exist
  • +
  • 500 Internal Server Error: User data not found
  • +
+ +
+ +

POST /models

+

Lists available models for chat.

+ +

Request

+

Body:

+
{ `{
+  "token": "JWT token"
+}` }
+ +

Responses

+
    +
  • 200 OK: Returns list of models with their attributes
  • +
  • 401 Unauthorized: Invalid or expired token
  • +
+ +
+ +

POST /generate

+

Generates text based on the input prompt. Can optionally be used for in-the-middle generation.

+ +

Request

+

Body:

+
{ $( `{
+  "token": "JWT token",
+  "prompt": "string", /* the text before the generated text */
+  "suffix": "string", /* optional - the text after the generated text */
+  "model": "string",
+  "options": { "seed": Number, "temperature": Number } /* optional */
+}` )[0] }
+ +

Response

+

Body:

+
{ $( `{
+  "status": "ok" | "error",
+  "response": "string",
+  "finalMsg": "string" /* optional - only at the end of chunked transmission */
+}` )[0] }
+ +
    +
  • 200 OK: Returns streamed chat response
  • +
  • 400 Bad Request: Missing required parameters
  • +
  • 401 Unauthorized: Invalid or expired token
  • +
  • 429 Too Many Requests: A request from this user is already being processed
  • +
  • 504 Gateway Timeout: No chat instance available
  • +
  • 500 Internal Server Error: Chat server error
  • +
+ +
+ +

POST /chat

+

Sends a message to the chat server and streams the response back to the user.

+ +

Request

+

Body:

+
{ $( `{
+  "token": "JWT token",
+  "model": "string",
+  "messages": [ {
+    "role": "user" | "assistant" | "tool" | "system",
+    "content": "string",
+    timestamp: "string"
+  } ],
+  "system": "string",  /* optional */
+  "options": { "seed": Number, "temperature": Number }, /* optional */
+  "chatfile": "string" /* optional - chat file uuid */
+}` )[0] }
+ +

Responses

+

Message:

+
{ `{
+  "status": "ok" | "error",
+  "msg": "string",
+  "done": false,
+  "tool": "string"
+}` }
+

End:

+
{ `{
+  "status": "ok" | "error",
+  "msg": "string",
+  "fullMsg": "full message returned by the model",
+  "done": true | false
+}` }
+
    +
  • 200 OK: Returns streamed chat response
  • +
  • 400 Bad Request: Missing required parameters
  • +
  • 401 Unauthorized: Invalid or expired token
  • +
  • 429 Too Many Requests: A request from this user is already being processed
  • +
  • 504 Gateway Timeout: No chat instance available
  • +
  • 500 Internal Server Error: Chat server error
  • +
+
+
+
+} diff --git a/moneyjsx/src/support-models.tsx b/moneyjsx/src/support-models.tsx new file mode 100644 index 0000000..2afd726 --- /dev/null +++ b/moneyjsx/src/support-models.tsx @@ -0,0 +1,114 @@ +import $ from "jquery"; +import * as JSX from './jsx'; +import * as API from "./api"; +import * as user from "./user"; +import * as util from "./util"; + +import { Page, GroupBox, Spinner, Dropdown, DropdownItem } from './components'; + +export default function Models() { + if( !API.models.length ) { + const modelTimeout = () => { + if( API.models.length ) + JSX.navigateSilent( "/models" ); + else + setTimeout( modelTimeout, 100 ); + } + + modelTimeout(); + + return +
+ +
+
+ } + + let model = API.models[0].name; + if( user.is_loggedin && user.settings.site_prefs && user.settings.site_prefs.model ) + model = user.settings.site_prefs.model!; + + return + +
+ + { API.models.map( ( m ) => { m.name } ) } + +
+ +
+
+
+} + +function changeModel( e: Event ) { + const el = $( e.target ); + const txt = el.text(); + console.log( txt ); + const m = API.getModelFromName( txt ); + console.log( m ); + + $( "#model-list" ).children().replaceWith( + + ); + + $( "#model-selector" ).text( m.name ); +} + + +function ModelInfo( props: any ) { + const m = props.model as API.Model; + return
+
+

+ { m.name } +

+
+
+
+ Web { m.capabilities.web ? 'āœ”' : '✘' } + Notes { m.capabilities.notes ? 'āœ”' : '✘' } + Vision { m.capabilities.vision ? 'āœ”' : '✘' } + Memory Lookup { m.capabilities.remind ? 'āœ”' : '✘' } +
+
+ { m.description.full } +
+
+
+
+ + { util.escapeHtml( m.license ) } + +
; +} + +let license_open = false; +function ModelLicense( props: any ) { + const collapseToggle = () => { + const el = $( "#model-license" ); + let list = el.find( '.tool-call-list' ); + let btn = el.find( '.tool-call-collapse' ); + + license_open = list.css( 'display' ) == 'block'; + if( !license_open ) { + list.css( 'display', 'block' ); + btn.text( '-' ); + } else { + list.css( 'display', 'none' ); + btn.text( '+' ); + } + }; + + let el =
+
+ License + { license_open ? '-' : '+' } +
+
+ { props.children } +
+
; + + return el; +} diff --git a/moneyjsx/src/support-tos.tsx b/moneyjsx/src/support-tos.tsx new file mode 100644 index 0000000..2aab52e --- /dev/null +++ b/moneyjsx/src/support-tos.tsx @@ -0,0 +1,69 @@ +import * as JSX from './jsx'; + +import { Page, GroupBox } from './components'; + +export default function ToS() { + return + + +1. Acceptance of Terms
+ Upon account creation, your agreement to these Terms of Service will be permanently stored in case of legal discourse.
+
+2. Definitions
+ "We", "us", and any first-person references, refer to axonbox as an organization, and the individuals that represent it.
+ "Service" refers to any service ( LLMs, API, module, website, etc. ) provided by axonbox.
+ "The user", "user", and "users" refers to any individual or entity that accesses or uses the Service.
+ "Content" refers to all information, messages, and data provided by Users or generated by the Service.
+
+3. User Responsibilities
+ The user agrees to use the Service only for lawful purposes.
+ The user will not use the Service to generate harmful, illegal, or offensive content.
+ The user must be at least 15 years of age to use the Service.
+ The user must abide by these terms, or else risk a suspension, or permanent ban, of access to our services.
+
+4. Prohibited Uses
+ Users agree not to use the Service in any of the following unintended ways:
+ Engaging in any activity that disrupts or interferes with the Service or its servers.
+ Attempting to gain unauthorized access to any portion of the Service or any other systems or networks connected to the Service.
+ Using the Service for any automated data collection, scraping, or similar activities.
+
+5. Intellectual Property
+ All content generated by the service is owned by the user unless otherwise stated.
+ If opted in to data sharing the user grants us a license to use it for the purpose of training future models, and only that.
+
+6. Account Management
+ Users must create an account to access the features and services provided by axonbox.
+ The user is responsible for maintaining the security of their own account information and for all activities that occur under said account. Any account disputes must be handled directly by axonbox support.
+
+7. Privacy Policy
+ The use of the Service is also governed by our Privacy Policy, which explains how we collect, use, and protect user information. Axonbox only performs collection of data necessary for axonbox services' critical functionality. If axonbox were to ever cease operations, all information related to users will be securely, permanently, and thoroughly destructed and destroyed.
+
+ Data collected by axonbox is limited to:
+ - User email
+ - User Service preferences
+ - Account creation timestamp
+ - IP Addresses of web requests
+ - Notes generated by chat models
+ - Chat logs until deletion ( encrypted with AES-256 )
+
+8. Dispute Resolution
+ Any disputes arising from these Terms will be resolved through binding arbitration in accordance with the rules of Texas law.
+
+9. Limitation of Liability
+ Axonbox is not liable for any direct, indirect, incidental, or consequential damages arising from use of the Service.
+
+10. Termination
+ We reserve the right to suspend or terminate access to the Service at our discretion at any time, without notice, for violations of these Terms.
+
+11. Modifications
+ We may update these Terms from time to time. We will notify users of any changes via the respective provided email or through the Service. Continued use of the Service constitutes acceptance of the updated Terms.
+
+12. Governing Law
+ These Terms shall be governed by the rules of Texas law.
+
+13. Contact Information
+ For any questions or concerns regarding these Terms, please contact us via our support account on X, accessible from the site map. +
+
+
; +} \ No newline at end of file diff --git a/moneyjsx/src/support-tutorial.tsx b/moneyjsx/src/support-tutorial.tsx new file mode 100644 index 0000000..a1d8a14 --- /dev/null +++ b/moneyjsx/src/support-tutorial.tsx @@ -0,0 +1,156 @@ +import $ from "jquery"; +import * as JSX from './jsx'; + +import { Dropdown, DropdownItem, Page, GroupBox } from './components'; + +interface TutorialPage { + title: string, + content: HTMLElement +} + +const pages: TutorialPage[ ] = [ + { + title: "Choosing the right model", + content: + + It would get quite wordy if we were to discuss every model in detail that we provide, + so our best suggestion is to check out our JSX.navigate( "/models" ) }>Models page. +
+ Here, you can see the various personalities our models come with by default, + the provided tooling, as well as licensing information for each respective model! +
+ }, + { + title: "Effective chatting", + content: + + Effective chatting best practices are also, as with most things, on a model-by-model basis. + However, there are some good standards to abide by when interacting with any LLM to increase effectiveness. + We'll list a few of our personally notable ones here, in no particular order: +
+ 1) Prompting : A good prompt can drastically change the output of a large language model, + effective prompts will be elaborated on in the selectPage( pages[ 2 ] ) }>next section. +

+ 2) Clarify : As the saying "garbage in, garbage out" goes with computing, it continues here to an extraordinary extent. + One of, if not, the most effective methods of improving LLM responses is by providing and continually improving: + queries, instructions, sample code, or other data you feed into the language model that fits your current need. +

+ 3) Reminders : LLMs, just like humans, need reminders sometimes. If you are sending large amounts of data, or + if you are having a model make many web requests, it's very likely you will leave the model's + context window. This can lead to unpredictable and unexplainable results, so do with that information + what you will. +

+ 4) Tooling : Luckily for you, utilizing our provided selectPage( pages[ 4 ] ) }>tooling is not something that you will have to initiate. + Models equipped with tooling functionality will automatically use our provided tools to better complete your requests. + All this being said, you will have to "manage" your tooling. For web requests, as mentioned above, they can quickly + devour your avaiable context window and cause erroneous responses to occur. Notes as well, when above capacity, can + cause the same. We do provide a way to manage notes, and we can only suggest to keep web requests to a minimum. +
+
+ }, + { + title: "Prompting", + content: + + We feel like this cannot be understated, so we will mention it again. + Each model is different, and will respond differently to the same query, prompt, image, etc. + This is what we describe as "personalities". +
+ However, as with chatting, we can provide general advice that applies across the board. + As well, we will attach some resources below that we have used in our journey in this process. + We feel these are of good quality and dig into a low level in layman's terms to help you + understand easily. +
+
+ 1) Prompt format matters : As seen in the resources below, there are many types of prompting. + Using the wrong style of prompt for the wrong purpose could hinder + service performance rather than improve it. Make sure you have a + rudimentary understanding of what prompting is and what it does before + embarking on your quest. +

+ 2) Prompt interferes with context window : This is a good one to keep in mind. Though it will + likely never be an issue for the average user, advanced + power users may find a point in which a lengthy prompt + causes a model to *only* output erroneous data. Keeping + your prompt clear and concise should be the goal of any + power user. +

+ 3) Test, test, and test again : This is the most important step. The true essence of trial and error + is found here. Attempting different variations, structures, and wordings + of the same prompt can lead to vastly different outcomes, all coinciding + with the previously discussed points. +
+
+ The aforementioned resources are as follows, in an order that we'd suggest approaching this topic with : + +
+ }, + { + title: "Modules", + content: + + Modules are a product that we offer outside of being a convenient host and frontend for a wide array of hand-picked open source LLMs. + They can be created using a fraction of our available selectPage( pages[ 5 ] ) }>api, and still create a lively environment for any + chatbot, website, video game dialog, or any other endeavour only the mind can uncover. +
+ At the moment, our pricing for module implementation to your service starts at $250 USD, and of course goes up with project scope. +
+ }, + { + title: "Tools", + content: + + To not repeat ourselves too much here, we'd suggest reading #4 of selectPage( pages[ 1 ] ) }>effective chatting before this portion. +

+ As stated there, our provided tooling is initiated automatically by the will of the selected model, but you are in charge + of managing its resource consumption. If you notice it taking a lot of notes, it will be worthwhile to clean out notes that + aren't so important. If your current conversation has a lot of web requests in it's history, it could prove resourceful to + start a new chat to initiate a new context window to refreshing the models "short-term memory", while carrying over useful + notes from past conversations. These nuanced tweaks will become frictionless and scale overtime to further hone in the model + to become tailored to you, the user. +
+ }, + { + title: "API", + content: + + Our OpenAI-compatible API is the core that powers this entire site. + As you can see for yourself in the inspector, this site is written completely with an in-house framework. + None of the nonsense that plagues the modern industry. We understand the importance of simplicty. + What makes this all possible, outside of our ability to "Make It Work" as developers, is our robust API. + + To dig deeper and become a power user, please visit JSX.navigate( "/api" ) }>this page. + + } +]; + +let selected_page: TutorialPage = pages[ 0 ]; +export default function Tutorial() { + return + +
+ + { pages.map( ( p ) => selectPage( p ) }> { p.title } ) } + +
+ +
+ + { selected_page.content } + +
+
+
+} + +function selectPage( page: TutorialPage ) { + selected_page = page; + $( "#tutorial-links-box" ).text( page.title ); // moneyjsx todo @nave : FIX PLEASE, I SHOULDN'T HAVE TO DO THIS ( IT'S BROKEN ON MODEL PAGE AS WELL ) -- intuitive functionality is that it rerenders when the selected_page var is modified + $( "#tutorial-content" ).html( page.content ); // if we could add a reactive body to that as well that responds when selection changed, we could remove this entire need for onclick, but that's also probably a fuck ton of work . +} diff --git a/moneyjsx/src/support.tsx b/moneyjsx/src/support.tsx new file mode 100644 index 0000000..2b718be --- /dev/null +++ b/moneyjsx/src/support.tsx @@ -0,0 +1,18 @@ +import * as JSX from './jsx'; + +import { Page, GroupBox } from './components'; + +export default function Support() { + return + + + + +} diff --git a/moneyjsx/src/terminal.tsx b/moneyjsx/src/terminal.tsx new file mode 100644 index 0000000..bc4657d --- /dev/null +++ b/moneyjsx/src/terminal.tsx @@ -0,0 +1,275 @@ +import $ from 'jquery'; +import * as JSX from './jsx'; +import * as api from './api'; +import * as user from './user'; +import * as chat from './chat'; + +import { Page } from './components'; +import { ChatInput, ChatList } from './chat'; + +let start_w = 0, start_h = 0; +let start_mx = 0, start_my = 0; +let is_resizing = false; +let has_listener = false; + +function startResize( e: MouseEvent ) { + const terminal = $( "#terminal" ); + start_mx = e.pageX; + start_my = e.pageY; + + if( terminal[0].style.width ) + start_w = parseInt( terminal[0].style.width ); + else + start_w = terminal[0].clientWidth; + + if( terminal[0].style.height ) + start_h = parseInt( terminal[0].style.height ); + else + start_h = terminal[0].clientHeight * 1.05; + + window.addEventListener( "touchmove", resize ); + window.addEventListener( "touchend", saveSize ); + window.addEventListener( "touchcancel", saveSize ); + window.addEventListener( "mousemove", resize ); + window.addEventListener( "mouseup", saveSize ); + is_resizing = true; +} + +function resize( e: MouseEvent ) { + if( !is_resizing ) + return; + + let new_w = start_w + ( e.pageX - start_mx ) * 2.0; + let new_h = start_h + ( ( e.pageY - start_my ) * 1.05 ); + + const body = $( "body" ); + const max_h = body.outerHeight() - 60; + + if( new_h > max_h ) + new_h = max_h; + + const terminal = $( "#terminal" ); + + terminal.css( `width`, `${ new_w }px` ); + terminal.css( `height`, `${ new_h }px` ); +} + +function saveSize() { + if( !is_resizing ) + return; + + const terminal = $( "#terminal" ); + let size = { + width: terminal[0].style.width, + height: terminal[0].style.height, + }; + + is_resizing = false; + localStorage.setItem( "terminal-size", JSON.stringify( size ) ); + + window.removeEventListener( "touchmove", resize ); + window.removeEventListener( "touchend", saveSize ); + window.removeEventListener( "touchcancel", saveSize ); + window.removeEventListener( "mousemove", resize ); + window.removeEventListener( "mouseup", saveSize ); +} + +function getStyleForSize() { + let style = ""; + if( window.innerWidth > 768 ) { + const size_settings = localStorage.getItem( "terminal-size" ); + if( size_settings ) { + const parsed = JSON.parse( size_settings ); + style = `width: ${ parsed.width }; height: ${ parsed.height };`; + } + } + else { + style = `width: 95%; height: ${Math.floor( window.innerHeight - 130 )}px`; + } + + return style; +} + +function onWindowResize() { + const terminal = $( "#terminal" ); + const style = getStyleForSize(); + terminal.attr( "style", style ); + + if( window.innerWidth < 768 ) + $( "#terminal-resizer" ).hide(); + else + $( "#terminal-resizer" ).show(); +} + +function focusInput( e: Event ) { + const sel = window.getSelection(); + if( sel && sel.type == 'Range' ) + return; + + const input = $( "#cmd-input" ); + const content = input.find( "#input-content" ); + if( !input.length || !content.length ) + return; + + for( let iclass of ( e.target as HTMLElement )?.classList ) { + if( iclass.startsWith( "tool-call" ) ) + return; + } + + input[0].focus(); + + // move cursor to the end of text + if( sel.anchorNode != content[0] && sel.anchorNode.parentElement != content[0] ) { + const range = document.createRange(); + if( content.length ) { + const child = content[0].firstChild; + if( child ) { + range.setStart( child, 0 ); + range.setEnd( child, child.textContent.length ); + } + else { + range.selectNodeContents( content[0] ); + } + range.collapse( false ); + + sel.removeAllRanges(); + sel.addRange( range ); + } + } +} + +function TerminalResizer( props: any ) { + return
+} + +let promptc = 0; +function writePrompt( promptTxt: string ) { + let el = $( +
inputPrompt( promptTxt ) }> + +
+ ); + + let writeChar = ( str: string, i: number ) => { + if( i >= str.length ) + return; + + let char = str.charAt( i ); + let link = el.find( 'a' ); + let text = link.text(); + link.text( text + char ); + setTimeout( () => writeChar( str, i + 1 ), 50 ); + }; + + writeChar( promptTxt, 0 ); + $( '#suggested-prompts' ).append( el ); +} + +async function getPrompts() { + const prompts_req = await fetch( `${window.location.origin}/static/prompts.json` ); + const data = await prompts_req.json(); + const { prompts } = data; + + const shuffled = prompts.sort( () => Math.random() - 0.5 ); + const random_prompts = shuffled.slice( 0, 5 ); + + random_prompts.forEach( ( p: string ) => { + writePrompt( p ); + } ); +} + +function inputPrompt( txt: string ) { + const input = $( "#cmd-input" ); + const el = input[0] as HTMLInputElement; + + input.text( txt ); + input[0].focus(); + + let range = document.createRange() + let sel = window.getSelection() + + range.setStart( el.childNodes[0], txt.length ); + range.collapse( true ) + + sel.removeAllRanges() + sel.addRange( range ) +} + +function SuggestedPrompts() { + setTimeout( () => { + if( !chat.msglog.length ) + getPrompts(); + } ); + + return
+
+} + +function TerminalWindow() { + if( !has_listener ) { + window.onresize = onWindowResize; + has_listener = true; + } + + const style = getStyleForSize(); + return
+ +
+ + +
+
+ +
+
+} + +function ModelCapabilities() { + const model = api.getModelFromName( user.settings.site_prefs.model! ); + if( !model ) + return
+ + const capabilities = model.capabilities; + if( !capabilities ) + return
+ + let model_str = `${model.name} | `; + model_str += `vision ${capabilities.vision ? 'āœ”' : '✘'} | `; + model_str += `web ${capabilities.web ? 'āœ”' : '✘'} | `; + model_str += `notes ${capabilities.notes ? 'āœ”' : '✘'} | `; + model_str += `memory lookup ${capabilities.remind ? 'āœ”' : '✘'}`; + // todo: later + // model_str += ` | reasoning ${capabilities.reasoning ? 'āœ”' : '✘'}`; + + return
+ { model_str } +
+} + +export function updateCapabilitiesDisplay() { + const div = $( "#model-capabilities" ); + if( div.length > 0 ) + div.replaceWith( ); +} + +export default function Terminal() { + if( !user.is_loggedin ) { + setTimeout( () => JSX.navigate( "/" ) ); + return not logged in + } + + return + + + + +} diff --git a/moneyjsx/src/tsconfig.json b/moneyjsx/src/tsconfig.json new file mode 100644 index 0000000..b964594 --- /dev/null +++ b/moneyjsx/src/tsconfig.json @@ -0,0 +1,121 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + "moduleResolution": "node", + /* Language and Environment */ + "target": "es2020", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "lib": [ + "ES2017", + "DOM", + "DOM.Iterable", + "ScriptHost" + ], + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + "jsx": "react", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + "jsxFactory": "JSX.createElement", + "jsxFragmentFactory": "JSX.createFragment", + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "es2020", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + "baseUrl": ".", + "paths": { + "*": ["types/*"] + }, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": [ + "./node_modules/@types", + "./types" + ], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": false, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + "strictNullChecks": false, /* When type checking, take into account 'null' and 'undefined'. */ + "strictFunctionTypes": false, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + "strictBindCallApply": false, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + "strictPropertyInitialization": false, /* Check for class properties that are declared but not set in the constructor. */ + "strictBuiltinIteratorReturn": false, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ + "noImplicitThis": false, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/moneyjsx/src/upgrade.tsx b/moneyjsx/src/upgrade.tsx new file mode 100644 index 0000000..ab29e34 --- /dev/null +++ b/moneyjsx/src/upgrade.tsx @@ -0,0 +1,206 @@ +import * as JSX from './jsx'; +import * as user from './user'; +import * as api from './api'; +import $ from 'jquery'; + +import { Page, GroupBox, Spinner } from './components'; + +let stripe = null; +let card = null; +let selected_product = 2; + +async function loadStripe() { + return new Promise( function (resolve, reject ) { + const s = document.createElement( 'script' ); + s.src = 'https://js.stripe.com/v3/'; + s.onload = resolve; + s.onerror = reject; + document.head.appendChild( s ); + } ); +} + +function showError( text: string ) { + $( "#payment-error" ).show(); + $( "#payment-error" ).text( text ); +} + +async function onFormSubmit( e: Event ) { + e.preventDefault(); + const { paymentMethod, error } = await stripe.createPaymentMethod( { + type: 'card', + card + } ); + + if( error ) + return showError( error.message ); + + const res = await api.post( 'create-payment-intent', { + token: localStorage.getItem( 'session' ), + paymentMethodId: paymentMethod.id, + subLength: selected_product + } ); + + if( res.status == 'ok' ) { + const intent = res.paymentIntent; + if( intent.status == 'succeeded' ) + return JSX.navigateParams( '/payment-success', {} ); + else + return showError( "Payment failed. Contact support if the issue persists." ); + } + else if( res.msg ) + return showError( "Error: " + res.msg ); + else + return showError( "Payment failed. Contact support if the issue persists." ); +} + +function waitForStripe() { + const iframes = $( 'iframe' ); + if( !iframes.length ) + return setTimeout( waitForStripe, 50 ); + + for( let iframe of iframes ) { + if( iframe.attributes.getNamedItem( 'name' ).value == 'hcaptcha-invisible' ) { + $( '#upgrade-loading' ).remove(); + $( '#upgrade-inner' ).show(); + + return; + } + } + + setTimeout( waitForStripe, 50 ); +} + +async function initStripe() { + stripe = window['Stripe']( 'pk_live_51Q9JG602rmv2yeiGYNNfwFkqp5ntpXIDIMIoiwDoEOrB5IsC75WDy3XOqekvuwY6PecviSSo5ERt0umrdBdUtqhd00FyYZe5p3' ); + const font = user.settings.site_prefs.font; + + const params = { + mode: 'billing', + style: { + base: { + color: '#fff', + fontFamily: font, + fontSize: '15px', + '::placeholder': { + color: '#ccc', + }, + }, + }, + } + + const el = getComputedStyle( document.body ); + const back = el.getPropertyValue( '--back' ); + const front = el.getPropertyValue( '--front' ); + const appearance = { + theme: 'stripe', + disableAnimations: true, + + variables: { + colorPrimary: front, + colorBackground: back, + colorText: '#fff', + fontFamily: font, + fontSizeBase: '15px', + fontSizeSm: '13px', + spacingUnit: '2px', + borderRadius: '0px', + }, + rules: { + ".Input": { + border: 'none' + } + } + } + + const elements = stripe.elements( { appearance } ); + const name = elements.create( 'address', { mode: 'billing', appearance } ); + name.mount( '#name-element' ); + + card = elements.create( 'card', params ); + card.mount( '#card-element' ); +} + +function onProductChange( e: Event ) { + selected_product = parseInt( (e.target as HTMLInputElement).value ); +} + +function SelectionRadio( params: any ) { + return
+ { params.checked && + + } + { !params.checked && + + } + +
+} + +function UpgradeLoaded() { + return +} + +export default function Upgrade() { + setTimeout( () => { + loadStripe().then( () => { + $( ).insertAfter( "#upgrade-loading" ); + initStripe(); + waitForStripe(); + } ); + } ); + + return + + Loading...   + + +} diff --git a/moneyjsx/src/user.tsx b/moneyjsx/src/user.tsx new file mode 100644 index 0000000..7755670 --- /dev/null +++ b/moneyjsx/src/user.tsx @@ -0,0 +1,261 @@ +import $ from 'jquery'; + +import * as JSX from './jsx'; +import * as api from './api'; + +export interface ChatFile { + id: string, + name: string +} + +export interface UserSettings { + uuid: string, + nickname: string, + site_prefs: { + font: string, + model?: string + }, + prompt_data: { + system?: string + }, + chat_files?: { + files?: ChatFile[] + }, + plan: { + endTime: number, + plan: string + } +}; + +export let is_loggedin = false; +export let settings: UserSettings = null; + +let on_prefs_updated: Function = () => {}; + +export async function onPrefsUpdated( fn: Function ) { + on_prefs_updated = fn; +} + +/** + * polls settings from the server +**/ +export async function updatePrefs() { + if( !is_loggedin ) { + return; + } + + let res = null; + try { + res = await fetch( `${api.url}/settings`, { + method: 'POST', + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify( { + token: localStorage.getItem( 'session' ), + } ) + } ); + + if( !res.ok ) { + try { + const json = await res.json(); + if( json.status == 'nodata' ) { + localStorage.setItem( 'needs-setup', 'true' ); + if( window.location.pathname != '/first-landing' ) + return JSX.navigate( '/first-landing' ); + else { + settings = null; + localStorage.setItem( 'settings', '{}' ); + } + } else if( json.status != 'ok' ) { + is_loggedin = false; + localStorage.clear(); + } + + throw new Error( json.msg ); + } catch( e: any ) { + throw new Error( "error contacting server" ); + } + } + + res = await res.json(); + } catch( e: any ) { + throw new Error( e.message ); + } + + settings = res.userprefs; + localStorage.setItem( 'settings', JSON.stringify( settings ) ); + on_prefs_updated(); +} + +/** + * saves prefs on the server +**/ +export async function savePrefs( prefs: any ) { + const res = await api.post( `update-settings`, { token: localStorage.getItem( 'session' ), prefs } ); + settings = res.userprefs; + localStorage.setItem( 'settings', JSON.stringify( settings ) ); +} + +export async function getNotes() { + const res = await api.post( `get-notes`, { token: localStorage.getItem( 'session' ) } ); + return res.notes; +} + +export async function deleteNote( note_id: string ) { + await api.post( `delete-note`, { token: localStorage.getItem( 'session' ), noteId: note_id } ); +} + +export async function deleteAllNotes() { + await api.post( `delete-notes`, { token: localStorage.getItem( 'session' ) } ); +} + +export async function getTokens() { + const res = await api.post( `get-tokens`, { token: localStorage.getItem( 'session' ) } ); + return res.tokens; +} + +export async function createToken() { + const res = await api.post( `create-token`, { token: localStorage.getItem( 'session' ) } ); + return res.token; +} + +export async function deleteToken( token_id: number ) { + await api.post( `delete-token`, { id: token_id, token: localStorage.getItem( 'session' ) } ); +} + +export async function deleteAllTokens() { + await api.post( `delete-tokens`, { token: localStorage.getItem( 'session' ) } ); +} + +export async function createChat() { + const res = await api.post( `create-chat`, { token: localStorage.getItem( 'session' ) } ); + return res; +} + +export async function deleteChat( chatId: string ) { + await api.post( `delete-chat`, { chatId, token: localStorage.getItem( 'session' ) } ); +} + +export async function downloadAllData() { + let res = await fetch( `${api.url}/getalldata`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify( { token: localStorage.getItem( 'session' ) } ) + } ); + + let contentType = res.headers.get( 'content-type' ); + if( contentType && contentType.includes( 'application/zip' ) ) { + let blob = await res.blob(); + let url = window.URL.createObjectURL( blob ); + const a = ; + $( 'body' ).append( a ); + a.onclick = ( e: Event ) => { e.stopPropagation(); }; + a.click(); + window.URL.revokeObjectURL( url ); + } + else { + let json = null; + try { + json = await res.json(); + } catch( e: any ) { + throw new Error( "Error contacting server" ); + } + + if( json.status != 'ok' ) + throw new Error( json.msg ); + } +} + +export async function invalidateAllSessions() { + const res = await api.post( `invalidate-all-sessions`, { token: localStorage.getItem( 'session' ) } ); + localStorage.setItem( 'session', res.session ); +} + +function updateFont() { + const style = document.documentElement.style; + if( settings.site_prefs && settings.site_prefs.font != null ) + style.setProperty( "--site-font", settings.site_prefs.font ); +} + +async function onNavigateAsync() { + try { + if( is_loggedin ) { + if( localStorage.getItem( 'needs-setup' ) && window.location.pathname !== "/first-landing" ) + setTimeout( () => JSX.navigate( "/first-landing" ) ); + else + await updatePrefs(); + // update it again in case it changed in prefs + updateFont(); + } + + await api.updateModels(); + } catch( e: any ) { + // todo: display message box w error + console.log( e ); + } +} + +export function onNavigate() { + settings = JSON.parse( localStorage.getItem( 'settings' ) || '{}' ) as UserSettings; + api.parseModels(); + if( localStorage.getItem( 'session' ) ) + is_loggedin = true; + + if( is_loggedin ) + updateFont(); + + onNavigateAsync(); +} + +/** + * returns true on success, error message on failure +**/ +export async function sendLoginLink( email: string ) { + let res = null; + try { + res = await api.post( `send-login-link`, { email } ); + } catch( e: any ) { + return e.message; + } + + return true; +} + +export async function onLogin( code: string ) { + let json = null; + try { + const res = await fetch( `${api.url}/login?token=${code}` ); + json = await res.json(); + } catch( e: any ) { + throw new Error( "error contacting server" ); + } + + if( json.status != 'ok' ) + throw new Error( json.msg ); + + localStorage.setItem( 'session', json.session ); + is_loggedin = true; + + try { + await updatePrefs(); + } catch( e: any ) { + throw new Error( e.msg ); + } +} + +export async function logout() { + if( !is_loggedin ) + return; + + try { + await api.post( 'invalidate-session', { token: localStorage.getItem( 'session' ) } ); + } catch( e: any ) {} + + localStorage.clear(); + is_loggedin = false; + JSX.navigate( '/' ); + window.location.reload(); +} diff --git a/moneyjsx/src/util.tsx b/moneyjsx/src/util.tsx new file mode 100644 index 0000000..097502e --- /dev/null +++ b/moneyjsx/src/util.tsx @@ -0,0 +1,83 @@ +import * as api from './api'; +import * as chat from './chat'; + +export function escapeHtml( html: string ) { + const entityMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '/': '/', + '`': '`', + '=': '=' + }; + + return String( html ).replace( /[&<>"'`=\/]/g, ( s ) => { + return entityMap[s]; + } ); +} + +export function parseJWT( token: string ) : any { + const parts = token.split( '.' ); + let encoded = parts[1]; + encoded = encoded.replace(/-/g, '+').replace(/_/g, '/'); + const pad = encoded.length % 4; + if( pad === 1 ) + throw new Error( 'what the fuck' ); + if( pad > 1 ) + encoded += new Array( 5 - pad ).join( '=' ); + + const payload = JSON.parse( atob( encoded ) ); + return payload; +} + +export function isToolStr( buf: string, model: api.Model ) { + const trimmed = buf.replace( /\s+/g, '' ).toLowerCase(); + const capabilities = model.capabilities; + + for( let tool in capabilities ) { + let name = tool.toLowerCase(); + let str = `{"name":"${name}"`; + + let not_matched = false; + for( let i = 0; i < Math.min( trimmed.length, str.length ); i++ ) { + if( trimmed[i] !== str[i] ) { + not_matched = true; + break; + } + } + + if( !not_matched ) + return true; + } + + return false; +} + +export function getToolCall( msg: chat.Msg ) { + let first_bracket = msg.content.indexOf( '{' ); + let last_bracket = msg.content.lastIndexOf( '}' ); + + if( first_bracket == -1 || last_bracket == -1 ) + return null; + + let call = msg.content.substring( first_bracket, last_bracket + 1 ); + let json = null; + try { json = JSON.parse( call ); } + catch( e ) { return null; } + + return json; +} + +export function sizeHumanReadable( size: number ) { + if( size < 1024 ) + return size + ' B'; + else if( size < 1024 * 1024 ) + return ( size / 1024 ).toFixed( 2 ) + ' KB'; + else if( size < 1024 * 1024 * 1024 ) + return ( size / 1024 / 1024 ).toFixed( 2 ) + ' MB'; + else + return ( size / 1024 / 1024 / 1024 ).toFixed( 2 ) + ' GB'; +} + diff --git a/moneyjsx/static/fonts/LICENSE.TXT b/moneyjsx/static/fonts/LICENSE.TXT new file mode 100644 index 0000000..fd662a7 --- /dev/null +++ b/moneyjsx/static/fonts/LICENSE.TXT @@ -0,0 +1,428 @@ +Attribution-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-ShareAlike 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + + including for purposes of Section 3(b); and + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the ā€œLicensor.ā€ The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/moneyjsx/static/fonts/README.NFO b/moneyjsx/static/fonts/README.NFO new file mode 100644 index 0000000..f09ee43 --- /dev/null +++ b/moneyjsx/static/fonts/README.NFO @@ -0,0 +1,45 @@ + + _ Ä --- Ä _ Ä --- Ä + .ł" ,Ā, ~=Ņ_ .ł. .ł" ~=Ņ_ + . . .OZZZOø ^g, . .žų~ųž. ^%· .s%ZOæ + ` Ą¦qZp¦' ųł `Z, ` _.,ś `gZæ ł:ZZ| + _Āg%%oc, ~ _., ` ŌZ; _.,Ā©y%Z=-:ś .s%Z%L, `OZZYi%gĀ_ + jOZZ˜˜ZZOLś jOZZ˜Ŗ, `Zb _.Ā©y%ZZZZZZZZ%=:ł jZZZZZZZb `ZZZZ˜ZZZb + łZZ?~ ~\ZZZ| |›ZZZZO\ ś?Z.ł%˜ZZZZZZ¦*Źü^ų"`' /ZZ¦"~"¦ZZ\ łT ~!ZZ“ + Z6f łZZZOłś|ZZZ^ZZi ]Z1ś:-":ZZZ' _. łOZ/ \ZZL : |6Z' + . `ZZŖ._ ~"^Z| łZZZ;\ZZ ĘZµ ś›ZZZś _Ā%ZZś l%! .oZo, ]ZZśł _ŅZZ' . + , ~^Ź*Ź^~.Z›śśZZZl ZZĀZZ1 ś łZZZZł ^¦!ZZł :=l dZZZb łZZ| ~^"~ + ł g%ZZZśśZZZZ `ZZZų : śZZZZ: łlZZ| ł;ł :ZZZF śZZ| .' + ~Ä_ śZZZZ| łZZZZ ĄZZ˜' ł ?ZZZ! :ZZ³ś śł "¦" dZgś _Ä~ + ~"^ :ZZZOłł|ZZZ! `^' ' `ZZZ ś¦ZZ: ś ./ZZf śÄ--`~ + OZZZł jZ¦Ź~ `. _ _. . ~^¦L, YZZZZOzzĀĀ śł:=CO/ + -V! j¦Ź^~ . ~-ŗł-~ . `^ʦZ˜ZF'śł:%CG' . O R G + ~Ä_ T _Ä~ ~' '^"~ + ~"Ķ=|=Ķ"~ + ł p r e s e n t s + ś + + + The Ultimate Oldschool PC Font Pack + + < http://int10h.org/oldschool-pc-fonts/ > + + v2.2 // 2020-11-21 + + ------------------------------------------------------------------------ + + For documentation see the 'docs' folder or these pages: + + Readme: < http://int10h.org/oldschool-pc-fonts/readme/ > + + Font list: < http://int10h.org/oldschool-pc-fonts/fontlist/ > + + ------------------------------------------------------------------------ + + The Ultimate Oldschool PC Font Pack is licensed under a Creative Commons + Attribution-ShareAlike 4.0 International License. + + You should have received a copy of the license along with this work. If + not, see < http://creativecommons.org/licenses/by-sa/4.0/ >. + + (c) 2016-2020 VileR diff --git a/moneyjsx/static/fonts/README.TXT b/moneyjsx/static/fonts/README.TXT new file mode 100644 index 0000000..02b06ef --- /dev/null +++ b/moneyjsx/static/fonts/README.TXT @@ -0,0 +1,46 @@ + + _ ─ --- ─ _ ─ --- ─ + .āˆ™" ,┬, ~=ā•„_ .āˆ™. .āˆ™" ~=ā•„_ + . . .OZZZOā•• ^g, . .■°~°■. ^%ā•– .s%ZO┐ + ` └ªqZpĀŖ' Ā°āˆ™ `Z, ` _.,Ā· `gZ┐ āˆ™:ZZ| + _┬g%%oc, ~ _., ` ā•˜Z; _.,ā”¬āŒy%Z=-:Ā· .s%Z%L, `OZZYi%g┬_ + jOZZÿÿZZOLĀ· jOZZÿ¬, `Zb _.ā”¬āŒy%ZZZZZZZZ%=:āˆ™ jZZZZZZZb `ZZZZĆæZZZb + āˆ™ZZ?~ ~\ZZZ| |Ā¢ZZZZO\ Ā·?Z.āˆ™%ĆæZZZZZZĀŖ*╩ⁿ^°"`' /ZZĀŖ"~"ĀŖZZ\ āˆ™T ~!ZZ┤ + Z6f āˆ™ZZZOāˆ™Ā·|ZZZ^ZZi ]Z1Ā·:-":ZZZ' _. āˆ™OZ/ \ZZL : |6Z' + . `ZZ¬._ ~"^Z| āˆ™ZZZ;\ZZ ā•žZā•” Ā·Ā¢ZZZĀ· _┬%ZZĀ· l%! .oZo, ]ZZĀ·āˆ™ _ā•„ZZ' . + , ~^ā•©*ā•©^~.Z¢··ZZZl ZZ┬ZZ1 Ā· āˆ™ZZZZāˆ™ ^ĀŖ!ZZāˆ™ :=l dZZZb āˆ™ZZ| ~^"~ + āˆ™ g%ZZZĀ·Ā·ZZZZ `Ā„ZZZ° : Ā·ZZZZ: āˆ™lZZ| āˆ™;āˆ™ :ZZZF Ā·ZZ| .' + ~─_ Ā·ZZZZ| āˆ™ZZZZ ā””ZZĆæ' āˆ™ ?ZZZ! :ZZ│· Ā·āˆ™ "ĀŖ" dZgĀ· _─~ + ~"^ :ZZZOāˆ™āˆ™|ZZZ! `^' ' `Ā„ZZZ Ā·ĀŖZZ: Ā· ./ZZf ·─--`~ + OZZZāˆ™ jZĀŖā•©~ `. _ _. . ~^ĀŖL, YZZZZOzz┬┬ Ā·āˆ™:=CO/ + -V! jĀŖā•©^~ . ~-ā•‘āˆ™-~ . `^ā•©ĀŖZ„ÿZF'Ā·āˆ™:%CG' . O R G + ~─_ T _─~ ~' '^"~ + ~"═=|=═"~ + āˆ™ p r e s e n t s + Ā· + + + The Ultimate Oldschool PC Font Pack + + < http://int10h.org/oldschool-pc-fonts/ > + + v2.2 // 2020-11-21 + + ------------------------------------------------------------------------ + + For documentation see the 'docs' folder or these pages: + + Readme: < http://int10h.org/oldschool-pc-fonts/readme/ > + + Font list: < http://int10h.org/oldschool-pc-fonts/fontlist/ > + + ------------------------------------------------------------------------ + + The Ultimate Oldschool PC Font Pack is licensed under a Creative Commons + Attribution-ShareAlike 4.0 International License. + + You should have received a copy of the license along with this work. If + not, see < http://creativecommons.org/licenses/by-sa/4.0/ >. + + (c) 2016-2020 VileR + diff --git a/moneyjsx/static/fonts/Web437_ACM_VGA_8x14.woff b/moneyjsx/static/fonts/Web437_ACM_VGA_8x14.woff new file mode 100644 index 0000000..9f44664 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ACM_VGA_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_ACM_VGA_8x16.woff b/moneyjsx/static/fonts/Web437_ACM_VGA_8x16.woff new file mode 100644 index 0000000..b828c2b Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ACM_VGA_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_ACM_VGA_8x8.woff b/moneyjsx/static/fonts/Web437_ACM_VGA_8x8.woff new file mode 100644 index 0000000..acfebfa Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ACM_VGA_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_ACM_VGA_9x14.woff b/moneyjsx/static/fonts/Web437_ACM_VGA_9x14.woff new file mode 100644 index 0000000..c388f41 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ACM_VGA_9x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_ACM_VGA_9x16.woff b/moneyjsx/static/fonts/Web437_ACM_VGA_9x16.woff new file mode 100644 index 0000000..9f7f85f Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ACM_VGA_9x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_ACM_VGA_9x8.woff b/moneyjsx/static/fonts/Web437_ACM_VGA_9x8.woff new file mode 100644 index 0000000..7b82f03 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ACM_VGA_9x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_AMI_EGA_8x14.woff b/moneyjsx/static/fonts/Web437_AMI_EGA_8x14.woff new file mode 100644 index 0000000..385f625 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_AMI_EGA_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_AMI_EGA_8x8-2y.woff b/moneyjsx/static/fonts/Web437_AMI_EGA_8x8-2y.woff new file mode 100644 index 0000000..0073dbd Binary files /dev/null and b/moneyjsx/static/fonts/Web437_AMI_EGA_8x8-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_AMI_EGA_8x8.woff b/moneyjsx/static/fonts/Web437_AMI_EGA_8x8.woff new file mode 100644 index 0000000..69e5483 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_AMI_EGA_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_AMI_EGA_9x14.woff b/moneyjsx/static/fonts/Web437_AMI_EGA_9x14.woff new file mode 100644 index 0000000..37813dd Binary files /dev/null and b/moneyjsx/static/fonts/Web437_AMI_EGA_9x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_AST_PremiumExec.woff b/moneyjsx/static/fonts/Web437_AST_PremiumExec.woff new file mode 100644 index 0000000..9613ecf Binary files /dev/null and b/moneyjsx/static/fonts/Web437_AST_PremiumExec.woff differ diff --git a/moneyjsx/static/fonts/Web437_ATI_8x14.woff b/moneyjsx/static/fonts/Web437_ATI_8x14.woff new file mode 100644 index 0000000..bc1a987 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ATI_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_ATI_8x16.woff b/moneyjsx/static/fonts/Web437_ATI_8x16.woff new file mode 100644 index 0000000..c782766 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ATI_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_ATI_8x8-2y.woff b/moneyjsx/static/fonts/Web437_ATI_8x8-2y.woff new file mode 100644 index 0000000..a2098f8 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ATI_8x8-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_ATI_8x8.woff b/moneyjsx/static/fonts/Web437_ATI_8x8.woff new file mode 100644 index 0000000..7984412 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ATI_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_ATI_9x14.woff b/moneyjsx/static/fonts/Web437_ATI_9x14.woff new file mode 100644 index 0000000..a8f1153 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ATI_9x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_ATI_9x16.woff b/moneyjsx/static/fonts/Web437_ATI_9x16.woff new file mode 100644 index 0000000..1f017ab Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ATI_9x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_ATI_9x8.woff b/moneyjsx/static/fonts/Web437_ATI_9x8.woff new file mode 100644 index 0000000..c53ff48 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ATI_9x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_ATI_SmallW_6x8.woff b/moneyjsx/static/fonts/Web437_ATI_SmallW_6x8.woff new file mode 100644 index 0000000..479d653 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ATI_SmallW_6x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_ATT_PC6300-2x.woff b/moneyjsx/static/fonts/Web437_ATT_PC6300-2x.woff new file mode 100644 index 0000000..9d633b5 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ATT_PC6300-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_ATT_PC6300.woff b/moneyjsx/static/fonts/Web437_ATT_PC6300.woff new file mode 100644 index 0000000..c7cb2c4 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ATT_PC6300.woff differ diff --git a/moneyjsx/static/fonts/Web437_Acer710_CGA-2y.woff b/moneyjsx/static/fonts/Web437_Acer710_CGA-2y.woff new file mode 100644 index 0000000..74d7126 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Acer710_CGA-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Acer710_CGA.woff b/moneyjsx/static/fonts/Web437_Acer710_CGA.woff new file mode 100644 index 0000000..07fddbc Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Acer710_CGA.woff differ diff --git a/moneyjsx/static/fonts/Web437_Acer710_Mono.woff b/moneyjsx/static/fonts/Web437_Acer710_Mono.woff new file mode 100644 index 0000000..c6cf32c Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Acer710_Mono.woff differ diff --git a/moneyjsx/static/fonts/Web437_Acer_VGA_8x8-2y.woff b/moneyjsx/static/fonts/Web437_Acer_VGA_8x8-2y.woff new file mode 100644 index 0000000..0422518 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Acer_VGA_8x8-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Acer_VGA_8x8.woff b/moneyjsx/static/fonts/Web437_Acer_VGA_8x8.woff new file mode 100644 index 0000000..d13fa7b Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Acer_VGA_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_Acer_VGA_9x8.woff b/moneyjsx/static/fonts/Web437_Acer_VGA_9x8.woff new file mode 100644 index 0000000..36c1e47 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Acer_VGA_9x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_Amstrad_PC-2y.woff b/moneyjsx/static/fonts/Web437_Amstrad_PC-2y.woff new file mode 100644 index 0000000..2a8593f Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Amstrad_PC-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Amstrad_PC.woff b/moneyjsx/static/fonts/Web437_Amstrad_PC.woff new file mode 100644 index 0000000..89f7b01 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Amstrad_PC.woff differ diff --git a/moneyjsx/static/fonts/Web437_ApricotPortable.woff b/moneyjsx/static/fonts/Web437_ApricotPortable.woff new file mode 100644 index 0000000..3b562f5 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ApricotPortable.woff differ diff --git a/moneyjsx/static/fonts/Web437_ApricotXenC.woff b/moneyjsx/static/fonts/Web437_ApricotXenC.woff new file mode 100644 index 0000000..a2cde2a Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ApricotXenC.woff differ diff --git a/moneyjsx/static/fonts/Web437_Apricot_200L-2y.woff b/moneyjsx/static/fonts/Web437_Apricot_200L-2y.woff new file mode 100644 index 0000000..e4bf1f3 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Apricot_200L-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Apricot_200L.woff b/moneyjsx/static/fonts/Web437_Apricot_200L.woff new file mode 100644 index 0000000..5329aee Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Apricot_200L.woff differ diff --git a/moneyjsx/static/fonts/Web437_Apricot_256L-2y.woff b/moneyjsx/static/fonts/Web437_Apricot_256L-2y.woff new file mode 100644 index 0000000..710985f Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Apricot_256L-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Apricot_256L.woff b/moneyjsx/static/fonts/Web437_Apricot_256L.woff new file mode 100644 index 0000000..ef73b30 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Apricot_256L.woff differ diff --git a/moneyjsx/static/fonts/Web437_Apricot_Mono.woff b/moneyjsx/static/fonts/Web437_Apricot_Mono.woff new file mode 100644 index 0000000..e1041a3 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Apricot_Mono.woff differ diff --git a/moneyjsx/static/fonts/Web437_CL_EagleIII_8x16.woff b/moneyjsx/static/fonts/Web437_CL_EagleIII_8x16.woff new file mode 100644 index 0000000..f0e9430 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_CL_EagleIII_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_CL_EagleIII_9x16.woff b/moneyjsx/static/fonts/Web437_CL_EagleIII_9x16.woff new file mode 100644 index 0000000..1866e81 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_CL_EagleIII_9x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_CL_EagleII_8x16.woff b/moneyjsx/static/fonts/Web437_CL_EagleII_8x16.woff new file mode 100644 index 0000000..342cdc6 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_CL_EagleII_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_CL_EagleII_9x16.woff b/moneyjsx/static/fonts/Web437_CL_EagleII_9x16.woff new file mode 100644 index 0000000..38e8b1d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_CL_EagleII_9x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_CL_Stingray_8x16.woff b/moneyjsx/static/fonts/Web437_CL_Stingray_8x16.woff new file mode 100644 index 0000000..94dc555 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_CL_Stingray_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_CL_Stingray_8x16_bold.woff b/moneyjsx/static/fonts/Web437_CL_Stingray_8x16_bold.woff new file mode 100644 index 0000000..78cb4fc Binary files /dev/null and b/moneyjsx/static/fonts/Web437_CL_Stingray_8x16_bold.woff differ diff --git a/moneyjsx/static/fonts/Web437_CL_Stingray_8x19.woff b/moneyjsx/static/fonts/Web437_CL_Stingray_8x19.woff new file mode 100644 index 0000000..1781f2f Binary files /dev/null and b/moneyjsx/static/fonts/Web437_CL_Stingray_8x19.woff differ diff --git a/moneyjsx/static/fonts/Web437_CL_Stingray_8x19_bold.woff b/moneyjsx/static/fonts/Web437_CL_Stingray_8x19_bold.woff new file mode 100644 index 0000000..da422df Binary files /dev/null and b/moneyjsx/static/fonts/Web437_CL_Stingray_8x19_bold.woff differ diff --git a/moneyjsx/static/fonts/Web437_CompaqThin_8x14.woff b/moneyjsx/static/fonts/Web437_CompaqThin_8x14.woff new file mode 100644 index 0000000..c448c58 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_CompaqThin_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_CompaqThin_8x16.woff b/moneyjsx/static/fonts/Web437_CompaqThin_8x16.woff new file mode 100644 index 0000000..7914e4c Binary files /dev/null and b/moneyjsx/static/fonts/Web437_CompaqThin_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_CompaqThin_8x8.woff b/moneyjsx/static/fonts/Web437_CompaqThin_8x8.woff new file mode 100644 index 0000000..62772df Binary files /dev/null and b/moneyjsx/static/fonts/Web437_CompaqThin_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_Compaq_Port3-2x.woff b/moneyjsx/static/fonts/Web437_Compaq_Port3-2x.woff new file mode 100644 index 0000000..a859b9f Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Compaq_Port3-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_Compaq_Port3.woff b/moneyjsx/static/fonts/Web437_Compaq_Port3.woff new file mode 100644 index 0000000..b96d4e5 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Compaq_Port3.woff differ diff --git a/moneyjsx/static/fonts/Web437_Compis.woff b/moneyjsx/static/fonts/Web437_Compis.woff new file mode 100644 index 0000000..44721a2 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Compis.woff differ diff --git a/moneyjsx/static/fonts/Web437_Copam_BIOS-2y.woff b/moneyjsx/static/fonts/Web437_Copam_BIOS-2y.woff new file mode 100644 index 0000000..1a301bf Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Copam_BIOS-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Copam_BIOS.woff b/moneyjsx/static/fonts/Web437_Copam_BIOS.woff new file mode 100644 index 0000000..1c51092 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Copam_BIOS.woff differ diff --git a/moneyjsx/static/fonts/Web437_Cordata_PPC-21.woff b/moneyjsx/static/fonts/Web437_Cordata_PPC-21.woff new file mode 100644 index 0000000..bab8c7b Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Cordata_PPC-21.woff differ diff --git a/moneyjsx/static/fonts/Web437_Cordata_PPC-400.woff b/moneyjsx/static/fonts/Web437_Cordata_PPC-400.woff new file mode 100644 index 0000000..5f95c1b Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Cordata_PPC-400.woff differ diff --git a/moneyjsx/static/fonts/Web437_DG_One-2y.woff b/moneyjsx/static/fonts/Web437_DG_One-2y.woff new file mode 100644 index 0000000..5ebc340 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DG_One-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_DG_One-2y_bold.woff b/moneyjsx/static/fonts/Web437_DG_One-2y_bold.woff new file mode 100644 index 0000000..38a7339 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DG_One-2y_bold.woff differ diff --git a/moneyjsx/static/fonts/Web437_DG_One.woff b/moneyjsx/static/fonts/Web437_DG_One.woff new file mode 100644 index 0000000..9bee64f Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DG_One.woff differ diff --git a/moneyjsx/static/fonts/Web437_DG_One_bold.woff b/moneyjsx/static/fonts/Web437_DG_One_bold.woff new file mode 100644 index 0000000..a887854 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DG_One_bold.woff differ diff --git a/moneyjsx/static/fonts/Web437_DOS-V_TWN16.woff b/moneyjsx/static/fonts/Web437_DOS-V_TWN16.woff new file mode 100644 index 0000000..4a9692a Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DOS-V_TWN16.woff differ diff --git a/moneyjsx/static/fonts/Web437_DOS-V_TWN19.woff b/moneyjsx/static/fonts/Web437_DOS-V_TWN19.woff new file mode 100644 index 0000000..3ebeeb5 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DOS-V_TWN19.woff differ diff --git a/moneyjsx/static/fonts/Web437_DOS-V_re_ANK16.woff b/moneyjsx/static/fonts/Web437_DOS-V_re_ANK16.woff new file mode 100644 index 0000000..a61193e Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DOS-V_re_ANK16.woff differ diff --git a/moneyjsx/static/fonts/Web437_DOS-V_re_ANK19.woff b/moneyjsx/static/fonts/Web437_DOS-V_re_ANK19.woff new file mode 100644 index 0000000..6842296 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DOS-V_re_ANK19.woff differ diff --git a/moneyjsx/static/fonts/Web437_DOS-V_re_ANK24.woff b/moneyjsx/static/fonts/Web437_DOS-V_re_ANK24.woff new file mode 100644 index 0000000..a54c6ad Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DOS-V_re_ANK24.woff differ diff --git a/moneyjsx/static/fonts/Web437_DOS-V_re_ANK30.woff b/moneyjsx/static/fonts/Web437_DOS-V_re_ANK30.woff new file mode 100644 index 0000000..623d973 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DOS-V_re_ANK30.woff differ diff --git a/moneyjsx/static/fonts/Web437_DOS-V_re_JPN12.woff b/moneyjsx/static/fonts/Web437_DOS-V_re_JPN12.woff new file mode 100644 index 0000000..04ea332 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DOS-V_re_JPN12.woff differ diff --git a/moneyjsx/static/fonts/Web437_DOS-V_re_JPN16.woff b/moneyjsx/static/fonts/Web437_DOS-V_re_JPN16.woff new file mode 100644 index 0000000..6c91b6e Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DOS-V_re_JPN16.woff differ diff --git a/moneyjsx/static/fonts/Web437_DOS-V_re_JPN19.woff b/moneyjsx/static/fonts/Web437_DOS-V_re_JPN19.woff new file mode 100644 index 0000000..48f154d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DOS-V_re_JPN19.woff differ diff --git a/moneyjsx/static/fonts/Web437_DOS-V_re_JPN24.woff b/moneyjsx/static/fonts/Web437_DOS-V_re_JPN24.woff new file mode 100644 index 0000000..a77aca7 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DOS-V_re_JPN24.woff differ diff --git a/moneyjsx/static/fonts/Web437_DOS-V_re_JPN30.woff b/moneyjsx/static/fonts/Web437_DOS-V_re_JPN30.woff new file mode 100644 index 0000000..3073f72 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DOS-V_re_JPN30.woff differ diff --git a/moneyjsx/static/fonts/Web437_DOS-V_re_PRC16.woff b/moneyjsx/static/fonts/Web437_DOS-V_re_PRC16.woff new file mode 100644 index 0000000..4ddf047 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DOS-V_re_PRC16.woff differ diff --git a/moneyjsx/static/fonts/Web437_DOS-V_re_PRC19.woff b/moneyjsx/static/fonts/Web437_DOS-V_re_PRC19.woff new file mode 100644 index 0000000..322c960 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DOS-V_re_PRC19.woff differ diff --git a/moneyjsx/static/fonts/Web437_DTK_BIOS-2y.woff b/moneyjsx/static/fonts/Web437_DTK_BIOS-2y.woff new file mode 100644 index 0000000..14c9926 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DTK_BIOS-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_DTK_BIOS.woff b/moneyjsx/static/fonts/Web437_DTK_BIOS.woff new file mode 100644 index 0000000..7a1cbaf Binary files /dev/null and b/moneyjsx/static/fonts/Web437_DTK_BIOS.woff differ diff --git a/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt1-2y.woff b/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt1-2y.woff new file mode 100644 index 0000000..15a696b Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt1-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt1.woff b/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt1.woff new file mode 100644 index 0000000..a2af2d5 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt1.woff differ diff --git a/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt2-2y.woff b/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt2-2y.woff new file mode 100644 index 0000000..cfee97a Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt2-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt2.woff b/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt2.woff new file mode 100644 index 0000000..dbfdce7 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt2.woff differ diff --git a/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt3-2y.woff b/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt3-2y.woff new file mode 100644 index 0000000..c7562a7 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt3-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt3.woff b/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt3.woff new file mode 100644 index 0000000..3ac1dfe Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EagleSpCGA_Alt3.woff differ diff --git a/moneyjsx/static/fonts/Web437_EpsonMGA-2y.woff b/moneyjsx/static/fonts/Web437_EpsonMGA-2y.woff new file mode 100644 index 0000000..31f04fb Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EpsonMGA-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_EpsonMGA.woff b/moneyjsx/static/fonts/Web437_EpsonMGA.woff new file mode 100644 index 0000000..3139daf Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EpsonMGA.woff differ diff --git a/moneyjsx/static/fonts/Web437_EpsonMGA_Alt-2y.woff b/moneyjsx/static/fonts/Web437_EpsonMGA_Alt-2y.woff new file mode 100644 index 0000000..4680e93 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EpsonMGA_Alt-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_EpsonMGA_Alt.woff b/moneyjsx/static/fonts/Web437_EpsonMGA_Alt.woff new file mode 100644 index 0000000..0616ea7 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EpsonMGA_Alt.woff differ diff --git a/moneyjsx/static/fonts/Web437_EpsonMGA_Mono.woff b/moneyjsx/static/fonts/Web437_EpsonMGA_Mono.woff new file mode 100644 index 0000000..4b132bf Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EpsonMGA_Mono.woff differ diff --git a/moneyjsx/static/fonts/Web437_EuroPC_CGA-2y.woff b/moneyjsx/static/fonts/Web437_EuroPC_CGA-2y.woff new file mode 100644 index 0000000..ef56d5d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EuroPC_CGA-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_EuroPC_CGA.woff b/moneyjsx/static/fonts/Web437_EuroPC_CGA.woff new file mode 100644 index 0000000..89b84ac Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EuroPC_CGA.woff differ diff --git a/moneyjsx/static/fonts/Web437_EuroPC_Mono.woff b/moneyjsx/static/fonts/Web437_EuroPC_Mono.woff new file mode 100644 index 0000000..2692893 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EuroPC_Mono.woff differ diff --git a/moneyjsx/static/fonts/Web437_EverexME_5x8.woff b/moneyjsx/static/fonts/Web437_EverexME_5x8.woff new file mode 100644 index 0000000..1a84a60 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EverexME_5x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_EverexME_7x8.woff b/moneyjsx/static/fonts/Web437_EverexME_7x8.woff new file mode 100644 index 0000000..5b4c9d4 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EverexME_7x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_EverexME_8x16.woff b/moneyjsx/static/fonts/Web437_EverexME_8x16.woff new file mode 100644 index 0000000..1a47ea4 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_EverexME_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_FMTowns_re_8x16-2x.woff b/moneyjsx/static/fonts/Web437_FMTowns_re_8x16-2x.woff new file mode 100644 index 0000000..1424b2a Binary files /dev/null and b/moneyjsx/static/fonts/Web437_FMTowns_re_8x16-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_FMTowns_re_8x16.woff b/moneyjsx/static/fonts/Web437_FMTowns_re_8x16.woff new file mode 100644 index 0000000..702078a Binary files /dev/null and b/moneyjsx/static/fonts/Web437_FMTowns_re_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_FMTowns_re_8x8.woff b/moneyjsx/static/fonts/Web437_FMTowns_re_8x8.woff new file mode 100644 index 0000000..526cb89 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_FMTowns_re_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_HP_100LX_10x11.woff b/moneyjsx/static/fonts/Web437_HP_100LX_10x11.woff new file mode 100644 index 0000000..223e168 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_HP_100LX_10x11.woff differ diff --git a/moneyjsx/static/fonts/Web437_HP_100LX_16x12.woff b/moneyjsx/static/fonts/Web437_HP_100LX_16x12.woff new file mode 100644 index 0000000..2eaa62e Binary files /dev/null and b/moneyjsx/static/fonts/Web437_HP_100LX_16x12.woff differ diff --git a/moneyjsx/static/fonts/Web437_HP_100LX_6x8-2x.woff b/moneyjsx/static/fonts/Web437_HP_100LX_6x8-2x.woff new file mode 100644 index 0000000..3c48c55 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_HP_100LX_6x8-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_HP_100LX_6x8.woff b/moneyjsx/static/fonts/Web437_HP_100LX_6x8.woff new file mode 100644 index 0000000..5d6069c Binary files /dev/null and b/moneyjsx/static/fonts/Web437_HP_100LX_6x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_HP_100LX_8x8-2x.woff b/moneyjsx/static/fonts/Web437_HP_100LX_8x8-2x.woff new file mode 100644 index 0000000..87304c6 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_HP_100LX_8x8-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_HP_100LX_8x8.woff b/moneyjsx/static/fonts/Web437_HP_100LX_8x8.woff new file mode 100644 index 0000000..f60db64 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_HP_100LX_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_HP_150_re.woff b/moneyjsx/static/fonts/Web437_HP_150_re.woff new file mode 100644 index 0000000..3eaaf6d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_HP_150_re.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_3270pc.woff b/moneyjsx/static/fonts/Web437_IBM_3270pc.woff new file mode 100644 index 0000000..fb9cd72 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_3270pc.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_BIOS-2x.woff b/moneyjsx/static/fonts/Web437_IBM_BIOS-2x.woff new file mode 100644 index 0000000..c5fe090 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_BIOS-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_BIOS-2y.woff b/moneyjsx/static/fonts/Web437_IBM_BIOS-2y.woff new file mode 100644 index 0000000..860baf5 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_BIOS-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_BIOS.woff b/moneyjsx/static/fonts/Web437_IBM_BIOS.woff new file mode 100644 index 0000000..9daecb3 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_BIOS.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_CGA-2y.woff b/moneyjsx/static/fonts/Web437_IBM_CGA-2y.woff new file mode 100644 index 0000000..5967b6f Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_CGA-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_CGA.woff b/moneyjsx/static/fonts/Web437_IBM_CGA.woff new file mode 100644 index 0000000..fe8f17a Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_CGA.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_CGAthin-2y.woff b/moneyjsx/static/fonts/Web437_IBM_CGAthin-2y.woff new file mode 100644 index 0000000..99bd14a Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_CGAthin-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_CGAthin.woff b/moneyjsx/static/fonts/Web437_IBM_CGAthin.woff new file mode 100644 index 0000000..c7efcf1 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_CGAthin.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_Conv-2x.woff b/moneyjsx/static/fonts/Web437_IBM_Conv-2x.woff new file mode 100644 index 0000000..6ffe99d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_Conv-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_Conv-2y.woff b/moneyjsx/static/fonts/Web437_IBM_Conv-2y.woff new file mode 100644 index 0000000..9c07239 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_Conv-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_Conv.woff b/moneyjsx/static/fonts/Web437_IBM_Conv.woff new file mode 100644 index 0000000..656f15a Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_Conv.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_DOS_ISO8-2x.woff b/moneyjsx/static/fonts/Web437_IBM_DOS_ISO8-2x.woff new file mode 100644 index 0000000..f40721f Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_DOS_ISO8-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_DOS_ISO8.woff b/moneyjsx/static/fonts/Web437_IBM_DOS_ISO8.woff new file mode 100644 index 0000000..d5b9bac Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_DOS_ISO8.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_DOS_ISO9-2x.woff b/moneyjsx/static/fonts/Web437_IBM_DOS_ISO9-2x.woff new file mode 100644 index 0000000..e5f89ee Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_DOS_ISO9-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_DOS_ISO9.woff b/moneyjsx/static/fonts/Web437_IBM_DOS_ISO9.woff new file mode 100644 index 0000000..fe3eda9 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_DOS_ISO9.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_EGA_8x14-2x.woff b/moneyjsx/static/fonts/Web437_IBM_EGA_8x14-2x.woff new file mode 100644 index 0000000..77b7fef Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_EGA_8x14-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_EGA_8x14.woff b/moneyjsx/static/fonts/Web437_IBM_EGA_8x14.woff new file mode 100644 index 0000000..84efc99 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_EGA_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_EGA_8x8-2x.woff b/moneyjsx/static/fonts/Web437_IBM_EGA_8x8-2x.woff new file mode 100644 index 0000000..63de4fb Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_EGA_8x8-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_EGA_8x8.woff b/moneyjsx/static/fonts/Web437_IBM_EGA_8x8.woff new file mode 100644 index 0000000..35506d2 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_EGA_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_EGA_9x14-2x.woff b/moneyjsx/static/fonts/Web437_IBM_EGA_9x14-2x.woff new file mode 100644 index 0000000..c301231 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_EGA_9x14-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_EGA_9x14.woff b/moneyjsx/static/fonts/Web437_IBM_EGA_9x14.woff new file mode 100644 index 0000000..e70ffa2 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_EGA_9x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_EGA_9x8-2x.woff b/moneyjsx/static/fonts/Web437_IBM_EGA_9x8-2x.woff new file mode 100644 index 0000000..05a30bd Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_EGA_9x8-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_EGA_9x8.woff b/moneyjsx/static/fonts/Web437_IBM_EGA_9x8.woff new file mode 100644 index 0000000..1e77b7e Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_EGA_9x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_MDA.woff b/moneyjsx/static/fonts/Web437_IBM_MDA.woff new file mode 100644 index 0000000..677f562 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_MDA.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_Model30r0-2x.woff b/moneyjsx/static/fonts/Web437_IBM_Model30r0-2x.woff new file mode 100644 index 0000000..1d5c9db Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_Model30r0-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_Model30r0.woff b/moneyjsx/static/fonts/Web437_IBM_Model30r0.woff new file mode 100644 index 0000000..0756047 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_Model30r0.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_Model3x_Alt1.woff b/moneyjsx/static/fonts/Web437_IBM_Model3x_Alt1.woff new file mode 100644 index 0000000..de87cb1 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_Model3x_Alt1.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_Model3x_Alt2.woff b/moneyjsx/static/fonts/Web437_IBM_Model3x_Alt2.woff new file mode 100644 index 0000000..b088d34 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_Model3x_Alt2.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_Model3x_Alt3.woff b/moneyjsx/static/fonts/Web437_IBM_Model3x_Alt3.woff new file mode 100644 index 0000000..6f647d0 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_Model3x_Alt3.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_Model3x_Alt4.woff b/moneyjsx/static/fonts/Web437_IBM_Model3x_Alt4.woff new file mode 100644 index 0000000..26b82bc Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_Model3x_Alt4.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_PGC-2x.woff b/moneyjsx/static/fonts/Web437_IBM_PGC-2x.woff new file mode 100644 index 0000000..e0b4aaa Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_PGC-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_PGC.woff b/moneyjsx/static/fonts/Web437_IBM_PGC.woff new file mode 100644 index 0000000..23a07a1 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_PGC.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_PS-55_re.woff b/moneyjsx/static/fonts/Web437_IBM_PS-55_re.woff new file mode 100644 index 0000000..09cfd77 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_PS-55_re.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_VGA_8x14-2x.woff b/moneyjsx/static/fonts/Web437_IBM_VGA_8x14-2x.woff new file mode 100644 index 0000000..60529c8 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_VGA_8x14-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_VGA_8x14.woff b/moneyjsx/static/fonts/Web437_IBM_VGA_8x14.woff new file mode 100644 index 0000000..79c2b66 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_VGA_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_VGA_8x16-2x.woff b/moneyjsx/static/fonts/Web437_IBM_VGA_8x16-2x.woff new file mode 100644 index 0000000..894dc88 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_VGA_8x16-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_VGA_8x16.woff b/moneyjsx/static/fonts/Web437_IBM_VGA_8x16.woff new file mode 100644 index 0000000..1f1508d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_VGA_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_VGA_9x14-2x.woff b/moneyjsx/static/fonts/Web437_IBM_VGA_9x14-2x.woff new file mode 100644 index 0000000..1b1184f Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_VGA_9x14-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_VGA_9x14.woff b/moneyjsx/static/fonts/Web437_IBM_VGA_9x14.woff new file mode 100644 index 0000000..3cea8b2 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_VGA_9x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_VGA_9x16-2x.woff b/moneyjsx/static/fonts/Web437_IBM_VGA_9x16-2x.woff new file mode 100644 index 0000000..34cdcf8 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_VGA_9x16-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_VGA_9x16.woff b/moneyjsx/static/fonts/Web437_IBM_VGA_9x16.woff new file mode 100644 index 0000000..8ff3510 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_VGA_9x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_VGA_9x8-2x.woff b/moneyjsx/static/fonts/Web437_IBM_VGA_9x8-2x.woff new file mode 100644 index 0000000..0a5b0c2 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_VGA_9x8-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_VGA_9x8.woff b/moneyjsx/static/fonts/Web437_IBM_VGA_9x8.woff new file mode 100644 index 0000000..a79352d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_VGA_9x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_XGA-AI_12x20.woff b/moneyjsx/static/fonts/Web437_IBM_XGA-AI_12x20.woff new file mode 100644 index 0000000..dab7e96 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_XGA-AI_12x20.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_XGA-AI_12x23.woff b/moneyjsx/static/fonts/Web437_IBM_XGA-AI_12x23.woff new file mode 100644 index 0000000..d9e764d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_XGA-AI_12x23.woff differ diff --git a/moneyjsx/static/fonts/Web437_IBM_XGA-AI_7x15.woff b/moneyjsx/static/fonts/Web437_IBM_XGA-AI_7x15.woff new file mode 100644 index 0000000..6faa01f Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IBM_XGA-AI_7x15.woff differ diff --git a/moneyjsx/static/fonts/Web437_IGS_VGA_8x16.woff b/moneyjsx/static/fonts/Web437_IGS_VGA_8x16.woff new file mode 100644 index 0000000..6e0104b Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IGS_VGA_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_IGS_VGA_9x16.woff b/moneyjsx/static/fonts/Web437_IGS_VGA_9x16.woff new file mode 100644 index 0000000..8521543 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_IGS_VGA_9x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_ITT_Xtra-2y.woff b/moneyjsx/static/fonts/Web437_ITT_Xtra-2y.woff new file mode 100644 index 0000000..af66678 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ITT_Xtra-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_ITT_Xtra.woff b/moneyjsx/static/fonts/Web437_ITT_Xtra.woff new file mode 100644 index 0000000..37e10f6 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ITT_Xtra.woff differ diff --git a/moneyjsx/static/fonts/Web437_Kaypro2K_G-2y.woff b/moneyjsx/static/fonts/Web437_Kaypro2K_G-2y.woff new file mode 100644 index 0000000..9e5b7aa Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Kaypro2K_G-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Kaypro2K_G.woff b/moneyjsx/static/fonts/Web437_Kaypro2K_G.woff new file mode 100644 index 0000000..de7a0e9 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Kaypro2K_G.woff differ diff --git a/moneyjsx/static/fonts/Web437_LE_Model_D_CGA-2y.woff b/moneyjsx/static/fonts/Web437_LE_Model_D_CGA-2y.woff new file mode 100644 index 0000000..a34026e Binary files /dev/null and b/moneyjsx/static/fonts/Web437_LE_Model_D_CGA-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_LE_Model_D_CGA.woff b/moneyjsx/static/fonts/Web437_LE_Model_D_CGA.woff new file mode 100644 index 0000000..6d7e05a Binary files /dev/null and b/moneyjsx/static/fonts/Web437_LE_Model_D_CGA.woff differ diff --git a/moneyjsx/static/fonts/Web437_LE_Model_D_Mono.woff b/moneyjsx/static/fonts/Web437_LE_Model_D_Mono.woff new file mode 100644 index 0000000..a464a1d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_LE_Model_D_Mono.woff differ diff --git a/moneyjsx/static/fonts/Web437_MBytePC230_8x16.woff b/moneyjsx/static/fonts/Web437_MBytePC230_8x16.woff new file mode 100644 index 0000000..14ed558 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_MBytePC230_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_MBytePC230_CGA-2y.woff b/moneyjsx/static/fonts/Web437_MBytePC230_CGA-2y.woff new file mode 100644 index 0000000..ba95952 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_MBytePC230_CGA-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_MBytePC230_CGA.woff b/moneyjsx/static/fonts/Web437_MBytePC230_CGA.woff new file mode 100644 index 0000000..a5cc805 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_MBytePC230_CGA.woff differ diff --git a/moneyjsx/static/fonts/Web437_MBytePC230_EGA.woff b/moneyjsx/static/fonts/Web437_MBytePC230_EGA.woff new file mode 100644 index 0000000..c896ad5 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_MBytePC230_EGA.woff differ diff --git a/moneyjsx/static/fonts/Web437_MBytePC230_Mono.woff b/moneyjsx/static/fonts/Web437_MBytePC230_Mono.woff new file mode 100644 index 0000000..6d9ea1e Binary files /dev/null and b/moneyjsx/static/fonts/Web437_MBytePC230_Mono.woff differ diff --git a/moneyjsx/static/fonts/Web437_Master_512-2y.woff b/moneyjsx/static/fonts/Web437_Master_512-2y.woff new file mode 100644 index 0000000..0622dde Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Master_512-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Master_512-2y_bold.woff b/moneyjsx/static/fonts/Web437_Master_512-2y_bold.woff new file mode 100644 index 0000000..3c75008 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Master_512-2y_bold.woff differ diff --git a/moneyjsx/static/fonts/Web437_Master_512-M7.woff b/moneyjsx/static/fonts/Web437_Master_512-M7.woff new file mode 100644 index 0000000..750bb88 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Master_512-M7.woff differ diff --git a/moneyjsx/static/fonts/Web437_Master_512-M7_bold.woff b/moneyjsx/static/fonts/Web437_Master_512-M7_bold.woff new file mode 100644 index 0000000..74e54fe Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Master_512-M7_bold.woff differ diff --git a/moneyjsx/static/fonts/Web437_Master_512.woff b/moneyjsx/static/fonts/Web437_Master_512.woff new file mode 100644 index 0000000..e37dd6f Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Master_512.woff differ diff --git a/moneyjsx/static/fonts/Web437_Master_512_bold.woff b/moneyjsx/static/fonts/Web437_Master_512_bold.woff new file mode 100644 index 0000000..d3be3bc Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Master_512_bold.woff differ diff --git a/moneyjsx/static/fonts/Web437_Mindset-2x.woff b/moneyjsx/static/fonts/Web437_Mindset-2x.woff new file mode 100644 index 0000000..792b938 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Mindset-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_Mindset-2y.woff b/moneyjsx/static/fonts/Web437_Mindset-2y.woff new file mode 100644 index 0000000..7536e50 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Mindset-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Mindset.woff b/moneyjsx/static/fonts/Web437_Mindset.woff new file mode 100644 index 0000000..8401df9 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Mindset.woff differ diff --git a/moneyjsx/static/fonts/Web437_NEC_APC3_8x16-2x.woff b/moneyjsx/static/fonts/Web437_NEC_APC3_8x16-2x.woff new file mode 100644 index 0000000..a6977d8 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_NEC_APC3_8x16-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_NEC_APC3_8x16.woff b/moneyjsx/static/fonts/Web437_NEC_APC3_8x16.woff new file mode 100644 index 0000000..cb06dd7 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_NEC_APC3_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_NEC_APC3_8x8-2y.woff b/moneyjsx/static/fonts/Web437_NEC_APC3_8x8-2y.woff new file mode 100644 index 0000000..8efe53a Binary files /dev/null and b/moneyjsx/static/fonts/Web437_NEC_APC3_8x8-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_NEC_APC3_8x8.woff b/moneyjsx/static/fonts/Web437_NEC_APC3_8x8.woff new file mode 100644 index 0000000..06728ce Binary files /dev/null and b/moneyjsx/static/fonts/Web437_NEC_APC3_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_NEC_MultiSpeed-2x.woff b/moneyjsx/static/fonts/Web437_NEC_MultiSpeed-2x.woff new file mode 100644 index 0000000..69d4399 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_NEC_MultiSpeed-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_NEC_MultiSpeed-2x_bold.woff b/moneyjsx/static/fonts/Web437_NEC_MultiSpeed-2x_bold.woff new file mode 100644 index 0000000..16688dd Binary files /dev/null and b/moneyjsx/static/fonts/Web437_NEC_MultiSpeed-2x_bold.woff differ diff --git a/moneyjsx/static/fonts/Web437_NEC_MultiSpeed.woff b/moneyjsx/static/fonts/Web437_NEC_MultiSpeed.woff new file mode 100644 index 0000000..8028efd Binary files /dev/null and b/moneyjsx/static/fonts/Web437_NEC_MultiSpeed.woff differ diff --git a/moneyjsx/static/fonts/Web437_NEC_MultiSpeed_bold.woff b/moneyjsx/static/fonts/Web437_NEC_MultiSpeed_bold.woff new file mode 100644 index 0000000..38e0287 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_NEC_MultiSpeed_bold.woff differ diff --git a/moneyjsx/static/fonts/Web437_Nix8810_M15.woff b/moneyjsx/static/fonts/Web437_Nix8810_M15.woff new file mode 100644 index 0000000..b452fbf Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Nix8810_M15.woff differ diff --git a/moneyjsx/static/fonts/Web437_Nix8810_M16.woff b/moneyjsx/static/fonts/Web437_Nix8810_M16.woff new file mode 100644 index 0000000..45f2b56 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Nix8810_M16.woff differ diff --git a/moneyjsx/static/fonts/Web437_Nix8810_M35-2y.woff b/moneyjsx/static/fonts/Web437_Nix8810_M35-2y.woff new file mode 100644 index 0000000..2c564f3 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Nix8810_M35-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Nix8810_M35.woff b/moneyjsx/static/fonts/Web437_Nix8810_M35.woff new file mode 100644 index 0000000..433bac3 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Nix8810_M35.woff differ diff --git a/moneyjsx/static/fonts/Web437_OlivettiThin_8x14.woff b/moneyjsx/static/fonts/Web437_OlivettiThin_8x14.woff new file mode 100644 index 0000000..96a3803 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_OlivettiThin_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_OlivettiThin_8x16.woff b/moneyjsx/static/fonts/Web437_OlivettiThin_8x16.woff new file mode 100644 index 0000000..9a6c9d7 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_OlivettiThin_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_OlivettiThin_9x14.woff b/moneyjsx/static/fonts/Web437_OlivettiThin_9x14.woff new file mode 100644 index 0000000..b43b457 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_OlivettiThin_9x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_OlivettiThin_9x16.woff b/moneyjsx/static/fonts/Web437_OlivettiThin_9x16.woff new file mode 100644 index 0000000..8686839 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_OlivettiThin_9x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_Olivetti_M15-2y.woff b/moneyjsx/static/fonts/Web437_Olivetti_M15-2y.woff new file mode 100644 index 0000000..41b83b2 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Olivetti_M15-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Olivetti_M15.woff b/moneyjsx/static/fonts/Web437_Olivetti_M15.woff new file mode 100644 index 0000000..212a1a8 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Olivetti_M15.woff differ diff --git a/moneyjsx/static/fonts/Web437_Paradise132_7x16.woff b/moneyjsx/static/fonts/Web437_Paradise132_7x16.woff new file mode 100644 index 0000000..2470eed Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Paradise132_7x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_Paradise132_7x9.woff b/moneyjsx/static/fonts/Web437_Paradise132_7x9.woff new file mode 100644 index 0000000..3c6c103 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Paradise132_7x9.woff differ diff --git a/moneyjsx/static/fonts/Web437_Philips_YES_G-2x.woff b/moneyjsx/static/fonts/Web437_Philips_YES_G-2x.woff new file mode 100644 index 0000000..ca1e9df Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Philips_YES_G-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_Philips_YES_G-2y.woff b/moneyjsx/static/fonts/Web437_Philips_YES_G-2y.woff new file mode 100644 index 0000000..d6c2808 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Philips_YES_G-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Philips_YES_G.woff b/moneyjsx/static/fonts/Web437_Philips_YES_G.woff new file mode 100644 index 0000000..09a7767 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Philips_YES_G.woff differ diff --git a/moneyjsx/static/fonts/Web437_Philips_YES_T-2y.woff b/moneyjsx/static/fonts/Web437_Philips_YES_T-2y.woff new file mode 100644 index 0000000..ecba3fd Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Philips_YES_T-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Philips_YES_T.woff b/moneyjsx/static/fonts/Web437_Philips_YES_T.woff new file mode 100644 index 0000000..fdc0c83 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Philips_YES_T.woff differ diff --git a/moneyjsx/static/fonts/Web437_PhoenixEGA_8x14.woff b/moneyjsx/static/fonts/Web437_PhoenixEGA_8x14.woff new file mode 100644 index 0000000..56bf74c Binary files /dev/null and b/moneyjsx/static/fonts/Web437_PhoenixEGA_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_PhoenixEGA_8x16.woff b/moneyjsx/static/fonts/Web437_PhoenixEGA_8x16.woff new file mode 100644 index 0000000..6ff3f0c Binary files /dev/null and b/moneyjsx/static/fonts/Web437_PhoenixEGA_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_PhoenixEGA_8x8-2y.woff b/moneyjsx/static/fonts/Web437_PhoenixEGA_8x8-2y.woff new file mode 100644 index 0000000..8bb59df Binary files /dev/null and b/moneyjsx/static/fonts/Web437_PhoenixEGA_8x8-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_PhoenixEGA_8x8.woff b/moneyjsx/static/fonts/Web437_PhoenixEGA_8x8.woff new file mode 100644 index 0000000..9609a47 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_PhoenixEGA_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_PhoenixEGA_9x14.woff b/moneyjsx/static/fonts/Web437_PhoenixEGA_9x14.woff new file mode 100644 index 0000000..1222a9d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_PhoenixEGA_9x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_PhoenixVGA_8x14.woff b/moneyjsx/static/fonts/Web437_PhoenixVGA_8x14.woff new file mode 100644 index 0000000..5ac2522 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_PhoenixVGA_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_PhoenixVGA_8x16.woff b/moneyjsx/static/fonts/Web437_PhoenixVGA_8x16.woff new file mode 100644 index 0000000..9ac9959 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_PhoenixVGA_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_PhoenixVGA_8x8.woff b/moneyjsx/static/fonts/Web437_PhoenixVGA_8x8.woff new file mode 100644 index 0000000..80bef7d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_PhoenixVGA_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_PhoenixVGA_9x14.woff b/moneyjsx/static/fonts/Web437_PhoenixVGA_9x14.woff new file mode 100644 index 0000000..0aaf954 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_PhoenixVGA_9x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_PhoenixVGA_9x16.woff b/moneyjsx/static/fonts/Web437_PhoenixVGA_9x16.woff new file mode 100644 index 0000000..644d6fb Binary files /dev/null and b/moneyjsx/static/fonts/Web437_PhoenixVGA_9x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_PhoenixVGA_9x8.woff b/moneyjsx/static/fonts/Web437_PhoenixVGA_9x8.woff new file mode 100644 index 0000000..0d85e6d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_PhoenixVGA_9x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_Phoenix_BIOS-2y.woff b/moneyjsx/static/fonts/Web437_Phoenix_BIOS-2y.woff new file mode 100644 index 0000000..e849ae8 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Phoenix_BIOS-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Phoenix_BIOS.woff b/moneyjsx/static/fonts/Web437_Phoenix_BIOS.woff new file mode 100644 index 0000000..75a0b5e Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Phoenix_BIOS.woff differ diff --git a/moneyjsx/static/fonts/Web437_Portfolio_6x8.woff b/moneyjsx/static/fonts/Web437_Portfolio_6x8.woff new file mode 100644 index 0000000..6f39add Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Portfolio_6x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_RM_Nimbus-2y.woff b/moneyjsx/static/fonts/Web437_RM_Nimbus-2y.woff new file mode 100644 index 0000000..e6f5173 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_RM_Nimbus-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_RM_Nimbus.woff b/moneyjsx/static/fonts/Web437_RM_Nimbus.woff new file mode 100644 index 0000000..12aac90 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_RM_Nimbus.woff differ diff --git a/moneyjsx/static/fonts/Web437_Rainbow100_re_132.woff b/moneyjsx/static/fonts/Web437_Rainbow100_re_132.woff new file mode 100644 index 0000000..43de2a2 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Rainbow100_re_132.woff differ diff --git a/moneyjsx/static/fonts/Web437_Rainbow100_re_40.woff b/moneyjsx/static/fonts/Web437_Rainbow100_re_40.woff new file mode 100644 index 0000000..e7203cf Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Rainbow100_re_40.woff differ diff --git a/moneyjsx/static/fonts/Web437_Rainbow100_re_66.woff b/moneyjsx/static/fonts/Web437_Rainbow100_re_66.woff new file mode 100644 index 0000000..b1d0884 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Rainbow100_re_66.woff differ diff --git a/moneyjsx/static/fonts/Web437_Rainbow100_re_80.woff b/moneyjsx/static/fonts/Web437_Rainbow100_re_80.woff new file mode 100644 index 0000000..19b6dbb Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Rainbow100_re_80.woff differ diff --git a/moneyjsx/static/fonts/Web437_Robotron_A7100.woff b/moneyjsx/static/fonts/Web437_Robotron_A7100.woff new file mode 100644 index 0000000..03e311d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Robotron_A7100.woff differ diff --git a/moneyjsx/static/fonts/Web437_STB_AutoEGA_8x14.woff b/moneyjsx/static/fonts/Web437_STB_AutoEGA_8x14.woff new file mode 100644 index 0000000..7f88003 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_STB_AutoEGA_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_STB_AutoEGA_9x14.woff b/moneyjsx/static/fonts/Web437_STB_AutoEGA_9x14.woff new file mode 100644 index 0000000..5b51b23 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_STB_AutoEGA_9x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_SanyoMBC16-2y.woff b/moneyjsx/static/fonts/Web437_SanyoMBC16-2y.woff new file mode 100644 index 0000000..9da6d1e Binary files /dev/null and b/moneyjsx/static/fonts/Web437_SanyoMBC16-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_SanyoMBC16.woff b/moneyjsx/static/fonts/Web437_SanyoMBC16.woff new file mode 100644 index 0000000..966c868 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_SanyoMBC16.woff differ diff --git a/moneyjsx/static/fonts/Web437_SanyoMBC55x-2y.woff b/moneyjsx/static/fonts/Web437_SanyoMBC55x-2y.woff new file mode 100644 index 0000000..a3fb0cb Binary files /dev/null and b/moneyjsx/static/fonts/Web437_SanyoMBC55x-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_SanyoMBC55x.woff b/moneyjsx/static/fonts/Web437_SanyoMBC55x.woff new file mode 100644 index 0000000..38203b6 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_SanyoMBC55x.woff differ diff --git a/moneyjsx/static/fonts/Web437_SanyoMBC775-2y.woff b/moneyjsx/static/fonts/Web437_SanyoMBC775-2y.woff new file mode 100644 index 0000000..39ed8fa Binary files /dev/null and b/moneyjsx/static/fonts/Web437_SanyoMBC775-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_SanyoMBC775.woff b/moneyjsx/static/fonts/Web437_SanyoMBC775.woff new file mode 100644 index 0000000..4daa0a8 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_SanyoMBC775.woff differ diff --git a/moneyjsx/static/fonts/Web437_SeequaCm-2y.woff b/moneyjsx/static/fonts/Web437_SeequaCm-2y.woff new file mode 100644 index 0000000..d099ecd Binary files /dev/null and b/moneyjsx/static/fonts/Web437_SeequaCm-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_SeequaCm.woff b/moneyjsx/static/fonts/Web437_SeequaCm.woff new file mode 100644 index 0000000..e598bc3 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_SeequaCm.woff differ diff --git a/moneyjsx/static/fonts/Web437_Sharp_PC3K-2x.woff b/moneyjsx/static/fonts/Web437_Sharp_PC3K-2x.woff new file mode 100644 index 0000000..57e9047 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Sharp_PC3K-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_Sharp_PC3K.woff b/moneyjsx/static/fonts/Web437_Sharp_PC3K.woff new file mode 100644 index 0000000..8ba5b50 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Sharp_PC3K.woff differ diff --git a/moneyjsx/static/fonts/Web437_Sharp_PC3K_Alt-2x.woff b/moneyjsx/static/fonts/Web437_Sharp_PC3K_Alt-2x.woff new file mode 100644 index 0000000..932d65b Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Sharp_PC3K_Alt-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_Sharp_PC3K_Alt.woff b/moneyjsx/static/fonts/Web437_Sharp_PC3K_Alt.woff new file mode 100644 index 0000000..32759f1 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Sharp_PC3K_Alt.woff differ diff --git a/moneyjsx/static/fonts/Web437_Siemens_PC-D.woff b/moneyjsx/static/fonts/Web437_Siemens_PC-D.woff new file mode 100644 index 0000000..8865075 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Siemens_PC-D.woff differ diff --git a/moneyjsx/static/fonts/Web437_Sigma_RM_8x14.woff b/moneyjsx/static/fonts/Web437_Sigma_RM_8x14.woff new file mode 100644 index 0000000..626a260 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Sigma_RM_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_Sigma_RM_8x16.woff b/moneyjsx/static/fonts/Web437_Sigma_RM_8x16.woff new file mode 100644 index 0000000..de40fdf Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Sigma_RM_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_Sigma_RM_8x8.woff b/moneyjsx/static/fonts/Web437_Sigma_RM_8x8.woff new file mode 100644 index 0000000..d87ce1a Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Sigma_RM_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_Sigma_RM_9x14.woff b/moneyjsx/static/fonts/Web437_Sigma_RM_9x14.woff new file mode 100644 index 0000000..cf7e8c5 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Sigma_RM_9x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_Sigma_RM_9x16.woff b/moneyjsx/static/fonts/Web437_Sigma_RM_9x16.woff new file mode 100644 index 0000000..83b19c7 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Sigma_RM_9x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_Sigma_RM_9x8.woff b/moneyjsx/static/fonts/Web437_Sigma_RM_9x8.woff new file mode 100644 index 0000000..10f4346 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Sigma_RM_9x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_SperryPC_8x16.woff b/moneyjsx/static/fonts/Web437_SperryPC_8x16.woff new file mode 100644 index 0000000..4b92b23 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_SperryPC_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_SperryPC_CGA-2y.woff b/moneyjsx/static/fonts/Web437_SperryPC_CGA-2y.woff new file mode 100644 index 0000000..22fd7fb Binary files /dev/null and b/moneyjsx/static/fonts/Web437_SperryPC_CGA-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_SperryPC_CGA.woff b/moneyjsx/static/fonts/Web437_SperryPC_CGA.woff new file mode 100644 index 0000000..f3c629d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_SperryPC_CGA.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy1K-II_200L-2x.woff b/moneyjsx/static/fonts/Web437_Tandy1K-II_200L-2x.woff new file mode 100644 index 0000000..aa5daa6 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy1K-II_200L-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy1K-II_200L-2y.woff b/moneyjsx/static/fonts/Web437_Tandy1K-II_200L-2y.woff new file mode 100644 index 0000000..8b973f6 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy1K-II_200L-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy1K-II_200L.woff b/moneyjsx/static/fonts/Web437_Tandy1K-II_200L.woff new file mode 100644 index 0000000..2bc34fa Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy1K-II_200L.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy1K-II_225L-2y.woff b/moneyjsx/static/fonts/Web437_Tandy1K-II_225L-2y.woff new file mode 100644 index 0000000..261d4de Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy1K-II_225L-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy1K-II_225L.woff b/moneyjsx/static/fonts/Web437_Tandy1K-II_225L.woff new file mode 100644 index 0000000..b7c45f8 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy1K-II_225L.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy1K-II_Mono.woff b/moneyjsx/static/fonts/Web437_Tandy1K-II_Mono.woff new file mode 100644 index 0000000..4c11e44 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy1K-II_Mono.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy1K-I_200L-2x.woff b/moneyjsx/static/fonts/Web437_Tandy1K-I_200L-2x.woff new file mode 100644 index 0000000..e52ddd0 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy1K-I_200L-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy1K-I_200L-2y.woff b/moneyjsx/static/fonts/Web437_Tandy1K-I_200L-2y.woff new file mode 100644 index 0000000..eec2274 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy1K-I_200L-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy1K-I_200L.woff b/moneyjsx/static/fonts/Web437_Tandy1K-I_200L.woff new file mode 100644 index 0000000..cdc9196 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy1K-I_200L.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy1K-I_225L-2y.woff b/moneyjsx/static/fonts/Web437_Tandy1K-I_225L-2y.woff new file mode 100644 index 0000000..6c8e2c1 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy1K-I_225L-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy1K-I_225L.woff b/moneyjsx/static/fonts/Web437_Tandy1K-I_225L.woff new file mode 100644 index 0000000..c7d6dbb Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy1K-I_225L.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy2K-2x.woff b/moneyjsx/static/fonts/Web437_Tandy2K-2x.woff new file mode 100644 index 0000000..8b2f99c Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy2K-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy2K.woff b/moneyjsx/static/fonts/Web437_Tandy2K.woff new file mode 100644 index 0000000..04634bf Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy2K.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy2K_G-2x.woff b/moneyjsx/static/fonts/Web437_Tandy2K_G-2x.woff new file mode 100644 index 0000000..bf62bb3 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy2K_G-2x.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy2K_G-TV.woff b/moneyjsx/static/fonts/Web437_Tandy2K_G-TV.woff new file mode 100644 index 0000000..213bc99 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy2K_G-TV.woff differ diff --git a/moneyjsx/static/fonts/Web437_Tandy2K_G.woff b/moneyjsx/static/fonts/Web437_Tandy2K_G.woff new file mode 100644 index 0000000..ec4dd96 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Tandy2K_G.woff differ diff --git a/moneyjsx/static/fonts/Web437_TelePC-2y.woff b/moneyjsx/static/fonts/Web437_TelePC-2y.woff new file mode 100644 index 0000000..3f1da5d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_TelePC-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_TelePC.woff b/moneyjsx/static/fonts/Web437_TelePC.woff new file mode 100644 index 0000000..bb25c9c Binary files /dev/null and b/moneyjsx/static/fonts/Web437_TelePC.woff differ diff --git a/moneyjsx/static/fonts/Web437_Ti_Pro.woff b/moneyjsx/static/fonts/Web437_Ti_Pro.woff new file mode 100644 index 0000000..1d8fb0e Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Ti_Pro.woff differ diff --git a/moneyjsx/static/fonts/Web437_ToshibaSat_8x14.woff b/moneyjsx/static/fonts/Web437_ToshibaSat_8x14.woff new file mode 100644 index 0000000..2e05675 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ToshibaSat_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_ToshibaSat_8x16.woff b/moneyjsx/static/fonts/Web437_ToshibaSat_8x16.woff new file mode 100644 index 0000000..99735df Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ToshibaSat_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_ToshibaSat_8x8.woff b/moneyjsx/static/fonts/Web437_ToshibaSat_8x8.woff new file mode 100644 index 0000000..92e9dc2 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ToshibaSat_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_ToshibaSat_9x14.woff b/moneyjsx/static/fonts/Web437_ToshibaSat_9x14.woff new file mode 100644 index 0000000..6c6dab6 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ToshibaSat_9x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_ToshibaSat_9x16.woff b/moneyjsx/static/fonts/Web437_ToshibaSat_9x16.woff new file mode 100644 index 0000000..482da55 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ToshibaSat_9x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_ToshibaSat_9x8.woff b/moneyjsx/static/fonts/Web437_ToshibaSat_9x8.woff new file mode 100644 index 0000000..1c19f2d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ToshibaSat_9x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_ToshibaT300_8x16.woff b/moneyjsx/static/fonts/Web437_ToshibaT300_8x16.woff new file mode 100644 index 0000000..2a93b1f Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ToshibaT300_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_ToshibaT300_8x8-2y.woff b/moneyjsx/static/fonts/Web437_ToshibaT300_8x8-2y.woff new file mode 100644 index 0000000..c809330 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ToshibaT300_8x8-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_ToshibaT300_8x8.woff b/moneyjsx/static/fonts/Web437_ToshibaT300_8x8.woff new file mode 100644 index 0000000..3b8d7f1 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ToshibaT300_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_ToshibaTxL1_8x16.woff b/moneyjsx/static/fonts/Web437_ToshibaTxL1_8x16.woff new file mode 100644 index 0000000..f900627 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ToshibaTxL1_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_ToshibaTxL1_8x8.woff b/moneyjsx/static/fonts/Web437_ToshibaTxL1_8x8.woff new file mode 100644 index 0000000..cbd7cec Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ToshibaTxL1_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_ToshibaTxL2_8x16.woff b/moneyjsx/static/fonts/Web437_ToshibaTxL2_8x16.woff new file mode 100644 index 0000000..f7e5c74 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ToshibaTxL2_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_ToshibaTxL2_8x8.woff b/moneyjsx/static/fonts/Web437_ToshibaTxL2_8x8.woff new file mode 100644 index 0000000..a472b0b Binary files /dev/null and b/moneyjsx/static/fonts/Web437_ToshibaTxL2_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_TridentEarly_8x11.woff b/moneyjsx/static/fonts/Web437_TridentEarly_8x11.woff new file mode 100644 index 0000000..5474176 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_TridentEarly_8x11.woff differ diff --git a/moneyjsx/static/fonts/Web437_TridentEarly_8x14.woff b/moneyjsx/static/fonts/Web437_TridentEarly_8x14.woff new file mode 100644 index 0000000..97daa2e Binary files /dev/null and b/moneyjsx/static/fonts/Web437_TridentEarly_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_TridentEarly_8x16.woff b/moneyjsx/static/fonts/Web437_TridentEarly_8x16.woff new file mode 100644 index 0000000..5e71f0e Binary files /dev/null and b/moneyjsx/static/fonts/Web437_TridentEarly_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_TridentEarly_8x8.woff b/moneyjsx/static/fonts/Web437_TridentEarly_8x8.woff new file mode 100644 index 0000000..e116dd3 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_TridentEarly_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_TridentEarly_9x14.woff b/moneyjsx/static/fonts/Web437_TridentEarly_9x14.woff new file mode 100644 index 0000000..293de0a Binary files /dev/null and b/moneyjsx/static/fonts/Web437_TridentEarly_9x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_TridentEarly_9x16.woff b/moneyjsx/static/fonts/Web437_TridentEarly_9x16.woff new file mode 100644 index 0000000..37d82a0 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_TridentEarly_9x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_TridentEarly_9x8.woff b/moneyjsx/static/fonts/Web437_TridentEarly_9x8.woff new file mode 100644 index 0000000..3ff88db Binary files /dev/null and b/moneyjsx/static/fonts/Web437_TridentEarly_9x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_Trident_8x11.woff b/moneyjsx/static/fonts/Web437_Trident_8x11.woff new file mode 100644 index 0000000..d5d52b1 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Trident_8x11.woff differ diff --git a/moneyjsx/static/fonts/Web437_Trident_8x14.woff b/moneyjsx/static/fonts/Web437_Trident_8x14.woff new file mode 100644 index 0000000..98576fa Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Trident_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_Trident_8x16.woff b/moneyjsx/static/fonts/Web437_Trident_8x16.woff new file mode 100644 index 0000000..708258c Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Trident_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_Trident_8x8.woff b/moneyjsx/static/fonts/Web437_Trident_8x8.woff new file mode 100644 index 0000000..8a7a2bd Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Trident_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_Trident_9x14.woff b/moneyjsx/static/fonts/Web437_Trident_9x14.woff new file mode 100644 index 0000000..3446e73 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Trident_9x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_Trident_9x16.woff b/moneyjsx/static/fonts/Web437_Trident_9x16.woff new file mode 100644 index 0000000..da3a894 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Trident_9x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_Trident_9x8.woff b/moneyjsx/static/fonts/Web437_Trident_9x8.woff new file mode 100644 index 0000000..adb4b74 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Trident_9x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_TsengEVA_132_6x14.woff b/moneyjsx/static/fonts/Web437_TsengEVA_132_6x14.woff new file mode 100644 index 0000000..c90423a Binary files /dev/null and b/moneyjsx/static/fonts/Web437_TsengEVA_132_6x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_TsengEVA_132_6x8.woff b/moneyjsx/static/fonts/Web437_TsengEVA_132_6x8.woff new file mode 100644 index 0000000..6042cf1 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_TsengEVA_132_6x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_VTech_BIOS-2y.woff b/moneyjsx/static/fonts/Web437_VTech_BIOS-2y.woff new file mode 100644 index 0000000..3207a4d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_VTech_BIOS-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_VTech_BIOS.woff b/moneyjsx/static/fonts/Web437_VTech_BIOS.woff new file mode 100644 index 0000000..7585b4e Binary files /dev/null and b/moneyjsx/static/fonts/Web437_VTech_BIOS.woff differ diff --git a/moneyjsx/static/fonts/Web437_Verite_8x14.woff b/moneyjsx/static/fonts/Web437_Verite_8x14.woff new file mode 100644 index 0000000..a02281a Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Verite_8x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_Verite_8x16.woff b/moneyjsx/static/fonts/Web437_Verite_8x16.woff new file mode 100644 index 0000000..00424a9 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Verite_8x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_Verite_8x8-2y.woff b/moneyjsx/static/fonts/Web437_Verite_8x8-2y.woff new file mode 100644 index 0000000..316c481 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Verite_8x8-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Verite_8x8.woff b/moneyjsx/static/fonts/Web437_Verite_8x8.woff new file mode 100644 index 0000000..e6a3f67 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Verite_8x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_Verite_9x14.woff b/moneyjsx/static/fonts/Web437_Verite_9x14.woff new file mode 100644 index 0000000..3c4c0bb Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Verite_9x14.woff differ diff --git a/moneyjsx/static/fonts/Web437_Verite_9x16.woff b/moneyjsx/static/fonts/Web437_Verite_9x16.woff new file mode 100644 index 0000000..c9da6f7 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Verite_9x16.woff differ diff --git a/moneyjsx/static/fonts/Web437_Verite_9x8.woff b/moneyjsx/static/fonts/Web437_Verite_9x8.woff new file mode 100644 index 0000000..ae2181c Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Verite_9x8.woff differ diff --git a/moneyjsx/static/fonts/Web437_Wang_Pro_Color-2y.woff b/moneyjsx/static/fonts/Web437_Wang_Pro_Color-2y.woff new file mode 100644 index 0000000..b3306bd Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Wang_Pro_Color-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Wang_Pro_Color.woff b/moneyjsx/static/fonts/Web437_Wang_Pro_Color.woff new file mode 100644 index 0000000..500f461 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Wang_Pro_Color.woff differ diff --git a/moneyjsx/static/fonts/Web437_Wang_Pro_Mono.woff b/moneyjsx/static/fonts/Web437_Wang_Pro_Mono.woff new file mode 100644 index 0000000..3e9162d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Wang_Pro_Mono.woff differ diff --git a/moneyjsx/static/fonts/Web437_Wyse700a-2y.woff b/moneyjsx/static/fonts/Web437_Wyse700a-2y.woff new file mode 100644 index 0000000..8bf060d Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Wyse700a-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Wyse700a.woff b/moneyjsx/static/fonts/Web437_Wyse700a.woff new file mode 100644 index 0000000..e1a8e6c Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Wyse700a.woff differ diff --git a/moneyjsx/static/fonts/Web437_Wyse700b-2y.woff b/moneyjsx/static/fonts/Web437_Wyse700b-2y.woff new file mode 100644 index 0000000..9003597 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Wyse700b-2y.woff differ diff --git a/moneyjsx/static/fonts/Web437_Wyse700b.woff b/moneyjsx/static/fonts/Web437_Wyse700b.woff new file mode 100644 index 0000000..d3ae560 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Wyse700b.woff differ diff --git a/moneyjsx/static/fonts/Web437_Zenith_Z-100.woff b/moneyjsx/static/fonts/Web437_Zenith_Z-100.woff new file mode 100644 index 0000000..4fd99a2 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Zenith_Z-100.woff differ diff --git a/moneyjsx/static/fonts/Web437_Zenith_Z-100_Alt.woff b/moneyjsx/static/fonts/Web437_Zenith_Z-100_Alt.woff new file mode 100644 index 0000000..21f8c33 Binary files /dev/null and b/moneyjsx/static/fonts/Web437_Zenith_Z-100_Alt.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_AST_PremiumExec.woff b/moneyjsx/static/fonts/WebPlus_AST_PremiumExec.woff new file mode 100644 index 0000000..ea95d23 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_AST_PremiumExec.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_Amstrad_PC-2y.woff b/moneyjsx/static/fonts/WebPlus_Amstrad_PC-2y.woff new file mode 100644 index 0000000..f0af92f Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_Amstrad_PC-2y.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_Amstrad_PC.woff b/moneyjsx/static/fonts/WebPlus_Amstrad_PC.woff new file mode 100644 index 0000000..a89bd9c Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_Amstrad_PC.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_Cordata_PPC-21.woff b/moneyjsx/static/fonts/WebPlus_Cordata_PPC-21.woff new file mode 100644 index 0000000..486cbb9 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_Cordata_PPC-21.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_Cordata_PPC-400.woff b/moneyjsx/static/fonts/WebPlus_Cordata_PPC-400.woff new file mode 100644 index 0000000..b36d384 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_Cordata_PPC-400.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_HP_100LX_10x11.woff b/moneyjsx/static/fonts/WebPlus_HP_100LX_10x11.woff new file mode 100644 index 0000000..be23ce0 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_HP_100LX_10x11.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_HP_100LX_16x12.woff b/moneyjsx/static/fonts/WebPlus_HP_100LX_16x12.woff new file mode 100644 index 0000000..58c37c7 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_HP_100LX_16x12.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_HP_100LX_6x8-2x.woff b/moneyjsx/static/fonts/WebPlus_HP_100LX_6x8-2x.woff new file mode 100644 index 0000000..0e12806 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_HP_100LX_6x8-2x.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_HP_100LX_6x8.woff b/moneyjsx/static/fonts/WebPlus_HP_100LX_6x8.woff new file mode 100644 index 0000000..d259282 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_HP_100LX_6x8.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_HP_100LX_8x8-2x.woff b/moneyjsx/static/fonts/WebPlus_HP_100LX_8x8-2x.woff new file mode 100644 index 0000000..8258270 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_HP_100LX_8x8-2x.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_HP_100LX_8x8.woff b/moneyjsx/static/fonts/WebPlus_HP_100LX_8x8.woff new file mode 100644 index 0000000..f2dca01 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_HP_100LX_8x8.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_HP_150_re.woff b/moneyjsx/static/fonts/WebPlus_HP_150_re.woff new file mode 100644 index 0000000..dc2ec33 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_HP_150_re.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_BIOS-2x.woff b/moneyjsx/static/fonts/WebPlus_IBM_BIOS-2x.woff new file mode 100644 index 0000000..ffce1c5 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_BIOS-2x.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_BIOS-2y.woff b/moneyjsx/static/fonts/WebPlus_IBM_BIOS-2y.woff new file mode 100644 index 0000000..c46cbd1 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_BIOS-2y.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_BIOS.woff b/moneyjsx/static/fonts/WebPlus_IBM_BIOS.woff new file mode 100644 index 0000000..a519221 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_BIOS.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_CGA-2y.woff b/moneyjsx/static/fonts/WebPlus_IBM_CGA-2y.woff new file mode 100644 index 0000000..6998020 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_CGA-2y.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_CGA.woff b/moneyjsx/static/fonts/WebPlus_IBM_CGA.woff new file mode 100644 index 0000000..a76d503 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_CGA.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_CGAthin-2y.woff b/moneyjsx/static/fonts/WebPlus_IBM_CGAthin-2y.woff new file mode 100644 index 0000000..92df543 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_CGAthin-2y.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_CGAthin.woff b/moneyjsx/static/fonts/WebPlus_IBM_CGAthin.woff new file mode 100644 index 0000000..cf5ebf6 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_CGAthin.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_EGA_8x14-2x.woff b/moneyjsx/static/fonts/WebPlus_IBM_EGA_8x14-2x.woff new file mode 100644 index 0000000..b7808fd Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_EGA_8x14-2x.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_EGA_8x14.woff b/moneyjsx/static/fonts/WebPlus_IBM_EGA_8x14.woff new file mode 100644 index 0000000..9bc7e08 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_EGA_8x14.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_EGA_8x8-2x.woff b/moneyjsx/static/fonts/WebPlus_IBM_EGA_8x8-2x.woff new file mode 100644 index 0000000..3013cec Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_EGA_8x8-2x.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_EGA_8x8.woff b/moneyjsx/static/fonts/WebPlus_IBM_EGA_8x8.woff new file mode 100644 index 0000000..bb39e9f Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_EGA_8x8.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_EGA_9x14-2x.woff b/moneyjsx/static/fonts/WebPlus_IBM_EGA_9x14-2x.woff new file mode 100644 index 0000000..6e25b86 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_EGA_9x14-2x.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_EGA_9x14.woff b/moneyjsx/static/fonts/WebPlus_IBM_EGA_9x14.woff new file mode 100644 index 0000000..9d81c45 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_EGA_9x14.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_EGA_9x8-2x.woff b/moneyjsx/static/fonts/WebPlus_IBM_EGA_9x8-2x.woff new file mode 100644 index 0000000..46885b2 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_EGA_9x8-2x.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_EGA_9x8.woff b/moneyjsx/static/fonts/WebPlus_IBM_EGA_9x8.woff new file mode 100644 index 0000000..0077442 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_EGA_9x8.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_MDA.woff b/moneyjsx/static/fonts/WebPlus_IBM_MDA.woff new file mode 100644 index 0000000..45639b5 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_MDA.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_VGA_8x14-2x.woff b/moneyjsx/static/fonts/WebPlus_IBM_VGA_8x14-2x.woff new file mode 100644 index 0000000..47cffd4 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_VGA_8x14-2x.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_VGA_8x14.woff b/moneyjsx/static/fonts/WebPlus_IBM_VGA_8x14.woff new file mode 100644 index 0000000..d1ee1c9 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_VGA_8x14.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_VGA_8x16-2x.woff b/moneyjsx/static/fonts/WebPlus_IBM_VGA_8x16-2x.woff new file mode 100644 index 0000000..a589f63 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_VGA_8x16-2x.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_VGA_8x16.woff b/moneyjsx/static/fonts/WebPlus_IBM_VGA_8x16.woff new file mode 100644 index 0000000..466064d Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_VGA_8x16.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x14-2x.woff b/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x14-2x.woff new file mode 100644 index 0000000..8746fdc Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x14-2x.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x14.woff b/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x14.woff new file mode 100644 index 0000000..44cce3e Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x14.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x16-2x.woff b/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x16-2x.woff new file mode 100644 index 0000000..f0ffd03 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x16-2x.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x16.woff b/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x16.woff new file mode 100644 index 0000000..969fb65 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x16.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x8-2x.woff b/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x8-2x.woff new file mode 100644 index 0000000..45326ef Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x8-2x.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x8.woff b/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x8.woff new file mode 100644 index 0000000..44cd4df Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_VGA_9x8.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_IBM_XGA-AI_12x20.woff b/moneyjsx/static/fonts/WebPlus_IBM_XGA-AI_12x20.woff new file mode 100644 index 0000000..ff642ee Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_IBM_XGA-AI_12x20.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_Rainbow100_re_132.woff b/moneyjsx/static/fonts/WebPlus_Rainbow100_re_132.woff new file mode 100644 index 0000000..c553760 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_Rainbow100_re_132.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_Rainbow100_re_40.woff b/moneyjsx/static/fonts/WebPlus_Rainbow100_re_40.woff new file mode 100644 index 0000000..c316398 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_Rainbow100_re_40.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_Rainbow100_re_66.woff b/moneyjsx/static/fonts/WebPlus_Rainbow100_re_66.woff new file mode 100644 index 0000000..123af39 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_Rainbow100_re_66.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_Rainbow100_re_80.woff b/moneyjsx/static/fonts/WebPlus_Rainbow100_re_80.woff new file mode 100644 index 0000000..4feb241 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_Rainbow100_re_80.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_Tandy1K-II_200L-2x.woff b/moneyjsx/static/fonts/WebPlus_Tandy1K-II_200L-2x.woff new file mode 100644 index 0000000..b95844e Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_Tandy1K-II_200L-2x.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_Tandy1K-II_200L-2y.woff b/moneyjsx/static/fonts/WebPlus_Tandy1K-II_200L-2y.woff new file mode 100644 index 0000000..766fdf5 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_Tandy1K-II_200L-2y.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_Tandy1K-II_200L.woff b/moneyjsx/static/fonts/WebPlus_Tandy1K-II_200L.woff new file mode 100644 index 0000000..a40ea22 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_Tandy1K-II_200L.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_Tandy1K-II_225L-2y.woff b/moneyjsx/static/fonts/WebPlus_Tandy1K-II_225L-2y.woff new file mode 100644 index 0000000..2e376dc Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_Tandy1K-II_225L-2y.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_Tandy1K-II_225L.woff b/moneyjsx/static/fonts/WebPlus_Tandy1K-II_225L.woff new file mode 100644 index 0000000..226bfe4 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_Tandy1K-II_225L.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_ToshibaSat_8x14.woff b/moneyjsx/static/fonts/WebPlus_ToshibaSat_8x14.woff new file mode 100644 index 0000000..54c3b46 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_ToshibaSat_8x14.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_ToshibaSat_8x16.woff b/moneyjsx/static/fonts/WebPlus_ToshibaSat_8x16.woff new file mode 100644 index 0000000..1ac5866 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_ToshibaSat_8x16.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_ToshibaSat_8x8.woff b/moneyjsx/static/fonts/WebPlus_ToshibaSat_8x8.woff new file mode 100644 index 0000000..dc45c25 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_ToshibaSat_8x8.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_ToshibaSat_9x14.woff b/moneyjsx/static/fonts/WebPlus_ToshibaSat_9x14.woff new file mode 100644 index 0000000..3eac7ac Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_ToshibaSat_9x14.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_ToshibaSat_9x16.woff b/moneyjsx/static/fonts/WebPlus_ToshibaSat_9x16.woff new file mode 100644 index 0000000..b324de1 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_ToshibaSat_9x16.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_ToshibaSat_9x8.woff b/moneyjsx/static/fonts/WebPlus_ToshibaSat_9x8.woff new file mode 100644 index 0000000..ac2722c Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_ToshibaSat_9x8.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_ToshibaTxL1_8x16.woff b/moneyjsx/static/fonts/WebPlus_ToshibaTxL1_8x16.woff new file mode 100644 index 0000000..686cea5 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_ToshibaTxL1_8x16.woff differ diff --git a/moneyjsx/static/fonts/WebPlus_ToshibaTxL2_8x16.woff b/moneyjsx/static/fonts/WebPlus_ToshibaTxL2_8x16.woff new file mode 100644 index 0000000..0526002 Binary files /dev/null and b/moneyjsx/static/fonts/WebPlus_ToshibaTxL2_8x16.woff differ diff --git a/moneyjsx/static/highlight.css b/moneyjsx/static/highlight.css new file mode 100644 index 0000000..faa5d4d --- /dev/null +++ b/moneyjsx/static/highlight.css @@ -0,0 +1,7 @@ +/*! + Theme: Synth Midnight Terminal Dark + Author: MichaĆ«l Ball (http://github.com/michael-ball/) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#c1c3c4;background:#050608}.hljs ::selection,.hljs::selection{background-color:#28292a;color:#c1c3c4}.hljs-comment{color:#474849}.hljs-tag{color:#a3a5a6}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#c1c3c4}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#b53b50}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#ea770d}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#c9d364}.hljs-strong{font-weight:700;color:#c9d364}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#06ea61}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#42fff9}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#03aeff}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#ea5ce2}.hljs-emphasis{color:#ea5ce2;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#cd6320}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700} \ No newline at end of file diff --git a/moneyjsx/static/main.css b/moneyjsx/static/main.css new file mode 100644 index 0000000..ad6d85c --- /dev/null +++ b/moneyjsx/static/main.css @@ -0,0 +1,882 @@ +:root { + --back: #18191B; + --front: #E76969; + --green: #69E769; + --site-font: Terminal; +} + +@font-face { + font-family: Terminal; + src: url( /static/fonts/Web437_IBM_PGC.woff ) +} + +@font-face { + font-family: Code; + src: url( /static/fonts/Web437_DOS-V_re_JPN12.woff ) +} + +#moneyjsx-root { + display: flex; + flex-direction: column; + padding: 0; + margin: 0; +} +input[type="radio"] { + appearance: none; + background-color: var( --back ); + margin: 0; + font: inherit; + color: #888; + width: 1em; + height: 1em; + border: 0.15em solid currentColor; + border-radius: 50%; + display: grid; + place-content: center; +} + +input[type="radio"]::before { + content: ""; + width: 0.75em; + height: 0.75em; + border-radius: 50%; + transform: scale(0); + transition: 120ms transform ease-in-out; + box-shadow: inset 1em 1em var(--front); +} + +input[type="radio"]:checked::before { + transform: scale(1); +} + +header { + justify-content: space-between; + flex-direction: row; + align-self: center; + position: relative; + display: flex; + z-index: 1; + width: 98%; + top: 5px; +} + +code { + font-family: Code; + font-size: 12px; + white-space: pre-wrap; +} + +html, body { + height: 100%; + overflow: auto; +} + +input { + background-color: #222; + border: 1px solid var(--front); + color: #888; + font-family: Code; +} + +button { + cursor: pointer; + border: 1px solid var(--front); + background-color: #222; + color: #fff; + font-size: 16px; + font-family: var( --site-font ); +} + +a { text-decoration: underline; color: inherit; } +a:hover { cursor: pointer; } + +body { + background-color: var( --back ); + font-family: var( --site-font ); + font-smooth: never !important; + background-position: center; + background-size: cover; + flex-direction: column; + display: flex; + color: #fff; + margin: 0; +} + +@media (max-width: 768px) { +#ascii-art { + font-size: 6px !important; + line-height: 6px !important; + } +} + +/* chrome rendering fucking sucks */ +@supports (-moz-appearance:none) { + code { + font-size: 12px; + } +} + +#terminal { + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); + background: rgba(29, 31, 32, 0.85); + position: relative; + min-height: 350px; + min-width: 333px; + max-height: 95%; + max-width: 100%; + width: 650px; + width: 640px; + overflow: hidden; +} + +#model-capabilities { + padding-top: 5px; + color: #555; + filter: drop-shadow( 1px 1px 1px #000 ); +} + +#terminal-header > div { + margin: 0 5px; + display: flex; + align-items: center; + flex-direction: row; + justify-content: space-between; +} + +#terminal-header a { + color: var(--front); + text-decoration: none; +} + +#terminal-inner { + text-align: left; + padding: 0 10px; + overflow: scroll; + height: calc(100% - 30px); +} + +#terminal-resizer { + clip-path: polygon( 0% 100%, 100% 100%, 100% 0% ); + background-color: var( --front ); + position: absolute; + height: 16px; + z-index: 69; + width: 16px; + bottom: 3px; + right: 3px; +} + +#cmd { + border: none; + background: none; + font-family: var(--site-font); + padding-top: 0px; + margin-top: 0px; + width: 100%; + outline: none; + display: block; +} + +#cmd-input { + width: calc( 100% - 20px ); + outline: none; + height: 20px; +} + +.cmd-files { + padding-left: 10px; +} + +.cmd-files-header { + color: #066; +} + +.cmd-file-size { + color: #888; +} + +.chat-error { + color: #f00; +} + +.chat-role-user, +.chat-role-model { + display: inline; +} + +.chat-role-user { + color: var(--front); +} + +.chat-role-model { + color: #888; +} + +.chat-line { + display: block; +} + +#chat-selection { + display: flex; + flex-direction: column; + position: absolute; + bottom: 1px; + left: 0; + z-index: 11; + text-align: left; +} + +#chat-selection-inner { + background-color: #222; + border: 1px solid var( --front ); +} + +#chat-selection-current { + padding: 5px; + padding-left: 10px; + padding-right: 10px; + display: block; +} + +#chat-selection-sidebar { + position: absolute; + bottom: 1px; + left: 0; + text-align: left; + + z-index: 12; + min-height: 50px; + height: fit-content; + max-height: 50vh; + overflow: auto; + width: 230px; + background-color: #222; + border: 1px solid var( --front ); + display: none; + flex-direction: column; + justify-content: end; +} + +.chat-item { + padding-left: 5px; + margin-bottom: 5px; + height: 30px; + display: flex; + cursor: pointer; +} + +.chat-name:hover a { + color: var( --front ); +} + +.chat-name { + width: 200px; +} + +#chat-name { + width: calc(100% - 15px); + text-align: left; + height: 30px; + white-space: pre; + overflow: hidden; + text-overflow: ellipsis; +} + +.chat-delete a { + text-decoration: none; +} + +.chat-delete:hover a { + color: var( --front ); +} + +#terminal-resizer:hover { + background-color: #ccc; +} + +#terminal-header { + -webkit-touch-callout: none; + height: 30px; + line-height: 30px; + background-color: rgba(29, 31, 32, 1.0); + overflow: hidden; +} + +#suggested-prompts { + padding-top: 20px; + padding-left: 20px; +} + +#homepagemain { + justify-content: center; + align-items: flex-start; + flex-direction: row; + text-align: center; + padding: 15px 0 0; + flex-wrap: wrap; + display: flex; + width: 100%; + z-index: 0; + margin: 0; +} + +.red { color: var( --front ); } +.black { color: var( --back ); } +.green { color: var( --green ); } +.btn_close { background: var( --front ); } + +#page-main { + flex-direction: column; + align-items: center; + text-align: center; + padding: 30px 0 0; + overflow-x: clip; + display: flex; + width: 100%; + z-index: 0; + margin: 0; +} + +#ascii-art { + white-space: pre-wrap; + font-family: Code; + font-size: 9px; + overflow:clip; + width: 1200px; + padding-top: 5px; +} + +#ascii-art span { + padding: 0; + margin: 0; +} + +.groupbox { + border: 1px solid var( --front ); + background-color: var( --back ); + justify-content: flex-start; + align-items: flex-start; + flex-direction: column; + height: fit-content; + min-height: 25px; + min-width: 333px; /* may need to change this for mobile */ + max-width: 600px; + display: flex; + margin: 5px; + z-index: 1; + flex: 1; +} +.groupbox > .grouptitle { + background-color: var( --back ); + font-family: inherit; + position: relative; + margin: 0 0 -15px; /* stupid hardcode, but its: ( title font height - 4 ) * -1 */ + padding: 0px 5px; + font-size: 18px; + z-index: 2; + top: -9px; + left: 5px; +} +.groupbody { + width: calc( 100% - 5px ); + height: calc( 100% - 5px ); + text-align: left; + margin: 5px; +} + +#popup-msgbox { + display: none; + justify-content: center; + align-items: center; + position: absolute; + left: 50%; + min-width: 250px; + border: 1px solid var( --front ); + background: var( --back ); + min-height: 120px; + top: 45vh; + transform: translate( -50%, -50% ); +} + +#header-user > button { + background-color: transparent; + text-decoration: underline; + color: white; + border: none; +} + +#header-ctrls { + justify-content: end; + flex-direction: row; + align-items: center; + position: relative; + display: flex; + width: 128px; + padding: 0; + margin: 0; +} + +#header-dropdown-btn { + font-family: inherit; + text-align: center; + line-height: 0px; + font-size: 1.8em; + color: #888; +} + +.dropdown { + background-color: var( --back ); + border-color: var( --front ); + text-align: center; + color: #888; + height: 24px; + color: #fff; +} + +.dropdown-wrapper { + border: 2px inset var( --front ); + background-color: var( --back ); + justify-content: space-evenly; + flex-direction: column; + align-items: center; + position: absolute; + width: 256px; + z-index: 10; + margin-left: 10px; +} + +.dropdown-inner { + height: 30px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-evenly; + border-bottom: 1px solid #333; + cursor: pointer; +} + +#login-username { + border: 1px solid var( --front ); + background-color: transparent; + padding: 3px 6px; + color: white; +} + +#header-login-dropdown button { + background-color: transparent; + text-decoration: underline; + color: white; + border: none; +} + +#header-login-dropdown { + display: flex; + flex-direction: column; +} + +#header-dropdown { + border: 2px inset var( --front ); + background-color: var( --back ); + justify-content: space-evenly; + flex-direction: column; + align-items: center; + position: absolute; + display: flex; + height: 100px; + width: 220px; + top: 24px; + left: 20px; +} + +#login-email { + width: 160px; +} + +#header-dropdown > a { + border-bottom: 1px solid #242424; + border-top: 1px solid #242424; + height: 33.3333333333%; + text-align: center; + line-height: 45px; + width: 100%; + text-decoration: underline; +} +#header-dropdown > a:nth-child( 1 ) { border-top: none; } +#header-dropdown > a:nth-last-child( 1 ) { border-bottom: none; } + +.rolldownlist { + height: fit-content; + position: relative; + width: 100%; + padding: 0; + margin: 0; +} + +.rolldown { + transition: background-color 0.3s ease-in-out; + border-bottom: 1px solid #E76969; + justify-content: space-between; + flex-direction: column; + display: flex; + height: auto; + width: 100%; +} + +.rolldown:nth-of-type( 1 ) { margin-top: -5px; } +.rolldown:nth-last-of-type( 1 ) { border-bottom: none; } +.rolldown:hover { cursor: pointer; } + +.rolldown-collapsed-container { + overflow: hidden; + padding: 10px; + display: flex; + height: auto; + width: 100%; +} + +.rolldown-collapsed { + float: left; + padding: 0; +} + +.rolldown-expanded-container { + text-align: center; + overflow: hidden; + transition: max-height 0.3s linear; + max-height: 0px; + margin: 0; + padding: 0; +} + +.rolldown-expanded-container.active { + display: flex !important; + max-height: 200px; + height: auto; +} + +.rolldown-expanded { + margin: 20px; +} + +.rolldown-expanded a { color: white; } + +.rolldown-icon-container { + margin-right: 15px; + position: relative; + float: left; + height: fit-content; +} + +.rolldown.active .rolldown-icon-container { + transform: rotate( 90deg ); +} + +#notes-popup, +#tokens-popup, +#settings-popup { + border: 1px solid var( --front ); + background-color: var( --back ); + box-shadow: 1px 1px 2px black; + justify-content: center; + align-items: center; + align-self: center; + flex-direction: column; + position: absolute; + max-height: 888px; + max-width: 600px; + min-width: 300px; + display: flex; + padding: 20px; + z-index: 5; + width: 85%; + top: 50%; + left: 50%; + transform: translate( -50%, -50% ); +} + +#tokens-popup, +#notes-popup { + max-width: 650px; +} + +#settings-top { + justify-content: center; + align-items: baseline; + flex-direction: row; + flex-wrap: wrap; + display: flex; + width: 100%; +} + +#settings-top > div { + width: calc(50% - 20px); + margin: 10px; +} + +#settings-spinner-wrapper { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + width: 100%; +} + +#system-prompt { + min-width: 100%; + max-width: 100%; + min-height: 220px; +} + +.settings-btn { + width: calc(50% - 5px); + height: 28px; + display: flex; + justify-content: center; +} + +@media (max-width: 768px) { + #settings-top > div { + width: 100% !important; + } + #settings-top > div > div { + margin: 5px !important; + } +} + +#tokens-inner, +#notes-inner { + padding: 10px; + border: 1px solid var( --front ); + background-color: #000; + box-shadow: 1px 1px 2px black; + width: calc( 100% - 20px ); + max-height: 300px; + overflow: scroll; +} + +.tokens-entry, +.notes-entry { + display: flex; + justify-content: space-between; + border-bottom: 1px solid #222; + margin: 5px 10px; +} + +.tokens-entry span, +.notes-entry span { + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: center; +} + +.tokens-delete, +.notes-delete { + background: none; + border: none; + color: #fff; + margin-left: 5px; + font-size: 24px; +} + +.tokens-delete:hover, +.notes-delete:hover { + color: var(--front); +} + +.popup-msg { + border: 1px solid var( --front ); + background-color: var( --back ); + box-shadow: 1px 1px 2px black; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 1000; + padding: 10px; + display: flex; + flex-direction: column; +} + +textarea { + border: 1px solid var( --front ); + background-color: #222; + color: white; +} + +.column { + display: flex; + flex-direction: column; +} + +#chat-name { + width: calc(100% - 15px); + overflow: hidden; + text-overflow: ellipsis; + text-align: left; + height: 30px; +} + +.chat-content { + display: inline; + white-space: pre-line; +} + +.chat-line pre { + padding-top: 0; + padding-bottom: 0; + margin-bottom: 5px; + margin-top: 5px; + background-color: #000; + color: var(--front); +} + +.chat-code-line { + background: #151515; + padding: 3px; + color: #0d0; +} + +.chat-column { + display: flex; + flex-direction: column; + margin-bottom: 5px; +} + +.comment { + color: #888; +} + +#support-container { + width: calc( 100% - 7px ) !important; + justify-content: flex-start; + flex-direction: column; + text-align: center; + padding: 0 0 25px; + display: flex; + height: 100%; + z-index: 0; +} + +#support-container pre { + border: 1px solid #444; + color: var( --front ); + overflow-x: scroll; + background: #000; + width: 100%; +} + +#support-container > div { + min-height: unset !important; + padding: 5px; /* placeholder */ + width: 100%; +} + +#support-container > p { + margin: 5px 0; +} + +hr { + outline: 1px solid var( --front ); + border: 1px solid var( --back ); + border-radius: 25px; + width: 100%; +} + +.tool-call { + background: #050608; + padding: 10px; + font-family: Code; + font-size: 12px; + cursor: pointer; +} + +.tool-call-title-wrapper { + justify-content: space-between; + align-items: center; + display: flex; +} + +.tool-call-collapse { + font-size: 17px; +} + +.tool-call-title { + +} + +.tool-call-list { + overflow: scroll !important; + color: var( --front ); +} + +.reason-output { + overflow: scroll !important; + color: var( --front ); +} + +#page-selector-wrapper { + width: fit-content; + display: grid; + float: right; + clear: both; + margin: 0; + right: 0; +} + +#selector-wrapper { + display: grid; + width: 100%; +} + +#selector-wrapper > .dropdown-wrapper { + justify-self: flex-end !important; + margin-right: 7px !important; +} + +#page-selector-wrapper > .dropdown-wrapper { + justify-self: flex-end !important; + margin-right: 10px !important; + width: 252px !important; +} + +#tutorial-links-box { + border: 1px solid var( --front ); + justify-content: center; + flex-direction: column; + justify-self: flex-end; + align-items: center; + margin: 0 10px 10px; + display: flex; + padding: 5px; + width: 256px; + float: right; + clear: both; +} + +#model-selector { + align-items: flex-start; + justify-self: flex-end; + height: fit-content; + width: fit-content; + margin-right: 7px; + display: flex; +} + +.model-capabilities { + flex-direction: column; + padding: 0 10px 10px; + display: flex; +} + +.model-capabilities > span { + min-width: fit-content; +} + +.model-item > .tool-call { + margin-right: 5px; +} + +#tos-text { + white-space: break-spaces; +} diff --git a/moneyjsx/static/prompts.json b/moneyjsx/static/prompts.json new file mode 100644 index 0000000..b121306 --- /dev/null +++ b/moneyjsx/static/prompts.json @@ -0,0 +1,104 @@ +{ + "prompts": [ + "how do i fix a slow pc?", + "explain quantum computing in simple terms.", + "what is the best pizza topping?", + "recommend me a sci-fi movie.", + "how do i make a website?", + "tell me a fun fact.", + "what is the meaning of life?", + "how can i learn programming fast?", + "suggest a book to read.", + "who is elon musk?", + "explain blockchain.", + "what is the capital of japan?", + "give me a random joke.", + "what is 42 in binary?", + "what is the best coding language to learn?", + "how do you make coffee?", + "explain the concept of ai.", + "what is the weather today?", + "who won the last world cup?", + "tell me about black holes.", + "how do i become a millionaire?", + "best way to learn guitar?", + "what is love?", + "tell me about spacex.", + "give me a motivational quote.", + "explain recursion.", + "who is the president of the usa?", + "define cryptocurrency.", + "how to start a startup?", + "tell me a cool fact about space.", + "what are the benefits of meditation?", + "explain 5g technology.", + "suggest a new hobby.", + "how do i improve my memory?", + "what is 2+2?", + "what is a deep learning model?", + "who is albert einstein?", + "how can i become more productive?", + "what is the best anime series?", + "explain the stock market.", + "who invented the internet?", + "what are some good productivity hacks?", + "tell me a mystery fact.", + "what is dark matter?", + "how do i invest in stocks?", + "what is a good workout routine?", + "explain how electricity works.", + "give me a funny meme idea.", + "what is the history of bitcoin?", + "how do i write a resume?", + "recommend a good tv series.", + "explain the theory of relativity.", + "how do i quit a bad habit?", + "tell me something weird.", + "how can i become rich?", + "explain how nuclear energy works.", + "what is the healthiest diet?", + "how to deal with stress?", + "tell me about mars.", + "what is machine learning?", + "give me a random trivia.", + "how does ai work?", + "what is the best way to relax?", + "tell me something inspirational.", + "who invented computers?", + "explain string theory.", + "what is the biggest animal in the ocean?", + "how do i make friends?", + "tell me a conspiracy theory.", + "what is the fastest car in the world?", + "explain schrodinger's cat.", + "what is the best way to sleep better?", + "who wrote the bible?", + "how do i code in python?", + "what is the longest river in the world?", + "how does the brain work?", + "tell me about the moon landing.", + "what is quantum physics?", + "how to create a business plan?", + "what is an nft?", + "explain evolution.", + "how do i save money?", + "who is stephen hawking?", + "what is the best smartphone?", + "what are black holes?", + "how does the universe end?", + "tell me about tesla.", + "how do vaccines work?", + "what is consciousness?", + "explain time travel theories.", + "what is the best way to learn math?", + "how does google work?", + "what is augmented reality?", + "how do i boost my immune system?", + "what is the best travel destination?", + "tell me about dinosaurs.", + "explain the big bang.", + "how do satellites stay in orbit?", + "what is the difference between ai and ml?", + "how do i write a novel?" + ] +} \ No newline at end of file diff --git a/moneyjsx/tsconfig.json b/moneyjsx/tsconfig.json new file mode 100644 index 0000000..f2f29fc --- /dev/null +++ b/moneyjsx/tsconfig.json @@ -0,0 +1,120 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + "moduleResolution": "bundler", + "target": "es2020", + "lib": [ + "ES2017", + "DOM", + "DOM.Iterable", + "ScriptHost" + ], + // "lib": [], + "jsx": "react", + // "experimentalDecorators": true, + // "emitDecoratorMetadata": true, + "jsxFactory": "JSX.createElement", + "jsxFragmentFactory": "JSX.createFragment", + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "es2020", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + "baseUrl": ".", + "paths": { + "*": ["types/*"] + }, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": [ + "./node_modules/@types", + "./types" + ], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + //"checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": false, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + "strictNullChecks": false, /* When type checking, take into account 'null' and 'undefined'. */ + "strictFunctionTypes": false, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + "strictBindCallApply": false, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + "strictPropertyInitialization": false, /* Check for class properties that are declared but not set in the constructor. */ + "strictBuiltinIteratorReturn": false, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ + "noImplicitThis": false, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/moneyjsx/types/custom.d.ts b/moneyjsx/types/custom.d.ts new file mode 100644 index 0000000..b7f740e --- /dev/null +++ b/moneyjsx/types/custom.d.ts @@ -0,0 +1,8 @@ +declare namespace JSX { + type Element = any; + type ElementClass = any; + interface IntrinsicElements { + [elemName: string]: any; + } +} + diff --git a/moneyjsx/webpack-dev.config.cjs b/moneyjsx/webpack-dev.config.cjs new file mode 100644 index 0000000..4fa4b07 --- /dev/null +++ b/moneyjsx/webpack-dev.config.cjs @@ -0,0 +1,45 @@ +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); + +module.exports = { + mode: 'development', + entry: './src/index-page.tsx', + module: { + rules: [ + { + test: /\.tsx?$/, + use: { + loader: 'ts-loader', + options: { + compilerOptions: { + module: 'es2020' + } + } + }, + exclude: /node_modules/, + } + ], + }, + resolve: { + extensions: ['.tsx', '.jsx', ".js"], + }, + output: { + filename: 'bundle.js', + path: path.resolve(__dirname, 'dist') + }, + plugins: [ + new HtmlWebpackPlugin({ + template: './src/index.html', + }), + new CopyWebpackPlugin({ + patterns: [ + { from: './static/**' } + ] + }) + ], + devServer: { + historyApiFallback: true, + port: 9000, + }, +}; diff --git a/moneyjsx/webpack-prod.config.cjs b/moneyjsx/webpack-prod.config.cjs new file mode 100644 index 0000000..e850468 --- /dev/null +++ b/moneyjsx/webpack-prod.config.cjs @@ -0,0 +1,48 @@ +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); + +module.exports = { + mode: 'production', + entry: './src/index-page.tsx', + module: { + rules: [ + { + test: /\.tsx?$/, + use: { + loader: 'ts-loader', + options: { + compilerOptions: { + module: 'es2020' + } + } + }, + exclude: /node_modules/, + } + ], + }, + resolve: { + alias: { + jquery: "jquery/slim" + }, + extensions: ['.tsx', '.jsx', ".js"], + }, + output: { + filename: 'bundle.js', + path: path.resolve(__dirname, 'dist'), + }, + plugins: [ + new HtmlWebpackPlugin({ + template: './src/index.html', + }), + new CopyWebpackPlugin({ + patterns: [ + { from: './static/**' } + ] + }) + ], + devServer: { + historyApiFallback: true, + port: 9000, + }, +}; -- cgit v1.2.3