@vuu-ui/vuu-utils 0.8.35 → 0.8.37

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 (192) hide show
  1. package/README.md +0 -0
  2. package/cjs/DataWindow.js +71 -0
  3. package/cjs/DataWindow.js.map +1 -0
  4. package/cjs/ThemeProvider.js +85 -0
  5. package/cjs/ThemeProvider.js.map +1 -0
  6. package/cjs/array-utils.js +87 -0
  7. package/cjs/array-utils.js.map +1 -0
  8. package/cjs/box-utils.js +10 -0
  9. package/cjs/box-utils.js.map +1 -0
  10. package/cjs/column-utils.js +810 -0
  11. package/cjs/column-utils.js.map +1 -0
  12. package/cjs/common-types.js +15 -0
  13. package/cjs/common-types.js.map +1 -0
  14. package/cjs/component-registry.js +111 -0
  15. package/cjs/component-registry.js.map +1 -0
  16. package/cjs/cookie-utils.js +10 -0
  17. package/cjs/cookie-utils.js.map +1 -0
  18. package/cjs/data-utils.js +58 -0
  19. package/cjs/data-utils.js.map +1 -0
  20. package/cjs/datasource-action-utils.js +14 -0
  21. package/cjs/datasource-action-utils.js.map +1 -0
  22. package/cjs/datasource-utils.js +178 -0
  23. package/cjs/datasource-utils.js.map +1 -0
  24. package/cjs/date/dateTimePattern.js +25 -0
  25. package/cjs/date/dateTimePattern.js.map +1 -0
  26. package/cjs/date/formatter.js +66 -0
  27. package/cjs/date/formatter.js.map +1 -0
  28. package/cjs/date/types.js +23 -0
  29. package/cjs/date/types.js.map +1 -0
  30. package/cjs/date/utils.js +10 -0
  31. package/cjs/date/utils.js.map +1 -0
  32. package/cjs/debug-utils.js +31 -0
  33. package/cjs/debug-utils.js.map +1 -0
  34. package/cjs/event-emitter.js +119 -0
  35. package/cjs/event-emitter.js.map +1 -0
  36. package/cjs/filters/filterAsQuery.js +76 -0
  37. package/cjs/filters/filterAsQuery.js.map +1 -0
  38. package/cjs/filters/utils.js +89 -0
  39. package/cjs/filters/utils.js.map +1 -0
  40. package/cjs/formatting-utils.js +66 -0
  41. package/cjs/formatting-utils.js.map +1 -0
  42. package/cjs/getUniqueId.js +6 -0
  43. package/cjs/getUniqueId.js.map +1 -0
  44. package/cjs/group-utils.js +12 -0
  45. package/cjs/group-utils.js.map +1 -0
  46. package/cjs/html-utils.js +124 -0
  47. package/cjs/html-utils.js.map +1 -0
  48. package/cjs/index.js +4 -0
  49. package/cjs/index.js.map +1 -0
  50. package/cjs/input-utils.js +10 -0
  51. package/cjs/input-utils.js.map +1 -0
  52. package/cjs/invariant.js +13 -0
  53. package/cjs/invariant.js.map +1 -0
  54. package/cjs/itemToString.js +23 -0
  55. package/cjs/itemToString.js.map +1 -0
  56. package/cjs/json-utils.js +92 -0
  57. package/cjs/json-utils.js.map +1 -0
  58. package/cjs/keyboard-utils.js +28 -0
  59. package/cjs/keyboard-utils.js.map +1 -0
  60. package/cjs/keyset.js +68 -0
  61. package/cjs/keyset.js.map +1 -0
  62. package/cjs/local-storage-utils.js +20 -0
  63. package/cjs/local-storage-utils.js.map +1 -0
  64. package/cjs/logging-utils.js +61 -0
  65. package/cjs/logging-utils.js.map +1 -0
  66. package/cjs/menu-utils.js +6 -0
  67. package/cjs/menu-utils.js.map +1 -0
  68. package/cjs/module-utils.js +12 -0
  69. package/cjs/module-utils.js.map +1 -0
  70. package/cjs/nanoid/index.js +22 -0
  71. package/cjs/nanoid/index.js.map +1 -0
  72. package/cjs/perf-utils.js +35 -0
  73. package/cjs/perf-utils.js.map +1 -0
  74. package/cjs/range-utils.js +74 -0
  75. package/cjs/range-utils.js.map +1 -0
  76. package/cjs/react-utils.js +21 -0
  77. package/cjs/react-utils.js.map +1 -0
  78. package/cjs/round-decimal.js +86 -0
  79. package/cjs/round-decimal.js.map +1 -0
  80. package/cjs/row-utils.js +84 -0
  81. package/cjs/row-utils.js.map +1 -0
  82. package/cjs/selection-utils.js +236 -0
  83. package/cjs/selection-utils.js.map +1 -0
  84. package/cjs/sort-utils.js +61 -0
  85. package/cjs/sort-utils.js.map +1 -0
  86. package/cjs/text-utils.js +21 -0
  87. package/cjs/text-utils.js.map +1 -0
  88. package/cjs/ts-utils.js +8 -0
  89. package/cjs/ts-utils.js.map +1 -0
  90. package/cjs/url-utils.js +21 -0
  91. package/cjs/url-utils.js.map +1 -0
  92. package/cjs/useId.js +9 -0
  93. package/cjs/useId.js.map +1 -0
  94. package/cjs/useLayoutEffectSkipFirst.js +17 -0
  95. package/cjs/useLayoutEffectSkipFirst.js.map +1 -0
  96. package/esm/DataWindow.js +69 -0
  97. package/esm/DataWindow.js.map +1 -0
  98. package/esm/ThemeProvider.js +78 -0
  99. package/esm/ThemeProvider.js.map +1 -0
  100. package/esm/array-utils.js +79 -0
  101. package/esm/array-utils.js.map +1 -0
  102. package/esm/box-utils.js +8 -0
  103. package/esm/box-utils.js.map +1 -0
  104. package/esm/column-utils.js +738 -0
  105. package/esm/column-utils.js.map +1 -0
  106. package/esm/common-types.js +13 -0
  107. package/esm/common-types.js.map +1 -0
  108. package/esm/component-registry.js +99 -0
  109. package/esm/component-registry.js.map +1 -0
  110. package/esm/cookie-utils.js +8 -0
  111. package/esm/cookie-utils.js.map +1 -0
  112. package/esm/data-utils.js +50 -0
  113. package/esm/data-utils.js.map +1 -0
  114. package/esm/datasource-action-utils.js +8 -0
  115. package/esm/datasource-action-utils.js.map +1 -0
  116. package/esm/datasource-utils.js +158 -0
  117. package/esm/datasource-utils.js.map +1 -0
  118. package/esm/date/dateTimePattern.js +21 -0
  119. package/esm/date/dateTimePattern.js.map +1 -0
  120. package/esm/date/formatter.js +63 -0
  121. package/esm/date/formatter.js.map +1 -0
  122. package/esm/date/types.js +20 -0
  123. package/esm/date/types.js.map +1 -0
  124. package/esm/date/utils.js +8 -0
  125. package/esm/date/utils.js.map +1 -0
  126. package/esm/debug-utils.js +29 -0
  127. package/esm/debug-utils.js.map +1 -0
  128. package/esm/event-emitter.js +117 -0
  129. package/esm/event-emitter.js.map +1 -0
  130. package/esm/filters/filterAsQuery.js +72 -0
  131. package/esm/filters/filterAsQuery.js.map +1 -0
  132. package/esm/filters/utils.js +74 -0
  133. package/esm/filters/utils.js.map +1 -0
  134. package/esm/formatting-utils.js +62 -0
  135. package/esm/formatting-utils.js.map +1 -0
  136. package/esm/getUniqueId.js +4 -0
  137. package/esm/getUniqueId.js.map +1 -0
  138. package/esm/group-utils.js +10 -0
  139. package/esm/group-utils.js.map +1 -0
  140. package/esm/html-utils.js +111 -0
  141. package/esm/html-utils.js.map +1 -0
  142. package/esm/index.js +47 -0
  143. package/esm/index.js.map +1 -0
  144. package/esm/input-utils.js +7 -0
  145. package/esm/input-utils.js.map +1 -0
  146. package/esm/invariant.js +11 -0
  147. package/esm/invariant.js.map +1 -0
  148. package/esm/itemToString.js +21 -0
  149. package/esm/itemToString.js.map +1 -0
  150. package/esm/json-utils.js +90 -0
  151. package/esm/json-utils.js.map +1 -0
  152. package/esm/keyboard-utils.js +15 -0
  153. package/esm/keyboard-utils.js.map +1 -0
  154. package/esm/keyset.js +66 -0
  155. package/esm/keyset.js.map +1 -0
  156. package/esm/local-storage-utils.js +16 -0
  157. package/esm/local-storage-utils.js.map +1 -0
  158. package/esm/logging-utils.js +58 -0
  159. package/esm/logging-utils.js.map +1 -0
  160. package/esm/menu-utils.js +4 -0
  161. package/esm/menu-utils.js.map +1 -0
  162. package/esm/module-utils.js +9 -0
  163. package/esm/module-utils.js.map +1 -0
  164. package/esm/nanoid/index.js +20 -0
  165. package/esm/nanoid/index.js.map +1 -0
  166. package/esm/perf-utils.js +32 -0
  167. package/esm/perf-utils.js.map +1 -0
  168. package/esm/range-utils.js +66 -0
  169. package/esm/range-utils.js.map +1 -0
  170. package/esm/react-utils.js +19 -0
  171. package/esm/react-utils.js.map +1 -0
  172. package/esm/round-decimal.js +84 -0
  173. package/esm/round-decimal.js.map +1 -0
  174. package/esm/row-utils.js +78 -0
  175. package/esm/row-utils.js.map +1 -0
  176. package/esm/selection-utils.js +227 -0
  177. package/esm/selection-utils.js.map +1 -0
  178. package/esm/sort-utils.js +57 -0
  179. package/esm/sort-utils.js.map +1 -0
  180. package/esm/text-utils.js +18 -0
  181. package/esm/text-utils.js.map +1 -0
  182. package/esm/ts-utils.js +6 -0
  183. package/esm/ts-utils.js.map +1 -0
  184. package/esm/url-utils.js +18 -0
  185. package/esm/url-utils.js.map +1 -0
  186. package/esm/useId.js +7 -0
  187. package/esm/useId.js.map +1 -0
  188. package/esm/useLayoutEffectSkipFirst.js +15 -0
  189. package/esm/useLayoutEffectSkipFirst.js.map +1 -0
  190. package/package.json +7 -5
  191. package/types/index.d.ts +1 -0
  192. package/types/local-storage-utils.d.ts +3 -0
