@sheetxl/studio-vanilla 0.6.16 → 0.6.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/cjs/{D5sdOzQupVYQZ8X6.cjs → 7rV2uwKSLqOukj9e.cjs} +1 -1
- package/browser/cjs/{C0IRmuP51CoF8UGz.cjs → 8zxD8IVrO9yyUZ3a.cjs} +4 -4
- package/browser/cjs/{Cm_sXa-x01uyrb86.cjs → B1vbcDW-mYDc3tRk.cjs} +1 -1
- package/browser/cjs/{BK4O29qOmHfia3UP.cjs → B3Ov59lhvST1QZmK.cjs} +1 -1
- package/browser/cjs/{BPmNc_x_tDRGJLYT.cjs → B3mc_exWx2zZirEx.cjs} +1 -1
- package/browser/cjs/{B6maXpjBoW-uc-mx.cjs → B4GQSMw3gxnusBYY.cjs} +1 -1
- package/browser/cjs/{iyApIr6-H-aeTxZM.cjs → BD2R8-fIGYYAHB9H.cjs} +1 -1
- package/browser/cjs/{BykVjVAhMLanfeVx.cjs → BF4BJ7ICmyANO_Q4.cjs} +2 -2
- package/browser/cjs/{DXRq47m-tDHXLZpp.cjs → BNPWsnKU30C4K59Q.cjs} +1 -1
- package/browser/cjs/{Y88jPu8kZr-bqqiU.cjs → BRzDHN2xt_uDAHwX.cjs} +2 -2
- package/browser/cjs/{Bob5x3q9l1igZ6Fg.cjs → BUiD3JsC13sWCk3V.cjs} +63 -63
- package/browser/cjs/{CI1CYyIhY5RHRrz8.cjs → BUqI0CJr_O39ytcK.cjs} +2 -2
- package/browser/cjs/{-kFzEiBOrzMIo3-Q.cjs → BWTxMHl7R3y67U_d.cjs} +1 -1
- package/browser/cjs/{DDwTwt6KQoz6bXyu.cjs → Bdojd4kbtE3hcjg6.cjs} +1 -1
- package/browser/cjs/{BnzmPXxrRi5mvIL4.cjs → BjGVRa1hmUV2tq1X.cjs} +20 -20
- package/browser/cjs/{DHXNEvAYjVGmhN36.cjs → BjtApyVX1dv04hR0.cjs} +1 -1
- package/browser/cjs/{Cq-dltP1ZZGIThSB.cjs → BnWO6x-8ZdNx3FPe.cjs} +4 -4
- package/browser/cjs/{Bl_WM-94JgXGkyNh.cjs → BpbZpaE5LwicGNr3.cjs} +1 -1
- package/browser/cjs/{t-MNbCL2J5ZArSOq.cjs → Bs40rX73-vb51Qz7.cjs} +2 -2
- package/browser/cjs/{D-PavNTFiiazngrP.cjs → Bv2LW8CE3eX1etFL.cjs} +1 -1
- package/browser/cjs/{BzYerDs_YEhl3Od6.cjs → Bxj5ELEJ6_d2gxCa.cjs} +1 -1
- package/browser/cjs/{7_t8qbH6FkHHTE3s.cjs → C7qkCKC7cz2bM8tt.cjs} +2 -2
- package/browser/cjs/{BNx_H9exPUEgBivk.cjs → CHBJX-u8oCtzaSrb.cjs} +1 -1
- package/browser/cjs/{s-GoeyY3SBjppbEW.cjs → CJXmaIN6-RY_b9wx.cjs} +4 -4
- package/browser/cjs/{4Wv88KJHUGD8WNH9.cjs → CKxW-PvXRH3MzqOe.cjs} +1 -1
- package/browser/cjs/{BJgA8_GvAft4V423.cjs → CM4Da9bK1-ZK9tZl.cjs} +1 -1
- package/browser/cjs/{Dm2b6HXdhdsNgxS9.cjs → CPXGF_B_l-m-6xK0.cjs} +2 -2
- package/browser/cjs/{OgTycreacq01fAsN.cjs → CYN6QHX6p_JMAfHT.cjs} +3 -3
- package/browser/cjs/{flNubQeVp2zJ94Ld.cjs → Cc2HKduieh2Ml0fB.cjs} +2 -2
- package/browser/cjs/{BAAzkkZv-L1yDiQ6.cjs → CsWCrLghuaHinksK.cjs} +2 -2
- package/browser/cjs/{BgDoeua-D9XeQqt-.cjs → Cvjj1yT8ySA8-05h.cjs} +1 -1
- package/browser/cjs/{CqwZRxyNANbcLEqu.cjs → D0W-j4ja5ovYoX7S.cjs} +1 -1
- package/browser/cjs/{Bx9MD2EvSkR6gi1e.cjs → D7cxfobxpGfLYp0J.cjs} +1 -1
- package/browser/cjs/{BUQmJXlGVfOeWfuV.cjs → DSdU__eP2PkuILHV.cjs} +1 -1
- package/browser/cjs/{CkyD6YJrOB1xnHjG.cjs → DWLm2mKpFgBwwJLR.cjs} +1 -1
- package/browser/cjs/{Dqh-z_kTyrJyab9t.cjs → DXpRbV6s_Zr_DZDs.cjs} +1 -1
- package/browser/cjs/DY2BNwXkVnavhj-H.cjs +6 -0
- package/browser/cjs/{DtnL0Xx6NP2aLeLz.cjs → DYF9H8YHoqMjUY7c.cjs} +2 -2
- package/browser/cjs/{K-Ace_pyUq4gU7pY.cjs → D_zDrJpKgM40yH4G.cjs} +5 -5
- package/browser/cjs/{hzUSJYH6jc2_dVs5.cjs → DiIamhVM0RoVFXLi.cjs} +2 -2
- package/browser/cjs/{pliz83ppR2gRpJwc.cjs → DrYhOli3K6XDiiXW.cjs} +1 -1
- package/browser/cjs/{C-OGhxsNkeumWc2c.cjs → DvUjB80yD7NngR7u.cjs} +1 -1
- package/browser/cjs/{BwduEWVS8CtiMXf-.cjs → G_YoZ61wrlwLav1D.cjs} +2 -2
- package/browser/cjs/{D15doeQRi781h0yS.cjs → HNbQVHhZvSNcxXSf.cjs} +1 -1
- package/browser/cjs/{CjUI2STz0JuiCOkV.cjs → HvX6UQOgKmt8wp33.cjs} +2 -2
- package/browser/cjs/{BgFTp9SUFPO8AgTM.cjs → QtFyUpkyhm-jNJT0.cjs} +1 -1
- package/browser/cjs/{BaOy0b4aNPynwXnR.cjs → TT_pCtUsXieeNgpt.cjs} +1 -1
- package/browser/cjs/{B3RQ004Y3OdIvk3c.cjs → UkC9qF_c7uaiA6fR.cjs} +1 -1
- package/browser/cjs/{711NYaEmqq4TSOn3.cjs → VUqf4g-U5tVIBrsv.cjs} +1 -1
- package/browser/cjs/{wlpFcNkvJnI_FZOE.cjs → a9BJpuwYvpGZNR7n.cjs} +3 -3
- package/browser/cjs/{DtIEI2x0BkjHmo4r.cjs → iOkzFA5V0gF6xdqB.cjs} +1 -1
- package/browser/cjs/index.cjs +2 -2
- package/browser/cjs/{Llg9cDvb6uXKanag.cjs → kn--_4UYuYT6zY9Y.cjs} +1 -1
- package/browser/cjs/{D_IO7ejCpgVRzwue.cjs → l31ATnFh_DPrFD4h.cjs} +2 -2
- package/browser/cjs/{RpDc1iyUUM37DB0x.cjs → l3Alplrf34PVd0AJ.cjs} +5 -5
- package/browser/cjs/{C94pTCt-3BIGCUhO.cjs → omhO6kYTZsHXV6P_.cjs} +1 -1
- package/browser/cjs/{DQckpnNA64KQJfxz.cjs → q-9pcItKNDq0Ha0P.cjs} +2 -2
- package/browser/cjs/{CmU8CGDf4Xjb3N6O.cjs → w4YlFfS386fo_S58.cjs} +2 -2
- package/{cdn/assets/CcjlX6Yl0Vkr6A2c.js → browser/esm/0ztFDfwfXQYwcNOg.mjs} +1 -1
- package/browser/esm/{BmJZ38tcauRQ6pFV.mjs → 5Kj1DYswOXuI9dgx.mjs} +4 -4
- package/browser/esm/{DjnHcd7owT22pyeb.mjs → 5k9QG861nzFBoujc.mjs} +1 -1
- package/browser/esm/{B7O3AC40GUSWJpOf.mjs → 5kHqdyJB0jloGjeo.mjs} +1 -1
- package/browser/esm/{B14z0JOQFwZju5U2.mjs → 6pWT7Jm6yyVKs-Sk.mjs} +1 -1
- package/browser/esm/{DNHLNCVrxo46FqvV.mjs → 6wSAa0OqW7awx8oV.mjs} +2 -2
- package/browser/esm/{Cwck98-l4vk-h3rf.mjs → 7IdwgQD_0cio_-WZ.mjs} +2 -2
- package/browser/esm/{CdRBcPXrRa2IBe80.mjs → 8OsFHvzIRvQcFRWJ.mjs} +2 -2
- package/browser/esm/{CsKS8jl-7MrA_FPI.mjs → A34YP98tOtmdRG_Z.mjs} +1 -1
- package/browser/esm/{DIWp-r3nbNOm_pyE.mjs → B2-70dJtBZXFE9QU.mjs} +1 -1
- package/browser/esm/{D482zRNXaVrLuBOY.mjs → BKbqqgllOlsFYxJQ.mjs} +2 -2
- package/browser/esm/{DNQEKBXgef3WIPff.mjs → BPxRQqqbdQzwMF1E.mjs} +2 -2
- package/browser/esm/{BMTlX1jCFMW4hCzU.mjs → BQ3Izf7WSgFW7LFd.mjs} +1 -1
- package/browser/esm/{DPvq9--F3ugmge6v.mjs → BYuz6SBySPgW_TUJ.mjs} +4 -4
- package/browser/esm/{CjIsNav925KuFd5F.mjs → BcRQsmugwm_jjI01.mjs} +2 -2
- package/browser/esm/{BBmnNOvSdJ3pM7-t.mjs → BiDM5gDLXXzFiU4t.mjs} +4 -4
- package/browser/esm/{ChgYfVb4KZMBw7Fs.mjs → BrW4iXOyhTcOkcu-.mjs} +10 -10
- package/browser/esm/{D3kVzfZsacwEXWbL.mjs → BrYWZfObTL6HJo_F.mjs} +6 -6
- package/{cdn/assets/xE3yKYtc9iVsM1_p.js → browser/esm/Btq2x_w1UtQRRBIM.mjs} +1 -1
- package/{cdn/assets/CWPGozYlq2fnGNx1.js → browser/esm/BuQIEbAsMDvksSDJ.mjs} +1 -1
- package/{cdn/assets/CjfIhEH55YZkavRq.js → browser/esm/BvegTjmPOfzXbMJF.mjs} +1 -1
- package/{cdn/assets/DZeWR0ED-c0E3Cff.js → browser/esm/C-i5hag6quL1dV-o.mjs} +1 -1
- package/{cdn/assets/DGZIC3UKLU32ANcZ.js → browser/esm/C152ovoM3kI9DwvN.mjs} +1 -1
- package/browser/esm/{JopNokOIkJBN3nxt.mjs → C1cXMIbJ4vIwwBAG.mjs} +1 -1
- package/browser/esm/{C1oYcOulPTFILJae.mjs → C3ZvCPrzk21XuSEK.mjs} +3 -3
- package/browser/esm/{Dbri0Gen47bGrMIg.mjs → C6RMlhZNzuYaVKAE.mjs} +2 -2
- package/browser/esm/{BeL9RR7Iy7L5weWM.mjs → CFUJCBmmF1_6jouG.mjs} +7389 -7273
- package/browser/esm/{BJjKo7NhRbs51BuJ.mjs → CGR9KR3-MWII_jbT.mjs} +1 -1
- package/{cdn/assets/DU38hs6YlB_tz72-.js → browser/esm/CIRhhWBF5DqC7GR7.mjs} +1 -1
- package/browser/esm/{CQrpZZ-1CtNxCPc9.mjs → CYLafhGn3Xra5p9X.mjs} +2 -2
- package/{cdn/assets/WMbhpVavj_NI9JRl.js → browser/esm/Ciay45U36Y6qrko3.mjs} +1 -1
- package/{cdn/assets/BRD22vJSoeQb1Pl8.js → browser/esm/CjcAUuoRox-Djf3a.mjs} +1 -1
- package/browser/esm/{Da-Mr0uahMqzgpIA.mjs → Cls-FfbGLZ_7VkYF.mjs} +1 -1
- package/browser/esm/{jp6n6MISPKnzMSYJ.mjs → CoiPYdujj4exdgZf.mjs} +6 -6
- package/{cdn/assets/sBtF8NB1smuyscCK.js → browser/esm/CqcE3BQzn7L3qEyr.mjs} +1 -1
- package/browser/esm/{BfUAhXfHL0JRNI8-.mjs → CzT0zd_Pa3cE8OGk.mjs} +2 -2
- package/{cdn/assets/ODD7USoF0vFi2UIB.js → browser/esm/D3AHewhq_4KnQzEC.mjs} +1 -1
- package/{cdn/assets/BOPN0DV1Zld0t5O7.js → browser/esm/D3qRuRmv312EOyQY.mjs} +1 -1
- package/{cdn/assets/BtaOfAef2NxPsef1.js → browser/esm/D4cm6Gj68la8jini.mjs} +1 -1
- package/browser/esm/{B2KYixwu2_kIurJw.mjs → D7HBDJvqPsBdEIaZ.mjs} +1 -1
- package/{cdn/assets/CQgmLKfxYZoCNJHI.js → browser/esm/DDv11tRWH4-mvroG.mjs} +1 -1
- package/browser/esm/{D9nCbMhExtwht2tT.mjs → DJrtpv9Odw-xI1cg.mjs} +1 -1
- package/browser/esm/{DcLzZU5v2k4OW38I.mjs → DOrSP_y0l7WVWx7x.mjs} +1 -1
- package/browser/esm/{ZmodCJdz7Td5mPAL.mjs → DSS1GQwD4j6_aMHP.mjs} +8 -8
- package/browser/esm/{CgaubTG47opdZhye.mjs → DVTLZy_MMrikhk4g.mjs} +1 -1
- package/browser/esm/{DbuuKeMHVZNtvjYx.mjs → DY-Bg_-mGUOR-Io8.mjs} +9 -9
- package/browser/esm/{C3jh0s40CvI3oFRs.mjs → Dcnkse6zLlKm4_ar.mjs} +6 -6
- package/{cdn/assets/CHq_Ckbpl7jR21s4.js → browser/esm/DhbwMFI8riGLM8tB.mjs} +1 -1
- package/browser/esm/{BegYh8ceF2OP9bMv.mjs → DlZz1lMQQ7xnPhQH.mjs} +1 -1
- package/browser/esm/{BiIrMVRuLg2IdnQf.mjs → DrGGy0Ecg4uL-V5d.mjs} +2 -2
- package/browser/esm/{DjMpWb8vN4GP0Kke.mjs → DsV5ljniIODwm8we.mjs} +3 -3
- package/browser/esm/{CahOp7GMy8VHEsBw.mjs → DuVqdCY41Q-uJ3CJ.mjs} +1 -1
- package/browser/esm/{SAM1hVVFlETdoDiu.mjs → ITS7d47TmMW9eJJG.mjs} +2 -2
- package/browser/esm/{CoH6IbDlr-zluALa.mjs → MJL3-1j0pc_tXzzP.mjs} +3 -3
- package/browser/esm/{CAnEsQD5KDGA4Hjs.mjs → QMh1Gz2f1iGlxdd_.mjs} +1 -1
- package/browser/esm/{B1l9D4ICrI6vKf34.mjs → eisFb8E-Mqmd8dVu.mjs} +1 -1
- package/browser/esm/index.mjs +2 -2
- package/browser/esm/{DiVFXL20Rx94Ib_V.mjs → vvNmf_jkFYfDAmN_.mjs} +10 -10
- package/{browser/esm/CcjlX6Yl0Vkr6A2c.mjs → cdn/assets/0ztFDfwfXQYwcNOg.js} +1 -1
- package/cdn/assets/{DjnHcd7owT22pyeb.js → 5k9QG861nzFBoujc.js} +1 -1
- package/cdn/assets/{B7O3AC40GUSWJpOf.js → 5kHqdyJB0jloGjeo.js} +1 -1
- package/cdn/assets/{B14z0JOQFwZju5U2.js → 6pWT7Jm6yyVKs-Sk.js} +1 -1
- package/cdn/assets/{CsKS8jl-7MrA_FPI.js → A34YP98tOtmdRG_Z.js} +1 -1
- package/cdn/assets/{DIWp-r3nbNOm_pyE.js → B2-70dJtBZXFE9QU.js} +1 -1
- package/cdn/assets/{BEjaduQ41HNgCGam.js → BJz24GkhJP-C6vb_.js} +43 -43
- package/cdn/assets/{BlbHPTunGfEP9Mlj.js → BMiqa-HxKRCv_Neo.js} +2 -2
- package/cdn/assets/{BMTlX1jCFMW4hCzU.js → BQ3Izf7WSgFW7LFd.js} +1 -1
- package/cdn/assets/{lT8HqiDpcAF_G8hN.js → BcMszZQOg7xGnZfQ.js} +20 -20
- package/cdn/assets/{CjT3QxlT5JjzaY7K.js → BgivW52HJvmWNJ70.js} +4 -4
- package/cdn/assets/{BbZxC7ekWGZfbbSb.js → BoICSq7euzkA3p2f.js} +12 -12
- package/cdn/assets/{BhdrDDNVAJlH6IvS.js → Btj3gffpKHcFoBNC.js} +4 -4
- package/{browser/esm/xE3yKYtc9iVsM1_p.mjs → cdn/assets/Btq2x_w1UtQRRBIM.js} +1 -1
- package/{browser/esm/CWPGozYlq2fnGNx1.mjs → cdn/assets/BuQIEbAsMDvksSDJ.js} +1 -1
- package/cdn/assets/{DWJmtFb3z0lRWMGk.js → Bue-V-RRXPIKSrJh.js} +4 -4
- package/{browser/esm/CjfIhEH55YZkavRq.mjs → cdn/assets/BvegTjmPOfzXbMJF.js} +1 -1
- package/cdn/assets/{BdPo4K8JsrPKD5yA.js → Bw2_Mg12CpFNSIzi.js} +3 -3
- package/cdn/assets/{Copl9KSHVGrrb3id.js → BwT7DLAWhQKGGD95.js} +2 -2
- package/{browser/esm/DZeWR0ED-c0E3Cff.mjs → cdn/assets/C-i5hag6quL1dV-o.js} +1 -1
- package/{browser/esm/DGZIC3UKLU32ANcZ.mjs → cdn/assets/C152ovoM3kI9DwvN.js} +1 -1
- package/cdn/assets/{JopNokOIkJBN3nxt.js → C1cXMIbJ4vIwwBAG.js} +1 -1
- package/cdn/assets/{ub0MY-AjaPEbuU96.js → C2vj6R0IX31tU8kl.js} +4 -4
- package/cdn/assets/{DtON3bF4JQRlPPET.js → CDnp0OJkwOf6E4_O.js} +31 -31
- package/{browser/esm/DU38hs6YlB_tz72-.mjs → cdn/assets/CIRhhWBF5DqC7GR7.js} +1 -1
- package/cdn/assets/{CO4MX0DR7gDk81Bg.js → CTApQKVBWF-_jS85.js} +2 -2
- package/{browser/esm/WMbhpVavj_NI9JRl.mjs → cdn/assets/Ciay45U36Y6qrko3.js} +1 -1
- package/{browser/esm/BRD22vJSoeQb1Pl8.mjs → cdn/assets/CjcAUuoRox-Djf3a.js} +1 -1
- package/cdn/assets/{COUCdXXHXh4nyAMH.js → CjfXdbGZo4dVF6sI.js} +9363 -9247
- package/cdn/assets/{Da-Mr0uahMqzgpIA.js → Cls-FfbGLZ_7VkYF.js} +1 -1
- package/cdn/assets/{DpPvsY5YFYI7N4fF.js → CpJ5AP3OipKTQK5-.js} +1 -1
- package/cdn/assets/{B6ai9XPWEvRqL2sY.js → CpbwIOlO-qmZ_7AB.js} +10 -10
- package/{browser/esm/sBtF8NB1smuyscCK.mjs → cdn/assets/CqcE3BQzn7L3qEyr.js} +1 -1
- package/cdn/assets/{CHYFny88eD9E5_8j.js → Cr-w8KTAHVytOKGA.js} +97 -97
- package/{browser/esm/ODD7USoF0vFi2UIB.mjs → cdn/assets/D3AHewhq_4KnQzEC.js} +1 -1
- package/{browser/esm/BOPN0DV1Zld0t5O7.mjs → cdn/assets/D3qRuRmv312EOyQY.js} +1 -1
- package/{browser/esm/BtaOfAef2NxPsef1.mjs → cdn/assets/D4cm6Gj68la8jini.js} +1 -1
- package/cdn/assets/{Czxu8Ia6lwsnTy6z.js → D7FIbHM83PKmnzMn.js} +8 -8
- package/cdn/assets/{B2KYixwu2_kIurJw.js → D7HBDJvqPsBdEIaZ.js} +1 -1
- package/cdn/assets/{DDFH8KhvVyAuXzH4.js → D7IYYEWkOU3nn0lW.js} +3 -3
- package/{browser/esm/CQgmLKfxYZoCNJHI.mjs → cdn/assets/DDv11tRWH4-mvroG.js} +1 -1
- package/cdn/assets/{By6_rIdBFxxlKzWw.js → DF6zHXUVVo4LrTcx.js} +2 -2
- package/cdn/assets/{D9nCbMhExtwht2tT.js → DJrtpv9Odw-xI1cg.js} +1 -1
- package/cdn/assets/{DcLzZU5v2k4OW38I.js → DOrSP_y0l7WVWx7x.js} +1 -1
- package/cdn/assets/{CgaubTG47opdZhye.js → DVTLZy_MMrikhk4g.js} +1 -1
- package/cdn/assets/{Ddl-pHqHUXldMdv1.js → D_7jzLdfCPE63Lyd.js} +6 -6
- package/cdn/assets/{BlG7nBYR0GkZsvKf.js → DbPHJVAz2xVVHjK3.js} +1 -1
- package/cdn/assets/{CNUAH1vTDBkqUNob.js → DgkebXJejGkJ7VDy.js} +4 -4
- package/{browser/esm/CHq_Ckbpl7jR21s4.mjs → cdn/assets/DhbwMFI8riGLM8tB.js} +1 -1
- package/cdn/assets/{BegYh8ceF2OP9bMv.js → DlZz1lMQQ7xnPhQH.js} +1 -1
- package/cdn/assets/{CoIH4LXlr9wqGAtG.js → Dou22X5AEYxNxiEA.js} +2 -2
- package/cdn/assets/{GTePNUvTni80s4z4.js → Dqzg9b_GWlo3O5Gn.js} +8 -8
- package/cdn/assets/{CahOp7GMy8VHEsBw.js → DuVqdCY41Q-uJ3CJ.js} +1 -1
- package/cdn/assets/{CNqZjd_FpGIxQbMR.js → HLg6wRtpuNhBlxW9.js} +10 -10
- package/cdn/assets/{C09_BgKMw0utwdfy.js → J_hYYA8_HqfoWlon.js} +3 -3
- package/cdn/assets/{DIzUQJ4iBjOlhAUx.js → LlxqphKLqLZ16Yaq.js} +5 -5
- package/cdn/assets/{CAnEsQD5KDGA4Hjs.js → QMh1Gz2f1iGlxdd_.js} +1 -1
- package/cdn/assets/{DGLbdtMWdeKKoYhD.js → V04a-szNfDLVG8V8.js} +2 -2
- package/cdn/assets/{BAmVIxd-X6pt7Ll1.js → ZPL4UXLtrdujKkH-.js} +10 -10
- package/cdn/assets/{DkmLinnJhiwSd-FJ.js → di6R3ICpRFMRBDnK.js} +4 -4
- package/cdn/assets/{B1l9D4ICrI6vKf34.js → eisFb8E-Mqmd8dVu.js} +1 -1
- package/cdn/assets/{BEY63iYfoXSMMhPr.js → wcOulwYmKcUonvCn.js} +3 -3
- package/cdn/assets/{BjSLrqS_XiDtmLwJ.js → yZi2kJacWsVeNKjd.js} +2 -2
- package/cdn/assets/{ByuI-7H6NubT3kMb.js → zsHmgM6SR1JtAtMp.js} +9 -9
- package/cdn/index.js +2 -2
- package/cdn/loader.js +1 -1
- package/package.json +3 -3
- package/browser/cjs/CQBauP8J2uaCgSwi.cjs +0 -6
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { a as t } from "./
|
|
2
|
-
import { r as o } from "./
|
|
3
|
-
import {
|
|
1
|
+
import { a as t } from "./yZi2kJacWsVeNKjd.js";
|
|
2
|
+
import { r as o } from "./D7IYYEWkOU3nn0lW.js";
|
|
3
|
+
import { x as E, y as p, w as b, T as V, h as le, D as ae, E as re, G as ce, e as O, H as g, J as m, K as pe, N as j, O as de, r as q, o as R, Q as ue, V as fe, R as xe, $ as ge, p as T, a0 as Y, a1 as me, a2 as he, a3 as Oe, t as je, l as Ce, I as ye, S as be } from "./CjfXdbGZo4dVF6sI.js";
|
|
4
4
|
/**
|
|
5
|
-
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.6.
|
|
5
|
+
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.6.18
|
|
6
6
|
*
|
|
7
7
|
* (C) 2025-present SheetXL Inc. & Michael T. Ford
|
|
8
8
|
* License: The license can be found at https://www.sheetxl.com/license.
|
|
9
9
|
*/
|
|
10
|
-
const Re = E(t.jsx("path", { d: "M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20z" }), "ArrowBack"), Te = E(t.jsx("path", { d: "m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8z" }), "ArrowDownward"), ve = E(t.jsx("path", { d: "m12 4-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z" }), "ArrowForward"), ke = E(t.jsx("path", { d: "m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8z" }), "ArrowUpward"),
|
|
10
|
+
const Re = E(t.jsx("path", { d: "M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20z" }), "ArrowBack"), Te = E(t.jsx("path", { d: "m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8z" }), "ArrowDownward"), ve = E(t.jsx("path", { d: "m12 4-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z" }), "ArrowForward"), ke = E(t.jsx("path", { d: "m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8z" }), "ArrowUpward"), A = o.memo((v) => {
|
|
11
11
|
const { label: h, value: c, options: l, onSelect: d, tabIndex: C = 0, ...F } = v, [I, y] = o.useState(() => ee(c, l));
|
|
12
12
|
o.useEffect(() => {
|
|
13
13
|
y(ee(c, l));
|
|
14
14
|
}, [c, l]);
|
|
15
|
-
const
|
|
15
|
+
const D = V((u) => {
|
|
16
16
|
y(u.target.value), d?.(l[u.target.value]);
|
|
17
17
|
}, [d, l]), a = o.useMemo(() => Object.keys(l).map((u) => t.jsx(je, { value: u, children: u }, u)), [l]);
|
|
18
|
-
return t.jsxs(Ce, { sx: { minWidth: 135 }, size: "small", children: [t.jsx(ye, { children: h }), t.jsx(be, { inputProps: { tabIndex: C }, value: I, label: h, onChange:
|
|
18
|
+
return t.jsxs(Ce, { sx: { minWidth: 135 }, size: "small", children: [t.jsx(ye, { children: h }), t.jsx(be, { inputProps: { tabIndex: C }, value: I, label: h, onChange: D, sx: { backgroundImage: `linear-gradient(${R("#fff", T(5))}, ${R("#fff", T(5))})` }, ...F, children: a })] });
|
|
19
19
|
}), Z = { Workbook: "workbook", Sheet: "sheet" }, _ = { enter: 140, exit: 140 }, ne = { Formulas: p.Content.Formulas, Values: p.Content.Values, Notes: p.Content.Notes, Comments: p.Content.Comments }, te = { ...ne };
|
|
20
20
|
delete te.Values;
|
|
21
21
|
const Se = { "By Rows": !0, "By Columns": !1 }, ee = (v, h) => {
|
|
@@ -25,9 +25,9 @@ const Se = { "By Rows": !0, "By Columns": !1 }, ee = (v, h) => {
|
|
|
25
25
|
if (h[d] === v) return d;
|
|
26
26
|
}
|
|
27
27
|
}, Ie = o.memo((v) => {
|
|
28
|
-
const { replace: h = !1, findText: c, replaceText: l, findOptions: d, replaceOptions: C, title: F, onHide: I, onFindOrReplace: y, ...
|
|
28
|
+
const { replace: h = !1, findText: c, replaceText: l, findOptions: d, replaceOptions: C, title: F, onHide: I, onFindOrReplace: y, ...D } = v, a = o.useRef(null), u = o.useRef(null), M = o.useRef(null), $ = o.useRef(null), z = o.useRef(null), B = o.useRef(null), H = (e, n) => {
|
|
29
29
|
n && (n.start(e, { center: !1 }), setTimeout(() => n.stop(e), 180));
|
|
30
|
-
}, [
|
|
30
|
+
}, [N, w] = o.useState(!1), [L, se] = o.useState(!1), [f, K] = o.useState(h), [W, P] = o.useState(!1), [G, U] = o.useState(!1), [i, r] = o.useState({ findText: null, replaceText: null, replace: h, replaceOptions: {}, findOptions: { matchCase: !1, matchEntireCell: !1, useRegex: !1, orientation: b.Orientation.Row, fields: [p.Content.Formulas] }, scope: Z.Sheet }), k = V(async (e, n, s, S) => {
|
|
31
31
|
if (!y) return;
|
|
32
32
|
const x = { ...i };
|
|
33
33
|
x.replaceOptions = { ...x.replaceOptions }, x.findOptions = { ...x.findOptions }, x.replaceOptions.maxCount = s ? void 0 : 1, x.replace = n, n && i.findOptions.fields?.[0] === p.Content.Values && (x.findOptions.fields = [p.Content.Formulas]), x.findOptions.reverse = !e;
|
|
@@ -36,12 +36,12 @@ const Se = { "By Rows": !0, "By Columns": !1 }, ee = (v, h) => {
|
|
|
36
36
|
}, [i, y]);
|
|
37
37
|
o.useEffect(() => {
|
|
38
38
|
P(!1);
|
|
39
|
-
}, [i,
|
|
39
|
+
}, [i, L, f]);
|
|
40
40
|
const J = V((e, n) => {
|
|
41
41
|
if (e.keyCode === le.Enter) {
|
|
42
42
|
if (!i.findText) return;
|
|
43
43
|
let s = !0, S = !1;
|
|
44
|
-
e.shiftKey && (s = !1), n ? (e.ctrlKey && e.altKey && (S = !0),
|
|
44
|
+
e.shiftKey && (s = !1), n ? (e.ctrlKey && e.altKey && (S = !0), H(e, S ? B.current : z.current)) : H(e, s ? $.current : M.current), k(s, n, S, !1);
|
|
45
45
|
}
|
|
46
46
|
}, [i]), Q = o.useRef(null);
|
|
47
47
|
o.useLayoutEffect(() => {
|
|
@@ -49,20 +49,20 @@ const Se = { "By Rows": !0, "By Columns": !1 }, ee = (v, h) => {
|
|
|
49
49
|
const n = { ...e };
|
|
50
50
|
n.findText = c && c.length > 0 ? c : e.findText ?? "", w(!0), l !== void 0 && (n.replaceText = l), d && (n.findOptions = { ...n.findOptions, ...d }), n.replaceText || (n.replaceText = ""), n.replaceOptions && (n.replaceOptions = { ...n.replaceOptions }), C && (n.replaceOptions = { ...n.replaceOptions, ...C }), i.findOptions.fields?.[0] || (i.findOptions.fields = [p.Content.Formulas]);
|
|
51
51
|
const s = !(!C && l === void 0);
|
|
52
|
-
return s &&
|
|
53
|
-
}),
|
|
52
|
+
return s && K(s), n;
|
|
53
|
+
}), G || Q.current?.focus();
|
|
54
54
|
}, [c, l, d, C]), o.useEffect(() => {
|
|
55
55
|
f ? (i.findOptions.fields[0], p.Content.Values) : w(!0);
|
|
56
56
|
}, [f]), o.useEffect(() => {
|
|
57
|
-
if (
|
|
57
|
+
if (N && a.current && i.findText === a.current.value) return a.current === document.activeElement || a.current.contains(document.activeElement) ? (a.current?.select(), void w(!1)) : void a.current.addEventListener("focus", () => {
|
|
58
58
|
a.current?.select(), w(!1);
|
|
59
59
|
}, { once: !0 });
|
|
60
|
-
}, [
|
|
60
|
+
}, [N, i]);
|
|
61
61
|
const [ie, { width: X }] = ae();
|
|
62
|
-
return t.jsx(re, { ref: Q, title: F ?? (f ? "Find & Replace" : "Find"), initialPosition: { y: "35" }, autoFocusSel: ".input", onHide: I, onFocus: () =>
|
|
63
|
-
|
|
64
|
-
}, PaperProps: { elevation:
|
|
65
|
-
if (e.key === "h" && e.ctrlKey)
|
|
62
|
+
return t.jsx(re, { ref: Q, title: F ?? (f ? "Find & Replace" : "Find"), initialPosition: { y: "35" }, autoFocusSel: ".input", onHide: I, onFocus: () => U(!0), onBlur: () => {
|
|
63
|
+
U(!1), P(!1);
|
|
64
|
+
}, PaperProps: { elevation: G ? 3 : 1 }, ...D, children: t.jsxs(ce, { dividers: !0, ref: ie, sx: { display: "flex", flexDirection: "column", paddingLeft: (e) => e.spacing(1.5), paddingRight: (e) => e.spacing(1.5) }, onKeyDown: (e) => {
|
|
65
|
+
if (e.key === "h" && e.ctrlKey) K(!0), a.current?.contains(document.activeElement) && u.current?.focus();
|
|
66
66
|
else if (e.key === "f" && e.ctrlKey) a.current?.focus();
|
|
67
67
|
else if (e.key === "c" && e.altKey) r((n) => {
|
|
68
68
|
const s = { ...n };
|
|
@@ -80,11 +80,11 @@ const Se = { "By Rows": !0, "By Columns": !1 }, ee = (v, h) => {
|
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
82
|
e.preventDefault();
|
|
83
|
-
}, children: [t.jsxs(O, { sx: { display: "flex", flexDirection: "row", gap: (e) => e.spacing(1) }, children: [t.jsxs(O, { sx: { display: "flex", flexDirection: "row", alignItems: "start", gap: (e) => e.spacing(0.25), paddingTop: "3px" }, children: [t.jsx(g, { selected:
|
|
83
|
+
}, children: [t.jsxs(O, { sx: { display: "flex", flexDirection: "row", gap: (e) => e.spacing(1) }, children: [t.jsxs(O, { sx: { display: "flex", flexDirection: "row", alignItems: "start", gap: (e) => e.spacing(0.25), paddingTop: "3px" }, children: [t.jsx(g, { selected: L, onSelectToggle: (e) => {
|
|
84
84
|
se(e);
|
|
85
85
|
}, preventFocus: !0, label: "Toggle Additional Options", icon: m(t.jsx(pe, {})) }), t.jsx(g, { selected: f, onSelectToggle: (e) => {
|
|
86
|
-
|
|
87
|
-
}, preventFocus: !0, label: "Toggle Replace", icon: m(t.jsx(de, {})), shortcut: { key: f ? "F" : "H", modifiers: [j.Ctrl] } })] }), t.jsxs(O, { sx: { display: "flex", flexDirection: "column", maxWidth: "100%", boxSizing: "border-box" }, children: [t.jsxs(O, { sx: { display: "flex", flexDirection: "row", alignItems: "center" }, children: [t.jsx(
|
|
86
|
+
K(e);
|
|
87
|
+
}, preventFocus: !0, label: "Toggle Replace", icon: m(t.jsx(de, {})), shortcut: { key: f ? "F" : "H", modifiers: [j.Ctrl] } })] }), t.jsxs(O, { sx: { display: "flex", flexDirection: "column", maxWidth: "100%", boxSizing: "border-box" }, children: [t.jsxs(O, { sx: { display: "flex", flexDirection: "row", alignItems: "center" }, children: [t.jsx(q, { label: "Find", InputLabelProps: { shrink: !0 }, InputProps: { sx: { paddingRight: (e) => e.spacing(1), minWidth: X > 460 ? "20em" : void 0, backgroundImage: `linear-gradient(${R("#fff", T(5))}, ${R("#fff", T(5))})` }, inputProps: { draggable: !1, ref: a, className: "input", autoFocus: !0, spellCheck: !1, autoComplete: "off", sx: { paddingTop: (e) => e.spacing(1.25), paddingBottom: (e) => e.spacing(0.75) } }, endAdornment: t.jsx(ue, { sx: { transform: "scale(0.75) translateX(16px)" }, position: "end", children: t.jsxs(O, { sx: { display: "flex", alignItems: "center", flexDirection: "row", gap: "1px" }, children: [t.jsx(g, { selected: i.findOptions.matchCase, onSelectToggle: (e) => {
|
|
88
88
|
r((n) => {
|
|
89
89
|
const s = { ...n };
|
|
90
90
|
return s.findOptions.matchCase = e, s;
|
|
@@ -99,7 +99,7 @@ const Se = { "By Rows": !0, "By Columns": !1 }, ee = (v, h) => {
|
|
|
99
99
|
const s = { ...n };
|
|
100
100
|
return s.findOptions.useRegex = e, s;
|
|
101
101
|
});
|
|
102
|
-
}, label: "Use Regular Expression", shortcut: { key: "R", modifiers: [j.Alt] }, icon: m(t.jsx(ge, {})) })] }) }) }, sx: { flex: "1 1 100%", marginRight: (e) => e.spacing(1), "& .MuiOutlinedInput-notchedOutline": { borderColor: (e) =>
|
|
102
|
+
}, label: "Use Regular Expression", shortcut: { key: "R", modifiers: [j.Alt] }, icon: m(t.jsx(ge, {})) })] }) }) }, sx: { flex: "1 1 100%", marginRight: (e) => e.spacing(1), "& .MuiOutlinedInput-notchedOutline": { borderColor: (e) => W ? `${e.palette.error.main} !important` : void 0 }, "& .MuiInputLabel-outlined": { color: (e) => W ? `${e.palette.error.main} !important` : void 0 } }, value: i.findText ?? "", onChange: (e) => {
|
|
103
103
|
r((n) => {
|
|
104
104
|
const s = { ...n };
|
|
105
105
|
return s.findText = e.target.value, s;
|
|
@@ -108,11 +108,11 @@ const Se = { "By Rows": !0, "By Columns": !1 }, ee = (v, h) => {
|
|
|
108
108
|
e.stopPropagation();
|
|
109
109
|
} }), t.jsx(g, { selected: i.findOptions.reverse, onSelectToggle: (e) => {
|
|
110
110
|
k(!1, !1);
|
|
111
|
-
}, touchRippleRef:
|
|
111
|
+
}, touchRippleRef: M, label: "", shortcut: { key: "Enter", modifiers: [j.Shift] }, icon: m(i.findOptions.orientation !== b.Orientation.Column ? t.jsx(Re, {}) : t.jsx(ke, {})), disabled: !i.findText }), t.jsx(g, { selected: !i.findOptions.reverse, onSelectToggle: (e) => {
|
|
112
112
|
k(!0, !1);
|
|
113
|
-
}, touchRippleRef:
|
|
113
|
+
}, touchRippleRef: $, label: "Next Match", shortcut: { key: "Enter" }, icon: m(i.findOptions.orientation !== b.Orientation.Column ? t.jsx(ve, {}) : t.jsx(Te, {})), disabled: !i.findText })] }), t.jsx(Y, { in: f, timeout: _, onExit: () => {
|
|
114
114
|
a.current?.focus();
|
|
115
|
-
}, children: t.jsxs(O, { sx: { display: "flex", flexDirection: "row", alignItems: "center", marginTop: (e) => e.spacing(2) }, children: [t.jsx(
|
|
115
|
+
}, children: t.jsxs(O, { sx: { display: "flex", flexDirection: "row", alignItems: "center", marginTop: (e) => e.spacing(2) }, children: [t.jsx(q, { label: "Replace", InputLabelProps: { shrink: !0 }, InputProps: { sx: { paddingRight: (e) => e.spacing(1), backgroundImage: `linear-gradient(${R("#fff", T(5))}, ${R("#fff", T(5))})` }, inputProps: { ref: u, className: "input", spellCheck: !1, autoComplete: "off", sx: { paddingTop: (e) => e.spacing(1.25), paddingBottom: (e) => e.spacing(0.75) } } }, sx: { flex: "1 1 100%", marginRight: (e) => e.spacing(1) }, value: i.replaceText ?? "", onChange: (e) => {
|
|
116
116
|
r((n) => {
|
|
117
117
|
const s = { ...n };
|
|
118
118
|
return s.replaceText = e.target.value, s;
|
|
@@ -121,21 +121,21 @@ const Se = { "By Rows": !0, "By Columns": !1 }, ee = (v, h) => {
|
|
|
121
121
|
e.stopPropagation();
|
|
122
122
|
} }), t.jsx(g, { onSelectToggle: (e) => {
|
|
123
123
|
k(!0, !0);
|
|
124
|
-
}, touchRippleRef:
|
|
124
|
+
}, touchRippleRef: z, label: "Replace", shortcut: { key: "Enter" }, icon: m(t.jsx(me, {})), disabled: !i.findText }), t.jsx(g, { onSelectToggle: (e) => {
|
|
125
125
|
k(!0, !0, !0);
|
|
126
|
-
}, touchRippleRef:
|
|
126
|
+
}, touchRippleRef: B, label: "Replace All", shortcut: { key: "Enter", modifiers: [j.Ctrl, j.Alt] }, icon: m(t.jsx(he, {})), disabled: !i.findText })] }) })] })] }), t.jsx(Y, { in: L, timeout: _, onExit: () => {
|
|
127
127
|
a.current?.focus();
|
|
128
|
-
}, children: t.jsxs(O, { sx: { minHeight: "10px", flex: "1 1 100%", display: "flex", flexDirection: "column", gap: (e) => e.spacing(0.5), marginTop: (e) => e.spacing(1) }, children: [t.jsx(Oe, { orientation: "horizontal", sx: { marginBottom: (e) => e.spacing(1.5) } }), t.jsxs(O, { sx: { display: "flex", flexDirection: X >= 413 ? "row" : "column", justifyContent: "space-evenly", alignItems: "center", rowGap: (e) => e.spacing(2) }, tabIndex: -1, children: [t.jsx(
|
|
128
|
+
}, children: t.jsxs(O, { sx: { minHeight: "10px", flex: "1 1 100%", display: "flex", flexDirection: "column", gap: (e) => e.spacing(0.5), marginTop: (e) => e.spacing(1) }, children: [t.jsx(Oe, { orientation: "horizontal", sx: { marginBottom: (e) => e.spacing(1.5) } }), t.jsxs(O, { sx: { display: "flex", flexDirection: X >= 413 ? "row" : "column", justifyContent: "space-evenly", alignItems: "center", rowGap: (e) => e.spacing(2) }, tabIndex: -1, children: [t.jsx(A, { label: "Within", value: i.scope, options: Z, onSelect: (e) => {
|
|
129
129
|
r((n) => {
|
|
130
130
|
const s = { ...n };
|
|
131
131
|
return s.scope = e, s;
|
|
132
132
|
});
|
|
133
|
-
} }), t.jsx(
|
|
133
|
+
} }), t.jsx(A, { label: "Search", value: i.findOptions.orientation !== b.Orientation.Column, options: Se, onSelect: (e) => {
|
|
134
134
|
r((n) => {
|
|
135
135
|
const s = { ...n };
|
|
136
136
|
return s.findOptions.orientation = e ? b.Orientation.Row : b.Orientation.Column, s;
|
|
137
137
|
});
|
|
138
|
-
} }), t.jsx(
|
|
138
|
+
} }), t.jsx(A, { label: "Look in", value: f && i.findOptions.fields?.[0] === p.Content.Values ? p.Content.Formulas : i.findOptions.fields?.[0], options: f ? te : ne, onSelect: (e) => {
|
|
139
139
|
r((n) => {
|
|
140
140
|
const s = { ...n };
|
|
141
141
|
return s.findOptions.fields = [e], s;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.6.
|
|
2
|
+
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.6.18
|
|
3
3
|
*
|
|
4
4
|
* (C) 2025-present SheetXL Inc. & Michael T. Ford
|
|
5
5
|
* License: The license can be found at https://www.sheetxl.com/license.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.6.
|
|
2
|
+
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.6.18
|
|
3
3
|
*
|
|
4
4
|
* (C) 2025-present SheetXL Inc. & Michael T. Ford
|
|
5
5
|
* License: The license can be found at https://www.sheetxl.com/license.
|
|
@@ -13,7 +13,7 @@ const m = { reactUrl: "https://esm.sh/react@19.1.0", reactJsxTransform: "https:/
|
|
|
13
13
|
t.type = "importmap", t.textContent = JSON.stringify({ imports: { react: c, "react/jsx-runtime": o, "react-dom": s, "react-dom/client": n } }), document.head.appendChild(t);
|
|
14
14
|
}
|
|
15
15
|
await new Promise((t) => setTimeout(t, 0));
|
|
16
|
-
const r = await Promise.all([import("./
|
|
16
|
+
const r = await Promise.all([import("./D7IYYEWkOU3nn0lW.js").then((t) => t.R), import("./yZi2kJacWsVeNKjd.js").then((t) => t.j), import("./J_hYYA8_HqfoWlon.js").then((t) => t.i), import("./DgkebXJejGkJ7VDy.js").then((t) => t.c), import("./CjfXdbGZo4dVF6sI.js").then((t) => t.aL)]);
|
|
17
17
|
return { React: r[0], ReactJSXTransform: r[1], ReactDOM: r[2], ReactDOMClient: r[3], StudioMUI: r[4] };
|
|
18
18
|
})(), a));
|
|
19
19
|
export {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.6.
|
|
2
|
+
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.6.18
|
|
3
3
|
*
|
|
4
4
|
* (C) 2025-present SheetXL Inc. & Michael T. Ford
|
|
5
5
|
* License: The license can be found at https://www.sheetxl.com/license.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.6.
|
|
2
|
+
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.6.18
|
|
3
3
|
*
|
|
4
4
|
* (C) 2025-present SheetXL Inc. & Michael T. Ford
|
|
5
5
|
* License: The license can be found at https://www.sheetxl.com/license.
|