@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
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":"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"}
|
package/cjs/box-utils.js
CHANGED
|
@@ -5,6 +5,49 @@ function boxContainsPoint(rect, x, y) {
|
|
|
5
5
|
return x >= rect.left && x < rect.right && y >= rect.top && y < rect.bottom;
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
|
+
function getCenteredBox({ right, left, top, bottom }, pctSize) {
|
|
9
|
+
const pctOffset = (1 - pctSize) / 2;
|
|
10
|
+
const w = (right - left) * pctOffset;
|
|
11
|
+
const h = (bottom - top) * pctOffset;
|
|
12
|
+
return { left: left + w, top: top + h, right: right - w, bottom: bottom - h };
|
|
13
|
+
}
|
|
14
|
+
function pointPositionWithinRect(x, y, rect, borderZone = 30) {
|
|
15
|
+
const width = rect.right - rect.left;
|
|
16
|
+
const height = rect.bottom - rect.top;
|
|
17
|
+
const posX = x - rect.left;
|
|
18
|
+
const posY = y - rect.top;
|
|
19
|
+
let closeToTheEdge = 0;
|
|
20
|
+
if (posX < borderZone) closeToTheEdge += 8;
|
|
21
|
+
if (posX > width - borderZone) closeToTheEdge += 2;
|
|
22
|
+
if (posY < borderZone) closeToTheEdge += 1;
|
|
23
|
+
if (posY > height - borderZone) closeToTheEdge += 4;
|
|
24
|
+
return { pctX: posX / width, pctY: posY / height, closeToTheEdge };
|
|
25
|
+
}
|
|
26
|
+
const isGridLayoutSplitDirection = (position) => position !== "centre" && position !== "header";
|
|
27
|
+
function getPositionWithinBox(x, y, rect, pctX, pctY) {
|
|
28
|
+
const centerBox = getCenteredBox(rect, 0.2);
|
|
29
|
+
if (boxContainsPoint(centerBox, x, y)) {
|
|
30
|
+
return "centre";
|
|
31
|
+
} else {
|
|
32
|
+
const quadrant = `${pctY < 0.5 ? "north" : "south"}${pctX < 0.5 ? "west" : "east"}`;
|
|
33
|
+
switch (quadrant) {
|
|
34
|
+
case "northwest":
|
|
35
|
+
return pctX > pctY ? "north" : "west";
|
|
36
|
+
case "northeast":
|
|
37
|
+
return 1 - pctX > pctY ? "north" : "east";
|
|
38
|
+
case "southeast":
|
|
39
|
+
return pctX > pctY ? "east" : "south";
|
|
40
|
+
case "southwest":
|
|
41
|
+
return 1 - pctX > pctY ? "west" : "south";
|
|
42
|
+
default:
|
|
43
|
+
throw Error("getPositionWithinBox failed top compute position");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
8
47
|
|
|
9
48
|
exports.boxContainsPoint = boxContainsPoint;
|
|
49
|
+
exports.getCenteredBox = getCenteredBox;
|
|
50
|
+
exports.getPositionWithinBox = getPositionWithinBox;
|
|
51
|
+
exports.isGridLayoutSplitDirection = isGridLayoutSplitDirection;
|
|
52
|
+
exports.pointPositionWithinRect = pointPositionWithinRect;
|
|
10
53
|
//# sourceMappingURL=box-utils.js.map
|
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,CAAA;AAAA,
|
|
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\nexport type GridLayoutSplitDirection = \"north\" | \"south\" | \"east\" | \"west\";\n\nexport type GridLayoutDropPosition =\n | GridLayoutSplitDirection\n | \"header\"\n | \"centre\";\n\nexport function getCenteredBox(\n { right, left, top, bottom }: rect,\n pctSize: number,\n) {\n const pctOffset = (1 - pctSize) / 2;\n const w = (right - left) * pctOffset;\n const h = (bottom - top) * pctOffset;\n return { left: left + w, top: top + h, right: right - w, bottom: bottom - h };\n}\n\nexport function pointPositionWithinRect(\n x: number,\n y: number,\n rect: rect,\n borderZone = 30,\n) {\n const width = rect.right - rect.left;\n const height = rect.bottom - rect.top;\n const posX = x - rect.left;\n const posY = y - rect.top;\n let closeToTheEdge = 0;\n\n if (posX < borderZone) closeToTheEdge += 8;\n if (posX > width - borderZone) closeToTheEdge += 2;\n if (posY < borderZone) closeToTheEdge += 1;\n if (posY > height - borderZone) closeToTheEdge += 4;\n\n return { pctX: posX / width, pctY: posY / height, closeToTheEdge };\n}\n\nexport const isGridLayoutSplitDirection = (\n position: GridLayoutDropPosition,\n): position is GridLayoutSplitDirection =>\n position !== \"centre\" && position !== \"header\";\n\nexport function getPositionWithinBox(\n x: number,\n y: number,\n rect: rect,\n pctX: number,\n pctY: number,\n): GridLayoutDropPosition {\n const centerBox = getCenteredBox(rect, 0.2);\n if (boxContainsPoint(centerBox, x, y)) {\n return \"centre\";\n } else {\n const quadrant = `${pctY < 0.5 ? \"north\" : \"south\"}${\n pctX < 0.5 ? \"west\" : \"east\"\n }`;\n\n switch (quadrant) {\n case \"northwest\":\n return pctX > pctY ? \"north\" : \"west\";\n case \"northeast\":\n return 1 - pctX > pctY ? \"north\" : \"east\";\n case \"southeast\":\n return pctX > pctY ? \"east\" : \"south\";\n case \"southwest\":\n return 1 - pctX > pctY ? \"west\" : \"south\";\n default:\n throw Error(\"getPositionWithinBox failed top compute position\");\n }\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;AASO,SAAS,eACd,EAAE,KAAA,EAAO,MAAM,GAAK,EAAA,MAAA,IACpB,OACA,EAAA;AACA,EAAM,MAAA,SAAA,GAAA,CAAa,IAAI,OAAW,IAAA,CAAA;AAClC,EAAM,MAAA,CAAA,GAAA,CAAK,QAAQ,IAAQ,IAAA,SAAA;AAC3B,EAAM,MAAA,CAAA,GAAA,CAAK,SAAS,GAAO,IAAA,SAAA;AAC3B,EAAA,OAAO,EAAE,IAAA,EAAM,IAAO,GAAA,CAAA,EAAG,GAAK,EAAA,GAAA,GAAM,CAAG,EAAA,KAAA,EAAO,KAAQ,GAAA,CAAA,EAAG,MAAQ,EAAA,MAAA,GAAS,CAAE,EAAA;AAC9E;AAEO,SAAS,uBACd,CAAA,CAAA,EACA,CACA,EAAA,IAAA,EACA,aAAa,EACb,EAAA;AACA,EAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,GAAQ,IAAK,CAAA,IAAA;AAChC,EAAM,MAAA,MAAA,GAAS,IAAK,CAAA,MAAA,GAAS,IAAK,CAAA,GAAA;AAClC,EAAM,MAAA,IAAA,GAAO,IAAI,IAAK,CAAA,IAAA;AACtB,EAAM,MAAA,IAAA,GAAO,IAAI,IAAK,CAAA,GAAA;AACtB,EAAA,IAAI,cAAiB,GAAA,CAAA;AAErB,EAAI,IAAA,IAAA,GAAO,YAA8B,cAAA,IAAA,CAAA;AACzC,EAAI,IAAA,IAAA,GAAO,KAAQ,GAAA,UAAA,EAA8B,cAAA,IAAA,CAAA;AACjD,EAAI,IAAA,IAAA,GAAO,YAA8B,cAAA,IAAA,CAAA;AACzC,EAAI,IAAA,IAAA,GAAO,MAAS,GAAA,UAAA,EAA8B,cAAA,IAAA,CAAA;AAElD,EAAA,OAAO,EAAE,IAAM,EAAA,IAAA,GAAO,OAAO,IAAM,EAAA,IAAA,GAAO,QAAQ,cAAe,EAAA;AACnE;AAEO,MAAM,0BAA6B,GAAA,CACxC,QAEA,KAAA,QAAA,KAAa,YAAY,QAAa,KAAA;AAEjC,SAAS,oBACd,CAAA,CAAA,EACA,CACA,EAAA,IAAA,EACA,MACA,IACwB,EAAA;AACxB,EAAM,MAAA,SAAA,GAAY,cAAe,CAAA,IAAA,EAAM,GAAG,CAAA;AAC1C,EAAA,IAAI,gBAAiB,CAAA,SAAA,EAAW,CAAG,EAAA,CAAC,CAAG,EAAA;AACrC,IAAO,OAAA,QAAA;AAAA,GACF,MAAA;AACL,IAAM,MAAA,QAAA,GAAW,CAAG,EAAA,IAAA,GAAO,GAAM,GAAA,OAAA,GAAU,OAAO,CAChD,EAAA,IAAA,GAAO,GAAM,GAAA,MAAA,GAAS,MACxB,CAAA,CAAA;AAEA,IAAA,QAAQ,QAAU;AAAA,MAChB,KAAK,WAAA;AACH,QAAO,OAAA,IAAA,GAAO,OAAO,OAAU,GAAA,MAAA;AAAA,MACjC,KAAK,WAAA;AACH,QAAO,OAAA,CAAA,GAAI,IAAO,GAAA,IAAA,GAAO,OAAU,GAAA,MAAA;AAAA,MACrC,KAAK,WAAA;AACH,QAAO,OAAA,IAAA,GAAO,OAAO,MAAS,GAAA,OAAA;AAAA,MAChC,KAAK,WAAA;AACH,QAAO,OAAA,CAAA,GAAI,IAAO,GAAA,IAAA,GAAO,MAAS,GAAA,OAAA;AAAA,MACpC;AACE,QAAA,MAAM,MAAM,kDAAkD,CAAA;AAAA;AAClE;AAEJ;;;;;;;;"}
|
package/cjs/column-utils.js
CHANGED
|
@@ -113,6 +113,21 @@ function buildColumnMap(columns) {
|
|
|
113
113
|
return EMPTY_COLUMN_MAP;
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
|
+
function buildReverseColumnMap(columns) {
|
|
117
|
+
const start = metadataKeys.count;
|
|
118
|
+
if (columns) {
|
|
119
|
+
return columns.reduce((map, column, i) => {
|
|
120
|
+
if (typeof column === "string") {
|
|
121
|
+
map[start + i] = column;
|
|
122
|
+
} else {
|
|
123
|
+
map[start + i] = column.name;
|
|
124
|
+
}
|
|
125
|
+
return map;
|
|
126
|
+
}, {});
|
|
127
|
+
} else {
|
|
128
|
+
return EMPTY_COLUMN_MAP;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
116
131
|
function projectUpdates(updates) {
|
|
117
132
|
const results = [];
|
|
118
133
|
const metadataOffset = metadataKeys.count - 2;
|
|
@@ -165,7 +180,12 @@ const flattenColumnGroup = (columns) => {
|
|
|
165
180
|
return columns;
|
|
166
181
|
}
|
|
167
182
|
};
|
|
168
|
-
function extractGroupColumn(
|
|
183
|
+
function extractGroupColumn({
|
|
184
|
+
availableWidth,
|
|
185
|
+
columns,
|
|
186
|
+
groupBy,
|
|
187
|
+
confirmed = true
|
|
188
|
+
}) {
|
|
169
189
|
if (groupBy && groupBy.length > 0) {
|
|
170
190
|
const flattenedColumns = flattenColumnGroup(columns);
|
|
171
191
|
const [groupedColumns, rest] = flattenedColumns.reduce(
|
|
@@ -190,6 +210,7 @@ function extractGroupColumn(columns, groupBy, confirmed = true) {
|
|
|
190
210
|
)} `
|
|
191
211
|
);
|
|
192
212
|
}
|
|
213
|
+
const groupOnly = rest.length === 0;
|
|
193
214
|
const groupCount = groupBy.length;
|
|
194
215
|
const groupCols = groupBy.map((name, idx) => {
|
|
195
216
|
const column = groupedColumns.find(
|
|
@@ -200,6 +221,10 @@ function extractGroupColumn(columns, groupBy, confirmed = true) {
|
|
|
200
221
|
groupLevel: groupCount - idx
|
|
201
222
|
};
|
|
202
223
|
});
|
|
224
|
+
const width = groupOnly ? availableWidth : Math.min(
|
|
225
|
+
availableWidth,
|
|
226
|
+
groupCols.map((c) => c.width).reduce((a, b) => a + b) + 100
|
|
227
|
+
);
|
|
203
228
|
const groupCol = {
|
|
204
229
|
ariaColIndex: 1,
|
|
205
230
|
columns: groupCols,
|
|
@@ -207,7 +232,7 @@ function extractGroupColumn(columns, groupBy, confirmed = true) {
|
|
|
207
232
|
isGroup: true,
|
|
208
233
|
groupConfirmed: confirmed,
|
|
209
234
|
name: "group-col",
|
|
210
|
-
width
|
|
235
|
+
width
|
|
211
236
|
};
|
|
212
237
|
const withAdjustedAriaIndex = [];
|
|
213
238
|
let colIndex = 2;
|
|
@@ -253,6 +278,7 @@ const sortPinnedColumns = (columns) => {
|
|
|
253
278
|
pinnedWidthLeft += column.width;
|
|
254
279
|
}
|
|
255
280
|
break;
|
|
281
|
+
// store right pinned columns initially in reverse order
|
|
256
282
|
case "right":
|
|
257
283
|
rightPinnedColumns.unshift(column);
|
|
258
284
|
break;
|
|
@@ -348,20 +374,16 @@ const getColumnStyle = ({
|
|
|
348
374
|
const setAggregations = (aggregations, column, aggType) => {
|
|
349
375
|
return aggregations.filter((agg) => agg.column !== column.name).concat({ column: column.name, aggType });
|
|
350
376
|
};
|
|
351
|
-
const applyGroupByToColumns = (
|
|
352
|
-
if (groupBy.length) {
|
|
353
|
-
const [groupColumn, nonGroupedColumns] = extractGroupColumn(
|
|
354
|
-
columns,
|
|
355
|
-
groupBy,
|
|
356
|
-
confirmed
|
|
357
|
-
);
|
|
377
|
+
const applyGroupByToColumns = (props) => {
|
|
378
|
+
if (props.groupBy.length) {
|
|
379
|
+
const [groupColumn, nonGroupedColumns] = extractGroupColumn(props);
|
|
358
380
|
if (groupColumn) {
|
|
359
381
|
return [groupColumn].concat(nonGroupedColumns);
|
|
360
382
|
}
|
|
361
|
-
} else if (columns[0]?.isGroup) {
|
|
362
|
-
return flattenColumnGroup(columns);
|
|
383
|
+
} else if (props.columns[0]?.isGroup) {
|
|
384
|
+
return flattenColumnGroup(props.columns);
|
|
363
385
|
}
|
|
364
|
-
return columns;
|
|
386
|
+
return props.columns;
|
|
365
387
|
};
|
|
366
388
|
const applySortToColumns = (columns, sort) => columns.map((column) => {
|
|
367
389
|
const sorted = getSortType(column, sort);
|
|
@@ -549,7 +571,7 @@ const getTypeFormattingFromColumn = (column) => {
|
|
|
549
571
|
return NO_TYPE_SETTINGS;
|
|
550
572
|
}
|
|
551
573
|
};
|
|
552
|
-
const subscribedOnly = (columnNames) => (column) => columnNames?.includes(column.name);
|
|
574
|
+
const subscribedOnly = (columnNames) => (column) => column.source === "client" || columnNames?.includes(column.name);
|
|
553
575
|
const addColumnToSubscribedColumns = (subscribedColumns, availableColumns, columnName) => {
|
|
554
576
|
const byColName = (n = columnName) => (column) => column.name === n;
|
|
555
577
|
if (subscribedColumns.findIndex(byColName()) !== -1) {
|
|
@@ -692,8 +714,7 @@ function applyWidthToColumns(columns, {
|
|
|
692
714
|
availableWidth,
|
|
693
715
|
totalWidth,
|
|
694
716
|
defaultMaxWidth,
|
|
695
|
-
defaultWidth
|
|
696
|
-
flexCount
|
|
717
|
+
defaultWidth
|
|
697
718
|
);
|
|
698
719
|
}
|
|
699
720
|
}
|
|
@@ -751,45 +772,46 @@ const shrinkColumnsToFitAvailableSpace = (columns, availableWidth, totalWidth, d
|
|
|
751
772
|
return newColumns;
|
|
752
773
|
}
|
|
753
774
|
};
|
|
754
|
-
const
|
|
775
|
+
const hasFlex = ({ flex }) => typeof flex === "number";
|
|
776
|
+
const stretchColumnsToFillAvailableSpace = (columns, availableWidth, totalWidth, defaultMaxWidth, defaultWidth) => {
|
|
755
777
|
let freeSpaceToBeFilled = availableWidth - totalWidth;
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
const columnsNotYetAtMaxWidth = newColumns.filter(
|
|
777
|
-
(col) => col.canStretch
|
|
778
|
-
).length;
|
|
779
|
-
const finalAdjustmentPerColumn = Math.min(
|
|
780
|
-
1,
|
|
781
|
-
Math.ceil(freeSpaceToBeFilled / columnsNotYetAtMaxWidth)
|
|
782
|
-
);
|
|
783
|
-
return newColumns.map(
|
|
784
|
-
({ canStretch, ...column }) => {
|
|
785
|
-
if (canStretch && freeSpaceToBeFilled) {
|
|
786
|
-
freeSpaceToBeFilled -= finalAdjustmentPerColumn;
|
|
787
|
-
return { ...column, width: column.width + finalAdjustmentPerColumn };
|
|
788
|
-
} else {
|
|
778
|
+
let adjustedColumns = columns;
|
|
779
|
+
const canGrow = ({
|
|
780
|
+
width = defaultWidth,
|
|
781
|
+
maxWidth = defaultMaxWidth
|
|
782
|
+
}) => width < maxWidth;
|
|
783
|
+
while (freeSpaceToBeFilled > 0) {
|
|
784
|
+
const flexCols = adjustedColumns.filter(
|
|
785
|
+
(col) => hasFlex(col) && canGrow(col)
|
|
786
|
+
);
|
|
787
|
+
const columnsNotYetAtMaxWidth = flexCols.length || adjustedColumns.filter(canGrow).length;
|
|
788
|
+
const additionalWidthPerColumn = Math.ceil(
|
|
789
|
+
freeSpaceToBeFilled / columnsNotYetAtMaxWidth
|
|
790
|
+
);
|
|
791
|
+
adjustedColumns = columns.map((column) => {
|
|
792
|
+
const {
|
|
793
|
+
maxWidth = defaultMaxWidth,
|
|
794
|
+
width = defaultWidth,
|
|
795
|
+
flex = 0
|
|
796
|
+
} = column;
|
|
797
|
+
if (flexCols.length > 0 && flex === 0) {
|
|
789
798
|
return column;
|
|
790
799
|
}
|
|
791
|
-
|
|
792
|
-
|
|
800
|
+
const adjustmentAmount = Math.min(
|
|
801
|
+
additionalWidthPerColumn,
|
|
802
|
+
freeSpaceToBeFilled
|
|
803
|
+
);
|
|
804
|
+
const adjustedWidth = width + adjustmentAmount;
|
|
805
|
+
if (adjustedWidth > maxWidth) {
|
|
806
|
+
freeSpaceToBeFilled -= adjustedWidth - maxWidth;
|
|
807
|
+
return { ...column, width: maxWidth };
|
|
808
|
+
} else {
|
|
809
|
+
freeSpaceToBeFilled -= adjustmentAmount;
|
|
810
|
+
return { ...column, width: adjustedWidth };
|
|
811
|
+
}
|
|
812
|
+
});
|
|
813
|
+
}
|
|
814
|
+
return adjustedColumns;
|
|
793
815
|
};
|
|
794
816
|
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]]);
|
|
795
817
|
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]]);
|
|
@@ -804,6 +826,7 @@ exports.applyRuntimeColumnWidthsToConfig = applyRuntimeColumnWidthsToConfig;
|
|
|
804
826
|
exports.applySortToColumns = applySortToColumns;
|
|
805
827
|
exports.applyWidthToColumns = applyWidthToColumns;
|
|
806
828
|
exports.buildColumnMap = buildColumnMap;
|
|
829
|
+
exports.buildReverseColumnMap = buildReverseColumnMap;
|
|
807
830
|
exports.checkConfirmationPending = checkConfirmationPending;
|
|
808
831
|
exports.dataAndColumnUnchanged = dataAndColumnUnchanged;
|
|
809
832
|
exports.dataColumnAndKeyUnchanged = dataColumnAndKeyUnchanged;
|