-
Notifications
You must be signed in to change notification settings - Fork 357
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
Conversation
- Add point_type, point_create and point_update options - Add an example in the demo
Changes Unknown when pulling 0dfb8f0 on julien:custom-points into ** on naver:master**. |
There was a problem hiding this 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. |
There was a problem hiding this comment.
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".
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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'.
There was a problem hiding this comment.
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.
src/internals/shape.line.js
Outdated
.attr("class", $$.classCircle.bind($$)) | ||
.attr("r", $$.pointR.bind($$)) | ||
.style("fill", $$.color) | ||
let createFn; |
There was a problem hiding this comment.
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;
There was a problem hiding this comment.
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.
src/internals/shape.point.js
Outdated
|
||
extend(ChartInternal.prototype, { | ||
hasValidPointType() { | ||
return POINT_TYPES.includes(this.config.point_type); |
There was a problem hiding this comment.
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()
There was a problem hiding this comment.
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; |
There was a problem hiding this comment.
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>
billboard.js/src/internals/shape.line.js
Lines 526 to 537 in cf49d71
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.
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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 :)
There was a problem hiding this comment.
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);
}
},
There was a problem hiding this comment.
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 ;)
- Update doc comments - Simplify `create` and `update` point methods - Update `expandCircles` and `unexpandCircles` methods
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) { |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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
Changes Unknown when pulling 8b710d7 on julien:custom-points into ** on naver:master**. |
Changes Unknown when pulling e923eda on julien:custom-points into ** on naver:master**. |
I think we're reaching almost the end. |
@netil that's good news thanks. |
Thanks @julien for excellent work! 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~! |
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 |
well, if you check the milestone, the next coming is planned at Dec, 15th |
I hadn't seen it, thanks |
# 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)
Issue
#173
Details
Add point_type, point_create and point_update options
Add an example in the demo