@richardmcquiston01/dashboard-widgets-toolkit 0.6.0 → 0.8.0

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.
package/dist/core.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { b as WidgetDefinition, W as WidgetSize, a as WidgetFill, D as DashboardWidget, k as WidgetContext, j as ResolveOptions, l as WidgetProviders, m as WidgetKind, n as Result, o as WidgetPayload } from './scale-D51ZGIF4.cjs';
2
- export { p as AlertListItem, A as AlertListWidgetData, q as BarListItem, B as BarListWidgetData, C as CachedPayload, r as DEFAULT_COMPARISON_LABEL, s as DEFAULT_CURRENCY, t as DEFAULT_DETAIL_PAGE_SIZE, u as DEFAULT_EMPTY_TEXT, v as DETAIL_MODES, f as DashboardLayout, w as DeltaDirection, x as DeltaSentiment, y as DetailCell, z as DetailColumn, d as DetailData, E as DetailMode, F as DetailPage, H as DetailProvider, c as DetailProviderOptions, I as DetailProviders, e as DetailQuery, J as DetailSort, M as EMPTY_LAYOUT, O as EmptyWidget, P as Err, Q as ErrorWidget, S as FormatOptions, g as GaugeWidgetData, U as GraphPoint, V as GraphSeries, G as GraphWidgetData, X as KpiDelta, Y as KpiDeltaOptions, K as KpiWidgetData, Z as LayoutItem, _ as LoadingWidget, L as Locale, $ as MAX_DETAIL_PAGE_SIZE, a0 as MAX_GRAPH_SERIES, N as NiceDomain, a1 as Ok, a2 as OkWidget, a3 as ProviderOptions, a4 as ResolvedDetailOptions, R as ResolvedTableControls, a5 as ResolvedWidget, a6 as SortDirection, a7 as TableCell, a8 as TableColumn, T as TableWidgetData, h as TextWidgetData, a9 as VALUE_FORMATS, aa as ValueFormat, ab as WIDGET_FILLS, ac as WIDGET_KINDS, ad as WIDGET_SIZES, ae as WidgetCache, i as WidgetData, af as WidgetDataOf, ag as WidgetDetailOptions, ah as WidgetEmptyState, ai as WidgetProvider, aj as WidgetStatus, ak as WidgetTableControls, al as cacheKeyFor, am as defaultDetailQuery, an as defineWidget, ao as deriveDetailData, ap as describeUnknownError, aq as emptyTextFor, ar as emptyWidget, as as err, at as failedWidget, au as formatCount, av as formatPercentChange, aw as formatValue, ax as hiddenWidgets, ay as hideWidget, az as isHidden, aA as isMinimized, aB as isWidgetEmptyState, aC as isWidgetKind, aD as isWidgetVisibleTo, aE as kpiDelta, aF as labelStride, aG as loadingWidgets, aH as minimizeWidget, aI as moveWidget, aJ as moveWidgetBy, aK as moveWidgetDown, aL as moveWidgetUp, aM as niceDomain, aN as niceStep, aO as ok, aP as parseDetailQuery, aQ as parseLayout, aR as percentChange, aS as pruneLayout, aT as queryRows, aU as resolveDetailOptions, aV as resolvePayload, aW as resolveTableControls, aX as resolveWidget, aY as resolveWidgets, aZ as restoreWidget, a_ as serializeDetailQuery, a$ as serializeLayout, b0 as shareOf, b1 as showWidget, b2 as sortDefinitions, b3 as tableDetailData, b4 as toggleHidden, b5 as toggleMinimized, b6 as validateDetailData, b7 as visibleWidgets, b8 as widgetsFor } from './scale-D51ZGIF4.cjs';
1
+ import { b as WidgetDefinition, W as WidgetSize, a as WidgetFill, D as DashboardWidget, k as WidgetContext, j as ResolveOptions, l as WidgetProviders, m as WidgetKind, n as Result, o as WidgetPayload } from './scale-CrXxawQn.cjs';
2
+ export { p as AlertListItem, A as AlertListWidgetData, q as BarListItem, B as BarListWidgetData, C as CachedPayload, r as DEFAULT_COMPARISON_LABEL, s as DEFAULT_CURRENCY, t as DEFAULT_DETAIL_PAGE_SIZE, u as DEFAULT_EMPTY_TEXT, v as DETAIL_MODES, f as DashboardLayout, w as DeltaDirection, x as DeltaSentiment, y as DetailCell, z as DetailColumn, d as DetailData, E as DetailMode, F as DetailPage, H as DetailProvider, c as DetailProviderOptions, I as DetailProviders, e as DetailQuery, J as DetailSort, M as EMPTY_LAYOUT, O as EmptyWidget, P as EnforceLocksOptions, Q as Err, S as ErrorWidget, U as FormatOptions, g as GaugeWidgetData, V as GraphPoint, X as GraphSeries, G as GraphWidgetData, Y as KpiDelta, Z as KpiDeltaOptions, K as KpiWidgetData, _ as LayoutItem, $ as LoadingWidget, L as Locale, a0 as MAX_DETAIL_PAGE_SIZE, a1 as MAX_GRAPH_SERIES, N as NiceDomain, a2 as Ok, a3 as OkWidget, a4 as ProviderOptions, a5 as ResolvedDetailOptions, R as ResolvedTableControls, a6 as ResolvedWidget, a7 as ResolvedWidgetLock, a8 as SortDirection, a9 as TableCell, aa as TableColumn, T as TableWidgetData, h as TextWidgetData, ab as VALUE_FORMATS, ac as ValueFormat, ad as WIDGET_FILLS, ae as WIDGET_KINDS, af as WIDGET_SIZES, ag as WidgetCache, i as WidgetData, ah as WidgetDataOf, ai as WidgetDetailOptions, aj as WidgetEmptyState, ak as WidgetLock, al as WidgetProvider, am as WidgetStatus, an as WidgetTableControls, ao as cacheKeyFor, ap as defaultDetailQuery, aq as defineWidget, ar as deriveDetailData, as as describeUnknownError, at as emptyTextFor, au as emptyWidget, av as enforceLocks, aw as err, ax as failedWidget, ay as formatCount, az as formatPercentChange, aA as formatValue, aB as hiddenWidgets, aC as hideWidget, aD as isHidden, aE as isMinimized, aF as isWidgetEmptyState, aG as isWidgetKind, aH as isWidgetVisibleTo, aI as kpiDelta, aJ as labelStride, aK as loadingWidgets, aL as minimizeWidget, aM as moveWidget, aN as moveWidgetBy, aO as moveWidgetDown, aP as moveWidgetUp, aQ as niceDomain, aR as niceStep, aS as ok, aT as parseDetailQuery, aU as parseLayout, aV as percentChange, aW as pruneLayout, aX as queryRows, aY as resolveDetailOptions, aZ as resolvePayload, a_ as resolveTableControls, a$ as resolveWidget, b0 as resolveWidgetLock, b1 as resolveWidgets, b2 as restoreWidget, b3 as serializeDetailQuery, b4 as serializeLayout, b5 as shareOf, b6 as showWidget, b7 as sortDefinitions, b8 as tableDetailData, b9 as toggleHidden, ba as toggleMinimized, bb as validateDetailData, bc as visibleWidgets, bd as widgetsFor } from './scale-CrXxawQn.cjs';
3
3
 
