@ryuzaki13/react-foundation-lib 2.31.1 → 2.32.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.
Files changed (494) hide show
  1. package/README.md +17 -5
  2. package/dist/analytical-table/definition/analyticalDefinitionConstants.d.ts +17 -0
  3. package/dist/analytical-table/definition/analyticalDefinitionConstants.d.ts.map +1 -0
  4. package/dist/analytical-table/definition/compileAnalyticalTableDefinition.d.ts.map +1 -1
  5. package/dist/analytical-table/definition/types.d.ts +6 -5
  6. package/dist/analytical-table/definition/types.d.ts.map +1 -1
  7. package/dist/analytical-table/dynamic-columns/analyticalDateColumnConstants.d.ts +7 -0
  8. package/dist/analytical-table/dynamic-columns/analyticalDateColumnConstants.d.ts.map +1 -0
  9. package/dist/analytical-table/dynamic-columns/dateColumns.d.ts.map +1 -1
  10. package/dist/analytical-table/dynamic-columns/types.d.ts +2 -1
  11. package/dist/analytical-table/dynamic-columns/types.d.ts.map +1 -1
  12. package/dist/analytical-table/index.js +124 -114
  13. package/dist/analytical-table/index.js.map +1 -1
  14. package/dist/analytical-table/projections/analyticalExportConstants.d.ts +7 -0
  15. package/dist/analytical-table/projections/analyticalExportConstants.d.ts.map +1 -0
  16. package/dist/analytical-table/projections/expansion.d.ts +2 -1
  17. package/dist/analytical-table/projections/expansion.d.ts.map +1 -1
  18. package/dist/analytical-table/projections/exportProjection.d.ts.map +1 -1
  19. package/dist/analytical-table/projections/types.d.ts +3 -2
  20. package/dist/analytical-table/projections/types.d.ts.map +1 -1
  21. package/dist/analytical-table/runtime/aggregation.d.ts.map +1 -1
  22. package/dist/analytical-table/runtime/analyticalRowConstants.d.ts +4 -0
  23. package/dist/analytical-table/runtime/analyticalRowConstants.d.ts.map +1 -0
  24. package/dist/analytical-table/runtime/analyticalViewConstants.d.ts +16 -0
  25. package/dist/analytical-table/runtime/analyticalViewConstants.d.ts.map +1 -0
  26. package/dist/analytical-table/runtime/buildGroupedModel.d.ts.map +1 -1
  27. package/dist/analytical-table/runtime/filtering.d.ts.map +1 -1
  28. package/dist/analytical-table/runtime/grouping.d.ts.map +1 -1
  29. package/dist/analytical-table/runtime/hierarchy.d.ts +2 -1
  30. package/dist/analytical-table/runtime/hierarchy.d.ts.map +1 -1
  31. package/dist/analytical-table/runtime/totals.d.ts +2 -2
  32. package/dist/analytical-table/runtime/totals.d.ts.map +1 -1
  33. package/dist/analytical-table/runtime/types.d.ts +5 -3
  34. package/dist/analytical-table/runtime/types.d.ts.map +1 -1
  35. package/dist/analytical-table/runtime/valueComparison.d.ts.map +1 -1
  36. package/dist/array/index.js +1 -1
  37. package/dist/array/reorder.d.ts +6 -1
  38. package/dist/array/reorder.d.ts.map +1 -1
  39. package/dist/async-task-runner/createCoalescingTaskRunner.d.ts.map +1 -1
  40. package/dist/async-task-runner/createDeadlineTimer.d.ts.map +1 -1
  41. package/dist/async-task-runner/index.js +39 -36
  42. package/dist/async-task-runner/index.js.map +1 -1
  43. package/dist/async-task-runner/nativeTimerConstants.d.ts +3 -0
  44. package/dist/async-task-runner/nativeTimerConstants.d.ts.map +1 -0
  45. package/dist/binary/base64Constants.d.ts +6 -0
  46. package/dist/binary/base64Constants.d.ts.map +1 -0
  47. package/dist/binary/binaryToBlob.d.ts.map +1 -1
  48. package/dist/binary/getBase64DecodedSize.d.ts.map +1 -1
  49. package/dist/binary/index.js +95 -70
  50. package/dist/binary/index.js.map +1 -1
  51. package/dist/browser-notifications/browserNotificationConstants.d.ts +3 -0
  52. package/dist/browser-notifications/browserNotificationConstants.d.ts.map +1 -0
  53. package/dist/browser-notifications/browserNotificationTypes.d.ts +2 -1
  54. package/dist/browser-notifications/browserNotificationTypes.d.ts.map +1 -1
  55. package/dist/browser-notifications/createBrowserNotificationPresenter.d.ts.map +1 -1
  56. package/dist/browser-notifications/index.js +38 -37
  57. package/dist/browser-notifications/index.js.map +1 -1
  58. package/dist/chunks/{array-D-_yMMUK.js → array-bd7LYFto.js} +1 -3
  59. package/dist/chunks/{array-D-_yMMUK.js.map → array-bd7LYFto.js.map} +1 -1
  60. package/dist/chunks/{dom-BK22UmgF.js → dom-ZSeWZ0Gg.js} +103 -98
  61. package/dist/chunks/dom-ZSeWZ0Gg.js.map +1 -0
  62. package/dist/chunks/formatDate-CNPcfNte.js +133 -0
  63. package/dist/chunks/formatDate-CNPcfNte.js.map +1 -0
  64. package/dist/chunks/{formatters-rxriDRPk.js → formatters-CO40zvVB.js} +496 -497
  65. package/dist/chunks/formatters-CO40zvVB.js.map +1 -0
  66. package/dist/chunks/{formulas-BXT_XBWI.js → formulas-Y0HOcFhe.js} +90 -86
  67. package/dist/chunks/formulas-Y0HOcFhe.js.map +1 -0
  68. package/dist/chunks/hasSignatureBytes-D2wO_Myl.js +11 -0
  69. package/dist/chunks/hasSignatureBytes-D2wO_Myl.js.map +1 -0
  70. package/dist/chunks/keyboardConstants-BZKskWsm.js +6 -0
  71. package/dist/chunks/keyboardConstants-BZKskWsm.js.map +1 -0
  72. package/dist/chunks/media-imBOXWwa.js +192 -0
  73. package/dist/chunks/media-imBOXWwa.js.map +1 -0
  74. package/dist/chunks/mimeTypeConstants-BzONV-b1.js +6 -0
  75. package/dist/chunks/mimeTypeConstants-BzONV-b1.js.map +1 -0
  76. package/dist/chunks/{query-client-CVRfrYZM.js → query-client-D0HQZ84w.js} +142 -142
  77. package/dist/chunks/query-client-D0HQZ84w.js.map +1 -0
  78. package/dist/chunks/scalarTypeClassification-D4YcGxtQ.js +766 -0
  79. package/dist/chunks/scalarTypeClassification-D4YcGxtQ.js.map +1 -0
  80. package/dist/chunks/scalarTypeConstants-CnSsjpGO.js +6 -0
  81. package/dist/chunks/scalarTypeConstants-CnSsjpGO.js.map +1 -0
  82. package/dist/chunks/utils-DW0Yso1Q.js +210 -0
  83. package/dist/chunks/utils-DW0Yso1Q.js.map +1 -0
  84. package/dist/chunks/{uuid-CUJPAbRY.js → uuid-izDzLv18.js} +1 -2
  85. package/dist/chunks/uuid-izDzLv18.js.map +1 -0
  86. package/dist/chunks/validate-8URYKKly.js +613 -0
  87. package/dist/chunks/validate-8URYKKly.js.map +1 -0
  88. package/dist/copy/index.js +5 -5
  89. package/dist/copy/index.js.map +1 -1
  90. package/dist/copy/useCopyFeedback.d.ts.map +1 -1
  91. package/dist/crypto/hashString.d.ts.map +1 -1
  92. package/dist/crypto/hexadecimalConstants.d.ts +3 -0
  93. package/dist/crypto/hexadecimalConstants.d.ts.map +1 -0
  94. package/dist/crypto/index.js +25 -24
  95. package/dist/crypto/index.js.map +1 -1
  96. package/dist/crypto/uuid.d.ts.map +1 -1
  97. package/dist/date-segments/index.js +81 -81
  98. package/dist/date-segments/index.js.map +1 -1
  99. package/dist/date-segments/mask.d.ts +13 -3
  100. package/dist/date-segments/mask.d.ts.map +1 -1
  101. package/dist/decimal/decimalConstants.d.ts +3 -0
  102. package/dist/decimal/decimalConstants.d.ts.map +1 -0
  103. package/dist/decimal/index.js +0 -2
  104. package/dist/decimal/index.js.map +1 -1
  105. package/dist/decimal/normalizeDecimal.d.ts.map +1 -1
  106. package/dist/decimal/normalizeDecimalLiteral.d.ts.map +1 -1
  107. package/dist/decimal/resolveDecimalMaxLength.d.ts.map +1 -1
  108. package/dist/decimal/sumDecimals.d.ts.map +1 -1
  109. package/dist/decimal/writeDecimalParts.d.ts.map +1 -1
  110. package/dist/dom/document-scroll/acquireDocumentScrollLock.d.ts.map +1 -1
  111. package/dist/dom/document-scroll/attachDocumentTouchScrollGuard.d.ts.map +1 -1
  112. package/dist/dom/document-scroll/canConsumeVerticalTouchScroll.d.ts.map +1 -1
  113. package/dist/dom/domEventConstants.d.ts +4 -0
  114. package/dist/dom/domEventConstants.d.ts.map +1 -0
  115. package/dist/dom/domScrollConstants.d.ts +3 -0
  116. package/dist/dom/domScrollConstants.d.ts.map +1 -0
  117. package/dist/dom/index.js +1 -1
  118. package/dist/dom/installFaviconOverride.d.ts.map +1 -1
  119. package/dist/dom/overlayFocusConstants.d.ts +4 -0
  120. package/dist/dom/overlayFocusConstants.d.ts.map +1 -0
  121. package/dist/dom/scroll-anchor/captureScrollAnchor.d.ts.map +1 -1
  122. package/dist/dom/useClickOutside.d.ts +1 -1
  123. package/dist/dom/useClickOutside.d.ts.map +1 -1
  124. package/dist/dom/useEscapeDismiss.d.ts +1 -1
  125. package/dist/dom/useEscapeDismiss.d.ts.map +1 -1
  126. package/dist/dom/useFocusTrap.d.ts.map +1 -1
  127. package/dist/dom/useIsTouchDevice.d.ts.map +1 -1
  128. package/dist/dom/useOverlayFocus.d.ts +3 -2
  129. package/dist/dom/useOverlayFocus.d.ts.map +1 -1
  130. package/dist/dom/visual-viewport/attachVisualViewportFrame.d.ts.map +1 -1
  131. package/dist/error-report/breadcrumbs.d.ts.map +1 -1
  132. package/dist/error-report/capture.d.ts.map +1 -1
  133. package/dist/error-report/captureOptions.d.ts +3 -2
  134. package/dist/error-report/captureOptions.d.ts.map +1 -1
  135. package/dist/error-report/capturePolicyConstants.d.ts +4 -0
  136. package/dist/error-report/capturePolicyConstants.d.ts.map +1 -0
  137. package/dist/error-report/dataPreview.d.ts.map +1 -1
  138. package/dist/error-report/diagnostics.d.ts.map +1 -1
  139. package/dist/error-report/drafts.d.ts.map +1 -1
  140. package/dist/error-report/environment.d.ts.map +1 -1
  141. package/dist/error-report/errorInfo.d.ts.map +1 -1
  142. package/dist/error-report/errorReportCaptureLimits.d.ts +26 -0
  143. package/dist/error-report/errorReportCaptureLimits.d.ts.map +1 -0
  144. package/dist/error-report/errorReportContractConstants.d.ts +32 -0
  145. package/dist/error-report/errorReportContractConstants.d.ts.map +1 -0
  146. package/dist/error-report/index.js +586 -587
  147. package/dist/error-report/index.js.map +1 -1
  148. package/dist/error-report/payload.d.ts.map +1 -1
  149. package/dist/error-report/queue.d.ts.map +1 -1
  150. package/dist/error-report/queueContract.d.ts +7 -6
  151. package/dist/error-report/queueContract.d.ts.map +1 -1
  152. package/dist/error-report/queueRecord.d.ts.map +1 -1
  153. package/dist/error-report/queueResultConstants.d.ts +14 -0
  154. package/dist/error-report/queueResultConstants.d.ts.map +1 -0
  155. package/dist/error-report/runtimeDeduplication.d.ts +2 -1
  156. package/dist/error-report/runtimeDeduplication.d.ts.map +1 -1
  157. package/dist/error-report/safeValue.d.ts.map +1 -1
  158. package/dist/error-report/safeValueMarkerConstants.d.ts +16 -0
  159. package/dist/error-report/safeValueMarkerConstants.d.ts.map +1 -0
  160. package/dist/error-report/schema.d.ts.map +1 -1
  161. package/dist/error-report/types.d.ts +10 -8
  162. package/dist/error-report/types.d.ts.map +1 -1
  163. package/dist/error-report-source-maps/archive.d.ts.map +1 -1
  164. package/dist/error-report-source-maps/artifact.d.ts.map +1 -1
  165. package/dist/error-report-source-maps/index.js +238 -238
  166. package/dist/error-report-source-maps/index.js.map +1 -1
  167. package/dist/error-report-source-maps/manifest.d.ts.map +1 -1
  168. package/dist/error-report-source-maps/package.d.ts.map +1 -1
  169. package/dist/error-report-source-maps/sourceMapArtifactConstants.d.ts +11 -0
  170. package/dist/error-report-source-maps/sourceMapArtifactConstants.d.ts.map +1 -0
  171. package/dist/error-report-source-maps/symbolicate.d.ts.map +1 -1
  172. package/dist/error-report-source-maps/symbolicationResultConstants.d.ts +6 -0
  173. package/dist/error-report-source-maps/symbolicationResultConstants.d.ts.map +1 -0
  174. package/dist/error-report-source-maps/types.d.ts +4 -2
  175. package/dist/error-report-source-maps/types.d.ts.map +1 -1
  176. package/dist/excel/excel.d.ts.map +1 -1
  177. package/dist/excel/excelWorkbookConstants.d.ts +6 -0
  178. package/dist/excel/excelWorkbookConstants.d.ts.map +1 -0
  179. package/dist/excel/index.js +117 -116
  180. package/dist/excel/index.js.map +1 -1
  181. package/dist/excel/matrixWorkbook.d.ts +6 -1
  182. package/dist/excel/matrixWorkbook.d.ts.map +1 -1
  183. package/dist/excel/tableExport.d.ts.map +1 -1
  184. package/dist/file/checkFileSignature.d.ts.map +1 -1
  185. package/dist/file/contentDisposition.d.ts.map +1 -1
  186. package/dist/file/fileSignatureConstants.d.ts +14 -18
  187. package/dist/file/fileSignatureConstants.d.ts.map +1 -1
  188. package/dist/file/fileSignatureTypes.d.ts +3 -3
  189. package/dist/file/fileSignatureTypes.d.ts.map +1 -1
  190. package/dist/file/image/imageReadConstants.d.ts +3 -0
  191. package/dist/file/image/imageReadConstants.d.ts.map +1 -0
  192. package/dist/file/image/readImageFile.d.ts +3 -2
  193. package/dist/file/image/readImageFile.d.ts.map +1 -1
  194. package/dist/file/image/types.d.ts +5 -3
  195. package/dist/file/image/types.d.ts.map +1 -1
  196. package/dist/file/index.js +139 -165
  197. package/dist/file/index.js.map +1 -1
  198. package/dist/file/mimeType.d.ts.map +1 -1
  199. package/dist/file/mimeTypeConstants.d.ts +18 -0
  200. package/dist/file/mimeTypeConstants.d.ts.map +1 -0
  201. package/dist/file/read-file/assert.d.ts.map +1 -1
  202. package/dist/file/read-file/readFile.d.ts +3 -11
  203. package/dist/file/read-file/readFile.d.ts.map +1 -1
  204. package/dist/file/read-file/readFileConstants.d.ts +13 -0
  205. package/dist/file/read-file/readFileConstants.d.ts.map +1 -0
  206. package/dist/file/read-file/types.d.ts +7 -6
  207. package/dist/file/read-file/types.d.ts.map +1 -1
  208. package/dist/file/signature/checkArchiveSignature.d.ts.map +1 -1
  209. package/dist/file-system/fileSystemConstants.d.ts +5 -0
  210. package/dist/file-system/fileSystemConstants.d.ts.map +1 -0
  211. package/dist/file-system/fileSystemTypes.d.ts +2 -1
  212. package/dist/file-system/fileSystemTypes.d.ts.map +1 -1
  213. package/dist/file-system/index.js +11 -10
  214. package/dist/file-system/index.js.map +1 -1
  215. package/dist/file-system/resolvePathInsideRoot.d.ts.map +1 -1
  216. package/dist/formatters/boolean/parseAbapBoolean.d.ts.map +1 -1
  217. package/dist/formatters/boolean/toAbapBoolean.d.ts.map +1 -1
  218. package/dist/formatters/date/calendarDate.d.ts.map +1 -1
  219. package/dist/formatters/date/calendarDateConstants.d.ts +13 -0
  220. package/dist/formatters/date/calendarDateConstants.d.ts.map +1 -0
  221. package/dist/formatters/date/calendarPeriod.d.ts +11 -2
  222. package/dist/formatters/date/calendarPeriod.d.ts.map +1 -1
  223. package/dist/formatters/date/dateFormatConstants.d.ts +17 -0
  224. package/dist/formatters/date/dateFormatConstants.d.ts.map +1 -0
  225. package/dist/formatters/date/datePatternConstants.d.ts +16 -0
  226. package/dist/formatters/date/datePatternConstants.d.ts.map +1 -0
  227. package/dist/formatters/date/datePresetNameConstants.d.ts +27 -0
  228. package/dist/formatters/date/datePresetNameConstants.d.ts.map +1 -0
  229. package/dist/formatters/date/dateRange.d.ts +3 -1
  230. package/dist/formatters/date/dateRange.d.ts.map +1 -1
  231. package/dist/formatters/date/dateValueConstants.d.ts +15 -0
  232. package/dist/formatters/date/dateValueConstants.d.ts.map +1 -0
  233. package/dist/formatters/date/educationDate.d.ts.map +1 -1
  234. package/dist/formatters/date/formatDate.d.ts.map +1 -1
  235. package/dist/formatters/date/formatInstantDateTime.d.ts.map +1 -1
  236. package/dist/formatters/date/parseDate.d.ts.map +1 -1
  237. package/dist/formatters/date/pattern.d.ts.map +1 -1
  238. package/dist/formatters/date/presets.d.ts.map +1 -1
  239. package/dist/formatters/date/types.d.ts +8 -6
  240. package/dist/formatters/date/types.d.ts.map +1 -1
  241. package/dist/formatters/formatDurationMinutes.d.ts.map +1 -1
  242. package/dist/formatters/formatFileSize.d.ts.map +1 -1
  243. package/dist/formatters/formatPhone.d.ts.map +1 -1
  244. package/dist/formatters/index.js +6 -6
  245. package/dist/formatters/normalizeLeadingZeros.d.ts.map +1 -1
  246. package/dist/formatters/number/compact.d.ts.map +1 -1
  247. package/dist/formatters/number/formatCompactNumber.d.ts.map +1 -1
  248. package/dist/formatters/number/formatNumber.d.ts.map +1 -1
  249. package/dist/formatters/number/numberFormatConstants.d.ts +11 -0
  250. package/dist/formatters/number/numberFormatConstants.d.ts.map +1 -0
  251. package/dist/formatters/number/numberPresetNameConstants.d.ts +16 -0
  252. package/dist/formatters/number/numberPresetNameConstants.d.ts.map +1 -0
  253. package/dist/formatters/number/parseNumber.d.ts.map +1 -1
  254. package/dist/formatters/number/presets.d.ts.map +1 -1
  255. package/dist/formatters/number/types.d.ts +2 -1
  256. package/dist/formatters/number/types.d.ts.map +1 -1
  257. package/dist/formatters/pipeline/clone.d.ts.map +1 -1
  258. package/dist/formatters/pipeline/definitions.d.ts.map +1 -1
  259. package/dist/formatters/pipeline/dependencies.d.ts.map +1 -1
  260. package/dist/formatters/pipeline/execute.d.ts +4 -1
  261. package/dist/formatters/pipeline/execute.d.ts.map +1 -1
  262. package/dist/formatters/pipeline/formattersPipelineConstants.d.ts +19 -0
  263. package/dist/formatters/pipeline/formattersPipelineConstants.d.ts.map +1 -0
  264. package/dist/formatters/pipeline/normalize.d.ts.map +1 -1
  265. package/dist/formatters/pipeline/pipelineValidationConstants.d.ts +40 -0
  266. package/dist/formatters/pipeline/pipelineValidationConstants.d.ts.map +1 -0
  267. package/dist/formatters/pipeline/registry.d.ts +1 -1
  268. package/dist/formatters/pipeline/registry.d.ts.map +1 -1
  269. package/dist/formatters/pipeline/rekey.d.ts.map +1 -1
  270. package/dist/formatters/pipeline/runtime.d.ts.map +1 -1
  271. package/dist/formatters/pipeline/types.d.ts +24 -21
  272. package/dist/formatters/pipeline/types.d.ts.map +1 -1
  273. package/dist/formatters/pipeline/validate.d.ts +2 -1
  274. package/dist/formatters/pipeline/validate.d.ts.map +1 -1
  275. package/dist/formatters/strings/spaceCharacterConstants.d.ts +5 -0
  276. package/dist/formatters/strings/spaceCharacterConstants.d.ts.map +1 -0
  277. package/dist/formatters/strings/stripInnerSpaces.d.ts.map +1 -1
  278. package/dist/formatters/strings/stripLeadingZeros.d.ts.map +1 -1
  279. package/dist/formatters/valueState/fixedValueStateResolver.d.ts.map +1 -1
  280. package/dist/formatters/valueState/presentation.d.ts.map +1 -1
  281. package/dist/formatters/valueState/resolveValueStateClassName.d.ts.map +1 -1
  282. package/dist/formatters/valueState/thresholdValueStateResolver.d.ts.map +1 -1
  283. package/dist/formatters/valueState/types.d.ts +2 -1
  284. package/dist/formatters/valueState/types.d.ts.map +1 -1
  285. package/dist/formatters/valueState/valueStateRegistry.d.ts.map +1 -1
  286. package/dist/formatters/valueState/valueStateResolverConstants.d.ts +6 -0
  287. package/dist/formatters/valueState/valueStateResolverConstants.d.ts.map +1 -0
  288. package/dist/formulas/execute.d.ts +3 -2
  289. package/dist/formulas/execute.d.ts.map +1 -1
  290. package/dist/formulas/index.js +1 -1
  291. package/dist/formulas/isTableFormulaDependency.d.ts.map +1 -1
  292. package/dist/formulas/tableFormulaConstants.d.ts +12 -0
  293. package/dist/formulas/tableFormulaConstants.d.ts.map +1 -0
  294. package/dist/formulas/types.d.ts +2 -1
  295. package/dist/formulas/types.d.ts.map +1 -1
  296. package/dist/formulas/validate.d.ts +2 -1
  297. package/dist/formulas/validate.d.ts.map +1 -1
  298. package/dist/hooks/index.js +110 -107
  299. package/dist/hooks/index.js.map +1 -1
  300. package/dist/hooks/useBlockBrowserZoom.d.ts.map +1 -1
  301. package/dist/hooks/useDndSortableSensors.d.ts.map +1 -1
  302. package/dist/hooks/useFloatingListbox.d.ts +15 -33
  303. package/dist/hooks/useFloatingListbox.d.ts.map +1 -1
  304. package/dist/http/index.js +8 -7
  305. package/dist/http/index.js.map +1 -1
  306. package/dist/http/textResponse.d.ts.map +1 -1
  307. package/dist/indexed-records/createIndexedRecordsSchema.d.ts.map +1 -1
  308. package/dist/indexed-records/schema.js +24 -23
  309. package/dist/indexed-records/schema.js.map +1 -1
  310. package/dist/media/breakpointConstants.d.ts +5 -0
  311. package/dist/media/breakpointConstants.d.ts.map +1 -0
  312. package/dist/media/breakpoints.d.ts +2 -1
  313. package/dist/media/breakpoints.d.ts.map +1 -1
  314. package/dist/media/createNotificationTonePlayer.d.ts.map +1 -1
  315. package/dist/media/getCurrentFontSize.d.ts.map +1 -1
  316. package/dist/media/index.js +1 -1
  317. package/dist/media/mediaQueryConstants.d.ts +3 -0
  318. package/dist/media/mediaQueryConstants.d.ts.map +1 -0
  319. package/dist/media/responsive.d.ts +1 -1
  320. package/dist/media/responsive.d.ts.map +1 -1
  321. package/dist/media/useMatchMedia.d.ts.map +1 -1
  322. package/dist/media/useMediaQuery.d.ts.map +1 -1
  323. package/dist/metadata/baseMetaTypes.d.ts.map +1 -1
  324. package/dist/metadata/metadataTypes.d.ts +8 -7
  325. package/dist/metadata/metadataTypes.d.ts.map +1 -1
  326. package/dist/metadata/scalarTypeClassification.d.ts.map +1 -1
  327. package/dist/metadata/scalarTypeConstants.d.ts +21 -0
  328. package/dist/metadata/scalarTypeConstants.d.ts.map +1 -0
  329. package/dist/notifications/index.js +62 -62
  330. package/dist/notifications/index.js.map +1 -1
  331. package/dist/notifications/notificationTypeConstants.d.ts +6 -0
  332. package/dist/notifications/notificationTypeConstants.d.ts.map +1 -0
  333. package/dist/notifications/notify.d.ts.map +1 -1
  334. package/dist/notifications/store.d.ts.map +1 -1
  335. package/dist/notifications/types.d.ts +2 -1
  336. package/dist/notifications/types.d.ts.map +1 -1
  337. package/dist/number-scale/index.js +47 -46
  338. package/dist/number-scale/index.js.map +1 -1
  339. package/dist/number-scale/marksPositionConstants.d.ts +4 -0
  340. package/dist/number-scale/marksPositionConstants.d.ts.map +1 -0
  341. package/dist/number-scale/numberScale.d.ts +1 -1
  342. package/dist/number-scale/numberScale.d.ts.map +1 -1
  343. package/dist/number-scale/types.d.ts +2 -1
  344. package/dist/number-scale/types.d.ts.map +1 -1
  345. package/dist/odata-service/builder.d.ts.map +1 -1
  346. package/dist/odata-service/columns.d.ts.map +1 -1
  347. package/dist/odata-service/entityOperationConstants.d.ts +4 -0
  348. package/dist/odata-service/entityOperationConstants.d.ts.map +1 -0
  349. package/dist/odata-service/filterDefinitionConstants.d.ts +24 -0
  350. package/dist/odata-service/filterDefinitionConstants.d.ts.map +1 -0
  351. package/dist/odata-service/filterDefinitions.d.ts +19 -17
  352. package/dist/odata-service/filterDefinitions.d.ts.map +1 -1
  353. package/dist/odata-service/filterOperationConstants.d.ts +14 -0
  354. package/dist/odata-service/filterOperationConstants.d.ts.map +1 -0
  355. package/dist/odata-service/filters.d.ts.map +1 -1
  356. package/dist/odata-service/formatters.d.ts.map +1 -1
  357. package/dist/odata-service/index.js +439 -433
  358. package/dist/odata-service/index.js.map +1 -1
  359. package/dist/odata-service/odataMetadataConstants.d.ts +8 -0
  360. package/dist/odata-service/odataMetadataConstants.d.ts.map +1 -0
  361. package/dist/odata-service/parser.d.ts +1 -3
  362. package/dist/odata-service/parser.d.ts.map +1 -1
  363. package/dist/odata-service/schema.d.ts.map +1 -1
  364. package/dist/odata-service/sorts.d.ts.map +1 -1
  365. package/dist/odata-service/sqlFilters.d.ts +10 -5
  366. package/dist/odata-service/sqlFilters.d.ts.map +1 -1
  367. package/dist/odata-service/types.d.ts +5 -3
  368. package/dist/odata-service/types.d.ts.map +1 -1
  369. package/dist/pwa/index.js +72 -71
  370. package/dist/pwa/index.js.map +1 -1
  371. package/dist/pwa/sw-cache-policy.js +47 -47
  372. package/dist/pwa/sw-cache-policy.js.map +1 -1
  373. package/dist/pwa/swCachePolicy.d.ts +5 -1
  374. package/dist/pwa/swCachePolicy.d.ts.map +1 -1
  375. package/dist/pwa/useBrowserOnlineStatus.d.ts.map +1 -1
  376. package/dist/query-client/broadcast.d.ts +4 -3
  377. package/dist/query-client/broadcast.d.ts.map +1 -1
  378. package/dist/query-client/createQueryRestoreSchedulerGuard.d.ts.map +1 -1
  379. package/dist/query-client/createQueryRestoreStorage.d.ts.map +1 -1
  380. package/dist/query-client/index.js +1 -1
  381. package/dist/query-client/invalidationBroadcast.d.ts +2 -1
  382. package/dist/query-client/invalidationBroadcast.d.ts.map +1 -1
  383. package/dist/query-client/persistence.d.ts +9 -6
  384. package/dist/query-client/persistence.d.ts.map +1 -1
  385. package/dist/query-client/queryCacheEventConstants.d.ts +11 -0
  386. package/dist/query-client/queryCacheEventConstants.d.ts.map +1 -0
  387. package/dist/query-client/queryClient.d.ts +2 -1
  388. package/dist/query-client/queryClient.d.ts.map +1 -1
  389. package/dist/query-client/queryMeta.d.ts.map +1 -1
  390. package/dist/query-client/sessionPersistenceConstants.d.ts +5 -0
  391. package/dist/query-client/sessionPersistenceConstants.d.ts.map +1 -0
  392. package/dist/query-client/sessionScoped.d.ts.map +1 -1
  393. package/dist/query-client/sessionScopedResetConstants.d.ts +4 -0
  394. package/dist/query-client/sessionScopedResetConstants.d.ts.map +1 -0
  395. package/dist/query-client/sessionScopedResetLifecycleTypes.d.ts +2 -1
  396. package/dist/query-client/sessionScopedResetLifecycleTypes.d.ts.map +1 -1
  397. package/dist/seo/index.js +0 -1
  398. package/dist/seo/index.js.map +1 -1
  399. package/dist/seo/seo.d.ts +3 -2
  400. package/dist/seo/seo.d.ts.map +1 -1
  401. package/dist/seo/seoContentTypeConstants.d.ts +6 -0
  402. package/dist/seo/seoContentTypeConstants.d.ts.map +1 -0
  403. package/dist/seo/types.d.ts +2 -1
  404. package/dist/seo/types.d.ts.map +1 -1
  405. package/dist/session-storage/index.js +1 -1
  406. package/dist/table/cellSelection.d.ts.map +1 -1
  407. package/dist/table/columnSizing.d.ts +11 -3
  408. package/dist/table/columnSizing.d.ts.map +1 -1
  409. package/dist/table/index.d.ts +1 -0
  410. package/dist/table/index.d.ts.map +1 -1
  411. package/dist/table/index.js +102 -92
  412. package/dist/table/index.js.map +1 -1
  413. package/dist/table/odataAdapter.d.ts +3 -3
  414. package/dist/table/odataAdapter.d.ts.map +1 -1
  415. package/dist/table/resolveTableColumnsWidth.d.ts +9 -0
  416. package/dist/table/resolveTableColumnsWidth.d.ts.map +1 -0
  417. package/dist/table/selection.d.ts +2 -2
  418. package/dist/table/selection.d.ts.map +1 -1
  419. package/dist/table/tableColumnConstants.d.ts +5 -0
  420. package/dist/table/tableColumnConstants.d.ts.map +1 -0
  421. package/dist/table/tableSelectionConstants.d.ts +8 -0
  422. package/dist/table/tableSelectionConstants.d.ts.map +1 -0
  423. package/dist/table/tanStackFeatures.d.ts +8 -8
  424. package/dist/table/types.d.ts +6 -4
  425. package/dist/table/types.d.ts.map +1 -1
  426. package/dist/table/useTableRowSelection.d.ts +2 -2
  427. package/dist/table/useTableRowSelection.d.ts.map +1 -1
  428. package/dist/table-document/index.js +88 -87
  429. package/dist/table-document/index.js.map +1 -1
  430. package/dist/table-document/insertTableDocumentAxis.d.ts +2 -1
  431. package/dist/table-document/insertTableDocumentAxis.d.ts.map +1 -1
  432. package/dist/table-document/tableDocument.d.ts +2 -1
  433. package/dist/table-document/tableDocument.d.ts.map +1 -1
  434. package/dist/table-document/tableDocumentAxisGroups.d.ts +4 -3
  435. package/dist/table-document/tableDocumentAxisGroups.d.ts.map +1 -1
  436. package/dist/table-document/tableDocumentConstants.d.ts +8 -0
  437. package/dist/table-document/tableDocumentConstants.d.ts.map +1 -0
  438. package/dist/table-document/tableDocumentGeometry.d.ts.map +1 -1
  439. package/dist/three-scene/index.js +32 -32
  440. package/dist/three-scene/index.js.map +1 -1
  441. package/dist/three-scene/threeSceneAvailability.d.ts +4 -3
  442. package/dist/three-scene/threeSceneAvailability.d.ts.map +1 -1
  443. package/dist/three-scene/threeSceneConstants.d.ts +14 -0
  444. package/dist/three-scene/threeSceneConstants.d.ts.map +1 -0
  445. package/dist/three-scene/useThreeSceneAvailability.d.ts.map +1 -1
  446. package/dist/tree-table/index.js +1 -1
  447. package/dist/types/abapBooleanConstants.d.ts +4 -0
  448. package/dist/types/abapBooleanConstants.d.ts.map +1 -0
  449. package/dist/types/index.js.map +1 -1
  450. package/dist/types/types.d.ts +4 -2
  451. package/dist/types/types.d.ts.map +1 -1
  452. package/dist/types/valueStateConstants.d.ts +8 -0
  453. package/dist/types/valueStateConstants.d.ts.map +1 -0
  454. package/dist/utils/cloneFunctionStrategyConstants.d.ts +4 -0
  455. package/dist/utils/cloneFunctionStrategyConstants.d.ts.map +1 -0
  456. package/dist/utils/createLazyComponent.d.ts.map +1 -1
  457. package/dist/utils/deepCloneWithoutFunctions.d.ts +2 -1
  458. package/dist/utils/deepCloneWithoutFunctions.d.ts.map +1 -1
  459. package/dist/utils/deepCopyWithoutFunctions.d.ts +2 -1
  460. package/dist/utils/deepCopyWithoutFunctions.d.ts.map +1 -1
  461. package/dist/utils/index.js +2 -209
  462. package/dist/utils/keyboard.d.ts +2 -1
  463. package/dist/utils/keyboard.d.ts.map +1 -1
  464. package/dist/utils/keyboardConstants.d.ts +16 -0
  465. package/dist/utils/keyboardConstants.d.ts.map +1 -0
  466. package/dist/validators/index.js +3 -3
  467. package/dist/validators/index.js.map +1 -1
  468. package/dist/validators/validateUrl.d.ts.map +1 -1
  469. package/dist/value-transformers/execute.d.ts.map +1 -1
  470. package/dist/value-transformers/index.js +9 -6
  471. package/dist/value-transformers/index.js.map +1 -1
  472. package/dist/value-transformers/types.d.ts +3 -2
  473. package/dist/value-transformers/types.d.ts.map +1 -1
  474. package/dist/value-transformers/valueTransformerConstants.d.ts +4 -0
  475. package/dist/value-transformers/valueTransformerConstants.d.ts.map +1 -0
  476. package/package.json +6 -5
  477. package/src/binary/README.mdx +1 -1
  478. package/src/dom/README.mdx +1 -1
  479. package/src/query-client/README.mdx +4 -4
  480. package/src/table/README.mdx +49 -23
  481. package/dist/chunks/dom-BK22UmgF.js.map +0 -1
  482. package/dist/chunks/formatDate-BUvpRI7H.js +0 -133
  483. package/dist/chunks/formatDate-BUvpRI7H.js.map +0 -1
  484. package/dist/chunks/formatters-rxriDRPk.js.map +0 -1
  485. package/dist/chunks/formulas-BXT_XBWI.js.map +0 -1
  486. package/dist/chunks/media-WK38KtMl.js +0 -191
  487. package/dist/chunks/media-WK38KtMl.js.map +0 -1
  488. package/dist/chunks/query-client-CVRfrYZM.js.map +0 -1
  489. package/dist/chunks/scalarTypeClassification-BZcFmIyR.js +0 -764
  490. package/dist/chunks/scalarTypeClassification-BZcFmIyR.js.map +0 -1
  491. package/dist/chunks/uuid-CUJPAbRY.js.map +0 -1
  492. package/dist/chunks/validate-DsUR-bFF.js +0 -608
  493. package/dist/chunks/validate-DsUR-bFF.js.map +0 -1
  494. package/dist/utils/index.js.map +0 -1
