mirror of
https://github.com/Paillat-dev/svelte-github-calendar.git
synced 2026-01-02 09:16:21 +00:00
Compare commits
7 Commits
v0.1.0-alp
...
v0.1.0-alp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ca88cbbca0 | ||
|
|
d9e776683f | ||
|
|
71af282bd2 | ||
|
|
be3af1f676 | ||
|
|
bacfd12dfc | ||
|
|
d16e4b2f1f | ||
|
|
db1bc9803d |
95
README.md
95
README.md
@@ -1,58 +1,79 @@
|
||||
# Svelte library
|
||||
# svelte-github-calendar
|
||||
|
||||
Everything you need to build a Svelte library, powered by [`sv`](https://npmjs.com/package/sv).
|
||||
A Svelte wrapper of the [github-calendar](https://github.com/Bloggify/github-calendar) library to displays GitHub contribution graphs in your Svelte applications.
|
||||
|
||||
Read more about creating a library [in the docs](https://svelte.dev/docs/kit/packaging).
|
||||
## Installation
|
||||
|
||||
## Creating a project
|
||||
|
||||
If you're seeing this, you've probably already done this step. Congrats!
|
||||
|
||||
```sh
|
||||
# create a new project in the current directory
|
||||
npx sv create
|
||||
|
||||
# create a new project in my-app
|
||||
npx sv create my-app
|
||||
```bash
|
||||
npm install svelte-github-calendar
|
||||
```
|
||||
|
||||
## Developing
|
||||
## Usage
|
||||
|
||||
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
|
||||
### Basic Example
|
||||
|
||||
```sh
|
||||
npm run dev
|
||||
```svelte
|
||||
<script>
|
||||
import { GithubCalendar } from 'svelte-github-calendar';
|
||||
</script>
|
||||
|
||||
# or start the server and open the app in a new browser tab
|
||||
npm run dev -- --open
|
||||
<GithubCalendar username="yourusername" />
|
||||
```
|
||||
|
||||
Everything inside `src/lib` is part of your library, everything inside `src/routes` can be used as a showcase or preview app.
|
||||
### Advanced Example
|
||||
|
||||
## Building
|
||||
```svelte
|
||||
<script>
|
||||
import { GithubCalendar } from 'svelte-github-calendar';
|
||||
</script>
|
||||
|
||||
To build your library:
|
||||
|
||||
```sh
|
||||
npm pack
|
||||
<GithubCalendar
|
||||
username="yourusername"
|
||||
summary_text="Summary of {name}'s GitHub activity"
|
||||
global_stats={true}
|
||||
responsive={true}
|
||||
tooltips={true}
|
||||
cache={60}
|
||||
class="my-custom-class"
|
||||
/>
|
||||
```
|
||||
|
||||
To create a production version of your showcase app:
|
||||
## Props
|
||||
|
||||
```sh
|
||||
npm run build
|
||||
```
|
||||
| Prop | Type | Default | Description |
|
||||
| -------------- | ---------- | ------------ | ---------------------------------------- |
|
||||
| `username` | `string` | **Required** | GitHub username to display calendar for |
|
||||
| `summary_text` | `string` | `undefined` | Custom summary text template. |
|
||||
| `proxy` | `function` | `undefined` | Custom proxy function for API requests |
|
||||
| `global_stats` | `boolean` | `undefined` | Whether to show global statistics |
|
||||
| `responsive` | `boolean` | `undefined` | Enable responsive design |
|
||||
| `tooltips` | `boolean` | `undefined` | Enable hover tooltips |
|
||||
| `cache` | `number` | `undefined` | Cache duration in seconds |
|
||||
| `class` | `string` | `''` | Additional CSS classes for the container |
|
||||
|
||||
You can preview the production build with `npm run preview`.
|
||||
You can read more about the props in the [original documentation](https://github.com/Bloggify/github-calendar).
|
||||
|
||||
> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment.
|
||||
## Credits
|
||||
|
||||
## Publishing
|
||||
- Svelte wrapper of [github-calendar](https://github.com/Bloggify/github-calendar) by Bloggify
|
||||
- Designed specifically for Svelte applications
|
||||
|
||||
Go into the `package.json` and give your package the desired name through the `"name"` option. Also consider adding a `"license"` field and point it to a `LICENSE` file which you can create from a template (one popular option is the [MIT license](https://opensource.org/license/mit/)).
|
||||
## License
|
||||
|
||||
To publish your library to [npm](https://www.npmjs.com):
|
||||
This library is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
|
||||
|
||||
```sh
|
||||
npm publish
|
||||
```
|
||||
## Contributing
|
||||
|
||||
Contributions are welcome! Feel free to:
|
||||
|
||||
- Report bugs
|
||||
- Suggest new features
|
||||
- Submit pull requests
|
||||
- Improve documentation
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Calendar not loading
|
||||
|
||||
- Ensure the username is valid and public
|
||||
- Verify network connectivity
|
||||
|
||||
@@ -22,9 +22,7 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
<div class={`calendar-holder ${className}`}>
|
||||
<div class="calendar"></div>
|
||||
</div>
|
||||
<div class={`calendar ${className}`}></div>
|
||||
|
||||
<style global>
|
||||
:root {
|
||||
@@ -35,235 +33,242 @@
|
||||
--color-calendar-graph-day-L4-bg: #0a4208 !important;
|
||||
}
|
||||
:global {
|
||||
.calendar-holder {
|
||||
.ContributionCalendar-day[data-level='0'] {
|
||||
background-color: var(--color-calendar-graph-day-bg) !important;
|
||||
}
|
||||
.ContributionCalendar-day[data-level='0'] {
|
||||
background-color: var(--color-calendar-graph-day-bg) !important;
|
||||
}
|
||||
|
||||
.ContributionCalendar-day[data-level='1'] {
|
||||
background-color: var(--color-calendar-graph-day-L1-bg) !important;
|
||||
}
|
||||
.ContributionCalendar-day[data-level='1'] {
|
||||
background-color: var(--color-calendar-graph-day-L1-bg) !important;
|
||||
}
|
||||
|
||||
.ContributionCalendar-day[data-level='2'] {
|
||||
background-color: var(--color-calendar-graph-day-L2-bg) !important;
|
||||
}
|
||||
.ContributionCalendar-day[data-level='2'] {
|
||||
background-color: var(--color-calendar-graph-day-L2-bg) !important;
|
||||
}
|
||||
|
||||
.ContributionCalendar-day[data-level='3'] {
|
||||
background-color: var(--color-calendar-graph-day-L3-bg) !important;
|
||||
}
|
||||
.ContributionCalendar-day[data-level='3'] {
|
||||
background-color: var(--color-calendar-graph-day-L3-bg) !important;
|
||||
}
|
||||
|
||||
.ContributionCalendar-day[data-level='4'] {
|
||||
background-color: var(--color-calendar-graph-day-L4-bg) !important;
|
||||
}
|
||||
.ContributionCalendar-day[data-level='4'] {
|
||||
background-color: var(--color-calendar-graph-day-L4-bg) !important;
|
||||
}
|
||||
|
||||
table.ContributionCalendar-grid {
|
||||
margin-bottom: 0pt !important;
|
||||
}
|
||||
table.ContributionCalendar-grid {
|
||||
margin-bottom: 0pt !important;
|
||||
border-collapse: separate !important;
|
||||
}
|
||||
|
||||
table.ContributionCalendar-grid td {
|
||||
padding: 4pt !important;
|
||||
}
|
||||
table.ContributionCalendar-grid td {
|
||||
padding: 4pt !important;
|
||||
}
|
||||
|
||||
table.ContributionCalendar-grid td span.sr-only {
|
||||
display: none !important;
|
||||
}
|
||||
table.ContributionCalendar-grid td span.sr-only {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
td.ContributionCalendar-label span[aria-hidden='true'] {
|
||||
font-size: 8pt !important;
|
||||
left: -1pt !important;
|
||||
}
|
||||
td.ContributionCalendar-label span[aria-hidden='true'] {
|
||||
font-size: 8pt !important;
|
||||
left: -1pt !important;
|
||||
}
|
||||
|
||||
tool-tip {
|
||||
display: none !important;
|
||||
}
|
||||
tool-tip {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.calendar .width-full > .float-left {
|
||||
display: none !important;
|
||||
}
|
||||
.calendar .width-full > .float-left {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.calendar {
|
||||
font-family: Helvetica, arial !important;
|
||||
border: 1px solid #dddddd !important;
|
||||
border-radius: 3px !important;
|
||||
min-height: 243px !important;
|
||||
text-align: center !important;
|
||||
margin: 0 auto !important;
|
||||
}
|
||||
.calendar {
|
||||
font-family: Helvetica, arial !important;
|
||||
border: 1px solid #dddddd !important;
|
||||
border-radius: 3px !important;
|
||||
min-height: 243px !important;
|
||||
text-align: center !important;
|
||||
margin: 0 auto !important;
|
||||
}
|
||||
|
||||
.calendar-graph text.wday,
|
||||
.calendar-graph text.month {
|
||||
font-size: 10px !important;
|
||||
fill: #aaa !important;
|
||||
}
|
||||
.calendar-graph text.wday,
|
||||
.calendar-graph text.month {
|
||||
font-size: 10px !important;
|
||||
fill: #aaa !important;
|
||||
}
|
||||
|
||||
div.px-md-5 {
|
||||
height: 2rem !important;
|
||||
}
|
||||
div.px-md-5 {
|
||||
height: 2rem !important;
|
||||
}
|
||||
|
||||
div.float-right {
|
||||
text-align: right !important;
|
||||
padding: 0 14px 10px 0 !important;
|
||||
display: inline-block !important;
|
||||
float: right !important;
|
||||
}
|
||||
div.float-right {
|
||||
text-align: right !important;
|
||||
padding: 0 14px 10px 0 !important;
|
||||
display: inline-block !important;
|
||||
float: right !important;
|
||||
}
|
||||
|
||||
div.float-right div {
|
||||
display: inline-block !important;
|
||||
list-style: none !important;
|
||||
margin: 0 5px !important;
|
||||
position: relative !important;
|
||||
bottom: -1px !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
div.float-right div {
|
||||
display: inline-block !important;
|
||||
list-style: none !important;
|
||||
margin: 0 5px !important;
|
||||
position: relative !important;
|
||||
bottom: -1px !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
div.float-right span.sr-only {
|
||||
display: none !important;
|
||||
}
|
||||
div.float-right span.sr-only {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.contrib-legend .legend li {
|
||||
display: inline-block !important;
|
||||
width: 10px !important;
|
||||
height: 10px !important;
|
||||
}
|
||||
.contrib-legend .legend li {
|
||||
display: inline-block !important;
|
||||
width: 10px !important;
|
||||
height: 10px !important;
|
||||
}
|
||||
|
||||
.text-small {
|
||||
font-size: 12px !important;
|
||||
color: #767676 !important;
|
||||
}
|
||||
.text-small {
|
||||
font-size: 12px !important;
|
||||
color: #767676 !important;
|
||||
}
|
||||
|
||||
.calendar-graph {
|
||||
padding: 5px 0 0 !important;
|
||||
text-align: center !important;
|
||||
}
|
||||
.calendar-graph {
|
||||
padding: 5px 0 0 !important;
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.contrib-column {
|
||||
padding: 15px 0 !important;
|
||||
text-align: center !important;
|
||||
border-left: 1px solid #ddd !important;
|
||||
border-top: 1px solid #ddd !important;
|
||||
font-size: 11px !important;
|
||||
}
|
||||
.contrib-column {
|
||||
padding: 15px 0 !important;
|
||||
text-align: center !important;
|
||||
border-left: 1px solid #ddd !important;
|
||||
border-top: 1px solid #ddd !important;
|
||||
font-size: 11px !important;
|
||||
}
|
||||
|
||||
.contrib-column-first {
|
||||
border-left: 0 !important;
|
||||
}
|
||||
.contrib-column span {
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.contrib-column-first {
|
||||
border-left: 0 !important;
|
||||
}
|
||||
|
||||
.table-column {
|
||||
box-sizing: border-box !important;
|
||||
display: table-cell !important;
|
||||
width: 1% !important;
|
||||
padding-right: 10px !important;
|
||||
padding-left: 10px !important;
|
||||
vertical-align: top !important;
|
||||
}
|
||||
|
||||
.contrib-number {
|
||||
font-weight: 300 !important;
|
||||
line-height: 1.3em !important;
|
||||
font-size: 24px !important;
|
||||
display: block !important;
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
.calendar img.spinner {
|
||||
width: 70px !important;
|
||||
margin-top: 50px !important;
|
||||
min-height: 70px !important;
|
||||
}
|
||||
|
||||
.monospace {
|
||||
text-align: center !important;
|
||||
color: #000 !important;
|
||||
font-family: monospace !important;
|
||||
}
|
||||
|
||||
.monospace a {
|
||||
color: #1d75ab !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.contrib-footer {
|
||||
font-size: 11px !important;
|
||||
padding: 0 10px 12px !important;
|
||||
text-align: left !important;
|
||||
width: 100% !important;
|
||||
box-sizing: border-box !important;
|
||||
height: 26px !important;
|
||||
}
|
||||
|
||||
.calendar .text-muted {
|
||||
color: inherit !important;
|
||||
}
|
||||
|
||||
.left.text-muted {
|
||||
float: left !important;
|
||||
margin-left: 9px !important;
|
||||
color: #767676 !important;
|
||||
}
|
||||
|
||||
.left.text-muted a {
|
||||
color: #4078c0 !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.left.text-muted a:hover,
|
||||
.monospace a:hover {
|
||||
text-decoration: underline !important;
|
||||
}
|
||||
|
||||
h2.f4.text-normal.mb-3 {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.float-left.text-gray {
|
||||
float: left !important;
|
||||
}
|
||||
|
||||
#user-activity-overview {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.day-tooltip {
|
||||
white-space: nowrap !important;
|
||||
position: absolute !important;
|
||||
z-index: 99999 !important;
|
||||
padding: 10px !important;
|
||||
font-size: 12px !important;
|
||||
color: #959da5 !important;
|
||||
text-align: center !important;
|
||||
background: rgba(0, 0, 0, 0.85) !important;
|
||||
border-radius: 3px !important;
|
||||
display: none !important;
|
||||
pointer-events: none !important;
|
||||
}
|
||||
|
||||
.day-tooltip strong {
|
||||
color: #dfe2e5 !important;
|
||||
}
|
||||
|
||||
.day-tooltip.is-visible {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.day-tooltip:after {
|
||||
position: absolute !important;
|
||||
bottom: -10px !important;
|
||||
left: 50% !important;
|
||||
width: 5px !important;
|
||||
height: 5px !important;
|
||||
box-sizing: border-box !important;
|
||||
margin: 0 0 0 -5px !important;
|
||||
content: ' ' !important;
|
||||
border: 5px solid transparent !important;
|
||||
border-top-color: rgba(0, 0, 0, 0.85);
|
||||
}
|
||||
|
||||
text.ContributionCalendar-label {
|
||||
fill: #ccc !important;
|
||||
font-size: 11px !important;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.table-column {
|
||||
box-sizing: border-box !important;
|
||||
display: table-cell !important;
|
||||
width: 1% !important;
|
||||
padding-right: 10px !important;
|
||||
padding-left: 10px !important;
|
||||
vertical-align: top !important;
|
||||
}
|
||||
|
||||
.contrib-number {
|
||||
font-weight: 300 !important;
|
||||
line-height: 1.3em !important;
|
||||
font-size: 24px !important;
|
||||
display: block !important;
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
.calendar img.spinner {
|
||||
width: 70px !important;
|
||||
margin-top: 50px !important;
|
||||
min-height: 70px !important;
|
||||
}
|
||||
|
||||
.monospace {
|
||||
text-align: center !important;
|
||||
color: #000 !important;
|
||||
font-family: monospace !important;
|
||||
}
|
||||
|
||||
.monospace a {
|
||||
color: #1d75ab !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.contrib-footer {
|
||||
font-size: 11px !important;
|
||||
padding: 0 10px 12px !important;
|
||||
text-align: left !important;
|
||||
width: 100% !important;
|
||||
box-sizing: border-box !important;
|
||||
height: 26px !important;
|
||||
}
|
||||
|
||||
.left.text-muted {
|
||||
float: left !important;
|
||||
margin-left: 9px !important;
|
||||
color: #767676 !important;
|
||||
}
|
||||
|
||||
.left.text-muted a {
|
||||
color: #4078c0 !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.left.text-muted a:hover,
|
||||
.monospace a:hover {
|
||||
text-decoration: underline !important;
|
||||
}
|
||||
|
||||
h2.f4.text-normal.mb-3 {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.float-left.text-gray {
|
||||
float: left !important;
|
||||
}
|
||||
|
||||
#user-activity-overview {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.day-tooltip {
|
||||
white-space: nowrap !important;
|
||||
position: absolute !important;
|
||||
z-index: 99999 !important;
|
||||
padding: 10px !important;
|
||||
font-size: 12px !important;
|
||||
color: #959da5 !important;
|
||||
text-align: center !important;
|
||||
background: rgba(0, 0, 0, 0.85) !important;
|
||||
border-radius: 3px !important;
|
||||
display: none !important;
|
||||
pointer-events: none !important;
|
||||
}
|
||||
|
||||
.day-tooltip strong {
|
||||
color: #dfe2e5 !important;
|
||||
}
|
||||
|
||||
.day-tooltip.is-visible {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.day-tooltip:after {
|
||||
position: absolute !important;
|
||||
bottom: -10px !important;
|
||||
left: 50% !important;
|
||||
width: 5px !important;
|
||||
height: 5px !important;
|
||||
box-sizing: border-box !important;
|
||||
margin: 0 0 0 -5px !important;
|
||||
content: ' ' !important;
|
||||
border: 5px solid transparent !important;
|
||||
border-top-color: rgba(0, 0, 0, 0.85);
|
||||
}
|
||||
|
||||
text.ContributionCalendar-label {
|
||||
fill: #ccc !important;
|
||||
font-size: 11px !important;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.table-column {
|
||||
display: block !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,4 +2,6 @@
|
||||
import { GitHubCalendar } from '../lib/index.js';
|
||||
</script>
|
||||
|
||||
<GitHubCalendar username="Paillat-dev" class="w-full h-auto" />
|
||||
<main>
|
||||
<GitHubCalendar username="Paillat-dev" class="w-full h-auto" />
|
||||
</main>
|
||||
|
||||
Reference in New Issue
Block a user