4
4
  /**
5
5
  * Maker Toolkit compatibility. Its API (`apps/api/src/widgets`) serves
package/dist/core.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { b as WidgetDefinition, W as WidgetSize, a as WidgetFill, D as DashboardWidget, k as WidgetContext, j as ResolveOptions, l as WidgetProviders, m as WidgetKind, n as Result, o as WidgetPayload } from './scale-D51ZGIF4.js';
2
- export { p as AlertListItem, A as AlertListWidgetData, q as BarListItem, B as BarListWidgetData, C as CachedPayload, r as DEFAULT_COMPARISON_LABEL, s as DEFAULT_CURRENCY, t as DEFAULT_DETAIL_PAGE_SIZE, u as DEFAULT_EMPTY_TEXT, v as DETAIL_MODES, f as DashboardLayout, w as DeltaDirection, x as DeltaSentiment, y as DetailCell, z as DetailColumn, d as DetailData, E as DetailMode, F as DetailPage, H as DetailProvider, c as DetailProviderOptions, I as DetailProviders, e as DetailQuery, J as DetailSort, M as EMPTY_LAYOUT, O as EmptyWidget, P as Err, Q as ErrorWidget, S as FormatOptions, g as GaugeWidgetData, U as GraphPoint, V as GraphSeries, G as GraphWidgetData, X as KpiDelta, Y as KpiDeltaOptions, K as KpiWidgetData, Z as LayoutItem, _ as LoadingWidget, L as Locale, $ as MAX_DETAIL_PAGE_SIZE, a0 as MAX_GRAPH_SERIES, N as NiceDomain, a1 as Ok, a2 as OkWidget, a3 as ProviderOptions, a4 as ResolvedDetailOptions, R as ResolvedTableControls, a5 as ResolvedWidget, a6 as SortDirection, a7 as TableCell, a8 as TableColumn, T as TableWidgetData, h as TextWidgetData, a9 as VALUE_FORMATS, aa as ValueFormat, ab as WIDGET_FILLS, ac as WIDGET_KINDS, ad as WIDGET_SIZES, ae as WidgetCache, i as WidgetData, af as WidgetDataOf, ag as WidgetDetailOptions, ah as WidgetEmptyState, ai as WidgetProvider, aj as WidgetStatus, ak as WidgetTableControls, al as cacheKeyFor, am as defaultDetailQuery, an as defineWidget, ao as deriveDetailData, ap as describeUnknownError, aq as emptyTextFor, ar as emptyWidget, as as err, at as failedWidget, au as formatCount, av as formatPercentChange, aw as formatValue, ax as hiddenWidgets, ay as hideWidget, az as isHidden, aA as isMinimized, aB as isWidgetEmptyState, aC as isWidgetKind, aD as isWidgetVisibleTo, aE as kpiDelta, aF as labelStride, aG as loadingWidgets, aH as minimizeWidget, aI as moveWidget, aJ as moveWidgetBy, aK as moveWidgetDown, aL as moveWidgetUp, aM as niceDomain, aN as niceStep, aO as ok, aP as parseDetailQuery, aQ as parseLayout, aR as percentChange, aS as pruneLayout, aT as queryRows, aU as resolveDetailOptions, aV as resolvePayload, aW as resolveTableControls, aX as resolveWidget, aY as resolveWidgets, aZ as restoreWidget, a_ as serializeDetailQuery, a$ as serializeLayout, b0 as shareOf, b1 as showWidget, b2 as sortDefinitions, b3 as tableDetailData, b4 as toggleHidden, b5 as toggleMinimized, b6 as validateDetailData, b7 as visibleWidgets, b8 as widgetsFor } from './scale-D51ZGIF4.js';
1
+ import { b as WidgetDefinition, W as WidgetSize, a as WidgetFill, D as DashboardWidget, k as WidgetContext, j as ResolveOptions, l as WidgetProviders, m as WidgetKind, n as Result, o as WidgetPayload } from './scale-CrXxawQn.js';
2
+ export { p as AlertListItem, A as AlertListWidgetData, q as BarListItem, B as BarListWidgetData, C as CachedPayload, r as DEFAULT_COMPARISON_LABEL, s as DEFAULT_CURRENCY, t as DEFAULT_DETAIL_PAGE_SIZE, u as DEFAULT_EMPTY_TEXT, v as DETAIL_MODES, f as DashboardLayout, w as DeltaDirection, x as DeltaSentiment, y as DetailCell, z as DetailColumn, d as DetailData, E as DetailMode, F as DetailPage, H as DetailProvider, c as DetailProviderOptions, I as DetailProviders, e as DetailQuery, J as DetailSort, M as EMPTY_LAYOUT, O as EmptyWidget, P as EnforceLocksOptions, Q as Err, S as ErrorWidget, U as FormatOptions, g as GaugeWidgetData, V as GraphPoint, X as GraphSeries, G as GraphWidgetData, Y as KpiDelta, Z as KpiDeltaOptions, K as KpiWidgetData, _ as LayoutItem, $ as LoadingWidget, L as Locale, a0 as MAX_DETAIL_PAGE_SIZE, a1 as MAX_GRAPH_SERIES, N as NiceDomain, a2 as Ok, a3 as OkWidget, a4 as ProviderOptions, a5 as ResolvedDetailOptions, R as ResolvedTableControls, a6 as ResolvedWidget, a7 as ResolvedWidgetLock, a8 as SortDirection, a9 as TableCell, aa as TableColumn, T as TableWidgetData, h as TextWidgetData, ab as VALUE_FORMATS, ac as ValueFormat, ad as WIDGET_FILLS, ae as WIDGET_KINDS, af as WIDGET_SIZES, ag as WidgetCache, i as WidgetData, ah as WidgetDataOf, ai as WidgetDetailOptions, aj as WidgetEmptyState, ak as WidgetLock, al as WidgetProvider, am as WidgetStatus, an as WidgetTableControls, ao as cacheKeyFor, ap as defaultDetailQuery, aq as defineWidget, ar as deriveDetailData, as as describeUnknownError, at as emptyTextFor, au as emptyWidget, av as enforceLocks, aw as err, ax as failedWidget, ay as formatCount, az as formatPercentChange, aA as formatValue, aB as hiddenWidgets, aC as hideWidget, aD as isHidden, aE as isMinimized, aF as isWidgetEmptyState, aG as isWidgetKind, aH as isWidgetVisibleTo, aI as kpiDelta, aJ as labelStride, aK as loadingWidgets, aL as minimizeWidget, aM as moveWidget, aN as moveWidgetBy, aO as moveWidgetDown, aP as moveWidgetUp, aQ as niceDomain, aR as niceStep, aS as ok, aT as parseDetailQuery, aU as parseLayout, aV as percentChange, aW as pruneLayout, aX as queryRows, aY as resolveDetailOptions, aZ as resolvePayload, a_ as resolveTableControls, a$ as resolveWidget, b0 as resolveWidgetLock, b1 as resolveWidgets, b2 as restoreWidget, b3 as serializeDetailQuery, b4 as serializeLayout, b5 as shareOf, b6 as showWidget, b7 as sortDefinitions, b8 as tableDetailData, b9 as toggleHidden, ba as toggleMinimized, bb as validateDetailData, bc as visibleWidgets, bd as widgetsFor } from './scale-CrXxawQn.js';
3
3
 
4
4
  /**
5
5
  * Maker Toolkit compatibility. Its API (`apps/api/src/widgets`) serves
package/dist/core.js CHANGED
@@ -84,6 +84,26 @@ function fromLegacyDefinition(legacy) {
84
84
  // src/core/definition.ts
85
85
  var WIDGET_SIZES = ["small", "medium", "large", "full"];
86
86
  var WIDGET_FILLS = ["height", "width", "both"];
87
+ var NOT_LOCKED = Object.freeze({
88
+ move: false,
89
+ hide: false,
90
+ minimize: false
91
+ });
92
+ var FULLY_LOCKED = Object.freeze({
93
+ move: true,
94
+ hide: true,
95
+ minimize: true
96
+ });
97
+ function resolveWidgetLock(definition) {
98
+ const setting = definition.locked;
99
+ if (setting === true) return FULLY_LOCKED;
100
+ if (setting === void 0 || setting === false) return NOT_LOCKED;
101
+ return {
102
+ move: setting.move === true,
103
+ hide: setting.hide === true,
104
+ minimize: setting.minimize === true
105
+ };
106
+ }
87
107
  function defineWidget(definition) {
88
108
  return definition;
89
109
  }
@@ -687,9 +707,10 @@ function bySortOrder(items) {
687
707
  (a, b) => (a.item.sortOrder ?? 0) - (b.item.sortOrder ?? 0) || a.index - b.index
688
708
  ).map(({ item }) => item);
689
709
  }
690
- function visibleWidgets(definitions, layout) {
691
- const hidden = new Set(layout.hidden);
692
- const visible = definitions.filter((d) => !hidden.has(d.key));
710
+ function isPinned(item) {
711
+ return resolveWidgetLock(item).move;
712
+ }
713
+ function viewerOrder(visible, layout) {
693
714
  const byKey = new Map(visible.map((d) => [d.key, d]));
694
715
  const ordered = [];
695
716
  for (const key of layout.order) {
@@ -704,34 +725,62 @@ function visibleWidgets(definitions, layout) {
704
725
  }
705
726
  return ordered;
706
727
  }
728
+ function placeAroundPinned(visible, free) {
729
+ const slots = bySortOrder(visible).map(
730
+ (item) => isPinned(item) ? item : void 0
731
+ );
732
+ let next = 0;
733
+ return slots.map((pinned) => pinned ?? free[next++]);
734
+ }
735
+ function visibleWidgets(definitions, layout) {
736
+ const hidden = new Set(layout.hidden);
737
+ const visible = definitions.filter((d) => !hidden.has(d.key));
738
+ const ordered = viewerOrder(visible, layout);
739
+ if (!visible.some(isPinned)) return ordered;
740
+ return placeAroundPinned(
741
+ visible,
742
+ ordered.filter((item) => !isPinned(item))
743
+ );
744
+ }
707
745
  function hiddenWidgets(definitions, layout) {
708
746
  const hidden = new Set(layout.hidden);
709
747
  return bySortOrder(definitions.filter((d) => hidden.has(d.key)));
710
748
  }
711
749
  function moveWidget(definitions, layout, key, toIndex) {
712
- const current = visibleWidgets(definitions, layout).map(
713
- (d) => d.key
714
- );
715
- const fromIndex = current.indexOf(key);
716
- if (fromIndex === -1 || !Number.isInteger(toIndex) || toIndex < 0 || toIndex >= current.length || toIndex === fromIndex) {
750
+ const current = visibleWidgets(definitions, layout);
751
+ const fromIndex = current.findIndex((d) => d.key === key);
752
+ const mover = current[fromIndex];
753
+ if (mover === void 0 || !Number.isInteger(toIndex) || toIndex < 0 || toIndex >= current.length || toIndex === fromIndex || isPinned(mover) || isPinned(current[toIndex])) {
717
754
  return layout;
718
755
  }
719
- const next = [...current];
720
- next.splice(fromIndex, 1);
721
- next.splice(toIndex, 0, key);
722
- return { ...layout, order: next };
756
+ const freeSlots = freeSlotIndexes(current);
757
+ const free = current.filter((item) => !isPinned(item));
758
+ const fromFree = freeSlots.indexOf(fromIndex);
759
+ const toFree = freeSlots.indexOf(toIndex);
760
+ free.splice(fromFree, 1);
761
+ free.splice(toFree, 0, mover);
762
+ const next = placeAroundPinned(current, free);
763
+ return { ...layout, order: next.map((d) => d.key) };
764
+ }
765
+ function freeSlotIndexes(ordered) {
766
+ const slots = [];
767
+ ordered.forEach((item, index) => {
768
+ if (!isPinned(item)) slots.push(index);
769
+ });
770
+ return slots;
723
771
  }
724
772
  function moveWidgetBy(definitions, layout, key, offset) {
725
- const current = visibleWidgets(definitions, layout).map(
726
- (d) => d.key
727
- );
728
- const fromIndex = current.indexOf(key);
773
+ const current = visibleWidgets(definitions, layout);
774
+ const fromIndex = current.findIndex((d) => d.key === key);
729
775
  if (fromIndex === -1) return layout;
730
- const toIndex = Math.max(
776
+ const freeSlots = freeSlotIndexes(current);
777
+ const fromFree = freeSlots.indexOf(fromIndex);
778
+ if (fromFree === -1) return layout;
779
+ const toFree = Math.max(
731
780
  0,
732
- Math.min(current.length - 1, fromIndex + Math.trunc(offset))
781
+ Math.min(freeSlots.length - 1, fromFree + Math.trunc(offset))
733
782
  );
734
- return moveWidget(definitions, layout, key, toIndex);
783
+ return moveWidget(definitions, layout, key, freeSlots[toFree]);
735
784
  }
736
785
  function moveWidgetUp(definitions, layout, key) {
737
786
  return moveWidgetBy(definitions, layout, key, -1);
@@ -781,6 +830,23 @@ function pruneLayout(definitions, layout) {
781
830
  };
782
831
  return next.order.length === layout.order.length && next.hidden.length === layout.hidden.length && next.minimized.length === layout.minimized.length ? layout : next;
783
832
  }
833
+ function enforceLocks(definitions, layout, options = {}) {
834
+ if (options.overrideLocks === true) return layout;
835
+ const noMove = /* @__PURE__ */ new Set();
836
+ const noHide = /* @__PURE__ */ new Set();
837
+ const noMinimize = /* @__PURE__ */ new Set();
838
+ for (const definition of definitions) {
839
+ const lock = resolveWidgetLock(definition);
840
+ if (lock.move) noMove.add(definition.key);
841
+ if (lock.hide) noHide.add(definition.key);
842
+ if (lock.minimize) noMinimize.add(definition.key);
843
+ }
844
+ const without = (keys, drop) => keys.some((key) => drop.has(key)) ? keys.filter((key) => !drop.has(key)) : keys;
845
+ const order = without(layout.order, noMove);
846
+ const hidden = without(layout.hidden, noHide);
847
+ const minimized = without(layout.minimized, noMinimize);
848
+ return order === layout.order && hidden === layout.hidden && minimized === layout.minimized ? layout : { ...layout, order, hidden, minimized };
849
+ }
784
850
 
