Convert a DOM Node to SVG Element.
Try on CodePen
import dts from "https://cdn.jsdelivr.net/npm/@gdscnits/dts/dist/index.min.js";
const elem = document.getElementById("main")
// console.log(dts(elem)); // to get URI
console.log(dts(elem, false)); // to get svg
npm i @gdscnits/dts
// File: index.js
import dts from "@gdscnits/dts";
const elem = document.getElementById("main")
// console.log(dts(elem)); // to get URI
console.log(dts(elem, false)); // to get svg
Build the script using esbuild
and browserify
(Install them as dependencies). In package.json
,
put the following lines:
"scripts": {
"bundle": "esbuild index.js --bundle --sourcemap --target=chrome58,firefox57,safari11,edge16 --outfile=bundle.js"
},
"type": "module"
In the HTML file, include bundle.js
as script.
<script src="./bundle.js"></script>
For React components, create a ref for the div whose SVG is needed.
import dts from "@gdscnits/dts";
import { useRef } from "react";
const Component = () => {
const divref = useRef(null);
const getSVG = () => {
if(divref == null) return;
// const svg = dts(divref) // to get URI
const svg = dts(divref, false) // to get SVG
console.log(svg)
}
return (
<div className="main">
{/* Click on this button to console log the SVG for divref */}
<button onClick={getSVG}>
Click me to get SVG
</button>
<div className="div_whose_SVG_is_needed" ref={divref}>
<div className="styling">
{/*...*/}
</div>
</div>
</div>
)
}
- Clone the repository
git clone https://github.com/gdsc-nits-org/dts.git
- Install dependencies(this project uses pnpm, but you can use your favourite package manager)
pnpm install
- Build the project
pnpm esbuild
- View Docs
pnpm docs
- Build Docs
pnpm run docs
- Run test
pnpm test
TODO:
- Replace rollup with esbuild
- Make it asynchronous
- Setup simple-git-hooks
- Border Radius applied in image
-
Box Shadows are not rendered properly(Box Shadows not feasable with SVG) - Make it work with React components
- Publish to NPM registry
- Setup tests
- Test all helpers
- Fix some broken testcases
- Document codebase and usage