@vuu-ui/vuu-utils 0.9.2 → 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/DataWindow.js.map +1 -1
- package/cjs/ShellContext.js.map +1 -1
- package/cjs/ThemeProvider.js.map +1 -1
- package/cjs/array-utils.js.map +1 -1
- package/cjs/box-utils.js.map +1 -1
- package/cjs/column-utils.js +57 -51
- package/cjs/column-utils.js.map +1 -1
- package/cjs/common-types.js.map +1 -1
- package/cjs/component-registry.js.map +1 -1
- package/cjs/context-definitions/DataSourceContext.js.map +1 -1
- package/cjs/context-definitions/DataSourceProvider.js.map +1 -1
- package/cjs/context-definitions/WorkspaceContext.js.map +1 -1
- package/cjs/cookie-utils.js.map +1 -1
- package/cjs/css-utils.js.map +1 -1
- package/cjs/data-utils.js.map +1 -1
- package/cjs/datasource/BaseDataSource.js.map +1 -1
- package/cjs/datasource/datasource-action-utils.js.map +1 -1
- package/cjs/datasource/datasource-filter-utils.js.map +1 -1
- package/cjs/datasource/datasource-utils.js.map +1 -1
- package/cjs/date/date-utils.js.map +1 -1
- package/cjs/date/dateTimePattern.js.map +1 -1
- package/cjs/date/formatter.js.map +1 -1
- package/cjs/date/types.js.map +1 -1
- package/cjs/debug-utils.js.map +1 -1
- package/cjs/event-emitter.js.map +1 -1
- package/cjs/feature-utils.js.map +1 -1
- package/cjs/filters/filter-utils.js.map +1 -1
- package/cjs/filters/filterAsQuery.js.map +1 -1
- package/cjs/form-utils.js.map +1 -1
- package/cjs/formatting-utils.js.map +1 -1
- package/cjs/group-utils.js.map +1 -1
- package/cjs/html-utils.js.map +1 -1
- package/cjs/index.js +5 -0
- package/cjs/index.js.map +1 -1
- package/cjs/input-utils.js.map +1 -1
- package/cjs/invariant.js.map +1 -1
- package/cjs/itemToString.js.map +1 -1
- package/cjs/json-utils.js.map +1 -1
- package/cjs/keyboard-utils.js.map +1 -1
- package/cjs/keyset.js.map +1 -1
- package/cjs/list-utils.js.map +1 -1
- package/cjs/local-storage-utils.js.map +1 -1
- package/cjs/logging-utils.js.map +1 -1
- package/cjs/menu-utils.js.map +1 -1
- package/cjs/module-utils.js.map +1 -1
- package/cjs/nanoid/index.js.map +1 -1
- package/cjs/perf-utils.js.map +1 -1
- package/cjs/promise-utils.js +1 -1
- package/cjs/promise-utils.js.map +1 -1
- package/cjs/protocol-message-utils.js +2 -0
- package/cjs/protocol-message-utils.js.map +1 -1
- package/cjs/range-utils.js.map +1 -1
- package/cjs/react-utils.js.map +1 -1
- package/cjs/round-decimal.js.map +1 -1
- package/cjs/row-utils.js.map +1 -1
- package/cjs/selection-utils.js +2 -2
- package/cjs/selection-utils.js.map +1 -1
- package/cjs/shell-layout-types.js.map +1 -1
- package/cjs/sort-utils.js.map +1 -1
- package/cjs/table-schema-utils.js.map +1 -1
- package/cjs/text-utils.js.map +1 -1
- package/cjs/tree-utils.js +42 -3
- package/cjs/tree-utils.js.map +1 -1
- package/cjs/ts-utils.js.map +1 -1
- package/cjs/url-utils.js.map +1 -1
- package/cjs/useId.js.map +1 -1
- package/cjs/useLayoutEffectSkipFirst.js.map +1 -1
- package/cjs/useStateRef.js.map +1 -1
- package/esm/DataWindow.js.map +1 -1
- package/esm/ShellContext.js.map +1 -1
- package/esm/ThemeProvider.js.map +1 -1
- package/esm/array-utils.js.map +1 -1
- package/esm/box-utils.js.map +1 -1
- package/esm/column-utils.js +57 -51
- package/esm/column-utils.js.map +1 -1
- package/esm/common-types.js.map +1 -1
- package/esm/component-registry.js.map +1 -1
- package/esm/context-definitions/DataSourceContext.js.map +1 -1
- package/esm/context-definitions/DataSourceProvider.js.map +1 -1
- package/esm/context-definitions/WorkspaceContext.js.map +1 -1
- package/esm/cookie-utils.js.map +1 -1
- package/esm/css-utils.js.map +1 -1
- package/esm/data-utils.js.map +1 -1
- package/esm/datasource/BaseDataSource.js.map +1 -1
- package/esm/datasource/datasource-action-utils.js.map +1 -1
- package/esm/datasource/datasource-filter-utils.js.map +1 -1
- package/esm/datasource/datasource-utils.js.map +1 -1
- package/esm/date/date-utils.js.map +1 -1
- package/esm/date/dateTimePattern.js.map +1 -1
- package/esm/date/formatter.js.map +1 -1
- package/esm/date/types.js.map +1 -1
- package/esm/debug-utils.js.map +1 -1
- package/esm/event-emitter.js.map +1 -1
- package/esm/feature-utils.js.map +1 -1
- package/esm/filters/filter-utils.js.map +1 -1
- package/esm/filters/filterAsQuery.js.map +1 -1
- package/esm/form-utils.js.map +1 -1
- package/esm/formatting-utils.js.map +1 -1
- package/esm/group-utils.js.map +1 -1
- package/esm/html-utils.js.map +1 -1
- package/esm/index.js +2 -2
- package/esm/input-utils.js.map +1 -1
- package/esm/invariant.js.map +1 -1
- package/esm/itemToString.js.map +1 -1
- package/esm/json-utils.js.map +1 -1
- package/esm/keyboard-utils.js.map +1 -1
- package/esm/keyset.js.map +1 -1
- package/esm/list-utils.js.map +1 -1
- package/esm/local-storage-utils.js.map +1 -1
- package/esm/logging-utils.js.map +1 -1
- package/esm/menu-utils.js.map +1 -1
- package/esm/module-utils.js.map +1 -1
- package/esm/nanoid/index.js.map +1 -1
- package/esm/perf-utils.js.map +1 -1
- package/esm/promise-utils.js +1 -1
- package/esm/promise-utils.js.map +1 -1
- package/esm/protocol-message-utils.js +2 -1
- package/esm/protocol-message-utils.js.map +1 -1
- package/esm/range-utils.js.map +1 -1
- package/esm/react-utils.js.map +1 -1
- package/esm/round-decimal.js.map +1 -1
- package/esm/row-utils.js.map +1 -1
- package/esm/selection-utils.js +2 -2
- package/esm/selection-utils.js.map +1 -1
- package/esm/shell-layout-types.js.map +1 -1
- package/esm/sort-utils.js.map +1 -1
- package/esm/table-schema-utils.js.map +1 -1
- package/esm/text-utils.js.map +1 -1
- package/esm/tree-utils.js +39 -4
- package/esm/tree-utils.js.map +1 -1
- package/esm/ts-utils.js.map +1 -1
- package/esm/url-utils.js.map +1 -1
- package/esm/useId.js.map +1 -1
- package/esm/useLayoutEffectSkipFirst.js.map +1 -1
- package/esm/useStateRef.js.map +1 -1
- package/package.json +6 -6
- package/types/ShellContext.d.ts +0 -1
- package/types/ThemeProvider.d.ts +1 -1
- package/types/column-utils.d.ts +14 -5
- package/types/context-definitions/DataSourceContext.d.ts +0 -1
- package/types/context-definitions/DataSourceProvider.d.ts +2 -2
- package/types/date/types.d.ts +2 -2
- package/types/filters/filter-utils.d.ts +37 -37
- package/types/module-utils.d.ts +1 -2
- package/types/protocol-message-utils.d.ts +1 -0
- package/types/row-utils.d.ts +2 -1
- package/types/selection-utils.d.ts +1 -1
- package/types/tree-types.d.ts +3 -12
- package/types/tree-utils.d.ts +4 -0
package/esm/index.js
CHANGED
|
@@ -41,7 +41,7 @@ export { asReactElements } from './react-utils.js';
|
|
|
41
41
|
export { roundDecimal } from './round-decimal.js';
|
|
42
42
|
export { debounce, throttle } from './perf-utils.js';
|
|
43
43
|
export { DeferredPromise } from './promise-utils.js';
|
|
44
|
-
export { isActionMessage, isEditCellRequest, isOpenDialogAction, isOpenSessionTableDialogMessage, isRequestResponse, isSessionTable, isSessionTableActionMessage, isViewportRpcRequest, isVuuMenuRpcRequest, viewportRpcRequest, vuuAddRowRequest, vuuDeleteRowRequest, vuuEditCellRequest } from './protocol-message-utils.js';
|
|
44
|
+
export { isActionMessage, isEditCellRequest, isOpenDialogAction, isOpenSessionTableDialogMessage, isRequestResponse, isRpcSuccess, isSessionTable, isSessionTableActionMessage, isViewportRpcRequest, isVuuMenuRpcRequest, viewportRpcRequest, vuuAddRowRequest, vuuDeleteRowRequest, vuuEditCellRequest } from './protocol-message-utils.js';
|
|
45
45
|
export { NULL_RANGE, WindowRange, getFullRange, rangeNewItems, rangesAreSame, resetRange, withinRange } from './range-utils.js';
|
|
46
46
|
export { actualRowPositioning, asDataSourceRowObject, virtualRowPositioning } from './row-utils.js';
|
|
47
47
|
export { RowSelected, deselectItem, expandSelection, getSelectionStatus, isRowSelected, isRowSelectedLast, isSelected, selectItem, selectionCount } from './selection-utils.js';
|
|
@@ -50,7 +50,7 @@ export { addSortColumn, setSortColumn, toggleOrApplySort } from './sort-utils.js
|
|
|
50
50
|
export { getVuuTable } from './table-schema-utils.js';
|
|
51
51
|
export { lastWord, wordify } from './text-utils.js';
|
|
52
52
|
export { NO_DATA_MATCH } from './typeahead-utils.js';
|
|
53
|
-
export { treeToDataSourceRows } from './tree-utils.js';
|
|
53
|
+
export { dropLastPathSegment, getParentRow, lastPathSegment, missingAncestor, treeToDataSourceRows } from './tree-utils.js';
|
|
54
54
|
export { DEFAULT_DENSITY, DEFAULT_THEME, DEFAULT_THEME_MODE, ThemeContext, ThemeProvider, useThemeAttributes } from './ThemeProvider.js';
|
|
55
55
|
export { isNotNullOrUndefined, isObject } from './ts-utils.js';
|
|
56
56
|
export { getUrlParameter, hasUrlParameter } from './url-utils.js';
|
package/esm/input-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-utils.js","sources":["../src/input-utils.ts"],"sourcesContent":["export const isCharacterKey = (key: string) => key.length === 1;\n\nexport const isQuoteKey = (evt: KeyboardEvent) => {\n return evt.key === '\"' || evt.key === \"'\";\n};\n"],"names":[],"mappings":"AAAO,MAAM,cAAiB,GAAA,CAAC,GAAgB,KAAA,GAAA,CAAI,MAAW,KAAA
|
|
1
|
+
{"version":3,"file":"input-utils.js","sources":["../src/input-utils.ts"],"sourcesContent":["export const isCharacterKey = (key: string) => key.length === 1;\n\nexport const isQuoteKey = (evt: KeyboardEvent) => {\n return evt.key === '\"' || evt.key === \"'\";\n};\n"],"names":[],"mappings":"AAAO,MAAM,cAAiB,GAAA,CAAC,GAAgB,KAAA,GAAA,CAAI,MAAW,KAAA;AAEjD,MAAA,UAAA,GAAa,CAAC,GAAuB,KAAA;AAChD,EAAA,OAAO,GAAI,CAAA,GAAA,KAAQ,GAAO,IAAA,GAAA,CAAI,GAAQ,KAAA,GAAA;AACxC;;;;"}
|
package/esm/invariant.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invariant.js","sources":["../src/invariant.ts"],"sourcesContent":["export function invariant(condition: boolean, message: string) {\n if (!condition) {\n const error = new Error(message);\n error.name = \"Invariant Violation\";\n // TODO what is framesToPop?\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n"],"names":[],"mappings":"AAAgB,SAAA,SAAA,CAAU,WAAoB,OAAiB,EAAA;AAC7D,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAM,MAAA,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA
|
|
1
|
+
{"version":3,"file":"invariant.js","sources":["../src/invariant.ts"],"sourcesContent":["export function invariant(condition: boolean, message: string) {\n if (!condition) {\n const error = new Error(message);\n error.name = \"Invariant Violation\";\n // TODO what is framesToPop?\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n"],"names":[],"mappings":"AAAgB,SAAA,SAAA,CAAU,WAAoB,OAAiB,EAAA;AAC7D,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAM,MAAA,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAC/B,IAAA,KAAA,CAAM,IAAO,GAAA,qBAAA;AAIb,IAAA,KAAA,CAAM,WAAc,GAAA,CAAA;AACpB,IAAM,MAAA,KAAA;AAAA;AAEV;;;;"}
|
package/esm/itemToString.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"itemToString.js","sources":["../src/itemToString.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ItemToStringFunction = (item: any) => string;\n\nconst isPlainObject = (obj: unknown) =>\n Object.prototype.toString.call(obj) === \"[object Object]\";\n\nexport function itemToString(item: unknown): string {\n if (typeof item === \"string\") {\n return item;\n } else if (!isPlainObject(item)) {\n return String(item);\n }\n\n if (Object.prototype.hasOwnProperty.call(item, \"label\")) {\n return String((item as { label?: string }).label);\n }\n\n console.warn(\n [\n \"itemToString: you've likely forgotten to set the label prop on the item object.\",\n \"You can also provide your own `itemToString` implementation.\",\n ].join(\"\\n\")\n );\n\n return \"\";\n}\n"],"names":[],"mappings":"AAGA,MAAM,aAAA,GAAgB,CAAC,GACrB,KAAA,MAAA,CAAO,UAAU,QAAS,CAAA,IAAA,CAAK,GAAG,CAAM,KAAA,iBAAA
|
|
1
|
+
{"version":3,"file":"itemToString.js","sources":["../src/itemToString.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ItemToStringFunction = (item: any) => string;\n\nconst isPlainObject = (obj: unknown) =>\n Object.prototype.toString.call(obj) === \"[object Object]\";\n\nexport function itemToString(item: unknown): string {\n if (typeof item === \"string\") {\n return item;\n } else if (!isPlainObject(item)) {\n return String(item);\n }\n\n if (Object.prototype.hasOwnProperty.call(item, \"label\")) {\n return String((item as { label?: string }).label);\n }\n\n console.warn(\n [\n \"itemToString: you've likely forgotten to set the label prop on the item object.\",\n \"You can also provide your own `itemToString` implementation.\",\n ].join(\"\\n\")\n );\n\n return \"\";\n}\n"],"names":[],"mappings":"AAGA,MAAM,aAAA,GAAgB,CAAC,GACrB,KAAA,MAAA,CAAO,UAAU,QAAS,CAAA,IAAA,CAAK,GAAG,CAAM,KAAA,iBAAA;AAEnC,SAAS,aAAa,IAAuB,EAAA;AAClD,EAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,IAAO,OAAA,IAAA;AAAA,GACE,MAAA,IAAA,CAAC,aAAc,CAAA,IAAI,CAAG,EAAA;AAC/B,IAAA,OAAO,OAAO,IAAI,CAAA;AAAA;AAGpB,EAAA,IAAI,OAAO,SAAU,CAAA,cAAA,CAAe,IAAK,CAAA,IAAA,EAAM,OAAO,CAAG,EAAA;AACvD,IAAO,OAAA,MAAA,CAAQ,KAA4B,KAAK,CAAA;AAAA;AAGlD,EAAQ,OAAA,CAAA,IAAA;AAAA,IACN;AAAA,MACE,iFAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,IAAI;AAAA,GACb;AAEA,EAAO,OAAA,EAAA;AACT;;;;"}
|
package/esm/json-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-utils.js","sources":["../src/json-utils.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n DataValueTypeDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { metadataKeys } from \"./column-utils\";\n\nconst { COUNT } = metadataKeys;\n\nexport type JsonData =\n | {\n [key: string]: unknown;\n }\n | JsonData[];\n\ntype Index = { value: number };\n\ntype CellValue = {\n attribute: string;\n attributeValue: JsonData | VuuRowDataItemType | null;\n isLeaf: boolean;\n};\n\nconst isJsonData = (value: unknown): value is JsonData =>\n typeof value === \"object\" && value !== null;\n\nconst vuuRowDataItemTypes = [\"boolean\", \"number\", \"string\"];\nconst isVuuRowDataItem = (value: unknown): value is VuuRowDataItemType =>\n vuuRowDataItemTypes.includes(typeof value);\n\nconst getCellValue = (\n attribute: string,\n attributeValue: unknown,\n): CellValue => {\n if (Array.isArray(attributeValue)) {\n return {\n attribute: `${attribute}[`,\n attributeValue: \"\",\n isLeaf: false,\n };\n } else if (isJsonData(attributeValue)) {\n return {\n attribute: `${attribute}{`,\n attributeValue: \"\",\n isLeaf: false,\n };\n } else if (attributeValue === undefined) {\n return {\n attribute,\n attributeValue: \"undefined\",\n isLeaf: true,\n };\n } else if (isVuuRowDataItem(attributeValue)) {\n return {\n attribute,\n attributeValue,\n isLeaf: true,\n };\n } else {\n throw Error(`unsupported type ${typeof attributeValue} in JSON`);\n }\n};\n\nconst jsonColumnType: DataValueTypeDescriptor = {\n name: \"json\",\n renderer: {\n name: \"json\",\n },\n};\n\nexport const jsonToDataSourceRows = (\n json: JsonData,\n): [ColumnDescriptor[], DataSourceRow[]] => {\n const cols: ColumnDescriptor[] = [];\n\n cols.push(\n {\n className: \"vuuJsonCell\",\n name: \"Level 1\",\n type: jsonColumnType,\n },\n {\n className: \"vuuJsonCell\",\n name: \"Level 2\",\n type: jsonColumnType,\n },\n );\n\n const rows: DataSourceRow[] = [];\n\n addChildValues(rows, json, cols);\n return [cols, rows];\n};\n\nconst addChildValues = (\n rows: DataSourceRow[],\n json: JsonData,\n cols: ColumnDescriptor[],\n index: Index = { value: 0 },\n keyBase = \"$root\",\n depth = 0,\n): [number, number] => {\n let leafCount = 0;\n let rowCount = 0;\n if (depth === cols.length - 1) {\n cols.push({\n className: \"vuuJsonCell\",\n name: `Level ${cols.length + 1}`,\n hidden: true,\n type: jsonColumnType,\n });\n }\n const columnEntries = Object.entries(json);\n for (let i = 0; i < columnEntries.length; i++, index.value += 1) {\n const [key, value] = columnEntries[i];\n const { attribute, attributeValue, isLeaf } = getCellValue(key, value);\n const blanks = Array(depth).fill(\"\");\n const fullKey = `${keyBase}|${key}`;\n // prettier-ignore\n const row = [index.value, index.value, isLeaf,false,depth,0,fullKey,0, ...blanks, attribute, attributeValue ] as DataSourceRow\n rows.push(row);\n rowCount += 1;\n\n if (isJsonData(value)) {\n const [nestedLeafCount, nestedRowCount] = addChildValues(\n rows,\n value,\n cols,\n { value: index.value + 1 },\n fullKey,\n depth + 1,\n );\n row[COUNT] = nestedLeafCount;\n leafCount += nestedLeafCount;\n rowCount += nestedRowCount;\n index.value += nestedRowCount;\n } else {\n leafCount += 1;\n }\n }\n\n return [leafCount, rowCount];\n};\n"],"names":[],"mappings":";;AAQA,MAAM,EAAE,OAAU,GAAA,YAAA
|
|
1
|
+
{"version":3,"file":"json-utils.js","sources":["../src/json-utils.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n DataValueTypeDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { metadataKeys } from \"./column-utils\";\n\nconst { COUNT } = metadataKeys;\n\nexport type JsonData =\n | {\n [key: string]: unknown;\n }\n | JsonData[];\n\ntype Index = { value: number };\n\ntype CellValue = {\n attribute: string;\n attributeValue: JsonData | VuuRowDataItemType | null;\n isLeaf: boolean;\n};\n\nconst isJsonData = (value: unknown): value is JsonData =>\n typeof value === \"object\" && value !== null;\n\nconst vuuRowDataItemTypes = [\"boolean\", \"number\", \"string\"];\nconst isVuuRowDataItem = (value: unknown): value is VuuRowDataItemType =>\n vuuRowDataItemTypes.includes(typeof value);\n\nconst getCellValue = (\n attribute: string,\n attributeValue: unknown,\n): CellValue => {\n if (Array.isArray(attributeValue)) {\n return {\n attribute: `${attribute}[`,\n attributeValue: \"\",\n isLeaf: false,\n };\n } else if (isJsonData(attributeValue)) {\n return {\n attribute: `${attribute}{`,\n attributeValue: \"\",\n isLeaf: false,\n };\n } else if (attributeValue === undefined) {\n return {\n attribute,\n attributeValue: \"undefined\",\n isLeaf: true,\n };\n } else if (isVuuRowDataItem(attributeValue)) {\n return {\n attribute,\n attributeValue,\n isLeaf: true,\n };\n } else {\n throw Error(`unsupported type ${typeof attributeValue} in JSON`);\n }\n};\n\nconst jsonColumnType: DataValueTypeDescriptor = {\n name: \"json\",\n renderer: {\n name: \"json\",\n },\n};\n\nexport const jsonToDataSourceRows = (\n json: JsonData,\n): [ColumnDescriptor[], DataSourceRow[]] => {\n const cols: ColumnDescriptor[] = [];\n\n cols.push(\n {\n className: \"vuuJsonCell\",\n name: \"Level 1\",\n type: jsonColumnType,\n },\n {\n className: \"vuuJsonCell\",\n name: \"Level 2\",\n type: jsonColumnType,\n },\n );\n\n const rows: DataSourceRow[] = [];\n\n addChildValues(rows, json, cols);\n return [cols, rows];\n};\n\nconst addChildValues = (\n rows: DataSourceRow[],\n json: JsonData,\n cols: ColumnDescriptor[],\n index: Index = { value: 0 },\n keyBase = \"$root\",\n depth = 0,\n): [number, number] => {\n let leafCount = 0;\n let rowCount = 0;\n if (depth === cols.length - 1) {\n cols.push({\n className: \"vuuJsonCell\",\n name: `Level ${cols.length + 1}`,\n hidden: true,\n type: jsonColumnType,\n });\n }\n const columnEntries = Object.entries(json);\n for (let i = 0; i < columnEntries.length; i++, index.value += 1) {\n const [key, value] = columnEntries[i];\n const { attribute, attributeValue, isLeaf } = getCellValue(key, value);\n const blanks = Array(depth).fill(\"\");\n const fullKey = `${keyBase}|${key}`;\n // prettier-ignore\n const row = [index.value, index.value, isLeaf,false,depth,0,fullKey,0, ...blanks, attribute, attributeValue ] as DataSourceRow\n rows.push(row);\n rowCount += 1;\n\n if (isJsonData(value)) {\n const [nestedLeafCount, nestedRowCount] = addChildValues(\n rows,\n value,\n cols,\n { value: index.value + 1 },\n fullKey,\n depth + 1,\n );\n row[COUNT] = nestedLeafCount;\n leafCount += nestedLeafCount;\n rowCount += nestedRowCount;\n index.value += nestedRowCount;\n } else {\n leafCount += 1;\n }\n }\n\n return [leafCount, rowCount];\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard-utils.js","sources":["../src/keyboard-utils.ts"],"sourcesContent":["export const ArrowUp = \"ArrowUp\";\nexport const ArrowDown = \"ArrowDown\";\nexport const ArrowLeft = \"ArrowLeft\";\nexport const ArrowRight = \"ArrowRight\";\nexport const Enter = \"Enter\";\nexport const Escape = \"Escape\";\nexport const Home = \"Home\";\nexport const End = \"End\";\nexport const PageUp = \"PageUp\";\nexport const PageDown = \"PageDown\";\nexport const Space = \" \";\nexport const Tab = \"Tab\";\n\nexport type ArrowKey = \"ArrowUp\" | \"ArrowDown\" | \"ArrowLeft\" | \"ArrowRight\";\nexport type PageKey = \"Home\" | \"End\" | \"PageUp\" | \"PageDown\";\n\nexport const isArrowKey = (key: string): key is ArrowKey =>\n key === \"ArrowUp\" ||\n key === \"ArrowDown\" ||\n key === \"ArrowLeft\" ||\n key === \"ArrowRight\";\n"],"names":[],"mappings":"AAAO,MAAM,OAAU,GAAA
|
|
1
|
+
{"version":3,"file":"keyboard-utils.js","sources":["../src/keyboard-utils.ts"],"sourcesContent":["export const ArrowUp = \"ArrowUp\";\nexport const ArrowDown = \"ArrowDown\";\nexport const ArrowLeft = \"ArrowLeft\";\nexport const ArrowRight = \"ArrowRight\";\nexport const Enter = \"Enter\";\nexport const Escape = \"Escape\";\nexport const Home = \"Home\";\nexport const End = \"End\";\nexport const PageUp = \"PageUp\";\nexport const PageDown = \"PageDown\";\nexport const Space = \" \";\nexport const Tab = \"Tab\";\n\nexport type ArrowKey = \"ArrowUp\" | \"ArrowDown\" | \"ArrowLeft\" | \"ArrowRight\";\nexport type PageKey = \"Home\" | \"End\" | \"PageUp\" | \"PageDown\";\n\nexport const isArrowKey = (key: string): key is ArrowKey =>\n key === \"ArrowUp\" ||\n key === \"ArrowDown\" ||\n key === \"ArrowLeft\" ||\n key === \"ArrowRight\";\n"],"names":[],"mappings":"AAAO,MAAM,OAAU,GAAA;AAChB,MAAM,SAAY,GAAA;AAClB,MAAM,SAAY,GAAA;AAClB,MAAM,UAAa,GAAA;AACnB,MAAM,KAAQ,GAAA;AACd,MAAM,MAAS,GAAA;AACf,MAAM,IAAO,GAAA;AACb,MAAM,GAAM,GAAA;AACZ,MAAM,MAAS,GAAA;AACf,MAAM,QAAW,GAAA;AACjB,MAAM,KAAQ,GAAA;AACd,MAAM,GAAM,GAAA;AAKN,MAAA,UAAA,GAAa,CAAC,GACzB,KAAA,GAAA,KAAQ,aACR,GAAQ,KAAA,WAAA,IACR,GAAQ,KAAA,WAAA,IACR,GAAQ,KAAA;;;;"}
|
package/esm/keyset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyset.js","sources":["../src/keyset.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\nconst EMPTY: number[] = [];\nexport class KeySet {\n private keys = new Map<number, number>();\n private nextKeyValue = 0;\n private range: VuuRange;\n\n constructor(range: VuuRange) {\n this.range = range;\n this.init(range);\n }\n\n public next(free: number[] = EMPTY): number {\n if (free.length > 0) {\n return free.shift() as number;\n } else {\n return this.nextKeyValue++;\n }\n }\n\n private init({ from, to }: VuuRange) {\n this.keys.clear();\n this.nextKeyValue = 0;\n\n for (let rowIndex = from; rowIndex < to; rowIndex++) {\n const nextKeyValue = this.next();\n this.keys.set(rowIndex, nextKeyValue);\n }\n\n return true;\n }\n\n public reset(range: VuuRange) {\n const { from, to } = range;\n\n const newSize = to - from;\n const currentSize = this.range.to - this.range.from;\n this.range = range;\n\n if (currentSize > newSize) {\n // We re-initialize the range when the range size reduces, even though this will\n // potentially re-render all items.\n return this.init(range);\n }\n\n const freeKeys: number[] = [];\n\n this.keys.forEach((keyValue, rowIndex) => {\n if (rowIndex < from || rowIndex >= to) {\n freeKeys.push(keyValue);\n this.keys.delete(rowIndex);\n }\n });\n\n for (let rowIndex = from; rowIndex < to; rowIndex++) {\n if (!this.keys.has(rowIndex)) {\n const nextKeyValue = this.next(freeKeys);\n this.keys.set(rowIndex, nextKeyValue);\n }\n }\n\n return false;\n }\n\n public keyFor(rowIndex: number): number {\n const key = this.keys.get(rowIndex);\n if (key === undefined) {\n console.log(`key not found\n keys: ${this.toDebugString()}\n `);\n throw Error(`KeySet, no key found for rowIndex ${rowIndex}`);\n }\n return key;\n }\n\n public toDebugString() {\n return `${this.keys.size} keys\n${Array.from(this.keys.entries())\n .sort(([key1], [key2]) => key1 - key2)\n .map<string>(([k, v]) => `${k}=>${v}`)\n .join(\",\")}]\\n`;\n }\n}\n"],"names":[],"mappings":";;;AAEA,MAAM,QAAkB,EAAC
|
|
1
|
+
{"version":3,"file":"keyset.js","sources":["../src/keyset.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\nconst EMPTY: number[] = [];\nexport class KeySet {\n private keys = new Map<number, number>();\n private nextKeyValue = 0;\n private range: VuuRange;\n\n constructor(range: VuuRange) {\n this.range = range;\n this.init(range);\n }\n\n public next(free: number[] = EMPTY): number {\n if (free.length > 0) {\n return free.shift() as number;\n } else {\n return this.nextKeyValue++;\n }\n }\n\n private init({ from, to }: VuuRange) {\n this.keys.clear();\n this.nextKeyValue = 0;\n\n for (let rowIndex = from; rowIndex < to; rowIndex++) {\n const nextKeyValue = this.next();\n this.keys.set(rowIndex, nextKeyValue);\n }\n\n return true;\n }\n\n public reset(range: VuuRange) {\n const { from, to } = range;\n\n const newSize = to - from;\n const currentSize = this.range.to - this.range.from;\n this.range = range;\n\n if (currentSize > newSize) {\n // We re-initialize the range when the range size reduces, even though this will\n // potentially re-render all items.\n return this.init(range);\n }\n\n const freeKeys: number[] = [];\n\n this.keys.forEach((keyValue, rowIndex) => {\n if (rowIndex < from || rowIndex >= to) {\n freeKeys.push(keyValue);\n this.keys.delete(rowIndex);\n }\n });\n\n for (let rowIndex = from; rowIndex < to; rowIndex++) {\n if (!this.keys.has(rowIndex)) {\n const nextKeyValue = this.next(freeKeys);\n this.keys.set(rowIndex, nextKeyValue);\n }\n }\n\n return false;\n }\n\n public keyFor(rowIndex: number): number {\n const key = this.keys.get(rowIndex);\n if (key === undefined) {\n console.log(`key not found\n keys: ${this.toDebugString()}\n `);\n throw Error(`KeySet, no key found for rowIndex ${rowIndex}`);\n }\n return key;\n }\n\n public toDebugString() {\n return `${this.keys.size} keys\n${Array.from(this.keys.entries())\n .sort(([key1], [key2]) => key1 - key2)\n .map<string>(([k, v]) => `${k}=>${v}`)\n .join(\",\")}]\\n`;\n }\n}\n"],"names":[],"mappings":"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"}
|
package/esm/list-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-utils.js","sources":["../src/list-utils.ts"],"sourcesContent":["import type { ListOption } from \"@vuu-ui/vuu-table-types\";\n\nexport const getSelectedOption = (\n values: ListOption[],\n selectedValue: string | number | undefined,\n) => {\n if (selectedValue === undefined) {\n return undefined;\n }\n return values.find((option) => option.value === selectedValue);\n};\n"],"names":[],"mappings":"AAEa,MAAA,iBAAA,GAAoB,CAC/B,MAAA,EACA,aACG,KAAA;AACH,EAAA,IAAI,kBAAkB,KAAW,CAAA,EAAA;AAC/B,IAAO,OAAA,KAAA,CAAA
|
|
1
|
+
{"version":3,"file":"list-utils.js","sources":["../src/list-utils.ts"],"sourcesContent":["import type { ListOption } from \"@vuu-ui/vuu-table-types\";\n\nexport const getSelectedOption = (\n values: ListOption[],\n selectedValue: string | number | undefined,\n) => {\n if (selectedValue === undefined) {\n return undefined;\n }\n return values.find((option) => option.value === selectedValue);\n};\n"],"names":[],"mappings":"AAEa,MAAA,iBAAA,GAAoB,CAC/B,MAAA,EACA,aACG,KAAA;AACH,EAAA,IAAI,kBAAkB,KAAW,CAAA,EAAA;AAC/B,IAAO,OAAA,KAAA,CAAA;AAAA;AAET,EAAA,OAAO,OAAO,IAAK,CAAA,CAAC,MAAW,KAAA,MAAA,CAAO,UAAU,aAAa,CAAA;AAC/D;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-storage-utils.js","sources":["../src/local-storage-utils.ts"],"sourcesContent":["export const getLocalEntity = <T>(url: string): T | undefined => {\n const data = localStorage.getItem(url);\n return data ? JSON.parse(data) : undefined;\n};\n\nexport const getAllLocalEntity = <T>(url: string): T[] =>\n Object.entries(localStorage)\n .filter(([key]) => key.includes(url))\n .map(([, value]) => JSON.parse(value) as T);\n\nexport const saveLocalEntity = <T>(url: string, data: T): T | undefined => {\n try {\n localStorage.setItem(url, JSON.stringify(data));\n return data;\n } catch {\n return undefined;\n }\n};\n"],"names":[],"mappings":"AAAa,MAAA,cAAA,GAAiB,CAAI,GAA+B,KAAA;AAC/D,EAAM,MAAA,IAAA,GAAO,YAAa,CAAA,OAAA,CAAQ,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"local-storage-utils.js","sources":["../src/local-storage-utils.ts"],"sourcesContent":["export const getLocalEntity = <T>(url: string): T | undefined => {\n const data = localStorage.getItem(url);\n return data ? JSON.parse(data) : undefined;\n};\n\nexport const getAllLocalEntity = <T>(url: string): T[] =>\n Object.entries(localStorage)\n .filter(([key]) => key.includes(url))\n .map(([, value]) => JSON.parse(value) as T);\n\nexport const saveLocalEntity = <T>(url: string, data: T): T | undefined => {\n try {\n localStorage.setItem(url, JSON.stringify(data));\n return data;\n } catch {\n return undefined;\n }\n};\n"],"names":[],"mappings":"AAAa,MAAA,cAAA,GAAiB,CAAI,GAA+B,KAAA;AAC/D,EAAM,MAAA,IAAA,GAAO,YAAa,CAAA,OAAA,CAAQ,GAAG,CAAA;AACrC,EAAA,OAAO,IAAO,GAAA,IAAA,CAAK,KAAM,CAAA,IAAI,CAAI,GAAA,KAAA,CAAA;AACnC;AAEa,MAAA,iBAAA,GAAoB,CAAI,GAAA,KACnC,MAAO,CAAA,OAAA,CAAQ,YAAY,CAAA,CACxB,MAAO,CAAA,CAAC,CAAC,GAAG,CAAM,KAAA,GAAA,CAAI,SAAS,GAAG,CAAC,CACnC,CAAA,GAAA,CAAI,CAAC,GAAG,KAAK,CAAM,KAAA,IAAA,CAAK,KAAM,CAAA,KAAK,CAAM;AAEjC,MAAA,eAAA,GAAkB,CAAI,GAAA,EAAa,IAA2B,KAAA;AACzE,EAAI,IAAA;AACF,IAAA,YAAA,CAAa,OAAQ,CAAA,GAAA,EAAK,IAAK,CAAA,SAAA,CAAU,IAAI,CAAC,CAAA;AAC9C,IAAO,OAAA,IAAA;AAAA,GACD,CAAA,MAAA;AACN,IAAO,OAAA,KAAA,CAAA;AAAA;AAEX;;;;"}
|
package/esm/logging-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging-utils.js","sources":["../src/logging-utils.ts"],"sourcesContent":["import { getCookieValue } from \"./cookie-utils\";\n\ndeclare global {\n const loggingSettings: loggingSettings;\n}\n\nexport interface LogFn {\n (message?: unknown, ...optionalParams: unknown[]): void;\n}\nexport interface AssertLogFn {\n (condition: boolean, message?: unknown, errorMessaage?: unknown): void;\n}\n\nexport interface TableLogFn {\n (properties?: object): void;\n}\n\ntype loggingSettings = {\n loggingLevel: LogLevel;\n};\n\nexport interface Logger {\n warn: LogFn;\n error: LogFn;\n debug: LogFn;\n info: LogFn;\n}\n\nexport type LogLevel = keyof Logger;\n\nconst logLevels = [\"error\", \"warn\", \"info\", \"debug\"];\nconst isValidLogLevel = (value: unknown): value is LogLevel =>\n typeof value === \"string\" && logLevels.includes(value);\n\nconst DEFAULT_LOG_LEVEL: LogLevel = \"error\";\n\nexport type BuildEnv = \"production\" | \"development\";\n\nconst NO_OP = () => undefined;\n\nconst DEFAULT_DEBUG_LEVEL: LogLevel =\n process.env.NODE_ENV === \"production\" ? \"error\" : \"info\";\n\nconst { loggingLevel = DEFAULT_DEBUG_LEVEL } = getLoggingSettings();\n// typeof loggingSettings !== \"undefined\" ? loggingSettings : {};\n// const { loggingLevel = DEFAULT_DEBUG_LEVEL } =\n// typeof loggingSettings !== \"undefined\" ? loggingSettings : {};\n\nexport const logger = (category: string) => {\n const debugEnabled = loggingLevel === \"debug\";\n const infoEnabled = debugEnabled || loggingLevel === \"info\";\n const warnEnabled = infoEnabled || loggingLevel === \"warn\";\n const errorEnabled = warnEnabled || loggingLevel === \"error\";\n\n const info = infoEnabled\n ? (message: string) => console.info(`[${category}] ${message}`)\n : NO_OP;\n const warn = warnEnabled\n ? (message: string) => console.warn(`[${category}] ${message}`)\n : NO_OP;\n const debug = debugEnabled\n ? (message: string) => console.debug(`[${category}] ${message}`)\n : NO_OP;\n const error = errorEnabled\n ? (message: string) => console.error(`[${category}] ${message}`)\n : NO_OP;\n\n if (process.env.NODE_ENV === \"production\") {\n return {\n errorEnabled,\n error,\n };\n } else {\n return {\n debugEnabled,\n infoEnabled,\n warnEnabled,\n errorEnabled,\n info,\n warn,\n debug,\n error,\n };\n }\n};\n\nfunction getLoggingSettings() {\n if (typeof loggingSettings !== \"undefined\") {\n return loggingSettings;\n } else {\n return {\n loggingLevel: getLoggingLevelFromCookie(),\n };\n }\n}\n\nfunction getLoggingLevelFromCookie(): LogLevel {\n const value = getCookieValue(\"vuu-logging-level\");\n if (isValidLogLevel(value)) {\n return value;\n } else {\n return DEFAULT_LOG_LEVEL;\n }\n}\n\nexport const getLoggingConfigForWorker = () => {\n return `const loggingSettings = { loggingLevel: \"${getLoggingLevelFromCookie()}\"};`;\n};\n"],"names":[],"mappings":";;AA8BA,MAAM,SAAY,GAAA,CAAC,OAAS,EAAA,MAAA,EAAQ,QAAQ,OAAO,CAAA
|
|
1
|
+
{"version":3,"file":"logging-utils.js","sources":["../src/logging-utils.ts"],"sourcesContent":["import { getCookieValue } from \"./cookie-utils\";\n\ndeclare global {\n const loggingSettings: loggingSettings;\n}\n\nexport interface LogFn {\n (message?: unknown, ...optionalParams: unknown[]): void;\n}\nexport interface AssertLogFn {\n (condition: boolean, message?: unknown, errorMessaage?: unknown): void;\n}\n\nexport interface TableLogFn {\n (properties?: object): void;\n}\n\ntype loggingSettings = {\n loggingLevel: LogLevel;\n};\n\nexport interface Logger {\n warn: LogFn;\n error: LogFn;\n debug: LogFn;\n info: LogFn;\n}\n\nexport type LogLevel = keyof Logger;\n\nconst logLevels = [\"error\", \"warn\", \"info\", \"debug\"];\nconst isValidLogLevel = (value: unknown): value is LogLevel =>\n typeof value === \"string\" && logLevels.includes(value);\n\nconst DEFAULT_LOG_LEVEL: LogLevel = \"error\";\n\nexport type BuildEnv = \"production\" | \"development\";\n\nconst NO_OP = () => undefined;\n\nconst DEFAULT_DEBUG_LEVEL: LogLevel =\n process.env.NODE_ENV === \"production\" ? \"error\" : \"info\";\n\nconst { loggingLevel = DEFAULT_DEBUG_LEVEL } = getLoggingSettings();\n// typeof loggingSettings !== \"undefined\" ? loggingSettings : {};\n// const { loggingLevel = DEFAULT_DEBUG_LEVEL } =\n// typeof loggingSettings !== \"undefined\" ? loggingSettings : {};\n\nexport const logger = (category: string) => {\n const debugEnabled = loggingLevel === \"debug\";\n const infoEnabled = debugEnabled || loggingLevel === \"info\";\n const warnEnabled = infoEnabled || loggingLevel === \"warn\";\n const errorEnabled = warnEnabled || loggingLevel === \"error\";\n\n const info = infoEnabled\n ? (message: string) => console.info(`[${category}] ${message}`)\n : NO_OP;\n const warn = warnEnabled\n ? (message: string) => console.warn(`[${category}] ${message}`)\n : NO_OP;\n const debug = debugEnabled\n ? (message: string) => console.debug(`[${category}] ${message}`)\n : NO_OP;\n const error = errorEnabled\n ? (message: string) => console.error(`[${category}] ${message}`)\n : NO_OP;\n\n if (process.env.NODE_ENV === \"production\") {\n return {\n errorEnabled,\n error,\n };\n } else {\n return {\n debugEnabled,\n infoEnabled,\n warnEnabled,\n errorEnabled,\n info,\n warn,\n debug,\n error,\n };\n }\n};\n\nfunction getLoggingSettings() {\n if (typeof loggingSettings !== \"undefined\") {\n return loggingSettings;\n } else {\n return {\n loggingLevel: getLoggingLevelFromCookie(),\n };\n }\n}\n\nfunction getLoggingLevelFromCookie(): LogLevel {\n const value = getCookieValue(\"vuu-logging-level\");\n if (isValidLogLevel(value)) {\n return value;\n } else {\n return DEFAULT_LOG_LEVEL;\n }\n}\n\nexport const getLoggingConfigForWorker = () => {\n return `const loggingSettings = { loggingLevel: \"${getLoggingLevelFromCookie()}\"};`;\n};\n"],"names":[],"mappings":";;AA8BA,MAAM,SAAY,GAAA,CAAC,OAAS,EAAA,MAAA,EAAQ,QAAQ,OAAO,CAAA;AACnD,MAAM,eAAA,GAAkB,CAAC,KACvB,KAAA,OAAO,UAAU,QAAY,IAAA,SAAA,CAAU,SAAS,KAAK,CAAA;AAEvD,MAAM,iBAA8B,GAAA,OAAA;AAIpC,MAAM,QAAQ,MAAM,KAAA,CAAA;AAEpB,MAAM,mBACJ,GAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,eAAe,OAAU,GAAA,MAAA;AAEpD,MAAM,EAAE,YAAA,GAAe,mBAAoB,EAAA,GAAI,kBAAmB,EAAA;AAKrD,MAAA,MAAA,GAAS,CAAC,QAAqB,KAAA;AAC1C,EAAA,MAAM,eAAe,YAAiB,KAAA,OAAA;AACtC,EAAM,MAAA,WAAA,GAAc,gBAAgB,YAAiB,KAAA,MAAA;AACrD,EAAM,MAAA,WAAA,GAAc,eAAe,YAAiB,KAAA,MAAA;AACpD,EAAM,MAAA,YAAA,GAAe,eAAe,YAAiB,KAAA,OAAA;AAErD,EAAM,MAAA,IAAA,GAAO,WACT,GAAA,CAAC,OAAoB,KAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAC5D,GAAA,KAAA;AACJ,EAAM,MAAA,IAAA,GAAO,WACT,GAAA,CAAC,OAAoB,KAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAC5D,GAAA,KAAA;AACJ,EAAM,MAAA,KAAA,GAAQ,YACV,GAAA,CAAC,OAAoB,KAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAC7D,GAAA,KAAA;AACJ,EAAM,MAAA,KAAA,GAAQ,YACV,GAAA,CAAC,OAAoB,KAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAC7D,GAAA,KAAA;AAEJ,EAAI,IAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,IAAO,OAAA;AAAA,MACL,YAAA;AAAA,MACA;AAAA,KACF;AAAA,GACK,MAAA;AACL,IAAO,OAAA;AAAA,MACL,YAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA;AAEJ;AAEA,SAAS,kBAAqB,GAAA;AAC5B,EAAI,IAAA,OAAO,oBAAoB,WAAa,EAAA;AAC1C,IAAO,OAAA,eAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA;AAAA,MACL,cAAc,yBAA0B;AAAA,KAC1C;AAAA;AAEJ;AAEA,SAAS,yBAAsC,GAAA;AAC7C,EAAM,MAAA,KAAA,GAAQ,eAAe,mBAAmB,CAAA;AAChD,EAAI,IAAA,eAAA,CAAgB,KAAK,CAAG,EAAA;AAC1B,IAAO,OAAA,KAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,iBAAA;AAAA;AAEX;AAEO,MAAM,4BAA4B,MAAM;AAC7C,EAAO,OAAA,CAAA,yCAAA,EAA4C,2BAA2B,CAAA,GAAA,CAAA;AAChF;;;;"}
|
package/esm/menu-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-utils.js","sources":["../src/menu-utils.ts"],"sourcesContent":["import {\n ContextMenuGroupItemDescriptor,\n ContextMenuItemDescriptor,\n DataSourceRow,\n MenuRpcResponse,\n OpenDialogActionWithSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport { getFilterPredicate } from \"@vuu-ui/vuu-filter-parser\";\nimport {\n ClientToServerMenuCellRPC,\n ClientToServerMenuRowRPC,\n ShowNotificationAction,\n VuuMenu,\n VuuMenuContext,\n VuuMenuItem,\n VuuRpcMenuRequest,\n VuuRpcResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnDescriptor,\n TableMenuLocation,\n VuuCellMenuItem,\n VuuRowMenuItem,\n} from \"@vuu-ui/vuu-table-types\";\nimport { getRowRecord, metadataKeys, type ColumnMap } from \"./column-utils\";\n\nexport type VuuServerMenuOptions = {\n columnMap: ColumnMap;\n columnName: string;\n columns: ColumnDescriptor[];\n row: DataSourceRow;\n selectedRows: DataSourceRow[];\n viewport: string;\n};\n\nconst { KEY } = metadataKeys;\n\nexport const isRoot = (menu: VuuMenu) => menu.name === \"ROOT\";\n\nexport const isCellMenu = (options: VuuMenuItem): options is VuuCellMenuItem =>\n options.context === \"cell\";\n\nexport const isRowMenu = (options: VuuMenuItem): options is VuuRowMenuItem =>\n options.context === \"row\";\n\nexport const isSelectionMenu = (options: VuuMenuItem): options is VuuMenuItem =>\n options.context === \"selected-rows\";\n\nexport const isGroupMenuItemDescriptor = (\n menuItem?: ContextMenuItemDescriptor,\n): menuItem is ContextMenuGroupItemDescriptor =>\n menuItem !== undefined && \"children\" in menuItem;\n\nexport const isTableLocation = (\n location: string,\n): location is TableMenuLocation =>\n [\"grid\", \"header\", \"filter\"].includes(location);\n\nconst isVuuMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenuItem =>\n \"rpcName\" in menu;\n\nconst isGroupMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenu =>\n \"menus\" in menu;\n\nconst hasFilter = ({ filter }: VuuMenuItem) =>\n typeof filter === \"string\" && filter.length > 0;\n\nconst vuuContextCompatibleWithTableLocation = (\n uiLocation: TableMenuLocation,\n vuuContext: VuuMenuContext,\n selectedRowCount = 0,\n) => {\n switch (uiLocation) {\n case \"grid\":\n if (vuuContext === \"selected-rows\") {\n return selectedRowCount > 0;\n } else {\n return true;\n }\n case \"header\":\n return vuuContext === \"grid\";\n default:\n return false;\n }\n};\n\nconst gridRowMeetsFilterCriteria = (\n context: VuuMenuContext,\n row: DataSourceRow,\n selectedRows: DataSourceRow[],\n filter: string,\n columnMap: ColumnMap,\n): boolean => {\n if (context === \"cell\" || context === \"row\") {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return filterPredicate(row);\n } else if (context === \"selected-rows\") {\n if (selectedRows.length === 0) {\n return false;\n } else {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return selectedRows.every(filterPredicate);\n }\n }\n return true;\n};\n\nconst menuShouldBeRenderedInThisContext = (\n menuItem: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: VuuServerMenuOptions,\n): boolean => {\n if (isGroupMenuItem(menuItem)) {\n return menuItem.menus.some((childMenu) =>\n menuShouldBeRenderedInThisContext(childMenu, tableLocation, options),\n );\n }\n if (\n !vuuContextCompatibleWithTableLocation(\n tableLocation,\n menuItem.context,\n options.selectedRows?.length,\n )\n ) {\n return false;\n }\n\n if (tableLocation === \"grid\" && hasFilter(menuItem)) {\n return gridRowMeetsFilterCriteria(\n menuItem.context,\n options.row,\n options.selectedRows,\n menuItem.filter,\n options.columnMap,\n );\n }\n\n if (isCellMenu(menuItem) && menuItem.field !== \"*\") {\n return menuItem.field === options.columnName;\n }\n\n return true;\n};\n\nconst getMenuItemOptions = (\n menu: VuuMenuItem,\n options: VuuServerMenuOptions,\n): VuuMenuItem => {\n switch (menu.context) {\n case \"cell\":\n return {\n ...menu,\n field: options.columnName,\n rowKey: options.row[KEY],\n value: options.row[options.columnMap[options.columnName]],\n } as VuuCellMenuItem;\n case \"row\":\n return {\n ...menu,\n columns: options.columns,\n row: getRowRecord(options.row, options.columnMap),\n rowKey: options.row[KEY],\n } as VuuRowMenuItem;\n case \"selected-rows\":\n return {\n ...menu,\n columns: options.columns,\n } as any;\n default:\n return menu;\n }\n};\n\nexport const buildMenuDescriptorFromVuuMenu = (\n menu: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: VuuServerMenuOptions,\n): ContextMenuItemDescriptor | undefined => {\n if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {\n if (isVuuMenuItem(menu)) {\n return {\n label: menu.name,\n action: \"MENU_RPC_CALL\",\n options: getMenuItemOptions(menu, options),\n };\n } else {\n const children = menu.menus\n .map((childMenu) =>\n buildMenuDescriptorFromVuuMenu(childMenu, tableLocation, options),\n )\n .filter(\n (childMenu) => childMenu !== undefined,\n ) as ContextMenuItemDescriptor[];\n if (children.length > 0) {\n return {\n label: menu.name,\n children,\n };\n }\n }\n }\n};\n\nexport const getMenuRpcRequest = (\n options: VuuMenuItem,\n): Omit<VuuRpcMenuRequest, \"vpId\"> => {\n const { rpcName } = options;\n if (isCellMenu(options)) {\n return {\n field: options.field,\n rowKey: options.rowKey,\n rpcName,\n value: options.value,\n type: \"VIEW_PORT_MENU_CELL_RPC\",\n } as Omit<ClientToServerMenuCellRPC, \"vpId\">;\n } else if (isRowMenu(options)) {\n return {\n rowKey: options.rowKey,\n row: options.row,\n rpcName,\n type: \"VIEW_PORT_MENU_ROW_RPC\",\n } as Omit<ClientToServerMenuRowRPC, \"vpId\">;\n } else if (isSelectionMenu(options)) {\n return {\n rpcName,\n type: \"VIEW_PORT_MENUS_SELECT_RPC\",\n } as Omit<VuuRpcMenuRequest, \"vpId\">;\n } else {\n return {\n rpcName,\n type: \"VIEW_PORT_MENU_TABLE_RPC\",\n } as Omit<VuuRpcMenuRequest, \"vpId\">;\n }\n};\n\nexport const isOpenBulkEditResponse = (\n rpcResponse: Partial<VuuRpcResponse>,\n): rpcResponse is MenuRpcResponse<OpenDialogActionWithSchema> =>\n (rpcResponse as MenuRpcResponse).rpcName === \"VP_BULK_EDIT_BEGIN_RPC\";\n\nexport const hasShowNotificationAction = (\n res: Partial<VuuRpcResponse>,\n): res is MenuRpcResponse<ShowNotificationAction> =>\n (res as MenuRpcResponse).action?.type === \"SHOW_NOTIFICATION_ACTION\";\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"menu-utils.js","sources":["../src/menu-utils.ts"],"sourcesContent":["import {\n ContextMenuGroupItemDescriptor,\n ContextMenuItemDescriptor,\n DataSourceRow,\n MenuRpcResponse,\n OpenDialogActionWithSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport { getFilterPredicate } from \"@vuu-ui/vuu-filter-parser\";\nimport {\n ClientToServerMenuCellRPC,\n ClientToServerMenuRowRPC,\n ShowNotificationAction,\n VuuMenu,\n VuuMenuContext,\n VuuMenuItem,\n VuuRpcMenuRequest,\n VuuRpcResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnDescriptor,\n TableMenuLocation,\n VuuCellMenuItem,\n VuuRowMenuItem,\n} from \"@vuu-ui/vuu-table-types\";\nimport { getRowRecord, metadataKeys, type ColumnMap } from \"./column-utils\";\n\nexport type VuuServerMenuOptions = {\n columnMap: ColumnMap;\n columnName: string;\n columns: ColumnDescriptor[];\n row: DataSourceRow;\n selectedRows: DataSourceRow[];\n viewport: string;\n};\n\nconst { KEY } = metadataKeys;\n\nexport const isRoot = (menu: VuuMenu) => menu.name === \"ROOT\";\n\nexport const isCellMenu = (options: VuuMenuItem): options is VuuCellMenuItem =>\n options.context === \"cell\";\n\nexport const isRowMenu = (options: VuuMenuItem): options is VuuRowMenuItem =>\n options.context === \"row\";\n\nexport const isSelectionMenu = (options: VuuMenuItem): options is VuuMenuItem =>\n options.context === \"selected-rows\";\n\nexport const isGroupMenuItemDescriptor = (\n menuItem?: ContextMenuItemDescriptor,\n): menuItem is ContextMenuGroupItemDescriptor =>\n menuItem !== undefined && \"children\" in menuItem;\n\nexport const isTableLocation = (\n location: string,\n): location is TableMenuLocation =>\n [\"grid\", \"header\", \"filter\"].includes(location);\n\nconst isVuuMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenuItem =>\n \"rpcName\" in menu;\n\nconst isGroupMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenu =>\n \"menus\" in menu;\n\nconst hasFilter = ({ filter }: VuuMenuItem) =>\n typeof filter === \"string\" && filter.length > 0;\n\nconst vuuContextCompatibleWithTableLocation = (\n uiLocation: TableMenuLocation,\n vuuContext: VuuMenuContext,\n selectedRowCount = 0,\n) => {\n switch (uiLocation) {\n case \"grid\":\n if (vuuContext === \"selected-rows\") {\n return selectedRowCount > 0;\n } else {\n return true;\n }\n case \"header\":\n return vuuContext === \"grid\";\n default:\n return false;\n }\n};\n\nconst gridRowMeetsFilterCriteria = (\n context: VuuMenuContext,\n row: DataSourceRow,\n selectedRows: DataSourceRow[],\n filter: string,\n columnMap: ColumnMap,\n): boolean => {\n if (context === \"cell\" || context === \"row\") {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return filterPredicate(row);\n } else if (context === \"selected-rows\") {\n if (selectedRows.length === 0) {\n return false;\n } else {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return selectedRows.every(filterPredicate);\n }\n }\n return true;\n};\n\nconst menuShouldBeRenderedInThisContext = (\n menuItem: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: VuuServerMenuOptions,\n): boolean => {\n if (isGroupMenuItem(menuItem)) {\n return menuItem.menus.some((childMenu) =>\n menuShouldBeRenderedInThisContext(childMenu, tableLocation, options),\n );\n }\n if (\n !vuuContextCompatibleWithTableLocation(\n tableLocation,\n menuItem.context,\n options.selectedRows?.length,\n )\n ) {\n return false;\n }\n\n if (tableLocation === \"grid\" && hasFilter(menuItem)) {\n return gridRowMeetsFilterCriteria(\n menuItem.context,\n options.row,\n options.selectedRows,\n menuItem.filter,\n options.columnMap,\n );\n }\n\n if (isCellMenu(menuItem) && menuItem.field !== \"*\") {\n return menuItem.field === options.columnName;\n }\n\n return true;\n};\n\nconst getMenuItemOptions = (\n menu: VuuMenuItem,\n options: VuuServerMenuOptions,\n): VuuMenuItem => {\n switch (menu.context) {\n case \"cell\":\n return {\n ...menu,\n field: options.columnName,\n rowKey: options.row[KEY],\n value: options.row[options.columnMap[options.columnName]],\n } as VuuCellMenuItem;\n case \"row\":\n return {\n ...menu,\n columns: options.columns,\n row: getRowRecord(options.row, options.columnMap),\n rowKey: options.row[KEY],\n } as VuuRowMenuItem;\n case \"selected-rows\":\n return {\n ...menu,\n columns: options.columns,\n } as any;\n default:\n return menu;\n }\n};\n\nexport const buildMenuDescriptorFromVuuMenu = (\n menu: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: VuuServerMenuOptions,\n): ContextMenuItemDescriptor | undefined => {\n if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {\n if (isVuuMenuItem(menu)) {\n return {\n label: menu.name,\n action: \"MENU_RPC_CALL\",\n options: getMenuItemOptions(menu, options),\n };\n } else {\n const children = menu.menus\n .map((childMenu) =>\n buildMenuDescriptorFromVuuMenu(childMenu, tableLocation, options),\n )\n .filter(\n (childMenu) => childMenu !== undefined,\n ) as ContextMenuItemDescriptor[];\n if (children.length > 0) {\n return {\n label: menu.name,\n children,\n };\n }\n }\n }\n};\n\nexport const getMenuRpcRequest = (\n options: VuuMenuItem,\n): Omit<VuuRpcMenuRequest, \"vpId\"> => {\n const { rpcName } = options;\n if (isCellMenu(options)) {\n return {\n field: options.field,\n rowKey: options.rowKey,\n rpcName,\n value: options.value,\n type: \"VIEW_PORT_MENU_CELL_RPC\",\n } as Omit<ClientToServerMenuCellRPC, \"vpId\">;\n } else if (isRowMenu(options)) {\n return {\n rowKey: options.rowKey,\n row: options.row,\n rpcName,\n type: \"VIEW_PORT_MENU_ROW_RPC\",\n } as Omit<ClientToServerMenuRowRPC, \"vpId\">;\n } else if (isSelectionMenu(options)) {\n return {\n rpcName,\n type: \"VIEW_PORT_MENUS_SELECT_RPC\",\n } as Omit<VuuRpcMenuRequest, \"vpId\">;\n } else {\n return {\n rpcName,\n type: \"VIEW_PORT_MENU_TABLE_RPC\",\n } as Omit<VuuRpcMenuRequest, \"vpId\">;\n }\n};\n\nexport const isOpenBulkEditResponse = (\n rpcResponse: Partial<VuuRpcResponse>,\n): rpcResponse is MenuRpcResponse<OpenDialogActionWithSchema> =>\n (rpcResponse as MenuRpcResponse).rpcName === \"VP_BULK_EDIT_BEGIN_RPC\";\n\nexport const hasShowNotificationAction = (\n res: Partial<VuuRpcResponse>,\n): res is MenuRpcResponse<ShowNotificationAction> =>\n (res as MenuRpcResponse).action?.type === \"SHOW_NOTIFICATION_ACTION\";\n"],"names":[],"mappings":"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"}
|
package/esm/module-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-utils.js","sources":["../src/module-utils.ts"],"sourcesContent":["export type ReactComponent = {\n (props?: any): JSX.Element;\n};\n\nexport const isModule = (entity: Module | ReactComponent): entity is Module =>\n entity !== undefined && typeof entity !== \"function\";\n\nexport interface Module<T = ReactComponent> {\n [key: string]: Module<T> | T;\n}\n\nexport const assertModuleExportsAtLeastOneComponent = (module: Module) => {\n if (module && Object.values(module).every((item) => isModule(item))) {\n throw Error(\"module file, no components\");\n }\n};\n"],"names":[],"mappings":"AAIO,MAAM,WAAW,CAAC,MAAA,KACvB,MAAW,KAAA,KAAA,CAAA,IAAa,OAAO,MAAW,KAAA
|
|
1
|
+
{"version":3,"file":"module-utils.js","sources":["../src/module-utils.ts"],"sourcesContent":["export type ReactComponent = {\n (props?: any): JSX.Element;\n};\n\nexport const isModule = (entity: Module | ReactComponent): entity is Module =>\n entity !== undefined && typeof entity !== \"function\";\n\nexport interface Module<T = ReactComponent> {\n [key: string]: Module<T> | T;\n}\n\nexport const assertModuleExportsAtLeastOneComponent = (module: Module) => {\n if (module && Object.values(module).every((item) => isModule(item))) {\n throw Error(\"module file, no components\");\n }\n};\n"],"names":[],"mappings":"AAIO,MAAM,WAAW,CAAC,MAAA,KACvB,MAAW,KAAA,KAAA,CAAA,IAAa,OAAO,MAAW,KAAA;AAM/B,MAAA,sCAAA,GAAyC,CAAC,MAAmB,KAAA;AACxE,EAAI,IAAA,MAAA,IAAU,MAAO,CAAA,MAAA,CAAO,MAAM,CAAA,CAAE,KAAM,CAAA,CAAC,IAAS,KAAA,QAAA,CAAS,IAAI,CAAC,CAAG,EAAA;AACnE,IAAA,MAAM,MAAM,4BAA4B,CAAA;AAAA;AAE5C;;;;"}
|
package/esm/nanoid/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/nanoid/index.ts"],"sourcesContent":["// This is the index.browser.js file from nanoid\n// couldn't get original code to work as npm import without crypro warnings -\n// seemed to be picking up node version, not browser version\n\nexport const uuid = (size = 21): string => {\n let id = '';\n const bytes = crypto.getRandomValues(new Uint8Array(size));\n\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n while (size--) {\n // It is incorrect to use bytes exceeding the alphabet size.\n // The following mask reduces the random byte in the 0-255 value\n // range to the 0-63 value range. Therefore, adding hacks, such\n // as empty string fallback or magic numbers, is unneccessary because\n // the bitmask trims bytes down to the alphabet size.\n const byte = bytes[size] & 63;\n if (byte < 36) {\n // `0-9a-z`\n id += byte.toString(36);\n } else if (byte < 62) {\n // `A-Z`\n id += (byte - 26).toString(36).toUpperCase();\n } else if (byte < 63) {\n id += '_';\n } else {\n id += '-';\n }\n }\n return id;\n};\n"],"names":[],"mappings":"AAIa,MAAA,IAAA,GAAO,CAAC,IAAA,GAAO,EAAe,KAAA;AACzC,EAAA,IAAI,EAAK,GAAA,EAAA
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/nanoid/index.ts"],"sourcesContent":["// This is the index.browser.js file from nanoid\n// couldn't get original code to work as npm import without crypro warnings -\n// seemed to be picking up node version, not browser version\n\nexport const uuid = (size = 21): string => {\n let id = '';\n const bytes = crypto.getRandomValues(new Uint8Array(size));\n\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n while (size--) {\n // It is incorrect to use bytes exceeding the alphabet size.\n // The following mask reduces the random byte in the 0-255 value\n // range to the 0-63 value range. Therefore, adding hacks, such\n // as empty string fallback or magic numbers, is unneccessary because\n // the bitmask trims bytes down to the alphabet size.\n const byte = bytes[size] & 63;\n if (byte < 36) {\n // `0-9a-z`\n id += byte.toString(36);\n } else if (byte < 62) {\n // `A-Z`\n id += (byte - 26).toString(36).toUpperCase();\n } else if (byte < 63) {\n id += '_';\n } else {\n id += '-';\n }\n }\n return id;\n};\n"],"names":[],"mappings":"AAIa,MAAA,IAAA,GAAO,CAAC,IAAA,GAAO,EAAe,KAAA;AACzC,EAAA,IAAI,EAAK,GAAA,EAAA;AACT,EAAA,MAAM,QAAQ,MAAO,CAAA,eAAA,CAAgB,IAAI,UAAA,CAAW,IAAI,CAAC,CAAA;AAGzD,EAAA,OAAO,IAAQ,EAAA,EAAA;AAMb,IAAM,MAAA,IAAA,GAAO,KAAM,CAAA,IAAI,CAAI,GAAA,EAAA;AAC3B,IAAA,IAAI,OAAO,EAAI,EAAA;AAEb,MAAM,EAAA,IAAA,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,KACxB,MAAA,IAAW,OAAO,EAAI,EAAA;AAEpB,MAAA,EAAA,IAAA,CAAO,IAAO,GAAA,EAAA,EAAI,QAAS,CAAA,EAAE,EAAE,WAAY,EAAA;AAAA,KAC7C,MAAA,IAAW,OAAO,EAAI,EAAA;AACpB,MAAM,EAAA,IAAA,GAAA;AAAA,KACD,MAAA;AACL,MAAM,EAAA,IAAA,GAAA;AAAA;AACR;AAEF,EAAO,OAAA,EAAA;AACT;;;;"}
|
package/esm/perf-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"perf-utils.js","sources":["../src/perf-utils.ts"],"sourcesContent":["type VoidFunction = (...args: any) => void;\nexport type PerfFunction<T extends VoidFunction> = (\n ...args: Parameters<T>\n) => void;\n\nexport function debounce<T extends VoidFunction>(\n callback: T,\n timeInterval: number\n): PerfFunction<T> {\n let timeout: number | undefined;\n return (...args: unknown[]) => {\n clearTimeout(timeout);\n timeout = window.setTimeout(() => callback(...args), timeInterval);\n };\n}\n\nexport function throttle<T extends VoidFunction>(\n callback: T,\n limit: number\n): PerfFunction<T> {\n let wait = false;\n let lastArgs: unknown[] | undefined = undefined;\n\n function checkLastArgs() {\n if (lastArgs == undefined) {\n wait = false;\n } else {\n callback(...lastArgs);\n lastArgs = undefined;\n setTimeout(checkLastArgs, limit);\n }\n }\n\n return (...args: unknown[]) => {\n if (wait) {\n lastArgs = args;\n } else {\n callback(...args);\n wait = true;\n setTimeout(checkLastArgs, limit);\n }\n };\n}\n"],"names":[],"mappings":"AAKgB,SAAA,QAAA,CACd,UACA,YACiB,EAAA;AACjB,EAAI,IAAA,OAAA
|
|
1
|
+
{"version":3,"file":"perf-utils.js","sources":["../src/perf-utils.ts"],"sourcesContent":["type VoidFunction = (...args: any) => void;\nexport type PerfFunction<T extends VoidFunction> = (\n ...args: Parameters<T>\n) => void;\n\nexport function debounce<T extends VoidFunction>(\n callback: T,\n timeInterval: number\n): PerfFunction<T> {\n let timeout: number | undefined;\n return (...args: unknown[]) => {\n clearTimeout(timeout);\n timeout = window.setTimeout(() => callback(...args), timeInterval);\n };\n}\n\nexport function throttle<T extends VoidFunction>(\n callback: T,\n limit: number\n): PerfFunction<T> {\n let wait = false;\n let lastArgs: unknown[] | undefined = undefined;\n\n function checkLastArgs() {\n if (lastArgs == undefined) {\n wait = false;\n } else {\n callback(...lastArgs);\n lastArgs = undefined;\n setTimeout(checkLastArgs, limit);\n }\n }\n\n return (...args: unknown[]) => {\n if (wait) {\n lastArgs = args;\n } else {\n callback(...args);\n wait = true;\n setTimeout(checkLastArgs, limit);\n }\n };\n}\n"],"names":[],"mappings":"AAKgB,SAAA,QAAA,CACd,UACA,YACiB,EAAA;AACjB,EAAI,IAAA,OAAA;AACJ,EAAA,OAAO,IAAI,IAAoB,KAAA;AAC7B,IAAA,YAAA,CAAa,OAAO,CAAA;AACpB,IAAA,OAAA,GAAU,OAAO,UAAW,CAAA,MAAM,SAAS,GAAG,IAAI,GAAG,YAAY,CAAA;AAAA,GACnE;AACF;AAEgB,SAAA,QAAA,CACd,UACA,KACiB,EAAA;AACjB,EAAA,IAAI,IAAO,GAAA,KAAA;AACX,EAAA,IAAI,QAAkC,GAAA,KAAA,CAAA;AAEtC,EAAA,SAAS,aAAgB,GAAA;AACvB,IAAA,IAAI,YAAY,KAAW,CAAA,EAAA;AACzB,MAAO,IAAA,GAAA,KAAA;AAAA,KACF,MAAA;AACL,MAAA,QAAA,CAAS,GAAG,QAAQ,CAAA;AACpB,MAAW,QAAA,GAAA,KAAA,CAAA;AACX,MAAA,UAAA,CAAW,eAAe,KAAK,CAAA;AAAA;AACjC;AAGF,EAAA,OAAO,IAAI,IAAoB,KAAA;AAC7B,IAAA,IAAI,IAAM,EAAA;AACR,MAAW,QAAA,GAAA,IAAA;AAAA,KACN,MAAA;AACL,MAAA,QAAA,CAAS,GAAG,IAAI,CAAA;AAChB,MAAO,IAAA,GAAA,IAAA;AACP,MAAA,UAAA,CAAW,eAAe,KAAK,CAAA;AAAA;AACjC,GACF;AACF;;;;"}
|
package/esm/promise-utils.js
CHANGED
|
@@ -4,7 +4,7 @@ var __typeError = (msg) => {
|
|
|
4
4
|
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
5
5
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
6
6
|
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
7
|
-
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"),
|
|
7
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
8
8
|
var _promise, _resolve, _reject, _resolved;
|
|
9
9
|
class DeferredPromise {
|
|
10
10
|
constructor() {
|
package/esm/promise-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise-utils.js","sources":["../src/promise-utils.ts"],"sourcesContent":["export class DeferredPromise<T = unknown> {\n #promise: Promise<T>;\n #resolve: (value: T) => void = () => console.log(\"resolve was not set\");\n #reject: (err: unknown) => void = () => console.log(\"reject was not set\");\n #resolved = false;\n\n constructor() {\n this.#promise = new Promise<T>((resolve, reject) => {\n this.#resolve = resolve;\n this.#reject = reject;\n });\n }\n\n get promise() {\n return this.#promise;\n }\n\n get isResolved() {\n return this.#resolved;\n }\n\n resolve(value: T) {\n this.#resolved = true;\n return this.#resolve(value);\n }\n\n get reject() {\n return this.#reject;\n }\n}\n"],"names":[],"mappings":";;;;;;;AAAA,IAAA,QAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA
|
|
1
|
+
{"version":3,"file":"promise-utils.js","sources":["../src/promise-utils.ts"],"sourcesContent":["export class DeferredPromise<T = unknown> {\n #promise: Promise<T>;\n #resolve: (value: T) => void = () => console.log(\"resolve was not set\");\n #reject: (err: unknown) => void = () => console.log(\"reject was not set\");\n #resolved = false;\n\n constructor() {\n this.#promise = new Promise<T>((resolve, reject) => {\n this.#resolve = resolve;\n this.#reject = reject;\n });\n }\n\n get promise() {\n return this.#promise;\n }\n\n get isResolved() {\n return this.#resolved;\n }\n\n resolve(value: T) {\n this.#resolved = true;\n return this.#resolve(value);\n }\n\n get reject() {\n return this.#reject;\n }\n}\n"],"names":[],"mappings":";;;;;;;AAAA,IAAA,QAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA;AAAO,MAAM,eAA6B,CAAA;AAAA,EAMxC,WAAc,GAAA;AALd,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAA+B,YAAA,CAAA,IAAA,EAAA,QAAA,EAAA,MAAM,OAAQ,CAAA,GAAA,CAAI,qBAAqB,CAAA,CAAA;AACtE,IAAkC,YAAA,CAAA,IAAA,EAAA,OAAA,EAAA,MAAM,OAAQ,CAAA,GAAA,CAAI,oBAAoB,CAAA,CAAA;AACxE,IAAY,YAAA,CAAA,IAAA,EAAA,SAAA,EAAA,KAAA,CAAA;AAGV,IAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,IAAI,OAAW,CAAA,CAAC,SAAS,MAAW,KAAA;AAClD,MAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,OAAA,CAAA;AAChB,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA;AAAA,KAChB,CAAA,CAAA;AAAA;AACH,EAEA,IAAI,OAAU,GAAA;AACZ,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA;AAAA;AACd,EAEA,IAAI,UAAa,GAAA;AACf,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,SAAA,CAAA;AAAA;AACd,EAEA,QAAQ,KAAU,EAAA;AAChB,IAAA,YAAA,CAAA,IAAA,EAAK,SAAY,EAAA,IAAA,CAAA;AACjB,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,UAAL,IAAc,CAAA,IAAA,EAAA,KAAA,CAAA;AAAA;AACvB,EAEA,IAAI,MAAS,GAAA;AACX,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA;AAEhB;AA5BE,QAAA,GAAA,IAAA,OAAA,EAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA;AACA,SAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
@@ -65,6 +65,7 @@ function isActionMessage(rpcResponse) {
|
|
|
65
65
|
function isSessionTableActionMessage(rpcResponse) {
|
|
66
66
|
return isActionMessage(rpcResponse) && isOpenDialogAction(rpcResponse.action) && isSessionTable(rpcResponse.action.table) && rpcResponse.action?.renderComponent === "inline-form";
|
|
67
67
|
}
|
|
68
|
+
const isRpcSuccess = (response) => isActionMessage(response) && response.action.type === "VP_RPC_SUCCESS";
|
|
68
69
|
|
|
69
|
-
export { isActionMessage, isEditCellRequest, isOpenDialogAction, isOpenSessionTableDialogMessage, isRequestResponse, isSessionTable, isSessionTableActionMessage, isViewportRpcRequest, isVuuMenuRpcRequest, viewportRpcRequest, vuuAddRowRequest, vuuDeleteRowRequest, vuuEditCellRequest };
|
|
70
|
+
export { isActionMessage, isEditCellRequest, isOpenDialogAction, isOpenSessionTableDialogMessage, isRequestResponse, isRpcSuccess, isSessionTable, isSessionTableActionMessage, isViewportRpcRequest, isVuuMenuRpcRequest, viewportRpcRequest, vuuAddRowRequest, vuuDeleteRowRequest, vuuEditCellRequest };
|
|
70
71
|
//# sourceMappingURL=protocol-message-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol-message-utils.js","sources":["../src/protocol-message-utils.ts"],"sourcesContent":["import type {\n MenuRpcAction,\n MenuRpcResponse,\n OpenDialogActionWithSchema,\n RpcResponse,\n TableSchema,\n VuuUiMessageInRequestResponse,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuRpcMenuRequest,\n OpenDialogAction,\n VuuRpcEditCellRequest,\n VuuRowDataItemType,\n VuuRpcRequest,\n VuuRpcEditAddRowRequest,\n VuuDataRowDto,\n VuuRpcEditDeleteRowRequest,\n VuuRpcViewportRequest,\n VuuRpcResponse,\n VuuRpcMenuSuccess,\n VuuTable,\n VuuRpcViewportResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nconst MENU_RPC_TYPES = [\n \"VIEW_PORT_MENUS_SELECT_RPC\",\n \"VIEW_PORT_MENU_TABLE_RPC\",\n \"VIEW_PORT_MENU_ROW_RPC\",\n \"VIEW_PORT_MENU_CELL_RPC\",\n \"VP_EDIT_CELL_RPC\",\n \"VP_EDIT_ROW_RPC\",\n \"VP_EDIT_ADD_ROW_RPC\",\n \"VP_EDIT_DELETE_CELL_RPC\",\n \"VP_EDIT_DELETE_ROW_RPC\",\n \"VP_EDIT_SUBMIT_FORM_RPC\",\n];\n\nexport const isVuuMenuRpcRequest = (\n message: VuuRpcRequest | Omit<VuuRpcRequest, \"vpId\">,\n): message is VuuRpcMenuRequest => MENU_RPC_TYPES.includes(message[\"type\"]);\n\nexport const isRequestResponse = (\n message: object,\n): message is VuuUiMessageInRequestResponse => \"requestId\" in message;\n\nexport const isOpenSessionTableDialogMessage = (\n rpcResponse: RpcResponse,\n): rpcResponse is MenuRpcResponse<OpenDialogActionWithSchema> =>\n rpcResponse.type === \"VIEW_PORT_MENU_RESP\" &&\n isOpenDialogAction(rpcResponse.action) &&\n \"tableSchema\" in rpcResponse.action;\n\nexport const isOpenDialogAction = (\n action?: MenuRpcAction,\n): action is OpenDialogAction =>\n action !== undefined && action.type === \"OPEN_DIALOG_ACTION\";\n\nexport function isViewportRpcRequest(\n request: VuuRpcRequest,\n): request is VuuRpcViewportRequest;\nexport function isViewportRpcRequest(\n request: Omit<VuuRpcRequest, \"vpId\">,\n): request is Omit<VuuRpcViewportRequest, \"vpId\">;\nexport function isViewportRpcRequest(\n request: Omit<VuuRpcRequest, \"vpId\">,\n): request is VuuRpcViewportRequest | Omit<VuuRpcViewportRequest, \"vpId\"> {\n return request.type === \"VIEW_PORT_RPC_CALL\";\n}\n\nexport function isEditCellRequest(\n request: VuuRpcRequest,\n): request is VuuRpcEditCellRequest;\nexport function isEditCellRequest(\n request: Omit<VuuRpcRequest, \"vpId\">,\n): request is Omit<VuuRpcEditCellRequest, \"vpId\">;\nexport function isEditCellRequest(\n request: VuuRpcRequest | Omit<VuuRpcRequest, \"vpId\">,\n): request is VuuRpcEditCellRequest | Omit<VuuRpcEditCellRequest, \"vpId\"> {\n return request.type === \"VP_EDIT_CELL_RPC\";\n}\n\nexport function vuuEditCellRequest(\n rowKey: string,\n field: string,\n value: VuuRowDataItemType,\n vpId: string,\n): VuuRpcEditCellRequest;\nexport function vuuEditCellRequest(\n rowKey: string,\n field: string,\n value: VuuRowDataItemType,\n): Omit<VuuRpcEditCellRequest, \"vpId\">;\nexport function vuuEditCellRequest(\n rowKey: string,\n field: string,\n value: VuuRowDataItemType,\n vpId?: string,\n): VuuRpcEditCellRequest | Omit<VuuRpcEditCellRequest, \"vpId\"> {\n return {\n rowKey,\n field,\n value,\n type: \"VP_EDIT_CELL_RPC\",\n vpId,\n };\n}\n\nexport function viewportRpcRequest(\n rpcName: string,\n vpId: string,\n): VuuRpcViewportRequest;\nexport function viewportRpcRequest(\n rpcName: string,\n): Omit<VuuRpcViewportRequest, \"vpId\">;\nexport function viewportRpcRequest(\n rpcName: string,\n vpId?: string,\n): VuuRpcViewportRequest | Omit<VuuRpcViewportRequest, \"vpId\"> {\n return {\n namedParams: {},\n params: [],\n rpcName,\n type: \"VIEW_PORT_RPC_CALL\",\n vpId,\n };\n}\n\nexport function vuuAddRowRequest(\n rowKey: string,\n data: VuuDataRowDto,\n vpId: string,\n): VuuRpcEditAddRowRequest;\nexport function vuuAddRowRequest(\n rowKey: string,\n data: VuuDataRowDto,\n): Omit<VuuRpcEditAddRowRequest, \"vpId\">;\nexport function vuuAddRowRequest(\n rowKey: string,\n data: VuuDataRowDto,\n vpId?: string,\n): VuuRpcEditAddRowRequest | Omit<VuuRpcEditAddRowRequest, \"vpId\"> {\n return {\n rowKey,\n data,\n type: \"VP_EDIT_ADD_ROW_RPC\",\n vpId,\n };\n}\n\nexport function vuuDeleteRowRequest(\n rowKey: string,\n vpId: string,\n): VuuRpcEditDeleteRowRequest;\nexport function vuuDeleteRowRequest(\n rowKey: string,\n): Omit<VuuRpcEditDeleteRowRequest, \"vpId\">;\nexport function vuuDeleteRowRequest(\n rowKey: string,\n vpId?: string,\n): VuuRpcEditDeleteRowRequest | Omit<VuuRpcEditDeleteRowRequest, \"vpId\"> {\n return {\n rowKey,\n type: \"VP_EDIT_DELETE_ROW_RPC\",\n vpId,\n };\n}\n\n// export type WithTableSchema<\n// T extends VuuRpcMenuSuccess | VuuRpcViewportResponse = VuuRpcMenuSuccess,\n// > = T & {\n// action: T extends VuuRpcMenuSuccess\n// ? VuuRpcMenuSuccess[\"action\"] & { tableSchema: TableSchema }\n// : VuuRpcViewportResponse[\"action\"] & { tableSchema: TableSchema };\n// };\n\nexport const isSessionTable = (table?: unknown) => {\n if (\n table !== null &&\n typeof table === \"object\" &&\n \"table\" in table &&\n \"module\" in table\n ) {\n return (table as VuuTable).table.startsWith(\"session\");\n }\n return false;\n};\n\nexport function isActionMessage(\n rpcResponse: VuuRpcResponse,\n): rpcResponse is VuuRpcViewportResponse | VuuRpcMenuSuccess;\nexport function isActionMessage(\n rpcResponse: Omit<VuuRpcResponse, \"vpId\">,\n): rpcResponse is\n | Omit<VuuRpcViewportResponse, \"vpId\">\n | Omit<VuuRpcMenuSuccess, \"vpId\">;\nexport function isActionMessage(\n rpcResponse: VuuRpcResponse | Omit<VuuRpcResponse, \"vpId\">,\n) {\n return (\n rpcResponse.type === \"VIEW_PORT_MENU_RESP\" ||\n rpcResponse.type === \"VIEW_PORT_RPC_REPONSE\"\n );\n}\n\nexport function isSessionTableActionMessage(\n rpcResponse: VuuRpcResponse,\n): rpcResponse is VuuRpcMenuSuccess<\n OpenDialogAction & {\n tableSchema: TableSchema;\n }\n>;\nexport function isSessionTableActionMessage(\n rpcResponse: Omit<VuuRpcResponse, \"vpId\">,\n): rpcResponse is Omit<\n VuuRpcMenuSuccess<\n OpenDialogAction & {\n tableSchema: TableSchema;\n }\n >,\n \"vpId\"\n>;\nexport function isSessionTableActionMessage(\n rpcResponse: VuuRpcResponse | Omit<VuuRpcResponse, \"vpId\">,\n): rpcResponse is VuuRpcMenuSuccess<\n OpenDialogAction & {\n tableSchema: TableSchema;\n }\n> {\n return (\n isActionMessage(rpcResponse) &&\n isOpenDialogAction(rpcResponse.action) &&\n isSessionTable(rpcResponse.action.table) &&\n rpcResponse.action?.renderComponent === \"inline-form\"\n );\n}\n"],"names":[],"mappings":"AAwBA,MAAM,cAAiB,GAAA;AAAA,EACrB,4BAAA;AAAA,EACA,0BAAA;AAAA,EACA,wBAAA;AAAA,EACA,yBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,wBAAA;AAAA,EACA
|
|
1
|
+
{"version":3,"file":"protocol-message-utils.js","sources":["../src/protocol-message-utils.ts"],"sourcesContent":["import type {\n MenuRpcAction,\n MenuRpcResponse,\n OpenDialogActionWithSchema,\n RpcResponse,\n TableSchema,\n VuuUiMessageInRequestResponse,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuRpcMenuRequest,\n OpenDialogAction,\n VuuRpcEditCellRequest,\n VuuRowDataItemType,\n VuuRpcRequest,\n VuuRpcEditAddRowRequest,\n VuuDataRowDto,\n VuuRpcEditDeleteRowRequest,\n VuuRpcViewportRequest,\n VuuRpcResponse,\n VuuRpcMenuSuccess,\n VuuTable,\n VuuRpcViewportResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nconst MENU_RPC_TYPES = [\n \"VIEW_PORT_MENUS_SELECT_RPC\",\n \"VIEW_PORT_MENU_TABLE_RPC\",\n \"VIEW_PORT_MENU_ROW_RPC\",\n \"VIEW_PORT_MENU_CELL_RPC\",\n \"VP_EDIT_CELL_RPC\",\n \"VP_EDIT_ROW_RPC\",\n \"VP_EDIT_ADD_ROW_RPC\",\n \"VP_EDIT_DELETE_CELL_RPC\",\n \"VP_EDIT_DELETE_ROW_RPC\",\n \"VP_EDIT_SUBMIT_FORM_RPC\",\n];\n\nexport const isVuuMenuRpcRequest = (\n message: VuuRpcRequest | Omit<VuuRpcRequest, \"vpId\">,\n): message is VuuRpcMenuRequest => MENU_RPC_TYPES.includes(message[\"type\"]);\n\nexport const isRequestResponse = (\n message: object,\n): message is VuuUiMessageInRequestResponse => \"requestId\" in message;\n\nexport const isOpenSessionTableDialogMessage = (\n rpcResponse: RpcResponse,\n): rpcResponse is MenuRpcResponse<OpenDialogActionWithSchema> =>\n rpcResponse.type === \"VIEW_PORT_MENU_RESP\" &&\n isOpenDialogAction(rpcResponse.action) &&\n \"tableSchema\" in rpcResponse.action;\n\nexport const isOpenDialogAction = (\n action?: MenuRpcAction,\n): action is OpenDialogAction =>\n action !== undefined && action.type === \"OPEN_DIALOG_ACTION\";\n\nexport function isViewportRpcRequest(\n request: VuuRpcRequest,\n): request is VuuRpcViewportRequest;\nexport function isViewportRpcRequest(\n request: Omit<VuuRpcRequest, \"vpId\">,\n): request is Omit<VuuRpcViewportRequest, \"vpId\">;\nexport function isViewportRpcRequest(\n request: Omit<VuuRpcRequest, \"vpId\">,\n): request is VuuRpcViewportRequest | Omit<VuuRpcViewportRequest, \"vpId\"> {\n return request.type === \"VIEW_PORT_RPC_CALL\";\n}\n\nexport function isEditCellRequest(\n request: VuuRpcRequest,\n): request is VuuRpcEditCellRequest;\nexport function isEditCellRequest(\n request: Omit<VuuRpcRequest, \"vpId\">,\n): request is Omit<VuuRpcEditCellRequest, \"vpId\">;\nexport function isEditCellRequest(\n request: VuuRpcRequest | Omit<VuuRpcRequest, \"vpId\">,\n): request is VuuRpcEditCellRequest | Omit<VuuRpcEditCellRequest, \"vpId\"> {\n return request.type === \"VP_EDIT_CELL_RPC\";\n}\n\nexport function vuuEditCellRequest(\n rowKey: string,\n field: string,\n value: VuuRowDataItemType,\n vpId: string,\n): VuuRpcEditCellRequest;\nexport function vuuEditCellRequest(\n rowKey: string,\n field: string,\n value: VuuRowDataItemType,\n): Omit<VuuRpcEditCellRequest, \"vpId\">;\nexport function vuuEditCellRequest(\n rowKey: string,\n field: string,\n value: VuuRowDataItemType,\n vpId?: string,\n): VuuRpcEditCellRequest | Omit<VuuRpcEditCellRequest, \"vpId\"> {\n return {\n rowKey,\n field,\n value,\n type: \"VP_EDIT_CELL_RPC\",\n vpId,\n };\n}\n\nexport function viewportRpcRequest(\n rpcName: string,\n vpId: string,\n): VuuRpcViewportRequest;\nexport function viewportRpcRequest(\n rpcName: string,\n): Omit<VuuRpcViewportRequest, \"vpId\">;\nexport function viewportRpcRequest(\n rpcName: string,\n vpId?: string,\n): VuuRpcViewportRequest | Omit<VuuRpcViewportRequest, \"vpId\"> {\n return {\n namedParams: {},\n params: [],\n rpcName,\n type: \"VIEW_PORT_RPC_CALL\",\n vpId,\n };\n}\n\nexport function vuuAddRowRequest(\n rowKey: string,\n data: VuuDataRowDto,\n vpId: string,\n): VuuRpcEditAddRowRequest;\nexport function vuuAddRowRequest(\n rowKey: string,\n data: VuuDataRowDto,\n): Omit<VuuRpcEditAddRowRequest, \"vpId\">;\nexport function vuuAddRowRequest(\n rowKey: string,\n data: VuuDataRowDto,\n vpId?: string,\n): VuuRpcEditAddRowRequest | Omit<VuuRpcEditAddRowRequest, \"vpId\"> {\n return {\n rowKey,\n data,\n type: \"VP_EDIT_ADD_ROW_RPC\",\n vpId,\n };\n}\n\nexport function vuuDeleteRowRequest(\n rowKey: string,\n vpId: string,\n): VuuRpcEditDeleteRowRequest;\nexport function vuuDeleteRowRequest(\n rowKey: string,\n): Omit<VuuRpcEditDeleteRowRequest, \"vpId\">;\nexport function vuuDeleteRowRequest(\n rowKey: string,\n vpId?: string,\n): VuuRpcEditDeleteRowRequest | Omit<VuuRpcEditDeleteRowRequest, \"vpId\"> {\n return {\n rowKey,\n type: \"VP_EDIT_DELETE_ROW_RPC\",\n vpId,\n };\n}\n\n// export type WithTableSchema<\n// T extends VuuRpcMenuSuccess | VuuRpcViewportResponse = VuuRpcMenuSuccess,\n// > = T & {\n// action: T extends VuuRpcMenuSuccess\n// ? VuuRpcMenuSuccess[\"action\"] & { tableSchema: TableSchema }\n// : VuuRpcViewportResponse[\"action\"] & { tableSchema: TableSchema };\n// };\n\nexport const isSessionTable = (table?: unknown) => {\n if (\n table !== null &&\n typeof table === \"object\" &&\n \"table\" in table &&\n \"module\" in table\n ) {\n return (table as VuuTable).table.startsWith(\"session\");\n }\n return false;\n};\n\nexport function isActionMessage(\n rpcResponse: VuuRpcResponse,\n): rpcResponse is VuuRpcViewportResponse | VuuRpcMenuSuccess;\nexport function isActionMessage(\n rpcResponse: Omit<VuuRpcResponse, \"vpId\">,\n): rpcResponse is\n | Omit<VuuRpcViewportResponse, \"vpId\">\n | Omit<VuuRpcMenuSuccess, \"vpId\">;\nexport function isActionMessage(\n rpcResponse: VuuRpcResponse | Omit<VuuRpcResponse, \"vpId\">,\n) {\n return (\n rpcResponse.type === \"VIEW_PORT_MENU_RESP\" ||\n rpcResponse.type === \"VIEW_PORT_RPC_REPONSE\"\n );\n}\n\nexport function isSessionTableActionMessage(\n rpcResponse: VuuRpcResponse,\n): rpcResponse is VuuRpcMenuSuccess<\n OpenDialogAction & {\n tableSchema: TableSchema;\n }\n>;\nexport function isSessionTableActionMessage(\n rpcResponse: Omit<VuuRpcResponse, \"vpId\">,\n): rpcResponse is Omit<\n VuuRpcMenuSuccess<\n OpenDialogAction & {\n tableSchema: TableSchema;\n }\n >,\n \"vpId\"\n>;\nexport function isSessionTableActionMessage(\n rpcResponse: VuuRpcResponse | Omit<VuuRpcResponse, \"vpId\">,\n): rpcResponse is VuuRpcMenuSuccess<\n OpenDialogAction & {\n tableSchema: TableSchema;\n }\n> {\n return (\n isActionMessage(rpcResponse) &&\n isOpenDialogAction(rpcResponse.action) &&\n isSessionTable(rpcResponse.action.table) &&\n rpcResponse.action?.renderComponent === \"inline-form\"\n );\n}\n\nexport const isRpcSuccess = (\n response: VuuRpcResponse | Omit<VuuRpcResponse, \"vpId\">,\n): response is VuuRpcViewportResponse =>\n isActionMessage(response) && response.action.type === \"VP_RPC_SUCCESS\";\n"],"names":[],"mappings":"AAwBA,MAAM,cAAiB,GAAA;AAAA,EACrB,4BAAA;AAAA,EACA,0BAAA;AAAA,EACA,wBAAA;AAAA,EACA,yBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,wBAAA;AAAA,EACA;AACF,CAAA;AAEO,MAAM,sBAAsB,CACjC,OAAA,KACiC,eAAe,QAAS,CAAA,OAAA,CAAQ,MAAM,CAAC;AAE7D,MAAA,iBAAA,GAAoB,CAC/B,OAAA,KAC6C,WAAe,IAAA;AAEjD,MAAA,+BAAA,GAAkC,CAC7C,WAAA,KAEA,WAAY,CAAA,IAAA,KAAS,qBACrB,IAAA,kBAAA,CAAmB,WAAY,CAAA,MAAM,CACrC,IAAA,aAAA,IAAiB,WAAY,CAAA;AAExB,MAAM,qBAAqB,CAChC,MAAA,KAEA,MAAW,KAAA,KAAA,CAAA,IAAa,OAAO,IAAS,KAAA;AAQnC,SAAS,qBACd,OACwE,EAAA;AACxE,EAAA,OAAO,QAAQ,IAAS,KAAA,oBAAA;AAC1B;AAQO,SAAS,kBACd,OACwE,EAAA;AACxE,EAAA,OAAO,QAAQ,IAAS,KAAA,kBAAA;AAC1B;AAaO,SAAS,kBACd,CAAA,MAAA,EACA,KACA,EAAA,KAAA,EACA,IAC6D,EAAA;AAC7D,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAM,EAAA,kBAAA;AAAA,IACN;AAAA,GACF;AACF;AASgB,SAAA,kBAAA,CACd,SACA,IAC6D,EAAA;AAC7D,EAAO,OAAA;AAAA,IACL,aAAa,EAAC;AAAA,IACd,QAAQ,EAAC;AAAA,IACT,OAAA;AAAA,IACA,IAAM,EAAA,oBAAA;AAAA,IACN;AAAA,GACF;AACF;AAWgB,SAAA,gBAAA,CACd,MACA,EAAA,IAAA,EACA,IACiE,EAAA;AACjE,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAM,EAAA,qBAAA;AAAA,IACN;AAAA,GACF;AACF;AASgB,SAAA,mBAAA,CACd,QACA,IACuE,EAAA;AACvE,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,IAAM,EAAA,wBAAA;AAAA,IACN;AAAA,GACF;AACF;AAUa,MAAA,cAAA,GAAiB,CAAC,KAAoB,KAAA;AACjD,EACE,IAAA,KAAA,KAAU,QACV,OAAO,KAAA,KAAU,YACjB,OAAW,IAAA,KAAA,IACX,YAAY,KACZ,EAAA;AACA,IAAQ,OAAA,KAAA,CAAmB,KAAM,CAAA,UAAA,CAAW,SAAS,CAAA;AAAA;AAEvD,EAAO,OAAA,KAAA;AACT;AAUO,SAAS,gBACd,WACA,EAAA;AACA,EAAA,OACE,WAAY,CAAA,IAAA,KAAS,qBACrB,IAAA,WAAA,CAAY,IAAS,KAAA,uBAAA;AAEzB;AAmBO,SAAS,4BACd,WAKA,EAAA;AACA,EAAA,OACE,eAAgB,CAAA,WAAW,CAC3B,IAAA,kBAAA,CAAmB,YAAY,MAAM,CAAA,IACrC,cAAe,CAAA,WAAA,CAAY,MAAO,CAAA,KAAK,CACvC,IAAA,WAAA,CAAY,QAAQ,eAAoB,KAAA,aAAA;AAE5C;AAEa,MAAA,YAAA,GAAe,CAC1B,QAEA,KAAA,eAAA,CAAgB,QAAQ,CAAK,IAAA,QAAA,CAAS,OAAO,IAAS,KAAA;;;;"}
|
package/esm/range-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"range-utils.js","sources":["../src/range-utils.ts"],"sourcesContent":["export interface VuuRange {\n from: number;\n to: number;\n bufferSize?: number;\n reset?: boolean;\n}\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport const NULL_RANGE: VuuRange = { from: 0, to: 0 } as const;\n\nexport const rangesAreSame = (\n r1: VuuRange | undefined,\n r2: VuuRange | undefined\n) => {\n return r1?.from === r2?.from && r1?.to === r2?.to;\n};\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize = 0,\n totalRowCount: number = Number.MAX_SAFE_INTEGER\n): FromToRange {\n if (from === 0 && to === 0) {\n return { from, to };\n } else if (bufferSize === 0) {\n if (totalRowCount < from) {\n return { from: 0, to: 0 };\n } else {\n return { from, to: Math.min(to, totalRowCount) };\n }\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, totalRowCount) };\n } else {\n const shortfallBefore = from - bufferSize < 0;\n const shortfallAfter = totalRowCount - (to + bufferSize) < 0;\n if (shortfallBefore && shortfallAfter) {\n return { from: 0, to: totalRowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: to + bufferSize };\n } else if (shortfallAfter) {\n return {\n from: Math.max(0, from - bufferSize),\n to: totalRowCount,\n };\n } else {\n return { from: from - bufferSize, to: to + bufferSize };\n }\n }\n}\n\nexport function resetRange({ from, to, bufferSize = 0 }: VuuRange): VuuRange {\n return {\n from: 0,\n to: to - from,\n bufferSize,\n reset: true,\n };\n}\n\nexport const withinRange = (value: number, { from, to }: VuuRange) =>\n value >= from && value < to;\n\n// export const rangeOverlap = (\n// { from: from1, to: to1 }: VuuRange,\n// { from: from2, to: to2 }: VuuRange\n// ): VuuRange => {\n// return from2 >= to1 || to2 < from1\n// ? { from: 0, to: 0 }\n// : { from: Math.max(from2, from1), to: Math.min(to2, to1) };\n// };\n\nexport const rangeNewItems = (\n { from: from1, to: to1 }: VuuRange,\n newRange: VuuRange\n): VuuRange => {\n const { from: from2, to: to2 } = newRange;\n const noOverlap = from2 >= to1 || to2 <= from1;\n const newFullySubsumesOld = from2 < from1 && to2 > to1;\n return noOverlap || newFullySubsumesOld\n ? newRange\n : to2 > to1\n ? { from: to1, to: to2 }\n : { from: from2, to: from1 };\n};\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return withinRange(index, this);\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n"],"names":[],"mappings":";;;AAYO,MAAM,UAAuB,GAAA,EAAE,IAAM,EAAA,CAAA,EAAG,IAAI,CAAE
|
|
1
|
+
{"version":3,"file":"range-utils.js","sources":["../src/range-utils.ts"],"sourcesContent":["export interface VuuRange {\n from: number;\n to: number;\n bufferSize?: number;\n reset?: boolean;\n}\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport const NULL_RANGE: VuuRange = { from: 0, to: 0 } as const;\n\nexport const rangesAreSame = (\n r1: VuuRange | undefined,\n r2: VuuRange | undefined\n) => {\n return r1?.from === r2?.from && r1?.to === r2?.to;\n};\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize = 0,\n totalRowCount: number = Number.MAX_SAFE_INTEGER\n): FromToRange {\n if (from === 0 && to === 0) {\n return { from, to };\n } else if (bufferSize === 0) {\n if (totalRowCount < from) {\n return { from: 0, to: 0 };\n } else {\n return { from, to: Math.min(to, totalRowCount) };\n }\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, totalRowCount) };\n } else {\n const shortfallBefore = from - bufferSize < 0;\n const shortfallAfter = totalRowCount - (to + bufferSize) < 0;\n if (shortfallBefore && shortfallAfter) {\n return { from: 0, to: totalRowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: to + bufferSize };\n } else if (shortfallAfter) {\n return {\n from: Math.max(0, from - bufferSize),\n to: totalRowCount,\n };\n } else {\n return { from: from - bufferSize, to: to + bufferSize };\n }\n }\n}\n\nexport function resetRange({ from, to, bufferSize = 0 }: VuuRange): VuuRange {\n return {\n from: 0,\n to: to - from,\n bufferSize,\n reset: true,\n };\n}\n\nexport const withinRange = (value: number, { from, to }: VuuRange) =>\n value >= from && value < to;\n\n// export const rangeOverlap = (\n// { from: from1, to: to1 }: VuuRange,\n// { from: from2, to: to2 }: VuuRange\n// ): VuuRange => {\n// return from2 >= to1 || to2 < from1\n// ? { from: 0, to: 0 }\n// : { from: Math.max(from2, from1), to: Math.min(to2, to1) };\n// };\n\nexport const rangeNewItems = (\n { from: from1, to: to1 }: VuuRange,\n newRange: VuuRange\n): VuuRange => {\n const { from: from2, to: to2 } = newRange;\n const noOverlap = from2 >= to1 || to2 <= from1;\n const newFullySubsumesOld = from2 < from1 && to2 > to1;\n return noOverlap || newFullySubsumesOld\n ? newRange\n : to2 > to1\n ? { from: to1, to: to2 }\n : { from: from2, to: from1 };\n};\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return withinRange(index, this);\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n"],"names":[],"mappings":"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"}
|
package/esm/react-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-utils.js","sources":["../src/react-utils.ts"],"sourcesContent":["import { Children, isValidElement, ReactElement, ReactNode } from \"react\";\n\nconst EMPTY_ARRAY: ReactElement[] = [];\n\nexport const asReactElements = (children: ReactNode): ReactElement[] => {\n const isArray = Array.isArray(children);\n const count = isArray ? children.length : Children.count(children);\n if (isArray && children.every(isValidElement)) {\n return children;\n } else if (count === 1 && !isArray && isValidElement(children)) {\n return [children];\n } else if (count > 1) {\n return children as ReactElement[];\n } else {\n return EMPTY_ARRAY;\n }\n};\n"],"names":[],"mappings":";;AAEA,MAAM,cAA8B,EAAC
|
|
1
|
+
{"version":3,"file":"react-utils.js","sources":["../src/react-utils.ts"],"sourcesContent":["import { Children, isValidElement, ReactElement, ReactNode } from \"react\";\n\nconst EMPTY_ARRAY: ReactElement[] = [];\n\nexport const asReactElements = (children: ReactNode): ReactElement[] => {\n const isArray = Array.isArray(children);\n const count = isArray ? children.length : Children.count(children);\n if (isArray && children.every(isValidElement)) {\n return children;\n } else if (count === 1 && !isArray && isValidElement(children)) {\n return [children];\n } else if (count > 1) {\n return children as ReactElement[];\n } else {\n return EMPTY_ARRAY;\n }\n};\n"],"names":[],"mappings":";;AAEA,MAAM,cAA8B,EAAC;AAExB,MAAA,eAAA,GAAkB,CAAC,QAAwC,KAAA;AACtE,EAAM,MAAA,OAAA,GAAU,KAAM,CAAA,OAAA,CAAQ,QAAQ,CAAA;AACtC,EAAA,MAAM,QAAQ,OAAU,GAAA,QAAA,CAAS,MAAS,GAAA,QAAA,CAAS,MAAM,QAAQ,CAAA;AACjE,EAAA,IAAI,OAAW,IAAA,QAAA,CAAS,KAAM,CAAA,cAAc,CAAG,EAAA;AAC7C,IAAO,OAAA,QAAA;AAAA,aACE,KAAU,KAAA,CAAA,IAAK,CAAC,OAAW,IAAA,cAAA,CAAe,QAAQ,CAAG,EAAA;AAC9D,IAAA,OAAO,CAAC,QAAQ,CAAA;AAAA,GAClB,MAAA,IAAW,QAAQ,CAAG,EAAA;AACpB,IAAO,OAAA,QAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,WAAA;AAAA;AAEX;;;;"}
|
package/esm/round-decimal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-decimal.js","sources":["../src/round-decimal.ts"],"sourcesContent":["const PUNCTUATION_STR = String.fromCharCode(8200);\nconst DIGIT_STR = String.fromCharCode(8199);\nconst DECIMALS_AUTO = -1;\n\ntype PadMap = {\n DIGIT: string;\n TWO_DIGITS: string;\n THREE_DIGITS: string;\n FULL_PADDING: [null, string, string, string, string];\n};\n\nconst Space: PadMap = {\n DIGIT: DIGIT_STR,\n TWO_DIGITS: DIGIT_STR + DIGIT_STR,\n THREE_DIGITS: DIGIT_STR + DIGIT_STR + DIGIT_STR,\n FULL_PADDING: [\n null,\n PUNCTUATION_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n ],\n};\n\nconst Zero: PadMap = {\n DIGIT: \"0\",\n TWO_DIGITS: \"00\",\n THREE_DIGITS: \"000\",\n FULL_PADDING: [null, \"0\", \"00\", \"000\", \"0000\"],\n};\n\nfunction padLeft(value: string, maxLength = 6) {\n return (LEADING_FILL + value).slice(-maxLength);\n}\n\nconst LEADING_FILL =\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR;\n\nconst Align = {\n Right: \"right\",\n Center: \"center\",\n Left: \"left\",\n};\n\nfunction pad(n: string, dp: number, Pad: PadMap): string {\n let len = n.length;\n const diff = dp - len;\n\n if (diff > 0) {\n if (diff === 1) {\n n = n + Pad.DIGIT;\n } else if (diff === 2) {\n n = n + Pad.TWO_DIGITS;\n } else if (diff === 3) {\n n = n + Pad.THREE_DIGITS;\n }\n } else {\n if (diff < 0) {\n n = n.slice(0, dp);\n len = dp;\n }\n\n if (Pad === Space && n.charAt(len - 1) === \"0\") {\n n = n.replace(/0+$/, \"\");\n return pad(n, dp, Pad);\n }\n }\n return n;\n}\n\nexport function roundDecimal(\n value?: number,\n align = Align.Right,\n decimals = 4,\n zeroPad?: boolean,\n alignOnDecimals?: boolean\n) {\n if (value === undefined || typeof value !== \"number\" || isNaN(value)) {\n return \"\";\n }\n let integral, fraction, Pad;\n\n const [part1, part2 = \"\"] = value.toString().split(\".\");\n const actualDecimals = part2.length;\n\n integral = parseFloat(part1).toLocaleString();\n\n if (align === Align.Left && alignOnDecimals) {\n integral = padLeft(integral);\n }\n\n if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {\n fraction = part2;\n } else if (actualDecimals > decimals) {\n fraction = parseFloat(\"0.\" + part2)\n .toFixed(decimals)\n .slice(2);\n } else {\n /* eslint-disable no-cond-assign */\n if (\n (Pad = zeroPad\n ? Zero\n : alignOnDecimals && align !== Align.Left\n ? Space\n : null)\n ) {\n if (actualDecimals === 0) {\n fraction = Pad.FULL_PADDING[decimals];\n } else {\n fraction = pad(part2, decimals, Pad);\n }\n } else {\n fraction = part2;\n }\n }\n\n return integral + (fraction ? \".\" + fraction : \"\");\n}\n"],"names":[],"mappings":"AAAA,MAAM,eAAA,GAAkB,MAAO,CAAA,YAAA,CAAa,IAAI,CAAA
|
|
1
|
+
{"version":3,"file":"round-decimal.js","sources":["../src/round-decimal.ts"],"sourcesContent":["const PUNCTUATION_STR = String.fromCharCode(8200);\nconst DIGIT_STR = String.fromCharCode(8199);\nconst DECIMALS_AUTO = -1;\n\ntype PadMap = {\n DIGIT: string;\n TWO_DIGITS: string;\n THREE_DIGITS: string;\n FULL_PADDING: [null, string, string, string, string];\n};\n\nconst Space: PadMap = {\n DIGIT: DIGIT_STR,\n TWO_DIGITS: DIGIT_STR + DIGIT_STR,\n THREE_DIGITS: DIGIT_STR + DIGIT_STR + DIGIT_STR,\n FULL_PADDING: [\n null,\n PUNCTUATION_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n ],\n};\n\nconst Zero: PadMap = {\n DIGIT: \"0\",\n TWO_DIGITS: \"00\",\n THREE_DIGITS: \"000\",\n FULL_PADDING: [null, \"0\", \"00\", \"000\", \"0000\"],\n};\n\nfunction padLeft(value: string, maxLength = 6) {\n return (LEADING_FILL + value).slice(-maxLength);\n}\n\nconst LEADING_FILL =\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR;\n\nconst Align = {\n Right: \"right\",\n Center: \"center\",\n Left: \"left\",\n};\n\nfunction pad(n: string, dp: number, Pad: PadMap): string {\n let len = n.length;\n const diff = dp - len;\n\n if (diff > 0) {\n if (diff === 1) {\n n = n + Pad.DIGIT;\n } else if (diff === 2) {\n n = n + Pad.TWO_DIGITS;\n } else if (diff === 3) {\n n = n + Pad.THREE_DIGITS;\n }\n } else {\n if (diff < 0) {\n n = n.slice(0, dp);\n len = dp;\n }\n\n if (Pad === Space && n.charAt(len - 1) === \"0\") {\n n = n.replace(/0+$/, \"\");\n return pad(n, dp, Pad);\n }\n }\n return n;\n}\n\nexport function roundDecimal(\n value?: number,\n align = Align.Right,\n decimals = 4,\n zeroPad?: boolean,\n alignOnDecimals?: boolean\n) {\n if (value === undefined || typeof value !== \"number\" || isNaN(value)) {\n return \"\";\n }\n let integral, fraction, Pad;\n\n const [part1, part2 = \"\"] = value.toString().split(\".\");\n const actualDecimals = part2.length;\n\n integral = parseFloat(part1).toLocaleString();\n\n if (align === Align.Left && alignOnDecimals) {\n integral = padLeft(integral);\n }\n\n if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {\n fraction = part2;\n } else if (actualDecimals > decimals) {\n fraction = parseFloat(\"0.\" + part2)\n .toFixed(decimals)\n .slice(2);\n } else {\n /* eslint-disable no-cond-assign */\n if (\n (Pad = zeroPad\n ? Zero\n : alignOnDecimals && align !== Align.Left\n ? Space\n : null)\n ) {\n if (actualDecimals === 0) {\n fraction = Pad.FULL_PADDING[decimals];\n } else {\n fraction = pad(part2, decimals, Pad);\n }\n } else {\n fraction = part2;\n }\n }\n\n return integral + (fraction ? \".\" + fraction : \"\");\n}\n"],"names":[],"mappings":"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"}
|
package/esm/row-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"row-utils.js","sources":["../src/row-utils.ts"],"sourcesContent":["//TODO this all probably belongs in vuu-table\nimport type {\n DataSourceRow,\n DataSourceRowObject,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { MutableRefObject } from \"react\";\nimport { ColumnMap, metadataKeys } from \"./column-utils\";\nimport { isRowSelected } from \"./selection-utils\";\n\nconst { IS_LEAF, KEY, IDX } = metadataKeys;\n\nexport type RowOffsetFunc = (\n row: DataSourceRow,\n pctScrollTop?: number,\n) => number;\nexport type RowAtPositionFunc = (position: number) => number;\n\n/**\n * RowOffset function, RowAtPosition function, isVirtualScroll\n */\nexport type RowPositioning = [RowOffsetFunc, RowAtPositionFunc, boolean];\n\nexport const actualRowPositioning = (rowHeight: number): RowPositioning => [\n (row) => row[IDX] * rowHeight,\n (position) => Math.floor(position / rowHeight),\n false,\n];\n\n/**\n * return functions for determining a) the pixel offset to apply to a row, given the\n * row index and b) the index of the row at a given scroll offset. This implementation\n * is used when we are forced to 'virtualise' scrolling - because the number of rows\n * is high enough that we cannot create a large enough HTML content container.\n *\n * @param rowHeight\n * @param virtualisedExtent\n * @param pctScrollTop\n * @returns\n */\nexport const virtualRowPositioning = (\n rowHeight: number,\n virtualisedExtent: number,\n pctScrollTop: MutableRefObject<number>,\n): RowPositioning => [\n (row, offset = 0) => {\n const rowOffset = pctScrollTop.current * virtualisedExtent;\n return (row[IDX] - offset) * rowHeight - rowOffset;\n },\n /*\n Return index position of closest row \n */\n (position) => {\n const rowOffset = pctScrollTop.current * virtualisedExtent;\n return Math.round((position + rowOffset) / rowHeight);\n },\n true,\n];\n\nexport
|
|
1
|
+
{"version":3,"file":"row-utils.js","sources":["../src/row-utils.ts"],"sourcesContent":["//TODO this all probably belongs in vuu-table\nimport type {\n DataSourceRow,\n DataSourceRowObject,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { MutableRefObject } from \"react\";\nimport { ColumnMap, metadataKeys } from \"./column-utils\";\nimport { isRowSelected } from \"./selection-utils\";\n\nconst { IS_LEAF, KEY, IDX } = metadataKeys;\n\nexport type RowOffsetFunc = (\n row: DataSourceRow,\n pctScrollTop?: number,\n) => number;\nexport type RowAtPositionFunc = (position: number) => number;\n\n/**\n * RowOffset function, RowAtPosition function, isVirtualScroll\n */\nexport type RowPositioning = [RowOffsetFunc, RowAtPositionFunc, boolean];\n\nexport const actualRowPositioning = (rowHeight: number): RowPositioning => [\n (row) => row[IDX] * rowHeight,\n (position) => Math.floor(position / rowHeight),\n false,\n];\n\n/**\n * return functions for determining a) the pixel offset to apply to a row, given the\n * row index and b) the index of the row at a given scroll offset. This implementation\n * is used when we are forced to 'virtualise' scrolling - because the number of rows\n * is high enough that we cannot create a large enough HTML content container.\n *\n * @param rowHeight\n * @param virtualisedExtent\n * @param pctScrollTop\n * @returns\n */\nexport const virtualRowPositioning = (\n rowHeight: number,\n virtualisedExtent: number,\n pctScrollTop: MutableRefObject<number>,\n): RowPositioning => [\n (row, offset = 0) => {\n const rowOffset = pctScrollTop.current * virtualisedExtent;\n return (row[IDX] - offset) * rowHeight - rowOffset;\n },\n /*\n Return index position of closest row \n */\n (position) => {\n const rowOffset = pctScrollTop.current * virtualisedExtent;\n return Math.round((position + rowOffset) / rowHeight);\n },\n true,\n];\n\nexport type RowToObjectMapper = (\n row: DataSourceRow,\n columnMap: ColumnMap,\n) => DataSourceRowObject;\n\nexport const asDataSourceRowObject: RowToObjectMapper = (\n row,\n columnMap,\n): DataSourceRowObject => {\n const { [IS_LEAF]: isLeaf, [KEY]: key, [IDX]: index } = row;\n\n const rowObject: DataSourceRowObject = {\n key,\n index,\n isGroupRow: !isLeaf,\n isSelected: isRowSelected(row),\n data: {},\n };\n\n for (const [colName, colIdx] of Object.entries(columnMap)) {\n rowObject.data[colName] = row[colIdx];\n }\n\n return rowObject;\n};\n"],"names":[],"mappings":";;;AASA,MAAM,EAAE,OAAA,EAAS,GAAK,EAAA,GAAA,EAAQ,GAAA,YAAA;AAajB,MAAA,oBAAA,GAAuB,CAAC,SAAsC,KAAA;AAAA,EACzE,CAAC,GAAA,KAAQ,GAAI,CAAA,GAAG,CAAI,GAAA,SAAA;AAAA,EACpB,CAAC,QAAA,KAAa,IAAK,CAAA,KAAA,CAAM,WAAW,SAAS,CAAA;AAAA,EAC7C;AACF;AAaO,MAAM,qBAAwB,GAAA,CACnC,SACA,EAAA,iBAAA,EACA,YACmB,KAAA;AAAA,EACnB,CAAC,GAAK,EAAA,MAAA,GAAS,CAAM,KAAA;AACnB,IAAM,MAAA,SAAA,GAAY,aAAa,OAAU,GAAA,iBAAA;AACzC,IAAA,OAAA,CAAQ,GAAI,CAAA,GAAG,CAAI,GAAA,MAAA,IAAU,SAAY,GAAA,SAAA;AAAA,GAC3C;AAAA;AAAA;AAAA;AAAA,EAIA,CAAC,QAAa,KAAA;AACZ,IAAM,MAAA,SAAA,GAAY,aAAa,OAAU,GAAA,iBAAA;AACzC,IAAA,OAAO,IAAK,CAAA,KAAA,CAAA,CAAO,QAAW,GAAA,SAAA,IAAa,SAAS,CAAA;AAAA,GACtD;AAAA,EACA;AACF;AAOa,MAAA,qBAAA,GAA2C,CACtD,GAAA,EACA,SACwB,KAAA;AACxB,EAAA,MAAM,EAAE,CAAC,OAAO,GAAG,MAAQ,EAAA,CAAC,GAAG,GAAG,GAAK,EAAA,CAAC,GAAG,GAAG,OAAU,GAAA,GAAA;AAExD,EAAA,MAAM,SAAiC,GAAA;AAAA,IACrC,GAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAY,CAAC,MAAA;AAAA,IACb,UAAA,EAAY,cAAc,GAAG,CAAA;AAAA,IAC7B,MAAM;AAAC,GACT;AAEA,EAAA,KAAA,MAAW,CAAC,OAAS,EAAA,MAAM,KAAK,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACzD,IAAA,SAAA,CAAU,IAAK,CAAA,OAAO,CAAI,GAAA,GAAA,CAAI,MAAM,CAAA;AAAA;AAGtC,EAAO,OAAA,SAAA;AACT;;;;"}
|
package/esm/selection-utils.js
CHANGED
|
@@ -81,7 +81,7 @@ const fillGapOrExtendSelection = (selection, itemIndex) => {
|
|
|
81
81
|
const selectItem = (selectionModel, selected, itemIndex, rangeSelect, keepExistingSelection = false, activeItemIndex = -1) => {
|
|
82
82
|
const singleSelect = selectionModel === "single";
|
|
83
83
|
const multiSelect = selectionModel === "extended" || selectionModel === "checkbox";
|
|
84
|
-
const actsLikeSingleSelect = singleSelect || multiSelect && !keepExistingSelection && !rangeSelect;
|
|
84
|
+
const actsLikeSingleSelect = singleSelect || multiSelect && !keepExistingSelection && !rangeSelect || rangeSelect && activeItemIndex === -1;
|
|
85
85
|
if (selectionModel === "none") {
|
|
86
86
|
return NO_SELECTION;
|
|
87
87
|
} else if (actsLikeSingleSelect) {
|
|
@@ -221,7 +221,7 @@ function splitRange([from, to], itemIndex) {
|
|
|
221
221
|
];
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
|
-
const selectionCount = (selected) => {
|
|
224
|
+
const selectionCount = (selected = NO_SELECTION) => {
|
|
225
225
|
let count = selected.length;
|
|
226
226
|
for (const selectionItem of selected) {
|
|
227
227
|
if (Array.isArray(selectionItem)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection-utils.js","sources":["../src/selection-utils.ts"],"sourcesContent":["import {\n DataSourceRow,\n RangeTuple,\n Selection,\n SelectionItem,\n} from \"@vuu-ui/vuu-data-types\";\nimport { TableSelectionModel } from \"@vuu-ui/vuu-table-types\";\nimport { metadataKeys } from \"./column-utils\";\n\nconst NO_SELECTION: number[] = [];\n\nconst { SELECTED } = metadataKeys;\n\nexport const RowSelected = {\n False: 0,\n True: 1,\n First: 2,\n Last: 4,\n};\n\nexport const isRowSelected = (row: DataSourceRow): boolean =>\n (row[SELECTED] & RowSelected.True) === RowSelected.True;\n\nexport const isRowSelectedLast = (row?: DataSourceRow): boolean =>\n row !== undefined && (row[SELECTED] & RowSelected.Last) === RowSelected.Last;\n\nconst inAscendingOrder = (item1: SelectionItem, item2: SelectionItem) => {\n const n1: number = typeof item1 === \"number\" ? item1 : item1[0];\n const n2: number = typeof item2 === \"number\" ? item2 : item2[0];\n return n1 - n2;\n};\n\nexport const deselectItem = (\n selectionModel: TableSelectionModel,\n selected: Selection,\n itemIndex: number,\n rangeSelect: boolean,\n keepExistingSelection = false,\n): Selection => {\n const singleSelect = selectionModel === \"single\";\n const multiSelect =\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const actsLikeSingleSelect =\n singleSelect || (multiSelect && !keepExistingSelection && !rangeSelect);\n\n if (actsLikeSingleSelect || (!rangeSelect && !keepExistingSelection)) {\n return NO_SELECTION;\n } else if (!rangeSelect && keepExistingSelection) {\n return removeSelectedItem(selected, itemIndex);\n }\n return NO_SELECTION;\n};\n\nconst newSelectedFillsGapOrExtends = (\n selection: Selection,\n itemIndex: number,\n): boolean => {\n for (let i = 0; i < selection.length; i++) {\n const item = selection[i];\n if (typeof item === \"number\") {\n if (item === itemIndex - 1) {\n return true;\n } else if (item > itemIndex) {\n return false;\n }\n } else if (item[0] === itemIndex + 1 || item[1] === itemIndex - 1) {\n return true;\n } else if (item[0] > itemIndex) {\n return false;\n }\n }\n return false;\n};\n\nconst fillGapOrExtendSelection = (\n selection: Selection,\n itemIndex: number,\n): Selection => {\n for (let i = 0; i < selection.length; i++) {\n const item = selection[i];\n if (typeof item === \"number\") {\n if (item === itemIndex - 1) {\n const nextSelectionItem = selection[i + 1];\n if (nextSelectionItem === itemIndex + 1) {\n const newRange: SelectionItem = [item, nextSelectionItem];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else {\n const newRange: SelectionItem = [item, itemIndex];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n }\n } else if (item > itemIndex) {\n break;\n }\n } else if (item[0] === itemIndex + 1) {\n const newRange: SelectionItem = [itemIndex, item[1]];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n } else if (item[1] === itemIndex - 1) {\n // check to see whether another contiguous range follows\n const nextItem = selection[i + 1];\n if (Array.isArray(nextItem) && nextItem[0] === itemIndex + 1) {\n const newRange: SelectionItem = [item[0], nextItem[1]];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else if (typeof nextItem === \"number\" && nextItem === itemIndex + 1) {\n const newRange: SelectionItem = [item[0], nextItem];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else {\n const newRange: SelectionItem = [item[0], itemIndex];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n }\n }\n }\n\n return selection;\n};\n\nexport const selectItem = (\n selectionModel: TableSelectionModel,\n selected: Selection,\n itemIndex: number,\n rangeSelect: boolean,\n keepExistingSelection = false,\n activeItemIndex = -1,\n): Selection => {\n const singleSelect = selectionModel === \"single\";\n const multiSelect =\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const actsLikeSingleSelect =\n singleSelect || (multiSelect && !keepExistingSelection && !rangeSelect);\n\n if (selectionModel === \"none\") {\n return NO_SELECTION;\n } else if (actsLikeSingleSelect) {\n return [itemIndex];\n } else if (rangeSelect) {\n if (selected.length === 0) {\n return [itemIndex];\n } else {\n const range: RangeTuple =\n itemIndex > activeItemIndex\n ? [activeItemIndex, itemIndex]\n : [itemIndex, activeItemIndex];\n return insertRange(selected, range);\n }\n } else if (!rangeSelect) {\n // what if we now have a range because we just filled agap between 2\n if (newSelectedFillsGapOrExtends(selected, itemIndex)) {\n return fillGapOrExtendSelection(selected, itemIndex);\n } else {\n return selected?.concat(itemIndex).sort(inAscendingOrder);\n }\n } else if (multiSelect) {\n // const [from, to] = idx > active ? [active, idx] : [idx, active];\n // newSelected = selected?.slice();\n // for (let i = from; i <= to; i++) {\n // if (!selected?.includes(i)) {\n // newSelected.push(i);\n // }\n // }\n }\n return NO_SELECTION;\n};\n\nfunction removeSelectedItem(selected: Selection, itemIndex: number) {\n if (selected.includes(itemIndex)) {\n return selected.filter((selectedItem) => selectedItem !== itemIndex);\n } else {\n const newSelected: Selection = [];\n for (const selectedItem of selected) {\n if (Array.isArray(selectedItem)) {\n if (rangeIncludes(selectedItem, itemIndex)) {\n newSelected.push(...splitRange(selectedItem, itemIndex));\n } else {\n newSelected.push(selectedItem);\n }\n } else {\n newSelected.push(selectedItem);\n }\n }\n return newSelected;\n }\n}\n\nfunction insertRange(selected: Selection, range: RangeTuple): Selection {\n const [from, to] = range;\n return selected.reduce<Selection>((newSelected, selectedItem) => {\n if (typeof selectedItem === \"number\") {\n if (selectedItem < from || selectedItem > to) {\n newSelected.push(selectedItem);\n } else if (!includedInRange(newSelected.at(-1), selectedItem)) {\n newSelected.push(range);\n }\n } else if (overlappingRange(selectedItem, range)) {\n newSelected.push(mergeRanges(selectedItem, range));\n } else {\n if (range[1] < selectedItem[0]) {\n newSelected.push(range);\n }\n newSelected.push(selectedItem);\n }\n\n return newSelected;\n }, []);\n}\n\nconst overlappingRange = (r1: RangeTuple, r2: RangeTuple) =>\n (r1[1] >= r2[0] && r1[1] <= r2[1]) || (r1[0] >= r2[0] && r1[0] <= r2[1]);\nconst mergeRanges = (r1: RangeTuple, r2: RangeTuple): RangeTuple => [\n Math.min(r1[0], r2[0]),\n Math.max(r1[1], r2[1]),\n];\n\nconst includedInRange = (\n selectedItem: SelectionItem | undefined,\n index: number,\n) => {\n if (typeof selectedItem === \"undefined\" || typeof selectedItem === \"number\") {\n return false;\n } else return rangeIncludes(selectedItem, index);\n};\n\nconst rangeIncludes = (range: RangeTuple, index: number) =>\n index >= range[0] && index <= range[1];\n\nconst SINGLE_SELECTED_ROW =\n RowSelected.True + RowSelected.First + RowSelected.Last;\nconst FIRST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.First;\nconst LAST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.Last;\n\n/**\n * Determine the value for selected. We use a bitmap to represent a number of selection states\n * a row might exhibit. selected/not-selected is the fundamental value. We also identify first\n * row of a selected block, last row of a selected block;\n */\nexport const getSelectionStatus = (\n selected: Selection,\n itemIndex: number,\n): number => {\n for (const item of selected) {\n if (typeof item === \"number\") {\n if (item === itemIndex) {\n return SINGLE_SELECTED_ROW;\n }\n } else if (rangeIncludes(item, itemIndex)) {\n if (itemIndex === item[0]) {\n return FIRST_SELECTED_ROW_OF_BLOCK;\n } else if (itemIndex === item[1]) {\n return LAST_SELECTED_ROW_OF_BLOCK;\n } else {\n return RowSelected.True;\n }\n }\n }\n return RowSelected.False;\n};\n\nexport const isSelected = (selected: Selection, itemIndex: number) => {\n for (const item of selected) {\n if (typeof item === \"number\") {\n if (item === itemIndex) {\n return true;\n } else if (item > itemIndex) {\n return false;\n }\n } else if (rangeIncludes(item, itemIndex)) {\n return true;\n } else if (item[0] > itemIndex) {\n return false;\n }\n }\n\n return false;\n};\n/**\n * Vuu server expects a full list if indexes of selected rows. Client represents selection in a more\n * efficient structure. This converts client structure to full server format.\n */\nexport const expandSelection = (selected: Selection): number[] => {\n if (selected.every((selectedItem) => typeof selectedItem === \"number\")) {\n return selected as number[];\n }\n const expandedSelected = [];\n for (const selectedItem of selected) {\n if (typeof selectedItem === \"number\") {\n expandedSelected.push(selectedItem);\n } else {\n for (let i = selectedItem[0]; i <= selectedItem[1]; i++) {\n expandedSelected.push(i);\n }\n }\n }\n return expandedSelected;\n};\n\nfunction splitRange([from, to]: RangeTuple, itemIndex: number): Selection {\n if (itemIndex === from) {\n return [[from + 1, to]];\n } else if (itemIndex === to) {\n return [[from, to - 1]];\n } else if (to - from === 2) {\n return [from, to];\n } else if (itemIndex === to - 1) {\n return [[from, to - 2], to];\n } else {\n return [\n [from, itemIndex - 1],\n [itemIndex + 1, to],\n ];\n }\n}\n\nexport type SelectionDiff = {\n added: SelectionItem[];\n removed: SelectionItem[];\n};\n\nexport const selectionCount = (selected: Selection) => {\n let count = selected.length;\n for (const selectionItem of selected) {\n if (Array.isArray(selectionItem)) {\n const [from, to] = selectionItem;\n count += to - (from + 1);\n }\n }\n return count;\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"selection-utils.js","sources":["../src/selection-utils.ts"],"sourcesContent":["import {\n DataSourceRow,\n RangeTuple,\n Selection,\n SelectionItem,\n} from \"@vuu-ui/vuu-data-types\";\nimport { TableSelectionModel } from \"@vuu-ui/vuu-table-types\";\nimport { metadataKeys } from \"./column-utils\";\n\nconst NO_SELECTION: number[] = [];\n\nconst { SELECTED } = metadataKeys;\n\nexport const RowSelected = {\n False: 0,\n True: 1,\n First: 2,\n Last: 4,\n};\n\nexport const isRowSelected = (row: DataSourceRow): boolean =>\n (row[SELECTED] & RowSelected.True) === RowSelected.True;\n\nexport const isRowSelectedLast = (row?: DataSourceRow): boolean =>\n row !== undefined && (row[SELECTED] & RowSelected.Last) === RowSelected.Last;\n\nconst inAscendingOrder = (item1: SelectionItem, item2: SelectionItem) => {\n const n1: number = typeof item1 === \"number\" ? item1 : item1[0];\n const n2: number = typeof item2 === \"number\" ? item2 : item2[0];\n return n1 - n2;\n};\n\nexport const deselectItem = (\n selectionModel: TableSelectionModel,\n selected: Selection,\n itemIndex: number,\n rangeSelect: boolean,\n keepExistingSelection = false,\n): Selection => {\n const singleSelect = selectionModel === \"single\";\n const multiSelect =\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const actsLikeSingleSelect =\n singleSelect || (multiSelect && !keepExistingSelection && !rangeSelect);\n\n if (actsLikeSingleSelect || (!rangeSelect && !keepExistingSelection)) {\n return NO_SELECTION;\n } else if (!rangeSelect && keepExistingSelection) {\n return removeSelectedItem(selected, itemIndex);\n }\n return NO_SELECTION;\n};\n\nconst newSelectedFillsGapOrExtends = (\n selection: Selection,\n itemIndex: number,\n): boolean => {\n for (let i = 0; i < selection.length; i++) {\n const item = selection[i];\n if (typeof item === \"number\") {\n if (item === itemIndex - 1) {\n return true;\n } else if (item > itemIndex) {\n return false;\n }\n } else if (item[0] === itemIndex + 1 || item[1] === itemIndex - 1) {\n return true;\n } else if (item[0] > itemIndex) {\n return false;\n }\n }\n return false;\n};\n\nconst fillGapOrExtendSelection = (\n selection: Selection,\n itemIndex: number,\n): Selection => {\n for (let i = 0; i < selection.length; i++) {\n const item = selection[i];\n if (typeof item === \"number\") {\n if (item === itemIndex - 1) {\n const nextSelectionItem = selection[i + 1];\n if (nextSelectionItem === itemIndex + 1) {\n const newRange: SelectionItem = [item, nextSelectionItem];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else {\n const newRange: SelectionItem = [item, itemIndex];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n }\n } else if (item > itemIndex) {\n break;\n }\n } else if (item[0] === itemIndex + 1) {\n const newRange: SelectionItem = [itemIndex, item[1]];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n } else if (item[1] === itemIndex - 1) {\n // check to see whether another contiguous range follows\n const nextItem = selection[i + 1];\n if (Array.isArray(nextItem) && nextItem[0] === itemIndex + 1) {\n const newRange: SelectionItem = [item[0], nextItem[1]];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else if (typeof nextItem === \"number\" && nextItem === itemIndex + 1) {\n const newRange: SelectionItem = [item[0], nextItem];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else {\n const newRange: SelectionItem = [item[0], itemIndex];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n }\n }\n }\n\n return selection;\n};\n\nexport const selectItem = (\n selectionModel: TableSelectionModel,\n selected: Selection,\n itemIndex: number,\n rangeSelect: boolean,\n keepExistingSelection = false,\n activeItemIndex = -1,\n): Selection => {\n const singleSelect = selectionModel === \"single\";\n const multiSelect =\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const actsLikeSingleSelect =\n singleSelect ||\n (multiSelect && !keepExistingSelection && !rangeSelect) ||\n (rangeSelect && activeItemIndex === -1);\n\n if (selectionModel === \"none\") {\n return NO_SELECTION;\n } else if (actsLikeSingleSelect) {\n return [itemIndex];\n } else if (rangeSelect) {\n if (selected.length === 0) {\n return [itemIndex];\n } else {\n const range: RangeTuple =\n itemIndex > activeItemIndex\n ? [activeItemIndex, itemIndex]\n : [itemIndex, activeItemIndex];\n return insertRange(selected, range);\n }\n } else if (!rangeSelect) {\n // what if we now have a range because we just filled agap between 2\n if (newSelectedFillsGapOrExtends(selected, itemIndex)) {\n return fillGapOrExtendSelection(selected, itemIndex);\n } else {\n return selected?.concat(itemIndex).sort(inAscendingOrder);\n }\n } else if (multiSelect) {\n // const [from, to] = idx > active ? [active, idx] : [idx, active];\n // newSelected = selected?.slice();\n // for (let i = from; i <= to; i++) {\n // if (!selected?.includes(i)) {\n // newSelected.push(i);\n // }\n // }\n }\n return NO_SELECTION;\n};\n\nfunction removeSelectedItem(selected: Selection, itemIndex: number) {\n if (selected.includes(itemIndex)) {\n return selected.filter((selectedItem) => selectedItem !== itemIndex);\n } else {\n const newSelected: Selection = [];\n for (const selectedItem of selected) {\n if (Array.isArray(selectedItem)) {\n if (rangeIncludes(selectedItem, itemIndex)) {\n newSelected.push(...splitRange(selectedItem, itemIndex));\n } else {\n newSelected.push(selectedItem);\n }\n } else {\n newSelected.push(selectedItem);\n }\n }\n return newSelected;\n }\n}\n\nfunction insertRange(selected: Selection, range: RangeTuple): Selection {\n const [from, to] = range;\n return selected.reduce<Selection>((newSelected, selectedItem) => {\n if (typeof selectedItem === \"number\") {\n if (selectedItem < from || selectedItem > to) {\n newSelected.push(selectedItem);\n } else if (!includedInRange(newSelected.at(-1), selectedItem)) {\n newSelected.push(range);\n }\n } else if (overlappingRange(selectedItem, range)) {\n newSelected.push(mergeRanges(selectedItem, range));\n } else {\n if (range[1] < selectedItem[0]) {\n newSelected.push(range);\n }\n newSelected.push(selectedItem);\n }\n\n return newSelected;\n }, []);\n}\n\nconst overlappingRange = (r1: RangeTuple, r2: RangeTuple) =>\n (r1[1] >= r2[0] && r1[1] <= r2[1]) || (r1[0] >= r2[0] && r1[0] <= r2[1]);\nconst mergeRanges = (r1: RangeTuple, r2: RangeTuple): RangeTuple => [\n Math.min(r1[0], r2[0]),\n Math.max(r1[1], r2[1]),\n];\n\nconst includedInRange = (\n selectedItem: SelectionItem | undefined,\n index: number,\n) => {\n if (typeof selectedItem === \"undefined\" || typeof selectedItem === \"number\") {\n return false;\n } else return rangeIncludes(selectedItem, index);\n};\n\nconst rangeIncludes = (range: RangeTuple, index: number) =>\n index >= range[0] && index <= range[1];\n\nconst SINGLE_SELECTED_ROW =\n RowSelected.True + RowSelected.First + RowSelected.Last;\nconst FIRST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.First;\nconst LAST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.Last;\n\n/**\n * Determine the value for selected. We use a bitmap to represent a number of selection states\n * a row might exhibit. selected/not-selected is the fundamental value. We also identify first\n * row of a selected block, last row of a selected block;\n */\nexport const getSelectionStatus = (\n selected: Selection,\n itemIndex: number,\n): number => {\n for (const item of selected) {\n if (typeof item === \"number\") {\n if (item === itemIndex) {\n return SINGLE_SELECTED_ROW;\n }\n } else if (rangeIncludes(item, itemIndex)) {\n if (itemIndex === item[0]) {\n return FIRST_SELECTED_ROW_OF_BLOCK;\n } else if (itemIndex === item[1]) {\n return LAST_SELECTED_ROW_OF_BLOCK;\n } else {\n return RowSelected.True;\n }\n }\n }\n return RowSelected.False;\n};\n\nexport const isSelected = (selected: Selection, itemIndex: number) => {\n for (const item of selected) {\n if (typeof item === \"number\") {\n if (item === itemIndex) {\n return true;\n } else if (item > itemIndex) {\n return false;\n }\n } else if (rangeIncludes(item, itemIndex)) {\n return true;\n } else if (item[0] > itemIndex) {\n return false;\n }\n }\n\n return false;\n};\n/**\n * Vuu server expects a full list if indexes of selected rows. Client represents selection in a more\n * efficient structure. This converts client structure to full server format.\n */\nexport const expandSelection = (selected: Selection): number[] => {\n if (selected.every((selectedItem) => typeof selectedItem === \"number\")) {\n return selected as number[];\n }\n const expandedSelected = [];\n for (const selectedItem of selected) {\n if (typeof selectedItem === \"number\") {\n expandedSelected.push(selectedItem);\n } else {\n for (let i = selectedItem[0]; i <= selectedItem[1]; i++) {\n expandedSelected.push(i);\n }\n }\n }\n return expandedSelected;\n};\n\nfunction splitRange([from, to]: RangeTuple, itemIndex: number): Selection {\n if (itemIndex === from) {\n return [[from + 1, to]];\n } else if (itemIndex === to) {\n return [[from, to - 1]];\n } else if (to - from === 2) {\n return [from, to];\n } else if (itemIndex === to - 1) {\n return [[from, to - 2], to];\n } else {\n return [\n [from, itemIndex - 1],\n [itemIndex + 1, to],\n ];\n }\n}\n\nexport type SelectionDiff = {\n added: SelectionItem[];\n removed: SelectionItem[];\n};\n\nexport const selectionCount = (selected: Selection = NO_SELECTION) => {\n let count = selected.length;\n for (const selectionItem of selected) {\n if (Array.isArray(selectionItem)) {\n const [from, to] = selectionItem;\n count += to - (from + 1);\n }\n }\n return count;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-layout-types.js","sources":["../src/shell-layout-types.ts"],"sourcesContent":["/**\n * The Vuu Shell creates the outermost application layout. This includes some\n * 'special' identifiers that can be targetted by layout commands to effect or\n * react to layout changes.\n */\nexport const VuuShellLocation = {\n ContextPanel: \"context-panel\",\n MultiWorkspaceContainer: \"vuu-multi-workspace-container\",\n SidePanel: \"vuu-side-panel\",\n SideToolbar: \"vuu-side-toolbar\",\n Workspace: \"vuu-workspace\",\n WorkspaceContainer: \"vuu-workspace-container\",\n} as const;\n\nexport type VuuShellLocation =\n (typeof VuuShellLocation)[keyof typeof VuuShellLocation];\n"],"names":[],"mappings":"AAKO,MAAM,gBAAmB,GAAA;AAAA,EAC9B,YAAc,EAAA,eAAA;AAAA,EACd,uBAAyB,EAAA,+BAAA;AAAA,EACzB,SAAW,EAAA,gBAAA;AAAA,EACX,WAAa,EAAA,kBAAA;AAAA,EACb,SAAW,EAAA,eAAA;AAAA,EACX,kBAAoB,EAAA
|
|
1
|
+
{"version":3,"file":"shell-layout-types.js","sources":["../src/shell-layout-types.ts"],"sourcesContent":["/**\n * The Vuu Shell creates the outermost application layout. This includes some\n * 'special' identifiers that can be targetted by layout commands to effect or\n * react to layout changes.\n */\nexport const VuuShellLocation = {\n ContextPanel: \"context-panel\",\n MultiWorkspaceContainer: \"vuu-multi-workspace-container\",\n SidePanel: \"vuu-side-panel\",\n SideToolbar: \"vuu-side-toolbar\",\n Workspace: \"vuu-workspace\",\n WorkspaceContainer: \"vuu-workspace-container\",\n} as const;\n\nexport type VuuShellLocation =\n (typeof VuuShellLocation)[keyof typeof VuuShellLocation];\n"],"names":[],"mappings":"AAKO,MAAM,gBAAmB,GAAA;AAAA,EAC9B,YAAc,EAAA,eAAA;AAAA,EACd,uBAAyB,EAAA,+BAAA;AAAA,EACzB,SAAW,EAAA,gBAAA;AAAA,EACX,WAAa,EAAA,kBAAA;AAAA,EACb,SAAW,EAAA,eAAA;AAAA,EACX,kBAAoB,EAAA;AACtB;;;;"}
|