@mari-ui/components 0.1.1 → 0.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.
- package/dist/accordion.js +4 -4
- package/dist/accordion.js.map +1 -1
- package/dist/alert.js +5 -5
- package/dist/alert.js.map +1 -1
- package/dist/autocomplete.js +8 -8
- package/dist/autocomplete.js.map +1 -1
- package/dist/avatar.js +3 -3
- package/dist/badge.js +3 -3
- package/dist/breadcrumb.js +9 -9
- package/dist/breadcrumb.js.map +1 -1
- package/dist/button.js +4 -4
- package/dist/calendar.js +14 -14
- package/dist/calendar.js.map +1 -1
- package/dist/card.js +4 -4
- package/dist/card.js.map +1 -1
- package/dist/carousel.js +4 -4
- package/dist/carousel.js.map +1 -1
- package/dist/chart.js +5 -5
- package/dist/chart.js.map +1 -1
- package/dist/checkbox.js +4 -4
- package/dist/{chunk-BDV4GOEN.js → chunk-5GILG5AK.js} +1 -1
- package/dist/chunk-5GILG5AK.js.map +1 -0
- package/dist/{chunk-IP2J3BWY.js → chunk-6AMBZXZJ.js} +1 -1
- package/dist/chunk-6AMBZXZJ.js.map +1 -0
- package/dist/{chunk-XUKVQO6M.js → chunk-6CSUVVFG.js} +1 -1
- package/dist/chunk-6CSUVVFG.js.map +1 -0
- package/dist/{chunk-ELHESRRH.js → chunk-7FQQRTPX.js} +5 -5
- package/dist/chunk-7FQQRTPX.js.map +1 -0
- package/dist/{chunk-QNOHFHVL.js → chunk-7WB4CDWX.js} +4 -4
- package/dist/chunk-7WB4CDWX.js.map +1 -0
- package/dist/{chunk-47FHUOLT.js → chunk-BLFY5UAL.js} +1 -1
- package/dist/chunk-BLFY5UAL.js.map +1 -0
- package/dist/{chunk-CYLXW66E.js → chunk-C3QWJFSE.js} +2 -2
- package/dist/chunk-C3QWJFSE.js.map +1 -0
- package/dist/{chunk-QDFDMWXD.js → chunk-CNWRDTEW.js} +7 -7
- package/dist/chunk-CNWRDTEW.js.map +1 -0
- package/dist/{chunk-2IEXY3OZ.js → chunk-CVKAGR3D.js} +4 -4
- package/dist/{chunk-LZHERDNB.js → chunk-CXIWRNSP.js} +5 -5
- package/dist/chunk-CXIWRNSP.js.map +1 -0
- package/dist/{chunk-FNJHS5KQ.js → chunk-E5JTEQ4V.js} +6 -6
- package/dist/chunk-E5JTEQ4V.js.map +1 -0
- package/dist/{chunk-IO4346TF.js → chunk-FC7T3INX.js} +8 -8
- package/dist/chunk-FC7T3INX.js.map +1 -0
- package/dist/{chunk-KCYM2JXP.js → chunk-FWSMUUZ5.js} +5 -5
- package/dist/chunk-FWSMUUZ5.js.map +1 -0
- package/dist/{chunk-3ABWBQCS.js → chunk-GTNCXOUL.js} +2 -2
- package/dist/chunk-GTNCXOUL.js.map +1 -0
- package/dist/{chunk-ZLPAXPDI.js → chunk-GVJ4M63W.js} +3 -3
- package/dist/{chunk-ZLPAXPDI.js.map → chunk-GVJ4M63W.js.map} +1 -1
- package/dist/{chunk-LBXIPDAB.js → chunk-JXD5DW6E.js} +3 -3
- package/dist/chunk-JXD5DW6E.js.map +1 -0
- package/dist/{chunk-P7Z5BREP.js → chunk-L6DBWUAB.js} +6 -6
- package/dist/chunk-L6DBWUAB.js.map +1 -0
- package/dist/{chunk-YZ7MDC6B.js → chunk-LNL4TCGL.js} +2 -2
- package/dist/chunk-LNL4TCGL.js.map +1 -0
- package/dist/{chunk-TCYDVNSU.js → chunk-MT4VH7QV.js} +1 -1
- package/dist/chunk-MT4VH7QV.js.map +1 -0
- package/dist/{chunk-DKENCYHA.js → chunk-MXGY2ENX.js} +1 -1
- package/dist/chunk-MXGY2ENX.js.map +1 -0
- package/dist/{chunk-DUCIAQGR.js → chunk-NENNFQEY.js} +3 -3
- package/dist/chunk-NENNFQEY.js.map +1 -0
- package/dist/{chunk-LBQMEHK6.js → chunk-NPFMPRII.js} +1 -1
- package/dist/chunk-NPFMPRII.js.map +1 -0
- package/dist/{chunk-NS7FKOFI.js → chunk-NYXU5EFE.js} +1 -1
- package/dist/chunk-NYXU5EFE.js.map +1 -0
- package/dist/{chunk-S66GKX2W.js → chunk-OAWUZIIN.js} +1 -1
- package/dist/chunk-OAWUZIIN.js.map +1 -0
- package/dist/{chunk-JNZODUXP.js → chunk-OYDG6C54.js} +1 -1
- package/dist/chunk-OYDG6C54.js.map +1 -0
- package/dist/{chunk-FFXRFQSU.js → chunk-POBOJBNJ.js} +1 -1
- package/dist/chunk-POBOJBNJ.js.map +1 -0
- package/dist/{chunk-RIBB5OJV.js → chunk-PR2MCHU4.js} +4 -4
- package/dist/chunk-PR2MCHU4.js.map +1 -0
- package/dist/{chunk-LEOIKO7C.js → chunk-RLWP6NJU.js} +4 -4
- package/dist/chunk-RLWP6NJU.js.map +1 -0
- package/dist/{chunk-V7KDUUV6.js → chunk-RMNV2CE2.js} +2 -2
- package/dist/chunk-RMNV2CE2.js.map +1 -0
- package/dist/{chunk-ZXYQ2ZPR.js → chunk-TEMTIMAH.js} +3 -3
- package/dist/chunk-TEMTIMAH.js.map +1 -0
- package/dist/{chunk-NPM7IDYV.js → chunk-TSFAAREV.js} +3 -3
- package/dist/chunk-TSFAAREV.js.map +1 -0
- package/dist/{chunk-54HHEXXD.js → chunk-VKN374SD.js} +1 -1
- package/dist/chunk-VKN374SD.js.map +1 -0
- package/dist/{chunk-ZMA7BT2L.js → chunk-XWBJPA3D.js} +4 -4
- package/dist/{chunk-ZMA7BT2L.js.map → chunk-XWBJPA3D.js.map} +1 -1
- package/dist/{chunk-QZRBO7BE.js → chunk-Z4KFHRDW.js} +9 -9
- package/dist/chunk-Z4KFHRDW.js.map +1 -0
- package/dist/{chunk-TXRQCHOR.js → chunk-ZAR3SCPV.js} +5 -5
- package/dist/chunk-ZAR3SCPV.js.map +1 -0
- package/dist/color-picker.js +19 -19
- package/dist/date-picker.js +10 -10
- package/dist/date-picker.js.map +1 -1
- package/dist/divider.js +2 -2
- package/dist/divider.js.map +1 -1
- package/dist/drawer.js +7 -7
- package/dist/dropdown.js +7 -7
- package/dist/empty.js +5 -5
- package/dist/field.js +2 -2
- package/dist/field.js.map +1 -1
- package/dist/float-button.js +6 -6
- package/dist/float-button.js.map +1 -1
- package/dist/image.js +8 -8
- package/dist/image.js.map +1 -1
- package/dist/input-number.js +6 -6
- package/dist/input.js +8 -8
- package/dist/list.js +12 -12
- package/dist/list.js.map +1 -1
- package/dist/loading.js +1 -1
- package/dist/logo.js.map +1 -1
- package/dist/mari.css +8 -2
- package/dist/masonry.js +5 -5
- package/dist/masonry.js.map +1 -1
- package/dist/menu.js +10 -10
- package/dist/menu.js.map +1 -1
- package/dist/modal.js +8 -8
- package/dist/modal.js.map +1 -1
- package/dist/pagination.js +5 -5
- package/dist/popconfirm.js +13 -13
- package/dist/popconfirm.js.map +1 -1
- package/dist/popover.js +10 -10
- package/dist/progress.js +2 -2
- package/dist/progress.js.map +1 -1
- package/dist/qrcode.js +1 -1
- package/dist/qrcode.js.map +1 -1
- package/dist/radio.js +4 -4
- package/dist/radio.js.map +1 -1
- package/dist/rate.js +2 -2
- package/dist/rate.js.map +1 -1
- package/dist/segmented.js +4 -4
- package/dist/select.js +11 -11
- package/dist/skeleton.js +3 -3
- package/dist/slider.js +8 -8
- package/dist/slider.js.map +1 -1
- package/dist/splitter.js.map +1 -1
- package/dist/statistic.js +7 -7
- package/dist/statistic.js.map +1 -1
- package/dist/steps.js +4 -4
- package/dist/steps.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/switch.js +2 -2
- package/dist/switch.js.map +1 -1
- package/dist/table.js +19 -19
- package/dist/table.js.map +1 -1
- package/dist/tabs.js +2 -2
- package/dist/tabs.js.map +1 -1
- package/dist/tag.js +3 -3
- package/dist/theme-customizer.js +19 -19
- package/dist/theme-customizer.js.map +1 -1
- package/dist/timeline.js +5 -5
- package/dist/timeline.js.map +1 -1
- package/dist/toast.js +7 -7
- package/dist/tooltip.js +4 -4
- package/dist/tour.js +12 -12
- package/dist/tour.js.map +1 -1
- package/dist/transfer.js +11 -11
- package/dist/transfer.js.map +1 -1
- package/dist/tree-select.js +12 -12
- package/dist/tree-select.js.map +1 -1
- package/dist/tree.js +5 -5
- package/dist/types/accordion/Accordion.d.ts +1 -3
- package/dist/types/accordion/Accordion.d.ts.map +1 -1
- package/dist/types/alert/Alert.d.ts +0 -1
- package/dist/types/alert/Alert.d.ts.map +1 -1
- package/dist/types/autocomplete/AutoComplete.d.ts +2 -2
- package/dist/types/autocomplete/utils.d.ts +0 -8
- package/dist/types/autocomplete/utils.d.ts.map +1 -1
- package/dist/types/avatar/utils.d.ts +1 -1
- package/dist/types/badge/Badge.d.ts +0 -3
- package/dist/types/badge/Badge.d.ts.map +1 -1
- package/dist/types/breadcrumb/Breadcrumb.d.ts +1 -12
- package/dist/types/breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/types/breadcrumb/utils.d.ts +0 -7
- package/dist/types/breadcrumb/utils.d.ts.map +1 -1
- package/dist/types/button/types.d.ts +1 -9
- package/dist/types/button/types.d.ts.map +1 -1
- package/dist/types/calendar/Calendar.d.ts +3 -4
- package/dist/types/calendar/Calendar.d.ts.map +1 -1
- package/dist/types/calendar/_components/CalendarPanel.d.ts +1 -2
- package/dist/types/calendar/_components/CalendarPanel.d.ts.map +1 -1
- package/dist/types/calendar/_components/DayGrid.d.ts +1 -1
- package/dist/types/calendar/types.d.ts +1 -1
- package/dist/types/calendar/types.d.ts.map +1 -1
- package/dist/types/card/Card.d.ts +3 -4
- package/dist/types/card/Card.d.ts.map +1 -1
- package/dist/types/card/types.d.ts +1 -1
- package/dist/types/carousel/types.d.ts +4 -10
- package/dist/types/carousel/types.d.ts.map +1 -1
- package/dist/types/carousel/utils.d.ts +0 -11
- package/dist/types/carousel/utils.d.ts.map +1 -1
- package/dist/types/chart/_shared/paths.d.ts +1 -1
- package/dist/types/chart/_shared/scale.d.ts +1 -2
- package/dist/types/chart/_shared/scale.d.ts.map +1 -1
- package/dist/types/chart/bar-chart/BarChart.d.ts +1 -1
- package/dist/types/chart/gauge/Gauge.d.ts +1 -1
- package/dist/types/chart/line-chart/LineChart.d.ts +2 -2
- package/dist/types/chart/pie-chart/PieChart.d.ts +1 -1
- package/dist/types/chart/sparkline/Sparkline.d.ts +1 -1
- package/dist/types/checkbox/utils.d.ts.map +1 -1
- package/dist/types/color-picker/ColorPicker.d.ts +0 -6
- package/dist/types/color-picker/ColorPicker.d.ts.map +1 -1
- package/dist/types/color-picker/_components/ColorPresets.d.ts +1 -1
- package/dist/types/color-picker/_components/ColorPresets.d.ts.map +1 -1
- package/dist/types/color-picker/utils.d.ts +1 -1
- package/dist/types/date-picker/DatePicker.d.ts +0 -6
- package/dist/types/date-picker/DatePicker.d.ts.map +1 -1
- package/dist/types/date-picker/TimePicker.d.ts +1 -1
- package/dist/types/date-picker/_components/TimePanel.d.ts.map +1 -1
- package/dist/types/date-picker/utils.d.ts +1 -1
- package/dist/types/date-picker/utils.d.ts.map +1 -1
- package/dist/types/divider/Divider.d.ts +1 -1
- package/dist/types/divider/types.d.ts +2 -4
- package/dist/types/divider/types.d.ts.map +1 -1
- package/dist/types/drawer/Drawer.d.ts +5 -6
- package/dist/types/drawer/Drawer.d.ts.map +1 -1
- package/dist/types/dropdown/_components/DropdownContent.d.ts +1 -1
- package/dist/types/dropdown/_components/DropdownItem.d.ts +0 -5
- package/dist/types/dropdown/_components/DropdownItem.d.ts.map +1 -1
- package/dist/types/dropdown/types.d.ts +1 -1
- package/dist/types/dropdown/useDropdown.d.ts +0 -16
- package/dist/types/dropdown/useDropdown.d.ts.map +1 -1
- package/dist/types/dropdown/utils.d.ts +1 -1
- package/dist/types/empty/Empty.d.ts +1 -6
- package/dist/types/empty/Empty.d.ts.map +1 -1
- package/dist/types/field/Field.d.ts +1 -5
- package/dist/types/field/Field.d.ts.map +1 -1
- package/dist/types/float-button/BackTop.d.ts +1 -1
- package/dist/types/float-button/FloatButton.d.ts +0 -5
- package/dist/types/float-button/FloatButton.d.ts.map +1 -1
- package/dist/types/float-button/FloatButtonGroup.d.ts +1 -1
- package/dist/types/float-button/utils.d.ts +1 -1
- package/dist/types/foundations/usePersonaTheme.d.ts +1 -1
- package/dist/types/image/Image.d.ts +0 -6
- package/dist/types/image/Image.d.ts.map +1 -1
- package/dist/types/image/ImageGallery.d.ts +1 -1
- package/dist/types/image/ImageViewer.d.ts +1 -1
- package/dist/types/image/galleryUtils.d.ts +1 -1
- package/dist/types/input/SearchInput.d.ts +1 -6
- package/dist/types/input/SearchInput.d.ts.map +1 -1
- package/dist/types/input/Textarea.d.ts +2 -6
- package/dist/types/input/Textarea.d.ts.map +1 -1
- package/dist/types/input/mention/types.d.ts +1 -2
- package/dist/types/input/mention/types.d.ts.map +1 -1
- package/dist/types/input/types.d.ts +3 -15
- package/dist/types/input/types.d.ts.map +1 -1
- package/dist/types/input/utils.d.ts +1 -26
- package/dist/types/input/utils.d.ts.map +1 -1
- package/dist/types/input-number/InputNumber.d.ts +0 -2
- package/dist/types/input-number/InputNumber.d.ts.map +1 -1
- package/dist/types/input-number/utils.d.ts +1 -1
- package/dist/types/lib/ContentSkeleton.d.ts +1 -1
- package/dist/types/lib/FloatingArrow.d.ts +0 -10
- package/dist/types/lib/FloatingArrow.d.ts.map +1 -1
- package/dist/types/lib/SkeletonDemo.d.ts +1 -1
- package/dist/types/lib/SkeletonSlot.d.ts +1 -1
- package/dist/types/lib/colorClasses.d.ts +1 -7
- package/dist/types/lib/colorClasses.d.ts.map +1 -1
- package/dist/types/lib/date/index.d.ts +1 -1
- package/dist/types/lib/elevationClass.d.ts +0 -8
- package/dist/types/lib/elevationClass.d.ts.map +1 -1
- package/dist/types/lib/fieldContext.d.ts +1 -1
- package/dist/types/lib/floating.d.ts +2 -7
- package/dist/types/lib/floating.d.ts.map +1 -1
- package/dist/types/lib/infiniteScroll.d.ts +1 -1
- package/dist/types/lib/linkBehavior.d.ts +1 -1
- package/dist/types/lib/overlay.d.ts +0 -7
- package/dist/types/lib/overlay.d.ts.map +1 -1
- package/dist/types/lib/sizeClasses.d.ts +2 -2
- package/dist/types/lib/skeleton.d.ts +1 -1
- package/dist/types/lib/storyMeta.d.ts +7 -28
- package/dist/types/lib/storyMeta.d.ts.map +1 -1
- package/dist/types/lib/storybookArgTypes.d.ts +1 -1
- package/dist/types/lib/useFloatingPosition.d.ts +1 -1
- package/dist/types/list/List.d.ts +0 -4
- package/dist/types/list/List.d.ts.map +1 -1
- package/dist/types/loading/Loading.d.ts.map +1 -1
- package/dist/types/loading/types.d.ts +2 -5
- package/dist/types/loading/types.d.ts.map +1 -1
- package/dist/types/loading/utils.d.ts +0 -5
- package/dist/types/loading/utils.d.ts.map +1 -1
- package/dist/types/masonry/Masonry.d.ts +0 -4
- package/dist/types/masonry/Masonry.d.ts.map +1 -1
- package/dist/types/menu/_shared/MenuLink.d.ts +0 -4
- package/dist/types/menu/_shared/MenuLink.d.ts.map +1 -1
- package/dist/types/menu/_shared/MobileNav.d.ts +0 -6
- package/dist/types/menu/_shared/MobileNav.d.ts.map +1 -1
- package/dist/types/menu/_shared/NavBar.d.ts +0 -8
- package/dist/types/menu/_shared/NavBar.d.ts.map +1 -1
- package/dist/types/menu/basic-menu/BasicMenu.d.ts +2 -16
- package/dist/types/menu/basic-menu/BasicMenu.d.ts.map +1 -1
- package/dist/types/menu/mega-menu/MegaMenu.d.ts +0 -8
- package/dist/types/menu/mega-menu/MegaMenu.d.ts.map +1 -1
- package/dist/types/menu/mega-menu/_components/MegaMenuItem.d.ts +0 -12
- package/dist/types/menu/mega-menu/_components/MegaMenuItem.d.ts.map +1 -1
- package/dist/types/menu/sidebar/Sidebar.d.ts +1 -16
- package/dist/types/menu/sidebar/Sidebar.d.ts.map +1 -1
- package/dist/types/menu/sidebar/_components/SidebarButton.d.ts +0 -6
- package/dist/types/menu/sidebar/_components/SidebarButton.d.ts.map +1 -1
- package/dist/types/menu/sidebar/_components/SidebarItem.d.ts +0 -10
- package/dist/types/menu/sidebar/_components/SidebarItem.d.ts.map +1 -1
- package/dist/types/menu/sidebar/_components/SidebarMenu.d.ts +0 -4
- package/dist/types/menu/sidebar/_components/SidebarMenu.d.ts.map +1 -1
- package/dist/types/menu/types.d.ts +2 -11
- package/dist/types/menu/types.d.ts.map +1 -1
- package/dist/types/menu/utils.d.ts +0 -22
- package/dist/types/menu/utils.d.ts.map +1 -1
- package/dist/types/modal/Modal.d.ts +1 -12
- package/dist/types/modal/Modal.d.ts.map +1 -1
- package/dist/types/modal/types.d.ts +3 -4
- package/dist/types/modal/types.d.ts.map +1 -1
- package/dist/types/modal/utils.d.ts +1 -5
- package/dist/types/modal/utils.d.ts.map +1 -1
- package/dist/types/pagination/Pagination.d.ts +2 -11
- package/dist/types/pagination/Pagination.d.ts.map +1 -1
- package/dist/types/pagination/types.d.ts +1 -1
- package/dist/types/pagination/types.d.ts.map +1 -1
- package/dist/types/pagination/utils.d.ts +5 -12
- package/dist/types/pagination/utils.d.ts.map +1 -1
- package/dist/types/popconfirm/Popconfirm.d.ts +0 -4
- package/dist/types/popconfirm/Popconfirm.d.ts.map +1 -1
- package/dist/types/popover/Popover.d.ts +0 -5
- package/dist/types/popover/Popover.d.ts.map +1 -1
- package/dist/types/progress/Progress.d.ts +0 -3
- package/dist/types/progress/Progress.d.ts.map +1 -1
- package/dist/types/qrcode/QRCode.d.ts +0 -6
- package/dist/types/qrcode/QRCode.d.ts.map +1 -1
- package/dist/types/radio/utils.d.ts +1 -1
- package/dist/types/segmented/Segmented.d.ts +0 -4
- package/dist/types/segmented/Segmented.d.ts.map +1 -1
- package/dist/types/select/Select.d.ts +0 -5
- package/dist/types/select/Select.d.ts.map +1 -1
- package/dist/types/select/_components/SelectPanel.d.ts +2 -3
- package/dist/types/select/_components/SelectPanel.d.ts.map +1 -1
- package/dist/types/select/types.d.ts +1 -1
- package/dist/types/select/types.d.ts.map +1 -1
- package/dist/types/skeleton/utils.d.ts.map +1 -1
- package/dist/types/slider/Slider.d.ts.map +1 -1
- package/dist/types/slider/utils.d.ts +0 -1
- package/dist/types/slider/utils.d.ts.map +1 -1
- package/dist/types/splitter/Splitter.d.ts +4 -4
- package/dist/types/statistic/Statistic.d.ts +1 -1
- package/dist/types/statistic/utils.d.ts +2 -4
- package/dist/types/statistic/utils.d.ts.map +1 -1
- package/dist/types/steps/Steps.d.ts.map +1 -1
- package/dist/types/steps/_components/StepsContent.d.ts +1 -10
- package/dist/types/steps/_components/StepsContent.d.ts.map +1 -1
- package/dist/types/steps/types.d.ts +1 -1
- package/dist/types/steps/types.d.ts.map +1 -1
- package/dist/types/steps/utils.d.ts +0 -9
- package/dist/types/steps/utils.d.ts.map +1 -1
- package/dist/types/switch/Switch.d.ts +1 -9
- package/dist/types/switch/Switch.d.ts.map +1 -1
- package/dist/types/switch/utils.d.ts.map +1 -1
- package/dist/types/table/Table.d.ts +7 -11
- package/dist/types/table/Table.d.ts.map +1 -1
- package/dist/types/table/_components/TableBody.d.ts.map +1 -1
- package/dist/types/table/_components/TableEditDrawer.d.ts +0 -8
- package/dist/types/table/_components/TableEditDrawer.d.ts.map +1 -1
- package/dist/types/table/_components/TableHeader.d.ts +0 -7
- package/dist/types/table/_components/TableHeader.d.ts.map +1 -1
- package/dist/types/table/_components/TableInfoValue.d.ts +0 -10
- package/dist/types/table/_components/TableInfoValue.d.ts.map +1 -1
- package/dist/types/table/_components/TablePagination.d.ts +0 -12
- package/dist/types/table/_components/TablePagination.d.ts.map +1 -1
- package/dist/types/table/_components/TableRowActions.d.ts +0 -6
- package/dist/types/table/_components/TableRowActions.d.ts.map +1 -1
- package/dist/types/table/types.d.ts +2 -18
- package/dist/types/table/types.d.ts.map +1 -1
- package/dist/types/table/utils.d.ts +1 -7
- package/dist/types/table/utils.d.ts.map +1 -1
- package/dist/types/tabs/Tabs.d.ts +0 -1
- package/dist/types/tabs/Tabs.d.ts.map +1 -1
- package/dist/types/tabs/_components/TabsContent.d.ts +0 -5
- package/dist/types/tabs/_components/TabsContent.d.ts.map +1 -1
- package/dist/types/tabs/_components/TabsList.d.ts +6 -6
- package/dist/types/tabs/_components/TabsTrigger.d.ts +1 -1
- package/dist/types/tabs/utils.d.ts +0 -5
- package/dist/types/tabs/utils.d.ts.map +1 -1
- package/dist/types/tag/utils.d.ts +0 -8
- package/dist/types/tag/utils.d.ts.map +1 -1
- package/dist/types/theme-customizer/ThemeCustomizer.d.ts +1 -1
- package/dist/types/timeline/Timeline.d.ts +1 -3
- package/dist/types/timeline/Timeline.d.ts.map +1 -1
- package/dist/types/toast/Toast.d.ts +2 -2
- package/dist/types/toast/useToast.d.ts +2 -4
- package/dist/types/toast/useToast.d.ts.map +1 -1
- package/dist/types/toast/utils.d.ts +0 -1
- package/dist/types/toast/utils.d.ts.map +1 -1
- package/dist/types/tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/tooltip/utils.d.ts +0 -6
- package/dist/types/tooltip/utils.d.ts.map +1 -1
- package/dist/types/tour/Tour.d.ts +0 -6
- package/dist/types/tour/Tour.d.ts.map +1 -1
- package/dist/types/tour/utils.d.ts +1 -1
- package/dist/types/tour/utils.d.ts.map +1 -1
- package/dist/types/transfer/Transfer.d.ts +0 -5
- package/dist/types/transfer/Transfer.d.ts.map +1 -1
- package/dist/types/transfer/utils.d.ts +1 -3
- package/dist/types/transfer/utils.d.ts.map +1 -1
- package/dist/types/tree/Tree.d.ts +0 -6
- package/dist/types/tree/Tree.d.ts.map +1 -1
- package/dist/types/tree/utils.d.ts +1 -1
- package/dist/types/tree-select/TreeSelect.d.ts +0 -6
- package/dist/types/tree-select/TreeSelect.d.ts.map +1 -1
- package/dist/types/tree-select/_components/TreeSelectPanel.d.ts +1 -1
- package/dist/types/tree-select/utils.d.ts +1 -1
- package/dist/types/typography/utils.d.ts.map +1 -1
- package/dist/types/upload/_components/List.d.ts +0 -7
- package/dist/types/upload/_components/List.d.ts.map +1 -1
- package/dist/types/upload/_components/ReviewList.d.ts +0 -8
- package/dist/types/upload/_components/ReviewList.d.ts.map +1 -1
- package/dist/types/upload/_components/UploadDragDropButton.d.ts +0 -8
- package/dist/types/upload/_components/UploadDragDropButton.d.ts.map +1 -1
- package/dist/types/upload/_components/UploadReviewButton.d.ts +0 -5
- package/dist/types/upload/_components/UploadReviewButton.d.ts.map +1 -1
- package/dist/types/upload/types.d.ts +5 -8
- package/dist/types/upload/types.d.ts.map +1 -1
- package/dist/types/upload/useUpload.d.ts +0 -10
- package/dist/types/upload/useUpload.d.ts.map +1 -1
- package/dist/types/upload/utils.d.ts +0 -4
- package/dist/types/upload/utils.d.ts.map +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/typography.js +2 -2
- package/dist/typography.js.map +1 -1
- package/dist/upload.js +8 -8
- package/dist/upload.js.map +1 -1
- package/package.json +3 -3
- package/dist/chunk-3ABWBQCS.js.map +0 -1
- package/dist/chunk-47FHUOLT.js.map +0 -1
- package/dist/chunk-54HHEXXD.js.map +0 -1
- package/dist/chunk-BDV4GOEN.js.map +0 -1
- package/dist/chunk-CYLXW66E.js.map +0 -1
- package/dist/chunk-DKENCYHA.js.map +0 -1
- package/dist/chunk-DUCIAQGR.js.map +0 -1
- package/dist/chunk-ELHESRRH.js.map +0 -1
- package/dist/chunk-FFXRFQSU.js.map +0 -1
- package/dist/chunk-FNJHS5KQ.js.map +0 -1
- package/dist/chunk-IO4346TF.js.map +0 -1
- package/dist/chunk-IP2J3BWY.js.map +0 -1
- package/dist/chunk-JNZODUXP.js.map +0 -1
- package/dist/chunk-KCYM2JXP.js.map +0 -1
- package/dist/chunk-LBQMEHK6.js.map +0 -1
- package/dist/chunk-LBXIPDAB.js.map +0 -1
- package/dist/chunk-LEOIKO7C.js.map +0 -1
- package/dist/chunk-LZHERDNB.js.map +0 -1
- package/dist/chunk-NPM7IDYV.js.map +0 -1
- package/dist/chunk-NS7FKOFI.js.map +0 -1
- package/dist/chunk-P7Z5BREP.js.map +0 -1
- package/dist/chunk-QDFDMWXD.js.map +0 -1
- package/dist/chunk-QNOHFHVL.js.map +0 -1
- package/dist/chunk-QZRBO7BE.js.map +0 -1
- package/dist/chunk-RIBB5OJV.js.map +0 -1
- package/dist/chunk-S66GKX2W.js.map +0 -1
- package/dist/chunk-TCYDVNSU.js.map +0 -1
- package/dist/chunk-TXRQCHOR.js.map +0 -1
- package/dist/chunk-V7KDUUV6.js.map +0 -1
- package/dist/chunk-XUKVQO6M.js.map +0 -1
- package/dist/chunk-YZ7MDC6B.js.map +0 -1
- package/dist/chunk-ZXYQ2ZPR.js.map +0 -1
- /package/dist/{chunk-2IEXY3OZ.js.map → chunk-CVKAGR3D.js.map} +0 -0
package/dist/transfer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/transfer/Transfer.tsx","../src/transfer/_components/TransferList.tsx","../src/transfer/utils.ts"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from \"react\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\nimport { cn, useControllableState } from \"@mari-ui/core\";\nimport { Button } from \"../button\";\nimport { useFieldGroup, useFieldSkeleton } from \"../lib/fieldContext\";\nimport { TransferList } from \"./_components/TransferList\";\nimport type { TransferDirection, TransferProps } from \"./types\";\nimport { moveKeys, splitLists } from \"./utils\";\n\nexport type { TransferProps };\n\nconst EMPTY: string[] = [];\n\ninterface MoveButtonProps {\n direction: TransferDirection;\n enabled: boolean;\n label: string;\n text?: string;\n onMove: () => void;\n}\n\n/**\n * Seçim yokken `disabled` yerine `aria-disabled`: taşıdıktan sonra düğme\n * pasifleşince odak düğmede kalır (native disabled odağı body'ye düşürürdü).\n */\nfunction MoveButton({ direction, enabled, label, text, onMove, skeleton }: MoveButtonProps & { skeleton: boolean }) {\n const Icon = direction === \"right\" ? ChevronRightIcon : ChevronLeftIcon;\n return (\n <Button\n size=\"sm\"\n variant={enabled ? \"solid\" : \"outline\"}\n color={enabled ? \"primary\" : \"neutral\"}\n aria-label={label}\n aria-disabled={!enabled}\n skeleton={skeleton}\n onClick={() => enabled && onMove()}\n // Dar ekranda listeler alt alta: oklar aşağı/yukarı döner. İkon `icon` prop'unda — children'a konunca\n // Button'un `truncate` etiket span'ine düşüp metnin üstüne sarıyordu.\n icon={<Icon aria-hidden size={16} className=\"max-sm:rotate-90\" />}\n className={cn(!enabled && \"cursor-not-allowed opacity-50\")}\n >\n {text}\n </Button>\n );\n}\n\n/**\n * Faz 16.4 — yapı ant.design Transfer'den: iki liste (kaynak/hedef) arasında\n * işaretlenen öğeleri taşıma. Başlıkta tümünü seç + sayaç, isteğe bağlı arama\n * (Türkçe/aksansız), Shift ile aralık seçimi, `oneWay` (hedefte satır başına\n * \"kaldır\"), `render`/`footer`. Dar ekranda listeler alt alta.\n *\n * Erişilebilirlik: bileşen bir `group` (Field etiketi adıdır); her liste\n * başlığıyla adlandırılmış `section`, satırlar gerçek işaret kutuları. Taşıma\n * düğmelerinin adı eylemi söyler (\"Seçilenleri Hedef listesine taşı\"); taşıma\n * sonucu canlı bölgeden duyurulur.\n */\nexport function Transfer(props: Readonly<TransferProps>) {\n const field = useFieldGroup({ \"aria-label\": props[\"aria-label\"], \"aria-labelledby\": props[\"aria-labelledby\"], \"aria-describedby\": props[\"aria-describedby\"], disabled: props.disabled });\n const {\n dataSource,\n titles = [\"Kaynak\", \"Hedef\"],\n operations,\n showSearch = false,\n searchPlaceholder = \"Ara\",\n filterOption,\n onSearch,\n render,\n oneWay = false,\n showSelectAll = true,\n footer,\n notFoundContent = \"Öğe yok\",\n listHeight = \"14rem\",\n color,\n className,\n skeleton: ownSkeleton,\n } = props;\n const disabled = !!field.disabled;\n const skeleton = useFieldSkeleton(ownSkeleton);\n const [targetKeys, setTargetKeys] = useControllableState<string[]>({ value: props.targetKeys, defaultValue: props.defaultTargetKeys ?? EMPTY });\n const [selectedKeys, setSelectedKeys] = useControllableState<string[]>({ value: props.selectedKeys, defaultValue: props.defaultSelectedKeys ?? EMPTY });\n const [announcement, setAnnouncement] = useState(\"\");\n\n const { left, right } = splitLists(dataSource, targetKeys);\n const leftKeys = new Set(left.map((i) => i.key));\n const leftSelected = selectedKeys.filter((k) => leftKeys.has(k));\n const rightSelected = selectedKeys.filter((k) => !leftKeys.has(k));\n const disabledKeys = new Set(dataSource.filter((i) => i.disabled).map((i) => i.key));\n const movable = (keys: string[]) => keys.some((k) => !disabledKeys.has(k));\n const FALLBACK_TITLES = [\"Kaynak\", \"Hedef\"] as const;\n const titleText = (i: 0 | 1) => {\n const t = titles[i];\n return typeof t === \"string\" ? t : FALLBACK_TITLES[i];\n };\n\n const updateSelected = (nextLeft: string[], nextRight: string[]) => {\n setSelectedKeys([...nextLeft, ...nextRight]);\n props.onSelectChange?.(nextLeft, nextRight);\n };\n\n const move = (direction: TransferDirection, keys: string[]) => {\n const result = moveKeys(dataSource, targetKeys, keys, direction);\n if (result.moved.length === 0) return;\n setTargetKeys(result.targetKeys);\n props.onChange?.(result.targetKeys, direction, result.moved);\n const moved = new Set(result.moved);\n updateSelected(\n leftSelected.filter((k) => !moved.has(k)),\n rightSelected.filter((k) => !moved.has(k))\n );\n const to = direction === \"right\" ? titleText(1) : titleText(0);\n setAnnouncement(`${result.moved.length} öğe ${to} listesine taşındı.`);\n };\n\n const listProps = { showSearch, searchPlaceholder, filterOption, onSearch, render, showSelectAll, footer, notFoundContent, listHeight, disabled, color, skeleton };\n\n return (\n <div\n role=\"group\"\n aria-hidden={skeleton || undefined}\n aria-label={field[\"aria-label\"]}\n aria-labelledby={field[\"aria-labelledby\"]}\n aria-describedby={field[\"aria-describedby\"]}\n className={cn(\"flex w-full flex-col items-stretch gap-3 sm:flex-row sm:items-center\", className)}\n >\n <TransferList\n {...listProps}\n direction=\"left\"\n title={titles[0]}\n items={left}\n selected={leftSelected}\n onSelect={(keys) => updateSelected(keys, rightSelected)}\n />\n <div className=\"flex shrink-0 justify-center gap-2 sm:flex-col\">\n <MoveButton\n direction=\"right\"\n enabled={!disabled && movable(leftSelected)}\n label={`Seçilenleri ${titleText(1)} listesine taşı`}\n text={operations?.[0]}\n onMove={() => move(\"right\", leftSelected)}\n skeleton={skeleton}\n />\n {!oneWay && (\n <MoveButton\n direction=\"left\"\n enabled={!disabled && movable(rightSelected)}\n label={`Seçilenleri ${titleText(0)} listesine taşı`}\n text={operations?.[1]}\n onMove={() => move(\"left\", rightSelected)}\n skeleton={skeleton}\n />\n )}\n </div>\n <TransferList\n {...listProps}\n direction=\"right\"\n title={titles[1]}\n items={right}\n selected={oneWay ? EMPTY : rightSelected}\n onSelect={(keys) => updateSelected(leftSelected, keys)}\n onRemove={oneWay ? (keys) => move(\"left\", keys) : undefined}\n />\n <span role=\"status\" className=\"sr-only\">\n {announcement}\n </span>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useId, useRef, useState } from \"react\";\nimport { SearchIcon, XIcon } from \"lucide-react\";\nimport { cn, type ColorRole } from \"@mari-ui/core\";\nimport { Checkbox } from \"../../checkbox\";\nimport { Input } from \"../../input\";\nimport { borderStrongColorClass } from \"../../lib/colorClasses\";\nimport { skeletonBoxProps } from \"../../lib/skeleton\";\nimport { SkeletonSlot } from \"../../lib/SkeletonSlot\";\nimport type { TransferDirection, TransferItem, TransferProps } from \"../types\";\nimport { countLabel, filterItems, itemText, rangeSelect, selectAllState, toggleAll } from \"../utils\";\n\nexport interface TransferListProps {\n direction: TransferDirection;\n title: React.ReactNode;\n items: TransferItem[];\n /** Bu listedeki seçili anahtarlar. */\n selected: string[];\n onSelect: (keys: string[]) => void;\n /** oneWay hedef listesi: işaret kutusu yok, satırda \"kaldır\". */\n onRemove?: (keys: string[]) => void;\n showSearch: boolean;\n searchPlaceholder: string;\n filterOption: TransferProps[\"filterOption\"];\n onSearch: TransferProps[\"onSearch\"];\n render: TransferProps[\"render\"];\n showSelectAll: boolean;\n footer: TransferProps[\"footer\"];\n notFoundContent: React.ReactNode;\n listHeight: string;\n disabled: boolean;\n color?: ColorRole;\n skeleton: boolean;\n}\n\nconst plainTitle = (title: React.ReactNode, fallback: string) => (typeof title === \"string\" ? title : fallback);\n\nfunction RowContent({ item, render }: Readonly<{ item: TransferItem; render: TransferProps[\"render\"] }>) {\n if (render) return <>{render(item)}</>;\n return <span className=\"block truncate\">{item.title}</span>;\n}\n\n/** Liste gövdesi iskeleti: kutu + değişken uzunlukta satır (gövde yüksekliği `listHeight` ile sabit). */\nfunction SkeletonRows({ count }: Readonly<{ count: number }>) {\n const widths = [\"w-32\", \"w-24\", \"w-40\", \"w-28\", \"w-36\"];\n return (\n <>\n {Array.from({ length: count }, (_, i) => (\n // Konumsal yer tutucular.\n <li key={i} className=\"flex items-center gap-2 px-3 py-2\">\n <span {...skeletonBoxProps(\"size-4 shrink-0 rounded-sm\")} />\n <span {...skeletonBoxProps(cn(\"h-3.5 rounded-sm\", widths[i % widths.length]))} />\n </li>\n ))}\n </>\n );\n}\n\n/**\n * Tek liste: başlık (tümünü seç + sayaç + ad), isteğe bağlı arama, satırlar,\n * alt bilgi. Liste bir `section`, adı başlık; satırlar gerçek işaret kutuları\n * (Tab ile tek tek, Boşluk ile seçilir; Shift ile aralık seçimi).\n */\nexport function TransferList(props: Readonly<TransferListProps>) {\n const { direction, title, items, selected, onSelect, onRemove, showSearch, searchPlaceholder, filterOption, onSearch, render, showSelectAll, footer, notFoundContent, listHeight, disabled, color, skeleton } = props;\n const titleId = useId();\n const [query, setQuery] = useState(\"\");\n const visible = filterItems(items, query, direction, filterOption);\n const selectedSet = new Set(selected);\n const all = selectAllState(visible, selectedSet);\n const anchor = useRef<string | null>(null);\n const shift = useRef(false);\n const listRef = useRef<HTMLUListElement>(null);\n const name = plainTitle(title, direction === \"left\" ? \"Kaynak\" : \"Hedef\");\n const removable = onRemove !== undefined;\n\n // oneWay'de satır kaldırılınca odak bir sonraki satırın \"kaldır\"ına (yoksa listeye) geçer — DOM'dan kalkan düğmeyle body'ye düşmesin.\n const [refocusIndex, setRefocusIndex] = useState<number | null>(null);\n useEffect(() => {\n if (refocusIndex === null) return;\n const buttons = listRef.current?.querySelectorAll<HTMLButtonElement>(\"button\");\n const target = buttons?.[Math.min(refocusIndex, buttons.length - 1)];\n (target ?? listRef.current)?.focus();\n setRefocusIndex(null);\n }, [refocusIndex]);\n\n const toggleItem = (key: string, checked: boolean) => {\n if (shift.current) onSelect(rangeSelect(visible, selected, anchor.current, key, checked));\n else onSelect(checked ? [...selected, key] : selected.filter((k) => k !== key));\n anchor.current = key;\n };\n\n const empty = query.trim() ? \"Sonuç bulunamadı\" : notFoundContent;\n\n return (\n <div\n role=\"group\"\n aria-labelledby={titleId}\n className={cn(\n \"flex min-w-0 flex-1 flex-col overflow-hidden rounded-lg border bg-mari-surface text-sm\",\n color ? borderStrongColorClass[color] : \"border-mari-border\",\n // Bölümün tamamı soluklaştırılmaz (başlık/sayaç kontrastı düşerdi); kutular kendi devre dışı görünümünde.\n disabled && \"bg-mari-surface-alt\"\n )}\n >\n <div className=\"relative flex h-10 shrink-0 items-center gap-2 border-b border-mari-border px-3\">\n {!skeleton && showSelectAll && !removable && (\n <Checkbox\n checked={all.checked}\n indeterminate={all.indeterminate}\n disabled={disabled || visible.every((i) => i.disabled)}\n label={<span className=\"sr-only\">{`${name}: görünen öğelerin tümünü seç`}</span>}\n onChange={(e) => onSelect(toggleAll(visible, selected, e.target.checked))}\n />\n )}\n {!skeleton && <span className=\"text-mari-muted tabular-nums\">{countLabel(removable ? 0 : selected.length, items.length)}</span>}\n {!skeleton && removable && items.length > 0 && (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => {\n onRemove(visible.filter((i) => !i.disabled).map((i) => i.key));\n listRef.current?.focus();\n }}\n className=\"relative rounded-sm text-xs text-mari-primary outline-none pointer-coarse:before:absolute pointer-coarse:before:inset-x-0 pointer-coarse:before:-inset-y-3.5 hover:underline focus-visible:ring-2 focus-visible:ring-mari-ring disabled:cursor-not-allowed\"\n >\n Tümünü kaldır\n </button>\n )}\n <span id={titleId} className={cn(\"ml-auto truncate font-medium text-mari-foreground\", skeleton && \"invisible\")}>\n {title}\n </span>\n {skeleton && (\n // Başlık yüksekliği sabit (h-10): yalnız çubuklar.\n <span aria-hidden className=\"absolute inset-x-3 inset-y-0 flex items-center gap-2\">\n <span {...skeletonBoxProps(\"size-4 rounded-sm\")} />\n <span {...skeletonBoxProps(\"h-3.5 w-12 rounded-sm\")} />\n <span {...skeletonBoxProps(\"ml-auto h-3.5 w-20 rounded-sm\")} />\n </span>\n )}\n </div>\n\n {showSearch && (\n <div className=\"shrink-0 border-b border-mari-border p-2\">\n <Input\n skeleton={skeleton}\n size=\"sm\"\n aria-label={`${name} listesinde ara`}\n placeholder={searchPlaceholder}\n icon={<SearchIcon aria-hidden size={14} />}\n allowClear\n disabled={disabled}\n value={query}\n onChange={(e) => {\n setQuery(e.target.value);\n onSearch?.(direction, e.target.value);\n }}\n onClear={() => {\n setQuery(\"\");\n onSearch?.(direction, \"\");\n }}\n />\n </div>\n )}\n\n <ul\n ref={listRef}\n // Programatik odak hedefi (kaldırma sonrası). Devre dışıyken içinde odaklanacak öğe kalmaz → liste kendisi\n // sekme durağı olur ki klavyeyle kaydırılabilsin.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- kaydırılabilir bölge (axe scrollable-region-focusable)\n tabIndex={disabled ? 0 : -1}\n aria-labelledby={titleId}\n className=\"shrink-0 overflow-y-auto py-1 outline-none focus-visible:ring-2 focus-visible:ring-mari-ring focus-visible:ring-inset\"\n style={{ height: listHeight }}\n >\n {skeleton && <SkeletonRows count={Math.max(items.length, 5)} />}\n {!skeleton && visible.length === 0 && <li className=\"flex h-full items-center justify-center px-3 text-center text-mari-muted\">{empty}</li>}\n {!skeleton && visible.map((item, index) => {\n const isSelected = selectedSet.has(item.key);\n if (removable) {\n return (\n <li key={item.key} className=\"flex items-center gap-2 px-3 py-1.5 pointer-coarse:py-2.5 hover:bg-mari-surface-alt\">\n <div className=\"min-w-0 flex-1\">\n <RowContent item={item} render={render} />\n {item.description && !render && <span className=\"block truncate text-xs text-mari-muted\">{item.description}</span>}\n </div>\n <button\n type=\"button\"\n aria-label={`${itemText(item) || \"Öğeyi\"} kaldır`}\n disabled={disabled || item.disabled}\n onClick={() => {\n onRemove([item.key]);\n setRefocusIndex(index);\n }}\n className=\"relative grid size-6 shrink-0 place-items-center rounded-sm text-mari-muted outline-none hover:bg-mari-surface-alt hover:text-mari-foreground focus-visible:ring-2 focus-visible:ring-mari-ring disabled:cursor-not-allowed disabled:opacity-50 pointer-coarse:before:absolute pointer-coarse:before:-inset-2.5\"\n >\n <XIcon aria-hidden size={14} />\n </button>\n </li>\n );\n }\n return (\n // Shift durumunu değişiklik olayından önce yakala (change olayı shiftKey taşımaz).\n <li\n key={item.key}\n onClickCapture={(e) => (shift.current = e.shiftKey)}\n onKeyDownCapture={(e) => (shift.current = e.shiftKey)}\n className={cn(\"flex\", isSelected && \"bg-mari-primary-subtle\")}\n >\n <Checkbox\n checked={isSelected}\n disabled={disabled || item.disabled}\n label={<RowContent item={item} render={render} />}\n description={render ? undefined : item.description}\n onChange={(e) => toggleItem(item.key, e.target.checked)}\n classNames={{\n wrapper: cn(\"flex w-full min-w-0 px-3 py-1.5 pointer-coarse:py-3\", !isSelected && !item.disabled && !disabled && \"hover:bg-mari-surface-alt\"),\n label: \"min-w-0 flex-1\",\n }}\n />\n </li>\n );\n })}\n </ul>\n\n {footer && (\n <div className=\"shrink-0 border-t border-mari-border p-2\">\n <SkeletonSlot on={skeleton} placeholder={<span {...skeletonBoxProps(\"block h-full min-h-6 w-24 rounded-md\")} />}>\n {footer({ direction })}\n </SkeletonSlot>\n </div>\n )}\n </div>\n );\n}\n","import { foldForSearch } from \"../autocomplete/utils\";\nimport type { TransferDirection, TransferItem } from \"./types\";\n\n/**\n * Faz 16.4 — Transfer'in saf mantığı (bileşenden bağımsız test edilir).\n */\n\n/** Sol: hedefte olmayanlar (dataSource sırası). Sağ: hedef anahtarlarının sırası (dataSource'ta olmayan anahtar düşer). */\nexport function splitLists(dataSource: readonly TransferItem[], targetKeys: readonly string[]) {\n const byKey = new Map(dataSource.map((item) => [item.key, item]));\n const target = new Set(targetKeys);\n return {\n left: dataSource.filter((item) => !target.has(item.key)),\n right: targetKeys.map((key) => byKey.get(key)).filter((item): item is TransferItem => item !== undefined),\n };\n}\n\nexport function itemText(item: TransferItem): string {\n if (item.searchText !== undefined) return item.searchText;\n return typeof item.title === \"string\" || typeof item.title === \"number\" ? String(item.title) : \"\";\n}\n\nexport function filterItems(\n items: readonly TransferItem[],\n query: string,\n direction: TransferDirection,\n filterOption?: (input: string, item: TransferItem, direction: TransferDirection) => boolean\n): TransferItem[] {\n const q = query.trim();\n if (!q) return [...items];\n if (filterOption) return items.filter((item) => filterOption(q, item, direction));\n const folded = foldForSearch(q);\n return items.filter((item) => foldForSearch(itemText(item)).includes(folded));\n}\n\n/**\n * Taşıma: sağa → seçilenler hedefin SONUNA eklenir (sıraları kaynaktaki gibi);\n * sola → hedeften çıkar. Devre dışı öğe taşınmaz.\n */\nexport function moveKeys(\n dataSource: readonly TransferItem[],\n targetKeys: readonly string[],\n selected: readonly string[],\n direction: TransferDirection\n): { targetKeys: string[]; moved: string[] } {\n const disabled = new Set(dataSource.filter((i) => i.disabled).map((i) => i.key));\n const target = new Set(targetKeys);\n const chosen = new Set(selected);\n if (direction === \"right\") {\n const moved = dataSource.filter((i) => chosen.has(i.key) && !target.has(i.key) && !disabled.has(i.key)).map((i) => i.key);\n return { targetKeys: [...targetKeys, ...moved], moved };\n }\n const moved = targetKeys.filter((k) => chosen.has(k) && !disabled.has(k));\n const movedSet = new Set(moved);\n return { targetKeys: targetKeys.filter((k) => !movedSet.has(k)), moved };\n}\n\n/** Başlıktaki \"tümünü seç\" kutusunun durumu — yalnız görünen (süzülmüş) ve etkin öğelere göre. */\nexport function selectAllState(visible: readonly TransferItem[], selected: ReadonlySet<string>): { checked: boolean; indeterminate: boolean } {\n const enabled = visible.filter((i) => !i.disabled);\n const count = enabled.filter((i) => selected.has(i.key)).length;\n return { checked: enabled.length > 0 && count === enabled.length, indeterminate: count > 0 && count < enabled.length };\n}\n\n/** Tümünü seç/kaldır: görünen etkin öğeler eklenir ya da çıkarılır; aramada gizli kalan seçimler korunur. */\nexport function toggleAll(visible: readonly TransferItem[], selected: readonly string[], select: boolean): string[] {\n const keys = visible.filter((i) => !i.disabled).map((i) => i.key);\n if (!select) {\n const drop = new Set(keys);\n return selected.filter((k) => !drop.has(k));\n }\n const next = new Set(selected);\n keys.forEach((k) => next.add(k));\n return [...next];\n}\n\n/**\n * Shift+tıklama: son tıklanan (`anchor`) ile `key` arasındaki etkin öğeleri\n * `checked` durumuna getirir. Anchor görünmüyorsa yalnız `key`.\n */\nexport function rangeSelect(\n visible: readonly TransferItem[],\n selected: readonly string[],\n anchor: string | null,\n key: string,\n checked: boolean\n): string[] {\n const to = visible.findIndex((i) => i.key === key);\n const from = anchor === null ? -1 : visible.findIndex((i) => i.key === anchor);\n const span = from === -1 ? [visible[to]!] : visible.slice(Math.min(from, to), Math.max(from, to) + 1);\n const keys = span.filter((i) => !i.disabled).map((i) => i.key);\n const next = new Set(selected);\n keys.forEach((k) => (checked ? next.add(k) : next.delete(k)));\n return [...next];\n}\n\n/** Başlıktaki sayaç: \"3/12 öğe\" ya da \"12 öğe\". */\nexport function countLabel(selected: number, total: number): string {\n return selected > 0 ? `${selected}/${total} öğe` : `${total} öğe`;\n}\n"],"mappings":"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","names":["useState","cn","moved","jsx","jsxs","cn","useState"]}
|
|
1
|
+
{"version":3,"sources":["../src/transfer/Transfer.tsx","../src/transfer/_components/TransferList.tsx","../src/transfer/utils.ts"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from \"react\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\nimport { cn, useControllableState } from \"@mari-ui/core\";\nimport { Button } from \"../button\";\nimport { useFieldGroup, useFieldSkeleton } from \"../lib/fieldContext\";\nimport { TransferList } from \"./_components/TransferList\";\nimport type { TransferDirection, TransferProps } from \"./types\";\nimport { moveKeys, splitLists } from \"./utils\";\n\nexport type { TransferProps };\n\nconst EMPTY: string[] = [];\n\ninterface MoveButtonProps {\n direction: TransferDirection;\n enabled: boolean;\n label: string;\n text?: string;\n onMove: () => void;\n}\n\n/**\n * Seçim yokken `disabled` yerine `aria-disabled`: taşıdıktan sonra düğme\n * pasifleşince odak düğmede kalır (native disabled odağı body'ye düşürürdü).\n */\nfunction MoveButton({ direction, enabled, label, text, onMove, skeleton }: MoveButtonProps & { skeleton: boolean }) {\n const Icon = direction === \"right\" ? ChevronRightIcon : ChevronLeftIcon;\n return (\n <Button\n size=\"sm\"\n variant={enabled ? \"solid\" : \"outline\"}\n color={enabled ? \"primary\" : \"neutral\"}\n aria-label={label}\n aria-disabled={!enabled}\n skeleton={skeleton}\n onClick={() => enabled && onMove()}\n // Dar ekranda listeler alt alta: oklar aşağı/yukarı döner. İkon `icon` prop'unda — children'a konunca\n // Button'un `truncate` etiket span'ine düşüp metnin üstüne sarıyordu.\n icon={<Icon aria-hidden size={16} className=\"max-sm:rotate-90\" />}\n className={cn(!enabled && \"cursor-not-allowed opacity-50\")}\n >\n {text}\n </Button>\n );\n}\n\n/*\n * yapı ant.design Transfer'den: iki liste (kaynak/hedef) arasında\n * işaretlenen öğeleri taşıma. Başlıkta tümünü seç + sayaç, isteğe bağlı arama\n * (Türkçe/aksansız), Shift ile aralık seçimi, `oneWay` (hedefte satır başına\n * \"kaldır\"), `render`/`footer`. Dar ekranda listeler alt alta.\n */\n/**\n * Erişilebilirlik: bileşen bir `group` (Field etiketi adıdır); her liste\n * başlığıyla adlandırılmış `section`, satırlar gerçek işaret kutuları. Taşıma\n * düğmelerinin adı eylemi söyler (\"Seçilenleri Hedef listesine taşı\"); taşıma\n * sonucu canlı bölgeden duyurulur.\n */\nexport function Transfer(props: Readonly<TransferProps>) {\n const field = useFieldGroup({ \"aria-label\": props[\"aria-label\"], \"aria-labelledby\": props[\"aria-labelledby\"], \"aria-describedby\": props[\"aria-describedby\"], disabled: props.disabled });\n const {\n dataSource,\n titles = [\"Kaynak\", \"Hedef\"],\n operations,\n showSearch = false,\n searchPlaceholder = \"Ara\",\n filterOption,\n onSearch,\n render,\n oneWay = false,\n showSelectAll = true,\n footer,\n notFoundContent = \"Öğe yok\",\n listHeight = \"14rem\",\n color,\n className,\n skeleton: ownSkeleton,\n } = props;\n const disabled = !!field.disabled;\n const skeleton = useFieldSkeleton(ownSkeleton);\n const [targetKeys, setTargetKeys] = useControllableState<string[]>({ value: props.targetKeys, defaultValue: props.defaultTargetKeys ?? EMPTY });\n const [selectedKeys, setSelectedKeys] = useControllableState<string[]>({ value: props.selectedKeys, defaultValue: props.defaultSelectedKeys ?? EMPTY });\n const [announcement, setAnnouncement] = useState(\"\");\n\n const { left, right } = splitLists(dataSource, targetKeys);\n const leftKeys = new Set(left.map((i) => i.key));\n const leftSelected = selectedKeys.filter((k) => leftKeys.has(k));\n const rightSelected = selectedKeys.filter((k) => !leftKeys.has(k));\n const disabledKeys = new Set(dataSource.filter((i) => i.disabled).map((i) => i.key));\n const movable = (keys: string[]) => keys.some((k) => !disabledKeys.has(k));\n const FALLBACK_TITLES = [\"Kaynak\", \"Hedef\"] as const;\n const titleText = (i: 0 | 1) => {\n const t = titles[i];\n return typeof t === \"string\" ? t : FALLBACK_TITLES[i];\n };\n\n const updateSelected = (nextLeft: string[], nextRight: string[]) => {\n setSelectedKeys([...nextLeft, ...nextRight]);\n props.onSelectChange?.(nextLeft, nextRight);\n };\n\n const move = (direction: TransferDirection, keys: string[]) => {\n const result = moveKeys(dataSource, targetKeys, keys, direction);\n if (result.moved.length === 0) return;\n setTargetKeys(result.targetKeys);\n props.onChange?.(result.targetKeys, direction, result.moved);\n const moved = new Set(result.moved);\n updateSelected(\n leftSelected.filter((k) => !moved.has(k)),\n rightSelected.filter((k) => !moved.has(k))\n );\n const to = direction === \"right\" ? titleText(1) : titleText(0);\n setAnnouncement(`${result.moved.length} öğe ${to} listesine taşındı.`);\n };\n\n const listProps = { showSearch, searchPlaceholder, filterOption, onSearch, render, showSelectAll, footer, notFoundContent, listHeight, disabled, color, skeleton };\n\n return (\n <div\n role=\"group\"\n aria-hidden={skeleton || undefined}\n aria-label={field[\"aria-label\"]}\n aria-labelledby={field[\"aria-labelledby\"]}\n aria-describedby={field[\"aria-describedby\"]}\n className={cn(\"flex w-full flex-col items-stretch gap-3 sm:flex-row sm:items-center\", className)}\n >\n <TransferList\n {...listProps}\n direction=\"left\"\n title={titles[0]}\n items={left}\n selected={leftSelected}\n onSelect={(keys) => updateSelected(keys, rightSelected)}\n />\n <div className=\"flex shrink-0 justify-center gap-2 sm:flex-col\">\n <MoveButton\n direction=\"right\"\n enabled={!disabled && movable(leftSelected)}\n label={`Seçilenleri ${titleText(1)} listesine taşı`}\n text={operations?.[0]}\n onMove={() => move(\"right\", leftSelected)}\n skeleton={skeleton}\n />\n {!oneWay && (\n <MoveButton\n direction=\"left\"\n enabled={!disabled && movable(rightSelected)}\n label={`Seçilenleri ${titleText(0)} listesine taşı`}\n text={operations?.[1]}\n onMove={() => move(\"left\", rightSelected)}\n skeleton={skeleton}\n />\n )}\n </div>\n <TransferList\n {...listProps}\n direction=\"right\"\n title={titles[1]}\n items={right}\n selected={oneWay ? EMPTY : rightSelected}\n onSelect={(keys) => updateSelected(leftSelected, keys)}\n onRemove={oneWay ? (keys) => move(\"left\", keys) : undefined}\n />\n <span role=\"status\" className=\"sr-only\">\n {announcement}\n </span>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useId, useRef, useState } from \"react\";\nimport { SearchIcon, XIcon } from \"lucide-react\";\nimport { cn, type ColorRole } from \"@mari-ui/core\";\nimport { Checkbox } from \"../../checkbox\";\nimport { Input } from \"../../input\";\nimport { borderStrongColorClass } from \"../../lib/colorClasses\";\nimport { skeletonBoxProps } from \"../../lib/skeleton\";\nimport { SkeletonSlot } from \"../../lib/SkeletonSlot\";\nimport type { TransferDirection, TransferItem, TransferProps } from \"../types\";\nimport { countLabel, filterItems, itemText, rangeSelect, selectAllState, toggleAll } from \"../utils\";\n\nexport interface TransferListProps {\n direction: TransferDirection;\n title: React.ReactNode;\n items: TransferItem[];\n /** Bu listedeki seçili anahtarlar. */\n selected: string[];\n onSelect: (keys: string[]) => void;\n /** oneWay hedef listesi: işaret kutusu yok, satırda \"kaldır\". */\n onRemove?: (keys: string[]) => void;\n showSearch: boolean;\n searchPlaceholder: string;\n filterOption: TransferProps[\"filterOption\"];\n onSearch: TransferProps[\"onSearch\"];\n render: TransferProps[\"render\"];\n showSelectAll: boolean;\n footer: TransferProps[\"footer\"];\n notFoundContent: React.ReactNode;\n listHeight: string;\n disabled: boolean;\n color?: ColorRole;\n skeleton: boolean;\n}\n\nconst plainTitle = (title: React.ReactNode, fallback: string) => (typeof title === \"string\" ? title : fallback);\n\nfunction RowContent({ item, render }: Readonly<{ item: TransferItem; render: TransferProps[\"render\"] }>) {\n if (render) return <>{render(item)}</>;\n return <span className=\"block truncate\">{item.title}</span>;\n}\n\n/** Liste gövdesi iskeleti: kutu + değişken uzunlukta satır (gövde yüksekliği `listHeight` ile sabit). */\nfunction SkeletonRows({ count }: Readonly<{ count: number }>) {\n const widths = [\"w-32\", \"w-24\", \"w-40\", \"w-28\", \"w-36\"];\n return (\n <>\n {Array.from({ length: count }, (_, i) => (\n // Konumsal yer tutucular.\n <li key={i} className=\"flex items-center gap-2 px-3 py-2\">\n <span {...skeletonBoxProps(\"size-4 shrink-0 rounded-sm\")} />\n <span {...skeletonBoxProps(cn(\"h-3.5 rounded-sm\", widths[i % widths.length]))} />\n </li>\n ))}\n </>\n );\n}\n\n/**\n * Tek liste: başlık (tümünü seç + sayaç + ad), isteğe bağlı arama, satırlar,\n * alt bilgi. Liste bir `section`, adı başlık; satırlar gerçek işaret kutuları\n * (Tab ile tek tek, Boşluk ile seçilir; Shift ile aralık seçimi).\n */\nexport function TransferList(props: Readonly<TransferListProps>) {\n const { direction, title, items, selected, onSelect, onRemove, showSearch, searchPlaceholder, filterOption, onSearch, render, showSelectAll, footer, notFoundContent, listHeight, disabled, color, skeleton } = props;\n const titleId = useId();\n const [query, setQuery] = useState(\"\");\n const visible = filterItems(items, query, direction, filterOption);\n const selectedSet = new Set(selected);\n const all = selectAllState(visible, selectedSet);\n const anchor = useRef<string | null>(null);\n const shift = useRef(false);\n const listRef = useRef<HTMLUListElement>(null);\n const name = plainTitle(title, direction === \"left\" ? \"Kaynak\" : \"Hedef\");\n const removable = onRemove !== undefined;\n\n // oneWay'de satır kaldırılınca odak bir sonraki satırın \"kaldır\"ına (yoksa listeye) geçer — DOM'dan kalkan düğmeyle body'ye düşmesin.\n const [refocusIndex, setRefocusIndex] = useState<number | null>(null);\n useEffect(() => {\n if (refocusIndex === null) return;\n const buttons = listRef.current?.querySelectorAll<HTMLButtonElement>(\"button\");\n const target = buttons?.[Math.min(refocusIndex, buttons.length - 1)];\n (target ?? listRef.current)?.focus();\n setRefocusIndex(null);\n }, [refocusIndex]);\n\n const toggleItem = (key: string, checked: boolean) => {\n if (shift.current) onSelect(rangeSelect(visible, selected, anchor.current, key, checked));\n else onSelect(checked ? [...selected, key] : selected.filter((k) => k !== key));\n anchor.current = key;\n };\n\n const empty = query.trim() ? \"Sonuç bulunamadı\" : notFoundContent;\n\n return (\n <div\n role=\"group\"\n aria-labelledby={titleId}\n className={cn(\n \"flex min-w-0 flex-1 flex-col overflow-hidden rounded-lg border bg-mari-surface text-sm\",\n color ? borderStrongColorClass[color] : \"border-mari-border\",\n // Bölümün tamamı soluklaştırılmaz (başlık/sayaç kontrastı düşerdi); kutular kendi devre dışı görünümünde.\n disabled && \"bg-mari-surface-alt\"\n )}\n >\n <div className=\"relative flex h-10 shrink-0 items-center gap-2 border-b border-mari-border px-3\">\n {!skeleton && showSelectAll && !removable && (\n <Checkbox\n checked={all.checked}\n indeterminate={all.indeterminate}\n disabled={disabled || visible.every((i) => i.disabled)}\n label={<span className=\"sr-only\">{`${name}: görünen öğelerin tümünü seç`}</span>}\n onChange={(e) => onSelect(toggleAll(visible, selected, e.target.checked))}\n />\n )}\n {!skeleton && <span className=\"text-mari-muted tabular-nums\">{countLabel(removable ? 0 : selected.length, items.length)}</span>}\n {!skeleton && removable && items.length > 0 && (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => {\n onRemove(visible.filter((i) => !i.disabled).map((i) => i.key));\n listRef.current?.focus();\n }}\n className=\"relative rounded-sm text-xs text-mari-primary outline-none pointer-coarse:before:absolute pointer-coarse:before:inset-x-0 pointer-coarse:before:-inset-y-3.5 hover:underline focus-visible:ring-2 focus-visible:ring-mari-ring disabled:cursor-not-allowed\"\n >\n Tümünü kaldır\n </button>\n )}\n <span id={titleId} className={cn(\"ml-auto truncate font-medium text-mari-foreground\", skeleton && \"invisible\")}>\n {title}\n </span>\n {skeleton && (\n // Başlık yüksekliği sabit (h-10): yalnız çubuklar.\n <span aria-hidden className=\"absolute inset-x-3 inset-y-0 flex items-center gap-2\">\n <span {...skeletonBoxProps(\"size-4 rounded-sm\")} />\n <span {...skeletonBoxProps(\"h-3.5 w-12 rounded-sm\")} />\n <span {...skeletonBoxProps(\"ml-auto h-3.5 w-20 rounded-sm\")} />\n </span>\n )}\n </div>\n\n {showSearch && (\n <div className=\"shrink-0 border-b border-mari-border p-2\">\n <Input\n skeleton={skeleton}\n size=\"sm\"\n aria-label={`${name} listesinde ara`}\n placeholder={searchPlaceholder}\n icon={<SearchIcon aria-hidden size={14} />}\n allowClear\n disabled={disabled}\n value={query}\n onChange={(e) => {\n setQuery(e.target.value);\n onSearch?.(direction, e.target.value);\n }}\n onClear={() => {\n setQuery(\"\");\n onSearch?.(direction, \"\");\n }}\n />\n </div>\n )}\n\n <ul\n ref={listRef}\n // Programatik odak hedefi (kaldırma sonrası). Devre dışıyken içinde odaklanacak öğe kalmaz → liste kendisi\n // sekme durağı olur ki klavyeyle kaydırılabilsin.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- kaydırılabilir bölge (axe scrollable-region-focusable)\n tabIndex={disabled ? 0 : -1}\n aria-labelledby={titleId}\n className=\"shrink-0 overflow-y-auto py-1 outline-none focus-visible:ring-2 focus-visible:ring-mari-ring focus-visible:ring-inset\"\n style={{ height: listHeight }}\n >\n {skeleton && <SkeletonRows count={Math.max(items.length, 5)} />}\n {!skeleton && visible.length === 0 && <li className=\"flex h-full items-center justify-center px-3 text-center text-mari-muted\">{empty}</li>}\n {!skeleton && visible.map((item, index) => {\n const isSelected = selectedSet.has(item.key);\n if (removable) {\n return (\n <li key={item.key} className=\"flex items-center gap-2 px-3 py-1.5 pointer-coarse:py-2.5 hover:bg-mari-surface-alt\">\n <div className=\"min-w-0 flex-1\">\n <RowContent item={item} render={render} />\n {item.description && !render && <span className=\"block truncate text-xs text-mari-muted\">{item.description}</span>}\n </div>\n <button\n type=\"button\"\n aria-label={`${itemText(item) || \"Öğeyi\"} kaldır`}\n disabled={disabled || item.disabled}\n onClick={() => {\n onRemove([item.key]);\n setRefocusIndex(index);\n }}\n className=\"relative grid size-6 shrink-0 place-items-center rounded-sm text-mari-muted outline-none hover:bg-mari-surface-alt hover:text-mari-foreground focus-visible:ring-2 focus-visible:ring-mari-ring disabled:cursor-not-allowed disabled:opacity-50 pointer-coarse:before:absolute pointer-coarse:before:-inset-2.5\"\n >\n <XIcon aria-hidden size={14} />\n </button>\n </li>\n );\n }\n return (\n // Shift durumunu değişiklik olayından önce yakala (change olayı shiftKey taşımaz).\n <li\n key={item.key}\n onClickCapture={(e) => (shift.current = e.shiftKey)}\n onKeyDownCapture={(e) => (shift.current = e.shiftKey)}\n className={cn(\"flex\", isSelected && \"bg-mari-primary-subtle\")}\n >\n <Checkbox\n checked={isSelected}\n disabled={disabled || item.disabled}\n label={<RowContent item={item} render={render} />}\n description={render ? undefined : item.description}\n onChange={(e) => toggleItem(item.key, e.target.checked)}\n classNames={{\n wrapper: cn(\"flex w-full min-w-0 px-3 py-1.5 pointer-coarse:py-3\", !isSelected && !item.disabled && !disabled && \"hover:bg-mari-surface-alt\"),\n label: \"min-w-0 flex-1\",\n }}\n />\n </li>\n );\n })}\n </ul>\n\n {footer && (\n <div className=\"shrink-0 border-t border-mari-border p-2\">\n <SkeletonSlot on={skeleton} placeholder={<span {...skeletonBoxProps(\"block h-full min-h-6 w-24 rounded-md\")} />}>\n {footer({ direction })}\n </SkeletonSlot>\n </div>\n )}\n </div>\n );\n}\n","import { foldForSearch } from \"../autocomplete/utils\";\nimport type { TransferDirection, TransferItem } from \"./types\";\n\n/** Transfer'in saf mantığı (bileşenden bağımsız test edilir). */\n\n/** Sol: hedefte olmayanlar (dataSource sırası). Sağ: hedef anahtarlarının sırası (dataSource'ta olmayan anahtar düşer). */\nexport function splitLists(dataSource: readonly TransferItem[], targetKeys: readonly string[]) {\n const byKey = new Map(dataSource.map((item) => [item.key, item]));\n const target = new Set(targetKeys);\n return {\n left: dataSource.filter((item) => !target.has(item.key)),\n right: targetKeys.map((key) => byKey.get(key)).filter((item): item is TransferItem => item !== undefined),\n };\n}\n\nexport function itemText(item: TransferItem): string {\n if (item.searchText !== undefined) return item.searchText;\n return typeof item.title === \"string\" || typeof item.title === \"number\" ? String(item.title) : \"\";\n}\n\nexport function filterItems(\n items: readonly TransferItem[],\n query: string,\n direction: TransferDirection,\n filterOption?: (input: string, item: TransferItem, direction: TransferDirection) => boolean\n): TransferItem[] {\n const q = query.trim();\n if (!q) return [...items];\n if (filterOption) return items.filter((item) => filterOption(q, item, direction));\n const folded = foldForSearch(q);\n return items.filter((item) => foldForSearch(itemText(item)).includes(folded));\n}\n\n/**\n * Taşıma: sağa → seçilenler hedefin SONUNA eklenir (sıraları kaynaktaki gibi);\n * sola → hedeften çıkar. Devre dışı öğe taşınmaz.\n */\nexport function moveKeys(\n dataSource: readonly TransferItem[],\n targetKeys: readonly string[],\n selected: readonly string[],\n direction: TransferDirection\n): { targetKeys: string[]; moved: string[] } {\n const disabled = new Set(dataSource.filter((i) => i.disabled).map((i) => i.key));\n const target = new Set(targetKeys);\n const chosen = new Set(selected);\n if (direction === \"right\") {\n const moved = dataSource.filter((i) => chosen.has(i.key) && !target.has(i.key) && !disabled.has(i.key)).map((i) => i.key);\n return { targetKeys: [...targetKeys, ...moved], moved };\n }\n const moved = targetKeys.filter((k) => chosen.has(k) && !disabled.has(k));\n const movedSet = new Set(moved);\n return { targetKeys: targetKeys.filter((k) => !movedSet.has(k)), moved };\n}\n\n/** Başlıktaki \"tümünü seç\" kutusunun durumu — yalnız görünen (süzülmüş) ve etkin öğelere göre. */\nexport function selectAllState(visible: readonly TransferItem[], selected: ReadonlySet<string>): { checked: boolean; indeterminate: boolean } {\n const enabled = visible.filter((i) => !i.disabled);\n const count = enabled.filter((i) => selected.has(i.key)).length;\n return { checked: enabled.length > 0 && count === enabled.length, indeterminate: count > 0 && count < enabled.length };\n}\n\n/** Tümünü seç/kaldır: görünen etkin öğeler eklenir ya da çıkarılır; aramada gizli kalan seçimler korunur. */\nexport function toggleAll(visible: readonly TransferItem[], selected: readonly string[], select: boolean): string[] {\n const keys = visible.filter((i) => !i.disabled).map((i) => i.key);\n if (!select) {\n const drop = new Set(keys);\n return selected.filter((k) => !drop.has(k));\n }\n const next = new Set(selected);\n keys.forEach((k) => next.add(k));\n return [...next];\n}\n\n/**\n * Shift+tıklama: son tıklanan (`anchor`) ile `key` arasındaki etkin öğeleri\n * `checked` durumuna getirir. Anchor görünmüyorsa yalnız `key`.\n */\nexport function rangeSelect(\n visible: readonly TransferItem[],\n selected: readonly string[],\n anchor: string | null,\n key: string,\n checked: boolean\n): string[] {\n const to = visible.findIndex((i) => i.key === key);\n const from = anchor === null ? -1 : visible.findIndex((i) => i.key === anchor);\n const span = from === -1 ? [visible[to]!] : visible.slice(Math.min(from, to), Math.max(from, to) + 1);\n const keys = span.filter((i) => !i.disabled).map((i) => i.key);\n const next = new Set(selected);\n keys.forEach((k) => (checked ? next.add(k) : next.delete(k)));\n return [...next];\n}\n\n/** Başlıktaki sayaç: \"3/12 öğe\" ya da \"12 öğe\". */\nexport function countLabel(selected: number, total: number): string {\n return selected > 0 ? `${selected}/${total} öğe` : `${total} öğe`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,SAAgB,YAAAA,iBAAgB;AAChC,SAAS,iBAAiB,wBAAwB;AAClD,SAAS,MAAAC,KAAI,4BAA4B;;;ACFzC,SAAgB,WAAW,OAAO,QAAQ,gBAAgB;AAC1D,SAAS,YAAY,aAAa;AAClC,SAAS,UAA0B;;;ACE5B,SAAS,WAAW,YAAqC,YAA+B;AAC7F,QAAM,QAAQ,IAAI,IAAI,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;AAChE,QAAM,SAAS,IAAI,IAAI,UAAU;AACjC,SAAO;AAAA,IACL,MAAM,WAAW,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,KAAK,GAAG,CAAC;AAAA,IACvD,OAAO,WAAW,IAAI,CAAC,QAAQ,MAAM,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC,SAA+B,SAAS,MAAS;AAAA,EAC1G;AACF;AAEO,SAAS,SAAS,MAA4B;AACnD,MAAI,KAAK,eAAe,OAAW,QAAO,KAAK;AAC/C,SAAO,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,WAAW,OAAO,KAAK,KAAK,IAAI;AACjG;AAEO,SAAS,YACd,OACA,OACA,WACA,cACgB;AAChB,QAAM,IAAI,MAAM,KAAK;AACrB,MAAI,CAAC,EAAG,QAAO,CAAC,GAAG,KAAK;AACxB,MAAI,aAAc,QAAO,MAAM,OAAO,CAAC,SAAS,aAAa,GAAG,MAAM,SAAS,CAAC;AAChF,QAAM,SAAS,cAAc,CAAC;AAC9B,SAAO,MAAM,OAAO,CAAC,SAAS,cAAc,SAAS,IAAI,CAAC,EAAE,SAAS,MAAM,CAAC;AAC9E;AAMO,SAAS,SACd,YACA,YACA,UACA,WAC2C;AAC3C,QAAM,WAAW,IAAI,IAAI,WAAW,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AAC/E,QAAM,SAAS,IAAI,IAAI,UAAU;AACjC,QAAM,SAAS,IAAI,IAAI,QAAQ;AAC/B,MAAI,cAAc,SAAS;AACzB,UAAMC,SAAQ,WAAW,OAAO,CAAC,MAAM,OAAO,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG;AACxH,WAAO,EAAE,YAAY,CAAC,GAAG,YAAY,GAAGA,MAAK,GAAG,OAAAA,OAAM;AAAA,EACxD;AACA,QAAM,QAAQ,WAAW,OAAO,CAAC,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;AACxE,QAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,SAAO,EAAE,YAAY,WAAW,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,MAAM;AACzE;AAGO,SAAS,eAAe,SAAkC,UAA6E;AAC5I,QAAM,UAAU,QAAQ,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ;AACjD,QAAM,QAAQ,QAAQ,OAAO,CAAC,MAAM,SAAS,IAAI,EAAE,GAAG,CAAC,EAAE;AACzD,SAAO,EAAE,SAAS,QAAQ,SAAS,KAAK,UAAU,QAAQ,QAAQ,eAAe,QAAQ,KAAK,QAAQ,QAAQ,OAAO;AACvH;AAGO,SAAS,UAAU,SAAkC,UAA6B,QAA2B;AAClH,QAAM,OAAO,QAAQ,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG;AAChE,MAAI,CAAC,QAAQ;AACX,UAAM,OAAO,IAAI,IAAI,IAAI;AACzB,WAAO,SAAS,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;AAAA,EAC5C;AACA,QAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,OAAK,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;AAC/B,SAAO,CAAC,GAAG,IAAI;AACjB;AAMO,SAAS,YACd,SACA,UACA,QACA,KACA,SACU;AACV,QAAM,KAAK,QAAQ,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG;AACjD,QAAM,OAAO,WAAW,OAAO,KAAK,QAAQ,UAAU,CAAC,MAAM,EAAE,QAAQ,MAAM;AAC7E,QAAM,OAAO,SAAS,KAAK,CAAC,QAAQ,EAAE,CAAE,IAAI,QAAQ,MAAM,KAAK,IAAI,MAAM,EAAE,GAAG,KAAK,IAAI,MAAM,EAAE,IAAI,CAAC;AACpG,QAAM,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG;AAC7D,QAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,OAAK,QAAQ,CAAC,MAAO,UAAU,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAE;AAC5D,SAAO,CAAC,GAAG,IAAI;AACjB;AAGO,SAAS,WAAW,UAAkB,OAAuB;AAClE,SAAO,WAAW,IAAI,GAAG,QAAQ,IAAI,KAAK,iBAAS,GAAG,KAAK;AAC7D;;;AD1DqB,wBAWb,YAXa;AAHrB,IAAM,aAAa,CAAC,OAAwB,aAAsB,OAAO,UAAU,WAAW,QAAQ;AAEtG,SAAS,WAAW,EAAE,MAAM,OAAO,GAAsE;AACvG,MAAI,OAAQ,QAAO,gCAAG,iBAAO,IAAI,GAAE;AACnC,SAAO,oBAAC,UAAK,WAAU,kBAAkB,eAAK,OAAM;AACtD;AAGA,SAAS,aAAa,EAAE,MAAM,GAAgC;AAC5D,QAAM,SAAS,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AACtD,SACE,gCACG,gBAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,CAAC,GAAG;AAAA;AAAA,IAEjC,qBAAC,QAAW,WAAU,qCACpB;AAAA,0BAAC,UAAM,GAAG,iBAAiB,4BAA4B,GAAG;AAAA,MAC1D,oBAAC,UAAM,GAAG,iBAAiB,GAAG,oBAAoB,OAAO,IAAI,OAAO,MAAM,CAAC,CAAC,GAAG;AAAA,SAFxE,CAGT;AAAA,GACD,GACH;AAEJ;AAOO,SAAS,aAAa,OAAoC;AAC/D,QAAM,EAAE,WAAW,OAAO,OAAO,UAAU,UAAU,UAAU,YAAY,mBAAmB,cAAc,UAAU,QAAQ,eAAe,QAAQ,iBAAiB,YAAY,UAAU,OAAO,SAAS,IAAI;AAChN,QAAM,UAAU,MAAM;AACtB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,UAAU,YAAY,OAAO,OAAO,WAAW,YAAY;AACjE,QAAM,cAAc,IAAI,IAAI,QAAQ;AACpC,QAAM,MAAM,eAAe,SAAS,WAAW;AAC/C,QAAM,SAAS,OAAsB,IAAI;AACzC,QAAM,QAAQ,OAAO,KAAK;AAC1B,QAAM,UAAU,OAAyB,IAAI;AAC7C,QAAM,OAAO,WAAW,OAAO,cAAc,SAAS,WAAW,OAAO;AACxE,QAAM,YAAY,aAAa;AAG/B,QAAM,CAAC,cAAc,eAAe,IAAI,SAAwB,IAAI;AACpE,YAAU,MAAM;AACd,QAAI,iBAAiB,KAAM;AAC3B,UAAM,UAAU,QAAQ,SAAS,iBAAoC,QAAQ;AAC7E,UAAM,SAAS,UAAU,KAAK,IAAI,cAAc,QAAQ,SAAS,CAAC,CAAC;AACnE,KAAC,UAAU,QAAQ,UAAU,MAAM;AACnC,oBAAgB,IAAI;AAAA,EACtB,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,aAAa,CAAC,KAAa,YAAqB;AACpD,QAAI,MAAM,QAAS,UAAS,YAAY,SAAS,UAAU,OAAO,SAAS,KAAK,OAAO,CAAC;AAAA,QACnF,UAAS,UAAU,CAAC,GAAG,UAAU,GAAG,IAAI,SAAS,OAAO,CAAC,MAAM,MAAM,GAAG,CAAC;AAC9E,WAAO,UAAU;AAAA,EACnB;AAEA,QAAM,QAAQ,MAAM,KAAK,IAAI,6BAAqB;AAElD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,mBAAiB;AAAA,MACjB,WAAW;AAAA,QACT;AAAA,QACA,QAAQ,uBAAuB,KAAK,IAAI;AAAA;AAAA,QAExC,YAAY;AAAA,MACd;AAAA,MAEA;AAAA,6BAAC,SAAI,WAAU,mFACZ;AAAA,WAAC,YAAY,iBAAiB,CAAC,aAC9B;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,IAAI;AAAA,cACb,eAAe,IAAI;AAAA,cACnB,UAAU,YAAY,QAAQ,MAAM,CAAC,MAAM,EAAE,QAAQ;AAAA,cACrD,OAAO,oBAAC,UAAK,WAAU,WAAW,aAAG,IAAI,2DAAgC;AAAA,cACzE,UAAU,CAAC,MAAM,SAAS,UAAU,SAAS,UAAU,EAAE,OAAO,OAAO,CAAC;AAAA;AAAA,UAC1E;AAAA,UAED,CAAC,YAAY,oBAAC,UAAK,WAAU,gCAAgC,qBAAW,YAAY,IAAI,SAAS,QAAQ,MAAM,MAAM,GAAE;AAAA,UACvH,CAAC,YAAY,aAAa,MAAM,SAAS,KACxC;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL;AAAA,cACA,SAAS,MAAM;AACb,yBAAS,QAAQ,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AAC7D,wBAAQ,SAAS,MAAM;AAAA,cACzB;AAAA,cACA,WAAU;AAAA,cACX;AAAA;AAAA,UAED;AAAA,UAEF,oBAAC,UAAK,IAAI,SAAS,WAAW,GAAG,qDAAqD,YAAY,WAAW,GAC1G,iBACH;AAAA,UACC;AAAA,UAEC,qBAAC,UAAK,eAAW,MAAC,WAAU,wDAC1B;AAAA,gCAAC,UAAM,GAAG,iBAAiB,mBAAmB,GAAG;AAAA,YACjD,oBAAC,UAAM,GAAG,iBAAiB,uBAAuB,GAAG;AAAA,YACrD,oBAAC,UAAM,GAAG,iBAAiB,+BAA+B,GAAG;AAAA,aAC/D;AAAA,WAEJ;AAAA,QAEC,cACC,oBAAC,SAAI,WAAU,4CACb;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,MAAK;AAAA,YACL,cAAY,GAAG,IAAI;AAAA,YACnB,aAAa;AAAA,YACb,MAAM,oBAAC,cAAW,eAAW,MAAC,MAAM,IAAI;AAAA,YACxC,YAAU;AAAA,YACV;AAAA,YACA,OAAO;AAAA,YACP,UAAU,CAAC,MAAM;AACf,uBAAS,EAAE,OAAO,KAAK;AACvB,yBAAW,WAAW,EAAE,OAAO,KAAK;AAAA,YACtC;AAAA,YACA,SAAS,MAAM;AACb,uBAAS,EAAE;AACX,yBAAW,WAAW,EAAE;AAAA,YAC1B;AAAA;AAAA,QACF,GACF;AAAA,QAGF;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YAIL,UAAU,WAAW,IAAI;AAAA,YACzB,mBAAiB;AAAA,YACjB,WAAU;AAAA,YACV,OAAO,EAAE,QAAQ,WAAW;AAAA,YAE3B;AAAA,0BAAY,oBAAC,gBAAa,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC,GAAG;AAAA,cAC5D,CAAC,YAAY,QAAQ,WAAW,KAAK,oBAAC,QAAG,WAAU,4EAA4E,iBAAM;AAAA,cACrI,CAAC,YAAY,QAAQ,IAAI,CAAC,MAAM,UAAU;AACzC,sBAAM,aAAa,YAAY,IAAI,KAAK,GAAG;AAC3C,oBAAI,WAAW;AACb,yBACE,qBAAC,QAAkB,WAAU,uFAC3B;AAAA,yCAAC,SAAI,WAAU,kBACb;AAAA,0CAAC,cAAW,MAAY,QAAgB;AAAA,sBACvC,KAAK,eAAe,CAAC,UAAU,oBAAC,UAAK,WAAU,0CAA0C,eAAK,aAAY;AAAA,uBAC7G;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACC,MAAK;AAAA,wBACL,cAAY,GAAG,SAAS,IAAI,KAAK,eAAO;AAAA,wBACxC,UAAU,YAAY,KAAK;AAAA,wBAC3B,SAAS,MAAM;AACb,mCAAS,CAAC,KAAK,GAAG,CAAC;AACnB,0CAAgB,KAAK;AAAA,wBACvB;AAAA,wBACA,WAAU;AAAA,wBAEV,8BAAC,SAAM,eAAW,MAAC,MAAM,IAAI;AAAA;AAAA,oBAC/B;AAAA,uBAhBO,KAAK,GAiBd;AAAA,gBAEJ;AACA;AAAA;AAAA,kBAEE;AAAA,oBAAC;AAAA;AAAA,sBAEC,gBAAgB,CAAC,MAAO,MAAM,UAAU,EAAE;AAAA,sBAC1C,kBAAkB,CAAC,MAAO,MAAM,UAAU,EAAE;AAAA,sBAC5C,WAAW,GAAG,QAAQ,cAAc,wBAAwB;AAAA,sBAE5D;AAAA,wBAAC;AAAA;AAAA,0BACC,SAAS;AAAA,0BACT,UAAU,YAAY,KAAK;AAAA,0BAC3B,OAAO,oBAAC,cAAW,MAAY,QAAgB;AAAA,0BAC/C,aAAa,SAAS,SAAY,KAAK;AAAA,0BACvC,UAAU,CAAC,MAAM,WAAW,KAAK,KAAK,EAAE,OAAO,OAAO;AAAA,0BACtD,YAAY;AAAA,4BACV,SAAS,GAAG,uDAAuD,CAAC,cAAc,CAAC,KAAK,YAAY,CAAC,YAAY,2BAA2B;AAAA,4BAC5I,OAAO;AAAA,0BACT;AAAA;AAAA,sBACF;AAAA;AAAA,oBAfK,KAAK;AAAA,kBAgBZ;AAAA;AAAA,cAEJ,CAAC;AAAA;AAAA;AAAA,QACH;AAAA,QAEC,UACC,oBAAC,SAAI,WAAU,4CACb,8BAAC,gBAAa,IAAI,UAAU,aAAa,oBAAC,UAAM,GAAG,iBAAiB,sCAAsC,GAAG,GAC1G,iBAAO,EAAE,UAAU,CAAC,GACvB,GACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;ADnMY,gBAAAC,MAgGN,QAAAC,aAhGM;AA3BZ,IAAM,QAAkB,CAAC;AAczB,SAAS,WAAW,EAAE,WAAW,SAAS,OAAO,MAAM,QAAQ,SAAS,GAA4C;AAClH,QAAM,OAAO,cAAc,UAAU,mBAAmB;AACxD,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS,UAAU,UAAU;AAAA,MAC7B,OAAO,UAAU,YAAY;AAAA,MAC7B,cAAY;AAAA,MACZ,iBAAe,CAAC;AAAA,MAChB;AAAA,MACA,SAAS,MAAM,WAAW,OAAO;AAAA,MAGjC,MAAM,gBAAAA,KAAC,QAAK,eAAW,MAAC,MAAM,IAAI,WAAU,oBAAmB;AAAA,MAC/D,WAAWE,IAAG,CAAC,WAAW,+BAA+B;AAAA,MAExD;AAAA;AAAA,EACH;AAEJ;AAcO,SAAS,SAAS,OAAgC;AACvD,QAAM,QAAQ,cAAc,EAAE,cAAc,MAAM,YAAY,GAAG,mBAAmB,MAAM,iBAAiB,GAAG,oBAAoB,MAAM,kBAAkB,GAAG,UAAU,MAAM,SAAS,CAAC;AACvL,QAAM;AAAA,IACJ;AAAA,IACA,SAAS,CAAC,UAAU,OAAO;AAAA,IAC3B;AAAA,IACA,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB;AAAA,IACA,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,IAAI;AACJ,QAAM,WAAW,CAAC,CAAC,MAAM;AACzB,QAAM,WAAW,iBAAiB,WAAW;AAC7C,QAAM,CAAC,YAAY,aAAa,IAAI,qBAA+B,EAAE,OAAO,MAAM,YAAY,cAAc,MAAM,qBAAqB,MAAM,CAAC;AAC9I,QAAM,CAAC,cAAc,eAAe,IAAI,qBAA+B,EAAE,OAAO,MAAM,cAAc,cAAc,MAAM,uBAAuB,MAAM,CAAC;AACtJ,QAAM,CAAC,cAAc,eAAe,IAAIC,UAAS,EAAE;AAEnD,QAAM,EAAE,MAAM,MAAM,IAAI,WAAW,YAAY,UAAU;AACzD,QAAM,WAAW,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AAC/C,QAAM,eAAe,aAAa,OAAO,CAAC,MAAM,SAAS,IAAI,CAAC,CAAC;AAC/D,QAAM,gBAAgB,aAAa,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;AACjE,QAAM,eAAe,IAAI,IAAI,WAAW,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AACnF,QAAM,UAAU,CAAC,SAAmB,KAAK,KAAK,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;AACzE,QAAM,kBAAkB,CAAC,UAAU,OAAO;AAC1C,QAAM,YAAY,CAAC,MAAa;AAC9B,UAAM,IAAI,OAAO,CAAC;AAClB,WAAO,OAAO,MAAM,WAAW,IAAI,gBAAgB,CAAC;AAAA,EACtD;AAEA,QAAM,iBAAiB,CAAC,UAAoB,cAAwB;AAClE,oBAAgB,CAAC,GAAG,UAAU,GAAG,SAAS,CAAC;AAC3C,UAAM,iBAAiB,UAAU,SAAS;AAAA,EAC5C;AAEA,QAAM,OAAO,CAAC,WAA8B,SAAmB;AAC7D,UAAM,SAAS,SAAS,YAAY,YAAY,MAAM,SAAS;AAC/D,QAAI,OAAO,MAAM,WAAW,EAAG;AAC/B,kBAAc,OAAO,UAAU;AAC/B,UAAM,WAAW,OAAO,YAAY,WAAW,OAAO,KAAK;AAC3D,UAAM,QAAQ,IAAI,IAAI,OAAO,KAAK;AAClC;AAAA,MACE,aAAa,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AAAA,MACxC,cAAc,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AAAA,IAC3C;AACA,UAAM,KAAK,cAAc,UAAU,UAAU,CAAC,IAAI,UAAU,CAAC;AAC7D,oBAAgB,GAAG,OAAO,MAAM,MAAM,gBAAQ,EAAE,oCAAqB;AAAA,EACvE;AAEA,QAAM,YAAY,EAAE,YAAY,mBAAmB,cAAc,UAAU,QAAQ,eAAe,QAAQ,iBAAiB,YAAY,UAAU,OAAO,SAAS;AAEjK,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,eAAa,YAAY;AAAA,MACzB,cAAY,MAAM,YAAY;AAAA,MAC9B,mBAAiB,MAAM,iBAAiB;AAAA,MACxC,oBAAkB,MAAM,kBAAkB;AAAA,MAC1C,WAAWC,IAAG,wEAAwE,SAAS;AAAA,MAE/F;AAAA,wBAAAF;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACJ,WAAU;AAAA,YACV,OAAO,OAAO,CAAC;AAAA,YACf,OAAO;AAAA,YACP,UAAU;AAAA,YACV,UAAU,CAAC,SAAS,eAAe,MAAM,aAAa;AAAA;AAAA,QACxD;AAAA,QACA,gBAAAC,MAAC,SAAI,WAAU,kDACb;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS,CAAC,YAAY,QAAQ,YAAY;AAAA,cAC1C,OAAO,kBAAe,UAAU,CAAC,CAAC;AAAA,cAClC,MAAM,aAAa,CAAC;AAAA,cACpB,QAAQ,MAAM,KAAK,SAAS,YAAY;AAAA,cACxC;AAAA;AAAA,UACF;AAAA,UACC,CAAC,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS,CAAC,YAAY,QAAQ,aAAa;AAAA,cAC3C,OAAO,kBAAe,UAAU,CAAC,CAAC;AAAA,cAClC,MAAM,aAAa,CAAC;AAAA,cACpB,QAAQ,MAAM,KAAK,QAAQ,aAAa;AAAA,cACxC;AAAA;AAAA,UACF;AAAA,WAEJ;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACJ,WAAU;AAAA,YACV,OAAO,OAAO,CAAC;AAAA,YACf,OAAO;AAAA,YACP,UAAU,SAAS,QAAQ;AAAA,YAC3B,UAAU,CAAC,SAAS,eAAe,cAAc,IAAI;AAAA,YACrD,UAAU,SAAS,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI;AAAA;AAAA,QACpD;AAAA,QACA,gBAAAA,KAAC,UAAK,MAAK,UAAS,WAAU,WAC3B,wBACH;AAAA;AAAA;AAAA,EACF;AAEJ;","names":["useState","cn","moved","jsx","jsxs","cn","useState"]}
|
package/dist/tree-select.js
CHANGED
|
@@ -16,12 +16,12 @@ import {
|
|
|
16
16
|
nodeText,
|
|
17
17
|
searchTree,
|
|
18
18
|
toggleCheck
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
19
|
+
} from "./chunk-7WB4CDWX.js";
|
|
20
|
+
import "./chunk-TSFAAREV.js";
|
|
21
|
+
import "./chunk-6CSUVVFG.js";
|
|
22
22
|
import {
|
|
23
23
|
Tag
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-GVJ4M63W.js";
|
|
25
25
|
import {
|
|
26
26
|
ClearButton
|
|
27
27
|
} from "./chunk-KSPM2Z3T.js";
|
|
@@ -31,25 +31,25 @@ import {
|
|
|
31
31
|
FIELD_MOBILE_TEXT_CLASS,
|
|
32
32
|
getShapeClasses,
|
|
33
33
|
getVariantClasses
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-NENNFQEY.js";
|
|
35
35
|
import {
|
|
36
36
|
useFieldControl
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-NPFMPRII.js";
|
|
38
38
|
import {
|
|
39
39
|
useFloatingPosition
|
|
40
|
-
} from "./chunk-
|
|
41
|
-
import "./chunk-
|
|
40
|
+
} from "./chunk-GTNCXOUL.js";
|
|
41
|
+
import "./chunk-NYXU5EFE.js";
|
|
42
42
|
import {
|
|
43
43
|
elevationClass
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-MT4VH7QV.js";
|
|
45
45
|
import {
|
|
46
46
|
sizeClass,
|
|
47
47
|
touchTargetClass
|
|
48
|
-
} from "./chunk-
|
|
49
|
-
import "./chunk-
|
|
48
|
+
} from "./chunk-POBOJBNJ.js";
|
|
49
|
+
import "./chunk-6AMBZXZJ.js";
|
|
50
50
|
import {
|
|
51
51
|
skeletonBoxProps
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-VKN374SD.js";
|
|
53
53
|
|
|
54
54
|
// src/tree-select/TreeSelect.tsx
|
|
55
55
|
import React2, { useId, useRef as useRef2 } from "react";
|
package/dist/tree-select.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tree-select/TreeSelect.tsx","../src/tree-select/_components/TreeSelectPanel.tsx","../src/tree-select/utils.ts","../src/tree-select/useTreeSelectState.ts"],"sourcesContent":["\"use client\";\n\nimport React, { useId, useRef } from \"react\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport { cn } from \"@mari-ui/core\";\nimport { ClearButton } from \"../input/_components/FieldAdornments\";\nimport { FIELD_BASE_CLASS, FIELD_DISABLED_CLASS, FIELD_MOBILE_TEXT_CLASS, getShapeClasses, getVariantClasses } from \"../input/utils\";\nimport { useFieldControl } from \"../lib/fieldContext\";\nimport { skeletonBoxProps } from \"../lib/skeleton\";\nimport { sizeClass, touchTargetClass } from \"../lib/sizeClasses\";\nimport { useFloatingPosition } from \"../lib/useFloatingPosition\";\nimport { Tag } from \"../tag\";\nimport { getKeyAction, nodeText } from \"../tree/utils\";\nimport { nodeDomId, TreeSelectPanel } from \"./_components/TreeSelectPanel\";\nimport type { TreeSelectMultipleProps, TreeSelectProps } from \"./types\";\nimport { useTreeSelectState, type TreeSelectState } from \"./useTreeSelectState\";\nimport { isPickable } from \"./utils\";\n\nexport type { TreeSelectProps };\n\nconst GAP_PX = 4;\nconst MULTI_HEIGHT_CLASS = { sm: \"h-auto min-h-6 py-0.5\", md: \"h-auto min-h-8 py-1\", lg: \"h-auto min-h-10 py-1.5\" } as const;\n\n/** Enter (ve aramasızken Boşluk): kapalıysa açar; açıksa aktif düğümü seçer/işaretler, seçilemiyorsa açar/kapatır. */\nfunction confirm(state: TreeSelectState) {\n if (!state.open) return state.openAt();\n const entry = state.visible.find((v) => v.node.key === state.activeKey);\n if (!entry) return;\n if (isPickable(entry.node, state.checkable)) state.pick(entry.node);\n else if (state.canExpand(entry.node)) state.toggleExpand(entry.node.key);\n}\n\n/** Ağaç gezinmesi (APG tree tuşları), odak combobox'ta kalarak. `true` → tuş işlendi. */\nfunction navigate(e: React.KeyboardEvent, state: TreeSelectState, searchable: boolean): boolean {\n const key = e.key;\n const caretKeys = key === \"Home\" || key === \"End\" || key.length === 1;\n // Arama kutusunda harfler/Home/End metne aittir.\n if (searchable && caretKeys) return false;\n if (state.activeKey === null) return false;\n const action = getKeyAction(state.visible, state.activeKey, key, (k) => state.expanded.has(k), state.canExpand);\n if (!action) return key.startsWith(\"Arrow\");\n if (action.type === \"focus\") state.setActiveKey(action.key);\n else if (action.type === \"expand\") state.toggleExpand(action.key, true);\n else if (action.type === \"collapse\") state.toggleExpand(action.key, false);\n else state.expandMany(action.keys);\n return true;\n}\n\nfunction handleKey(e: React.KeyboardEvent, state: TreeSelectState, searchable: boolean) {\n const { key } = e;\n if (key === \"Escape\") {\n if (state.open) {\n e.preventDefault();\n state.setOpen(false);\n }\n return;\n }\n if (key === \"Tab\") return state.setOpen(false);\n if (key === \"Enter\" || (key === \" \" && !searchable)) {\n e.preventDefault();\n return confirm(state);\n }\n if (key === \"Backspace\") {\n if (searchable && state.multiple && !state.search && state.values.length > 0) state.remove(state.selectedNodes.at(-1)!.key);\n return;\n }\n if (!state.open) {\n if (key === \"ArrowDown\" || key === \"ArrowUp\") {\n e.preventDefault();\n state.openAt();\n }\n return;\n }\n if (navigate(e, state, searchable)) e.preventDefault();\n}\n\nfunction Tags({ state, maxTagCount, disabled }: Readonly<{ state: TreeSelectState; maxTagCount?: number; disabled: boolean }>) {\n const nodes = state.selectedNodes;\n const shown = maxTagCount === undefined ? nodes : nodes.slice(0, maxTagCount);\n const hidden = nodes.length - shown.length;\n return (\n <>\n {shown.map((node) => {\n const text = nodeText(node);\n return (\n <Tag\n key={node.key}\n onClose={disabled || node.disabled ? undefined : () => state.remove(node.key)}\n closeLabel={text ? `${text} seçimini kaldır` : \"Seçimi kaldır\"}\n className=\"max-w-full\"\n >\n {node.title}\n </Tag>\n );\n })}\n {hidden > 0 && <Tag>+{hidden}</Tag>}\n </>\n );\n}\n\ninterface TriggerControlProps {\n controlRef: React.RefObject<HTMLButtonElement & HTMLInputElement | null>;\n comboboxProps: Record<string, unknown>;\n state: TreeSelectState;\n searchable: boolean;\n placeholder: string;\n}\n\n/** Aramalıda `<input role=\"combobox\">` (seçili değer yazana dek üstünde), aramasızda `<button role=\"combobox\">`. */\nfunction TriggerControl({ controlRef, comboboxProps, state, searchable, placeholder }: Readonly<TriggerControlProps>) {\n const single = state.multiple ? undefined : state.selectedNodes[0];\n const hasValue = state.values.length > 0;\n if (!searchable) {\n return (\n <button ref={controlRef} type=\"button\" {...comboboxProps} className={cn(\"min-w-0 flex-1 truncate text-left focus:outline-none\", FIELD_MOBILE_TEXT_CLASS)}>\n {single ? single.title : !hasValue && <span className=\"truncate text-mari-muted\">{placeholder}</span>}\n </button>\n );\n }\n return (\n <span className=\"relative flex min-w-[4ch] flex-1 items-center\">\n {!state.search && single && (\n <span aria-hidden className=\"pointer-events-none absolute inset-x-0 truncate\">\n {single.title}\n </span>\n )}\n <input\n ref={controlRef}\n {...comboboxProps}\n type=\"text\"\n aria-autocomplete=\"list\"\n autoComplete=\"off\"\n placeholder={hasValue ? undefined : placeholder}\n value={state.search}\n onChange={(e) => {\n state.setSearch(e.target.value);\n if (!state.open) state.setOpen(true);\n }}\n className={cn(\"w-full min-w-0 bg-transparent placeholder:text-mari-muted focus:outline-none disabled:cursor-not-allowed\", FIELD_MOBILE_TEXT_CLASS)}\n />\n </span>\n );\n}\n\n/**\n * Faz 16.4 — yapı ant.design TreeSelect'ten: Select'in tetikleyicisi (boyut,\n * varyant, etiketler, arama, temizle — birebir aynı görünüm) + açılır panelde\n * ağaç. Saf mantık Tree ile ortak (`tree/utils`: indeks, görünür düğümler,\n * işaret yayılımı, Türkçe arama, APG tuşları). Modlar: tekli, `multiple`,\n * `checkable` (onay kutuları + `showCheckedStrategy`).\n *\n * Erişilebilirlik (APG combobox + tree popup): tetikleyici `role=\"combobox\"`\n * `aria-haspopup=\"tree\"`; odak HİÇ panele geçmez, aktif düğüm\n * `aria-activedescendant`. ↑/↓ gezinir, → açar/ilk çocuğa iner, ← kapatır/\n * ebeveyne çıkar, Enter seçer (açılamayan düğümde dalı açar), Escape kapatır;\n * aramasızken Home/End, `*` ve harfle atlama.\n */\nexport function TreeSelect(outerProps: TreeSelectProps) {\n const props = useFieldControl(outerProps) as TreeSelectProps;\n const {\n placeholder = \"Seçin\",\n showSearch = false,\n allowClear = false,\n clearLabel = \"Temizle\",\n notFoundContent = \"Sonuç bulunamadı\",\n disabled = false,\n size = \"md\",\n variant = \"outline\",\n shape = \"default\",\n color,\n placement = \"bottom-start\",\n listHeight = \"16rem\",\n treeLine = false,\n titleRender,\n id,\n name,\n required,\n className,\n skeleton = false,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n } = props;\n const maxTagCount = props.mode ? (props as TreeSelectMultipleProps).maxTagCount : undefined;\n\n const state = useTreeSelectState(props);\n const { multiple, open, values } = state;\n const anchorRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const controlRef = useRef<HTMLButtonElement & HTMLInputElement>(null);\n const treeId = useId();\n const coords = useFloatingPosition(open, anchorRef, panelRef, { placement, gap: GAP_PX });\n\n React.useEffect(() => {\n if (open && state.activeKey !== null) document.getElementById(nodeDomId(treeId, state.activeKey))?.scrollIntoView?.({ block: \"nearest\" });\n }, [open, state.activeKey, treeId]);\n\n const geometry = cn(\"flex w-full items-center gap-2\", sizeClass[size], multiple && MULTI_HEIGHT_CLASS[size], getShapeClasses(shape, variant));\n if (skeleton) return <div {...skeletonBoxProps(cn(geometry, className))} />;\n\n const hasValue = values.length > 0;\n\n const comboboxProps = {\n id,\n role: \"combobox\" as const,\n \"aria-expanded\": open,\n \"aria-controls\": open ? treeId : undefined,\n \"aria-haspopup\": \"tree\" as const,\n \"aria-activedescendant\": open && state.activeKey !== null ? nodeDomId(treeId, state.activeKey) : undefined,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-required\": required || undefined,\n \"aria-invalid\": color === \"error\" || undefined,\n disabled,\n onKeyDown: (e: React.KeyboardEvent) => handleKey(e, state, showSearch),\n onBlur: (e: React.FocusEvent) => {\n if (!anchorRef.current?.contains(e.relatedTarget as Node | null)) state.setOpen(false);\n },\n };\n\n const handleBoxMouseDown = (e: React.MouseEvent) => {\n if (disabled || (e.target as HTMLElement).closest(\"button:not([role=combobox])\")) return;\n e.preventDefault();\n controlRef.current?.focus();\n if (open) state.setOpen(false);\n else state.openAt();\n };\n\n return (\n <>\n {/* Fare kısayolu; klavye kullanıcısı doğrudan combobox'a sekmeyle gelir. */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n ref={anchorRef}\n onMouseDown={handleBoxMouseDown}\n className={cn(geometry, \"group relative cursor-pointer\", touchTargetClass[size], FIELD_BASE_CLASS, getVariantClasses(variant, color), disabled && FIELD_DISABLED_CLASS, className)}\n >\n <div className={cn(\"flex min-w-0 flex-1 items-center gap-1\", multiple && \"flex-wrap\")}>\n {multiple && <Tags state={state} maxTagCount={maxTagCount} disabled={disabled} />}\n <TriggerControl controlRef={controlRef} comboboxProps={comboboxProps} state={state} searchable={showSearch} placeholder={placeholder} />\n </div>\n\n {allowClear && (\n <ClearButton\n visible={hasValue && !disabled}\n label={clearLabel}\n onClear={() => {\n state.clear();\n controlRef.current?.focus();\n }}\n />\n )}\n <span aria-hidden className=\"flex shrink-0 items-center text-mari-muted\">\n <ChevronDownIcon size={16} className={cn(\"transition-transform duration-150 motion-reduce:transition-none\", open && \"rotate-180\")} />\n </span>\n\n {name && (multiple ? values : values.slice(0, 1)).map((v) => <input key={v} type=\"hidden\" name={name} value={v} />)}\n </div>\n\n {open && (\n <TreeSelectPanel\n ref={panelRef}\n treeId={treeId}\n coords={coords}\n state={state}\n notFoundContent={notFoundContent}\n listHeight={listHeight}\n treeLine={treeLine}\n titleRender={titleRender}\n labelledBy={ariaLabelledBy}\n label={ariaLabel ?? placeholder}\n />\n )}\n </>\n );\n}\n","\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { CheckIcon } from \"lucide-react\";\nimport { cn } from \"@mari-ui/core\";\nimport { elevationClass } from \"../../lib/elevationClass\";\nimport type { FloatingCoords } from \"../../lib/useFloatingPosition\";\nimport { CheckboxBox, Indent, Switcher, Title, type CheckState } from \"../../tree/Tree\";\nimport type { VisibleNode } from \"../../tree/utils\";\nimport type { TreeSelectProps } from \"../types\";\nimport type { TreeSelectState } from \"../useTreeSelectState\";\nimport { isPickable } from \"../utils\";\n\ninterface TreeSelectPanelProps {\n treeId: string;\n coords: FloatingCoords | null;\n state: TreeSelectState;\n notFoundContent: React.ReactNode;\n listHeight: string;\n treeLine: boolean;\n titleRender?: Exclude<TreeSelectProps[\"titleRender\"], undefined>;\n labelledBy?: string;\n label?: string;\n}\n\n/** `aria-activedescendant` için DOM id'si (anahtar her karakteri içerebilir). */\nexport const nodeDomId = (treeId: string, key: string) => `${treeId}-${encodeURIComponent(key).replace(/[^\\w-]/g, \"_\")}`;\n\nfunction checkStateOf(state: TreeSelectState, key: string): CheckState {\n if (state.isSelected(key)) return \"checked\";\n return state.isHalf(key) ? \"mixed\" : \"unchecked\";\n}\n\nfunction Row({ entry, state, treeId, treeLine, titleRender }: Readonly<{ entry: VisibleNode; state: TreeSelectState; treeId: string; treeLine: boolean; titleRender?: Exclude<TreeSelectProps[\"titleRender\"], undefined> }>) {\n const { node, level } = entry;\n const key = node.key;\n const expandable = state.canExpand(node);\n const open = expandable && state.expanded.has(key);\n const selected = state.isSelected(key);\n const active = state.activeKey === key;\n const pickable = isPickable(node, state.checkable);\n const checkState = state.checkable && node.checkable !== false ? checkStateOf(state, key) : null;\n const searchValue = state.searchResult ? state.search : undefined;\n const loading = state.isLoading(key);\n const dim = node.disabled || (!pickable && !expandable);\n\n let checked: boolean | \"mixed\" | undefined;\n if (checkState) checked = checkState === \"mixed\" ? \"mixed\" : checkState === \"checked\";\n\n return (\n // Odak tetikleyicide (combobox) kalır; satır `aria-activedescendant` ile gösterilir (APG). Klavye combobox'ta.\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div\n id={nodeDomId(treeId, key)}\n role=\"treeitem\"\n tabIndex={-1}\n aria-level={level}\n aria-posinset={entry.posinset}\n aria-setsize={entry.setsize}\n aria-expanded={expandable ? open : undefined}\n aria-selected={state.checkable ? undefined : selected}\n aria-checked={checked}\n aria-disabled={node.disabled || undefined}\n aria-busy={loading || undefined}\n onMouseMove={() => !active && state.setActiveKey(key)}\n onClick={() => {\n if (pickable) state.pick(node);\n else if (expandable) state.toggleExpand(key);\n }}\n className={cn(\n \"flex min-h-8 cursor-pointer items-center rounded-md pr-2 text-mari-foreground pointer-coarse:min-h-11\",\n active && \"bg-mari-surface-alt\",\n selected && !state.multiple && \"bg-mari-primary-subtle font-medium\",\n dim && \"cursor-not-allowed text-mari-muted\"\n )}\n >\n <Indent level={level} showLine={treeLine} />\n <Switcher open={open} expandable={expandable} loading={loading} skeleton={false} onToggle={() => state.toggleExpand(key)} />\n {checkState && <CheckboxBox state={checkState} disabled={!pickable} onClick={() => undefined} />}\n {node.icon && (\n <span aria-hidden className=\"mr-1.5 flex shrink-0 items-center text-mari-muted [&_svg]:size-4\">\n {node.icon}\n </span>\n )}\n <span className=\"min-w-0 flex-1 truncate leading-6\">\n <Title node={node} searchValue={searchValue} titleRender={titleRender} />\n </span>\n {state.mode === \"multiple\" && <CheckIcon size={16} aria-hidden className={cn(\"ml-2 shrink-0 text-mari-primary\", !selected && \"invisible\")} />}\n </div>\n );\n}\n\n/**\n * Faz 16.4 — TreeSelect paneli: `document.body`'ye portal, konum\n * `useFloatingPosition` (Select ile ortak), genişlik en az tetikleyicininki.\n * Satır görünümü Tree'nin parçalarıyla (girinti, açma oku, onay kutusu, arama\n * vurgusu). Panelde `mousedown` engellenir — tıklamak combobox'un odağını\n * (dolayısıyla açık paneli) kaybettirmesin.\n */\nexport const TreeSelectPanel = forwardRef<HTMLDivElement, TreeSelectPanelProps>(function TreeSelectPanel(\n { treeId, coords, state, notFoundContent, listHeight, treeLine, titleRender, labelledBy, label },\n ref\n) {\n if (typeof document === \"undefined\") return null;\n return createPortal(\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions -- yalnız odak kaybını önler, etkileşim değil\n <div\n ref={ref}\n onMouseDown={(e) => e.preventDefault()}\n className={cn(\"fixed z-mari-dropdown max-w-[calc(100vw-1rem)] rounded-lg bg-mari-surface p-1 text-sm\", elevationClass.md, !coords && \"invisible\")}\n style={{ top: coords?.top ?? 0, left: coords?.left ?? 0, minWidth: coords?.anchorWidth }}\n >\n <div\n id={treeId}\n role=\"tree\"\n aria-multiselectable={state.multiple || undefined}\n aria-labelledby={labelledBy}\n aria-label={labelledBy ? undefined : label}\n className=\"overflow-y-auto overscroll-contain\"\n style={{ maxHeight: listHeight }}\n >\n {state.visible.map((entry) => (\n <Row key={entry.node.key} entry={entry} state={state} treeId={treeId} treeLine={treeLine} titleRender={titleRender} />\n ))}\n </div>\n {state.visible.length === 0 && (\n <div role=\"status\" className=\"px-2.5 py-2 text-mari-muted\">\n {notFoundContent}\n </div>\n )}\n </div>,\n document.body\n );\n});\n","import type { TreeNode } from \"../tree/types\";\nimport { conductCheck, getAncestorKeys, getParentKeys, isCheckEligible, toggleCheck, type TreeIndex } from \"../tree/utils\";\nimport type { TreeSelectCheckedStrategy } from \"./types\";\n\n/**\n * Faz 16.4 — TreeSelect'in saf mantığı. İndeks, görünür düğümler, işaret\n * yayılımı ve arama Tree'den (`tree/utils`); burada yalnız TreeSelect'e özgü\n * olanlar: değer ↔ işaret dönüşümü (gösterim stratejisi), ilk açık dallar.\n */\n\n/** Değerdeki anahtarlar → tam işaret durumu (bir üst işaretliyse altları da). */\nexport function valueToChecked(value: readonly string[], index: TreeIndex, strict: boolean): { checked: string[]; halfChecked: string[] } {\n if (strict) return { checked: value.filter((k) => index.has(k)), halfChecked: [] };\n return conductCheck(value, index);\n}\n\n/**\n * Tam işaret durumu → değere yazılacak anahtarlar (`showCheckedStrategy`).\n * `parent`: işaretli ama ebeveyni işaretli olmayan düğümler (tam dal = tek anahtar).\n * `child`: işaretli yapraklar (çocuğu olmayanlar).\n */\nexport function applyStrategy(checked: readonly string[], index: TreeIndex, strategy: TreeSelectCheckedStrategy): string[] {\n if (strategy === \"all\") return [...checked];\n const set = new Set(checked);\n if (strategy === \"parent\") {\n return checked.filter((k) => {\n const parent = index.get(k)?.parentKey ?? null;\n return parent === null || !set.has(parent);\n });\n }\n return checked.filter((k) => (index.get(k)?.childKeys.length ?? 0) === 0);\n}\n\n/** `checkable` modda bir düğümü işaretle/kaldır; yeni değer (stratejiye göre) döner. */\nexport function toggleCheckedValue(\n value: readonly string[],\n key: string,\n index: TreeIndex,\n strategy: TreeSelectCheckedStrategy,\n strict: boolean\n): string[] {\n const { checked } = valueToChecked(value, index, strict);\n const isOn = checked.includes(key);\n const next = toggleCheck(checked, key, !isOn, index, strict).checked;\n return strict ? next : applyStrategy(next, index, strategy);\n}\n\n/** Etiketten bir değeri kaldır (`checkable`da altlarıyla birlikte işareti kalkar). */\nexport function removeValue(value: readonly string[], key: string, index: TreeIndex, strategy: TreeSelectCheckedStrategy, strict: boolean, checkable: boolean): string[] {\n if (!checkable || strict) return value.filter((k) => k !== key);\n const { checked } = valueToChecked(value, index, strict);\n return applyStrategy(toggleCheck(checked, key, false, index, strict).checked, index, strategy);\n}\n\n/** Panel ilk açılışta: hepsi açık ya da seçili düğümlerin ataları (seçim görünsün). */\nexport function initialExpanded(index: TreeIndex, value: readonly string[], expandAll: boolean): string[] {\n if (expandAll) return getParentKeys(index);\n const out = new Set<string>();\n for (const key of value) getAncestorKeys(index, key).forEach((a) => out.add(a));\n return [...out];\n}\n\n/** Bir düğüm seçilebilir/işaretlenebilir mi (tetikleyicide etkileşim için). */\nexport function isPickable(node: TreeNode, checkable: boolean): boolean {\n if (node.disabled) return false;\n return checkable ? isCheckEligible(node) : node.selectable !== false;\n}\n\n","\"use client\";\n\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useControllableState } from \"@mari-ui/core\";\nimport type { TreeNode } from \"../tree/types\";\nimport { buildIndex, flattenVisible, isExpandable, searchTree } from \"../tree/utils\";\nimport type { TreeSelectMultipleProps, TreeSelectProps, TreeSelectSingleProps } from \"./types\";\nimport { applyStrategy, initialExpanded, isPickable, removeValue, toggleCheckedValue, valueToChecked } from \"./utils\";\n\nconst toArray = (v: string | string[] | null | undefined): string[] | undefined => {\n if (v === undefined) return undefined;\n if (v === null) return [];\n return Array.isArray(v) ? v : [v];\n};\n\n/**\n * TreeSelect'in durumu: değer(ler), açık/kapalı, arama, açık dallar, aktif\n * (klavyeyle üzerinde durulan) düğüm ve bunları değiştiren eylemler. Tekli,\n * çoklu ve işaretli mod içeride aynı dizi.\n */\nexport function useTreeSelectState(props: TreeSelectProps) {\n const mode = props.mode;\n const multiple = mode === \"multiple\" || mode === \"checkable\";\n const checkable = mode === \"checkable\";\n const multi = props as TreeSelectMultipleProps;\n const strategy = (checkable && multi.showCheckedStrategy) || \"child\";\n const strict = checkable && !!multi.treeCheckStrictly;\n\n const index = useMemo(() => buildIndex(props.treeData), [props.treeData]);\n const [values, setValuesState] = useControllableState<string[]>({ value: toArray(props.value), defaultValue: toArray(props.defaultValue) ?? [] });\n const [open, setOpenState] = useControllableState<boolean>({ value: props.open, defaultValue: false, onChange: props.onOpenChange });\n const [initialExpand] = useState(() => initialExpanded(index, values, !!props.treeDefaultExpandAll));\n const [expandedList, setExpandedList] = useControllableState<string[]>({\n value: props.treeExpandedKeys,\n defaultValue: initialExpand,\n onChange: props.onTreeExpand,\n });\n const expandedRef = useRef(expandedList);\n expandedRef.current = expandedList;\n const [loadingKeys, setLoadingKeys] = useState<ReadonlySet<string>>(new Set());\n const lazy = Boolean(props.loadData);\n const [search, setSearchState] = useState(\"\");\n const [activeKey, setActiveKey] = useState<string | null>(null);\n\n const checkInfo = useMemo(() => (checkable ? valueToChecked(values, index, strict) : { checked: values, halfChecked: [] }), [checkable, values, index, strict]);\n const checkedSet = useMemo(() => new Set(checkInfo.checked), [checkInfo]);\n const halfSet = useMemo(() => new Set(checkInfo.halfChecked), [checkInfo]);\n const valueSet = useMemo(() => new Set(values), [values]);\n\n const searchResult = useMemo(() => (props.showSearch && search ? searchTree(index, search) : null), [props.showSearch, search, index]);\n const expanded = useMemo(() => {\n const set = new Set(expandedList);\n searchResult?.expand.forEach((k) => set.add(k));\n return set;\n }, [expandedList, searchResult]);\n const visible = useMemo(() => flattenVisible(props.treeData, expanded, searchResult?.visible), [props.treeData, expanded, searchResult]);\n\n // Liste değişince aktif düğüm görünmez olduysa ilk görünür düğüme geç; aramada ilk eşleşmeye.\n useEffect(() => {\n if (!open) return;\n if (searchResult) {\n const first = visible.find((v) => searchResult.matches.has(v.node.key));\n setActiveKey(first?.node.key ?? null);\n } else if (activeKey === null || !visible.some((v) => v.node.key === activeKey)) {\n setActiveKey(visible[0]?.node.key ?? null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- görünür liste ya da arama değişince\n }, [open, visible, searchResult]);\n\n const nodesOf = (keys: string[]) => keys.map((k) => index.get(k)?.node).filter((n): n is TreeNode => !!n);\n\n const commit = (next: string[]) => {\n setValuesState(next);\n if (multiple) (props.onChange as TreeSelectMultipleProps[\"onChange\"])?.(next, nodesOf(next));\n else (props.onChange as TreeSelectSingleProps[\"onChange\"])?.(next[0] ?? null, nodesOf(next.slice(0, 1))[0] ?? null);\n };\n\n const setOpen = (next: boolean) => {\n if (next === open) return;\n setOpenState(next);\n if (!next) setSearch(\"\");\n };\n\n const setSearch = (text: string) => {\n setSearchState(text);\n props.onSearch?.(text);\n };\n\n /** Açılış: aktif düğüm seçili olan (görünürse) ya da ilk düğüm. */\n const openAt = () => {\n setOpen(true);\n const selected = values.find((k) => visible.some((v) => v.node.key === k));\n setActiveKey(selected ?? visible[0]?.node.key ?? null);\n };\n\n const pick = (node: TreeNode) => {\n if (!isPickable(node, checkable)) return;\n setActiveKey(node.key);\n if (checkable) commit(toggleCheckedValue(values, node.key, index, strategy, strict));\n else if (multiple) commit(valueSet.has(node.key) ? values.filter((k) => k !== node.key) : [...values, node.key]);\n else {\n commit([node.key]);\n setOpen(false);\n }\n if (multiple && search) setSearch(\"\");\n };\n\n /** Tembel dal: ilk açılışta `loadData`; hata olursa dal geri kapanır. */\n const load = (node: TreeNode) => {\n if (!props.loadData || node.children !== undefined || node.isLeaf || loadingKeys.has(node.key)) return;\n setLoadingKeys((prev) => new Set(prev).add(node.key));\n props\n .loadData(node)\n .catch(() => setExpandedList(expandedRef.current.filter((k) => k !== node.key)))\n .finally(() =>\n setLoadingKeys((prev) => {\n const next = new Set(prev);\n next.delete(node.key);\n return next;\n })\n );\n };\n\n const toggleExpand = (key: string, next?: boolean) => {\n const isOpen = expanded.has(key);\n const want = next ?? !isOpen;\n if (want === isOpen) return;\n setExpandedList(want ? [...expandedList, key] : expandedList.filter((k) => k !== key));\n const node = index.get(key)?.node;\n if (want && node) load(node);\n };\n\n return {\n index,\n mode,\n multiple,\n checkable,\n strategy,\n open,\n setOpen,\n openAt,\n search,\n setSearch,\n values,\n /** Etiketler/tetikleyici için değerdeki düğümler (stratejiye göre). */\n selectedNodes: nodesOf(checkable && !strict ? applyStrategy(checkInfo.checked, index, strategy) : values),\n visible,\n searchResult,\n expanded,\n toggleExpand,\n expandMany: (keys: string[]) => {\n setExpandedList([...new Set([...expandedList, ...keys])]);\n keys.forEach((k) => {\n const node = index.get(k)?.node;\n if (node) load(node);\n });\n },\n activeKey,\n setActiveKey,\n canExpand: (node: TreeNode) => isExpandable(node, lazy),\n isLoading: (key: string) => loadingKeys.has(key),\n isSelected: (key: string) => (checkable ? checkedSet.has(key) : valueSet.has(key)),\n isHalf: (key: string) => halfSet.has(key),\n pick,\n remove: (key: string) => commit(removeValue(values, key, index, strategy, strict, checkable)),\n clear: () => commit([]),\n };\n}\n\nexport type TreeSelectState = ReturnType<typeof useTreeSelectState>;\n"],"mappings":"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","names":["React","useRef","cn","TreeSelectPanel","jsx","jsxs","cn","useRef","React"]}
|
|
1
|
+
{"version":3,"sources":["../src/tree-select/TreeSelect.tsx","../src/tree-select/_components/TreeSelectPanel.tsx","../src/tree-select/utils.ts","../src/tree-select/useTreeSelectState.ts"],"sourcesContent":["\"use client\";\n\nimport React, { useId, useRef } from \"react\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport { cn } from \"@mari-ui/core\";\nimport { ClearButton } from \"../input/_components/FieldAdornments\";\nimport { FIELD_BASE_CLASS, FIELD_DISABLED_CLASS, FIELD_MOBILE_TEXT_CLASS, getShapeClasses, getVariantClasses } from \"../input/utils\";\nimport { useFieldControl } from \"../lib/fieldContext\";\nimport { skeletonBoxProps } from \"../lib/skeleton\";\nimport { sizeClass, touchTargetClass } from \"../lib/sizeClasses\";\nimport { useFloatingPosition } from \"../lib/useFloatingPosition\";\nimport { Tag } from \"../tag\";\nimport { getKeyAction, nodeText } from \"../tree/utils\";\nimport { nodeDomId, TreeSelectPanel } from \"./_components/TreeSelectPanel\";\nimport type { TreeSelectMultipleProps, TreeSelectProps } from \"./types\";\nimport { useTreeSelectState, type TreeSelectState } from \"./useTreeSelectState\";\nimport { isPickable } from \"./utils\";\n\nexport type { TreeSelectProps };\n\nconst GAP_PX = 4;\nconst MULTI_HEIGHT_CLASS = { sm: \"h-auto min-h-6 py-0.5\", md: \"h-auto min-h-8 py-1\", lg: \"h-auto min-h-10 py-1.5\" } as const;\n\n/** Enter (ve aramasızken Boşluk): kapalıysa açar; açıksa aktif düğümü seçer/işaretler, seçilemiyorsa açar/kapatır. */\nfunction confirm(state: TreeSelectState) {\n if (!state.open) return state.openAt();\n const entry = state.visible.find((v) => v.node.key === state.activeKey);\n if (!entry) return;\n if (isPickable(entry.node, state.checkable)) state.pick(entry.node);\n else if (state.canExpand(entry.node)) state.toggleExpand(entry.node.key);\n}\n\n/** Ağaç gezinmesi (APG tree tuşları), odak combobox'ta kalarak. `true` → tuş işlendi. */\nfunction navigate(e: React.KeyboardEvent, state: TreeSelectState, searchable: boolean): boolean {\n const key = e.key;\n const caretKeys = key === \"Home\" || key === \"End\" || key.length === 1;\n // Arama kutusunda harfler/Home/End metne aittir.\n if (searchable && caretKeys) return false;\n if (state.activeKey === null) return false;\n const action = getKeyAction(state.visible, state.activeKey, key, (k) => state.expanded.has(k), state.canExpand);\n if (!action) return key.startsWith(\"Arrow\");\n if (action.type === \"focus\") state.setActiveKey(action.key);\n else if (action.type === \"expand\") state.toggleExpand(action.key, true);\n else if (action.type === \"collapse\") state.toggleExpand(action.key, false);\n else state.expandMany(action.keys);\n return true;\n}\n\nfunction handleKey(e: React.KeyboardEvent, state: TreeSelectState, searchable: boolean) {\n const { key } = e;\n if (key === \"Escape\") {\n if (state.open) {\n e.preventDefault();\n state.setOpen(false);\n }\n return;\n }\n if (key === \"Tab\") return state.setOpen(false);\n if (key === \"Enter\" || (key === \" \" && !searchable)) {\n e.preventDefault();\n return confirm(state);\n }\n if (key === \"Backspace\") {\n if (searchable && state.multiple && !state.search && state.values.length > 0) state.remove(state.selectedNodes.at(-1)!.key);\n return;\n }\n if (!state.open) {\n if (key === \"ArrowDown\" || key === \"ArrowUp\") {\n e.preventDefault();\n state.openAt();\n }\n return;\n }\n if (navigate(e, state, searchable)) e.preventDefault();\n}\n\nfunction Tags({ state, maxTagCount, disabled }: Readonly<{ state: TreeSelectState; maxTagCount?: number; disabled: boolean }>) {\n const nodes = state.selectedNodes;\n const shown = maxTagCount === undefined ? nodes : nodes.slice(0, maxTagCount);\n const hidden = nodes.length - shown.length;\n return (\n <>\n {shown.map((node) => {\n const text = nodeText(node);\n return (\n <Tag\n key={node.key}\n onClose={disabled || node.disabled ? undefined : () => state.remove(node.key)}\n closeLabel={text ? `${text} seçimini kaldır` : \"Seçimi kaldır\"}\n className=\"max-w-full\"\n >\n {node.title}\n </Tag>\n );\n })}\n {hidden > 0 && <Tag>+{hidden}</Tag>}\n </>\n );\n}\n\ninterface TriggerControlProps {\n controlRef: React.RefObject<HTMLButtonElement & HTMLInputElement | null>;\n comboboxProps: Record<string, unknown>;\n state: TreeSelectState;\n searchable: boolean;\n placeholder: string;\n}\n\n/** Aramalıda `<input role=\"combobox\">` (seçili değer yazana dek üstünde), aramasızda `<button role=\"combobox\">`. */\nfunction TriggerControl({ controlRef, comboboxProps, state, searchable, placeholder }: Readonly<TriggerControlProps>) {\n const single = state.multiple ? undefined : state.selectedNodes[0];\n const hasValue = state.values.length > 0;\n if (!searchable) {\n return (\n <button ref={controlRef} type=\"button\" {...comboboxProps} className={cn(\"min-w-0 flex-1 truncate text-left focus:outline-none\", FIELD_MOBILE_TEXT_CLASS)}>\n {single ? single.title : !hasValue && <span className=\"truncate text-mari-muted\">{placeholder}</span>}\n </button>\n );\n }\n return (\n <span className=\"relative flex min-w-[4ch] flex-1 items-center\">\n {!state.search && single && (\n <span aria-hidden className=\"pointer-events-none absolute inset-x-0 truncate\">\n {single.title}\n </span>\n )}\n <input\n ref={controlRef}\n {...comboboxProps}\n type=\"text\"\n aria-autocomplete=\"list\"\n autoComplete=\"off\"\n placeholder={hasValue ? undefined : placeholder}\n value={state.search}\n onChange={(e) => {\n state.setSearch(e.target.value);\n if (!state.open) state.setOpen(true);\n }}\n className={cn(\"w-full min-w-0 bg-transparent placeholder:text-mari-muted focus:outline-none disabled:cursor-not-allowed\", FIELD_MOBILE_TEXT_CLASS)}\n />\n </span>\n );\n}\n\n/*\n * yapı ant.design TreeSelect'ten: Select'in tetikleyicisi (boyut,\n * varyant, etiketler, arama, temizle — birebir aynı görünüm) + açılır panelde\n * ağaç. Saf mantık Tree ile ortak (`tree/utils`: indeks, görünür düğümler,\n * işaret yayılımı, Türkçe arama, APG tuşları). Modlar: tekli, `multiple`,\n * `checkable` (onay kutuları + `showCheckedStrategy`).\n */\n/**\n * Erişilebilirlik (APG combobox + tree popup): tetikleyici `role=\"combobox\"`\n * `aria-haspopup=\"tree\"`; odak HİÇ panele geçmez, aktif düğüm\n * `aria-activedescendant`. ↑/↓ gezinir, → açar/ilk çocuğa iner, ← kapatır/\n * ebeveyne çıkar, Enter seçer (açılamayan düğümde dalı açar), Escape kapatır;\n * aramasızken Home/End, `*` ve harfle atlama.\n */\nexport function TreeSelect(outerProps: TreeSelectProps) {\n const props = useFieldControl(outerProps) as TreeSelectProps;\n const {\n placeholder = \"Seçin\",\n showSearch = false,\n allowClear = false,\n clearLabel = \"Temizle\",\n notFoundContent = \"Sonuç bulunamadı\",\n disabled = false,\n size = \"md\",\n variant = \"outline\",\n shape = \"default\",\n color,\n placement = \"bottom-start\",\n listHeight = \"16rem\",\n treeLine = false,\n titleRender,\n id,\n name,\n required,\n className,\n skeleton = false,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n } = props;\n const maxTagCount = props.mode ? (props as TreeSelectMultipleProps).maxTagCount : undefined;\n\n const state = useTreeSelectState(props);\n const { multiple, open, values } = state;\n const anchorRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const controlRef = useRef<HTMLButtonElement & HTMLInputElement>(null);\n const treeId = useId();\n const coords = useFloatingPosition(open, anchorRef, panelRef, { placement, gap: GAP_PX });\n\n React.useEffect(() => {\n if (open && state.activeKey !== null) document.getElementById(nodeDomId(treeId, state.activeKey))?.scrollIntoView?.({ block: \"nearest\" });\n }, [open, state.activeKey, treeId]);\n\n const geometry = cn(\"flex w-full items-center gap-2\", sizeClass[size], multiple && MULTI_HEIGHT_CLASS[size], getShapeClasses(shape, variant));\n if (skeleton) return <div {...skeletonBoxProps(cn(geometry, className))} />;\n\n const hasValue = values.length > 0;\n\n const comboboxProps = {\n id,\n role: \"combobox\" as const,\n \"aria-expanded\": open,\n \"aria-controls\": open ? treeId : undefined,\n \"aria-haspopup\": \"tree\" as const,\n \"aria-activedescendant\": open && state.activeKey !== null ? nodeDomId(treeId, state.activeKey) : undefined,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-required\": required || undefined,\n \"aria-invalid\": color === \"error\" || undefined,\n disabled,\n onKeyDown: (e: React.KeyboardEvent) => handleKey(e, state, showSearch),\n onBlur: (e: React.FocusEvent) => {\n if (!anchorRef.current?.contains(e.relatedTarget as Node | null)) state.setOpen(false);\n },\n };\n\n const handleBoxMouseDown = (e: React.MouseEvent) => {\n if (disabled || (e.target as HTMLElement).closest(\"button:not([role=combobox])\")) return;\n e.preventDefault();\n controlRef.current?.focus();\n if (open) state.setOpen(false);\n else state.openAt();\n };\n\n return (\n <>\n {/* Fare kısayolu; klavye kullanıcısı doğrudan combobox'a sekmeyle gelir. */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n ref={anchorRef}\n onMouseDown={handleBoxMouseDown}\n className={cn(geometry, \"group relative cursor-pointer\", touchTargetClass[size], FIELD_BASE_CLASS, getVariantClasses(variant, color), disabled && FIELD_DISABLED_CLASS, className)}\n >\n <div className={cn(\"flex min-w-0 flex-1 items-center gap-1\", multiple && \"flex-wrap\")}>\n {multiple && <Tags state={state} maxTagCount={maxTagCount} disabled={disabled} />}\n <TriggerControl controlRef={controlRef} comboboxProps={comboboxProps} state={state} searchable={showSearch} placeholder={placeholder} />\n </div>\n\n {allowClear && (\n <ClearButton\n visible={hasValue && !disabled}\n label={clearLabel}\n onClear={() => {\n state.clear();\n controlRef.current?.focus();\n }}\n />\n )}\n <span aria-hidden className=\"flex shrink-0 items-center text-mari-muted\">\n <ChevronDownIcon size={16} className={cn(\"transition-transform duration-150 motion-reduce:transition-none\", open && \"rotate-180\")} />\n </span>\n\n {name && (multiple ? values : values.slice(0, 1)).map((v) => <input key={v} type=\"hidden\" name={name} value={v} />)}\n </div>\n\n {open && (\n <TreeSelectPanel\n ref={panelRef}\n treeId={treeId}\n coords={coords}\n state={state}\n notFoundContent={notFoundContent}\n listHeight={listHeight}\n treeLine={treeLine}\n titleRender={titleRender}\n labelledBy={ariaLabelledBy}\n label={ariaLabel ?? placeholder}\n />\n )}\n </>\n );\n}\n","\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { CheckIcon } from \"lucide-react\";\nimport { cn } from \"@mari-ui/core\";\nimport { elevationClass } from \"../../lib/elevationClass\";\nimport type { FloatingCoords } from \"../../lib/useFloatingPosition\";\nimport { CheckboxBox, Indent, Switcher, Title, type CheckState } from \"../../tree/Tree\";\nimport type { VisibleNode } from \"../../tree/utils\";\nimport type { TreeSelectProps } from \"../types\";\nimport type { TreeSelectState } from \"../useTreeSelectState\";\nimport { isPickable } from \"../utils\";\n\ninterface TreeSelectPanelProps {\n treeId: string;\n coords: FloatingCoords | null;\n state: TreeSelectState;\n notFoundContent: React.ReactNode;\n listHeight: string;\n treeLine: boolean;\n titleRender?: Exclude<TreeSelectProps[\"titleRender\"], undefined>;\n labelledBy?: string;\n label?: string;\n}\n\n/** `aria-activedescendant` için DOM id'si (anahtar her karakteri içerebilir). */\nexport const nodeDomId = (treeId: string, key: string) => `${treeId}-${encodeURIComponent(key).replace(/[^\\w-]/g, \"_\")}`;\n\nfunction checkStateOf(state: TreeSelectState, key: string): CheckState {\n if (state.isSelected(key)) return \"checked\";\n return state.isHalf(key) ? \"mixed\" : \"unchecked\";\n}\n\nfunction Row({ entry, state, treeId, treeLine, titleRender }: Readonly<{ entry: VisibleNode; state: TreeSelectState; treeId: string; treeLine: boolean; titleRender?: Exclude<TreeSelectProps[\"titleRender\"], undefined> }>) {\n const { node, level } = entry;\n const key = node.key;\n const expandable = state.canExpand(node);\n const open = expandable && state.expanded.has(key);\n const selected = state.isSelected(key);\n const active = state.activeKey === key;\n const pickable = isPickable(node, state.checkable);\n const checkState = state.checkable && node.checkable !== false ? checkStateOf(state, key) : null;\n const searchValue = state.searchResult ? state.search : undefined;\n const loading = state.isLoading(key);\n const dim = node.disabled || (!pickable && !expandable);\n\n let checked: boolean | \"mixed\" | undefined;\n if (checkState) checked = checkState === \"mixed\" ? \"mixed\" : checkState === \"checked\";\n\n return (\n // Odak tetikleyicide (combobox) kalır; satır `aria-activedescendant` ile gösterilir (APG). Klavye combobox'ta.\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div\n id={nodeDomId(treeId, key)}\n role=\"treeitem\"\n tabIndex={-1}\n aria-level={level}\n aria-posinset={entry.posinset}\n aria-setsize={entry.setsize}\n aria-expanded={expandable ? open : undefined}\n aria-selected={state.checkable ? undefined : selected}\n aria-checked={checked}\n aria-disabled={node.disabled || undefined}\n aria-busy={loading || undefined}\n onMouseMove={() => !active && state.setActiveKey(key)}\n onClick={() => {\n if (pickable) state.pick(node);\n else if (expandable) state.toggleExpand(key);\n }}\n className={cn(\n \"flex min-h-8 cursor-pointer items-center rounded-md pr-2 text-mari-foreground pointer-coarse:min-h-11\",\n active && \"bg-mari-surface-alt\",\n selected && !state.multiple && \"bg-mari-primary-subtle font-medium\",\n dim && \"cursor-not-allowed text-mari-muted\"\n )}\n >\n <Indent level={level} showLine={treeLine} />\n <Switcher open={open} expandable={expandable} loading={loading} skeleton={false} onToggle={() => state.toggleExpand(key)} />\n {checkState && <CheckboxBox state={checkState} disabled={!pickable} onClick={() => undefined} />}\n {node.icon && (\n <span aria-hidden className=\"mr-1.5 flex shrink-0 items-center text-mari-muted [&_svg]:size-4\">\n {node.icon}\n </span>\n )}\n <span className=\"min-w-0 flex-1 truncate leading-6\">\n <Title node={node} searchValue={searchValue} titleRender={titleRender} />\n </span>\n {state.mode === \"multiple\" && <CheckIcon size={16} aria-hidden className={cn(\"ml-2 shrink-0 text-mari-primary\", !selected && \"invisible\")} />}\n </div>\n );\n}\n\n/**\n * TreeSelect paneli: `document.body`'ye portal, konum\n * `useFloatingPosition` (Select ile ortak), genişlik en az tetikleyicininki.\n * Satır görünümü Tree'nin parçalarıyla (girinti, açma oku, onay kutusu, arama\n * vurgusu). Panelde `mousedown` engellenir — tıklamak combobox'un odağını\n * (dolayısıyla açık paneli) kaybettirmesin.\n */\nexport const TreeSelectPanel = forwardRef<HTMLDivElement, TreeSelectPanelProps>(function TreeSelectPanel(\n { treeId, coords, state, notFoundContent, listHeight, treeLine, titleRender, labelledBy, label },\n ref\n) {\n if (typeof document === \"undefined\") return null;\n return createPortal(\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions -- yalnız odak kaybını önler, etkileşim değil\n <div\n ref={ref}\n onMouseDown={(e) => e.preventDefault()}\n className={cn(\"fixed z-mari-dropdown max-w-[calc(100vw-1rem)] rounded-lg bg-mari-surface p-1 text-sm\", elevationClass.md, !coords && \"invisible\")}\n style={{ top: coords?.top ?? 0, left: coords?.left ?? 0, minWidth: coords?.anchorWidth }}\n >\n <div\n id={treeId}\n role=\"tree\"\n aria-multiselectable={state.multiple || undefined}\n aria-labelledby={labelledBy}\n aria-label={labelledBy ? undefined : label}\n className=\"overflow-y-auto overscroll-contain\"\n style={{ maxHeight: listHeight }}\n >\n {state.visible.map((entry) => (\n <Row key={entry.node.key} entry={entry} state={state} treeId={treeId} treeLine={treeLine} titleRender={titleRender} />\n ))}\n </div>\n {state.visible.length === 0 && (\n <div role=\"status\" className=\"px-2.5 py-2 text-mari-muted\">\n {notFoundContent}\n </div>\n )}\n </div>,\n document.body\n );\n});\n","import type { TreeNode } from \"../tree/types\";\nimport { conductCheck, getAncestorKeys, getParentKeys, isCheckEligible, toggleCheck, type TreeIndex } from \"../tree/utils\";\nimport type { TreeSelectCheckedStrategy } from \"./types\";\n\n/**\n * TreeSelect'in saf mantığı. İndeks, görünür düğümler, işaret\n * yayılımı ve arama Tree'den (`tree/utils`); burada yalnız TreeSelect'e özgü\n * olanlar: değer ↔ işaret dönüşümü (gösterim stratejisi), ilk açık dallar.\n */\n\n/** Değerdeki anahtarlar → tam işaret durumu (bir üst işaretliyse altları da). */\nexport function valueToChecked(value: readonly string[], index: TreeIndex, strict: boolean): { checked: string[]; halfChecked: string[] } {\n if (strict) return { checked: value.filter((k) => index.has(k)), halfChecked: [] };\n return conductCheck(value, index);\n}\n\n/**\n * Tam işaret durumu → değere yazılacak anahtarlar (`showCheckedStrategy`).\n * `parent`: işaretli ama ebeveyni işaretli olmayan düğümler (tam dal = tek anahtar).\n * `child`: işaretli yapraklar (çocuğu olmayanlar).\n */\nexport function applyStrategy(checked: readonly string[], index: TreeIndex, strategy: TreeSelectCheckedStrategy): string[] {\n if (strategy === \"all\") return [...checked];\n const set = new Set(checked);\n if (strategy === \"parent\") {\n return checked.filter((k) => {\n const parent = index.get(k)?.parentKey ?? null;\n return parent === null || !set.has(parent);\n });\n }\n return checked.filter((k) => (index.get(k)?.childKeys.length ?? 0) === 0);\n}\n\n/** `checkable` modda bir düğümü işaretle/kaldır; yeni değer (stratejiye göre) döner. */\nexport function toggleCheckedValue(\n value: readonly string[],\n key: string,\n index: TreeIndex,\n strategy: TreeSelectCheckedStrategy,\n strict: boolean\n): string[] {\n const { checked } = valueToChecked(value, index, strict);\n const isOn = checked.includes(key);\n const next = toggleCheck(checked, key, !isOn, index, strict).checked;\n return strict ? next : applyStrategy(next, index, strategy);\n}\n\n/** Etiketten bir değeri kaldır (`checkable`da altlarıyla birlikte işareti kalkar). */\nexport function removeValue(value: readonly string[], key: string, index: TreeIndex, strategy: TreeSelectCheckedStrategy, strict: boolean, checkable: boolean): string[] {\n if (!checkable || strict) return value.filter((k) => k !== key);\n const { checked } = valueToChecked(value, index, strict);\n return applyStrategy(toggleCheck(checked, key, false, index, strict).checked, index, strategy);\n}\n\n/** Panel ilk açılışta: hepsi açık ya da seçili düğümlerin ataları (seçim görünsün). */\nexport function initialExpanded(index: TreeIndex, value: readonly string[], expandAll: boolean): string[] {\n if (expandAll) return getParentKeys(index);\n const out = new Set<string>();\n for (const key of value) getAncestorKeys(index, key).forEach((a) => out.add(a));\n return [...out];\n}\n\n/** Bir düğüm seçilebilir/işaretlenebilir mi (tetikleyicide etkileşim için). */\nexport function isPickable(node: TreeNode, checkable: boolean): boolean {\n if (node.disabled) return false;\n return checkable ? isCheckEligible(node) : node.selectable !== false;\n}\n\n","\"use client\";\n\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useControllableState } from \"@mari-ui/core\";\nimport type { TreeNode } from \"../tree/types\";\nimport { buildIndex, flattenVisible, isExpandable, searchTree } from \"../tree/utils\";\nimport type { TreeSelectMultipleProps, TreeSelectProps, TreeSelectSingleProps } from \"./types\";\nimport { applyStrategy, initialExpanded, isPickable, removeValue, toggleCheckedValue, valueToChecked } from \"./utils\";\n\nconst toArray = (v: string | string[] | null | undefined): string[] | undefined => {\n if (v === undefined) return undefined;\n if (v === null) return [];\n return Array.isArray(v) ? v : [v];\n};\n\n/**\n * TreeSelect'in durumu: değer(ler), açık/kapalı, arama, açık dallar, aktif\n * (klavyeyle üzerinde durulan) düğüm ve bunları değiştiren eylemler. Tekli,\n * çoklu ve işaretli mod içeride aynı dizi.\n */\nexport function useTreeSelectState(props: TreeSelectProps) {\n const mode = props.mode;\n const multiple = mode === \"multiple\" || mode === \"checkable\";\n const checkable = mode === \"checkable\";\n const multi = props as TreeSelectMultipleProps;\n const strategy = (checkable && multi.showCheckedStrategy) || \"child\";\n const strict = checkable && !!multi.treeCheckStrictly;\n\n const index = useMemo(() => buildIndex(props.treeData), [props.treeData]);\n const [values, setValuesState] = useControllableState<string[]>({ value: toArray(props.value), defaultValue: toArray(props.defaultValue) ?? [] });\n const [open, setOpenState] = useControllableState<boolean>({ value: props.open, defaultValue: false, onChange: props.onOpenChange });\n const [initialExpand] = useState(() => initialExpanded(index, values, !!props.treeDefaultExpandAll));\n const [expandedList, setExpandedList] = useControllableState<string[]>({\n value: props.treeExpandedKeys,\n defaultValue: initialExpand,\n onChange: props.onTreeExpand,\n });\n const expandedRef = useRef(expandedList);\n expandedRef.current = expandedList;\n const [loadingKeys, setLoadingKeys] = useState<ReadonlySet<string>>(new Set());\n const lazy = Boolean(props.loadData);\n const [search, setSearchState] = useState(\"\");\n const [activeKey, setActiveKey] = useState<string | null>(null);\n\n const checkInfo = useMemo(() => (checkable ? valueToChecked(values, index, strict) : { checked: values, halfChecked: [] }), [checkable, values, index, strict]);\n const checkedSet = useMemo(() => new Set(checkInfo.checked), [checkInfo]);\n const halfSet = useMemo(() => new Set(checkInfo.halfChecked), [checkInfo]);\n const valueSet = useMemo(() => new Set(values), [values]);\n\n const searchResult = useMemo(() => (props.showSearch && search ? searchTree(index, search) : null), [props.showSearch, search, index]);\n const expanded = useMemo(() => {\n const set = new Set(expandedList);\n searchResult?.expand.forEach((k) => set.add(k));\n return set;\n }, [expandedList, searchResult]);\n const visible = useMemo(() => flattenVisible(props.treeData, expanded, searchResult?.visible), [props.treeData, expanded, searchResult]);\n\n // Liste değişince aktif düğüm görünmez olduysa ilk görünür düğüme geç; aramada ilk eşleşmeye.\n useEffect(() => {\n if (!open) return;\n if (searchResult) {\n const first = visible.find((v) => searchResult.matches.has(v.node.key));\n setActiveKey(first?.node.key ?? null);\n } else if (activeKey === null || !visible.some((v) => v.node.key === activeKey)) {\n setActiveKey(visible[0]?.node.key ?? null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- görünür liste ya da arama değişince\n }, [open, visible, searchResult]);\n\n const nodesOf = (keys: string[]) => keys.map((k) => index.get(k)?.node).filter((n): n is TreeNode => !!n);\n\n const commit = (next: string[]) => {\n setValuesState(next);\n if (multiple) (props.onChange as TreeSelectMultipleProps[\"onChange\"])?.(next, nodesOf(next));\n else (props.onChange as TreeSelectSingleProps[\"onChange\"])?.(next[0] ?? null, nodesOf(next.slice(0, 1))[0] ?? null);\n };\n\n const setOpen = (next: boolean) => {\n if (next === open) return;\n setOpenState(next);\n if (!next) setSearch(\"\");\n };\n\n const setSearch = (text: string) => {\n setSearchState(text);\n props.onSearch?.(text);\n };\n\n /** Açılış: aktif düğüm seçili olan (görünürse) ya da ilk düğüm. */\n const openAt = () => {\n setOpen(true);\n const selected = values.find((k) => visible.some((v) => v.node.key === k));\n setActiveKey(selected ?? visible[0]?.node.key ?? null);\n };\n\n const pick = (node: TreeNode) => {\n if (!isPickable(node, checkable)) return;\n setActiveKey(node.key);\n if (checkable) commit(toggleCheckedValue(values, node.key, index, strategy, strict));\n else if (multiple) commit(valueSet.has(node.key) ? values.filter((k) => k !== node.key) : [...values, node.key]);\n else {\n commit([node.key]);\n setOpen(false);\n }\n if (multiple && search) setSearch(\"\");\n };\n\n /** Tembel dal: ilk açılışta `loadData`; hata olursa dal geri kapanır. */\n const load = (node: TreeNode) => {\n if (!props.loadData || node.children !== undefined || node.isLeaf || loadingKeys.has(node.key)) return;\n setLoadingKeys((prev) => new Set(prev).add(node.key));\n props\n .loadData(node)\n .catch(() => setExpandedList(expandedRef.current.filter((k) => k !== node.key)))\n .finally(() =>\n setLoadingKeys((prev) => {\n const next = new Set(prev);\n next.delete(node.key);\n return next;\n })\n );\n };\n\n const toggleExpand = (key: string, next?: boolean) => {\n const isOpen = expanded.has(key);\n const want = next ?? !isOpen;\n if (want === isOpen) return;\n setExpandedList(want ? [...expandedList, key] : expandedList.filter((k) => k !== key));\n const node = index.get(key)?.node;\n if (want && node) load(node);\n };\n\n return {\n index,\n mode,\n multiple,\n checkable,\n strategy,\n open,\n setOpen,\n openAt,\n search,\n setSearch,\n values,\n /** Etiketler/tetikleyici için değerdeki düğümler (stratejiye göre). */\n selectedNodes: nodesOf(checkable && !strict ? applyStrategy(checkInfo.checked, index, strategy) : values),\n visible,\n searchResult,\n expanded,\n toggleExpand,\n expandMany: (keys: string[]) => {\n setExpandedList([...new Set([...expandedList, ...keys])]);\n keys.forEach((k) => {\n const node = index.get(k)?.node;\n if (node) load(node);\n });\n },\n activeKey,\n setActiveKey,\n canExpand: (node: TreeNode) => isExpandable(node, lazy),\n isLoading: (key: string) => loadingKeys.has(key),\n isSelected: (key: string) => (checkable ? checkedSet.has(key) : valueSet.has(key)),\n isHalf: (key: string) => halfSet.has(key),\n pick,\n remove: (key: string) => commit(removeValue(values, key, index, strategy, strict, checkable)),\n clear: () => commit([]),\n };\n}\n\nexport type TreeSelectState = ReturnType<typeof useTreeSelectState>;\n"],"mappings":"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","names":["React","useRef","cn","TreeSelectPanel","jsx","jsxs","cn","useRef","React"]}
|
package/dist/tree.js
CHANGED
|
@@ -6,11 +6,11 @@ import {
|
|
|
6
6
|
searchTree,
|
|
7
7
|
splitMatch,
|
|
8
8
|
toggleCheck
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-7WB4CDWX.js";
|
|
10
|
+
import "./chunk-TSFAAREV.js";
|
|
11
|
+
import "./chunk-6CSUVVFG.js";
|
|
12
|
+
import "./chunk-6AMBZXZJ.js";
|
|
13
|
+
import "./chunk-VKN374SD.js";
|
|
14
14
|
export {
|
|
15
15
|
Tree,
|
|
16
16
|
buildIndex,
|
|
@@ -2,9 +2,7 @@ import React from "react";
|
|
|
2
2
|
import type { AccordionItem, AccordionProps, AccordionVariant } from "./types";
|
|
3
3
|
export type { AccordionProps, AccordionItem, AccordionVariant };
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
* sonda, `extra`, tekli mod, dört görünüm, üç boyut, ilk açılışta mount +
|
|
7
|
-
* `destroyOnHidden`), görünüm kendi token'larımızdan. Aç/kapa yüksekliği
|
|
5
|
+
* Aç/kapa yüksekliği
|
|
8
6
|
* `grid-template-rows` 0fr↔1fr ile canlandırılır (sabit `max-height` yok).
|
|
9
7
|
*
|
|
10
8
|
* Erişilebilirlik (WAI-ARIA APG Accordion): her başlık `<hN><button
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/accordion/Accordion.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA6C,MAAM,OAAO,CAAC;AAMlE,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG/E,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/accordion/Accordion.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA6C,MAAM,OAAO,CAAC;AAMlE,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG/E,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;AAgLhE;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,MAAc,EACd,OAAoB,EACpB,IAAW,EACX,aAAuB,EACvB,UAAU,EACV,YAAgB,EAChB,eAAuB,EACvB,SAAS,EACT,QAAgB,GACjB,EAAE,QAAQ,CAAC,cAAc,CAAC,qBAiD1B"}
|
|
@@ -2,7 +2,6 @@ import React from "react";
|
|
|
2
2
|
import type { AlertProps } from "./types";
|
|
3
3
|
export type { AlertProps };
|
|
4
4
|
/**
|
|
5
|
-
* Faz 16.2 — yapı ant.design Alert'ten, görünüm kendi token'larımızdan
|
|
6
5
|
* (tonlu zemin + rol renginde ince kenarlık ve ikon; metin gövde renginde —
|
|
7
6
|
* renkli uzun metin okunmaz). Eylem sağda, dar ekranda metnin altına iner.
|
|
8
7
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../src/alert/Alert.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAMxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,YAAY,EAAE,UAAU,EAAE,CAAC;AAkC3B
|
|
1
|
+
{"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../src/alert/Alert.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAMxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,YAAY,EAAE,UAAU,EAAE,CAAC;AAkC3B;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,WAAW,EACX,KAAc,EACd,IAAW,EACX,MAAM,EACN,QAAgB,EAChB,OAAO,EACP,UAA4B,EAC5B,MAAc,EACd,IAAI,EACJ,SAAS,EACT,QAAgB,GACjB,EAAE,QAAQ,CAAC,UAAU,CAAC,4BAqDtB"}
|
|
@@ -2,10 +2,10 @@ import React from "react";
|
|
|
2
2
|
import type { AutoCompleteProps } from "./types";
|
|
3
3
|
export type { AutoCompleteProps };
|
|
4
4
|
/**
|
|
5
|
-
* ARIA "combobox" deseni
|
|
5
|
+
* ARIA "combobox" deseni: `role="combobox"`/`listbox`/`option` +
|
|
6
6
|
* Ok tuşları/Enter/Escape.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
8
|
+
* Temizleme bir `<svg onClick>` idi — buton değildi, klavyeyle
|
|
9
9
|
* erişilemiyordu ve alan boşken de görünüyordu → Input'un etiketli
|
|
10
10
|
* `allowClear`'ı. Liste yükseklik sınırı yoktu (100 seçenek sayfayı uzatırdı);
|
|
11
11
|
* klavyeyle gezinirken aktif seçenek görünür alana kaydırılır. Eşleşen kısım
|
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
import type { Option } from "./types";
|
|
2
|
-
/**
|
|
3
|
-
* Arama için katlama: Türkçe küçük harf + aksanları at + ı→i. Böylece
|
|
4
|
-
* "istanbul" → "İstanbul", "sehir" → "Şehir", "IĞDIR" → "Iğdır" bulunur.
|
|
5
|
-
* Eskiden düz `toLowerCase()` vardı: "İstanbul".toLowerCase() JS'te
|
|
6
|
-
* "i̇stanbul" (i + birleşik nokta) verir ve "istanbul" ile HİÇ eşleşmezdi.
|
|
7
|
-
* Karakter sayısını korur (NFC girişte her harf tek karaktere iner) — vurgu
|
|
8
|
-
* aralıkları özgün metne aynı indekslerle uygulanabilir.
|
|
9
|
-
*/
|
|
10
2
|
export declare function foldForSearch(text: string): string;
|
|
11
3
|
export declare function getFilteredOption(options: Option[], searchText: string): Option[];
|
|
12
4
|
/** Seçenek metnini [önce, eşleşen, sonra] olarak böler; eşleşme yoksa `null`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/autocomplete/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/autocomplete/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAUtC,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAIjF;AAED,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAQ7F"}
|
|
@@ -5,7 +5,7 @@ export declare function getInitialFontClass(size: AvatarSize): string;
|
|
|
5
5
|
/** Sadece geometri (şekil + radius) — iskelet ve "+N" avatarı da bunu kullanır. */
|
|
6
6
|
export declare function getShapeClasses(shape: AvatarShape, size: AvatarSize): string;
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* İlk + son kelimenin baş harfi ("Aykut Yılmaz" → "AY"); tek kelimede
|
|
9
9
|
* tek harf. Büyük harf Türkçe kurallarıyla ("ilker" → "İ", "I" değil).
|
|
10
10
|
*/
|
|
11
11
|
export declare function getInitials(alt: string): string;
|
|
@@ -2,9 +2,6 @@ import React from "react";
|
|
|
2
2
|
import type { BadgeProps, StatusBadgeProps } from "./types";
|
|
3
3
|
export type { BadgeProps, StatusBadgeProps };
|
|
4
4
|
/**
|
|
5
|
-
* Faz 16.2 — yapı ant.design Badge'den. Bir öğenin (bildirim zili, avatar)
|
|
6
|
-
* köşesinde sayı ya da nokta; `children` yoksa satır içinde tek başına.
|
|
7
|
-
*
|
|
8
5
|
* Erişilebilirlik: kabarcık görseldir (`aria-hidden`) — sarılan düğmenin
|
|
9
6
|
* yanında ayrı bir "3" okunması anlamsız olurdu. Sayı ya `label` ile gizli
|
|
10
7
|
* metin olarak verilir ya da (daha iyisi) düğmenin kendi adına katılır.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/badge/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE5D,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/badge/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE5D,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;AAkB7C;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,aAAkB,EAClB,QAAgB,EAChB,GAAW,EACX,KAAe,EACf,IAAW,EACX,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAgB,GACjB,EAAE,QAAQ,CAAC,UAAU,CAAC,qBAsCtB;AAID;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAiB,EAAE,QAAQ,EAAE,UAAkB,EAAE,SAAS,EAAE,QAAgB,EAAE,EAAE,QAAQ,CAAC,gBAAgB,CAAC,qBAYvI"}
|
|
@@ -2,18 +2,7 @@ import React from "react";
|
|
|
2
2
|
import type { BreadcrumbProps } from "./types";
|
|
3
3
|
export type { BreadcrumbProps };
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
* `aria-current="page"` YOKTU — ekran okuyucu kullanıcıları hiyerarşideki
|
|
7
|
-
* geçerli konumu bilemiyordu. Yapı da düz `<span>` sarmalayıcılardan
|
|
8
|
-
* ant.design'ın gerçek Breadcrumb'ıyla (DOM incelemesi, ant.design/
|
|
9
|
-
* components/breadcrumb) aynı semantik `<nav><ol><li>` listesine çevrildi;
|
|
10
|
-
* ayırıcı artık `aria-hidden` (ekran okuyucu her öğe arasında "/" okumasın
|
|
11
|
-
* diye). Ayrıca `onClick` VAR ama `href` YOK olan öğeler eskiden `<span
|
|
12
|
-
* role="none">` idi — tıklanabilirdi ama klavyeyle ASLA erişilemiyordu
|
|
13
|
-
* (AutoComplete/Rate/Switch/Tooltip'te bulunanlarla aynı sınıf gerçek bug);
|
|
14
|
-
* artık gerçek bir `<button>`.
|
|
15
|
-
*
|
|
16
|
-
* Faz 15.5: ikon, öğe başına açılır menü (`menu`, Dropdown ile), `maxItems`
|
|
5
|
+
* İkon, öğe başına açılır menü (`menu`, Dropdown ile), `maxItems`
|
|
17
6
|
* katlama ("…" düğmesi), satır kırılması (375px'te yatay taşma yok), dokunma
|
|
18
7
|
* hedefi, son öğe ön plan renginde ve `skeleton`.
|
|
19
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumb.d.ts","sourceRoot":"","sources":["../../../src/breadcrumb/Breadcrumb.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAOxC,OAAO,KAAK,EAAsB,eAAe,EAAE,MAAM,SAAS,CAAC;AAYnE,YAAY,EAAE,eAAe,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"Breadcrumb.d.ts","sourceRoot":"","sources":["../../../src/breadcrumb/Breadcrumb.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAOxC,OAAO,KAAK,EAAsB,eAAe,EAAE,MAAM,SAAS,CAAC;AAYnE,YAAY,EAAE,eAAe,EAAE,CAAC;AAahC;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAU,EACV,SAAe,EACf,SAAS,EACT,UAAU,EACV,MAAW,EACX,QAAQ,EACR,QAAgB,EAChB,YAAY,EAAE,SAA0B,GACzC,EAAE,QAAQ,CAAC,eAAe,CAAC,qBAoG3B"}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Faz 15.5 — yapı ant.design Breadcrumb'dan (ölçüldü): 14px / 22px satır,
|
|
3
|
-
* öğeler arası 8px ayırıcı boşluğu, bağlantılar soluk, son öğe (geçerli sayfa)
|
|
4
|
-
* ön plan renginde; bağlantı hover'da 4px yarıçaplı hafif bir zemin alır
|
|
5
|
-
* (`px-1 -mx-1`: zemin metnin iki yanına taşar, hizalama bozulmaz). Uzun
|
|
6
|
-
* yollar alt satıra kırılır (`flex-wrap`), yatay taşma olmaz.
|
|
7
|
-
*/
|
|
8
1
|
export declare function getNavClass(className?: string): string;
|
|
9
2
|
export declare const listClass = "flex flex-wrap items-center gap-y-1";
|
|
10
3
|
export declare const itemClass = "flex min-w-0 items-center";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/breadcrumb/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/breadcrumb/utils.ts"],"names":[],"mappings":"AAUA,wBAAgB,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,eAAO,MAAM,SAAS,wCAAwC,CAAC;AAE/D,eAAO,MAAM,SAAS,8BAA8B,CAAC;AAErD,eAAO,MAAM,cAAc,mDAAmD,CAAC;AAK/E,2GAA2G;AAC3G,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAUtF;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAKnH;AAED,gGAAgG;AAChG,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAMtE"}
|