@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.
Files changed (31) hide show
  1. package/lib/cjs/components/editor/controls.js +19 -37
  2. package/lib/cjs/components/editor/controls.js.map +1 -1
  3. package/lib/cjs/components/editor/editor.js +34 -27
  4. package/lib/cjs/components/editor/editor.js.map +1 -1
  5. package/lib/cjs/components/editor/memtion.js +99 -6
  6. package/lib/cjs/components/editor/memtion.js.map +1 -1
  7. package/lib/cjs/components/picker/colors/index.js +6 -5
  8. package/lib/cjs/components/picker/colors/index.js.map +1 -1
  9. package/lib/cjs/components/select/select.js +4 -4
  10. package/lib/cjs/components/select/select.js.map +1 -1
  11. package/lib/cjs/components/tabs/tabs.js +1 -1
  12. package/lib/cjs/components/tabs/tabs.js.map +1 -1
  13. package/lib/css/index.css +1 -1
  14. package/lib/css/index.css.map +1 -1
  15. package/lib/css/reset.css +2 -2
  16. package/lib/es/components/editor/controls.js +20 -38
  17. package/lib/es/components/editor/controls.js.map +1 -1
  18. package/lib/es/components/editor/editor.js +35 -28
  19. package/lib/es/components/editor/editor.js.map +1 -1
  20. package/lib/es/components/editor/memtion.js +99 -7
  21. package/lib/es/components/editor/memtion.js.map +1 -1
  22. package/lib/es/components/picker/colors/index.js +6 -5
  23. package/lib/es/components/picker/colors/index.js.map +1 -1
  24. package/lib/es/components/select/select.js +4 -4
  25. package/lib/es/components/select/select.js.map +1 -1
  26. package/lib/es/components/tabs/tabs.js +1 -1
  27. package/lib/es/components/tabs/tabs.js.map +1 -1
  28. package/lib/index.js +162 -80
  29. package/lib/types/components/editor/type.d.ts +1 -1
  30. package/lib/types/components/picker/type.d.ts +3 -1
  31. package/package.json +1 -1
@@ -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-8);
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-8);
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 { ClearAllRound, UndoRound, RedoRound, StrikethroughSRound, FormatUnderlinedRound, FormatItalicRound, FormatBoldRound } from '@ricons/material';
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("<", "&lt;")
15
+ .replaceAll(">", "&gt;");
12
16
  const xssOptions = {
13
17
  onIgnoreTagAttr(tag, name, value) {
14
18
  if (["class", "contenteditable"].includes(name)) {
15
- return name + '="' + escapeAttrValue(value) + '"';
19
+ return name + '="' + escapeHtmlAttr(value) + '"';
16
20
  }
17
21
  if (["data-", "style"].includes(name.substring(0, 5))) {
18
- return name + '="' + escapeAttrValue(value) + '"';
22
+ return name + '="' + escapeHtmlAttr(value) + '"';
19
23
  }
20
24
  },
21
25
  };
22
26
  const handleMouseDown = (e) => {
23
27
  e.preventDefault();
24
28
  };