@@ -0,0 +1,124 @@
1
+ 'use strict';
2
+
3
+ const createEl = (elementType, className, textContent) => {
4
+ const el = document.createElement(elementType);
5
+ if (className) {
6
+ el.className = className;
7
+ }
8
+ if (textContent) {
9
+ el.textContent = textContent;
10
+ }
11
+ return el;
12
+ };
13
+ const getFocusableElement = (el, tabIndex) => {
14
+ if (el) {
15
+ if (el.hasAttribute("tabindex")) {
16
+ const rootTabIndex = parseInt(el.getAttribute("tabindex"));
17
+ if (!isNaN(rootTabIndex) && (tabIndex === void 0 || rootTabIndex === tabIndex)) {
18
+ return el;
19
+ }
20
+ }
21
+ const focusableEl = typeof tabIndex === "number" ? el.querySelector(`[tabindex="${tabIndex}"]`) : el.querySelector("[tabindex]");
22
+ if (focusableEl) {
23
+ return focusableEl;
24
+ }
25
+ }
26
+ };
27
+ const getElementDataIndex = (el) => {
28
+ if (el) {
29
+ const index = parseInt(el.dataset.index || "");
30
+ if (!isNaN(index)) {
31
+ return index;
32
+ }
33
+ }
34
+ return -1;
35
+ };
36
+ const queryClosest = (el, cssQueryString) => el === null ? null : el.closest(cssQueryString);
37
+ const getClosest = (el, dataProperty) => queryClosest(el, `[data-${dataProperty}]`);
38
+ const getClosestIndexItem = (el) => getClosest(el, "index");
39
+ function getElementByDataIndex(container, index, throwIfNotFound = false) {
40
+ if (container === null && throwIfNotFound) {
41
+ throw Error("html-utils getElementByDataIndex, container is null");
42
+ }
43
+ const element = container?.querySelector(
44
+ `[data-index="${index}"]`
45
+ );
46
+ if (element) {
47
+ return element;
48
+ } else if (throwIfNotFound) {
49
+ throw Error(
50
+ "html-utils getElementByDataIndex, Item not found with data-index='${index}'"
51
+ );
52
+ } else {
53
+ return void 0;
54
+ }
55
+ }
56
+ const focusFirstFocusableElement = (el, tabIndex) => {
57
+ requestAnimationFrame(() => {
58
+ const focusableElement = getFocusableElement(el, tabIndex);
59
+ if (focusableElement) {
60
+ focusableElement.focus();
61
+ }
62
+ });
63
+ };
64
+ const isSelectableElement = (el) => {
65
+ const item = el?.closest("[data-index]");
66
+ if (!item || item.ariaDisabled || item.dataset.selectable === "false" || item.querySelector('[data-selectable="false"],[aria-disabled="true"]')) {
67
+ return false;
68
+ } else {
69
+ return true;
70
+ }
71
+ };
72
+ let size;
73
+ function getScrollbarSize() {
74
+ if (size === void 0) {
75
+ let outer = document.createElement("div");
76
+ outer.className = "scrollable-content";
77
+ outer.style.width = "50px";
78
+ outer.style.height = "50px";
79
+ outer.style.overflowY = "scroll";
80
+ outer.style.position = "absolute";
81
+ outer.style.top = "-200px";
82
+ outer.style.left = "-200px";
83
+ const inner = document.createElement("div");
84
+ inner.style.height = "100px";
85
+ inner.style.width = "100%";
86
+ outer.appendChild(inner);
87
+ document.body.appendChild(outer);
88
+ const outerWidth = outer.offsetWidth;
89
+ const innerWidth = inner.offsetWidth;
90
+ document.body.removeChild(outer);
91
+ size = outerWidth - innerWidth;
92
+ outer = null;
93
+ }
94
+ return size;
95
+ }
96
+ const dispatchMouseEvent = (el, type) => {
97
+ const evt = new MouseEvent(type, {
98
+ view: window,
99
+ bubbles: true,
100
+ cancelable: true
101
+ });
102
+ el.dispatchEvent(evt);
103
+ };
104
+ const dispatchCustomEvent = (el, type) => {
105
+ const evt = new Event(type, {
106
+ bubbles: true,
107
+ cancelable: true
108
+ });
109
+ el.dispatchEvent(evt);
110
+ };
111
+
112
+ exports.createEl = createEl;
113
+ exports.dispatchCustomEvent = dispatchCustomEvent;
114
+ exports.dispatchMouseEvent = dispatchMouseEvent;
115
+ exports.focusFirstFocusableElement = focusFirstFocusableElement;
116
+ exports.getClosest = getClosest;
117
+ exports.getClosestIndexItem = getClosestIndexItem;
118
+ exports.getElementByDataIndex = getElementByDataIndex;
119
+ exports.getElementDataIndex = getElementDataIndex;
120
+ exports.getFocusableElement = getFocusableElement;
121
+ exports.getScrollbarSize = getScrollbarSize;
122
+ exports.isSelectableElement = isSelectableElement;
123
+ exports.queryClosest = queryClosest;
124
+ //# sourceMappingURL=html-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-utils.js","sources":["../src/html-utils.ts"],"sourcesContent":["export const createEl = (\n elementType: \"div\" | \"p\" | \"span\",\n className?: string,\n textContent?: string\n): HTMLElement => {\n const el = document.createElement(elementType);\n if (className) {\n el.className = className;\n }\n if (textContent) {\n el.textContent = textContent;\n }\n return el;\n};\n\nexport const getFocusableElement = (\n el: HTMLElement | null,\n tabIndex?: number\n) => {\n if (el) {\n if (el.hasAttribute(\"tabindex\")) {\n const rootTabIndex = parseInt(el.getAttribute(\"tabindex\") as string);\n if (\n !isNaN(rootTabIndex) &&\n (tabIndex === undefined || rootTabIndex === tabIndex)\n ) {\n return el;\n }\n }\n const focusableEl =\n typeof tabIndex === \"number\"\n ? (el.querySelector(`[tabindex=\"${tabIndex}\"]`) as HTMLElement)\n : (el.querySelector(\"[tabindex]\") as HTMLElement);\n if (focusableEl) {\n return focusableEl as HTMLElement;\n }\n }\n};\n\nexport const getElementDataIndex = (el: HTMLElement | null) => {\n if (el) {\n const index = parseInt(el.dataset.index || \"\");\n if (!isNaN(index)) {\n return index;\n }\n }\n return -1;\n};\n\nexport const queryClosest = <T extends HTMLElement = HTMLElement>(\n el: HTMLElement | EventTarget | null,\n cssQueryString: string\n) => (el === null ? null : ((el as HTMLElement).closest(cssQueryString) as T));\n\nexport const getClosest = (el: HTMLElement, dataProperty: string) =>\n queryClosest(el, `[data-${dataProperty}]`);\n\nexport const getClosestIndexItem = (el: HTMLElement) => getClosest(el, \"index\");\n\nexport function getElementByDataIndex(\n c: HTMLElement | null,\n i: number | string,\n throwIfNotFound: true\n): HTMLElement;\nexport function getElementByDataIndex(\n c: HTMLElement | null,\n i: number | string,\n throwIfNotFound?: false\n): HTMLElement | undefined;\nexport function getElementByDataIndex(\n container: HTMLElement | null,\n index: number | string,\n throwIfNotFound = false\n) {\n if (container === null && throwIfNotFound) {\n throw Error(\"html-utils getElementByDataIndex, container is null\");\n }\n const element = container?.querySelector(\n `[data-index=\"${index}\"]`\n ) as HTMLElement;\n if (element) {\n return element;\n } else if (throwIfNotFound) {\n throw Error(\n \"html-utils getElementByDataIndex, Item not found with data-index='${index}'\"\n );\n } else {\n return undefined;\n }\n}\n\nexport const focusFirstFocusableElement = (\n el: HTMLElement | null,\n tabIndex?: number\n) => {\n // TODO test el for focusable\n requestAnimationFrame(() => {\n const focusableElement = getFocusableElement(el, tabIndex);\n if (focusableElement) {\n focusableElement.focus();\n }\n });\n};\n\nexport const isSelectableElement = (el?: HTMLElement | null) => {\n const item = el?.closest(\"[data-index]\") as HTMLElement;\n if (\n !item ||\n item.ariaDisabled ||\n item.dataset.selectable === \"false\" ||\n item.querySelector('[data-selectable=\"false\"],[aria-disabled=\"true\"]')\n ) {\n return false;\n } else {\n return true;\n }\n};\n\nlet size: number;\n\nexport function getScrollbarSize() {\n if (size === undefined) {\n let outer: HTMLElement | null = document.createElement(\"div\");\n outer.className = \"scrollable-content\";\n outer.style.width = \"50px\";\n outer.style.height = \"50px\";\n outer.style.overflowY = \"scroll\";\n outer.style.position = \"absolute\";\n outer.style.top = \"-200px\";\n outer.style.left = \"-200px\";\n const inner = document.createElement(\"div\");\n inner.style.height = \"100px\";\n inner.style.width = \"100%\";\n outer.appendChild(inner);\n document.body.appendChild(outer);\n const outerWidth = outer.offsetWidth;\n const innerWidth = inner.offsetWidth;\n document.body.removeChild(outer);\n size = outerWidth - innerWidth;\n outer = null;\n }\n\n return size;\n}\n\nexport type MouseEventTypes = \"dblclick\" | \"click\";\n\nexport const dispatchMouseEvent = (el: HTMLElement, type: MouseEventTypes) => {\n const evt = new MouseEvent(type, {\n view: window,\n bubbles: true,\n cancelable: true,\n });\n el.dispatchEvent(evt);\n};\n\nexport type VuuDomEventType = \"vuu-commit\" | \"vuu-dropped\";\n\nexport const dispatchCustomEvent = (el: HTMLElement, type: VuuDomEventType) => {\n const evt = new Event(type, {\n bubbles: true,\n cancelable: true,\n });\n el.dispatchEvent(evt);\n};\n"],"names":[],"mappings":"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"}
package/cjs/index.js CHANGED
@@ -28,6 +28,7 @@ var itemToString = require('./itemToString.js');
28
28
  var jsonUtils = require('./json-utils.js');
