@ryuzaki13/react-foundation-ui 2.0.1 → 2.2.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 (431) hide show
  1. package/COLOR_TOKENS_MIGRATION.md +224 -0
  2. package/README.md +14 -18
  3. package/dist/advanced-search/index.js +8 -8
  4. package/dist/badge/index.js +1 -1
  5. package/dist/barcode-scanner/index.js +2 -2
  6. package/dist/base-table/index.js +1 -1
  7. package/dist/button/index.js +1 -1
  8. package/dist/check-box/index.js +1 -1
  9. package/dist/chunks/{CalendarView-Bhaov_XE.js → CalendarView-Dm55k0bN.js} +2 -2
  10. package/dist/chunks/CalendarView-Dm55k0bN.js.map +1 -0
  11. package/dist/chunks/ImageViewerRuntime-HGBWp9NM.js.map +1 -1
  12. package/dist/chunks/{TextEditorLexicalClient-CSXZQOYo.js → TextEditorLexicalClient-D46Zed55.js} +6 -6
  13. package/dist/chunks/TextEditorLexicalClient-D46Zed55.js.map +1 -0
  14. package/dist/chunks/{badge-DUI2ET6q.js → badge-6mXO9BWP.js} +2 -2
  15. package/dist/chunks/badge-6mXO9BWP.js.map +1 -0
  16. package/dist/chunks/{base-table-BqW1n7tv.js → base-table-BWvKfI2W.js} +2 -2
  17. package/dist/chunks/{base-table-BqW1n7tv.js.map → base-table-BWvKfI2W.js.map} +1 -1
  18. package/dist/chunks/{button-BaUlN-nt.js → button-DF21yxVp.js} +3 -3
  19. package/dist/chunks/{button-BaUlN-nt.js.map → button-DF21yxVp.js.map} +1 -1
  20. package/dist/chunks/{check-box-CC8CDnSR.js → check-box-CZyhzmR0.js} +3 -3
  21. package/dist/chunks/{check-box-CC8CDnSR.js.map → check-box-CZyhzmR0.js.map} +1 -1
  22. package/dist/chunks/{context-menu-Dj6MXgv6.js → context-menu-DgvXGCuI.js} +3 -3
  23. package/dist/chunks/context-menu-DgvXGCuI.js.map +1 -0
  24. package/dist/chunks/{date-input-DkLfO3Ng.js → date-input-BwLOiGXp.js} +5 -5
  25. package/dist/chunks/{date-input-DkLfO3Ng.js.map → date-input-BwLOiGXp.js.map} +1 -1
  26. package/dist/chunks/{input-D1jOxm0t.js → input-DSPKgiCK.js} +2 -2
  27. package/dist/chunks/input-DSPKgiCK.js.map +1 -0
  28. package/dist/chunks/{input-files-CDGpJaUm.js → input-files-tIS17-zX.js} +3 -3
  29. package/dist/chunks/input-files-tIS17-zX.js.map +1 -0
  30. package/dist/chunks/{input-search-Ci1ubGox.js → input-search-Cat4c7SM.js} +2 -2
  31. package/dist/chunks/{input-search-Ci1ubGox.js.map → input-search-Cat4c7SM.js.map} +1 -1
  32. package/dist/chunks/misc-DeGboAt-.js.map +1 -1
  33. package/dist/chunks/{modal-CbAwLHlM.js → modal-dplfAaER.js} +2 -2
  34. package/dist/chunks/{modal-CbAwLHlM.js.map → modal-dplfAaER.js.map} +1 -1
  35. package/dist/chunks/{multi-select-V7SLAduU.js → multi-select-BZ9N6Dal.js} +4 -4
  36. package/dist/chunks/{multi-select-V7SLAduU.js.map → multi-select-BZ9N6Dal.js.map} +1 -1
  37. package/dist/chunks/{picker-DZ4-1BvK.js → picker-lvm82d0A.js} +3 -3
  38. package/dist/chunks/picker-lvm82d0A.js.map +1 -0
  39. package/dist/chunks/popover-Bne-Ljbs.js.map +1 -1
  40. package/dist/chunks/{radio-group-DhpP7JSJ.js → radio-group-CRk_1ODZ.js} +2 -2
  41. package/dist/chunks/radio-group-CRk_1ODZ.js.map +1 -0
  42. package/dist/chunks/{select-B7cWlJxL.js → select-aTGupQan.js} +4 -4
  43. package/dist/chunks/{select-B7cWlJxL.js.map → select-aTGupQan.js.map} +1 -1
  44. package/dist/chunks/{table-DMLFUBlb.js → table-DxoSOvQK.js} +2 -2
  45. package/dist/chunks/table-DxoSOvQK.js.map +1 -0
  46. package/dist/chunks/{ui.module-BsDio9A3.js → ui.module-oRwY3Zli.js} +2 -1
  47. package/dist/chunks/ui.module-oRwY3Zli.js.map +1 -0
  48. package/dist/chunks/{uiClasses-BVwFzzsr.js → uiClasses-CQj47jkF.js} +11 -2
  49. package/dist/chunks/uiClasses-CQj47jkF.js.map +1 -0
  50. package/dist/chunks/wheel-picker-FS58cRsQ.js.map +1 -1
  51. package/dist/context-menu/index.js +1 -1
  52. package/dist/date-input/index.js +2 -2
  53. package/dist/date-time-input/index.js +3 -3
  54. package/dist/disclosure/index.js +2 -2
  55. package/dist/disclosure/index.js.map +1 -1
  56. package/dist/drop-zone/index.js +1 -1
  57. package/dist/drop-zone/index.js.map +1 -1
  58. package/dist/errors/index.js +4 -4
  59. package/dist/errors/index.js.map +1 -1
  60. package/dist/expandable-action-panel/index.js +1 -1
  61. package/dist/image/index.js +5 -5
  62. package/dist/image/index.js.map +1 -1
  63. package/dist/input/index.js +1 -1
  64. package/dist/input-date-time/index.js +2 -2
  65. package/dist/input-file/index.js +2 -2
  66. package/dist/input-files/index.js +1 -1
  67. package/dist/input-image/index.js +2 -2
  68. package/dist/input-search/index.js +1 -1
  69. package/dist/layout-picker/index.js +1 -1
  70. package/dist/layout-picker/index.js.map +1 -1
  71. package/dist/listbox/index.js +1 -1
  72. package/dist/modal/index.js +1 -1
  73. package/dist/multi-select/index.js +1 -1
  74. package/dist/notifications/index.js +1 -1
  75. package/dist/notifications/index.js.map +1 -1
  76. package/dist/option/index.js +1 -1
  77. package/dist/picker/index.js +1 -1
  78. package/dist/preset-range-date-input/index.js +1 -1
  79. package/dist/preset-select/index.js +1 -1
  80. package/dist/radio-button/index.js +2 -2
  81. package/dist/radio-group/index.js +1 -1
  82. package/dist/select/index.js +1 -1
  83. package/dist/simple-table/index.js +1 -1
  84. package/dist/slider/index.js +3 -3
  85. package/dist/slider/index.js.map +1 -1
  86. package/dist/state-select/index.js +1 -1
  87. package/dist/status-indicator/StatusIndicator.d.ts +14 -0
  88. package/dist/status-indicator/StatusIndicator.d.ts.map +1 -0
  89. package/dist/status-indicator/index.d.ts +2 -0
  90. package/dist/status-indicator/index.d.ts.map +1 -0
  91. package/dist/status-indicator/index.js +40 -0
  92. package/dist/status-indicator/index.js.map +1 -0
  93. package/dist/styles.css +1 -1
  94. package/dist/switch/index.js +1 -1
  95. package/dist/table/index.js +1 -1
  96. package/dist/table-sorting/index.js +1 -1
  97. package/dist/tabs/index.js +2 -2
  98. package/dist/tabs/index.js.map +1 -1
  99. package/dist/tag-input/index.js +2 -2
  100. package/dist/tag-input/index.js.map +1 -1
  101. package/dist/text-editor/index.js +1 -1
  102. package/dist/textarea/index.js +2 -2
  103. package/dist/toggle/index.js +1 -1
  104. package/dist/toggle/index.js.map +1 -1
  105. package/dist/tree-select/index.js +3 -3
  106. package/dist/tree-select/index.js.map +1 -1
  107. package/dist/tree-table/index.js +1 -1
  108. package/dist/tree-table/index.js.map +1 -1
  109. package/dist/types.d.ts +3 -3
  110. package/dist/types.d.ts.map +1 -1
  111. package/dist/uiClasses.d.ts.map +1 -1
  112. package/package.json +6 -1
  113. package/src/styles/_border.scss +2 -2
  114. package/src/styles/_color.scss +8 -8
  115. package/src/styles/_components.scss +2 -2
  116. package/src/styles/_normalize.scss +4 -4
  117. package/src/styles/config/_index.scss +95 -182
  118. package/src/styles/mixins/_controls.scss +43 -26
  119. package/src/styles/mixins/_mixin.scss +0 -187
  120. package/src/styles/mixins/controls.test.ts +28 -6
  121. package/src/styles/themes/_interactive-surface.scss +12 -12
  122. package/src/styles/themes/_theme.scss +21 -157
  123. package/src/styles/themes/theme.test.ts +66 -48
  124. package/storybook-static/assets/{Badge-DTV2OL5k.js → Badge-S6BbyfeX.js} +8 -2
  125. package/storybook-static/assets/{Badge.stories-D4zH_nK5.js → Badge.stories-mio0RhpX.js} +7 -1
  126. package/storybook-static/assets/{BadgeList-CD5894x5.css → BadgeList-DbjeNuw0.css} +1 -1
  127. package/storybook-static/assets/{BadgeList-CnmQ4zmg.js → BadgeList-rtyargPY.js} +2 -2
  128. package/storybook-static/assets/{BarcodeScannerDialog.stories-Cm7ouwg8.js → BarcodeScannerDialog.stories-DRdXaVuW.js} +1 -1
  129. package/storybook-static/assets/{Button-6JuiM3Sj.js → Button-CNH5M6QU.js} +12 -2
  130. package/storybook-static/assets/{Button-HheQm8vu.js → Button-EVzvXVPh.js} +4 -2
  131. package/storybook-static/assets/Button.stories-VUvnWRnm.js +106 -0
  132. package/storybook-static/assets/{CalendarView-CEfB4HLd.js → CalendarView-CfSvCqCr.js} +1 -1
  133. package/storybook-static/assets/CalendarView-dgpVDRJR.css +1 -0
  134. package/storybook-static/assets/{CheckBox-CWGCGHUS.js → CheckBox-Bynxp5UW.js} +1 -1
  135. package/storybook-static/assets/{CheckBox-CzvA4ttT.js → CheckBox-C3n5T66c.js} +2 -2
  136. package/storybook-static/assets/{CheckBox.stories-D2lA5F8B.js → CheckBox.stories-BoF97wxK.js} +1 -1
  137. package/storybook-static/assets/{Color-6AOWCN3U-RvvVvZ9f.js → Color-6AOWCN3U-D-Jlgqzt.js} +1 -1
  138. package/storybook-static/assets/{ContextMenu-BJnj7lO4.js → ContextMenu-Dg65Ha7g.js} +1 -1
  139. package/storybook-static/assets/{ContextMenu-DCpglNe4.js → ContextMenu-DwwW3EyB.js} +1 -1
  140. package/storybook-static/assets/ContextMenu-yhWq2uJ3.css +1 -0
  141. package/storybook-static/assets/{ContextMenu.stories-CZabvzR6.js → ContextMenu.stories-D-jRdIZD.js} +1 -1
  142. package/storybook-static/assets/{CustomOptionButton-B9bzr3ba.js → CustomOptionButton-vfj1vLJM.js} +1 -1
  143. package/storybook-static/assets/{DateInput-DoMGeEvO.js → DateInput-BpuC_NWD.js} +1 -1
  144. package/storybook-static/assets/{DateInput-Cud2arem.js → DateInput-DJdh5B2X.js} +1 -1
  145. package/storybook-static/assets/{DateInput.stories-DFd5wyMy.js → DateInput.stories-C9hB_vFy.js} +1 -1
  146. package/storybook-static/assets/{DateRangePresetSelect-DfGcFHV8.js → DateRangePresetSelect-CDgQfOdZ.js} +1 -1
  147. package/storybook-static/assets/{DateRangePresetSelect-C8jA3mur.js → DateRangePresetSelect-DYPoeqC2.js} +1 -1
  148. package/storybook-static/assets/{DateRangePresetSelect.stories-DtR83uwx.js → DateRangePresetSelect.stories-Bx40H_O0.js} +1 -1
  149. package/storybook-static/assets/{Detail-CMcVxOrr.js → Detail-DWFfdNJH.js} +1 -1
  150. package/storybook-static/assets/{Detail.stories-DGT8An8z.js → Detail.stories-C9y_rsbc.js} +1 -1
  151. package/storybook-static/assets/{Dialog-DBh-yDZW.js → Dialog-D8GPZi6H.js} +1 -1
  152. package/storybook-static/assets/{Dialog-BPzpu7Iw.js → Dialog-XbR8HVsJ.js} +1 -1
  153. package/storybook-static/assets/{Dialog.stories-DU3SgOkL.js → Dialog.stories-CoU_PusF.js} +1 -1
  154. package/storybook-static/assets/{Disclosure-BGsPaAxH.js → Disclosure-DrGfFwQt.js} +1 -1
  155. package/storybook-static/assets/{Disclosure.stories-DpwyYh7T.js → Disclosure.stories-CsR1_XK7.js} +1 -1
  156. package/storybook-static/assets/DisclosureGroup-D_ldcGgp.css +1 -0
  157. package/storybook-static/assets/{DisclosureGroup-CJI8B2x_.js → DisclosureGroup-DvB5K7gZ.js} +1 -1
  158. package/storybook-static/assets/{DocsRenderer-JROSPFPF-Cf85Uxwt.js → DocsRenderer-JROSPFPF-B7AkTp2I.js} +1 -1
  159. package/storybook-static/assets/{DropZone-C7HIN5ml.css → DropZone-C4gPTIz0.css} +1 -1
  160. package/storybook-static/assets/{DropZone-C7qTrvkq.js → DropZone-DZi2WVu9.js} +1 -1
  161. package/storybook-static/assets/{DropZone-cYl1w3wQ.js → DropZone-DesGY4BW.js} +1 -1
  162. package/storybook-static/assets/{DropZone.stories-o02bE6DI.js → DropZone.stories-KVDb6pHQ.js} +1 -1
  163. package/storybook-static/assets/{DropdownMenu-DqqPU9RU.js → DropdownMenu-CRoQARS5.js} +1 -1
  164. package/storybook-static/assets/{ExpandableActionPanel-B_pjHQ5m.js → ExpandableActionPanel-CWKJIcbQ.js} +1 -1
  165. package/storybook-static/assets/{ExpandableActionPanel.stories-C7dJ5dht.js → ExpandableActionPanel.stories-D-MYdCJ4.js} +1 -1
  166. package/storybook-static/assets/{Flex-CIHkkwFK.js → Flex-CMPSlVVy.js} +1 -1
  167. package/storybook-static/assets/{Flex.stories-DteEPY0y.js → Flex.stories-DQH0Q5EF.js} +1 -1
  168. package/storybook-static/assets/{FloatingPopover-yB9tTk9G.js → FloatingPopover-CBWu6Gxj.js} +1 -1
  169. package/storybook-static/assets/FloatingPopover-Di16BZj-.css +1 -0
  170. package/storybook-static/assets/{FormattedTableCell-QVYQepjk.js → FormattedTableCell-CIp2ULPe.js} +1 -1
  171. package/storybook-static/assets/FormattedTableCell-CTIL_ueu.css +1 -0
  172. package/storybook-static/assets/{Grid-BUVtGaZY.js → Grid-BlQE5E_9.js} +1 -1
  173. package/storybook-static/assets/{Grid.stories-CWGqCVB2.js → Grid.stories-CwUCPClP.js} +1 -1
  174. package/storybook-static/assets/{ImageCropper.stories-D8l7iHQA.js → ImageCropper.stories-DjaRavSL.js} +1 -1
  175. package/storybook-static/assets/{ImageRenderer-BcPmp9P9.js → ImageRenderer-JGxgpvv2.js} +1 -1
  176. package/storybook-static/assets/{ImageRenderer.stories-CcLUz8Ml.js → ImageRenderer.stories-DwH6FgEc.js} +1 -1
  177. package/storybook-static/assets/{ImageView.stories-BwvjVmuF.js → ImageView.stories-DgYPiNil.js} +1 -1
  178. package/storybook-static/assets/{ImageViewer.stories-BjT782dr.js → ImageViewer.stories-_y7d3coa.js} +2 -2
  179. package/storybook-static/assets/{ImageViewerRuntime-DnQ-rQ_M.js → ImageViewerRuntime-CA6JhQ31.js} +1 -1
  180. package/storybook-static/assets/ImageViewerRuntime-MxAd4mC-.css +1 -0
  181. package/storybook-static/assets/{Input-DebpyMJg.js → Input-95LKm7aK.js} +1 -1
  182. package/storybook-static/assets/{Input-CmEkIaR0.js → Input-CET6HfZH.js} +1 -1
  183. package/storybook-static/assets/{Input-CYgnggvb.css → Input-CIA3PkB4.css} +1 -1
  184. package/storybook-static/assets/{Input.stories-y2LCVkT2.js → Input.stories-BDTI2nIV.js} +1 -1
  185. package/storybook-static/assets/{InputDateTime-B5oKuCea.js → InputDateTime-DsRJZVCO.js} +1 -1
  186. package/storybook-static/assets/{InputDateTime.stories-Cwi0acf9.js → InputDateTime.stories-Dah3F9Fq.js} +1 -1
  187. package/storybook-static/assets/{InputFile-B2dVbDrE.js → InputFile-CF3DRyTX.js} +1 -1
  188. package/storybook-static/assets/{InputFile-DbRU7crz.js → InputFile-_65sKWXa.js} +1 -1
  189. package/storybook-static/assets/{InputFile.stories-DrXG5hWA.js → InputFile.stories-B1PFNFPf.js} +1 -1
  190. package/storybook-static/assets/{InputFiles-DEBKMzlt.js → InputFiles-CUYGDig8.js} +1 -1
  191. package/storybook-static/assets/{InputFiles-CsgKJXOD.js → InputFiles-RV6K6GmT.js} +1 -1
  192. package/storybook-static/assets/{InputFiles.stories-EZDcefG0.js → InputFiles.stories-ZCzYnboY.js} +1 -1
  193. package/storybook-static/assets/{InputFilesList-ByK52qUe.css → InputFilesList-BbwB0oHE.css} +1 -1
  194. package/storybook-static/assets/{InputFilesList-GjMJ14Ln.js → InputFilesList-Co__UO8B.js} +1 -1
  195. package/storybook-static/assets/{InputImage-qjJ7xrKX.js → InputImage-900lIdui.js} +1 -1
  196. package/storybook-static/assets/{InputImage-CFFK9MbG.js → InputImage-De56Jwx9.js} +1 -1
  197. package/storybook-static/assets/{InputImage.stories-B32AtBda.js → InputImage.stories-B_R_kcCD.js} +1 -1
  198. package/storybook-static/assets/{InteractiveComponents-DustBT4l.js → InteractiveComponents-DGTx8enm.js} +1 -1
  199. package/storybook-static/assets/{InteractiveComponents.stories-J-7t7y-v.js → InteractiveComponents.stories-CDZsFUga.js} +1 -1
  200. package/storybook-static/assets/{LayoutPicker-DwNtjoeb.js → LayoutPicker-BMO8qfbL.js} +1 -1
  201. package/storybook-static/assets/{LayoutPicker-DlzXd6kS.js → LayoutPicker-CllhDO8J.js} +1 -1
  202. package/storybook-static/assets/{LayoutPicker-BY4-fUQa.css → LayoutPicker-DaPDA0_s.css} +1 -1
  203. package/storybook-static/assets/{LayoutPicker.stories-2bG0TvXm.js → LayoutPicker.stories-F7K4tSxT.js} +1 -1
  204. package/storybook-static/assets/{Listbox-BAhrUu_I.js → Listbox-0kjmvCe-.js} +1 -1
  205. package/storybook-static/assets/{Listbox-C9qCMY31.js → Listbox-D_2t3NpM.js} +1 -1
  206. package/storybook-static/assets/{Listbox.stories-BfakOrPT.js → Listbox.stories-Cp1Eq7Bz.js} +1 -1
  207. package/storybook-static/assets/{Modal-wGyoEzau.js → Modal-vdSwQ6xw.js} +1 -1
  208. package/storybook-static/assets/{Modal-D5znEvBs.js → Modal-zf0JQ124.js} +1 -1
  209. package/storybook-static/assets/{Modal.stories-DotZ88Ut.js → Modal.stories-Cz47rY2B.js} +1 -1
  210. package/storybook-static/assets/{ModalManagerProvider-DXPaYU4j.js → ModalManagerProvider-C_zd0fqC.js} +1 -1
  211. package/storybook-static/assets/{MultiSelect-BxKmL7sF.js → MultiSelect-Bl3q6kCP.js} +1 -1
  212. package/storybook-static/assets/{MultiSelect-DN1NhXH9.js → MultiSelect-DE13Ak4N.js} +1 -1
  213. package/storybook-static/assets/{MultiSelect.stories-Cdrx9hhT.js → MultiSelect.stories-DG6LGTC9.js} +1 -1
  214. package/storybook-static/assets/{NoData-mAjM6Vuy.js → NoData-B4AGZs5Q.js} +1 -1
  215. package/storybook-static/assets/NotificationsHost-BIyd1XQ0.css +1 -0
  216. package/storybook-static/assets/{NotificationsHost-gBWuk9v-.js → NotificationsHost-CFD2_BpZ.js} +1 -1
  217. package/storybook-static/assets/{NotificationsHost.stories-DONKtSKb.js → NotificationsHost.stories-CiSu7Vly.js} +1 -1
  218. package/storybook-static/assets/{ODataMultiSelect-Daq3ksSA.js → ODataMultiSelect-PcZYhXlN.js} +1 -1
  219. package/storybook-static/assets/{ODataMultiSelect.stories-De0WwTKp.js → ODataMultiSelect.stories-xodpVftn.js} +1 -1
  220. package/storybook-static/assets/{ODataSelect-BUO-vyqK.js → ODataSelect-BuuZhINP.js} +1 -1
  221. package/storybook-static/assets/{ODataSelect.stories-CJ2RCZGP.js → ODataSelect.stories-nr7GqOTz.js} +1 -1
  222. package/storybook-static/assets/{ODataTreeMultiSelect-Ctyo-uib.js → ODataTreeMultiSelect-BRNITq-6.js} +1 -1
  223. package/storybook-static/assets/{ODataTreeMultiSelect.stories-BX4wjGkG.js → ODataTreeMultiSelect.stories-Baxtdxte.js} +1 -1
  224. package/storybook-static/assets/{ODataTreeSelect-BZzwG_Ve.js → ODataTreeSelect-BKcyKJr8.js} +1 -1
  225. package/storybook-static/assets/{ODataTreeSelect.stories-B0jQNyMj.js → ODataTreeSelect.stories-n6LATF6z.js} +1 -1
  226. package/storybook-static/assets/{OneStepScroller-BL3gxJh1.js → OneStepScroller-DXykOSPw.js} +1 -1
  227. package/storybook-static/assets/{Option-JgQ-duDq.js → Option-Cr3vYgCL.js} +1 -1
  228. package/storybook-static/assets/Option-DD2t6DLq.css +1 -0
  229. package/storybook-static/assets/{OptionButton-CATaxLh0.js → OptionButton-v-MO3VgJ.js} +1 -1
  230. package/storybook-static/assets/{PeriodSelect-BIsC_Ew6.js → PeriodSelect-BQ9_EM63.js} +1 -1
  231. package/storybook-static/assets/{PeriodSelect-4LpRQDP5.js → PeriodSelect-DQXZWIBX.js} +1 -1
  232. package/storybook-static/assets/{PeriodSelect.stories-D5fKpF2P.js → PeriodSelect.stories-S2ndHVEQ.js} +1 -1
  233. package/storybook-static/assets/{PickerField-BkqWIWZw.js → PickerField-BeAXSQmp.js} +1 -1
  234. package/storybook-static/assets/{PickerTriggerActions-BVrXKKJ9.js → PickerTriggerActions-D6BjZkrN.js} +1 -1
  235. package/storybook-static/assets/{Popover-BTrxASXR.js → Popover-BAp50b4b.js} +1 -1
  236. package/storybook-static/assets/{Popover-DZlEnjse.js → Popover-CTCfa72M.js} +1 -1
  237. package/storybook-static/assets/{Popover.stories-BdyB4Q7K.js → Popover.stories-CZIBppwE.js} +1 -1
  238. package/storybook-static/assets/{PresetRangeDateInput-DUES355B.js → PresetRangeDateInput-BLAAcq8Y.js} +1 -1
  239. package/storybook-static/assets/{PresetRangeDateInput-Cp66aUGT.js → PresetRangeDateInput-EIlQEGr0.js} +1 -1
  240. package/storybook-static/assets/{PresetRangeDateInput.stories-D4jLrF6o.js → PresetRangeDateInput.stories-CShR-Eub.js} +1 -1
  241. package/storybook-static/assets/{PresetSelect-CmRrk7FZ.js → PresetSelect-BcD8EsSb.js} +1 -1
  242. package/storybook-static/assets/{README-CU_f1CMq.js → README-5i5ZfRuh.js} +1 -1
  243. package/storybook-static/assets/{README-B7BK3gkk.js → README-6iRo8dKK.js} +1 -1
  244. package/storybook-static/assets/{README-BCNsNQNj.js → README-6vpPfmdC.js} +1 -1
  245. package/storybook-static/assets/{README-DNUrBjgg.js → README-B2J2ATaW.js} +1 -1
  246. package/storybook-static/assets/{README-BUknkyU6.js → README-B8qFKwiq.js} +1 -1
  247. package/storybook-static/assets/{README-BmKEL3jy.js → README-BBS739kV.js} +1 -1
  248. package/storybook-static/assets/{README-B00ewV67.js → README-BDMWo0qS.js} +1 -1
  249. package/storybook-static/assets/{README-DgudM-2t.js → README-BIpHKVKI.js} +1 -1
  250. package/storybook-static/assets/{README-CmK6hELS.js → README-BQHgBs-J.js} +1 -1
  251. package/storybook-static/assets/{README-D7jyja4l.js → README-BUlc8wGR.js} +1 -1
  252. package/storybook-static/assets/{README-CHw6-PVx.js → README-BW1oyMu_.js} +1 -1
  253. package/storybook-static/assets/{README-C28SDMRx.js → README-BdBeQtXQ.js} +1 -1
  254. package/storybook-static/assets/{README-LqD1V5ru.js → README-BkX7iDLJ.js} +1 -1
  255. package/storybook-static/assets/{README-D-TgbUSA.js → README-BnTk0DyO.js} +1 -1
  256. package/storybook-static/assets/{README-CnRKlFuJ.js → README-Bwv6SU5o.js} +1 -1
  257. package/storybook-static/assets/{README-Ds6OSOC0.js → README-CLiuh-fF.js} +1 -1
  258. package/storybook-static/assets/{README-BGA2Ek3H.js → README-CLv4OeWw.js} +1 -1
  259. package/storybook-static/assets/{README-BrJaVHU_.js → README-CMBk39py.js} +1 -1
  260. package/storybook-static/assets/{README-DPuLgYuK.js → README-CQUlYRLa.js} +1 -1
  261. package/storybook-static/assets/{README-BhRGrTHx.js → README-CVX-4uJ_.js} +1 -1
  262. package/storybook-static/assets/{README-Bq8FLza7.js → README-CWeupyTO.js} +1 -1
  263. package/storybook-static/assets/{README-E5QziGK8.js → README-CZJvbdGv.js} +1 -1
  264. package/storybook-static/assets/{README-B4CJVRtX.js → README-CaECsCl2.js} +1 -1
  265. package/storybook-static/assets/{README-52AHLz83.js → README-Cntj7my4.js} +1 -1
  266. package/storybook-static/assets/{README-D6pLFtqL.js → README-CuGPdc3G.js} +1 -1
  267. package/storybook-static/assets/{README-D8YPmvQw.js → README-D7pP2Sxx.js} +1 -1
  268. package/storybook-static/assets/{README-Cs-dnvtW.js → README-D9Og-Y7l.js} +1 -1
  269. package/storybook-static/assets/{README-Duppk6f6.js → README-DDtdZa9N.js} +1 -1
  270. package/storybook-static/assets/{README-B20cH-BV.js → README-DLQvRDdd.js} +1 -1
  271. package/storybook-static/assets/{README-BfGp1q9n.js → README-DQpji8GH.js} +1 -1
  272. package/storybook-static/assets/{README-Bh_zrJ_j.js → README-DUfqdm0p.js} +1 -1
  273. package/storybook-static/assets/{README-55mkSTZb.js → README-Dd3MCsf2.js} +1 -1
  274. package/storybook-static/assets/{README-CPYFZwZE.js → README-DehKWpx2.js} +1 -1
  275. package/storybook-static/assets/{README-lgRhlVsq.js → README-DgFtCu8B.js} +1 -1
  276. package/storybook-static/assets/{README-C8Xo5jEX.js → README-DhZbllv1.js} +1 -1
  277. package/storybook-static/assets/{README-DvZ8ZhlH.js → README-Dj9EXnja.js} +1 -1
  278. package/storybook-static/assets/{README-CzKPWsNs.js → README-DkCWpyid.js} +1 -1
  279. package/storybook-static/assets/{README-C_SQjJtW.js → README-Dn2AIjeS.js} +1 -1
  280. package/storybook-static/assets/{README-DG5knhc9.js → README-DoZCaKAx.js} +1 -1
  281. package/storybook-static/assets/{README-DK-Bw1l1.js → README-DsLoV4ax.js} +1 -1
  282. package/storybook-static/assets/{README-BlWMNqE5.js → README-DwvyizD7.js} +1 -1
  283. package/storybook-static/assets/{README--fYBobJK.js → README-DwyqrR4I.js} +1 -1
  284. package/storybook-static/assets/{README-DyLt9P77.js → README-N-Gy0UYM.js} +1 -1
  285. package/storybook-static/assets/{README-DzVNZdfo.js → README-Wd5wEw-J.js} +1 -1
  286. package/storybook-static/assets/{README-CoD7FHU_.js → README-Y4OGhQbo.js} +1 -1
  287. package/storybook-static/assets/{README-EIhMMZ0t.js → README-ZZiicHm9.js} +1 -1
  288. package/storybook-static/assets/{README-BsUvf6lk.js → README-bAu0Uk5O.js} +1 -1
  289. package/storybook-static/assets/{README-B9foBRQ-.js → README-cuvbXAuG.js} +1 -1
  290. package/storybook-static/assets/{README-DsfBjN9N.js → README-jHuA2mq2.js} +1 -1
  291. package/storybook-static/assets/{README-C_WyDQDz.js → README-pvA4fK1E.js} +1 -1
  292. package/storybook-static/assets/{README-4AGJG--w.js → README-sEbspuLw.js} +1 -1
  293. package/storybook-static/assets/{README-DK-US_zR.js → README-v3TOC_aE.js} +1 -1
  294. package/storybook-static/assets/{README-BoGNjKgW.js → README-wizqrRgs.js} +1 -1
  295. package/storybook-static/assets/{RadioButton-CmcExRQs.js → RadioButton-BUPEsqwH.js} +1 -1
  296. package/storybook-static/assets/{RadioButton-BLHXpf6L.js → RadioButton-Ca0kZdMV.js} +1 -1
  297. package/storybook-static/assets/{RadioButton.stories-P1SEMdJ1.js → RadioButton.stories-aBnizEak.js} +1 -1
  298. package/storybook-static/assets/{RadioGroup-DkCSA8me.js → RadioGroup-34jH28Sk.js} +1 -1
  299. package/storybook-static/assets/{RadioGroup-BU95Hbl0.css → RadioGroup-DHnDIEgi.css} +1 -1
  300. package/storybook-static/assets/{RadioGroup-BBv2Na1n.js → RadioGroup-dq6CbxB6.js} +1 -1
  301. package/storybook-static/assets/{RadioGroup.stories-5-uFHs1b.js → RadioGroup.stories--lDrmS8V.js} +1 -1
  302. package/storybook-static/assets/{Scrollable-XhGz9dwJ.js → Scrollable-BJRiyp9q.js} +1 -1
  303. package/storybook-static/assets/{Select-BEMtNq5M.js → Select-CwNDJSmq.js} +1 -1
  304. package/storybook-static/assets/{Select-CyA-PHrU.js → Select-DmwCwS8a.js} +1 -1
  305. package/storybook-static/assets/{Select.stories-B_GbDG58.js → Select.stories-BXj7A2gM.js} +1 -1
  306. package/storybook-static/assets/{SerializableSelect-CJ74e_Vc.js → SerializableSelect-IAtBSK9P.js} +1 -1
  307. package/storybook-static/assets/{SerializableSelect.stories-PUXPFPFx.js → SerializableSelect.stories-D8F5WGtk.js} +1 -1
  308. package/storybook-static/assets/{SingleDateTimeInput-wqb75Yrz.js → SingleDateTimeInput-CbyyGlmi.js} +1 -1
  309. package/storybook-static/assets/{SingleDateTimeInput-BlpQ8t9f.js → SingleDateTimeInput-oN2P3eYx.js} +1 -1
  310. package/storybook-static/assets/{SingleDateTimeInput.stories-CdogRh5M.js → SingleDateTimeInput.stories-BU_wyTmo.js} +1 -1
  311. package/storybook-static/assets/{Slider-CZa1f0vP.js → Slider-CDJhhSWj.js} +1 -1
  312. package/storybook-static/assets/{Slider-r8Be9wJ4.js → Slider-ClZTrtRk.js} +1 -1
  313. package/storybook-static/assets/Slider-DxdPx1Pb.css +1 -0
  314. package/storybook-static/assets/{Slider.stories-BUwg0h15.js → Slider.stories-PfQf9es7.js} +1 -1
  315. package/storybook-static/assets/{SliderInput-BWFbcA5R.js → SliderInput-BxFUjetO.js} +1 -1
  316. package/storybook-static/assets/{SliderInput-BaZBNhhF.js → SliderInput-C7TRql6-.js} +1 -1
  317. package/storybook-static/assets/{SliderInput.stories-Cbxo0ku_.js → SliderInput.stories-yX8DU5pZ.js} +1 -1
  318. package/storybook-static/assets/{Sortable-JfLmQUdm.js → Sortable-D8cVwatT.js} +1 -1
  319. package/storybook-static/assets/{Sortable.stories-Cz9xM3Tw.js → Sortable.stories-BI6_E5k7.js} +1 -1
  320. package/storybook-static/assets/{Splitter-BkQcPRYJ.js → Splitter-B958Wj4G.js} +1 -1
  321. package/storybook-static/assets/{Splitter.stories-zQf1fK4D.js → Splitter.stories-Dl2YOk9H.js} +1 -1
  322. package/storybook-static/assets/{StateSelect-DxH1oWnK.js → StateSelect-Cs9-kDRC.js} +1 -1
  323. package/storybook-static/assets/{StateSelect-TLRMUmko.js → StateSelect-DbV1mGhQ.js} +1 -1
  324. package/storybook-static/assets/{StateSelect.stories-CReLNG_6.js → StateSelect.stories-D6atguQ6.js} +1 -1
  325. package/storybook-static/assets/StatusIndicator--Y-QdjQI.js +37 -0
  326. package/storybook-static/assets/StatusIndicator-CpCGmnO7.css +1 -0
  327. package/storybook-static/assets/StatusIndicator.stories-DxkpP6C1.js +31 -0
  328. package/storybook-static/assets/{StringToggle.stories-BYqTdRbD.js → StringToggle.stories-C3mdK5Wx.js} +1 -1
  329. package/storybook-static/assets/{Switch-ChsLVAse.js → Switch-BTFpnXV9.js} +1 -1
  330. package/storybook-static/assets/{Switch-DE9rqHmp.js → Switch-OPzpWcJw.js} +1 -1
  331. package/storybook-static/assets/{Switch.stories-BaVgLi3_.js → Switch.stories-C0rVHcRq.js} +1 -1
  332. package/storybook-static/assets/{Table-qoMvYV1q.js → Table-bWKgagHH.js} +1 -1
  333. package/storybook-static/assets/Table-j_3ID7Xq.css +1 -0
  334. package/storybook-static/assets/{Table.stories-BdLScKfS.js → Table.stories-DOuV4G3p.js} +1 -1
  335. package/storybook-static/assets/{Tabs-CuALrdgt.js → Tabs-ae4daDEA.js} +1 -1
  336. package/storybook-static/assets/{Tabs.stories-BrLtxZ_a.js → Tabs.stories-Br4RCZKR.js} +1 -1
  337. package/storybook-static/assets/{TabsBox-D-bkJX9j.css → TabsBox-B3REnb6D.css} +1 -1
  338. package/storybook-static/assets/{TabsBox-DzfWhIHb.js → TabsBox-X_7yoTw3.js} +1 -1
  339. package/storybook-static/assets/{TagInput-Tyn5Jgus.js → TagInput-B2w5W05Z.js} +1 -1
  340. package/storybook-static/assets/{TagInput-ChmW4s9O.css → TagInput-RJbbcfoR.css} +1 -1
  341. package/storybook-static/assets/{TagInput.stories-Bbs3olyB.js → TagInput.stories-Db9DaNpW.js} +1 -1
  342. package/storybook-static/assets/{Text-B4GUKigV.js → Text-BT0cn3Bk.js} +1 -1
  343. package/storybook-static/assets/{Textarea-CNu-scX8.js → Textarea-B9MNOgmF.js} +1 -1
  344. package/storybook-static/assets/{Textarea-D3iwzB-S.js → Textarea-C_6iOQ3k.js} +1 -1
  345. package/storybook-static/assets/{Textarea.stories-CE2gt74x.js → Textarea.stories-Ctjb3d47.js} +1 -1
  346. package/storybook-static/assets/{TimePanel-BESMLCVl.js → TimePanel-C5AucKln.js} +1 -1
  347. package/storybook-static/assets/{TimePanel-Bh98qsCo.css → TimePanel-D9_hb7w4.css} +1 -1
  348. package/storybook-static/assets/{TimePanel.stories-BYhTpaoS.js → TimePanel.stories-CiQAJcB_.js} +1 -1
  349. package/storybook-static/assets/Toggle-ClE8Zovo.css +1 -0
  350. package/storybook-static/assets/{Toggle-0-SlfDXC.js → Toggle-DxA-Q1KZ.js} +1 -1
  351. package/storybook-static/assets/{Toggle-BexBc-UO.js → Toggle-q8hxq-LP.js} +1 -1
  352. package/storybook-static/assets/{Toggle.stories-CG4rBYOZ.js → Toggle.stories-C6Jf_KTc.js} +1 -1
  353. package/storybook-static/assets/{TreeMultiSelect-Cne9qXjN.js → TreeMultiSelect-BKF7COzn.js} +1 -1
  354. package/storybook-static/assets/{TreeMultiSelect-QId1DJUn.js → TreeMultiSelect-BfduPrgB.js} +1 -1
  355. package/storybook-static/assets/{TreeMultiSelect.stories-D6ElJY8Y.js → TreeMultiSelect.stories-C-uztFex.js} +1 -1
  356. package/storybook-static/assets/{TreePickerBase-B6DED6Hz.css → TreePickerBase-CmFF9pWE.css} +1 -1
  357. package/storybook-static/assets/{TreePickerBase-Dq3HMrua.js → TreePickerBase-SVDNn9QY.js} +1 -1
  358. package/storybook-static/assets/{TreeSelect-q4gdFfBH.js → TreeSelect-Bu9HRTvX.js} +1 -1
  359. package/storybook-static/assets/{TreeSelect-BJKtAh4x.js → TreeSelect-ClJGLBA8.js} +1 -1
  360. package/storybook-static/assets/{TreeSelect.stories-DfCxZuVy.js → TreeSelect.stories-C0TeLbpZ.js} +1 -1
  361. package/storybook-static/assets/{TreeTable-5fAWCnhQ.js → TreeTable-BXia_Imm.js} +1 -1
  362. package/storybook-static/assets/TreeTable-BvB3kj4h.css +1 -0
  363. package/storybook-static/assets/{TreeTable.stories-B1fSfYHg.js → TreeTable.stories-Cwo8yjNI.js} +1 -1
  364. package/storybook-static/assets/{blocks-B_u8Yt1Z.js → blocks-BmNU_R5E.js} +3 -3
  365. package/storybook-static/assets/{check-r01NGn4c.js → check-HCQdrq3c.js} +1 -1
  366. package/storybook-static/assets/{chevron-down-DxMviYn3.js → chevron-down-DHrZ_6vS.js} +1 -1
  367. package/storybook-static/assets/{chevron-left-mKnQH53V.js → chevron-left-CaIBhYcr.js} +1 -1
  368. package/storybook-static/assets/{chevron-right-CeJNqWTb.js → chevron-right-BpmEWiwv.js} +1 -1
  369. package/storybook-static/assets/{chunk-W22LQPXL-DorleiwX.js → chunk-W22LQPXL-DSMfJqhe.js} +1 -1
  370. package/storybook-static/assets/{circle-alert-H7OZyDmF.js → circle-alert-DuupFIr9.js} +1 -1
  371. package/storybook-static/assets/{circle-check-my8Ev6ar.js → circle-check-LYBfAR-E.js} +1 -1
  372. package/storybook-static/assets/{components-CDMhSXUo.js → components-CBnjb8pL.js} +3 -3
  373. package/storybook-static/assets/{contextMenu-fMt3iyZv.js → contextMenu-BZ-iSJtD.js} +1 -1
  374. package/storybook-static/assets/{download-BCwj5k1S.js → download-CsLGqkEl.js} +1 -1
  375. package/storybook-static/assets/{floating-ui.react-Cy32mouo.js → floating-ui.react-VNDOEKPt.js} +1 -1
  376. package/storybook-static/assets/{foundationApi-BtZYXGDY.js → foundationApi-BMy7_pDS.js} +1 -1
  377. package/storybook-static/assets/{foundationLib-CHOUG7NK.js → foundationLib-o95OqhXl.js} +1 -1
  378. package/storybook-static/assets/{hooks-CEvNG7IN.js → hooks-DMFMD13m.js} +1 -1
  379. package/storybook-static/assets/iframe-BT_jngkf.css +1 -0
  380. package/storybook-static/assets/{iframe-DWvPB8Sk.js → iframe-BaXmcmyl.js} +4 -4
  381. package/storybook-static/assets/iframe-D5qmKm51.js +1 -0
  382. package/storybook-static/assets/{info-CA6M6l6h.js → info-ZuWgcD4m.js} +1 -1
  383. package/storybook-static/assets/{odata-CHl7sWAn.js → odata-Brls3R5b.js} +1 -1
  384. package/storybook-static/assets/{odataStoryFixtures-BvjpoqqT.js → odataStoryFixtures-BmQo4rAJ.js} +2 -2
  385. package/storybook-static/assets/{react-B37E__uI.js → react-BnjGKE7V.js} +1 -1
  386. package/storybook-static/assets/{refresh-cw-Bt4yd-lG.js → refresh-cw-vj55o5c3.js} +1 -1
  387. package/storybook-static/assets/{settings-2-B7Uyk4j8.js → settings-2-PPom9XND.js} +1 -1
  388. package/storybook-static/assets/{sortable-B8UMQCaH.js → sortable-CztGPJOI.js} +1 -1
  389. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-QGUDFNNj.js → syntaxhighlighter-QEQV7K2Y-uXmnHQP7.js} +1 -1
  390. package/storybook-static/assets/{trash-2-Bhjh1o0B.js → trash-2-DEnKoJjZ.js} +1 -1
  391. package/storybook-static/assets/{triangle-alert-D1c-iB00.js → triangle-alert-D-oyPLJL.js} +1 -1
  392. package/storybook-static/assets/ui-DSS1yTEO.css +1 -0
  393. package/storybook-static/assets/ui.module-SH8ehXul.js +1 -0
  394. package/storybook-static/assets/uiClasses-e9OQfdw2.js +1 -0
  395. package/storybook-static/assets/{useODataSelectBase-CYnvX8wM.js → useODataSelectBase-DxsvigTC.js} +1 -1
  396. package/storybook-static/assets/{useODataTreeData-C2risfo7.js → useODataTreeData-Dzxb75-h.js} +1 -1
  397. package/storybook-static/assets/{usePickerQuery-CjSFlUmn.js → usePickerQuery-SCKPS_0f.js} +1 -1
  398. package/storybook-static/assets/{usePickerTriggerController-Bqo5fhOa.js → usePickerTriggerController-DMA4hla_.js} +1 -1
  399. package/storybook-static/assets/{x-B3GmOByS.js → x-C5QCK6Ts.js} +1 -1
  400. package/storybook-static/iframe.html +3 -3
  401. package/storybook-static/index.json +1 -1
  402. package/storybook-static/project.json +1 -1
  403. package/dist/chunks/CalendarView-Bhaov_XE.js.map +0 -1
  404. package/dist/chunks/TextEditorLexicalClient-CSXZQOYo.js.map +0 -1
  405. package/dist/chunks/badge-DUI2ET6q.js.map +0 -1
  406. package/dist/chunks/context-menu-Dj6MXgv6.js.map +0 -1
  407. package/dist/chunks/input-D1jOxm0t.js.map +0 -1
  408. package/dist/chunks/input-files-CDGpJaUm.js.map +0 -1
  409. package/dist/chunks/picker-DZ4-1BvK.js.map +0 -1
  410. package/dist/chunks/radio-group-DhpP7JSJ.js.map +0 -1
  411. package/dist/chunks/table-DMLFUBlb.js.map +0 -1
  412. package/dist/chunks/ui.module-BsDio9A3.js.map +0 -1
  413. package/dist/chunks/uiClasses-BVwFzzsr.js.map +0 -1
  414. package/storybook-static/assets/Button.stories-B3Q5B_2w.js +0 -93
  415. package/storybook-static/assets/CalendarView-DKvrkS40.css +0 -1
  416. package/storybook-static/assets/ContextMenu-CFPrlO2u.css +0 -1
  417. package/storybook-static/assets/DisclosureGroup-CVFMwx22.css +0 -1
  418. package/storybook-static/assets/FloatingPopover-jwILx9b0.css +0 -1
  419. package/storybook-static/assets/FormattedTableCell-AZc2IHfK.css +0 -1
  420. package/storybook-static/assets/ImageViewerRuntime-CRmlrtpL.css +0 -1
  421. package/storybook-static/assets/NotificationsHost-D5Pvn4eu.css +0 -1
  422. package/storybook-static/assets/Option-DXh7BISz.css +0 -1
  423. package/storybook-static/assets/Slider-CK-W2ZTO.css +0 -1
  424. package/storybook-static/assets/Table-BGvRn9y0.css +0 -1
  425. package/storybook-static/assets/Toggle-fKG2dFY0.css +0 -1
  426. package/storybook-static/assets/TreeTable--ZoksUiw.css +0 -1
  427. package/storybook-static/assets/iframe-CDVsimPQ.js +0 -1
  428. package/storybook-static/assets/iframe-IhWQT6NX.css +0 -1
  429. package/storybook-static/assets/ui-C3BskXT9.css +0 -1
  430. package/storybook-static/assets/ui.module-31LPbZGK.js +0 -1
  431. package/storybook-static/assets/uiClasses-Bz6cvlDQ.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/tree-table/TreeTable.module.scss","../../src/tree-table/TreeTable.tsx"],"sourcesContent":[".treeColumnCell {\n\tpadding-inline-start: var(--space-sm);\n}\n\n.selectedIndicatorCell {\n\tbox-shadow: inset 0.1875rem 0 0 var(--content-accent);\n}\n\n.treeCell {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--space-xs);\n\tmin-width: 0;\n}\n\n.treeCellContent {\n\tmin-width: 0;\n\tflex: 1 1 auto;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.expanderButton {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex: 0 0 1.5rem;\n\twidth: 1.5rem;\n\theight: 1.5rem;\n\tpadding: 0;\n\tborder: 0;\n\tborder-radius: var(--radius-xs);\n\tbackground: transparent;\n\tcolor: var(--content-0);\n\tcursor: pointer;\n\n\t&:hover,\n\t&:focus-visible {\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n\n.expanderSpacer {\n\tflex: 0 0 1.5rem;\n\twidth: 1.5rem;\n\theight: 1.5rem;\n}\n\n.sentinel {\n\theight: 1px;\n}\n","import { useEffect, useEffectEvent, useMemo, useRef, useState, type ReactNode } from \"react\";\n\nimport { formatPipelineDisplayValue } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport {\n\ttype FoundationTableRow,\n\tfoundationTableFeatures,\n\tresolveTableLength,\n\tTableColumnDef,\n\ttype TableColumnOrderState,\n\ttype TableColumnSizingState,\n\ttype TableColumnVisibilityState,\n\tTableSelectionMode,\n\tuseTableRowSelection\n} from \"@ryuzaki13/react-foundation-lib/table\";\nimport { buildTreeTableRows, type TreeTableFlatHierarchy, type TreeTableRowNode } from \"@ryuzaki13/react-foundation-lib/tree-table\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { useTable, type ExpandedState } from \"@tanstack/react-table\";\nimport { ChevronDownIcon, ChevronRightIcon } from \"lucide-react\";\n\nimport {\n\tBaseTable,\n\tbuildBaseTableMergedCellsLayout,\n\tbuildTableFormattingSnapshot,\n\tFormattedTableCell,\n\tgetOrderedVisibleLeafColumns,\n\tshouldUseTableFormatting,\n\tuseTableColumnOrder,\n\tuseTableColumnPinning,\n\tuseTableColumnSizing,\n\tuseTableColumnVisibility,\n\ttype BaseTableCellRenderArgs,\n\ttype BaseTableColumnState,\n\ttype BaseTableProps,\n\ttype TableColumnPinningState\n} from \"../base-table\";\n\nimport styles from \"./TreeTable.module.scss\";\n\nimport type { TableFormulaRowData } from \"@ryuzaki13/react-foundation-lib/formulas\";\n\n/**\n * Внутренний тип строки TreeTable после преобразования в иерархию.\n */\ntype TreeTableRuntimeRow<TData extends object> = TreeTableRowNode<TData>;\n\n/**\n * Пропсы компонента TreeTable.\n *\n * Компонент принимает плоский OData-список и сам строит иерархию,\n * оставляя управление раскрытием и выбором во внутреннем состоянии.\n */\nexport interface TreeTableProps<TData extends object> {\n\t/**\n\t * Необязательный заголовок над таблицей.\n\t */\n\ttitle?: string;\n\t/**\n\t * Признак первичной загрузки.\n\t */\n\tisLoading?: boolean;\n\t/**\n\t * Признак фоновой догрузки или обновления данных.\n\t */\n\tisFetching?: boolean;\n\t/**\n\t * Плоский источник строк.\n\t */\n\tdata: readonly TData[] | undefined | null;\n\t/**\n\t * Описание колонок через исходный тип строки.\n\t */\n\tcolumns: readonly TableColumnDef<TData>[];\n\t/**\n\t * Правила восстановления дерева из плоского списка.\n\t */\n\thierarchy: TreeTableFlatHierarchy<TData>;\n\t/**\n\t * Режим выбора строк.\n\t */\n\tselectionMode?: TableSelectionMode;\n\t/**\n\t * Если `true`, при первом появлении данных раскрывает корневой уровень.\n\t */\n\texpandFirstLevel?: boolean;\n\t/**\n\t * Дополнительные строки, которые должны быть раскрыты при первой инициализации.\n\t */\n\tdefaultExpandedRowIds?: readonly string[];\n\t/**\n\t * Идентификатор колонки, в которой нужно рисовать tree-toggle и отступы.\n\t *\n\t * Если не указан, используется первая видимая колонка.\n\t */\n\ttreeColumnId?: string;\n\t/**\n\t * Отступ на один уровень вложенности.\n\t *\n\t * Числовое значение трактуется как `em`.\n\t */\n\tindentSize?: string | number;\n\t/**\n\t * Дополнительный CSS-класс корневого контейнера.\n\t */\n\tclassName?: string;\n\t/**\n\t * Дополнительный CSS-класс тега `table`.\n\t */\n\ttableClassName?: string;\n\t/**\n\t * Внешнее controlled-состояние видимости колонок.\n\t */\n\tcolumnVisibility?: TableColumnVisibilityState;\n\t/**\n\t * Стартовое uncontrolled-состояние видимости колонок.\n\t */\n\tdefaultColumnVisibility?: TableColumnVisibilityState;\n\t/**\n\t * Внешнее controlled-состояние порядка колонок.\n\t */\n\tcolumnOrder?: readonly string[];\n\t/**\n\t * Стартовое uncontrolled-состояние порядка колонок.\n\t */\n\tdefaultColumnOrder?: readonly string[];\n\t/**\n\t * Внешнее controlled-состояние ширин колонок в px.\n\t */\n\tcolumnSizing?: TableColumnSizingState;\n\t/**\n\t * Стартовое uncontrolled-состояние ширин колонок в px.\n\t */\n\tdefaultColumnSizing?: TableColumnSizingState;\n\t/**\n\t * Внешнее controlled-состояние start-pinning для колонок.\n\t */\n\tcolumnPinning?: TableColumnPinningState;\n\t/**\n\t * Стартовое uncontrolled-состояние start-pinning для колонок.\n\t */\n\tdefaultColumnPinning?: TableColumnPinningState;\n\t/**\n\t * Включает изменение ширины колонок через header-handle.\n\t */\n\tenableColumnResizing?: boolean;\n\t/**\n\t * Включает изменение порядка колонок через drag&drop заголовков.\n\t */\n\tenableColumnReordering?: boolean;\n\t/**\n\t * Минимальная ширина колонки при resize в px.\n\t */\n\tcolumnResizeMinWidth?: number;\n\t/**\n\t * Вызывается после изменения видимости колонок.\n\t */\n\tonColumnVisibilityChange?: (state: TableColumnVisibilityState) => void;\n\t/**\n\t * Вызывается после изменения порядка колонок.\n\t */\n\tonColumnOrderChange?: (state: TableColumnOrderState) => void;\n\t/**\n\t * Вызывается после изменения ширины колонок.\n\t */\n\tonColumnSizingChange?: (state: TableColumnSizingState) => void;\n\t/**\n\t * Вызывается после изменения start-pinning state.\n\t */\n\tonColumnPinningChange?: (state: TableColumnPinningState) => void;\n\t/**\n\t * Вызывается при активации строки кликом или клавиатурой.\n\t */\n\tonRowClick?: (row: TData) => void;\n\t/**\n\t * Вызывается после изменения выбранных строк.\n\t */\n\tonRowSelectionChange?: (rows: TData[]) => void;\n\t/**\n\t * Вызывается после изменения раскрытых узлов.\n\t */\n\tonExpandedRowIdsChange?: (rowIds: string[]) => void;\n\t/**\n\t * Вызывается при достижении конца таблицы внутри scroll-контейнера.\n\t */\n\tonReachEnd?: () => void;\n\t/**\n\t * Позволяет запретить выбор отдельных строк.\n\t */\n\tgetRowCanSelect?: (row: TData) => boolean;\n\t/**\n\t * Позволяет добавить CSS-класс для конкретной строки.\n\t */\n\tgetRowClassName?: (row: TData) => string | undefined;\n\t/**\n\t * Контекстное меню заголовка колонки. Получает runtime-строки дерева,\n\t * потому что BaseTable работает уже после сборки flat hierarchy.\n\t */\n\trenderHeaderContextMenu?: BaseTableProps<TreeTableRuntimeRow<TData>>[\"renderHeaderContextMenu\"];\n\t/**\n\t * Точка расширения содержимого ячейки после общего форматирования.\n\t *\n\t * Для tree-column в `defaultContent` передается только содержимое ячейки:\n\t * TreeTable сам добавит expander и отступ после выполнения слота.\n\t */\n\trenderCellContent?: BaseTableProps<TreeTableRuntimeRow<TData>>[\"renderCellContent\"];\n}\n\n/**\n * Преобразует массив идентификаторов в формат состояния раскрытия TanStack.\n */\nfunction toExpandedState(rowIds: readonly string[]): ExpandedState {\n\treturn Object.fromEntries(rowIds.map((rowId) => [rowId, true]));\n}\n\n/**\n * Извлекает из состояния раскрытия только активные идентификаторы.\n */\nfunction extractExpandedRowIds(expanded: ExpandedState): string[] {\n\tif (typeof expanded === \"boolean\") {\n\t\treturn [];\n\t}\n\n\treturn Object.keys(expanded).filter((rowId) => expanded[rowId]);\n}\n\n/**\n * Нормализует исходную строку, убирая зависимость от внутреннего поля `children`.\n */\nfunction resolveOriginalRow<TData extends object>(row: FoundationTableRow<TreeTableRuntimeRow<TData>>, rowById: Map<string, TData>): TData {\n\treturn rowById.get(row.id) ?? (row.original as TData);\n}\n\n/**\n * Рендерит содержимое древовидной ячейки.\n */\nfunction renderTreeCellContent<TData extends object>(\n\targs: BaseTableCellRenderArgs<TreeTableRuntimeRow<TData>>,\n\tcontent: ReactNode,\n\ttreeColumnId: string | undefined,\n\tindentSize: string | number\n): ReactNode {\n\tif (args.cell.column.id !== treeColumnId) {\n\t\treturn content;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.treeCell}\n\t\t\tstyle={{\n\t\t\t\tpaddingInlineStart: `calc(${args.row.depth} * ${resolveTableLength(indentSize) ?? \"0em\"})`\n\t\t\t}}>\n\t\t\t{args.row.getCanExpand() ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.expanderButton}\n\t\t\t\t\taria-label={args.row.getIsExpanded() ? \"Свернуть строку\" : \"Развернуть строку\"}\n\t\t\t\t\tdata-tree-table-interactive=\"true\"\n\t\t\t\t\tdata-ui=\"tree-table-expander\"\n\t\t\t\t\tdata-action={args.row.getIsExpanded() ? \"collapse-tree-table-row\" : \"expand-tree-table-row\"}\n\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\targs.row.toggleExpanded();\n\t\t\t\t\t}}>\n\t\t\t\t\t{args.row.getIsExpanded() ? <ChevronDownIcon size={16} /> : <ChevronRightIcon size={16} />}\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span className={styles.expanderSpacer} aria-hidden=\"true\" />\n\t\t\t)}\n\n\t\t\t<div className={styles.treeCellContent}>{content}</div>\n\t\t</div>\n\t);\n}\n\n/**\n * Древовидная таблица на базе TanStack Table для плоских OData-данных.\n */\nexport function TreeTable<TData extends object>({\n\ttitle,\n\tisLoading,\n\tisFetching,\n\tdata,\n\tcolumns,\n\thierarchy,\n\tselectionMode = \"none\",\n\texpandFirstLevel = false,\n\tdefaultExpandedRowIds,\n\ttreeColumnId,\n\tindentSize = 1,\n\tclassName,\n\ttableClassName,\n\tcolumnVisibility,\n\tdefaultColumnVisibility,\n\tcolumnOrder,\n\tdefaultColumnOrder,\n\tcolumnSizing,\n\tdefaultColumnSizing,\n\tcolumnPinning,\n\tdefaultColumnPinning,\n\tenableColumnResizing = false,\n\tenableColumnReordering = false,\n\tcolumnResizeMinWidth,\n\tonColumnVisibilityChange,\n\tonColumnOrderChange,\n\tonColumnSizingChange,\n\tonColumnPinningChange,\n\tonRowClick,\n\tonRowSelectionChange,\n\tonExpandedRowIdsChange,\n\tonReachEnd,\n\tgetRowCanSelect,\n\tgetRowClassName,\n\trenderHeaderContextMenu,\n\trenderCellContent\n}: TreeTableProps<TData>) {\n\tconst treeData = useMemo(() => buildTreeTableRows(data ?? [], hierarchy), [data, hierarchy]);\n\tconst formattingSnapshot = useMemo(() => buildTableFormattingSnapshot(columns), [columns]);\n\tconst initialExpandedRowIds = useMemo(() => {\n\t\tconst nextExpandedRowIds = new Set(defaultExpandedRowIds ?? []);\n\n\t\tif (expandFirstLevel) {\n\t\t\tfor (const rootRowId of treeData.rootRowIds) {\n\t\t\t\tnextExpandedRowIds.add(rootRowId);\n\t\t\t}\n\t\t}\n\n\t\treturn Array.from(nextExpandedRowIds);\n\t}, [defaultExpandedRowIds, expandFirstLevel, treeData.rootRowIds]);\n\n\tconst [expanded, setExpanded] = useState<ExpandedState>({});\n\tconst hasInitializedExpansionRef = useRef(false);\n\tconst scrollableRef = useRef<HTMLDivElement | null>(null);\n\tconst sentinelRef = useRef<HTMLDivElement | null>(null);\n\n\tconst { rowSelection, activateRowSelection } = useTableRowSelection({\n\t\tavailableRowIds: treeData.allRowIds,\n\t\trowById: treeData.rowById,\n\t\tselectionMode,\n\t\tonRowSelectionChange\n\t});\n\tconst { columnVisibility: resolvedColumnVisibility, onColumnVisibilityChange: handleColumnVisibilityChange } = useTableColumnVisibility(\n\t\t{\n\t\t\tcolumnVisibility,\n\t\t\tdefaultColumnVisibility,\n\t\t\tonColumnVisibilityChange\n\t\t}\n\t);\n\tconst { columnOrder: resolvedColumnOrder, onColumnOrderChange: handleColumnOrderChange } = useTableColumnOrder({\n\t\tcolumnOrder,\n\t\tdefaultColumnOrder,\n\t\tonColumnOrderChange\n\t});\n\tconst { columnSizing: resolvedColumnSizing, onColumnSizingChange: handleColumnSizingChange } = useTableColumnSizing({\n\t\tcolumnSizing,\n\t\tdefaultColumnSizing,\n\t\tcolumnResizeMinWidth,\n\t\tonColumnSizingChange\n\t});\n\tconst { columnPinning: resolvedColumnPinning, onColumnPinningChange: handleColumnPinningChange } = useTableColumnPinning({\n\t\tcolumnPinning,\n\t\tdefaultColumnPinning,\n\t\tonColumnPinningChange\n\t});\n\n\tconst baseTableColumnState = useMemo<BaseTableColumnState>(\n\t\t() => ({\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility\n\t\t}),\n\t\t[resolvedColumnOrder, resolvedColumnPinning, resolvedColumnSizing, resolvedColumnVisibility]\n\t);\n\n\tconst syncExpandedState = useEffectEvent((availableRowIds: readonly string[], nextInitialExpandedRowIds: readonly string[]) => {\n\t\tif (availableRowIds.length === 0) {\n\t\t\thasInitializedExpansionRef.current = false;\n\t\t\tsetExpanded({});\n\t\t\treturn;\n\t\t}\n\n\t\tconst availableRowIdSet = new Set(availableRowIds);\n\n\t\tsetExpanded((currentExpanded) => {\n\t\t\tconst persistedRowIds = extractExpandedRowIds(currentExpanded).filter((rowId) => availableRowIdSet.has(rowId));\n\n\t\t\tif (!hasInitializedExpansionRef.current) {\n\t\t\t\thasInitializedExpansionRef.current = true;\n\n\t\t\t\tconst seededRowIds = Array.from(\n\t\t\t\t\tnew Set([...persistedRowIds, ...nextInitialExpandedRowIds.filter((rowId) => availableRowIdSet.has(rowId))])\n\t\t\t\t);\n\n\t\t\t\treturn toExpandedState(seededRowIds);\n\t\t\t}\n\n\t\t\treturn toExpandedState(persistedRowIds);\n\t\t});\n\t});\n\n\tconst emitExpandedRowIdsChange = useEffectEvent((currentExpanded: ExpandedState) => {\n\t\tonExpandedRowIdsChange?.(extractExpandedRowIds(currentExpanded));\n\t});\n\n\tconst emitReachEnd = useEffectEvent(() => {\n\t\tonReachEnd?.();\n\t});\n\n\tuseEffect(() => {\n\t\tsyncExpandedState(treeData.allRowIds, initialExpandedRowIds);\n\t}, [initialExpandedRowIds, treeData.allRowIds]);\n\n\tuseEffect(() => {\n\t\temitExpandedRowIdsChange(expanded);\n\t}, [expanded]);\n\n\tuseEffect(() => {\n\t\tif (!onReachEnd || !scrollableRef.current || !sentinelRef.current || isLoading) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tconst entry = entries[0];\n\n\t\t\t\tif (entry?.isIntersecting) {\n\t\t\t\t\temitReachEnd();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: scrollableRef.current,\n\t\t\t\tthreshold: 0.1\n\t\t\t}\n\t\t);\n\n\t\tobserver.observe(sentinelRef.current);\n\n\t\treturn () => observer.disconnect();\n\t}, [isLoading, onReachEnd, treeData.rows.length]);\n\n\tconst table = useTable({\n\t\tfeatures: foundationTableFeatures,\n\t\tdata: treeData.rows as TreeTableRuntimeRow<TData>[],\n\t\tcolumns: columns as TableColumnDef<TreeTableRuntimeRow<TData>>[],\n\t\tstate: {\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility,\n\t\t\texpanded,\n\t\t\trowSelection\n\t\t},\n\t\tgetRowId: (row) => hierarchy.getRowId(row as TData),\n\t\tgetSubRows: (row) => row.children,\n\t\tonColumnOrderChange: handleColumnOrderChange,\n\t\tonColumnPinningChange: handleColumnPinningChange,\n\t\tonColumnSizingChange: handleColumnSizingChange,\n\t\tonColumnVisibilityChange: handleColumnVisibilityChange,\n\t\tonExpandedChange: setExpanded,\n\t\tenableMultiRowSelection: selectionMode === \"multi\",\n\t\tenableRowSelection: (row) => {\n\t\t\tif (selectionMode === \"none\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\t\treturn getRowCanSelect ? getRowCanSelect(originalRow) : true;\n\t\t}\n\t});\n\n\tconst visibleLeafColumns = getOrderedVisibleLeafColumns(table, baseTableColumnState);\n\tconst resolvedTreeColumnId = treeColumnId ?? visibleLeafColumns[0]?.id;\n\tconst rowModelRows = table.getRowModel().rows;\n\tconst mergedCellLayout = useMemo(\n\t\t() =>\n\t\t\tbuildBaseTableMergedCellsLayout({\n\t\t\t\trows: rowModelRows,\n\t\t\t\tcolumns: visibleLeafColumns,\n\t\t\t\tresolveRowBoundaryKey: (row) => row.depth,\n\t\t\t\texcludeColumnIds: resolvedTreeColumnId ? new Set([resolvedTreeColumnId]) : undefined\n\t\t\t}),\n\t\t[rowModelRows, visibleLeafColumns, resolvedTreeColumnId]\n\t);\n\n\t/**\n\t * Активирует строку: обновляет выбор в соответствии с режимом и вызывает внешний callback.\n\t */\n\tconst activateRow = (row: FoundationTableRow<TreeTableRuntimeRow<TData>>) => {\n\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\tactivateRowSelection(row.id, row.getCanSelect());\n\t\tonRowClick?.(originalRow);\n\t};\n\n\treturn (\n\t\t<BaseTable\n\t\t\ttable={table}\n\t\t\tcolumnState={baseTableColumnState}\n\t\t\ttitle={title}\n\t\t\tisLoading={isLoading}\n\t\t\tisFetching={isFetching}\n\t\t\tclassName={className}\n\t\t\ttableClassName={tableClassName}\n\t\t\tselectionMode={selectionMode}\n\t\t\tscrollableRef={scrollableRef}\n\t\t\tinteractiveElementSelector='[data-tree-table-interactive=\"true\"]'\n\t\t\tonActivateRow={selectionMode !== \"none\" || onRowClick ? activateRow : undefined}\n\t\t\tisRowInteractive={(row) => Boolean(onRowClick || (selectionMode !== \"none\" && row.getCanSelect()))}\n\t\t\tgetRowClassName={(row) => {\n\t\t\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\t\t\treturn getRowClassName?.(originalRow);\n\t\t\t}}\n\t\t\tgetCellClassName={({ row, cell }) =>\n\t\t\t\tcn(\n\t\t\t\t\tcell.column.id === resolvedTreeColumnId && styles.treeColumnCell,\n\t\t\t\t\tcell.column.id === resolvedTreeColumnId && row.getIsSelected() && styles.selectedIndicatorCell\n\t\t\t\t)\n\t\t\t}\n\t\t\tgetCellLayout={({ cell }) => mergedCellLayout.get(cell.id)}\n\t\t\trenderHeaderContextMenu={renderHeaderContextMenu}\n\t\t\tenableColumnResizing={enableColumnResizing}\n\t\t\tenableColumnReordering={enableColumnReordering}\n\t\t\tcolumnResizeMinWidth={columnResizeMinWidth}\n\t\t\trenderCellContent={(args) => {\n\t\t\t\tconst originalRow = resolveOriginalRow(args.row, treeData.rowById);\n\t\t\t\tconst displayValue = formatPipelineDisplayValue({\n\t\t\t\t\tfield: formattingSnapshot.runtimeByColumnId[args.cell.column.id],\n\t\t\t\t\trawValue: args.cell.getValue(),\n\t\t\t\t\trowData: originalRow as TableFormulaRowData,\n\t\t\t\t\trowKind: \"tree\"\n\t\t\t\t});\n\t\t\t\tconst defaultContent = shouldUseTableFormatting({\n\t\t\t\t\tcolumnId: args.cell.column.id,\n\t\t\t\t\truntimeByColumnId: formattingSnapshot.runtimeByColumnId,\n\t\t\t\t\tcustomCellColumnIds: formattingSnapshot.customCellColumnIds\n\t\t\t\t}) ? (\n\t\t\t\t\t<FormattedTableCell displayValue={displayValue} align={args.columnMeta?.align} />\n\t\t\t\t) : (\n\t\t\t\t\targs.defaultContent\n\t\t\t\t);\n\t\t\t\tconst content = renderCellContent\n\t\t\t\t\t? renderCellContent({\n\t\t\t\t\t\t\t...args,\n\t\t\t\t\t\t\tdefaultContent,\n\t\t\t\t\t\t\tdisplayValue\n\t\t\t\t\t\t})\n\t\t\t\t\t: defaultContent;\n\n\t\t\t\treturn renderTreeCellContent(args, content, resolvedTreeColumnId, indentSize);\n\t\t\t}}\n\t\t\tafterTableContent={onReachEnd ? <div ref={sentinelRef} className={styles.sentinel} aria-hidden=\"true\" /> : null}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;ACiNA,SAAS,EAAgB,GAA0C;CAClE,OAAO,OAAO,YAAY,EAAO,KAAK,MAAU,CAAC,GAAO,EAAI,CAAC,CAAC;AAC/D;AAKA,SAAS,EAAsB,GAAmC;CAKjE,OAJI,OAAO,KAAa,YAChB,CAAC,IAGF,OAAO,KAAK,CAAQ,CAAC,CAAC,QAAQ,MAAU,EAAS,EAAM;AAC/D;AAKA,SAAS,EAAyC,GAAqD,GAAoC;CAC1I,OAAO,EAAQ,IAAI,EAAI,EAAE,KAAM,EAAI;AACpC;AAKA,SAAS,GACR,GACA,GACA,GACA,GACY;CAKZ,OAJI,EAAK,KAAK,OAAO,OAAO,IAK3B,kBAAC,OAAD;EACC,WAAW,EAAO;EAClB,OAAO,EACN,oBAAoB,QAAQ,EAAK,IAAI,MAAM,KAAK,EAAmB,CAAU,KAAK,MAAM,GACzF;EAJD,UAAA,CAKE,EAAK,IAAI,aAAa,IACtB,kBAAC,UAAD;GACC,MAAK;GACL,WAAW,EAAO;GAClB,cAAY,EAAK,IAAI,cAAc,IAAI,oBAAoB;GAC3D,+BAA4B;GAC5B,WAAQ;GACR,eAAa,EAAK,IAAI,cAAc,IAAI,4BAA4B;GACpE,UAAU,MAAU;IAEnB,AADA,EAAM,gBAAgB,GACtB,EAAK,IAAI,eAAe;GACzB;GACC,UAAA,EAAK,IAAI,cAAc,IAAI,kBAAC,GAAD,EAAiB,MAAM,GAAK,CAAA,IAAI,kBAAC,GAAD,EAAkB,MAAM,GAAK,CAAA;EAClF,CAAA,IAER,kBAAC,QAAD;GAAM,WAAW,EAAO;GAAgB,eAAY;EAAQ,CAAA,GAG7D,kBAAC,OAAD;GAAK,WAAW,EAAO;GAAkB,UAAA;EAAa,CAAA,CAClD;MA5BE;AA8BT;AAKA,SAAgB,EAAgC,EAC/C,UACA,cACA,eACA,SACA,YACA,cACA,mBAAgB,QAChB,sBAAmB,IACnB,0BACA,iBACA,iBAAa,GACb,eACA,oBACA,sBACA,4BACA,iBACA,wBACA,kBACA,yBACA,mBACA,yBACA,0BAAuB,IACvB,4BAAyB,IACzB,yBACA,6BACA,wBACA,yBACA,0BACA,eACA,0BACA,4BACA,eACA,oBACA,qBACA,6BACA,wBACyB;CACzB,IAAM,IAAW,QAAc,GAAmB,KAAQ,CAAC,GAAG,CAAS,GAAG,CAAC,GAAM,CAAS,CAAC,GACrF,IAAqB,QAAc,EAA6B,CAAO,GAAG,CAAC,CAAO,CAAC,GACnF,IAAwB,QAAc;EAC3C,IAAM,IAAqB,IAAI,IAAI,KAAyB,CAAC,CAAC;EAE9D,IAAI,GACH,KAAK,IAAM,KAAa,EAAS,YAChC,EAAmB,IAAI,CAAS;EAIlC,OAAO,MAAM,KAAK,CAAkB;CACrC,GAAG;EAAC;EAAuB;EAAkB,EAAS;CAAU,CAAC,GAE3D,CAAC,GAAU,KAAe,GAAwB,CAAC,CAAC,GACpD,IAA6B,EAAO,EAAK,GACzC,IAAgB,EAA8B,IAAI,GAClD,IAAc,EAA8B,IAAI,GAEhD,EAAE,kBAAc,6BAAyB,GAAqB;EACnE,iBAAiB,EAAS;EAC1B,SAAS,EAAS;EAClB;EACA;CACD,CAAC,GACK,EAAE,kBAAkB,GAA0B,0BAA0B,OAAiC,GAC9G;EACC;EACA;EACA;CACD,CACD,GACM,EAAE,aAAa,GAAqB,qBAAqB,OAA4B,GAAoB;EAC9G;EACA;EACA;CACD,CAAC,GACK,EAAE,cAAc,GAAsB,sBAAsB,OAA6B,EAAqB;EACnH;EACA;EACA;EACA;CACD,CAAC,GACK,EAAE,eAAe,GAAuB,uBAAuB,OAA8B,EAAsB;EACxH;EACA;EACA;CACD,CAAC,GAEK,IAAuB,SACrB;EACN,aAAa;EACb,eAAe;EACf,cAAc;EACd,kBAAkB;CACnB,IACA;EAAC;EAAqB;EAAuB;EAAsB;CAAwB,CAC5F,GAEM,KAAoB,GAAgB,GAAoC,MAAiD;EAC9H,IAAI,EAAgB,WAAW,GAAG;GAEjC,AADA,EAA2B,UAAU,IACrC,EAAY,CAAC,CAAC;GACd;EACD;EAEA,IAAM,IAAoB,IAAI,IAAI,CAAe;EAEjD,GAAa,MAAoB;GAChC,IAAM,IAAkB,EAAsB,CAAe,CAAC,CAAC,QAAQ,MAAU,EAAkB,IAAI,CAAK,CAAC;GAY7G,OAVK,EAA2B,UAUzB,EAAgB,CAAe,KATrC,EAA2B,UAAU,IAM9B,EAJc,MAAM,qBAC1B,IAAI,IAAI,CAAC,GAAG,GAAiB,GAAG,EAA0B,QAAQ,MAAU,EAAkB,IAAI,CAAK,CAAC,CAAC,CAAC,CAGpF,CAAY;EAIrC,CAAC;CACF,CAAC,GAEK,KAA2B,GAAgB,MAAmC;EACnF,KAAyB,EAAsB,CAAe,CAAC;CAChE,CAAC,GAEK,KAAe,QAAqB;EACzC,IAAa;CACd,CAAC;CAUD,AARA,QAAgB;EACf,GAAkB,EAAS,WAAW,CAAqB;CAC5D,GAAG,CAAC,GAAuB,EAAS,SAAS,CAAC,GAE9C,QAAgB;EACf,GAAyB,CAAQ;CAClC,GAAG,CAAC,CAAQ,CAAC,GAEb,QAAgB;EACf,IAAI,CAAC,KAAc,CAAC,EAAc,WAAW,CAAC,EAAY,WAAW,GACpE;EAGD,IAAM,IAAW,IAAI,sBACnB,MAAY;GAGZ,AAFc,EAAQ,EAElB,EAAO,kBACV,GAAa;EAEf,GACA;GACC,MAAM,EAAc;GACpB,WAAW;EACZ,CACD;EAIA,OAFA,EAAS,QAAQ,EAAY,OAAO,SAEvB,EAAS,WAAW;CAClC,GAAG;EAAC;EAAW;EAAY,EAAS,KAAK;CAAM,CAAC;CAEhD,IAAM,IAAQ,GAAS;EACtB,UAAU;EACV,MAAM,EAAS;EACN;EACT,OAAO;GACN,aAAa;GACb,eAAe;GACf,cAAc;GACd,kBAAkB;GAClB;GACA;EACD;EACA,WAAW,MAAQ,EAAU,SAAS,CAAY;EAClD,aAAa,MAAQ,EAAI;EACzB,qBAAqB;EACrB,uBAAuB;EACvB,sBAAsB;EACtB,0BAA0B;EAC1B,kBAAkB;EAClB,yBAAyB,MAAkB;EAC3C,qBAAqB,MAAQ;GAC5B,IAAI,MAAkB,QACrB,OAAO;GAGR,IAAM,IAAc,EAAmB,GAAK,EAAS,OAAO;GAE5D,OAAO,MAAkB,EAAgB,CAAW;EACrD;CACD,CAAC,GAEK,IAAqB,GAA6B,GAAO,CAAoB,GAC7E,IAAuB,KAAgB,EAAmB,EAAE,EAAE,IAC9D,IAAe,EAAM,YAAY,CAAC,CAAC,MACnC,KAAmB,QAEvB,GAAgC;EAC/B,MAAM;EACN,SAAS;EACT,wBAAwB,MAAQ,EAAI;EACpC,kBAAkB,oBAAuB,IAAI,IAAI,CAAC,CAAoB,CAAC,IAAI,KAAA;CAC5E,CAAC,GACF;EAAC;EAAc;EAAoB;CAAoB,CACxD;CAYA,OACC,kBAAC,GAAD;EACQ;EACP,aAAa;EACN;EACI;EACC;EACD;EACK;EACD;EACA;EACf,4BAA2B;EAC3B,eAAe,MAAkB,UAAU,KAnBxB,MAAwD;GAC5E,IAAM,IAAc,EAAmB,GAAK,EAAS,OAAO;GAG5D,AADA,GAAqB,EAAI,IAAI,EAAI,aAAa,CAAC,GAC/C,IAAa,CAAW;EACzB,IAcwE,KAAA;EACtE,mBAAmB,MAAQ,GAAQ,KAAe,MAAkB,UAAU,EAAI,aAAa;EAC/F,kBAAkB,MAAQ;GACzB,IAAM,IAAc,EAAmB,GAAK,EAAS,OAAO;GAE5D,OAAO,KAAkB,CAAW;EACrC;EACA,mBAAmB,EAAE,QAAK,cACzB,GACC,EAAK,OAAO,OAAO,KAAwB,EAAO,gBAClD,EAAK,OAAO,OAAO,KAAwB,EAAI,cAAc,KAAK,EAAO,qBAC1E;EAED,gBAAgB,EAAE,cAAW,GAAiB,IAAI,EAAK,EAAE;EAChC;EACH;EACE;EACF;EACtB,oBAAoB,MAAS;GAC5B,IAAM,IAAc,EAAmB,EAAK,KAAK,EAAS,OAAO,GAC3D,IAAe,GAA2B;IAC/C,OAAO,EAAmB,kBAAkB,EAAK,KAAK,OAAO;IAC7D,UAAU,EAAK,KAAK,SAAS;IAC7B,SAAS;IACT,SAAS;GACV,CAAC,GACK,IAAiB,EAAyB;IAC/C,UAAU,EAAK,KAAK,OAAO;IAC3B,mBAAmB,EAAmB;IACtC,qBAAqB,EAAmB;GACzC,CAAC,IACA,kBAAC,IAAD;IAAkC;IAAc,OAAO,EAAK,YAAY;GAAQ,CAAA,IAEhF,EAAK;GAUN,OAAO,GAAsB,GARb,IACb,EAAkB;IAClB,GAAG;IACH;IACA;GACD,CAAC,IACA,GAEyC,GAAsB,EAAU;EAC7E;EACA,mBAAmB,IAAa,kBAAC,OAAD;GAAK,KAAK;GAAa,WAAW,EAAO;GAAU,eAAY;EAAQ,CAAA,IAAI;CAC3G,CAAA;AAEH"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/tree-table/TreeTable.module.scss","../../src/tree-table/TreeTable.tsx"],"sourcesContent":[".treeColumnCell {\n\tpadding-inline-start: var(--space-sm);\n}\n\n.selectedIndicatorCell {\n\tbox-shadow: inset 0.1875rem 0 0 var(--accent-text);\n}\n\n.treeCell {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--space-xs);\n\tmin-width: 0;\n}\n\n.treeCellContent {\n\tmin-width: 0;\n\tflex: 1 1 auto;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.expanderButton {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex: 0 0 1.5rem;\n\twidth: 1.5rem;\n\theight: 1.5rem;\n\tpadding: 0;\n\tborder: 0;\n\tborder-radius: var(--radius-xs);\n\tbackground: transparent;\n\tcolor: var(--content-0);\n\tcursor: pointer;\n\n\t&:hover,\n\t&:focus-visible {\n\t\tbackground-color: var(--surface-2);\n\t}\n}\n\n.expanderSpacer {\n\tflex: 0 0 1.5rem;\n\twidth: 1.5rem;\n\theight: 1.5rem;\n}\n\n.sentinel {\n\theight: 1px;\n}\n","import { useEffect, useEffectEvent, useMemo, useRef, useState, type ReactNode } from \"react\";\n\nimport { formatPipelineDisplayValue } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport {\n\ttype FoundationTableRow,\n\tfoundationTableFeatures,\n\tresolveTableLength,\n\tTableColumnDef,\n\ttype TableColumnOrderState,\n\ttype TableColumnSizingState,\n\ttype TableColumnVisibilityState,\n\tTableSelectionMode,\n\tuseTableRowSelection\n} from \"@ryuzaki13/react-foundation-lib/table\";\nimport { buildTreeTableRows, type TreeTableFlatHierarchy, type TreeTableRowNode } from \"@ryuzaki13/react-foundation-lib/tree-table\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { useTable, type ExpandedState } from \"@tanstack/react-table\";\nimport { ChevronDownIcon, ChevronRightIcon } from \"lucide-react\";\n\nimport {\n\tBaseTable,\n\tbuildBaseTableMergedCellsLayout,\n\tbuildTableFormattingSnapshot,\n\tFormattedTableCell,\n\tgetOrderedVisibleLeafColumns,\n\tshouldUseTableFormatting,\n\tuseTableColumnOrder,\n\tuseTableColumnPinning,\n\tuseTableColumnSizing,\n\tuseTableColumnVisibility,\n\ttype BaseTableCellRenderArgs,\n\ttype BaseTableColumnState,\n\ttype BaseTableProps,\n\ttype TableColumnPinningState\n} from \"../base-table\";\n\nimport styles from \"./TreeTable.module.scss\";\n\nimport type { TableFormulaRowData } from \"@ryuzaki13/react-foundation-lib/formulas\";\n\n/**\n * Внутренний тип строки TreeTable после преобразования в иерархию.\n */\ntype TreeTableRuntimeRow<TData extends object> = TreeTableRowNode<TData>;\n\n/**\n * Пропсы компонента TreeTable.\n *\n * Компонент принимает плоский OData-список и сам строит иерархию,\n * оставляя управление раскрытием и выбором во внутреннем состоянии.\n */\nexport interface TreeTableProps<TData extends object> {\n\t/**\n\t * Необязательный заголовок над таблицей.\n\t */\n\ttitle?: string;\n\t/**\n\t * Признак первичной загрузки.\n\t */\n\tisLoading?: boolean;\n\t/**\n\t * Признак фоновой догрузки или обновления данных.\n\t */\n\tisFetching?: boolean;\n\t/**\n\t * Плоский источник строк.\n\t */\n\tdata: readonly TData[] | undefined | null;\n\t/**\n\t * Описание колонок через исходный тип строки.\n\t */\n\tcolumns: readonly TableColumnDef<TData>[];\n\t/**\n\t * Правила восстановления дерева из плоского списка.\n\t */\n\thierarchy: TreeTableFlatHierarchy<TData>;\n\t/**\n\t * Режим выбора строк.\n\t */\n\tselectionMode?: TableSelectionMode;\n\t/**\n\t * Если `true`, при первом появлении данных раскрывает корневой уровень.\n\t */\n\texpandFirstLevel?: boolean;\n\t/**\n\t * Дополнительные строки, которые должны быть раскрыты при первой инициализации.\n\t */\n\tdefaultExpandedRowIds?: readonly string[];\n\t/**\n\t * Идентификатор колонки, в которой нужно рисовать tree-toggle и отступы.\n\t *\n\t * Если не указан, используется первая видимая колонка.\n\t */\n\ttreeColumnId?: string;\n\t/**\n\t * Отступ на один уровень вложенности.\n\t *\n\t * Числовое значение трактуется как `em`.\n\t */\n\tindentSize?: string | number;\n\t/**\n\t * Дополнительный CSS-класс корневого контейнера.\n\t */\n\tclassName?: string;\n\t/**\n\t * Дополнительный CSS-класс тега `table`.\n\t */\n\ttableClassName?: string;\n\t/**\n\t * Внешнее controlled-состояние видимости колонок.\n\t */\n\tcolumnVisibility?: TableColumnVisibilityState;\n\t/**\n\t * Стартовое uncontrolled-состояние видимости колонок.\n\t */\n\tdefaultColumnVisibility?: TableColumnVisibilityState;\n\t/**\n\t * Внешнее controlled-состояние порядка колонок.\n\t */\n\tcolumnOrder?: readonly string[];\n\t/**\n\t * Стартовое uncontrolled-состояние порядка колонок.\n\t */\n\tdefaultColumnOrder?: readonly string[];\n\t/**\n\t * Внешнее controlled-состояние ширин колонок в px.\n\t */\n\tcolumnSizing?: TableColumnSizingState;\n\t/**\n\t * Стартовое uncontrolled-состояние ширин колонок в px.\n\t */\n\tdefaultColumnSizing?: TableColumnSizingState;\n\t/**\n\t * Внешнее controlled-состояние start-pinning для колонок.\n\t */\n\tcolumnPinning?: TableColumnPinningState;\n\t/**\n\t * Стартовое uncontrolled-состояние start-pinning для колонок.\n\t */\n\tdefaultColumnPinning?: TableColumnPinningState;\n\t/**\n\t * Включает изменение ширины колонок через header-handle.\n\t */\n\tenableColumnResizing?: boolean;\n\t/**\n\t * Включает изменение порядка колонок через drag&drop заголовков.\n\t */\n\tenableColumnReordering?: boolean;\n\t/**\n\t * Минимальная ширина колонки при resize в px.\n\t */\n\tcolumnResizeMinWidth?: number;\n\t/**\n\t * Вызывается после изменения видимости колонок.\n\t */\n\tonColumnVisibilityChange?: (state: TableColumnVisibilityState) => void;\n\t/**\n\t * Вызывается после изменения порядка колонок.\n\t */\n\tonColumnOrderChange?: (state: TableColumnOrderState) => void;\n\t/**\n\t * Вызывается после изменения ширины колонок.\n\t */\n\tonColumnSizingChange?: (state: TableColumnSizingState) => void;\n\t/**\n\t * Вызывается после изменения start-pinning state.\n\t */\n\tonColumnPinningChange?: (state: TableColumnPinningState) => void;\n\t/**\n\t * Вызывается при активации строки кликом или клавиатурой.\n\t */\n\tonRowClick?: (row: TData) => void;\n\t/**\n\t * Вызывается после изменения выбранных строк.\n\t */\n\tonRowSelectionChange?: (rows: TData[]) => void;\n\t/**\n\t * Вызывается после изменения раскрытых узлов.\n\t */\n\tonExpandedRowIdsChange?: (rowIds: string[]) => void;\n\t/**\n\t * Вызывается при достижении конца таблицы внутри scroll-контейнера.\n\t */\n\tonReachEnd?: () => void;\n\t/**\n\t * Позволяет запретить выбор отдельных строк.\n\t */\n\tgetRowCanSelect?: (row: TData) => boolean;\n\t/**\n\t * Позволяет добавить CSS-класс для конкретной строки.\n\t */\n\tgetRowClassName?: (row: TData) => string | undefined;\n\t/**\n\t * Контекстное меню заголовка колонки. Получает runtime-строки дерева,\n\t * потому что BaseTable работает уже после сборки flat hierarchy.\n\t */\n\trenderHeaderContextMenu?: BaseTableProps<TreeTableRuntimeRow<TData>>[\"renderHeaderContextMenu\"];\n\t/**\n\t * Точка расширения содержимого ячейки после общего форматирования.\n\t *\n\t * Для tree-column в `defaultContent` передается только содержимое ячейки:\n\t * TreeTable сам добавит expander и отступ после выполнения слота.\n\t */\n\trenderCellContent?: BaseTableProps<TreeTableRuntimeRow<TData>>[\"renderCellContent\"];\n}\n\n/**\n * Преобразует массив идентификаторов в формат состояния раскрытия TanStack.\n */\nfunction toExpandedState(rowIds: readonly string[]): ExpandedState {\n\treturn Object.fromEntries(rowIds.map((rowId) => [rowId, true]));\n}\n\n/**\n * Извлекает из состояния раскрытия только активные идентификаторы.\n */\nfunction extractExpandedRowIds(expanded: ExpandedState): string[] {\n\tif (typeof expanded === \"boolean\") {\n\t\treturn [];\n\t}\n\n\treturn Object.keys(expanded).filter((rowId) => expanded[rowId]);\n}\n\n/**\n * Нормализует исходную строку, убирая зависимость от внутреннего поля `children`.\n */\nfunction resolveOriginalRow<TData extends object>(row: FoundationTableRow<TreeTableRuntimeRow<TData>>, rowById: Map<string, TData>): TData {\n\treturn rowById.get(row.id) ?? (row.original as TData);\n}\n\n/**\n * Рендерит содержимое древовидной ячейки.\n */\nfunction renderTreeCellContent<TData extends object>(\n\targs: BaseTableCellRenderArgs<TreeTableRuntimeRow<TData>>,\n\tcontent: ReactNode,\n\ttreeColumnId: string | undefined,\n\tindentSize: string | number\n): ReactNode {\n\tif (args.cell.column.id !== treeColumnId) {\n\t\treturn content;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={styles.treeCell}\n\t\t\tstyle={{\n\t\t\t\tpaddingInlineStart: `calc(${args.row.depth} * ${resolveTableLength(indentSize) ?? \"0em\"})`\n\t\t\t}}>\n\t\t\t{args.row.getCanExpand() ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={styles.expanderButton}\n\t\t\t\t\taria-label={args.row.getIsExpanded() ? \"Свернуть строку\" : \"Развернуть строку\"}\n\t\t\t\t\tdata-tree-table-interactive=\"true\"\n\t\t\t\t\tdata-ui=\"tree-table-expander\"\n\t\t\t\t\tdata-action={args.row.getIsExpanded() ? \"collapse-tree-table-row\" : \"expand-tree-table-row\"}\n\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\targs.row.toggleExpanded();\n\t\t\t\t\t}}>\n\t\t\t\t\t{args.row.getIsExpanded() ? <ChevronDownIcon size={16} /> : <ChevronRightIcon size={16} />}\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span className={styles.expanderSpacer} aria-hidden=\"true\" />\n\t\t\t)}\n\n\t\t\t<div className={styles.treeCellContent}>{content}</div>\n\t\t</div>\n\t);\n}\n\n/**\n * Древовидная таблица на базе TanStack Table для плоских OData-данных.\n */\nexport function TreeTable<TData extends object>({\n\ttitle,\n\tisLoading,\n\tisFetching,\n\tdata,\n\tcolumns,\n\thierarchy,\n\tselectionMode = \"none\",\n\texpandFirstLevel = false,\n\tdefaultExpandedRowIds,\n\ttreeColumnId,\n\tindentSize = 1,\n\tclassName,\n\ttableClassName,\n\tcolumnVisibility,\n\tdefaultColumnVisibility,\n\tcolumnOrder,\n\tdefaultColumnOrder,\n\tcolumnSizing,\n\tdefaultColumnSizing,\n\tcolumnPinning,\n\tdefaultColumnPinning,\n\tenableColumnResizing = false,\n\tenableColumnReordering = false,\n\tcolumnResizeMinWidth,\n\tonColumnVisibilityChange,\n\tonColumnOrderChange,\n\tonColumnSizingChange,\n\tonColumnPinningChange,\n\tonRowClick,\n\tonRowSelectionChange,\n\tonExpandedRowIdsChange,\n\tonReachEnd,\n\tgetRowCanSelect,\n\tgetRowClassName,\n\trenderHeaderContextMenu,\n\trenderCellContent\n}: TreeTableProps<TData>) {\n\tconst treeData = useMemo(() => buildTreeTableRows(data ?? [], hierarchy), [data, hierarchy]);\n\tconst formattingSnapshot = useMemo(() => buildTableFormattingSnapshot(columns), [columns]);\n\tconst initialExpandedRowIds = useMemo(() => {\n\t\tconst nextExpandedRowIds = new Set(defaultExpandedRowIds ?? []);\n\n\t\tif (expandFirstLevel) {\n\t\t\tfor (const rootRowId of treeData.rootRowIds) {\n\t\t\t\tnextExpandedRowIds.add(rootRowId);\n\t\t\t}\n\t\t}\n\n\t\treturn Array.from(nextExpandedRowIds);\n\t}, [defaultExpandedRowIds, expandFirstLevel, treeData.rootRowIds]);\n\n\tconst [expanded, setExpanded] = useState<ExpandedState>({});\n\tconst hasInitializedExpansionRef = useRef(false);\n\tconst scrollableRef = useRef<HTMLDivElement | null>(null);\n\tconst sentinelRef = useRef<HTMLDivElement | null>(null);\n\n\tconst { rowSelection, activateRowSelection } = useTableRowSelection({\n\t\tavailableRowIds: treeData.allRowIds,\n\t\trowById: treeData.rowById,\n\t\tselectionMode,\n\t\tonRowSelectionChange\n\t});\n\tconst { columnVisibility: resolvedColumnVisibility, onColumnVisibilityChange: handleColumnVisibilityChange } = useTableColumnVisibility(\n\t\t{\n\t\t\tcolumnVisibility,\n\t\t\tdefaultColumnVisibility,\n\t\t\tonColumnVisibilityChange\n\t\t}\n\t);\n\tconst { columnOrder: resolvedColumnOrder, onColumnOrderChange: handleColumnOrderChange } = useTableColumnOrder({\n\t\tcolumnOrder,\n\t\tdefaultColumnOrder,\n\t\tonColumnOrderChange\n\t});\n\tconst { columnSizing: resolvedColumnSizing, onColumnSizingChange: handleColumnSizingChange } = useTableColumnSizing({\n\t\tcolumnSizing,\n\t\tdefaultColumnSizing,\n\t\tcolumnResizeMinWidth,\n\t\tonColumnSizingChange\n\t});\n\tconst { columnPinning: resolvedColumnPinning, onColumnPinningChange: handleColumnPinningChange } = useTableColumnPinning({\n\t\tcolumnPinning,\n\t\tdefaultColumnPinning,\n\t\tonColumnPinningChange\n\t});\n\n\tconst baseTableColumnState = useMemo<BaseTableColumnState>(\n\t\t() => ({\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility\n\t\t}),\n\t\t[resolvedColumnOrder, resolvedColumnPinning, resolvedColumnSizing, resolvedColumnVisibility]\n\t);\n\n\tconst syncExpandedState = useEffectEvent((availableRowIds: readonly string[], nextInitialExpandedRowIds: readonly string[]) => {\n\t\tif (availableRowIds.length === 0) {\n\t\t\thasInitializedExpansionRef.current = false;\n\t\t\tsetExpanded({});\n\t\t\treturn;\n\t\t}\n\n\t\tconst availableRowIdSet = new Set(availableRowIds);\n\n\t\tsetExpanded((currentExpanded) => {\n\t\t\tconst persistedRowIds = extractExpandedRowIds(currentExpanded).filter((rowId) => availableRowIdSet.has(rowId));\n\n\t\t\tif (!hasInitializedExpansionRef.current) {\n\t\t\t\thasInitializedExpansionRef.current = true;\n\n\t\t\t\tconst seededRowIds = Array.from(\n\t\t\t\t\tnew Set([...persistedRowIds, ...nextInitialExpandedRowIds.filter((rowId) => availableRowIdSet.has(rowId))])\n\t\t\t\t);\n\n\t\t\t\treturn toExpandedState(seededRowIds);\n\t\t\t}\n\n\t\t\treturn toExpandedState(persistedRowIds);\n\t\t});\n\t});\n\n\tconst emitExpandedRowIdsChange = useEffectEvent((currentExpanded: ExpandedState) => {\n\t\tonExpandedRowIdsChange?.(extractExpandedRowIds(currentExpanded));\n\t});\n\n\tconst emitReachEnd = useEffectEvent(() => {\n\t\tonReachEnd?.();\n\t});\n\n\tuseEffect(() => {\n\t\tsyncExpandedState(treeData.allRowIds, initialExpandedRowIds);\n\t}, [initialExpandedRowIds, treeData.allRowIds]);\n\n\tuseEffect(() => {\n\t\temitExpandedRowIdsChange(expanded);\n\t}, [expanded]);\n\n\tuseEffect(() => {\n\t\tif (!onReachEnd || !scrollableRef.current || !sentinelRef.current || isLoading) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tconst entry = entries[0];\n\n\t\t\t\tif (entry?.isIntersecting) {\n\t\t\t\t\temitReachEnd();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: scrollableRef.current,\n\t\t\t\tthreshold: 0.1\n\t\t\t}\n\t\t);\n\n\t\tobserver.observe(sentinelRef.current);\n\n\t\treturn () => observer.disconnect();\n\t}, [isLoading, onReachEnd, treeData.rows.length]);\n\n\tconst table = useTable({\n\t\tfeatures: foundationTableFeatures,\n\t\tdata: treeData.rows as TreeTableRuntimeRow<TData>[],\n\t\tcolumns: columns as TableColumnDef<TreeTableRuntimeRow<TData>>[],\n\t\tstate: {\n\t\t\tcolumnOrder: resolvedColumnOrder,\n\t\t\tcolumnPinning: resolvedColumnPinning,\n\t\t\tcolumnSizing: resolvedColumnSizing,\n\t\t\tcolumnVisibility: resolvedColumnVisibility,\n\t\t\texpanded,\n\t\t\trowSelection\n\t\t},\n\t\tgetRowId: (row) => hierarchy.getRowId(row as TData),\n\t\tgetSubRows: (row) => row.children,\n\t\tonColumnOrderChange: handleColumnOrderChange,\n\t\tonColumnPinningChange: handleColumnPinningChange,\n\t\tonColumnSizingChange: handleColumnSizingChange,\n\t\tonColumnVisibilityChange: handleColumnVisibilityChange,\n\t\tonExpandedChange: setExpanded,\n\t\tenableMultiRowSelection: selectionMode === \"multi\",\n\t\tenableRowSelection: (row) => {\n\t\t\tif (selectionMode === \"none\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\t\treturn getRowCanSelect ? getRowCanSelect(originalRow) : true;\n\t\t}\n\t});\n\n\tconst visibleLeafColumns = getOrderedVisibleLeafColumns(table, baseTableColumnState);\n\tconst resolvedTreeColumnId = treeColumnId ?? visibleLeafColumns[0]?.id;\n\tconst rowModelRows = table.getRowModel().rows;\n\tconst mergedCellLayout = useMemo(\n\t\t() =>\n\t\t\tbuildBaseTableMergedCellsLayout({\n\t\t\t\trows: rowModelRows,\n\t\t\t\tcolumns: visibleLeafColumns,\n\t\t\t\tresolveRowBoundaryKey: (row) => row.depth,\n\t\t\t\texcludeColumnIds: resolvedTreeColumnId ? new Set([resolvedTreeColumnId]) : undefined\n\t\t\t}),\n\t\t[rowModelRows, visibleLeafColumns, resolvedTreeColumnId]\n\t);\n\n\t/**\n\t * Активирует строку: обновляет выбор в соответствии с режимом и вызывает внешний callback.\n\t */\n\tconst activateRow = (row: FoundationTableRow<TreeTableRuntimeRow<TData>>) => {\n\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\tactivateRowSelection(row.id, row.getCanSelect());\n\t\tonRowClick?.(originalRow);\n\t};\n\n\treturn (\n\t\t<BaseTable\n\t\t\ttable={table}\n\t\t\tcolumnState={baseTableColumnState}\n\t\t\ttitle={title}\n\t\t\tisLoading={isLoading}\n\t\t\tisFetching={isFetching}\n\t\t\tclassName={className}\n\t\t\ttableClassName={tableClassName}\n\t\t\tselectionMode={selectionMode}\n\t\t\tscrollableRef={scrollableRef}\n\t\t\tinteractiveElementSelector='[data-tree-table-interactive=\"true\"]'\n\t\t\tonActivateRow={selectionMode !== \"none\" || onRowClick ? activateRow : undefined}\n\t\t\tisRowInteractive={(row) => Boolean(onRowClick || (selectionMode !== \"none\" && row.getCanSelect()))}\n\t\t\tgetRowClassName={(row) => {\n\t\t\t\tconst originalRow = resolveOriginalRow(row, treeData.rowById);\n\n\t\t\t\treturn getRowClassName?.(originalRow);\n\t\t\t}}\n\t\t\tgetCellClassName={({ row, cell }) =>\n\t\t\t\tcn(\n\t\t\t\t\tcell.column.id === resolvedTreeColumnId && styles.treeColumnCell,\n\t\t\t\t\tcell.column.id === resolvedTreeColumnId && row.getIsSelected() && styles.selectedIndicatorCell\n\t\t\t\t)\n\t\t\t}\n\t\t\tgetCellLayout={({ cell }) => mergedCellLayout.get(cell.id)}\n\t\t\trenderHeaderContextMenu={renderHeaderContextMenu}\n\t\t\tenableColumnResizing={enableColumnResizing}\n\t\t\tenableColumnReordering={enableColumnReordering}\n\t\t\tcolumnResizeMinWidth={columnResizeMinWidth}\n\t\t\trenderCellContent={(args) => {\n\t\t\t\tconst originalRow = resolveOriginalRow(args.row, treeData.rowById);\n\t\t\t\tconst displayValue = formatPipelineDisplayValue({\n\t\t\t\t\tfield: formattingSnapshot.runtimeByColumnId[args.cell.column.id],\n\t\t\t\t\trawValue: args.cell.getValue(),\n\t\t\t\t\trowData: originalRow as TableFormulaRowData,\n\t\t\t\t\trowKind: \"tree\"\n\t\t\t\t});\n\t\t\t\tconst defaultContent = shouldUseTableFormatting({\n\t\t\t\t\tcolumnId: args.cell.column.id,\n\t\t\t\t\truntimeByColumnId: formattingSnapshot.runtimeByColumnId,\n\t\t\t\t\tcustomCellColumnIds: formattingSnapshot.customCellColumnIds\n\t\t\t\t}) ? (\n\t\t\t\t\t<FormattedTableCell displayValue={displayValue} align={args.columnMeta?.align} />\n\t\t\t\t) : (\n\t\t\t\t\targs.defaultContent\n\t\t\t\t);\n\t\t\t\tconst content = renderCellContent\n\t\t\t\t\t? renderCellContent({\n\t\t\t\t\t\t\t...args,\n\t\t\t\t\t\t\tdefaultContent,\n\t\t\t\t\t\t\tdisplayValue\n\t\t\t\t\t\t})\n\t\t\t\t\t: defaultContent;\n\n\t\t\t\treturn renderTreeCellContent(args, content, resolvedTreeColumnId, indentSize);\n\t\t\t}}\n\t\t\tafterTableContent={onReachEnd ? <div ref={sentinelRef} className={styles.sentinel} aria-hidden=\"true\" /> : null}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -17,10 +17,10 @@ export type UiBaseProps<C, V = C> = {
17
17
  };
18
18
  /**
19
19
  * Цветовой тон задаёт смысл цвета, а `UiAppearance` — визуальную иерархию действия.
20
- * `brand` предназначен для фирменных действий и не заменяет статусные тоны.
20
+ * `accent` отмечает текущий или выбранный элемент, а `brand` — фирменное действие.
21
21
  */
22
- export type UiTone = "neutral" | "brand" | "error" | "warning" | "success" | "info";
22
+ export type UiTone = "accent" | "neutral" | "brand" | "error" | "warning" | "success" | "info";
23
23
  export type UiAppearance = "solid" | "outline" | "ghost" | "transparent";
24
- export type UiVariant = "transparent" | "ghost" | "neutral" | "brand" | "error" | "warning" | "success" | "info" | "neutralOutline" | "brandOutline" | "errorOutline" | "warningOutline" | "successOutline" | "infoOutline";
24
+ export type UiVariant = "transparent" | "ghost" | "neutral" | "accent" | "brand" | "error" | "warning" | "success" | "info" | "neutralOutline" | "accentOutline" | "brandOutline" | "errorOutline" | "warningOutline" | "successOutline" | "infoOutline";
25
25
  export type UiPanelTone = "primary" | "secondary" | "tertiary";
26
26
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtD,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAElD,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI;IACnC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,CAAC;AAEzE,MAAM,MAAM,SAAS,GAClB,aAAa,GACb,OAAO,GACP,SAAS,GACT,OAAO,GACP,OAAO,GACP,SAAS,GACT,SAAS,GACT,MAAM,GACN,gBAAgB,GAChB,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,CAAC;AAEjB,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtD,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAElD,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI;IACnC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/F,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,CAAC;AAEzE,MAAM,MAAM,SAAS,GAClB,aAAa,GACb,OAAO,GACP,SAAS,GACT,QAAQ,GACR,OAAO,GACP,OAAO,GACP,SAAS,GACT,SAAS,GACT,MAAM,GACN,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,CAAC;AAEjB,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"uiClasses.d.ts","sourceRoot":"","sources":["../src/uiClasses.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE5E,MAAM,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,YAAY,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,YAAY,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC;AAyC/E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,YAAY,GAAG,MAAM,CAEzE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAEjE;AAED,wBAAgB,eAAe,CAAC,EAC/B,OAAO,EACP,IAAI,EACJ,UAAU,EACV,YAAwB,EACxB,kBAA8B,EAC9B,EAAE;IACF,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,YAAY,CAAC;CAClC,GAAG,QAAQ,CAgBX"}
1
+ {"version":3,"file":"uiClasses.d.ts","sourceRoot":"","sources":["../src/uiClasses.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE5E,MAAM,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,YAAY,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,YAAY,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC;AA4C/E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,YAAY,GAAG,MAAM,CAEzE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAEjE;AAED,wBAAgB,eAAe,CAAC,EAC/B,OAAO,EACP,IAAI,EACJ,UAAU,EACV,YAAwB,EACxB,kBAA8B,EAC9B,EAAE;IACF,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,YAAY,CAAC;CAClC,GAAG,QAAQ,CAgBX"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuzaki13/react-foundation-ui",
3
- "version": "2.0.1",
3
+ "version": "2.2.0",
4
4
  "description": "Reusable React foundation UI primitives and Storybook stories.",
5
5
  "license": "MIT",
6
6
  "author": "Ryuzaki13",
@@ -33,6 +33,7 @@
33
33
  "styles",
34
34
  "styles.scss",
35
35
  "src/styles",
36
+ "COLOR_TOKENS_MIGRATION.md",
36
37
  "README.md",
37
38
  "LICENSE"
38
39
  ],
@@ -274,6 +275,10 @@
274
275
  "types": "./dist/state-select/index.d.ts",
275
276
  "import": "./dist/state-select/index.js"
276
277
  },
278
+ "./status-indicator": {
279
+ "types": "./dist/status-indicator/index.d.ts",
280
+ "import": "./dist/status-indicator/index.js"
281
+ },
277
282
  "./switch": {
278
283
  "types": "./dist/switch/index.d.ts",
279
284
  "import": "./dist/switch/index.js"
@@ -70,13 +70,13 @@
70
70
 
71
71
  // TODO: unused
72
72
  .outlineSolid {
73
- outline: var(--border-width) solid var(--content-accent);
73
+ outline: var(--border-width) solid var(--accent-text);
74
74
  outline-offset: var(--focus-offset);
75
75
  }
76
76
 
77
77
  // TODO: unused
78
78
  .outlineDashed {
79
- outline: var(--border-width) dashed var(--content-accent);
79
+ outline: var(--border-width) dashed var(--accent-text);
80
80
  outline-offset: var(--focus-offset);
81
81
  }
82
82
 
@@ -33,7 +33,7 @@
33
33
 
34
34
  // TODO: unused
35
35
  .surfaceAccent {
36
- background-color: var(--surface-accent);
36
+ background-color: var(--accent-fill);
37
37
  }
38
38
 
39
39
  .surfaceBackdrop {
@@ -62,31 +62,31 @@
62
62
  }
63
63
 
64
64
  .contentAccent {
65
- color: var(--content-accent);
65
+ color: var(--accent-text);
66
66
  }
67
67
 
68
68
  .statusSuccess {
69
- color: var(--status-success-text);
69
+ color: var(--success-text);
70
70
  }
71
71
 
72
72
  .statusError {
73
- color: var(--status-error-text);
73
+ color: var(--error-text);
74
74
  }
75
75
 
76
76
  .textColorDanger {
77
- color: var(--status-error-text);
77
+ color: var(--error-text);
78
78
  }
79
79
 
80
80
  .statusWarning {
81
- color: var(--status-warning-text);
81
+ color: var(--warning-text);
82
82
  }
83
83
 
84
84
  .statusInfo {
85
- color: var(--status-info-text);
85
+ color: var(--info-text);
86
86
  }
87
87
 
88
88
  .statusBrand {
89
- color: var(--status-brand-text);
89
+ color: var(--brand-text);
90
90
  }
91
91
 
92
92
  .statusNone {
@@ -3,12 +3,12 @@
3
3
 
4
4
  &:hover:not(.selected) {
5
5
  // filter: contrast(0.9);
6
- background-color: var(--surface-accent);
6
+ background-color: var(--accent-fill);
7
7
  }
8
8
 
9
9
  &.selected {
10
10
  cursor: default;
11
- // color: var(--content-accent);
11
+ // color: var(--accent-text);
12
12
  background-color: var(--surface-1);
13
13
  }
14
14
  }
@@ -133,18 +133,18 @@ html,
133
133
  }
134
134
 
135
135
  .link {
136
- color: var(--content-accent);
136
+ color: var(--accent-text);
137
137
 
138
138
  &:visited {
139
- color: var(--content-accent);
139
+ color: var(--accent-text);
140
140
  }
141
141
 
142
142
  &:hover {
143
- color: var(--status-info-fill);
143
+ color: var(--info-fill);
144
144
  }
145
145
 
146
146
  &:active {
147
- color: var(--status-error-fill);
147
+ color: var(--error-fill);
148
148
  }
149
149
  }
150
150
 
@@ -1,5 +1,6 @@
1
1
  @use "sass:map";
2
2
  @use "sass:meta";
3
+ @use "sass:string";
3
4
 
4
5
  $root-token-defaults: (
5
6
  "--font-family": (
@@ -72,8 +73,8 @@ $root-token-defaults: (
72
73
  "--z-tooltip": 200,
73
74
  "--z-image-viewer": 300,
74
75
  "--z-notify": 400,
75
- "--white": oklch(1 0 0),
76
- "--black": oklch(0 0 0)
76
+ "--white": #ffffff,
77
+ "--black": #000000
77
78
  );
78
79
 
79
80
  $retina-token-defaults: (
@@ -191,110 +192,62 @@ $paragraph-spacing-preset-defaults: (
191
192
 
192
193
  $light-theme-defaults: (
193
194
  tokens: (
194
- "--surface-0": var(--hc-surface, #ffffff),
195
- "--surface-1": var(--hc-surface, #f8f8f9),
196
- "--surface-2": var(--hc-surface, #f1f1f3),
197
- "--content-0": var(--hc-content, oklch(0.26 0.01 244)),
198
- "--content-1": var(--hc-content, oklch(0.52 0.02 268)),
199
- "--content-2": var(--hc-content, oklch(0.66 0.01 258)),
200
- "--focus-ring": var(--hc-focus-ring, oklch(0.5 0.3 270)),
201
- "--overlay-backdrop": var(--hc-overlay-backdrop, rgba(0, 0, 0, 0.1)),
202
- "--overlay-glass": var(--hc-overlay-glass, rgba(255, 255, 255, 0.8)),
203
- "--shadow-xs": 0 0 0.25em rgba(0, 0, 0, 0.15),
204
- "--shadow-sm": 0 0 0.25em rgba(0, 0, 0, 0.25),
205
- "--shadow-md": 0 0 0.5em rgba(0, 0, 0, 0.25),
206
- "--shadow-lg": 0 0 1em rgba(0, 0, 0, 0.25),
207
- "--interactive-color": inherit,
208
- "--interactive-hover-color": var(--content-0),
209
- "--interactive-active-color": var(--content-0),
210
- "--interactive-selected-color": var(--content-0),
211
- "--interactive-surface": transparent,
212
- "--interactive-hover-surface": var(--surface-accent),
213
- "--interactive-active-surface": var(--surface-accent),
214
- "--interactive-selected-surface": var(--surface-accent),
215
- "--interactive-border": transparent,
216
- "--interactive-hover-border": var(--border-accent),
217
- "--interactive-active-border": var(--border-accent),
218
- "--interactive-selected-border": var(--border-accent)
219
- ),
220
- accent: (
221
- l: 0.55,
222
- c: 0.22,
223
- h: 245
195
+ "--surface-0": #ffffff,
196
+ "--surface-1": #f8f8f9,
197
+ "--surface-2": #f1f1f3,
198
+ "--content-0": #202529,
199
+ "--content-1": #646975,
200
+ "--content-2": #8e9298,
201
+ "--focus-ring": #3429ff,
202
+ "--overlay-backdrop": string.unquote("var(--hc-overlay-backdrop, #0000001a)"),
203
+ "--overlay-glass": string.unquote("var(--hc-overlay-glass, #ffffffcc)"),
204
+ "--shadow-xs": string.unquote("var(--hc-shadow-xs, 0 0 0.25em #00000026)"),
205
+ "--shadow-sm": string.unquote("var(--hc-shadow-sm, 0 0 0.25em #00000040)"),
206
+ "--shadow-md": string.unquote("var(--hc-shadow-md, 0 0 0.5em #00000040)"),
207
+ "--shadow-lg": string.unquote("var(--hc-shadow-lg, 0 0 1em #00000040)")
224
208
  ),
225
209
  status: (
226
- // Brand использует общий генератор состояний, но остаётся не статусом, а фирменным тоном UI.
210
+ accent: (
211
+ text: #0073e6,
212
+ border: #006eb3,
213
+ fill: #e2f1fa,
214
+ on-fill: #202529
215
+ ),
227
216
  brand: (
228
- fill: (
229
- l: 0.4,
230
- c: 0.2,
231
- h: 262
232
- ),
233
- border: (
234
- l: 0.5,
235
- c: 0.2,
236
- h: 262
237
- )
238
- ),
217
+ text: #0036b0,
218
+ border: #1957d2,
219
+ fill: #1842d2,
220
+ on-fill: #ffffff
221
+ ),
239
222
  neutral: (
240
- fill: (
241
- l: 0.26,
242
- c: 0.01,
243
- h: 244
244
- ),
245
- border: (
246
- l: 0.86,
247
- c: 0.016,
248
- h: 245
249
- )
223
+ text: #202529,
224
+ border: #c9d2db,
225
+ fill: #2e3338,
226
+ on-fill: #ffffff
250
227
  ),
251
228
  error: (
252
- fill: (
253
- l: 0.52,
254
- c: 0.19,
255
- h: 15
256
- ),
257
- border: (
258
- l: 0.52,
259
- c: 0.19,
260
- h: 15
261
- )
229
+ text: #bd1f44,
230
+ border: #bd1f44,
231
+ fill: #dc2447,
232
+ on-fill: #ffffff
262
233
  ),
263
234
  warning: (
264
- fill: (
265
- l: 0.55,
266
- c: 0.16,
267
- h: 80
268
- ),
269
- border: (
270
- l: 0.55,
271
- c: 0.16,
272
- h: 80
273
- )
235
+ text: #a16200,
236
+ border: #a16200,
237
+ fill: #b67400,
238
+ on-fill: #ffffff
274
239
  ),
275
240
  success: (
276
- fill: (
277
- l: 0.5,
278
- c: 0.14,
279
- h: 170
280
- ),
281
- border: (
282
- l: 0.5,
283
- c: 0.14,
284
- h: 170
285
- )
241
+ text: #007b57,
242
+ border: #007b57,
243
+ fill: #00906b,
244
+ on-fill: #ffffff
286
245
  ),
287
246
  info: (
288
- fill: (
289
- l: 0.52,
290
- c: 0.15,
291
- h: 245
292
- ),
293
- border: (
294
- l: 0.52,
295
- c: 0.15,
296
- h: 245
297
- )
247
+ text: #006eb8,
248
+ border: #006eb8,
249
+ fill: #007ed8,
250
+ on-fill: #ffffff
298
251
  )
299
252
  )
300
253
  );
@@ -304,106 +257,59 @@ $dark-theme-defaults: (
304
257
  "--surface-0": #222a35,
305
258
  "--surface-1": #27313f,
306
259
  "--surface-2": #2d3646,
307
- "--content-0": oklch(0.9 0.01 256),
308
- "--content-1": oklch(0.8 0.02 256),
309
- "--content-2": oklch(0.7 0.02 256),
310
- "--focus-ring": oklch(0.88 0.2 94),
311
- "--overlay-backdrop": rgba(30, 37, 47, 0.18),
312
- "--overlay-glass": rgba(30, 37, 47, 0.8),
313
- "--shadow-xs": 0 0 0.25em rgba(0, 0, 0, 0.15),
314
- "--shadow-sm": 0 0 0.25em rgba(0, 0, 0, 0.25),
315
- "--shadow-md": 0 0 0.5em rgba(0, 0, 0, 0.25),
316
- "--shadow-lg": 0 0 1em rgba(0, 0, 0, 0.25),
317
- "--interactive-color": inherit,
318
- "--interactive-hover-color": var(--content-0),
319
- "--interactive-active-color": var(--content-0),
320
- "--interactive-selected-color": var(--content-0),
321
- "--interactive-surface": transparent,
322
- "--interactive-hover-surface": var(--surface-accent),
323
- "--interactive-active-surface": var(--surface-accent),
324
- "--interactive-selected-surface": var(--surface-accent),
325
- "--interactive-border": transparent,
326
- "--interactive-hover-border": var(--border-accent),
327
- "--interactive-active-border": var(--border-accent),
328
- "--interactive-selected-border": var(--border-accent)
329
- ),
330
- accent: (
331
- l: 0.7,
332
- c: 0.2,
333
- h: 245
260
+ "--content-0": #dadee5,
261
+ "--content-1": #b6bfcb,
262
+ "--content-2": #969fab,
263
+ "--focus-ring": #ffd300,
264
+ "--overlay-backdrop": string.unquote("var(--hc-overlay-backdrop, #1e252f2e)"),
265
+ "--overlay-glass": string.unquote("var(--hc-overlay-glass, #1e252fcc)"),
266
+ "--shadow-xs": string.unquote("var(--hc-shadow-xs, 0 0 0.25em #00000026)"),
267
+ "--shadow-sm": string.unquote("var(--hc-shadow-sm, 0 0 0.25em #00000040)"),
268
+ "--shadow-md": string.unquote("var(--hc-shadow-md, 0 0 0.5em #00000040)"),
269
+ "--shadow-lg": string.unquote("var(--hc-shadow-lg, 0 0 1em #00000040)")
334
270
  ),
335
271
  status: (
272
+ accent: (
273
+ text: #00a5ff,
274
+ border: #4e8cbe,
275
+ fill: #103243,
276
+ on-fill: #dadee5
277
+ ),
336
278
  brand: (
337
- fill: (
338
- l: 0.75,
339
- c: 0.2,
340
- h: 272
341
- ),
342
- border: (
343
- l: 0.7,
344
- c: 0.18,
345
- h: 266
346
- )
279
+ text: #84a0ff,
280
+ border: #6997ff,
281
+ fill: #97b5ff,
282
+ on-fill: #192045
347
283
  ),
348
284
  neutral: (
349
- fill: (
350
- l: 0.75,
351
- c: 0.02,
352
- h: 256
353
- ),
354
- border: (
355
- l: 0.45,
356
- c: 0.02,
357
- h: 256
358
- )
285
+ text: #a6afbb,
286
+ border: #4e5661,
287
+ fill: #b9c2cd,
288
+ on-fill: #222427
359
289
  ),
360
290
  error: (
361
- fill: (
362
- l: 0.75,
363
- c: 0.18,
364
- h: 22
365
- ),
366
- border: (
367
- l: 0.75,
368
- c: 0.18,
369
- h: 22
370
- )
291
+ text: #ff7879,
292
+ border: #ff7879,
293
+ fill: #ff8f8e,
294
+ on-fill: #3d1516
371
295
  ),
372
296
  warning: (
373
- fill: (
374
- l: 0.77,
375
- c: 0.14,
376
- h: 75
377
- ),
378
- border: (
379
- l: 0.77,
380
- c: 0.14,
381
- h: 75
382
- )
297
+ text: #e8a63d,
298
+ border: #e8a63d,
299
+ fill: #faba5b,
300
+ on-fill: #322004
383
301
  ),
384
302
  success: (
385
- fill: (
386
- l: 0.75,
387
- c: 0.14,
388
- h: 165
389
- ),
390
- border: (
391
- l: 0.75,
392
- c: 0.14,
393
- h: 165
394
- )
303
+ text: #3cc998,
304
+ border: #3cc998,
305
+ fill: #5edcab,
306
+ on-fill: #062b1e
395
307
  ),
396
308
  info: (
397
- fill: (
398
- l: 0.75,
399
- c: 0.16,
400
- h: 258
401
- ),
402
- border: (
403
- l: 0.75,
404
- c: 0.16,
405
- h: 258
406
- )
309
+ text: #6baeff,
310
+ border: #6baeff,
311
+ fill: #81c2ff,
312
+ on-fill: #12243f
407
313
  )
408
314
  )
409
315
  );
@@ -430,7 +336,14 @@ $dark-theme: map.deep-merge($dark-theme-defaults, $dark-theme-overrides);
430
336
 
431
337
  @mixin emit-declarations($tokens) {
432
338
  @each $name, $value in $tokens {
433
- #{$name}: #{meta.inspect($value)};
339
+ @if string.slice($name, 1, 2) == "--" and meta.type-of($value) == color {
340
+ $high-contrast-name: --hc-#{string.slice($name, 3)};
341
+
342
+ // Цвет остаётся fallback, а одноимённый --hc-* можно включить runtime-режимом контрастности.
343
+ #{$name}: var(#{$high-contrast-name}, #{meta.inspect($value)});
344
+ } @else {
345
+ #{$name}: #{meta.inspect($value)};
346
+ }
434
347
  }
435
348
  }
436
349