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

initial import

parents
No related branches found
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