Skip to content
Snippets Groups Projects
Commit 4df9ab74 authored by Florian Niebling's avatar Florian Niebling
Browse files

initial import

parents
Branches
No related tags found
No related merge requests found
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
yarn.lock
\ No newline at end of file
# D3 TypeScript Template
This is a simple vanilla website template that uses D3.js and TypeScript. It is a good starting point for creating a D3.js project with TypeScript.
It also uses Vite as a build tool and SCSS for styling.
## Getting Started
1. Forking this repository
2. Clone the repository
3. Install dependencies by either running `npm ci` or `yarn`
4. Start the development server by running `npm run dev` or `yarn dev`
You are now ready to start building your D3.js project with TypeScript!
## Building for Production
To build the project for production, run `npm run build` or `yarn build`. The output will be in the `dist` folder.
## Boilerplate
This boilerplate gives a simple example of all the features of this template. You could just remove the files in the subfolders and clean up the `main.ts`.
## Alias
The `@` alias is set to the `src` folder. This makes it easier to import files from the `src` folder.
\ No newline at end of file
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + TS</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
This diff is collapsed.
{
"name": "d3-typescript-template",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview"
},
"devDependencies": {
"@types/d3": "^7.4.3",
"sass": "^1.75.0",
"typescript": "^5.2.2",
"vite": "^5.2.0"
},
"dependencies": {
"d3": "^7.9.0"
}
}
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
\ No newline at end of file
{
"message": "Hello World, D3.js!"
}
\ No newline at end of file
import "@/styles/index.scss"; // imports the default styles
import {drawSmiley, getMessage} from "@/scripts/welcome.ts";
const app = document.querySelector('#app') as HTMLDivElement; // selects the entry point of the HTML
app.innerHTML = `
<h1>${getMessage()}</h1>
<svg id="smiley"></svg>
`;
drawSmiley();
\ No newline at end of file
import data from "@/data/test.json"; // import a JSON file
import * as d3 from "d3"; // import the d3 library
export function getMessage(): string { // some function that returns a string
return data.message;
}
export function drawSmiley() {
const svg = d3.select("#smiley"); // select the SVG element
svg.append("circle") // draws the outer circle for the face itself
.attr("cx", 50)
.attr("cy", 50)
.attr("r", 40)
.attr("fill", "yellow");
svg.append("circle") // draws the left eye at (30, 30)
.attr("cx", 30)
.attr("cy", 30)
.attr("r", 5)
.attr("fill", "black");
svg.append("circle") // draws the right eye at (70, 30)
.attr("cx", 70)
.attr("cy", 30)
.attr("r", 5)
.attr("fill", "black");
svg.append("path") // draws the mouth
.attr("d", "M 30 60 Q 50 80 70 60") // d sets the path's data, M (move to) 30 60 selects the starting point, Q (quadratic beziercurve) 50 80 70 60 sets the control point and end point
.attr("stroke", "black")
.attr("stroke-width", 2)
.attr("fill", "none");
}
\ No newline at end of file
h1 {
font-size: 2em;
color: red;
#smiley {
margin-top: 2rem;
}
}
\ No newline at end of file
/// <reference types="vite/client" />
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"paths": {
"@/*": ["src/*"]
},
"baseUrl": ".",
},
"include": ["src"]
}
import { defineConfig } from "vite";
import path from "path";
export default defineConfig({
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
},
},
});
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment