@frollo/frollo-web-ui 9.0.1 → 9.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/cjs/index.js +10733 -3062
  2. package/esm/{_rollupPluginBabelHelpers-DODWUb5N.js → _rollupPluginBabelHelpers-BKlDnZ7n.js} +1 -1
  3. package/esm/fw-accordion.js +15 -18
  4. package/esm/fw-alert.js +32 -25
  5. package/esm/fw-bar-chart.js +265 -93
  6. package/esm/fw-button-DZTHZLjk.js +318 -0
  7. package/esm/fw-button.js +2 -2
  8. package/esm/{fw-card-D45R4kN-.js → fw-card-XGtsK2bM.js} +7 -10
  9. package/esm/fw-card.js +2 -2
  10. package/esm/fw-checkbox.js +8 -11
  11. package/esm/fw-date-picker.js +85 -49
  12. package/esm/fw-drawer.js +9 -9
  13. package/esm/{fw-dropdown-58wyuzsW.js → fw-dropdown-CSmYTm5O.js} +11 -14
  14. package/esm/fw-dropdown.js +7 -6
  15. package/esm/fw-form.js +1 -1
  16. package/esm/fw-icons.js +11 -12
  17. package/esm/fw-image-A2lXYs0u.js +325 -0
  18. package/esm/fw-image.js +5 -4
  19. package/esm/{fw-input-C2-cZ-BY.js → fw-input-BiPWWfK3.js} +12 -19
  20. package/esm/fw-input.js +3 -3
  21. package/esm/fw-loading-bar-3x4tkF1B.js +37 -0
  22. package/esm/fw-loading.js +89 -40
  23. package/esm/fw-media-picker.js +10 -653
  24. package/esm/fw-modal.js +11 -10
  25. package/esm/fw-navigation-menu.js +36 -41
  26. package/esm/fw-popover-BZ-zqUme.js +330 -0
  27. package/esm/fw-popover.js +2 -3
  28. package/esm/fw-progress-bar.js +1 -1
  29. package/esm/fw-provider-list.js +108 -88
  30. package/esm/fw-sidebar-menu.js +58 -51
  31. package/esm/fw-slider.js +64 -61
  32. package/esm/fw-switch.js +76 -49
  33. package/esm/fw-table-row-BU0xaybR.js +447 -0
  34. package/esm/fw-table.js +5 -6
  35. package/esm/fw-tabs.js +87 -35
  36. package/esm/fw-tag-BRxPc4zc.js +199 -0
  37. package/esm/fw-tag.js +4 -4
  38. package/esm/fw-toast.js +58 -76
  39. package/esm/fw-transactions-card.js +20 -20
  40. package/esm/{get-root-colours-DCjlYelc.js → get-root-colours-DCCAnRF4.js} +3 -1
  41. package/esm/index-C8z11jcJ.js +7583 -0
  42. package/esm/index-DHyRsKsZ.js +843 -0
  43. package/esm/index-eP2GMSdQ.js +755 -0
  44. package/esm/index.js +54 -61
  45. package/esm/{uniqueId-DZdGzBh8.js → uniqueId-DK6xzFd8.js} +1 -1
  46. package/esm/{vee-validate.esm-3ptvCDR1.js → vee-validate-0dtT5GSQ.js} +182 -305
  47. package/frollo-web-ui.esm.js +10790 -3117
  48. package/icons/circle-check.svg +4 -0
  49. package/index.d.ts +1522 -586
  50. package/package.json +11 -11
  51. package/styles/tailwind.css +34 -2
  52. package/types/components/fw-accordion/fw-accordion.vue.d.ts +9 -7
  53. package/types/components/fw-alert/fw-alert.vue.d.ts +11 -6
  54. package/types/components/fw-bar-chart/fw-bar-chart.vue.d.ts +15 -64
  55. package/types/components/fw-button/fw-button.vue.d.ts +11 -7
  56. package/types/components/fw-card/fw-card.vue.d.ts +6 -6
  57. package/types/components/fw-checkbox/fw-checkbox.vue.d.ts +365 -5
  58. package/types/components/fw-date-picker/fw-date-picker.vue.d.ts +3 -242
  59. package/types/components/fw-drawer/fw-drawer.vue.d.ts +11 -8
  60. package/types/components/fw-dropdown/fw-dropdown.vue.d.ts +20 -12
  61. package/types/components/fw-icons/fw-success-animation.vue.d.ts +1 -1
  62. package/types/components/fw-image/fw-image.vue.d.ts +33 -7
  63. package/types/components/fw-input/fw-input.vue.d.ts +368 -10
  64. package/types/components/fw-loading/fw-loading-bar.vue.d.ts +7 -5
  65. package/types/components/fw-loading/fw-loading-card.vue.d.ts +3 -1
  66. package/types/components/fw-loading/fw-loading-dots.vue.d.ts +8 -1
  67. package/types/components/fw-loading/fw-loading-table.vue.d.ts +11 -6
  68. package/types/components/fw-media-picker/fw-media-picker.vue.d.ts +27 -18
  69. package/types/components/fw-modal/fw-modal.vue.d.ts +11 -7
  70. package/types/components/fw-navigation-menu/fw-navigation-menu.vue.d.ts +12 -8
  71. package/types/components/fw-popover/fw-popover.vue.d.ts +16 -21
  72. package/types/components/fw-progress-bar/fw-progress-bar.vue.d.ts +6 -4
  73. package/types/components/fw-provider-list/fw-provider-list.vue.d.ts +20 -45
  74. package/types/components/fw-sidebar-menu/fw-sidebar-menu.vue.d.ts +13 -7
  75. package/types/components/fw-slider/fw-slider.vue.d.ts +11 -8
  76. package/types/components/fw-switch/fw-switch.vue.d.ts +383 -9
  77. package/types/components/fw-switch/index.types.d.ts +1 -0
  78. package/types/components/fw-table/fw-table-head.vue.d.ts +1 -1
  79. package/types/components/fw-table/fw-table-row.vue.d.ts +1 -1
  80. package/types/components/fw-table/fw-table.vue.d.ts +40 -19
  81. package/types/components/fw-table/index.types.d.ts +36 -2
  82. package/types/components/fw-tabs/fw-tab.vue.d.ts +4 -8
  83. package/types/components/fw-tabs/fw-tabs.vue.d.ts +11 -8
  84. package/types/components/fw-tabs/index.types.d.ts +14 -4
  85. package/types/components/fw-tag/fw-tag.vue.d.ts +14 -8
  86. package/types/components/fw-toast/fw-toast.vue.d.ts +17 -22
  87. package/types/components/fw-transactions-card/fw-transactions-card.vue.d.ts +6 -3
  88. package/types/directives/lazy-loader.d.ts +11 -2
  89. package/types/helpers/get-root-colours.d.ts +1 -0
  90. package/web-components/index.js +16793 -7702
  91. package/esm/fw-button-YMoW4x4c.js +0 -296
  92. package/esm/fw-image-D-OHafdw.js +0 -217
  93. package/esm/fw-loading-bar-DecYSBC_.js +0 -45
  94. package/esm/fw-popover-B4bsfuxm.js +0 -620
  95. package/esm/fw-table-row-Cgi8871h.js +0 -389
  96. package/esm/fw-tag-fDo50Nw7.js +0 -177
  97. package/esm/index-BsEH8YYr.js +0 -979
@@ -1,7 +1,7 @@
1
- import { b as _toConsumableArray } from './_rollupPluginBabelHelpers-DODWUb5N.js';
1
+ import { b as _toConsumableArray } from './_rollupPluginBabelHelpers-BKlDnZ7n.js';
2
2
  import { version as version$1, toRaw, isProxy, defineComponent, ref, shallowRef, onMounted, onUnmounted, watch, nextTick, h, computed, resolveComponent, createElementBlock, createCommentVNode, openBlock, normalizeStyle, createVNode, toDisplayString } from 'vue';
3
- import { u as useColours } from './get-root-colours-DCjlYelc.js';
4
- import { u as uniqueId } from './uniqueId-DZdGzBh8.js';
3
+ import { u as useColours } from './get-root-colours-DCCAnRF4.js';
4
+ import { u as uniqueId } from './uniqueId-DK6xzFd8.js';
5
5
 
6
6
  /*!
7
7
  * @kurkle/color v0.3.2
@@ -592,9 +592,9 @@ function index_esm(input) {
592
592
  }
593
593
 
594
594
  /*!
595
- * Chart.js v4.4.3
595
+ * Chart.js v4.5.1
596
596
  * https://www.chartjs.org
597
- * (c) 2024 Chart.js Contributors
597
+ * (c) 2025 Chart.js Contributors
598
598
  * Released under the MIT License
599
599
  */
600
600
 
@@ -615,7 +615,7 @@ function index_esm(input) {
615
615
  * @param value - The value to test.
616
616
  * @since 2.7.0
617
617
  */ function isNullOrUndef(value) {
618
- return value === null || typeof value === 'undefined';
618
+ return value === null || value === undefined;
619
619
  }
620
620
  /**
621
621
  * Returns true if `value` is an array (including typed arrays), else returns false.
@@ -917,8 +917,13 @@ function almostEquals(x, y, epsilon) {
917
917
  result.sort((a, b)=>a - b).pop();
918
918
  return result;
919
919
  }
920
+ /**
921
+ * Verifies that attempting to coerce n to string or number won't throw a TypeError.
922
+ */ function isNonPrimitive(n) {
923
+ return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);
924
+ }
920
925
  function isNumber(n) {
921
- return !isNaN(parseFloat(n)) && isFinite(n);
926
+ return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);
922
927
  }
923
928
  function almostWhole(x, epsilon) {
924
929
  const rounded = Math.round(x);
@@ -1214,18 +1219,29 @@ function fontString(pixelSize, fontStyle, fontFamily) {
1214
1219
  let start = 0;
1215
1220
  let count = pointCount;
1216
1221
  if (meta._sorted) {
1217
- const { iScale , _parsed } = meta;
1222
+ const { iScale , vScale , _parsed } = meta;
1223
+ const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;
1218
1224
  const axis = iScale.axis;
1219
1225
  const { min , max , minDefined , maxDefined } = iScale.getUserBounds();
1220
1226
  if (minDefined) {
1221
- start = _limitValue(Math.min(// @ts-expect-error Need to type _parsed
1227
+ start = Math.min(// @ts-expect-error Need to type _parsed
1222
1228
  _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey
1223
- animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);
1229
+ animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);
1230
+ if (spanGaps) {
1231
+ const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));
1232
+ start -= Math.max(0, distanceToDefinedLo);
1233
+ }
1234
+ start = _limitValue(start, 0, pointCount - 1);
1224
1235
  }
1225
1236
  if (maxDefined) {
1226
- count = _limitValue(Math.max(// @ts-expect-error Need to type _parsed
1237
+ let end = Math.max(// @ts-expect-error Need to type _parsed
1227
1238
  _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey
1228
- animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;
1239
+ animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);
1240
+ if (spanGaps) {
1241
+ const distanceToDefinedHi = _parsed.slice(end - 1).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));
1242
+ end += Math.max(0, distanceToDefinedHi);
1243
+ }
1244
+ count = _limitValue(end, start, pointCount) - start;
1229
1245
  } else {
1230
1246
  count = pointCount - start;
1231
1247
  }
@@ -2719,12 +2735,6 @@ function capBezierPoints(points, area) {
2719
2735
  }
2720
2736
 
2721
2737
  /**
2722
- * Note: typedefs are auto-exported, so use a made-up `dom` namespace where
2723
- * necessary to avoid duplicates with `export * from './helpers`; see
2724
- * https://github.com/microsoft/TypeScript/issues/46011
2725
- * @typedef { import('../core/core.controller.js').default } dom.Chart
2726
- * @typedef { import('../../types').ChartEvent } ChartEvent
2727
- */ /**
2728
2738
  * @private
2729
2739
  */ function _isDomSupported() {
2730
2740
  return typeof window !== 'undefined' && typeof document !== 'undefined';
@@ -2894,10 +2904,10 @@ function getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {
2894
2904
  * @returns True if the canvas context size or transformation has changed.
2895
2905
  */ function retinaScale(chart, forceRatio, forceStyle) {
2896
2906
  const pixelRatio = forceRatio || 1;
2897
- const deviceHeight = Math.floor(chart.height * pixelRatio);
2898
- const deviceWidth = Math.floor(chart.width * pixelRatio);
2899
- chart.height = Math.floor(chart.height);
2900
- chart.width = Math.floor(chart.width);
2907
+ const deviceHeight = round1(chart.height * pixelRatio);
2908
+ const deviceWidth = round1(chart.width * pixelRatio);
2909
+ chart.height = round1(chart.height);
2910
+ chart.width = round1(chart.width);
2901
2911
  const canvas = chart.canvas;
2902
2912
  // If no style has been set on the canvas, the render size is used as display size,
2903
2913
  // making the chart visually bigger, so let's enforce it to the "correct" values.
@@ -3337,10 +3347,39 @@ function styleChanged(style, prevStyle) {
3337
3347
  return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);
3338
3348
  }
3339
3349
 
3350
+ function getSizeForArea(scale, chartArea, field) {
3351
+ return scale.options.clip ? scale[field] : chartArea[field];
3352
+ }
3353
+ function getDatasetArea(meta, chartArea) {
3354
+ const { xScale , yScale } = meta;
3355
+ if (xScale && yScale) {
3356
+ return {
3357
+ left: getSizeForArea(xScale, chartArea, 'left'),
3358
+ right: getSizeForArea(xScale, chartArea, 'right'),
3359
+ top: getSizeForArea(yScale, chartArea, 'top'),
3360
+ bottom: getSizeForArea(yScale, chartArea, 'bottom')
3361
+ };
3362
+ }
3363
+ return chartArea;
3364
+ }
3365
+ function getDatasetClipArea(chart, meta) {
3366
+ const clip = meta._clip;
3367
+ if (clip.disabled) {
3368
+ return false;
3369
+ }
3370
+ const area = getDatasetArea(meta, chart.chartArea);
3371
+ return {
3372
+ left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),
3373
+ right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),
3374
+ top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),
3375
+ bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)
3376
+ };
3377
+ }
3378
+
3340
3379
  /*!
3341
- * Chart.js v4.4.3
3380
+ * Chart.js v4.5.1
3342
3381
  * https://www.chartjs.org
3343
- * (c) 2024 Chart.js Contributors
3382
+ * (c) 2025 Chart.js Contributors
3344
3383
  * Released under the MIT License
3345
3384
  */
3346
3385
 
@@ -3774,9 +3813,11 @@ function applyStack(stack, value, dsIndex, options = {}) {
3774
3813
  if (value === null) {
3775
3814
  return;
3776
3815
  }
3816
+ let found = false;
3777
3817
  for(i = 0, ilen = keys.length; i < ilen; ++i){
3778
3818
  datasetIndex = +keys[i];
3779
3819
  if (datasetIndex === dsIndex) {
3820
+ found = true;
3780
3821
  if (options.all) {
3781
3822
  continue;
3782
3823
  }
@@ -3787,6 +3828,9 @@ function applyStack(stack, value, dsIndex, options = {}) {
3787
3828
  value += otherValue;
3788
3829
  }
3789
3830
  }
3831
+ if (!found && !options.all) {
3832
+ return 0;
3833
+ }
3790
3834
  return value;
3791
3835
  }
3792
3836
  function convertObjectDataToArray(data, meta) {
@@ -4030,6 +4074,7 @@ class DatasetController {
4030
4074
  this._resyncElements(resetNewElements);
4031
4075
  if (stackChanged || oldStacked !== meta._stacked) {
4032
4076
  updateStacks(this, meta._parsed);
4077
+ meta._stacked = isStacked(meta.vScale, meta);
4033
4078
  }
4034
4079
  }
4035
4080
  configure() {
@@ -4824,8 +4869,10 @@ class BarController extends DatasetController {
4824
4869
  const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);
4825
4870
  const stacked = iScale.options.stacked;
4826
4871
  const stacks = [];
4872
+ const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);
4873
+ const iScaleValue = currentParsed && currentParsed[iScale.axis];
4827
4874
  const skipNull = (meta)=>{
4828
- const parsed = meta.controller.getParsed(dataIndex);
4875
+ const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);
4829
4876
  const val = parsed && parsed[meta.vScale.axis];
4830
4877
  if (isNullOrUndef(val) || isNaN(val)) {
4831
4878
  return true;
@@ -4850,6 +4897,22 @@ class BarController extends DatasetController {
4850
4897
  _getStackCount(index) {
4851
4898
  return this._getStacks(undefined, index).length;
4852
4899
  }
4900
+ _getAxisCount() {
4901
+ return this._getAxis().length;
4902
+ }
4903
+ getFirstScaleIdForIndexAxis() {
4904
+ const scales = this.chart.scales;
4905
+ const indexScaleId = this.chart.options.indexAxis;
4906
+ return Object.keys(scales).filter((key)=>scales[key].axis === indexScaleId).shift();
4907
+ }
4908
+ _getAxis() {
4909
+ const axis = {};
4910
+ const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();
4911
+ for (const dataset of this.chart.data.datasets){
4912
+ axis[valueOrDefault(this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId)] = true;
4913
+ }
4914
+ return Object.keys(axis);
4915
+ }
4853
4916
  _getStackIndex(datasetIndex, name, dataIndex) {
4854
4917
  const stacks = this._getStacks(datasetIndex, dataIndex);
4855
4918
  const index = name !== undefined ? stacks.indexOf(name) : -1;
@@ -4940,10 +5003,13 @@ class BarController extends DatasetController {
4940
5003
  const skipNull = options.skipNull;
4941
5004
  const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);
4942
5005
  let center, size;
5006
+ const axisCount = this._getAxisCount();
4943
5007
  if (ruler.grouped) {
4944
5008
  const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;
4945
- const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);
4946
- const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);
5009
+ const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount) : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);
5010
+ const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;
5011
+ const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));
5012
+ const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;
4947
5013
  center = range.start + range.chunk * stackIndex + range.chunk / 2;
4948
5014
  size = Math.min(maxBarThickness, range.chunk * range.ratio);