785
851
  // src/core/validate.ts
786
852
  var MAX_REPORTED_PROBLEMS = 10;
@@ -824,6 +890,14 @@ function optionalNumber(record, field, path, problems) {
824
890
  requireNumber(record, field, path, problems);
825
891
  }
826
892
  }
893
+ function optionalSortValue(record, path, problems) {
894
+ const value = record["value"];
895
+ if (value !== void 0 && typeof value !== "string" && !(typeof value === "number" && Number.isFinite(value))) {
896
+ problems.push(
897
+ `${path}.value must be a string or a finite number, got ${describeType2(value)}.`
898
+ );
899
+ }
900
+ }
827
901
  function optionalBoolean(record, field, path, problems) {
828
902
  const value = record[field];
829
903
  if (value !== void 0 && typeof value !== "boolean") {
@@ -927,6 +1001,7 @@ function checkPayloadFields(kind, data, problems) {
927
1001
  }
928
1002
  eachRecord(row, rowPath, problems, (cell, cellPath) => {
929
1003
  requireString(cell, "text", cellPath, problems);
1004
+ optionalSortValue(cell, cellPath, problems);
930
1005
  optionalUrl(
931
1006
  cell,
932
1007
  "href",
@@ -1049,6 +1124,18 @@ function checkTableControlsOption(controls, kind, problems) {
1049
1124
  );
1050
1125
  }
1051
1126
  }
1127
+ function checkLockedOption(locked, problems) {
1128
+ if (locked === void 0 || typeof locked === "boolean") return;
1129
+ if (!isRecord(locked)) {
1130
+ problems.push(
1131
+ `locked must be true, false or an object, got ${describeType2(locked)}.`
1132
+ );
1133
+ return;
1134
+ }
1135
+ optionalBoolean(locked, "move", "locked", problems);
1136
+ optionalBoolean(locked, "hide", "locked", problems);
1137
+ optionalBoolean(locked, "minimize", "locked", problems);
1138
+ }
1052
1139
  function formatProblems(prefix, problems) {
1053
1140
  const shown = problems.slice(0, MAX_REPORTED_PROBLEMS);
1054
1141
  const more = problems.length - shown.length;
@@ -1122,6 +1209,7 @@ function validateWidgetDefinition(value) {
1122
1209
  }
1123
1210
  checkDetailOption(value["detail"], problems);
1124
1211
  checkTableControlsOption(value["tableControls"], value["kind"], problems);
1212
+ checkLockedOption(value["locked"], problems);
1125
1213
  if (value["fill"] !== void 0) {
1126
1214
  requireOneOf(value, "fill", WIDGET_FILLS, "", problems);
1127
1215
  }
@@ -1405,6 +1493,6 @@ function labelStride(count, maxLabels = 6) {
1405
1493
  return Math.max(1, Math.ceil(count / Math.max(1, maxLabels)));
1406
1494
  }
1407
1495
 
1408
- export { DEFAULT_COMPARISON_LABEL, DEFAULT_CURRENCY, DEFAULT_DETAIL_PAGE_SIZE, DEFAULT_EMPTY_TEXT, DETAIL_MODES, EMPTY_LAYOUT, MAX_DETAIL_PAGE_SIZE, MAX_GRAPH_SERIES, MAX_REPORTED_PROBLEMS, MAX_WIDGET_WIDTH, MIN_WIDGET_WIDTH, VALUE_FORMATS, WIDGET_FILLS, WIDGET_KINDS, WIDGET_SIZES, WIDTH_COLUMNS, baseColumnSpan, cacheKeyFor, createWidgetLoader, defaultDetailQuery, defineWidget, deriveDetailData, describeUnknownError, emptyTextFor, emptyWidget, err, failedWidget, fillColumnSpans, fillWidthSpans, fillsHeight, fillsWidth, formatCount, formatPercentChange, formatValue, fromLegacyDefinition, hiddenWidgets, hideWidget, isHidden, isMinimized, isSafeHref, isSafeImageUrl, isWidgetEmptyState, isWidgetKind, isWidgetVisibleTo, isWidgetWidth, itemWidth, kpiDelta, labelStride, loadingWidgets, minimizeWidget, moveWidget, moveWidgetBy, moveWidgetDown, moveWidgetUp, niceDomain, niceStep, ok, parseDetailQuery, parseLayout, percentChange, pruneLayout, queryRows, resolveDetailOptions, resolvePayload, resolveTableControls, resolveWidget, resolveWidgets, restoreWidget, serializeDetailQuery, serializeLayout, shareOf, showWidget, sortDefinitions, tableDetailData, toggleHidden, toggleMinimized, upgradeLegacyWidgetData, usesWidthColumns, validateDetailData, validateWidgetData, validateWidgetDefinition, visibleWidgets, widgetsFor, widthForSize };
1496
+ export { DEFAULT_COMPARISON_LABEL, DEFAULT_CURRENCY, DEFAULT_DETAIL_PAGE_SIZE, DEFAULT_EMPTY_TEXT, DETAIL_MODES, EMPTY_LAYOUT, MAX_DETAIL_PAGE_SIZE, MAX_GRAPH_SERIES, MAX_REPORTED_PROBLEMS, MAX_WIDGET_WIDTH, MIN_WIDGET_WIDTH, VALUE_FORMATS, WIDGET_FILLS, WIDGET_KINDS, WIDGET_SIZES, WIDTH_COLUMNS, baseColumnSpan, cacheKeyFor, createWidgetLoader, defaultDetailQuery, defineWidget, deriveDetailData, describeUnknownError, emptyTextFor, emptyWidget, enforceLocks, err, failedWidget, fillColumnSpans, fillWidthSpans, fillsHeight, fillsWidth, formatCount, formatPercentChange, formatValue, fromLegacyDefinition, hiddenWidgets, hideWidget, isHidden, isMinimized, isSafeHref, isSafeImageUrl, isWidgetEmptyState, isWidgetKind, isWidgetVisibleTo, isWidgetWidth, itemWidth, kpiDelta, labelStride, loadingWidgets, minimizeWidget, moveWidget, moveWidgetBy, moveWidgetDown, moveWidgetUp, niceDomain, niceStep, ok, parseDetailQuery, parseLayout, percentChange, pruneLayout, queryRows, resolveDetailOptions, resolvePayload, resolveTableControls, resolveWidget, resolveWidgetLock, resolveWidgets, restoreWidget, serializeDetailQuery, serializeLayout, shareOf, showWidget, sortDefinitions, tableDetailData, toggleHidden, toggleMinimized, upgradeLegacyWidgetData, usesWidthColumns, validateDetailData, validateWidgetData, validateWidgetDefinition, visibleWidgets, widgetsFor, widthForSize };
1409
1497
  //# sourceMappingURL=core.js.map
1410
1498
  //# sourceMappingURL=core.js.map