@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.
Files changed (165) hide show
  1. package/cjs/DataWindow.js.map +1 -1
  2. package/cjs/ShellContext.js.map +1 -1
  3. package/cjs/ThemeProvider.js.map +1 -1
  4. package/cjs/array-utils.js.map +1 -1
  5. package/cjs/box-utils.js.map +1 -1
  6. package/cjs/column-utils.js +81 -53
  7. package/cjs/column-utils.js.map +1 -1
  8. package/cjs/common-types.js.map +1 -1
  9. package/cjs/component-registry.js +6 -7
  10. package/cjs/component-registry.js.map +1 -1
  11. package/cjs/context-definitions/DataSourceContext.js.map +1 -1
  12. package/cjs/context-definitions/DataSourceProvider.js +5 -0
  13. package/cjs/context-definitions/DataSourceProvider.js.map +1 -1
  14. package/cjs/context-definitions/WorkspaceContext.js.map +1 -1
  15. package/cjs/cookie-utils.js.map +1 -1
  16. package/cjs/css-utils.js.map +1 -1
  17. package/cjs/data-utils.js +9 -0
  18. package/cjs/data-utils.js.map +1 -1
  19. package/cjs/datasource/BaseDataSource.js +48 -10
  20. package/cjs/datasource/BaseDataSource.js.map +1 -1
  21. package/cjs/datasource/datasource-action-utils.js.map +1 -1
  22. package/cjs/datasource/datasource-filter-utils.js.map +1 -1
  23. package/cjs/datasource/datasource-utils.js.map +1 -1
  24. package/cjs/date/date-utils.js.map +1 -1
  25. package/cjs/date/dateTimePattern.js.map +1 -1
  26. package/cjs/date/formatter.js.map +1 -1
  27. package/cjs/date/types.js.map +1 -1
  28. package/cjs/debug-utils.js.map +1 -1
  29. package/cjs/event-emitter.js.map +1 -1
  30. package/cjs/feature-utils.js.map +1 -1
  31. package/cjs/filters/filter-utils.js.map +1 -1
  32. package/cjs/filters/filterAsQuery.js.map +1 -1
  33. package/cjs/form-utils.js +13 -11
  34. package/cjs/form-utils.js.map +1 -1
  35. package/cjs/formatting-utils.js.map +1 -1
  36. package/cjs/group-utils.js.map +1 -1
  37. package/cjs/html-utils.js.map +1 -1
  38. package/cjs/index.js +13 -0
  39. package/cjs/index.js.map +1 -1
  40. package/cjs/input-utils.js.map +1 -1
  41. package/cjs/invariant.js.map +1 -1
  42. package/cjs/itemToString.js.map +1 -1
  43. package/cjs/json-utils.js.map +1 -1
  44. package/cjs/keyboard-utils.js.map +1 -1
  45. package/cjs/keyset.js.map +1 -1
  46. package/cjs/list-utils.js.map +1 -1
  47. package/cjs/local-storage-utils.js.map +1 -1
  48. package/cjs/logging-utils.js.map +1 -1
  49. package/cjs/menu-utils.js.map +1 -1
  50. package/cjs/module-utils.js.map +1 -1
  51. package/cjs/nanoid/index.js.map +1 -1
  52. package/cjs/perf-utils.js.map +1 -1
  53. package/cjs/promise-utils.js +1 -1
  54. package/cjs/promise-utils.js.map +1 -1
  55. package/cjs/protocol-message-utils.js +2 -0
  56. package/cjs/protocol-message-utils.js.map +1 -1
  57. package/cjs/range-utils.js.map +1 -1
  58. package/cjs/react-utils.js.map +1 -1
  59. package/cjs/round-decimal.js.map +1 -1
  60. package/cjs/row-utils.js.map +1 -1
  61. package/cjs/selection-utils.js +2 -2
  62. package/cjs/selection-utils.js.map +1 -1
  63. package/cjs/shell-layout-types.js.map +1 -1
  64. package/cjs/sort-utils.js.map +1 -1
  65. package/cjs/table-schema-utils.js.map +1 -1
  66. package/cjs/text-utils.js.map +1 -1
  67. package/cjs/tree-utils.js +42 -3
  68. package/cjs/tree-utils.js.map +1 -1
  69. package/cjs/ts-utils.js +2 -0
  70. package/cjs/ts-utils.js.map +1 -1
  71. package/cjs/url-utils.js.map +1 -1
  72. package/cjs/useId.js.map +1 -1
  73. package/cjs/useLayoutEffectSkipFirst.js.map +1 -1
  74. package/cjs/useStateRef.js.map +1 -1
  75. package/esm/DataWindow.js.map +1 -1
  76. package/esm/ShellContext.js.map +1 -1
  77. package/esm/ThemeProvider.js.map +1 -1
  78. package/esm/array-utils.js.map +1 -1
  79. package/esm/box-utils.js.map +1 -1
  80. package/esm/column-utils.js +80 -54
  81. package/esm/column-utils.js.map +1 -1
  82. package/esm/common-types.js.map +1 -1
  83. package/esm/component-registry.js +7 -8
  84. package/esm/component-registry.js.map +1 -1
  85. package/esm/context-definitions/DataSourceContext.js.map +1 -1
  86. package/esm/context-definitions/DataSourceProvider.js +5 -1
  87. package/esm/context-definitions/DataSourceProvider.js.map +1 -1
  88. package/esm/context-definitions/WorkspaceContext.js.map +1 -1
  89. package/esm/cookie-utils.js.map +1 -1
  90. package/esm/css-utils.js.map +1 -1
  91. package/esm/data-utils.js +6 -1
  92. package/esm/data-utils.js.map +1 -1
  93. package/esm/datasource/BaseDataSource.js +48 -10
  94. package/esm/datasource/BaseDataSource.js.map +1 -1
  95. package/esm/datasource/datasource-action-utils.js.map +1 -1
  96. package/esm/datasource/datasource-filter-utils.js.map +1 -1
  97. package/esm/datasource/datasource-utils.js.map +1 -1
  98. package/esm/date/date-utils.js.map +1 -1
  99. package/esm/date/dateTimePattern.js.map +1 -1
  100. package/esm/date/formatter.js.map +1 -1
  101. package/esm/date/types.js.map +1 -1
  102. package/esm/debug-utils.js.map +1 -1
  103. package/esm/event-emitter.js.map +1 -1
  104. package/esm/feature-utils.js.map +1 -1
  105. package/esm/filters/filter-utils.js.map +1 -1
  106. package/esm/filters/filterAsQuery.js.map +1 -1
  107. package/esm/form-utils.js +14 -12
  108. package/esm/form-utils.js.map +1 -1
  109. package/esm/formatting-utils.js.map +1 -1
  110. package/esm/group-utils.js.map +1 -1
  111. package/esm/html-utils.js.map +1 -1
  112. package/esm/index.js +6 -6
  113. package/esm/input-utils.js.map +1 -1
  114. package/esm/invariant.js.map +1 -1
  115. package/esm/itemToString.js.map +1 -1
  116. package/esm/json-utils.js.map +1 -1
  117. package/esm/keyboard-utils.js.map +1 -1
  118. package/esm/keyset.js.map +1 -1
  119. package/esm/list-utils.js.map +1 -1
  120. package/esm/local-storage-utils.js.map +1 -1
  121. package/esm/logging-utils.js.map +1 -1
  122. package/esm/menu-utils.js.map +1 -1
  123. package/esm/module-utils.js.map +1 -1
  124. package/esm/nanoid/index.js.map +1 -1
  125. package/esm/perf-utils.js.map +1 -1
  126. package/esm/promise-utils.js +1 -1
  127. package/esm/promise-utils.js.map +1 -1
  128. package/esm/protocol-message-utils.js +2 -1
  129. package/esm/protocol-message-utils.js.map +1 -1
  130. package/esm/range-utils.js.map +1 -1
  131. package/esm/react-utils.js.map +1 -1
  132. package/esm/round-decimal.js.map +1 -1
  133. package/esm/row-utils.js.map +1 -1
  134. package/esm/selection-utils.js +2 -2
  135. package/esm/selection-utils.js.map +1 -1
  136. package/esm/shell-layout-types.js.map +1 -1
  137. package/esm/sort-utils.js.map +1 -1
  138. package/esm/table-schema-utils.js.map +1 -1
  139. package/esm/text-utils.js.map +1 -1
  140. package/esm/tree-utils.js +39 -4
  141. package/esm/tree-utils.js.map +1 -1
  142. package/esm/ts-utils.js +2 -1
  143. package/esm/ts-utils.js.map +1 -1
  144. package/esm/url-utils.js.map +1 -1
  145. package/esm/useId.js.map +1 -1
  146. package/esm/useLayoutEffectSkipFirst.js.map +1 -1
  147. package/esm/useStateRef.js.map +1 -1
  148. package/package.json +6 -6
  149. package/types/ShellContext.d.ts +0 -1
  150. package/types/ThemeProvider.d.ts +1 -1
  151. package/types/column-utils.d.ts +22 -5
  152. package/types/context-definitions/DataSourceContext.d.ts +12 -4
  153. package/types/context-definitions/DataSourceProvider.d.ts +3 -2
  154. package/types/data-utils.d.ts +4 -0
  155. package/types/datasource/BaseDataSource.d.ts +9 -3
  156. package/types/date/types.d.ts +2 -2
  157. package/types/filters/filter-utils.d.ts +38 -38
  158. package/types/form-utils.d.ts +3 -3
  159. package/types/module-utils.d.ts +1 -2
  160. package/types/protocol-message-utils.d.ts +1 -0
  161. package/types/row-utils.d.ts +2 -1
  162. package/types/selection-utils.d.ts +1 -1
  163. package/types/tree-types.d.ts +3 -12
  164. package/types/tree-utils.d.ts +4 -0
  165. package/types/ts-utils.d.ts +1 -0
