@vuu-ui/vuu-utils 0.9.1 → 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/DataWindow.js.map +1 -1
- package/cjs/ShellContext.js.map +1 -1
- package/cjs/ThemeProvider.js.map +1 -1
- package/cjs/array-utils.js.map +1 -1
- package/cjs/box-utils.js.map +1 -1
- package/cjs/column-utils.js +81 -53
- package/cjs/column-utils.js.map +1 -1
- package/cjs/common-types.js.map +1 -1
- package/cjs/component-registry.js +6 -7
- package/cjs/component-registry.js.map +1 -1
- package/cjs/context-definitions/DataSourceContext.js.map +1 -1
- package/cjs/context-definitions/DataSourceProvider.js +5 -0
- 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 +9 -0
- package/cjs/data-utils.js.map +1 -1
- package/cjs/datasource/BaseDataSource.js +48 -10
- package/cjs/datasource/BaseDataSource.js.map +1 -1
- package/cjs/datasource/datasource-action-utils.js.map +1 -1
- package/cjs/datasource/datasource-filter-utils.js.map +1 -1
- package/cjs/datasource/datasource-utils.js.map +1 -1
- package/cjs/date/date-utils.js.map +1 -1
- package/cjs/date/dateTimePattern.js.map +1 -1
- package/cjs/date/formatter.js.map +1 -1
- package/cjs/date/types.js.map +1 -1
- package/cjs/debug-utils.js.map +1 -1
- package/cjs/event-emitter.js.map +1 -1
- package/cjs/feature-utils.js.map +1 -1
- package/cjs/filters/filter-utils.js.map +1 -1
- package/cjs/filters/filterAsQuery.js.map +1 -1
- package/cjs/form-utils.js +13 -11
- package/cjs/form-utils.js.map +1 -1
- package/cjs/formatting-utils.js.map +1 -1
- package/cjs/group-utils.js.map +1 -1
- package/cjs/html-utils.js.map +1 -1
- package/cjs/index.js +13 -0
- package/cjs/index.js.map +1 -1
- package/cjs/input-utils.js.map +1 -1
- package/cjs/invariant.js.map +1 -1
- package/cjs/itemToString.js.map +1 -1
- package/cjs/json-utils.js.map +1 -1
- package/cjs/keyboard-utils.js.map +1 -1
- package/cjs/keyset.js.map +1 -1
- package/cjs/list-utils.js.map +1 -1
- package/cjs/local-storage-utils.js.map +1 -1
- package/cjs/logging-utils.js.map +1 -1
- package/cjs/menu-utils.js.map +1 -1
- package/cjs/module-utils.js.map +1 -1
- package/cjs/nanoid/index.js.map +1 -1
- package/cjs/perf-utils.js.map +1 -1
- package/cjs/promise-utils.js +1 -1
- package/cjs/promise-utils.js.map +1 -1
- package/cjs/protocol-message-utils.js +2 -0
- package/cjs/protocol-message-utils.js.map +1 -1
- package/cjs/range-utils.js.map +1 -1
- package/cjs/react-utils.js.map +1 -1
- package/cjs/round-decimal.js.map +1 -1
- package/cjs/row-utils.js.map +1 -1
- package/cjs/selection-utils.js +2 -2
- package/cjs/selection-utils.js.map +1 -1
- package/cjs/shell-layout-types.js.map +1 -1
- package/cjs/sort-utils.js.map +1 -1
- package/cjs/table-schema-utils.js.map +1 -1
- package/cjs/text-utils.js.map +1 -1
- package/cjs/tree-utils.js +42 -3
- package/cjs/tree-utils.js.map +1 -1
- package/cjs/ts-utils.js +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.map +1 -1
- package/esm/column-utils.js +80 -54
- package/esm/column-utils.js.map +1 -1
- package/esm/common-types.js.map +1 -1
- package/esm/component-registry.js +7 -8
- package/esm/component-registry.js.map +1 -1
- package/esm/context-definitions/DataSourceContext.js.map +1 -1
- package/esm/context-definitions/DataSourceProvider.js +5 -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 +6 -1
- package/esm/data-utils.js.map +1 -1
- package/esm/datasource/BaseDataSource.js +48 -10
- package/esm/datasource/BaseDataSource.js.map +1 -1
- package/esm/datasource/datasource-action-utils.js.map +1 -1
- package/esm/datasource/datasource-filter-utils.js.map +1 -1
- package/esm/datasource/datasource-utils.js.map +1 -1
- package/esm/date/date-utils.js.map +1 -1
- package/esm/date/dateTimePattern.js.map +1 -1
- package/esm/date/formatter.js.map +1 -1
- package/esm/date/types.js.map +1 -1
- package/esm/debug-utils.js.map +1 -1
- package/esm/event-emitter.js.map +1 -1
- package/esm/feature-utils.js.map +1 -1
- package/esm/filters/filter-utils.js.map +1 -1
- package/esm/filters/filterAsQuery.js.map +1 -1
- package/esm/form-utils.js +14 -12
- package/esm/form-utils.js.map +1 -1
- package/esm/formatting-utils.js.map +1 -1
- package/esm/group-utils.js.map +1 -1
- package/esm/html-utils.js.map +1 -1
- package/esm/index.js +6 -6
- package/esm/input-utils.js.map +1 -1
- package/esm/invariant.js.map +1 -1
- package/esm/itemToString.js.map +1 -1
- package/esm/json-utils.js.map +1 -1
- package/esm/keyboard-utils.js.map +1 -1
- package/esm/keyset.js.map +1 -1
- package/esm/list-utils.js.map +1 -1
- package/esm/local-storage-utils.js.map +1 -1
- package/esm/logging-utils.js.map +1 -1
- package/esm/menu-utils.js.map +1 -1
- package/esm/module-utils.js.map +1 -1
- package/esm/nanoid/index.js.map +1 -1
- package/esm/perf-utils.js.map +1 -1
- package/esm/promise-utils.js +1 -1
- package/esm/promise-utils.js.map +1 -1
- package/esm/protocol-message-utils.js +2 -1
- package/esm/protocol-message-utils.js.map +1 -1
- package/esm/range-utils.js.map +1 -1
- package/esm/react-utils.js.map +1 -1
- package/esm/round-decimal.js.map +1 -1
- package/esm/row-utils.js.map +1 -1
- package/esm/selection-utils.js +2 -2
- package/esm/selection-utils.js.map +1 -1
- package/esm/shell-layout-types.js.map +1 -1
- package/esm/sort-utils.js.map +1 -1
- package/esm/table-schema-utils.js.map +1 -1
- package/esm/text-utils.js.map +1 -1
- package/esm/tree-utils.js +39 -4
- package/esm/tree-utils.js.map +1 -1
- package/esm/ts-utils.js +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 +6 -6
- package/types/ShellContext.d.ts +0 -1
- package/types/ThemeProvider.d.ts +1 -1
- package/types/column-utils.d.ts +22 -5
- package/types/context-definitions/DataSourceContext.d.ts +12 -4
- package/types/context-definitions/DataSourceProvider.d.ts +3 -2
- package/types/data-utils.d.ts +4 -0
- package/types/datasource/BaseDataSource.d.ts +9 -3
- package/types/date/types.d.ts +2 -2
- package/types/filters/filter-utils.d.ts +38 -38
- package/types/form-utils.d.ts +3 -3
- package/types/module-utils.d.ts +1 -2
- package/types/protocol-message-utils.d.ts +1 -0
- package/types/row-utils.d.ts +2 -1
- package/types/selection-utils.d.ts +1 -1
- package/types/tree-types.d.ts +3 -12
- package/types/tree-utils.d.ts +4 -0
- package/types/ts-utils.d.ts +1 -0
package/cjs/DataWindow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataWindow.js","sources":["../src/DataWindow.ts"],"sourcesContent":["import { WindowRange } from \"./range-utils\";\nimport { metadataKeys } from \"./column-utils\";\n\nexport type DataItem = string | number | boolean;\nexport type DataRow = [\n /** index */\n number,\n /** render index */\n number,\n /** isLeaf */\n boolean,\n /** isExpanded */\n boolean,\n /** depth */\n number,\n /** child count */\n number,\n /** key */\n string,\n /** selected */\n number,\n /** data values */\n ...DataItem[]\n];\nexport type RangeLike = { from: number; to: number };\n\nconst { KEY } = metadataKeys;\n\n// const log = (message: string) =>\n// console.log(`%c[DataWindow] ${message}`, \"color: purple;font-weight: bold;\");\nexport class DataWindow {\n private range: WindowRange;\n public data: DataRow[];\n public rowCount = 0;\n constructor({ from, to }: RangeLike) {\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(to - from);\n // window.dataWindow = this.data;\n // log(`constructor initial range ${from} - ${to}`);\n }\n\n setRowCount = (rowCount: number) => {\n // log(`rowCount => ${rowCount}`);\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n this.rowCount = rowCount;\n };\n\n // return true if existing row was updated\n add(data: DataRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n const isUpdate = this.data[internalIndex] !== undefined;\n this.data[internalIndex] = data;\n return isUpdate;\n } else {\n return false;\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n getByKey(key: string) {\n return this.data.find((row) => row[KEY] === key);\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index) && index <= this.rowCount;\n }\n\n setRange(from: number, to: number) {\n // log(`setRange ${from} ${to}`);\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(to - from);\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n hasData(from: number, to: number) {\n const offset = this.range.from;\n const start = from - offset;\n const end = Math.min(to - offset - 1, this.rowCount - 1);\n return this.data[start] !== undefined && this.data[end] !== undefined;\n }\n\n getData(from: number, to: number): any[] {\n const { from: clientFrom } = this.range;\n const startOffset = Math.max(0, from - clientFrom);\n const endOffset = Math.min(to - clientFrom, this.rowCount ?? to);\n return this.data.slice(startOffset, endOffset);\n }\n}\n"],"names":["metadataKeys","WindowRange"],"mappings":";;;;;;;;AA0BA,MAAM,EAAE,KAAQ,GAAAA,wBAAA
|
|
1
|
+
{"version":3,"file":"DataWindow.js","sources":["../src/DataWindow.ts"],"sourcesContent":["import { WindowRange } from \"./range-utils\";\nimport { metadataKeys } from \"./column-utils\";\n\nexport type DataItem = string | number | boolean;\nexport type DataRow = [\n /** index */\n number,\n /** render index */\n number,\n /** isLeaf */\n boolean,\n /** isExpanded */\n boolean,\n /** depth */\n number,\n /** child count */\n number,\n /** key */\n string,\n /** selected */\n number,\n /** data values */\n ...DataItem[]\n];\nexport type RangeLike = { from: number; to: number };\n\nconst { KEY } = metadataKeys;\n\n// const log = (message: string) =>\n// console.log(`%c[DataWindow] ${message}`, \"color: purple;font-weight: bold;\");\nexport class DataWindow {\n private range: WindowRange;\n public data: DataRow[];\n public rowCount = 0;\n constructor({ from, to }: RangeLike) {\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(to - from);\n // window.dataWindow = this.data;\n // log(`constructor initial range ${from} - ${to}`);\n }\n\n setRowCount = (rowCount: number) => {\n // log(`rowCount => ${rowCount}`);\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n this.rowCount = rowCount;\n };\n\n // return true if existing row was updated\n add(data: DataRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n const isUpdate = this.data[internalIndex] !== undefined;\n this.data[internalIndex] = data;\n return isUpdate;\n } else {\n return false;\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n getByKey(key: string) {\n return this.data.find((row) => row[KEY] === key);\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index) && index <= this.rowCount;\n }\n\n setRange(from: number, to: number) {\n // log(`setRange ${from} ${to}`);\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(to - from);\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n hasData(from: number, to: number) {\n const offset = this.range.from;\n const start = from - offset;\n const end = Math.min(to - offset - 1, this.rowCount - 1);\n return this.data[start] !== undefined && this.data[end] !== undefined;\n }\n\n getData(from: number, to: number): any[] {\n const { from: clientFrom } = this.range;\n const startOffset = Math.max(0, from - clientFrom);\n const endOffset = Math.min(to - clientFrom, this.rowCount ?? to);\n return this.data.slice(startOffset, endOffset);\n }\n}\n"],"names":["metadataKeys","WindowRange"],"mappings":"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"}
|
package/cjs/ShellContext.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShellContext.js","sources":["../src/ShellContext.ts"],"sourcesContent":["import type { RpcResponseHandler } from \"@vuu-ui/vuu-data-types\";\nimport type {\n DefaultColumnConfiguration,\n DefaultTableConfiguration,\n} from \"@vuu-ui/vuu-table-types\";\nimport { createContext, useContext } from \"react\";\nimport { LookupTableProvider } from \"./feature-utils\";\n\nexport interface ShellContextProps {\n getDefaultColumnConfig?: DefaultColumnConfiguration;\n getDefaultTableConfig?: DefaultTableConfiguration;\n getLookupValues?: LookupTableProvider;\n handleRpcResponse?: RpcResponseHandler;\n}\n\nconst defaultConfig = {};\n\nexport const ShellContext = createContext<ShellContextProps>(defaultConfig);\n\nexport const useShellContext = () => {\n return useContext(ShellContext);\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAeA,MAAM,gBAAgB,EAAC
|
|
1
|
+
{"version":3,"file":"ShellContext.js","sources":["../src/ShellContext.ts"],"sourcesContent":["import type { RpcResponseHandler } from \"@vuu-ui/vuu-data-types\";\nimport type {\n DefaultColumnConfiguration,\n DefaultTableConfiguration,\n} from \"@vuu-ui/vuu-table-types\";\nimport { createContext, useContext } from \"react\";\nimport { LookupTableProvider } from \"./feature-utils\";\n\nexport interface ShellContextProps {\n getDefaultColumnConfig?: DefaultColumnConfiguration;\n getDefaultTableConfig?: DefaultTableConfiguration;\n getLookupValues?: LookupTableProvider;\n handleRpcResponse?: RpcResponseHandler;\n}\n\nconst defaultConfig = {};\n\nexport const ShellContext = createContext<ShellContextProps>(defaultConfig);\n\nexport const useShellContext = () => {\n return useContext(ShellContext);\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAeA,MAAM,gBAAgB,EAAC;AAEV,MAAA,YAAA,GAAeA,oBAAiC,aAAa;AAEnE,MAAM,kBAAkB,MAAM;AACnC,EAAA,OAAOC,iBAAW,YAAY,CAAA;AAChC;;;;;"}
|
package/cjs/ThemeProvider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeProvider.js","sources":["../src/ThemeProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n HTMLAttributes,\n ReactNode,\n isValidElement,\n cloneElement,\n useContext,\n} from \"react\";\nimport cx from \"clsx\";\n\nexport const DEFAULT_DENSITY: Density = \"medium\";\nexport const DEFAULT_THEME = \"salt-theme\";\nexport const DEFAULT_THEME_MODE: ThemeMode = \"light\";\n\nexport type Density = \"high\" | \"medium\" | \"low\" | \"touch\";\nexport type ThemeMode = \"light\" | \"dark\";\nexport type TargetElement = \"root\" | \"scope\" | \"child\";\n\nexport interface ThemeContextProps {\n density: Density;\n theme: string;\n themeMode: ThemeMode;\n}\n\nexport const ThemeContext = createContext<ThemeContextProps>({\n density: \"high\",\n theme: \"vuu\",\n themeMode: \"light\",\n});\n\nexport type ThemeClasses = [string, string, ThemeMode];\n\nconst DEFAULT_THEME_ATTRIBUTES: ThemeClasses = [\n \"vuu\",\n \"salt-density-high\",\n \"light\" as ThemeMode,\n];\n\nexport type ThemeAttributes = {\n themeClass: string;\n densityClass: string;\n dataMode: ThemeMode;\n};\n\nexport const useThemeAttributes = (\n themeAttributes?: ThemeAttributes\n): [string, string, ThemeMode] => {\n const context = useContext(ThemeContext);\n if (themeAttributes) {\n return [\n themeAttributes.themeClass,\n themeAttributes.densityClass,\n themeAttributes.dataMode,\n ];\n } else if (context) {\n return [\n `${context.theme}-theme`,\n `salt-density-${context.density}`,\n context.themeMode,\n ];\n }\n return DEFAULT_THEME_ATTRIBUTES;\n};\n\nconst createThemedChildren = (\n children: ReactNode,\n theme: string,\n themeMode: ThemeMode,\n density: Density\n) => {\n if (isValidElement<HTMLAttributes<HTMLElement>>(children)) {\n return cloneElement(children, {\n className: cx(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n children.props?.className,\n `${theme}-theme`,\n `salt-density-${density}`\n ),\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n \"data-mode\": themeMode,\n });\n } else {\n console.warn(\n `\\nThemeProvider can only apply CSS classes for theming to a single nested child element of the ThemeProvider.\n Wrap elements with a single container`\n );\n return children;\n }\n};\n\ninterface ThemeProviderProps {\n applyThemeClasses?: boolean;\n children: ReactNode;\n density?: Density;\n theme?: string;\n themeMode?: ThemeMode;\n}\n\nexport const ThemeProvider = ({\n applyThemeClasses = false,\n children,\n theme: themeProp,\n themeMode: themeModeProp,\n density: densityProp,\n}: ThemeProviderProps) => {\n const {\n density: inheritedDensity,\n themeMode: inheritedThemeMode,\n theme: inheritedTheme,\n } = useContext(ThemeContext);\n const density = densityProp ?? inheritedDensity ?? DEFAULT_DENSITY;\n const themeMode = themeModeProp ?? inheritedThemeMode ?? DEFAULT_THEME_MODE;\n const theme = themeProp ?? inheritedTheme ?? DEFAULT_THEME;\n const themedChildren = applyThemeClasses\n ? createThemedChildren(children, theme, themeMode, density)\n : children;\n\n return (\n <ThemeContext.Provider value={{ themeMode, density, theme }}>\n {themedChildren}\n </ThemeContext.Provider>\n );\n};\n\nThemeProvider.displayName = \"ThemeProvider\";\n"],"names":["createContext","useContext","isValidElement","cloneElement","jsx"],"mappings":";;;;;;AAUO,MAAM,eAA2B,GAAA
|
|
1
|
+
{"version":3,"file":"ThemeProvider.js","sources":["../src/ThemeProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n HTMLAttributes,\n ReactNode,\n isValidElement,\n cloneElement,\n useContext,\n} from \"react\";\nimport cx from \"clsx\";\n\nexport const DEFAULT_DENSITY: Density = \"medium\";\nexport const DEFAULT_THEME = \"salt-theme\";\nexport const DEFAULT_THEME_MODE: ThemeMode = \"light\";\n\nexport type Density = \"high\" | \"medium\" | \"low\" | \"touch\";\nexport type ThemeMode = \"light\" | \"dark\";\nexport type TargetElement = \"root\" | \"scope\" | \"child\";\n\nexport interface ThemeContextProps {\n density: Density;\n theme: string;\n themeMode: ThemeMode;\n}\n\nexport const ThemeContext = createContext<ThemeContextProps>({\n density: \"high\",\n theme: \"vuu\",\n themeMode: \"light\",\n});\n\nexport type ThemeClasses = [string, string, ThemeMode];\n\nconst DEFAULT_THEME_ATTRIBUTES: ThemeClasses = [\n \"vuu\",\n \"salt-density-high\",\n \"light\" as ThemeMode,\n];\n\nexport type ThemeAttributes = {\n themeClass: string;\n densityClass: string;\n dataMode: ThemeMode;\n};\n\nexport const useThemeAttributes = (\n themeAttributes?: ThemeAttributes\n): [string, string, ThemeMode] => {\n const context = useContext(ThemeContext);\n if (themeAttributes) {\n return [\n themeAttributes.themeClass,\n themeAttributes.densityClass,\n themeAttributes.dataMode,\n ];\n } else if (context) {\n return [\n `${context.theme}-theme`,\n `salt-density-${context.density}`,\n context.themeMode,\n ];\n }\n return DEFAULT_THEME_ATTRIBUTES;\n};\n\nconst createThemedChildren = (\n children: ReactNode,\n theme: string,\n themeMode: ThemeMode,\n density: Density\n) => {\n if (isValidElement<HTMLAttributes<HTMLElement>>(children)) {\n return cloneElement(children, {\n className: cx(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n children.props?.className,\n `${theme}-theme`,\n `salt-density-${density}`\n ),\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n \"data-mode\": themeMode,\n });\n } else {\n console.warn(\n `\\nThemeProvider can only apply CSS classes for theming to a single nested child element of the ThemeProvider.\n Wrap elements with a single container`\n );\n return children;\n }\n};\n\ninterface ThemeProviderProps {\n applyThemeClasses?: boolean;\n children: ReactNode;\n density?: Density;\n theme?: string;\n themeMode?: ThemeMode;\n}\n\nexport const ThemeProvider = ({\n applyThemeClasses = false,\n children,\n theme: themeProp,\n themeMode: themeModeProp,\n density: densityProp,\n}: ThemeProviderProps) => {\n const {\n density: inheritedDensity,\n themeMode: inheritedThemeMode,\n theme: inheritedTheme,\n } = useContext(ThemeContext);\n const density = densityProp ?? inheritedDensity ?? DEFAULT_DENSITY;\n const themeMode = themeModeProp ?? inheritedThemeMode ?? DEFAULT_THEME_MODE;\n const theme = themeProp ?? inheritedTheme ?? DEFAULT_THEME;\n const themedChildren = applyThemeClasses\n ? createThemedChildren(children, theme, themeMode, density)\n : children;\n\n return (\n <ThemeContext.Provider value={{ themeMode, density, theme }}>\n {themedChildren}\n </ThemeContext.Provider>\n );\n};\n\nThemeProvider.displayName = \"ThemeProvider\";\n"],"names":["createContext","useContext","isValidElement","cloneElement","jsx"],"mappings":";;;;;;AAUO,MAAM,eAA2B,GAAA;AACjC,MAAM,aAAgB,GAAA;AACtB,MAAM,kBAAgC,GAAA;AAYtC,MAAM,eAAeA,mBAAiC,CAAA;AAAA,EAC3D,OAAS,EAAA,MAAA;AAAA,EACT,KAAO,EAAA,KAAA;AAAA,EACP,SAAW,EAAA;AACb,CAAC;AAID,MAAM,wBAAyC,GAAA;AAAA,EAC7C,KAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA;AAQa,MAAA,kBAAA,GAAqB,CAChC,eACgC,KAAA;AAChC,EAAM,MAAA,OAAA,GAAUC,iBAAW,YAAY,CAAA;AACvC,EAAA,IAAI,eAAiB,EAAA;AACnB,IAAO,OAAA;AAAA,MACL,eAAgB,CAAA,UAAA;AAAA,MAChB,eAAgB,CAAA,YAAA;AAAA,MAChB,eAAgB,CAAA;AAAA,KAClB;AAAA,aACS,OAAS,EAAA;AAClB,IAAO,OAAA;AAAA,MACL,CAAA,EAAG,QAAQ,KAAK,CAAA,MAAA,CAAA;AAAA,MAChB,CAAA,aAAA,EAAgB,QAAQ,OAAO,CAAA,CAAA;AAAA,MAC/B,OAAQ,CAAA;AAAA,KACV;AAAA;AAEF,EAAO,OAAA,wBAAA;AACT;AAEA,MAAM,oBAAuB,GAAA,CAC3B,QACA,EAAA,KAAA,EACA,WACA,OACG,KAAA;AACH,EAAI,IAAAC,oBAAA,CAA4C,QAAQ,CAAG,EAAA;AACzD,IAAA,OAAOC,mBAAa,QAAU,EAAA;AAAA,MAC5B,SAAW,EAAA,EAAA;AAAA;AAAA,QAET,SAAS,KAAO,EAAA,SAAA;AAAA,QAChB,GAAG,KAAK,CAAA,MAAA,CAAA;AAAA,QACR,gBAAgB,OAAO,CAAA;AAAA,OACzB;AAAA;AAAA;AAAA,MAGA,WAAa,EAAA;AAAA,KACd,CAAA;AAAA,GACI,MAAA;AACL,IAAQ,OAAA,CAAA,IAAA;AAAA,MACN;AAAA;AAAA,iDAAA;AAAA,KAEF;AACA,IAAO,OAAA,QAAA;AAAA;AAEX,CAAA;AAUO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,iBAAoB,GAAA,KAAA;AAAA,EACpB,QAAA;AAAA,EACA,KAAO,EAAA,SAAA;AAAA,EACP,SAAW,EAAA,aAAA;AAAA,EACX,OAAS,EAAA;AACX,CAA0B,KAAA;AACxB,EAAM,MAAA;AAAA,IACJ,OAAS,EAAA,gBAAA;AAAA,IACT,SAAW,EAAA,kBAAA;AAAA,IACX,KAAO,EAAA;AAAA,GACT,GAAIF,iBAAW,YAAY,CAAA;AAC3B,EAAM,MAAA,OAAA,GAAU,eAAe,gBAAoB,IAAA,eAAA;AACnD,EAAM,MAAA,SAAA,GAAY,iBAAiB,kBAAsB,IAAA,kBAAA;AACzD,EAAM,MAAA,KAAA,GAAQ,aAAa,cAAkB,IAAA,aAAA;AAC7C,EAAA,MAAM,iBAAiB,iBACnB,GAAA,oBAAA,CAAqB,UAAU,KAAO,EAAA,SAAA,EAAW,OAAO,CACxD,GAAA,QAAA;AAEJ,EACE,uBAAAG,cAAA,CAAC,YAAa,CAAA,QAAA,EAAb,EAAsB,KAAA,EAAO,EAAE,SAAW,EAAA,OAAA,EAAS,KAAM,EAAA,EACvD,QACH,EAAA,cAAA,EAAA,CAAA;AAEJ;AAEA,aAAA,CAAc,WAAc,GAAA,eAAA;;;;;;;;;"}
|
package/cjs/array-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-utils.js","sources":["../src/array-utils.ts"],"sourcesContent":["export type PartitionTest<T> = (value: T, index: number) => boolean;\n\nexport function partition<T>(\n array: T[],\n test: PartitionTest<T>,\n pass: T[] = [],\n fail: T[] = []\n): [T[], T[]] {\n for (let i = 0, len = array.length; i < len; i++) {\n (test(array[i], i) ? pass : fail).push(array[i]);\n }\n return [pass, fail];\n}\n\n// Note order of items can be different between arrays\n// If an identityProperty is not defined, item identity is used\nexport function itemsChanged<T = unknown>(\n currentItems: T[],\n newItems: T[],\n identityProperty?: string\n) {\n if (currentItems.length !== newItems.length) {\n return true;\n }\n if (identityProperty === undefined) {\n return !currentItems.every((item) => newItems.includes(item));\n } else {\n return currentItems.some(\n (currentItem) =>\n newItems.findIndex(\n (newItem) =>\n (newItem as { [key: string]: unknown })[identityProperty] ===\n (currentItem as { [key: string]: unknown })[identityProperty]\n ) === -1\n );\n }\n}\n\nexport function itemsOrOrderChanged<T = unknown>(\n currentItems: T[],\n newItems: T[],\n identityProperty?: string\n) {\n if (currentItems.length !== newItems.length) {\n return true;\n }\n if (identityProperty === undefined) {\n return currentItems.some((item, index) => newItems[index] !== item);\n } else {\n return currentItems.some(\n (currentItem, index) =>\n (newItems[index] as { [key: string]: unknown })[identityProperty] !==\n (currentItem as { [key: string]: unknown })[identityProperty]\n );\n }\n}\n\nexport const moveItemDeprecated = <T = unknown>(\n items: T[],\n item: T,\n moveTo: number\n): T[] => {\n const fromIndex = items.indexOf(item);\n if (fromIndex === moveTo) {\n return items;\n }\n const newItems = items.slice();\n if (fromIndex === -1) {\n throw Error(\"moveItem, item to be moved not found\");\n }\n newItems.splice(fromIndex, 1);\n if (moveTo === -1) {\n newItems.push(item);\n } else {\n const offset = moveTo > fromIndex ? 0 : 0;\n newItems.splice(moveTo + offset, 0, item);\n }\n return newItems;\n};\n\nexport const moveItem = <T = unknown>(\n items: T[],\n fromIndex: number,\n toIndex: number\n): T[] => {\n if (fromIndex === toIndex) {\n return items;\n } else {\n const newItems = items.slice();\n const [item] = newItems.splice(fromIndex, 1);\n if (toIndex === -1) {\n return newItems.concat(item);\n } else {\n const offset = toIndex > fromIndex ? 0 : 0;\n newItems.splice(toIndex + offset, 0, item);\n return newItems;\n }\n }\n};\n\nexport const getAddedItems = <T>(values: undefined | T[], newValues: T[]) => {\n const isNew = (v: T) => !values?.includes(v);\n if (values === undefined) {\n return newValues;\n } else if (newValues.some(isNew)) {\n return newValues.filter(isNew);\n } else {\n return [] as T[];\n }\n};\n\nexport const getMissingItems = <T, I>(\n sourceItems: T[],\n items: I[],\n identity: (s: T) => I\n) =>\n items.filter((i) => sourceItems.findIndex((s) => identity(s) === i) === -1);\n"],"names":[],"mappings":";;AAEgB,SAAA,SAAA,CACd,OACA,IACA,EAAA,IAAA,GAAY,EACZ,EAAA,IAAA,GAAY,EACA,EAAA;AACZ,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,GAAA,GAAM,MAAM,MAAQ,EAAA,CAAA,GAAI,KAAK,CAAK,EAAA,EAAA;AAChD,IAAC,CAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAG,EAAA,CAAC,CAAI,GAAA,IAAA,GAAO,IAAM,EAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAC,CAAA
|
|
1
|
+
{"version":3,"file":"array-utils.js","sources":["../src/array-utils.ts"],"sourcesContent":["export type PartitionTest<T> = (value: T, index: number) => boolean;\n\nexport function partition<T>(\n array: T[],\n test: PartitionTest<T>,\n pass: T[] = [],\n fail: T[] = []\n): [T[], T[]] {\n for (let i = 0, len = array.length; i < len; i++) {\n (test(array[i], i) ? pass : fail).push(array[i]);\n }\n return [pass, fail];\n}\n\n// Note order of items can be different between arrays\n// If an identityProperty is not defined, item identity is used\nexport function itemsChanged<T = unknown>(\n currentItems: T[],\n newItems: T[],\n identityProperty?: string\n) {\n if (currentItems.length !== newItems.length) {\n return true;\n }\n if (identityProperty === undefined) {\n return !currentItems.every((item) => newItems.includes(item));\n } else {\n return currentItems.some(\n (currentItem) =>\n newItems.findIndex(\n (newItem) =>\n (newItem as { [key: string]: unknown })[identityProperty] ===\n (currentItem as { [key: string]: unknown })[identityProperty]\n ) === -1\n );\n }\n}\n\nexport function itemsOrOrderChanged<T = unknown>(\n currentItems: T[],\n newItems: T[],\n identityProperty?: string\n) {\n if (currentItems.length !== newItems.length) {\n return true;\n }\n if (identityProperty === undefined) {\n return currentItems.some((item, index) => newItems[index] !== item);\n } else {\n return currentItems.some(\n (currentItem, index) =>\n (newItems[index] as { [key: string]: unknown })[identityProperty] !==\n (currentItem as { [key: string]: unknown })[identityProperty]\n );\n }\n}\n\nexport const moveItemDeprecated = <T = unknown>(\n items: T[],\n item: T,\n moveTo: number\n): T[] => {\n const fromIndex = items.indexOf(item);\n if (fromIndex === moveTo) {\n return items;\n }\n const newItems = items.slice();\n if (fromIndex === -1) {\n throw Error(\"moveItem, item to be moved not found\");\n }\n newItems.splice(fromIndex, 1);\n if (moveTo === -1) {\n newItems.push(item);\n } else {\n const offset = moveTo > fromIndex ? 0 : 0;\n newItems.splice(moveTo + offset, 0, item);\n }\n return newItems;\n};\n\nexport const moveItem = <T = unknown>(\n items: T[],\n fromIndex: number,\n toIndex: number\n): T[] => {\n if (fromIndex === toIndex) {\n return items;\n } else {\n const newItems = items.slice();\n const [item] = newItems.splice(fromIndex, 1);\n if (toIndex === -1) {\n return newItems.concat(item);\n } else {\n const offset = toIndex > fromIndex ? 0 : 0;\n newItems.splice(toIndex + offset, 0, item);\n return newItems;\n }\n }\n};\n\nexport const getAddedItems = <T>(values: undefined | T[], newValues: T[]) => {\n const isNew = (v: T) => !values?.includes(v);\n if (values === undefined) {\n return newValues;\n } else if (newValues.some(isNew)) {\n return newValues.filter(isNew);\n } else {\n return [] as T[];\n }\n};\n\nexport const getMissingItems = <T, I>(\n sourceItems: T[],\n items: I[],\n identity: (s: T) => I\n) =>\n items.filter((i) => sourceItems.findIndex((s) => identity(s) === i) === -1);\n"],"names":[],"mappings":";;AAEgB,SAAA,SAAA,CACd,OACA,IACA,EAAA,IAAA,GAAY,EACZ,EAAA,IAAA,GAAY,EACA,EAAA;AACZ,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,GAAA,GAAM,MAAM,MAAQ,EAAA,CAAA,GAAI,KAAK,CAAK,EAAA,EAAA;AAChD,IAAC,CAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAG,EAAA,CAAC,CAAI,GAAA,IAAA,GAAO,IAAM,EAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAC,CAAA;AAAA;AAEjD,EAAO,OAAA,CAAC,MAAM,IAAI,CAAA;AACpB;AAIgB,SAAA,YAAA,CACd,YACA,EAAA,QAAA,EACA,gBACA,EAAA;AACA,EAAI,IAAA,YAAA,CAAa,MAAW,KAAA,QAAA,CAAS,MAAQ,EAAA;AAC3C,IAAO,OAAA,IAAA;AAAA;AAET,EAAA,IAAI,qBAAqB,KAAW,CAAA,EAAA;AAClC,IAAO,OAAA,CAAC,aAAa,KAAM,CAAA,CAAC,SAAS,QAAS,CAAA,QAAA,CAAS,IAAI,CAAC,CAAA;AAAA,GACvD,MAAA;AACL,IAAA,OAAO,YAAa,CAAA,IAAA;AAAA,MAClB,CAAC,gBACC,QAAS,CAAA,SAAA;AAAA,QACP,CAAC,OACE,KAAA,OAAA,CAAuC,gBAAgB,CAAA,KACvD,YAA2C,gBAAgB;AAAA,OAC1D,KAAA,CAAA;AAAA,KACV;AAAA;AAEJ;AAEgB,SAAA,mBAAA,CACd,YACA,EAAA,QAAA,EACA,gBACA,EAAA;AACA,EAAI,IAAA,YAAA,CAAa,MAAW,KAAA,QAAA,CAAS,MAAQ,EAAA;AAC3C,IAAO,OAAA,IAAA;AAAA;AAET,EAAA,IAAI,qBAAqB,KAAW,CAAA,EAAA;AAClC,IAAO,OAAA,YAAA,CAAa,KAAK,CAAC,IAAA,EAAM,UAAU,QAAS,CAAA,KAAK,MAAM,IAAI,CAAA;AAAA,GAC7D,MAAA;AACL,IAAA,OAAO,YAAa,CAAA,IAAA;AAAA,MAClB,CAAC,aAAa,KACX,KAAA,QAAA,CAAS,KAAK,CAAiC,CAAA,gBAAgB,CAC/D,KAAA,WAAA,CAA2C,gBAAgB;AAAA,KAChE;AAAA;AAEJ;AAEO,MAAM,kBAAqB,GAAA,CAChC,KACA,EAAA,IAAA,EACA,MACQ,KAAA;AACR,EAAM,MAAA,SAAA,GAAY,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAA;AACpC,EAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,IAAO,OAAA,KAAA;AAAA;AAET,EAAM,MAAA,QAAA,GAAW,MAAM,KAAM,EAAA;AAC7B,EAAA,IAAI,cAAc,CAAI,CAAA,EAAA;AACpB,IAAA,MAAM,MAAM,sCAAsC,CAAA;AAAA;AAEpD,EAAS,QAAA,CAAA,MAAA,CAAO,WAAW,CAAC,CAAA;AAC5B,EAAA,IAAI,WAAW,CAAI,CAAA,EAAA;AACjB,IAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,GACb,MAAA;AACL,IAAM,MAAA,MAAA,GAAS,MAAS,GAAA,SAAA,GAAY,CAAI,GAAA,CAAA;AACxC,IAAA,QAAA,CAAS,MAAO,CAAA,MAAA,GAAS,MAAQ,EAAA,CAAA,EAAG,IAAI,CAAA;AAAA;AAE1C,EAAO,OAAA,QAAA;AACT;AAEO,MAAM,QAAW,GAAA,CACtB,KACA,EAAA,SAAA,EACA,OACQ,KAAA;AACR,EAAA,IAAI,cAAc,OAAS,EAAA;AACzB,IAAO,OAAA,KAAA;AAAA,GACF,MAAA;AACL,IAAM,MAAA,QAAA,GAAW,MAAM,KAAM,EAAA;AAC7B,IAAA,MAAM,CAAC,IAAI,CAAA,GAAI,QAAS,CAAA,MAAA,CAAO,WAAW,CAAC,CAAA;AAC3C,IAAA,IAAI,YAAY,CAAI,CAAA,EAAA;AAClB,MAAO,OAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,KACtB,MAAA;AACL,MAAM,MAAA,MAAA,GAAS,OAAU,GAAA,SAAA,GAAY,CAAI,GAAA,CAAA;AACzC,MAAA,QAAA,CAAS,MAAO,CAAA,OAAA,GAAU,MAAQ,EAAA,CAAA,EAAG,IAAI,CAAA;AACzC,MAAO,OAAA,QAAA;AAAA;AACT;AAEJ;AAEa,MAAA,aAAA,GAAgB,CAAI,MAAA,EAAyB,SAAmB,KAAA;AAC3E,EAAA,MAAM,QAAQ,CAAC,CAAA,KAAS,CAAC,MAAA,EAAQ,SAAS,CAAC,CAAA;AAC3C,EAAA,IAAI,WAAW,KAAW,CAAA,EAAA;AACxB,IAAO,OAAA,SAAA;AAAA,GACE,MAAA,IAAA,SAAA,CAAU,IAAK,CAAA,KAAK,CAAG,EAAA;AAChC,IAAO,OAAA,SAAA,CAAU,OAAO,KAAK,CAAA;AAAA,GACxB,MAAA;AACL,IAAA,OAAO,EAAC;AAAA;AAEZ;AAEO,MAAM,kBAAkB,CAC7B,WAAA,EACA,OACA,QAEA,KAAA,KAAA,CAAM,OAAO,CAAC,CAAA,KAAM,WAAY,CAAA,SAAA,CAAU,CAAC,CAAM,KAAA,QAAA,CAAS,CAAC,CAAM,KAAA,CAAC,MAAM,CAAE,CAAA;;;;;;;;;;"}
|
package/cjs/box-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"box-utils.js","sources":["../src/box-utils.ts"],"sourcesContent":["export interface rect {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\nexport type rectTuple = [number, number, number, number];\n\nexport type dimension = \"width\" | \"height\";\n\nexport function boxContainsPoint(rect: rect, x: number, y: number) {\n if (rect) {\n return x >= rect.left && x < rect.right && y >= rect.top && y < rect.bottom;\n }\n}\n"],"names":[],"mappings":";;AAUgB,SAAA,gBAAA,CAAiB,IAAY,EAAA,CAAA,EAAW,CAAW,EAAA;AACjE,EAAA,IAAI,IAAM,EAAA;AACR,IAAO,OAAA,CAAA,IAAK,IAAK,CAAA,IAAA,IAAQ,CAAI,GAAA,IAAA,CAAK,SAAS,CAAK,IAAA,IAAA,CAAK,GAAO,IAAA,CAAA,GAAI,IAAK,CAAA,MAAA
|
|
1
|
+
{"version":3,"file":"box-utils.js","sources":["../src/box-utils.ts"],"sourcesContent":["export interface rect {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\nexport type rectTuple = [number, number, number, number];\n\nexport type dimension = \"width\" | \"height\";\n\nexport function boxContainsPoint(rect: rect, x: number, y: number) {\n if (rect) {\n return x >= rect.left && x < rect.right && y >= rect.top && y < rect.bottom;\n }\n}\n"],"names":[],"mappings":";;AAUgB,SAAA,gBAAA,CAAiB,IAAY,EAAA,CAAA,EAAW,CAAW,EAAA;AACjE,EAAA,IAAI,IAAM,EAAA;AACR,IAAO,OAAA,CAAA,IAAK,IAAK,CAAA,IAAA,IAAQ,CAAI,GAAA,IAAA,CAAK,SAAS,CAAK,IAAA,IAAA,CAAK,GAAO,IAAA,CAAA,GAAI,IAAK,CAAA,MAAA;AAAA;AAEzE;;;;"}
|
package/cjs/column-utils.js
CHANGED
|
@@ -93,6 +93,7 @@ const toColumnDescriptor = (name) => ({
|
|
|
93
93
|
const isTypeDescriptor = (type) => typeof type !== "undefined" && typeof type !== "string";
|
|
94
94
|
const EMPTY_COLUMN_MAP = {};
|
|
95
95
|
const isColumnTypeRenderer = (renderer) => typeof renderer?.name !== "undefined";
|
|
96
|
+
const hasCustomRenderer = (type) => isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer);
|
|
96
97
|
const isLookupRenderer = (renderer) => typeof renderer?.name !== "undefined" && "lookup" in renderer;
|
|
97
98
|
const isValueListRenderer = (renderer) => typeof renderer?.name !== "undefined" && Array.isArray(renderer.values);
|
|
98
99
|
const hasValidationRules = (type) => isTypeDescriptor(type) && Array.isArray(type.rules) && type.rules.length > 0;
|
|
@@ -164,7 +165,12 @@ const flattenColumnGroup = (columns) => {
|
|
|
164
165
|
return columns;
|
|
165
166
|
}
|
|
166
167
|
};
|
|
167
|
-
function extractGroupColumn(
|
|
168
|
+
function extractGroupColumn({
|
|
169
|
+
availableWidth,
|
|
170
|
+
columns,
|
|
171
|
+
groupBy,
|
|
172
|
+
confirmed = true
|
|
173
|
+
}) {
|
|
168
174
|
if (groupBy && groupBy.length > 0) {
|
|
169
175
|
const flattenedColumns = flattenColumnGroup(columns);
|
|
170
176
|
const [groupedColumns, rest] = flattenedColumns.reduce(
|
|
@@ -189,6 +195,7 @@ function extractGroupColumn(columns, groupBy, confirmed = true) {
|
|
|
189
195
|
)} `
|
|
190
196
|
);
|
|
191
197
|
}
|
|
198
|
+
const groupOnly = rest.length === 0;
|
|
192
199
|
const groupCount = groupBy.length;
|
|
193
200
|
const groupCols = groupBy.map((name, idx) => {
|
|
194
201
|
const column = groupedColumns.find(
|
|
@@ -199,20 +206,43 @@ function extractGroupColumn(columns, groupBy, confirmed = true) {
|
|
|
199
206
|
groupLevel: groupCount - idx
|
|
200
207
|
};
|
|
201
208
|
});
|
|
209
|
+
const width = groupOnly ? availableWidth : Math.min(
|
|
210
|
+
availableWidth,
|
|
211
|
+
groupCols.map((c) => c.width).reduce((a, b) => a + b) + 100
|
|
212
|
+
);
|
|
202
213
|
const groupCol = {
|
|
214
|
+
ariaColIndex: 1,
|
|
203
215
|
columns: groupCols,
|
|
204
216
|
heading: ["group-col"],
|
|
205
|
-
index: 1,
|
|
206
217
|
isGroup: true,
|
|
207
218
|
groupConfirmed: confirmed,
|
|
208
219
|
name: "group-col",
|
|
209
|
-
width
|
|
220
|
+
width
|
|
210
221
|
};
|
|
211
|
-
|
|
222
|
+
const withAdjustedAriaIndex = [];
|
|
223
|
+
let colIndex = 2;
|
|
224
|
+
for (const column of rest) {
|
|
225
|
+
withAdjustedAriaIndex.push({
|
|
226
|
+
...column,
|
|
227
|
+
ariaColIndex: column.hidden ? -1 : colIndex
|
|
228
|
+
});
|
|
229
|
+
if (!column.hidden) {
|
|
230
|
+
colIndex += 1;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return [groupCol, withAdjustedAriaIndex];
|
|
212
234
|
}
|
|
213
235
|
return [null, flattenColumnGroup(columns)];
|
|
214
236
|
}
|
|
215
237
|
const isGroupColumn = (column) => column.isGroup === true;
|
|
238
|
+
const checkConfirmationPending = (previousConfig) => {
|
|
239
|
+
if (previousConfig) {
|
|
240
|
+
const [column] = previousConfig.columns;
|
|
241
|
+
if (isGroupColumn(column)) {
|
|
242
|
+
return column.groupConfirmed;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
};
|
|
216
246
|
const isJsonAttribute = (value) => typeof value === "string" && (value.endsWith("{") || value.endsWith("["));
|
|
217
247
|
const isJsonGroup = (column, row, columnMap) => column.type?.name === "json" && isJsonAttribute(row[columnMap[column.name]]);
|
|
218
248
|
const isJsonColumn = (column) => column.type?.name === "json";
|
|
@@ -328,20 +358,16 @@ const getColumnStyle = ({
|
|
|
328
358
|
const setAggregations = (aggregations, column, aggType) => {
|
|
329
359
|
return aggregations.filter((agg) => agg.column !== column.name).concat({ column: column.name, aggType });
|
|
330
360
|
};
|
|
331
|
-
const applyGroupByToColumns = (
|
|
332
|
-
if (groupBy.length) {
|
|
333
|
-
const [groupColumn, nonGroupedColumns] = extractGroupColumn(
|
|
334
|
-
columns,
|
|
335
|
-
groupBy,
|
|
336
|
-
confirmed
|
|
337
|
-
);
|
|
361
|
+
const applyGroupByToColumns = (props) => {
|
|
362
|
+
if (props.groupBy.length) {
|
|
363
|
+
const [groupColumn, nonGroupedColumns] = extractGroupColumn(props);
|
|
338
364
|
if (groupColumn) {
|
|
339
365
|
return [groupColumn].concat(nonGroupedColumns);
|
|
340
366
|
}
|
|
341
|
-
} else if (columns[0]?.isGroup) {
|
|
342
|
-
return flattenColumnGroup(columns);
|
|
367
|
+
} else if (props.columns[0]?.isGroup) {
|
|
368
|
+
return flattenColumnGroup(props.columns);
|
|
343
369
|
}
|
|
344
|
-
return columns;
|
|
370
|
+
return props.columns;
|
|
345
371
|
};
|
|
346
372
|
const applySortToColumns = (columns, sort) => columns.map((column) => {
|
|
347
373
|
const sorted = getSortType(column, sort);
|
|
@@ -529,7 +555,7 @@ const getTypeFormattingFromColumn = (column) => {
|
|
|
529
555
|
return NO_TYPE_SETTINGS;
|
|
530
556
|
}
|
|
531
557
|
};
|
|
532
|
-
const subscribedOnly = (columnNames) => (column) => columnNames?.includes(column.name);
|
|
558
|
+
const subscribedOnly = (columnNames) => (column) => column.source === "client" || columnNames?.includes(column.name);
|
|
533
559
|
const addColumnToSubscribedColumns = (subscribedColumns, availableColumns, columnName) => {
|
|
534
560
|
const byColName = (n = columnName) => (column) => column.name === n;
|
|
535
561
|
if (subscribedColumns.findIndex(byColName()) !== -1) {
|
|
@@ -672,8 +698,7 @@ function applyWidthToColumns(columns, {
|
|
|
672
698
|
availableWidth,
|
|
673
699
|
totalWidth,
|
|
674
700
|
defaultMaxWidth,
|
|
675
|
-
defaultWidth
|
|
676
|
-
flexCount
|
|
701
|
+
defaultWidth
|
|
677
702
|
);
|
|
678
703
|
}
|
|
679
704
|
}
|
|
@@ -731,45 +756,46 @@ const shrinkColumnsToFitAvailableSpace = (columns, availableWidth, totalWidth, d
|
|
|
731
756
|
return newColumns;
|
|
732
757
|
}
|
|
733
758
|
};
|
|
734
|
-
const
|
|
759
|
+
const hasFlex = ({ flex }) => typeof flex === "number";
|
|
760
|
+
const stretchColumnsToFillAvailableSpace = (columns, availableWidth, totalWidth, defaultMaxWidth, defaultWidth) => {
|
|
735
761
|
let freeSpaceToBeFilled = availableWidth - totalWidth;
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
const columnsNotYetAtMaxWidth = newColumns.filter(
|
|
757
|
-
(col) => col.canStretch
|
|
758
|
-
).length;
|
|
759
|
-
const finalAdjustmentPerColumn = Math.min(
|
|
760
|
-
1,
|
|
761
|
-
Math.ceil(freeSpaceToBeFilled / columnsNotYetAtMaxWidth)
|
|
762
|
-
);
|
|
763
|
-
return newColumns.map(
|
|
764
|
-
({ canStretch, ...column }) => {
|
|
765
|
-
if (canStretch && freeSpaceToBeFilled) {
|
|
766
|
-
freeSpaceToBeFilled -= finalAdjustmentPerColumn;
|
|
767
|
-
return { ...column, width: column.width + finalAdjustmentPerColumn };
|
|
768
|
-
} else {
|
|
762
|
+
let adjustedColumns = columns;
|
|
763
|
+
const canGrow = ({
|
|
764
|
+
width = defaultWidth,
|
|
765
|
+
maxWidth = defaultMaxWidth
|
|
766
|
+
}) => width < maxWidth;
|
|
767
|
+
while (freeSpaceToBeFilled > 0) {
|
|
768
|
+
const flexCols = adjustedColumns.filter(
|
|
769
|
+
(col) => hasFlex(col) && canGrow(col)
|
|
770
|
+
);
|
|
771
|
+
const columnsNotYetAtMaxWidth = flexCols.length || adjustedColumns.filter(canGrow).length;
|
|
772
|
+
const additionalWidthPerColumn = Math.ceil(
|
|
773
|
+
freeSpaceToBeFilled / columnsNotYetAtMaxWidth
|
|
774
|
+
);
|
|
775
|
+
adjustedColumns = columns.map((column) => {
|
|
776
|
+
const {
|
|
777
|
+
maxWidth = defaultMaxWidth,
|
|
778
|
+
width = defaultWidth,
|
|
779
|
+
flex = 0
|
|
780
|
+
} = column;
|
|
781
|
+
if (flexCols.length > 0 && flex === 0) {
|
|
769
782
|
return column;
|
|
770
783
|
}
|
|
771
|
-
|
|
772
|
-
|
|
784
|
+
const adjustmentAmount = Math.min(
|
|
785
|
+
additionalWidthPerColumn,
|
|
786
|
+
freeSpaceToBeFilled
|
|
787
|
+
);
|
|
788
|
+
const adjustedWidth = width + adjustmentAmount;
|
|
789
|
+
if (adjustedWidth > maxWidth) {
|
|
790
|
+
freeSpaceToBeFilled -= adjustedWidth - maxWidth;
|
|
791
|
+
return { ...column, width: maxWidth };
|
|
792
|
+
} else {
|
|
793
|
+
freeSpaceToBeFilled -= adjustmentAmount;
|
|
794
|
+
return { ...column, width: adjustedWidth };
|
|
795
|
+
}
|
|
796
|
+
});
|
|
797
|
+
}
|
|
798
|
+
return adjustedColumns;
|
|
773
799
|
};
|
|
774
800
|
const dataAndColumnUnchanged = (p, p1) => p.column === p1.column && p.column.valueFormatter(p.row[p.columnMap[p.column.name]]) === p1.column.valueFormatter(p1.row[p1.columnMap[p1.column.name]]);
|
|
775
801
|
const dataColumnAndKeyUnchanged = (p, p1) => p.column === p1.column && p.row[KEY] === p1.row[KEY] && p.column.valueFormatter(p.row[p.columnMap[p.column.name]]) === p1.column.valueFormatter(p1.row[p1.columnMap[p1.column.name]]);
|
|
@@ -784,6 +810,7 @@ exports.applyRuntimeColumnWidthsToConfig = applyRuntimeColumnWidthsToConfig;
|
|
|
784
810
|
exports.applySortToColumns = applySortToColumns;
|
|
785
811
|
exports.applyWidthToColumns = applyWidthToColumns;
|
|
786
812
|
exports.buildColumnMap = buildColumnMap;
|
|
813
|
+
exports.checkConfirmationPending = checkConfirmationPending;
|
|
787
814
|
exports.dataAndColumnUnchanged = dataAndColumnUnchanged;
|
|
788
815
|
exports.dataColumnAndKeyUnchanged = dataColumnAndKeyUnchanged;
|
|
789
816
|
exports.existingSort = existingSort;
|
|
@@ -804,6 +831,7 @@ exports.getRowRecord = getRowRecord;
|
|
|
804
831
|
exports.getRuntimeColumnWidth = getRuntimeColumnWidth;
|
|
805
832
|
exports.getTableHeadings = getTableHeadings;
|
|
806
833
|
exports.getTypeFormattingFromColumn = getTypeFormattingFromColumn;
|
|
834
|
+
exports.hasCustomRenderer = hasCustomRenderer;
|
|
807
835
|
exports.hasHeadings = hasHeadings;
|
|
808
836
|
exports.hasValidationRules = hasValidationRules;
|
|
809
837
|
exports.isCalculatedColumn = isCalculatedColumn;
|