@ioca/react 1.5.4 → 1.5.6
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/lib/cjs/components/editor/controls.js +19 -37
- package/lib/cjs/components/editor/controls.js.map +1 -1
- package/lib/cjs/components/editor/editor.js +34 -27
- package/lib/cjs/components/editor/editor.js.map +1 -1
- package/lib/cjs/components/editor/memtion.js +99 -6
- package/lib/cjs/components/editor/memtion.js.map +1 -1
- package/lib/cjs/components/picker/colors/index.js +6 -5
- package/lib/cjs/components/picker/colors/index.js.map +1 -1
- package/lib/cjs/components/select/select.js +4 -4
- package/lib/cjs/components/select/select.js.map +1 -1
- package/lib/cjs/components/tabs/tabs.js +1 -1
- package/lib/cjs/components/tabs/tabs.js.map +1 -1
- package/lib/css/index.css +1 -1
- package/lib/css/index.css.map +1 -1
- package/lib/css/reset.css +2 -2
- package/lib/es/components/editor/controls.js +20 -38
- package/lib/es/components/editor/controls.js.map +1 -1
- package/lib/es/components/editor/editor.js +35 -28
- package/lib/es/components/editor/editor.js.map +1 -1
- package/lib/es/components/editor/memtion.js +99 -7
- package/lib/es/components/editor/memtion.js.map +1 -1
- package/lib/es/components/picker/colors/index.js +6 -5
- package/lib/es/components/picker/colors/index.js.map +1 -1
- package/lib/es/components/select/select.js +4 -4
- package/lib/es/components/select/select.js.map +1 -1
- package/lib/es/components/tabs/tabs.js +1 -1
- package/lib/es/components/tabs/tabs.js.map +1 -1
- package/lib/index.js +162 -80
- package/lib/types/components/editor/type.d.ts +1 -1
- package/lib/types/components/picker/type.d.ts +3 -1
- package/package.json +1 -1
package/lib/css/index.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["stdin"],"names":[],"mappings":"AAAQ,sBACA,qBACA,qBACA,sBACA,yBA0pFA,qDAzpFR,eACI,kBACA,aACA,eACA,qBACA,yBACA,SACA,WACA,eACA,4BAEA,qCACI,sBAGJ,qCACI,uBAGJ,mCACI,sBAIR,gBACI,iBAEA,+FAGI,cAGJ,iCACI,kBACA,UACA,WACA,kBACA,qCACA,4BAIR,oBACI,4BACA,8BACA,sBACA,gBACA,oBAGJ,cACI,0BACA,kEACA,cACA,aACA,qBACA,6BACA,sBACA,mEACA,eAEA,qBACI,mBAGJ,2EAGI,4BACA,+BAGJ,8BACI,4BAGJ,8BACI,6BAGJ,4BACI,4BAIR,oBACI,2BACA,uCAGJ,mBACI,6CACA,gBACA,yCACA,yBAGJ,SACI,uBACA,OACA,WACA,cACA,aACA,6BACA,yBACA,sBACA,mBAEA,kGAEI,wBAGJ,mBACI,0BAGJ,wBACI,iBAGJ,kBACI,uCACA,mBAIR,iBACI,wBACA,cACA,kBACA,UACA,eACA,mBACA,4BACA,oBAGJ,iBACI,sBAGJ,iBACI,uBAGJ,eACI,sBAGJ,YACI,cACA,WACI,qCAGJ,eACA,kBAGJ,iCAEI,wCACA,aACA,mBACA,mBAEA,+CACI,sBACA,aAIR,iBACI,eACA,+BACA,kCAGJ,gBACI,cACA,gCACA,mCAIA,iEAEI,cAIR,gBACI,kBACA,uBACA,iBAEF,QACE,yBACA,aACA,sBACA,uCACA,4BACA,4BACA,cAEF,iBACE,gCAEF,eACE,aACA,mBACA,4BACA,UAEF,gBACE,OAEF,eACE,gBACA,aACA,mBACA,4BACA,UAEF,SACE,eACA,WACA,aACA,sBACA,SACA,6BAGA,+BACE,UAGJ,sBACI,4BACA,cAGJ,oBACI,2BACA,iBAEA,gCACI,gBACA,eAGJ,yCACI,kBACA,QACA,WACA,qCACA,0BAIR,YACI,aACA,gBACA,wBACA,kBACA,mDACA,6CACA,eAEA,qBACI,gBACA,iBAIR,qBACI,wCACA,+CAEA,sCACI,+CAKJ,oCACI,wCAEA,mDACI,yDAKZ,4BACI,sDACA,iBAEA,kCACI,wCACA,wDAEA,mDACI,UAGJ,oEACI,UAKZ,iBACI,gBACA,aACA,mBACA,wCACA,QACA,4BACA,2CACA,iCACA,gBACA,4BAGJ,kCACI,UAGJ,6BACI,qCAGJ,4BACI,oCAGJ,yBACI,YACA,cACA,gBACA,YACA,wBACA,mBACA,gBAGJ,kCACI,cACA,uBACA,mCAIA,oCACI,wDACA,UACA,mBACA,uBACA,cACA,iBACA,4BAGJ,qDACI,UAIR,oBACI,kBACA,iBACA,UACA,gBACA,iBAEA,0BACI,gCAIR,uBACI,eAEA,6BACI,2CAIR,mBACI,aACA,sBACA,cACA,WACA,gBACA,qBAIA,qCACI,qBACA,yBAGJ,oCACI,wBAKJ,4DACI,wBAKJ,4DACI,wBAEL,YACD,QAEF,iBACE,oBACA,qBACA,UACA,4BACA,sBAEE,yCACE,0CAEF,0CACE,0CAEF,0CACE,gBAIF,2CACE,gBAIN,oBACE,cACA,kBACA,aACA,eACA,WACA,oBAEF,iBACE,oBACA,6BACA,iBACA,sBACA,qBACA,uBACE,aAGJ,kBACE,kBACA,aACA,eACA,eACA,cACA,gBACA,gBACA,sBACA,6BACA,UACA,kBAEF,mBACE,QACA,SAEF,mBACE,eACA,YACA,eACA,oBACA,0CACA,0BAEE,+BACE,oCACA,qCAIN,oBACE,kBACA,0CAEF,mBACE,aAEF,sGAIE,YACA,kBACA,6BAEF,0BACE,SACA,QACA,WACA,UACA,kDACA,iDACA,iCACA,kBAGA,yBACE,OACA,QACA,UACA,WACA,6BACA,oCACA,kBACA,6BACA,mCAGA,gCACE,YAEF,wCACE,YAKJ,6CACE,mCACA,mDACE,wBAGJ,4CACE,mCACA,kDACE,uCACA,iCACA,mCAGJ,2CACE,wBAIF,oCACE,cACA,gBACA,eACA,aACA,mBACA,mBACA,kBACA,kCAEF,0CACE,gCACA,4BAEF,4CACE,qCACA,wBACA,+BAGJ,mBACE,kBACA,mCACA,yBACE,2CACA,WACA,WACA,SACA,QACA,gCACA,4BAGJ,oBACE,gBACA,eACA,sBACA,oBAGA,sCACE,4CACA,8CACE,kCAGJ,wCACE,qBAIF,sCACE,4CACA,8CACE,kCAGJ,wCACE,qBAIF,oCACE,0CACA,4CACE,gCAGJ,sCACE,mBAGJ,SACE,kBACA,oBACA,kBACA,cACA,4BAEF,iBACE,kBACA,UACA,oBACA,kBACA,oBACA,wCACA,sBACA,qCACA,4BACA,yBACA,gBACA,oBACA,6BACE,WACA,UACA,UACA,kBACA,gBACA,oBAEF,uDAEE,wCAGJ,eACE,aAEF,oBACE,aACA,SAEF,6BACE,sBAEF,qBACE,cACA,qCACA,qBAEF,qBACE,OAEF,oBACE,aACA,sBACA,gBACA,YACA,QACA,kBACA,sBAEJ,mBACI,eACA,QACA,YACA,oBACA,iCACA,0BACA,6BACA,UACA,aAEA,4BACI,UACA,qBAIR,UACI,kBACA,aACA,sBACA,eACA,gBACA,cACA,yBACA,6BACA,6BACA,4BAGJ,eACI,iBACA,mCAGJ,cACI,eACA,mCAGJ,gBACI,iBACA,kCAGJ,iBACI,eACA,kCAGJ,oBACI,UACA,eACA,qBAGJ,kCAEI,aACA,mBACA,aAEA,8CACI,aAIR,kBACI,OACA,kBAGJ,gBACI,kBACA,aACA,sBACA,4BAEF,MACE,sBAEJ,SACI,kBACA,oBACA,mBACA,uBACA,kBACA,4BACA,gBACA,sBACA,qCACA,4BACA,cACA,8BACI,UACA,4BAEJ,aACI,sBACA,WACA,YACA,iBAGR,eACI,kBACA,QACA,aACA,mBACA,uBACA,4BACA,qCAEJ,UACI,aACA,sBACA,kBAGI,wJAEI,4BAIZ,qBACI,4BACA,+EAEI,YAGR,mBACI,aACA,QACA,gCACA,gBACA,YACA,8CACA,6BACA,0BACI,wBACA,gCACI,sBACA,sDACI,UAKhB,sBACI,kBACA,UACA,SACA,SACA,6BACA,UACA,YACA,kBACA,cACA,oBACA,6BACA,4BAEJ,kBACI,OACA,aACA,uBACA,gCACA,8CACA,6BACA,cACA,qBACA,qBACA,qBACA,aACA,8BACI,4BAEJ,gDAEI,4BAEJ,oBACI,kBAEJ,sBACI,SAEJ,+BACI,+BACA,qBAIR,kBACI,aACA,eACA,YACA,gBACA,gBACA,4BACA,qCACA,yBACA,4BACA,cACA,+BACI,qBAEJ,sCACI,wBAIR,eACI,oBACA,mBACA,eACA,wBACA,iBAEJ,qBACI,aACA,sBACA,uBACA,mBACA,SACA,kBACA,wBACA,sBACA,0BAGJ,gBACI,oBACA,UACA,WACA,0CAEJ,QACI,aACA,cAEJ,aACI,aACA,eACA,uBACA,6BACA,4BAEJ,sBACI,0CACA,4CACI,gBAEJ,wCACI,yBACA,0BAEJ,uCACI,6BACA,4BAEJ,4BACI,0CACA,UAGR,eACI,kBACA,eACA,iBACA,mBACA,8BACA,qBACI,6CAEJ,kCACI,qCAGR,mBACI,sBAEJ,mBACI,eACA,QACA,YACA,aACA,6BACA,UACA,oBACA,aACA,gBACA,kCACI,UAGR,kBACI,iCACA,0BACA,iCACI,qBAGR,oBACI,eAEJ,SACI,kBACA,aACA,sBACA,YACA,eACA,gBACA,kBACA,4BACA,6BACA,6BACA,6BACA,iBACI,oCAGR,yBACI,UACA,eACA,mBAEJ,gCAEI,kBACA,aACA,mBACA,aACA,SACA,4CACI,aAGR,kBACI,iBAEJ,gBACI,uBAEJ,iBACI,kBACA,OACA,gBACA,gBAGA,wBACI,kBACA,aACA,sBACA,4BAGR,YACI,eACA,WACA,oBACA,aACA,sBACA,uBACA,cACA,6BACA,eAGJ,WACI,kBACA,mBACA,mBACA,UACA,6BACA,sDACA,qCACA,4BACA,yBACA,4BAEA,4BACI,UACA,0BAGN,cACE,aAEF,qBACE,gBAEF,QACE,aACA,eAEF,eACE,uBACA,8BACE,iBAGJ,YACE,cACA,kBACA,aACA,+BACA,4BACA,eAEF,qBACE,YACA,qCACE,YACA,oBAGJ,gBACE,kBACA,WACA,6BACA,4BACA,sBACA,6BAEF,mBACE,kBACA,QACA,QACA,aACA,gBACA,cACA,wCACA,6BACA,sBACA,yBACA,iBACA,gBAEF,uEAEE,wCAEF,mBACE,kBAEF,wBACE,6BACA,mBAEF,yBACE,kBACA,SACA,QACA,gCACA,gBAEF,SACI,kBACA,YACA,UACA,oBACA,uCACA,4BACA,6BACA,yBACA,4BAGJ,eACI,kBACA,UACA,YACA,oBACA,YACA,oBAEA,oBACI,uBAEP,cACC,aACA,mBACA,SAEJ,QACI,0BACA,wBACA,kBACA,oBACA,mBACA,uBACA,gBACA,cACA,iBACA,4BACA,+BACA,6BACA,iBACA,eACA,mBACA,aACA,mBACA,6BACA,4BACI,WAEJ,6BACI,kBACA,QACA,UACA,qCACA,4BAEJ,cACI,0CAEJ,sBACI,gCACA,mCACA,eAEJ,uBACI,oBACA,eAGN,aACE,aACA,gBAEF,sBACE,sBACA,wCACE,iBACA,WACA,WAGJ,eACE,cAEF,eACE,OACA,cAEF,kBACE,kBACA,aACA,uBACA,mBACA,UACA,YACA,0BACA,iBACA,6BACA,kBACA,iBACA,+DAEE,iCACA,6GACE,UAIN,uBACE,aACA,kBACA,UACA,oBACA,UACA,6BACA,mBACA,4BACA,eAEF,SACE,kBACA,oBACA,eACA,QAEF,eACE,yBACA,8BACA,gBAEF,cACE,oBACA,qBACA,4BAEE,mCACE,0CACA,qCAKJ,oCACE,QACA,SAGJ,gCACE,0CAEF,gCACE,2CAEF,8BACE,0CAEF,iBACE,cACA,kBACA,aACA,eACA,WACA,oBAEF,wBACE,UAEF,cACE,oBACA,iBACA,6BACA,iBACA,sBACA,qBAEF,eACE,kBACA,aACA,eACA,eACA,cACA,cACA,gBACA,gBACA,kBACA,oBACA,UACA,kBACA,0CAEF,iBACE,6BAGA,uCACE,kBACA,+BACA,qCACA,gBACA,qDACE,wBAIN,wBACE,qBAEF,gBACE,aACA,8BACE,cACA,iBACA,gBACA,gBACA,mBACA,kCACA,oCACE,qCACA,4BAGJ,sCACE,+BACA,wBACA,+BAGJ,iBACE,gBACA,eACA,sBACA,oBAGA,gCACE,4CAEF,kCACE,qBAIF,gCACE,4CAEF,kCACE,qBAIF,8BACE,0CAEF,gCACE,mBAGJ,SACE,gBAEF,eACE,oBACA,sBAEF,cACE,cAEF,UACI,aACA,SAGJ,mBACI,eACA,qBAEA,0BACI,kBACA,eACA,oBACA,uCAIR,kBACI,cACA,aACA,sBACA,gBACA,YACA,QACA,kBACA,sBAEA,+BACI,sBACA,mBACA,qBAEA,kDACI,wBACA,+BAEA,yEACI,UAIR,wCACI,oBAOJ,2DACI,yBAKZ,uBACI,UAGJ,iBACI,gBACA,MACA,UACA,aACA,eACA,qCACA,4BACA,oDAEA,uBACI,aAEL,QACD,aACA,eACA,SACA,gBAEF,iBACE,sBACA,8BACE,mBAEE,kEACE,mBAKR,aACE,aACA,sBACA,SACA,cACA,6BACA,wBACE,UACA,wCACE,aAGJ,kCACE,WACA,kDACE,mBAGJ,iCACE,WAEF,mBACE,UAGJ,mBACE,aACA,mBACA,uBACA,cACA,YACA,kBACA,oBACA,0BACA,wBAEF,gBACE,OACA,kBACA,iCAEF,mBACE,aACA,mBACA,SACA,mBAEF,kBACE,aACA,sBACA,mBACA,SAEF,mBACE,aACA,sBACA,SAEJ,OACI,cACA,gCACA,wCACA,mCACA,kBACA,oBACA,mBACA,uBACA,eACA,eACA,cACA,4BACA,+BACA,6BACA,iBACA,eACA,mBACA,aACA,gBACA,gBACA,6BACA,mBACA,cACA,cAEA,2BACI,WAIR,cACI,gBAGJ,sBACI,oBACA,eACA,mBACA,qBAEA,0CACI,6BACA,eAIR,aACI,WAGJ,aACI,iBAGJ,eACI,cACA,WAGJ,aACI,WACA,cACA,gBACA,eAGJ,YACI,cACA,aACA,eACA,eAGJ,cACI,UACA,aAEA,sDAEI,UAIR,aACI,sCACA,uDAGJ,iBACI,wCACA,kCACA,2BACA,mCAGJ,YACI,wCACA,0BACA,2BACA,mCAGJ,eACI,wCACA,2BACA,mCAEA,qBACI,0BACA,0BAIR,gFAGI,sCAGJ,eACI,iBAGJ,eACI,aACA,eAGJ,uBACI,aAGI,gDACI,yBACA,4BAGJ,+CACI,0BACA,6BAKZ,sBACI,aACA,sBAGI,+CACI,yBACA,0BAGJ,8CACI,6BACA,4BAIZ,UACI,kBACA,eACA,iBAEI,gCACI,YAGR,gCACI,UAGR,gBACI,kBACA,gBACA,mBAEJ,eACI,aACA,sBAGA,8BACI,UAEJ,gCACI,UAIJ,mCACI,YACA,mBAEJ,kCACI,sBAEJ,kCACI,WAEJ,mCACI,WACA,WAEJ,kCACI,WACA,UACA,6BAEJ,kCACI,4BAGR,eACI,OACA,cACA,aACA,uBACA,mBACA,gBACA,6BAEJ,gBACI,kBACA,QACA,oBACA,mBACA,uBACA,4BACA,6BACA,6BACA,UAEJ,eACI,UAEJ,eACI,WAEJ,qBACI,cACA,aACA,uBACA,SAEJ,2BACI,kBACA,SACA,SACA,6BAEJ,oBACI,UACA,WACA,kBACA,cACA,wBACA,YACA,0BACI,WAEJ,uCACI,UAGR,OACI,6BACA,wBACA,kBACA,oBACA,mBACA,uBACA,kBACA,SACA,mBACA,4BACA,6BACA,mBACA,+BACA,6BACA,gBACA,cAEA,oBACI,kBACA,QACA,MACA,UACA,SACA,wBACA,mBACA,+BACA,gBACA,oBAEA,0BACI,0BACA,mBAKJ,gCACI,UACA,wCAKZ,aACI,cAGJ,eACI,gBACA,WAGJ,aACI,gBACA,oBAGJ,WACI,YACA,aACA,cACA,kBACA,8BACA,gDACA,cACA,mBAGJ,eACI,0BACA,0BAGJ,mBACI,wCACA,UAGJ,iBACI,eAEA,uBACI,mCACA,uCAGR,QACI,eACA,SAGA,yBACI,QAEJ,wBACI,eACA,qCACI,2BAGR,6BACI,6BAEJ,8CACI,SACA,yDACI,kBAIZ,sBACI,aACA,4BACA,uBACA,QACA,mBAEJ,qBACI,qBACA,sBAEJ,YACI,OACA,kBACA,aACA,uBACA,cACA,iBACA,sBACA,qBACA,QAEJ,+BACI,aAGA,mCACI,kBACA,0CACI,kBACA,SACA,OACA,QACA,WACA,oCACA,WACA,UAGR,yBACI,QACA,oCACI,8CACA,+BACA,0CACI,4BACA,sCAGR,uCACI,UACA,yBACA,4BACA,0CACA,wCACA,6CACI,+BAKR,yCACI,WACA,MACA,YACA,YACA,gBACA,sCAGA,yDACI,8CACA,+BACA,+DACI,4BACA,qCAGR,4DACI,4BACA,yCACA,kEACI,+BAMpB,WACI,wBACA,kBACA,UACA,aACA,mBACA,uBACA,kBACA,iBACA,cACA,UACA,mBACA,4BACA,iBACI,wBAEJ,wBACI,2BAIJ,4BACI,mBAEJ,+BACI,+BAIJ,2BACI,gBACA,8CACA,wCACI,6CACA,mCAIZ,iBACI,kBACA,UACA,SACA,eACA,UACA,UACA,6BACA,uBACI,mBACA,6BAIJ,kCACI,UAIR,gBACI,kBACA,WACA,OACA,SACA,+BACA,oBACA,6BACA,kBAGA,iCACI,QACA,iDACI,QACA,WACA,aACA,QACA,MAIZ,gBACI,kBACA,OAEJ,eACI,aACA,4BACI,cAGN,QACE,aACA,sBACA,QACA,qBAEF,oBACE,kBACA,cACA,aACA,gBACA,kBACA,eACA,0BACE,YACA,iBACA,OACA,WACA,kBACA,0BAGJ,oBACE,kBACA,aACA,mBACA,UACA,aACA,iBACA,4BACA,gBACA,qBACA,sCACE,oBAEF,mEAEE,+BACA,wBAGJ,cACE,gBAEF,kBACE,aAEF,iBACE,kBAEF,eACE,iBACA,6BACA,sBACA,qBACA,qBACE,qBACA,qCAGJ,qBACE,aACA,gBACA,mDAGA,oCACE,oDACA,kBAEF,mCACE,wBACA,UACA,kDACE,0BAIN,iBACE,sCAEF,sBACE,0BACA,wBACA,4CAEF,qBACE,KACE,6BAGJ,oBACE,oBACA,YACA,8CACE,mBAGJ,qBACE,aAEF,gBACE,cACA,aACA,eACA,SAGA,+CACE,sBAEF,8BACE,iBAGJ,eACE,aACA,eACA,WACA,YACA,iBACA,qBACE,aAGJ,iBACE,UACA,SACA,UACA,eACA,aACA,yBAEF,cACE,kBAEF,mBACE,oBACA,8BACA,+BACA,WACA,cACA,yBACE,UAGJ,eACE,kBACA,oBACA,mBACA,UACA,mBACA,6CACA,4BACA,qCACA,6BACA,eACA,gCACE,kBACA,8BACA,WACA,sCACE,8BACA,WAGJ,qBACE,6CACA,sCACE,UAIN,oBACE,kBACA,aACA,sBACA,mBACA,uBACA,UACA,8BACA,+BACA,4BACA,uCACA,eACA,uDAEE,WACA,YACA,iBAEF,wCACE,eACA,gBACA,mBACA,uBACA,eACA,mBAEF,qCACE,gBACA,kBACA,8BACA,WACA,2CACE,8BACA,WAIF,2CACE,UAIN,eACE,eACA,qBAEF,uBACE,aAEJ,oBACI,kBACA,QACA,gBACA,oBACA,sBACA,eACA,8BACI,kBACA,wBACA,YACA,4CACA,qBACA,kBAEJ,qCACI,UACA,yCAGN,SACE,kBACA,gBACA,4BACA,gBACA,eACE,WACA,YAGJ,kBACE,kBACA,OACA,YACA,QACA,aACA,mBACA,YACA,QACA,eACA,mBACA,iBACA,6BACA,qCACA,4BACA,yBACE,cAEF,0BACE,gBAEF,wBACE,UACA,qBAGJ,yBACE,UACA,oBAEF,iBACE,aACA,mBAEF,eACE,kBACA,aACA,mBACA,QAEF,gBACE,kBACA,UACA,YACA,SACA,+BACA,YACA,UACA,oBACA,4BACA,6BACA,4BACA,qCAEF,wBACE,kBAEE,8CACE,UACA,qBAIR,WACI,UACA,oBACI,gBACA,yBACA,eACA,eACA,+BACA,WACA,YAEJ,gCACI,kBACA,WACA,YAEJ,8BACI,aACA,mBACA,uBACA,WACA,YACA,6BACA,oBACA,sBACA,gCACI,mBAGR,+BACI,eACA,WACA,WACA,SACA,YACA,aACA,mBACA,QACA,qCACA,4BACA,eACA,mBACA,6BACA,qCACI,UAGR,sCACI,UAEJ,8BACI,aACA,sBACA,mBACA,iBACA,6BACA,4BAGN,YACE,4BAEF,qBACE,gCACA,uDACE,oCAGJ,iBACE,4BAEF,mBACE,aACA,8BACA,mBACA,aACA,6BACA,gBACA,4BACA,yBACE,6CAGJ,mBACE,SACA,aACA,iBAEF,oBACE,eACA,SACA,gBACA,6BACA,4BAEF,+DAEE,UAEF,uCACE,aACA,aAEF,qBACE,oBACA,WACA,yCACE,eACA,SACA,gBAGJ,SACE,YACA,UACA,WACA,qBAEF,cACE,kBACA,aACA,eACA,mBACA,kBACA,aACA,mBACA,uBACA,kBACA,qBACA,6BACA,4BACA,eACA,oBACE,qBACA,uCAGJ,oBACE,eAEF,cACE,YACA,iCACE,eAGJ,wCAEE,aACA,qCACA,QAEF,sCAEE,aACA,uBACA,mBAEF,mBACE,qBAEF,mBACE,0BACA,WACA,4BACA,oBACA,6BACA,mBACA,yBACE,UACA,kCAEF,2CACE,WAEF,sCACE,kCAEF,uCACE,gCACA,mCACA,UAEF,yCACE,WACA,mBAGJ,oBACE,mBACA,aACA,mBACA,WACA,qBACA,eAEF,qBACE,kBACA,aACA,qBACA,UACA,oBACA,iBACA,4BACA,0BACE,mBACA,iBAEF,2BACE,+BAGJ,mBACE,kBACA,WACA,oBAEF,iBACE,kBACA,QACA,UACA,YACA,SACA,6BACA,4BACA,aACA,oBACA,UACA,6BACA,qCACE,UACA,qBAGJ,oBACE,UACA,kBACA,aACA,sBACA,gBACA,UAEF,qBACE,iBACA,OACA,aACA,qCACA,UAEF,mBACE,OAEF,uCAEE,aACA,YACA,iBACA,4BACA,uBACA,mBACA,mDACE,6CAEF,+EACE,6BACA,gCACA,UAGJ,oBACE,kBACA,QACA,MAIJ,sBACI,kBACA,oBACA,mBACA,eACA,UAEJ,sBACI,qBACA,YACA,aACA,gCACA,4BACA,eACA,6BACA,4BACI,4BAGR,sBACI,aACA,QACA,eAEJ,oBACI,6BACA,eACA,mBACA,4BACA,0BACA,0BACI,0BAGR,uBACI,gBACA,mBAEF,oBACE,eAEF,cACE,aAEF,mBACE,cACA,kBACA,cACA,YACA,kBACA,aACA,sBACA,QACA,qBACA,sCACE,aAEF,oCACE,sCAGJ,mBACE,cACA,mBACA,4BACA,WACA,yBACE,gCACA,UAEF,4CACE,gBACA,MACA,SACA,UACA,6BACA,gCACA,UAGJ,mBACE,kBACA,WACA","file":"index.css"}
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["stdin"],"names":[],"mappings":"AAAQ,sBACA,qBACA,qBACA,sBACA,yBAkoFA,qDAjoFR,eACI,kBACA,aACA,eACA,qBACA,yBACA,SACA,WACA,eACA,4BAEA,qCACI,sBAGJ,qCACI,uBAGJ,mCACI,sBAIR,gBACI,iBAEA,+FAGI,cAGJ,iCACI,kBACA,UACA,WACA,kBACA,qCACA,4BAIR,oBACI,4BACA,8BACA,sBACA,gBACA,oBAGJ,cACI,0BACA,kEACA,cACA,aACA,qBACA,6BACA,sBACA,mEACA,eAEA,qBACI,mBAGJ,2EAGI,4BACA,+BAGJ,8BACI,4BAGJ,8BACI,6BAGJ,4BACI,4BAIR,oBACI,2BACA,uCAGJ,mBACI,6CACA,gBACA,yCACA,yBAGJ,SACI,uBACA,OACA,WACA,cACA,aACA,6BACA,yBACA,sBACA,mBAEA,kGAEI,wBAGJ,mBACI,0BAGJ,wBACI,iBAGJ,kBACI,uCACA,mBAIR,iBACI,wBACA,cACA,kBACA,UACA,eACA,mBACA,4BACA,oBAGJ,iBACI,sBAGJ,iBACI,uBAGJ,eACI,sBAGJ,YACI,cACA,WACI,qCAGJ,eACA,kBAGJ,iCAEI,wCACA,aACA,mBACA,mBAEA,+CACI,sBACA,aAIR,iBACI,eACA,+BACA,kCAGJ,gBACI,cACA,gCACA,mCAIA,iEAEI,cAIR,gBACI,kBACA,uBACA,iBAEF,QACE,yBACA,aACA,sBACA,uCACA,4BACA,4BACA,cAEF,iBACE,gCAEF,eACE,aACA,mBACA,4BACA,UAEF,gBACE,OAEF,eACE,gBACA,aACA,mBACA,4BACA,UAEJ,OACI,cACA,gCACA,wCACA,mCACA,kBACA,oBACA,mBACA,uBACA,eACA,eACA,cACA,4BACA,+BACA,6BACA,iBACA,eACA,mBACA,aACA,gBACA,gBACA,6BACA,mBACA,cACA,cAEA,2BACI,WAIR,cACI,gBAGJ,sBACI,oBACA,eACA,mBACA,qBAEA,0CACI,6BACA,eAIR,aACI,WAGJ,aACI,iBAGJ,eACI,cACA,WAGJ,aACI,WACA,cACA,gBACA,eAGJ,YACI,cACA,aACA,eACA,eAGJ,cACI,UACA,aAEA,sDAEI,UAIR,aACI,sCACA,uDAGJ,iBACI,wCACA,kCACA,2BACA,mCAGJ,YACI,wCACA,0BACA,2BACA,mCAGJ,eACI,wCACA,2BACA,mCAEA,qBACI,0BACA,0BAIR,gFAGI,sCAGJ,eACI,iBAGJ,eACI,aACA,eAGJ,uBACI,aAGI,gDACI,yBACA,4BAGJ,+CACI,0BACA,6BAKZ,sBACI,aACA,sBAGI,+CACI,yBACA,0BAGJ,8CACI,6BACA,4BAIV,SACE,eACA,WACA,aACA,sBACA,SACA,6BAGA,+BACE,UAGJ,sBACI,4BACA,cAGJ,oBACI,2BACA,iBAEA,gCACI,gBACA,eAGJ,yCACI,kBACA,QACA,WACA,qCACA,0BAIR,YACI,aACA,gBACA,wBACA,kBACA,mDACA,6CACA,eAEA,qBACI,gBACA,iBAIR,qBACI,wCACA,+CAEA,sCACI,+CAKJ,oCACI,wCAEA,mDACI,yDAKZ,4BACI,sDACA,iBAEA,kCACI,wCACA,wDAEA,mDACI,UAGJ,oEACI,UAKZ,iBACI,gBACA,aACA,mBACA,wCACA,QACA,4BACA,2CACA,iCACA,gBACA,4BAGJ,kCACI,UAGJ,6BACI,qCAGJ,4BACI,oCAGJ,yBACI,YACA,cACA,gBACA,YACA,wBACA,mBACA,gBAGJ,kCACI,cACA,uBACA,mCAIA,oCACI,wDACA,UACA,mBACA,uBACA,cACA,iBACA,4BAGJ,qDACI,UAIR,oBACI,kBACA,iBACA,UACA,gBACA,iBAEA,0BACI,gCAIR,uBACI,eAEA,6BACI,2CAIR,mBACI,aACA,sBACA,cACA,WACA,gBACA,qBAIA,qCACI,qBACA,yBAGJ,oCACI,wBAKJ,4DACI,wBAKJ,4DACI,wBAEL,YACD,4BAEF,qBACE,gCACA,uDACE,oCAGJ,iBACE,4BAEF,mBACE,aACA,8BACA,mBACA,aACA,6BACA,gBACA,4BACA,yBACE,6CAGJ,mBACE,SACA,aACA,iBAEF,oBACE,eACA,SACA,gBACA,6BACA,4BAEF,+DAEE,UAEF,uCACE,aACA,aAEF,qBACE,oBACA,WACA,yCACE,eACA,SACA,gBAGJ,SACE,kBACA,oBACA,kBACA,cACA,4BAEF,iBACE,kBACA,UACA,oBACA,kBACA,oBACA,wCACA,sBACA,qCACA,4BACA,yBACA,gBACA,oBACA,6BACE,WACA,UACA,UACA,kBACA,gBACA,oBAEF,uDAEE,wCAGJ,YACE,QAEF,iBACE,oBACA,qBACA,UACA,4BACA,sBAEE,yCACE,0CAEF,0CACE,0CAEF,0CACE,gBAIF,2CACE,gBAIN,oBACE,cACA,kBACA,aACA,eACA,WACA,oBAEF,iBACE,oBACA,6BACA,iBACA,sBACA,qBACA,uBACE,aAGJ,kBACE,kBACA,aACA,eACA,eACA,cACA,gBACA,gBACA,sBACA,6BACA,UACA,kBAEF,mBACE,QACA,SAEF,mBACE,eACA,YACA,eACA,oBACA,0CACA,0BAEE,+BACE,oCACA,qCAIN,oBACE,kBACA,0CAEF,mBACE,aAEF,sGAIE,YACA,kBACA,6BAEF,0BACE,SACA,QACA,WACA,UACA,kDACA,iDACA,iCACA,kBAGA,yBACE,OACA,QACA,UACA,WACA,6BACA,oCACA,kBACA,6BACA,mCAGA,gCACE,YAEF,wCACE,YAKJ,6CACE,mCACA,mDACE,wBAGJ,4CACE,mCACA,kDACE,uCACA,iCACA,mCAGJ,2CACE,wBAIF,oCACE,cACA,gBACA,eACA,aACA,mBACA,mBACA,kBACA,kCAEF,0CACE,gCACA,4BAEF,4CACE,qCACA,wBACA,+BAGJ,mBACE,kBACA,mCACA,yBACE,2CACA,WACA,WACA,SACA,QACA,gCACA,4BAGJ,oBACE,gBACA,eACA,sBACA,oBAGA,sCACE,4CACA,8CACE,kCAGJ,wCACE,qBAIF,sCACE,4CACA,8CACE,kCAGJ,wCACE,qBAIF,oCACE,0CACA,4CACE,gCAGJ,sCACE,mBAGJ,oBACE,aACA,sBACA,gBACA,YACA,QACA,kBACA,sBAEF,QACE,aACA,eAEF,eACE,uBACA,8BACE,iBAGJ,eACE,aAEF,oBACE,aACA,SAEF,6BACE,sBAEF,qBACE,cACA,qCACA,qBAEF,qBACE,OAEJ,mBACI,eACA,QACA,YACA,oBACA,iCACA,0BACA,6BACA,UACA,aAEA,4BACI,UACA,qBAIR,UACI,kBACA,aACA,sBACA,eACA,gBACA,cACA,yBACA,6BACA,6BACA,4BAGJ,eACI,iBACA,mCAGJ,cACI,eACA,mCAGJ,gBACI,iBACA,kCAGJ,iBACI,eACA,kCAGJ,oBACI,UACA,eACA,qBAGJ,kCAEI,aACA,mBACA,aAEA,8CACI,aAIR,kBACI,OACA,kBAGJ,gBACI,kBACA,aACA,sBACA,4BAEF,MACE,sBAEJ,qBACI,aACA,sBACA,uBACA,mBACA,SACA,kBACA,wBACA,sBACA,0BAGJ,gBACI,oBACA,UACA,WACA,0CAEJ,UACI,aACA,sBACA,kBAGI,wJAEI,4BAIZ,qBACI,4BACA,+EAEI,YAGR,mBACI,aACA,QACA,gCACA,gBACA,YACA,8CACA,6BACA,0BACI,wBACA,gCACI,sBACA,sDACI,UAKhB,sBACI,kBACA,UACA,SACA,SACA,6BACA,UACA,YACA,kBACA,cACA,oBACA,6BACA,4BAEJ,kBACI,OACA,aACA,uBACA,gCACA,8CACA,6BACA,cACA,qBACA,qBACA,qBACA,aACA,8BACI,4BAEJ,gDAEI,4BAEJ,oBACI,kBAEJ,sBACI,SAEJ,+BACI,+BACA,qBAIR,kBACI,aACA,eACA,YACA,gBACA,gBACA,4BACA,qCACA,yBACA,4BACA,cACA,+BACI,qBAEJ,sCACI,wBAIR,eACI,oBACA,mBACA,eACA,wBACA,iBAEJ,SACI,kBACA,oBACA,mBACA,uBACA,kBACA,4BACA,gBACA,sBACA,qCACA,4BACA,cACA,8BACI,UACA,4BAEJ,aACI,sBACA,WACA,YACA,iBAGR,eACI,kBACA,QACA,aACA,mBACA,uBACA,4BACA,qCAEJ,QACI,aACA,cAEJ,aACI,aACA,eACA,uBACA,6BACA,4BAEJ,sBACI,0CACA,4CACI,gBAEJ,wCACI,yBACA,0BAEJ,uCACI,6BACA,4BAEJ,4BACI,0CACA,UAGR,eACI,kBACA,eACA,iBACA,mBACA,8BACA,qBACI,6CAEJ,kCACI,qCAGR,mBACI,sBAEJ,YACI,eACA,WACA,oBACA,aACA,sBACA,uBACA,cACA,6BACA,eAGJ,WACI,kBACA,mBACA,mBACA,UACA,6BACA,sDACA,qCACA,4BACA,yBACA,4BAEA,4BACI,UACA,0BAGR,mBACI,eACA,QACA,YACA,aACA,6BACA,UACA,oBACA,aACA,gBACA,kCACI,UAGR,kBACI,iCACA,0BACA,iCACI,qBAGR,oBACI,eAEJ,SACI,kBACA,aACA,sBACA,YACA,eACA,gBACA,kBACA,4BACA,6BACA,6BACA,6BACA,mBACA,iBACI,oCAGR,yBACI,UACA,eACA,mBAEJ,gCAEI,kBACA,aACA,mBACA,aACA,SACA,4CACI,aAGR,kBACI,iBAEJ,gBACI,uBAEJ,iBACI,kBACA,OACA,gBACA,gBAGA,wBACI,kBACA,aACA,sBACA,4BAGN,cACE,aAEF,qBACE,gBAEJ,cACI,aACA,mBACA,SAEJ,QACI,0BACA,wBACA,kBACA,oBACA,mBACA,uBACA,gBACA,cACA,iBACA,4BACA,+BACA,6BACA,iBACA,eACA,mBACA,aACA,mBACA,6BACA,4BACI,WAEJ,6BACI,kBACA,QACA,UACA,qCACA,4BAEJ,cACI,0CAEJ,sBACI,gCACA,mCACA,eAEJ,uBACI,oBACA,eAGN,aACE,aACA,gBAEF,sBACE,sBACA,wCACE,iBACA,WACA,WAGJ,eACE,cAEF,eACE,OACA,cAEF,kBACE,kBACA,aACA,uBACA,mBACA,UACA,YACA,0BACA,iBACA,6BACA,kBACA,iBACA,+DAEE,iCACA,6GACE,UAIN,uBACE,aACA,kBACA,UACA,oBACA,UACA,6BACA,mBACA,4BACA,eAEF,SACE,kBACA,oBACA,eACA,QAEF,eACE,yBACA,8BACA,gBAEF,cACE,oBACA,qBACA,4BAEE,mCACE,0CACA,qCAKJ,oCACE,QACA,SAGJ,gCACE,0CAEF,gCACE,2CAEF,8BACE,0CAEF,iBACE,cACA,kBACA,aACA,eACA,WACA,oBAEF,wBACE,UAEF,cACE,oBACA,iBACA,6BACA,iBACA,sBACA,qBAEF,eACE,kBACA,aACA,eACA,eACA,cACA,cACA,gBACA,gBACA,kBACA,oBACA,UACA,kBACA,0CAEF,iBACE,6BAGA,uCACE,kBACA,+BACA,qCACA,gBACA,qDACE,wBAIN,wBACE,qBAEF,gBACE,aACA,8BACE,cACA,iBACA,gBACA,gBACA,mBACA,kCACA,oCACE,qCACA,4BAGJ,sCACE,+BACA,wBACA,+BAGJ,iBACE,gBACA,eACA,sBACA,oBAGA,gCACE,4CAEF,kCACE,qBAIF,gCACE,4CAEF,kCACE,qBAIF,8BACE,0CAEF,gCACE,mBAGJ,YACE,cACA,kBACA,aACA,+BACA,4BACA,eAEF,qBACE,YACA,qCACE,YACA,oBAGJ,gBACE,kBACA,WACA,6BACA,4BACA,sBACA,6BAEF,mBACE,kBACA,QACA,QACA,aACA,gBACA,cACA,wCACA,6BACA,sBACA,yBACA,iBACA,gBAEF,uEAEE,wCAEF,mBACE,kBAEF,wBACE,6BACA,mBAEF,yBACE,kBACA,SACA,QACA,gCACA,gBAEF,SACE,gBAEF,eACE,oBACA,sBAEF,cACE,cAEF,SACI,kBACA,YACA,UACA,oBACA,uCACA,4BACA,6BACA,yBACA,4BAGJ,eACI,kBACA,UACA,YACA,oBACA,YACA,oBAEA,oBACI,uBAEL,UACC,aACA,SAGJ,mBACI,eACA,qBAEA,0BACI,kBACA,eACA,oBACA,uCAIR,kBACI,cACA,aACA,sBACA,gBACA,YACA,QACA,kBACA,sBAEA,+BACI,sBACA,mBACA,qBAEA,kDACI,wBACA,+BAEA,yEACI,UAIR,wCACI,oBAOJ,2DACI,yBAKZ,uBACI,UAGJ,iBACI,gBACA,MACA,UACA,aACA,eACA,qCACA,4BACA,oDAEA,uBACI,aAEL,QACD,aACA,eACA,SACA,gBAEF,iBACE,sBACA,8BACE,mBAEE,kEACE,mBAKR,aACE,aACA,sBACA,SACA,cACA,6BACA,wBACE,UACA,wCACE,aAGJ,kCACE,WACA,kDACE,mBAGJ,iCACE,WAEF,mBACE,UAGJ,mBACE,aACA,mBACA,uBACA,cACA,YACA,kBACA,oBACA,0BACA,wBAEF,gBACE,OACA,kBACA,iCAEF,mBACE,aACA,mBACA,SACA,mBAEF,kBACE,aACA,sBACA,mBACA,SAEF,mBACE,aACA,sBACA,SAEJ,OACI,6BACA,wBACA,kBACA,oBACA,mBACA,uBACA,kBACA,SACA,mBACA,4BACA,6BACA,mBACA,+BACA,6BACA,gBACA,cAEA,oBACI,kBACA,QACA,MACA,UACA,SACA,wBACA,mBACA,+BACA,gBACA,oBAEA,0BACI,0BACA,mBAKJ,gCACI,UACA,wCAKZ,aACI,cAGJ,eACI,gBACA,WAGJ,aACI,gBACA,oBAGJ,WACI,YACA,aACA,cACA,kBACA,8BACA,gDACA,cACA,mBAGJ,eACI,0BACA,0BAGJ,mBACI,wCACA,UAGJ,iBACI,eAEA,uBACI,mCACA,uCAGR,QACI,eACA,SAGA,yBACI,QAEJ,wBACI,eACA,qCACI,2BAGR,6BACI,6BAEJ,8CACI,SACA,yDACI,kBAIZ,sBACI,aACA,4BACA,uBACA,QACA,mBAEJ,qBACI,qBACA,sBAEJ,YACI,OACA,kBACA,aACA,uBACA,cACA,iBACA,sBACA,qBACA,QAEJ,+BACI,aAGA,mCACI,kBACA,0CACI,kBACA,SACA,OACA,QACA,WACA,oCACA,WACA,UAGR,yBACI,QACA,oCACI,8CACA,+BACA,0CACI,4BACA,sCAGR,uCACI,UACA,yBACA,4BACA,0CACA,wCACA,6CACI,+BAKR,yCACI,WACA,MACA,YACA,YACA,gBACA,sCAGA,yDACI,8CACA,+BACA,+DACI,4BACA,qCAGR,4DACI,4BACA,yCACA,kEACI,+BAMpB,WACI,wBACA,kBACA,UACA,aACA,mBACA,uBACA,kBACA,iBACA,cACA,UACA,mBACA,4BACA,iBACI,wBAEJ,wBACI,2BAIJ,4BACI,mBAEJ,+BACI,+BAIJ,2BACI,gBACA,8CACA,wCACI,6CACA,mCAIZ,iBACI,kBACA,UACA,SACA,eACA,UACA,UACA,6BACA,uBACI,mBACA,6BAIJ,kCACI,UAIR,gBACI,kBACA,WACA,OACA,SACA,uCACA,oBACA,6BACA,kBAGA,iCACI,QACA,iDACI,QACA,WACA,aACA,QACA,MAIZ,gBACI,kBACA,OAEJ,eACI,aACA,4BACI,cAGR,UACI,kBACA,eACA,iBAEI,gCACI,YAGR,gCACI,UAGR,gBACI,kBACA,gBACA,mBAEJ,eACI,aACA,sBAGA,8BACI,UAEJ,gCACI,UAIJ,mCACI,YACA,mBAEJ,kCACI,sBAEJ,kCACI,WAEJ,mCACI,WACA,WAEJ,kCACI,WACA,UACA,6BAEJ,kCACI,4BAGR,eACI,OACA,cACA,aACA,uBACA,mBACA,gBACA,6BAEJ,gBACI,kBACA,QACA,oBACA,mBACA,uBACA,4BACA,6BACA,6BACA,UAEJ,eACI,UAEJ,eACI,WAEJ,qBACI,cACA,aACA,uBACA,SAEJ,2BACI,kBACA,SACA,SACA,6BAEJ,oBACI,UACA,WACA,kBACA,cACA,wBACA,YACA,0BACI,WAEJ,uCACI,UAGN,iBACE,sCAEF,sBACE,0BACA,wBACA,4CAEF,qBACE,KACE,6BAGJ,QACE,aACA,sBACA,QACA,qBAEF,oBACE,kBACA,cACA,aACA,gBACA,kBACA,eACA,0BACE,YACA,iBACA,OACA,WACA,kBACA,0BAGJ,oBACE,kBACA,aACA,mBACA,UACA,aACA,iBACA,4BACA,gBACA,qBACA,sCACE,oBAEF,mEAEE,+BACA,wBAGJ,cACE,gBAEF,kBACE,aAEF,iBACE,kBAEF,eACE,iBACA,6BACA,sBACA,qBACA,qBACE,qBACA,qCAGJ,qBACE,aACA,gBACA,mDAGA,oCACE,oDACA,kBAEF,mCACE,wBACA,UACA,kDACE,0BAIR,oBACI,kBACA,QACA,gBACA,oBACA,sBACA,eACA,8BACI,kBACA,wBACA,YACA,4CACA,qBACA,kBAEJ,qCACI,UACA,yCAGN,oBACE,oBACA,YACA,8CACE,mBAGJ,qBACE,aAEF,gBACE,cACA,aACA,eACA,SAGA,+CACE,sBAEF,8BACE,iBAGJ,eACE,aACA,eACA,WACA,YACA,iBACA,qBACE,aAGJ,iBACE,UACA,SACA,UACA,eACA,aACA,yBAEF,cACE,kBAEF,mBACE,oBACA,8BACA,+BACA,WACA,cACA,yBACE,UAGJ,eACE,kBACA,oBACA,mBACA,UACA,mBACA,6CACA,4BACA,qCACA,6BACA,eACA,gCACE,kBACA,8BACA,WACA,sCACE,8BACA,WAGJ,qBACE,6CACA,sCACE,UAIN,oBACE,kBACA,aACA,sBACA,mBACA,uBACA,UACA,8BACA,+BACA,4BACA,uCACA,eACA,uDAEE,WACA,YACA,iBAEF,wCACE,eACA,gBACA,mBACA,uBACA,eACA,mBAEF,qCACE,gBACA,kBACA,8BACA,WACA,2CACE,8BACA,WAIF,2CACE,UAIN,eACE,eACA,qBAEF,uBACE,aAEJ,WACI,UACA,oBACI,gBACA,yBACA,eACA,eACA,+BACA,WACA,YAEJ,gCACI,kBACA,WACA,YAEJ,8BACI,aACA,mBACA,uBACA,WACA,YACA,6BACA,oBACA,sBACA,gCACI,mBAGR,+BACI,eACA,WACA,WACA,SACA,YACA,aACA,mBACA,QACA,qCACA,4BACA,eACA,mBACA,6BACA,qCACI,UAGR,sCACI,UAEJ,8BACI,aACA,sBACA,mBACA,iBACA,6BACA,4BAGN,SACE,kBACA,gBACA,4BACA,gBACA,eACE,WACA,YAGJ,kBACE,kBACA,OACA,YACA,QACA,aACA,mBACA,YACA,QACA,eACA,mBACA,iBACA,6BACA,qCACA,4BACA,yBACE,cAEF,0BACE,gBAEF,wBACE,UACA,qBAGJ,yBACE,UACA,oBAEF,iBACE,aACA,mBAEF,eACE,kBACA,aACA,mBACA,QAEF,gBACE,kBACA,UACA,YACA,SACA,+BACA,YACA,UACA,oBACA,4BACA,6BACA,4BACA,qCAEF,wBACE,kBAEE,8CACE,UACA,qBAIN,oBACE,eAEF,cACE,YACA,iCACE,eAGJ,wCAEE,aACA,qCACA,QAEF,sCAEE,aACA,uBACA,mBAEF,mBACE,qBAEF,mBACE,0BACA,WACA,4BACA,oBACA,6BACA,mBACA,yBACE,UACA,kCAEF,2CACE,WAEF,sCACE,kCAEF,uCACE,gCACA,mCACA,UAEF,yCACE,WACA,mBAGJ,oBACE,mBACA,aACA,mBACA,WACA,qBACA,eAEF,qBACE,kBACA,aACA,qBACA,UACA,oBACA,iBACA,4BACA,0BACE,mBACA,iBAEF,2BACE,+BAGJ,mBACE,kBACA,WACA,oBAEF,iBACE,kBACA,QACA,UACA,YACA,SACA,6BACA,4BACA,aACA,oBACA,UACA,6BACA,qCACE,UACA,qBAGJ,oBACE,UACA,kBACA,aACA,sBACA,gBACA,UAEF,qBACE,iBACA,OACA,aACA,qCACA,UAEF,mBACE,OAEF,uCAEE,aACA,YACA,iBACA,4BACA,uBACA,mBACA,mDACE,6CAEF,+EACE,6BACA,gCACA,UAGJ,oBACE,kBACA,QACA,MAIJ,sBACI,kBACA,oBACA,mBACA,eACA,UAEJ,sBACI,qBACA,YACA,aACA,gCACA,4BACA,eACA,6BACA,4BACI,4BAGR,sBACI,aACA,QACA,eAEJ,oBACI,6BACA,eACA,mBACA,4BACA,0BACA,0BACI,0BAGR,uBACI,gBACA,mBAEF,cACE,kBACA,aACA,eACA,mBACA,kBACA,aACA,mBACA,uBACA,kBACA,qBACA,6BACA,4BACA,eACA,oBACE,qBACA,uCAGJ,oBACE,eAEF,cACE,aAEF,mBACE,cACA,kBACA,cACA,YACA,kBACA,aACA,sBACA,QACA,qBACA,sCACE,aAEF,oCACE,sCAGJ,mBACE,cACA,mBACA,4BACA,WACA,yBACE,gCACA,UAEF,4CACE,gBACA,MACA,SACA,UACA,6BACA,gCACA,UAGJ,mBACE,kBACA,WACA,oBAEF,SACE,YACA,UACA,WACA","file":"index.css"}
|
package/lib/css/reset.css
CHANGED
|
@@ -133,13 +133,13 @@ code {
|
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
::-webkit-scrollbar-thumb {
|
|
136
|
-
background-color: var(--color-
|
|
136
|
+
background-color: var(--color-7);
|
|
137
137
|
border-radius: 2px;
|
|
138
138
|
background-clip: content-box;
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
::-webkit-scrollbar-thumb:hover {
|
|
142
|
-
background-color: var(--color-
|
|
142
|
+
background-color: var(--color-7);
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
::-webkit-scrollbar-button {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import {
|
|
3
|
-
import { escapeAttrValue } from 'xss';
|
|
2
|
+
import { UndoRound, RedoRound, FormatBoldRound, FormatItalicRound, FormatUnderlinedRound, StrikethroughSRound, ClearAllRound } from '@ricons/material';
|
|
4
3
|
import Button from '../button/button.js';
|
|
5
4
|
import Icon from '../icon/icon.js';
|
|
6
5
|
|
|
@@ -9,65 +8,48 @@ const exec = (a, b, c) => {
|
|
|
9
8
|
return;
|
|
10
9
|
return document.execCommand(a, b, c);
|
|
11
10
|
};
|
|
11
|
+
const escapeHtmlAttr = (value) => value
|
|
12
|
+
.replaceAll("&", "&")
|
|
13
|
+
.replaceAll('"', """)
|
|
14
|
+
.replaceAll("<", "<")
|
|
15
|
+
.replaceAll(">", ">");
|
|
12
16
|
const xssOptions = {
|
|
13
17
|
onIgnoreTagAttr(tag, name, value) {
|
|
14
18
|
if (["class", "contenteditable"].includes(name)) {
|
|
15
|
-
return name + '="' +
|
|
19
|
+
return name + '="' + escapeHtmlAttr(value) + '"';
|
|
16
20
|
}
|
|
17
21
|
if (["data-", "style"].includes(name.substring(0, 5))) {
|
|
18
|
-
return name + '="' +
|
|
22
|
+
return name + '="' + escapeHtmlAttr(value) + '"';
|
|
19
23
|
}
|
|
20
24
|
},
|
|
21
25
|
};
|
|
22
26
|
const handleMouseDown = (e) => {
|
|
23
27
|
e.preventDefault();
|
|
24
28
|
};
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
onClick: () => exec("italic"),
|
|
33
|
-
},
|
|
34
|
-
underline: {
|
|
29
|
+
const defaultControls = [
|
|
30
|
+
{ key: "undo", icon: jsx(UndoRound, {}), onClick: () => exec("undo") },
|
|
31
|
+
{ key: "redo", icon: jsx(RedoRound, {}), onClick: () => exec("redo") },
|
|
32
|
+
{ key: "bold", icon: jsx(FormatBoldRound, {}), onClick: () => exec("bold") },
|
|
33
|
+
{ key: "italic", icon: jsx(FormatItalicRound, {}), onClick: () => exec("italic") },
|
|
34
|
+
{
|
|
35
|
+
key: "underline",
|
|
35
36
|
icon: jsx(FormatUnderlinedRound, {}),
|
|
36
37
|
onClick: () => exec("underline"),
|
|
37
38
|
},
|
|
38
|
-
|
|
39
|
+
{
|
|
40
|
+
key: "strike",
|
|
39
41
|
icon: jsx(StrikethroughSRound, {}),
|
|
40
42
|
onClick: () => exec("strikeThrough"),
|
|
41
43
|
},
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
onClick: () => exec("redo"),
|
|
45
|
-
},
|
|
46
|
-
undo: {
|
|
47
|
-
icon: jsx(UndoRound, {}),
|
|
48
|
-
onClick: () => exec("undo"),
|
|
49
|
-
},
|
|
50
|
-
clear: {
|
|
44
|
+
{
|
|
45
|
+
key: "clear",
|
|
51
46
|
icon: jsx(ClearAllRound, {}),
|
|
52
47
|
onClick: () => exec("removeFormat"),
|
|
53
48
|
},
|
|
54
|
-
};
|
|
55
|
-
const defaultKeys = [
|
|
56
|
-
"undo",
|
|
57
|
-
"redo",
|
|
58
|
-
"bold",
|
|
59
|
-
"italic",
|
|
60
|
-
"underline",
|
|
61
|
-
"strike",
|
|
62
|
-
"clear",
|
|
63
49
|
];
|
|
64
|
-
const typedFnMap = fnMap;
|
|
65
50
|
function getControls(options) {
|
|
66
51
|
const { controlBtnProps, addtionControls, getSelection } = options;
|
|
67
|
-
const controls =
|
|
68
|
-
const { icon, onClick } = typedFnMap[k];
|
|
69
|
-
return (jsx(Button, { ...controlBtnProps, onMouseDown: handleMouseDown, onClick: onClick, children: jsx(Icon, { icon: icon }) }, k));
|
|
70
|
-
});
|
|
52
|
+
const controls = defaultControls.map(({ key, icon, onClick }) => (jsx(Button, { ...controlBtnProps, onMouseDown: handleMouseDown, onClick: onClick, children: jsx(Icon, { icon: icon }) }, key)));
|
|
71
53
|
const extControls = (addtionControls ?? []).map((item, index) => (jsx(Button, { ...controlBtnProps, onMouseDown: handleMouseDown, onClick: (e) => item.onClick?.(getSelection(), e), children: item.icon }, `addtion-${index}`)));
|
|
72
54
|
return [...controls, ...extControls];
|
|
73
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controls.js","sources":["../../../../packages/components/editor/controls.tsx"],"sourcesContent":["import {\r\n ClearAllRound,\r\n FormatBoldRound,\r\n FormatItalicRound,\r\n FormatUnderlinedRound,\r\n RedoRound,\r\n StrikethroughSRound,\r\n UndoRound,\r\n} from \"@ricons/material\";\r\nimport { MouseEvent, ReactNode } from \"react\";\r\nimport {
|
|
1
|
+
{"version":3,"file":"controls.js","sources":["../../../../packages/components/editor/controls.tsx"],"sourcesContent":["import {\r\n ClearAllRound,\r\n FormatBoldRound,\r\n FormatItalicRound,\r\n FormatUnderlinedRound,\r\n RedoRound,\r\n StrikethroughSRound,\r\n UndoRound,\r\n} from \"@ricons/material\";\r\nimport { MouseEvent, ReactNode } from \"react\";\r\nimport { type IFilterXSSOptions } from \"xss\";\r\nimport Button from \"../button\";\r\nimport { IButton } from \"../button/type\";\r\nimport Icon from \"../icon\";\r\nimport { IEditorAddtionControl } from \"./type\";\r\n\r\nexport const exec = (a, b?, c?) => {\r\n if (typeof document === \"undefined\") return;\r\n return document.execCommand(a, b, c);\r\n};\r\n\r\nconst escapeHtmlAttr = (value: string) =>\r\n value\r\n .replaceAll(\"&\", \"&\")\r\n .replaceAll('\"', \""\")\r\n .replaceAll(\"<\", \"<\")\r\n .replaceAll(\">\", \">\");\r\n\r\nexport const xssOptions: IFilterXSSOptions = {\r\n onIgnoreTagAttr(tag, name, value) {\r\n if ([\"class\", \"contenteditable\"].includes(name)) {\r\n return name + '=\"' + escapeHtmlAttr(value) + '\"';\r\n }\r\n if ([\"data-\", \"style\"].includes(name.substring(0, 5))) {\r\n return name + '=\"' + escapeHtmlAttr(value) + '\"';\r\n }\r\n },\r\n};\r\n\r\nconst handleMouseDown = (e: MouseEvent<HTMLElement>) => {\r\n e.preventDefault();\r\n};\r\n\r\ntype ControlItem = {\r\n key: string;\n icon: ReactNode;\r\n onClick: () => void;\r\n};\r\n\r\nconst defaultControls: ControlItem[] = [\n { key: \"undo\", icon: <UndoRound />, onClick: () => exec(\"undo\") },\n { key: \"redo\", icon: <RedoRound />, onClick: () => exec(\"redo\") },\n { key: \"bold\", icon: <FormatBoldRound />, onClick: () => exec(\"bold\") },\n { key: \"italic\", icon: <FormatItalicRound />, onClick: () => exec(\"italic\") },\n {\n key: \"underline\",\n icon: <FormatUnderlinedRound />,\n onClick: () => exec(\"underline\"),\n },\n {\n key: \"strike\",\n icon: <StrikethroughSRound />,\n onClick: () => exec(\"strikeThrough\"),\n },\n {\n key: \"clear\",\n icon: <ClearAllRound />,\n onClick: () => exec(\"removeFormat\"),\n },\n];\n\r\nexport default function getControls(options: {\r\n controlBtnProps: IButton;\r\n addtionControls?: IEditorAddtionControl[];\r\n getSelection: () => Range | null;\r\n}) {\r\n const { controlBtnProps, addtionControls, getSelection } = options;\r\n\r\n const controls = defaultControls.map(({ key, icon, onClick }) => (\n <Button\n key={key}\n {...controlBtnProps}\n onMouseDown={handleMouseDown}\n onClick={onClick}\n >\n <Icon icon={icon} />\n </Button>\n ));\n\r\n const extControls = (addtionControls ?? []).map((item, index) => (\r\n <Button\r\n key={`addtion-${index}`}\r\n {...controlBtnProps}\r\n onMouseDown={handleMouseDown}\r\n onClick={(e) => item.onClick?.(getSelection(), e)}\r\n >\r\n {item.icon}\r\n </Button>\r\n ));\r\n\r\n return [...controls, ...extControls];\r\n}\r\n"],"names":["_jsx"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import classNames from 'classnames';
|
|
|
3
3
|
import { useRef, useState, useMemo, useEffect, useCallback } from 'react';
|
|
4
4
|
import xss from 'xss';
|
|
5
5
|
import getControls, { xssOptions, exec } from './controls.js';
|
|
6
|
-
import Memtion, { filterMemtionOptions, getMemtionReplaceRange, insertMemtionOption, removeAdjacentMemtionTag, getMemtionText, getSelectionRect } from './memtion.js';
|
|
6
|
+
import Memtion, { filterMemtionOptions, sanitizePlaintextOnMemtionHtml, getMemtionReplaceRange, insertMemtionOption, removeAdjacentMemtionTag, getMemtionText, getSelectionRect } from './memtion.js';
|
|
7
7
|
|
|
8
8
|
const controlBtnProps = {
|
|
9
9
|
square: true,
|
|
@@ -16,18 +16,28 @@ const Editor = (props) => {
|
|
|
16
16
|
const selectionRef = useRef(null);
|
|
17
17
|
const memtionTriggerRangeRef = useRef(null);
|
|
18
18
|
const pendingMemtionRef = useRef(false);
|
|
19
|
+
const isPlaintextMode = mode === "plaintext";
|
|
20
|
+
const isRichMode = mode === "rich";
|
|
21
|
+
const isPlaintextOnMemtionMode = mode === "plaintextOnMemtion";
|
|
19
22
|
const [memtionVisible, setMemtionVisible] = useState(false);
|
|
20
23
|
const [memtionRect, setMemtionRect] = useState(null);
|
|
21
24
|
const [memtionKeyword, setMemtionKeyword] = useState("");
|
|
22
25
|
const [memtionActiveIndex, setMemtionActiveIndex] = useState(0);
|
|
23
26
|
const memtionOptions = useMemo(() => filterMemtionOptions(memtion?.options ?? [], memtionKeyword), [memtion?.options, memtionKeyword]);
|
|
24
27
|
const sanitizeValue = (nextValue) => {
|
|
25
|
-
if (
|
|
28
|
+
if (isPlaintextMode) {
|
|
26
29
|
return nextValue === "\n" ? "" : nextValue;
|
|
27
30
|
}
|
|
28
|
-
const safeHtml =
|
|
31
|
+
const safeHtml = isPlaintextOnMemtionMode
|
|
32
|
+
? sanitizePlaintextOnMemtionHtml(xss(nextValue, xssOptions))
|
|
33
|
+
: xss(nextValue, xssOptions);
|
|
29
34
|
return safeHtml === "<br>" ? "" : safeHtml;
|
|
30
35
|
};
|
|
36
|
+
const syncHeight = () => {
|
|
37
|
+
if (autosize && editorRef.current) {
|
|
38
|
+
editorRef.current.style.height = `${editorRef.current.scrollHeight}px`;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
31
41
|
const rememberSelection = () => {
|
|
32
42
|
if (!editorRef.current)
|
|
33
43
|
return;
|
|
@@ -47,18 +57,18 @@ const Editor = (props) => {
|
|
|
47
57
|
if (!editorRef.current)
|
|
48
58
|
return;
|
|
49
59
|
const safeValue = sanitizeValue(nextValue);
|
|
50
|
-
if (
|
|
60
|
+
if (isPlaintextMode) {
|
|
51
61
|
editorRef.current.textContent = safeValue;
|
|
52
62
|
return;
|
|
53
63
|
}
|
|
54
64
|
editorRef.current.innerHTML = safeValue;
|
|
55
65
|
};
|
|
56
66
|
const getEditorValue = (sanitize = false) => {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
67
|
+
const nextValue = !editorRef.current
|
|
68
|
+
? ""
|
|
69
|
+
: isPlaintextMode
|
|
70
|
+
? (editorRef.current.textContent ?? "")
|
|
71
|
+
: editorRef.current.innerHTML;
|
|
62
72
|
return sanitize ? sanitizeValue(nextValue) : nextValue;
|
|
63
73
|
};
|
|
64
74
|
const hideMemtion = () => {
|
|
@@ -90,22 +100,18 @@ const Editor = (props) => {
|
|
|
90
100
|
if (e.defaultPrevented)
|
|
91
101
|
return;
|
|
92
102
|
e.preventDefault();
|
|
93
|
-
if (mode === "plaintext") {
|
|
94
|
-
const text = e.clipboardData.getData("text/plain");
|
|
95
|
-
exec("insertText", false, text);
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
103
|
const html = e.clipboardData.getData("text/html");
|
|
99
|
-
if (html) {
|
|
100
|
-
exec("insertHTML", false, sanitizeValue(html));
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
104
|
const text = e.clipboardData.getData("text/plain");
|
|
104
|
-
|
|
105
|
+
const pasteValue = isPlaintextMode
|
|
106
|
+
? text
|
|
107
|
+
: html
|
|
108
|
+
? sanitizeValue(html)
|
|
109
|
+
: text;
|
|
110
|
+
exec(isPlaintextMode ? "insertText" : "insertHTML", false, pasteValue);
|
|
105
111
|
};
|
|
106
112
|
const handleKeyDown = (e) => {
|
|
107
113
|
onKeyDown?.(e);
|
|
108
|
-
if (
|
|
114
|
+
if (!isPlaintextMode &&
|
|
109
115
|
(e.key === "Backspace" || e.key === "Delete") &&
|
|
110
116
|
removeAdjacentMemtionTag(editorRef.current, e.key)) {
|
|
111
117
|
e.preventDefault();
|
|
@@ -142,7 +148,7 @@ const Editor = (props) => {
|
|
|
142
148
|
switch (e.key) {
|
|
143
149
|
case "Tab":
|
|
144
150
|
e.preventDefault();
|
|
145
|
-
exec(
|
|
151
|
+
exec(isRichMode ? "insertHTML" : "insertText", false, isRichMode ? "	" : "\t");
|
|
146
152
|
break;
|
|
147
153
|
case "Enter":
|
|
148
154
|
if (!onEnter)
|
|
@@ -159,9 +165,7 @@ const Editor = (props) => {
|
|
|
159
165
|
if (getEditorValue(true) === nextValue)
|
|
160
166
|
return;
|
|
161
167
|
setEditorValue(nextValue);
|
|
162
|
-
|
|
163
|
-
editorRef.current.style.height = `${editorRef.current.scrollHeight}px`;
|
|
164
|
-
}
|
|
168
|
+
syncHeight();
|
|
165
169
|
}, [autosize, mode, value]);
|
|
166
170
|
useEffect(() => {
|
|
167
171
|
if (!memtionOptions.length) {
|
|
@@ -173,6 +177,11 @@ const Editor = (props) => {
|
|
|
173
177
|
const handleInput = (e) => {
|
|
174
178
|
const rawValue = getEditorValue();
|
|
175
179
|
let nextValue = sanitizeValue(rawValue);
|
|
180
|
+
if (isPlaintextOnMemtionMode &&
|
|
181
|
+
rawValue !== nextValue &&
|
|
182
|
+
editorRef.current) {
|
|
183
|
+
setEditorValue(nextValue);
|
|
184
|
+
}
|
|
176
185
|
if (!nextValue && rawValue && editorRef.current) {
|
|
177
186
|
nextValue = "";
|
|
178
187
|
setEditorValue(nextValue);
|
|
@@ -193,9 +202,7 @@ const Editor = (props) => {
|
|
|
193
202
|
setMemtionVisible(true);
|
|
194
203
|
}
|
|
195
204
|
}
|
|
196
|
-
|
|
197
|
-
editorRef.current.style.height = `${editorRef.current.scrollHeight}px`;
|
|
198
|
-
}
|
|
205
|
+
syncHeight();
|
|
199
206
|
onChange?.(nextValue, e);
|
|
200
207
|
};
|
|
201
208
|
const handleFocus = (e) => {
|
|
@@ -236,7 +243,7 @@ const Editor = (props) => {
|
|
|
236
243
|
...style,
|
|
237
244
|
[autosize ? "minHeight" : "height"]: height,
|
|
238
245
|
width,
|
|
239
|
-
}, children: [!hideControl && (jsx("div", { className: "i-editor-controls", children: controls })), memtion && (jsx(Memtion, { visible: memtionVisible, rect: memtionRect, options: memtionOptions, activeIndex: memtionActiveIndex, onActiveChange: setMemtionActiveIndex, onSelect: insertMemtion })), jsx("div", { ref: handleRef, className: "i-editor-content", "data-placeholder": placeholder, contentEditable:
|
|
246
|
+
}, children: [!hideControl && (jsx("div", { className: "i-editor-controls", children: controls })), memtion && (jsx(Memtion, { visible: memtionVisible, rect: memtionRect, options: memtionOptions, activeIndex: memtionActiveIndex, onActiveChange: setMemtionActiveIndex, onSelect: insertMemtion })), jsx("div", { ref: handleRef, className: "i-editor-content", "data-placeholder": placeholder, contentEditable: isPlaintextMode ? "plaintext-only" : true, onFocus: handleFocus, onBlur: handleBlur, onMouseUp: handleMouseUp, onPaste: handlePaste, onInput: handleInput, onKeyUp: handleKeyUp, onKeyDown: handleKeyDown, ...restProps })] }));
|
|
240
247
|
};
|
|
241
248
|
|
|
242
249
|
export { Editor as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.js","sources":["../../../../packages/components/editor/editor.tsx"],"sourcesContent":["import classNames from \"classnames\";\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\r\nimport xss from \"xss\";\r\nimport { IButton } from \"../button/type\";\r\nimport getControls, { exec, xssOptions } from \"./controls\";\r\nimport \"./index.css\";\r\nimport Memtion, {\r\n filterMemtionOptions,\r\n getMemtionReplaceRange,\r\n getMemtionText,\r\n getSelectionRect,\r\n insertMemtionOption,\r\n removeAdjacentMemtionTag,\r\n} from \"./memtion\";\r\nimport { IEditor, IEditorMemtionOption } from \"./type\";\r\n\r\nconst controlBtnProps: IButton = {\r\n square: true,\r\n flat: true,\r\n size: \"small\",\r\n};\r\n\r\nconst Editor = (props: IEditor) => {\r\n const {\r\n ref,\r\n value = \"\",\r\n width,\r\n height = \"10em\",\r\n placeholder,\r\n autosize,\r\n border = true,\r\n mode = \"rich\",\r\n hideControl,\r\n addtionControls,\r\n memtion,\r\n className,\r\n style,\r\n onChange,\r\n onEnter,\r\n onFocus,\r\n onBlur,\r\n onPaste,\r\n onMouseUp,\r\n onKeyUp,\r\n onKeyDown,\r\n ...restProps\r\n } = props;\r\n const editorRef = useRef<HTMLDivElement>(null);\r\n const selectionRef = useRef<Range | null>(null);\r\n const memtionTriggerRangeRef = useRef<Range | null>(null);\r\n const pendingMemtionRef = useRef(false);\r\n const [memtionVisible, setMemtionVisible] = useState(false);\r\n const [memtionRect, setMemtionRect] = useState<DOMRect | null>(null);\r\n const [memtionKeyword, setMemtionKeyword] = useState(\"\");\r\n const [memtionActiveIndex, setMemtionActiveIndex] = useState(0);\r\n const memtionOptions = useMemo(\r\n () => filterMemtionOptions(memtion?.options ?? [], memtionKeyword),\r\n [memtion?.options, memtionKeyword],\r\n );\r\n\r\n const sanitizeValue = (nextValue: string) => {\r\n if (mode === \"plaintext\") {\r\n return nextValue === \"\\n\" ? \"\" : nextValue;\r\n }\r\n\r\n const safeHtml = xss(nextValue, xssOptions);\r\n\r\n return safeHtml === \"<br>\" ? \"\" : safeHtml;\r\n };\r\n\r\n const rememberSelection = () => {\r\n if (!editorRef.current) return;\r\n\r\n const selection = window.getSelection();\r\n if (!selection?.rangeCount) return;\r\n\r\n const range = selection.getRangeAt(0);\r\n const container = range.commonAncestorContainer;\r\n const parent =\r\n container.nodeType === Node.ELEMENT_NODE\r\n ? (container as Element)\r\n : container.parentElement;\r\n\r\n if (!parent || !editorRef.current.contains(parent)) return;\r\n\r\n selectionRef.current = range.cloneRange();\r\n };\r\n\r\n const setEditorValue = (nextValue: string) => {\r\n if (!editorRef.current) return;\r\n\r\n const safeValue = sanitizeValue(nextValue);\r\n\r\n if (mode === \"plaintext\") {\r\n editorRef.current.textContent = safeValue;\r\n return;\r\n }\r\n\r\n editorRef.current.innerHTML = safeValue;\r\n };\r\n\r\n const getEditorValue = (sanitize = false) => {\r\n if (!editorRef.current) return \"\";\r\n\r\n const nextValue =\r\n mode === \"plaintext\"\r\n ? (editorRef.current.textContent ?? \"\")\r\n : editorRef.current.innerHTML;\r\n\r\n return sanitize ? sanitizeValue(nextValue) : nextValue;\r\n };\r\n\r\n const hideMemtion = () => {\r\n pendingMemtionRef.current = false;\r\n memtionTriggerRangeRef.current = null;\r\n setMemtionVisible(false);\r\n setMemtionRect(null);\r\n setMemtionKeyword(\"\");\r\n setMemtionActiveIndex(0);\r\n };\r\n\r\n const insertMemtion = (option: IEditorMemtionOption) => {\r\n const replaceRange = getMemtionReplaceRange(\r\n memtionTriggerRangeRef.current,\r\n selectionRef.current,\r\n );\r\n\r\n const range = insertMemtionOption({\r\n editor: editorRef.current,\r\n range: replaceRange,\r\n mode,\r\n memtion,\r\n option,\r\n sanitizeValue,\r\n });\r\n\r\n if (!range || !editorRef.current) return;\r\n\r\n selectionRef.current = range.cloneRange();\r\n hideMemtion();\r\n editorRef.current.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n };\r\n\r\n const handlePaste = (e) => {\r\n onPaste?.(e);\r\n\r\n if (e.defaultPrevented) return;\r\n\r\n e.preventDefault();\r\n\r\n if (mode === \"plaintext\") {\r\n const text = e.clipboardData.getData(\"text/plain\");\r\n exec(\"insertText\", false, text);\r\n return;\r\n }\r\n\r\n const html = e.clipboardData.getData(\"text/html\");\r\n if (html) {\r\n exec(\"insertHTML\", false, sanitizeValue(html));\r\n return;\r\n }\r\n\r\n const text = e.clipboardData.getData(\"text/plain\");\r\n exec(\"insertText\", false, text);\r\n };\r\n\r\n const handleKeyDown = (e) => {\r\n onKeyDown?.(e);\r\n\r\n if (\r\n mode === \"rich\" &&\r\n (e.key === \"Backspace\" || e.key === \"Delete\") &&\r\n removeAdjacentMemtionTag(editorRef.current, e.key)\r\n ) {\r\n e.preventDefault();\r\n rememberSelection();\r\n editorRef.current?.dispatchEvent(\r\n new Event(\"input\", { bubbles: true }),\r\n );\r\n return;\r\n }\r\n\r\n const memtionKey = memtion?.key ?? \"@\";\r\n if (memtionVisible && e.key === \" \") {\r\n hideMemtion();\r\n }\r\n\r\n if (memtionVisible && memtionOptions.length) {\r\n switch (e.key) {\r\n case \"ArrowDown\":\r\n e.preventDefault();\r\n setMemtionActiveIndex((index) =>\r\n index + 1 >= memtionOptions.length ? 0 : index + 1,\r\n );\r\n return;\r\n case \"ArrowUp\":\r\n e.preventDefault();\r\n setMemtionActiveIndex((index) =>\r\n index - 1 < 0 ? memtionOptions.length - 1 : index - 1,\r\n );\r\n return;\r\n case \"Enter\":\r\n e.preventDefault();\r\n insertMemtion(memtionOptions[memtionActiveIndex]);\r\n return;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n if (memtion && e.key === memtionKey) {\r\n rememberSelection();\r\n memtionTriggerRangeRef.current =\r\n selectionRef.current?.cloneRange() ?? null;\r\n pendingMemtionRef.current = true;\r\n }\r\n\r\n switch (e.key) {\r\n case \"Tab\":\r\n e.preventDefault();\r\n exec(\r\n mode === \"plaintext\" ? \"insertText\" : \"insertHTML\",\r\n false,\r\n mode === \"plaintext\" ? \"\\t\" : \"	\",\r\n );\r\n break;\r\n case \"Enter\":\r\n if (!onEnter) break;\r\n e.preventDefault();\r\n onEnter(e);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (!editorRef.current) return;\r\n const nextValue = sanitizeValue(value);\r\n if (getEditorValue(true) === nextValue) return;\r\n\r\n setEditorValue(nextValue);\r\n\r\n if (autosize) {\r\n editorRef.current.style.height = `${editorRef.current.scrollHeight}px`;\r\n }\r\n }, [autosize, mode, value]);\r\n\r\n useEffect(() => {\r\n if (!memtionOptions.length) {\r\n setMemtionActiveIndex(0);\r\n return;\r\n }\r\n\r\n setMemtionActiveIndex((index) =>\r\n index >= memtionOptions.length ? 0 : index,\r\n );\r\n }, [memtionOptions]);\r\n\r\n const handleInput = (e) => {\r\n const rawValue = getEditorValue();\r\n let nextValue = sanitizeValue(rawValue);\r\n\r\n if (!nextValue && rawValue && editorRef.current) {\r\n nextValue = \"\";\r\n setEditorValue(nextValue);\r\n }\r\n\r\n rememberSelection();\r\n\r\n if (memtion && (pendingMemtionRef.current || memtionVisible)) {\r\n const memtionKey = memtion?.key ?? \"@\";\r\n const memtionText = getMemtionText(\r\n memtionTriggerRangeRef.current,\r\n selectionRef.current,\r\n );\r\n\r\n if (!memtionText.startsWith(memtionKey) || /\\s/.test(memtionText)) {\r\n hideMemtion();\r\n } else {\r\n const keyword = memtionText.slice(memtionKey.length);\r\n pendingMemtionRef.current = false;\r\n setMemtionRect(getSelectionRect(selectionRef.current));\r\n setMemtionKeyword(keyword);\r\n setMemtionActiveIndex(0);\r\n setMemtionVisible(true);\r\n }\r\n }\r\n\r\n if (autosize && editorRef.current) {\r\n editorRef.current.style.height = `${editorRef.current.scrollHeight}px`;\r\n }\r\n\r\n onChange?.(nextValue, e);\r\n };\r\n\r\n const handleFocus = (e) => {\r\n rememberSelection();\r\n onFocus?.(e);\r\n };\r\n\r\n const handleBlur = (e) => {\r\n hideMemtion();\r\n onBlur?.(e);\r\n };\r\n\r\n const handleMouseUp = (e) => {\r\n rememberSelection();\r\n onMouseUp?.(e);\r\n };\r\n\r\n const handleKeyUp = (e) => {\r\n rememberSelection();\r\n onKeyUp?.(e);\r\n };\r\n\r\n const handleRef = (node: HTMLDivElement | null) => {\r\n editorRef.current = node;\r\n\r\n if (typeof ref === \"function\") {\r\n ref(node);\r\n return;\r\n }\r\n\r\n if (ref) {\r\n ref.current = node;\r\n }\r\n };\r\n\r\n const getSelection = useCallback(\r\n () => selectionRef.current?.cloneRange() ?? null,\r\n [],\r\n );\r\n\r\n const controls = useMemo(\r\n () =>\r\n getControls({\r\n controlBtnProps,\r\n addtionControls,\r\n getSelection,\r\n }),\r\n [addtionControls, getSelection],\r\n );\r\n\r\n return (\r\n <div\r\n className={classNames(\"i-editor\", className, {\r\n \"i-editor-borderless\": !border,\r\n })}\r\n style={{\r\n ...style,\r\n [autosize ? \"minHeight\" : \"height\"]: height,\r\n width,\r\n }}\r\n >\r\n {!hideControl && (\r\n <div className=\"i-editor-controls\">{controls}</div>\r\n )}\r\n\r\n {memtion && (\r\n <Memtion\r\n visible={memtionVisible}\r\n rect={memtionRect}\r\n options={memtionOptions}\r\n activeIndex={memtionActiveIndex}\r\n onActiveChange={setMemtionActiveIndex}\r\n onSelect={insertMemtion}\r\n />\r\n )}\r\n\r\n <div\r\n ref={handleRef}\r\n className=\"i-editor-content\"\r\n data-placeholder={placeholder}\r\n contentEditable={mode === \"plaintext\" ? \"plaintext-only\" : true}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n onMouseUp={handleMouseUp}\r\n onPaste={handlePaste}\r\n onInput={handleInput}\r\n onKeyUp={handleKeyUp}\r\n onKeyDown={handleKeyDown}\r\n {...restProps}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default Editor;\r\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"editor.js","sources":["../../../../packages/components/editor/editor.tsx"],"sourcesContent":["import classNames from \"classnames\";\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\r\nimport xss from \"xss\";\r\nimport { IButton } from \"../button/type\";\r\nimport getControls, { exec, xssOptions } from \"./controls\";\r\nimport \"./index.css\";\r\nimport Memtion, {\r\n filterMemtionOptions,\r\n getMemtionReplaceRange,\r\n getMemtionText,\r\n getSelectionRect,\r\n insertMemtionOption,\r\n removeAdjacentMemtionTag,\r\n sanitizePlaintextOnMemtionHtml,\r\n} from \"./memtion\";\r\nimport { IEditor, IEditorMemtionOption } from \"./type\";\r\n\r\nconst controlBtnProps: IButton = {\r\n square: true,\r\n flat: true,\r\n size: \"small\",\r\n};\r\n\r\nconst Editor = (props: IEditor) => {\r\n const {\r\n ref,\r\n value = \"\",\r\n width,\r\n height = \"10em\",\r\n placeholder,\r\n autosize,\r\n border = true,\r\n mode = \"rich\",\r\n hideControl,\r\n addtionControls,\r\n memtion,\r\n className,\r\n style,\r\n onChange,\r\n onEnter,\r\n onFocus,\r\n onBlur,\r\n onPaste,\r\n onMouseUp,\r\n onKeyUp,\r\n onKeyDown,\r\n ...restProps\r\n } = props;\r\n const editorRef = useRef<HTMLDivElement>(null);\r\n const selectionRef = useRef<Range | null>(null);\r\n const memtionTriggerRangeRef = useRef<Range | null>(null);\r\n const pendingMemtionRef = useRef(false);\r\n const isPlaintextMode = mode === \"plaintext\";\r\n const isRichMode = mode === \"rich\";\r\n const isPlaintextOnMemtionMode = mode === \"plaintextOnMemtion\";\r\n const [memtionVisible, setMemtionVisible] = useState(false);\r\n const [memtionRect, setMemtionRect] = useState<DOMRect | null>(null);\r\n const [memtionKeyword, setMemtionKeyword] = useState(\"\");\r\n const [memtionActiveIndex, setMemtionActiveIndex] = useState(0);\r\n const memtionOptions = useMemo(\r\n () => filterMemtionOptions(memtion?.options ?? [], memtionKeyword),\r\n [memtion?.options, memtionKeyword],\r\n );\r\n\r\n const sanitizeValue = (nextValue: string) => {\r\n if (isPlaintextMode) {\r\n return nextValue === \"\\n\" ? \"\" : nextValue;\r\n }\r\n\r\n const safeHtml = isPlaintextOnMemtionMode\r\n ? sanitizePlaintextOnMemtionHtml(xss(nextValue, xssOptions))\r\n : xss(nextValue, xssOptions);\r\n\r\n return safeHtml === \"<br>\" ? \"\" : safeHtml;\r\n };\r\n\r\n const syncHeight = () => {\r\n if (autosize && editorRef.current) {\r\n editorRef.current.style.height = `${editorRef.current.scrollHeight}px`;\r\n }\r\n };\r\n\r\n const rememberSelection = () => {\r\n if (!editorRef.current) return;\r\n\r\n const selection = window.getSelection();\r\n if (!selection?.rangeCount) return;\r\n\r\n const range = selection.getRangeAt(0);\r\n const container = range.commonAncestorContainer;\r\n const parent =\r\n container.nodeType === Node.ELEMENT_NODE\r\n ? (container as Element)\r\n : container.parentElement;\r\n\r\n if (!parent || !editorRef.current.contains(parent)) return;\r\n\r\n selectionRef.current = range.cloneRange();\r\n };\r\n\r\n const setEditorValue = (nextValue: string) => {\r\n if (!editorRef.current) return;\r\n\r\n const safeValue = sanitizeValue(nextValue);\r\n\r\n if (isPlaintextMode) {\r\n editorRef.current.textContent = safeValue;\r\n return;\r\n }\r\n\r\n editorRef.current.innerHTML = safeValue;\r\n };\r\n\r\n const getEditorValue = (sanitize = false) => {\r\n const nextValue = !editorRef.current\r\n ? \"\"\r\n : isPlaintextMode\r\n ? (editorRef.current.textContent ?? \"\")\r\n : editorRef.current.innerHTML;\r\n\r\n return sanitize ? sanitizeValue(nextValue) : nextValue;\r\n };\r\n\r\n const hideMemtion = () => {\r\n pendingMemtionRef.current = false;\r\n memtionTriggerRangeRef.current = null;\r\n setMemtionVisible(false);\r\n setMemtionRect(null);\r\n setMemtionKeyword(\"\");\r\n setMemtionActiveIndex(0);\r\n };\r\n\r\n const insertMemtion = (option: IEditorMemtionOption) => {\r\n const replaceRange = getMemtionReplaceRange(\r\n memtionTriggerRangeRef.current,\r\n selectionRef.current,\r\n );\r\n\r\n const range = insertMemtionOption({\r\n editor: editorRef.current,\r\n range: replaceRange,\r\n mode,\r\n memtion,\r\n option,\r\n sanitizeValue,\r\n });\r\n\r\n if (!range || !editorRef.current) return;\r\n\r\n selectionRef.current = range.cloneRange();\r\n hideMemtion();\r\n editorRef.current.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n };\r\n\r\n const handlePaste = (e) => {\r\n onPaste?.(e);\r\n\r\n if (e.defaultPrevented) return;\r\n\r\n e.preventDefault();\r\n\r\n const html = e.clipboardData.getData(\"text/html\");\r\n const text = e.clipboardData.getData(\"text/plain\");\r\n const pasteValue = isPlaintextMode\r\n ? text\r\n : html\r\n ? sanitizeValue(html)\r\n : text;\r\n\r\n exec(isPlaintextMode ? \"insertText\" : \"insertHTML\", false, pasteValue);\r\n };\r\n\r\n const handleKeyDown = (e) => {\r\n onKeyDown?.(e);\r\n\r\n if (\r\n !isPlaintextMode &&\r\n (e.key === \"Backspace\" || e.key === \"Delete\") &&\r\n removeAdjacentMemtionTag(editorRef.current, e.key)\r\n ) {\r\n e.preventDefault();\r\n rememberSelection();\r\n editorRef.current?.dispatchEvent(\r\n new Event(\"input\", { bubbles: true }),\r\n );\r\n return;\r\n }\r\n\r\n const memtionKey = memtion?.key ?? \"@\";\r\n if (memtionVisible && e.key === \" \") {\r\n hideMemtion();\r\n }\r\n\r\n if (memtionVisible && memtionOptions.length) {\r\n switch (e.key) {\r\n case \"ArrowDown\":\r\n e.preventDefault();\r\n setMemtionActiveIndex((index) =>\r\n index + 1 >= memtionOptions.length ? 0 : index + 1,\r\n );\r\n return;\r\n case \"ArrowUp\":\r\n e.preventDefault();\r\n setMemtionActiveIndex((index) =>\r\n index - 1 < 0 ? memtionOptions.length - 1 : index - 1,\r\n );\r\n return;\r\n case \"Enter\":\r\n e.preventDefault();\r\n insertMemtion(memtionOptions[memtionActiveIndex]);\r\n return;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n if (memtion && e.key === memtionKey) {\r\n rememberSelection();\r\n memtionTriggerRangeRef.current =\r\n selectionRef.current?.cloneRange() ?? null;\r\n pendingMemtionRef.current = true;\r\n }\r\n\r\n switch (e.key) {\r\n case \"Tab\":\r\n e.preventDefault();\r\n exec(\r\n isRichMode ? \"insertHTML\" : \"insertText\",\r\n false,\r\n isRichMode ? \"	\" : \"\\t\",\r\n );\r\n break;\r\n case \"Enter\":\r\n if (!onEnter) break;\r\n e.preventDefault();\r\n onEnter(e);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (!editorRef.current) return;\r\n const nextValue = sanitizeValue(value);\r\n if (getEditorValue(true) === nextValue) return;\r\n\r\n setEditorValue(nextValue);\r\n syncHeight();\r\n }, [autosize, mode, value]);\r\n\r\n useEffect(() => {\r\n if (!memtionOptions.length) {\r\n setMemtionActiveIndex(0);\r\n return;\r\n }\r\n\r\n setMemtionActiveIndex((index) =>\r\n index >= memtionOptions.length ? 0 : index,\r\n );\r\n }, [memtionOptions]);\r\n\r\n const handleInput = (e) => {\r\n const rawValue = getEditorValue();\r\n let nextValue = sanitizeValue(rawValue);\r\n\r\n if (\r\n isPlaintextOnMemtionMode &&\r\n rawValue !== nextValue &&\r\n editorRef.current\r\n ) {\r\n setEditorValue(nextValue);\r\n }\r\n\r\n if (!nextValue && rawValue && editorRef.current) {\r\n nextValue = \"\";\r\n setEditorValue(nextValue);\r\n }\r\n\r\n rememberSelection();\r\n\r\n if (memtion && (pendingMemtionRef.current || memtionVisible)) {\r\n const memtionKey = memtion?.key ?? \"@\";\r\n const memtionText = getMemtionText(\r\n memtionTriggerRangeRef.current,\r\n selectionRef.current,\r\n );\r\n\r\n if (!memtionText.startsWith(memtionKey) || /\\s/.test(memtionText)) {\r\n hideMemtion();\r\n } else {\r\n const keyword = memtionText.slice(memtionKey.length);\r\n pendingMemtionRef.current = false;\r\n setMemtionRect(getSelectionRect(selectionRef.current));\r\n setMemtionKeyword(keyword);\r\n setMemtionActiveIndex(0);\r\n setMemtionVisible(true);\r\n }\r\n }\r\n\r\n syncHeight();\r\n\r\n onChange?.(nextValue, e);\r\n };\r\n\r\n const handleFocus = (e) => {\r\n rememberSelection();\r\n onFocus?.(e);\r\n };\r\n\r\n const handleBlur = (e) => {\r\n hideMemtion();\r\n onBlur?.(e);\r\n };\r\n\r\n const handleMouseUp = (e) => {\r\n rememberSelection();\r\n onMouseUp?.(e);\r\n };\r\n\r\n const handleKeyUp = (e) => {\r\n rememberSelection();\r\n onKeyUp?.(e);\r\n };\r\n\r\n const handleRef = (node: HTMLDivElement | null) => {\r\n editorRef.current = node;\r\n\r\n if (typeof ref === \"function\") {\r\n ref(node);\r\n return;\r\n }\r\n\r\n if (ref) {\r\n ref.current = node;\r\n }\r\n };\r\n\r\n const getSelection = useCallback(\r\n () => selectionRef.current?.cloneRange() ?? null,\r\n [],\r\n );\r\n\r\n const controls = useMemo(\r\n () =>\r\n getControls({\r\n controlBtnProps,\r\n addtionControls,\r\n getSelection,\r\n }),\r\n [addtionControls, getSelection],\r\n );\r\n\r\n return (\r\n <div\r\n className={classNames(\"i-editor\", className, {\r\n \"i-editor-borderless\": !border,\r\n })}\r\n style={{\r\n ...style,\r\n [autosize ? \"minHeight\" : \"height\"]: height,\r\n width,\r\n }}\r\n >\r\n {!hideControl && (\r\n <div className=\"i-editor-controls\">{controls}</div>\r\n )}\r\n\r\n {memtion && (\r\n <Memtion\r\n visible={memtionVisible}\r\n rect={memtionRect}\r\n options={memtionOptions}\r\n activeIndex={memtionActiveIndex}\r\n onActiveChange={setMemtionActiveIndex}\r\n onSelect={insertMemtion}\r\n />\r\n )}\r\n\r\n <div\r\n ref={handleRef}\r\n className=\"i-editor-content\"\r\n data-placeholder={placeholder}\r\n contentEditable={isPlaintextMode ? \"plaintext-only\" : true}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n onMouseUp={handleMouseUp}\r\n onPaste={handlePaste}\r\n onInput={handleInput}\r\n onKeyUp={handleKeyUp}\r\n onKeyDown={handleKeyDown}\r\n {...restProps}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default Editor;\r\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -1,10 +1,47 @@
|
|
|
1
1
|
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { memo } from 'react';
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
3
4
|
import { renderToStaticMarkup } from 'react-dom/server';
|
|
4
|
-
import { escapeAttrValue } from 'xss';
|
|
5
5
|
import List from '../list/list.js';
|
|
6
6
|
|
|
7
7
|
const MEMTION_TAG_CLASS_NAME = "i-memtion-tag";
|
|
8
|
+
const blockTags = new Set([
|
|
9
|
+
"ADDRESS",
|
|
10
|
+
"ARTICLE",
|
|
11
|
+
"ASIDE",
|
|
12
|
+
"BLOCKQUOTE",
|
|
13
|
+
"DIV",
|
|
14
|
+
"DL",
|
|
15
|
+
"FIELDSET",
|
|
16
|
+
"FIGCAPTION",
|
|
17
|
+
"FIGURE",
|
|
18
|
+
"FOOTER",
|
|
19
|
+
"FORM",
|
|
20
|
+
"H1",
|
|
21
|
+
"H2",
|
|
22
|
+
"H3",
|
|
23
|
+
"H4",
|
|
24
|
+
"H5",
|
|
25
|
+
"H6",
|
|
26
|
+
"HEADER",
|
|
27
|
+
"LI",
|
|
28
|
+
"MAIN",
|
|
29
|
+
"NAV",
|
|
30
|
+
"OL",
|
|
31
|
+
"P",
|
|
32
|
+
"PRE",
|
|
33
|
+
"SECTION",
|
|
34
|
+
"TABLE",
|
|
35
|
+
"TD",
|
|
36
|
+
"TH",
|
|
37
|
+
"TR",
|
|
38
|
+
"UL",
|
|
39
|
+
]);
|
|
40
|
+
const escapeHtmlAttr = (value) => value
|
|
41
|
+
.replaceAll("&", "&")
|
|
42
|
+
.replaceAll('"', """)
|
|
43
|
+
.replaceAll("<", "<")
|
|
44
|
+
.replaceAll(">", ">");
|
|
8
45
|
const getInsertNode = (memtion, option) => memtion?.insert?.(option) ?? option.value;
|
|
9
46
|
const getInsertText = (memtion, option) => {
|
|
10
47
|
const nextNode = getInsertNode(memtion, option);
|
|
@@ -19,7 +56,7 @@ const getInsertHtml = (memtion, option, sanitizeValue) => {
|
|
|
19
56
|
return "";
|
|
20
57
|
}
|
|
21
58
|
const content = sanitizeValue(renderToStaticMarkup(jsx(Fragment, { children: nextNode })));
|
|
22
|
-
return `<span class="${MEMTION_TAG_CLASS_NAME}" contenteditable="false" data-memtion-value="${
|
|
59
|
+
return `<span class="${MEMTION_TAG_CLASS_NAME}" contenteditable="false" data-memtion-value="${escapeHtmlAttr(String(option.value))}">${content}</span>`;
|
|
23
60
|
};
|
|
24
61
|
const getSelectionRect = (range) => {
|
|
25
62
|
if (!range)
|
|
@@ -50,14 +87,11 @@ const insertMemtionOption = ({ editor, range, mode, memtion, option, sanitizeVal
|
|
|
50
87
|
const html = getInsertHtml(memtion, option, sanitizeValue);
|
|
51
88
|
const fragment = nextRange.createContextualFragment(html);
|
|
52
89
|
const lastNode = fragment.lastChild;
|
|
53
|
-
const spacing = document.createTextNode(" ");
|
|
54
90
|
nextRange.insertNode(fragment);
|
|
55
91
|
if (lastNode) {
|
|
56
92
|
nextRange.setStartAfter(lastNode);
|
|
57
93
|
nextRange.collapse(true);
|
|
58
94
|
}
|
|
59
|
-
nextRange.insertNode(spacing);
|
|
60
|
-
nextRange.setStartAfter(spacing);
|
|
61
95
|
}
|
|
62
96
|
nextRange.collapse(true);
|
|
63
97
|
browserSelection.removeAllRanges();
|
|
@@ -87,6 +121,60 @@ const filterMemtionOptions = (options, keyword) => {
|
|
|
87
121
|
};
|
|
88
122
|
const isMemtionTag = (node) => node instanceof HTMLElement &&
|
|
89
123
|
node.classList.contains(MEMTION_TAG_CLASS_NAME);
|
|
124
|
+
const appendBreak = (container) => {
|
|
125
|
+
if (!container.lastChild || container.lastChild.nodeName === "BR") {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
container.appendChild(document.createElement("br"));
|
|
129
|
+
};
|
|
130
|
+
const appendPlaintextOnMemtionNode = (container, node) => {
|
|
131
|
+
if (!node)
|
|
132
|
+
return;
|
|
133
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
134
|
+
container.appendChild(document.createTextNode((node.textContent ?? "").replaceAll("\r", "")));
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (!(node instanceof HTMLElement)) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (isMemtionTag(node)) {
|
|
141
|
+
const tag = document.createElement("span");
|
|
142
|
+
const memtionValue = node.getAttribute("data-memtion-value");
|
|
143
|
+
tag.className = MEMTION_TAG_CLASS_NAME;
|
|
144
|
+
tag.setAttribute("contenteditable", "false");
|
|
145
|
+
if (memtionValue !== null) {
|
|
146
|
+
tag.setAttribute("data-memtion-value", memtionValue);
|
|
147
|
+
}
|
|
148
|
+
tag.innerHTML = node.innerHTML;
|
|
149
|
+
container.appendChild(tag);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (node.tagName === "BR") {
|
|
153
|
+
appendBreak(container);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
Array.from(node.childNodes).forEach((child) => {
|
|
157
|
+
appendPlaintextOnMemtionNode(container, child);
|
|
158
|
+
});
|
|
159
|
+
if (blockTags.has(node.tagName)) {
|
|
160
|
+
appendBreak(container);
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
const sanitizePlaintextOnMemtionHtml = (value) => {
|
|
164
|
+
if (typeof document === "undefined") {
|
|
165
|
+
return value;
|
|
166
|
+
}
|
|
167
|
+
const source = document.createElement("div");
|
|
168
|
+
const result = document.createElement("div");
|
|
169
|
+
source.innerHTML = value;
|
|
170
|
+
Array.from(source.childNodes).forEach((child) => {
|
|
171
|
+
appendPlaintextOnMemtionNode(result, child);
|
|
172
|
+
});
|
|
173
|
+
while (result.lastChild?.nodeName === "BR") {
|
|
174
|
+
result.lastChild.remove();
|
|
175
|
+
}
|
|
176
|
+
return result.innerHTML;
|
|
177
|
+
};
|
|
90
178
|
const getAdjacentMemtionTag = (range, direction) => {
|
|
91
179
|
const { startContainer, startOffset } = range;
|
|
92
180
|
if (startContainer.nodeType === Node.TEXT_NODE) {
|
|
@@ -144,13 +232,17 @@ const Memtion = (props) => {
|
|
|
144
232
|
if (!visible || !rect || !options?.length) {
|
|
145
233
|
return null;
|
|
146
234
|
}
|
|
147
|
-
|
|
235
|
+
const content = (jsx(List, { className: "i-editor-memtion", type: "option", style: {
|
|
148
236
|
position: "fixed",
|
|
149
237
|
top: rect.bottom,
|
|
150
238
|
left: rect.left,
|
|
151
239
|
}, children: options.map((option, i) => (jsx(List.Item, { type: "option", active: i === activeIndex, onMouseDown: (e) => e.preventDefault(), onMouseEnter: () => onActiveChange?.(i), onClick: () => onSelect?.(option), children: option.label }, `${option.value}-${i}`))) }));
|
|
240
|
+
if (typeof document === "undefined") {
|
|
241
|
+
return content;
|
|
242
|
+
}
|
|
243
|
+
return createPortal(content, document.body);
|
|
152
244
|
};
|
|
153
245
|
var Memtion$1 = memo(Memtion);
|
|
154
246
|
|
|
155
|
-
export { MEMTION_TAG_CLASS_NAME, Memtion$1 as default, filterMemtionOptions, getMemtionReplaceRange, getMemtionText, getSelectionRect, insertMemtionOption, removeAdjacentMemtionTag };
|
|
247
|
+
export { MEMTION_TAG_CLASS_NAME, Memtion$1 as default, filterMemtionOptions, getMemtionReplaceRange, getMemtionText, getSelectionRect, insertMemtionOption, removeAdjacentMemtionTag, sanitizePlaintextOnMemtionHtml };
|
|
156
248
|
//# sourceMappingURL=memtion.js.map
|