@@ -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":"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"}
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;AAIT,MAAM,UAAW,CAAA;AAAA,EAItB,WAAY,CAAA,EAAE,IAAM,EAAA,EAAA,EAAiB,EAAA;AAHrC,IAAQ,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AACR,IAAO,aAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AACP,IAAA,aAAA,CAAA,IAAA,EAAO,UAAW,EAAA,CAAA,CAAA;AASlB,IAAA,aAAA,CAAA,IAAA,EAAA,aAAA,EAAc,CAAC,QAAqB,KAAA;AAElC,MAAI,IAAA,QAAA,GAAW,IAAK,CAAA,IAAA,CAAK,MAAQ,EAAA;AAC/B,QAAA,IAAA,CAAK,KAAK,MAAS,GAAA,QAAA;AAAA;AAErB,MAAA,IAAA,CAAK,QAAW,GAAA,QAAA;AAAA,KAClB,CAAA;AAbE,IAAA,IAAA,CAAK,KAAQ,GAAA,IAAIC,sBAAY,CAAA,IAAA,EAAM,EAAE,CAAA;AAErC,IAAA,IAAA,CAAK,IAAO,GAAA,IAAI,KAAM,CAAA,EAAA,GAAK,IAAI,CAAA;AAAA;AAGjC;AAAA,EAWA,IAAI,IAAe,EAAA;AACjB,IAAM,MAAA,CAAC,KAAK,CAAI,GAAA,IAAA;AAChB,IAAI,IAAA,IAAA,CAAK,aAAc,CAAA,KAAK,CAAG,EAAA;AAC7B,MAAM,MAAA,aAAA,GAAgB,KAAQ,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA;AACzC,MAAA,MAAM,QAAW,GAAA,IAAA,CAAK,IAAK,CAAA,aAAa,CAAM,KAAA,KAAA,CAAA;AAC9C,MAAK,IAAA,CAAA,IAAA,CAAK,aAAa,CAAI,GAAA,IAAA;AAC3B,MAAO,OAAA,QAAA;AAAA,KACF,MAAA;AACL,MAAO,OAAA,KAAA;AAAA;AACT;AACF,EAEA,WAAW,KAAe,EAAA;AACxB,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA,CAAS,KAAK,CAC9B,IAAA,IAAA,CAAK,KAAK,KAAQ,GAAA,IAAA,CAAK,MAAM,IAAI,CAAA,IAAK,OACpC,IAAK,CAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,KAAA,CAAM,IAAI,CACjC,GAAA,KAAA,CAAA;AAAA;AACN,EAEA,SAAS,GAAa,EAAA;AACpB,IAAO,OAAA,IAAA,CAAK,KAAK,IAAK,CAAA,CAAC,QAAQ,GAAI,CAAA,GAAG,MAAM,GAAG,CAAA;AAAA;AACjD,EAEA,cAAc,KAAe,EAAA;AAC3B,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA,CAAS,KAAK,CAAA,IAAK,SAAS,IAAK,CAAA,QAAA;AAAA;AACrD,EAEA,QAAA,CAAS,MAAc,EAAY,EAAA;AAEjC,IAAA,IAAI,SAAS,IAAK,CAAA,KAAA,CAAM,QAAQ,EAAO,KAAA,IAAA,CAAK,MAAM,EAAI,EAAA;AACpD,MAAM,MAAA,CAAC,aAAa,SAAS,CAAA,GAAI,KAAK,KAAM,CAAA,OAAA,CAAQ,MAAM,EAAE,CAAA;AAC5D,MAAA,MAAM,OAAU,GAAA,IAAI,KAAM,CAAA,EAAA,GAAK,IAAI,CAAA;AACnC,MAAA,KAAA,IAAS,CAAI,GAAA,WAAA,EAAa,CAAI,GAAA,SAAA,EAAW,CAAK,EAAA,EAAA;AAC5C,QAAM,MAAA,IAAA,GAAO,IAAK,CAAA,UAAA,CAAW,CAAC,CAAA;AAC9B,QAAA,IAAI,IAAM,EAAA;AACR,UAAA,MAAM,QAAQ,CAAI,GAAA,IAAA;AAClB,UAAA,OAAA,CAAQ,KAAK,CAAI,GAAA,IAAA;AAAA;AACnB;AAEF,MAAA,IAAA,CAAK,IAAO,GAAA,OAAA;AACZ,MAAA,IAAA,CAAK,MAAM,IAAO,GAAA,IAAA;AAClB,MAAA,IAAA,CAAK,MAAM,EAAK,GAAA,EAAA;AAAA;AAClB;AACF,EAEA,OAAA,CAAQ,MAAc,EAAY,EAAA;AAChC,IAAM,MAAA,MAAA,GAAS,KAAK,KAAM,CAAA,IAAA;AAC1B,IAAA,MAAM,QAAQ,IAAO,GAAA,MAAA;AACrB,IAAM,MAAA,GAAA,GAAM,KAAK,GAAI,CAAA,EAAA,GAAK,SAAS,CAAG,EAAA,IAAA,CAAK,WAAW,CAAC,CAAA;AACvD,IAAO,OAAA,IAAA,CAAK,KAAK,KAAK,CAAA,KAAM,UAAa,IAAK,CAAA,IAAA,CAAK,GAAG,CAAM,KAAA,KAAA,CAAA;AAAA;AAC9D,EAEA,OAAA,CAAQ,MAAc,EAAmB,EAAA;AACvC,IAAA,MAAM,EAAE,IAAA,EAAM,UAAW,EAAA,GAAI,IAAK,CAAA,KAAA;AAClC,IAAA,MAAM,WAAc,GAAA,IAAA,CAAK,GAAI,CAAA,CAAA,EAAG,OAAO,UAAU,CAAA;AACjD,IAAA,MAAM,YAAY,IAAK,CAAA,GAAA,CAAI,KAAK,UAAY,EAAA,IAAA,CAAK,YAAY,EAAE,CAAA;AAC/D,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,KAAM,CAAA,WAAA,EAAa,SAAS,CAAA;AAAA;AAEjD;;;;"}
@@ -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,CAAA;AAEV,MAAA,YAAA,GAAeA,oBAAiC,aAAa,EAAA;AAEnE,MAAM,kBAAkB,MAAM;AACnC,EAAA,OAAOC,iBAAW,YAAY,CAAA,CAAA;AAChC;;;;;"}
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;;;;;"}
@@ -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,SAAA;AACjC,MAAM,aAAgB,GAAA,aAAA;AACtB,MAAM,kBAAgC,GAAA,QAAA;AAYtC,MAAM,eAAeA,mBAAiC,CAAA;AAAA,EAC3D,OAAS,EAAA,MAAA;AAAA,EACT,KAAO,EAAA,KAAA;AAAA,EACP,SAAW,EAAA,OAAA;AACb,CAAC,EAAA;AAID,MAAM,wBAAyC,GAAA;AAAA,EAC7C,KAAA;AAAA,EACA,mBAAA;AAAA,EACA,OAAA;AACF,CAAA,CAAA;AAQa,MAAA,kBAAA,GAAqB,CAChC,eACgC,KAAA;AAChC,EAAM,MAAA,OAAA,GAAUC,iBAAW,YAAY,CAAA,CAAA;AACvC,EAAA,IAAI,eAAiB,EAAA;AACnB,IAAO,OAAA;AAAA,MACL,eAAgB,CAAA,UAAA;AAAA,MAChB,eAAgB,CAAA,YAAA;AAAA,MAChB,eAAgB,CAAA,QAAA;AAAA,KAClB,CAAA;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,SAAA;AAAA,KACV,CAAA;AAAA,GACF;AACA,EAAO,OAAA,wBAAA,CAAA;AACT,EAAA;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,CAAA;AAAA,OACzB;AAAA;AAAA;AAAA,MAGA,WAAa,EAAA,SAAA;AAAA,KACd,CAAA,CAAA;AAAA,GACI,MAAA;AACL,IAAQ,OAAA,CAAA,IAAA;AAAA,MACN,CAAA;AAAA;AAAA,iDAAA,CAAA;AAAA,KAEF,CAAA;AACA,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AACF,CAAA,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,WAAA;AACX,CAA0B,KAAA;AACxB,EAAM,MAAA;AAAA,IACJ,OAAS,EAAA,gBAAA;AAAA,IACT,SAAW,EAAA,kBAAA;AAAA,IACX,KAAO,EAAA,cAAA;AAAA,GACT,GAAIF,iBAAW,YAAY,CAAA,CAAA;AAC3B,EAAM,MAAA,OAAA,GAAU,eAAe,gBAAoB,IAAA,eAAA,CAAA;AACnD,EAAM,MAAA,SAAA,GAAY,iBAAiB,kBAAsB,IAAA,kBAAA,CAAA;AACzD,EAAM,MAAA,KAAA,GAAQ,aAAa,cAAkB,IAAA,aAAA,CAAA;AAC7C,EAAA,MAAM,iBAAiB,iBACnB,GAAA,oBAAA,CAAqB,UAAU,KAAO,EAAA,SAAA,EAAW,OAAO,CACxD,GAAA,QAAA,CAAA;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,CAAA;AAEJ,EAAA;AAEA,aAAA,CAAc,WAAc,GAAA,eAAA;;;;;;;;;"}
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;;;;;;;;;"}
@@ -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":"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"}
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;;;;;;;;;;"}
@@ -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,GACvE;AACF;;;;"}
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;;;;"}
@@ -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(columns, groupBy, confirmed = true) {
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: groupCols.map((c) => c.width).reduce((a, b) => a + b) + 100
220
+ width
210
221
  };
