@vuu-ui/vuu-utils 0.9.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +43 -0
- package/cjs/box-utils.js.map +1 -1
- package/cjs/column-utils.js +74 -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 +14 -0
- 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 +1 -0
- package/cjs/event-emitter.js.map +1 -1
- package/cjs/feature-utils.js +43 -55
- 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 +2 -0
- package/cjs/form-utils.js.map +1 -1
- package/cjs/formatting-utils.js +2 -0
- 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 +18 -2
- 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 +0 -6
- 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 +15 -0
- 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 +44 -4
- package/cjs/tree-utils.js.map +1 -1
- package/cjs/ts-utils.js +2 -0
- 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 +40 -1
- package/esm/box-utils.js.map +1 -1
- package/esm/column-utils.js +74 -52
- 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 +14 -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 +1 -0
- package/esm/event-emitter.js.map +1 -1
- package/esm/feature-utils.js +42 -55
- 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 +2 -1
- package/esm/form-utils.js.map +1 -1
- package/esm/formatting-utils.js +2 -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 +11 -11
- 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 +1 -6
- 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 +15 -2
- 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 +41 -5
- package/esm/tree-utils.js.map +1 -1
- package/esm/ts-utils.js +2 -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 +8 -8
- package/types/ShellContext.d.ts +0 -1
- package/types/ThemeProvider.d.ts +1 -1
- package/types/box-utils.d.ts +15 -0
- package/types/column-utils.d.ts +20 -7
- package/types/context-definitions/DataSourceContext.d.ts +0 -1
- package/types/context-definitions/DataSourceProvider.d.ts +2 -2
- package/types/data-utils.d.ts +1 -0
- package/types/date/types.d.ts +2 -2
- package/types/feature-utils.d.ts +18 -5
- package/types/filters/filter-utils.d.ts +37 -37
- package/types/form-utils.d.ts +2 -1
- package/types/formatting-utils.d.ts +7 -0
- package/types/module-utils.d.ts +1 -3
- package/types/protocol-message-utils.d.ts +1 -0
- package/types/react-utils.d.ts +3 -1
- 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/types/ts-utils.d.ts +17 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-utils.js","sources":["../../src/filters/filter-utils.ts"],"sourcesContent":["import type { DataSourceFilter } from \"@vuu-ui/vuu-data-types\";\nimport {\n AndFilter,\n Filter,\n FilterClauseOp,\n FilterWithPartialClause,\n MultiClauseFilter,\n MultiValueFilterClause,\n OrFilter,\n SingleValueFilterClause,\n SingleValueFilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\nimport {\n ColumnDescriptor,\n RuntimeColumnDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport { EventEmitter } from \"../event-emitter\";\nimport { VuuFilter, VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { getTypedValue } from \"../form-utils\";\n\nconst singleValueFilterOps = new Set<SingleValueFilterClauseOp>([\n \"=\",\n \"!=\",\n \">\",\n \">=\",\n \"<\",\n \"<=\",\n \"contains\",\n \"starts\",\n \"ends\",\n]);\n\nexport const isValidFilterClauseOp = (op?: string): op is FilterClauseOp =>\n op === \"in\" || singleValueFilterOps.has(op as SingleValueFilterClauseOp);\n\nexport const isNamedFilter = (f?: Filter) =>\n f !== undefined && f.name !== undefined;\n\n// ... with type constraints\nexport const isSingleValueFilter = (\n f?: Partial<Filter>,\n): f is SingleValueFilterClause =>\n f !== undefined &&\n singleValueFilterOps.has(f.op as SingleValueFilterClauseOp);\n\nexport const isFilterClause = (\n f?: Partial<Filter>,\n): f is SingleValueFilterClause | MultiValueFilterClause =>\n f !== undefined && (isSingleValueFilter(f) || isMultiValueFilter(f));\n\nexport const isMultiValueFilter = (\n f?: Partial<Filter>,\n): f is MultiValueFilterClause => f !== undefined && f.op === \"in\";\n\nexport const isInFilter = (f: Partial<Filter>): f is MultiValueFilterClause =>\n f.op === \"in\";\nexport const isAndFilter = (f: Partial<Filter>): f is AndFilter =>\n f.op === \"and\";\nexport const isOrFilter = (f: Partial<Filter>): f is OrFilter => f.op === \"or\";\n\nexport const isCompleteFilter = (filter: Partial<Filter>): filter is Filter =>\n isSingleValueFilter(filter) &&\n filter.column !== undefined &&\n filter.op !== undefined &&\n filter.value !== undefined;\n\nexport function isMultiClauseFilter(\n f?: Partial<Filter> | FilterWithPartialClause,\n): f is MultiClauseFilter {\n return f !== undefined && (f.op === \"and\" || f.op === \"or\");\n}\n\nexport const applyFilterToColumns = (\n columns: RuntimeColumnDescriptor[],\n { filterStruct }: DataSourceFilter,\n) =>\n columns.map((column) => {\n // TODO this gives us a dependency on vuu-filters\n const filter = extractFilterForColumn(filterStruct, column.name);\n if (filter !== undefined) {\n return {\n ...column,\n filter,\n };\n } else if (column.filter) {\n return {\n ...column,\n filter: undefined,\n };\n } else {\n return column;\n }\n });\n\nexport const isFilteredColumn = (column: RuntimeColumnDescriptor) =>\n column.filter !== undefined;\n\nexport const stripFilterFromColumns = (columns: RuntimeColumnDescriptor[]) =>\n columns.map((col) => {\n const { filter, ...rest } = col;\n return filter ? rest : col;\n });\n\nexport const extractFilterForColumn = (\n filter: Filter | undefined,\n columnName: string,\n) => {\n if (isMultiClauseFilter(filter)) {\n return collectFiltersForColumn(filter, columnName);\n }\n if (isFilterClause(filter)) {\n return filter.column === columnName ? filter : undefined;\n }\n return undefined;\n};\n\nconst collectFiltersForColumn = (\n filter: MultiClauseFilter,\n columnName: string,\n) => {\n const { filters, op } = filter;\n const results: Filter[] = [];\n filters.forEach((filter) => {\n const ffc = extractFilterForColumn(filter, columnName);\n if (ffc) {\n results.push(ffc);\n }\n });\n if (results.length === 0) {\n return undefined;\n } else if (results.length === 1) {\n return results[0];\n }\n return {\n op,\n filters: results,\n };\n};\n\nexport type FilterEvents = {\n filter: (vuuFilter: VuuFilter) => void;\n};\n\nconst createFilterClause = (column: string, value: VuuRowDataItemType) =>\n typeof value === \"string\"\n ? `${column} contains \"${value}\"`\n : `${column} = ${value}`;\n\nexport class FilterAggregator extends EventEmitter<FilterEvents> {\n #columns = new Map<string, ColumnDescriptor>();\n #filters = new Map<string, VuuRowDataItemType>();\n\n addFilter(column: ColumnDescriptor, value: string | number) {\n this.#columns.set(column.name, column);\n const { serverDataType = \"string\" } = column;\n const typedValue = getTypedValue(value.toString(), serverDataType, true);\n\n this.#filters.set(column.name, typedValue);\n // this.emit(\"filter\", this.filter);\n }\n\n removeFilter(column: ColumnDescriptor) {\n if (this.#columns.has(column.name)) {\n this.#columns.delete(column.name);\n this.#filters.delete(column.name);\n return true;\n } else {\n return false;\n }\n }\n\n get filter(): VuuFilter {\n const { size } = this.#filters;\n if (size === 0) {\n return { filter: \"\" };\n } else {\n return {\n filter: Array.from(this.#filters.entries())\n .map((args) => createFilterClause(...args))\n .join(\" and \"),\n };\n }\n }\n}\n"],"names":["filter"],"mappings":";;;;;;;;;AAAA,IAAA,QAAA,EAAA,QAAA
|
|
1
|
+
{"version":3,"file":"filter-utils.js","sources":["../../src/filters/filter-utils.ts"],"sourcesContent":["import type { DataSourceFilter } from \"@vuu-ui/vuu-data-types\";\nimport {\n AndFilter,\n Filter,\n FilterClauseOp,\n FilterWithPartialClause,\n MultiClauseFilter,\n MultiValueFilterClause,\n OrFilter,\n SingleValueFilterClause,\n SingleValueFilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\nimport {\n ColumnDescriptor,\n RuntimeColumnDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport { EventEmitter } from \"../event-emitter\";\nimport { VuuFilter, VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { getTypedValue } from \"../form-utils\";\n\nconst singleValueFilterOps = new Set<SingleValueFilterClauseOp>([\n \"=\",\n \"!=\",\n \">\",\n \">=\",\n \"<\",\n \"<=\",\n \"contains\",\n \"starts\",\n \"ends\",\n]);\n\nexport const isValidFilterClauseOp = (op?: string): op is FilterClauseOp =>\n op === \"in\" || singleValueFilterOps.has(op as SingleValueFilterClauseOp);\n\nexport const isNamedFilter = (f?: Filter) =>\n f !== undefined && f.name !== undefined;\n\n// ... with type constraints\nexport const isSingleValueFilter = (\n f?: Partial<Filter>,\n): f is SingleValueFilterClause =>\n f !== undefined &&\n singleValueFilterOps.has(f.op as SingleValueFilterClauseOp);\n\nexport const isFilterClause = (\n f?: Partial<Filter>,\n): f is SingleValueFilterClause | MultiValueFilterClause =>\n f !== undefined && (isSingleValueFilter(f) || isMultiValueFilter(f));\n\nexport const isMultiValueFilter = (\n f?: Partial<Filter>,\n): f is MultiValueFilterClause => f !== undefined && f.op === \"in\";\n\nexport const isInFilter = (f: Partial<Filter>): f is MultiValueFilterClause =>\n f.op === \"in\";\nexport const isAndFilter = (f: Partial<Filter>): f is AndFilter =>\n f.op === \"and\";\nexport const isOrFilter = (f: Partial<Filter>): f is OrFilter => f.op === \"or\";\n\nexport const isCompleteFilter = (filter: Partial<Filter>): filter is Filter =>\n isSingleValueFilter(filter) &&\n filter.column !== undefined &&\n filter.op !== undefined &&\n filter.value !== undefined;\n\nexport function isMultiClauseFilter(\n f?: Partial<Filter> | FilterWithPartialClause,\n): f is MultiClauseFilter {\n return f !== undefined && (f.op === \"and\" || f.op === \"or\");\n}\n\nexport const applyFilterToColumns = (\n columns: RuntimeColumnDescriptor[],\n { filterStruct }: DataSourceFilter,\n) =>\n columns.map((column) => {\n // TODO this gives us a dependency on vuu-filters\n const filter = extractFilterForColumn(filterStruct, column.name);\n if (filter !== undefined) {\n return {\n ...column,\n filter,\n };\n } else if (column.filter) {\n return {\n ...column,\n filter: undefined,\n };\n } else {\n return column;\n }\n });\n\nexport const isFilteredColumn = (column: RuntimeColumnDescriptor) =>\n column.filter !== undefined;\n\nexport const stripFilterFromColumns = (columns: RuntimeColumnDescriptor[]) =>\n columns.map((col) => {\n const { filter, ...rest } = col;\n return filter ? rest : col;\n });\n\nexport const extractFilterForColumn = (\n filter: Filter | undefined,\n columnName: string,\n) => {\n if (isMultiClauseFilter(filter)) {\n return collectFiltersForColumn(filter, columnName);\n }\n if (isFilterClause(filter)) {\n return filter.column === columnName ? filter : undefined;\n }\n return undefined;\n};\n\nconst collectFiltersForColumn = (\n filter: MultiClauseFilter,\n columnName: string,\n) => {\n const { filters, op } = filter;\n const results: Filter[] = [];\n filters.forEach((filter) => {\n const ffc = extractFilterForColumn(filter, columnName);\n if (ffc) {\n results.push(ffc);\n }\n });\n if (results.length === 0) {\n return undefined;\n } else if (results.length === 1) {\n return results[0];\n }\n return {\n op,\n filters: results,\n };\n};\n\nexport type FilterEvents = {\n filter: (vuuFilter: VuuFilter) => void;\n};\n\nconst createFilterClause = (column: string, value: VuuRowDataItemType) =>\n typeof value === \"string\"\n ? `${column} contains \"${value}\"`\n : `${column} = ${value}`;\n\nexport class FilterAggregator extends EventEmitter<FilterEvents> {\n #columns = new Map<string, ColumnDescriptor>();\n #filters = new Map<string, VuuRowDataItemType>();\n\n addFilter(column: ColumnDescriptor, value: string | number) {\n this.#columns.set(column.name, column);\n const { serverDataType = \"string\" } = column;\n const typedValue = getTypedValue(value.toString(), serverDataType, true);\n\n this.#filters.set(column.name, typedValue);\n // this.emit(\"filter\", this.filter);\n }\n\n removeFilter(column: ColumnDescriptor) {\n if (this.#columns.has(column.name)) {\n this.#columns.delete(column.name);\n this.#filters.delete(column.name);\n return true;\n } else {\n return false;\n }\n }\n\n get filter(): VuuFilter {\n const { size } = this.#filters;\n if (size === 0) {\n return { filter: \"\" };\n } else {\n return {\n filter: Array.from(this.#filters.entries())\n .map((args) => createFilterClause(...args))\n .join(\" and \"),\n };\n }\n }\n}\n"],"names":["filter"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterAsQuery.js","sources":["../../src/filters/filterAsQuery.ts"],"sourcesContent":["import {\n ColumnDescriptorsByName,\n Filter,\n SingleValueFilterClause,\n} from \"@vuu-ui/vuu-filter-types\";\nimport type { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { isDateTimeDataValue } from \"../column-utils\";\nimport { isMultiClauseFilter, isMultiValueFilter } from \"./filter-utils\";\n\nconst filterValue = (value: string | number | boolean) =>\n typeof value === \"string\" ? `\"${value}\"` : value;\n\nconst quotedStrings = (value: string | number | boolean) =>\n typeof value === \"string\" ? `\"${value}\"` : value;\n\nconst removeOuterMostParentheses = (s: string) => s.replace(/^\\((.*)\\)$/, \"$1\");\n\nexport const filterAsQuery = (\n f: Filter,\n opts?: { columnsByName?: ColumnDescriptorsByName },\n): string => {\n return removeOuterMostParentheses(filterAsQueryCore(f, opts));\n};\n\nconst filterAsQueryCore = (\n f: Filter,\n opts?: { columnsByName?: ColumnDescriptorsByName },\n): string => {\n if (isMultiClauseFilter(f)) {\n const multiClauseFilter = f.filters\n .map((filter) => filterAsQueryCore(filter, opts))\n .join(` ${f.op} `);\n return `(${multiClauseFilter})`;\n } else if (isMultiValueFilter(f)) {\n return `${f.column} ${f.op} [${f.values.map(quotedStrings).join(\",\")}]`;\n } else {\n return singleValueFilterAsQuery(f, opts);\n }\n};\n\nfunction singleValueFilterAsQuery(\n f: SingleValueFilterClause,\n opts?: { columnsByName?: ColumnDescriptorsByName },\n): string {\n const column = opts?.columnsByName?.[f.column];\n if (column && isDateTimeDataValue(column)) {\n return dateFilterAsQuery(f as SingleValueFilterClause<number>);\n } else {\n return defaultSingleValueFilterAsQuery(f);\n }\n}\n\nconst ONE_DAY_IN_MILIS = 1000 * 60 * 60 * 24;\nexport function dateFilterAsQuery(f: SingleValueFilterClause<number>): string {\n switch (f.op) {\n case \"=\": {\n const filters: Array<Filter> = [\n { op: \">=\", column: f.column, value: f.value },\n {\n op: \"<\",\n column: f.column,\n value: f.value + ONE_DAY_IN_MILIS,\n },\n ];\n return filterAsQueryCore({ op: \"and\", filters });\n }\n case \"!=\": {\n const filters: Array<Filter> = [\n { op: \"<\", column: f.column, value: f.value },\n {\n op: \">=\",\n column: f.column,\n value: f.value + ONE_DAY_IN_MILIS,\n },\n ];\n return filterAsQueryCore({ op: \"or\", filters });\n }\n default:\n return defaultSingleValueFilterAsQuery(f);\n }\n}\n\nconst defaultSingleValueFilterAsQuery = (f: SingleValueFilterClause) =>\n `${f.column} ${f.op} ${filterValue(f.value)}`;\n\nexport const removeColumnFromFilter = (\n column: RuntimeColumnDescriptor,\n filter: Filter,\n): [Filter | undefined, string] => {\n if (isMultiClauseFilter(filter)) {\n const [clause1, clause2] = filter.filters;\n if (clause1.column === column.name) {\n return [clause2, filterAsQuery(clause2)];\n }\n if (clause2.column === column.name) {\n return [clause1, filterAsQuery(clause1)];\n }\n }\n return [undefined, \"\"];\n};\n"],"names":[],"mappings":";;;AASA,MAAM,WAAA,GAAc,CAAC,KACnB,KAAA,OAAO,UAAU,QAAW,GAAA,CAAA,CAAA,EAAI,KAAK,CAAM,CAAA,CAAA,GAAA,KAAA
|
|
1
|
+
{"version":3,"file":"filterAsQuery.js","sources":["../../src/filters/filterAsQuery.ts"],"sourcesContent":["import {\n ColumnDescriptorsByName,\n Filter,\n SingleValueFilterClause,\n} from \"@vuu-ui/vuu-filter-types\";\nimport type { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { isDateTimeDataValue } from \"../column-utils\";\nimport { isMultiClauseFilter, isMultiValueFilter } from \"./filter-utils\";\n\nconst filterValue = (value: string | number | boolean) =>\n typeof value === \"string\" ? `\"${value}\"` : value;\n\nconst quotedStrings = (value: string | number | boolean) =>\n typeof value === \"string\" ? `\"${value}\"` : value;\n\nconst removeOuterMostParentheses = (s: string) => s.replace(/^\\((.*)\\)$/, \"$1\");\n\nexport const filterAsQuery = (\n f: Filter,\n opts?: { columnsByName?: ColumnDescriptorsByName },\n): string => {\n return removeOuterMostParentheses(filterAsQueryCore(f, opts));\n};\n\nconst filterAsQueryCore = (\n f: Filter,\n opts?: { columnsByName?: ColumnDescriptorsByName },\n): string => {\n if (isMultiClauseFilter(f)) {\n const multiClauseFilter = f.filters\n .map((filter) => filterAsQueryCore(filter, opts))\n .join(` ${f.op} `);\n return `(${multiClauseFilter})`;\n } else if (isMultiValueFilter(f)) {\n return `${f.column} ${f.op} [${f.values.map(quotedStrings).join(\",\")}]`;\n } else {\n return singleValueFilterAsQuery(f, opts);\n }\n};\n\nfunction singleValueFilterAsQuery(\n f: SingleValueFilterClause,\n opts?: { columnsByName?: ColumnDescriptorsByName },\n): string {\n const column = opts?.columnsByName?.[f.column];\n if (column && isDateTimeDataValue(column)) {\n return dateFilterAsQuery(f as SingleValueFilterClause<number>);\n } else {\n return defaultSingleValueFilterAsQuery(f);\n }\n}\n\nconst ONE_DAY_IN_MILIS = 1000 * 60 * 60 * 24;\nexport function dateFilterAsQuery(f: SingleValueFilterClause<number>): string {\n switch (f.op) {\n case \"=\": {\n const filters: Array<Filter> = [\n { op: \">=\", column: f.column, value: f.value },\n {\n op: \"<\",\n column: f.column,\n value: f.value + ONE_DAY_IN_MILIS,\n },\n ];\n return filterAsQueryCore({ op: \"and\", filters });\n }\n case \"!=\": {\n const filters: Array<Filter> = [\n { op: \"<\", column: f.column, value: f.value },\n {\n op: \">=\",\n column: f.column,\n value: f.value + ONE_DAY_IN_MILIS,\n },\n ];\n return filterAsQueryCore({ op: \"or\", filters });\n }\n default:\n return defaultSingleValueFilterAsQuery(f);\n }\n}\n\nconst defaultSingleValueFilterAsQuery = (f: SingleValueFilterClause) =>\n `${f.column} ${f.op} ${filterValue(f.value)}`;\n\nexport const removeColumnFromFilter = (\n column: RuntimeColumnDescriptor,\n filter: Filter,\n): [Filter | undefined, string] => {\n if (isMultiClauseFilter(filter)) {\n const [clause1, clause2] = filter.filters;\n if (clause1.column === column.name) {\n return [clause2, filterAsQuery(clause2)];\n }\n if (clause2.column === column.name) {\n return [clause1, filterAsQuery(clause1)];\n }\n }\n return [undefined, \"\"];\n};\n"],"names":[],"mappings":"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"}
|
package/esm/form-utils.js
CHANGED
|
@@ -10,6 +10,7 @@ const getFieldName = (target) => {
|
|
|
10
10
|
throw Error("named form field not found");
|
|
11
11
|
}
|
|
12
12
|
};
|
|
13
|
+
const isNumber = (type, value) => type === "number";
|
|
13
14
|
function getTypedValue(value, type, throwIfInvalid = false) {
|
|
14
15
|
switch (type) {
|
|
15
16
|
case "int":
|
|
@@ -39,5 +40,5 @@ function getTypedValue(value, type, throwIfInvalid = false) {
|
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
42
|
|
|
42
|
-
export { getFieldName, getTypedValue };
|
|
43
|
+
export { getFieldName, getTypedValue, isNumber };
|
|
43
44
|
//# sourceMappingURL=form-utils.js.map
|
package/esm/form-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-utils.js","sources":["../src/form-utils.ts"],"sourcesContent":["import {\n VuuColumnDataType,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { KeyboardEvent, SyntheticEvent } from \"react\";\nimport { queryClosest } from \"./html-utils\";\nimport { stringIsValidDecimal, stringIsValidInt } from \"./data-utils\";\n\n/**\n * Use with the following convention:\n *\n * <FormField data-field=\"my-field-name\">\n */\nexport const getFieldName = (target: EventTarget | HTMLElement): string => {\n const saltFormField = queryClosest(target, \"[data-field]\") as HTMLElement;\n const fieldName = saltFormField?.dataset.field;\n if (fieldName) {\n return fieldName;\n } else {\n throw Error(\"named form field not found\");\n }\n};\n\nexport type InputSource = \"typeahead-suggestion\" | \"text-input\";\n\nexport type CommitHandler<\n E extends HTMLElement = HTMLInputElement,\n T extends VuuRowDataItemType
|
|
1
|
+
{"version":3,"file":"form-utils.js","sources":["../src/form-utils.ts"],"sourcesContent":["import {\n VuuColumnDataType,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { KeyboardEvent, SyntheticEvent } from \"react\";\nimport { queryClosest } from \"./html-utils\";\nimport { stringIsValidDecimal, stringIsValidInt } from \"./data-utils\";\n\n/**\n * Use with the following convention:\n *\n * <FormField data-field=\"my-field-name\">\n */\nexport const getFieldName = (target: EventTarget | HTMLElement): string => {\n const saltFormField = queryClosest(target, \"[data-field]\") as HTMLElement;\n const fieldName = saltFormField?.dataset.field;\n if (fieldName) {\n return fieldName;\n } else {\n throw Error(\"named form field not found\");\n }\n};\n\nexport type InputSource = \"typeahead-suggestion\" | \"text-input\";\n\nexport const isNumber = (\n type: string,\n value: VuuRowDataItemType,\n): value is number => type === \"number\";\n\nexport type CommitHandler<\n E extends HTMLElement = HTMLInputElement,\n T extends VuuRowDataItemType = VuuRowDataItemType,\n> = (\n evt: SyntheticEvent<E> | KeyboardEvent<E>,\n value: T,\n source?: InputSource,\n) => void;\n\n/**\n * Convert a string value to the type appropriate for the associated\n * column or form field. Can be used when processing a string value\n * from an input used for user editing.\n *\n * @param value\n * @param type\n * @param throwIfInvalid\n */\nexport function getTypedValue(\n value: string,\n type: VuuColumnDataType | \"number\",\n throwIfInvalid?: false,\n): VuuRowDataItemType | undefined;\nexport function getTypedValue(\n value: string,\n type: VuuColumnDataType | \"number\",\n throwIfInvalid: true,\n): VuuRowDataItemType;\nexport function getTypedValue(\n value: string,\n type: VuuColumnDataType | \"number\",\n throwIfInvalid = false,\n): VuuRowDataItemType | undefined {\n switch (type) {\n case \"int\":\n case \"long\": {\n if (stringIsValidInt(value)) {\n return parseInt(value, 10);\n } else if (throwIfInvalid) {\n throw Error(`value ${value} is not a valid ${type}`);\n } else {\n return undefined;\n }\n }\n\n case \"double\":\n case \"number\": {\n if (stringIsValidDecimal(value)) {\n return parseFloat(value);\n } else if (throwIfInvalid) {\n throw Error(`value ${value} is not a valid ${type}`);\n } else {\n return undefined;\n }\n }\n\n case \"boolean\":\n return value === \"true\" ? true : false;\n default:\n return value;\n }\n}\n"],"names":[],"mappings":";;;AAaa,MAAA,YAAA,GAAe,CAAC,MAA8C,KAAA;AACzE,EAAM,MAAA,aAAA,GAAgB,YAAa,CAAA,MAAA,EAAQ,cAAc,CAAA;AACzD,EAAM,MAAA,SAAA,GAAY,eAAe,OAAQ,CAAA,KAAA;AACzC,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,OAAA,SAAA;AAAA,GACF,MAAA;AACL,IAAA,MAAM,MAAM,4BAA4B,CAAA;AAAA;AAE5C;AAIO,MAAM,QAAW,GAAA,CACtB,IACA,EAAA,KAAA,KACoB,IAAS,KAAA;AA8BxB,SAAS,aACd,CAAA,KAAA,EACA,IACA,EAAA,cAAA,GAAiB,KACe,EAAA;AAChC,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,KAAA;AAAA,IACL,KAAK,MAAQ,EAAA;AACX,MAAI,IAAA,gBAAA,CAAiB,KAAK,CAAG,EAAA;AAC3B,QAAO,OAAA,QAAA,CAAS,OAAO,EAAE,CAAA;AAAA,iBAChB,cAAgB,EAAA;AACzB,QAAA,MAAM,KAAM,CAAA,CAAA,MAAA,EAAS,KAAK,CAAA,gBAAA,EAAmB,IAAI,CAAE,CAAA,CAAA;AAAA,OAC9C,MAAA;AACL,QAAO,OAAA,KAAA,CAAA;AAAA;AACT;AACF,IAEA,KAAK,QAAA;AAAA,IACL,KAAK,QAAU,EAAA;AACb,MAAI,IAAA,oBAAA,CAAqB,KAAK,CAAG,EAAA;AAC/B,QAAA,OAAO,WAAW,KAAK,CAAA;AAAA,iBACd,cAAgB,EAAA;AACzB,QAAA,MAAM,KAAM,CAAA,CAAA,MAAA,EAAS,KAAK,CAAA,gBAAA,EAAmB,IAAI,CAAE,CAAA,CAAA;AAAA,OAC9C,MAAA;AACL,QAAO,OAAA,KAAA,CAAA;AAAA;AACT;AACF,IAEA,KAAK,SAAA;AACH,MAAO,OAAA,KAAA,KAAU,SAAS,IAAO,GAAA,KAAA;AAAA,IACnC;AACE,MAAO,OAAA,KAAA;AAAA;AAEb;;;;"}
|
package/esm/formatting-utils.js
CHANGED
|
@@ -57,6 +57,7 @@ const getValueFormatter = (column, serverDataType = column.serverDataType) => {
|
|
|
57
57
|
}
|
|
58
58
|
return defaultValueFormatter;
|
|
59
59
|
};
|
|
60
|
+
const lowerCase = (str) => str.toLowerCase();
|
|
60
61
|
|
|
61
|
-
export { defaultValueFormatter, getValueFormatter, numericFormatter };
|
|
62
|
+
export { defaultValueFormatter, getValueFormatter, lowerCase, numericFormatter };
|
|
62
63
|
//# sourceMappingURL=formatting-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatting-utils.js","sources":["../src/formatting-utils.ts"],"sourcesContent":["import { DateTimeDataValueDescriptor } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n ColumnTypeFormatting,\n ColumnTypeValueMap,\n ValueFormatter,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n isDateTimeDataValue,\n isMappedValueTypeRenderer,\n isTypeDescriptor,\n} from \"./column-utils\";\nimport { dateTimePattern, formatDate } from \"./date\";\nimport { roundDecimal } from \"./round-decimal\";\n\nexport type ValueFormatters = {\n [key: string]: ValueFormatter;\n};\n\nconst DEFAULT_NUMERIC_FORMAT: ColumnTypeFormatting = {};\n\nexport const defaultValueFormatter = (value: unknown) =>\n value == null ? \"\" : typeof value === \"string\" ? value : value.toString();\n\nconst dateFormatter = (column: DateTimeDataValueDescriptor) => {\n const pattern = dateTimePattern(column.type);\n const formatter = formatDate(pattern);\n\n return (value: unknown) => {\n if (typeof value === \"number\" && value !== 0) {\n return formatter(new Date(value));\n } else {\n return \"\";\n }\n };\n};\n\nexport const numericFormatter = ({\n align = \"right\",\n type,\n}: Partial<ColumnDescriptor>) => {\n if (type === undefined || typeof type === \"string\") {\n return defaultValueFormatter;\n } else {\n const {\n alignOnDecimals = false,\n decimals,\n zeroPad = false,\n } = type.formatting ?? DEFAULT_NUMERIC_FORMAT;\n return (value: unknown) => {\n if (\n typeof value === \"string\" &&\n (value.startsWith(\"Σ\") || value.startsWith(\"[\"))\n ) {\n return value;\n }\n const number =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\"\n ? parseFloat(value)\n : undefined;\n return roundDecimal(number, align, decimals, zeroPad, alignOnDecimals);\n };\n }\n};\n\nconst mapFormatter = (map: ColumnTypeValueMap) => {\n return (value: unknown) => {\n return map[value as string] ?? \"\";\n };\n};\n\nexport const getValueFormatter = (\n column: ColumnDescriptor,\n serverDataType = column.serverDataType,\n): ValueFormatter => {\n if (isDateTimeDataValue(column)) {\n return dateFormatter(column);\n }\n\n const { type } = column;\n if (isTypeDescriptor(type) && isMappedValueTypeRenderer(type?.renderer)) {\n return mapFormatter(type.renderer.map);\n } else if (serverDataType === \"string\" || serverDataType === \"char\") {\n return (value: unknown) => value as string;\n } else if (serverDataType === \"double\") {\n return numericFormatter(column);\n }\n return defaultValueFormatter;\n};\n"],"names":[],"mappings":";;;;;;AAmBA,MAAM,yBAA+C,EAAC
|
|
1
|
+
{"version":3,"file":"formatting-utils.js","sources":["../src/formatting-utils.ts"],"sourcesContent":["import { DateTimeDataValueDescriptor } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n ColumnTypeFormatting,\n ColumnTypeValueMap,\n ValueFormatter,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n isDateTimeDataValue,\n isMappedValueTypeRenderer,\n isTypeDescriptor,\n} from \"./column-utils\";\nimport { dateTimePattern, formatDate } from \"./date\";\nimport { roundDecimal } from \"./round-decimal\";\n\nexport type ValueFormatters = {\n [key: string]: ValueFormatter;\n};\n\nconst DEFAULT_NUMERIC_FORMAT: ColumnTypeFormatting = {};\n\nexport const defaultValueFormatter = (value: unknown) =>\n value == null ? \"\" : typeof value === \"string\" ? value : value.toString();\n\nconst dateFormatter = (column: DateTimeDataValueDescriptor) => {\n const pattern = dateTimePattern(column.type);\n const formatter = formatDate(pattern);\n\n return (value: unknown) => {\n if (typeof value === \"number\" && value !== 0) {\n return formatter(new Date(value));\n } else {\n return \"\";\n }\n };\n};\n\nexport const numericFormatter = ({\n align = \"right\",\n type,\n}: Partial<ColumnDescriptor>) => {\n if (type === undefined || typeof type === \"string\") {\n return defaultValueFormatter;\n } else {\n const {\n alignOnDecimals = false,\n decimals,\n zeroPad = false,\n } = type.formatting ?? DEFAULT_NUMERIC_FORMAT;\n return (value: unknown) => {\n if (\n typeof value === \"string\" &&\n (value.startsWith(\"Σ\") || value.startsWith(\"[\"))\n ) {\n return value;\n }\n const number =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\"\n ? parseFloat(value)\n : undefined;\n return roundDecimal(number, align, decimals, zeroPad, alignOnDecimals);\n };\n }\n};\n\nconst mapFormatter = (map: ColumnTypeValueMap) => {\n return (value: unknown) => {\n return map[value as string] ?? \"\";\n };\n};\n\nexport const getValueFormatter = (\n column: ColumnDescriptor,\n serverDataType = column.serverDataType,\n): ValueFormatter => {\n if (isDateTimeDataValue(column)) {\n return dateFormatter(column);\n }\n\n const { type } = column;\n if (isTypeDescriptor(type) && isMappedValueTypeRenderer(type?.renderer)) {\n return mapFormatter(type.renderer.map);\n } else if (serverDataType === \"string\" || serverDataType === \"char\") {\n return (value: unknown) => value as string;\n } else if (serverDataType === \"double\") {\n return numericFormatter(column);\n }\n return defaultValueFormatter;\n};\n\n/**\n * Lowercases a string and returns as Lowercase typescript type\n *\n * @param str the input string\n * @returns str converted to Lowercase\n */\nexport const lowerCase = (str: string) =>\n str.toLowerCase() as Lowercase<string>;\n"],"names":[],"mappings":";;;;;;AAmBA,MAAM,yBAA+C,EAAC;AAEzC,MAAA,qBAAA,GAAwB,CAAC,KAAA,KACpC,KAAS,IAAA,IAAA,GAAO,EAAK,GAAA,OAAO,KAAU,KAAA,QAAA,GAAW,KAAQ,GAAA,KAAA,CAAM,QAAS;AAE1E,MAAM,aAAA,GAAgB,CAAC,MAAwC,KAAA;AAC7D,EAAM,MAAA,OAAA,GAAU,eAAgB,CAAA,MAAA,CAAO,IAAI,CAAA;AAC3C,EAAM,MAAA,SAAA,GAAY,WAAW,OAAO,CAAA;AAEpC,EAAA,OAAO,CAAC,KAAmB,KAAA;AACzB,IAAA,IAAI,OAAO,KAAA,KAAU,QAAY,IAAA,KAAA,KAAU,CAAG,EAAA;AAC5C,MAAA,OAAO,SAAU,CAAA,IAAI,IAAK,CAAA,KAAK,CAAC,CAAA;AAAA,KAC3B,MAAA;AACL,MAAO,OAAA,EAAA;AAAA;AACT,GACF;AACF,CAAA;AAEO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,KAAQ,GAAA,OAAA;AAAA,EACR;AACF,CAAiC,KAAA;AAC/B,EAAA,IAAI,IAAS,KAAA,KAAA,CAAA,IAAa,OAAO,IAAA,KAAS,QAAU,EAAA;AAClD,IAAO,OAAA,qBAAA;AAAA,GACF,MAAA;AACL,IAAM,MAAA;AAAA,MACJ,eAAkB,GAAA,KAAA;AAAA,MAClB,QAAA;AAAA,MACA,OAAU,GAAA;AAAA,KACZ,GAAI,KAAK,UAAc,IAAA,sBAAA;AACvB,IAAA,OAAO,CAAC,KAAmB,KAAA;AACzB,MACE,IAAA,OAAO,KAAU,KAAA,QAAA,KAChB,KAAM,CAAA,UAAA,CAAW,QAAG,CAAK,IAAA,KAAA,CAAM,UAAW,CAAA,GAAG,CAC9C,CAAA,EAAA;AACA,QAAO,OAAA,KAAA;AAAA;AAET,MAAM,MAAA,MAAA,GACJ,OAAO,KAAA,KAAU,QACb,GAAA,KAAA,GACA,OAAO,KAAU,KAAA,QAAA,GACf,UAAW,CAAA,KAAK,CAChB,GAAA,KAAA,CAAA;AACR,MAAA,OAAO,YAAa,CAAA,MAAA,EAAQ,KAAO,EAAA,QAAA,EAAU,SAAS,eAAe,CAAA;AAAA,KACvE;AAAA;AAEJ;AAEA,MAAM,YAAA,GAAe,CAAC,GAA4B,KAAA;AAChD,EAAA,OAAO,CAAC,KAAmB,KAAA;AACzB,IAAO,OAAA,GAAA,CAAI,KAAe,CAAK,IAAA,EAAA;AAAA,GACjC;AACF,CAAA;AAEO,MAAM,iBAAoB,GAAA,CAC/B,MACA,EAAA,cAAA,GAAiB,OAAO,cACL,KAAA;AACnB,EAAI,IAAA,mBAAA,CAAoB,MAAM,CAAG,EAAA;AAC/B,IAAA,OAAO,cAAc,MAAM,CAAA;AAAA;AAG7B,EAAM,MAAA,EAAE,MAAS,GAAA,MAAA;AACjB,EAAA,IAAI,iBAAiB,IAAI,CAAA,IAAK,yBAA0B,CAAA,IAAA,EAAM,QAAQ,CAAG,EAAA;AACvE,IAAO,OAAA,YAAA,CAAa,IAAK,CAAA,QAAA,CAAS,GAAG,CAAA;AAAA,GAC5B,MAAA,IAAA,cAAA,KAAmB,QAAY,IAAA,cAAA,KAAmB,MAAQ,EAAA;AACnE,IAAA,OAAO,CAAC,KAAmB,KAAA,KAAA;AAAA,GAC7B,MAAA,IAAW,mBAAmB,QAAU,EAAA;AACtC,IAAA,OAAO,iBAAiB,MAAM,CAAA;AAAA;AAEhC,EAAO,OAAA,qBAAA;AACT;AAQO,MAAM,SAAY,GAAA,CAAC,GACxB,KAAA,GAAA,CAAI,WAAY;;;;"}
|
package/esm/group-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group-utils.js","sources":["../src/group-utils.ts"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { VuuGroupBy } from \"@vuu-ui/vuu-protocol-types\";\n\nexport function addGroupColumn(\n groupBy: VuuGroupBy,\n column: RuntimeColumnDescriptor,\n) {\n if (groupBy) {\n return groupBy.concat(column.name);\n } else {\n return [column.name];\n }\n}\n"],"names":[],"mappings":"AAGgB,SAAA,cAAA,CACd,SACA,MACA,EAAA;AACA,EAAA,IAAI,OAAS,EAAA;AACX,IAAO,OAAA,OAAA,CAAQ,MAAO,CAAA,MAAA,CAAO,IAAI,CAAA
|
|
1
|
+
{"version":3,"file":"group-utils.js","sources":["../src/group-utils.ts"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { VuuGroupBy } from \"@vuu-ui/vuu-protocol-types\";\n\nexport function addGroupColumn(\n groupBy: VuuGroupBy,\n column: RuntimeColumnDescriptor,\n) {\n if (groupBy) {\n return groupBy.concat(column.name);\n } else {\n return [column.name];\n }\n}\n"],"names":[],"mappings":"AAGgB,SAAA,cAAA,CACd,SACA,MACA,EAAA;AACA,EAAA,IAAI,OAAS,EAAA;AACX,IAAO,OAAA,OAAA,CAAQ,MAAO,CAAA,MAAA,CAAO,IAAI,CAAA;AAAA,GAC5B,MAAA;AACL,IAAO,OAAA,CAAC,OAAO,IAAI,CAAA;AAAA;AAEvB;;;;"}
|
package/esm/html-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-utils.js","sources":["../src/html-utils.ts"],"sourcesContent":["export const createEl = (\n elementType: \"div\" | \"p\" | \"span\",\n className?: string,\n textContent?: string,\n): HTMLElement => {\n const el = document.createElement(elementType);\n if (className) {\n el.className = className;\n }\n if (textContent) {\n el.textContent = textContent;\n }\n return el;\n};\n\nexport const getFocusableElement = (\n el: HTMLElement | null,\n tabIndex?: number,\n) => {\n if (el) {\n if (el.hasAttribute(\"tabindex\")) {\n const rootTabIndex = parseInt(el.getAttribute(\"tabindex\") as string);\n if (\n !isNaN(rootTabIndex) &&\n (tabIndex === undefined || rootTabIndex === tabIndex)\n ) {\n return el;\n }\n }\n const focusableEl =\n typeof tabIndex === \"number\"\n ? (el.querySelector(`[tabindex=\"${tabIndex}\"]`) as HTMLElement)\n : (el.querySelector(\"[tabindex]\") as HTMLElement);\n if (focusableEl) {\n return focusableEl as HTMLElement;\n }\n }\n};\n\nexport const getElementDataIndex = (el: HTMLElement | null) => {\n if (el) {\n const index = parseInt(el.dataset.index || \"\");\n if (!isNaN(index)) {\n return index;\n }\n }\n return -1;\n};\n\nexport function queryClosest<T extends HTMLElement = HTMLElement>(\n el: HTMLElement | EventTarget | null,\n cssQueryString: string,\n throwIfNotFound?: false,\n): T | null;\nexport function queryClosest<T extends HTMLElement = HTMLElement>(\n el: HTMLElement | EventTarget | null,\n cssQueryString: string,\n throwIfNotFound: true,\n): T;\nexport function queryClosest<T extends HTMLElement = HTMLElement>(\n el: HTMLElement | EventTarget | null,\n cssQueryString: string,\n throwIfNotFound?: boolean,\n) {\n if (el) {\n const result = (el as HTMLElement).closest(cssQueryString) as T;\n if (result) {\n return result;\n }\n }\n if (throwIfNotFound) {\n throw Error(`no element found to match '${cssQueryString}'`);\n } else {\n return null;\n }\n}\n\nexport const getClosest = (el: HTMLElement, dataProperty: string) =>\n queryClosest(el, `[data-${dataProperty}]`);\n\nexport const getClosestIndexItem = (el: HTMLElement) => getClosest(el, \"index\");\n\nexport function getElementByDataIndex(\n c: HTMLElement | null | undefined,\n i: number | string,\n throwIfNotFound: true,\n): HTMLElement;\nexport function getElementByDataIndex(\n c: HTMLElement | null | undefined,\n i: number | string,\n throwIfNotFound?: false,\n): HTMLElement | undefined;\nexport function getElementByDataIndex(\n container: HTMLElement | null | undefined,\n index: number | string,\n throwIfNotFound = false,\n) {\n if (container == null && throwIfNotFound) {\n throw Error(\"html-utils getElementByDataIndex, container is null\");\n }\n const element = container?.querySelector(\n `[data-index=\"${index}\"]`,\n ) as HTMLElement;\n if (element) {\n return element;\n } else if (throwIfNotFound) {\n throw Error(\n \"html-utils getElementByDataIndex, Item not found with data-index='${index}'\",\n );\n } else {\n return undefined;\n }\n}\n\nexport const focusFirstFocusableElement = (\n el: HTMLElement | null,\n tabIndex?: number,\n) => {\n // TODO test el for focusable\n requestAnimationFrame(() => {\n const focusableElement = getFocusableElement(el, tabIndex);\n if (focusableElement) {\n focusableElement.focus();\n }\n });\n};\n\nexport const isSelectableElement = (el?: HTMLElement | null) => {\n const item = el?.closest(\"[data-index]\") as HTMLElement;\n if (\n !item ||\n item.ariaDisabled ||\n item.dataset.selectable === \"false\" ||\n item.querySelector('[data-selectable=\"false\"],[aria-disabled=\"true\"]')\n ) {\n return false;\n } else {\n return true;\n }\n};\n\nexport const isInputElement = (\n el: HTMLElement | EventTarget | null,\n): el is HTMLInputElement => {\n if (el === null) {\n return false;\n } else {\n return (el as HTMLElement).tagName === \"INPUT\";\n }\n};\n\nexport const isDateInput = (\n el: HTMLElement | EventTarget | null,\n): el is HTMLInputElement =>\n isInputElement(el) && el.classList.contains(\"saltDateInput-input\");\n\nexport const hasOpenOptionList = (el: HTMLElement | EventTarget | null) => {\n if (el !== null) {\n return (el as HTMLElement).ariaExpanded === \"true\";\n }\n};\n\nlet size: number;\n\nexport function getScrollbarSize() {\n if (size === undefined) {\n let outer: HTMLElement | null = document.createElement(\"div\");\n outer.className = \"scrollable-content\";\n outer.style.width = \"50px\";\n outer.style.height = \"50px\";\n outer.style.overflowY = \"scroll\";\n outer.style.position = \"absolute\";\n outer.style.top = \"-200px\";\n outer.style.left = \"-200px\";\n const inner = document.createElement(\"div\");\n inner.style.height = \"100px\";\n inner.style.width = \"100%\";\n outer.appendChild(inner);\n document.body.appendChild(outer);\n const outerWidth = outer.offsetWidth;\n const innerWidth = inner.offsetWidth;\n document.body.removeChild(outer);\n size = outerWidth - innerWidth;\n outer = null;\n }\n\n return size;\n}\n\nexport type MouseEventTypes = \"dblclick\" | \"click\";\nexport type KeyboardEventTypes = \"keydown\" | \"keypress\" | \"keyup\";\n\nexport const dispatchMouseEvent = (el: HTMLElement, type: MouseEventTypes) => {\n const evt = new MouseEvent(type, {\n view: window,\n bubbles: true,\n cancelable: true,\n });\n el.dispatchEvent(evt);\n};\nexport const dispatchKeyboardEvent = (\n el: HTMLElement,\n type: KeyboardEventTypes,\n key: string,\n) => {\n const evt = new KeyboardEvent(type, {\n key,\n view: window,\n bubbles: true,\n cancelable: true,\n });\n el.dispatchEvent(evt);\n};\n\nexport type VuuDomEventType = \"vuu-commit\" | \"vuu-dropped\";\n\nexport const dispatchCustomEvent = (el: HTMLElement, type: VuuDomEventType) => {\n const evt = new Event(type, {\n bubbles: true,\n cancelable: true,\n });\n el.dispatchEvent(evt);\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"html-utils.js","sources":["../src/html-utils.ts"],"sourcesContent":["export const createEl = (\n elementType: \"div\" | \"p\" | \"span\",\n className?: string,\n textContent?: string,\n): HTMLElement => {\n const el = document.createElement(elementType);\n if (className) {\n el.className = className;\n }\n if (textContent) {\n el.textContent = textContent;\n }\n return el;\n};\n\nexport const getFocusableElement = (\n el: HTMLElement | null,\n tabIndex?: number,\n) => {\n if (el) {\n if (el.hasAttribute(\"tabindex\")) {\n const rootTabIndex = parseInt(el.getAttribute(\"tabindex\") as string);\n if (\n !isNaN(rootTabIndex) &&\n (tabIndex === undefined || rootTabIndex === tabIndex)\n ) {\n return el;\n }\n }\n const focusableEl =\n typeof tabIndex === \"number\"\n ? (el.querySelector(`[tabindex=\"${tabIndex}\"]`) as HTMLElement)\n : (el.querySelector(\"[tabindex]\") as HTMLElement);\n if (focusableEl) {\n return focusableEl as HTMLElement;\n }\n }\n};\n\nexport const getElementDataIndex = (el: HTMLElement | null) => {\n if (el) {\n const index = parseInt(el.dataset.index || \"\");\n if (!isNaN(index)) {\n return index;\n }\n }\n return -1;\n};\n\nexport function queryClosest<T extends HTMLElement = HTMLElement>(\n el: HTMLElement | EventTarget | null,\n cssQueryString: string,\n throwIfNotFound?: false,\n): T | null;\nexport function queryClosest<T extends HTMLElement = HTMLElement>(\n el: HTMLElement | EventTarget | null,\n cssQueryString: string,\n throwIfNotFound: true,\n): T;\nexport function queryClosest<T extends HTMLElement = HTMLElement>(\n el: HTMLElement | EventTarget | null,\n cssQueryString: string,\n throwIfNotFound?: boolean,\n) {\n if (el) {\n const result = (el as HTMLElement).closest(cssQueryString) as T;\n if (result) {\n return result;\n }\n }\n if (throwIfNotFound) {\n throw Error(`no element found to match '${cssQueryString}'`);\n } else {\n return null;\n }\n}\n\nexport const getClosest = (el: HTMLElement, dataProperty: string) =>\n queryClosest(el, `[data-${dataProperty}]`);\n\nexport const getClosestIndexItem = (el: HTMLElement) => getClosest(el, \"index\");\n\nexport function getElementByDataIndex(\n c: HTMLElement | null | undefined,\n i: number | string,\n throwIfNotFound: true,\n): HTMLElement;\nexport function getElementByDataIndex(\n c: HTMLElement | null | undefined,\n i: number | string,\n throwIfNotFound?: false,\n): HTMLElement | undefined;\nexport function getElementByDataIndex(\n container: HTMLElement | null | undefined,\n index: number | string,\n throwIfNotFound = false,\n) {\n if (container == null && throwIfNotFound) {\n throw Error(\"html-utils getElementByDataIndex, container is null\");\n }\n const element = container?.querySelector(\n `[data-index=\"${index}\"]`,\n ) as HTMLElement;\n if (element) {\n return element;\n } else if (throwIfNotFound) {\n throw Error(\n \"html-utils getElementByDataIndex, Item not found with data-index='${index}'\",\n );\n } else {\n return undefined;\n }\n}\n\nexport const focusFirstFocusableElement = (\n el: HTMLElement | null,\n tabIndex?: number,\n) => {\n // TODO test el for focusable\n requestAnimationFrame(() => {\n const focusableElement = getFocusableElement(el, tabIndex);\n if (focusableElement) {\n focusableElement.focus();\n }\n });\n};\n\nexport const isSelectableElement = (el?: HTMLElement | null) => {\n const item = el?.closest(\"[data-index]\") as HTMLElement;\n if (\n !item ||\n item.ariaDisabled ||\n item.dataset.selectable === \"false\" ||\n item.querySelector('[data-selectable=\"false\"],[aria-disabled=\"true\"]')\n ) {\n return false;\n } else {\n return true;\n }\n};\n\nexport const isInputElement = (\n el: HTMLElement | EventTarget | null,\n): el is HTMLInputElement => {\n if (el === null) {\n return false;\n } else {\n return (el as HTMLElement).tagName === \"INPUT\";\n }\n};\n\nexport const isDateInput = (\n el: HTMLElement | EventTarget | null,\n): el is HTMLInputElement =>\n isInputElement(el) && el.classList.contains(\"saltDateInput-input\");\n\nexport const hasOpenOptionList = (el: HTMLElement | EventTarget | null) => {\n if (el !== null) {\n return (el as HTMLElement).ariaExpanded === \"true\";\n }\n};\n\nlet size: number;\n\nexport function getScrollbarSize() {\n if (size === undefined) {\n let outer: HTMLElement | null = document.createElement(\"div\");\n outer.className = \"scrollable-content\";\n outer.style.width = \"50px\";\n outer.style.height = \"50px\";\n outer.style.overflowY = \"scroll\";\n outer.style.position = \"absolute\";\n outer.style.top = \"-200px\";\n outer.style.left = \"-200px\";\n const inner = document.createElement(\"div\");\n inner.style.height = \"100px\";\n inner.style.width = \"100%\";\n outer.appendChild(inner);\n document.body.appendChild(outer);\n const outerWidth = outer.offsetWidth;\n const innerWidth = inner.offsetWidth;\n document.body.removeChild(outer);\n size = outerWidth - innerWidth;\n outer = null;\n }\n\n return size;\n}\n\nexport type MouseEventTypes = \"dblclick\" | \"click\";\nexport type KeyboardEventTypes = \"keydown\" | \"keypress\" | \"keyup\";\n\nexport const dispatchMouseEvent = (el: HTMLElement, type: MouseEventTypes) => {\n const evt = new MouseEvent(type, {\n view: window,\n bubbles: true,\n cancelable: true,\n });\n el.dispatchEvent(evt);\n};\nexport const dispatchKeyboardEvent = (\n el: HTMLElement,\n type: KeyboardEventTypes,\n key: string,\n) => {\n const evt = new KeyboardEvent(type, {\n key,\n view: window,\n bubbles: true,\n cancelable: true,\n });\n el.dispatchEvent(evt);\n};\n\nexport type VuuDomEventType = \"vuu-commit\" | \"vuu-dropped\";\n\nexport const dispatchCustomEvent = (el: HTMLElement, type: VuuDomEventType) => {\n const evt = new Event(type, {\n bubbles: true,\n cancelable: true,\n });\n el.dispatchEvent(evt);\n};\n"],"names":[],"mappings":"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"}
|
package/esm/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export { getAddedItems, getMissingItems, itemsChanged, itemsOrOrderChanged, moveItem, moveItemDeprecated, partition } from './array-utils.js';
|
|
2
|
-
export { boxContainsPoint } from './box-utils.js';
|
|
3
|
-
export { AggregationType, addColumnToSubscribedColumns, applyDefaultColumnConfig, applyGroupByToColumns, applyRuntimeColumnWidthsToConfig, applySortToColumns, applyWidthToColumns, buildColumnMap, checkConfirmationPending, dataAndColumnUnchanged, dataColumnAndKeyUnchanged, existingSort, extractGroupColumn, findColumn, flattenColumnGroup, fromServerDataType, getCalculatedColumnDetails, getColumnLabel, getColumnName, getColumnStyle, getColumnsInViewport, getDefaultAlignment, getDefaultColumnType, getGroupIcon, getGroupValue, getRowRecord, getRuntimeColumnWidth, getTableHeadings, getTypeFormattingFromColumn, hasCustomRenderer, hasHeadings, hasValidationRules, isCalculatedColumn, isColumnTypeRenderer, isDataLoading, isDateTimeDataValue, isGroupColumn, isJsonAttribute, isJsonColumn, isJsonGroup, isLookupRenderer, isMappedValueTypeRenderer, isNotHidden, isNumericColumn, isPinned, isResizing, isStringColumn, isTextColumn, isTypeDescriptor, isValidColumnAlignment, isValidPinLocation, isValueListRenderer, isVuuColumnDataType, mapSortCriteria, measurePinnedColumns, metadataKeys, moveColumnTo, projectUpdates, removeSort, replaceColumn, setAggregations, setCalculatedColumnExpression, setCalculatedColumnName, setCalculatedColumnType, sortPinnedColumns, subscribedOnly, toColumnDescriptor, toColumnName, toDataSourceColumns, updateColumn, updateColumnFormatting, updateColumnRenderProps, updateColumnType, visibleColumnAtIndex } from './column-utils.js';
|
|
2
|
+
export { boxContainsPoint, getCenteredBox, getPositionWithinBox, isGridLayoutSplitDirection, pointPositionWithinRect } from './box-utils.js';
|
|
3
|
+
export { AggregationType, addColumnToSubscribedColumns, applyDefaultColumnConfig, applyGroupByToColumns, applyRuntimeColumnWidthsToConfig, applySortToColumns, applyWidthToColumns, buildColumnMap, buildReverseColumnMap, checkConfirmationPending, dataAndColumnUnchanged, dataColumnAndKeyUnchanged, existingSort, extractGroupColumn, findColumn, flattenColumnGroup, fromServerDataType, getCalculatedColumnDetails, getColumnLabel, getColumnName, getColumnStyle, getColumnsInViewport, getDefaultAlignment, getDefaultColumnType, getGroupIcon, getGroupValue, getRowRecord, getRuntimeColumnWidth, getTableHeadings, getTypeFormattingFromColumn, hasCustomRenderer, hasHeadings, hasValidationRules, isCalculatedColumn, isColumnTypeRenderer, isDataLoading, isDateTimeDataValue, isGroupColumn, isJsonAttribute, isJsonColumn, isJsonGroup, isLookupRenderer, isMappedValueTypeRenderer, isNotHidden, isNumericColumn, isPinned, isResizing, isStringColumn, isTextColumn, isTypeDescriptor, isValidColumnAlignment, isValidPinLocation, isValueListRenderer, isVuuColumnDataType, mapSortCriteria, measurePinnedColumns, metadataKeys, moveColumnTo, projectUpdates, removeSort, replaceColumn, setAggregations, setCalculatedColumnExpression, setCalculatedColumnName, setCalculatedColumnType, sortPinnedColumns, subscribedOnly, toColumnDescriptor, toColumnName, toDataSourceColumns, updateColumn, updateColumnFormatting, updateColumnRenderProps, updateColumnType, visibleColumnAtIndex } from './column-utils.js';
|
|
4
4
|
export { getCookieValue } from './cookie-utils.js';
|
|
5
5
|
export { getCellConfigPanelRenderer, getCellRenderer, getCellRendererOptions, getColumnHeaderContentRenderer, getColumnHeaderLabelRenderer, getConfigurationEditor, getEditRuleValidator, getLayoutComponent, getRegisteredCellRenderers, getRowClassNameGenerator, isContainer, isLayoutComponent, isView, registerComponent, registerConfigurationEditor } from './component-registry.js';
|
|
6
6
|
export { DataWindow } from './DataWindow.js';
|
|
7
7
|
export { MEASURES } from './common-types.js';
|
|
8
8
|
export { importCSS } from './css-utils.js';
|
|
9
|
-
export { DOWN1, DOWN2, UP1, UP2, getMovingValueDirection, isValidNumber, numericTypeOfStringValue, shallowEquals, stringIsValidDecimal, stringIsValidInt, stringIsValidNumber } from './data-utils.js';
|
|
9
|
+
export { DOWN1, DOWN2, UP1, UP2, asInteger, getMovingValueDirection, isValidNumber, numericTypeOfStringValue, shallowEquals, stringIsValidDecimal, stringIsValidInt, stringIsValidNumber } from './data-utils.js';
|
|
10
10
|
export { BaseDataSource } from './datasource/BaseDataSource.js';
|
|
11
11
|
export { isViewportMenusAction, isVisualLinkCreatedAction, isVisualLinkRemovedAction, isVisualLinksAction, isVuuFeatureAction } from './datasource/datasource-action-utils.js';
|
|
12
12
|
export { combineFilters } from './datasource/datasource-filter-utils.js';
|
|
@@ -20,9 +20,9 @@ export { FilterAggregator, applyFilterToColumns, extractFilterForColumn, isAndFi
|
|
|
20
20
|
export { dateFilterAsQuery, filterAsQuery, removeColumnFromFilter } from './filters/filterAsQuery.js';
|
|
21
21
|
export { createEl, dispatchCustomEvent, dispatchKeyboardEvent, dispatchMouseEvent, focusFirstFocusableElement, getClosest, getClosestIndexItem, getElementByDataIndex, getElementDataIndex, getFocusableElement, getScrollbarSize, hasOpenOptionList, isDateInput, isInputElement, isSelectableElement, queryClosest } from './html-utils.js';
|
|
22
22
|
export { EventEmitter } from './event-emitter.js';
|
|
23
|
-
export { assertComponentRegistered, assertComponentsRegistered, byModule, env, featureFromJson, getCustomAndTableFeatures, getFilterTableFeatures, hasFilterTableFeatureProps, isCustomFeature, isStaticFeatures,
|
|
24
|
-
export { getFieldName, getTypedValue } from './form-utils.js';
|
|
25
|
-
export { defaultValueFormatter, getValueFormatter, numericFormatter } from './formatting-utils.js';
|
|
23
|
+
export { assertComponentRegistered, assertComponentsRegistered, byModule, env, featureFromJson, getCustomAndTableFeatures, getFilterTableFeatures, hasFilterTableFeatureProps, isCustomFeature, isSameTable, isStaticFeatures, isVuuTables, isWildcardSchema } from './feature-utils.js';
|
|
24
|
+
export { getFieldName, getTypedValue, isNumber } from './form-utils.js';
|
|
25
|
+
export { defaultValueFormatter, getValueFormatter, lowerCase, numericFormatter } from './formatting-utils.js';
|
|
26
26
|
export { getUniqueId } from './getUniqueId.js';
|
|
27
27
|
export { addGroupColumn } from './group-utils.js';
|
|
28
28
|
export { isCharacterKey, isQuoteKey } from './input-utils.js';
|
|
@@ -35,13 +35,13 @@ export { getSelectedOption } from './list-utils.js';
|
|
|
35
35
|
export { getAllLocalEntity, getLocalEntity, saveLocalEntity } from './local-storage-utils.js';
|
|
36
36
|
export { getLoggingConfigForWorker, logger } from './logging-utils.js';
|
|
37
37
|
export { buildMenuDescriptorFromVuuMenu, getMenuRpcRequest, hasShowNotificationAction, isCellMenu, isGroupMenuItemDescriptor, isOpenBulkEditResponse, isRoot, isRowMenu, isSelectionMenu, isTableLocation } from './menu-utils.js';
|
|
38
|
-
export {
|
|
38
|
+
export { isModule } from './module-utils.js';
|
|
39
39
|
export { uuid } from './nanoid/index.js';
|
|
40
|
-
export { asReactElements } from './react-utils.js';
|
|
40
|
+
export { asReactElements, isSimpleStateValue, useIsMounted } 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,9 +50,9 @@ 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
|
-
export { isNotNullOrUndefined, isObject } from './ts-utils.js';
|
|
55
|
+
export { elementImplementsJSONSerialization, isNotNullOrUndefined, isObject } from './ts-utils.js';
|
|
56
56
|
export { getUrlParameter, hasUrlParameter } from './url-utils.js';
|
|
57
57
|
export { useId } from './useId.js';
|
|
58
58
|
export { useStateRef } from './useStateRef.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
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
const isModule = (entity) => entity !== void 0 && typeof entity !== "function";
|
|
2
|
-
const assertModuleExportsAtLeastOneComponent = (module) => {
|
|
3
|
-
if (module && Object.values(module).every((item) => isModule(item))) {
|
|
4
|
-
throw Error("module file, no components");
|
|
5
|
-
}
|
|
6
|
-
};
|
|
7
2
|
|
|
8
|
-
export {
|
|
3
|
+
export { isModule };
|
|
9
4
|
//# sourceMappingURL=module-utils.js.map
|
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
|
|
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"],"names":[],"mappings":"AAIO,MAAM,WAAW,CAAC,MAAA,KACvB,MAAW,KAAA,KAAA,CAAA,IAAa,OAAO,MAAW,KAAA;;;;"}
|
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
|