25
- const fnMap = {
26
- bold: {
27
- icon: jsx(FormatBoldRound, {}),
28
- onClick: () => exec("bold"),
29
- },
30
- italic: {
31
- icon: jsx(FormatItalicRound, {}),
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
- strike: {
39
+ {
40
+ key: "strike",
39
41
  icon: jsx(StrikethroughSRound, {}),
40
42
  onClick: () => exec("strikeThrough"),
41
43
  },
42
- redo: {
43
- icon: jsx(RedoRound, {}),
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 = defaultKeys.map((k) => {
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 { escapeAttrValue, 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\nexport const xssOptions: IFilterXSSOptions = {\r\n onIgnoreTagAttr(tag, name, value) {\r\n if ([\"class\", \"contenteditable\"].includes(name)) {\r\n return name + '=\"' + escapeAttrValue(value) + '\"';\r\n }\r\n if ([\"data-\", \"style\"].includes(name.substring(0, 5))) {\r\n return name + '=\"' + escapeAttrValue(value) + '\"';\r\n }\r\n },\r\n};\r\n\r\nconst handleMouseDown = (e: MouseEvent<HTMLElement>) => {\r\n e.preventDefault();\r\n};\r\n\r\nconst fnMap = {\r\n bold: {\r\n icon: <FormatBoldRound />,\r\n onClick: () => exec(\"bold\"),\r\n },\r\n italic: {\r\n icon: <FormatItalicRound />,\r\n onClick: () => exec(\"italic\"),\r\n },\r\n underline: {\r\n icon: <FormatUnderlinedRound />,\r\n onClick: () => exec(\"underline\"),\r\n },\r\n strike: {\r\n icon: <StrikethroughSRound />,\r\n onClick: () => exec(\"strikeThrough\"),\r\n },\r\n redo: {\r\n icon: <RedoRound />,\r\n onClick: () => exec(\"redo\"),\r\n },\r\n undo: {\r\n icon: <UndoRound />,\r\n onClick: () => exec(\"undo\"),\r\n },\r\n clear: {\r\n icon: <ClearAllRound />,\r\n onClick: () => exec(\"removeFormat\"),\r\n },\r\n};\r\n\r\nconst defaultKeys = [\r\n \"undo\",\r\n \"redo\",\r\n \"bold\",\r\n \"italic\",\r\n \"underline\",\r\n \"strike\",\r\n \"clear\",\r\n] as const;\r\n\r\ntype ControlKey = (typeof defaultKeys)[number];\r\ntype ControlItem = {\r\n icon: ReactNode;\r\n onClick: () => void;\r\n};\r\n\r\nconst typedFnMap: Record<ControlKey, ControlItem> = fnMap;\r\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 = defaultKeys.map((k) => {\r\n const { icon, onClick } = typedFnMap[k];\r\n\r\n return (\r\n <Button\r\n key={k}\r\n {...controlBtnProps}\r\n onMouseDown={handleMouseDown}\r\n onClick={onClick}\r\n >\r\n <Icon icon={icon} />\r\n </Button>\r\n );\r\n });\r\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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"}
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(\"&\", \"&amp;\")\r\n .replaceAll('\"', \"&quot;\")\r\n .replaceAll(\"<\", \"&lt;\")\r\n .replaceAll(\">\", \"&gt;\");\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 (mode === "plaintext") {
28
+ if (isPlaintextMode) {
26
29
  return nextValue === "\n" ? "" : nextValue;
27
30
  }
28
- const safeHtml = xss(nextValue, xssOptions);
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 (mode === "plaintext") {
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
- if (!editorRef.current)
58
- return "";
59
- const nextValue = mode === "plaintext"
60
- ? (editorRef.current.textContent ?? "")
61
- : editorRef.current.innerHTML;
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
- exec("insertText", false, text);
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 (mode === "rich" &&
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(mode === "plaintext" ? "insertText" : "insertHTML", false, mode === "plaintext" ? "\t" : "&#09;");
151
+ exec(isRichMode ? "insertHTML" : "insertText", false, isRichMode ? "&#09;" : "\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
- if (autosize) {
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
- if (autosize && editorRef.current) {
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: mode === "plaintext" ? "plaintext-only" : true, onFocus: handleFocus, onBlur: handleBlur, onMouseUp: handleMouseUp, onPaste: handlePaste, onInput: handleInput, onKeyUp: handleKeyUp, onKeyDown: handleKeyDown, ...restProps })] }));
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\" : \"&#09;\",\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 ? \"&#09;\" : \"\\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("&", "&amp;")
42
+ .replaceAll('"', "&quot;")
43
+ .replaceAll("<", "&lt;")
44
+ .replaceAll(">", "&gt;");
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="${escapeAttrValue(String(option.value))}">${content}</span>`;
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
- return (jsx(List, { className: "i-editor-memtion", type: "option", style: {
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