Skip to content

Commit 04fe725

Browse files
santam85simonbrunel
authored andcommitted
Export plugin as an ESM compatible module (#222)
1 parent f40336b commit 04fe725

File tree

12 files changed

+64
-50
lines changed

12 files changed

+64
-50
lines changed

docs/.vuepress/plugins/chart-editor/index.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,6 @@ module.exports = ({imports}) => {
5858
resolve: {
5959
alias: {
6060
'@docs': resolve(__dirname, '../../../'),
61-
62-
// Don't use the Chart.js ESM build since it's not yet
63-
// compatible with the current plugin implementation.
64-
'chart.js': 'chart.js/dist/chart.js'
6561
}
6662
}
6763
});

docs/samples/register.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import {Chart} from 'chart.js';
1+
import {Chart, registerables} from 'chart.js';
22
import plugin from '../../dist/chartjs-plugin-datalabels.js';
33

4+
Chart.register(...registerables);
45
Chart.register(plugin);

docs/samples/utils.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import {color as Color} from 'chart.js/helpers';
2+
13
function fallback(/* values ... */) {
24
var ilen = arguments.length;
35
var i = 0;
@@ -11,10 +13,6 @@ function fallback(/* values ... */) {
1113
}
1214
}
1315

14-
var Color = typeof window !== 'undefined' && window.Chart !== undefined ?
15-
window.Chart.helpers.color :
16-
function() {};
17-
1816
export var COLORS = [
1917
'#FF3784',
2018
'#36A2EB',

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"version": "1.0.0-beta.1",
66
"license": "MIT",
77
"main": "dist/chartjs-plugin-datalabels.js",
8+
"module": "dist/chartjs-plugin-datalabels.esm.js",
89
"types": "types/index.d.ts",
910
"repository": {
1011
"type": "git",

rollup.config.js

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ module.exports = [
2020
indent: false,
2121
plugins: [],
2222
globals: {
23-
'chart.js': 'Chart'
23+
'chart.js': 'Chart',
24+
'chart.js/helpers': 'Chart.helpers'
2425
}
2526
};
2627

@@ -37,7 +38,21 @@ module.exports = [
3738
return config;
3839
}),
3940
external: [
40-
'chart.js'
41+
'chart.js',
42+
'chart.js/helpers',
4143
]
42-
}
44+
},
45+
{
46+
input: 'src/plugin.js',
47+
output: {
48+
file: pkg.module,
49+
banner: banner,
50+
format: 'esm',
51+
indent: false
52+
},
53+
external: [
54+
'chart.js',
55+
'chart.js/helpers',
56+
]
57+
},
4358
];

scripts/create-packages.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const root = path.resolve(__dirname, '..');
99
const inputs = [
1010
path.join(root, 'dist', `${pkg.name}.js`),
1111
path.join(root, 'dist', `${pkg.name}.min.js`),
12+
path.join(root, 'dist', `${pkg.name}.esm.js`),
1213
path.join(root, 'LICENSE.md'),
1314
path.join(root, 'README.md'),
1415
];

src/defaults.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
1-
import {Chart} from 'chart.js';
2-
3-
var helpers = Chart.helpers;
1+
import {isNullOrUndef, isObject} from 'chart.js/helpers';
42

53
var formatter = function(value) {
6-
if (helpers.isNullOrUndef(value)) {
4+
if (isNullOrUndef(value)) {
75
return null;
86
}
97

108
var label = value;
119
var keys, klen, k;
12-
if (helpers.isObject(value)) {
13-
if (!helpers.isNullOrUndef(value.label)) {
10+
if (isObject(value)) {
11+
if (!isNullOrUndef(value.label)) {
1412
label = value.label;
15-
} else if (!helpers.isNullOrUndef(value.r)) {
13+
} else if (!isNullOrUndef(value.r)) {
1614
label = value.r;
1715
} else {
1816
label = '';

src/hitbox.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
import {Chart} from 'chart.js';
2-
3-
var helpers = Chart.helpers;
1+
import {merge} from 'chart.js/helpers';
42

53
var MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991; // eslint-disable-line es/no-number-minsafeinteger
64
var MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; // eslint-disable-line es/no-number-maxsafeinteger
@@ -61,7 +59,7 @@ var HitBox = function() {
6159
};
6260
};
6361

64-
helpers.merge(HitBox.prototype, {
62+
merge(HitBox.prototype, {
6563
center: function() {
6664
var r = this._rect;
6765
return {

src/label.js

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1-
import {Chart} from 'chart.js';
1+
import {ArcElement, BarElement, defaults, PointElement} from 'chart.js';
2+
import {
3+
callback as callbackHelper,
4+
isNullOrUndef,
5+
merge,
6+
resolve,
7+
toFont,
8+
toPadding,
9+
valueOrDefault
10+
} from 'chart.js/helpers';
11+
212
import utils from './utils';
313
import positioners from './positioners';
414

5-
var helpers = Chart.helpers;
615
var rasterize = utils.rasterize;
716

817
function boundingRects(model) {
@@ -47,13 +56,13 @@ function getScaleOrigin(el, context) {
4756
}
4857

4958
function getPositioner(el) {
50-
if (el instanceof Chart.elements.ArcElement) {
59+
if (el instanceof ArcElement) {
5160
return positioners.arc;
5261
}
53-
if (el instanceof Chart.elements.PointElement) {
62+
if (el instanceof PointElement) {
5463
return positioners.point;
5564
}
56-
if (el instanceof Chart.elements.BarElement) {
65+
if (el instanceof BarElement) {
5766
return positioners.bar;
5867
}
5968
return positioners.fallback;
@@ -227,16 +236,15 @@ var Label = function(config, ctx, el, index) {
227236
me._el = el;
228237
};
229238

230-
helpers.merge(Label.prototype, {
239+
merge(Label.prototype, {
231240
/**
232241
* @private
233242
*/
234243
_modelize: function(display, lines, config, context) {
235244
var me = this;
236245
var index = me._index;
237-
var resolve = helpers.resolve;
238-
var font = helpers.toFont(resolve([config.font, {}], context, index));
239-
var color = resolve([config.color, Chart.defaults.font.color], context, index);
246+
var font = toFont(resolve([config.font, {}], context, index));
247+
var color = resolve([config.color, defaults.color], context, index);
240248

241249
return {
242250
align: resolve([config.align, 'center'], context, index),
@@ -255,7 +263,7 @@ helpers.merge(Label.prototype, {
255263
offset: resolve([config.offset, 0], context, index),
256264
opacity: resolve([config.opacity, 1], context, index),
257265
origin: getScaleOrigin(me._el, context),
258-
padding: helpers.toPadding(resolve([config.padding, 0], context, index)),
266+
padding: toPadding(resolve([config.padding, 0], context, index)),
259267
positioner: getPositioner(me._el),
260268
rotation: resolve([config.rotation, 0], context, index) * (Math.PI / 180),
261269
size: utils.textSize(me._ctx, lines, font),
@@ -277,12 +285,12 @@ helpers.merge(Label.prototype, {
277285

278286
// We first resolve the display option (separately) to avoid computing
279287
// other options in case the label is hidden (i.e. display: false).
280-
var display = helpers.resolve([config.display, true], context, index);
288+
var display = resolve([config.display, true], context, index);
281289

282290
if (display) {
283291
value = context.dataset.data[index];
284-
label = helpers.valueOrDefault(helpers.callback(config.formatter, [value, context]), value);
285-
lines = helpers.isNullOrUndef(label) ? [] : utils.toTextLines(label);
292+
label = valueOrDefault(callbackHelper(config.formatter, [value, context]), value);
293+
lines = isNullOrUndef(label) ? [] : utils.toTextLines(label);
286294

287295
if (lines.length) {
288296
model = me._modelize(display, lines, config, context);

src/plugin.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
* @see https://github.com/chartjs/Chart.js/issues/4176
33
*/
44

5-
import {Chart} from 'chart.js';
5+
import {callback as callbackHelper, each, merge} from 'chart.js/helpers';
6+
67
import Label from './label';
78
import utils from './utils';
89
import layout from './layout';
910
import defaults from './defaults';
1011

11-
var helpers = Chart.helpers;
1212
var EXPANDO_KEY = '$datalabels';
1313
var DEFAULT_KEY = '$default';
1414

@@ -25,15 +25,15 @@ function configure(dataset, options) {
2525
override = {};
2626
}
2727

28-
options = helpers.merge({}, [options, override]);
28+
options = merge({}, [options, override]);
2929
labels = options.labels || {};
3030
keys = Object.keys(labels);
3131
delete options.labels;
3232

3333
if (keys.length) {
3434
keys.forEach(function(key) {
3535
if (labels[key]) {
36-
configs.push(helpers.merge({}, [
36+
configs.push(merge({}, [
3737
options,
3838
labels[key],
3939
{_key: key}
@@ -47,7 +47,7 @@ function configure(dataset, options) {
4747

4848
// listeners: {<event-type>: {<label-key>: <fn>}}
4949
listeners = configs.reduce(function(target, config) {
50-
helpers.each(config.listeners || {}, function(fn, event) {
50+
each(config.listeners || {}, function(fn, event) {
5151
target[event] = target[event] || {};
5252
target[event][config._key || DEFAULT_KEY] = fn;
5353
});
@@ -80,7 +80,7 @@ function dispatchEvent(chart, listeners, label) {
8080
return;
8181
}
8282

83-
if (helpers.callback(callback, [context]) === true) {
83+
if (callbackHelper(callback, [context]) === true) {
8484
// Users are allowed to tweak the given context by injecting values that can be
8585
// used in scriptable options to display labels differently based on the current
8686
// event (e.g. highlight an hovered label). That's why we update the label with
@@ -207,7 +207,7 @@ export default {
207207

208208
// Store listeners at the chart level and per event type to optimize
209209
// cases where no listeners are registered for a specific event.
210-
helpers.merge(expando._listeners, config.listeners, {
210+
merge(expando._listeners, config.listeners, {
211211
merger: function(event, target, source) {
212212
target[event] = target[event] || {};
213213
target[event][args.index] = source[event];

0 commit comments

Comments
 (0)