29
29
  var keyboardUtils = require('./keyboard-utils.js');
30
30
  var keyset = require('./keyset.js');
31
+ var localStorageUtils = require('./local-storage-utils.js');
31
32
  var loggingUtils = require('./logging-utils.js');
32
33
  var menuUtils = require('./menu-utils.js');
33
34
  var moduleUtils = require('./module-utils.js');
@@ -234,6 +235,9 @@ exports.PageUp = keyboardUtils.PageUp;
234
235
  exports.Space = keyboardUtils.Space;
235
236
  exports.Tab = keyboardUtils.Tab;
236
237
  exports.KeySet = keyset.KeySet;
238
+ exports.getAllLocalEntity = localStorageUtils.getAllLocalEntity;
239
+ exports.getLocalEntity = localStorageUtils.getLocalEntity;
240
+ exports.saveLocalEntity = localStorageUtils.saveLocalEntity;
237
241
  exports.getLoggingConfigForWorker = loggingUtils.getLoggingConfigForWorker;
238
242
  exports.logger = loggingUtils.logger;
239
243
  exports.isGroupMenuItemDescriptor = menuUtils.isGroupMenuItemDescriptor;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ const isCharacterKey = (key) => key.length === 1;
4
+ const isQuoteKey = (evt) => {
5
+ return evt.key === '"' || evt.key === "'";
6
+ };
7
+
8
+ exports.isCharacterKey = isCharacterKey;
9
+ exports.isQuoteKey = isQuoteKey;
10
+ //# sourceMappingURL=input-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-utils.js","sources":["../src/input-utils.ts"],"sourcesContent":["export const isCharacterKey = (key: string) => key.length === 1;\n\nexport const isQuoteKey = (evt: KeyboardEvent) => {\n return evt.key === '\"' || evt.key === \"'\";\n};\n"],"names":[],"mappings":";;AAAO,MAAM,cAAiB,GAAA,CAAC,GAAgB,KAAA,GAAA,CAAI,MAAW,KAAA,EAAA;AAEjD,MAAA,UAAA,GAAa,CAAC,GAAuB,KAAA;AAChD,EAAA,OAAO,GAAI,CAAA,GAAA,KAAQ,GAAO,IAAA,GAAA,CAAI,GAAQ,KAAA,GAAA,CAAA;AACxC;;;;;"}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ function invariant(condition, message) {
4
+ if (!condition) {
5
+ const error = new Error(message);
6
+ error.name = "Invariant Violation";
7
+ error.framesToPop = 1;
8
+ throw error;
9
+ }
10
+ }
11
+
12
+ exports.invariant = invariant;
13
+ //# sourceMappingURL=invariant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariant.js","sources":["../src/invariant.ts"],"sourcesContent":["export function invariant(condition: boolean, message: string) {\n if (!condition) {\n const error = new Error(message);\n error.name = \"Invariant Violation\";\n // TODO what is framesToPop?\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n"],"names":[],"mappings":";;AAAgB,SAAA,SAAA,CAAU,WAAoB,OAAiB,EAAA;AAC7D,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAM,MAAA,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA,CAAA;AAC/B,IAAA,KAAA,CAAM,IAAO,GAAA,qBAAA,CAAA;AAIb,IAAA,KAAA,CAAM,WAAc,GAAA,CAAA,CAAA;AACpB,IAAM,MAAA,KAAA,CAAA;AAAA,GACR;AACF;;;;"}
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ const isPlainObject = (obj) => Object.prototype.toString.call(obj) === "[object Object]";
4
+ function itemToString(item) {
5
+ if (typeof item === "string") {
6
+ return item;
7
+ } else if (!isPlainObject(item)) {
8
+ return String(item);
9
+ }
10
+ if (Object.prototype.hasOwnProperty.call(item, "label")) {
11
+ return String(item.label);
12
+ }
13
+ console.warn(
14
+ [
15
+ "itemToString: you've likely forgotten to set the label prop on the item object.",
16
+ "You can also provide your own `itemToString` implementation."
17
+ ].join("\n")
18
+ );
19
+ return "";
20
+ }
21
+
22
+ exports.itemToString = itemToString;
23
+ //# sourceMappingURL=itemToString.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"itemToString.js","sources":["../src/itemToString.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ItemToStringFunction = (item: any) => string;\n\nconst isPlainObject = (obj: unknown) =>\n Object.prototype.toString.call(obj) === \"[object Object]\";\n\nexport function itemToString(item: unknown): string {\n if (typeof item === \"string\") {\n return item;\n } else if (!isPlainObject(item)) {\n return String(item);\n }\n\n if (Object.prototype.hasOwnProperty.call(item, \"label\")) {\n return String((item as { label?: string }).label);\n }\n\n console.warn(\n [\n \"itemToString: you've likely forgotten to set the label prop on the item object.\",\n \"You can also provide your own `itemToString` implementation.\",\n ].join(\"\\n\")\n );\n\n return \"\";\n}\n"],"names":[],"mappings":";;AAGA,MAAM,aAAA,GAAgB,CAAC,GACrB,KAAA,MAAA,CAAO,UAAU,QAAS,CAAA,IAAA,CAAK,GAAG,CAAM,KAAA,iBAAA,CAAA;AAEnC,SAAS,aAAa,IAAuB,EAAA;AAClD,EAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,IAAO,OAAA,IAAA,CAAA;AAAA,GACE,MAAA,IAAA,CAAC,aAAc,CAAA,IAAI,CAAG,EAAA;AAC/B,IAAA,OAAO,OAAO,IAAI,CAAA,CAAA;AAAA,GACpB;AAEA,EAAA,IAAI,OAAO,SAAU,CAAA,cAAA,CAAe,IAAK,CAAA,IAAA,EAAM,OAAO,CAAG,EAAA;AACvD,IAAO,OAAA,MAAA,CAAQ,KAA4B,KAAK,CAAA,CAAA;AAAA,GAClD;AAEA,EAAQ,OAAA,CAAA,IAAA;AAAA,IACN;AAAA,MACE,iFAAA;AAAA,MACA,8DAAA;AAAA,KACF,CAAE,KAAK,IAAI,CAAA;AAAA,GACb,CAAA;AAEA,EAAO,OAAA,EAAA,CAAA;AACT;;;;"}
@@ -0,0 +1,92 @@
1
+ 'use strict';
2
+
3
+ var columnUtils = require('./column-utils.js');
4
+
5
+ const { COUNT } = columnUtils.metadataKeys;
6
+ const isJsonData = (value) => typeof value === "object" && value !== null;
7
+ const vuuRowDataItemTypes = ["boolean", "number", "string"];
8
+ const isVuuRowDataItem = (value) => vuuRowDataItemTypes.includes(typeof value);
9
+ const typeofVuuDataItem = (value) => typeof value === "boolean" ? "boolean" : typeof value === "number" ? "number" : "string";
10
+ const getCellValue = (attribute, attributeValue) => {
11
+ if (isJsonData(attributeValue)) {
12
+ return { attribute: `${attribute}+`, attributeValue: "", type: "json" };
13
+ } else if (attributeValue === void 0) {
14
+ return {
15
+ attribute,
16
+ attributeValue: "undefined",
17
+ type: "string"
18
+ };
19
+ } else if (isVuuRowDataItem(attributeValue)) {
20
+ return {
21
+ attribute,
22
+ attributeValue,
23
+ type: typeofVuuDataItem(attributeValue)
24
+ };
25
+ } else {
26
+ throw Error(`unsupported type ${typeof attributeValue} in JSON`);
27
+ }
28
+ };
29
+ const jsonColumnType = {
30
+ name: "json",
31
+ renderer: {
32
+ name: "json"
33
+ }
34
+ };
35
+ const jsonToDataSourceRows = (json) => {
36
+ const cols = [];
37
+ cols.push(
38
+ {
39
+ name: "col 1",
40
+ type: jsonColumnType
41
+ },
42
+ {
43
+ name: "col 2",
44
+ type: jsonColumnType
45
+ }
46
+ );
47
+ const rows = [];
48
+ addChildValues(rows, json, cols);
49
+ return [cols, rows];
50
+ };
51
+ const addChildValues = (rows, json, cols, index = { value: 0 }, keyBase = "$root", depth = 0) => {
52
+ let leafCount = 0;
53
+ let rowCount = 0;
54
+ if (depth === cols.length - 1) {
55
+ cols.push({
56
+ name: `col ${cols.length + 1}`,
57
+ hidden: true,
58
+ type: jsonColumnType
59
+ });
60
+ }
61
+ const columnEntries = Object.entries(json);
62
+ for (let i = 0; i < columnEntries.length; i++, index.value += 1) {
63
+ const [key, value] = columnEntries[i];
64
+ const { attribute, attributeValue, type } = getCellValue(key, value);
65
+ const isLeaf = type !== "json";
66
+ const blanks = Array(depth).fill("");
67
+ const fullKey = `${keyBase}|${key}`;
68
+ const row = [index.value, index.value, isLeaf, false, depth, 0, fullKey, 0, ...blanks, attribute, attributeValue];
69
+ rows.push(row);
70
+ rowCount += 1;
71
+ if (isJsonData(value)) {
72
+ const [nestedLeafCount, nestedRowCount] = addChildValues(
73
+ rows,
74
+ value,
75
+ cols,
76
+ { value: index.value + 1 },
77
+ fullKey,
78
+ depth + 1
79
+ );
80
+ row[COUNT] = nestedLeafCount;
81
+ leafCount += nestedLeafCount;
82
+ rowCount += nestedRowCount;
83
+ index.value += nestedRowCount;
84
+ } else {
85
+ leafCount += 1;
86
+ }
87
+ }
88
+ return [leafCount, rowCount];
89
+ };
90
+
91
+ exports.jsonToDataSourceRows = jsonToDataSourceRows;
92
+ //# sourceMappingURL=json-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-utils.js","sources":["../src/json-utils.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n ColumnTypeDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { metadataKeys } from \"./column-utils\";\n\nconst { COUNT } = metadataKeys;\n\nexport type JsonData =\n | {\n [key: string]: unknown;\n }\n | JsonData[];\n\ntype Index = { value: number };\n\ntype CellValue = {\n attribute: string;\n attributeValue: JsonData | VuuRowDataItemType | null;\n type: \"json\" | \"number\" | \"string\" | \"boolean\";\n};\n\nconst isJsonData = (value: unknown): value is JsonData =>\n typeof value === \"object\" && value !== null;\n\nconst vuuRowDataItemTypes = [\"boolean\", \"number\", \"string\"];\nconst isVuuRowDataItem = (value: unknown): value is VuuRowDataItemType =>\n vuuRowDataItemTypes.includes(typeof value);\nconst typeofVuuDataItem = (value: VuuRowDataItemType) =>\n typeof value === \"boolean\"\n ? \"boolean\"\n : typeof value === \"number\"\n ? \"number\"\n : \"string\";\n\nconst getCellValue = (\n attribute: string,\n attributeValue: unknown\n): CellValue => {\n if (isJsonData(attributeValue)) {\n return { attribute: `${attribute}+`, attributeValue: \"\", type: \"json\" };\n } else if (attributeValue === undefined) {\n return {\n attribute,\n attributeValue: \"undefined\",\n type: \"string\",\n };\n } else if (isVuuRowDataItem(attributeValue)) {\n return {\n attribute,\n attributeValue,\n type: typeofVuuDataItem(attributeValue),\n };\n } else {\n throw Error(`unsupported type ${typeof attributeValue} in JSON`);\n }\n};\n\nconst jsonColumnType: ColumnTypeDescriptor = {\n name: \"json\",\n renderer: {\n name: \"json\",\n },\n};\n\nexport const jsonToDataSourceRows = (\n json: JsonData\n): [ColumnDescriptor[], DataSourceRow[]] => {\n const cols: ColumnDescriptor[] = [];\n\n cols.push(\n {\n name: \"col 1\",\n type: jsonColumnType,\n },\n {\n name: \"col 2\",\n type: jsonColumnType,\n }\n );\n\n const rows: DataSourceRow[] = [];\n\n addChildValues(rows, json, cols);\n return [cols, rows];\n};\n\nconst addChildValues = (\n rows: DataSourceRow[],\n json: JsonData,\n cols: ColumnDescriptor[],\n index: Index = { value: 0 },\n keyBase = \"$root\",\n depth = 0\n): [number, number] => {\n let leafCount = 0;\n let rowCount = 0;\n if (depth === cols.length - 1) {\n cols.push({\n name: `col ${cols.length + 1}`,\n hidden: true,\n type: jsonColumnType,\n });\n }\n const columnEntries = Object.entries(json);\n for (let i = 0; i < columnEntries.length; i++, index.value += 1) {\n const [key, value] = columnEntries[i];\n const { attribute, attributeValue, type } = getCellValue(key, value);\n const isLeaf = type !== \"json\";\n const blanks = Array(depth).fill(\"\");\n const fullKey = `${keyBase}|${key}`;\n // prettier-ignore\n const row = [index.value, index.value, isLeaf,false,depth,0,fullKey,0, ...blanks, attribute, attributeValue ] as DataSourceRow\n rows.push(row);\n rowCount += 1;\n\n if (isJsonData(value)) {\n const [nestedLeafCount, nestedRowCount] = addChildValues(\n rows,\n value,\n cols,\n { value: index.value + 1 },\n fullKey,\n depth + 1\n );\n row[COUNT] = nestedLeafCount;\n leafCount += nestedLeafCount;\n rowCount += nestedRowCount;\n index.value += nestedRowCount;\n } else {\n leafCount += 1;\n }\n }\n\n return [leafCount, rowCount];\n};\n"],"names":["metadataKeys"],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ const ArrowUp = "ArrowUp";
4
+ const ArrowDown = "ArrowDown";
5
+ const ArrowLeft = "ArrowLeft";
6
+ const ArrowRight = "ArrowRight";
7
+ const Enter = "Enter";
8
+ const Escape = "Escape";
9
+ const Home = "Home";
10
+ const End = "End";
11
+ const PageUp = "PageUp";
12
+ const PageDown = "PageDown";
13
+ const Space = " ";
14
+ const Tab = "Tab";
15
+
16
+ exports.ArrowDown = ArrowDown;
17
+ exports.ArrowLeft = ArrowLeft;
18
+ exports.ArrowRight = ArrowRight;
19
+ exports.ArrowUp = ArrowUp;
20
+ exports.End = End;
21
+ exports.Enter = Enter;
22
+ exports.Escape = Escape;
23
+ exports.Home = Home;
24
+ exports.PageDown = PageDown;
25
+ exports.PageUp = PageUp;
26
+ exports.Space = Space;
27
+ exports.Tab = Tab;
28
+ //# sourceMappingURL=keyboard-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard-utils.js","sources":["../src/keyboard-utils.ts"],"sourcesContent":["export const ArrowUp = \"ArrowUp\";\nexport const ArrowDown = \"ArrowDown\";\nexport const ArrowLeft = \"ArrowLeft\";\nexport const ArrowRight = \"ArrowRight\";\nexport const Enter = \"Enter\";\nexport const Escape = \"Escape\";\nexport const Home = \"Home\";\nexport const End = \"End\";\nexport const PageUp = \"PageUp\";\nexport const PageDown = \"PageDown\";\nexport const Space = \" \";\nexport const Tab = \"Tab\";\n"],"names":[],"mappings":";;AAAO,MAAM,OAAU,GAAA,UAAA;AAChB,MAAM,SAAY,GAAA,YAAA;AAClB,MAAM,SAAY,GAAA,YAAA;AAClB,MAAM,UAAa,GAAA,aAAA;AACnB,MAAM,KAAQ,GAAA,QAAA;AACd,MAAM,MAAS,GAAA,SAAA;AACf,MAAM,IAAO,GAAA,OAAA;AACb,MAAM,GAAM,GAAA,MAAA;AACZ,MAAM,MAAS,GAAA,SAAA;AACf,MAAM,QAAW,GAAA,WAAA;AACjB,MAAM,KAAQ,GAAA,IAAA;AACd,MAAM,GAAM,GAAA;;;;;;;;;;;;;;;"}
package/cjs/keyset.js ADDED
@@ -0,0 +1,68 @@
1
+ 'use strict';
2
+
3
+ const EMPTY = [];
4
+ class KeySet {
5
+ constructor(range) {
6
+ this.keys = /* @__PURE__ */ new Map();
7
+ this.nextKeyValue = 0;
8
+ this.range = range;
9
+ this.init(range);
10
+ }
11
+ next(free = EMPTY) {
12
+ if (free.length > 0) {
13
+ return free.shift();
14
+ } else {
15
+ return this.nextKeyValue++;
16
+ }
17
+ }
18
+ init({ from, to }) {
19
+ this.keys.clear();
20
+ this.nextKeyValue = 0;
21
+ for (let rowIndex = from; rowIndex < to; rowIndex++) {
22
+ const nextKeyValue = this.next();
23
+ this.keys.set(rowIndex, nextKeyValue);
24
+ }
25
+ return true;
26
+ }
27
+ reset(range) {
28
+ const { from, to } = range;
29
+ const newSize = to - from;
30
+ const currentSize = this.range.to - this.range.from;
31
+ this.range = range;
32
+ if (currentSize > newSize) {
33
+ return this.init(range);
34
+ }
35
+ const freeKeys = [];
36
+ this.keys.forEach((keyValue, rowIndex) => {
37
+ if (rowIndex < from || rowIndex >= to) {
38
+ freeKeys.push(keyValue);
39
+ this.keys.delete(rowIndex);
40
+ }
41
+ });
42
+ for (let rowIndex = from; rowIndex < to; rowIndex++) {
43
+ if (!this.keys.has(rowIndex)) {
44
+ const nextKeyValue = this.next(freeKeys);
45
+ this.keys.set(rowIndex, nextKeyValue);
46
+ }
47
+ }
48
+ return false;
49
+ }
50
+ keyFor(rowIndex) {
51
+ const key = this.keys.get(rowIndex);
52
+ if (key === void 0) {
53
+ console.log(`key not found
54
+ keys: ${this.toDebugString()}
55
+ `);
56
+ throw Error(`KeySet, no key found for rowIndex ${rowIndex}`);
57
+ }
58
+ return key;
59
+ }
60
+ toDebugString() {
61
+ return `${this.keys.size} keys
62
+ ${Array.from(this.keys.entries()).sort(([key1], [key2]) => key1 - key2).map(([k, v]) => `${k}=>${v}`).join(",")}]
63
+ `;
64
+ }
65
+ }
66
+
67
+ exports.KeySet = KeySet;
68
+ //# sourceMappingURL=keyset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyset.js","sources":["../src/keyset.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\nconst EMPTY: number[] = [];\nexport class KeySet {\n private keys = new Map<number, number>();\n private nextKeyValue = 0;\n private range: VuuRange;\n\n constructor(range: VuuRange) {\n this.range = range;\n this.init(range);\n }\n\n public next(free: number[] = EMPTY): number {\n if (free.length > 0) {\n return free.shift() as number;\n } else {\n return this.nextKeyValue++;\n }\n }\n\n private init({ from, to }: VuuRange) {\n this.keys.clear();\n this.nextKeyValue = 0;\n\n for (let rowIndex = from; rowIndex < to; rowIndex++) {\n const nextKeyValue = this.next();\n this.keys.set(rowIndex, nextKeyValue);\n }\n\n return true;\n }\n\n public reset(range: VuuRange) {\n const { from, to } = range;\n\n const newSize = to - from;\n const currentSize = this.range.to - this.range.from;\n this.range = range;\n\n if (currentSize > newSize) {\n // We re-initialize the range when the range size reduces, even though this will\n // potentially re-render all items.\n return this.init(range);\n }\n\n const freeKeys: number[] = [];\n\n this.keys.forEach((keyValue, rowIndex) => {\n if (rowIndex < from || rowIndex >= to) {\n freeKeys.push(keyValue);\n this.keys.delete(rowIndex);\n }\n });\n\n for (let rowIndex = from; rowIndex < to; rowIndex++) {\n if (!this.keys.has(rowIndex)) {\n const nextKeyValue = this.next(freeKeys);\n this.keys.set(rowIndex, nextKeyValue);\n }\n }\n\n return false;\n }\n\n public keyFor(rowIndex: number): number {\n const key = this.keys.get(rowIndex);\n if (key === undefined) {\n console.log(`key not found\n keys: ${this.toDebugString()}\n `);\n throw Error(`KeySet, no key found for rowIndex ${rowIndex}`);\n }\n return key;\n }\n\n public toDebugString() {\n return `${this.keys.size} keys\n${Array.from(this.keys.entries())\n .sort(([key1], [key2]) => key1 - key2)\n .map<string>(([k, v]) => `${k}=>${v}`)\n .join(\",\")}]\\n`;\n }\n}\n"],"names":[],"mappings":";;AAEA,MAAM,QAAkB,EAAC,CAAA;AAClB,MAAM,MAAO,CAAA;AAAA,EAKlB,YAAY,KAAiB,EAAA;AAJ7B,IAAQ,IAAA,CAAA,IAAA,uBAAW,GAAoB,EAAA,CAAA;AACvC,IAAA,IAAA,CAAQ,YAAe,GAAA,CAAA,CAAA;AAIrB,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AACb,IAAA,IAAA,CAAK,KAAK,KAAK,CAAA,CAAA;AAAA,GACjB;AAAA,EAEO,IAAA,CAAK,OAAiB,KAAe,EAAA;AAC1C,IAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,MAAA,OAAO,KAAK,KAAM,EAAA,CAAA;AAAA,KACb,MAAA;AACL,MAAA,OAAO,IAAK,CAAA,YAAA,EAAA,CAAA;AAAA,KACd;AAAA,GACF;AAAA,EAEQ,IAAK,CAAA,EAAE,IAAM,EAAA,EAAA,EAAgB,EAAA;AACnC,IAAA,IAAA,CAAK,KAAK,KAAM,EAAA,CAAA;AAChB,IAAA,IAAA,CAAK,YAAe,GAAA,CAAA,CAAA;AAEpB,IAAA,KAAA,IAAS,QAAW,GAAA,IAAA,EAAM,QAAW,GAAA,EAAA,EAAI,QAAY,EAAA,EAAA;AACnD,MAAM,MAAA,YAAA,GAAe,KAAK,IAAK,EAAA,CAAA;AAC/B,MAAK,IAAA,CAAA,IAAA,CAAK,GAAI,CAAA,QAAA,EAAU,YAAY,CAAA,CAAA;AAAA,KACtC;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEO,MAAM,KAAiB,EAAA;AAC5B,IAAM,MAAA,EAAE,IAAM,EAAA,EAAA,EAAO,GAAA,KAAA,CAAA;AAErB,IAAA,MAAM,UAAU,EAAK,GAAA,IAAA,CAAA;AACrB,IAAA,MAAM,WAAc,GAAA,IAAA,CAAK,KAAM,CAAA,EAAA,GAAK,KAAK,KAAM,CAAA,IAAA,CAAA;AAC/C,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AAEb,IAAA,IAAI,cAAc,OAAS,EAAA;AAGzB,MAAO,OAAA,IAAA,CAAK,KAAK,KAAK,CAAA,CAAA;AAAA,KACxB;AAEA,IAAA,MAAM,WAAqB,EAAC,CAAA;AAE5B,IAAA,IAAA,CAAK,IAAK,CAAA,OAAA,CAAQ,CAAC,QAAA,EAAU,QAAa,KAAA;AACxC,MAAI,IAAA,QAAA,GAAW,IAAQ,IAAA,QAAA,IAAY,EAAI,EAAA;AACrC,QAAA,QAAA,CAAS,KAAK,QAAQ,CAAA,CAAA;AACtB,QAAK,IAAA,CAAA,IAAA,CAAK,OAAO,QAAQ,CAAA,CAAA;AAAA,OAC3B;AAAA,KACD,CAAA,CAAA;AAED,IAAA,KAAA,IAAS,QAAW,GAAA,IAAA,EAAM,QAAW,GAAA,EAAA,EAAI,QAAY,EAAA,EAAA;AACnD,MAAA,IAAI,CAAC,IAAA,CAAK,IAAK,CAAA,GAAA,CAAI,QAAQ,CAAG,EAAA;AAC5B,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AACvC,QAAK,IAAA,CAAA,IAAA,CAAK,GAAI,CAAA,QAAA,EAAU,YAAY,CAAA,CAAA;AAAA,OACtC;AAAA,KACF;AAEA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAAA,EAEO,OAAO,QAA0B,EAAA;AACtC,IAAA,MAAM,GAAM,GAAA,IAAA,CAAK,IAAK,CAAA,GAAA,CAAI,QAAQ,CAAA,CAAA;AAClC,IAAA,IAAI,QAAQ,KAAW,CAAA,EAAA;AACrB,MAAA,OAAA,CAAQ,GAAI,CAAA,CAAA;AAAA,cACF,EAAA,IAAA,CAAK,eAAe,CAAA;AAAA,MAC7B,CAAA,CAAA,CAAA;AACD,MAAM,MAAA,KAAA,CAAM,CAAqC,kCAAA,EAAA,QAAQ,CAAE,CAAA,CAAA,CAAA;AAAA,KAC7D;AACA,IAAO,OAAA,GAAA,CAAA;AAAA,GACT;AAAA,EAEO,aAAgB,GAAA;AACrB,IAAO,OAAA,CAAA,EAAG,IAAK,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA,EAC1B,KAAM,CAAA,IAAA,CAAK,IAAK,CAAA,IAAA,CAAK,SAAS,CAAA,CAC7B,IAAK,CAAA,CAAC,CAAC,IAAI,CAAG,EAAA,CAAC,IAAI,CAAM,KAAA,IAAA,GAAO,IAAI,CAAA,CACpC,GAAY,CAAA,CAAC,CAAC,CAAA,EAAG,CAAC,CAAM,KAAA,CAAA,EAAG,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CACpC,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,CAAA,CAAA;AAAA,GACV;AACF;;;;"}
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ const getLocalEntity = (url) => {
4
+ const data = localStorage.getItem(url);
5
+ return data ? JSON.parse(data) : void 0;
6
+ };
7
+ const getAllLocalEntity = (url) => Object.entries(localStorage).filter(([key]) => key.includes(url)).map(([, value]) => JSON.parse(value));
8
+ const saveLocalEntity = (url, data) => {
9
+ try {
10
+ localStorage.setItem(url, JSON.stringify(data));
11
+ return data;
12
+ } catch {
13
+ return void 0;
14
+ }
15
+ };
16
+
17
+ exports.getAllLocalEntity = getAllLocalEntity;
18
+ exports.getLocalEntity = getLocalEntity;
19
+ exports.saveLocalEntity = saveLocalEntity;
20
+ //# sourceMappingURL=local-storage-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-storage-utils.js","sources":["../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,CAAA;AACrC,EAAA,OAAO,IAAO,GAAA,IAAA,CAAK,KAAM,CAAA,IAAI,CAAI,GAAA,KAAA,CAAA,CAAA;AACnC,EAAA;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,EAAA;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,CAAA;AAC9C,IAAO,OAAA,IAAA,CAAA;AAAA,GACD,CAAA,MAAA;AACN,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AACF;;;;;;"}
@@ -0,0 +1,61 @@
1
+ 'use strict';
2
+
3
+ var cookieUtils = require('./cookie-utils.js');
4
+
5
+ const logLevels = ["error", "warn", "info", "debug"];
6
+ const isValidLogLevel = (value) => typeof value === "string" && logLevels.includes(value);
7
+ const DEFAULT_LOG_LEVEL = "error";
8
+ const NO_OP = () => void 0;
9
+ const DEFAULT_DEBUG_LEVEL = process.env.NODE_ENV === "production" ? "error" : "info";
10
+ const { loggingLevel = DEFAULT_DEBUG_LEVEL } = getLoggingSettings();
11
+ const logger = (category) => {
12
+ const debugEnabled = loggingLevel === "debug";
13
+ const infoEnabled = debugEnabled || loggingLevel === "info";
14
+ const warnEnabled = infoEnabled || loggingLevel === "warn";
15
+ const errorEnabled = warnEnabled || loggingLevel === "error";
16
+ const info = infoEnabled ? (message) => console.info(`[${category}] ${message}`) : NO_OP;
17
+ const warn = warnEnabled ? (message) => console.warn(`[${category}] ${message}`) : NO_OP;
18
+ const debug = debugEnabled ? (message) => console.debug(`[${category}] ${message}`) : NO_OP;
19
+ const error = errorEnabled ? (message) => console.error(`[${category}] ${message}`) : NO_OP;
20
+ if (process.env.NODE_ENV === "production") {
21
+ return {
22
+ errorEnabled,
23
+ error
24
+ };
25
+ } else {
26
+ return {
27
+ debugEnabled,
28
+ infoEnabled,
29
+ warnEnabled,
30
+ errorEnabled,
31
+ info,
32
+ warn,
33
+ debug,
34
+ error
35
+ };
36
+ }
37
+ };
38
+ function getLoggingSettings() {
39
+ if (typeof loggingSettings !== "undefined") {
40
+ return loggingSettings;
41
+ } else {
42
+ return {
43
+ loggingLevel: getLoggingLevelFromCookie()
44
+ };
45
+ }
46
+ }
47
+ function getLoggingLevelFromCookie() {
48
+ const value = cookieUtils.getCookieValue("vuu-logging-level");
49
+ if (isValidLogLevel(value)) {
50
+ return value;
51
+ } else {
52
+ return DEFAULT_LOG_LEVEL;
53
+ }
54
+ }
55
+ const getLoggingConfigForWorker = () => {
56
+ return `const loggingSettings = { loggingLevel: "${getLoggingLevelFromCookie()}"};`;
57
+ };
58
+
59
+ exports.getLoggingConfigForWorker = getLoggingConfigForWorker;
60
+ exports.logger = logger;
61
+ //# sourceMappingURL=logging-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging-utils.js","sources":["../src/logging-utils.ts"],"sourcesContent":["import { getCookieValue } from \"./cookie-utils\";\n\ndeclare global {\n const loggingSettings: loggingSettings;\n}\n\nexport interface LogFn {\n (message?: unknown, ...optionalParams: unknown[]): void;\n}\nexport interface AssertLogFn {\n (condition: boolean, message?: unknown, errorMessaage?: unknown): void;\n}\n\nexport interface TableLogFn {\n (properties?: object): void;\n}\n\ntype loggingSettings = {\n loggingLevel: LogLevel;\n};\n\nexport interface Logger {\n warn: LogFn;\n error: LogFn;\n debug: LogFn;\n info: LogFn;\n}\n\nexport type LogLevel = keyof Logger;\n\nconst logLevels = [\"error\", \"warn\", \"info\", \"debug\"];\nconst isValidLogLevel = (value: unknown): value is LogLevel =>\n typeof value === \"string\" && logLevels.includes(value);\n\nconst DEFAULT_LOG_LEVEL: LogLevel = \"error\";\n\nexport type BuildEnv = \"production\" | \"development\";\n\nconst NO_OP = () => undefined;\n\nconst DEFAULT_DEBUG_LEVEL: LogLevel =\n process.env.NODE_ENV === \"production\" ? \"error\" : \"info\";\n\nconst { loggingLevel = DEFAULT_DEBUG_LEVEL } = getLoggingSettings();\n// typeof loggingSettings !== \"undefined\" ? loggingSettings : {};\n// const { loggingLevel = DEFAULT_DEBUG_LEVEL } =\n// typeof loggingSettings !== \"undefined\" ? loggingSettings : {};\n\nexport const logger = (category: string) => {\n const debugEnabled = loggingLevel === \"debug\";\n const infoEnabled = debugEnabled || loggingLevel === \"info\";\n const warnEnabled = infoEnabled || loggingLevel === \"warn\";\n const errorEnabled = warnEnabled || loggingLevel === \"error\";\n\n const info = infoEnabled\n ? (message: string) => console.info(`[${category}] ${message}`)\n : NO_OP;\n const warn = warnEnabled\n ? (message: string) => console.warn(`[${category}] ${message}`)\n : NO_OP;\n const debug = debugEnabled\n ? (message: string) => console.debug(`[${category}] ${message}`)\n : NO_OP;\n const error = errorEnabled\n ? (message: string) => console.error(`[${category}] ${message}`)\n : NO_OP;\n\n if (process.env.NODE_ENV === \"production\") {\n return {\n errorEnabled,\n error,\n };\n } else {\n return {\n debugEnabled,\n infoEnabled,\n warnEnabled,\n errorEnabled,\n info,\n warn,\n debug,\n error,\n };\n }\n};\n\nfunction getLoggingSettings() {\n if (typeof loggingSettings !== \"undefined\") {\n return loggingSettings;\n } else {\n return {\n loggingLevel: getLoggingLevelFromCookie(),\n };\n }\n}\n\nfunction getLoggingLevelFromCookie(): LogLevel {\n const value = getCookieValue(\"vuu-logging-level\");\n if (isValidLogLevel(value)) {\n return value;\n } else {\n return DEFAULT_LOG_LEVEL;\n }\n}\n\nexport const getLoggingConfigForWorker = () => {\n return `const loggingSettings = { loggingLevel: \"${getLoggingLevelFromCookie()}\"};`;\n};\n"],"names":["getCookieValue"],"mappings":";;;;AA8BA,MAAM,SAAY,GAAA,CAAC,OAAS,EAAA,MAAA,EAAQ,QAAQ,OAAO,CAAA,CAAA;AACnD,MAAM,eAAA,GAAkB,CAAC,KACvB,KAAA,OAAO,UAAU,QAAY,IAAA,SAAA,CAAU,SAAS,KAAK,CAAA,CAAA;AAEvD,MAAM,iBAA8B,GAAA,OAAA,CAAA;AAIpC,MAAM,QAAQ,MAAM,KAAA,CAAA,CAAA;AAEpB,MAAM,mBACJ,GAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,eAAe,OAAU,GAAA,MAAA,CAAA;AAEpD,MAAM,EAAE,YAAA,GAAe,mBAAoB,EAAA,GAAI,kBAAmB,EAAA,CAAA;AAKrD,MAAA,MAAA,GAAS,CAAC,QAAqB,KAAA;AAC1C,EAAA,MAAM,eAAe,YAAiB,KAAA,OAAA,CAAA;AACtC,EAAM,MAAA,WAAA,GAAc,gBAAgB,YAAiB,KAAA,MAAA,CAAA;AACrD,EAAM,MAAA,WAAA,GAAc,eAAe,YAAiB,KAAA,MAAA,CAAA;AACpD,EAAM,MAAA,YAAA,GAAe,eAAe,YAAiB,KAAA,OAAA,CAAA;AAErD,EAAM,MAAA,IAAA,GAAO,WACT,GAAA,CAAC,OAAoB,KAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAC5D,GAAA,KAAA,CAAA;AACJ,EAAM,MAAA,IAAA,GAAO,WACT,GAAA,CAAC,OAAoB,KAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAC5D,GAAA,KAAA,CAAA;AACJ,EAAM,MAAA,KAAA,GAAQ,YACV,GAAA,CAAC,OAAoB,KAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAC7D,GAAA,KAAA,CAAA;AACJ,EAAM,MAAA,KAAA,GAAQ,YACV,GAAA,CAAC,OAAoB,KAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAC7D,GAAA,KAAA,CAAA;AAEJ,EAAI,IAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,IAAO,OAAA;AAAA,MACL,YAAA;AAAA,MACA,KAAA;AAAA,KACF,CAAA;AAAA,GACK,MAAA;AACL,IAAO,OAAA;AAAA,MACL,YAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,KACF,CAAA;AAAA,GACF;AACF,EAAA;AAEA,SAAS,kBAAqB,GAAA;AAC5B,EAAI,IAAA,OAAO,oBAAoB,WAAa,EAAA;AAC1C,IAAO,OAAA,eAAA,CAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA;AAAA,MACL,cAAc,yBAA0B,EAAA;AAAA,KAC1C,CAAA;AAAA,GACF;AACF,CAAA;AAEA,SAAS,yBAAsC,GAAA;AAC7C,EAAM,MAAA,KAAA,GAAQA,2BAAe,mBAAmB,CAAA,CAAA;AAChD,EAAI,IAAA,eAAA,CAAgB,KAAK,CAAG,EAAA;AAC1B,IAAO,OAAA,KAAA,CAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,iBAAA,CAAA;AAAA,GACT;AACF,CAAA;AAEO,MAAM,4BAA4B,MAAM;AAC7C,EAAO,OAAA,CAAA,yCAAA,EAA4C,2BAA2B,CAAA,GAAA,CAAA,CAAA;AAChF;;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ const isGroupMenuItemDescriptor = (menuItem) => menuItem !== void 0 && "children" in menuItem;
4
+
5
+ exports.isGroupMenuItemDescriptor = isGroupMenuItemDescriptor;
6
+ //# sourceMappingURL=menu-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-utils.js","sources":["../src/menu-utils.ts"],"sourcesContent":["import {\n ContextMenuGroupItemDescriptor,\n ContextMenuItemDescriptor,\n} from \"@vuu-ui/vuu-data-types\";\n\nexport const isGroupMenuItemDescriptor = (\n menuItem?: ContextMenuItemDescriptor\n): menuItem is ContextMenuGroupItemDescriptor =>\n menuItem !== undefined && \"children\" in menuItem;\n"],"names":[],"mappings":";;AAKO,MAAM,yBAA4B,GAAA,CACvC,QAEA,KAAA,QAAA,KAAa,UAAa,UAAc,IAAA;;;;"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ const isModule = (entity) => entity !== void 0 && typeof entity !== "function";
4
+ const assertModuleExportsAtLeastOneComponent = (module) => {
5
+ if (module && Object.values(module).every((item) => isModule(item))) {
6
+ throw Error("module file, no components");
7
+ }
8
+ };
9
+
10
+ exports.assertModuleExportsAtLeastOneComponent = assertModuleExportsAtLeastOneComponent;
11
+ exports.isModule = isModule;
12
+ //# sourceMappingURL=module-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-utils.js","sources":["../src/module-utils.ts"],"sourcesContent":["export type ReactComponent = {\n (props?: any): JSX.Element;\n};\n\nexport const isModule = (entity: Module | ReactComponent): entity is Module =>\n entity !== undefined && typeof entity !== \"function\";\n\nexport interface Module<T = ReactComponent> {\n [key: string]: Module<T> | T;\n}\n\nexport const assertModuleExportsAtLeastOneComponent = (module: Module) => {\n if (module && Object.values(module).every((item) => isModule(item))) {\n throw Error(\"module file, no components\");\n }\n};\n"],"names":[],"mappings":";;AAIO,MAAM,WAAW,CAAC,MAAA,KACvB,MAAW,KAAA,KAAA,CAAA,IAAa,OAAO,MAAW,KAAA,WAAA;AAM/B,MAAA,sCAAA,GAAyC,CAAC,MAAmB,KAAA;AACxE,EAAI,IAAA,MAAA,IAAU,MAAO,CAAA,MAAA,CAAO,MAAM,CAAA,CAAE,KAAM,CAAA,CAAC,IAAS,KAAA,QAAA,CAAS,IAAI,CAAC,CAAG,EAAA;AACnE,IAAA,MAAM,MAAM,4BAA4B,CAAA,CAAA;AAAA,GAC1C;AACF;;;;;"}
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ const uuid = (size = 21) => {
4
+ let id = "";
5
+ const bytes = crypto.getRandomValues(new Uint8Array(size));
6
+ while (size--) {
7
+ const byte = bytes[size] & 63;
8
+ if (byte < 36) {
9
+ id += byte.toString(36);
10
+ } else if (byte < 62) {
11
+ id += (byte - 26).toString(36).toUpperCase();
12
+ } else if (byte < 63) {
13
+ id += "_";
14
+ } else {
15
+ id += "-";
16
+ }
17
+ }
18
+ return id;
19
+ };
20
+
21
+ exports.uuid = uuid;
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/nanoid/index.ts"],"sourcesContent":["// This is the index.browser.js file from nanoid\n// couldn't get original code to work as npm import without crypro warnings -\n// seemed to be picking up node version, not browser version\n\nexport const uuid = (size = 21): string => {\n let id = '';\n const bytes = crypto.getRandomValues(new Uint8Array(size));\n\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n while (size--) {\n // It is incorrect to use bytes exceeding the alphabet size.\n // The following mask reduces the random byte in the 0-255 value\n // range to the 0-63 value range. Therefore, adding hacks, such\n // as empty string fallback or magic numbers, is unneccessary because\n // the bitmask trims bytes down to the alphabet size.\n const byte = bytes[size] & 63;\n if (byte < 36) {\n // `0-9a-z`\n id += byte.toString(36);\n } else if (byte < 62) {\n // `A-Z`\n id += (byte - 26).toString(36).toUpperCase();\n } else if (byte < 63) {\n id += '_';\n } else {\n id += '-';\n }\n }\n return id;\n};\n"],"names":[],"mappings":";;AAIa,MAAA,IAAA,GAAO,CAAC,IAAA,GAAO,EAAe,KAAA;AACzC,EAAA,IAAI,EAAK,GAAA,EAAA,CAAA;AACT,EAAA,MAAM,QAAQ,MAAO,CAAA,eAAA,CAAgB,IAAI,UAAA,CAAW,IAAI,CAAC,CAAA,CAAA;AAGzD,EAAA,OAAO,IAAQ,EAAA,EAAA;AAMb,IAAM,MAAA,IAAA,GAAO,KAAM,CAAA,IAAI,CAAI,GAAA,EAAA,CAAA;AAC3B,IAAA,IAAI,OAAO,EAAI,EAAA;AAEb,MAAM,EAAA,IAAA,IAAA,CAAK,SAAS,EAAE,CAAA,CAAA;AAAA,KACxB,MAAA,IAAW,OAAO,EAAI,EAAA;AAEpB,MAAA,EAAA,IAAA,CAAO,IAAO,GAAA,EAAA,EAAI,QAAS,CAAA,EAAE,EAAE,WAAY,EAAA,CAAA;AAAA,KAC7C,MAAA,IAAW,OAAO,EAAI,EAAA;AACpB,MAAM,EAAA,IAAA,GAAA,CAAA;AAAA,KACD,MAAA;AACL,MAAM,EAAA,IAAA,GAAA,CAAA;AAAA,KACR;AAAA,GACF;AACA,EAAO,OAAA,EAAA,CAAA;AACT;;;;"}
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ function debounce(callback, timeInterval) {
4
+ let timeout;
5
+ return (...args) => {
6
+ clearTimeout(timeout);
7
+ timeout = window.setTimeout(() => callback(...args), timeInterval);
8
+ };
9
+ }
10
+ function throttle(callback, limit) {
11
+ let wait = false;
12
+ let lastArgs = void 0;
13
+ function checkLastArgs() {
14
+ if (lastArgs == void 0) {
15
+ wait = false;
16
+ } else {
17
+ callback(...lastArgs);
18
+ lastArgs = void 0;
19
+ setTimeout(checkLastArgs, limit);
20
+ }
21
+ }
22
+ return (...args) => {
23
+ if (wait) {
24
+ lastArgs = args;
25
+ } else {
26
+ callback(...args);
27
+ wait = true;
28
+ setTimeout(checkLastArgs, limit);
29
+ }
30
+ };
31
+ }
32
+
33
+ exports.debounce = debounce;
34
+ exports.throttle = throttle;
35
+ //# sourceMappingURL=perf-utils.js.map