4949
5015
  } else {
@@ -5163,19 +5229,24 @@ class DoughnutController extends DatasetController {
5163
5229
  labels: {
5164
5230
  generateLabels (chart) {
5165
5231
  const data = chart.data;
5232
+ const { labels: { pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;
5166
5233
  if (data.labels.length && data.datasets.length) {
5167
- const { labels: { pointStyle , color } } = chart.legend.options;
5168
5234
  return data.labels.map((label, i)=>{
5169
5235
  const meta = chart.getDatasetMeta(0);
5170
5236
  const style = meta.controller.getStyle(i);
5171
5237
  return {
5172
5238
  text: label,
5173
5239
  fillStyle: style.backgroundColor,
5174
- strokeStyle: style.borderColor,
5175
5240
  fontColor: color,
5241
+ hidden: !chart.getDataVisibility(i),
5242
+ lineDash: style.borderDash,
5243
+ lineDashOffset: style.borderDashOffset,
5244
+ lineJoin: style.borderJoinStyle,
5176
5245
  lineWidth: style.borderWidth,
5246
+ strokeStyle: style.borderColor,
5247
+ textAlign: textAlign,
5177
5248
  pointStyle: pointStyle,
5178
- hidden: !chart.getDataVisibility(i),
5249
+ borderRadius: useBorderRadius && (borderRadius || style.borderRadius),
5179
5250
  index: i
5180
5251
  };
5181
5252
  });
@@ -5960,10 +6031,20 @@ var adapters = {
5960
6031
  function binarySearch(metaset, axis, value, intersect) {
5961
6032
  const { controller , data , _sorted } = metaset;
5962
6033
  const iScale = controller._cachedMeta.iScale;
6034
+ const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;
5963
6035
  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {
5964
6036
  const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;
5965
6037
  if (!intersect) {
5966
- return lookupMethod(data, axis, value);
6038
+ const result = lookupMethod(data, axis, value);
6039
+ if (spanGaps) {
6040
+ const { vScale } = controller._cachedMeta;
6041
+ const { _parsed } = metaset;
6042
+ const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));
6043
+ result.lo -= Math.max(0, distanceToDefinedLo);
6044
+ const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));
6045
+ result.hi += Math.max(0, distanceToDefinedHi);
6046
+ }
6047
+ return result;
5967
6048
  } else if (controller._sharedOptions) {
5968
6049
  const el = data[0];
5969
6050
  const range = typeof el.getRange === 'function' && el.getRange(axis);
@@ -6093,7 +6174,7 @@ function binarySearch(metaset, axis, value, intersect) {
6093
6174
  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';
6094
6175
  let intersectsItem = false;
6095
6176
  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{
6096
- if (element[rangeMethod](position[axis], useFinalPosition)) {
6177
+ if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {
6097
6178
  items.push({
6098
6179
  element,
6099
6180
  datasetIndex,
@@ -8397,18 +8478,22 @@ var registry = /* #__PURE__ */ new Registry();
8397
8478
 
8398
8479
  class PluginService {
8399
8480
  constructor(){
8400
- this._init = [];
8481
+ this._init = undefined;
8401
8482
  }
8402
8483
  notify(chart, hook, args, filter) {
8403
8484
  if (hook === 'beforeInit') {
8404
8485
  this._init = this._createDescriptors(chart, true);
8405
8486
  this._notify(this._init, chart, 'install');
8406
8487
  }
8488
+ if (this._init === undefined) {
8489
+ return;
8490
+ }
8407
8491
  const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);
8408
8492
  const result = this._notify(descriptors, chart, hook, args);
8409
8493
  if (hook === 'afterDestroy') {
8410
8494
  this._notify(descriptors, chart, 'stop');
8411
8495
  this._notify(this._init, chart, 'uninstall');
8496
+ this._init = undefined;
8412
8497
  }
8413
8498
  return result;
8414
8499
  }
@@ -8851,7 +8936,7 @@ function needContext(proxy, names) {
8851
8936
  return false;
8852
8937
  }
8853
8938
 
8854
- var version = "4.4.3";
8939
+ var version = "4.5.1";
8855
8940
 
8856
8941
  const KNOWN_POSITIONS = [
8857
8942
  'top',
@@ -8921,21 +9006,6 @@ function moveNumericKeys(obj, start, move) {
8921
9006
  }
8922
9007
  return e;
8923
9008
  }
8924
- function getSizeForArea(scale, chartArea, field) {
8925
- return scale.options.clip ? scale[field] : chartArea[field];
8926
- }
8927
- function getDatasetArea(meta, chartArea) {
8928
- const { xScale , yScale } = meta;
8929
- if (xScale && yScale) {
8930
- return {
8931
- left: getSizeForArea(xScale, chartArea, 'left'),
8932
- right: getSizeForArea(xScale, chartArea, 'right'),
8933
- top: getSizeForArea(yScale, chartArea, 'top'),
8934
- bottom: getSizeForArea(yScale, chartArea, 'bottom')
8935
- };
8936
- }
8937
- return chartArea;
8938
- }
8939
9009
  let Chart$1 = class Chart {
8940
9010
  static defaults = defaults;
8941
9011
  static instances = instances;
@@ -9383,8 +9453,8 @@ let Chart$1 = class Chart {
9383
9453
  let i;
9384
9454
  if (this._resizeBeforeDraw) {
9385
9455
  const { width , height } = this._resizeBeforeDraw;
9386
- this._resize(width, height);
9387
9456
  this._resizeBeforeDraw = null;
9457
+ this._resize(width, height);
9388
9458
  }
9389
9459
  this.clear();
9390
9460
  if (this.width <= 0 || this.height <= 0) {
@@ -9434,27 +9504,20 @@ let Chart$1 = class Chart {
9434
9504
  }
9435
9505
  _drawDataset(meta) {
9436
9506
  const ctx = this.ctx;
9437
- const clip = meta._clip;
9438
- const useClip = !clip.disabled;
9439
- const area = getDatasetArea(meta, this.chartArea);
9440
9507
  const args = {
9441
9508
  meta,
9442
9509
  index: meta.index,
9443
9510
  cancelable: true
9444
9511
  };
9512
+ const clip = getDatasetClipArea(this, meta);
9445
9513
  if (this.notifyPlugins('beforeDatasetDraw', args) === false) {
9446
9514
  return;
9447
9515
  }
9448
- if (useClip) {
9449
- clipArea(ctx, {
9450
- left: clip.left === false ? 0 : area.left - clip.left,
9451
- right: clip.right === false ? this.width : area.right + clip.right,
9452
- top: clip.top === false ? 0 : area.top - clip.top,
9453
- bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom
9454
- });
9516
+ if (clip) {
9517
+ clipArea(ctx, clip);
9455
9518
  }
9456
9519
  meta.controller.draw();
9457
- if (useClip) {
9520
+ if (clip) {
9458
9521
  unclipArea(ctx);
9459
9522
  }
9460
9523
  args.cancelable = false;
@@ -9767,6 +9830,34 @@ function invalidatePlugins() {
9767
9830
  return each(Chart$1.instances, (chart)=>chart._plugins.invalidate());
9768
9831
  }
9769
9832
 
9833
+ function clipSelf(ctx, element, endAngle) {
9834
+ const { startAngle , x , y , outerRadius , innerRadius , options } = element;
9835
+ const { borderWidth , borderJoinStyle } = options;
9836
+ const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));
9837
+ ctx.beginPath();
9838
+ ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);
9839
+ if (innerRadius > 0) {
9840
+ const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));
9841
+ ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);
9842
+ } else {
9843
+ const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));
9844
+ if (borderJoinStyle === 'round') {
9845
+ ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);
9846
+ } else if (borderJoinStyle === 'bevel') {
9847
+ const r = 2 * clipWidth * clipWidth;
9848
+ const endX = -r * Math.cos(endAngle + PI / 2) + x;
9849
+ const endY = -r * Math.sin(endAngle + PI / 2) + y;
9850
+ const startX = r * Math.cos(startAngle + PI / 2) + x;
9851
+ const startY = r * Math.sin(startAngle + PI / 2) + y;
9852
+ ctx.lineTo(endX, endY);
9853
+ ctx.lineTo(startX, startY);
9854
+ }
9855
+ }
9856
+ ctx.closePath();
9857
+ ctx.moveTo(0, 0);
9858
+ ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);
9859
+ ctx.clip('evenodd');
9860
+ }
9770
9861
  function clipArc(ctx, element, endAngle) {
9771
9862
  const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;
9772
9863
  let angleMargin = pixelMargin / outerRadius;
@@ -9930,7 +10021,7 @@ function drawArc(ctx, element, offset, spacing, circular) {
9930
10021
  }
9931
10022
  function drawBorder(ctx, element, offset, spacing, circular) {
9932
10023
  const { fullCircles , startAngle , circumference , options } = element;
9933
- const { borderWidth , borderJoinStyle , borderDash , borderDashOffset } = options;
10024
+ const { borderWidth , borderJoinStyle , borderDash , borderDashOffset , borderRadius } = options;
9934
10025
  const inner = options.borderAlign === 'inner';
9935
10026
  if (!borderWidth) {
9936
10027
  return;
@@ -9957,6 +10048,9 @@ function drawBorder(ctx, element, offset, spacing, circular) {
9957
10048
  if (inner) {
9958
10049
  clipArc(ctx, element, endAngle);
9959
10050
  }
10051
+ if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {
10052
+ clipSelf(ctx, element, endAngle);
10053
+ }
9960
10054
  if (!fullCircles) {
9961
10055
  pathArc(ctx, element, offset, spacing, endAngle, circular);
9962
10056
  ctx.stroke();
@@ -9975,7 +10069,8 @@ class ArcElement extends Element {
9975
10069
  offset: 0,
9976
10070
  spacing: 0,
9977
10071
  angle: undefined,
9978
- circular: true
10072
+ circular: true,
10073
+ selfJoin: false
9979
10074
  };
9980
10075
  static defaultRoutes = {
9981
10076
  backgroundColor: 'backgroundColor'
@@ -10023,7 +10118,8 @@ class ArcElement extends Element {
10023
10118
  ], useFinalPosition);
10024
10119
  const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;
10025
10120
  const _circumference = valueOrDefault(circumference, endAngle - startAngle);
10026
- const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);
10121
+ const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;
10122
+ const betweenAngles = _circumference >= TAU || nonZeroBetween;
10027
10123
  const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);
10028
10124
  return betweenAngles && withinRadius;
10029
10125
  }
@@ -10689,6 +10785,9 @@ function containsColorsDefinitions(descriptors) {
10689
10785
  function containsColorsDefinition(descriptor) {
10690
10786
  return descriptor && (descriptor.borderColor || descriptor.backgroundColor);
10691
10787
  }
10788
+ function containsDefaultColorsDefenitions() {
10789
+ return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';
10790
+ }
10692
10791
  var plugin_colors = {
10693
10792
  id: 'colors',
10694
10793
  defaults: {
@@ -10701,7 +10800,8 @@ var plugin_colors = {
10701
10800
  }
10702
10801
  const { data: { datasets } , options: chartOptions } = chart.config;
10703
10802
  const { elements } = chartOptions;
10704
- if (!options.forceOverride && (containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements))) {
10803
+ const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();
10804
+ if (!options.forceOverride && containsColorDefenition) {
10705
10805
  return;
10706
10806
  }
10707
10807
  const colorizer = getColorizer(chart);
@@ -11300,11 +11400,13 @@ function computeCircularBoundary(source) {
11300
11400
 
11301
11401
  function _drawfill(ctx, source, area) {
11302
11402
  const target = _getTarget(source);
11303
- const { line , scale , axis } = source;
11403
+ const { chart , index , line , scale , axis } = source;
11304
11404
  const lineOpts = line.options;
11305
11405
  const fillOption = lineOpts.fill;
11306
11406
  const color = lineOpts.backgroundColor;
11307
11407
  const { above =color , below =color } = fillOption || {};
11408
+ const meta = chart.getDatasetMeta(index);
11409
+ const clip = getDatasetClipArea(chart, meta);
11308
11410
  if (target && line.points.length) {
11309
11411
  clipArea(ctx, area);
11310
11412
  doFill(ctx, {
@@ -11314,34 +11416,54 @@ function _drawfill(ctx, source, area) {
11314
11416
  below,
11315
11417
  area,
11316
11418
  scale,
11317
- axis
11419
+ axis,
11420
+ clip
11318
11421
  });
11319
11422
  unclipArea(ctx);
11320
11423
  }
11321
11424
  }
11322
11425
  function doFill(ctx, cfg) {
11323
- const { line , target , above , below , area , scale } = cfg;
11426
+ const { line , target , above , below , area , scale , clip } = cfg;
11324
11427
  const property = line._loop ? 'angle' : cfg.axis;
11325
11428
  ctx.save();
11326
- if (property === 'x' && below !== above) {
11327
- clipVertical(ctx, target, area.top);
11328
- fill(ctx, {
11329
- line,
11330
- target,
11331
- color: above,
11332
- scale,
11333
- property
11334
- });
11335
- ctx.restore();
11336
- ctx.save();
11337
- clipVertical(ctx, target, area.bottom);
11429
+ let fillColor = below;
11430
+ if (below !== above) {
11431
+ if (property === 'x') {
11432
+ clipVertical(ctx, target, area.top);
11433
+ fill(ctx, {
11434
+ line,
11435
+ target,
11436
+ color: above,
11437
+ scale,
11438
+ property,
11439
+ clip
11440
+ });
11441
+ ctx.restore();
11442
+ ctx.save();
11443
+ clipVertical(ctx, target, area.bottom);
11444
+ } else if (property === 'y') {
11445
+ clipHorizontal(ctx, target, area.left);
11446
+ fill(ctx, {
11447
+ line,
11448
+ target,
11449
+ color: below,
11450
+ scale,
11451
+ property,
11452
+ clip
11453
+ });
11454
+ ctx.restore();
11455
+ ctx.save();
11456
+ clipHorizontal(ctx, target, area.right);
11457
+ fillColor = above;
11458
+ }
11338
11459
  }
11339
11460
  fill(ctx, {
11340
11461
  line,
11341
11462
  target,
11342
- color: below,
11463
+ color: fillColor,
11343
11464
  scale,
11344
- property
11465
+ property,
11466
+ clip
11345
11467
  });
11346
11468
  ctx.restore();
11347
11469
  }
@@ -11374,15 +11496,44 @@ function clipVertical(ctx, target, clipY) {
11374
11496
  ctx.closePath();
11375
11497
  ctx.clip();
11376
11498
  }
11499
+ function clipHorizontal(ctx, target, clipX) {
11500
+ const { segments , points } = target;
11501
+ let first = true;
11502
+ let lineLoop = false;
11503
+ ctx.beginPath();
11504
+ for (const segment of segments){
11505
+ const { start , end } = segment;
11506
+ const firstPoint = points[start];
11507
+ const lastPoint = points[_findSegmentEnd(start, end, points)];
11508
+ if (first) {
11509
+ ctx.moveTo(firstPoint.x, firstPoint.y);
11510
+ first = false;
11511
+ } else {
11512
+ ctx.lineTo(clipX, firstPoint.y);
11513
+ ctx.lineTo(firstPoint.x, firstPoint.y);
11514
+ }
11515
+ lineLoop = !!target.pathSegment(ctx, segment, {
11516
+ move: lineLoop
11517
+ });
11518
+ if (lineLoop) {
11519
+ ctx.closePath();
11520
+ } else {
11521
+ ctx.lineTo(clipX, lastPoint.y);
11522
+ }
11523
+ }
11524
+ ctx.lineTo(clipX, target.first().y);
11525
+ ctx.closePath();
11526
+ ctx.clip();
11527
+ }
11377
11528
  function fill(ctx, cfg) {
11378
- const { line , target , property , color , scale } = cfg;
11529
+ const { line , target , property , color , scale , clip } = cfg;
11379
11530
  const segments = _segments(line, target, property);
11380
11531
  for (const { source: src , target: tgt , start , end } of segments){
11381
11532
  const { style: { backgroundColor =color } = {} } = src;
11382
11533
  const notShape = target !== true;
11383
11534
  ctx.save();
11384
11535
  ctx.fillStyle = backgroundColor;
11385
- clipBounds(ctx, scale, notShape && _getBounds(property, start, end));
11536
+ clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));
11386
11537
  ctx.beginPath();
11387
11538
  const lineLoop = !!line.pathSegment(ctx, src);
11388
11539
  let loop;
@@ -11406,12 +11557,30 @@ function fill(ctx, cfg) {
11406
11557
  ctx.restore();
11407
11558
  }
11408
11559
  }
11409
- function clipBounds(ctx, scale, bounds) {
11410
- const { top , bottom } = scale.chart.chartArea;
11560
+ function clipBounds(ctx, scale, clip, bounds) {
11561
+ const chartArea = scale.chart.chartArea;
11411
11562
  const { property , start , end } = bounds || {};
11412
- if (property === 'x') {
11563
+ if (property === 'x' || property === 'y') {
11564
+ let left, top, right, bottom;
11565
+ if (property === 'x') {
11566
+ left = start;
11567
+ top = chartArea.top;
11568
+ right = end;
11569
+ bottom = chartArea.bottom;
11570
+ } else {
11571
+ left = chartArea.left;
11572
+ top = start;
11573
+ right = chartArea.right;
11574
+ bottom = end;
11575
+ }
11413
11576
  ctx.beginPath();
11414
- ctx.rect(start, top, end - start, bottom - top);
11577
+ if (clip) {
11578
+ left = Math.max(left, clip.left);
11579
+ right = Math.min(right, clip.right);
11580
+ top = Math.max(top, clip.top);
11581
+ bottom = Math.min(bottom, clip.bottom);
11582
+ }
11583
+ ctx.rect(left, top, right - left, bottom - top);
11415
11584
  ctx.clip();
11416
11585
  }
11417
11586
  }
@@ -12244,6 +12413,9 @@ const positioners = {
12244
12413
  ++count;
12245
12414
  }
12246
12415
  }
12416
+ if (count === 0 || xSet.size === 0) {
12417
+ return false;
12418
+ }
12247
12419
  const xAverage = [
12248
12420
  ...xSet
12249
12421
  ].reduce((a, b)=>a + b) / xSet.size;
@@ -13996,7 +14168,7 @@ function drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {
13996
14168
  ctx.save();
13997
14169
  ctx.strokeStyle = color;
13998
14170
  ctx.lineWidth = lineWidth;
13999
- ctx.setLineDash(borderOpts.dash);
14171
+ ctx.setLineDash(borderOpts.dash || []);
14000
14172
  ctx.lineDashOffset = borderOpts.dashOffset;
14001
14173
  ctx.beginPath();
14002
14174
  pathRadiusLine(scale, radius, circular, labelCount);
@@ -14200,7 +14372,7 @@ class RadialLinearScale extends LinearScaleBase {
14200
14372
  ctx.strokeStyle = color;
14201
14373
  ctx.setLineDash(optsAtIndex.borderDash);
14202
14374
  ctx.lineDashOffset = optsAtIndex.borderDashOffset;
14203
- offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);
14375
+ offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);
14204
14376
  position = this.getPointPosition(i, offset);
14205
14377
  ctx.beginPath();
14206
14378
  ctx.moveTo(this.xCenter, this.yCenter);
@@ -14311,7 +14483,7 @@ const INTERVALS = {
14311
14483
  value = parser(value);
14312
14484
  }
14313
14485
  if (!isNumberFinite(value)) {
14314
- value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);
14486
+ value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);
14315
14487
  }
14316
14488
  if (value === null) {
14317
14489
  return null;
@@ -15002,8 +15174,8 @@ const Chart = defineComponent({
15002
15174
  return ()=>{
15003
15175
  return h("canvas", {
15004
15176
  role: "img",
15005
- ariaLabel: props.ariaLabel,
15006
- ariaDescribedby: props.ariaDescribedby,
15177
+ "aria-label": props.ariaLabel,
15178
+ "aria-describedby": props.ariaDescribedby,
15007
15179
  ref: canvasRef
15008
15180
  }, [
15009
15181
  h("p", {}, [