Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(shape.line): Allow customization of points #184

Closed
wants to merge 4 commits into from

Conversation

julien
Copy link
Collaborator

@julien julien commented Nov 2, 2017

Issue

#173

Details

  • Add point_type, point_create and point_update options

  • Add an example in the demo

- Add point_type, point_create and point_update options

- Add an example in the demo
@coveralls
Copy link

Coverage Status

Changes Unknown when pulling 0dfb8f0 on julien:custom-points into ** on naver:master**.

Copy link
Member

@netil netil left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wow, what a great feature implementation!
Great job, @julien.

I left some comments, hope not to be complex doing changes. :)

@@ -2044,6 +2044,9 @@ export default class Options {
* @property {Boolean} [point.focus.expand.enabled=true] Whether to expand each point on focus.
* @property {Boolean} [point.focus.expand.r=point.r*1.75] The radius size of each point on focus.
* @property {Number} [point.select.r=point.r*4] The radius size of each point on selected.
* @property {String} [point.type="circle"] The type of point to be drawn. (valid values are "circle" or "rectangle")
* @property {Function} [point.create=undefined] If specified and the point.type option is set to undefined, will be invoked to create line points, this function must return a d3 selection.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about having below interface?
When set type value as object having create & update, it treated as to create a custom element.

type: "circle", // or rectangle

// to create a custom type, set create & update functions as well
type: {
 	    create(element, cssClassFn, sizeFn, fillStyleFn) {
				...
				// should create node element to be used as data point and must return a d3.selection
				return element;
      	},
      	update(element, xPosFn, yPosFn, opacityStyleFn, fillStyleFn, withTransition, flow, selectedCircles) {
				...
				// adjust the position & styles to the given element and must return a d3.selection
				return element;
      	}
}

BTW, the current explanation is wrong, because to use custom element, the type should be set"custom".

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok thanks, I updated the doc comments.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@julien how about the interface that I proposed?
If type is set as an object, it means creating a customized data point.

IMO is more clear than the current, not having declare type to "custom" and not interfering custom options(create and update) being at the same level when type is 'circle' or 'rectangle'.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@netil, sorry I hadn't understood that point should be an object, but this does seem like a better idea, I've updated the code accordingly.

.attr("class", $$.classCircle.bind($$))
.attr("r", $$.pointR.bind($$))
.style("fill", $$.color)
let createFn;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not a big deal, but what about initialize with circle and remove last else block statement?

let createFn = $$.circle.create;

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes this makes sense and simplifies a bit the method, I updated that as well.


extend(ChartInternal.prototype, {
hasValidPointType() {
return POINT_TYPES.includes(this.config.point_type);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Array.includes isn't supported in IE. billboard.js has IE9+ support.

Can be transpiled using one of babel plugin

but, to not have another dev dependency, it might be better change in more compatible way.

     return /^(circle|rectangle)$/i.test(this.config.point_type);
     // or using Array.indexOf()

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perfect thanks, I've updated my PR with this code.


rectangle: {
create(element, cssClassFn, sizeFn, fillStyleFn) {
const rectSizeFn = d => sizeFn(d) * 2.0;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's using config.ponint_r value to determine the size of the data point.
But, when do mouseover(or interaction) on data point, isn't get changed bigger than normal size.

Is because of below code. Is changing r attribute value, which only works for <circle>

expandCircles(i, id, reset) {
const $$ = this;
const r = $$.pointExpandedR.bind($$);
if (reset) {
$$.unexpandCircles();
}
$$.getCircles(i, id)
.classed(CLASS.EXPANDED, true)
.attr("r", r);
},

I know that is not easy to handle that with squares and customs, but I think it should have a compatibility with the others point options.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@netil thant's a good point.
That said I have no idea how this could be applied to custom shapes (for example polygon), I did make an update to the current code so that it would only update the r attribute for circle and not other "shapes" while we think about a solution. (Maybe using css transform and scale is an option?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's good idea. I'll dig into transform:scale if this works :)

Copy link
Member

@netil netil Nov 7, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With transform-origin and transform:scale() can make it happen.
But, in the usage of r option, need to be discussed more.

The actual r means radius, so for other types it means r*2.
I think this can cause a confusion and the real meaning also doesn't fits.

The alternative that I though was:

  • use r value in different way when isn't circle.
    Instead of radius, it treats as 'scale'
  • set another option key like 'size'
    But, still there'll be a confusion between 'r' and 'size'
expandCircles(i, id, reset) {
	...

	if ($$.config.point_type === "circle") {
		circles.attr("r", r);
	} else {
		let scale = r(circles) / $$.config.point_r 

		circles
			.style("transform-origin", "center")
			.style("transform", `scale(${scale})`);
	}
},

unexpandCircles(i) {
	...

	if ($$.config.point_type === "circle") {
		circles.attr("r", r);
	} else {
		circles
			.style("transform-origin", null)
			.style("transform", null);
	}
},

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@netil from reading the code, and seeing it was rendering svg "circle" elements, it was quite clear to me that r meant radius. I like the approach of using scale for other shapes rather than having a size option, but that's just my opinion ;)

@netil netil added the feature label Nov 4, 2017
@netil netil added this to the 1.2.0 milestone Nov 4, 2017
- Update doc comments
- Simplify `create` and `update` point methods
- Update `expandCircles` and `unexpandCircles` methods
@coveralls
Copy link

Coverage Status

Changes Unknown when pulling ecde327 on julien:custom-points into ** on naver:master**.

demo/demo.js Outdated
point: {
type: "custom",

create(element, cssClassFn, sizeFn, fillStyle) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about integrate this as "triangle" type? That will be really useful.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've intergrated this "triangle" type, however I probably need your help with the update methods when withTransition and flow arguments are used.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got it @julien. I think this PR is great, but we need to have a detailed look on backward compatibility with other options without confusion.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@netil thanks for the feedback. I also just updated the demo.

- Fix custom point type
- Add triangle point type
- Update tests
@coveralls
Copy link

Coverage Status

Changes Unknown when pulling 8b710d7 on julien:custom-points into ** on naver:master**.

@coveralls
Copy link

Coverage Status

Changes Unknown when pulling e923eda on julien:custom-points into ** on naver:master**.

@netil
Copy link
Member

netil commented Nov 8, 2017

I think we're reaching almost the end.
I'll do the rest to merge :)

@julien
Copy link
Collaborator Author

julien commented Nov 8, 2017

@netil that's good news thanks.

@netil netil closed this in cc2ac8b Nov 9, 2017
@netil
Copy link
Member

netil commented Nov 9, 2017

Thanks @julien for excellent work!
I just merged the PR, but unfortunately made some updates due to the options compatibility.
Like flow can't be handle correctly for 'triangle' type (due to the coordinate of polygon node can't be set using attributes) and so on.

With this changes can be a start point using customized data points, so I think it can be improved by time and others feedbacks.

Hope this experienced a lot in good way~!
Gracias.

@julien
Copy link
Collaborator Author

julien commented Nov 9, 2017

Hey @netil no problem!

I saw the changes and it all looks good to me.

I was wondering if you had a release plan for the next updates?

Thanks again

@netil
Copy link
Member

netil commented Nov 9, 2017

well, if you check the milestone, the next coming is planned at Dec, 15th

@julien
Copy link
Collaborator Author

julien commented Nov 9, 2017

I hadn't seen it, thanks

@julien julien deleted the custom-points branch December 7, 2017 08:44
netil pushed a commit that referenced this pull request Jun 18, 2019
# 1.0.0 (2019-06-18)

### Bug Fixes

* fallback to __bindto's id attribute when it is not a string ([16a1e6d](16a1e6d))
* regex replaces everything that is not alphanum, - or _ ([1f093dd](1f093dd))
* **tooltip:** Correct tooltip position when is zoomed ([45785ab](45785ab)), closes [#197](#197) [#281](#281) [#431](#431) [#546](#546)
* throw errors instead of alerts ([12cf47d](12cf47d))
* **all:** Re-organize import from d3 ([c11a215](c11a215)), closes [#285](#285) [#313](#313)
* **AMD-module:** updating to enforce the AMD standard ([4f8f63c](4f8f63c))
* **api:** Cancel transitions on destroy. ([7dd287d](7dd287d)), closes [#766](#766) [#765](#765)
* **api:** Change the way of hiding tooltip ([#358](#358)) ([67c8305](67c8305)), closes [#343](#343)
* **api:** Correct .x()/.xs() to work properly ([80d4e1b](80d4e1b)), closes [#634](#634) [#635](#635)
* **api:** Correct on exporting custom points ([f65bcfb](f65bcfb)), closes [#541](#541) [#741](#741)
* **api:** Correct toggle interaction ([#456](#456)) ([3682a83](3682a83)), closes [#454](#454)
* **api:** Fix css encoding in exported svg ([321971e](321971e)), closes [#843](#843) [#844](#844)
* **api:** Fix JSON data loading ([9067138](9067138)), closes [#398](#398) [#400](#400)
* **api:** Fix loading to maintain correct x index ([f3881bc](f3881bc)), closes [#517](#517) [#519](#519)
* **api:** Fix regions.remove() error ([#579](#579)) ([0c0374f](0c0374f)), closes [#529](#529) [#578](#578)
* **api:** Fix to remove instance ([#357](#357)) ([80fdc31](80fdc31)), closes [#347](#347)
* **api:** Remove cached data when .unload() is called ([aa91bab](aa91bab)), closes [#626](#626) [#627](#627)
* **api-load:** Allow false for unload ([e52e5ad](e52e5ad)), closes [#321](#321) [#333](#333)
* **api.zoom, interaction:** fix zoom bug for rects ([b3521c8](b3521c8)), closes [#33](#33) [#46](#46)
* **arc:** Correction on rendering 0 values ([dcfa12c](dcfa12c)), closes [#652](#652) [#656](#656)
* **arc:** Fix to generate arc when data is zero ([04a4dd8](04a4dd8)), closes [#935](#935)
* **arc,api:** Correct on data representation and handling ([#332](#332)) ([3eec8d7](3eec8d7)), closes [#303](#303) [#331](#331)
* **area:** Apply gradient on dynamic data loading ([954c303](954c303)), closes [#855](#855)
* **area-line-range:** Fix working with grouped data ([1546dda](1546dda)), closes [#630](#630) [#644](#644)
* **area-range:** Correct handling null data ([cc1d4ee](cc1d4ee)), closes [#482](#482) [#487](#487)
* **area-range:** Fixed data parsing ([#485](#485)) ([4b78de5](4b78de5)), closes [#481](#481)
* **axis:** Adjust axes range ([0130519](0130519)), closes [#859](#859)
* **axis:** Avoid unnecessary computing char dimension ([3f52827](3f52827)), closes [#399](#399) [#407](#407)
* **axis:** Correct axis label position ([#538](#538)) ([37cca8c](37cca8c)), closes [#519](#519) [#534](#534)
* **axis:** Correct axis transition ([e2bec90](e2bec90)), closes [#759](#759)
* **axis:** Correct not to generate unnecessary ticks ([#560](#560)) ([9346e66](9346e66)), closes [#348](#348)
* **axis:** Correct rotated x axis rendering ([2b02a03](2b02a03)), closes [#230](#230) [#234](#234)
* **axis:** Correct tick's position implementation ([#457](#457)) ([09547be](09547be)), closes [#380](#380)
* **axis:** Correct ticks less than ~0.1 to be shown ([8d14bcb](8d14bcb)), closes [#387](#387) [#409](#409)
* **axis:** Fix indexed x axis order ([#879](#879)) ([df8d385](df8d385)), closes [#714](#714) [#877](#877)
* **axis:** Fix on axis width sizing ([10f27e5](10f27e5)), closes [#920](#920)
* **axis:** fix side-effects from [#717](#717) ([#740](#740)) ([4eba766](4eba766))
* **axis:** Fix x Axis tick fit for timeseries ([9cda54f](9cda54f)), closes [#628](#628)
* **axis:** improve tick label size calculation ([8dc08bd](8dc08bd)), closes [#323](#323) [#324](#324)
* **axis:** Round float numbers from 'binary floating point' ([bd2fbbe](bd2fbbe)), closes [#222](#222) [#320](#320)
* **Axis:** Fix text alignment when legend is not showing ([620d737](620d737)), closes [#25](#25) [#686](#686)
* **Axis:** Fix tick text position ([0ca6b18](0ca6b18)), closes [#672](#672) [#678](#678)
* **bar:** Adjust bar width regardless tick count limit ([8f92d3e](8f92d3e)), closes [#166](#166) [#182](#182)
* **bar:** Fix bar position on width option ([0883588](0883588)), closes [#720](#720) [#832](#832)
* **bar:** Remove new line chars on path string ([#533](#533)) ([1f9db5a](1f9db5a)), closes [#530](#530)
* **bower:** add scss source files to bower package ([945ee66](945ee66))
* **bubble,point:** Fix bubble size change on load API ([#214](#214)) ([d9eb371](d9eb371)), closes [#163](#163)
* **chart:** Correct data label text prop ref ([d9f4477](d9f4477)), closes [#780](#780) [#781](#781)
* **color:** Correct the way on setting pattern value ([#509](#509)) ([164a3f9](164a3f9)), closes [#507](#507)
* **color:** Remove importing schemeCategory10 ([72864c5](72864c5)), closes [#298](#298) [#373](#373)
* **colors:** Fix color method ([8effaad](8effaad)), closes [#233](#233)
* **data:** babel transform bug ([1f8efc2](1f8efc2)), closes [#17](#17) [#18](#18)
* **data:** Correct data label text to be shown on scatter ([#492](#492)) ([f9f0081](f9f0081)), closes [#488](#488)
* **data:** Correct data order to not be altered ([e39db91](e39db91)), closes [#379](#379) [#412](#412)
* **data:** Correct data.onclick calls ([#203](#203)) ([a5fd3fc](a5fd3fc)), closes [#202](#202)
* **data:** Correct onover/out callback on touch ([#769](#769)) ([9ad9817](9ad9817)), closes [#768](#768)
* **data:** Fix data indexing ([2e3010b](2e3010b)), closes [#863](#863)
* **data:** Fix empty label text flickering ([173990b](173990b)), closes [#901](#901)
* **data:** Remove selection on data.onmin/max ([#143](#143)) ([7709c32](7709c32)), closes [#8](#8)
* **data,interaction:** Bar type interaction error on multiple x ([cf49d71](cf49d71)), closes [#178](#178) [#180](#180)
* **data.convert:** allow dots in json properties ([7ff837a](7ff837a)), closes [#14](#14)
* **dev-env:** Update main entry point ([1488232](1488232)), closes [#391](#391) [#525](#525) [#549](#549)
* **domain:** Fix getting Y domain min/max value ([864e112](864e112)), closes [#685](#685) [#690](#690)
* **event:** Correct on resizing all generated charts ([10d6d73](10d6d73)), closes [#404](#404) [#466](#466) [#468](#468)
* **gauge:** Correct background rendering on fullCircle ([#141](#141)) ([7f5fda2](7f5fda2)), closes [#140](#140)
* **grid:** Correct grid position ([5a7a94d](5a7a94d)), closes [#820](#820) [#821](#821)
* **grid:** Correct grid scale on zoom ([2904d41](2904d41)), closes [#799](#799)
* **grid:** Correct updating grid's attributes ([#414](#414)) ([1662a1f](1662a1f)), closes [#389](#389)
* **interaction:** Correct drag selection error ([#493](#493)) ([f38cd24](f38cd24)), closes [#490](#490)
* **interaction:** Correct event binding ([#27](#27)) ([f09d2ed](f09d2ed)), closes [#24](#24)
* **interaction:** Correct mouse event create ([#252](#252)) ([930f74b](930f74b)), closes [#251](#251)
* **interaction:** Correct rect element sizing ([6a09985](6a09985)), closes [#522](#522) [#523](#523)
* **interaction:** Prioritize mouse input ([#280](#280)) ([5cc3442](5cc3442)), closes [#92](#92)
* **internal:** Correct evaluating inputType condition ([#257](#257)) ([4b1f3cc](4b1f3cc)), closes [#92](#92)
* **internal:** Fix on unexpected resize event firing ([#572](#572)) ([dd5af9c](dd5af9c)), closes [#571](#571)
* **label:** Correct newly added texts transition position ([f81d440](f81d440)), closes [#648](#648) [#718](#718)
* **legend:** Correct legend positioning ([51ee8ce](51ee8ce)), closes [#737](#737) [#737](#737) [#752](#752)
* **legend:** Correct to keep the original class value ([46ebf35](46ebf35)), closes [#444](#444)
* **legend:** Fix legend template update for dynamic loading ([#622](#622)) ([1e465ae](1e465ae)), closes [#621](#621)
* **legend:** Fix resize for arc ([#707](#707)) ([89a3ece](89a3ece)), closes [#705](#705)
* **legend:** Fix resizing when legend template is used ([#706](#706)) ([87294dd](87294dd)), closes [#705](#705)
* **Legend:** working with useless transition effect ([676b1e5](676b1e5)), closes [#25](#25) [#41](#41)
* **line:** Correct on rotated step type ([#474](#474)) ([74bd639](74bd639)), closes [#471](#471)
* **line:** Correct zoom with data.regions ([a76000a](a76000a)), closes [#728](#728) [#729](#729)
* **line:** Fix areaGradient for spaced data name ([3fbd4b2](3fbd4b2)), closes [#930](#930)
* **line:** Fix gradient with dataname starting w/no ([fe31102](fe31102)), closes [#936](#936)
* **options:** Correct when bindto element not exist ([448a45d](448a45d)), closes [#743](#743) [#749](#749)
* **pie:** Correct multiline label text ([9bacb9b](9bacb9b)), closes [#784](#784)
* **point:** Check for node.childNodes existance for IE / Edge ([59a5a05](59a5a05)), closes [#601](#601) [#602](#602)
* **point:** Correct point expansion on old IEs ([2e9dbfe](2e9dbfe)), closes [#897](#897)
* **point:** Fix custom point hover position ([2edb82a](2edb82a)), closes [#618](#618) [#700](#700)
* **radar:** Correct on resizing ([#540](#540)) ([f2fdecc](f2fdecc)), closes [#497](#497)
* **radar:** Fix data.onover/out callback ([91c8df2](91c8df2)), closes [#768](#768) [#773](#773)
* **radar:** Fix incorrect rendering ([#738](#738)) ([f8915e2](f8915e2)), closes [#735](#735)
* **readme:** Change broken link about license ([#188](#188)) ([a9a1e09](a9a1e09))
* **regions:** Fix regions resizing on zoom ([#561](#561)) ([c61960d](c61960d)), closes [#483](#483)
* **selection:** Correct multiple callback calls ([#120](#120)) ([f7cae57](f7cae57)), closes [#117](#117)
* **selection:** Correct multiple selection error ([#455](#455)) ([353f809](353f809)), closes [#445](#445)
* **selection:** Correct on data selection ([#113](#113)) ([eb13350](eb13350)), closes [#112](#112)
* **shape:** Correct newly added points transition position ([d9dc75a](d9dc75a)), closes [#648](#648) [#659](#659)
* **shape:** Fix for empty data in normalization ([#649](#649)) ([76f3558](76f3558)), closes [#623](#623)
* **shape:** Fix normalization on hidden data ([#645](#645)) ([aba9496](aba9496)), closes [#643](#643)
* **shape:** line.step.type config not working ([#86](#86)) ([62273bf](62273bf)), closes [#85](#85)
* **shape:** Prevent when non-existed data.hide is given ([#650](#650)) ([6a72602](6a72602)), closes [#623](#623)
* **shape, api.zoom:** fix zoom for barchart ([917384f](917384f)), closes [#16](#16) [#32](#32)
* **shape.line:** Correct getting shape object ([#47](#47)) ([b2a0acf](b2a0acf)), closes [#10](#10)
* **shape.line:** Correct return type ([#148](#148)) ([3317183](3317183)), closes [#147](#147)
* **size:** Correct height increase during resize ([#223](#223)) ([9699a55](9699a55)), closes [#155](#155) [#164](#164)
* **size:** Correct width on resizing ([#189](#189)) ([5a93a19](5a93a19)), closes [#179](#179)
* **subchart:** Correct subchart extent option ([eac3e65](eac3e65)), closes [#142](#142) [#805](#805)
* **subchart:** Maintain subchart selection on resize ([c7d7fa5](c7d7fa5)), closes [#778](#778)
* **subchart:** Maintaion selection for category x axis ([3f46609](3f46609)), closes [#778](#778)
* **tiles:** Fix background tiles id ([c452b43](c452b43)), closes [#225](#225) [#226](#226)
* **tooltip:** Correct interaction on mobile ([23ff1df](23ff1df)), closes [#376](#376) [#377](#377)
* **tooltip:** Correct on toggling data series ([#253](#253)) ([e7d1b19](e7d1b19)), closes [#240](#240)
* **tooltip:** Enhancement for overlapped points ([3ee694d](3ee694d)), closes [#568](#568) [#569](#569)
* **tooltip:** Fix for dynamically loaded data adding column ([009d3b1](009d3b1)), closes [#660](#660) [#661](#661)
* **tooltip:** Fix for mobile environment ([#616](#616)) ([981bc77](981bc77)), closes [#593](#593)
* **tooltip:** Fix handling on color tile ([#875](#875)) ([56c2f99](56c2f99)), closes [#816](#816) [#816](#816)
* **tooltip:** Fix mid value showing for area-range type ([#598](#598)) ([a9d615b](a9d615b)), closes [#597](#597)
* **tooltip:** Fix on ungrouped tooltip showing for custom shape ([#548](#548)) ([9411758](9411758)), closes [#547](#547) [#241](#241)
* **tooltip:** Fix tooltip.show() for multi x axis ([aaa8293](aaa8293)), closes [#785](#785)
* **tooltip:** Make linked tooltip to work based on index ([2df0a38](2df0a38)), closes [#494](#494) [#496](#496)
* **tooltip:** Non linked tooltip exclusion ([feeb536](feeb536)), closes [#393](#393) [#396](#396)
* **ua:** Fix the side-effect by refactoring ([#898](#898)) ([d00d903](d00d903))
* **zoom:** Correct not firing data.onclick callback ([7368446](7368446)), closes [#583](#583) [#584](#584)
* **zoom:** Correct not to re-scale while zoom is disabled ([#273](#273)) ([502d6fd](502d6fd)), closes [#272](#272)
* **zoom:** Correct zoom in rendering on 0 coord. ([f61b792](f61b792)), closes [#169](#169) [#170](#170)
* **zoom:** Correct zoom resizing ([#139](#139)) ([67e863e](67e863e)), closes [#60](#60)
* **zoom:** Correct zoom.range() to work ([6830e5c](6830e5c)), closes [#290](#290) [#291](#291)
* **zoom:** Correct zooming for category axis type ([#441](#441)) ([c8a164a](c8a164a)), closes [#177](#177)
* **zoom:** Fix on .zoom() API  ([cd0d109](cd0d109)), closes [#581](#581) [#582](#582)
* **zoom:** Fix on rotated axis ([#892](#892)) ([983d970](983d970)), closes [#736](#736) [#818](#818)
* **zoom:** Fix on zoom.rescale option ([#566](#566)) ([851ec3e](851ec3e)), closes [#470](#470)
* **zoom:** Fix tooltip pos for bubble/scatter ([1fc9c16](1fc9c16)), closes [#906](#906)
* **zoom:** Fix zoom level reset ([ec24c2c](ec24c2c)), closes [#913](#913)
* **zoom:** Fix zoom rescale by wheel ([585d607](585d607)), closes [#890](#890)
* **zoom:** Maintain zoommed scale on .zoom() ([7b7a274](7b7a274)), closes [#654](#654) [#702](#702)
* **Zoom:** Updated domain values onzoom/onzoomend ([acf3239](acf3239)), closes [#770](#770) [#777](#777)

### Features

* **all:** Add TS definition  ([8b34691](8b34691)), closes [#629](#629) [#682](#682)
* **api:** Intent to ship .config() ([b0dc53a](b0dc53a)), closes [#502](#502) [#545](#545)
* **arc:** Enhance multiline text label ([7e57c67](7e57c67)), closes [#784](#784)
* **Arc:** Implement multiline donut title ([b816dc0](b816dc0)), closes [#71](#71) [#130](#130)
* **area:** Intent to ship area.linearGradient ([0063a4c](0063a4c)), closes [#755](#755) [#800](#800)
* **axis:** Enhancement on tick multiline ([#386](#386)) ([4178e40](4178e40)), closes [#381](#381)
* **axis:** Inten to ship axis.x.tick.tooltip ([94a8650](94a8650)), closes [#236](#236) [#240](#240)
* **axis:** Intent to ship axis clipPath option ([#459](#459)) ([e9fb973](e9fb973)), closes [#458](#458)
* **axis:** Intent to ship multi Axes ([becd3c3](becd3c3)), closes [#98](#98) [#697](#697) [#699](#699)
* **axis:** Intent to ship tick show options ([#746](#746)) ([89c1aa2](89c1aa2)), closes [#737](#737)
* **axis:** Intent to ship tick.text.position ([#426](#426)) ([816ce2a](816ce2a)), closes [#380](#380)
* **axis:** Pass category name param ([#329](#329)) ([7e06851](7e06851)), closes [#327](#327)
* **bar:** Intent to ship bar.radius option ([#476](#476)) ([17e2b41](17e2b41)), closes [#359](#359)
* **bar:** Intent to ship variant width ([ae46c85](ae46c85)), closes [#720](#720) [#724](#724)
* **bubble:** Intent to ship bubble type ([#195](#195)) ([c80d78f](c80d78f)), closes [#163](#163)
* **Chart:** Expose primary node elements ([#511](#511)) ([de3f60c](de3f60c)), closes [#423](#423)
* **ChartInternal,Options:** Add before/after initialization callbacks ([354d7e2](354d7e2)), closes [#55](#55) [#126](#126)
* **ChartInternal,Options:** Add new clipPath option ([6531692](6531692)), closes [#56](#56) [#95](#95)
* **color:** Intent to ship color.onover ([5ec2d9e](5ec2d9e)), closes [#754](#754) [#768](#768) [#772](#772)
* **core:** Intent to ship global config ([1b524e1](1b524e1)), closes [#932](#932)
* **core:** Intent to ship instance property ([#315](#315)) ([d20c68d](d20c68d)), closes [#308](#308)
* **data:** Intent to ship data.labels.centered ([cbe95b7](cbe95b7)), closes [#876](#876)
* **data:** Intent to ship data.labels.colors ([c10c946](c10c946)), closes [#871](#871)
* **data:** Intent to ship data.min()/max() ([e9f1417](e9f1417)), closes [#637](#637) [#638](#638)
* **data,Options:** Implement data.onmin/onmax callback ([6a88a74](6a88a74)), closes [#8](#8) [#125](#125)
* **data.type:** Intent to ship 'area-range' charts ([9fd9577](9fd9577)), closes [#277](#277) [#293](#293)
* **export:** Intent to ship export as an image ([9ad9956](9ad9956)), closes [#78](#78) [#213](#213)
* **gauge:** Enhance display multiline labels ([#516](#516)) ([3a1267e](3a1267e)), closes [#442](#442)
* **gauge:** Intent to ship stack data ([0d7fb3e](0d7fb3e)), closes [#580](#580)
* **grid:** Intent to ship grid.front option ([#385](#385)) ([58621a0](58621a0)), closes [#384](#384)
* **interaction:** Add new inputType.touch.preventDefault option ([baa7a7a](baa7a7a)), closes [#82](#82) [#88](#88)
* **legend:** Add argument to legend template ([2ecab0d](2ecab0d)), closes [#302](#302) [#322](#322)
* **legend:** Add shapes to legend ([a0b6542](a0b6542)), closes [#269](#269) [#289](#289)
* **legend:** Implement legend.contents ([26de147](26de147)), closes [#58](#58) [#134](#134)
* **line:** Ability to hide points for linecharts only ([3d217cc](3d217cc)), closes [#520](#520) [#521](#521)
* **option:** Intent to ship bar.padding option ([#370](#370)) ([6671e63](6671e63)), closes [#335](#335)
* **Options:** Add custom classname for bind element ([#212](#212)) ([22cee47](22cee47)), closes [#201](#201)
* **Options:** Implement color.tile option ([bec92dd](bec92dd)), closes [#193](#193) [#196](#196)
* **Options:** New tooltip onshow/onhidden and linked options ([c96d2dd](c96d2dd)), closes [#341](#341)
* **pie:** Enhance innerRadius option ([1668463](1668463)), closes [#856](#856)
* **pie:** Intent to ship pie's pdding and innerRadius options. ([b04ba3d](b04ba3d)), closes [#301](#301) [#304](#304)
* **plugin:** Add support for Stanford Diagrams ([a162cb7](a162cb7)), closes [#829](#829)
* **point:** Allow grouped custom point ([#565](#565)) ([ee12f96](ee12f96)), closes [#562](#562)
* **point:** Implement alternate markers ([8f1b56f](8f1b56f)), closes [#209](#209) [#219](#219)
* **point,bar:** Intent to ship sensitivity ([ebeb30f](ebeb30f)), closes [#831](#831)
* **radar:** Intent to ship multiline axis ([44198e1](44198e1)), closes [#904](#904)
* **radar:** Intent to ship radar type ([#453](#453)) ([7d0da65](7d0da65)), closes [#59](#59)
* **radar:** Intent to ship radar.direction.clockwise ([#543](#543)) ([f17fa7e](f17fa7e)), closes [#464](#464)
* **regions:** Intent to ship dasharray ([ca94580](ca94580)), closes [#491](#491) [#498](#498)
* **shape:** Intent to ship stack.normalize ([3af15a5](3af15a5)), closes [#623](#623) [#643](#643)
* **shape.line:** Add a line_classes option ([5781b5a](5781b5a)), closes [#181](#181)
* **shape.line:** Allow customization of points ([cc2ac8b](cc2ac8b)), closes [#173](#173) [#184](#184)
* **stats:** Intent to ship stats ([bc163b9](bc163b9)), closes [#928](#928)
* **text,Options:** Add new data.labels.position option ([51b09d7](51b09d7)), closes [#57](#57) [#99](#99)
* **theme:** Add new 'graph' theme ([014537a](014537a)), closes [#631](#631) [#647](#647)
* **theme:** Intent to ship css theme ([e113278](e113278)), closes [#241](#241) [#507](#507)
* **title:** Intent to ship multilined title ([#731](#731)) ([171df89](171df89)), closes [#612](#612) [#727](#727)
* **tooltip:** Implement tooltip.order ([db7d0f8](db7d0f8)), closes [#127](#127) [#131](#131)
* **tooltip:** Intent to ship linked tooltip with name ([ae263a1](ae263a1)), closes [#401](#401) [#402](#402)
* **tooltip:** Intent to ship tooltip.contents.template ([c1af5df](c1af5df)), closes [#813](#813)
* **tooltip:** Intent to ship tooltip.contents.text ([c16ab48](c16ab48)), closes [#826](#826)
* **tooltip:** Intent to ship tooltip.doNotHide ([81e2f09](81e2f09)), closes [#812](#812)
* **zoom:** Add option to zoom by dragging ([da2ce10](da2ce10)), closes [#416](#416) [#508](#508) [#513](#513)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants