@vuu-ui/vuu-utils 2.1.13 → 2.1.15

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 (85) hide show
  1. package/cjs/node_modules/@dnd-kit/react/hooks.js +17 -17
  2. package/cjs/node_modules/@dnd-kit/react/hooks.js.map +1 -1
  3. package/cjs/node_modules/@dnd-kit/react/index.js +24 -24
  4. package/cjs/node_modules/@dnd-kit/react/index.js.map +1 -1
  5. package/cjs/node_modules/@dnd-kit/react/sortable.js +5 -5
  6. package/cjs/node_modules/@dnd-kit/react/sortable.js.map +1 -1
  7. package/cjs/packages/vuu-utils/src/ShellContext.js +3 -3
  8. package/cjs/packages/vuu-utils/src/ShellContext.js.map +1 -1
  9. package/cjs/packages/vuu-utils/src/ThemeProvider.js +10 -10
  10. package/cjs/packages/vuu-utils/src/ThemeProvider.js.map +1 -1
  11. package/cjs/packages/vuu-utils/src/context-definitions/DataContext.js +2 -2
  12. package/cjs/packages/vuu-utils/src/context-definitions/DataContext.js.map +1 -1
  13. package/cjs/packages/vuu-utils/src/context-definitions/DataProvider.js +4 -4
  14. package/cjs/packages/vuu-utils/src/context-definitions/DataProvider.js.map +1 -1
  15. package/cjs/packages/vuu-utils/src/context-definitions/DataSourceProvider.js +5 -5
  16. package/cjs/packages/vuu-utils/src/context-definitions/DataSourceProvider.js.map +1 -1
  17. package/cjs/packages/vuu-utils/src/context-definitions/WorkspaceContext.js +3 -3
  18. package/cjs/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +1 -1
  19. package/cjs/packages/vuu-utils/src/data-editing/DataEditingProvider.js +5 -5
  20. package/cjs/packages/vuu-utils/src/data-editing/DataEditingProvider.js.map +1 -1
  21. package/cjs/packages/vuu-utils/src/data-editing/EditButtons.js +12 -15
  22. package/cjs/packages/vuu-utils/src/data-editing/EditButtons.js.map +1 -1
  23. package/cjs/packages/vuu-utils/src/data-editing/EditSession.js +52 -130
  24. package/cjs/packages/vuu-utils/src/data-editing/EditSession.js.map +1 -1
  25. package/cjs/packages/vuu-utils/src/data-editing/edit-utils.js +1 -32
  26. package/cjs/packages/vuu-utils/src/data-editing/edit-utils.js.map +1 -1
  27. package/cjs/packages/vuu-utils/src/data-editing/useEditableTable.js +15 -23
  28. package/cjs/packages/vuu-utils/src/data-editing/useEditableTable.js.map +1 -1
  29. package/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js +3 -2
  30. package/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js.map +1 -1
  31. package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js +3 -3
  32. package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js.map +1 -1
  33. package/cjs/packages/vuu-utils/src/date/date-utils.js +2 -2
  34. package/cjs/packages/vuu-utils/src/date/date-utils.js.map +1 -1
  35. package/cjs/packages/vuu-utils/src/date/formatter.js +2 -2
  36. package/cjs/packages/vuu-utils/src/date/formatter.js.map +1 -1
  37. package/cjs/packages/vuu-utils/src/feature-utils.js +2 -2
  38. package/cjs/packages/vuu-utils/src/feature-utils.js.map +1 -1
  39. package/cjs/packages/vuu-utils/src/index.js +2 -9
  40. package/cjs/packages/vuu-utils/src/index.js.map +1 -1
  41. package/cjs/packages/vuu-utils/src/protocol-message-utils.js +0 -10
  42. package/cjs/packages/vuu-utils/src/protocol-message-utils.js.map +1 -1
  43. package/cjs/packages/vuu-utils/src/react-utils.js +8 -8
  44. package/cjs/packages/vuu-utils/src/react-utils.js.map +1 -1
  45. package/cjs/packages/vuu-utils/src/theme-utils.js +3 -3
  46. package/cjs/packages/vuu-utils/src/theme-utils.js.map +1 -1
  47. package/cjs/packages/vuu-utils/src/useId.js +2 -2
  48. package/cjs/packages/vuu-utils/src/useId.js.map +1 -1
  49. package/cjs/packages/vuu-utils/src/useLayoutEffectSkipFirst.js +3 -3
  50. package/cjs/packages/vuu-utils/src/useLayoutEffectSkipFirst.js.map +1 -1
  51. package/cjs/packages/vuu-utils/src/useResizeObserver.js +5 -5
  52. package/cjs/packages/vuu-utils/src/useResizeObserver.js.map +1 -1
  53. package/cjs/packages/vuu-utils/src/useStateRef.js +4 -4
  54. package/cjs/packages/vuu-utils/src/useStateRef.js.map +1 -1
  55. package/esm/packages/vuu-utils/src/ThemeProvider.js +2 -2
  56. package/esm/packages/vuu-utils/src/ThemeProvider.js.map +1 -1
  57. package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js +2 -2
  58. package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +1 -1
  59. package/esm/packages/vuu-utils/src/data-editing/EditButtons.js +4 -7
  60. package/esm/packages/vuu-utils/src/data-editing/EditButtons.js.map +1 -1
  61. package/esm/packages/vuu-utils/src/data-editing/EditSession.js +53 -130
  62. package/esm/packages/vuu-utils/src/data-editing/EditSession.js.map +1 -1
  63. package/esm/packages/vuu-utils/src/data-editing/edit-utils.js +2 -32
  64. package/esm/packages/vuu-utils/src/data-editing/edit-utils.js.map +1 -1
  65. package/esm/packages/vuu-utils/src/data-editing/useEditableTable.js +9 -17
  66. package/esm/packages/vuu-utils/src/data-editing/useEditableTable.js.map +1 -1
  67. package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js +1 -0
  68. package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js.map +1 -1
  69. package/esm/packages/vuu-utils/src/feature-utils.js +2 -2
  70. package/esm/packages/vuu-utils/src/feature-utils.js.map +1 -1
  71. package/esm/packages/vuu-utils/src/index.js +3 -3
  72. package/esm/packages/vuu-utils/src/protocol-message-utils.js +1 -6
  73. package/esm/packages/vuu-utils/src/protocol-message-utils.js.map +1 -1
  74. package/package.json +6 -6
  75. package/types/data-editing/EditButtons.d.ts +1 -1
  76. package/types/data-editing/EditSession.d.ts +6 -30
  77. package/types/data-editing/edit-utils.d.ts +0 -2
  78. package/types/data-editing/useEditableTable.d.ts +1 -1
  79. package/types/filters/filter-utils.d.ts +1 -2
  80. package/types/index.d.ts +2 -3
  81. package/types/protocol-message-utils.d.ts +1 -6
  82. package/cjs/packages/vuu-utils/dist/index.js +0 -6004
  83. package/cjs/packages/vuu-utils/dist/index.js.map +0 -1
  84. package/esm/packages/vuu-utils/dist/index.js +0 -5979
  85. package/esm/packages/vuu-utils/dist/index.js.map +0 -1
@@ -1,37 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__ = require('react/jsx-runtime');
4
- require('../date/date-utils.js');
5
- require('../date/dateTimePattern.js');
6
- var formatter = require('../date/formatter.js');
3
+ const isInlineEditingSession = (editSessionMode) => editSessionMode === "inline-all-rows";
7
4
 
8
- const isInlineEditingSession = (editSessionMode) => editSessionMode.startsWith("inline");
9
- const timeFormatter = formatter.formatDate({ time: "hh:mm:ss" });
10
- const getVuuEditMessage = (dataRow, column, originalValue) => {
11
- const vuuMsg = dataRow.vuuMsg;
12
- if (typeof vuuMsg === "string" && vuuMsg !== "") {
13
- const columnMessages = vuuMsg.split(",");
14
- const msgForCol = columnMessages.find(
15
- (msg) => msg.startsWith(`${column.name}:`)
16
- );
17
- if (msgForCol) {
18
- const [, value, updatedValue, ts] = msgForCol.split(":");
19
- const updateTime = timeFormatter(new Date(parseInt(ts)));
20
- return /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__.jsxs("span", { children: [
21
- "Update rejected. Original value ",
22
- /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__.jsx("b", { children: originalValue }),
23
- " could not be updated to ",
24
- /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__.jsx("b", { children: value }),
25
- ". It was updated to ",
26
- /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__.jsx("b", { children: updatedValue }),
27
- " at ",
28
- updateTime,
29
- "."
30
- ] });
31
- }
32
- }
33
- };
34
-
35
- exports.getVuuEditMessage = getVuuEditMessage;
36
5
  exports.isInlineEditingSession = isInlineEditingSession;
37
6
  //# sourceMappingURL=edit-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"edit-utils.js","sources":["../../../../../../../packages/vuu-utils/src/data-editing/edit-utils.tsx"],"sourcesContent":["import { EditSessionMode, InlineEditSessionMode } from \"@vuu-ui/vuu-data-types\";\nimport { DataRow, RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { formatDate } from \"../date\";\n\nexport const isInlineEditingSession = (\n editSessionMode: EditSessionMode,\n): editSessionMode is InlineEditSessionMode =>\n editSessionMode.startsWith(\"inline\");\n\nconst timeFormatter = formatDate({ time: \"hh:mm:ss\" });\n\nexport const getVuuEditMessage = (\n dataRow: DataRow,\n column: RuntimeColumnDescriptor,\n originalValue: string,\n) => {\n const vuuMsg = dataRow.vuuMsg as string;\n if (typeof vuuMsg === \"string\" && vuuMsg !== \"\") {\n const columnMessages = vuuMsg.split(\",\");\n const msgForCol = columnMessages.find((msg) =>\n msg.startsWith(`${column.name}:`),\n );\n if (msgForCol) {\n const [, value, updatedValue, ts] = msgForCol.split(\":\");\n const updateTime = timeFormatter(new Date(parseInt(ts as string)));\n return (\n <span>\n {\"Update rejected. Original value \"}\n <b>{originalValue}</b>\n {\" could not be updated to \"}\n <b>{value}</b>\n {\". It was updated to \"}\n <b>{updatedValue}</b>\n {\" at \"}\n {updateTime}\n {\".\"}\n </span>\n );\n }\n }\n};\n"],"names":["formatDate","jsx"],"mappings":";;;;;;;AAIO,MAAM,sBAAyB,GAAA,CACpC,eAEA,KAAA,eAAA,CAAgB,WAAW,QAAQ;AAErC,MAAM,aAAgB,GAAAA,oBAAA,CAAW,EAAE,IAAA,EAAM,YAAY,CAAA;AAE9C,MAAM,iBAAoB,GAAA,CAC/B,OACA,EAAA,MAAA,EACA,aACG,KAAA;AACH,EAAA,MAAM,SAAS,OAAQ,CAAA,MAAA;AACvB,EAAA,IAAI,OAAO,MAAA,KAAW,QAAY,IAAA,MAAA,KAAW,EAAI,EAAA;AAC/C,IAAM,MAAA,cAAA,GAAiB,MAAO,CAAA,KAAA,CAAM,GAAG,CAAA;AACvC,IAAA,MAAM,YAAY,cAAe,CAAA,IAAA;AAAA,MAAK,CAAC,GACrC,KAAA,GAAA,CAAI,WAAW,CAAG,EAAA,MAAA,CAAO,IAAI,CAAG,CAAA,CAAA;AAAA,KAClC;AACA,IAAA,IAAI,SAAW,EAAA;AACb,MAAM,MAAA,GAAG,KAAO,EAAA,YAAA,EAAc,EAAE,CAAI,GAAA,SAAA,CAAU,MAAM,GAAG,CAAA;AACvD,MAAA,MAAM,aAAa,aAAc,CAAA,IAAI,KAAK,QAAS,CAAA,EAAY,CAAC,CAAC,CAAA;AACjE,MAAA,0EACG,MACE,EAAA,EAAA,QAAA,EAAA;AAAA,QAAA,kCAAA;AAAA,wBACDC,iDAAA,CAAC,OAAG,QAAc,EAAA,aAAA,EAAA,CAAA;AAAA,QACjB,2BAAA;AAAA,wBACDA,iDAAA,CAAC,OAAG,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,QACT,sBAAA;AAAA,wBACDA,iDAAA,CAAC,OAAG,QAAa,EAAA,YAAA,EAAA,CAAA;AAAA,QAChB,MAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACH,EAAA,CAAA;AAAA;AAEJ;AAEJ;;;;;"}
1
+ {"version":3,"file":"edit-utils.js","sources":["../../../../../../../packages/vuu-utils/src/data-editing/edit-utils.ts"],"sourcesContent":["import { EditSessionMode, InlineEditSessionMode } from \"@vuu-ui/vuu-data-types\";\n\nexport const isInlineEditingSession = (\n editSessionMode: EditSessionMode,\n): editSessionMode is InlineEditSessionMode =>\n editSessionMode === \"inline-all-rows\";\n"],"names":[],"mappings":";;AAEa,MAAA,sBAAA,GAAyB,CACpC,eAAA,KAEA,eAAoB,KAAA;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var __WEBPACK_EXTERNAL_MODULE_react__ = require('react');
3
+ var React = require('react');
4
4
  var DataProvider = require('../context-definitions/DataProvider.js');
5
5
  var useLayoutEffectSkipFirst = require('../useLayoutEffectSkipFirst.js');
6
6
  var EditSession = require('./EditSession.js');
@@ -8,18 +8,18 @@ var EditSession = require('./EditSession.js');
8
8
  const useEditableTable = ({
9
9
  columns,
10
10
  dataSource: dataSourceProp,
11
- editSessionMode = "inline-all-rows",
11
+ editSessionMode = "all-rows",
12
12
  isEditMode,
13
13
  onCancel,
14
14
  onSave,
15
15
  table
16
16
  }) => {
17
17
  const { VuuDataSource } = DataProvider.useData();
18
- const [sessionDataSource, setSessionDataSource] = __WEBPACK_EXTERNAL_MODULE_react__.useState(void 0);
18
+ const [sessionDataSource, setSessionDataSource] = React.useState(void 0);
19
19
  useLayoutEffectSkipFirst.useLayoutEffectSkipFirst(() => {
20
20
  console.warn(`[useEditableTable] columns and or table changed`);
21
21
  }, [columns, table]);
22
- const dataSource = __WEBPACK_EXTERNAL_MODULE_react__.useMemo(() => {
22
+ const dataSource = React.useMemo(() => {
23
23
  if (dataSourceProp) {
24
24
  return dataSourceProp;
25
25
  } else if (table) {
@@ -30,29 +30,23 @@ const useEditableTable = ({
30
30
  );
31
31
  }
32
32
  }, [VuuDataSource, columns, dataSourceProp, table]);
33
- const editSession = __WEBPACK_EXTERNAL_MODULE_react__.useMemo(() => new EditSession.EditSession(dataSource), [dataSource]);
34
- const handleCancel = __WEBPACK_EXTERNAL_MODULE_react__.useCallback(() => {
33
+ const editSession = React.useMemo(() => new EditSession.EditSession(dataSource), [dataSource]);
34
+ const handleCancel = React.useCallback(() => {
35
35
  try {
36
36
  editSession.end();
37
37
  onCancel();
38
38
  } catch (e) {
39
39
  }
40
40
  }, [editSession, onCancel]);
41
- const handleSave = __WEBPACK_EXTERNAL_MODULE_react__.useCallback(
42
- async (force = false) => {
43
- dataSource.resume?.();
44
- try {
45
- await editSession.end(true, force);
46
- if (editSession.inEditMode === false) {
47
- onSave();
48
- }
49
- } catch (e) {
50
- console.log(`[useEditableTable] handleSave ${e.message}`);
51
- }
52
- },
53
- [dataSource, editSession, onSave]
54
- );
55
- __WEBPACK_EXTERNAL_MODULE_react__.useMemo(async () => {
41
+ const handleSave = React.useCallback(async () => {
42
+ dataSource.resume?.();
43
+ try {
44
+ await editSession.end(true);
45
+ onSave();
46
+ } catch (e) {
47
+ }
48
+ }, [dataSource, editSession, onSave]);
49
+ React.useMemo(async () => {
56
50
  console.log(`[useEditableTable] editMode ${isEditMode}`);
57
51
  if (isEditMode) {
58
52
  try {
@@ -64,8 +58,6 @@ const useEditableTable = ({
64
58
  console.error(e);
65
59
  onCancel();
66
60
  }
67
- } else {
68
- await editSession.end();
69
61
  }
70
62
  }, [editSession, editSessionMode, isEditMode, onCancel]);
71
63
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"useEditableTable.js","sources":["../../../../../../../packages/vuu-utils/src/data-editing/useEditableTable.ts"],"sourcesContent":["import { DataSource, EditSessionMode } from \"@vuu-ui/vuu-data-types\";\n// import { useNotifications } from \"@vuu-ui/vuu-notifications\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { useData } from \"../context-definitions/DataProvider\";\nimport { useLayoutEffectSkipFirst } from \"../useLayoutEffectSkipFirst\";\nimport { EditSession } from \"./EditSession\";\n// import { useNotifications } from \"@vuu-ui/vuu-notifications\";\n\nexport type EditMode = \"edit\" | \"view\";\n\nexport interface EditableTableHookProps {\n /**\n * columns to be included in subscription. If not provided,\n * default will be '*'. Ignored if dataSource prop present.\n */\n columns?: string[];\n dataSource?: DataSource;\n editSessionMode?: EditSessionMode;\n isEditMode: boolean;\n onCancel: () => void;\n onSave: () => void;\n /**\n * If dataSource not provided, new DataSource\n * will be created using table and columns\n */\n table?: VuuTable;\n}\n\nexport const useEditableTable = ({\n columns,\n dataSource: dataSourceProp,\n editSessionMode = \"inline-all-rows\",\n isEditMode,\n onCancel,\n onSave,\n table,\n}: EditableTableHookProps) => {\n const { VuuDataSource } = useData();\n const [sessionDataSource, setSessionDataSource] = useState<\n DataSource | undefined\n >(undefined);\n // const { showNotification } = useNotifications();\n useLayoutEffectSkipFirst(() => {\n console.warn(`[useEditableTable] columns and or table changed`);\n }, [columns, table]);\n\n const dataSource = useMemo(() => {\n // The dataSource would normally be managed by client and passed in, but for\n // simple use cases we can create it here.\n if (dataSourceProp) {\n return dataSourceProp;\n } else if (table) {\n return new VuuDataSource({ columns, table });\n } else {\n throw Error(\n `useEditableTable unable to provide DataSource, neither dataSource nor table available as props`,\n );\n }\n }, [VuuDataSource, columns, dataSourceProp, table]);\n\n // The editSession will be made available to all the edit controls in scope by\n // wrapping the edit component with a DataEditingProvider.\n const editSession = useMemo(() => new EditSession(dataSource), [dataSource]);\n\n const handleCancel = useCallback(() => {\n // editTracker.dataSource = dataSource;\n try {\n editSession.end();\n onCancel();\n } catch (e) {\n //\n }\n }, [editSession, onCancel]);\n\n const handleSave = useCallback(\n async (force = false) => {\n // TODO is this right\n dataSource.resume?.();\n try {\n await editSession.end(true, force);\n if (editSession.inEditMode === false) {\n // Everything was ok data saved\n onSave();\n }\n } catch (e) {\n console.log(`[useEditableTable] handleSave ${(e as Error).message}`);\n }\n },\n [dataSource, editSession, onSave],\n );\n\n useMemo(async () => {\n console.log(`[useEditableTable] editMode ${isEditMode}`);\n if (isEditMode) {\n try {\n const sessionDataSource = await editSession.begin(editSessionMode);\n if (sessionDataSource) {\n setSessionDataSource(sessionDataSource);\n }\n } catch (e) {\n console.error(e);\n // deal with error\n // showNotification?.({\n // header: \"Error unable to edit\",\n // status: \"error\",\n // type: \"toast\",\n // });\n onCancel();\n }\n } else {\n await editSession.end();\n }\n }, [editSession, editSessionMode, isEditMode, onCancel]);\n\n return {\n dataSource,\n editSession,\n onCancel: handleCancel,\n onSave: handleSave,\n sessionDataSource,\n };\n};\n"],"names":["useData","useState","useLayoutEffectSkipFirst","useMemo","EditSession","useCallback","sessionDataSource"],"mappings":";;;;;;;AA6BO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,OAAA;AAAA,EACA,UAAY,EAAA,cAAA;AAAA,EACZ,eAAkB,GAAA,iBAAA;AAAA,EAClB,UAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAA8B,KAAA;AAC5B,EAAM,MAAA,EAAE,aAAc,EAAA,GAAIA,oBAAQ,EAAA;AAClC,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIC,2CAEhD,KAAS,CAAA,CAAA;AAEX,EAAAC,iDAAA,CAAyB,MAAM;AAC7B,IAAA,OAAA,CAAQ,KAAK,CAAiD,+CAAA,CAAA,CAAA;AAAA,GAC7D,EAAA,CAAC,OAAS,EAAA,KAAK,CAAC,CAAA;AAEnB,EAAM,MAAA,UAAA,GAAaC,0CAAQ,MAAM;AAG/B,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAO,OAAA,cAAA;AAAA,eACE,KAAO,EAAA;AAChB,MAAA,OAAO,IAAI,aAAA,CAAc,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,KACtC,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,CAAA,8FAAA;AAAA,OACF;AAAA;AACF,KACC,CAAC,aAAA,EAAe,OAAS,EAAA,cAAA,EAAgB,KAAK,CAAC,CAAA;AAIlD,EAAM,MAAA,WAAA,GAAcA,0CAAQ,MAAM,IAAIC,wBAAY,UAAU,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAE3E,EAAM,MAAA,YAAA,GAAeC,8CAAY,MAAM;AAErC,IAAI,IAAA;AACF,MAAA,WAAA,CAAY,GAAI,EAAA;AAChB,MAAS,QAAA,EAAA;AAAA,aACF,CAAG,EAAA;AAAA;AAEZ,GACC,EAAA,CAAC,WAAa,EAAA,QAAQ,CAAC,CAAA;AAE1B,EAAA,MAAM,UAAa,GAAAA,6CAAA;AAAA,IACjB,OAAO,QAAQ,KAAU,KAAA;AAEvB,MAAA,UAAA,CAAW,MAAS,IAAA;AACpB,MAAI,IAAA;AACF,QAAM,MAAA,WAAA,CAAY,GAAI,CAAA,IAAA,EAAM,KAAK,CAAA;AACjC,QAAI,IAAA,WAAA,CAAY,eAAe,KAAO,EAAA;AAEpC,UAAO,MAAA,EAAA;AAAA;AACT,eACO,CAAG,EAAA;AACV,QAAA,OAAA,CAAQ,GAAI,CAAA,CAAA,8BAAA,EAAkC,CAAY,CAAA,OAAO,CAAE,CAAA,CAAA;AAAA;AACrE,KACF;AAAA,IACA,CAAC,UAAY,EAAA,WAAA,EAAa,MAAM;AAAA,GAClC;AAEA,EAAAF,yCAAA,CAAQ,YAAY;AAClB,IAAQ,OAAA,CAAA,GAAA,CAAI,CAA+B,4BAAA,EAAA,UAAU,CAAE,CAAA,CAAA;AACvD,IAAA,IAAI,UAAY,EAAA;AACd,MAAI,IAAA;AACF,QAAA,MAAMG,kBAAoB,GAAA,MAAM,WAAY,CAAA,KAAA,CAAM,eAAe,CAAA;AACjE,QAAA,IAAIA,kBAAmB,EAAA;AACrB,UAAA,oBAAA,CAAqBA,kBAAiB,CAAA;AAAA;AACxC,eACO,CAAG,EAAA;AACV,QAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AAOf,QAAS,QAAA,EAAA;AAAA;AACX,KACK,MAAA;AACL,MAAA,MAAM,YAAY,GAAI,EAAA;AAAA;AACxB,KACC,CAAC,WAAA,EAAa,eAAiB,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA;AAEvD,EAAO,OAAA;AAAA,IACL,UAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,MAAQ,EAAA,UAAA;AAAA,IACR;AAAA,GACF;AACF;;;;"}
1
+ {"version":3,"file":"useEditableTable.js","sources":["../../../../../../../packages/vuu-utils/src/data-editing/useEditableTable.ts"],"sourcesContent":["import { DataSource, EditSessionMode } from \"@vuu-ui/vuu-data-types\";\n// import { useNotifications } from \"@vuu-ui/vuu-notifications\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { useData } from \"../context-definitions/DataProvider\";\nimport { useLayoutEffectSkipFirst } from \"../useLayoutEffectSkipFirst\";\nimport { EditSession } from \"./EditSession\";\n// import { useNotifications } from \"@vuu-ui/vuu-notifications\";\n\nexport type EditMode = \"edit\" | \"view\";\n\nexport interface EditableTableHookProps {\n /**\n * columns to be included in subscription. If not provided,\n * default will be '*'. Ignored if dataSource prop present.\n */\n columns?: string[];\n dataSource?: DataSource;\n editSessionMode?: EditSessionMode;\n isEditMode: boolean;\n onCancel: () => void;\n onSave: () => void;\n /**\n * If dataSource not provided, new DataSource\n * will be created using table and columns\n */\n table?: VuuTable;\n}\n\nexport const useEditableTable = ({\n columns,\n dataSource: dataSourceProp,\n editSessionMode = \"all-rows\",\n isEditMode,\n onCancel,\n onSave,\n table,\n}: EditableTableHookProps) => {\n const { VuuDataSource } = useData();\n const [sessionDataSource, setSessionDataSource] = useState<\n DataSource | undefined\n >(undefined);\n // const { showNotification } = useNotifications();\n useLayoutEffectSkipFirst(() => {\n console.warn(`[useEditableTable] columns and or table changed`);\n }, [columns, table]);\n\n const dataSource = useMemo(() => {\n // The dataSource would normally be managed by client and passed in, but for\n // simple use cases we can create it here.\n if (dataSourceProp) {\n return dataSourceProp;\n } else if (table) {\n return new VuuDataSource({ columns, table });\n } else {\n throw Error(\n `useEditableTable unable to provide DataSource, neither dataSource nor table available as props`,\n );\n }\n }, [VuuDataSource, columns, dataSourceProp, table]);\n\n // The editSession will be made available to all the edit controls in scope by\n // wrapping the edit component with a DataEditingProvider.\n const editSession = useMemo(() => new EditSession(dataSource), [dataSource]);\n\n const handleCancel = useCallback(() => {\n // editTracker.dataSource = dataSource;\n try {\n editSession.end();\n onCancel();\n } catch (e) {\n //\n }\n }, [editSession, onCancel]);\n\n const handleSave = useCallback(async () => {\n dataSource.resume?.();\n try {\n await editSession.end(true);\n onSave();\n } catch (e) {\n // cleanup\n }\n }, [dataSource, editSession, onSave]);\n\n useMemo(async () => {\n console.log(`[useEditableTable] editMode ${isEditMode}`);\n if (isEditMode) {\n try {\n const sessionDataSource = await editSession.begin(editSessionMode);\n if (sessionDataSource) {\n setSessionDataSource(sessionDataSource);\n }\n } catch (e) {\n console.error(e);\n // deal with error\n // showNotification?.({\n // header: \"Error unable to edit\",\n // status: \"error\",\n // type: \"toast\",\n // });\n onCancel();\n }\n }\n }, [editSession, editSessionMode, isEditMode, onCancel]);\n\n return {\n dataSource,\n editSession,\n onCancel: handleCancel,\n onSave: handleSave,\n sessionDataSource,\n };\n};\n"],"names":["useData","useState","useLayoutEffectSkipFirst","useMemo","EditSession","useCallback","sessionDataSource"],"mappings":";;;;;;;AA6BO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,OAAA;AAAA,EACA,UAAY,EAAA,cAAA;AAAA,EACZ,eAAkB,GAAA,UAAA;AAAA,EAClB,UAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAA8B,KAAA;AAC5B,EAAM,MAAA,EAAE,aAAc,EAAA,GAAIA,oBAAQ,EAAA;AAClC,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIC,eAEhD,KAAS,CAAA,CAAA;AAEX,EAAAC,iDAAA,CAAyB,MAAM;AAC7B,IAAA,OAAA,CAAQ,KAAK,CAAiD,+CAAA,CAAA,CAAA;AAAA,GAC7D,EAAA,CAAC,OAAS,EAAA,KAAK,CAAC,CAAA;AAEnB,EAAM,MAAA,UAAA,GAAaC,cAAQ,MAAM;AAG/B,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAO,OAAA,cAAA;AAAA,eACE,KAAO,EAAA;AAChB,MAAA,OAAO,IAAI,aAAA,CAAc,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,KACtC,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,CAAA,8FAAA;AAAA,OACF;AAAA;AACF,KACC,CAAC,aAAA,EAAe,OAAS,EAAA,cAAA,EAAgB,KAAK,CAAC,CAAA;AAIlD,EAAM,MAAA,WAAA,GAAcA,cAAQ,MAAM,IAAIC,wBAAY,UAAU,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAE3E,EAAM,MAAA,YAAA,GAAeC,kBAAY,MAAM;AAErC,IAAI,IAAA;AACF,MAAA,WAAA,CAAY,GAAI,EAAA;AAChB,MAAS,QAAA,EAAA;AAAA,aACF,CAAG,EAAA;AAAA;AAEZ,GACC,EAAA,CAAC,WAAa,EAAA,QAAQ,CAAC,CAAA;AAE1B,EAAM,MAAA,UAAA,GAAaA,kBAAY,YAAY;AACzC,IAAA,UAAA,CAAW,MAAS,IAAA;AACpB,IAAI,IAAA;AACF,MAAM,MAAA,WAAA,CAAY,IAAI,IAAI,CAAA;AAC1B,MAAO,MAAA,EAAA;AAAA,aACA,CAAG,EAAA;AAAA;AAEZ,GACC,EAAA,CAAC,UAAY,EAAA,WAAA,EAAa,MAAM,CAAC,CAAA;AAEpC,EAAAF,aAAA,CAAQ,YAAY;AAClB,IAAQ,OAAA,CAAA,GAAA,CAAI,CAA+B,4BAAA,EAAA,UAAU,CAAE,CAAA,CAAA;AACvD,IAAA,IAAI,UAAY,EAAA;AACd,MAAI,IAAA;AACF,QAAA,MAAMG,kBAAoB,GAAA,MAAM,WAAY,CAAA,KAAA,CAAM,eAAe,CAAA;AACjE,QAAA,IAAIA,kBAAmB,EAAA;AACrB,UAAA,oBAAA,CAAqBA,kBAAiB,CAAA;AAAA;AACxC,eACO,CAAG,EAAA;AACV,QAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AAOf,QAAS,QAAA,EAAA;AAAA;AACX;AACF,KACC,CAAC,WAAA,EAAa,eAAiB,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA;AAEvD,EAAO,OAAA;AAAA,IACL,UAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,MAAQ,EAAA,UAAA;AAAA,IACR;AAAA,GACF;AACF;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var __WEBPACK_EXTERNAL_MODULE__vuu_ui_vuu_filter_parser__ = require('@vuu-ui/vuu-filter-parser');
3
+ var vuuFilterParser = require('@vuu-ui/vuu-filter-parser');
4
4
  var eventEmitter = require('../event-emitter.js');
5
5
  var index = require('../nanoid/index.js');
6
6
  var datasourceUtils = require('./datasource-utils.js');
@@ -69,6 +69,7 @@ class BaseDataSource extends eventEmitter.EventEmitter {
69
69
  filterSpec,
70
70
  viewport = this.viewport || (this.viewport = index.uuid())
71
71
  }, callback) {
72
+ console.log(`[BaseDataSource] subscribe to ${this.viewport}`);
72
73
  this._clientCallback = callback;
73
74
  this.viewport = viewport;
74
75
  if (aggregations || baseFilterSpec || columns || filterSpec || groupBy || sort) {
@@ -253,7 +254,7 @@ class BaseDataSource extends eventEmitter.EventEmitter {
253
254
  ...config,
254
255
  filterSpec: {
255
256
  filter: config.filterSpec.filter,
256
- filterStruct: __WEBPACK_EXTERNAL_MODULE__vuu_ui_vuu_filter_parser__.parseFilter(config.filterSpec.filter)
257
+ filterStruct: vuuFilterParser.parseFilter(config.filterSpec.filter)
257
258
  }
258
259
  } : config;
259
260
  if (preserveExistingConfigAttributes) {
@@ -1 +1 @@
1
- {"version":3,"file":"BaseDataSource.js","sources":["../../../../../../../packages/vuu-utils/src/datasource/BaseDataSource.ts"],"sourcesContent":["import type {\n DataSource,\n DataSourceConfig,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceFilter,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceSuspenseProps,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuRange,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { EventEmitter } from \"../event-emitter\";\nimport { uuid } from \"../nanoid\";\nimport {\n DataSourceConfigChanges,\n isConfigChanged,\n stripVisualLink,\n vanillaConfig,\n withConfigDefaults,\n} from \"./datasource-utils\";\nimport { Range } from \"../range-utils\";\nimport { filterAsQuery } from \"../filters\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\n\nexport type ConfigWithVisualLink = WithBaseFilter<WithFullConfig> & {\n visualLink?: LinkDescriptorWithLabel;\n};\n\nexport const defaultSuspenseProps: DataSourceSuspenseProps = {\n escalateToDisable: true,\n};\n\nexport abstract class BaseDataSource\n extends EventEmitter<DataSourceEvents>\n implements Pick<DataSource, \"config\">\n{\n // This should simply be id\n public viewport: string;\n\n protected _clientCallback: DataSourceSubscribeCallback | undefined;\n protected _configWithVisualLink: ConfigWithVisualLink = vanillaConfig;\n protected _impendingConfigWithVisualLink: ConfigWithVisualLink | undefined =\n undefined;\n protected _range = Range(0, 0);\n protected _size = 0;\n protected _title: string | undefined;\n protected _defaultSuspenseProps: DataSourceSuspenseProps;\n\n #freezeTimestamp: number | undefined = undefined;\n #pageCount = 0;\n\n private awaitingConfirmationOfConfigChanges = false;\n\n constructor({\n aggregations,\n baseFilterSpec,\n columns,\n filterSpec,\n groupBy,\n sort,\n suspenseProps = defaultSuspenseProps,\n title,\n viewport,\n }: Omit<DataSourceConstructorProps, \"table\">) {\n super();\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\n aggregations: aggregations || this._configWithVisualLink.aggregations,\n baseFilterSpec:\n baseFilterSpec || this._configWithVisualLink.baseFilterSpec,\n columns: columns || this._configWithVisualLink.columns,\n filterSpec: filterSpec || this._configWithVisualLink.filterSpec,\n groupBy: groupBy || this._configWithVisualLink.groupBy,\n sort: sort || this._configWithVisualLink.sort,\n };\n this._defaultSuspenseProps = suspenseProps;\n this._title = title;\n this.viewport = viewport ?? \"\";\n }\n\n subscribe(\n {\n baseFilterSpec,\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filterSpec,\n viewport = this.viewport || (this.viewport = uuid()),\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n this._clientCallback = callback;\n this.viewport = viewport;\n\n if (\n aggregations ||\n baseFilterSpec ||\n columns ||\n filterSpec ||\n groupBy ||\n sort\n ) {\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\n aggregations: aggregations || this._configWithVisualLink.aggregations,\n baseFilterSpec:\n baseFilterSpec || this._configWithVisualLink.baseFilterSpec,\n columns: columns || this._configWithVisualLink.columns,\n filterSpec: filterSpec || this._configWithVisualLink.filterSpec,\n groupBy: groupBy || this._configWithVisualLink.groupBy,\n sort: sort || this._configWithVisualLink.sort,\n };\n }\n\n // store the range before we await the server. It's is possible the\n // range will be updated from the client before we have been able to\n // subscribe. This ensures we will subscribe with latest value.\n if (range) {\n this._range = range;\n this.emit(\"range\", range);\n }\n }\n\n get aggregations() {\n return this._configWithVisualLink.aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this.config = {\n ...this._configWithVisualLink,\n aggregations,\n };\n this.emit(\"config\", this._configWithVisualLink, this.range);\n }\n\n get baseFilter() {\n return this._configWithVisualLink.baseFilterSpec;\n }\n\n set baseFilter(baseFilter: DataSourceFilter | undefined) {\n this.config = {\n ...this._configWithVisualLink,\n baseFilterSpec: baseFilter,\n };\n }\n\n get columns() {\n return this._configWithVisualLink.columns;\n }\n\n set columns(columns: string[]) {\n this.config = {\n ...this._configWithVisualLink,\n columns,\n };\n }\n\n get filter() {\n return this._configWithVisualLink.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n this.config = {\n ...this._configWithVisualLink,\n filterSpec: filter,\n };\n }\n\n setFilter(filter: Filter) {\n const dataSourceFilter: DataSourceFilter = {\n filter: filterAsQuery(filter),\n filterStruct: filter,\n };\n this.filter = dataSourceFilter;\n }\n\n clearFilter() {\n this.filter = { filter: \"\" };\n }\n\n get isAwaitingConfirmationOfConfigChange() {\n return this._impendingConfigWithVisualLink !== undefined;\n }\n\n protected confirmConfigChange() {\n if (this._impendingConfigWithVisualLink) {\n this._configWithVisualLink = this._impendingConfigWithVisualLink;\n this._impendingConfigWithVisualLink = undefined;\n this.emit(\"config\", this._configWithVisualLink, this.range, true);\n } else {\n throw Error(\n `[BaseDataSource], unexpected call to confirmConfigChange, no changes pending`,\n );\n }\n }\n\n get config() {\n return stripVisualLink(\n this._impendingConfigWithVisualLink ?? this._configWithVisualLink,\n );\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const confirmed = this.awaitingConfirmationOfConfigChanges\n ? true\n : undefined;\n // TODO what happens if config is set and we still have an unconfirmed change ?\n this.awaitingConfirmationOfConfigChanges = false;\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n requestAnimationFrame(() => {\n this.emit(\n \"config\",\n this._configWithVisualLink,\n this.range,\n confirmed,\n configChanges,\n );\n });\n }\n }\n\n get impendingConfig() {\n return this._impendingConfigWithVisualLink;\n }\n /**\n * This can be set by subclass in cases where we want to await ACK of async request\n * before we go ahead and apply change to config.\n * It is set in place of 'config' itself and it is then the responsibility of the client\n * to call 'confirmConfigChange' once confirmation of the change is received.\n * Client can check 'isAwaitingConfirmationOfConfigChange' to see if a change is pending\n * confirmation.\n */\n set impendingConfig(config: undefined | WithBaseFilter<WithFullConfig>) {\n if (config) {\n this.awaitingConfirmationOfConfigChanges = true;\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n this.emit(\"config\", this.config, this.range, false, configChanges);\n }\n } else {\n throw Error(\n `[BaseDataSource] ''unsetting impendingConfig is not currently supported`,\n );\n }\n }\n\n get pageCount() {\n return this.#pageCount;\n }\n\n set pageCount(pageCount: number) {\n if (pageCount !== this.#pageCount) {\n this.#pageCount = pageCount;\n this.emit(\"page-count\", pageCount);\n }\n }\n\n get range() {\n return this._range;\n }\n\n set range(range: Range) {\n if (range.from !== this._range.from || range.to !== this._range.to) {\n this._range = range;\n this.pageCount = Math.ceil(this._size / (range.to - range.from));\n this.rangeRequest(range.withBuffer);\n requestAnimationFrame(() => {\n this.emit(\"range\", range);\n });\n }\n }\n\n get size() {\n return this._size;\n }\n\n set size(size: number) {\n this._size = size;\n if (this.range.to !== 0) {\n const pageCount = Math.ceil(size / (this.range.to - this.range.from));\n this.pageCount = pageCount;\n }\n }\n\n get sort() {\n return this._configWithVisualLink.sort;\n }\n\n set sort(sort: VuuSort) {\n this.config = {\n ...this._configWithVisualLink,\n sort,\n };\n this.emit(\"config\", this._configWithVisualLink, this.range);\n }\n\n get title() {\n return this._title ?? \"\";\n }\n\n set title(title: string) {\n this._title = title;\n this.emit(\"title-changed\", this.viewport ?? \"\", title);\n }\n\n private applyConfig(\n config: WithBaseFilter<DataSourceConfig>,\n preserveExistingConfigAttributes = false,\n ): DataSourceConfigChanges | undefined {\n const { noChanges, ...otherChanges } = isConfigChanged(\n this._configWithVisualLink,\n config,\n );\n if (noChanges !== true) {\n if (config) {\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n if (preserveExistingConfigAttributes) {\n if (this.awaitingConfirmationOfConfigChanges) {\n this._impendingConfigWithVisualLink = {\n ...this._configWithVisualLink,\n ...config,\n };\n } else {\n this._impendingConfigWithVisualLink = undefined;\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\n ...config,\n };\n }\n } else {\n if (this.awaitingConfirmationOfConfigChanges) {\n this._impendingConfigWithVisualLink = withConfigDefaults(newConfig);\n } else {\n this._impendingConfigWithVisualLink = undefined;\n this._configWithVisualLink = withConfigDefaults(newConfig);\n }\n }\n return otherChanges;\n }\n }\n }\n\n freeze() {\n if (!this.isFrozen) {\n this.#freezeTimestamp = new Date().getTime();\n this.emit(\"freeze\", true, this.#freezeTimestamp);\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n unfreeze() {\n if (this.isFrozen) {\n const freezeTimestamp = this.#freezeTimestamp as number;\n this.#freezeTimestamp = undefined;\n this.emit(\"freeze\", false, freezeTimestamp);\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n get freezeTimestamp() {\n return this.#freezeTimestamp;\n }\n\n get isFrozen() {\n return typeof this.#freezeTimestamp === \"number\";\n }\n\n abstract rangeRequest(range: VuuRange): void;\n}\n"],"names":["EventEmitter","vanillaConfig","Range","uuid","filterAsQuery","stripVisualLink","isConfigChanged","parseFilter","withConfigDefaults"],"mappings":"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"}
1
+ {"version":3,"file":"BaseDataSource.js","sources":["../../../../../../../packages/vuu-utils/src/datasource/BaseDataSource.ts"],"sourcesContent":["import type {\n DataSource,\n DataSourceConfig,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceFilter,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceSuspenseProps,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuRange,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { EventEmitter } from \"../event-emitter\";\nimport { uuid } from \"../nanoid\";\nimport {\n DataSourceConfigChanges,\n isConfigChanged,\n stripVisualLink,\n vanillaConfig,\n withConfigDefaults,\n} from \"./datasource-utils\";\nimport { Range } from \"../range-utils\";\nimport { filterAsQuery } from \"../filters\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\n\nexport type ConfigWithVisualLink = WithBaseFilter<WithFullConfig> & {\n visualLink?: LinkDescriptorWithLabel;\n};\n\nexport const defaultSuspenseProps: DataSourceSuspenseProps = {\n escalateToDisable: true,\n};\n\nexport abstract class BaseDataSource\n extends EventEmitter<DataSourceEvents>\n implements Pick<DataSource, \"config\">\n{\n // This should simply be id\n public viewport: string;\n\n protected _clientCallback: DataSourceSubscribeCallback | undefined;\n protected _configWithVisualLink: ConfigWithVisualLink = vanillaConfig;\n protected _impendingConfigWithVisualLink: ConfigWithVisualLink | undefined =\n undefined;\n protected _range = Range(0, 0);\n protected _size = 0;\n protected _title: string | undefined;\n protected _defaultSuspenseProps: DataSourceSuspenseProps;\n\n #freezeTimestamp: number | undefined = undefined;\n #pageCount = 0;\n\n private awaitingConfirmationOfConfigChanges = false;\n\n constructor({\n aggregations,\n baseFilterSpec,\n columns,\n filterSpec,\n groupBy,\n sort,\n suspenseProps = defaultSuspenseProps,\n title,\n viewport,\n }: Omit<DataSourceConstructorProps, \"table\">) {\n super();\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\n aggregations: aggregations || this._configWithVisualLink.aggregations,\n baseFilterSpec:\n baseFilterSpec || this._configWithVisualLink.baseFilterSpec,\n columns: columns || this._configWithVisualLink.columns,\n filterSpec: filterSpec || this._configWithVisualLink.filterSpec,\n groupBy: groupBy || this._configWithVisualLink.groupBy,\n sort: sort || this._configWithVisualLink.sort,\n };\n this._defaultSuspenseProps = suspenseProps;\n this._title = title;\n this.viewport = viewport ?? \"\";\n }\n\n subscribe(\n {\n baseFilterSpec,\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filterSpec,\n viewport = this.viewport || (this.viewport = uuid()),\n }: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n console.log(`[BaseDataSource] subscribe to ${this.viewport}`);\n this._clientCallback = callback;\n this.viewport = viewport;\n\n if (\n aggregations ||\n baseFilterSpec ||\n columns ||\n filterSpec ||\n groupBy ||\n sort\n ) {\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\n aggregations: aggregations || this._configWithVisualLink.aggregations,\n baseFilterSpec:\n baseFilterSpec || this._configWithVisualLink.baseFilterSpec,\n columns: columns || this._configWithVisualLink.columns,\n filterSpec: filterSpec || this._configWithVisualLink.filterSpec,\n groupBy: groupBy || this._configWithVisualLink.groupBy,\n sort: sort || this._configWithVisualLink.sort,\n };\n }\n\n // store the range before we await the server. It's is possible the\n // range will be updated from the client before we have been able to\n // subscribe. This ensures we will subscribe with latest value.\n if (range) {\n this._range = range;\n this.emit(\"range\", range);\n }\n }\n\n get aggregations() {\n return this._configWithVisualLink.aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this.config = {\n ...this._configWithVisualLink,\n aggregations,\n };\n this.emit(\"config\", this._configWithVisualLink, this.range);\n }\n\n get baseFilter() {\n return this._configWithVisualLink.baseFilterSpec;\n }\n\n set baseFilter(baseFilter: DataSourceFilter | undefined) {\n this.config = {\n ...this._configWithVisualLink,\n baseFilterSpec: baseFilter,\n };\n }\n\n get columns() {\n return this._configWithVisualLink.columns;\n }\n\n set columns(columns: string[]) {\n this.config = {\n ...this._configWithVisualLink,\n columns,\n };\n }\n\n get filter() {\n return this._configWithVisualLink.filterSpec;\n }\n\n set filter(filter: DataSourceFilter) {\n this.config = {\n ...this._configWithVisualLink,\n filterSpec: filter,\n };\n }\n\n setFilter(filter: Filter) {\n const dataSourceFilter: DataSourceFilter = {\n filter: filterAsQuery(filter),\n filterStruct: filter,\n };\n this.filter = dataSourceFilter;\n }\n\n clearFilter() {\n this.filter = { filter: \"\" };\n }\n\n get isAwaitingConfirmationOfConfigChange() {\n return this._impendingConfigWithVisualLink !== undefined;\n }\n\n protected confirmConfigChange() {\n if (this._impendingConfigWithVisualLink) {\n this._configWithVisualLink = this._impendingConfigWithVisualLink;\n this._impendingConfigWithVisualLink = undefined;\n this.emit(\"config\", this._configWithVisualLink, this.range, true);\n } else {\n throw Error(\n `[BaseDataSource], unexpected call to confirmConfigChange, no changes pending`,\n );\n }\n }\n\n get config() {\n return stripVisualLink(\n this._impendingConfigWithVisualLink ?? this._configWithVisualLink,\n );\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const confirmed = this.awaitingConfirmationOfConfigChanges\n ? true\n : undefined;\n // TODO what happens if config is set and we still have an unconfirmed change ?\n this.awaitingConfirmationOfConfigChanges = false;\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n requestAnimationFrame(() => {\n this.emit(\n \"config\",\n this._configWithVisualLink,\n this.range,\n confirmed,\n configChanges,\n );\n });\n }\n }\n\n get impendingConfig() {\n return this._impendingConfigWithVisualLink;\n }\n /**\n * This can be set by subclass in cases where we want to await ACK of async request\n * before we go ahead and apply change to config.\n * It is set in place of 'config' itself and it is then the responsibility of the client\n * to call 'confirmConfigChange' once confirmation of the change is received.\n * Client can check 'isAwaitingConfirmationOfConfigChange' to see if a change is pending\n * confirmation.\n */\n set impendingConfig(config: undefined | WithBaseFilter<WithFullConfig>) {\n if (config) {\n this.awaitingConfirmationOfConfigChanges = true;\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n this.emit(\"config\", this.config, this.range, false, configChanges);\n }\n } else {\n throw Error(\n `[BaseDataSource] ''unsetting impendingConfig is not currently supported`,\n );\n }\n }\n\n get pageCount() {\n return this.#pageCount;\n }\n\n set pageCount(pageCount: number) {\n if (pageCount !== this.#pageCount) {\n this.#pageCount = pageCount;\n this.emit(\"page-count\", pageCount);\n }\n }\n\n get range() {\n return this._range;\n }\n\n set range(range: Range) {\n if (range.from !== this._range.from || range.to !== this._range.to) {\n this._range = range;\n this.pageCount = Math.ceil(this._size / (range.to - range.from));\n this.rangeRequest(range.withBuffer);\n requestAnimationFrame(() => {\n this.emit(\"range\", range);\n });\n }\n }\n\n get size() {\n return this._size;\n }\n\n set size(size: number) {\n this._size = size;\n if (this.range.to !== 0) {\n const pageCount = Math.ceil(size / (this.range.to - this.range.from));\n this.pageCount = pageCount;\n }\n }\n\n get sort() {\n return this._configWithVisualLink.sort;\n }\n\n set sort(sort: VuuSort) {\n this.config = {\n ...this._configWithVisualLink,\n sort,\n };\n this.emit(\"config\", this._configWithVisualLink, this.range);\n }\n\n get title() {\n return this._title ?? \"\";\n }\n\n set title(title: string) {\n this._title = title;\n this.emit(\"title-changed\", this.viewport ?? \"\", title);\n }\n\n private applyConfig(\n config: WithBaseFilter<DataSourceConfig>,\n preserveExistingConfigAttributes = false,\n ): DataSourceConfigChanges | undefined {\n const { noChanges, ...otherChanges } = isConfigChanged(\n this._configWithVisualLink,\n config,\n );\n if (noChanges !== true) {\n if (config) {\n const newConfig: DataSourceConfig =\n config?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n if (preserveExistingConfigAttributes) {\n if (this.awaitingConfirmationOfConfigChanges) {\n this._impendingConfigWithVisualLink = {\n ...this._configWithVisualLink,\n ...config,\n };\n } else {\n this._impendingConfigWithVisualLink = undefined;\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\n ...config,\n };\n }\n } else {\n if (this.awaitingConfirmationOfConfigChanges) {\n this._impendingConfigWithVisualLink = withConfigDefaults(newConfig);\n } else {\n this._impendingConfigWithVisualLink = undefined;\n this._configWithVisualLink = withConfigDefaults(newConfig);\n }\n }\n return otherChanges;\n }\n }\n }\n\n freeze() {\n if (!this.isFrozen) {\n this.#freezeTimestamp = new Date().getTime();\n this.emit(\"freeze\", true, this.#freezeTimestamp);\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n unfreeze() {\n if (this.isFrozen) {\n const freezeTimestamp = this.#freezeTimestamp as number;\n this.#freezeTimestamp = undefined;\n this.emit(\"freeze\", false, freezeTimestamp);\n } else {\n throw Error(\n \"[BaseDataSource] cannot freeze, dataSource is already frozen\",\n );\n }\n }\n get freezeTimestamp() {\n return this.#freezeTimestamp;\n }\n\n get isFrozen() {\n return typeof this.#freezeTimestamp === \"number\";\n }\n\n abstract rangeRequest(range: VuuRange): void;\n}\n"],"names":["EventEmitter","vanillaConfig","Range","uuid","filterAsQuery","stripVisualLink","isConfigChanged","parseFilter","withConfigDefaults"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var __WEBPACK_EXTERNAL_MODULE__vuu_ui_vuu_filter_parser__ = require('@vuu-ui/vuu-filter-parser');
3
+ var vuuFilterParser = require('@vuu-ui/vuu-filter-parser');
4
4
 
5
5
  const combineFilters = ({
6
6
  baseFilterSpec,
@@ -18,7 +18,7 @@ const combineFilters = ({
18
18
  ...config,
19
19
  filterSpec: {
20
20
  filter: filterSpec.filter,
21
- filterStruct: __WEBPACK_EXTERNAL_MODULE__vuu_ui_vuu_filter_parser__.parseFilter(filterSpec.filter)
21
+ filterStruct: vuuFilterParser.parseFilter(filterSpec.filter)
22
22
  }
23
23
  };
24
24
  }
@@ -29,7 +29,7 @@ const combineFilters = ({
29
29
  ...config,
30
30
  filterSpec: {
31
31
  filter: combinedFilter,
32
- filterStruct: combinedFilter.length > 0 ? __WEBPACK_EXTERNAL_MODULE__vuu_ui_vuu_filter_parser__.parseFilter(combinedFilter) : void 0
32
+ filterStruct: combinedFilter.length > 0 ? vuuFilterParser.parseFilter(combinedFilter) : void 0
33
33
  }
34
34
  };
35
35
  return newConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"datasource-filter-utils.js","sources":["../../../../../../../packages/vuu-utils/src/datasource/datasource-filter-utils.ts"],"sourcesContent":["import { WithBaseFilter, WithFullConfig } from \"@vuu-ui/vuu-data-types\";\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\n\n// TODO as we mugrate to a Filter only API, remove parseFilter\nexport const combineFilters = ({\n baseFilterSpec,\n filterSpec,\n ...config\n}: WithBaseFilter<WithFullConfig>) => {\n if (baseFilterSpec === undefined || baseFilterSpec.filter === \"\") {\n if (filterSpec.filterStruct || filterSpec.filter === \"\") {\n return {\n ...config,\n filterSpec,\n };\n } else {\n return {\n ...config,\n filterSpec: {\n filter: filterSpec.filter,\n filterStruct: parseFilter(filterSpec.filter),\n },\n };\n }\n } else {\n const baseFilterQuery = baseFilterSpec.filter;\n const combinedFilter =\n filterSpec.filter.length > 0 && baseFilterQuery.length > 0\n ? `${filterSpec.filter} and ${baseFilterQuery}`\n : filterSpec.filter || baseFilterQuery;\n\n const newConfig: WithFullConfig = {\n ...config,\n filterSpec: {\n filter: combinedFilter,\n filterStruct:\n combinedFilter.length > 0 ? parseFilter(combinedFilter) : undefined,\n },\n };\n\n return newConfig;\n }\n};\n"],"names":["parseFilter"],"mappings":";;;;AAIO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,cAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAG;AACL,CAAsC,KAAA;AACpC,EAAA,IAAI,cAAmB,KAAA,KAAA,CAAA,IAAa,cAAe,CAAA,MAAA,KAAW,EAAI,EAAA;AAChE,IAAA,IAAI,UAAW,CAAA,YAAA,IAAgB,UAAW,CAAA,MAAA,KAAW,EAAI,EAAA;AACvD,MAAO,OAAA;AAAA,QACL,GAAG,MAAA;AAAA,QACH;AAAA,OACF;AAAA,KACK,MAAA;AACL,MAAO,OAAA;AAAA,QACL,GAAG,MAAA;AAAA,QACH,UAAY,EAAA;AAAA,UACV,QAAQ,UAAW,CAAA,MAAA;AAAA,UACnB,YAAA,EAAcA,iEAAY,CAAA,UAAA,CAAW,MAAM;AAAA;AAC7C,OACF;AAAA;AACF,GACK,MAAA;AACL,IAAA,MAAM,kBAAkB,cAAe,CAAA,MAAA;AACvC,IAAA,MAAM,cACJ,GAAA,UAAA,CAAW,MAAO,CAAA,MAAA,GAAS,KAAK,eAAgB,CAAA,MAAA,GAAS,CACrD,GAAA,CAAA,EAAG,WAAW,MAAM,CAAA,KAAA,EAAQ,eAAe,CAAA,CAAA,GAC3C,WAAW,MAAU,IAAA,eAAA;AAE3B,IAAA,MAAM,SAA4B,GAAA;AAAA,MAChC,GAAG,MAAA;AAAA,MACH,UAAY,EAAA;AAAA,QACV,MAAQ,EAAA,cAAA;AAAA,QACR,cACE,cAAe,CAAA,MAAA,GAAS,CAAI,GAAAA,iEAAA,CAAY,cAAc,CAAI,GAAA,KAAA;AAAA;AAC9D,KACF;AAEA,IAAO,OAAA,SAAA;AAAA;AAEX;;;;"}
1
+ {"version":3,"file":"datasource-filter-utils.js","sources":["../../../../../../../packages/vuu-utils/src/datasource/datasource-filter-utils.ts"],"sourcesContent":["import { WithBaseFilter, WithFullConfig } from \"@vuu-ui/vuu-data-types\";\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\n\n// TODO as we mugrate to a Filter only API, remove parseFilter\nexport const combineFilters = ({\n baseFilterSpec,\n filterSpec,\n ...config\n}: WithBaseFilter<WithFullConfig>) => {\n if (baseFilterSpec === undefined || baseFilterSpec.filter === \"\") {\n if (filterSpec.filterStruct || filterSpec.filter === \"\") {\n return {\n ...config,\n filterSpec,\n };\n } else {\n return {\n ...config,\n filterSpec: {\n filter: filterSpec.filter,\n filterStruct: parseFilter(filterSpec.filter),\n },\n };\n }\n } else {\n const baseFilterQuery = baseFilterSpec.filter;\n const combinedFilter =\n filterSpec.filter.length > 0 && baseFilterQuery.length > 0\n ? `${filterSpec.filter} and ${baseFilterQuery}`\n : filterSpec.filter || baseFilterQuery;\n\n const newConfig: WithFullConfig = {\n ...config,\n filterSpec: {\n filter: combinedFilter,\n filterStruct:\n combinedFilter.length > 0 ? parseFilter(combinedFilter) : undefined,\n },\n };\n\n return newConfig;\n }\n};\n"],"names":["parseFilter"],"mappings":";;;;AAIO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,cAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAG;AACL,CAAsC,KAAA;AACpC,EAAA,IAAI,cAAmB,KAAA,KAAA,CAAA,IAAa,cAAe,CAAA,MAAA,KAAW,EAAI,EAAA;AAChE,IAAA,IAAI,UAAW,CAAA,YAAA,IAAgB,UAAW,CAAA,MAAA,KAAW,EAAI,EAAA;AACvD,MAAO,OAAA;AAAA,QACL,GAAG,MAAA;AAAA,QACH;AAAA,OACF;AAAA,KACK,MAAA;AACL,MAAO,OAAA;AAAA,QACL,GAAG,MAAA;AAAA,QACH,UAAY,EAAA;AAAA,UACV,QAAQ,UAAW,CAAA,MAAA;AAAA,UACnB,YAAA,EAAcA,2BAAY,CAAA,UAAA,CAAW,MAAM;AAAA;AAC7C,OACF;AAAA;AACF,GACK,MAAA;AACL,IAAA,MAAM,kBAAkB,cAAe,CAAA,MAAA;AACvC,IAAA,MAAM,cACJ,GAAA,UAAA,CAAW,MAAO,CAAA,MAAA,GAAS,KAAK,eAAgB,CAAA,MAAA,GAAS,CACrD,GAAA,CAAA,EAAG,WAAW,MAAM,CAAA,KAAA,EAAQ,eAAe,CAAA,CAAA,GAC3C,WAAW,MAAU,IAAA,eAAA;AAE3B,IAAA,MAAM,SAA4B,GAAA;AAAA,MAChC,GAAG,MAAA;AAAA,MACH,UAAY,EAAA;AAAA,QACV,MAAQ,EAAA,cAAA;AAAA,QACR,cACE,cAAe,CAAA,MAAA,GAAS,CAAI,GAAAA,2BAAA,CAAY,cAAc,CAAI,GAAA,KAAA;AAAA;AAC9D,KACF;AAEA,IAAO,OAAA,SAAA;AAAA;AAEX;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var __WEBPACK_EXTERNAL_MODULE__internationalized_date__ = require('@internationalized/date');
3
+ var date = require('@internationalized/date');
4
4
 
5
5
  var __typeError = (msg) => {
6
6
  throw TypeError(msg);
@@ -11,7 +11,7 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
11
11
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
12
12
  var _hours, _minutes, _seconds;
13
13
  function toCalendarDate(d) {
14
- return new __WEBPACK_EXTERNAL_MODULE__internationalized_date__.CalendarDate(d.getFullYear(), d.getMonth() + 1, d.getDate());
14
+ return new date.CalendarDate(d.getFullYear(), d.getMonth() + 1, d.getDate());
15
15
  }
16
16
  const zeroTime = "00:00:00";
17
17
  const zeroTimeUnit = "00";
@@ -1 +1 @@
1
- {"version":3,"file":"date-utils.js","sources":["../../../../../../../packages/vuu-utils/src/date/date-utils.ts"],"sourcesContent":["import { CalendarDate } from \"@internationalized/date\";\n\nexport function toCalendarDate(d: Date) {\n return new CalendarDate(d.getFullYear(), d.getMonth() + 1, d.getDate());\n}\n\nexport type oneToFive = 1 | 2 | 3 | 4 | 5;\nexport type zeroToFive = 0 | oneToFive;\nexport type sixToNine = 6 | 7 | 8 | 9;\nexport type zeroToNine = zeroToFive | sixToNine;\nexport type oneToNine = oneToFive | sixToNine;\nexport type TimeUnit = \"hours\" | \"minutes\" | \"seconds\";\nexport type Hours = `${0 | 1}${zeroToNine}` | `2${0 | 1 | 2 | 3}`;\nexport type Minutes = `${zeroToFive}${zeroToNine}`;\nexport type Seconds = `${zeroToFive}${zeroToNine}`;\n\nexport type TimeUnitValue<T extends TimeUnit> = T extends \"hours\"\n ? Hours\n : T extends \"minutes\"\n ? Minutes\n : Seconds;\n\n// This should work, works fine in TypeScript playground, but hangs tsc\n// export type TimeString = `${Hours}:${Minutes}:${Seconds}`;\nexport type TimeString =\n `${number}${number}:${number}${number}:${number}${number}`;\n\ntype YYYY = `19${zeroToNine}${zeroToNine}` | `20${zeroToNine}${zeroToNine}`;\ntype MM = `0${oneToNine}` | `1${0 | 1 | 2}`;\ntype DD = `${0}${oneToNine}` | `${1 | 2}${zeroToNine}` | `3${0 | 1}`;\n\nexport type DateStringISO = `${YYYY}-${MM}-${DD}`;\n\nexport const zeroTime: TimeString = \"00:00:00\";\nexport const zeroTimeUnit: TimeUnitValue<TimeUnit> = \"00\";\n\nexport function incrementTimeUnitValue<T extends TimeUnit>(\n unit: T,\n value: TimeUnitValue<T>,\n) {\n const num = parseInt(value);\n if (unit === \"hours\" && num < 23) {\n return `${num + 1}`.padStart(2, \"0\").slice(-2) as Hours;\n } else if (unit === \"hours\" && num === 23) {\n return \"00\" as Hours;\n } else if (num < 59) {\n return `${num + 1}`.padStart(2, \"0\").slice(-2) as TimeUnitValue<T>;\n } else if (num === 59) {\n return \"00\" as TimeUnitValue<T>;\n }\n return value;\n}\n\nexport function decrementTimeUnitValue<T extends TimeUnit>(\n unit: T,\n value: TimeUnitValue<T>,\n) {\n const num = parseInt(value);\n if (unit === \"hours\" && num > 0) {\n return `${num - 1}`.padStart(2, \"0\").slice(-2) as Hours;\n } else if (unit === \"hours\" && num === 0) {\n return \"23\" as Hours;\n } else if (num > 0) {\n return `${num - 1}`.padStart(2, \"0\").slice(-2) as TimeUnitValue<T>;\n } else if (num === 0) {\n return \"59\" as TimeUnitValue<T>;\n }\n return value;\n}\n\n// TODO accept numeric values with appropriate type checks\nexport function updateTimeString<T extends TimeUnit>(\n timeString: TimeString,\n unit: T,\n value: TimeUnitValue<T>,\n): TimeString {\n const newTimeString =\n unit === \"hours\"\n ? value.concat(timeString.slice(2))\n : unit === \"minutes\"\n ? timeString.slice(0, 3).concat(value).concat(timeString.slice(5))\n : timeString.slice(0, 6).concat(value);\n if (isValidTimeString(newTimeString)) {\n return newTimeString;\n } else {\n throw Error(`[date-utils] udateTimeSting invalid result ${newTimeString}`);\n }\n}\n\nconst validTimePattern = /(?:[0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]/;\nexport const isValidTimeString = (value: unknown): value is TimeString =>\n typeof value === \"string\" && validTimePattern.test(value);\n\nexport function asTimeString(value: unknown, allowUndefined: false): TimeString;\nexport function asTimeString(\n value: unknown,\n allowUndefined?: true,\n): TimeString | undefined;\nexport function asTimeString(\n value: unknown,\n allowUndefined = false,\n): TimeString | undefined {\n if (value === undefined) {\n if (allowUndefined) {\n return value;\n } else {\n throw Error(\"[date-utils] asTimeString, value cannot be undefined\");\n }\n } else if (isValidTimeString(value)) {\n return value;\n } else if (typeof value === \"number\") {\n // we are assuming we have a value representing milliseconds since epoch.\n // If not, we will get an unpredictable time here. Is this too risky ?\n return Time.millisToTimeString(value);\n } else if (typeof value === \"string\") {\n // see if we have a long value, test if we can create time\n const valueAsInt = parseInt(value);\n if (!isNaN(valueAsInt)) {\n return Time.millisToTimeString(valueAsInt);\n }\n } else {\n throw Error(\n `[date-utils] asTimeString, value ${value} is not valid TimeString`,\n );\n }\n}\n\nexport interface Time {\n hours: number;\n minutes: number;\n seconds: number;\n asDate: (date?: Date | DateStringISO) => Date;\n}\n\nconst padZero = (val: number) => `${val}`.padStart(2, \"0\");\n\nclass TimeImpl implements Time {\n #hours: number;\n #minutes: number;\n #seconds: number;\n\n constructor(timeString: TimeString) {\n const [hours, minutes, seconds] = timeString.split(\":\");\n this.#hours = parseInt(hours);\n this.#minutes = parseInt(minutes);\n this.#seconds = parseInt(seconds);\n }\n\n get hours() {\n return this.#hours;\n }\n get minutes() {\n return this.#minutes;\n }\n get seconds() {\n return this.#seconds;\n }\n\n asDate(date?: Date | DateStringISO) {\n const dt =\n date === undefined\n ? new Date()\n : typeof date === \"string\"\n ? new Date(date)\n : date;\n\n dt.setHours(this.#hours);\n dt.setMinutes(this.#minutes);\n dt.setSeconds(this.seconds);\n dt.setMilliseconds(0);\n return dt;\n }\n\n toString() {\n return Time.toString(this.#hours, this.#minutes, this.#seconds);\n }\n}\n\nexport const Time = (timeString: TimeString): Time =>\n new TimeImpl(timeString) as Time;\n\nTime.millisToTimeString = (timestamp: number) =>\n new Date(timestamp).toTimeString().slice(0, 8) as TimeString;\n\nTime.toString = (hours: number, minutes: number, seconds: number) => {\n return `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}` as TimeString;\n};\n\nTime.isDateInMillis = (dtInMillis: string | number): boolean => {\n const n =\n typeof dtInMillis === \"number\" ? dtInMillis : Number(dtInMillis);\n if (!Number.isFinite(n) || !Number.isInteger(n)) return false;\n\n return new Date(n).getTime() === n;\n};\n"],"names":["CalendarDate"],"mappings":";;;;;;;;;;;AAAA,IAAA,MAAA,EAAA,QAAA,EAAA,QAAA;AAEO,SAAS,eAAe,CAAS,EAAA;AACtC,EAAO,OAAA,IAAIA,gEAAa,CAAA,CAAA,CAAE,WAAY,EAAA,EAAG,CAAE,CAAA,QAAA,EAAa,GAAA,CAAA,EAAG,CAAE,CAAA,OAAA,EAAS,CAAA;AACxE;AA6BO,MAAM,QAAuB,GAAA;AAC7B,MAAM,YAAwC,GAAA;AAErC,SAAA,sBAAA,CACd,MACA,KACA,EAAA;AACA,EAAM,MAAA,GAAA,GAAM,SAAS,KAAK,CAAA;AAC1B,EAAI,IAAA,IAAA,KAAS,OAAW,IAAA,GAAA,GAAM,EAAI,EAAA;AAChC,IAAO,OAAA,CAAA,EAAG,MAAM,CAAC,CAAA,CAAA,CAAG,SAAS,CAAG,EAAA,GAAG,CAAE,CAAA,KAAA,CAAM,CAAE,CAAA,CAAA;AAAA,GACpC,MAAA,IAAA,IAAA,KAAS,OAAW,IAAA,GAAA,KAAQ,EAAI,EAAA;AACzC,IAAO,OAAA,IAAA;AAAA,GACT,MAAA,IAAW,MAAM,EAAI,EAAA;AACnB,IAAO,OAAA,CAAA,EAAG,MAAM,CAAC,CAAA,CAAA,CAAG,SAAS,CAAG,EAAA,GAAG,CAAE,CAAA,KAAA,CAAM,CAAE,CAAA,CAAA;AAAA,GAC/C,MAAA,IAAW,QAAQ,EAAI,EAAA;AACrB,IAAO,OAAA,IAAA;AAAA;AAET,EAAO,OAAA,KAAA;AACT;AAEgB,SAAA,sBAAA,CACd,MACA,KACA,EAAA;AACA,EAAM,MAAA,GAAA,GAAM,SAAS,KAAK,CAAA;AAC1B,EAAI,IAAA,IAAA,KAAS,OAAW,IAAA,GAAA,GAAM,CAAG,EAAA;AAC/B,IAAO,OAAA,CAAA,EAAG,MAAM,CAAC,CAAA,CAAA,CAAG,SAAS,CAAG,EAAA,GAAG,CAAE,CAAA,KAAA,CAAM,CAAE,CAAA,CAAA;AAAA,GACpC,MAAA,IAAA,IAAA,KAAS,OAAW,IAAA,GAAA,KAAQ,CAAG,EAAA;AACxC,IAAO,OAAA,IAAA;AAAA,GACT,MAAA,IAAW,MAAM,CAAG,EAAA;AAClB,IAAO,OAAA,CAAA,EAAG,MAAM,CAAC,CAAA,CAAA,CAAG,SAAS,CAAG,EAAA,GAAG,CAAE,CAAA,KAAA,CAAM,CAAE,CAAA,CAAA;AAAA,GAC/C,MAAA,IAAW,QAAQ,CAAG,EAAA;AACpB,IAAO,OAAA,IAAA;AAAA;AAET,EAAO,OAAA,KAAA;AACT;AAGgB,SAAA,gBAAA,CACd,UACA,EAAA,IAAA,EACA,KACY,EAAA;AACZ,EAAA,MAAM,aACJ,GAAA,IAAA,KAAS,OACL,GAAA,KAAA,CAAM,OAAO,UAAW,CAAA,KAAA,CAAM,CAAC,CAAC,CAChC,GAAA,IAAA,KAAS,SACP,GAAA,UAAA,CAAW,MAAM,CAAG,EAAA,CAAC,CAAE,CAAA,MAAA,CAAO,KAAK,CAAA,CAAE,MAAO,CAAA,UAAA,CAAW,MAAM,CAAC,CAAC,CAC/D,GAAA,UAAA,CAAW,KAAM,CAAA,CAAA,EAAG,CAAC,CAAA,CAAE,OAAO,KAAK,CAAA;AAC3C,EAAI,IAAA,iBAAA,CAAkB,aAAa,CAAG,EAAA;AACpC,IAAO,OAAA,aAAA;AAAA,GACF,MAAA;AACL,IAAM,MAAA,KAAA,CAAM,CAA8C,2CAAA,EAAA,aAAa,CAAE,CAAA,CAAA;AAAA;AAE7E;AAEA,MAAM,gBAAmB,GAAA,6CAAA;AACZ,MAAA,iBAAA,GAAoB,CAAC,KAChC,KAAA,OAAO,UAAU,QAAY,IAAA,gBAAA,CAAiB,KAAK,KAAK;AAO1C,SAAA,YAAA,CACd,KACA,EAAA,cAAA,GAAiB,KACO,EAAA;AACxB,EAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAO,OAAA,KAAA;AAAA,KACF,MAAA;AACL,MAAA,MAAM,MAAM,sDAAsD,CAAA;AAAA;AACpE,GACF,MAAA,IAAW,iBAAkB,CAAA,KAAK,CAAG,EAAA;AACnC,IAAO,OAAA,KAAA;AAAA,GACT,MAAA,IAAW,OAAO,KAAA,KAAU,QAAU,EAAA;AAGpC,IAAO,OAAA,IAAA,CAAK,mBAAmB,KAAK,CAAA;AAAA,GACtC,MAAA,IAAW,OAAO,KAAA,KAAU,QAAU,EAAA;AAEpC,IAAM,MAAA,UAAA,GAAa,SAAS,KAAK,CAAA;AACjC,IAAI,IAAA,CAAC,KAAM,CAAA,UAAU,CAAG,EAAA;AACtB,MAAO,OAAA,IAAA,CAAK,mBAAmB,UAAU,CAAA;AAAA;AAC3C,GACK,MAAA;AACL,IAAM,MAAA,KAAA;AAAA,MACJ,oCAAoC,KAAK,CAAA,wBAAA;AAAA,KAC3C;AAAA;AAEJ;AASA,MAAM,OAAA,GAAU,CAAC,GAAgB,KAAA,CAAA,EAAG,GAAG,CAAG,CAAA,CAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AAEzD,MAAM,QAAyB,CAAA;AAAA,EAK7B,YAAY,UAAwB,EAAA;AAJpC,IAAA,YAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AAGE,IAAA,MAAM,CAAC,KAAO,EAAA,OAAA,EAAS,OAAO,CAAI,GAAA,UAAA,CAAW,MAAM,GAAG,CAAA;AACtD,IAAK,YAAA,CAAA,IAAA,EAAA,MAAA,EAAS,SAAS,KAAK,CAAA,CAAA;AAC5B,IAAK,YAAA,CAAA,IAAA,EAAA,QAAA,EAAW,SAAS,OAAO,CAAA,CAAA;AAChC,IAAK,YAAA,CAAA,IAAA,EAAA,QAAA,EAAW,SAAS,OAAO,CAAA,CAAA;AAAA;AAClC,EAEA,IAAI,KAAQ,GAAA;AACV,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,MAAA,CAAA;AAAA;AACd,EACA,IAAI,OAAU,GAAA;AACZ,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA;AAAA;AACd,EACA,IAAI,OAAU,GAAA;AACZ,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA;AAAA;AACd,EAEA,OAAO,IAA6B,EAAA;AAClC,IAAA,MAAM,EACJ,GAAA,IAAA,KAAS,KACL,CAAA,mBAAA,IAAI,IAAK,EAAA,GACT,OAAO,IAAA,KAAS,QACd,GAAA,IAAI,IAAK,CAAA,IAAI,CACb,GAAA,IAAA;AAER,IAAG,EAAA,CAAA,QAAA,CAAS,mBAAK,MAAM,CAAA,CAAA;AACvB,IAAG,EAAA,CAAA,UAAA,CAAW,mBAAK,QAAQ,CAAA,CAAA;AAC3B,IAAG,EAAA,CAAA,UAAA,CAAW,KAAK,OAAO,CAAA;AAC1B,IAAA,EAAA,CAAG,gBAAgB,CAAC,CAAA;AACpB,IAAO,OAAA,EAAA;AAAA;AACT,EAEA,QAAW,GAAA;AACT,IAAA,OAAO,KAAK,QAAS,CAAA,YAAA,CAAA,IAAA,EAAK,SAAQ,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,EAAU,mBAAK,QAAQ,CAAA,CAAA;AAAA;AAElE;AAvCE,MAAA,GAAA,IAAA,OAAA,EAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA;AAuCK,MAAM,IAAO,GAAA,CAAC,UACnB,KAAA,IAAI,SAAS,UAAU;AAEzB,IAAK,CAAA,kBAAA,GAAqB,CAAC,SAAA,KACzB,IAAI,IAAA,CAAK,SAAS,CAAA,CAAE,YAAa,EAAA,CAAE,KAAM,CAAA,CAAA,EAAG,CAAC,CAAA;AAE/C,IAAA,CAAK,QAAW,GAAA,CAAC,KAAe,EAAA,OAAA,EAAiB,OAAoB,KAAA;AACnE,EAAO,OAAA,CAAA,EAAG,OAAQ,CAAA,KAAK,CAAC,CAAA,CAAA,EAAI,OAAQ,CAAA,OAAO,CAAC,CAAA,CAAA,EAAI,OAAQ,CAAA,OAAO,CAAC,CAAA,CAAA;AAClE,CAAA;AAEA,IAAK,CAAA,cAAA,GAAiB,CAAC,UAAyC,KAAA;AAC9D,EAAA,MAAM,IACJ,OAAO,UAAA,KAAe,QAAW,GAAA,UAAA,GAAa,OAAO,UAAU,CAAA;AACjE,EAAI,IAAA,CAAC,MAAO,CAAA,QAAA,CAAS,CAAC,CAAA,IAAK,CAAC,MAAO,CAAA,SAAA,CAAU,CAAC,CAAA,EAAU,OAAA,KAAA;AAExD,EAAA,OAAO,IAAI,IAAA,CAAK,CAAC,CAAA,CAAE,SAAc,KAAA,CAAA;AACnC,CAAA;;;;;;;;;;;;"}
1
+ {"version":3,"file":"date-utils.js","sources":["../../../../../../../packages/vuu-utils/src/date/date-utils.ts"],"sourcesContent":["import { CalendarDate } from \"@internationalized/date\";\n\nexport function toCalendarDate(d: Date) {\n return new CalendarDate(d.getFullYear(), d.getMonth() + 1, d.getDate());\n}\n\nexport type oneToFive = 1 | 2 | 3 | 4 | 5;\nexport type zeroToFive = 0 | oneToFive;\nexport type sixToNine = 6 | 7 | 8 | 9;\nexport type zeroToNine = zeroToFive | sixToNine;\nexport type oneToNine = oneToFive | sixToNine;\nexport type TimeUnit = \"hours\" | \"minutes\" | \"seconds\";\nexport type Hours = `${0 | 1}${zeroToNine}` | `2${0 | 1 | 2 | 3}`;\nexport type Minutes = `${zeroToFive}${zeroToNine}`;\nexport type Seconds = `${zeroToFive}${zeroToNine}`;\n\nexport type TimeUnitValue<T extends TimeUnit> = T extends \"hours\"\n ? Hours\n : T extends \"minutes\"\n ? Minutes\n : Seconds;\n\n// This should work, works fine in TypeScript playground, but hangs tsc\n// export type TimeString = `${Hours}:${Minutes}:${Seconds}`;\nexport type TimeString =\n `${number}${number}:${number}${number}:${number}${number}`;\n\ntype YYYY = `19${zeroToNine}${zeroToNine}` | `20${zeroToNine}${zeroToNine}`;\ntype MM = `0${oneToNine}` | `1${0 | 1 | 2}`;\ntype DD = `${0}${oneToNine}` | `${1 | 2}${zeroToNine}` | `3${0 | 1}`;\n\nexport type DateStringISO = `${YYYY}-${MM}-${DD}`;\n\nexport const zeroTime: TimeString = \"00:00:00\";\nexport const zeroTimeUnit: TimeUnitValue<TimeUnit> = \"00\";\n\nexport function incrementTimeUnitValue<T extends TimeUnit>(\n unit: T,\n value: TimeUnitValue<T>,\n) {\n const num = parseInt(value);\n if (unit === \"hours\" && num < 23) {\n return `${num + 1}`.padStart(2, \"0\").slice(-2) as Hours;\n } else if (unit === \"hours\" && num === 23) {\n return \"00\" as Hours;\n } else if (num < 59) {\n return `${num + 1}`.padStart(2, \"0\").slice(-2) as TimeUnitValue<T>;\n } else if (num === 59) {\n return \"00\" as TimeUnitValue<T>;\n }\n return value;\n}\n\nexport function decrementTimeUnitValue<T extends TimeUnit>(\n unit: T,\n value: TimeUnitValue<T>,\n) {\n const num = parseInt(value);\n if (unit === \"hours\" && num > 0) {\n return `${num - 1}`.padStart(2, \"0\").slice(-2) as Hours;\n } else if (unit === \"hours\" && num === 0) {\n return \"23\" as Hours;\n } else if (num > 0) {\n return `${num - 1}`.padStart(2, \"0\").slice(-2) as TimeUnitValue<T>;\n } else if (num === 0) {\n return \"59\" as TimeUnitValue<T>;\n }\n return value;\n}\n\n// TODO accept numeric values with appropriate type checks\nexport function updateTimeString<T extends TimeUnit>(\n timeString: TimeString,\n unit: T,\n value: TimeUnitValue<T>,\n): TimeString {\n const newTimeString =\n unit === \"hours\"\n ? value.concat(timeString.slice(2))\n : unit === \"minutes\"\n ? timeString.slice(0, 3).concat(value).concat(timeString.slice(5))\n : timeString.slice(0, 6).concat(value);\n if (isValidTimeString(newTimeString)) {\n return newTimeString;\n } else {\n throw Error(`[date-utils] udateTimeSting invalid result ${newTimeString}`);\n }\n}\n\nconst validTimePattern = /(?:[0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]/;\nexport const isValidTimeString = (value: unknown): value is TimeString =>\n typeof value === \"string\" && validTimePattern.test(value);\n\nexport function asTimeString(value: unknown, allowUndefined: false): TimeString;\nexport function asTimeString(\n value: unknown,\n allowUndefined?: true,\n): TimeString | undefined;\nexport function asTimeString(\n value: unknown,\n allowUndefined = false,\n): TimeString | undefined {\n if (value === undefined) {\n if (allowUndefined) {\n return value;\n } else {\n throw Error(\"[date-utils] asTimeString, value cannot be undefined\");\n }\n } else if (isValidTimeString(value)) {\n return value;\n } else if (typeof value === \"number\") {\n // we are assuming we have a value representing milliseconds since epoch.\n // If not, we will get an unpredictable time here. Is this too risky ?\n return Time.millisToTimeString(value);\n } else if (typeof value === \"string\") {\n // see if we have a long value, test if we can create time\n const valueAsInt = parseInt(value);\n if (!isNaN(valueAsInt)) {\n return Time.millisToTimeString(valueAsInt);\n }\n } else {\n throw Error(\n `[date-utils] asTimeString, value ${value} is not valid TimeString`,\n );\n }\n}\n\nexport interface Time {\n hours: number;\n minutes: number;\n seconds: number;\n asDate: (date?: Date | DateStringISO) => Date;\n}\n\nconst padZero = (val: number) => `${val}`.padStart(2, \"0\");\n\nclass TimeImpl implements Time {\n #hours: number;\n #minutes: number;\n #seconds: number;\n\n constructor(timeString: TimeString) {\n const [hours, minutes, seconds] = timeString.split(\":\");\n this.#hours = parseInt(hours);\n this.#minutes = parseInt(minutes);\n this.#seconds = parseInt(seconds);\n }\n\n get hours() {\n return this.#hours;\n }\n get minutes() {\n return this.#minutes;\n }\n get seconds() {\n return this.#seconds;\n }\n\n asDate(date?: Date | DateStringISO) {\n const dt =\n date === undefined\n ? new Date()\n : typeof date === \"string\"\n ? new Date(date)\n : date;\n\n dt.setHours(this.#hours);\n dt.setMinutes(this.#minutes);\n dt.setSeconds(this.seconds);\n dt.setMilliseconds(0);\n return dt;\n }\n\n toString() {\n return Time.toString(this.#hours, this.#minutes, this.#seconds);\n }\n}\n\nexport const Time = (timeString: TimeString): Time =>\n new TimeImpl(timeString) as Time;\n\nTime.millisToTimeString = (timestamp: number) =>\n new Date(timestamp).toTimeString().slice(0, 8) as TimeString;\n\nTime.toString = (hours: number, minutes: number, seconds: number) => {\n return `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}` as TimeString;\n};\n\nTime.isDateInMillis = (dtInMillis: string | number): boolean => {\n const n =\n typeof dtInMillis === \"number\" ? dtInMillis : Number(dtInMillis);\n if (!Number.isFinite(n) || !Number.isInteger(n)) return false;\n\n return new Date(n).getTime() === n;\n};\n"],"names":["CalendarDate"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var __WEBPACK_EXTERNAL_MODULE__internationalized_date__ = require('@internationalized/date');
3
+ var date = require('@internationalized/date');
4
4
 
5
5
  const baseTimeFormatOptions = {
6
6
  hour: "2-digit",
@@ -58,7 +58,7 @@ const dateFormatterISO = {
58
58
  format: (date) => new Date(+date - date.getTimezoneOffset() * 6e4).toISOString().replace(/T.*/, "")
59
59
  };
60
60
  function getDateFormatter({ locale, options }) {
61
- return new __WEBPACK_EXTERNAL_MODULE__internationalized_date__.DateFormatter(locale, options);
61
+ return new date.DateFormatter(locale, options);
62
62
  }
63
63
  function getDateAndTimeFormatters({ date, time }) {
64
64
  const out = [];
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sources":["../../../../../../../packages/vuu-utils/src/date/formatter.ts"],"sourcesContent":["import { DateFormatter } from \"@internationalized/date\";\nimport { DatePattern, DateTimePattern, TimePattern } from \"./types\";\n\ntype DateTimeFormatConfig = {\n locale: string;\n options: Intl.DateTimeFormatOptions;\n};\n\n// Time format config\nconst baseTimeFormatOptions: Intl.DateTimeFormatOptions = {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n};\nconst formatConfigByTimePatterns: Record<TimePattern, DateTimeFormatConfig> = {\n \"hh:mm:ss\": {\n locale: \"en-GB\",\n options: { ...baseTimeFormatOptions, hour12: false },\n },\n \"hh:mm:ss a\": {\n locale: \"en-GB\",\n options: { ...baseTimeFormatOptions, hour12: true },\n },\n \"hh:mm:ss.ms\": {\n locale: \"en-GB\",\n options: {\n ...baseTimeFormatOptions,\n hour12: false,\n fractionalSecondDigits: 3,\n },\n },\n};\n\n// Date format config\nconst baseDateFormatOptions: Intl.DateTimeFormatOptions = {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n};\nconst formatConfigByDatePatterns: Record<\n Exclude<DatePattern, \"yyyy-mm-dd\">,\n DateTimeFormatConfig\n> = {\n \"dd.mm.yyyy\": {\n locale: \"de-De\",\n options: { ...baseDateFormatOptions },\n },\n \"dd/mm/yyyy\": { locale: \"en-GB\", options: { ...baseDateFormatOptions } },\n \"dd MMM yyyy\": {\n locale: \"en-GB\",\n options: { ...baseDateFormatOptions, month: \"short\" },\n },\n \"dd MMMM yyyy\": {\n locale: \"en-GB\",\n options: { ...baseDateFormatOptions, month: \"long\" },\n },\n \"mm/dd/yyyy\": { locale: \"en-US\", options: { ...baseDateFormatOptions } },\n \"MMM dd, yyyy\": {\n locale: \"en-US\",\n options: { ...baseDateFormatOptions, month: \"short\" },\n },\n \"MMMM dd, yyyy\": {\n locale: \"en-US\",\n options: { ...baseDateFormatOptions, month: \"long\" },\n },\n};\n\nconst dateFormatterISO = {\n format: (date: Date) =>\n new Date(+date - date.getTimezoneOffset() * 60_000)\n .toISOString()\n .replace(/T.*/, \"\"),\n};\n\nexport function getDateFormatter({ locale, options }: DateTimeFormatConfig) {\n return new DateFormatter(locale, options);\n}\n\nfunction getDateAndTimeFormatters({ date, time }: DateTimePattern) {\n const out = [];\n if (date === \"yyyy-mm-dd\") {\n out.push(dateFormatterISO);\n } else if (date) {\n out.push(getDateFormatter(formatConfigByDatePatterns[date]));\n }\n if (time) {\n out.push(getDateFormatter(formatConfigByTimePatterns[time]));\n }\n return out;\n}\n\nexport function formatDate(pattern: DateTimePattern): (d: Date) => string {\n const formatters = getDateAndTimeFormatters(pattern);\n return (d) => formatters.map((f) => f.format(d)).join(\" \");\n}\n"],"names":["DateFormatter"],"mappings":"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"}
1
+ {"version":3,"file":"formatter.js","sources":["../../../../../../../packages/vuu-utils/src/date/formatter.ts"],"sourcesContent":["import { DateFormatter } from \"@internationalized/date\";\nimport { DatePattern, DateTimePattern, TimePattern } from \"./types\";\n\ntype DateTimeFormatConfig = {\n locale: string;\n options: Intl.DateTimeFormatOptions;\n};\n\n// Time format config\nconst baseTimeFormatOptions: Intl.DateTimeFormatOptions = {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n};\nconst formatConfigByTimePatterns: Record<TimePattern, DateTimeFormatConfig> = {\n \"hh:mm:ss\": {\n locale: \"en-GB\",\n options: { ...baseTimeFormatOptions, hour12: false },\n },\n \"hh:mm:ss a\": {\n locale: \"en-GB\",\n options: { ...baseTimeFormatOptions, hour12: true },\n },\n \"hh:mm:ss.ms\": {\n locale: \"en-GB\",\n options: {\n ...baseTimeFormatOptions,\n hour12: false,\n fractionalSecondDigits: 3,\n },\n },\n};\n\n// Date format config\nconst baseDateFormatOptions: Intl.DateTimeFormatOptions = {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n};\nconst formatConfigByDatePatterns: Record<\n Exclude<DatePattern, \"yyyy-mm-dd\">,\n DateTimeFormatConfig\n> = {\n \"dd.mm.yyyy\": {\n locale: \"de-De\",\n options: { ...baseDateFormatOptions },\n },\n \"dd/mm/yyyy\": { locale: \"en-GB\", options: { ...baseDateFormatOptions } },\n \"dd MMM yyyy\": {\n locale: \"en-GB\",\n options: { ...baseDateFormatOptions, month: \"short\" },\n },\n \"dd MMMM yyyy\": {\n locale: \"en-GB\",\n options: { ...baseDateFormatOptions, month: \"long\" },\n },\n \"mm/dd/yyyy\": { locale: \"en-US\", options: { ...baseDateFormatOptions } },\n \"MMM dd, yyyy\": {\n locale: \"en-US\",\n options: { ...baseDateFormatOptions, month: \"short\" },\n },\n \"MMMM dd, yyyy\": {\n locale: \"en-US\",\n options: { ...baseDateFormatOptions, month: \"long\" },\n },\n};\n\nconst dateFormatterISO = {\n format: (date: Date) =>\n new Date(+date - date.getTimezoneOffset() * 60_000)\n .toISOString()\n .replace(/T.*/, \"\"),\n};\n\nexport function getDateFormatter({ locale, options }: DateTimeFormatConfig) {\n return new DateFormatter(locale, options);\n}\n\nfunction getDateAndTimeFormatters({ date, time }: DateTimePattern) {\n const out = [];\n if (date === \"yyyy-mm-dd\") {\n out.push(dateFormatterISO);\n } else if (date) {\n out.push(getDateFormatter(formatConfigByDatePatterns[date]));\n }\n if (time) {\n out.push(getDateFormatter(formatConfigByTimePatterns[time]));\n }\n return out;\n}\n\nexport function formatDate(pattern: DateTimePattern): (d: Date) => string {\n const formatters = getDateAndTimeFormatters(pattern);\n return (d) => formatters.map((f) => f.format(d)).join(\" \");\n}\n"],"names":["DateFormatter"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var arrayUtils = require('./array-utils.js');
4
4
  var textUtils = require('./text-utils.js');
5
- var __WEBPACK_EXTERNAL_MODULE_react__ = require('react');
5
+ var React = require('react');
6
6
  var componentRegistry = require('./component-registry.js');
7
7
 
8
8
  const env = process.env.NODE_ENV;
@@ -15,7 +15,7 @@ function featureFromJson({ type }) {
15
15
  `layoutUtils unable to create feature component from JSON, unknown type ${type}`
16
16
  );
17
17
  }
18
- return __WEBPACK_EXTERNAL_MODULE_react__.createElement(componentType);
18
+ return React.createElement(componentType);
19
19
  }
20
20
  const isCustomFeature = (feature) => feature.leftNavLocation === "vuu-features";
21
21
  const isWildcardSchema = (vuuTables) => vuuTables === "*";
@@ -1 +1 @@
1
- {"version":3,"file":"feature-utils.js","sources":["../../../../../../packages/vuu-utils/src/feature-utils.ts"],"sourcesContent":["import type { TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport type { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { ListOption } from \"@vuu-ui/vuu-table-types\";\nimport { partition } from \"./array-utils\";\nimport { wordify } from \"./text-utils\";\nimport React, { ReactElement } from \"react\";\nimport { getLayoutComponent } from \"./component-registry\";\n\nexport type PathMap = {\n [key: string]: Pick<DynamicFeatureDescriptor, \"css\" | \"url\">;\n};\nexport type Environment = \"development\" | \"production\";\nexport const env = process.env.NODE_ENV as Environment;\n\nexport type LookupTableProvider = (table: VuuTable) => ListOption[];\n\nexport interface ViewConfig {\n allowRename?: boolean;\n closeable?: boolean;\n header?: boolean;\n}\n\nexport interface DynamicFeatureProps<P extends object | undefined = object> {\n /**\n props that will be passed to the lazily loaded component.\n */\n ComponentProps?: P;\n ViewProps?: ViewConfig;\n css?: string;\n height?: number;\n title?: string;\n /** \n The url of javascript bundle to lazily load. Bundle must provide a default export\n and that export must be a React component.\n */\n url: string;\n width?: number;\n}\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const vuuConfig: Promise<VuuConfig>;\n}\n\nexport interface DynamicFeatureDescriptor {\n /**\n * url for css file for feature\n */\n css?: string;\n featureProps?: {\n vuuTables?: \"*\" | VuuTable[];\n };\n leftNavLocation: \"vuu-features\" | \"vuu-tables\";\n name: string;\n title: string;\n /**\n * url for javascript bundle to load feature\n */\n url: string;\n viewProps?: ViewConfig;\n}\n\nexport interface StaticFeatureDescriptor {\n group?: string;\n label: string;\n type: string;\n}\n\nconst isStaticFeature = (\n feature: unknown,\n): feature is StaticFeatureDescriptor =>\n feature !== null && typeof feature === \"object\" && \"type\" in feature;\n\nexport const isStaticFeatures = (\n features: unknown,\n): features is StaticFeatureDescriptor[] =>\n Array.isArray(features) && features.every(isStaticFeature);\n\nexport interface FilterTableFeatureProps {\n tableSchema: TableSchema;\n}\n\nexport type DynamicFeatures = {\n [key: string]: DynamicFeatureDescriptor;\n};\n\nexport function featureFromJson({ type }: { type: string }): ReactElement {\n const componentType = type.match(/^[a-z]/) ? type : getLayoutComponent(type);\n if (componentType === undefined) {\n throw Error(\n `layoutUtils unable to create feature component from JSON, unknown type ${type}`,\n );\n }\n return React.createElement(componentType);\n}\n\nexport interface VuuConfig {\n features: DynamicFeatures;\n authUrl?: string;\n websocketUrl: string;\n ssl: boolean;\n}\n\n/**\n * We currently categorize 'features' simply by the leftNavLocation\n * @param feature\n * @returns\n */\nexport const isCustomFeature = (feature: DynamicFeatureDescriptor) =>\n feature.leftNavLocation === \"vuu-features\";\n\nexport const isWildcardSchema = (\n vuuTables?: \"*\" | VuuTable[],\n): vuuTables is \"*\" => vuuTables === \"*\";\nexport const isVuuTables = (\n vuuTables?: \"*\" | VuuTable[],\n): vuuTables is VuuTable[] => Array.isArray(vuuTables);\n\nexport interface FeaturePropsWithFilterTableFeature\n extends Omit<DynamicFeatureProps, \"ComponentProps\"> {\n ComponentProps: FilterTableFeatureProps;\n}\n\nexport const hasFilterTableFeatureProps = (\n props: DynamicFeatureProps,\n): props is FeaturePropsWithFilterTableFeature =>\n typeof props.ComponentProps === \"object\" &&\n props.ComponentProps !== null &&\n \"tableSchema\" in props.ComponentProps;\n\nexport const isSameTable = (t1: VuuTable, t2: VuuTable) => {\n t1.module === t2.module && t1.table == t2.table;\n};\n\n// Sort TableScheas by module\nexport const byModule = (schema1: TableSchema, schema2: TableSchema) => {\n const m1 = schema1.table.module.toLowerCase();\n const m2 = schema2.table.module.toLowerCase();\n if (m1 < m2) {\n return -1;\n } else if (m1 > m2) {\n return 1;\n } else if (schema1.table.table < schema2.table.table) {\n return -1;\n } else if (schema1.table.table > schema2.table.table) {\n return 1;\n } else {\n return 0;\n }\n};\n\nexport type GetFeaturePaths = (params: {\n env: Environment;\n fileName: string;\n withCss?: boolean;\n}) => DynamicFeatureProps;\n\nexport const getFilterTableFeatures = (\n schemas: TableSchema[],\n getFeaturePath: GetFeaturePaths,\n) =>\n schemas\n .sort(byModule)\n .map<DynamicFeatureProps<FilterTableFeatureProps>>((schema) => ({\n ...getFeaturePath({ env, fileName: \"FilterTable\" }),\n ComponentProps: {\n tableSchema: schema,\n },\n ViewProps: {\n allowRename: true,\n },\n title: `${schema.table.module} ${schema.table.table}`,\n }));\n\nexport type Component = {\n componentName: string;\n component: unknown;\n};\n\nexport const assertComponentRegistered = (\n componentName: string,\n component: unknown,\n) => {\n if (typeof component !== \"function\") {\n console.warn(\n `${componentName} module not loaded, will be unabale to deserialize from layout JSON`,\n );\n }\n};\n\nexport const assertComponentsRegistered = (componentList: Component[]) => {\n for (const { componentName, component } of componentList) {\n assertComponentRegistered(componentName, component);\n }\n};\n/**\n * Process the DynamicFeature descriptors. Identify\n * the vuu tables required and inject the appropriate TableSchemas\n *\n * @param dynamicFeatures\n * @param tableSchemas\n * @returns\n */\nexport const getCustomAndTableFeatures = (\n dynamicFeatures: DynamicFeatureDescriptor[],\n tableSchemas: TableSchema[],\n): {\n dynamicFeatures: DynamicFeatureProps[];\n tableFeatures: DynamicFeatureProps<FilterTableFeatureProps>[];\n} => {\n // Split features into simple tables and 'custom' features\n const [customFeatureConfig, tableFeaturesConfig] = partition(\n dynamicFeatures,\n isCustomFeature,\n );\n\n const customFeatures: DynamicFeatureProps[] = [];\n const tableFeatures: DynamicFeatureProps<FilterTableFeatureProps>[] = [];\n\n for (const {\n featureProps = {},\n viewProps,\n ...feature\n } of tableFeaturesConfig) {\n const { vuuTables } = featureProps;\n // Currently FilterTable is the only 'tableFeature' and it uses the wildcard\n if (isWildcardSchema(vuuTables)) {\n if (tableSchemas) {\n for (const tableSchema of tableSchemas) {\n tableFeatures.push({\n ...feature,\n ComponentProps: {\n tableSchema,\n },\n title: `${tableSchema.table.module} ${wordify(\n tableSchema.table.table,\n )}`,\n ViewProps: {\n ...viewProps,\n allowRename: true,\n },\n });\n }\n }\n }\n }\n\n for (const {\n featureProps = {},\n viewProps,\n ...feature\n } of customFeatureConfig) {\n const { vuuTables } = featureProps;\n if (isVuuTables(vuuTables)) {\n if (tableSchemas) {\n customFeatures.push({\n ...feature,\n ComponentProps: vuuTables.reduce<Record<string, TableSchema>>(\n (map, vuuTable) => {\n map[`${vuuTable.table}Schema`] = tableSchemas.find(\n (tableSchema) => isSameTable(vuuTable, tableSchema.table),\n ) as TableSchema;\n return map;\n },\n {},\n ),\n ViewProps: viewProps,\n });\n }\n } else {\n customFeatures.push(feature);\n }\n }\n return { dynamicFeatures: customFeatures, tableFeatures: tableFeatures };\n};\n"],"names":["getLayoutComponent","React","partition","wordify"],"mappings":"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"}
1
+ {"version":3,"file":"feature-utils.js","sources":["../../../../../../packages/vuu-utils/src/feature-utils.ts"],"sourcesContent":["import type { TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport type { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { ListOption } from \"@vuu-ui/vuu-table-types\";\nimport { partition } from \"./array-utils\";\nimport { wordify } from \"./text-utils\";\nimport React, { ReactElement } from \"react\";\nimport { getLayoutComponent } from \"./component-registry\";\n\nexport type PathMap = {\n [key: string]: Pick<DynamicFeatureDescriptor, \"css\" | \"url\">;\n};\nexport type Environment = \"development\" | \"production\";\nexport const env = process.env.NODE_ENV as Environment;\n\nexport type LookupTableProvider = (table: VuuTable) => ListOption[];\n\nexport interface ViewConfig {\n allowRename?: boolean;\n closeable?: boolean;\n header?: boolean;\n}\n\nexport interface DynamicFeatureProps<P extends object | undefined = object> {\n /**\n props that will be passed to the lazily loaded component.\n */\n ComponentProps?: P;\n ViewProps?: ViewConfig;\n css?: string;\n height?: number;\n title?: string;\n /** \n The url of javascript bundle to lazily load. Bundle must provide a default export\n and that export must be a React component.\n */\n url: string;\n width?: number;\n}\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const vuuConfig: Promise<VuuConfig>;\n}\n\nexport interface DynamicFeatureDescriptor {\n /**\n * url for css file for feature\n */\n css?: string;\n featureProps?: {\n vuuTables?: \"*\" | VuuTable[];\n };\n leftNavLocation: \"vuu-features\" | \"vuu-tables\";\n name: string;\n title: string;\n /**\n * url for javascript bundle to load feature\n */\n url: string;\n viewProps?: ViewConfig;\n}\n\nexport interface StaticFeatureDescriptor {\n group?: string;\n label: string;\n type: string;\n}\n\nconst isStaticFeature = (\n feature: unknown,\n): feature is StaticFeatureDescriptor =>\n feature !== null && typeof feature === \"object\" && \"type\" in feature;\n\nexport const isStaticFeatures = (\n features: unknown,\n): features is StaticFeatureDescriptor[] =>\n Array.isArray(features) && features.every(isStaticFeature);\n\nexport interface FilterTableFeatureProps {\n tableSchema: TableSchema;\n}\n\nexport type DynamicFeatures = {\n [key: string]: DynamicFeatureDescriptor;\n};\n\nexport function featureFromJson({ type }: { type: string }): ReactElement {\n const componentType = type.match(/^[a-z]/) ? type : getLayoutComponent(type);\n if (componentType === undefined) {\n throw Error(\n `layoutUtils unable to create feature component from JSON, unknown type ${type}`,\n );\n }\n return React.createElement(componentType);\n}\n\nexport interface VuuConfig {\n features: DynamicFeatures;\n authUrl?: string;\n websocketUrl: string;\n ssl: boolean;\n}\n\n/**\n * We currently categorize 'features' simply by the leftNavLocation\n * @param feature\n * @returns\n */\nexport const isCustomFeature = (feature: DynamicFeatureDescriptor) =>\n feature.leftNavLocation === \"vuu-features\";\n\nexport const isWildcardSchema = (\n vuuTables?: \"*\" | VuuTable[],\n): vuuTables is \"*\" => vuuTables === \"*\";\nexport const isVuuTables = (\n vuuTables?: \"*\" | VuuTable[],\n): vuuTables is VuuTable[] => Array.isArray(vuuTables);\n\nexport interface FeaturePropsWithFilterTableFeature\n extends Omit<DynamicFeatureProps, \"ComponentProps\"> {\n ComponentProps: FilterTableFeatureProps;\n}\n\nexport const hasFilterTableFeatureProps = (\n props: DynamicFeatureProps,\n): props is FeaturePropsWithFilterTableFeature =>\n typeof props.ComponentProps === \"object\" &&\n props.ComponentProps !== null &&\n \"tableSchema\" in props.ComponentProps;\n\nexport const isSameTable = (t1: VuuTable, t2: VuuTable) => {\n t1.module === t2.module && t1.table == t2.table;\n};\n\n// Sort TableScheas by module\nexport const byModule = (schema1: TableSchema, schema2: TableSchema) => {\n const m1 = schema1.table.module.toLowerCase();\n const m2 = schema2.table.module.toLowerCase();\n if (m1 < m2) {\n return -1;\n } else if (m1 > m2) {\n return 1;\n } else if (schema1.table.table < schema2.table.table) {\n return -1;\n } else if (schema1.table.table > schema2.table.table) {\n return 1;\n } else {\n return 0;\n }\n};\n\nexport type GetFeaturePaths = (params: {\n env: Environment;\n fileName: string;\n withCss?: boolean;\n}) => DynamicFeatureProps;\n\nexport const getFilterTableFeatures = (\n schemas: TableSchema[],\n getFeaturePath: GetFeaturePaths,\n) =>\n schemas\n .sort(byModule)\n .map<DynamicFeatureProps<FilterTableFeatureProps>>((schema) => ({\n ...getFeaturePath({ env, fileName: \"FilterTable\" }),\n ComponentProps: {\n tableSchema: schema,\n },\n ViewProps: {\n allowRename: true,\n },\n title: `${schema.table.module} ${schema.table.table}`,\n }));\n\nexport type Component = {\n componentName: string;\n component: unknown;\n};\n\nexport const assertComponentRegistered = (\n componentName: string,\n component: unknown,\n) => {\n if (typeof component !== \"function\") {\n console.warn(\n `${componentName} module not loaded, will be unabale to deserialize from layout JSON`,\n );\n }\n};\n\nexport const assertComponentsRegistered = (componentList: Component[]) => {\n for (const { componentName, component } of componentList) {\n assertComponentRegistered(componentName, component);\n }\n};\n/**\n * Process the DynamicFeature descriptors. Identify\n * the vuu tables required and inject the appropriate TableSchemas\n *\n * @param dynamicFeatures\n * @param tableSchemas\n * @returns\n */\nexport const getCustomAndTableFeatures = (\n dynamicFeatures: DynamicFeatureDescriptor[],\n tableSchemas: TableSchema[],\n): {\n dynamicFeatures: DynamicFeatureProps[];\n tableFeatures: DynamicFeatureProps<FilterTableFeatureProps>[];\n} => {\n // Split features into simple tables and 'custom' features\n const [customFeatureConfig, tableFeaturesConfig] = partition(\n dynamicFeatures,\n isCustomFeature,\n );\n\n const customFeatures: DynamicFeatureProps[] = [];\n const tableFeatures: DynamicFeatureProps<FilterTableFeatureProps>[] = [];\n\n for (const {\n featureProps = {},\n viewProps,\n ...feature\n } of tableFeaturesConfig) {\n const { vuuTables } = featureProps;\n // Currently FilterTable is the only 'tableFeature' and it uses the wildcard\n if (isWildcardSchema(vuuTables)) {\n if (tableSchemas) {\n for (const tableSchema of tableSchemas) {\n tableFeatures.push({\n ...feature,\n ComponentProps: {\n tableSchema,\n },\n title: `${tableSchema.table.module} ${wordify(\n tableSchema.table.table,\n )}`,\n ViewProps: {\n ...viewProps,\n allowRename: true,\n },\n });\n }\n }\n }\n }\n\n for (const {\n featureProps = {},\n viewProps,\n ...feature\n } of customFeatureConfig) {\n const { vuuTables } = featureProps;\n if (isVuuTables(vuuTables)) {\n if (tableSchemas) {\n customFeatures.push({\n ...feature,\n ComponentProps: vuuTables.reduce<Record<string, TableSchema>>(\n (map, vuuTable) => {\n map[`${vuuTable.table}Schema`] = tableSchemas.find(\n (tableSchema) => isSameTable(vuuTable, tableSchema.table),\n ) as TableSchema;\n return map;\n },\n {},\n ),\n ViewProps: viewProps,\n });\n }\n } else {\n customFeatures.push(feature);\n }\n }\n return { dynamicFeatures: customFeatures, tableFeatures: tableFeatures };\n};\n"],"names":["getLayoutComponent","partition","wordify"],"mappings":"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"}
@@ -13,7 +13,6 @@ var componentRegistry = require('./component-registry.js');
13
13
  var cookieUtils = require('./cookie-utils.js');
14
14
  var cssUtils = require('./css-utils.js');
15
15
  var DataEditingProvider = require('./data-editing/DataEditingProvider.js');
16
- var editUtils = require('./data-editing/edit-utils.js');
17
16
  var EditButtons = require('./data-editing/EditButtons.js');
18
17
  var EditSession = require('./data-editing/EditSession.js');
19
18
  var useEditableTable = require('./data-editing/useEditableTable.js');
@@ -73,6 +72,7 @@ var DataContext = require('./context-definitions/DataContext.js');
73
72
  var DataProvider = require('./context-definitions/DataProvider.js');
74
73
  var DataSourceProvider = require('./context-definitions/DataSourceProvider.js');
75
74
  var WorkspaceContext = require('./context-definitions/WorkspaceContext.js');
75
+ var editUtils = require('./data-editing/edit-utils.js');
76
76
  var PageVisibilityObserver = require('./PageVisibilityObserver.js');
77
77
  var ShellContext = require('./ShellContext.js');
78
78
  var themeUtils = require('./theme-utils.js');
@@ -206,11 +206,8 @@ exports.setCookieValue = cookieUtils.setCookieValue;
206
206
  exports.importCSS = cssUtils.importCSS;
207
207
  exports.DataEditingProvider = DataEditingProvider.DataEditingProvider;
208
208
  exports.useEditSession = DataEditingProvider.useEditSession;
209
- exports.getVuuEditMessage = editUtils.getVuuEditMessage;
210
- exports.isInlineEditingSession = editUtils.isInlineEditingSession;
211
209
  exports.EditButtons = EditButtons.EditButtons;
212
210
  exports.EditSession = EditSession.EditSession;
213
- exports.StaleUpdateError = EditSession.StaleUpdateError;
214
211
  exports.useEditableTable = useEditableTable.useEditableTable;
215
212
  exports.DOWN1 = dataUtils.DOWN1;
216
213
  exports.DOWN2 = dataUtils.DOWN2;
@@ -382,13 +379,8 @@ exports.SESSION_LIMIT_EXCEEDED = protocolMessageUtils.SESSION_LIMIT_EXCEEDED;
382
379
  exports.TOKEN_EXPIRED = protocolMessageUtils.TOKEN_EXPIRED;
383
380
  exports.hasViewPortContext = protocolMessageUtils.hasViewPortContext;
384
381
  exports.isActionMessage = protocolMessageUtils.isActionMessage;
385
- exports.isAddRowRpcRequest = protocolMessageUtils.isAddRowRpcRequest;
386
- exports.isBeginEditSessionRpcRequest = protocolMessageUtils.isBeginEditSessionRpcRequest;
387
382
  exports.isCreateVpSuccess = protocolMessageUtils.isCreateVpSuccess;
388
383
  exports.isCustomComponentActionMessage = protocolMessageUtils.isCustomComponentActionMessage;
389
- exports.isEditCellRpcRequest = protocolMessageUtils.isEditCellRpcRequest;
390
- exports.isEndEditSessionRpcRequest = protocolMessageUtils.isEndEditSessionRpcRequest;
391
- exports.isErrorMessage = protocolMessageUtils.isErrorMessage;
392
384
  exports.isLoginErrorMessage = protocolMessageUtils.isLoginErrorMessage;
393
385
  exports.isLoginResponse = protocolMessageUtils.isLoginResponse;
394
386
  exports.isNumericType = protocolMessageUtils.isNumericType;
@@ -467,6 +459,7 @@ exports.DataSourceProvider = DataSourceProvider.DataSourceProvider;
467
459
  exports.useDataSource = DataSourceProvider.useDataSource;
468
460
  exports.WorkspaceContext = WorkspaceContext.WorkspaceContext;
469
461
  exports.usePlaceholderJSON = WorkspaceContext.usePlaceholderJSON;
462
+ exports.isInlineEditingSession = editUtils.isInlineEditingSession;
470
463
  exports.PageVisibilityObserver = PageVisibilityObserver.PageVisibilityObserver;
471
464
  exports.ShellContext = ShellContext.ShellContext;
472
465
  exports.useShellContext = ShellContext.useShellContext;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}