@ryuzaki13/react-foundation-ui 1.6.14 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/advanced-search/index.js +1 -1
- package/dist/base-table/index.js +2 -2
- package/dist/base-table/lib/columnPinning.d.ts +15 -17
- package/dist/base-table/lib/columnPinning.d.ts.map +1 -1
- package/dist/base-table/lib/mergeDuplicates.d.ts +4 -4
- package/dist/base-table/lib/mergeDuplicates.d.ts.map +1 -1
- package/dist/base-table/model/useTableColumnPinning.d.ts +2 -2
- package/dist/base-table/model/useTableColumnVisibility.d.ts +7 -6
- package/dist/base-table/model/useTableColumnVisibility.d.ts.map +1 -1
- package/dist/base-table/ui/BaseTable.d.ts +8 -9
- package/dist/base-table/ui/BaseTable.d.ts.map +1 -1
- package/dist/base-table/ui/BaseTableHeaderCell.d.ts +6 -6
- package/dist/base-table/ui/BaseTableHeaderCell.d.ts.map +1 -1
- package/dist/chunks/{base-table-CTafaxo2.js → base-table-DNSYOO9t.js} +29 -29
- package/dist/chunks/base-table-DNSYOO9t.js.map +1 -0
- package/dist/chunks/{table-DOwANXnt.js → table-RO4dfMAj.js} +9 -9
- package/dist/chunks/table-RO4dfMAj.js.map +1 -0
- package/dist/simple-table/SimpleTable.d.ts +2 -2
- package/dist/simple-table/SimpleTable.d.ts.map +1 -1
- package/dist/simple-table/index.js +7 -10
- package/dist/simple-table/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/table/Table.d.ts +7 -8
- package/dist/table/Table.d.ts.map +1 -1
- package/dist/table/index.js +1 -1
- package/dist/tree-table/TreeTable.d.ts +7 -8
- package/dist/tree-table/TreeTable.d.ts.map +1 -1
- package/dist/tree-table/index.js +104 -105
- package/dist/tree-table/index.js.map +1 -1
- package/package.json +9 -9
- package/src/styles/config/_index.scss +9 -9
- package/src/styles/mixins/_mixin.scss +28 -28
- package/storybook-static/assets/{Badge-BcdRczMk.js → Badge-Dvx1zhPb.js} +1 -1
- package/storybook-static/assets/{Badge.stories-Ct1rOXKb.js → Badge.stories-0OqfwxFw.js} +1 -1
- package/storybook-static/assets/{BadgeList-B0uCxTjK.js → BadgeList-y-uBOP3g.js} +1 -1
- package/storybook-static/assets/{Button-SSIgKYw0.js → Button-C80gfqoH.js} +1 -1
- package/storybook-static/assets/{Button-BB1nGfBt.js → Button-Do2mwgAg.js} +1 -1
- package/storybook-static/assets/{Button.stories-ZLeozBpB.js → Button.stories-D8Fw6nud.js} +1 -1
- package/storybook-static/assets/{CalendarView-CYrBwuDb.js → CalendarView--kZXxq2R.js} +1 -1
- package/storybook-static/assets/{CheckBox-BhyFAnPZ.js → CheckBox-B75CNLqu.js} +1 -1
- package/storybook-static/assets/{CheckBox-Blz1oxQt.js → CheckBox-BLhKCbdy.js} +1 -1
- package/storybook-static/assets/{CheckBox.stories-CaIkqi5f.js → CheckBox.stories-B6oVA8el.js} +1 -1
- package/storybook-static/assets/{Color-6AOWCN3U-CCVpVcK8.js → Color-6AOWCN3U-cvznI3uO.js} +1 -1
- package/storybook-static/assets/{ContextMenu-1AD4f0i0.js → ContextMenu-CO0idIWo.js} +1 -1
- package/storybook-static/assets/{ContextMenu-DXD_0XB9.js → ContextMenu-fNZVzUvQ.js} +1 -1
- package/storybook-static/assets/{ContextMenu.stories-DFmB0X5K.js → ContextMenu.stories-0nmobIh6.js} +1 -1
- package/storybook-static/assets/{DateInput-BOLDxsXz.js → DateInput-C2In05Rg.js} +1 -1
- package/storybook-static/assets/{DateInput-C9p85ceA.js → DateInput-D2rfcbf3.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-Ba3IIPg3.js → DateInput.stories-JUkITh6A.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-C_4NfC5d.js → DateRangePresetSelect-Qc1kiswO.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-C8nw0-vH.js → DateRangePresetSelect-nJgrTbCb.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-DKQJMXX5.js → DateRangePresetSelect.stories-ZCKuMVv1.js} +1 -1
- package/storybook-static/assets/{Detail-BTLyY-Cx.js → Detail-pOYJZCE7.js} +1 -1
- package/storybook-static/assets/{Detail.stories-sbG-B89r.js → Detail.stories-zt0s1IF8.js} +1 -1
- package/storybook-static/assets/{Dialog-DEOBYclm.js → Dialog-0qof8LAi.js} +1 -1
- package/storybook-static/assets/{Dialog-DxhVyxTw.js → Dialog-yNCOXo0U.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-BkDHW55c.js → Dialog.stories-B8N3aCaV.js} +1 -1
- package/storybook-static/assets/{Disclosure-DfRw5j-s.js → Disclosure-1aczsOfE.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-3EiNEI0t.js → Disclosure.stories-BHF7zV4r.js} +1 -1
- package/storybook-static/assets/{DisclosureGroup-BhIPr7Zx.js → DisclosureGroup-1UIF1dzA.js} +1 -1
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-DEVDQ4Qo.js → DocsRenderer-JROSPFPF-C3ElfDK6.js} +1 -1
- package/storybook-static/assets/{DropZone-CTDbnKbh.js → DropZone-BXwkEyR-.js} +1 -1
- package/storybook-static/assets/{DropZone-CgSbRlAS.js → DropZone-DcnHdyOy.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-C7HI-Ded.js → DropZone.stories-C__hp7nZ.js} +1 -1
- package/storybook-static/assets/{DropdownMenu-D2uTldgN.js → DropdownMenu-Cn3NEWML.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel-C49pE4fu.js → ExpandableActionPanel-DRmbAqvH.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-DaUA0ZwQ.js → ExpandableActionPanel.stories-CILdKlLi.js} +1 -1
- package/storybook-static/assets/{Flex-X9798UxV.js → Flex-sxipWyth.js} +1 -1
- package/storybook-static/assets/{Flex.stories-Dz6oGUUF.js → Flex.stories-DY8V2sbR.js} +1 -1
- package/storybook-static/assets/{FloatingPopover-E_Ew4-wi.js → FloatingPopover-CNZzGjfO.js} +1 -1
- package/storybook-static/assets/{FormattedTableCell-CY3E21k8.css → FormattedTableCell-AZc2IHfK.css} +1 -1
- package/storybook-static/assets/FormattedTableCell-DG4dVFTa.js +15 -0
- package/storybook-static/assets/{Grid-BCciNn-A.js → Grid-D2wN6WmI.js} +1 -1
- package/storybook-static/assets/{Grid.stories-DgvZoNuI.js → Grid.stories-Dtya61zz.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-D_wOvbUS.js → ImageCropper.stories-CQOvZs9k.js} +1 -1
- package/storybook-static/assets/{ImageRenderer-xnNcHtPe.js → ImageRenderer-C8mxg5a9.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-D9JpdJiV.js → ImageRenderer.stories-ulHRIV84.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-ByWZ__3N.js → ImageView.stories-DfO8LRNv.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories-B0BzHjEk.js → ImageViewer.stories-BC2AIOFa.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime-BD3738hF.js → ImageViewerRuntime-D3u-RNDY.js} +1 -1
- package/storybook-static/assets/{Input-BH1AkOMS.js → Input-BrWASIXE.js} +1 -1
- package/storybook-static/assets/{Input-MdLAT_u1.js → Input-Duo7u72d.js} +1 -1
- package/storybook-static/assets/{Input.stories-D-ZQvpnN.js → Input.stories--i9k07KI.js} +1 -1
- package/storybook-static/assets/{InputDateTime-BfTkj-YX.js → InputDateTime-DcZRgiPg.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories-uU4v4z0C.js → InputDateTime.stories-Dt6Y1CZ2.js} +1 -1
- package/storybook-static/assets/{InputFile-DEHnLzej.js → InputFile-BiLD06iA.js} +1 -1
- package/storybook-static/assets/{InputFile-s9ue0Ubw.js → InputFile-Cj-m_fo4.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-DqUzUqeP.js → InputFile.stories-akX4tW3o.js} +1 -1
- package/storybook-static/assets/{InputFiles-DAFA8pPS.js → InputFiles-6FDWUpPw.js} +1 -1
- package/storybook-static/assets/{InputFiles-BO8bPwVE.js → InputFiles-B8Erga76.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-DwqQzJk0.js → InputFiles.stories-CHQIzkT-.js} +1 -1
- package/storybook-static/assets/{InputFilesList-zkl234mc.js → InputFilesList-B2ED3xeD.js} +1 -1
- package/storybook-static/assets/{InputImage-BO2IEU16.js → InputImage-Csz6DuXw.js} +1 -1
- package/storybook-static/assets/{InputImage-BGCpqqw2.js → InputImage-DgEux6nu.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-D_NGBLXT.js → InputImage.stories-BQMt1D7p.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents-Dwh7s7t2.js → InteractiveComponents-Dsk4_Vr2.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents.stories-DYepXQCx.js → InteractiveComponents.stories-DkOUo1Hs.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-BlhMQvHT.js → LayoutPicker-BYQGwA2A.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-CkE9m2jl.js → LayoutPicker-CtU_BRSU.js} +1 -1
- package/storybook-static/assets/{LayoutPicker.stories-BxuR4zzW.js → LayoutPicker.stories-u-llXrmg.js} +1 -1
- package/storybook-static/assets/{Listbox-oa6-dpOF.js → Listbox-CRpGe74L.js} +1 -1
- package/storybook-static/assets/{Listbox-C1Rqsgp0.js → Listbox-D-w3s2rV.js} +1 -1
- package/storybook-static/assets/{Listbox.stories-B7F4BYQe.js → Listbox.stories-DNgm_jEg.js} +1 -1
- package/storybook-static/assets/{Modal-DzXqf1Ly.js → Modal-BCEfdMRV.js} +1 -1
- package/storybook-static/assets/{Modal.stories-CG1_xlyh.js → Modal.stories-DgluP-Zg.js} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-CZYnO2lF.js → ModalManagerProvider-DB1CpShR.js} +1 -1
- package/storybook-static/assets/{MultiSelect-4G-iQPYH.js → MultiSelect-CtPVgzw3.js} +1 -1
- package/storybook-static/assets/{MultiSelect-D6VN1ten.js → MultiSelect-DXazv8Gk.js} +1 -1
- package/storybook-static/assets/{MultiSelect.stories-B8yQ13Tn.js → MultiSelect.stories-m3lK4whp.js} +1 -1
- package/storybook-static/assets/{NoData-BgHie4j3.js → NoData-tXPTJtqs.js} +1 -1
- package/storybook-static/assets/{NotificationsHost-CFfzFTyd.js → NotificationsHost-Cns_wFoV.js} +1 -1
- package/storybook-static/assets/{NotificationsHost.stories-D-EoSpNR.js → NotificationsHost.stories-Bl6cz2bV.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-DTsiTKot.js → ODataMultiSelect-6Df5Fkah.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-DCO4zPF4.js → ODataMultiSelect.stories-B6yPCpTe.js} +1 -1
- package/storybook-static/assets/{ODataSelect-CaH2bcCK.js → ODataSelect-BO5s66q2.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-B0tv4wL4.js → ODataSelect.stories-C0zyeXlC.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect-Dyek9WdW.js → ODataTreeMultiSelect-OSArfN7U.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-CcACO93g.js → ODataTreeMultiSelect.stories-DIO3n7N6.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-CUz7YiVU.js → ODataTreeSelect-C2YNVppX.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-wGnk-ffy.js → ODataTreeSelect.stories-BCjXst_-.js} +1 -1
- package/storybook-static/assets/{OneStepScroller-o5Gb3vjr.js → OneStepScroller-CBqY-Bqn.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-faoKK2vP.js → PeriodSelect-8I2DZE_l.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-ZJjARhjl.js → PeriodSelect-D9DwWI_-.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-CoXVK3T7.js → PeriodSelect.stories-Dvdfl6jl.js} +1 -1
- package/storybook-static/assets/{PickerSelectionToolbar-D4SqZyNs.js → PickerSelectionToolbar-DTFaKHYJ.js} +1 -1
- package/storybook-static/assets/{PickerTriggerActions-D0jutGDl.js → PickerTriggerActions-DB5hWOPs.js} +1 -1
- package/storybook-static/assets/{Popover-B94TkkrH.js → Popover-DDuVgt46.js} +1 -1
- package/storybook-static/assets/{Popover-DDa4eeVc.js → Popover-x1KDnoku.js} +1 -1
- package/storybook-static/assets/{Popover.stories-BpIi9J1K.js → Popover.stories-JeW5d8gm.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-D2J7DKKw.js → PresetRangeDateInput-C4gbhz_V.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-CXwvyN5D.js → PresetRangeDateInput-Csq8RBK7.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-BLMBzOHq.js → PresetRangeDateInput.stories-mPfnN7w9.js} +1 -1
- package/storybook-static/assets/{PresetSelect--NNO5Ddu.js → PresetSelect-D5XN8_y3.js} +1 -1
- package/storybook-static/assets/{RadioButton-CwH2Hesc.js → RadioButton-3vNTYzok.js} +1 -1
- package/storybook-static/assets/{RadioButton-BMIDEoWy.js → RadioButton-DqKb7dga.js} +1 -1
- package/storybook-static/assets/{RadioButton.stories-N2cIOAgo.js → RadioButton.stories-DEtB6-Gq.js} +1 -1
- package/storybook-static/assets/{RadioGroup-BScP9Lpg.js → RadioGroup-BVH61YyU.js} +1 -1
- package/storybook-static/assets/{RadioGroup-CErOSI5g.js → RadioGroup-CxSDxT4Z.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-evzuyPl2.js → RadioGroup.stories-D8YHF52N.js} +1 -1
- package/storybook-static/assets/{Scrollable-BwNQtM7w.js → Scrollable-CzjaBhDx.js} +1 -1
- package/storybook-static/assets/{Select-DJYUi3iy.js → Select-DCitHJuw.js} +1 -1
- package/storybook-static/assets/{Select-DJzmWS1T.js → Select-DRU8ibvA.js} +1 -1
- package/storybook-static/assets/{Select.stories-BnUIbrvc.js → Select.stories-CK_D5RAO.js} +1 -1
- package/storybook-static/assets/{SelectOptionContent-Cd4435dS.js → SelectOptionContent-BAJEXMJG.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-fsLc_Ma0.js → SerializableSelect-DyRYm6Fb.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-BCRRVcbU.js → SerializableSelect.stories-6msteGLD.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-C1AR0xZh.js → SingleDateTimeInput-CNIODG1r.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-Diyz6qI-.js → SingleDateTimeInput-Dt2pvrEI.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput.stories-nks-T7BL.js → SingleDateTimeInput.stories-BjZkApxR.js} +1 -1
- package/storybook-static/assets/{Slider-CgMHiwLj.js → Slider-C2STT2eb.js} +1 -1
- package/storybook-static/assets/{Slider-BouKs-yX.js → Slider-CyrGnw3r.js} +1 -1
- package/storybook-static/assets/{Slider.stories-Cg5heBxN.js → Slider.stories-cV_-2z3X.js} +1 -1
- package/storybook-static/assets/{SliderInput-VRJ7juTy.js → SliderInput-C7XLyS8n.js} +1 -1
- package/storybook-static/assets/{SliderInput-DU6sY9hj.js → SliderInput-DxWLjpcW.js} +1 -1
- package/storybook-static/assets/{SliderInput.stories-B154T_8Q.js → SliderInput.stories-DBIe7Yhj.js} +1 -1
- package/storybook-static/assets/{Sortable-Cy_0KjFR.js → Sortable-06Qmji0A.js} +1 -1
- package/storybook-static/assets/{Sortable.stories-CHE8wWLA.js → Sortable.stories-VPSDld7o.js} +1 -1
- package/storybook-static/assets/{Splitter-yrZypMbS.js → Splitter-Bjc9_DpU.js} +1 -1
- package/storybook-static/assets/{Splitter.stories-CwSwsE0H.js → Splitter.stories-CaecpwzX.js} +1 -1
- package/storybook-static/assets/{StateSelect-DuLO_Piy.js → StateSelect-CBqVFgZr.js} +1 -1
- package/storybook-static/assets/{StateSelect-BHzuZX75.js → StateSelect-DEbS-UHz.js} +1 -1
- package/storybook-static/assets/{StateSelect.stories-CGlKn8jQ.js → StateSelect.stories-DHCZQjpD.js} +1 -1
- package/storybook-static/assets/{StringToggle.stories-BMGe4CV1.js → StringToggle.stories-DZ5cJKre.js} +1 -1
- package/storybook-static/assets/{Switch-wxL8km93.js → Switch-BQVOziJc.js} +1 -1
- package/storybook-static/assets/{Switch-CfKqydJl.js → Switch-DbMsXJZQ.js} +1 -1
- package/storybook-static/assets/{Switch.stories-CTF8Fn5S.js → Switch.stories-xsRPNma9.js} +1 -1
- package/storybook-static/assets/{Table-BggkDkyA.js → Table-90xunt07.js} +1 -1
- package/storybook-static/assets/Table.stories-BHO05Nt2.js +207 -0
- package/storybook-static/assets/{Tabs-BhU1yJ68.js → Tabs-I00nOCLh.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-Doot6gmo.js → Tabs.stories-B2XJ7Ho5.js} +1 -1
- package/storybook-static/assets/{TabsBox-DQtakMLT.js → TabsBox-elxR9IVU.js} +1 -1
- package/storybook-static/assets/{TagInput-BOUAaS40.js → TagInput-DJRFuFDX.js} +1 -1
- package/storybook-static/assets/{TagInput.stories-DNEu6f1H.js → TagInput.stories-Cf6c-1Xx.js} +1 -1
- package/storybook-static/assets/{Text-BX0Gm-we.js → Text-CKeWyv1R.js} +1 -1
- package/storybook-static/assets/{Textarea-DbV3up2r.js → Textarea-DZ27cTTb.js} +1 -1
- package/storybook-static/assets/{Textarea-vACUwDlt.js → Textarea-DamLyP7r.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-BBkhkeg2.js → Textarea.stories-1wsB9B_l.js} +1 -1
- package/storybook-static/assets/{TimePanel-CN59Txlq.js → TimePanel-BCiqgc3_.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-BKYWX6RZ.js → TimePanel.stories-CChD-RUz.js} +1 -1
- package/storybook-static/assets/{Toggle-CaIYF6CW.js → Toggle-BAJj1RSd.js} +1 -1
- package/storybook-static/assets/{Toggle-C1i7Qcj6.js → Toggle-CUhT4loI.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-A7L9V62F.js → Toggle.stories-Dipcr_LJ.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-DaRr_WsB.js → TreeMultiSelect-BXhuUX3J.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-BVcb4Bqo.js → TreeMultiSelect-D4Owgkp8.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-BWmYIta_.js → TreeMultiSelect.stories-CB2jm_bz.js} +1 -1
- package/storybook-static/assets/{TreePickerBase-CzvhvwzY.js → TreePickerBase-eXU7yGrA.js} +1 -1
- package/storybook-static/assets/{TreeSelect-Dyi_CLRD.js → TreeSelect-0dZm6ufk.js} +1 -1
- package/storybook-static/assets/{TreeSelect-DRus4VcV.js → TreeSelect-5qlmmCCI.js} +1 -1
- package/storybook-static/assets/{TreeSelect.stories-C4pm8iLe.js → TreeSelect.stories-CllcJYnI.js} +1 -1
- package/storybook-static/assets/{TreeTable-k2zD3Y_g.js → TreeTable-BqZk_QkK.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-cwP-epkE.js → TreeTable.stories-BDoNVZCh.js} +4 -4
- package/storybook-static/assets/{async-_ojLVlM1.js → async-CoT7Kgjz.js} +1 -1
- package/storybook-static/assets/{blocks-7Wf2ozDB.js → blocks-W-usNnZb.js} +3 -3
- package/storybook-static/assets/{browserAndReact-DpDuZQNz.js → browserAndReact-CdN7k1Ys.js} +1 -1
- package/storybook-static/assets/{check-B8KQJdvH.js → check-DjVied9B.js} +1 -1
- package/storybook-static/assets/{chevron-down-BzvRoQwm.js → chevron-down-CjmFWC1H.js} +1 -1
- package/storybook-static/assets/{chevron-left-B1gSiTT5.js → chevron-left-CgCtsWUK.js} +1 -1
- package/storybook-static/assets/{chevron-right-DGZcDdSt.js → chevron-right-DfAt2YE7.js} +1 -1
- package/storybook-static/assets/{chunk-W22LQPXL-BcSNUmAX.js → chunk-W22LQPXL-CPNotdVj.js} +1 -1
- package/storybook-static/assets/{circle-alert-CE1HjPRk.js → circle-alert-DNyHEnP7.js} +1 -1
- package/storybook-static/assets/{circle-check-CLOhV_d2.js → circle-check-BUp-oyqo.js} +1 -1
- package/storybook-static/assets/components-CWI6MUvj.js +241 -0
- package/storybook-static/assets/{contextMenu-Cy6W9ruC.js → contextMenu-B2RJaey1.js} +1 -1
- package/storybook-static/assets/{defaultRenderers-DMzMTiXd.js → defaultRenderers-jxMgDhVa.js} +1 -1
- package/storybook-static/assets/{download-C9YXf8CS.js → download-C5zRdMry.js} +1 -1
- package/storybook-static/assets/{filesAndExcel-CqunExs5.js → filesAndExcel-CYKyG14W.js} +1 -1
- package/storybook-static/assets/{floating-ui.react-CGmmDcLA.js → floating-ui.react-BGMb0aIS.js} +1 -1
- package/storybook-static/assets/{formatters-CVj-3Vn0-BFaHJqZL.js → formatters-CBgrBeSA-DY6OIAc8.js} +1 -1
- package/storybook-static/assets/{formatters-BbK_Ug8Y.js → formatters-DeU7wI7T.js} +1 -1
- package/storybook-static/assets/{formatters-runtime-UPbk1cre.js → formatters-runtime-DnSgDhbz.js} +1 -1
- package/storybook-static/assets/{foundationLib-N3zYHNH2.js → foundationLib-DrimcZD1.js} +1 -1
- package/storybook-static/assets/{hooks-BY3WPUzv.js → hooks-BJmY6rG1.js} +1 -1
- package/storybook-static/assets/{iframe-I5gZKSOP.css → iframe-Baz8D-0E.css} +1 -1
- package/storybook-static/assets/{iframe-DM52JHVE.js → iframe-BnW9ONAs.js} +4 -4
- package/storybook-static/assets/iframe-DGAjOA6_.js +1 -0
- package/storybook-static/assets/{info-DVyz6CIq.js → info-2igYCwst.js} +1 -1
- package/storybook-static/assets/odata-DfSyh3Sn.js +1 -0
- package/storybook-static/assets/{odataAndTables-aeqd_eqp.js → odataAndTables-BhJXkoYZ.js} +3 -3
- package/storybook-static/assets/{odataFetchFn-WMwANfst.js → odataFetchFn-D2X1lPng.js} +1 -1
- package/storybook-static/assets/{odataStoryFixtures-Bg0hW1z0.js → odataStoryFixtures-DYRSp8rq.js} +2 -2
- package/storybook-static/assets/{persisted-SjS3xGzj.js → persisted-DHhF6isC.js} +1 -1
- package/storybook-static/assets/{pureUtilities-Dhj0YAO5.js → pureUtilities-ChXuZIo7.js} +1 -1
- package/storybook-static/assets/{react-fq-BOIxH.js → react-CLWTMVeL.js} +1 -1
- package/storybook-static/assets/{refresh-cw-BhvbdEMC.js → refresh-cw-B-NTAP58.js} +1 -1
- package/storybook-static/assets/{runtimeAndState-Ms4DDeIl.js → runtimeAndState-H412awCm.js} +1 -1
- package/storybook-static/assets/{settings-2-CDoQ1pkq.js → settings-2-1qvlM5d_.js} +1 -1
- package/storybook-static/assets/shim-BUMlC1GG.js +1 -0
- package/storybook-static/assets/{sortable-CFGuBqj5.js → sortable-BHG_CM3B.js} +1 -1
- package/storybook-static/assets/{syntaxhighlighter-T5IQBZDB-CBZU3huW.js → syntaxhighlighter-T5IQBZDB-R3_3CMVb.js} +1 -1
- package/storybook-static/assets/{trash-2-D4oLpgpt.js → trash-2-CE6CewYq.js} +1 -1
- package/storybook-static/assets/{triangle-alert-DKUca28b.js → triangle-alert-D3UYXaLs.js} +1 -1
- package/storybook-static/assets/{useODataSelectBase-BsPw4jSk.js → useODataSelectBase-FSv5umRf.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-D7ngw3D8.js → useODataTreeData-kmN53sfw.js} +1 -1
- package/storybook-static/assets/{usePickerQuery-DdN-mMzn.js → usePickerQuery-0QXDg2qR.js} +1 -1
- package/storybook-static/assets/{usePickerTriggerController-CQeVg3Yu.js → usePickerTriggerController-FtkRoBgz.js} +1 -1
- package/storybook-static/assets/{x-CE5eZUoO.js → x-BGnlLolo.js} +1 -1
- package/storybook-static/iframe.html +3 -3
- package/storybook-static/project.json +1 -1
- package/dist/chunks/base-table-CTafaxo2.js.map +0 -1
- package/dist/chunks/table-DOwANXnt.js.map +0 -1
- package/storybook-static/assets/FormattedTableCell-DdLJ2UCi.js +0 -18
- package/storybook-static/assets/Table.stories-Cc6traPG.js +0 -207
- package/storybook-static/assets/components-CQvUk-HE.js +0 -241
- package/storybook-static/assets/iframe-Chlg3akS.js +0 -1
- package/storybook-static/assets/odata-v-5LKxZl.js +0 -1
- /package/storybook-static/assets/{odata-service-B5w4YBao-BW9QLSrS.js → odata-service-B6TxBSLm-BW9QLSrS.js} +0 -0
package/dist/tree-table/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { a as e, c as t, d as n, i as r,
|
|
1
|
+
import { a as e, c as t, d as n, i as r, n as i, o as ee, p as te, r as ne, s as re, t as ie } from "../chunks/base-table-DNSYOO9t.js";
|
|
2
2
|
import { useEffect as a, useEffectEvent as o, useMemo as s, useRef as c, useState as ae } from "react";
|
|
3
3
|
import { cn as oe } from "@ryuzaki13/react-foundation-lib/utils";
|
|
4
4
|
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
5
5
|
import { ChevronDownIcon as d, ChevronRightIcon as f } from "lucide-react";
|
|
6
6
|
import { formatPipelineDisplayValue as se } from "@ryuzaki13/react-foundation-lib/formatters";
|
|
7
|
-
import { resolveTableLength as p, useTableRowSelection as
|
|
8
|
-
import {
|
|
7
|
+
import { foundationTableFeatures as ce, resolveTableLength as p, useTableRowSelection as le } from "@ryuzaki13/react-foundation-lib/table";
|
|
8
|
+
import { useTable as ue } from "@tanstack/react-table";
|
|
9
9
|
import { buildTreeTableRows as de } from "@ryuzaki13/react-foundation-lib/tree-table";
|
|
10
|
-
var
|
|
10
|
+
var m = {
|
|
11
11
|
treeColumnCell: "jOS9rT",
|
|
12
12
|
selectedIndicatorCell: "zHOAf7",
|
|
13
13
|
treeCell: "j48cXg",
|
|
@@ -18,22 +18,22 @@ var h = {
|
|
|
18
18
|
};
|
|
19
19
|
//#endregion
|
|
20
20
|
//#region src/tree-table/TreeTable.tsx
|
|
21
|
-
function
|
|
21
|
+
function h(e) {
|
|
22
22
|
return Object.fromEntries(e.map((e) => [e, !0]));
|
|
23
23
|
}
|
|
24
|
-
function
|
|
24
|
+
function g(e) {
|
|
25
25
|
return typeof e == "boolean" ? [] : Object.keys(e).filter((t) => e[t]);
|
|
26
26
|
}
|
|
27
|
-
function
|
|
27
|
+
function _(e, t) {
|
|
28
28
|
return t.get(e.id) ?? e.original;
|
|
29
29
|
}
|
|
30
30
|
function fe(e, t, n, r) {
|
|
31
31
|
return e.cell.column.id === n ? /* @__PURE__ */ u("div", {
|
|
32
|
-
className:
|
|
32
|
+
className: m.treeCell,
|
|
33
33
|
style: { paddingInlineStart: `calc(${e.row.depth} * ${p(r) ?? "0em"})` },
|
|
34
34
|
children: [e.row.getCanExpand() ? /* @__PURE__ */ l("button", {
|
|
35
35
|
type: "button",
|
|
36
|
-
className:
|
|
36
|
+
className: m.expanderButton,
|
|
37
37
|
"aria-label": e.row.getIsExpanded() ? "Свернуть строку" : "Развернуть строку",
|
|
38
38
|
"data-tree-table-interactive": "true",
|
|
39
39
|
"data-ui": "tree-table-expander",
|
|
@@ -43,115 +43,114 @@ function fe(e, t, n, r) {
|
|
|
43
43
|
},
|
|
44
44
|
children: e.row.getIsExpanded() ? /* @__PURE__ */ l(d, { size: 16 }) : /* @__PURE__ */ l(f, { size: 16 })
|
|
45
45
|
}) : /* @__PURE__ */ l("span", {
|
|
46
|
-
className:
|
|
46
|
+
className: m.expanderSpacer,
|
|
47
47
|
"aria-hidden": "true"
|
|
48
48
|
}), /* @__PURE__ */ l("div", {
|
|
49
|
-
className:
|
|
49
|
+
className: m.treeCellContent,
|
|
50
50
|
children: t
|
|
51
51
|
})]
|
|
52
52
|
}) : t;
|
|
53
53
|
}
|
|
54
|
-
function
|
|
55
|
-
let
|
|
56
|
-
let e = new Set(
|
|
57
|
-
if (
|
|
54
|
+
function v({ title: u, isLoading: d, isFetching: f, data: p, columns: v, hierarchy: y, selectionMode: b = "none", expandFirstLevel: x = !1, defaultExpandedRowIds: S, treeColumnId: C, indentSize: pe = 1, className: me, tableClassName: he, columnVisibility: ge, defaultColumnVisibility: w, columnOrder: _e, defaultColumnOrder: ve, columnSizing: ye, defaultColumnSizing: be, columnPinning: xe, defaultColumnPinning: T, enableColumnResizing: E = !1, enableColumnReordering: D = !1, columnResizeMinWidth: O, onColumnVisibilityChange: k, onColumnOrderChange: A, onColumnSizingChange: j, onColumnPinningChange: M, onRowClick: N, onRowSelectionChange: Se, onExpandedRowIdsChange: Ce, onReachEnd: P, getRowCanSelect: F, getRowClassName: we, renderHeaderContextMenu: Te, renderCellContent: I }) {
|
|
55
|
+
let L = s(() => de(p ?? [], y), [p, y]), R = s(() => t(v), [v]), z = s(() => {
|
|
56
|
+
let e = new Set(S ?? []);
|
|
57
|
+
if (x) for (let t of L.rootRowIds) e.add(t);
|
|
58
58
|
return Array.from(e);
|
|
59
59
|
}, [
|
|
60
|
-
C,
|
|
61
60
|
S,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
61
|
+
x,
|
|
62
|
+
L.rootRowIds
|
|
63
|
+
]), [B, V] = ae({}), H = c(!1), U = c(null), W = c(null), { rowSelection: Ee, activateRowSelection: De } = le({
|
|
64
|
+
availableRowIds: L.allRowIds,
|
|
65
|
+
rowById: L.rowById,
|
|
66
|
+
selectionMode: b,
|
|
67
|
+
onRowSelectionChange: Se
|
|
68
|
+
}), { columnVisibility: G, onColumnVisibilityChange: Oe } = ne({
|
|
69
|
+
columnVisibility: ge,
|
|
70
|
+
defaultColumnVisibility: w,
|
|
71
71
|
onColumnVisibilityChange: k
|
|
72
|
-
}), { columnOrder:
|
|
73
|
-
columnOrder:
|
|
74
|
-
defaultColumnOrder:
|
|
72
|
+
}), { columnOrder: K, onColumnOrderChange: ke } = ee({
|
|
73
|
+
columnOrder: _e,
|
|
74
|
+
defaultColumnOrder: ve,
|
|
75
75
|
onColumnOrderChange: A
|
|
76
|
-
}), { columnSizing:
|
|
77
|
-
columnSizing:
|
|
78
|
-
defaultColumnSizing:
|
|
76
|
+
}), { columnSizing: q, onColumnSizingChange: Ae } = r({
|
|
77
|
+
columnSizing: ye,
|
|
78
|
+
defaultColumnSizing: be,
|
|
79
79
|
columnResizeMinWidth: O,
|
|
80
80
|
onColumnSizingChange: j
|
|
81
|
-
}), { columnPinning:
|
|
82
|
-
columnPinning:
|
|
81
|
+
}), { columnPinning: J, onColumnPinningChange: je } = e({
|
|
82
|
+
columnPinning: xe,
|
|
83
83
|
defaultColumnPinning: T,
|
|
84
|
-
onColumnPinningChange:
|
|
84
|
+
onColumnPinningChange: M
|
|
85
85
|
}), Y = s(() => ({
|
|
86
|
-
columnOrder:
|
|
87
|
-
columnPinning:
|
|
88
|
-
columnSizing:
|
|
89
|
-
columnVisibility:
|
|
86
|
+
columnOrder: K,
|
|
87
|
+
columnPinning: J,
|
|
88
|
+
columnSizing: q,
|
|
89
|
+
columnVisibility: G
|
|
90
90
|
}), [
|
|
91
|
-
G,
|
|
92
|
-
q,
|
|
93
91
|
K,
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
J,
|
|
93
|
+
q,
|
|
94
|
+
G
|
|
95
|
+
]), Me = o((e, t) => {
|
|
96
96
|
if (e.length === 0) {
|
|
97
|
-
|
|
97
|
+
H.current = !1, V({});
|
|
98
98
|
return;
|
|
99
99
|
}
|
|
100
100
|
let n = new Set(e);
|
|
101
|
-
|
|
102
|
-
let r =
|
|
103
|
-
return
|
|
101
|
+
V((e) => {
|
|
102
|
+
let r = g(e).filter((e) => n.has(e));
|
|
103
|
+
return H.current ? h(r) : (H.current = !0, h(Array.from(/* @__PURE__ */ new Set([...r, ...t.filter((e) => n.has(e))]))));
|
|
104
104
|
});
|
|
105
|
-
}),
|
|
106
|
-
|
|
107
|
-
}),
|
|
108
|
-
|
|
105
|
+
}), Ne = o((e) => {
|
|
106
|
+
Ce?.(g(e));
|
|
107
|
+
}), Pe = o(() => {
|
|
108
|
+
P?.();
|
|
109
109
|
});
|
|
110
110
|
a(() => {
|
|
111
|
-
|
|
112
|
-
}, [
|
|
113
|
-
|
|
114
|
-
}, [
|
|
115
|
-
if (!
|
|
111
|
+
Me(L.allRowIds, z);
|
|
112
|
+
}, [z, L.allRowIds]), a(() => {
|
|
113
|
+
Ne(B);
|
|
114
|
+
}, [B]), a(() => {
|
|
115
|
+
if (!P || !U.current || !W.current || d) return;
|
|
116
116
|
let e = new IntersectionObserver((e) => {
|
|
117
|
-
e[0]?.isIntersecting &&
|
|
117
|
+
e[0]?.isIntersecting && Pe();
|
|
118
118
|
}, {
|
|
119
|
-
root:
|
|
119
|
+
root: U.current,
|
|
120
120
|
threshold: .1
|
|
121
121
|
});
|
|
122
|
-
return e.observe(
|
|
122
|
+
return e.observe(W.current), () => e.disconnect();
|
|
123
123
|
}, [
|
|
124
124
|
d,
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
P,
|
|
126
|
+
L.rows.length
|
|
127
127
|
]);
|
|
128
128
|
let X = ue({
|
|
129
|
-
|
|
130
|
-
|
|
129
|
+
features: ce,
|
|
130
|
+
data: L.rows,
|
|
131
|
+
columns: v,
|
|
131
132
|
state: {
|
|
132
|
-
columnOrder:
|
|
133
|
-
columnPinning:
|
|
134
|
-
columnSizing:
|
|
135
|
-
columnVisibility:
|
|
136
|
-
expanded:
|
|
137
|
-
rowSelection:
|
|
133
|
+
columnOrder: K,
|
|
134
|
+
columnPinning: J,
|
|
135
|
+
columnSizing: q,
|
|
136
|
+
columnVisibility: G,
|
|
137
|
+
expanded: B,
|
|
138
|
+
rowSelection: Ee
|
|
138
139
|
},
|
|
139
|
-
getRowId: (e) =>
|
|
140
|
+
getRowId: (e) => y.getRowId(e),
|
|
140
141
|
getSubRows: (e) => e.children,
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
onExpandedChange: B,
|
|
148
|
-
enableMultiRowSelection: x === "multi",
|
|
142
|
+
onColumnOrderChange: ke,
|
|
143
|
+
onColumnPinningChange: je,
|
|
144
|
+
onColumnSizingChange: Ae,
|
|
145
|
+
onColumnVisibilityChange: Oe,
|
|
146
|
+
onExpandedChange: V,
|
|
147
|
+
enableMultiRowSelection: b === "multi",
|
|
149
148
|
enableRowSelection: (e) => {
|
|
150
|
-
if (
|
|
151
|
-
let t =
|
|
152
|
-
return !
|
|
149
|
+
if (b === "none") return !1;
|
|
150
|
+
let t = _(e, L.rowById);
|
|
151
|
+
return !F || F(t);
|
|
153
152
|
}
|
|
154
|
-
}), Z =
|
|
153
|
+
}), Z = te(X, Y), Q = C ?? Z[0]?.id, $ = X.getRowModel().rows, Fe = s(() => re({
|
|
155
154
|
rows: $,
|
|
156
155
|
columns: Z,
|
|
157
156
|
resolveRowBoundaryKey: (e) => e.depth,
|
|
@@ -161,60 +160,60 @@ function y({ title: u, isLoading: d, isFetching: f, data: p, columns: y, hierarc
|
|
|
161
160
|
Z,
|
|
162
161
|
Q
|
|
163
162
|
]);
|
|
164
|
-
return /* @__PURE__ */ l(
|
|
163
|
+
return /* @__PURE__ */ l(i, {
|
|
165
164
|
table: X,
|
|
166
165
|
columnState: Y,
|
|
167
166
|
title: u,
|
|
168
167
|
isLoading: d,
|
|
169
168
|
isFetching: f,
|
|
170
|
-
className:
|
|
171
|
-
tableClassName:
|
|
172
|
-
selectionMode:
|
|
173
|
-
scrollableRef:
|
|
169
|
+
className: me,
|
|
170
|
+
tableClassName: he,
|
|
171
|
+
selectionMode: b,
|
|
172
|
+
scrollableRef: U,
|
|
174
173
|
interactiveElementSelector: "[data-tree-table-interactive=\"true\"]",
|
|
175
|
-
onActivateRow:
|
|
176
|
-
let t =
|
|
177
|
-
|
|
174
|
+
onActivateRow: b !== "none" || N ? (e) => {
|
|
175
|
+
let t = _(e, L.rowById);
|
|
176
|
+
De(e.id, e.getCanSelect()), N?.(t);
|
|
178
177
|
} : void 0,
|
|
179
|
-
isRowInteractive: (e) => !!(
|
|
178
|
+
isRowInteractive: (e) => !!(N || b !== "none" && e.getCanSelect()),
|
|
180
179
|
getRowClassName: (e) => {
|
|
181
|
-
let t =
|
|
182
|
-
return
|
|
180
|
+
let t = _(e, L.rowById);
|
|
181
|
+
return we?.(t);
|
|
183
182
|
},
|
|
184
|
-
getCellClassName: ({ row: e, cell: t }) => oe(t.column.id === Q &&
|
|
185
|
-
getCellLayout: ({ cell: e }) =>
|
|
186
|
-
renderHeaderContextMenu:
|
|
183
|
+
getCellClassName: ({ row: e, cell: t }) => oe(t.column.id === Q && m.treeColumnCell, t.column.id === Q && e.getIsSelected() && m.selectedIndicatorCell),
|
|
184
|
+
getCellLayout: ({ cell: e }) => Fe.get(e.id),
|
|
185
|
+
renderHeaderContextMenu: Te,
|
|
187
186
|
enableColumnResizing: E,
|
|
188
187
|
enableColumnReordering: D,
|
|
189
188
|
columnResizeMinWidth: O,
|
|
190
189
|
renderCellContent: (e) => {
|
|
191
|
-
let t =
|
|
192
|
-
field:
|
|
190
|
+
let t = _(e.row, L.rowById), r = se({
|
|
191
|
+
field: R.runtimeByColumnId[e.cell.column.id],
|
|
193
192
|
rawValue: e.cell.getValue(),
|
|
194
193
|
rowData: t,
|
|
195
194
|
rowKind: "tree"
|
|
196
195
|
}), i = n({
|
|
197
196
|
columnId: e.cell.column.id,
|
|
198
|
-
runtimeByColumnId:
|
|
199
|
-
customCellColumnIds:
|
|
197
|
+
runtimeByColumnId: R.runtimeByColumnId,
|
|
198
|
+
customCellColumnIds: R.customCellColumnIds
|
|
200
199
|
}) ? /* @__PURE__ */ l(ie, {
|
|
201
200
|
displayValue: r,
|
|
202
201
|
align: e.columnMeta?.align
|
|
203
202
|
}) : e.defaultContent;
|
|
204
|
-
return fe(e,
|
|
203
|
+
return fe(e, I ? I({
|
|
205
204
|
...e,
|
|
206
205
|
defaultContent: i,
|
|
207
206
|
displayValue: r
|
|
208
|
-
}) : i, Q,
|
|
207
|
+
}) : i, Q, pe);
|
|
209
208
|
},
|
|
210
|
-
afterTableContent:
|
|
211
|
-
ref:
|
|
212
|
-
className:
|
|
209
|
+
afterTableContent: P ? /* @__PURE__ */ l("div", {
|
|
210
|
+
ref: W,
|
|
211
|
+
className: m.sentinel,
|
|
213
212
|
"aria-hidden": "true"
|
|
214
213
|
}) : null
|
|
215
214
|
});
|
|
216
215
|
}
|
|
217
216
|
//#endregion
|
|
218
|
-
export {
|
|
217
|
+
export { v as TreeTable };
|
|
219
218
|
|
|
220
219
|
//# sourceMappingURL=index.js.map
|
|
@@ -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","/* eslint-disable react-hooks/incompatible-library */\nimport { useEffect, useEffectEvent, useMemo, useRef, useState, type ReactNode } from \"react\";\n\nimport { formatPipelineDisplayValue } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport {\n\tresolveTableLength,\n\tTableColumnDef,\n\ttype TableColumnOrderState,\n\ttype TableColumnSizingState,\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 {\n\tgetCoreRowModel,\n\tgetExpandedRowModel,\n\tuseReactTable,\n\ttype ExpandedState,\n\ttype Row,\n\ttype VisibilityState\n} 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?: VisibilityState;\n\t/**\n\t * Стартовое uncontrolled-состояние видимости колонок.\n\t */\n\tdefaultColumnVisibility?: VisibilityState;\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-состояние left-pinning для колонок.\n\t */\n\tcolumnPinning?: TableColumnPinningState;\n\t/**\n\t * Стартовое uncontrolled-состояние left-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: VisibilityState) => 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 * Вызывается после изменения left-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: Row<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 = useReactTable<TreeTableRuntimeRow<TData>>({\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\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetExpandedRowModel: getExpandedRowModel(),\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: Row<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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"}
|
|
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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ryuzaki13/react-foundation-ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "Reusable React foundation UI primitives and Storybook stories.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ryuzaki13",
|
|
@@ -369,10 +369,10 @@
|
|
|
369
369
|
"@lexical/utils": ">=0.46.0 <1.0.0",
|
|
370
370
|
"@ryuzaki13/react-foundation-api": ">=0.1.0 <2.0.0",
|
|
371
371
|
"@ryuzaki13/react-foundation-lib": ">=0.1.0 <2.0.0",
|
|
372
|
-
"@tanstack/react-query": ">=5.101.
|
|
373
|
-
"@tanstack/react-router": ">=1.170.
|
|
374
|
-
"@tanstack/react-table": ">=
|
|
375
|
-
"@tanstack/react-virtual": ">=3.14.
|
|
372
|
+
"@tanstack/react-query": ">=5.101.4 <6.0.0",
|
|
373
|
+
"@tanstack/react-router": ">=1.170.23 <2.0.0",
|
|
374
|
+
"@tanstack/react-table": ">=9.1.0 <10.0.0",
|
|
375
|
+
"@tanstack/react-virtual": ">=3.14.9 <4.0.0",
|
|
376
376
|
"lexical": ">=0.46.0 <1.0.0",
|
|
377
377
|
"lucide-react": ">=1.21.0 <2.0.0",
|
|
378
378
|
"motion": ">=12.42.0 <13.0.0",
|
|
@@ -464,8 +464,8 @@
|
|
|
464
464
|
"@lexical/rich-text": "^0.49.0",
|
|
465
465
|
"@lexical/selection": "^0.49.0",
|
|
466
466
|
"@lexical/utils": "^0.49.0",
|
|
467
|
-
"@ryuzaki13/react-foundation-api": "^1.1.
|
|
468
|
-
"@ryuzaki13/react-foundation-lib": "^1.
|
|
467
|
+
"@ryuzaki13/react-foundation-api": "^1.1.16",
|
|
468
|
+
"@ryuzaki13/react-foundation-lib": "^1.4.0",
|
|
469
469
|
"@storybook/addon-a11y": "^10.5.5",
|
|
470
470
|
"@storybook/addon-docs": "^10.5.5",
|
|
471
471
|
"@storybook/addon-vitest": "^10.5.5",
|
|
@@ -473,8 +473,8 @@
|
|
|
473
473
|
"@tanstack/query-broadcast-client-experimental": "^5.101.4",
|
|
474
474
|
"@tanstack/query-persist-client-core": "^5.101.4",
|
|
475
475
|
"@tanstack/react-query": "^5.101.4",
|
|
476
|
-
"@tanstack/react-router": "^1.170.
|
|
477
|
-
"@tanstack/react-table": "^
|
|
476
|
+
"@tanstack/react-router": "^1.170.23",
|
|
477
|
+
"@tanstack/react-table": "^9.1.0",
|
|
478
478
|
"@tanstack/react-virtual": "^3.14.9",
|
|
479
479
|
"@testing-library/dom": "^10.4.1",
|
|
480
480
|
"@testing-library/react": "^16.3.2",
|
|
@@ -191,15 +191,15 @@ $paragraph-spacing-preset-defaults: (
|
|
|
191
191
|
|
|
192
192
|
$light-theme-defaults: (
|
|
193
193
|
tokens: (
|
|
194
|
-
"--surface-0": #ffffff,
|
|
195
|
-
"--surface-1": #f8f8f9,
|
|
196
|
-
"--surface-2": #f1f1f3,
|
|
197
|
-
"--content-0": oklch(0.26 0.01 244),
|
|
198
|
-
"--content-1": oklch(0.52 0.02 268),
|
|
199
|
-
"--content-2": oklch(0.66 0.01 258),
|
|
200
|
-
"--focus-ring": oklch(0.5 0.3 270),
|
|
201
|
-
"--overlay-backdrop": rgba(0, 0, 0, 0.1),
|
|
202
|
-
"--overlay-glass": rgba(255, 255, 255, 0.8),
|
|
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
203
|
"--shadow-xs": 0 0 0.25em rgba(0, 0, 0, 0.15),
|
|
204
204
|
"--shadow-sm": 0 0 0.25em rgba(0, 0, 0, 0.25),
|
|
205
205
|
"--shadow-md": 0 0 0.5em rgba(0, 0, 0, 0.25),
|
|
@@ -186,26 +186,26 @@
|
|
|
186
186
|
@mixin generate-status-fill($name, $L, $C, $H, $mode) {
|
|
187
187
|
$s: status-scale($L, $C, $H, $mode);
|
|
188
188
|
|
|
189
|
-
--status-#{$name}-text: #{map.get(map.get($s, outline), base)};
|
|
190
|
-
--status-#{$name}-text-hover: #{map.get(map.get($s, outline), hover)};
|
|
191
|
-
--status-#{$name}-text-active: #{map.get(map.get($s, outline), active)};
|
|
189
|
+
--status-#{$name}-text: var(--hc-status-#{$name}-text, #{map.get(map.get($s, outline), base)});
|
|
190
|
+
--status-#{$name}-text-hover: var(--hc-status-#{$name}-text, #{map.get(map.get($s, outline), hover)});
|
|
191
|
+
--status-#{$name}-text-active: var(--hc-status-#{$name}-text, #{map.get(map.get($s, outline), active)});
|
|
192
192
|
|
|
193
|
-
--status-#{$name}-fill: #{map.get(map.get($s, fill), base)};
|
|
194
|
-
--status-#{$name}-fill-hover: #{map.get(map.get($s, fill), hover)};
|
|
195
|
-
--status-#{$name}-fill-active: #{map.get(map.get($s, fill), active)};
|
|
196
|
-
--status-#{$name}-on-fill: #{map.get(map.get($s, fill), on-fill)};
|
|
193
|
+
--status-#{$name}-fill: var(--hc-status-#{$name}-fill, #{map.get(map.get($s, fill), base)});
|
|
194
|
+
--status-#{$name}-fill-hover: var(--hc-status-#{$name}-fill, #{map.get(map.get($s, fill), hover)});
|
|
195
|
+
--status-#{$name}-fill-active: var(--hc-status-#{$name}-fill, #{map.get(map.get($s, fill), active)});
|
|
196
|
+
--status-#{$name}-on-fill: var(--hc-status-#{$name}-on-fill, #{map.get(map.get($s, fill), on-fill)});
|
|
197
197
|
|
|
198
|
-
--status-#{$name}-soft: #{map.get($s, soft)};
|
|
198
|
+
--status-#{$name}-soft: var(--hc-status-#{$name}-soft, #{map.get($s, soft)});
|
|
199
199
|
}
|
|
200
200
|
|
|
201
201
|
@mixin generate-status-border($name, $L, $C, $H, $mode) {
|
|
202
202
|
@if $name == neutral {
|
|
203
203
|
$s: status-border-neutral($L, $C, $H, $mode);
|
|
204
204
|
|
|
205
|
-
--border-0: #{map.get($s, base)};
|
|
206
|
-
--border-1: #{map.get($s, hover)};
|
|
207
|
-
--border-2: #{map.get($s, active)};
|
|
208
|
-
--border-focus: #{map.get($s, focus)};
|
|
205
|
+
--border-0: var(--hc-border, #{map.get($s, base)});
|
|
206
|
+
--border-1: var(--hc-border, #{map.get($s, hover)});
|
|
207
|
+
--border-2: var(--hc-border, #{map.get($s, active)});
|
|
208
|
+
--border-focus: var(--hc-border-focus, #{map.get($s, focus)});
|
|
209
209
|
|
|
210
210
|
--status-#{$name}-border: var(--border-0);
|
|
211
211
|
--status-#{$name}-border-hover: var(--border-1);
|
|
@@ -214,10 +214,10 @@
|
|
|
214
214
|
} @else {
|
|
215
215
|
$s: status-scale($L, $C, $H, $mode);
|
|
216
216
|
|
|
217
|
-
--status-#{$name}-border: #{map.get(map.get($s, border), base)};
|
|
218
|
-
--status-#{$name}-border-hover: #{map.get(map.get($s, border), hover)};
|
|
219
|
-
--status-#{$name}-border-active: #{map.get(map.get($s, border), active)};
|
|
220
|
-
--status-#{$name}-border-focus: #{map.get(map.get($s, border), focus)};
|
|
217
|
+
--status-#{$name}-border: var(--hc-status-#{$name}-border, #{map.get(map.get($s, border), base)});
|
|
218
|
+
--status-#{$name}-border-hover: var(--hc-status-#{$name}-border, #{map.get(map.get($s, border), hover)});
|
|
219
|
+
--status-#{$name}-border-active: var(--hc-status-#{$name}-border, #{map.get(map.get($s, border), active)});
|
|
220
|
+
--status-#{$name}-border-focus: var(--hc-status-#{$name}-border, #{map.get(map.get($s, border), focus)});
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
223
|
|
|
@@ -271,10 +271,10 @@
|
|
|
271
271
|
@mixin generate-neutral-border3($L, $C, $H, $mode) {
|
|
272
272
|
$s: status-border-neutral3($L, $C, $H, $mode);
|
|
273
273
|
|
|
274
|
-
--border-0: #{map.get($s, base)};
|
|
275
|
-
--border-1: #{map.get($s, hover)};
|
|
276
|
-
--border-2: #{map.get($s, active)};
|
|
277
|
-
--border-focus: #{map.get($s, focus)};
|
|
274
|
+
--border-0: var(--hc-border, #{map.get($s, base)});
|
|
275
|
+
--border-1: var(--hc-border, #{map.get($s, hover)});
|
|
276
|
+
--border-2: var(--hc-border, #{map.get($s, active)});
|
|
277
|
+
--border-focus: var(--hc-border-focus, #{map.get($s, focus)});
|
|
278
278
|
|
|
279
279
|
--status-neutral-border: var(--border-0);
|
|
280
280
|
--status-neutral-border-hover: var(--border-1);
|
|
@@ -284,16 +284,16 @@
|
|
|
284
284
|
|
|
285
285
|
@mixin generate-accent($L, $C, $H, $mode) {
|
|
286
286
|
@if $mode == light {
|
|
287
|
-
--content-accent: oklch(#{$L} #{$C} #{$H});
|
|
288
|
-
--surface-accent: oklch(#{$L + 0.4} #{math.max(0, $C - 0.2)} #{$H - 15});
|
|
289
|
-
--border-accent: oklch(#{$L - 0.03} #{math.max(0, $C - 0.08)} #{$H});
|
|
290
|
-
// --focus-accent: oklch(#{$L + 0.04} #{$C + 0.05} #{$H});
|
|
287
|
+
--content-accent: var(--hc-content-accent, oklch(#{$L} #{$C} #{$H}));
|
|
288
|
+
--surface-accent: var(--hc-surface-accent, oklch(#{$L + 0.4} #{math.max(0, $C - 0.2)} #{$H - 15}));
|
|
289
|
+
--border-accent: var(--hc-border-accent, oklch(#{$L - 0.03} #{math.max(0, $C - 0.08)} #{$H}));
|
|
290
|
+
// --focus-accent: var(--hc-focus-accent, oklch(#{$L + 0.04} #{$C + 0.05} #{$H}));
|
|
291
291
|
}
|
|
292
292
|
|
|
293
293
|
@if $mode == dark {
|
|
294
|
-
--content-accent: oklch(#{$L} #{$C} #{$H});
|
|
295
|
-
--surface-accent: oklch(#{$L - 0.4} #{math.max(0, $C - 0.15)} #{$H - 10});
|
|
296
|
-
--border-accent: oklch(#{$L - 0.08} #{math.max(0, $C - 0.1)} #{$H});
|
|
297
|
-
// --focus-accent: oklch(#{$L + 0.06} #{$C + 0.03} #{$H});
|
|
294
|
+
--content-accent: var(--hc-content-accent, oklch(#{$L} #{$C} #{$H}));
|
|
295
|
+
--surface-accent: var(--hc-surface-accent, oklch(#{$L - 0.4} #{math.max(0, $C - 0.15)} #{$H - 10}));
|
|
296
|
+
--border-accent: var(--hc-border-accent, oklch(#{$L - 0.08} #{math.max(0, $C - 0.1)} #{$H}));
|
|
297
|
+
// --focus-accent: var(--hc-focus-accent, oklch(#{$L + 0.06} #{$C + 0.03} #{$H}));
|
|
298
298
|
}
|
|
299
299
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-C0FnF6B9.js";import{n as t}from"./iframe-BnW9ONAs.js";import{i as n,r}from"./react-qN2cStNd.js";import{a as i,d as a,f as o,l as s,m as c,n as l,p as u,r as d,u as f}from"./blocks-W-usNnZb.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./Badge.stories-0OqfwxFw.js";function b(e){let t={code:`code`,h2:`h2`,h3:`h3`,li:`li`,p:`p`,pre:`pre`,ul:`ul`,...n(),...e.components};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(s,{of:h,parameters:{atomicCanvas:!0,layout:`padded`,docs:{toc:!0}}}),`
|
|
2
2
|
`,(0,S.jsx)(u,{children:`Badge`}),`
|
|
3
3
|
`,(0,S.jsx)(o,{children:`Компактная текстовая метка для статусов, категорий, фильтров и коротких служебных пометок`}),`
|
|
4
4
|
`,(0,S.jsx)(t.p,{children:`Badge подходит для коротких подписей, которые должны быстро читаться и не перегружать интерфейс:`}),`
|