120 | ${title ? `
${title}
` : ''}
121 | ${description ? `
${description}
` : ''}
122 | ${timeline}
123 |
124 | `;
125 | };
126 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to d3-milestones
2 |
3 | Contributions are welcome! This document provides guidelines for contributing to the project.
4 | This is important: Before contributing a PR, check in with the maintainer. Comment on an existing issue if you want to pick it up or create a new one with a description of what you'd like to work on. Without this, PRs might get rejected if they don't align with the scope of the project.
5 |
6 | ## Getting Started
7 |
8 | 1. Fork the repository
9 | 2. Clone your fork
10 | 3. Install dependencies: `yarn install`
11 | 4. Create a branch for your feature/fix
12 |
13 | ## Development
14 |
15 | - Build: `yarn build`
16 | - Start dev server: `yarn start` or `yarn watch`
17 | - Run tests: `yarn test`
18 | - Run linter: `yarn lint` (use `yarn lint --fix` to auto-fix)
19 | - Storybook: `yarn storybook`
20 |
21 | ## Making Changes
22 |
23 | ### Code Style
24 |
25 | - Use ES6 modules with named exports
26 | - Follow ESLint and Prettier rules defined in .eslintrc.json
27 | - Write Jest tests for new functionality
28 | - Use kebab-case for filenames (with leading underscore for internal modules)
29 | - Follow D3.js conventions and API patterns
30 | - Keep code backward compatible when possible
31 |
32 | ### Adding a Changeset
33 |
34 | When you make a change that should be released, run:
35 |
36 | ```bash
37 | yarn changeset
38 | ```
39 |
40 | This will prompt you to:
41 |
42 | 1. Select the type of change:
43 | - **patch**: Bug fixes and minor improvements
44 | - **minor**: New features (backward compatible)
45 | - **major**: Breaking changes
46 | 2. Write a clear summary of the change
47 |
48 | The changeset file will be committed with your PR.
49 |
50 | ### Documentation
51 |
52 | - Update README.md for user-facing changes
53 | - Add JSDoc comments for new public APIs
54 | - Keep CLAUDE.md updated for architectural changes
55 |
56 | ## Pull Requests
57 |
58 | - Create a PR with a clear description
59 | - Ensure all tests pass (`yarn test`)
60 | - Ensure linting passes (`yarn lint`)
61 | - Include a changeset if the change should be released
62 | - Reference any related issues
63 |
64 | ## Release Process
65 |
66 | Releases are automated via GitHub Actions. See [docs/RELEASE_PROCESS.md](docs/RELEASE_PROCESS.md) for complete details.
67 |
68 | Quick summary:
69 | 1. PRs with changesets merged to `main` trigger Release PR creation
70 | 2. Release PR is reviewed and merged by maintainers
71 | 3. Package is automatically published to npm with provenance attestations
72 |
73 | ## Reporting Issues
74 |
75 | - Check existing issues first
76 | - Include browser/Node.js version
77 | - Provide a minimal reproduction example
78 | - Include expected vs actual behavior
79 |
80 | ## Code Review
81 |
82 | All submissions require review. Maintainers will provide feedback and may request changes.
83 |
84 | ## Documentation Style
85 |
86 | For JSDoc comments, git messages, and documentation:
87 |
88 | - Use present tense verbs (fetches, calculates, returns)
89 | - Avoid filler words (very, really, just, simply, basically, actually, literally, comprehensive)
90 | - Avoid hedging (probably, maybe, might, could, should)
91 | - Avoid obvious phrases (please note, it's important to, keep in mind)
92 | - Keep sentences under 20 words
93 | - Be direct and factual
94 | - Use active voice only
95 |
96 | ## License
97 |
98 | By contributing, you agree that your contributions will be licensed under the Apache-2.0 License.
99 |
--------------------------------------------------------------------------------
/src/styles/styles.less:
--------------------------------------------------------------------------------
1 | .milestones {
2 | }
3 |
4 | .milestones__category_label {
5 | display: inline-block;
6 | text-align: right;
7 | font-size: 14px;
8 | line-height: 1;
9 | position: relative;
10 | top: calc(4px + 1.5px); /* Line margin-top + half line height */
11 | transform: translateY(50%); /* Shift down by half the label's height */
12 | }
13 |
14 | .milestones__horizontal_line {
15 | position: absolute;
16 | background-color: #000;
17 | height: 3px;
18 | margin-top: 4px;
19 | margin-left: 5.5px;
20 | border-radius: 1.5px;
21 | }
22 |
23 | .milestones__vertical_line {
24 | position: absolute;
25 | background-color: #000;
26 | width: 3px;
27 | margin-left: 4px;
28 | margin-bottom: 5.5px;
29 | border-radius: 1.5px;
30 | }
31 |
32 | .milestones__group {
33 | position: absolute;
34 | font-family: sans-serif;
35 | font-size: 10px;
36 | }
37 |
38 | .milestones__group__bullet {
39 | background-color: #fff;
40 | border: 3px solid #333;
41 | border-radius: 50%;
42 | width: 0px;
43 | height: 0px;
44 | padding: 2.5px;
45 | position: relative;
46 | left: 5.5px; /* Center on timeline (margin-left of line) */
47 | top: 5.5px; /* Center on timeline (margin-top + half line height) */
48 | transform: translate(-50%, -50%); /* Center the bullet itself */
49 | }
50 |
51 | .milestones__group__label-horizontal,.milestones__group__label-vertical {
52 | position: absolute;
53 | padding: 0;
54 | color: #666;
55 |
56 | }
57 |
58 | .milestones__group__label-horizontal {
59 | border-left: 1px solid #000;
60 | margin-left: 5.5px; /* Align with bullet center */
61 |
62 | div {
63 | position: relative;
64 | margin-left: 3px;
65 | display: inline-block;
66 | }
67 | }
68 |
69 | .milestones__group__label-vertical {
70 | padding-left: 10px;
71 | padding-bottom: 0px;
72 | border-bottom: 1px solid #000;
73 | margin-bottom: -5.5px;
74 | margin-left: 10px;
75 | bottom: 100%;
76 | overflow: visible;
77 | .wrapper {
78 | min-width: 100px;
79 | max-width: 300px;
80 | border-left: 1px solid black;
81 | border-bottom: 1px solid white;
82 | margin-bottom: -1px;
83 | padding-left: 5px;
84 | }
85 | }
86 |
87 | .milestones__group__label-above-horizontal {
88 | bottom: 100%;
89 | }
90 |
91 | .milestones__group__label-above-vertical {
92 | padding-left: 0px;
93 | padding-right: 10px;
94 | right: 100%;
95 | text-align: right;
96 | .wrapper {
97 | border-left: 0;
98 | border-right: 1px solid black;
99 | padding-left: 0px;
100 | padding-right: 5px;
101 | }
102 | }
103 |
104 | .milestones__group__label-last {
105 | right: 100%;
106 | border-left: 0;
107 | border-right: 1px solid #000;
108 | margin-left: 0;
109 | margin-right: -6px;
110 | text-align: right;
111 |
112 | div {
113 | margin-left: 0px;
114 | margin-right: 3px;
115 | }
116 | }
117 |
118 | .milestones__group__label__text-vertical {
119 | display: table-cell;
120 | vertical-align: bottom;
121 | }
122 |
123 | .milestones__group__label__text__title {
124 | color: #000;
125 | font-weight: bold;
126 | font-size: 11px;
127 | white-space: nowrap;
128 | }
129 | .milestones__group__label__text__event {
130 | cursor: pointer;
131 | }
132 | .milestones__group__label__text__event--hover {
133 | background: #efefef;
134 | color: #313131;
135 | }
136 |
--------------------------------------------------------------------------------
/src/stories/assets/lotr.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "timestamp":"12.04.3018",
4 | "character":"Gandalf",
5 | "text":"Gandalf reaches Hobbiton. Tells Frodo about the ring."
6 | },
7 | {
8 | "timestamp":"12.04.3018",
9 | "character":"Frodo",
10 | "text":"Gandalf tells Frodo about the ring."
11 | },
12 | {
13 | "timestamp":"30.06.3018",
14 | "character":"Gandalf",
15 | "text":"Gandalf leaves Hobbiton. Leaves for Isengard."
16 | },
17 | {
18 | "timestamp":"20.07.3018",
19 | "character":"Gandalf",
20 | "text":"Gandalf imprisoned in Orthanc by Saruman."
21 | },
22 | {
23 | "timestamp":"18.09.3018",
24 | "character":"Gandalf",
25 | "text":"Gandalf escapes from Orthanc."
26 | },
27 | {
28 | "timestamp":"19.09.3018",
29 | "character":"Gandalf",
30 | "text":"Gandalf comes to Edoras."
31 | },
32 | {
33 | "timestamp":"22.09.3018",
34 | "character":"Frodo",
35 | "text":"Frodo's birthday party."
36 | },
37 | {
38 | "timestamp":"23.09.3018",
39 | "character":"Frodo",
40 | "text":"Fatty and Merry leave in the morning. Frodo, Sam and Pippin in the evening."
41 | },
42 | {
43 | "timestamp":"23.09.3018",
44 | "character":"Gandalf",
45 | "text":"Gandalf tames Shadowfax and rides to Hobbiton."
46 | },
47 | {
48 | "timestamp":"25.09.3018",
49 | "character":"Frodo",
50 | "text":"The hobbits reunite in Crickhollow."
51 | },
52 | {
53 | "timestamp":"26.09.3018",
54 | "character":"Frodo",
55 | "text":"The hobbits stay with Tom Bombadil."
56 | },
57 | {
58 | "timestamp":"28.09.3018",
59 | "character":"Frodo",
60 | "text":"Captured by Barrow-wight. Rescued by Tom Bombadil."
61 | },
62 | {
63 | "timestamp":"29.09.3018",
64 | "character":"Gandalf",
65 | "text":"Gandalf reaches Hobbiton."
66 | },
67 | {
68 | "timestamp":"29.09.3018",
69 | "character":"Frodo",
70 | "text":"Arrival at Bree. Meeting with Strider."
71 | },
72 | {
73 | "timestamp":"30.09.3018",
74 | "character":"Frodo",
75 | "text":"Hobbits and Strider leave Bree in the morning."
76 | },
77 | {
78 | "timestamp":"01.10.3018",
79 | "character":"Gandalf",
80 | "text":"Gandalf leaves Bree."
81 | },
82 | {
83 | "timestamp":"03.10.3018",
84 | "character":"Gandalf",
85 | "text":"Gandalf attacked on Weathertop."
86 | },
87 | {
88 | "timestamp":"06.10.3018",
89 | "character":"Frodo",
90 | "text":"Camp attacked at night. Frodo wounded."
91 | },
92 | {
93 | "timestamp":"13.10.3018",
94 | "character":"Frodo",
95 | "text":"Group crosses the bridge of Mithreidel."
96 | },
97 | {
98 | "timestamp":"18.10.3018",
99 | "character":"Gandalf",
100 | "text":"Gandalf reaches Rivendell."
101 | },
102 | {
103 | "timestamp":"18.10.3018",
104 | "character":"Frodo",
105 | "text":"Glorfindel finds Frodo at dusk."
106 | },
107 | {
108 | "timestamp":"20.10.3018",
109 | "character":"Frodo",
110 | "text":"Frodo escapes the Ford of Bruinen. Arrival in Rivendell."
111 | },
112 | {
113 | "timestamp":"24.10.3018",
114 | "character":"Frodo",
115 | "text":"Frodo awakes in Rivendell."
116 | },
117 | {
118 | "timestamp":"25.10.3018",
119 | "character":"Gandalf",
120 | "text":"The Council of Elrond."
121 | },
122 | {
123 | "timestamp":"25.10.3018",
124 | "character":"Frodo",
125 | "text":"The Council of Elrond."
126 | },
127 | {
128 | "timestamp":"31.12.3018",
129 | "character":"Gandalf",
130 | "text":"The fellowship leaves Rivendell at dawn."
131 | },
132 | {
133 | "timestamp":"31.12.3018",
134 | "character":"Frodo",
135 | "text":"The fellowship leaves Rivendell at dawn."
136 | }
137 | ]
138 |
--------------------------------------------------------------------------------
/src/stories/assets/milestones-with-ids.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "timestamp":"2017-08-22T00:00",
4 | "detail":"v1.0.0-alpha1",
5 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-alpha1",
6 | "customId":"milestone-v1-0-0-alpha1"
7 | },
8 | {
9 | "timestamp":"2017-08-24T00:00",
10 | "detail":"v1.0.0-alpha2",
11 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-alpha2",
12 | "customId":"milestone-v1-0-0-alpha2"
13 | },
14 | {
15 | "timestamp":"2017-08-30T00:00",
16 | "detail":"v1.0.0-alpha3",
17 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-alpha3",
18 | "customId":"milestone-v1-0-0-alpha3"
19 | },
20 | {
21 | "timestamp":"2017-09-03T00:00",
22 | "detail":"v1.0.0-alpha4",
23 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-alpha4",
24 | "customId":"milestone-v1-0-0-alpha4"
25 | },
26 | {
27 | "timestamp":"2017-09-06T00:00",
28 | "detail":"v1.0.0-alpha5",
29 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-alpha5",
30 | "customId":"milestone-v1-0-0-alpha5"
31 | },
32 | {
33 | "timestamp":"2017-10-16T00:00",
34 | "detail":"v1.0.0-alpha6",
35 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-alpha6",
36 | "customId":"milestone-v1-0-0-alpha6"
37 | },
38 | {
39 | "timestamp":"2017-11-02T00:00",
40 | "detail":"v1.0.0-alpha7",
41 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-alpha7",
42 | "customId":"milestone-v1-0-0-alpha7"
43 | },
44 | {
45 | "timestamp":"2017-11-03T00:00",
46 | "detail":"v1.0.0-alpha8",
47 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-alpha8",
48 | "customId":"milestone-v1-0-0-alpha8"
49 | },
50 | {
51 | "timestamp":"2018-01-05T00:00",
52 | "detail":"v1.0.0-alpha9",
53 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-alpha9",
54 | "customId":"milestone-v1-0-0-alpha9"
55 | },
56 | {
57 | "timestamp":"2018-01-30T00:00",
58 | "detail":"v1.0.0-alpha10",
59 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-alpha10",
60 | "customId":"milestone-v1-0-0-alpha10"
61 | },
62 | {
63 | "timestamp":"2018-02-19T00:00",
64 | "detail":"v1.0.0-alpha11",
65 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-alpha11",
66 | "customId":"milestone-v1-0-0-alpha11"
67 | },
68 | {
69 | "timestamp":"2018-03-28T00:00",
70 | "detail":"v1.0.0-alpha12",
71 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-alpha12",
72 | "customId":"milestone-v1-0-0-alpha12"
73 | },
74 | {
75 | "timestamp":"2018-04-27T00:00",
76 | "detail":"v1.0.0-alpha13",
77 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-alpha13",
78 | "customId":"milestone-v1-0-0-alpha13"
79 | },
80 | {
81 | "timestamp":"2020-02-18T00:00",
82 | "detail":"v1.0.0-alpha14",
83 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-alpha14",
84 | "customId":"milestone-v1-0-0-alpha14"
85 | },
86 | {
87 | "timestamp":"2020-03-14T00:00",
88 | "detail":"v1.0.0-beta1",
89 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-beta1",
90 | "customId":"milestone-v1-0-0-beta1"
91 | },
92 | {
93 | "timestamp":"2020-03-17T00:00",
94 | "detail":"v1.0.0-beta2",
95 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0-beta2",
96 | "customId":"milestone-v1-0-0-beta2"
97 | },
98 | {
99 | "timestamp":"2020-04-14T00:00",
100 | "detail":"v1.0.0",
101 | "giturl":"https://github.com/walterra/d3-milestones/releases/tag/v1.0.0",
102 | "customId":"milestone-v1-0-0"
103 | }
104 | ]
--------------------------------------------------------------------------------
/src/stories/assets/vikings.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "year":789,
4 | "title":"Vikings begin attacks on England.",
5 | "id":"789-attacks-england"
6 | },
7 | {
8 | "year":800,
9 | "title":"The Oseberg Viking longship buried",
10 | "id":"800-oseberg-longship"
11 | },
12 | {
13 | "year":840,
14 | "title":"Vikings found Dublin in Ireland.",
15 | "id":"840-dublin-ireland"
16 | },
17 | {
18 | "year":844,
19 | "title":"A Viking raid on Seville is repulsed.",
20 | "id":"844-seville-raid"
21 | },
22 | {
23 | "year":860,
24 | "title":"Rus Vikings attack Constantinople.",
25 | "id":"860-constantinople-attack"
26 | },
27 | {
28 | "year":862,
29 | "title":"Novgorod in Russia is founded by the Rus Viking, Ulrich.",
30 | "id":"862-novgorod-founded"
31 | },
32 | {
33 | "year":866,
34 | "title":"Danish Vikings establish a kingdom in York, England.",
35 | "id":"866-york-kingdom"
36 | },
37 | {
38 | "year":871,
39 | "title":"Danish advance is halted in England.",
40 | "id":"871-danish-halted"
41 | },
42 | {
43 | "year":872,
44 | "title":"Harald I gains control of Norway.",
45 | "id":"872-harald-norway"
46 | },
47 | {
48 | "year":879,
49 | "title":"Rurik establishes Kiev as the center of the Kievan Rus' domains.",
50 | "id":"879-kiev-established"
51 | },
52 | {
53 | "year":886,
54 | "title":"Alfred divides England with the Danes under the Danelaw pact.",
55 | "id":"886-danelaw-pact"
56 | },
57 | {
58 | "year":900,
59 | "title":"The Vikings raid along the Mediterranean coast.",
60 | "id":"900-mediterranean-raids"
61 | },
62 | {
63 | "year":911,
64 | "title":"The Viking chief Rollo founds Normandy in France.",
65 | "id":"911-normandy-founded"
66 | },
67 | {
68 | "year":941,
69 | "title":"Rus Vikings attack Constantinople(Istanbul).",
70 | "id":"941-constantinople-attack"
71 | },
72 | {
73 | "year":981,
74 | "title":"Viking leader Erik the Red discovers Greenland.",
75 | "id":"981-greenland-discovery"
76 | },
77 | {
78 | "year":986,
79 | "title":"Viking ships sail in Newfoundland waters.",
80 | "id":"986-newfoundland"
81 | },
82 | {
83 | "year":995,
84 | "title":"Olav I conquers Norway and proclaims it a Christian kingdom.",
85 | "id":"995-olav-norway"
86 | },
87 | {
88 | "year":1000,
89 | "title":"Christianity reaches Greenland and Iceland.",
90 | "id":"1000-christianity-iceland"
91 | },
92 | {
93 | "year":1000,
94 | "title":"Leif Eriksson, explores the coast of North America.",
95 | "id":"1000-leif-north-america"
96 | },
97 | {
98 | "year":1000,
99 | "title":"Olav I dies; Norway is ruled by the Danes.",
100 | "id":"1000-olav-dies"
101 | },
102 | {
103 | "year":1002,
104 | "title":"Brian Boru defeats the Norse and becomes the king of Ireland.",
105 | "id":"1002-brian-boru"
106 | },
107 | {
108 | "year":1013,
109 | "title":"The Danes conquer England; Æthelred flees to Normandy.",
110 | "id":"1013-danes-conquer-england"
111 | },
112 | {
113 | "year":1015,
114 | "title":"Vikings abandon the Vinland settlement on the coast of North America.",
115 | "id":"1015-vinland-abandoned"
116 | },
117 | {
118 | "year":1016,
119 | "title":"Olav II regains Norway from the Danes.",
120 | "id":"1016-olav-norway"
121 | },
122 | {
123 | "year":1016,
124 | "title":"The Danes under Knut(Canute) rule England.",
125 | "id":"1016-knut-england"
126 | },
127 | {
128 | "year":1028,
129 | "title":"Knut(Canute), king of England and Denmark, conquers Norway.",
130 | "id":"1028-knut-norway"
131 | },
132 | {
133 | "year":1042,
134 | "title":"Edward the Confessor rules England with the support of the Danes.",
135 | "id":"1042-edward-confessor"
136 | },
137 | {
138 | "year":1050,
139 | "title":"The city of Oslo is founded in Norway.",
140 | "id":"1050-oslo-founded"
141 | },
142 | {
143 | "year":1066,
144 | "title":"Battle of Stamford Bridge",
145 | "id":"1066-stamford-bridge"
146 | },
147 | {
148 | "year":1066,
149 | "title":"Battle of Hastings.",
150 | "id":"1066-hastings"
151 | }
152 | ]
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## [`main`](https://github.com/walterra/d3-milestones/tree/main)
2 |
3 | ## 1.6.0
4 |
5 | ### Minor Changes
6 |
7 | - 78c1b6c: Add categoryStyle mapping to style category labels and fix spacing calculation when multiple items share same timestamp
8 | - 4fbafeb: Add bulletStyle mapping for custom bullet colors and sizes, and add font-size examples to textStyle Storybook demonstration
9 |
10 | ### Patch Changes
11 |
12 | - 5528658: Fix release workflow to support headless browser testing
13 |
14 | No public interface changes since `v1.5.0`.
15 |
16 | ## [`v1.5.0`](https://github.com/walterra/d3-milestones/tree/v1.5.0)
17 |
18 | - Added support for ordinal scales as an alternative to time scales. (57c01be) ([#15](https://github.com/walterra/d3-milestones/issues/15))
19 | - Add `renderCallback()` method to apply customizations after rendering is complete. (c7d5c0f) ([#79](https://github.com/walterra/d3-milestones/issues/79))
20 | - Added support for custom HTML ID attributes for milestone elements. (a82b00a) ([#78](https://github.com/walterra/d3-milestones/issues/78))
21 | - Added WebP format to the list of supported image formats. (1ac8f55) ([#78](https://github.com/walterra/d3-milestones/issues/78))
22 |
23 | ## [`v1.4.7`](https://github.com/walterra/d3-milestones/tree/v1.4.7)
24 |
25 | - Update `.nvmrc` to `16.18` (243ef09).
26 |
27 | ## [`v1.4.6`](https://github.com/walterra/d3-milestones/tree/v1.4.6)
28 |
29 | - Update `.nvmrc` to `16.17` (6cdf96e).
30 |
31 | ## [`v1.4.5`](https://github.com/walterra/d3-milestones/tree/v1.4.5)
32 |
33 | - Update `.nvmrc` to `16.16` (da77577).
34 |
35 | ## [`v1.4.4`](https://github.com/walterra/d3-milestones/tree/v1.4.4)
36 |
37 | - Dependency updates.
38 |
39 | ## [`v1.4.3`](https://github.com/walterra/d3-milestones/tree/v1.4.3)
40 |
41 | - Update `.nvmrc` to `16.14`.
42 | - Fixes Karma setup.
43 | - Switched functional tests to use Firefox instead of Chrome.
44 | - Switched to Babel from Buble.
45 | - Updates `d3` modules.
46 |
47 | ## [`v1.4.2`](https://github.com/walterra/d3-milestones/tree/v1.4.2)
48 |
49 | - Fix `autoResize` if passed in `selector` is already an element and not just a string. (a25b41a)
50 |
51 | ## [`v1.4.1`](https://github.com/walterra/d3-milestones/tree/v1.4.1)
52 |
53 | - Fix `autoResize` to consider wrapping element instead of overall browser window. ([#62](https://github.com/walterra/d3-milestones/issues/62))
54 |
55 | ## [`v1.4.0`](https://github.com/walterra/d3-milestones/tree/v1.4.0)
56 |
57 | - Support for custom styles for text elements. ([#11](https://github.com/walterra/d3-milestones/issues/11))
58 |
59 | ## [`v1.3.0`](https://github.com/walterra/d3-milestones/tree/v1.3.0)
60 |
61 | - Expose option `urlTarget` to be able to set the `target` attribute when labels are rendered as links. ([#44](https://github.com/walterra/d3-milestones/issues/44))
62 |
63 | ## [`v1.2.2`](https://github.com/walterra/d3-milestones/tree/v1.2.2)
64 |
65 | - Optimize layout for last item. (6f7ab03)
66 |
67 | ## [`v1.2.1`](https://github.com/walterra/d3-milestones/tree/v1.2.1)
68 |
69 | - Fix `autoResize` on load. Improved defaults handling. ([#47](https://github.com/walterra/d3-milestones/issues/47))
70 |
71 | ## [`v1.2.0`](https://github.com/walterra/d3-milestones/tree/v1.2.0)
72 |
73 | - Expose `autoResize` as an option. ([#46](https://github.com/walterra/d3-milestones/issues/46))
74 | - Fixes stale event listeners. ([#45](https://github.com/walterra/d3-milestones/issues/45))
75 |
76 | ## [`v1.1.0`](https://github.com/walterra/d3-milestones/tree/v1.1.0)
77 |
78 | - Support for labels to be displayed as links ([#31](https://github.com/walterra/d3-milestones/issues/31))
79 |
80 | ## [`v1.0.1`](https://github.com/walterra/d3-milestones/tree/v1.0.1)
81 |
82 | - Fix build setup to no longer require `npx-force-resolutions` ([#27](https://github.com/walterra/d3-milestones/issues/27))
83 |
84 | ## [`v1.0.0`](https://github.com/walterra/d3-milestones/tree/v1.0.0)
85 |
86 | - Layout optimizations ([#16](https://github.com/walterra/d3-milestones/issues/16))
87 |
88 | ## [`v1.0.0-beta2`](https://github.com/walterra/d3-milestones/tree/v1.0.0-beta2)
89 |
90 | - Fixes vertical orientation when used with multiple categories ([#23](https://github.com/walterra/d3-milestones/issues/23))
91 | - Adds documentation for label distribution in `README.md`.
92 | - Updated project setup to include `jest` for unit tests and `prettier` for code formatting.
93 |
94 | ## [`v1.0.0-beta1`](https://github.com/walterra/d3-milestones/tree/v1.0.0-beta1)
95 |
96 | - Added an option to switch between horizontal and vertical orientation of the timeline ([#1](https://github.com/walterra/d3-milestones/issues/1))
97 |
98 | ## [`v1.0.0-alpha14`](https://github.com/walterra/d3-milestones/tree/v1.0.0-alpha14)
99 |
100 | - Added Math.round on the x.range to accommodate widths with decimal. Used in Grid Layouts with rows and columns. ([#10](https://github.com/walterra/d3-milestones/pull/10)) Thanks @jelohipolitocruz
101 |
102 | ## [`v1.0.0-alpha13`](https://github.com/walterra/d3-milestones/tree/v1.0.0-alpha13)
103 |
104 | - Fixes an issue where resizing would result in multiple label elements ([#7](https://github.com/walterra/d3-milestones/pull/7)). Thanks @avborhanian
105 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "d3-milestones",
3 | "version": "1.6.0",
4 | "description": "A d3 based timeline visualization.",
5 | "keywords": [
6 | "d3",
7 | "visualization",
8 | "timeline"
9 | ],
10 | "main": "build/d3-milestones.js",
11 | "module": "src/main",
12 | "jsnext:main": "src/main",
13 | "homepage": "https://walterra.github.io/d3-milestones",
14 | "repository": {
15 | "type": "git",
16 | "url": "https://github.com/walterra/d3-milestones.git"
17 | },
18 | "bugs": {
19 | "url": "https://github.com/walterra/d3-milestones/issues"
20 | },
21 | "license": "Apache-2.0",
22 | "contributors": [
23 | "Walter Rafelsberger