@@ -1,11 +1,12 @@
1
- import { d as e, i as t, u as n } from "../chunks/array-D-_yMMUK.js";
2
- import { useCallback as r, useEffect as i, useEffectEvent as a, useRef as o, useState as s } from "react";
3
- import { columnOrderingFeature as c, columnPinningFeature as l, columnResizingFeature as u, columnSizingFeature as d, columnVisibilityFeature as f, createExpandedRowModel as p, rowExpandingFeature as m, rowSelectionFeature as h, tableFeatures as g } from "@tanstack/react-table";
1
+ import { d as e, i as t, u as n } from "../chunks/array-bd7LYFto.js";
2
+ import { i as r } from "../chunks/scalarTypeConstants-CnSsjpGO.js";
3
+ import { useCallback as i, useEffect as a, useEffectEvent as o, useRef as s, useState as c } from "react";
4
+ import { columnOrderingFeature as l, columnPinningFeature as u, columnResizingFeature as d, columnSizingFeature as f, columnVisibilityFeature as p, createExpandedRowModel as m, rowExpandingFeature as h, rowSelectionFeature as g, tableFeatures as _ } from "@tanstack/react-table";
4
5
  //#region src/table/columnLayout.ts
5
- function _({ ids: n, order: r }) {
6
+ function v({ ids: n, order: r }) {
6
7
  return t(e(r, n), n);
7
8
  }
8
- function v({ ids: e, getWidth: t }) {
9
+ function ee({ ids: e, getWidth: t }) {
9
10
  return e.map((e) => ({
10
11
  id: e,
11
12
  width: t(e)
@@ -40,42 +41,48 @@ function S(e) {
40
41
  }
41
42
  //#endregion
42
43
  //#region src/table/columnSizing.ts
43
- var C = 60;
44
- function w(e, t = 60) {
45
- let n = Number.isFinite(t) && t > 0 ? Math.floor(t) : 60;
46
- return Math.max(n, Number.isFinite(e) ? Math.floor(e) : n);
47
- }
48
- function T(e, t = 60) {
49
- let n = {};
50
- for (let [r, i] of Object.entries(e ?? {})) typeof r != "string" || r.trim().length === 0 || !Number.isFinite(i) || (n[r] = w(i, t));
51
- return n;
52
- }
53
- function E(e, t, n, r = 60) {
54
- return t.trim().length === 0 ? T(e, r) : {
55
- ...T(e, r),
56
- [t]: w(n, r)
44
+ var C = 60, w = 4;
45
+ function T(e, t, n = "px") {
46
+ let r = n === "em" ? 4 : 60, i = n === "em" ? 1e4 : 1, a = typeof t == "number" && Number.isFinite(t) && t > 0 ? Math.floor(t * i) / i : r, o = Number.isFinite(e) ? Math.floor(e * i) / i : a;
47
+ return Math.max(a, o);
48
+ }
49
+ function E(e, t, n = "px") {
50
+ let r = {};
51
+ for (let [i, a] of Object.entries(e ?? {})) typeof i != "string" || i.trim().length === 0 || !Number.isFinite(a) || (r[i] = T(a, t, n));
52
+ return r;
53
+ }
54
+ function te(e, t, n, r, i = "px") {
55
+ return t.trim().length === 0 ? E(e, r, i) : {
56
+ ...E(e, r, i),
57
+ [t]: T(n, r, i)
57
58
  };
58
59
  }
59
- function D(e, t) {
60
+ function ne(e, t) {
60
61
  let n = {};
61
62
  for (let [r, i] of Object.entries(e)) r !== t && (n[r] = i);
62
63
  return n;
63
64
  }
64
65
  //#endregion
65
- //#region src/table/cellSelection.ts
66
- var O = /* @__PURE__ */ new Set(["direct", "primary-modifier"]);
67
- function k(e) {
66
+ //#region src/table/resolveTableColumnsWidth.ts
67
+ var re = /^(?:\d+(?:\.\d+)?|\.\d+)(?:em|px)$/;
68
+ function D(e) {
69
+ if (!(e.length === 0 || e.some((e) => !re.test(e)))) return e.length === 1 ? e[0] : `calc(${e.join(" + ")})`;
70
+ }
71
+ //#endregion
72
+ //#region src/table/tableSelectionConstants.ts
73
+ var O = "none", k = "single", A = "multi", j = "direct", M = /* @__PURE__ */ new Set([j, "primary-modifier"]);
74
+ function N(e) {
68
75
  return `${encodeURIComponent(e.rowId)}::${encodeURIComponent(e.columnId)}`;
69
76
  }
70
- function A(e, t) {
71
- let n = new Set(e.map(k)), r = new Set(t.map(k));
77
+ function P(e, t) {
78
+ let n = new Set(e.map(N)), r = new Set(t.map(N));
72
79
  return n.size === r.size && [...n].every((e) => r.has(e));
73
80
  }
74
- function j(e, t, n, r) {
81
+ function F(e, t, n, r) {
75
82
  if (r === "none" || !e?.length) return [];
76
83
  let i = new Map(t.map((e, t) => [e, t])), a = new Map(n.map((e, t) => [e, t])), o = /* @__PURE__ */ new Set(), s = e.filter((e) => {
77
84
  if (!(i.has(e.rowId) && a.has(e.columnId))) return !1;
78
- let t = k(e);
85
+ let t = N(e);
79
86
  return !o.has(t) && (o.add(t), !0);
80
87
  }).sort((e, t) => {
81
88
  let n = (i.get(e.rowId) ?? 0) - (i.get(t.rowId) ?? 0);
@@ -87,52 +94,55 @@ function j(e, t, n, r) {
87
94
  }
88
95
  return s;
89
96
  }
90
- function M(e, t, n) {
97
+ function I(e, t, n) {
91
98
  if (n === "none") return [];
92
- let r = k(t), i = e.some((e) => k(e) === r);
93
- return n === "single" ? i ? [] : [t] : i ? e.filter((e) => k(e) !== r) : [...e, t];
99
+ let r = N(t), i = e.some((e) => N(e) === r);
100
+ return n === "single" ? i ? [] : [t] : i ? e.filter((e) => N(e) !== r) : [...e, t];
94
101
  }
95
- function N(e, t = "direct") {
96
- return typeof e == "string" && O.has(e) ? e : t;
102
+ function L(e, t = j) {
103
+ return typeof e == "string" && M.has(e) ? e : t;
97
104
  }
98
- function P(e, t) {
105
+ function R(e, t) {
99
106
  return t === "direct" || (e.ctrlKey || e.metaKey) && !e.shiftKey && !e.altKey;
100
107
  }
101
108
  //#endregion
109
+ //#region src/table/tableColumnConstants.ts
110
+ var z = "left", B = "right";
111
+ //#endregion
102
112
  //#region src/table/odataAdapter.ts
103
- function F(e) {
113
+ function V(e) {
104
114
  let { role: t, type: n } = e;
105
115
  return {
106
- role: n === "decimal" || n === "float" || n === "double" || n === "int" || n === "byte" ? "measure" : t,
116
+ role: n === "decimal" || n === "float" || n === "double" || n === "int" || n === "byte" ? r : t,
107
117
  type: n
108
118
  };
109
119
  }
110
- function I(e) {
111
- return e.role === "measure" ? "right" : "left";
120
+ function H(e) {
121
+ return e.role === "measure" ? B : z;
112
122
  }
113
- function L(e, t) {
123
+ function ie(e, t) {
114
124
  return e.semanticType !== "code" || !e.linkedColumnId || t.get(e.linkedColumnId)?.semanticType !== "text";
115
125
  }
116
- function R(e) {
126
+ function U(e) {
117
127
  if (typeof e.id == "string" && e.id.trim()) return e.id;
118
128
  if ("accessorKey" in e && typeof e.accessorKey == "string" && e.accessorKey.trim()) return e.accessorKey;
119
129
  }
120
- function z(e, t) {
130
+ function W(e, t) {
121
131
  return e.map((e) => "columns" in e && Array.isArray(e.columns) && e.columns.length > 0 ? {
122
132
  ...e,
123
- columns: z(e.columns, t)
133
+ columns: W(e.columns, t)
124
134
  } : t(e));
125
135
  }
126
- function B(e, t) {
136
+ function G(e, t) {
127
137
  let n = new Map(e.map((e) => [e.id, e]));
128
138
  return Object.fromEntries(e.map((e) => {
129
- let r = t?.resolveVisible?.(e) ?? L(e, n);
139
+ let r = t?.resolveVisible?.(e) ?? ie(e, n);
130
140
  return [e.id, r];
131
141
  }));
132
142
  }
133
- function V(e, t) {
143
+ function K(e, t) {
134
144
  return e.map((e) => {
135
- let n = F(e), r = I(n), i = t?.resolveFormatting?.(e);
145
+ let n = V(e), r = H(n), i = t?.resolveFormatting?.(e);
136
146
  return {
137
147
  id: e.id,
138
148
  accessorKey: e.id,
@@ -149,17 +159,17 @@ function V(e, t) {
149
159
  };
150
160
  });
151
161
  }
152
- function H(e, t, n) {
162
+ function q(e, t, n) {
153
163
  let r = new Map(t.map((e) => [e.id, e]));
154
- return z(e, (e) => {
155
- let t = R(e);
164
+ return W(e, (e) => {
165
+ let t = U(e);
156
166
  if (!t) return e;
157
167
  let i = n?.resolveMetadataColumn?.({
158
168
  columnId: t,
159
169
  metadataColumnsById: r
160
170
  }) ?? r.get(t);
161
171
  if (!i || e.meta?.formatting?.role && e.meta.formatting.type) return e;
162
- let a = F(i);
172
+ let a = V(i);
163
173
  return {
164
174
  ...e,
165
175
  meta: {
@@ -176,34 +186,34 @@ function H(e, t, n) {
176
186
  }
177
187
  //#endregion
178
188
  //#region src/table/selection.ts
179
- var U = /* @__PURE__ */ new Set([
180
- "none",
181
- "single",
182
- "multi"
189
+ var J = /* @__PURE__ */ new Set([
190
+ O,
191
+ k,
192
+ A
183
193
  ]);
184
- function W(e) {
194
+ function Y(e) {
185
195
  return Object.keys(e).filter((t) => e[t]);
186
196
  }
187
- function G(e, t) {
188
- let n = W(e), r = W(t);
197
+ function ae(e, t) {
198
+ let n = Y(e), r = Y(t);
189
199
  return n.length === r.length && n.every((e) => t[e]);
190
200
  }
191
- function K(e, t = "none") {
192
- return typeof e == "string" && U.has(e) ? e : t;
201
+ function oe(e, t = O) {
202
+ return typeof e == "string" && J.has(e) ? e : t;
193
203
  }
194
- function q(e, t, n) {
204
+ function X(e, t, n) {
195
205
  if (n === "none") return {};
196
- let r = new Set(t), i = W(e).filter((e) => r.has(e));
206
+ let r = new Set(t), i = Y(e).filter((e) => r.has(e));
197
207
  if (n === "single") {
198
208
  let e = i.at(-1);
199
209
  return e ? { [e]: !0 } : {};
200
210
  }
201
211
  return Object.fromEntries(i.map((e) => [e, !0]));
202
212
  }
203
- function J(e, t, n) {
213
+ function Z(e, t, n) {
204
214
  if (n === "none") return {};
205
215
  if (n === "single") {
206
- let n = W(e);
216
+ let n = Y(e);
207
217
  return n.length === 1 && n[0] === t ? e : { [t]: !0 };
208
218
  }
209
219
  if (e[t]) {
@@ -217,28 +227,28 @@ function J(e, t, n) {
217
227
  }
218
228
  //#endregion
219
229
  //#region src/table/tanStackFeatures.ts
220
- var Y = g({
221
- columnOrderingFeature: c,
222
- columnPinningFeature: l,
223
- columnSizingFeature: d,
224
- columnResizingFeature: u,
225
- columnVisibilityFeature: f,
226
- rowSelectionFeature: h,
227
- rowExpandingFeature: m,
228
- expandedRowModel: p()
230
+ var se = _({
231
+ columnOrderingFeature: l,
232
+ columnPinningFeature: u,
233
+ columnSizingFeature: f,
234
+ columnResizingFeature: d,
235
+ columnVisibilityFeature: p,
236
+ rowSelectionFeature: g,
237
+ rowExpandingFeature: h,
238
+ expandedRowModel: m()
229
239
  });
230
240
  //#endregion
231
241
  //#region src/table/useTableRowSelection.ts
232
- function X({ availableRowIds: e, rowById: t, selectionMode: n, selectedRowIds: c, onRowSelectionChange: l }) {
233
- let [u, d] = s({}), f = o(!1), p = r((e, t) => {
242
+ function Q({ availableRowIds: e, rowById: t, selectionMode: n, selectedRowIds: r, onRowSelectionChange: l }) {
243
+ let [u, d] = c({}), f = s(!1), p = i((e, t) => {
234
244
  let n = Object.keys(e).filter((t) => e[t]), r = Object.keys(t).filter((e) => t[e]);
235
245
  return n.length === r.length && n.every((e) => t[e]);
236
- }, []), m = a((e) => {
237
- d((t) => q(t, e, n));
238
- }), h = a((e, t) => {
239
- let r = q(Object.fromEntries(e.map((e) => [e, !0])), t, n);
246
+ }, []), m = o((e) => {
247
+ d((t) => X(t, e, n));
248
+ }), h = o((e, t) => {
249
+ let r = X(Object.fromEntries(e.map((e) => [e, !0])), t, n);
240
250
  d((e) => p(e, r) ? e : (f.current = !0, r));
241
- }), g = a((e) => {
251
+ }), g = o((e) => {
242
252
  if (!l) return;
243
253
  let n = [];
244
254
  for (let r of Object.keys(e)) {
@@ -248,17 +258,17 @@ function X({ availableRowIds: e, rowById: t, selectionMode: n, selectedRowIds: c
248
258
  }
249
259
  l(n);
250
260
  });
251
- return i(() => {
252
- if (c !== void 0) {
253
- h(c, e);
261
+ return a(() => {
262
+ if (r !== void 0) {
263
+ h(r, e);
254
264
  return;
255
265
  }
256
266
  m(e);
257
267
  }, [
258
268
  e,
259
- c,
269
+ r,
260
270
  n
261
- ]), i(() => {
271
+ ]), a(() => {
262
272
  if (f.current) {
263
273
  f.current = !1;
264
274
  return;
@@ -267,31 +277,31 @@ function X({ availableRowIds: e, rowById: t, selectionMode: n, selectedRowIds: c
267
277
  }, [u]), {
268
278
  rowSelection: u,
269
279
  setRowSelection: d,
270
- activateRowSelection: r((e, t) => {
271
- n === "none" || !t || d((t) => J(t, e, n));
280
+ activateRowSelection: i((e, t) => {
281
+ n === "none" || !t || d((t) => Z(t, e, n));
272
282
  }, [n])
273
283
  };
274
284
  }
275
285
  //#endregion
276
286
  //#region src/table/utils.ts
277
- var Z = (/* @__PURE__ */ "button.a.input.select.textarea.label.summary.audio[controls].video[controls].[contenteditable]:not([contenteditable=\"false\"]).[tabindex]:not(td):not(th):not(tr).[draggable=\"true\"].[role=\"button\"].[role=\"link\"].[role=\"checkbox\"].[role=\"radio\"].[role=\"switch\"].[role=\"menu\"].[role=\"menuitem\"].[role=\"menuitemcheckbox\"].[role=\"menuitemradio\"].[role=\"listbox\"].[role=\"option\"].[role=\"tab\"].[role=\"tablist\"].[role=\"tree\"].[role=\"treeitem\"].[role=\"slider\"].[role=\"spinbutton\"].[role=\"textbox\"].[role=\"searchbox\"].[role=\"combobox\"]".split(".")).join(", ");
278
- function Q(e) {
287
+ var $ = (/* @__PURE__ */ "button.a.input.select.textarea.label.summary.audio[controls].video[controls].[contenteditable]:not([contenteditable=\"false\"]).[tabindex]:not(td):not(th):not(tr).[draggable=\"true\"].[role=\"button\"].[role=\"link\"].[role=\"checkbox\"].[role=\"radio\"].[role=\"switch\"].[role=\"menu\"].[role=\"menuitem\"].[role=\"menuitemcheckbox\"].[role=\"menuitemradio\"].[role=\"listbox\"].[role=\"option\"].[role=\"tab\"].[role=\"tablist\"].[role=\"tree\"].[role=\"treeitem\"].[role=\"slider\"].[role=\"spinbutton\"].[role=\"textbox\"].[role=\"searchbox\"].[role=\"combobox\"]".split(".")).join(", ");
288
+ function ce(e) {
279
289
  return e.meta;
280
290
  }
281
- function $(e) {
291
+ function le(e) {
282
292
  return e.meta?.formatting;
283
293
  }
284
- function ee(e) {
294
+ function ue(e) {
285
295
  return typeof e == "number" ? `${e}em` : e;
286
296
  }
287
- function te(e, t) {
297
+ function de(e, t) {
288
298
  if (typeof Element > "u" || !(e instanceof Element)) return !1;
289
- let n = t ? `${Z}, ${t}` : Z, r = e.closest(n);
299
+ let n = t ? `${$}, ${t}` : $, r = e.closest(n);
290
300
  if (!r) return !1;
291
301
  let i = e.closest("tr");
292
302
  return !i || i.contains(r);
293
303
  }
294
304
  //#endregion
295
- export { C as DEFAULT_TABLE_COLUMN_MIN_WIDTH, A as areTableCellSelectionsEqual, G as areTableRowSelectionsEqual, v as buildTableColumnLayout, B as createTableColumnVisibilityFromODataMetadata, V as createTableColumnsFromODataMetadata, H as enrichTableColumnsWithODataFormatting, Y as foundationTableFeatures, $ as getTableColumnFormattingMeta, Q as getTableColumnMeta, te as isTableInteractiveElement, N as normalizeTableCellSelectionActivationMode, y as normalizeTableColumnOrder, T as normalizeTableColumnSizing, w as normalizeTableColumnWidth, K as normalizeTableSelectionMode, E as patchTableColumnWidth, j as pruneTableCellSelection, q as pruneTableRowSelection, D as removeTableColumnWidth, x as reorderTableHeaderColumns, S as resolveReorderedTableHeaderColumns, R as resolveStableColumnId, F as resolveTableColumnFormattingContextFromODataColumn, _ as resolveTableColumnOrder, ee as resolveTableLength, P as shouldActivateTableCellSelection, M as toggleTableCellSelection, J as toggleTableRowSelection, X as useTableRowSelection };
305
+ export { C as DEFAULT_TABLE_COLUMN_MIN_WIDTH, w as DEFAULT_TABLE_COLUMN_MIN_WIDTH_EM, P as areTableCellSelectionsEqual, ae as areTableRowSelectionsEqual, ee as buildTableColumnLayout, G as createTableColumnVisibilityFromODataMetadata, K as createTableColumnsFromODataMetadata, q as enrichTableColumnsWithODataFormatting, se as foundationTableFeatures, le as getTableColumnFormattingMeta, ce as getTableColumnMeta, de as isTableInteractiveElement, L as normalizeTableCellSelectionActivationMode, y as normalizeTableColumnOrder, E as normalizeTableColumnSizing, T as normalizeTableColumnWidth, oe as normalizeTableSelectionMode, te as patchTableColumnWidth, F as pruneTableCellSelection, X as pruneTableRowSelection, ne as removeTableColumnWidth, x as reorderTableHeaderColumns, S as resolveReorderedTableHeaderColumns, U as resolveStableColumnId, V as resolveTableColumnFormattingContextFromODataColumn, v as resolveTableColumnOrder, D as resolveTableColumnsWidth, ue as resolveTableLength, R as shouldActivateTableCellSelection, I as toggleTableCellSelection, Z as toggleTableRowSelection, Q as useTableRowSelection };
296
306
 
297
307
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/table/columnLayout.ts","../../src/table/columnOrder.ts","../../src/table/columnSizing.ts","../../src/table/cellSelection.ts","../../src/table/odataAdapter.ts","../../src/table/selection.ts","../../src/table/tanStackFeatures.ts","../../src/table/useTableRowSelection.ts","../../src/table/utils.ts"],"sourcesContent":["import { appendMissingIds, filterAndDeduplicateIds } from \"../array\";\n\nexport type TableColumnLayoutItem<TColumnId extends string = string, TWidth = number> = {\n\tid: TColumnId;\n\twidth: TWidth;\n};\n\nexport type ResolveTableColumnOrderArgs<TColumnId extends string = string> = {\n\tids: readonly TColumnId[];\n\torder?: readonly string[];\n};\n\nexport type BuildTableColumnLayoutArgs<TColumnId extends string = string, TWidth = number> = {\n\tids: readonly TColumnId[];\n\tgetWidth: (id: TColumnId) => TWidth;\n};\n\n/**\n * Возвращает порядок колонок как в AnalyticalTable: сначала сохранённый order,\n * затем новые или отсутствующие в order id. Ширины при этом остаются привязаны\n * к columnId, а не к визуальной позиции.\n */\nexport function resolveTableColumnOrder<TColumnId extends string>({ ids, order }: ResolveTableColumnOrderArgs<TColumnId>): TColumnId[] {\n\treturn appendMissingIds(filterAndDeduplicateIds(order, ids), ids);\n}\n\n/**\n * Строит layout колонок из уже вычисленного порядка и функции ширины по id.\n */\nexport function buildTableColumnLayout<TColumnId extends string, TWidth>({\n\tids,\n\tgetWidth\n}: BuildTableColumnLayoutArgs<TColumnId, TWidth>): TableColumnLayoutItem<TColumnId, TWidth>[] {\n\treturn ids.map((id) => ({\n\t\tid,\n\t\twidth: getWidth(id)\n\t}));\n}\n","import { arraysEqual } from \"../array\";\n\nexport type ReorderTableHeaderColumnsArgs = {\n\torder: readonly string[];\n\theaderIds: readonly string[];\n\tlockedIds?: readonly string[];\n\tpinnedIds?: readonly string[];\n\tactiveId: string;\n\toverId: string;\n};\n\nexport type TableColumnOrderState = string[];\n\nexport function normalizeTableColumnOrder(order: readonly string[] | undefined): TableColumnOrderState {\n\treturn Array.from(new Set((order ?? []).filter((columnId) => columnId.trim().length > 0)));\n}\n\nfunction moveItem<T>(items: readonly T[], fromIndex: number, toIndex: number): T[] {\n\tconst nextItems = [...items];\n\tconst [item] = nextItems.splice(fromIndex, 1);\n\n\tif (item === undefined) {\n\t\treturn nextItems;\n\t}\n\n\tnextItems.splice(toIndex, 0, item);\n\treturn nextItems;\n}\n\n/**\n * Переставляет только верхнеуровневые колонки табличной шапки.\n *\n * Ограничения:\n * - дочерние колонки групп не являются самостоятельными draggable-элементами;\n * - locked-колонки остаются в фиксированном порядке;\n * - pinned-колонки не переносятся между закреплённой и обычной зонами.\n */\nexport function reorderTableHeaderColumns(args: ReorderTableHeaderColumnsArgs): string[] {\n\tconst { activeId, overId, order } = args;\n\tif (!activeId || !overId || activeId === overId) return [...order];\n\n\tconst headerSet = new Set(args.headerIds);\n\tif (!headerSet.has(activeId) || !headerSet.has(overId)) return [...order];\n\n\tconst lockedSet = new Set(args.lockedIds ?? []);\n\tif (lockedSet.has(activeId) || lockedSet.has(overId)) return [...order];\n\n\tconst pinnedSet = new Set(args.pinnedIds ?? []);\n\tif (pinnedSet.has(activeId) || pinnedSet.has(overId)) return [...order];\n\n\tconst nextOrder = [...order];\n\tif (!nextOrder.includes(activeId)) {\n\t\tnextOrder.push(activeId);\n\t}\n\tif (!nextOrder.includes(overId)) {\n\t\tnextOrder.push(overId);\n\t}\n\n\tconst fromIndex = nextOrder.indexOf(activeId);\n\tconst toIndex = nextOrder.indexOf(overId);\n\tif (fromIndex === -1 || toIndex === -1 || fromIndex === toIndex) return nextOrder;\n\n\treturn moveItem(nextOrder, fromIndex, toIndex);\n}\n\nexport function resolveReorderedTableHeaderColumns(args: ReorderTableHeaderColumnsArgs): string[] | null {\n\tconst nextOrder = reorderTableHeaderColumns(args);\n\n\treturn arraysEqual(nextOrder, args.order) ? null : nextOrder;\n}\n","export type TableColumnSizingState = Record<string, number>;\n\nexport const DEFAULT_TABLE_COLUMN_MIN_WIDTH = 60;\n\nexport function normalizeTableColumnWidth(px: number, minWidth: number = DEFAULT_TABLE_COLUMN_MIN_WIDTH): number {\n\tconst normalizedMinWidth = Number.isFinite(minWidth) && minWidth > 0 ? Math.floor(minWidth) : DEFAULT_TABLE_COLUMN_MIN_WIDTH;\n\tconst normalizedWidth = Number.isFinite(px) ? Math.floor(px) : normalizedMinWidth;\n\n\treturn Math.max(normalizedMinWidth, normalizedWidth);\n}\n\nexport function normalizeTableColumnSizing(\n\tstate: Readonly<Record<string, number>> | undefined,\n\tminWidth: number = DEFAULT_TABLE_COLUMN_MIN_WIDTH\n): TableColumnSizingState {\n\tconst nextState: TableColumnSizingState = {};\n\n\tfor (const [columnId, width] of Object.entries(state ?? {})) {\n\t\tif (typeof columnId !== \"string\" || columnId.trim().length === 0 || !Number.isFinite(width)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tnextState[columnId] = normalizeTableColumnWidth(width, minWidth);\n\t}\n\n\treturn nextState;\n}\n\nexport function patchTableColumnWidth(\n\tstate: Readonly<Record<string, number>>,\n\tcolumnId: string,\n\twidth: number,\n\tminWidth: number = DEFAULT_TABLE_COLUMN_MIN_WIDTH\n): TableColumnSizingState {\n\tif (columnId.trim().length === 0) {\n\t\treturn normalizeTableColumnSizing(state, minWidth);\n\t}\n\n\treturn {\n\t\t...normalizeTableColumnSizing(state, minWidth),\n\t\t[columnId]: normalizeTableColumnWidth(width, minWidth)\n\t};\n}\n\nexport function removeTableColumnWidth(state: Readonly<Record<string, number>>, columnId: string): TableColumnSizingState {\n\tconst nextState: TableColumnSizingState = {};\n\n\tfor (const [key, width] of Object.entries(state)) {\n\t\tif (key !== columnId) {\n\t\t\tnextState[key] = width;\n\t\t}\n\t}\n\n\treturn nextState;\n}\n","import {\n\ttype TableCellCoordinates,\n\ttype TableCellSelectionActivationMode,\n\ttype TableCellSelectionMode,\n\ttype TableCellSelectionState,\n\ttype TableSelectionModifierEvent\n} from \"./types\";\n\nconst TABLE_CELL_SELECTION_ACTIVATION_MODES: ReadonlySet<TableCellSelectionActivationMode> = new Set([\"direct\", \"primary-modifier\"]);\n\n/** Строит collision-safe identity координат для дедупликации и сравнения. */\nfunction buildTableCellKey(cell: TableCellCoordinates): string {\n\treturn `${encodeURIComponent(cell.rowId)}::${encodeURIComponent(cell.columnId)}`;\n}\n\n/** Проверяет равенство двух наборов координат без зависимости от порядка. */\nexport function areTableCellSelectionsEqual(left: TableCellSelectionState, right: TableCellSelectionState): boolean {\n\tconst leftKeys = new Set(left.map(buildTableCellKey));\n\tconst rightKeys = new Set(right.map(buildTableCellKey));\n\n\tif (leftKeys.size !== rightKeys.size) {\n\t\treturn false;\n\t}\n\n\treturn [...leftKeys].every((key) => rightKeys.has(key));\n}\n\n/**\n * Оставляет только доступные координаты и приводит их к порядку строк/колонок.\n *\n * Функция не мутирует входные массивы. В `single` последняя координата в\n * детерминированном порядке становится единственным выбранным значением.\n */\nexport function pruneTableCellSelection(\n\tselection: TableCellSelectionState | undefined,\n\tavailableRowIds: readonly string[],\n\tavailableColumnIds: readonly string[],\n\tselectionMode: TableCellSelectionMode\n): TableCellCoordinates[] {\n\tif (selectionMode === \"none\" || !selection?.length) {\n\t\treturn [];\n\t}\n\n\tconst rowOrder = new Map(availableRowIds.map((rowId, index) => [rowId, index]));\n\tconst columnOrder = new Map(availableColumnIds.map((columnId, index) => [columnId, index]));\n\tconst seen = new Set<string>();\n\tconst nextSelection = selection\n\t\t.filter((cell) => {\n\t\t\tif (!(rowOrder.has(cell.rowId) && columnOrder.has(cell.columnId))) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst key = buildTableCellKey(cell);\n\t\t\tif (seen.has(key)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tseen.add(key);\n\t\t\treturn true;\n\t\t})\n\t\t.sort((left, right) => {\n\t\t\tconst rowDelta = (rowOrder.get(left.rowId) ?? 0) - (rowOrder.get(right.rowId) ?? 0);\n\t\t\tif (rowDelta !== 0) {\n\t\t\t\treturn rowDelta;\n\t\t\t}\n\n\t\t\treturn (columnOrder.get(left.columnId) ?? 0) - (columnOrder.get(right.columnId) ?? 0);\n\t\t});\n\n\tif (selectionMode === \"single\") {\n\t\tconst lastCell = nextSelection.at(-1);\n\t\treturn lastCell ? [lastCell] : [];\n\t}\n\n\treturn nextSelection;\n}\n\n/**\n * Вычисляет следующее состояние после активации ячейки.\n *\n * Одиночный выбор допускает явное снятие повторной активацией, а `multi`\n * переключает только переданную координату.\n */\nexport function toggleTableCellSelection(\n\tselection: TableCellSelectionState,\n\tcell: TableCellCoordinates,\n\tselectionMode: TableCellSelectionMode\n): TableCellCoordinates[] {\n\tif (selectionMode === \"none\") {\n\t\treturn [];\n\t}\n\n\tconst cellKey = buildTableCellKey(cell);\n\tconst hasCell = selection.some((item) => buildTableCellKey(item) === cellKey);\n\n\tif (selectionMode === \"single\") {\n\t\treturn hasCell ? [] : [cell];\n\t}\n\n\treturn hasCell ? selection.filter((item) => buildTableCellKey(item) !== cellKey) : [...selection, cell];\n}\n\n/** Нормализует способ активации ячейки на внешней config-boundary. */\nexport function normalizeTableCellSelectionActivationMode(\n\tvalue: unknown,\n\tfallback: TableCellSelectionActivationMode = \"direct\"\n): TableCellSelectionActivationMode {\n\treturn typeof value === \"string\" && TABLE_CELL_SELECTION_ACTIVATION_MODES.has(value as TableCellSelectionActivationMode)\n\t\t? (value as TableCellSelectionActivationMode)\n\t\t: fallback;\n}\n\n/**\n * Проверяет, должно ли событие активировать выбор ячейки.\n *\n * Для `primary-modifier` принимается Ctrl или Command, но не комбинации с\n * Shift/Alt: они зарезервированы браузером, ОС и стандартными selection-flow.\n */\nexport function shouldActivateTableCellSelection(\n\tevent: TableSelectionModifierEvent,\n\tactivationMode: TableCellSelectionActivationMode\n): boolean {\n\tif (activationMode === \"direct\") {\n\t\treturn true;\n\t}\n\n\treturn (event.ctrlKey || event.metaKey) && !event.shiftKey && !event.altKey;\n}\n","import type { FormattersPipelineTypedValueContext } from \"../formatters/pipeline\";\nimport type { EntityColumnProperty } from \"../odata-service\";\nimport type { TableColumnAlign, TableColumnDef, TableColumnFormattingMetaInput } from \"./types\";\n\n/**\n * Опции генерации колонок по OData metadata.\n */\nexport interface CreateTableColumnsFromODataMetadataOptions {\n\t/**\n\t * Позволяет переопределить заголовок колонки.\n\t */\n\tresolveHeader?: (column: EntityColumnProperty) => string;\n\t/**\n\t * Позволяет сразу навесить formatting-конфиг на generated column.\n\t *\n\t * `id`, `role` и `type` будут автоматически получены из metadata.\n\t */\n\tresolveFormatting?: (column: EntityColumnProperty) => TableColumnFormattingMetaInput | undefined;\n}\n\n/**\n * Опции обогащения уже существующих колонок данными OData metadata.\n */\nexport interface EnrichTableColumnsWithODataFormattingOptions {\n\t/**\n\t * Позволяет подменить стратегию поиска metadata по колонке.\n\t */\n\tresolveMetadataColumn?: (args: {\n\t\tcolumnId: string;\n\t\tmetadataColumnsById: ReadonlyMap<string, EntityColumnProperty>;\n\t}) => EntityColumnProperty | undefined;\n}\n\n/**\n * Опции построения стартовой карты видимости колонок по OData metadata.\n */\nexport interface CreateTableColumnVisibilityFromODataMetadataOptions {\n\t/**\n\t * Позволяет явно переопределить стартовую видимость колонки.\n\t */\n\tresolveVisible?: (column: EntityColumnProperty) => boolean;\n}\n\n/**\n * Возвращает typed-formatting контекст по metadata OData-колонки.\n */\nexport function resolveTableColumnFormattingContextFromODataColumn(column: EntityColumnProperty): FormattersPipelineTypedValueContext {\n\tconst { role, type } = column;\n\tconst forceMeasure = type === \"decimal\" || type === \"float\" || type === \"double\" || type === \"int\" || type === \"byte\";\n\n\treturn {\n\t\trole: forceMeasure ? \"measure\" : role,\n\t\ttype: type\n\t};\n}\n\n/**\n * Создаёт базовое выравнивание по семантике OData-колонки.\n *\n * NOTE: \"не аналитические\" все поля возвращают как \"dimension\"...\n */\nfunction resolveTableColumnAlignFromODataColumn(columnContext: FormattersPipelineTypedValueContext): TableColumnAlign {\n\treturn columnContext.role === \"measure\" ? \"right\" : \"left\";\n}\n\n/**\n * Определяет видимость metadata-колонки по умолчанию.\n *\n * Кодовые поля скрываются только если у них есть явная text-пара,\n * чтобы экран по умолчанию показывал человекочитаемое значение.\n */\nfunction resolveMetadataColumnVisibleByDefault(\n\tcolumn: EntityColumnProperty,\n\tmetadataColumnsById: ReadonlyMap<string, EntityColumnProperty>\n): boolean {\n\tif (column.semanticType !== \"code\" || !column.linkedColumnId) {\n\t\treturn true;\n\t}\n\n\tconst linkedColumn = metadataColumnsById.get(column.linkedColumnId);\n\n\treturn linkedColumn?.semanticType !== \"text\";\n}\n\n/**\n * Определяет стабильный идентификатор колонки для сопоставления с metadata.\n */\nexport function resolveStableColumnId<TData extends object>(column: TableColumnDef<TData>): string | undefined {\n\tif (typeof column.id === \"string\" && column.id.trim()) {\n\t\treturn column.id;\n\t}\n\n\tif (\"accessorKey\" in column && typeof column.accessorKey === \"string\" && column.accessorKey.trim()) {\n\t\treturn column.accessorKey;\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Рекурсивно обходит только leaf-колонки.\n */\nfunction mapLeafTableColumns<TData extends object>(\n\tcolumns: readonly TableColumnDef<TData>[],\n\tmapper: (column: TableColumnDef<TData>) => TableColumnDef<TData>\n): TableColumnDef<TData>[] {\n\treturn columns.map((column) => {\n\t\tif (\"columns\" in column && Array.isArray(column.columns) && column.columns.length > 0) {\n\t\t\treturn {\n\t\t\t\t...column,\n\t\t\t\tcolumns: mapLeafTableColumns(column.columns as TableColumnDef<TData>[], mapper)\n\t\t\t};\n\t\t}\n\n\t\treturn mapper(column);\n\t});\n}\n\n/**\n * Строит стартовую карту видимости колонок из metadata OData-сущности.\n *\n * Возвращает visibility-state для TanStack Table, не удаляя сами колонки\n * из результата build-режима.\n */\nexport function createTableColumnVisibilityFromODataMetadata(\n\tmetadataColumns: readonly EntityColumnProperty[],\n\toptions?: CreateTableColumnVisibilityFromODataMetadataOptions\n): Record<string, boolean> {\n\tconst metadataColumnsById = new Map(metadataColumns.map((column) => [column.id, column]));\n\n\treturn Object.fromEntries(\n\t\tmetadataColumns.map((column) => {\n\t\t\tconst visible = options?.resolveVisible?.(column) ?? resolveMetadataColumnVisibleByDefault(column, metadataColumnsById);\n\n\t\t\treturn [column.id, visible];\n\t\t})\n\t);\n}\n\n/**\n * Создаёт базовые generic-колонки из metadata OData-сущности.\n */\nexport function createTableColumnsFromODataMetadata<TData extends object = Record<string, unknown>>(\n\tmetadataColumns: readonly EntityColumnProperty[],\n\toptions?: CreateTableColumnsFromODataMetadataOptions\n): TableColumnDef<TData>[] {\n\treturn metadataColumns.map((metadataColumn) => {\n\t\t// NOTE: Ячейка сама определит выравнивание, `align` только для переопределения\n\t\tconst columnContext = resolveTableColumnFormattingContextFromODataColumn(metadataColumn);\n\t\tconst align = resolveTableColumnAlignFromODataColumn(columnContext);\n\t\tconst resolvedFormatting = options?.resolveFormatting?.(metadataColumn);\n\n\t\treturn {\n\t\t\tid: metadataColumn.id,\n\t\t\taccessorKey: metadataColumn.id,\n\t\t\theader: options?.resolveHeader?.(metadataColumn) ?? metadataColumn.label ?? metadataColumn.id,\n\t\t\tmeta: {\n\t\t\t\talign,\n\t\t\t\tformatting: {\n\t\t\t\t\t...resolvedFormatting,\n\t\t\t\t\tid: metadataColumn.id,\n\t\t\t\t\trole: columnContext.role,\n\t\t\t\t\ttype: columnContext.type\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}) as TableColumnDef<TData>[];\n}\n\n/**\n * Дозаполняет уже существующие колонки typed-formatting контекстом из OData metadata.\n */\nexport function enrichTableColumnsWithODataFormatting<TData extends object>(\n\tcolumns: readonly TableColumnDef<TData>[],\n\tmetadataColumns: readonly EntityColumnProperty[],\n\toptions?: EnrichTableColumnsWithODataFormattingOptions\n): TableColumnDef<TData>[] {\n\tconst metadataColumnsById = new Map(metadataColumns.map((column) => [column.id, column]));\n\n\treturn mapLeafTableColumns(columns, (column) => {\n\t\tconst columnId = resolveStableColumnId(column);\n\t\tif (!columnId) {\n\t\t\treturn column;\n\t\t}\n\n\t\tconst metadataColumn =\n\t\t\toptions?.resolveMetadataColumn?.({\n\t\t\t\tcolumnId,\n\t\t\t\tmetadataColumnsById\n\t\t\t}) ?? metadataColumnsById.get(columnId);\n\n\t\tif (!metadataColumn) {\n\t\t\treturn column;\n\t\t}\n\n\t\tif (column.meta?.formatting?.role && column.meta.formatting.type) {\n\t\t\treturn column;\n\t\t}\n\t\tconst columnContext = resolveTableColumnFormattingContextFromODataColumn(metadataColumn);\n\n\t\treturn {\n\t\t\t...column,\n\t\t\tmeta: {\n\t\t\t\t...column.meta,\n\t\t\t\tformatting: {\n\t\t\t\t\t...column.meta?.formatting,\n\t\t\t\t\tid: columnId,\n\t\t\t\t\trole: columnContext.role,\n\t\t\t\t\ttype: columnContext.type\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n","import { RowSelectionState } from \"@tanstack/react-table\";\n\nimport { TableSelectionMode } from \"./types\";\n\nconst TABLE_SELECTION_MODES: ReadonlySet<TableSelectionMode> = new Set([\"none\", \"single\", \"multi\"]);\n\n/**\n * Возвращает только активные идентификаторы выбранных строк.\n */\nfunction getSelectedRowIds(selection: RowSelectionState): string[] {\n\treturn Object.keys(selection).filter((rowId) => selection[rowId]);\n}\n\n/** Проверяет равенство активных row-selection идентификаторов без учёта порядка ключей. */\nexport function areTableRowSelectionsEqual(left: RowSelectionState, right: RowSelectionState): boolean {\n\tconst leftRowIds = getSelectedRowIds(left);\n\tconst rightRowIds = getSelectedRowIds(right);\n\n\tif (leftRowIds.length !== rightRowIds.length) {\n\t\treturn false;\n\t}\n\n\treturn leftRowIds.every((rowId) => right[rowId]);\n}\n\n/** Нормализует неизвестное значение режима выбора строк на внешней config-boundary. */\nexport function normalizeTableSelectionMode(value: unknown, fallback: TableSelectionMode = \"none\"): TableSelectionMode {\n\treturn typeof value === \"string\" && TABLE_SELECTION_MODES.has(value as TableSelectionMode) ? (value as TableSelectionMode) : fallback;\n}\n\n/**\n * Нормализует состояние выбора относительно списка доступных строк и текущего режима.\n */\nexport function pruneTableRowSelection(\n\tselection: RowSelectionState,\n\tavailableRowIds: readonly string[],\n\tselectionMode: TableSelectionMode\n): RowSelectionState {\n\tif (selectionMode === \"none\") {\n\t\treturn {};\n\t}\n\n\tconst availableRowIdSet = new Set(availableRowIds);\n\tconst selectedRowIds = getSelectedRowIds(selection).filter((rowId) => availableRowIdSet.has(rowId));\n\n\tif (selectionMode === \"single\") {\n\t\tconst lastSelectedRowId = selectedRowIds.at(-1);\n\n\t\treturn lastSelectedRowId ? { [lastSelectedRowId]: true } : {};\n\t}\n\n\treturn Object.fromEntries(selectedRowIds.map((rowId) => [rowId, true]));\n}\n\n/**\n * Вычисляет следующее состояние выбора после активации строки пользователем.\n *\n * Семантика:\n * - `none` не хранит выбор;\n * - `single` всегда оставляет только одну строку и не снимает выбор повторным кликом;\n * - `multi` переключает строку как toggle.\n */\nexport function toggleTableRowSelection(selection: RowSelectionState, rowId: string, selectionMode: TableSelectionMode): RowSelectionState {\n\tif (selectionMode === \"none\") {\n\t\treturn {};\n\t}\n\n\tif (selectionMode === \"single\") {\n\t\tconst selectedRowIds = getSelectedRowIds(selection);\n\t\treturn selectedRowIds.length === 1 && selectedRowIds[0] === rowId ? selection : { [rowId]: true };\n\t}\n\n\tif (selection[rowId]) {\n\t\tconst nextSelection = { ...selection };\n\n\t\tdelete nextSelection[rowId];\n\n\t\treturn nextSelection;\n\t}\n\n\treturn {\n\t\t...selection,\n\t\t[rowId]: true\n\t};\n}\n","import {\n\tcolumnOrderingFeature,\n\tcolumnPinningFeature,\n\tcolumnResizingFeature,\n\tcolumnSizingFeature,\n\tcolumnVisibilityFeature,\n\tcreateExpandedRowModel,\n\trowExpandingFeature,\n\trowSelectionFeature,\n\ttableFeatures\n} from \"@tanstack/react-table\";\n\n/**\n * Единый набор TanStack Table v9 features для foundation-таблиц.\n *\n * Контракт хранится в `lib`, чтобы определения колонок, строк и экземпляров\n * таблицы в `lib` и `ui` всегда использовали один и тот же набор generic-типов.\n */\nexport const foundationTableFeatures = tableFeatures({\n\tcolumnOrderingFeature,\n\tcolumnPinningFeature,\n\tcolumnSizingFeature,\n\tcolumnResizingFeature,\n\tcolumnVisibilityFeature,\n\trowSelectionFeature,\n\trowExpandingFeature,\n\texpandedRowModel: createExpandedRowModel()\n});\n\n/** Generic-контракт features для публичных типов foundation-таблиц. */\nexport type FoundationTableFeatures = typeof foundationTableFeatures;\n","import { useCallback, useEffect, useEffectEvent, useRef, useState } from \"react\";\n\nimport { RowSelectionState } from \"@tanstack/react-table\";\n\nimport { pruneTableRowSelection, toggleTableRowSelection } from \"./selection\";\nimport { TableSelectionMode } from \"./types\";\n\ninterface UseTableRowSelectionParams<TData extends object> {\n\tavailableRowIds: readonly string[];\n\trowById: ReadonlyMap<string, TData>;\n\tselectionMode: TableSelectionMode;\n\tselectedRowIds?: readonly string[];\n\tonRowSelectionChange?: (rows: TData[]) => void;\n}\n\n/**\n * Общая модель выбора строк для плоской и древовидной таблиц.\n */\nexport function useTableRowSelection<TData extends object>({\n\tavailableRowIds,\n\trowById,\n\tselectionMode,\n\tselectedRowIds,\n\tonRowSelectionChange\n}: UseTableRowSelectionParams<TData>) {\n\tconst [rowSelection, setRowSelection] = useState<RowSelectionState>({});\n\tconst shouldSkipNextSelectionEmitRef = useRef(false);\n\n\t/**\n\t * Сравнивает состояния выбора без лишних перерисовок.\n\t */\n\tconst areSelectionsEqual = useCallback((left: RowSelectionState, right: RowSelectionState) => {\n\t\tconst leftRowIds = Object.keys(left).filter((rowId) => left[rowId]);\n\t\tconst rightRowIds = Object.keys(right).filter((rowId) => right[rowId]);\n\n\t\tif (leftRowIds.length !== rightRowIds.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn leftRowIds.every((rowId) => right[rowId]);\n\n\t\t/*\n\n Более оптимизированная версия, но для текущего случая может быть практически незначительной\n\n let leftCount = 0;\n\t\tlet rightCount = 0;\n\n\t\tfor (const rowId of Object.keys(left)) {\n\t\t\tif (!left[rowId]) continue;\n\t\t\tleftCount += 1;\n\t\t\tif (!right[rowId]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const rowId of Object.keys(right)) {\n\t\t\tif (right[rowId]) {\n\t\t\t\trightCount += 1;\n\t\t\t}\n\t\t}\n\n\t\tif (leftCount !== rightCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\n */\n\t}, []);\n\n\tconst syncRowSelectionState = useEffectEvent((nextAvailableRowIds: readonly string[]) => {\n\t\tsetRowSelection((currentSelection) => pruneTableRowSelection(currentSelection, nextAvailableRowIds, selectionMode));\n\t});\n\n\tconst syncControlledRowSelectionState = useEffectEvent(\n\t\t(nextSelectedRowIds: readonly string[], nextAvailableRowIds: readonly string[]) => {\n\t\t\tconst nextSelection = pruneTableRowSelection(\n\t\t\t\tObject.fromEntries(nextSelectedRowIds.map((rowId) => [rowId, true])),\n\t\t\t\tnextAvailableRowIds,\n\t\t\t\tselectionMode\n\t\t\t);\n\n\t\t\tsetRowSelection((currentSelection) => {\n\t\t\t\tif (areSelectionsEqual(currentSelection, nextSelection)) {\n\t\t\t\t\treturn currentSelection;\n\t\t\t\t}\n\n\t\t\t\t// Пропускаем следующий emit, потому что это синхронизация от внешнего controlled-состояния,\n\t\t\t\t// а не пользовательское изменение выбора внутри таблицы.\n\t\t\t\tshouldSkipNextSelectionEmitRef.current = true;\n\n\t\t\t\treturn nextSelection;\n\t\t\t});\n\t\t}\n\t);\n\n\tconst emitRowSelectionChange = useEffectEvent((currentSelection: RowSelectionState) => {\n\t\tif (!onRowSelectionChange) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst selectedRows: TData[] = [];\n\n\t\tfor (const rowId of Object.keys(currentSelection)) {\n\t\t\tif (!currentSelection[rowId]) continue;\n\n\t\t\tconst row = rowById.get(rowId);\n\t\t\tif (row) {\n\t\t\t\tselectedRows.push(row);\n\t\t\t}\n\t\t}\n\n\t\tonRowSelectionChange(selectedRows);\n\t});\n\n\tuseEffect(() => {\n\t\tif (selectedRowIds !== undefined) {\n\t\t\tsyncControlledRowSelectionState(selectedRowIds, availableRowIds);\n\t\t\treturn;\n\t\t}\n\n\t\tsyncRowSelectionState(availableRowIds);\n\t}, [availableRowIds, selectedRowIds, selectionMode]);\n\n\tuseEffect(() => {\n\t\tif (shouldSkipNextSelectionEmitRef.current) {\n\t\t\tshouldSkipNextSelectionEmitRef.current = false;\n\t\t\treturn;\n\t\t}\n\n\t\temitRowSelectionChange(rowSelection);\n\t}, [rowSelection]);\n\n\t/**\n\t * Применяет изменение выбора при активации конкретной строки.\n\t */\n\tconst activateRowSelection = useCallback(\n\t\t(rowId: string, canSelect: boolean) => {\n\t\t\tif (selectionMode === \"none\" || !canSelect) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetRowSelection((currentSelection) => toggleTableRowSelection(currentSelection, rowId, selectionMode));\n\t\t},\n\t\t[selectionMode]\n\t);\n\n\treturn {\n\t\trowSelection,\n\t\tsetRowSelection,\n\t\tactivateRowSelection\n\t};\n}\n","import { TableColumnDef, TableColumnFormattingMeta, TableColumnMeta } from \"./types\";\n\n/**\n * Интерактивные descendants, действие которых таблица не должна подменять\n * выбором строки или ячейки.\n *\n * `td`, `th` и `tr` намеренно исключены из tabindex-ветки: сама таблица может\n * использовать roving tabindex для selection, не превращая ячейку в nested control.\n */\nconst TABLE_INTERACTIVE_ELEMENT_SELECTOR = [\n\t\"button\",\n\t\"a\",\n\t\"input\",\n\t\"select\",\n\t\"textarea\",\n\t\"label\",\n\t\"summary\",\n\t\"audio[controls]\",\n\t\"video[controls]\",\n\t'[contenteditable]:not([contenteditable=\"false\"])',\n\t\"[tabindex]:not(td):not(th):not(tr)\",\n\t'[draggable=\"true\"]',\n\t'[role=\"button\"]',\n\t'[role=\"link\"]',\n\t'[role=\"checkbox\"]',\n\t'[role=\"radio\"]',\n\t'[role=\"switch\"]',\n\t'[role=\"menu\"]',\n\t'[role=\"menuitem\"]',\n\t'[role=\"menuitemcheckbox\"]',\n\t'[role=\"menuitemradio\"]',\n\t'[role=\"listbox\"]',\n\t'[role=\"option\"]',\n\t'[role=\"tab\"]',\n\t'[role=\"tablist\"]',\n\t'[role=\"tree\"]',\n\t'[role=\"treeitem\"]',\n\t'[role=\"slider\"]',\n\t'[role=\"spinbutton\"]',\n\t'[role=\"textbox\"]',\n\t'[role=\"searchbox\"]',\n\t'[role=\"combobox\"]'\n].join(\", \");\n\n/**\n * Возвращает метаданные колонки таблицы.\n */\nexport function getTableColumnMeta<TData extends object>(column: TableColumnDef<TData>): TableColumnMeta | undefined {\n\treturn column.meta;\n}\n\n/**\n * Возвращает форматирующий блок метаданных колонки.\n */\nexport function getTableColumnFormattingMeta<TData extends object>(column: TableColumnDef<TData>): TableColumnFormattingMeta | undefined {\n\treturn column.meta?.formatting;\n}\n\n/**\n * Нормализует размер таблицы.\n *\n * Числовое значение трактуется как `em`, чтобы разметка масштабировалась вместе со шрифтом.\n */\nexport function resolveTableLength(length: string | number): string {\n\tif (typeof length === \"number\") {\n\t\treturn `${length}em`;\n\t}\n\n\treturn length;\n}\n\n/**\n * Определяет, пришёл ли клик из интерактивного элемента внутри таблицы.\n * Учитывает только элементы внутри ближайшей строки: фокусируемая вкладка или\n * диалог вокруг таблицы не должны перехватывать выбор её строк.\n */\nexport function isTableInteractiveElement(target: EventTarget | null, extraSelector?: string): boolean {\n\tif (typeof Element === \"undefined\" || !(target instanceof Element)) {\n\t\treturn false;\n\t}\n\n\tconst selector = extraSelector ? `${TABLE_INTERACTIVE_ELEMENT_SELECTOR}, ${extraSelector}` : TABLE_INTERACTIVE_ELEMENT_SELECTOR;\n\tconst interactiveElement = target.closest(selector);\n\tif (!interactiveElement) return false;\n\n\tconst row = target.closest(\"tr\");\n\treturn !row || row.contains(interactiveElement);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/table/columnLayout.ts","../../src/table/columnOrder.ts","../../src/table/columnSizing.ts","../../src/table/resolveTableColumnsWidth.ts","../../src/table/tableSelectionConstants.ts","../../src/table/cellSelection.ts","../../src/table/tableColumnConstants.ts","../../src/table/odataAdapter.ts","../../src/table/selection.ts","../../src/table/tanStackFeatures.ts","../../src/table/useTableRowSelection.ts","../../src/table/utils.ts"],"sourcesContent":["import { appendMissingIds, filterAndDeduplicateIds } from \"../array\";\n\nexport type TableColumnLayoutItem<TColumnId extends string = string, TWidth = number> = {\n\tid: TColumnId;\n\twidth: TWidth;\n};\n\nexport type ResolveTableColumnOrderArgs<TColumnId extends string = string> = {\n\tids: readonly TColumnId[];\n\torder?: readonly string[];\n};\n\nexport type BuildTableColumnLayoutArgs<TColumnId extends string = string, TWidth = number> = {\n\tids: readonly TColumnId[];\n\tgetWidth: (id: TColumnId) => TWidth;\n};\n\n/**\n * Возвращает порядок колонок как в AnalyticalTable: сначала сохранённый order,\n * затем новые или отсутствующие в order id. Ширины при этом остаются привязаны\n * к columnId, а не к визуальной позиции.\n */\nexport function resolveTableColumnOrder<TColumnId extends string>({ ids, order }: ResolveTableColumnOrderArgs<TColumnId>): TColumnId[] {\n\treturn appendMissingIds(filterAndDeduplicateIds(order, ids), ids);\n}\n\n/**\n * Строит layout колонок из уже вычисленного порядка и функции ширины по id.\n */\nexport function buildTableColumnLayout<TColumnId extends string, TWidth>({\n\tids,\n\tgetWidth\n}: BuildTableColumnLayoutArgs<TColumnId, TWidth>): TableColumnLayoutItem<TColumnId, TWidth>[] {\n\treturn ids.map((id) => ({\n\t\tid,\n\t\twidth: getWidth(id)\n\t}));\n}\n","import { arraysEqual } from \"../array\";\n\nexport type ReorderTableHeaderColumnsArgs = {\n\torder: readonly string[];\n\theaderIds: readonly string[];\n\tlockedIds?: readonly string[];\n\tpinnedIds?: readonly string[];\n\tactiveId: string;\n\toverId: string;\n};\n\nexport type TableColumnOrderState = string[];\n\nexport function normalizeTableColumnOrder(order: readonly string[] | undefined): TableColumnOrderState {\n\treturn Array.from(new Set((order ?? []).filter((columnId) => columnId.trim().length > 0)));\n}\n\nfunction moveItem<T>(items: readonly T[], fromIndex: number, toIndex: number): T[] {\n\tconst nextItems = [...items];\n\tconst [item] = nextItems.splice(fromIndex, 1);\n\n\tif (item === undefined) {\n\t\treturn nextItems;\n\t}\n\n\tnextItems.splice(toIndex, 0, item);\n\treturn nextItems;\n}\n\n/**\n * Переставляет только верхнеуровневые колонки табличной шапки.\n *\n * Ограничения:\n * - дочерние колонки групп не являются самостоятельными draggable-элементами;\n * - locked-колонки остаются в фиксированном порядке;\n * - pinned-колонки не переносятся между закреплённой и обычной зонами.\n */\nexport function reorderTableHeaderColumns(args: ReorderTableHeaderColumnsArgs): string[] {\n\tconst { activeId, overId, order } = args;\n\tif (!activeId || !overId || activeId === overId) return [...order];\n\n\tconst headerSet = new Set(args.headerIds);\n\tif (!headerSet.has(activeId) || !headerSet.has(overId)) return [...order];\n\n\tconst lockedSet = new Set(args.lockedIds ?? []);\n\tif (lockedSet.has(activeId) || lockedSet.has(overId)) return [...order];\n\n\tconst pinnedSet = new Set(args.pinnedIds ?? []);\n\tif (pinnedSet.has(activeId) || pinnedSet.has(overId)) return [...order];\n\n\tconst nextOrder = [...order];\n\tif (!nextOrder.includes(activeId)) {\n\t\tnextOrder.push(activeId);\n\t}\n\tif (!nextOrder.includes(overId)) {\n\t\tnextOrder.push(overId);\n\t}\n\n\tconst fromIndex = nextOrder.indexOf(activeId);\n\tconst toIndex = nextOrder.indexOf(overId);\n\tif (fromIndex === -1 || toIndex === -1 || fromIndex === toIndex) return nextOrder;\n\n\treturn moveItem(nextOrder, fromIndex, toIndex);\n}\n\nexport function resolveReorderedTableHeaderColumns(args: ReorderTableHeaderColumnsArgs): string[] | null {\n\tconst nextOrder = reorderTableHeaderColumns(args);\n\n\treturn arraysEqual(nextOrder, args.order) ? null : nextOrder;\n}\n","/** Числа sizing-state используют единицу, явно выбранную потребителем; по умолчанию это px. */\nexport type TableColumnSizingState = Record<string, number>;\n\n/** Единица сохранённого размера не зависит от экранных координат pointer/keyboard events. */\nexport type TableColumnSizingUnit = \"px\" | \"em\";\n\nexport const DEFAULT_TABLE_COLUMN_MIN_WIDTH = 60;\nexport const DEFAULT_TABLE_COLUMN_MIN_WIDTH_EM = 4;\n\n/**\n * Нормализует размер в выбранной единице. Для px сохраняется целочисленный контракт,\n * для em остаются четыре знака, чтобы resize не округлялся до целого размера шрифта.\n */\nexport function normalizeTableColumnWidth(width: number, minWidth?: number, unit: TableColumnSizingUnit = \"px\"): number {\n\tconst defaultMinWidth = unit === \"em\" ? DEFAULT_TABLE_COLUMN_MIN_WIDTH_EM : DEFAULT_TABLE_COLUMN_MIN_WIDTH;\n\tconst precision = unit === \"em\" ? 10_000 : 1;\n\tconst normalizedMinWidth =\n\t\ttypeof minWidth === \"number\" && Number.isFinite(minWidth) && minWidth > 0\n\t\t\t? Math.floor(minWidth * precision) / precision\n\t\t\t: defaultMinWidth;\n\tconst normalizedWidth = Number.isFinite(width) ? Math.floor(width * precision) / precision : normalizedMinWidth;\n\n\treturn Math.max(normalizedMinWidth, normalizedWidth);\n}\n\nexport function normalizeTableColumnSizing(\n\tstate: Readonly<Record<string, number>> | undefined,\n\tminWidth?: number,\n\tunit: TableColumnSizingUnit = \"px\"\n): TableColumnSizingState {\n\tconst nextState: TableColumnSizingState = {};\n\n\tfor (const [columnId, width] of Object.entries(state ?? {})) {\n\t\tif (typeof columnId !== \"string\" || columnId.trim().length === 0 || !Number.isFinite(width)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tnextState[columnId] = normalizeTableColumnWidth(width, minWidth, unit);\n\t}\n\n\treturn nextState;\n}\n\nexport function patchTableColumnWidth(\n\tstate: Readonly<Record<string, number>>,\n\tcolumnId: string,\n\twidth: number,\n\tminWidth?: number,\n\tunit: TableColumnSizingUnit = \"px\"\n): TableColumnSizingState {\n\tif (columnId.trim().length === 0) {\n\t\treturn normalizeTableColumnSizing(state, minWidth, unit);\n\t}\n\n\treturn {\n\t\t...normalizeTableColumnSizing(state, minWidth, unit),\n\t\t[columnId]: normalizeTableColumnWidth(width, minWidth, unit)\n\t};\n}\n\nexport function removeTableColumnWidth(state: Readonly<Record<string, number>>, columnId: string): TableColumnSizingState {\n\tconst nextState: TableColumnSizingState = {};\n\n\tfor (const [key, width] of Object.entries(state)) {\n\t\tif (key !== columnId) {\n\t\t\tnextState[key] = width;\n\t\t}\n\t}\n\n\treturn nextState;\n}\n","const TABLE_COLUMN_FIXED_WIDTH_PATTERN = /^(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:em|px)$/;\n\n/**\n * Возвращает сумму определённых ширин колонок без измерения DOM.\n *\n * em сохраняются в CSS, поэтому таблица масштабируется вместе со шрифтом уже\n * при SSR. auto и проценты требуют доступной ширины и остаются в ведении\n * браузерной раскладки: для них нельзя получить независимую сумму колонок.\n */\nexport function resolveTableColumnsWidth(widths: readonly string[]): string | undefined {\n\tif (widths.length === 0 || widths.some((width) => !TABLE_COLUMN_FIXED_WIDTH_PATTERN.test(width))) {\n\t\treturn undefined;\n\t}\n\n\treturn widths.length === 1 ? widths[0] : `calc(${widths.join(\" + \")})`;\n}\n","/** Общие значения кардинальности выбора строк и ячеек; публичные типы используют те же константы. */\nexport const TABLE_SELECTION_MODE_NONE = \"none\";\nexport const TABLE_SELECTION_MODE_SINGLE = \"single\";\nexport const TABLE_SELECTION_MODE_MULTI = \"multi\";\n\n/** Активация выбора отделена от кардинальности и не зависит от платформы пользователя. */\nexport const TABLE_CELL_SELECTION_ACTIVATION_DIRECT = \"direct\";\nexport const TABLE_CELL_SELECTION_ACTIVATION_PRIMARY_MODIFIER = \"primary-modifier\";\n","import {\n\tTABLE_CELL_SELECTION_ACTIVATION_DIRECT,\n\tTABLE_CELL_SELECTION_ACTIVATION_PRIMARY_MODIFIER,\n\tTABLE_SELECTION_MODE_NONE,\n\tTABLE_SELECTION_MODE_SINGLE\n} from \"./tableSelectionConstants\";\nimport {\n\ttype TableCellCoordinates,\n\ttype TableCellSelectionActivationMode,\n\ttype TableCellSelectionMode,\n\ttype TableCellSelectionState,\n\ttype TableSelectionModifierEvent\n} from \"./types\";\n\nconst TABLE_CELL_SELECTION_ACTIVATION_MODES: ReadonlySet<TableCellSelectionActivationMode> = new Set([\n\tTABLE_CELL_SELECTION_ACTIVATION_DIRECT,\n\tTABLE_CELL_SELECTION_ACTIVATION_PRIMARY_MODIFIER\n]);\n\n/** Строит collision-safe identity координат для дедупликации и сравнения. */\nfunction buildTableCellKey(cell: TableCellCoordinates): string {\n\treturn `${encodeURIComponent(cell.rowId)}::${encodeURIComponent(cell.columnId)}`;\n}\n\n/** Проверяет равенство двух наборов координат без зависимости от порядка. */\nexport function areTableCellSelectionsEqual(left: TableCellSelectionState, right: TableCellSelectionState): boolean {\n\tconst leftKeys = new Set(left.map(buildTableCellKey));\n\tconst rightKeys = new Set(right.map(buildTableCellKey));\n\n\tif (leftKeys.size !== rightKeys.size) {\n\t\treturn false;\n\t}\n\n\treturn [...leftKeys].every((key) => rightKeys.has(key));\n}\n\n/**\n * Оставляет только доступные координаты и приводит их к порядку строк/колонок.\n *\n * Функция не мутирует входные массивы. В `single` последняя координата в\n * детерминированном порядке становится единственным выбранным значением.\n */\nexport function pruneTableCellSelection(\n\tselection: TableCellSelectionState | undefined,\n\tavailableRowIds: readonly string[],\n\tavailableColumnIds: readonly string[],\n\tselectionMode: TableCellSelectionMode\n): TableCellCoordinates[] {\n\tif (selectionMode === TABLE_SELECTION_MODE_NONE || !selection?.length) {\n\t\treturn [];\n\t}\n\n\tconst rowOrder = new Map(availableRowIds.map((rowId, index) => [rowId, index]));\n\tconst columnOrder = new Map(availableColumnIds.map((columnId, index) => [columnId, index]));\n\tconst seen = new Set<string>();\n\tconst nextSelection = selection\n\t\t.filter((cell) => {\n\t\t\tif (!(rowOrder.has(cell.rowId) && columnOrder.has(cell.columnId))) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst key = buildTableCellKey(cell);\n\t\t\tif (seen.has(key)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tseen.add(key);\n\t\t\treturn true;\n\t\t})\n\t\t.sort((left, right) => {\n\t\t\tconst rowDelta = (rowOrder.get(left.rowId) ?? 0) - (rowOrder.get(right.rowId) ?? 0);\n\t\t\tif (rowDelta !== 0) {\n\t\t\t\treturn rowDelta;\n\t\t\t}\n\n\t\t\treturn (columnOrder.get(left.columnId) ?? 0) - (columnOrder.get(right.columnId) ?? 0);\n\t\t});\n\n\tif (selectionMode === TABLE_SELECTION_MODE_SINGLE) {\n\t\tconst lastCell = nextSelection.at(-1);\n\t\treturn lastCell ? [lastCell] : [];\n\t}\n\n\treturn nextSelection;\n}\n\n/**\n * Вычисляет следующее состояние после активации ячейки.\n *\n * Одиночный выбор допускает явное снятие повторной активацией, а `multi`\n * переключает только переданную координату.\n */\nexport function toggleTableCellSelection(\n\tselection: TableCellSelectionState,\n\tcell: TableCellCoordinates,\n\tselectionMode: TableCellSelectionMode\n): TableCellCoordinates[] {\n\tif (selectionMode === TABLE_SELECTION_MODE_NONE) {\n\t\treturn [];\n\t}\n\n\tconst cellKey = buildTableCellKey(cell);\n\tconst hasCell = selection.some((item) => buildTableCellKey(item) === cellKey);\n\n\tif (selectionMode === TABLE_SELECTION_MODE_SINGLE) {\n\t\treturn hasCell ? [] : [cell];\n\t}\n\n\treturn hasCell ? selection.filter((item) => buildTableCellKey(item) !== cellKey) : [...selection, cell];\n}\n\n/** Нормализует способ активации ячейки на внешней config-boundary. */\nexport function normalizeTableCellSelectionActivationMode(\n\tvalue: unknown,\n\tfallback: TableCellSelectionActivationMode = TABLE_CELL_SELECTION_ACTIVATION_DIRECT\n): TableCellSelectionActivationMode {\n\treturn typeof value === \"string\" && TABLE_CELL_SELECTION_ACTIVATION_MODES.has(value as TableCellSelectionActivationMode)\n\t\t? (value as TableCellSelectionActivationMode)\n\t\t: fallback;\n}\n\n/**\n * Проверяет, должно ли событие активировать выбор ячейки.\n *\n * Для `primary-modifier` принимается Ctrl или Command, но не комбинации с\n * Shift/Alt: они зарезервированы браузером, ОС и стандартными selection-flow.\n */\nexport function shouldActivateTableCellSelection(\n\tevent: TableSelectionModifierEvent,\n\tactivationMode: TableCellSelectionActivationMode\n): boolean {\n\tif (activationMode === TABLE_CELL_SELECTION_ACTIVATION_DIRECT) {\n\t\treturn true;\n\t}\n\n\treturn (event.ctrlKey || event.metaKey) && !event.shiftKey && !event.altKey;\n}\n","/** Значения выравнивания общие для metadata-адаптера и публичного типа колонки. */\nexport const TABLE_COLUMN_ALIGN_LEFT = \"left\";\nexport const TABLE_COLUMN_ALIGN_CENTER = \"center\";\nexport const TABLE_COLUMN_ALIGN_RIGHT = \"right\";\n","import { type FormattersPipelineTypedValueContext } from \"../formatters/pipeline\";\nimport { SCALAR_ROLE_MEASURE } from \"../metadata/scalarTypeConstants\";\nimport { type EntityColumnProperty } from \"../odata-service\";\n\nimport { TABLE_COLUMN_ALIGN_LEFT, TABLE_COLUMN_ALIGN_RIGHT } from \"./tableColumnConstants\";\nimport { type TableColumnAlign, type TableColumnDef, type TableColumnFormattingMetaInput } from \"./types\";\n\n/**\n * Опции генерации колонок по OData metadata.\n */\nexport interface CreateTableColumnsFromODataMetadataOptions {\n\t/**\n\t * Позволяет переопределить заголовок колонки.\n\t */\n\tresolveHeader?: (column: EntityColumnProperty) => string;\n\t/**\n\t * Позволяет сразу навесить formatting-конфиг на generated column.\n\t *\n\t * `id`, `role` и `type` будут автоматически получены из metadata.\n\t */\n\tresolveFormatting?: (column: EntityColumnProperty) => TableColumnFormattingMetaInput | undefined;\n}\n\n/**\n * Опции обогащения уже существующих колонок данными OData metadata.\n */\nexport interface EnrichTableColumnsWithODataFormattingOptions {\n\t/**\n\t * Позволяет подменить стратегию поиска metadata по колонке.\n\t */\n\tresolveMetadataColumn?: (args: {\n\t\tcolumnId: string;\n\t\tmetadataColumnsById: ReadonlyMap<string, EntityColumnProperty>;\n\t}) => EntityColumnProperty | undefined;\n}\n\n/**\n * Опции построения стартовой карты видимости колонок по OData metadata.\n */\nexport interface CreateTableColumnVisibilityFromODataMetadataOptions {\n\t/**\n\t * Позволяет явно переопределить стартовую видимость колонки.\n\t */\n\tresolveVisible?: (column: EntityColumnProperty) => boolean;\n}\n\n/**\n * Возвращает typed-formatting контекст по metadata OData-колонки.\n */\nexport function resolveTableColumnFormattingContextFromODataColumn(column: EntityColumnProperty): FormattersPipelineTypedValueContext {\n\tconst { role, type } = column;\n\tconst forceMeasure = type === \"decimal\" || type === \"float\" || type === \"double\" || type === \"int\" || type === \"byte\";\n\n\treturn {\n\t\trole: forceMeasure ? SCALAR_ROLE_MEASURE : role,\n\t\ttype: type\n\t};\n}\n\n/**\n * Создаёт базовое выравнивание по семантике OData-колонки.\n *\n * NOTE: \"не аналитические\" все поля возвращают как \"dimension\"...\n */\nfunction resolveTableColumnAlignFromODataColumn(columnContext: FormattersPipelineTypedValueContext): TableColumnAlign {\n\treturn columnContext.role === SCALAR_ROLE_MEASURE ? TABLE_COLUMN_ALIGN_RIGHT : TABLE_COLUMN_ALIGN_LEFT;\n}\n\n/**\n * Определяет видимость metadata-колонки по умолчанию.\n *\n * Кодовые поля скрываются только если у них есть явная text-пара,\n * чтобы экран по умолчанию показывал человекочитаемое значение.\n */\nfunction resolveMetadataColumnVisibleByDefault(\n\tcolumn: EntityColumnProperty,\n\tmetadataColumnsById: ReadonlyMap<string, EntityColumnProperty>\n): boolean {\n\tif (column.semanticType !== \"code\" || !column.linkedColumnId) {\n\t\treturn true;\n\t}\n\n\tconst linkedColumn = metadataColumnsById.get(column.linkedColumnId);\n\n\treturn linkedColumn?.semanticType !== \"text\";\n}\n\n/**\n * Определяет стабильный идентификатор колонки для сопоставления с metadata.\n */\nexport function resolveStableColumnId<TData extends object>(column: TableColumnDef<TData>): string | undefined {\n\tif (typeof column.id === \"string\" && column.id.trim()) {\n\t\treturn column.id;\n\t}\n\n\tif (\"accessorKey\" in column && typeof column.accessorKey === \"string\" && column.accessorKey.trim()) {\n\t\treturn column.accessorKey;\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Рекурсивно обходит только leaf-колонки.\n */\nfunction mapLeafTableColumns<TData extends object>(\n\tcolumns: readonly TableColumnDef<TData>[],\n\tmapper: (column: TableColumnDef<TData>) => TableColumnDef<TData>\n): TableColumnDef<TData>[] {\n\treturn columns.map((column) => {\n\t\tif (\"columns\" in column && Array.isArray(column.columns) && column.columns.length > 0) {\n\t\t\treturn {\n\t\t\t\t...column,\n\t\t\t\tcolumns: mapLeafTableColumns(column.columns as TableColumnDef<TData>[], mapper)\n\t\t\t};\n\t\t}\n\n\t\treturn mapper(column);\n\t});\n}\n\n/**\n * Строит стартовую карту видимости колонок из metadata OData-сущности.\n *\n * Возвращает visibility-state для TanStack Table, не удаляя сами колонки\n * из результата build-режима.\n */\nexport function createTableColumnVisibilityFromODataMetadata(\n\tmetadataColumns: readonly EntityColumnProperty[],\n\toptions?: CreateTableColumnVisibilityFromODataMetadataOptions\n): Record<string, boolean> {\n\tconst metadataColumnsById = new Map(metadataColumns.map((column) => [column.id, column]));\n\n\treturn Object.fromEntries(\n\t\tmetadataColumns.map((column) => {\n\t\t\tconst visible = options?.resolveVisible?.(column) ?? resolveMetadataColumnVisibleByDefault(column, metadataColumnsById);\n\n\t\t\treturn [column.id, visible];\n\t\t})\n\t);\n}\n\n/**\n * Создаёт базовые generic-колонки из metadata OData-сущности.\n */\nexport function createTableColumnsFromODataMetadata<TData extends object = Record<string, unknown>>(\n\tmetadataColumns: readonly EntityColumnProperty[],\n\toptions?: CreateTableColumnsFromODataMetadataOptions\n): TableColumnDef<TData>[] {\n\treturn metadataColumns.map((metadataColumn) => {\n\t\t// NOTE: Ячейка сама определит выравнивание, `align` только для переопределения\n\t\tconst columnContext = resolveTableColumnFormattingContextFromODataColumn(metadataColumn);\n\t\tconst align = resolveTableColumnAlignFromODataColumn(columnContext);\n\t\tconst resolvedFormatting = options?.resolveFormatting?.(metadataColumn);\n\n\t\treturn {\n\t\t\tid: metadataColumn.id,\n\t\t\taccessorKey: metadataColumn.id,\n\t\t\theader: options?.resolveHeader?.(metadataColumn) ?? metadataColumn.label ?? metadataColumn.id,\n\t\t\tmeta: {\n\t\t\t\talign,\n\t\t\t\tformatting: {\n\t\t\t\t\t...resolvedFormatting,\n\t\t\t\t\tid: metadataColumn.id,\n\t\t\t\t\trole: columnContext.role,\n\t\t\t\t\ttype: columnContext.type\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}) as TableColumnDef<TData>[];\n}\n\n/**\n * Дозаполняет уже существующие колонки typed-formatting контекстом из OData metadata.\n */\nexport function enrichTableColumnsWithODataFormatting<TData extends object>(\n\tcolumns: readonly TableColumnDef<TData>[],\n\tmetadataColumns: readonly EntityColumnProperty[],\n\toptions?: EnrichTableColumnsWithODataFormattingOptions\n): TableColumnDef<TData>[] {\n\tconst metadataColumnsById = new Map(metadataColumns.map((column) => [column.id, column]));\n\n\treturn mapLeafTableColumns(columns, (column) => {\n\t\tconst columnId = resolveStableColumnId(column);\n\t\tif (!columnId) {\n\t\t\treturn column;\n\t\t}\n\n\t\tconst metadataColumn =\n\t\t\toptions?.resolveMetadataColumn?.({\n\t\t\t\tcolumnId,\n\t\t\t\tmetadataColumnsById\n\t\t\t}) ?? metadataColumnsById.get(columnId);\n\n\t\tif (!metadataColumn) {\n\t\t\treturn column;\n\t\t}\n\n\t\tif (column.meta?.formatting?.role && column.meta.formatting.type) {\n\t\t\treturn column;\n\t\t}\n\t\tconst columnContext = resolveTableColumnFormattingContextFromODataColumn(metadataColumn);\n\n\t\treturn {\n\t\t\t...column,\n\t\t\tmeta: {\n\t\t\t\t...column.meta,\n\t\t\t\tformatting: {\n\t\t\t\t\t...column.meta?.formatting,\n\t\t\t\t\tid: columnId,\n\t\t\t\t\trole: columnContext.role,\n\t\t\t\t\ttype: columnContext.type\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n","import { type RowSelectionState } from \"@tanstack/react-table\";\n\nimport { TABLE_SELECTION_MODE_MULTI, TABLE_SELECTION_MODE_NONE, TABLE_SELECTION_MODE_SINGLE } from \"./tableSelectionConstants\";\nimport { type TableSelectionMode } from \"./types\";\n\nconst TABLE_SELECTION_MODES: ReadonlySet<TableSelectionMode> = new Set([\n\tTABLE_SELECTION_MODE_NONE,\n\tTABLE_SELECTION_MODE_SINGLE,\n\tTABLE_SELECTION_MODE_MULTI\n]);\n\n/**\n * Возвращает только активные идентификаторы выбранных строк.\n */\nfunction getSelectedRowIds(selection: RowSelectionState): string[] {\n\treturn Object.keys(selection).filter((rowId) => selection[rowId]);\n}\n\n/** Проверяет равенство активных row-selection идентификаторов без учёта порядка ключей. */\nexport function areTableRowSelectionsEqual(left: RowSelectionState, right: RowSelectionState): boolean {\n\tconst leftRowIds = getSelectedRowIds(left);\n\tconst rightRowIds = getSelectedRowIds(right);\n\n\tif (leftRowIds.length !== rightRowIds.length) {\n\t\treturn false;\n\t}\n\n\treturn leftRowIds.every((rowId) => right[rowId]);\n}\n\n/** Нормализует неизвестное значение режима выбора строк на внешней config-boundary. */\nexport function normalizeTableSelectionMode(value: unknown, fallback: TableSelectionMode = TABLE_SELECTION_MODE_NONE): TableSelectionMode {\n\treturn typeof value === \"string\" && TABLE_SELECTION_MODES.has(value as TableSelectionMode) ? (value as TableSelectionMode) : fallback;\n}\n\n/**\n * Нормализует состояние выбора относительно списка доступных строк и текущего режима.\n */\nexport function pruneTableRowSelection(\n\tselection: RowSelectionState,\n\tavailableRowIds: readonly string[],\n\tselectionMode: TableSelectionMode\n): RowSelectionState {\n\tif (selectionMode === TABLE_SELECTION_MODE_NONE) {\n\t\treturn {};\n\t}\n\n\tconst availableRowIdSet = new Set(availableRowIds);\n\tconst selectedRowIds = getSelectedRowIds(selection).filter((rowId) => availableRowIdSet.has(rowId));\n\n\tif (selectionMode === TABLE_SELECTION_MODE_SINGLE) {\n\t\tconst lastSelectedRowId = selectedRowIds.at(-1);\n\n\t\treturn lastSelectedRowId ? { [lastSelectedRowId]: true } : {};\n\t}\n\n\treturn Object.fromEntries(selectedRowIds.map((rowId) => [rowId, true]));\n}\n\n/**\n * Вычисляет следующее состояние выбора после активации строки пользователем.\n *\n * Семантика:\n * - `none` не хранит выбор;\n * - `single` всегда оставляет только одну строку и не снимает выбор повторным кликом;\n * - `multi` переключает строку как toggle.\n */\nexport function toggleTableRowSelection(selection: RowSelectionState, rowId: string, selectionMode: TableSelectionMode): RowSelectionState {\n\tif (selectionMode === TABLE_SELECTION_MODE_NONE) {\n\t\treturn {};\n\t}\n\n\tif (selectionMode === TABLE_SELECTION_MODE_SINGLE) {\n\t\tconst selectedRowIds = getSelectedRowIds(selection);\n\t\treturn selectedRowIds.length === 1 && selectedRowIds[0] === rowId ? selection : { [rowId]: true };\n\t}\n\n\tif (selection[rowId]) {\n\t\tconst nextSelection = { ...selection };\n\n\t\tdelete nextSelection[rowId];\n\n\t\treturn nextSelection;\n\t}\n\n\treturn {\n\t\t...selection,\n\t\t[rowId]: true\n\t};\n}\n","import {\n\tcolumnOrderingFeature,\n\tcolumnPinningFeature,\n\tcolumnResizingFeature,\n\tcolumnSizingFeature,\n\tcolumnVisibilityFeature,\n\tcreateExpandedRowModel,\n\trowExpandingFeature,\n\trowSelectionFeature,\n\ttableFeatures\n} from \"@tanstack/react-table\";\n\n/**\n * Единый набор TanStack Table v9 features для foundation-таблиц.\n *\n * Контракт хранится в `lib`, чтобы определения колонок, строк и экземпляров\n * таблицы в `lib` и `ui` всегда использовали один и тот же набор generic-типов.\n */\nexport const foundationTableFeatures = tableFeatures({\n\tcolumnOrderingFeature,\n\tcolumnPinningFeature,\n\tcolumnSizingFeature,\n\tcolumnResizingFeature,\n\tcolumnVisibilityFeature,\n\trowSelectionFeature,\n\trowExpandingFeature,\n\texpandedRowModel: createExpandedRowModel()\n});\n\n/** Generic-контракт features для публичных типов foundation-таблиц. */\nexport type FoundationTableFeatures = typeof foundationTableFeatures;\n","import { useCallback, useEffect, useEffectEvent, useRef, useState } from \"react\";\n\nimport { type RowSelectionState } from \"@tanstack/react-table\";\n\nimport { pruneTableRowSelection, toggleTableRowSelection } from \"./selection\";\nimport { TABLE_SELECTION_MODE_NONE } from \"./tableSelectionConstants\";\nimport { type TableSelectionMode } from \"./types\";\n\ninterface UseTableRowSelectionParams<TData extends object> {\n\tavailableRowIds: readonly string[];\n\trowById: ReadonlyMap<string, TData>;\n\tselectionMode: TableSelectionMode;\n\tselectedRowIds?: readonly string[];\n\tonRowSelectionChange?: (rows: TData[]) => void;\n}\n\n/**\n * Общая модель выбора строк для плоской и древовидной таблиц.\n */\nexport function useTableRowSelection<TData extends object>({\n\tavailableRowIds,\n\trowById,\n\tselectionMode,\n\tselectedRowIds,\n\tonRowSelectionChange\n}: UseTableRowSelectionParams<TData>) {\n\tconst [rowSelection, setRowSelection] = useState<RowSelectionState>({});\n\tconst shouldSkipNextSelectionEmitRef = useRef(false);\n\n\t/**\n\t * Сравнивает состояния выбора без лишних перерисовок.\n\t */\n\tconst areSelectionsEqual = useCallback((left: RowSelectionState, right: RowSelectionState) => {\n\t\tconst leftRowIds = Object.keys(left).filter((rowId) => left[rowId]);\n\t\tconst rightRowIds = Object.keys(right).filter((rowId) => right[rowId]);\n\n\t\tif (leftRowIds.length !== rightRowIds.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn leftRowIds.every((rowId) => right[rowId]);\n\n\t\t/*\n\n Более оптимизированная версия, но для текущего случая может быть практически незначительной\n\n let leftCount = 0;\n\t\tlet rightCount = 0;\n\n\t\tfor (const rowId of Object.keys(left)) {\n\t\t\tif (!left[rowId]) continue;\n\t\t\tleftCount += 1;\n\t\t\tif (!right[rowId]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const rowId of Object.keys(right)) {\n\t\t\tif (right[rowId]) {\n\t\t\t\trightCount += 1;\n\t\t\t}\n\t\t}\n\n\t\tif (leftCount !== rightCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\n */\n\t}, []);\n\n\tconst syncRowSelectionState = useEffectEvent((nextAvailableRowIds: readonly string[]) => {\n\t\tsetRowSelection((currentSelection) => pruneTableRowSelection(currentSelection, nextAvailableRowIds, selectionMode));\n\t});\n\n\tconst syncControlledRowSelectionState = useEffectEvent(\n\t\t(nextSelectedRowIds: readonly string[], nextAvailableRowIds: readonly string[]) => {\n\t\t\tconst nextSelection = pruneTableRowSelection(\n\t\t\t\tObject.fromEntries(nextSelectedRowIds.map((rowId) => [rowId, true])),\n\t\t\t\tnextAvailableRowIds,\n\t\t\t\tselectionMode\n\t\t\t);\n\n\t\t\tsetRowSelection((currentSelection) => {\n\t\t\t\tif (areSelectionsEqual(currentSelection, nextSelection)) {\n\t\t\t\t\treturn currentSelection;\n\t\t\t\t}\n\n\t\t\t\t// Пропускаем следующий emit, потому что это синхронизация от внешнего controlled-состояния,\n\t\t\t\t// а не пользовательское изменение выбора внутри таблицы.\n\t\t\t\tshouldSkipNextSelectionEmitRef.current = true;\n\n\t\t\t\treturn nextSelection;\n\t\t\t});\n\t\t}\n\t);\n\n\tconst emitRowSelectionChange = useEffectEvent((currentSelection: RowSelectionState) => {\n\t\tif (!onRowSelectionChange) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst selectedRows: TData[] = [];\n\n\t\tfor (const rowId of Object.keys(currentSelection)) {\n\t\t\tif (!currentSelection[rowId]) continue;\n\n\t\t\tconst row = rowById.get(rowId);\n\t\t\tif (row) {\n\t\t\t\tselectedRows.push(row);\n\t\t\t}\n\t\t}\n\n\t\tonRowSelectionChange(selectedRows);\n\t});\n\n\tuseEffect(() => {\n\t\tif (selectedRowIds !== undefined) {\n\t\t\tsyncControlledRowSelectionState(selectedRowIds, availableRowIds);\n\t\t\treturn;\n\t\t}\n\n\t\tsyncRowSelectionState(availableRowIds);\n\t}, [availableRowIds, selectedRowIds, selectionMode]);\n\n\tuseEffect(() => {\n\t\tif (shouldSkipNextSelectionEmitRef.current) {\n\t\t\tshouldSkipNextSelectionEmitRef.current = false;\n\t\t\treturn;\n\t\t}\n\n\t\temitRowSelectionChange(rowSelection);\n\t}, [rowSelection]);\n\n\t/**\n\t * Применяет изменение выбора при активации конкретной строки.\n\t */\n\tconst activateRowSelection = useCallback(\n\t\t(rowId: string, canSelect: boolean) => {\n\t\t\tif (selectionMode === TABLE_SELECTION_MODE_NONE || !canSelect) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetRowSelection((currentSelection) => toggleTableRowSelection(currentSelection, rowId, selectionMode));\n\t\t},\n\t\t[selectionMode]\n\t);\n\n\treturn {\n\t\trowSelection,\n\t\tsetRowSelection,\n\t\tactivateRowSelection\n\t};\n}\n","import { TableColumnDef, TableColumnFormattingMeta, TableColumnMeta } from \"./types\";\n\n/**\n * Интерактивные descendants, действие которых таблица не должна подменять\n * выбором строки или ячейки.\n *\n * `td`, `th` и `tr` намеренно исключены из tabindex-ветки: сама таблица может\n * использовать roving tabindex для selection, не превращая ячейку в nested control.\n */\nconst TABLE_INTERACTIVE_ELEMENT_SELECTOR = [\n\t\"button\",\n\t\"a\",\n\t\"input\",\n\t\"select\",\n\t\"textarea\",\n\t\"label\",\n\t\"summary\",\n\t\"audio[controls]\",\n\t\"video[controls]\",\n\t'[contenteditable]:not([contenteditable=\"false\"])',\n\t\"[tabindex]:not(td):not(th):not(tr)\",\n\t'[draggable=\"true\"]',\n\t'[role=\"button\"]',\n\t'[role=\"link\"]',\n\t'[role=\"checkbox\"]',\n\t'[role=\"radio\"]',\n\t'[role=\"switch\"]',\n\t'[role=\"menu\"]',\n\t'[role=\"menuitem\"]',\n\t'[role=\"menuitemcheckbox\"]',\n\t'[role=\"menuitemradio\"]',\n\t'[role=\"listbox\"]',\n\t'[role=\"option\"]',\n\t'[role=\"tab\"]',\n\t'[role=\"tablist\"]',\n\t'[role=\"tree\"]',\n\t'[role=\"treeitem\"]',\n\t'[role=\"slider\"]',\n\t'[role=\"spinbutton\"]',\n\t'[role=\"textbox\"]',\n\t'[role=\"searchbox\"]',\n\t'[role=\"combobox\"]'\n].join(\", \");\n\n/**\n * Возвращает метаданные колонки таблицы.\n */\nexport function getTableColumnMeta<TData extends object>(column: TableColumnDef<TData>): TableColumnMeta | undefined {\n\treturn column.meta;\n}\n\n/**\n * Возвращает форматирующий блок метаданных колонки.\n */\nexport function getTableColumnFormattingMeta<TData extends object>(column: TableColumnDef<TData>): TableColumnFormattingMeta | undefined {\n\treturn column.meta?.formatting;\n}\n\n/**\n * Нормализует размер таблицы.\n *\n * Числовое значение трактуется как `em`, чтобы разметка масштабировалась вместе со шрифтом.\n */\nexport function resolveTableLength(length: string | number): string {\n\tif (typeof length === \"number\") {\n\t\treturn `${length}em`;\n\t}\n\n\treturn length;\n}\n\n/**\n * Определяет, пришёл ли клик из интерактивного элемента внутри таблицы.\n * Учитывает только элементы внутри ближайшей строки: фокусируемая вкладка или\n * диалог вокруг таблицы не должны перехватывать выбор её строк.\n */\nexport function isTableInteractiveElement(target: EventTarget | null, extraSelector?: string): boolean {\n\tif (typeof Element === \"undefined\" || !(target instanceof Element)) {\n\t\treturn false;\n\t}\n\n\tconst selector = extraSelector ? `${TABLE_INTERACTIVE_ELEMENT_SELECTOR}, ${extraSelector}` : TABLE_INTERACTIVE_ELEMENT_SELECTOR;\n\tconst interactiveElement = target.closest(selector);\n\tif (!interactiveElement) return false;\n\n\tconst row = target.closest(\"tr\");\n\treturn !row || row.contains(interactiveElement);\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import type { FormattersPipelineTypedValueContext } from "../formatters/pipeline";
2
- import type { EntityColumnProperty } from "../odata-service";
3
- import type { TableColumnDef, TableColumnFormattingMetaInput } from "./types";
1
+ import { type FormattersPipelineTypedValueContext } from "../formatters/pipeline";
2
+ import { type EntityColumnProperty } from "../odata-service";
3
+ import { type TableColumnDef, type TableColumnFormattingMetaInput } from "./types";
4
4
  /**
5
5
  * Опции генерации колонок по OData metadata.
6
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"odataAdapter.d.ts","sourceRoot":"","sources":["../../src/table/odataAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAoB,cAAc,EAAE,8BAA8B,EAAE,MAAM,SAAS,CAAC;AAEhG;;GAEG;AACH,MAAM,WAAW,0CAA0C;IAC1D;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,MAAM,CAAC;IACzD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,8BAA8B,GAAG,SAAS,CAAC;CACjG;AAED;;GAEG;AACH,MAAM,WAAW,4CAA4C;IAC5D;;OAEG;IACH,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC9B,QAAQ,EAAE,MAAM,CAAC;QACjB,mBAAmB,EAAE,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;KAC/D,KAAK,oBAAoB,GAAG,SAAS,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,mDAAmD;IACnE;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,OAAO,CAAC;CAC3D;AAED;;GAEG;AACH,wBAAgB,kDAAkD,CAAC,MAAM,EAAE,oBAAoB,GAAG,mCAAmC,CAQpI;AA8BD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,SAAS,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,SAAS,CAU7G;AAqBD;;;;;GAKG;AACH,wBAAgB,4CAA4C,CAC3D,eAAe,EAAE,SAAS,oBAAoB,EAAE,EAChD,OAAO,CAAC,EAAE,mDAAmD,GAC3D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AAED;;GAEG;AACH,wBAAgB,mCAAmC,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjG,eAAe,EAAE,SAAS,oBAAoB,EAAE,EAChD,OAAO,CAAC,EAAE,0CAA0C,GAClD,cAAc,CAAC,KAAK,CAAC,EAAE,CAsBzB;AAED;;GAEG;AACH,wBAAgB,qCAAqC,CAAC,KAAK,SAAS,MAAM,EACzE,OAAO,EAAE,SAAS,cAAc,CAAC,KAAK,CAAC,EAAE,EACzC,eAAe,EAAE,SAAS,oBAAoB,EAAE,EAChD,OAAO,CAAC,EAAE,4CAA4C,GACpD,cAAc,CAAC,KAAK,CAAC,EAAE,CAqCzB"}
1
+ {"version":3,"file":"odataAdapter.d.ts","sourceRoot":"","sources":["../../src/table/odataAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mCAAmC,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAyB,KAAK,cAAc,EAAE,KAAK,8BAA8B,EAAE,MAAM,SAAS,CAAC;AAE1G;;GAEG;AACH,MAAM,WAAW,0CAA0C;IAC1D;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,MAAM,CAAC;IACzD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,8BAA8B,GAAG,SAAS,CAAC;CACjG;AAED;;GAEG;AACH,MAAM,WAAW,4CAA4C;IAC5D;;OAEG;IACH,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC9B,QAAQ,EAAE,MAAM,CAAC;QACjB,mBAAmB,EAAE,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;KAC/D,KAAK,oBAAoB,GAAG,SAAS,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,mDAAmD;IACnE;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,OAAO,CAAC;CAC3D;AAED;;GAEG;AACH,wBAAgB,kDAAkD,CAAC,MAAM,EAAE,oBAAoB,GAAG,mCAAmC,CAQpI;AA8BD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,SAAS,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,SAAS,CAU7G;AAqBD;;;;;GAKG;AACH,wBAAgB,4CAA4C,CAC3D,eAAe,EAAE,SAAS,oBAAoB,EAAE,EAChD,OAAO,CAAC,EAAE,mDAAmD,GAC3D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AAED;;GAEG;AACH,wBAAgB,mCAAmC,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjG,eAAe,EAAE,SAAS,oBAAoB,EAAE,EAChD,OAAO,CAAC,EAAE,0CAA0C,GAClD,cAAc,CAAC,KAAK,CAAC,EAAE,CAsBzB;AAED;;GAEG;AACH,wBAAgB,qCAAqC,CAAC,KAAK,SAAS,MAAM,EACzE,OAAO,EAAE,SAAS,cAAc,CAAC,KAAK,CAAC,EAAE,EACzC,eAAe,EAAE,SAAS,oBAAoB,EAAE,EAChD,OAAO,CAAC,EAAE,4CAA4C,GACpD,cAAc,CAAC,KAAK,CAAC,EAAE,CAqCzB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Возвращает сумму определённых ширин колонок без измерения DOM.
3
+ *
4
+ * em сохраняются в CSS, поэтому таблица масштабируется вместе со шрифтом уже
5
+ * при SSR. auto и проценты требуют доступной ширины и остаются в ведении
6
+ * браузерной раскладки: для них нельзя получить независимую сумму колонок.
7
+ */
8
+ export declare function resolveTableColumnsWidth(widths: readonly string[]): string | undefined;
9
+ //# sourceMappingURL=resolveTableColumnsWidth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveTableColumnsWidth.d.ts","sourceRoot":"","sources":["../../src/table/resolveTableColumnsWidth.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAMtF"}
@@ -1,5 +1,5 @@
1
- import { RowSelectionState } from "@tanstack/react-table";
2
- import { TableSelectionMode } from "./types";
1
+ import { type RowSelectionState } from "@tanstack/react-table";
2
+ import { type TableSelectionMode } from "./types";
3
3
  /** Проверяет равенство активных row-selection идентификаторов без учёта порядка ключей. */
4
4
  export declare function areTableRowSelectionsEqual(left: RowSelectionState, right: RowSelectionState): boolean;
5
5
  /** Нормализует неизвестное значение режима выбора строк на внешней config-boundary. */
@@ -1 +1 @@
1
- {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/table/selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAW7C,2FAA2F;AAC3F,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CASrG;AAED,uFAAuF;AACvF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAE,kBAA2B,GAAG,kBAAkB,CAErH;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACrC,SAAS,EAAE,iBAAiB,EAC5B,eAAe,EAAE,SAAS,MAAM,EAAE,EAClC,aAAa,EAAE,kBAAkB,GAC/B,iBAAiB,CAenB;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,GAAG,iBAAiB,CAsBzI"}
1
+ {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/table/selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG/D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAelD,2FAA2F;AAC3F,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CASrG;AAED,uFAAuF;AACvF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAE,kBAA8C,GAAG,kBAAkB,CAExI;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACrC,SAAS,EAAE,iBAAiB,EAC5B,eAAe,EAAE,SAAS,MAAM,EAAE,EAClC,aAAa,EAAE,kBAAkB,GAC/B,iBAAiB,CAenB;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,GAAG,iBAAiB,CAsBzI"}
@@ -0,0 +1,5 @@
1
+ /** Значения выравнивания общие для metadata-адаптера и публичного типа колонки. */
2
+ export declare const TABLE_COLUMN_ALIGN_LEFT = "left";
3
+ export declare const TABLE_COLUMN_ALIGN_CENTER = "center";
4
+ export declare const TABLE_COLUMN_ALIGN_RIGHT = "right";
5
+ //# sourceMappingURL=tableColumnConstants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableColumnConstants.d.ts","sourceRoot":"","sources":["../../src/table/tableColumnConstants.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAC9C,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAClD,eAAO,MAAM,wBAAwB,UAAU,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** Общие значения кардинальности выбора строк и ячеек; публичные типы используют те же константы. */
2
+ export declare const TABLE_SELECTION_MODE_NONE = "none";
3
+ export declare const TABLE_SELECTION_MODE_SINGLE = "single";
4
+ export declare const TABLE_SELECTION_MODE_MULTI = "multi";
5
+ /** Активация выбора отделена от кардинальности и не зависит от платформы пользователя. */
6
+ export declare const TABLE_CELL_SELECTION_ACTIVATION_DIRECT = "direct";
7
+ export declare const TABLE_CELL_SELECTION_ACTIVATION_PRIMARY_MODIFIER = "primary-modifier";
8
+ //# sourceMappingURL=tableSelectionConstants.d.ts.map