@vuu-ui/vuu-utils 0.13.89 → 0.13.91

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.
@@ -12,24 +12,24 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
12
12
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
13
13
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
14
14
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
15
- var _inactiveTimeout, _inactivityTimer, _hidden;
15
+ var _inactiveTimeoutMs, _inactivityTimer, _hidden;
16
16
  const defaultProps = {};
17
17
  class PageVisibilityObserver extends eventEmitter.EventEmitter {
18
18
  constructor({
19
- inactiveTimeout,
19
+ inactiveTimeout = 0,
20
20
  onHidden,
21
21
  onVisibilityChange,
22
22
  onVisible
23
23
  } = defaultProps) {
24
24
  super();
25
- __privateAdd(this, _inactiveTimeout);
25
+ __privateAdd(this, _inactiveTimeoutMs);
26
26
  __privateAdd(this, _inactivityTimer);
27
27
  __privateAdd(this, _hidden);
28
28
  __publicField(this, "visibilityChangeHandler", () => {
29
29
  this.hidden = document.hidden;
30
30
  });
31
31
  __privateSet(this, _hidden, document.hidden);
32
- __privateSet(this, _inactiveTimeout, inactiveTimeout);
32
+ __privateSet(this, _inactiveTimeoutMs, inactiveTimeout * 1e3);
33
33
  if (onHidden) {
34
34
  this.on("hidden", onHidden);
35
35
  }
@@ -52,10 +52,10 @@ class PageVisibilityObserver extends eventEmitter.EventEmitter {
52
52
  __privateSet(this, _hidden, hidden);
53
53
  if (document.hidden) {
54
54
  this.emit("hidden");
55
- if (__privateGet(this, _inactiveTimeout)) {
55
+ if (__privateGet(this, _inactiveTimeoutMs)) {
56
56
  __privateSet(this, _inactivityTimer, setTimeout(() => {
57
57
  this.emit("inactive-timeout");
58
- }, __privateGet(this, _inactiveTimeout)));
58
+ }, __privateGet(this, _inactiveTimeoutMs)));
59
59
  }
60
60
  } else {
61
61
  this.emit("visible");
@@ -68,7 +68,7 @@ class PageVisibilityObserver extends eventEmitter.EventEmitter {
68
68
  }
69
69
  }
70
70
  }
71
- _inactiveTimeout = new WeakMap();
71
+ _inactiveTimeoutMs = new WeakMap();
72
72
  _inactivityTimer = new WeakMap();
73
73
  _hidden = new WeakMap();
74
74
 