211
- return [groupCol, rest.map((col, i) => ({ ...col, index: i + 2 }))];
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 = (columns, groupBy, confirmed = true) => {
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 stretchColumnsToFillAvailableSpace = (columns, availableWidth, totalWidth, defaultMaxWidth, defaultWidth, flexCount) => {
759
+ const hasFlex = ({ flex }) => typeof flex === "number";
760
+ const stretchColumnsToFillAvailableSpace = (columns, availableWidth, totalWidth, defaultMaxWidth, defaultWidth) => {
735
761
  let freeSpaceToBeFilled = availableWidth - totalWidth;
736
- const additionalWidthPerColumn = Math.floor(
737
- freeSpaceToBeFilled / (flexCount || columns.length)
738
- );
739
- const newColumns = columns.map((column) => {
740
- const {
741
- maxWidth = defaultMaxWidth,
742
- width = defaultWidth,
743
- flex = 0
744
- } = column;
745
- if (flexCount > 0 && flex === 0) {
746
- return column;
747
- }
748
- const adjustedWidth = width + additionalWidthPerColumn;
749
- if (adjustedWidth > maxWidth) {
750
- return { ...column, width: maxWidth };
751
- } else {
752
- freeSpaceToBeFilled -= additionalWidthPerColumn;
753
- return { ...column, width: adjustedWidth, canStretch: true };
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;