@@ -1 +1 @@
1
- {"version":3,"file":"PageVisibilityObserver.js","sources":["../../../../../../packages/vuu-utils/src/PageVisibilityObserver.ts"],"sourcesContent":["import { EventEmitter } from \"./event-emitter\";\n\nexport type PageVisibilityEvents = {\n /**\n * emits when page has been hidden for this period of time\n */\n \"inactive-timeout\": () => void;\n /**\n * emits when page is hidden\n */\n hidden: () => void;\n /**\n * emits when page is made visible\n */\n visible: () => void;\n /**\n * emits when page visibility status changes\n */\n visibilityChange: (hidden: boolean) => void;\n};\n\nexport interface PageVisibilityObserverConstructorProps {\n /**\n * timeout period in seconds.\n */\n inactiveTimeout?: number;\n onHidden?: () => void;\n onVisible?: () => void;\n onVisibilityChange?: () => void;\n}\n\nconst defaultProps: PageVisibilityObserverConstructorProps = {};\n\nexport class PageVisibilityObserver extends EventEmitter<PageVisibilityEvents> {\n #inactiveTimeout?: number;\n #inactivityTimer?: ReturnType<typeof setTimeout>;\n #hidden: boolean;\n\n visibilityChangeHandler = () => {\n this.hidden = document.hidden;\n };\n\n constructor({\n inactiveTimeout,\n onHidden,\n onVisibilityChange,\n onVisible,\n } = defaultProps) {\n super();\n\n this.#hidden = document.hidden;\n this.#inactiveTimeout = inactiveTimeout;\n\n if (onHidden) {\n this.on(\"hidden\", onHidden);\n }\n if (onVisible) {\n this.on(\"visible\", onVisible);\n }\n if (onVisibilityChange) {\n this.on(\"visibilityChange\", onVisibilityChange);\n }\n\n document.addEventListener(\"visibilitychange\", this.visibilityChangeHandler);\n }\n\n clear() {\n document.removeEventListener(\n \"visibilitychange\",\n this.visibilityChangeHandler,\n );\n }\n\n private set hidden(hidden: boolean) {\n if (hidden !== this.#hidden) {\n this.#hidden = hidden;\n if (document.hidden) {\n this.emit(\"hidden\");\n if (this.#inactiveTimeout) {\n this.#inactivityTimer = setTimeout(() => {\n this.emit(\"inactive-timeout\");\n }, this.#inactiveTimeout);\n }\n } else {\n this.emit(\"visible\");\n if (this.#inactivityTimer) {\n clearTimeout(this.#inactivityTimer);\n this.#inactivityTimer = undefined;\n }\n }\n this.emit(\"visibilityChange\", hidden);\n }\n }\n}\n"],"names":["EventEmitter"],"mappings":";;;;;;;;;;;;;;AAAA,IAAA,gBAAA,EAAA,gBAAA,EAAA,OAAA;AA+BA,MAAM,eAAuD,EAAC;AAEvD,MAAM,+BAA+BA,yBAAmC,CAAA;AAAA,EAS7E,WAAY,CAAA;AAAA,IACV,eAAA;AAAA,IACA,QAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,MACE,YAAc,EAAA;AAChB,IAAM,KAAA,EAAA;AAdR,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,yBAAA,EAA0B,MAAM;AAC9B,MAAA,IAAA,CAAK,SAAS,QAAS,CAAA,MAAA;AAAA,KACzB,CAAA;AAUE,IAAA,YAAA,CAAA,IAAA,EAAK,SAAU,QAAS,CAAA,MAAA,CAAA;AACxB,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,eAAA,CAAA;AAExB,IAAA,IAAI,QAAU,EAAA;AACZ,MAAK,IAAA,CAAA,EAAA,CAAG,UAAU,QAAQ,CAAA;AAAA;AAE5B,IAAA,IAAI,SAAW,EAAA;AACb,MAAK,IAAA,CAAA,EAAA,CAAG,WAAW,SAAS,CAAA;AAAA;AAE9B,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAK,IAAA,CAAA,EAAA,CAAG,oBAAoB,kBAAkB,CAAA;AAAA;AAGhD,IAAS,QAAA,CAAA,gBAAA,CAAiB,kBAAoB,EAAA,IAAA,CAAK,uBAAuB,CAAA;AAAA;AAC5E,EAEA,KAAQ,GAAA;AACN,IAAS,QAAA,CAAA,mBAAA;AAAA,MACP,kBAAA;AAAA,MACA,IAAK,CAAA;AAAA,KACP;AAAA;AACF,EAEA,IAAY,OAAO,MAAiB,EAAA;AAClC,IAAI,IAAA,MAAA,KAAW,mBAAK,OAAS,CAAA,EAAA;AAC3B,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA;AACf,MAAA,IAAI,SAAS,MAAQ,EAAA;AACnB,QAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,QAAA,IAAI,mBAAK,gBAAkB,CAAA,EAAA;AACzB,UAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,EAAmB,WAAW,MAAM;AACvC,YAAA,IAAA,CAAK,KAAK,kBAAkB,CAAA;AAAA,WAC9B,EAAG,mBAAK,gBAAgB,CAAA,CAAA,CAAA;AAAA;AAC1B,OACK,MAAA;AACL,QAAA,IAAA,CAAK,KAAK,SAAS,CAAA;AACnB,QAAA,IAAI,mBAAK,gBAAkB,CAAA,EAAA;AACzB,UAAA,YAAA,CAAa,mBAAK,gBAAgB,CAAA,CAAA;AAClC,UAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,KAAA,CAAA,CAAA;AAAA;AAC1B;AAEF,MAAK,IAAA,CAAA,IAAA,CAAK,oBAAoB,MAAM,CAAA;AAAA;AACtC;AAEJ;AA3DE,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
1
+ {"version":3,"file":"PageVisibilityObserver.js","sources":["../../../../../../packages/vuu-utils/src/PageVisibilityObserver.ts"],"sourcesContent":["import { EventEmitter } from \"./event-emitter\";\n\nexport type PageVisibilityEvents = {\n /**\n * emits when page has been hidden for this period of time\n */\n \"inactive-timeout\": () => void;\n /**\n * emits when page is hidden\n */\n hidden: () => void;\n /**\n * emits when page is made visible\n */\n visible: () => void;\n /**\n * emits when page visibility status changes\n */\n visibilityChange: (hidden: boolean) => void;\n};\n\nexport interface PageVisibilityObserverConstructorProps {\n /**\n * timeout period in seconds. Defaults to zero which will never timeout\n */\n inactiveTimeout?: number;\n onHidden?: () => void;\n onVisible?: () => void;\n onVisibilityChange?: () => void;\n}\n\nconst defaultProps: PageVisibilityObserverConstructorProps = {};\n\nexport class PageVisibilityObserver extends EventEmitter<PageVisibilityEvents> {\n #inactiveTimeoutMs?: number;\n #inactivityTimer?: ReturnType<typeof setTimeout>;\n #hidden: boolean;\n\n visibilityChangeHandler = () => {\n this.hidden = document.hidden;\n };\n\n constructor({\n inactiveTimeout = 0,\n onHidden,\n onVisibilityChange,\n onVisible,\n } = defaultProps) {\n super();\n\n this.#hidden = document.hidden;\n this.#inactiveTimeoutMs = inactiveTimeout * 1000;\n\n if (onHidden) {\n this.on(\"hidden\", onHidden);\n }\n if (onVisible) {\n this.on(\"visible\", onVisible);\n }\n if (onVisibilityChange) {\n this.on(\"visibilityChange\", onVisibilityChange);\n }\n\n document.addEventListener(\"visibilitychange\", this.visibilityChangeHandler);\n }\n\n clear() {\n document.removeEventListener(\n \"visibilitychange\",\n this.visibilityChangeHandler,\n );\n }\n\n private set hidden(hidden: boolean) {\n if (hidden !== this.#hidden) {\n this.#hidden = hidden;\n if (document.hidden) {\n this.emit(\"hidden\");\n if (this.#inactiveTimeoutMs) {\n this.#inactivityTimer = setTimeout(() => {\n this.emit(\"inactive-timeout\");\n }, this.#inactiveTimeoutMs);\n }\n } else {\n this.emit(\"visible\");\n if (this.#inactivityTimer) {\n clearTimeout(this.#inactivityTimer);\n this.#inactivityTimer = undefined;\n }\n }\n this.emit(\"visibilityChange\", hidden);\n }\n }\n}\n"],"names":["EventEmitter"],"mappings":";;;;;;;;;;;;;;AAAA,IAAA,kBAAA,EAAA,gBAAA,EAAA,OAAA;AA+BA,MAAM,eAAuD,EAAC;AAEvD,MAAM,+BAA+BA,yBAAmC,CAAA;AAAA,EAS7E,WAAY,CAAA;AAAA,IACV,eAAkB,GAAA,CAAA;AAAA,IAClB,QAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,MACE,YAAc,EAAA;AAChB,IAAM,KAAA,EAAA;AAdR,IAAA,YAAA,CAAA,IAAA,EAAA,kBAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,yBAAA,EAA0B,MAAM;AAC9B,MAAA,IAAA,CAAK,SAAS,QAAS,CAAA,MAAA;AAAA,KACzB,CAAA;AAUE,IAAA,YAAA,CAAA,IAAA,EAAK,SAAU,QAAS,CAAA,MAAA,CAAA;AACxB,IAAA,YAAA,CAAA,IAAA,EAAK,oBAAqB,eAAkB,GAAA,GAAA,CAAA;AAE5C,IAAA,IAAI,QAAU,EAAA;AACZ,MAAK,IAAA,CAAA,EAAA,CAAG,UAAU,QAAQ,CAAA;AAAA;AAE5B,IAAA,IAAI,SAAW,EAAA;AACb,MAAK,IAAA,CAAA,EAAA,CAAG,WAAW,SAAS,CAAA;AAAA;AAE9B,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAK,IAAA,CAAA,EAAA,CAAG,oBAAoB,kBAAkB,CAAA;AAAA;AAGhD,IAAS,QAAA,CAAA,gBAAA,CAAiB,kBAAoB,EAAA,IAAA,CAAK,uBAAuB,CAAA;AAAA;AAC5E,EAEA,KAAQ,GAAA;AACN,IAAS,QAAA,CAAA,mBAAA;AAAA,MACP,kBAAA;AAAA,MACA,IAAK,CAAA;AAAA,KACP;AAAA;AACF,EAEA,IAAY,OAAO,MAAiB,EAAA;AAClC,IAAI,IAAA,MAAA,KAAW,mBAAK,OAAS,CAAA,EAAA;AAC3B,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA;AACf,MAAA,IAAI,SAAS,MAAQ,EAAA;AACnB,QAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,QAAA,IAAI,mBAAK,kBAAoB,CAAA,EAAA;AAC3B,UAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,EAAmB,WAAW,MAAM;AACvC,YAAA,IAAA,CAAK,KAAK,kBAAkB,CAAA;AAAA,WAC9B,EAAG,mBAAK,kBAAkB,CAAA,CAAA,CAAA;AAAA;AAC5B,OACK,MAAA;AACL,QAAA,IAAA,CAAK,KAAK,SAAS,CAAA;AACnB,QAAA,IAAI,mBAAK,gBAAkB,CAAA,EAAA;AACzB,UAAA,YAAA,CAAa,mBAAK,gBAAgB,CAAA,CAAA;AAClC,UAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,KAAA,CAAA,CAAA;AAAA;AAC1B;AAEF,MAAK,IAAA,CAAA,IAAA,CAAK,oBAAoB,MAAM,CAAA;AAAA;AACtC;AAEJ;AA3DE,kBAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
@@ -29,6 +29,7 @@ const numericFormatter = ({
29
29
  const {
30
30
  alignOnDecimals = false,
31
31
  decimals,
32
+ roundingRule,
32
33
  useLocaleString,
33
34
  zeroPad = false
34
35
  } = type.formatting ?? DEFAULT_NUMERIC_FORMAT;
@@ -43,7 +44,8 @@ const numericFormatter = ({
43
44
  decimals,
44
45
  zeroPad,
45
46
  alignOnDecimals,
46
- useLocaleString
47
+ useLocaleString,
48
+ roundingRule
47
49
  );
48
50
  };
49
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"formatting-utils.js","sources":["../../../../../../packages/vuu-utils/src/formatting-utils.ts"],"sourcesContent":["import { DataValueDescriptor } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n ColumnTypeFormatting,\n ColumnTypeValueMap,\n ValueFormatter,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n isDateTimeDataValue,\n isMappedValueTypeRenderer,\n isTypeDescriptor,\n} from \"./column-utils\";\nimport { dateTimePattern, formatDate } from \"./date\";\nimport { roundDecimal } from \"./round-decimal\";\n\nexport type ValueFormatters = {\n [key: string]: ValueFormatter;\n};\n\nconst DEFAULT_NUMERIC_FORMAT: ColumnTypeFormatting = {};\n\nexport const defaultValueFormatter = (value: unknown) =>\n value == null ? \"\" : typeof value === \"string\" ? value : value.toString();\n\nconst dateFormatter = (column: DataValueDescriptor) => {\n const pattern = dateTimePattern(column.type);\n const formatter = formatDate(pattern);\n\n return (value: unknown) => {\n if (typeof value === \"number\" && value !== 0) {\n return formatter(new Date(value));\n } else {\n return \"\";\n }\n };\n};\n\nexport const numericFormatter = ({\n align = \"right\",\n type,\n}: Partial<ColumnDescriptor>) => {\n if (type === undefined || typeof type === \"string\") {\n return defaultValueFormatter;\n } else {\n const {\n alignOnDecimals = false,\n decimals,\n useLocaleString,\n zeroPad = false,\n } = type.formatting ?? DEFAULT_NUMERIC_FORMAT;\n return (value: unknown) => {\n if (\n typeof value === \"string\" &&\n (value.startsWith(\"Σ\") || value.startsWith(\"[\"))\n ) {\n return value;\n }\n const number =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\"\n ? parseFloat(value)\n : undefined;\n return roundDecimal(\n number,\n align,\n decimals,\n zeroPad,\n alignOnDecimals,\n useLocaleString,\n );\n };\n }\n};\n\nconst mapFormatter = (map: ColumnTypeValueMap) => {\n return (value: unknown) => {\n return map[value as string] ?? \"\";\n };\n};\n\nexport const getValueFormatter = (\n column: ColumnDescriptor,\n serverDataType = column.serverDataType,\n): ValueFormatter => {\n if (isDateTimeDataValue(column)) {\n return dateFormatter(column);\n }\n\n const { type } = column;\n if (isTypeDescriptor(type) && isMappedValueTypeRenderer(type?.renderer)) {\n return mapFormatter(type.renderer.map);\n } else if (\n serverDataType === \"double\" ||\n (isTypeDescriptor(type) && type.name === \"number\")\n ) {\n return numericFormatter(column);\n } else if (serverDataType === \"string\" || serverDataType === \"char\") {\n return (value: unknown) => value as string;\n }\n return defaultValueFormatter;\n};\n\n/**\n * Lowercases a string and returns as Lowercase typescript type\n *\n * @param str the input string\n * @returns str converted to Lowercase\n */\nexport const lowerCase = (str: string) =>\n str.toLowerCase() as Lowercase<string>;\n"],"names":["dateTimePattern","formatter","formatDate","roundDecimal","isDateTimeDataValue","isTypeDescriptor","isMappedValueTypeRenderer"],"mappings":"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"}
1
+ {"version":3,"file":"formatting-utils.js","sources":["../../../../../../packages/vuu-utils/src/formatting-utils.ts"],"sourcesContent":["import { DataValueDescriptor } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n ColumnTypeFormatting,\n ColumnTypeValueMap,\n ValueFormatter,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n isDateTimeDataValue,\n isMappedValueTypeRenderer,\n isTypeDescriptor,\n} from \"./column-utils\";\nimport { dateTimePattern, formatDate } from \"./date\";\nimport { roundDecimal } from \"./round-decimal\";\n\nexport type ValueFormatters = {\n [key: string]: ValueFormatter;\n};\n\nconst DEFAULT_NUMERIC_FORMAT: ColumnTypeFormatting = {};\n\nexport const defaultValueFormatter = (value: unknown) =>\n value == null ? \"\" : typeof value === \"string\" ? value : value.toString();\n\nconst dateFormatter = (column: DataValueDescriptor) => {\n const pattern = dateTimePattern(column.type);\n const formatter = formatDate(pattern);\n\n return (value: unknown) => {\n if (typeof value === \"number\" && value !== 0) {\n return formatter(new Date(value));\n } else {\n return \"\";\n }\n };\n};\n\nexport const numericFormatter = ({\n align = \"right\",\n type,\n}: Partial<ColumnDescriptor>) => {\n if (type === undefined || typeof type === \"string\") {\n return defaultValueFormatter;\n } else {\n const {\n alignOnDecimals = false,\n decimals,\n roundingRule,\n useLocaleString,\n zeroPad = false,\n } = type.formatting ?? DEFAULT_NUMERIC_FORMAT;\n return (value: unknown) => {\n if (\n typeof value === \"string\" &&\n (value.startsWith(\"Σ\") || value.startsWith(\"[\"))\n ) {\n return value;\n }\n const number =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\"\n ? parseFloat(value)\n : undefined;\n return roundDecimal(\n number,\n align,\n decimals,\n zeroPad,\n alignOnDecimals,\n useLocaleString,\n roundingRule,\n );\n };\n }\n};\n\nconst mapFormatter = (map: ColumnTypeValueMap) => {\n return (value: unknown) => {\n return map[value as string] ?? \"\";\n };\n};\n\nexport const getValueFormatter = (\n column: ColumnDescriptor,\n serverDataType = column.serverDataType,\n): ValueFormatter => {\n if (isDateTimeDataValue(column)) {\n return dateFormatter(column);\n }\n\n const { type } = column;\n if (isTypeDescriptor(type) && isMappedValueTypeRenderer(type?.renderer)) {\n return mapFormatter(type.renderer.map);\n } else if (\n serverDataType === \"double\" ||\n (isTypeDescriptor(type) && type.name === \"number\")\n ) {\n return numericFormatter(column);\n } else if (serverDataType === \"string\" || serverDataType === \"char\") {\n return (value: unknown) => value as string;\n }\n return defaultValueFormatter;\n};\n\n/**\n * Lowercases a string and returns as Lowercase typescript type\n *\n * @param str the input string\n * @returns str converted to Lowercase\n */\nexport const lowerCase = (str: string) =>\n str.toLowerCase() as Lowercase<string>;\n"],"names":["dateTimePattern","formatter","formatDate","roundDecimal","isDateTimeDataValue","isTypeDescriptor","isMappedValueTypeRenderer"],"mappings":"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"}
@@ -340,6 +340,7 @@ exports.Tab = keyboardUtils.Tab;
340
340
  exports.isArrowKey = keyboardUtils.isArrowKey;
341
341
  exports.KeySet = keyset.KeySet;
342
342
  exports.getSelectedOption = listUtils.getSelectedOption;
343
+ exports.clearLocalEntity = localStorageUtils.clearLocalEntity;
343
344
  exports.getAllLocalEntity = localStorageUtils.getAllLocalEntity;
344
345
  exports.getLocalEntity = localStorageUtils.getLocalEntity;
345
346
  exports.saveLocalEntity = localStorageUtils.saveLocalEntity;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,9 +1,18 @@
1
1
  'use strict';
2
2
 
3
- const getLocalEntity = (url) => {
4
- const data = localStorage.getItem(url);
3
+ const getLocalEntity = (key) => {
4
+ const data = localStorage.getItem(key);
5
5
  return data ? JSON.parse(data) : void 0;
6
6
  };
7
+ const clearLocalEntity = (key) => {
8
+ const doomedItem = localStorage.getItem(key);
9
+ if (doomedItem) {
10
+ localStorage.removeItem(key);
11
+ return true;
12
+ } else {
13
+ return false;
14
+ }
15
+ };
7
16
  const getAllLocalEntity = (url) => Object.entries(localStorage).filter(([key]) => key.includes(url)).map(([, value]) => JSON.parse(value));
8
17
  const saveLocalEntity = (url, data) => {
9
18
  try {
@@ -14,6 +23,7 @@ const saveLocalEntity = (url, data) => {
14
23
  }
15
24
  };
16
25
 
26
+ exports.clearLocalEntity = clearLocalEntity;
17
27
  exports.getAllLocalEntity = getAllLocalEntity;
18
28
  exports.getLocalEntity = getLocalEntity;
19
29
  exports.saveLocalEntity = saveLocalEntity;
@@ -1 +1 @@
1
- {"version":3,"file":"local-storage-utils.js","sources":["../../../../../../packages/vuu-utils/src/local-storage-utils.ts"],"sourcesContent":["export const getLocalEntity = <T>(url: string): T | undefined => {\n const data = localStorage.getItem(url);\n return data ? JSON.parse(data) : undefined;\n};\n\nexport const getAllLocalEntity = <T>(url: string): T[] =>\n Object.entries(localStorage)\n .filter(([key]) => key.includes(url))\n .map(([, value]) => JSON.parse(value) as T);\n\nexport const saveLocalEntity = <T>(url: string, data: T): T | undefined => {\n try {\n localStorage.setItem(url, JSON.stringify(data));\n return data;\n } catch {\n return undefined;\n }\n};\n"],"names":[],"mappings":";;AAAa,MAAA,cAAA,GAAiB,CAAI,GAA+B,KAAA;AAC/D,EAAM,MAAA,IAAA,GAAO,YAAa,CAAA,OAAA,CAAQ,GAAG,CAAA;AACrC,EAAA,OAAO,IAAO,GAAA,IAAA,CAAK,KAAM,CAAA,IAAI,CAAI,GAAA,KAAA,CAAA;AACnC;AAEa,MAAA,iBAAA,GAAoB,CAAI,GAAA,KACnC,MAAO,CAAA,OAAA,CAAQ,YAAY,CAAA,CACxB,MAAO,CAAA,CAAC,CAAC,GAAG,CAAM,KAAA,GAAA,CAAI,SAAS,GAAG,CAAC,CACnC,CAAA,GAAA,CAAI,CAAC,GAAG,KAAK,CAAM,KAAA,IAAA,CAAK,KAAM,CAAA,KAAK,CAAM;AAEjC,MAAA,eAAA,GAAkB,CAAI,GAAA,EAAa,IAA2B,KAAA;AACzE,EAAI,IAAA;AACF,IAAA,YAAA,CAAa,OAAQ,CAAA,GAAA,EAAK,IAAK,CAAA,SAAA,CAAU,IAAI,CAAC,CAAA;AAC9C,IAAO,OAAA,IAAA;AAAA,GACD,CAAA,MAAA;AACN,IAAO,OAAA,KAAA,CAAA;AAAA;AAEX;;;;;;"}
1
+ {"version":3,"file":"local-storage-utils.js","sources":["../../../../../../packages/vuu-utils/src/local-storage-utils.ts"],"sourcesContent":["export const getLocalEntity = <T>(key: string): T | undefined => {\n const data = localStorage.getItem(key);\n return data ? JSON.parse(data) : undefined;\n};\n\nexport const clearLocalEntity = (key: string) => {\n const doomedItem = localStorage.getItem(key);\n if (doomedItem) {\n localStorage.removeItem(key);\n return true;\n } else {\n return false;\n }\n};\n\nexport const getAllLocalEntity = <T>(url: string): T[] =>\n Object.entries(localStorage)\n .filter(([key]) => key.includes(url))\n .map(([, value]) => JSON.parse(value) as T);\n\nexport const saveLocalEntity = <T>(url: string, data: T): T | undefined => {\n try {\n localStorage.setItem(url, JSON.stringify(data));\n return data;\n } catch {\n return undefined;\n }\n};\n"],"names":[],"mappings":";;AAAa,MAAA,cAAA,GAAiB,CAAI,GAA+B,KAAA;AAC/D,EAAM,MAAA,IAAA,GAAO,YAAa,CAAA,OAAA,CAAQ,GAAG,CAAA;AACrC,EAAA,OAAO,IAAO,GAAA,IAAA,CAAK,KAAM,CAAA,IAAI,CAAI,GAAA,KAAA,CAAA;AACnC;AAEa,MAAA,gBAAA,GAAmB,CAAC,GAAgB,KAAA;AAC/C,EAAM,MAAA,UAAA,GAAa,YAAa,CAAA,OAAA,CAAQ,GAAG,CAAA;AAC3C,EAAA,IAAI,UAAY,EAAA;AACd,IAAA,YAAA,CAAa,WAAW,GAAG,CAAA;AAC3B,IAAO,OAAA,IAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,KAAA;AAAA;AAEX;AAEa,MAAA,iBAAA,GAAoB,CAAI,GAAA,KACnC,MAAO,CAAA,OAAA,CAAQ,YAAY,CAAA,CACxB,MAAO,CAAA,CAAC,CAAC,GAAG,CAAM,KAAA,GAAA,CAAI,SAAS,GAAG,CAAC,CACnC,CAAA,GAAA,CAAI,CAAC,GAAG,KAAK,CAAM,KAAA,IAAA,CAAK,KAAM,CAAA,KAAK,CAAM;AAEjC,MAAA,eAAA,GAAkB,CAAI,GAAA,EAAa,IAA2B,KAAA;AACzE,EAAI,IAAA;AACF,IAAA,YAAA,CAAa,OAAQ,CAAA,GAAA,EAAK,IAAK,CAAA,SAAA,CAAU,IAAI,CAAC,CAAA;AAC9C,IAAO,OAAA,IAAA;AAAA,GACD,CAAA,MAAA;AACN,IAAO,OAAA,KAAA,CAAA;AAAA;AAEX;;;;;;;"}
@@ -53,21 +53,25 @@ function pad(n, dp, Pad) {
53
53
  }
54
54
  return n;
55
55
  }
56
- function roundDecimal(value, align = Align.Right, decimals = 4, zeroPad, alignOnDecimals, useLocaleString = true) {
56
+ function roundDecimal(value, align = Align.Right, decimals = 4, zeroPad, alignOnDecimals, useLocaleString = true, roundingRule = "round") {
57
57
  if (value === void 0 || typeof value !== "number" || isNaN(value)) {
58
58
  return "";
59
59
  }
60
60
  let integral, fraction, Pad;
61
61
  const [part1, part2 = ""] = value.toString().split(".");
62
62
  const actualDecimals = part2.length;
63
- integral = useLocaleString ? parseFloat(part1).toLocaleString() : parseFloat(part1).toString();
63
+ integral = part1 === "-0" ? "-0" : useLocaleString ? parseFloat(part1).toLocaleString() : parseFloat(part1).toString();
64
64
  if (align === Align.Left && alignOnDecimals) {
65
65
  integral = padLeft(integral);
66
66
  }
67
67
  if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {
68
68
  fraction = part2;
69
69
  } else if (actualDecimals > decimals) {
70
- fraction = parseFloat("0." + part2).toFixed(decimals).slice(2);
70
+ if (roundingRule === "round") {
71
+ fraction = parseFloat("0." + part2).toFixed(decimals).slice(2);
72
+ } else {
73
+ fraction = part2.slice(0, decimals);
74
+ }
71
75
  } else {
72
76
  if (Pad = zeroPad ? Zero : alignOnDecimals && align !== Align.Left ? Space : null) {
73
77
  if (actualDecimals === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"round-decimal.js","sources":["../../../../../../packages/vuu-utils/src/round-decimal.ts"],"sourcesContent":["const PUNCTUATION_STR = String.fromCharCode(8200);\nconst DIGIT_STR = String.fromCharCode(8199);\nconst DECIMALS_AUTO = -1;\n\ntype PadMap = {\n DIGIT: string;\n TWO_DIGITS: string;\n THREE_DIGITS: string;\n FULL_PADDING: [null, string, string, string, string];\n};\n\nconst Space: PadMap = {\n DIGIT: DIGIT_STR,\n TWO_DIGITS: DIGIT_STR + DIGIT_STR,\n THREE_DIGITS: DIGIT_STR + DIGIT_STR + DIGIT_STR,\n FULL_PADDING: [\n null,\n PUNCTUATION_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n ],\n};\n\nconst Zero: PadMap = {\n DIGIT: \"0\",\n TWO_DIGITS: \"00\",\n THREE_DIGITS: \"000\",\n FULL_PADDING: [null, \"0\", \"00\", \"000\", \"0000\"],\n};\n\nfunction padLeft(value: string, maxLength = 6) {\n return (LEADING_FILL + value).slice(-maxLength);\n}\n\nconst LEADING_FILL =\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR;\n\nconst Align = {\n Right: \"right\",\n Center: \"center\",\n Left: \"left\",\n};\n\nfunction pad(n: string, dp: number, Pad: PadMap): string {\n let len = n.length;\n const diff = dp - len;\n\n if (diff > 0) {\n if (diff === 1) {\n n = n + Pad.DIGIT;\n } else if (diff === 2) {\n n = n + Pad.TWO_DIGITS;\n } else if (diff === 3) {\n n = n + Pad.THREE_DIGITS;\n }\n } else {\n if (diff < 0) {\n n = n.slice(0, dp);\n len = dp;\n }\n\n if (Pad === Space && n.charAt(len - 1) === \"0\") {\n n = n.replace(/0+$/, \"\");\n return pad(n, dp, Pad);\n }\n }\n return n;\n}\n\nexport function roundDecimal(\n value?: number,\n align = Align.Right,\n decimals = 4,\n zeroPad?: boolean,\n alignOnDecimals?: boolean,\n useLocaleString = true,\n) {\n if (value === undefined || typeof value !== \"number\" || isNaN(value)) {\n return \"\";\n }\n let integral, fraction, Pad;\n\n const [part1, part2 = \"\"] = value.toString().split(\".\");\n const actualDecimals = part2.length;\n\n integral = useLocaleString\n ? parseFloat(part1).toLocaleString()\n : parseFloat(part1).toString();\n\n if (align === Align.Left && alignOnDecimals) {\n integral = padLeft(integral);\n }\n\n if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {\n fraction = part2;\n } else if (actualDecimals > decimals) {\n fraction = parseFloat(\"0.\" + part2)\n .toFixed(decimals)\n .slice(2);\n } else {\n /* eslint-disable no-cond-assign */\n if (\n (Pad = zeroPad\n ? Zero\n : alignOnDecimals && align !== Align.Left\n ? Space\n : null)\n ) {\n if (actualDecimals === 0) {\n fraction = Pad.FULL_PADDING[decimals];\n } else {\n fraction = pad(part2, decimals, Pad);\n }\n } else {\n fraction = part2;\n }\n }\n\n return integral + (fraction ? \".\" + fraction : \"\");\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"round-decimal.js","sources":["../../../../../../packages/vuu-utils/src/round-decimal.ts"],"sourcesContent":["import { RoundingRule } from \"@vuu-ui/vuu-table-types\";\n\nconst PUNCTUATION_STR = String.fromCharCode(8200);\nconst DIGIT_STR = String.fromCharCode(8199);\nconst DECIMALS_AUTO = -1;\n\ntype PadMap = {\n DIGIT: string;\n TWO_DIGITS: string;\n THREE_DIGITS: string;\n FULL_PADDING: [null, string, string, string, string];\n};\n\nconst Space: PadMap = {\n DIGIT: DIGIT_STR,\n TWO_DIGITS: DIGIT_STR + DIGIT_STR,\n THREE_DIGITS: DIGIT_STR + DIGIT_STR + DIGIT_STR,\n FULL_PADDING: [\n null,\n PUNCTUATION_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n ],\n};\n\nconst Zero: PadMap = {\n DIGIT: \"0\",\n TWO_DIGITS: \"00\",\n THREE_DIGITS: \"000\",\n FULL_PADDING: [null, \"0\", \"00\", \"000\", \"0000\"],\n};\n\nfunction padLeft(value: string, maxLength = 6) {\n return (LEADING_FILL + value).slice(-maxLength);\n}\n\nconst LEADING_FILL =\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR;\n\nconst Align = {\n Right: \"right\",\n Center: \"center\",\n Left: \"left\",\n};\n\nfunction pad(n: string, dp: number, Pad: PadMap): string {\n let len = n.length;\n const diff = dp - len;\n\n if (diff > 0) {\n if (diff === 1) {\n n = n + Pad.DIGIT;\n } else if (diff === 2) {\n n = n + Pad.TWO_DIGITS;\n } else if (diff === 3) {\n n = n + Pad.THREE_DIGITS;\n }\n } else {\n if (diff < 0) {\n n = n.slice(0, dp);\n len = dp;\n }\n\n if (Pad === Space && n.charAt(len - 1) === \"0\") {\n n = n.replace(/0+$/, \"\");\n return pad(n, dp, Pad);\n }\n }\n return n;\n}\n\nexport function roundDecimal(\n value?: number,\n align = Align.Right,\n decimals = 4,\n zeroPad?: boolean,\n alignOnDecimals?: boolean,\n useLocaleString = true,\n roundingRule: RoundingRule = \"round\",\n) {\n if (value === undefined || typeof value !== \"number\" || isNaN(value)) {\n return \"\";\n }\n let integral, fraction, Pad;\n\n const [part1, part2 = \"\"] = value.toString().split(\".\");\n const actualDecimals = part2.length;\n\n integral =\n part1 === \"-0\"\n ? \"-0\"\n : useLocaleString\n ? parseFloat(part1).toLocaleString()\n : parseFloat(part1).toString();\n\n if (align === Align.Left && alignOnDecimals) {\n integral = padLeft(integral);\n }\n\n if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {\n fraction = part2;\n } else if (actualDecimals > decimals) {\n if (roundingRule === \"round\") {\n fraction = parseFloat(\"0.\" + part2)\n .toFixed(decimals)\n .slice(2);\n } else {\n fraction = part2.slice(0, decimals);\n }\n } else {\n /* eslint-disable no-cond-assign */\n if (\n (Pad = zeroPad\n ? Zero\n : alignOnDecimals && align !== Align.Left\n ? Space\n : null)\n ) {\n if (actualDecimals === 0) {\n fraction = Pad.FULL_PADDING[decimals];\n } else {\n fraction = pad(part2, decimals, Pad);\n }\n } else {\n fraction = part2;\n }\n }\n\n return integral + (fraction ? \".\" + fraction : \"\");\n}\n"],"names":[],"mappings":"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"}
@@ -10,24 +10,24 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
10
10
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
11
11
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
12
12
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
13
- var _inactiveTimeout, _inactivityTimer, _hidden;
13
+ var _inactiveTimeoutMs, _inactivityTimer, _hidden;
14
14
  const defaultProps = {};
15
15
  class PageVisibilityObserver extends EventEmitter {
16
16
  constructor({
17
- inactiveTimeout,
17
+ inactiveTimeout = 0,
18
18
  onHidden,
19
19
  onVisibilityChange,
20
20
  onVisible
21
21
  } = defaultProps) {
22
22
  super();
23
- __privateAdd(this, _inactiveTimeout);
23
+ __privateAdd(this, _inactiveTimeoutMs);
24
24
  __privateAdd(this, _inactivityTimer);
25
25
  __privateAdd(this, _hidden);
26
26
  __publicField(this, "visibilityChangeHandler", () => {
27
27
  this.hidden = document.hidden;
28
28
  });
29
29
  __privateSet(this, _hidden, document.hidden);
30
- __privateSet(this, _inactiveTimeout, inactiveTimeout);
30
+ __privateSet(this, _inactiveTimeoutMs, inactiveTimeout * 1e3);
31
31
  if (onHidden) {
32
32
  this.on("hidden", onHidden);
33
33
  }
@@ -50,10 +50,10 @@ class PageVisibilityObserver extends EventEmitter {
50
50
  __privateSet(this, _hidden, hidden);
51
51
  if (document.hidden) {
52
52
  this.emit("hidden");
53
- if (__privateGet(this, _inactiveTimeout)) {
53
+ if (__privateGet(this, _inactiveTimeoutMs)) {
54
54
  __privateSet(this, _inactivityTimer, setTimeout(() => {
55
55
  this.emit("inactive-timeout");
56
- }, __privateGet(this, _inactiveTimeout)));
56
+ }, __privateGet(this, _inactiveTimeoutMs)));
57
57
  }
58
58
  } else {
59
59
  this.emit("visible");
@@ -66,7 +66,7 @@ class PageVisibilityObserver extends EventEmitter {
66
66
  }
67
67
  }
68
68
  }
69
- _inactiveTimeout = new WeakMap();
69
+ _inactiveTimeoutMs = new WeakMap();
70
70
  _inactivityTimer = new WeakMap();
71
71
  _hidden = new WeakMap();
72
72
 
@@ -1 +1 @@
1
- {"version":3,"file":"PageVisibilityObserver.js","sources":["../../../../../../packages/vuu-utils/src/PageVisibilityObserver.ts"],"sourcesContent":["import { EventEmitter } from \"./event-emitter\";\n\nexport type PageVisibilityEvents = {\n /**\n * emits when page has been hidden for this period of time\n */\n \"inactive-timeout\": () => void;\n /**\n * emits when page is hidden\n */\n hidden: () => void;\n /**\n * emits when page is made visible\n */\n visible: () => void;\n /**\n * emits when page visibility status changes\n */\n visibilityChange: (hidden: boolean) => void;\n};\n\nexport interface PageVisibilityObserverConstructorProps {\n /**\n * timeout period in seconds.\n */\n inactiveTimeout?: number;\n onHidden?: () => void;\n onVisible?: () => void;\n onVisibilityChange?: () => void;\n}\n\nconst defaultProps: PageVisibilityObserverConstructorProps = {};\n\nexport class PageVisibilityObserver extends EventEmitter<PageVisibilityEvents> {\n #inactiveTimeout?: number;\n #inactivityTimer?: ReturnType<typeof setTimeout>;\n #hidden: boolean;\n\n visibilityChangeHandler = () => {\n this.hidden = document.hidden;\n };\n\n constructor({\n inactiveTimeout,\n onHidden,\n onVisibilityChange,\n onVisible,\n } = defaultProps) {\n super();\n\n this.#hidden = document.hidden;\n this.#inactiveTimeout = inactiveTimeout;\n\n if (onHidden) {\n this.on(\"hidden\", onHidden);\n }\n if (onVisible) {\n this.on(\"visible\", onVisible);\n }\n if (onVisibilityChange) {\n this.on(\"visibilityChange\", onVisibilityChange);\n }\n\n document.addEventListener(\"visibilitychange\", this.visibilityChangeHandler);\n }\n\n clear() {\n document.removeEventListener(\n \"visibilitychange\",\n this.visibilityChangeHandler,\n );\n }\n\n private set hidden(hidden: boolean) {\n if (hidden !== this.#hidden) {\n this.#hidden = hidden;\n if (document.hidden) {\n this.emit(\"hidden\");\n if (this.#inactiveTimeout) {\n this.#inactivityTimer = setTimeout(() => {\n this.emit(\"inactive-timeout\");\n }, this.#inactiveTimeout);\n }\n } else {\n this.emit(\"visible\");\n if (this.#inactivityTimer) {\n clearTimeout(this.#inactivityTimer);\n this.#inactivityTimer = undefined;\n }\n }\n this.emit(\"visibilityChange\", hidden);\n }\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAAA,IAAA,gBAAA,EAAA,gBAAA,EAAA,OAAA;AA+BA,MAAM,eAAuD,EAAC;AAEvD,MAAM,+BAA+B,YAAmC,CAAA;AAAA,EAS7E,WAAY,CAAA;AAAA,IACV,eAAA;AAAA,IACA,QAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,MACE,YAAc,EAAA;AAChB,IAAM,KAAA,EAAA;AAdR,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,yBAAA,EAA0B,MAAM;AAC9B,MAAA,IAAA,CAAK,SAAS,QAAS,CAAA,MAAA;AAAA,KACzB,CAAA;AAUE,IAAA,YAAA,CAAA,IAAA,EAAK,SAAU,QAAS,CAAA,MAAA,CAAA;AACxB,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,eAAA,CAAA;AAExB,IAAA,IAAI,QAAU,EAAA;AACZ,MAAK,IAAA,CAAA,EAAA,CAAG,UAAU,QAAQ,CAAA;AAAA;AAE5B,IAAA,IAAI,SAAW,EAAA;AACb,MAAK,IAAA,CAAA,EAAA,CAAG,WAAW,SAAS,CAAA;AAAA;AAE9B,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAK,IAAA,CAAA,EAAA,CAAG,oBAAoB,kBAAkB,CAAA;AAAA;AAGhD,IAAS,QAAA,CAAA,gBAAA,CAAiB,kBAAoB,EAAA,IAAA,CAAK,uBAAuB,CAAA;AAAA;AAC5E,EAEA,KAAQ,GAAA;AACN,IAAS,QAAA,CAAA,mBAAA;AAAA,MACP,kBAAA;AAAA,MACA,IAAK,CAAA;AAAA,KACP;AAAA;AACF,EAEA,IAAY,OAAO,MAAiB,EAAA;AAClC,IAAI,IAAA,MAAA,KAAW,mBAAK,OAAS,CAAA,EAAA;AAC3B,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA;AACf,MAAA,IAAI,SAAS,MAAQ,EAAA;AACnB,QAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,QAAA,IAAI,mBAAK,gBAAkB,CAAA,EAAA;AACzB,UAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,EAAmB,WAAW,MAAM;AACvC,YAAA,IAAA,CAAK,KAAK,kBAAkB,CAAA;AAAA,WAC9B,EAAG,mBAAK,gBAAgB,CAAA,CAAA,CAAA;AAAA;AAC1B,OACK,MAAA;AACL,QAAA,IAAA,CAAK,KAAK,SAAS,CAAA;AACnB,QAAA,IAAI,mBAAK,gBAAkB,CAAA,EAAA;AACzB,UAAA,YAAA,CAAa,mBAAK,gBAAgB,CAAA,CAAA;AAClC,UAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,KAAA,CAAA,CAAA;AAAA;AAC1B;AAEF,MAAK,IAAA,CAAA,IAAA,CAAK,oBAAoB,MAAM,CAAA;AAAA;AACtC;AAEJ;AA3DE,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
1
+ {"version":3,"file":"PageVisibilityObserver.js","sources":["../../../../../../packages/vuu-utils/src/PageVisibilityObserver.ts"],"sourcesContent":["import { EventEmitter } from \"./event-emitter\";\n\nexport type PageVisibilityEvents = {\n /**\n * emits when page has been hidden for this period of time\n */\n \"inactive-timeout\": () => void;\n /**\n * emits when page is hidden\n */\n hidden: () => void;\n /**\n * emits when page is made visible\n */\n visible: () => void;\n /**\n * emits when page visibility status changes\n */\n visibilityChange: (hidden: boolean) => void;\n};\n\nexport interface PageVisibilityObserverConstructorProps {\n /**\n * timeout period in seconds. Defaults to zero which will never timeout\n */\n inactiveTimeout?: number;\n onHidden?: () => void;\n onVisible?: () => void;\n onVisibilityChange?: () => void;\n}\n\nconst defaultProps: PageVisibilityObserverConstructorProps = {};\n\nexport class PageVisibilityObserver extends EventEmitter<PageVisibilityEvents> {\n #inactiveTimeoutMs?: number;\n #inactivityTimer?: ReturnType<typeof setTimeout>;\n #hidden: boolean;\n\n visibilityChangeHandler = () => {\n this.hidden = document.hidden;\n };\n\n constructor({\n inactiveTimeout = 0,\n onHidden,\n onVisibilityChange,\n onVisible,\n } = defaultProps) {\n super();\n\n this.#hidden = document.hidden;\n this.#inactiveTimeoutMs = inactiveTimeout * 1000;\n\n if (onHidden) {\n this.on(\"hidden\", onHidden);\n }\n if (onVisible) {\n this.on(\"visible\", onVisible);\n }\n if (onVisibilityChange) {\n this.on(\"visibilityChange\", onVisibilityChange);\n }\n\n document.addEventListener(\"visibilitychange\", this.visibilityChangeHandler);\n }\n\n clear() {\n document.removeEventListener(\n \"visibilitychange\",\n this.visibilityChangeHandler,\n );\n }\n\n private set hidden(hidden: boolean) {\n if (hidden !== this.#hidden) {\n this.#hidden = hidden;\n if (document.hidden) {\n this.emit(\"hidden\");\n if (this.#inactiveTimeoutMs) {\n this.#inactivityTimer = setTimeout(() => {\n this.emit(\"inactive-timeout\");\n }, this.#inactiveTimeoutMs);\n }\n } else {\n this.emit(\"visible\");\n if (this.#inactivityTimer) {\n clearTimeout(this.#inactivityTimer);\n this.#inactivityTimer = undefined;\n }\n }\n this.emit(\"visibilityChange\", hidden);\n }\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAAA,IAAA,kBAAA,EAAA,gBAAA,EAAA,OAAA;AA+BA,MAAM,eAAuD,EAAC;AAEvD,MAAM,+BAA+B,YAAmC,CAAA;AAAA,EAS7E,WAAY,CAAA;AAAA,IACV,eAAkB,GAAA,CAAA;AAAA,IAClB,QAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,MACE,YAAc,EAAA;AAChB,IAAM,KAAA,EAAA;AAdR,IAAA,YAAA,CAAA,IAAA,EAAA,kBAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,yBAAA,EAA0B,MAAM;AAC9B,MAAA,IAAA,CAAK,SAAS,QAAS,CAAA,MAAA;AAAA,KACzB,CAAA;AAUE,IAAA,YAAA,CAAA,IAAA,EAAK,SAAU,QAAS,CAAA,MAAA,CAAA;AACxB,IAAA,YAAA,CAAA,IAAA,EAAK,oBAAqB,eAAkB,GAAA,GAAA,CAAA;AAE5C,IAAA,IAAI,QAAU,EAAA;AACZ,MAAK,IAAA,CAAA,EAAA,CAAG,UAAU,QAAQ,CAAA;AAAA;AAE5B,IAAA,IAAI,SAAW,EAAA;AACb,MAAK,IAAA,CAAA,EAAA,CAAG,WAAW,SAAS,CAAA;AAAA;AAE9B,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAK,IAAA,CAAA,EAAA,CAAG,oBAAoB,kBAAkB,CAAA;AAAA;AAGhD,IAAS,QAAA,CAAA,gBAAA,CAAiB,kBAAoB,EAAA,IAAA,CAAK,uBAAuB,CAAA;AAAA;AAC5E,EAEA,KAAQ,GAAA;AACN,IAAS,QAAA,CAAA,mBAAA;AAAA,MACP,kBAAA;AAAA,MACA,IAAK,CAAA;AAAA,KACP;AAAA;AACF,EAEA,IAAY,OAAO,MAAiB,EAAA;AAClC,IAAI,IAAA,MAAA,KAAW,mBAAK,OAAS,CAAA,EAAA;AAC3B,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA;AACf,MAAA,IAAI,SAAS,MAAQ,EAAA;AACnB,QAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,QAAA,IAAI,mBAAK,kBAAoB,CAAA,EAAA;AAC3B,UAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,EAAmB,WAAW,MAAM;AACvC,YAAA,IAAA,CAAK,KAAK,kBAAkB,CAAA;AAAA,WAC9B,EAAG,mBAAK,kBAAkB,CAAA,CAAA,CAAA;AAAA;AAC5B,OACK,MAAA;AACL,QAAA,IAAA,CAAK,KAAK,SAAS,CAAA;AACnB,QAAA,IAAI,mBAAK,gBAAkB,CAAA,EAAA;AACzB,UAAA,YAAA,CAAa,mBAAK,gBAAgB,CAAA,CAAA;AAClC,UAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,KAAA,CAAA,CAAA;AAAA;AAC1B;AAEF,MAAK,IAAA,CAAA,IAAA,CAAK,oBAAoB,MAAM,CAAA;AAAA;AACtC;AAEJ;AA3DE,kBAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
@@ -27,6 +27,7 @@ const numericFormatter = ({
27
27
  const {
28
28
  alignOnDecimals = false,
29
29
  decimals,
30
+ roundingRule,
30
31
  useLocaleString,
31
32
  zeroPad = false
32
33
  } = type.formatting ?? DEFAULT_NUMERIC_FORMAT;
@@ -41,7 +42,8 @@ const numericFormatter = ({
41
42
  decimals,
42
43
  zeroPad,
43
44
  alignOnDecimals,
44
- useLocaleString
45
+ useLocaleString,
46
+ roundingRule
45
47
  );
46
48
  };
47
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"formatting-utils.js","sources":["../../../../../../packages/vuu-utils/src/formatting-utils.ts"],"sourcesContent":["import { DataValueDescriptor } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n ColumnTypeFormatting,\n ColumnTypeValueMap,\n ValueFormatter,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n isDateTimeDataValue,\n isMappedValueTypeRenderer,\n isTypeDescriptor,\n} from \"./column-utils\";\nimport { dateTimePattern, formatDate } from \"./date\";\nimport { roundDecimal } from \"./round-decimal\";\n\nexport type ValueFormatters = {\n [key: string]: ValueFormatter;\n};\n\nconst DEFAULT_NUMERIC_FORMAT: ColumnTypeFormatting = {};\n\nexport const defaultValueFormatter = (value: unknown) =>\n value == null ? \"\" : typeof value === \"string\" ? value : value.toString();\n\nconst dateFormatter = (column: DataValueDescriptor) => {\n const pattern = dateTimePattern(column.type);\n const formatter = formatDate(pattern);\n\n return (value: unknown) => {\n if (typeof value === \"number\" && value !== 0) {\n return formatter(new Date(value));\n } else {\n return \"\";\n }\n };\n};\n\nexport const numericFormatter = ({\n align = \"right\",\n type,\n}: Partial<ColumnDescriptor>) => {\n if (type === undefined || typeof type === \"string\") {\n return defaultValueFormatter;\n } else {\n const {\n alignOnDecimals = false,\n decimals,\n useLocaleString,\n zeroPad = false,\n } = type.formatting ?? DEFAULT_NUMERIC_FORMAT;\n return (value: unknown) => {\n if (\n typeof value === \"string\" &&\n (value.startsWith(\"Σ\") || value.startsWith(\"[\"))\n ) {\n return value;\n }\n const number =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\"\n ? parseFloat(value)\n : undefined;\n return roundDecimal(\n number,\n align,\n decimals,\n zeroPad,\n alignOnDecimals,\n useLocaleString,\n );\n };\n }\n};\n\nconst mapFormatter = (map: ColumnTypeValueMap) => {\n return (value: unknown) => {\n return map[value as string] ?? \"\";\n };\n};\n\nexport const getValueFormatter = (\n column: ColumnDescriptor,\n serverDataType = column.serverDataType,\n): ValueFormatter => {\n if (isDateTimeDataValue(column)) {\n return dateFormatter(column);\n }\n\n const { type } = column;\n if (isTypeDescriptor(type) && isMappedValueTypeRenderer(type?.renderer)) {\n return mapFormatter(type.renderer.map);\n } else if (\n serverDataType === \"double\" ||\n (isTypeDescriptor(type) && type.name === \"number\")\n ) {\n return numericFormatter(column);\n } else if (serverDataType === \"string\" || serverDataType === \"char\") {\n return (value: unknown) => value as string;\n }\n return defaultValueFormatter;\n};\n\n/**\n * Lowercases a string and returns as Lowercase typescript type\n *\n * @param str the input string\n * @returns str converted to Lowercase\n */\nexport const lowerCase = (str: string) =>\n str.toLowerCase() as Lowercase<string>;\n"],"names":[],"mappings":";;;;;;AAmBA,MAAM,yBAA+C,EAAC;AAEzC,MAAA,qBAAA,GAAwB,CAAC,KAAA,KACpC,KAAS,IAAA,IAAA,GAAO,EAAK,GAAA,OAAO,KAAU,KAAA,QAAA,GAAW,KAAQ,GAAA,KAAA,CAAM,QAAS;AAE1E,MAAM,aAAA,GAAgB,CAAC,MAAgC,KAAA;AACrD,EAAM,MAAA,OAAA,GAAU,eAAgB,CAAA,MAAA,CAAO,IAAI,CAAA;AAC3C,EAAM,MAAA,SAAA,GAAY,WAAW,OAAO,CAAA;AAEpC,EAAA,OAAO,CAAC,KAAmB,KAAA;AACzB,IAAA,IAAI,OAAO,KAAA,KAAU,QAAY,IAAA,KAAA,KAAU,CAAG,EAAA;AAC5C,MAAA,OAAO,SAAU,CAAA,IAAI,IAAK,CAAA,KAAK,CAAC,CAAA;AAAA,KAC3B,MAAA;AACL,MAAO,OAAA,EAAA;AAAA;AACT,GACF;AACF,CAAA;AAEO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,KAAQ,GAAA,OAAA;AAAA,EACR;AACF,CAAiC,KAAA;AAC/B,EAAA,IAAI,IAAS,KAAA,KAAA,CAAA,IAAa,OAAO,IAAA,KAAS,QAAU,EAAA;AAClD,IAAO,OAAA,qBAAA;AAAA,GACF,MAAA;AACL,IAAM,MAAA;AAAA,MACJ,eAAkB,GAAA,KAAA;AAAA,MAClB,QAAA;AAAA,MACA,eAAA;AAAA,MACA,OAAU,GAAA;AAAA,KACZ,GAAI,KAAK,UAAc,IAAA,sBAAA;AACvB,IAAA,OAAO,CAAC,KAAmB,KAAA;AACzB,MACE,IAAA,OAAO,KAAU,KAAA,QAAA,KAChB,KAAM,CAAA,UAAA,CAAW,QAAG,CAAK,IAAA,KAAA,CAAM,UAAW,CAAA,GAAG,CAC9C,CAAA,EAAA;AACA,QAAO,OAAA,KAAA;AAAA;AAET,MAAM,MAAA,MAAA,GACJ,OAAO,KAAA,KAAU,QACb,GAAA,KAAA,GACA,OAAO,KAAU,KAAA,QAAA,GACf,UAAW,CAAA,KAAK,CAChB,GAAA,KAAA,CAAA;AACR,MAAO,OAAA,YAAA;AAAA,QACL,MAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACF;AAAA,KACF;AAAA;AAEJ;AAEA,MAAM,YAAA,GAAe,CAAC,GAA4B,KAAA;AAChD,EAAA,OAAO,CAAC,KAAmB,KAAA;AACzB,IAAO,OAAA,GAAA,CAAI,KAAe,CAAK,IAAA,EAAA;AAAA,GACjC;AACF,CAAA;AAEO,MAAM,iBAAoB,GAAA,CAC/B,MACA,EAAA,cAAA,GAAiB,OAAO,cACL,KAAA;AACnB,EAAI,IAAA,mBAAA,CAAoB,MAAM,CAAG,EAAA;AAC/B,IAAA,OAAO,cAAc,MAAM,CAAA;AAAA;AAG7B,EAAM,MAAA,EAAE,MAAS,GAAA,MAAA;AACjB,EAAA,IAAI,iBAAiB,IAAI,CAAA,IAAK,yBAA0B,CAAA,IAAA,EAAM,QAAQ,CAAG,EAAA;AACvE,IAAO,OAAA,YAAA,CAAa,IAAK,CAAA,QAAA,CAAS,GAAG,CAAA;AAAA,GACvC,MAAA,IACE,mBAAmB,QAClB,IAAA,gBAAA,CAAiB,IAAI,CAAK,IAAA,IAAA,CAAK,SAAS,QACzC,EAAA;AACA,IAAA,OAAO,iBAAiB,MAAM,CAAA;AAAA,GACrB,MAAA,IAAA,cAAA,KAAmB,QAAY,IAAA,cAAA,KAAmB,MAAQ,EAAA;AACnE,IAAA,OAAO,CAAC,KAAmB,KAAA,KAAA;AAAA;AAE7B,EAAO,OAAA,qBAAA;AACT;AAQO,MAAM,SAAY,GAAA,CAAC,GACxB,KAAA,GAAA,CAAI,WAAY;;;;"}
1
+ {"version":3,"file":"formatting-utils.js","sources":["../../../../../../packages/vuu-utils/src/formatting-utils.ts"],"sourcesContent":["import { DataValueDescriptor } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n ColumnTypeFormatting,\n ColumnTypeValueMap,\n ValueFormatter,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n isDateTimeDataValue,\n isMappedValueTypeRenderer,\n isTypeDescriptor,\n} from \"./column-utils\";\nimport { dateTimePattern, formatDate } from \"./date\";\nimport { roundDecimal } from \"./round-decimal\";\n\nexport type ValueFormatters = {\n [key: string]: ValueFormatter;\n};\n\nconst DEFAULT_NUMERIC_FORMAT: ColumnTypeFormatting = {};\n\nexport const defaultValueFormatter = (value: unknown) =>\n value == null ? \"\" : typeof value === \"string\" ? value : value.toString();\n\nconst dateFormatter = (column: DataValueDescriptor) => {\n const pattern = dateTimePattern(column.type);\n const formatter = formatDate(pattern);\n\n return (value: unknown) => {\n if (typeof value === \"number\" && value !== 0) {\n return formatter(new Date(value));\n } else {\n return \"\";\n }\n };\n};\n\nexport const numericFormatter = ({\n align = \"right\",\n type,\n}: Partial<ColumnDescriptor>) => {\n if (type === undefined || typeof type === \"string\") {\n return defaultValueFormatter;\n } else {\n const {\n alignOnDecimals = false,\n decimals,\n roundingRule,\n useLocaleString,\n zeroPad = false,\n } = type.formatting ?? DEFAULT_NUMERIC_FORMAT;\n return (value: unknown) => {\n if (\n typeof value === \"string\" &&\n (value.startsWith(\"Σ\") || value.startsWith(\"[\"))\n ) {\n return value;\n }\n const number =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\"\n ? parseFloat(value)\n : undefined;\n return roundDecimal(\n number,\n align,\n decimals,\n zeroPad,\n alignOnDecimals,\n useLocaleString,\n roundingRule,\n );\n };\n }\n};\n\nconst mapFormatter = (map: ColumnTypeValueMap) => {\n return (value: unknown) => {\n return map[value as string] ?? \"\";\n };\n};\n\nexport const getValueFormatter = (\n column: ColumnDescriptor,\n serverDataType = column.serverDataType,\n): ValueFormatter => {\n if (isDateTimeDataValue(column)) {\n return dateFormatter(column);\n }\n\n const { type } = column;\n if (isTypeDescriptor(type) && isMappedValueTypeRenderer(type?.renderer)) {\n return mapFormatter(type.renderer.map);\n } else if (\n serverDataType === \"double\" ||\n (isTypeDescriptor(type) && type.name === \"number\")\n ) {\n return numericFormatter(column);\n } else if (serverDataType === \"string\" || serverDataType === \"char\") {\n return (value: unknown) => value as string;\n }\n return defaultValueFormatter;\n};\n\n/**\n * Lowercases a string and returns as Lowercase typescript type\n *\n * @param str the input string\n * @returns str converted to Lowercase\n */\nexport const lowerCase = (str: string) =>\n str.toLowerCase() as Lowercase<string>;\n"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ export { jsonToDataSourceRows } from './json-utils.js';
37
37
  export { ArrowDown, ArrowLeft, ArrowRight, ArrowUp, End, Enter, Escape, Home, PageDown, PageUp, Space, Tab, isArrowKey } from './keyboard-utils.js';
38
38
  export { KeySet } from './keyset.js';
39
39
  export { getSelectedOption } from './list-utils.js';
40
- export { getAllLocalEntity, getLocalEntity, saveLocalEntity } from './local-storage-utils.js';
40
+ export { clearLocalEntity, getAllLocalEntity, getLocalEntity, saveLocalEntity } from './local-storage-utils.js';
41
41
  export { getLoggingConfigForWorker, logUnhandledMessage, logger } from './logging-utils.js';
42
42
  export { isModule } from './module-utils.js';
43
43
  export { uuid } from './nanoid/index.js';
@@ -1,7 +1,16 @@
1
- const getLocalEntity = (url) => {
2
- const data = localStorage.getItem(url);
1
+ const getLocalEntity = (key) => {
2
+ const data = localStorage.getItem(key);
3
3
  return data ? JSON.parse(data) : void 0;
4
4
  };
5
+ const clearLocalEntity = (key) => {
6
+ const doomedItem = localStorage.getItem(key);
7
+ if (doomedItem) {
8
+ localStorage.removeItem(key);
9
+ return true;
10
+ } else {
11
+ return false;
12
+ }
13
+ };
5
14
  const getAllLocalEntity = (url) => Object.entries(localStorage).filter(([key]) => key.includes(url)).map(([, value]) => JSON.parse(value));
6
15
  const saveLocalEntity = (url, data) => {
7
16
  try {
@@ -12,5 +21,5 @@ const saveLocalEntity = (url, data) => {
12
21
  }
13
22
  };
14
23
 
15
- export { getAllLocalEntity, getLocalEntity, saveLocalEntity };
24
+ export { clearLocalEntity, getAllLocalEntity, getLocalEntity, saveLocalEntity };
16
25
  //# sourceMappingURL=local-storage-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-storage-utils.js","sources":["../../../../../../packages/vuu-utils/src/local-storage-utils.ts"],"sourcesContent":["export const getLocalEntity = <T>(url: string): T | undefined => {\n const data = localStorage.getItem(url);\n return data ? JSON.parse(data) : undefined;\n};\n\nexport const getAllLocalEntity = <T>(url: string): T[] =>\n Object.entries(localStorage)\n .filter(([key]) => key.includes(url))\n .map(([, value]) => JSON.parse(value) as T);\n\nexport const saveLocalEntity = <T>(url: string, data: T): T | undefined => {\n try {\n localStorage.setItem(url, JSON.stringify(data));\n return data;\n } catch {\n return undefined;\n }\n};\n"],"names":[],"mappings":"AAAa,MAAA,cAAA,GAAiB,CAAI,GAA+B,KAAA;AAC/D,EAAM,MAAA,IAAA,GAAO,YAAa,CAAA,OAAA,CAAQ,GAAG,CAAA;AACrC,EAAA,OAAO,IAAO,GAAA,IAAA,CAAK,KAAM,CAAA,IAAI,CAAI,GAAA,KAAA,CAAA;AACnC;AAEa,MAAA,iBAAA,GAAoB,CAAI,GAAA,KACnC,MAAO,CAAA,OAAA,CAAQ,YAAY,CAAA,CACxB,MAAO,CAAA,CAAC,CAAC,GAAG,CAAM,KAAA,GAAA,CAAI,SAAS,GAAG,CAAC,CACnC,CAAA,GAAA,CAAI,CAAC,GAAG,KAAK,CAAM,KAAA,IAAA,CAAK,KAAM,CAAA,KAAK,CAAM;AAEjC,MAAA,eAAA,GAAkB,CAAI,GAAA,EAAa,IAA2B,KAAA;AACzE,EAAI,IAAA;AACF,IAAA,YAAA,CAAa,OAAQ,CAAA,GAAA,EAAK,IAAK,CAAA,SAAA,CAAU,IAAI,CAAC,CAAA;AAC9C,IAAO,OAAA,IAAA;AAAA,GACD,CAAA,MAAA;AACN,IAAO,OAAA,KAAA,CAAA;AAAA;AAEX;;;;"}
1
+ {"version":3,"file":"local-storage-utils.js","sources":["../../../../../../packages/vuu-utils/src/local-storage-utils.ts"],"sourcesContent":["export const getLocalEntity = <T>(key: string): T | undefined => {\n const data = localStorage.getItem(key);\n return data ? JSON.parse(data) : undefined;\n};\n\nexport const clearLocalEntity = (key: string) => {\n const doomedItem = localStorage.getItem(key);\n if (doomedItem) {\n localStorage.removeItem(key);\n return true;\n } else {\n return false;\n }\n};\n\nexport const getAllLocalEntity = <T>(url: string): T[] =>\n Object.entries(localStorage)\n .filter(([key]) => key.includes(url))\n .map(([, value]) => JSON.parse(value) as T);\n\nexport const saveLocalEntity = <T>(url: string, data: T): T | undefined => {\n try {\n localStorage.setItem(url, JSON.stringify(data));\n return data;\n } catch {\n return undefined;\n }\n};\n"],"names":[],"mappings":"AAAa,MAAA,cAAA,GAAiB,CAAI,GAA+B,KAAA;AAC/D,EAAM,MAAA,IAAA,GAAO,YAAa,CAAA,OAAA,CAAQ,GAAG,CAAA;AACrC,EAAA,OAAO,IAAO,GAAA,IAAA,CAAK,KAAM,CAAA,IAAI,CAAI,GAAA,KAAA,CAAA;AACnC;AAEa,MAAA,gBAAA,GAAmB,CAAC,GAAgB,KAAA;AAC/C,EAAM,MAAA,UAAA,GAAa,YAAa,CAAA,OAAA,CAAQ,GAAG,CAAA;AAC3C,EAAA,IAAI,UAAY,EAAA;AACd,IAAA,YAAA,CAAa,WAAW,GAAG,CAAA;AAC3B,IAAO,OAAA,IAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,KAAA;AAAA;AAEX;AAEa,MAAA,iBAAA,GAAoB,CAAI,GAAA,KACnC,MAAO,CAAA,OAAA,CAAQ,YAAY,CAAA,CACxB,MAAO,CAAA,CAAC,CAAC,GAAG,CAAM,KAAA,GAAA,CAAI,SAAS,GAAG,CAAC,CACnC,CAAA,GAAA,CAAI,CAAC,GAAG,KAAK,CAAM,KAAA,IAAA,CAAK,KAAM,CAAA,KAAK,CAAM;AAEjC,MAAA,eAAA,GAAkB,CAAI,GAAA,EAAa,IAA2B,KAAA;AACzE,EAAI,IAAA;AACF,IAAA,YAAA,CAAa,OAAQ,CAAA,GAAA,EAAK,IAAK,CAAA,SAAA,CAAU,IAAI,CAAC,CAAA;AAC9C,IAAO,OAAA,IAAA;AAAA,GACD,CAAA,MAAA;AACN,IAAO,OAAA,KAAA,CAAA;AAAA;AAEX;;;;"}
@@ -51,21 +51,25 @@ function pad(n, dp, Pad) {
51
51
  }
52
52
  return n;
53
53
  }
54
- function roundDecimal(value, align = Align.Right, decimals = 4, zeroPad, alignOnDecimals, useLocaleString = true) {
54
+ function roundDecimal(value, align = Align.Right, decimals = 4, zeroPad, alignOnDecimals, useLocaleString = true, roundingRule = "round") {
55
55
  if (value === void 0 || typeof value !== "number" || isNaN(value)) {
56
56
  return "";
57
57
  }
58
58
  let integral, fraction, Pad;
59
59
  const [part1, part2 = ""] = value.toString().split(".");
60
60
  const actualDecimals = part2.length;
61
- integral = useLocaleString ? parseFloat(part1).toLocaleString() : parseFloat(part1).toString();
61
+ integral = part1 === "-0" ? "-0" : useLocaleString ? parseFloat(part1).toLocaleString() : parseFloat(part1).toString();
62
62
  if (align === Align.Left && alignOnDecimals) {
63
63
  integral = padLeft(integral);
64
64
  }
65
65
  if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {
66
66
  fraction = part2;
67
67
  } else if (actualDecimals > decimals) {
68
- fraction = parseFloat("0." + part2).toFixed(decimals).slice(2);
68
+ if (roundingRule === "round") {
69
+ fraction = parseFloat("0." + part2).toFixed(decimals).slice(2);
70
+ } else {
71
+ fraction = part2.slice(0, decimals);
72
+ }
69
73
  } else {
70
74
  if (Pad = zeroPad ? Zero : alignOnDecimals && align !== Align.Left ? Space : null) {
71
75
  if (actualDecimals === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"round-decimal.js","sources":["../../../../../../packages/vuu-utils/src/round-decimal.ts"],"sourcesContent":["const PUNCTUATION_STR = String.fromCharCode(8200);\nconst DIGIT_STR = String.fromCharCode(8199);\nconst DECIMALS_AUTO = -1;\n\ntype PadMap = {\n DIGIT: string;\n TWO_DIGITS: string;\n THREE_DIGITS: string;\n FULL_PADDING: [null, string, string, string, string];\n};\n\nconst Space: PadMap = {\n DIGIT: DIGIT_STR,\n TWO_DIGITS: DIGIT_STR + DIGIT_STR,\n THREE_DIGITS: DIGIT_STR + DIGIT_STR + DIGIT_STR,\n FULL_PADDING: [\n null,\n PUNCTUATION_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n ],\n};\n\nconst Zero: PadMap = {\n DIGIT: \"0\",\n TWO_DIGITS: \"00\",\n THREE_DIGITS: \"000\",\n FULL_PADDING: [null, \"0\", \"00\", \"000\", \"0000\"],\n};\n\nfunction padLeft(value: string, maxLength = 6) {\n return (LEADING_FILL + value).slice(-maxLength);\n}\n\nconst LEADING_FILL =\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR;\n\nconst Align = {\n Right: \"right\",\n Center: \"center\",\n Left: \"left\",\n};\n\nfunction pad(n: string, dp: number, Pad: PadMap): string {\n let len = n.length;\n const diff = dp - len;\n\n if (diff > 0) {\n if (diff === 1) {\n n = n + Pad.DIGIT;\n } else if (diff === 2) {\n n = n + Pad.TWO_DIGITS;\n } else if (diff === 3) {\n n = n + Pad.THREE_DIGITS;\n }\n } else {\n if (diff < 0) {\n n = n.slice(0, dp);\n len = dp;\n }\n\n if (Pad === Space && n.charAt(len - 1) === \"0\") {\n n = n.replace(/0+$/, \"\");\n return pad(n, dp, Pad);\n }\n }\n return n;\n}\n\nexport function roundDecimal(\n value?: number,\n align = Align.Right,\n decimals = 4,\n zeroPad?: boolean,\n alignOnDecimals?: boolean,\n useLocaleString = true,\n) {\n if (value === undefined || typeof value !== \"number\" || isNaN(value)) {\n return \"\";\n }\n let integral, fraction, Pad;\n\n const [part1, part2 = \"\"] = value.toString().split(\".\");\n const actualDecimals = part2.length;\n\n integral = useLocaleString\n ? parseFloat(part1).toLocaleString()\n : parseFloat(part1).toString();\n\n if (align === Align.Left && alignOnDecimals) {\n integral = padLeft(integral);\n }\n\n if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {\n fraction = part2;\n } else if (actualDecimals > decimals) {\n fraction = parseFloat(\"0.\" + part2)\n .toFixed(decimals)\n .slice(2);\n } else {\n /* eslint-disable no-cond-assign */\n if (\n (Pad = zeroPad\n ? Zero\n : alignOnDecimals && align !== Align.Left\n ? Space\n : null)\n ) {\n if (actualDecimals === 0) {\n fraction = Pad.FULL_PADDING[decimals];\n } else {\n fraction = pad(part2, decimals, Pad);\n }\n } else {\n fraction = part2;\n }\n }\n\n return integral + (fraction ? \".\" + fraction : \"\");\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"round-decimal.js","sources":["../../../../../../packages/vuu-utils/src/round-decimal.ts"],"sourcesContent":["import { RoundingRule } from \"@vuu-ui/vuu-table-types\";\n\nconst PUNCTUATION_STR = String.fromCharCode(8200);\nconst DIGIT_STR = String.fromCharCode(8199);\nconst DECIMALS_AUTO = -1;\n\ntype PadMap = {\n DIGIT: string;\n TWO_DIGITS: string;\n THREE_DIGITS: string;\n FULL_PADDING: [null, string, string, string, string];\n};\n\nconst Space: PadMap = {\n DIGIT: DIGIT_STR,\n TWO_DIGITS: DIGIT_STR + DIGIT_STR,\n THREE_DIGITS: DIGIT_STR + DIGIT_STR + DIGIT_STR,\n FULL_PADDING: [\n null,\n PUNCTUATION_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n ],\n};\n\nconst Zero: PadMap = {\n DIGIT: \"0\",\n TWO_DIGITS: \"00\",\n THREE_DIGITS: \"000\",\n FULL_PADDING: [null, \"0\", \"00\", \"000\", \"0000\"],\n};\n\nfunction padLeft(value: string, maxLength = 6) {\n return (LEADING_FILL + value).slice(-maxLength);\n}\n\nconst LEADING_FILL =\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR;\n\nconst Align = {\n Right: \"right\",\n Center: \"center\",\n Left: \"left\",\n};\n\nfunction pad(n: string, dp: number, Pad: PadMap): string {\n let len = n.length;\n const diff = dp - len;\n\n if (diff > 0) {\n if (diff === 1) {\n n = n + Pad.DIGIT;\n } else if (diff === 2) {\n n = n + Pad.TWO_DIGITS;\n } else if (diff === 3) {\n n = n + Pad.THREE_DIGITS;\n }\n } else {\n if (diff < 0) {\n n = n.slice(0, dp);\n len = dp;\n }\n\n if (Pad === Space && n.charAt(len - 1) === \"0\") {\n n = n.replace(/0+$/, \"\");\n return pad(n, dp, Pad);\n }\n }\n return n;\n}\n\nexport function roundDecimal(\n value?: number,\n align = Align.Right,\n decimals = 4,\n zeroPad?: boolean,\n alignOnDecimals?: boolean,\n useLocaleString = true,\n roundingRule: RoundingRule = \"round\",\n) {\n if (value === undefined || typeof value !== \"number\" || isNaN(value)) {\n return \"\";\n }\n let integral, fraction, Pad;\n\n const [part1, part2 = \"\"] = value.toString().split(\".\");\n const actualDecimals = part2.length;\n\n integral =\n part1 === \"-0\"\n ? \"-0\"\n : useLocaleString\n ? parseFloat(part1).toLocaleString()\n : parseFloat(part1).toString();\n\n if (align === Align.Left && alignOnDecimals) {\n integral = padLeft(integral);\n }\n\n if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {\n fraction = part2;\n } else if (actualDecimals > decimals) {\n if (roundingRule === \"round\") {\n fraction = parseFloat(\"0.\" + part2)\n .toFixed(decimals)\n .slice(2);\n } else {\n fraction = part2.slice(0, decimals);\n }\n } else {\n /* eslint-disable no-cond-assign */\n if (\n (Pad = zeroPad\n ? Zero\n : alignOnDecimals && align !== Align.Left\n ? Space\n : null)\n ) {\n if (actualDecimals === 0) {\n fraction = Pad.FULL_PADDING[decimals];\n } else {\n fraction = pad(part2, decimals, Pad);\n }\n } else {\n fraction = part2;\n }\n }\n\n return integral + (fraction ? \".\" + fraction : \"\");\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
- "version": "0.13.89",
2
+ "version": "0.13.91",
3
3
  "author": "heswell",
4
4
  "license": "Apache-2.0",
5
5
  "types": "types/index.d.ts",
6
6
  "devDependencies": {
7
- "@vuu-ui/vuu-data-types": "0.13.89",
8
- "@vuu-ui/vuu-table-types": "0.13.89",
9
- "@vuu-ui/vuu-filter-types": "0.13.89",
10
- "@vuu-ui/vuu-protocol-types": "0.13.89"
7
+ "@vuu-ui/vuu-data-types": "0.13.91",
8
+ "@vuu-ui/vuu-table-types": "0.13.91",
9
+ "@vuu-ui/vuu-filter-types": "0.13.91",
10
+ "@vuu-ui/vuu-protocol-types": "0.13.91"
11
11
  },
12
12
  "peerDependencies": {
13
13
  "@internationalized/date": "^3.0.0",
14
- "@vuu-ui/vuu-filter-parser": "0.13.89",
14
+ "@vuu-ui/vuu-filter-parser": "0.13.91",
15
15
  "clsx": "^2.0.0",
16
- "react": "^19.2.1",
17
- "react-dom": "^19.2.1"
16
+ "react": "^19.2.3",
17
+ "react-dom": "^19.2.3"
18
18
  },
19
19
  "sideEffects": false,
20
20
  "files": [
@@ -19,7 +19,7 @@ export type PageVisibilityEvents = {
19
19
  };
20
20
  export interface PageVisibilityObserverConstructorProps {
21
21
  /**
22
- * timeout period in seconds.
22
+ * timeout period in seconds. Defaults to zero which will never timeout
23
23
  */
24
24
  inactiveTimeout?: number;
25
25
  onHidden?: () => void;
@@ -1,3 +1,4 @@
1
- export declare const getLocalEntity: <T>(url: string) => T | undefined;
1
+ export declare const getLocalEntity: <T>(key: string) => T | undefined;
2
+ export declare const clearLocalEntity: (key: string) => boolean;
2
3
  export declare const getAllLocalEntity: <T>(url: string) => T[];
3
4
  export declare const saveLocalEntity: <T>(url: string, data: T) => T | undefined;
@@ -1 +1,2 @@
1
- export declare function roundDecimal(value?: number, align?: string, decimals?: number, zeroPad?: boolean, alignOnDecimals?: boolean, useLocaleString?: boolean): string;
1
+ import { RoundingRule } from "@vuu-ui/vuu-table-types";
2
+ export declare function roundDecimal(value?: number, align?: string, decimals?: number, zeroPad?: boolean, alignOnDecimals?: boolean, useLocaleString?: boolean, roundingRule?: RoundingRule): string;