@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/colorClasses.ts"],"sourcesContent":["import { cn, type ColorRole, type ColorVariantStyle } from \"@mari-ui/core\";\n\n/**\n * `@mari-ui/tokens`'ın ürettiği `--color-mari-*` CSS değişkenlerine karşılık\n * gelen Tailwind utility class'ları.\n *\n * ÖNEMLİ: Her class ismi burada HARFİ HARFİNE, literal string olarak\n * yazılıdır — `` `bg-mari-${role}-solid` `` gibi bir template literal\n * KULLANILMAZ. Sebebi: Tailwind'in derleme-zamanı tarayıcısı kaynak\n * dosyanın METNİNİ okur, kodu çalıştırmaz. `${role}` içeren bir satır\n * çalışma zamanında \"bg-mari-primary-solid\" olur ama tarayıcı bunu asla\n * göremez — kaynak metinde hâlâ kesik bir template literal olarak durur.\n * Bu repoda `Skeleton`/`Tag`/`Loading`'i sessizce bozan hata tam olarak\n * buydu; burada aynı hatayı tekrarlamamak için tabloyu\n * elle, tam string'lerle yazıyoruz.\n */\nexport const bgSolidClass: Record<ColorRole, string> = {\n primary: \"bg-mari-primary-solid\",\n accent: \"bg-mari-accent-solid\",\n success: \"bg-mari-success-solid\",\n error: \"bg-mari-error-solid\",\n warning: \"bg-mari-warning-solid\",\n info: \"bg-mari-info-solid\",\n neutral: \"bg-mari-neutral-solid\",\n};\n\nexport const bgSolidHoverClass: Record<ColorRole, string> = {\n primary: \"hover:bg-mari-primary-solid-hover\",\n accent: \"hover:bg-mari-accent-solid-hover\",\n success: \"hover:bg-mari-success-solid-hover\",\n error: \"hover:bg-mari-error-solid-hover\",\n warning: \"hover:bg-mari-warning-solid-hover\",\n info: \"hover:bg-mari-info-solid-hover\",\n neutral: \"hover:bg-mari-neutral-solid-hover\",\n};\n\n/** Dolgu üzerindeki ikon/anahtar topu, solidContrast ile aynı kontrastı korur. */\nexport const bgSolidContrastClass: Record<ColorRole, string> = {\n primary: \"bg-mari-primary-solid-contrast\",\n accent: \"bg-mari-accent-solid-contrast\",\n success: \"bg-mari-success-solid-contrast\",\n error: \"bg-mari-error-solid-contrast\",\n warning: \"bg-mari-warning-solid-contrast\",\n info: \"bg-mari-info-solid-contrast\",\n neutral: \"bg-mari-neutral-solid-contrast\",\n};\n\nexport const textSolidContrastClass: Record<ColorRole, string> = {\n primary: \"text-mari-primary-solid-contrast\",\n accent: \"text-mari-accent-solid-contrast\",\n success: \"text-mari-success-solid-contrast\",\n error: \"text-mari-error-solid-contrast\",\n warning: \"text-mari-warning-solid-contrast\",\n info: \"text-mari-info-solid-contrast\",\n neutral: \"text-mari-neutral-solid-contrast\",\n};\n\nexport const bgSubtleClass: Record<ColorRole, string> = {\n primary: \"bg-mari-primary-subtle\",\n accent: \"bg-mari-accent-subtle\",\n success: \"bg-mari-success-subtle\",\n error: \"bg-mari-error-subtle\",\n warning: \"bg-mari-warning-subtle\",\n info: \"bg-mari-info-subtle\",\n neutral: \"bg-mari-neutral-subtle\",\n};\n\nexport const textSubtleContrastClass: Record<ColorRole, string> = {\n primary: \"text-mari-primary-subtle-contrast\",\n accent: \"text-mari-accent-subtle-contrast\",\n success: \"text-mari-success-subtle-contrast\",\n error: \"text-mari-error-subtle-contrast\",\n warning: \"text-mari-warning-subtle-contrast\",\n info: \"text-mari-info-subtle-contrast\",\n neutral: \"text-mari-neutral-subtle-contrast\",\n};\n\nexport const textClass: Record<ColorRole, string> = {\n primary: \"text-mari-primary\",\n accent: \"text-mari-accent\",\n success: \"text-mari-success\",\n error: \"text-mari-error\",\n warning: \"text-mari-warning\",\n info: \"text-mari-info\",\n neutral: \"text-mari-neutral\",\n};\n\n/** `textClass`in `hover:` varyantı — örn. Menu öğelerinde primary rengi SADECE hover metin rengi olarak uygulamak için. */\nexport const textHoverClass: Record<ColorRole, string> = {\n primary: \"hover:text-mari-primary\",\n accent: \"hover:text-mari-accent\",\n success: \"hover:text-mari-success\",\n error: \"hover:text-mari-error\",\n warning: \"hover:text-mari-warning\",\n info: \"hover:text-mari-info\",\n neutral: \"hover:text-mari-neutral\",\n};\n\nexport const borderColorClass: Record<ColorRole, string> = {\n primary: \"border-mari-primary-border\",\n accent: \"border-mari-accent-border\",\n success: \"border-mari-success-border\",\n error: \"border-mari-error-border\",\n warning: \"border-mari-warning-border\",\n info: \"border-mari-info-border\",\n neutral: \"border-mari-neutral-border\",\n};\n\n/** Rolün KENDİ rengiyle (açık `-border` tonuyla değil) çizilen kenarlık — `outline` varyantı bunu kullanır. */\nexport const borderStrongColorClass: Record<ColorRole, string> = {\n primary: \"border-mari-primary\",\n accent: \"border-mari-accent\",\n success: \"border-mari-success\",\n error: \"border-mari-error\",\n warning: \"border-mari-warning\",\n info: \"border-mari-info\",\n neutral: \"border-mari-neutral\",\n};\n\n/** `bgSubtleClass`in `hover:` varyantı — outline/ghost butonların hover dolgusu. */\nexport const bgSubtleHoverClass: Record<ColorRole, string> = {\n primary: \"hover:bg-mari-primary-subtle\",\n accent: \"hover:bg-mari-accent-subtle\",\n success: \"hover:bg-mari-success-subtle\",\n error: \"hover:bg-mari-error-subtle\",\n warning: \"hover:bg-mari-warning-subtle\",\n info: \"hover:bg-mari-info-subtle\",\n neutral: \"hover:bg-mari-neutral-subtle\",\n};\n\n/** `borderColorClass`in `hover:` varyantı. */\nexport const borderColorHoverClass: Record<ColorRole, string> = {\n primary: \"hover:border-mari-primary-border\",\n accent: \"hover:border-mari-accent-border\",\n success: \"hover:border-mari-success-border\",\n error: \"hover:border-mari-error-border\",\n warning: \"hover:border-mari-warning-border\",\n info: \"hover:border-mari-info-border\",\n neutral: \"hover:border-mari-neutral-border\",\n};\n\n/** SVG `fill`/`stroke` için — örn. Tooltip'in ok işareti. */\nexport const fillSolidClass: Record<ColorRole, string> = {\n primary: \"fill-mari-primary-solid\",\n accent: \"fill-mari-accent-solid\",\n success: \"fill-mari-success-solid\",\n error: \"fill-mari-error-solid\",\n warning: \"fill-mari-warning-solid\",\n info: \"fill-mari-info-solid\",\n neutral: \"fill-mari-neutral-solid\",\n};\n\nexport const strokeSolidClass: Record<ColorRole, string> = {\n primary: \"stroke-mari-primary-solid\",\n accent: \"stroke-mari-accent-solid\",\n success: \"stroke-mari-success-solid\",\n error: \"stroke-mari-error-solid\",\n warning: \"stroke-mari-warning-solid\",\n info: \"stroke-mari-info-solid\",\n neutral: \"stroke-mari-neutral-solid\",\n};\n\n/** `soft` varyantlı yüzeyler (örn. Tooltip'in soft rengi) için — arka planla eşleşsin diye SVG `fill`. */\nexport const fillSubtleClass: Record<ColorRole, string> = {\n primary: \"fill-mari-primary-subtle\",\n accent: \"fill-mari-accent-subtle\",\n success: \"fill-mari-success-subtle\",\n error: \"fill-mari-error-subtle\",\n warning: \"fill-mari-warning-subtle\",\n info: \"fill-mari-info-subtle\",\n neutral: \"fill-mari-neutral-subtle\",\n};\n\nexport const strokeSubtleClass: Record<ColorRole, string> = {\n primary: \"stroke-mari-primary-subtle\",\n accent: \"stroke-mari-accent-subtle\",\n success: \"stroke-mari-success-subtle\",\n error: \"stroke-mari-error-subtle\",\n warning: \"stroke-mari-warning-subtle\",\n info: \"stroke-mari-info-subtle\",\n neutral: \"stroke-mari-neutral-subtle\",\n};\n\n/**\n * `resolveColorVariant()`'ın döndürdüğü soyut token referanslarını gerçek\n * Tailwind class'larına çevirir. Web renderer'ının (bu paketin) tek görevi\n * budur — aynı soyut çıktı, `@mari-ui/native`'de `StyleSheet` objesine\n * çevrilir.\n */\nexport function colorVariantToClassName(style: ColorVariantStyle): string {\n const slotTable = {\n text: textClass,\n solid: bgSolidClass,\n solidContrast: textSolidContrastClass,\n solidHover: bgSolidHoverClass,\n subtle: bgSubtleClass,\n subtleContrast: textSubtleContrastClass,\n border: borderColorClass,\n } as const;\n\n // `background`/`foreground` slot adını doğrudan kullanır; `border` ve\n // `hoverBackground` ise AYNI slot'u kendi CSS özelliğine çevirmek zorunda\n // (örn. `text` slot'u bir kenarlıkta `border-mari-primary`, bir metinde\n // `text-mari-primary` demektir — native tarafında ikisi de aynı ham renge\n // çözüldüğü için `slot` seti değişmeden kalıyor).\n const borderSlotTable = { text: borderStrongColorClass, border: borderColorClass } as const;\n const hoverBgSlotTable = { solidHover: bgSolidHoverClass, subtle: bgSubtleHoverClass } as const;\n\n const bg = style.background ? slotTable[style.background.slot][style.background.role] : undefined;\n const hoverBg = style.hoverBackground\n ? hoverBgSlotTable[style.hoverBackground.slot as keyof typeof hoverBgSlotTable]?.[style.hoverBackground.role]\n : undefined;\n const text = style.foreground ? slotTable[style.foreground.slot][style.foreground.role] : undefined;\n const border = style.border ? borderSlotTable[style.border.slot as keyof typeof borderSlotTable]?.[style.border.role] : undefined;\n\n return cn(bg, hoverBg, text, border, border && \"border\");\n}\n\n/*\n * işaretlenebilir kontroller (Checkbox/Radio) için `checked:` önekli\n * literal tablolar. Önek runtime'da birleştirilmez (Tailwind taraması).\n * Kenarlık dolguyla AYNI (`-solid`): eskiden açık `-border` tonuydu, dolu\n * kutunun etrafında soluk bir hare gibi duruyordu ve 3:1'i geçmiyordu.\n */\nexport const checkedBgSolidClass: Record<ColorRole, string> = {\n primary: \"checked:bg-mari-primary-solid\",\n accent: \"checked:bg-mari-accent-solid\",\n success: \"checked:bg-mari-success-solid\",\n error: \"checked:bg-mari-error-solid\",\n warning: \"checked:bg-mari-warning-solid\",\n info: \"checked:bg-mari-info-solid\",\n neutral: \"checked:bg-mari-neutral-solid\",\n};\n\nexport const checkedBgSolidHoverClass: Record<ColorRole, string> = {\n primary: \"checked:hover:bg-mari-primary-solid-hover\",\n accent: \"checked:hover:bg-mari-accent-solid-hover\",\n success: \"checked:hover:bg-mari-success-solid-hover\",\n error: \"checked:hover:bg-mari-error-solid-hover\",\n warning: \"checked:hover:bg-mari-warning-solid-hover\",\n info: \"checked:hover:bg-mari-info-solid-hover\",\n neutral: \"checked:hover:bg-mari-neutral-solid-hover\",\n};\n\nexport const checkedBorderSolidClass: Record<ColorRole, string> = {\n primary: \"checked:border-mari-primary-solid\",\n accent: \"checked:border-mari-accent-solid\",\n success: \"checked:border-mari-success-solid\",\n error: \"checked:border-mari-error-solid\",\n warning: \"checked:border-mari-warning-solid\",\n info: \"checked:border-mari-info-solid\",\n neutral: \"checked:border-mari-neutral-solid\",\n};\n\n/** Radio'nun dış halkası seçiliyken rol rengi (outline varyantı — içi boş, nokta ayrı). */\nexport const checkedBorderStrongClass: Record<ColorRole, string> = {\n primary: \"checked:border-mari-primary\",\n accent: \"checked:border-mari-accent\",\n success: \"checked:border-mari-success\",\n error: \"checked:border-mari-error\",\n warning: \"checked:border-mari-warning\",\n info: \"checked:border-mari-info\",\n neutral: \"checked:border-mari-neutral\",\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/avatar/utils.ts"],"sourcesContent":["import type React from \"react\";\nimport { cn, type Size } from \"@mari-ui/core\";\nimport type { AvatarShape, AvatarSize } from \"./types\";\n\n/**\n * Preset boyutlar `rem` — 4K/yüksek-DPI ekranlarda `px` kök font'la\n * ölçeklenmediği için küçük kalıyordu. Değerler `@mari-ui/core` componentSize\n * yükseklikleriyle hizalı (h-6/h-8/h-10 = 1.5/2/2.5rem). `size` bir sayı\n * olarak verilirse (açık kaçış) `px` kabul edilir — çağıranın kararı.\n */\nconst SIZE_REM: Record<Size, string> = { sm: \"1.5rem\", md: \"2rem\", lg: \"2.5rem\" };\n\n/*\n * Baş harf font-size'ı ve kare köşe yarıçapı kutuyla orantılı büyür. Faz 15'ten\n * beri baş harf İKİ harf (\"AY\") olabildiği için ant'ın tek-harf ölçeği\n * (14/18/24px) yerine kutunun ~%40'ı kullanılır: 24→10, 32→14, 40→16px.\n * Sayısal (özel px) boyutlarda `md`'nin değerlerine düşülür.\n */\nconst INITIAL_FONT_SIZE_CLASS: Record<Size, string> = { sm: \"text-[0.625rem]\", md: \"text-sm\", lg: \"text-base\" };\nconst SQUARE_RADIUS_CLASS: Record<Size, string> = { sm: \"rounded-sm\", md: \"rounded-md\", lg: \"rounded-lg\" };\n\nexport function getSizeStyle(size: AvatarSize): React.CSSProperties {\n const dimension = typeof size === \"number\" ? size : SIZE_REM[size];\n return { width: dimension, height: dimension };\n}\n\nexport function getInitialFontClass(size: AvatarSize): string {\n return typeof size === \"number\" ? INITIAL_FONT_SIZE_CLASS.md : INITIAL_FONT_SIZE_CLASS[size];\n}\n\n/** Sadece geometri (şekil + radius) — iskelet ve \"+N\" avatarı da bunu kullanır. */\nexport function getShapeClasses(shape: AvatarShape, size: AvatarSize): string {\n const squareRadius = typeof size === \"number\" ? SQUARE_RADIUS_CLASS.md : SQUARE_RADIUS_CLASS[size];\n return cn(\"flex shrink-0 items-center justify-center overflow-hidden\", shape === \"circle\" ? \"rounded-full\" : squareRadius);\n}\n\n/**\n * İlk + son kelimenin baş harfi (\"Aykut Yılmaz\" → \"AY\"); tek kelimede\n * tek harf. Büyük harf Türkçe kurallarıyla (\"ilker\" → \"İ\", \"I\" değil).\n */\nexport function getInitials(alt: string): string {\n const words = alt.trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) return \"\";\n const first = words[0]!.charAt(0);\n const last = words.length > 1 ? words[words.length - 1]!.charAt(0) : \"\";\n return (first + last).toLocaleUpperCase(\"tr\");\n}\n"],"mappings":";AACA,SAAS,UAAqB;AAS9B,IAAM,WAAiC,EAAE,IAAI,UAAU,IAAI,QAAQ,IAAI,SAAS;AAQhF,IAAM,0BAAgD,EAAE,IAAI,mBAAmB,IAAI,WAAW,IAAI,YAAY;AAC9G,IAAM,sBAA4C,EAAE,IAAI,cAAc,IAAI,cAAc,IAAI,aAAa;AAElG,SAAS,aAAa,MAAuC;AAClE,QAAM,YAAY,OAAO,SAAS,WAAW,OAAO,SAAS,IAAI;AACjE,SAAO,EAAE,OAAO,WAAW,QAAQ,UAAU;AAC/C;AAEO,SAAS,oBAAoB,MAA0B;AAC5D,SAAO,OAAO,SAAS,WAAW,wBAAwB,KAAK,wBAAwB,IAAI;AAC7F;AAGO,SAAS,gBAAgB,OAAoB,MAA0B;AAC5E,QAAM,eAAe,OAAO,SAAS,WAAW,oBAAoB,KAAK,oBAAoB,IAAI;AACjG,SAAO,GAAG,6DAA6D,UAAU,WAAW,iBAAiB,YAAY;AAC3H;AAMO,SAAS,YAAY,KAAqB;AAC/C,QAAM,QAAQ,IAAI,KAAK,EAAE,MAAM,KAAK,EAAE,OAAO,OAAO;AACpD,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,QAAM,QAAQ,MAAM,CAAC,EAAG,OAAO,CAAC;AAChC,QAAM,OAAO,MAAM,SAAS,IAAI,MAAM,MAAM,SAAS,CAAC,EAAG,OAAO,CAAC,IAAI;AACrE,UAAQ,QAAQ,MAAM,kBAAkB,IAAI;AAC9C;","names":[]}
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
ContentSkeleton
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-RMNV2CE2.js";
|
|
6
6
|
import {
|
|
7
7
|
SkeletonBlock
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-TSFAAREV.js";
|
|
9
9
|
import {
|
|
10
10
|
touchTargetClass
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-POBOJBNJ.js";
|
|
12
12
|
import {
|
|
13
13
|
textClass
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-6AMBZXZJ.js";
|
|
15
15
|
|
|
16
16
|
// src/toast/Toast.tsx
|
|
17
17
|
import { useEffect, useRef, useState } from "react";
|
|
@@ -237,4 +237,4 @@ export {
|
|
|
237
237
|
ToastProvider,
|
|
238
238
|
useToast
|
|
239
239
|
};
|
|
240
|
-
//# sourceMappingURL=chunk-
|
|
240
|
+
//# sourceMappingURL=chunk-7FQQRTPX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/toast/Toast.tsx","../src/toast/utils.ts","../src/toast/useToast.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { XIcon } from \"lucide-react\";\nimport { cn } from \"@mari-ui/core\";\nimport { SkeletonBlock } from \"../skeleton\";\nimport { ContentSkeleton } from \"../lib/ContentSkeleton\";\nimport { touchTargetClass } from \"../lib/sizeClasses\";\nimport type { ToastProps } from \"./types\";\nimport { getToastIcon } from \"./utils\";\n\nexport type { ToastProps };\n\n/** Ölçülecek içerik yoksa (yerleşimsiz ortam) genel yer tutucu. */\nconst PLACEHOLDER = (\n <div className=\"flex flex-col gap-2 py-0.5\">\n <SkeletonBlock active width=\"55%\" height=\"0.875rem\" radius=\"sm\" />\n <SkeletonBlock active width=\"80%\" height=\"0.75rem\" radius=\"sm\" />\n </div>\n);\n\n/**\n * Eski sürümdeki sorunlar:\n * - Kapat \"düğmesi\" `onClick`li bir SVG'ydi: klavyeyle ulaşılamıyor, adı yoktu.\n * - Başlık `<h1>`, açıklama `<h6>`dı — sayfanın başlık hiyerarşisini bozuyordu.\n * - 5 sn sabit süre, üzerine gelince/odaklanınca DURMUYORDU (WCAG 2.2.1).\n * - Çıkış animasyonu yoktu; kaldırılınca bir anda kayboluyordu.\n *\n * Duyuru Provider'daki kalıcı canlı bölgeden yapılır (bkz. useToast.tsx) —\n * bu kart sadece görsel + etkileşimli kısım.\n *\n * `skeleton` (ikon/başlık/açıklama/aksiyon `ContentSkeleton`,\n * Kapat canlı, sayaç durur); Kapat (28px) ve aksiyon bağlantısı (20px)\n * dokunmatikte 44px hedef.\n */\nexport function Toast({ title, description, type = \"none\", onClose, closeIcon = true, duration, action, exiting = false, skeleton = false }: Readonly<ToastProps>) {\n const icon = getToastIcon(type);\n const [paused, setPaused] = useState(false);\n const remaining = useRef(duration ?? 0);\n const startedAt = useRef(0);\n\n // Kalan süre sayacı: üzerine gelince/odak içerideyken durur, çıkınca kaldığı yerden devam eder.\n // İskeletteyken işlemez — veri gelmeden kapanmasın.\n useEffect(() => {\n if (!duration || paused || exiting || skeleton) return;\n startedAt.current = Date.now();\n const timer = setTimeout(() => onClose?.(), remaining.current);\n return () => {\n clearTimeout(timer);\n remaining.current -= Date.now() - startedAt.current;\n };\n }, [duration, paused, exiting, skeleton, onClose]);\n\n return (\n // Fare/odak olayları sadece sayacı duraklatır; etkileşim içteki düğmelerde.\n <div\n onMouseEnter={() => setPaused(true)}\n onMouseLeave={() => setPaused(false)}\n onFocus={() => setPaused(true)}\n onBlur={(e) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node | null)) setPaused(false);\n }}\n aria-busy={skeleton || undefined}\n className={cn(\n \"pointer-events-auto relative flex w-full items-start gap-3 rounded-xl border border-mari-border bg-mari-surface p-4 shadow-mari-lg sm:w-[22rem]\",\n \"transition-[opacity,translate,scale] duration-200 ease-out motion-reduce:transition-none starting:translate-y-2 starting:scale-95 starting:opacity-0\",\n exiting ? \"scale-95 opacity-0\" : \"translate-y-0 scale-100 opacity-100\"\n )}\n >\n <ContentSkeleton on={skeleton} fallback={PLACEHOLDER} className=\"min-w-0 flex-1\">\n <div className=\"flex min-w-0 flex-1 items-start gap-3\">\n {icon}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-semibold text-mari-foreground\">{title}</p>\n {description && <p className=\"mt-0.5 text-sm text-mari-muted\">{description}</p>}\n {action && (\n <button\n type=\"button\"\n onClick={() => {\n action.onClick();\n onClose?.();\n }}\n className={cn(\n \"relative mt-2 cursor-pointer rounded-sm text-sm font-medium text-mari-primary hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mari-ring\",\n touchTargetClass.xs\n )}\n >\n {action.label}\n </button>\n )}\n </div>\n </div>\n </ContentSkeleton>\n {closeIcon && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Bildirimi kapat\"\n className={cn(\n \"relative -m-1 inline-flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-md text-mari-muted transition-colors hover:bg-mari-surface-alt hover:text-mari-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mari-ring\",\n // 28px → 44px (her yönde 8px); hazır tablolar 24/32px'lik kontroller için.\n \"pointer-coarse:before:absolute pointer-coarse:before:-inset-2\"\n )}\n >\n <XIcon size={16} aria-hidden />\n </button>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { CircleAlertIcon, CircleCheckIcon, CircleXIcon, InfoIcon } from \"lucide-react\";\nimport { textClass } from \"../lib/colorClasses\";\nimport type { ToastPosition, ToastType } from \"./types\";\n\n/*\n * Durum ikonu rol renginde (eskiden içi dolu daire + kontrast renk — küçükte seçilmiyordu).\n */\nexport function getToastIcon(type: ToastType | undefined): React.ReactNode {\n const map = { error: CircleXIcon, success: CircleCheckIcon, warning: CircleAlertIcon, info: InfoIcon } as const;\n if (!type || !(type in map)) return null;\n const role = type as keyof typeof map;\n return React.createElement(map[role], { size: 20, \"aria-hidden\": true, className: `shrink-0 ${textClass[role]}` });\n}\n\n/**\n * Konum başına kap. Mobilde (sm altı) üst/alt kenarda tam genişlik — dar\n * ekranda köşeye sıkışmış 288px'lik kart yerine.\n */\nexport function getContainerPositionClass(position: ToastPosition): string {\n switch (position) {\n case \"top\":\n return \"top-4 inset-x-4 items-center sm:inset-x-auto sm:left-1/2 sm:-translate-x-1/2\";\n case \"bottom\":\n return \"bottom-4 inset-x-4 items-center sm:inset-x-auto sm:left-1/2 sm:-translate-x-1/2\";\n case \"topLeft\":\n return \"top-4 inset-x-4 items-stretch sm:inset-x-auto sm:left-4 sm:items-start\";\n case \"topRight\":\n return \"top-4 inset-x-4 items-stretch sm:inset-x-auto sm:right-4 sm:items-end\";\n case \"bottomLeft\":\n return \"bottom-4 inset-x-4 items-stretch sm:inset-x-auto sm:left-4 sm:items-start\";\n case \"bottomRight\":\n return \"bottom-4 inset-x-4 items-stretch sm:inset-x-auto sm:right-4 sm:items-end\";\n }\n}\n\n/** Alttaki konumlarda en yeni toast en altta (kenara yakın) değil, en üstte değil — kenara yakın olan en yeni. */\nexport const isBottom = (position: ToastPosition) => position.startsWith(\"bottom\");\n","\"use client\";\n\nimport React, { createContext, useCallback, useContext, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport { Toast } from \"./Toast\";\nimport type { ToastData, ToastOptions, ToastPosition } from \"./types\";\nimport { getContainerPositionClass, isBottom } from \"./utils\";\n\nconst DEFAULT_DURATION = 5000;\nconst ACTION_DURATION = 8000;\nconst EXIT_MS = 200;\nconst MAX_PER_POSITION = 4;\nconst DEFAULT_POSITION: ToastPosition = \"bottomRight\";\nconst POSITIONS: ToastPosition[] = [\"top\", \"bottom\", \"topLeft\", \"topRight\", \"bottomLeft\", \"bottomRight\"];\n\ninterface ToastContextType {\n /** Toast gösterir, `id` döndürür (`dismiss` için). */\n showToast: (t: ToastOptions) => string;\n /** Belirli bir toast'u kapatır; `id` verilmezse hepsini. */\n dismiss: (id?: string) => void;\n /**\n * Açık bir toast'u günceller — ör. iskeletten içeriğe:\n * `update(id, { skeleton: false, title: \"Rapor hazır\", type: \"success\" })`.\n * İskeletten çıkınca ekran okuyucuya duyurulur ve kapanma sayacı başlar.\n */\n update: (id: string, changes: Partial<Omit<ToastOptions, \"position\">>) => void;\n}\n\ninterface ToastEntry extends ToastData {\n exiting?: boolean;\n}\n\nconst ToastContext = createContext<ToastContextType | undefined>(undefined);\n\n/** Modül seviyesinde — `useCallback > setTimeout > setState > filter` iç içeliği 4'ü aşmasın. */\nconst withoutToast = (id: string) => (prev: ToastEntry[]) => prev.filter((t) => t.id !== id);\nconst markExiting = (id: string) => (prev: ToastEntry[]) => {\n if (!prev.some((t) => t.id === id && !t.exiting)) return prev;\n return prev.map((t) => (t.id === id ? { ...t, exiting: true } : t));\n};\n\n/** Canlı bölgeye okunacak metin: başlık + (düz metinse) açıklama. */\nconst announcementText = (t: Pick<ToastOptions, \"title\" | \"description\">) =>\n [t.title, typeof t.description === \"string\" ? t.description : \"\"].filter(Boolean).join(\". \");\n\nfunction ToastGroup({ position, toasts, onClose }: Readonly<{ position: ToastPosition; toasts: ToastEntry[]; onClose: (id: string) => void }>) {\n if (toasts.length === 0) return null;\n // Kenara en yakın olan en yeni — altta sıra ters çevrilir.\n const ordered = isBottom(position) ? toasts : [...toasts].reverse();\n return (\n <section\n aria-label=\"Bildirimler\"\n className={cn(\"pointer-events-none fixed z-mari-toast flex flex-col gap-2\", isBottom(position) ? \"justify-end\" : \"justify-start\", getContainerPositionClass(position))}\n >\n {ordered.map((t) => (\n <Toast\n key={t.id}\n title={t.title}\n description={t.description}\n type={t.type}\n closeIcon={t.closeIcon}\n action={t.action}\n duration={t.duration}\n exiting={t.exiting}\n skeleton={t.skeleton}\n onClose={() => onClose(t.id)}\n />\n ))}\n </section>\n );\n}\n\n/*\n * ekran okuyucu duyurusu için KALICI iki canlı bölge (polite +\n * assertive). Eskiden hiç yoktu — hiçbir toast duyurulmuyordu. Bölgeler hep\n * DOM'da; sadece metinleri değişir (yeni eklenen canlı bölgeyi bazı ekran\n * okuyucular kaçırır). Hata toast'ları `assertive`.\n */\n/**\n * Uygulamanın köküne bir kez konur; toast'lar `useToast()` ile gösterilir. Ekran okuyucu\n * duyuruları için kalıcı canlı bölgeler taşır (hata toast'ları `assertive`).\n */\nexport function ToastProvider({ children }: Readonly<{ children: React.ReactNode }>) {\n const [toasts, setToasts] = useState<ToastEntry[]>([]);\n const [announce, setAnnounce] = useState({ polite: \"\", assertive: \"\" });\n const closers = useRef(new Map<string, (() => void) | undefined>());\n const toastsRef = useRef(toasts);\n toastsRef.current = toasts;\n\n const announceToast = useCallback((t: ToastOptions) => {\n const text = announcementText(t);\n setAnnounce((a) => (t.type === \"error\" ? { ...a, assertive: text } : { ...a, polite: text }));\n }, []);\n\n const remove = useCallback((id: string) => {\n if (!closers.current.has(id)) return; // zaten kapanıyor\n setToasts(markExiting(id));\n const onClose = closers.current.get(id);\n closers.current.delete(id);\n onClose?.();\n setTimeout(() => setToasts(withoutToast(id)), EXIT_MS);\n }, []);\n\n const showToast = useCallback((options: ToastOptions) => {\n const id = crypto.randomUUID();\n const duration = options.duration ?? (options.action ? ACTION_DURATION : DEFAULT_DURATION);\n closers.current.set(id, options.onClose);\n setToasts((prev) => {\n const position = options.position ?? DEFAULT_POSITION;\n const next = [...prev, { ...options, id, duration, position }];\n // Konum başına en fazla N görünür — en eskiler düşer.\n const same = next.filter((t) => (t.position ?? DEFAULT_POSITION) === position && !t.exiting);\n const overflow = same.slice(0, Math.max(0, same.length - MAX_PER_POSITION)).map((t) => t.id);\n return next.filter((t) => !overflow.includes(t.id));\n });\n // İskeletteki içerik yer tutucu — duyurulmaz; veri gelince `update` duyurur.\n if (!options.skeleton) announceToast(options);\n return id;\n }, [announceToast]);\n\n const update = useCallback((id: string, changes: Partial<Omit<ToastOptions, \"position\">>) => {\n const current = toastsRef.current.find((t) => t.id === id);\n if (!current || current.exiting) return;\n const next = { ...current, ...changes };\n if (changes.onClose !== undefined) closers.current.set(id, changes.onClose);\n setToasts((prev) => prev.map((t) => (t.id === id ? { ...t, ...changes } : t)));\n const contentChanged = current.skeleton || changes.title !== undefined || changes.description !== undefined;\n if (!next.skeleton && contentChanged) announceToast(next);\n }, [announceToast]);\n\n const dismiss = useCallback(\n (id?: string) => {\n if (id) remove(id);\n else toastsRef.current.forEach((t) => remove(t.id));\n },\n [remove]\n );\n\n const contextValue = useMemo(() => ({ showToast, dismiss, update }), [showToast, dismiss, update]);\n\n return (\n <ToastContext.Provider value={contextValue}>\n {children}\n {POSITIONS.map((position) => (\n <ToastGroup key={position} position={position} toasts={toasts.filter((t) => (t.position ?? DEFAULT_POSITION) === position)} onClose={remove} />\n ))}\n <div aria-live=\"polite\" role=\"status\" className=\"sr-only\">\n {announce.polite}\n </div>\n <div aria-live=\"assertive\" role=\"alert\" className=\"sr-only\">\n {announce.assertive}\n </div>\n </ToastContext.Provider>\n );\n}\n\nexport function useToast(): ToastContextType {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error(\"useToast, <ToastProvider> içinde kullanılmalı.\");\n }\n return context;\n}\n"],"mappings":"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","names":["useRef","useState","cn","jsx","jsxs","cn","useState","useRef"]}
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
SkeletonBlock
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-TSFAAREV.js";
|
|
6
6
|
import {
|
|
7
7
|
bgSolidClass,
|
|
8
8
|
textSolidContrastClass
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-6AMBZXZJ.js";
|
|
10
10
|
import {
|
|
11
11
|
skeletonBoxProps
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-VKN374SD.js";
|
|
13
13
|
|
|
14
14
|
// src/tree/utils.ts
|
|
15
15
|
function buildIndex(data) {
|
|
@@ -552,4 +552,4 @@ export {
|
|
|
552
552
|
Indent,
|
|
553
553
|
Tree
|
|
554
554
|
};
|
|
555
|
-
//# sourceMappingURL=chunk-
|
|
555
|
+
//# sourceMappingURL=chunk-7WB4CDWX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tree/utils.ts","../src/tree/Tree.tsx"],"sourcesContent":["import type { TreeCheckInfo, TreeNode } from \"./types\";\n\n/**\n * Tree'nin saf mantığı (DOM/React yok). TreeSelect (16.4) aynı\n * fonksiyonları kullanacak: indeks, görünür düğümler, işaret yayılımı, arama.\n */\n\nexport interface TreeEntry {\n node: TreeNode;\n parentKey: string | null;\n /** 1 tabanlı derinlik (`aria-level`). */\n level: number;\n childKeys: string[];\n}\n\nexport type TreeIndex = Map<string, TreeEntry>;\n\n/** DFS sırasıyla (Map ekleme sırası korunur) anahtar → konum. */\nexport function buildIndex(data: TreeNode[]): TreeIndex {\n const index: TreeIndex = new Map();\n const walk = (nodes: TreeNode[], parentKey: string | null, level: number) => {\n for (const node of nodes) {\n index.set(node.key, { node, parentKey, level, childKeys: (node.children ?? []).map((c) => c.key) });\n if (node.children) walk(node.children, node.key, level + 1);\n }\n };\n walk(data, null, 1);\n return index;\n}\n\n/** Çocuğu olan (ya da tembel yüklenecek) düğüm açılabilir. */\nexport function isExpandable(node: TreeNode, lazy: boolean): boolean {\n if (node.children && node.children.length > 0) return true;\n return lazy && !node.isLeaf && node.children === undefined;\n}\n\n/** `defaultExpandAll` için: çocuğu olan tüm düğümler. */\nexport function getParentKeys(index: TreeIndex): string[] {\n return [...index.values()].filter((e) => e.childKeys.length > 0).map((e) => e.node.key);\n}\n\nexport function getAncestorKeys(index: TreeIndex, key: string): string[] {\n const out: string[] = [];\n let parent = index.get(key)?.parentKey ?? null;\n while (parent !== null) {\n out.push(parent);\n parent = index.get(parent)?.parentKey ?? null;\n }\n return out;\n}\n\nexport interface VisibleNode {\n node: TreeNode;\n level: number;\n /** Görünür kardeşler arasındaki sıra ve sayı (`aria-posinset`/`aria-setsize`). */\n posinset: number;\n setsize: number;\n parentKey: string | null;\n}\n\n/** Açık düğümlere göre ekranda görünen düğümler, sırasıyla. `filter` verilirse yalnız onlar. */\nexport function flattenVisible(data: TreeNode[], expanded: ReadonlySet<string>, filter?: ReadonlySet<string>): VisibleNode[] {\n const out: VisibleNode[] = [];\n const walk = (nodes: TreeNode[], parentKey: string | null, level: number) => {\n const shown = filter ? nodes.filter((n) => filter.has(n.key)) : nodes;\n shown.forEach((node, i) => {\n out.push({ node, level, posinset: i + 1, setsize: shown.length, parentKey });\n if (node.children && expanded.has(node.key)) walk(node.children, node.key, level + 1);\n });\n };\n walk(data, null, 1);\n return out;\n}\n\n/* ─────────────────────────── İşaret yayılımı ─────────────────────────── */\n\n/** Devre dışı / onay kutusu kapalı düğümler yayılıma katılmaz (ant ile aynı). */\nexport function isCheckEligible(node: TreeNode): boolean {\n return !node.disabled && !node.disableCheckbox && node.checkable !== false;\n}\n\nfunction addDescendants(index: TreeIndex, key: string, set: Set<string>) {\n for (const childKey of index.get(key)?.childKeys ?? []) {\n const child = index.get(childKey);\n if (!child || !isCheckEligible(child.node)) continue;\n set.add(childKey);\n addDescendants(index, childKey, set);\n }\n}\n\n/** Devre dışı düğümlerin (ve altlarının) işaret durumuna dokunulmaz. */\nfunction removeDescendants(index: TreeIndex, key: string, set: Set<string>) {\n for (const childKey of index.get(key)?.childKeys ?? []) {\n const child = index.get(childKey);\n if (!child || !isCheckEligible(child.node)) continue;\n set.delete(childKey);\n removeDescendants(index, childKey, set);\n }\n}\n\n/** Alttan üste: uygun çocuklarının hepsi işaretliyse işaretli, bazısıysa kısmi. */\nfunction conductUp(index: TreeIndex, set: Set<string>): TreeCheckInfo {\n const half = new Set<string>();\n const entries = [...index.values()].reverse(); // çocuklar ebeveynden önce\n for (const entry of entries) {\n const eligibleChildren = entry.childKeys.map((k) => index.get(k)!).filter((c) => isCheckEligible(c.node));\n if (eligibleChildren.length === 0) continue;\n const checkedCount = eligibleChildren.filter((c) => set.has(c.node.key)).length;\n const anyHalf = eligibleChildren.some((c) => half.has(c.node.key));\n if (!isCheckEligible(entry.node)) continue;\n if (checkedCount === eligibleChildren.length) {\n set.add(entry.node.key);\n } else {\n set.delete(entry.node.key);\n if (checkedCount > 0 || anyHalf) half.add(entry.node.key);\n }\n }\n const order = [...index.keys()];\n return { checked: order.filter((k) => set.has(k)), halfChecked: order.filter((k) => half.has(k)) };\n}\n\n/** Dışarıdan gelen işaretleri tutarlı hâle getirir: işaretli üstün altı işaretlenir, üstler hesaplanır. */\nexport function conductCheck(keys: readonly string[], index: TreeIndex): TreeCheckInfo {\n const set = new Set<string>();\n for (const key of keys) {\n const entry = index.get(key);\n if (!entry) continue;\n set.add(key);\n if (isCheckEligible(entry.node)) addDescendants(index, key, set);\n }\n return conductUp(index, set);\n}\n\n/** Bir düğümü işaretle/kaldır. `strict`te yayılım yok. */\nexport function toggleCheck(current: readonly string[], key: string, checked: boolean, index: TreeIndex, strict: boolean): TreeCheckInfo {\n if (strict) {\n const next = checked ? [...new Set([...current, key])] : current.filter((k) => k !== key);\n return { checked: next, halfChecked: [] };\n }\n const set = new Set(current);\n if (checked) {\n set.add(key);\n addDescendants(index, key, set);\n } else {\n set.delete(key);\n removeDescendants(index, key, set);\n for (const ancestor of getAncestorKeys(index, key)) {\n if (isCheckEligible(index.get(ancestor)!.node)) set.delete(ancestor);\n }\n }\n return conductUp(index, set);\n}\n\n/* ─────────────────────────── Arama ─────────────────────────── */\n\nexport function nodeText(node: TreeNode): string {\n if (node.searchText !== undefined) return node.searchText;\n return typeof node.title === \"string\" || typeof node.title === \"number\" ? String(node.title) : \"\";\n}\n\n/**\n * Arama için harf katlama. `toLocaleLowerCase(\"tr\")` Latin \"I\"yı \"ı\" yapar\n * (\"API\" → \"apı\") ve \"api.ts\"yi bulamaz; en-US ise \"İ\"yi iki karaktere böler.\n * tr ile küçültüp ı→i katlanır: \"API\", \"İstanbul\", \"ılık\" hepsi bulunur, uzunluk değişmez.\n */\nconst normalize = (s: string) => s.toLocaleLowerCase(\"tr\").replace(/ı/g, \"i\");\n\nexport interface TreeSearchResult {\n /** Eşleşen düğümler. */\n matches: Set<string>;\n /** Gösterilecekler: eşleşenler, ataları ve eşleşen düğümlerin alt ağaçları. */\n visible: Set<string>;\n /** Kendiliğinden açılacaklar: eşleşenlerin ataları. */\n expand: Set<string>;\n}\n\nexport function searchTree(index: TreeIndex, value: string): TreeSearchResult | null {\n const query = normalize(value.trim());\n if (!query) return null;\n const matches = new Set<string>();\n const visible = new Set<string>();\n const expand = new Set<string>();\n for (const [key, entry] of index) {\n if (!normalize(nodeText(entry.node)).includes(query)) continue;\n matches.add(key);\n visible.add(key);\n for (const ancestor of getAncestorKeys(index, key)) {\n visible.add(ancestor);\n expand.add(ancestor);\n }\n const stack = [...entry.childKeys];\n while (stack.length) {\n const k = stack.pop()!;\n visible.add(k);\n stack.push(...(index.get(k)?.childKeys ?? []));\n }\n }\n return { matches, visible, expand };\n}\n\n/** Metni eşleşen/eşleşmeyen parçalara böler (Türkçe harf duyarsız, orijinal harfler korunur). */\nexport function splitMatch(text: string, value: string): { text: string; match: boolean }[] {\n const query = normalize(value.trim());\n if (!query) return [{ text, match: false }];\n const lower = normalize(text);\n // `toLocaleLowerCase(\"tr\")` uzunluğu değiştirmez (İ→i tek karakter), indeksler aynı kalır.\n const parts: { text: string; match: boolean }[] = [];\n let from = 0;\n let at = lower.indexOf(query, from);\n while (at !== -1) {\n if (at > from) parts.push({ text: text.slice(from, at), match: false });\n parts.push({ text: text.slice(at, at + query.length), match: true });\n from = at + query.length;\n at = lower.indexOf(query, from);\n }\n if (from < text.length) parts.push({ text: text.slice(from), match: false });\n return parts;\n}\n\n/* ─────────────────────────── Klavye ─────────────────────────── */\n\nexport type TreeKeyAction =\n | { type: \"focus\"; key: string }\n | { type: \"expand\"; key: string }\n | { type: \"collapse\"; key: string }\n | { type: \"expandSiblings\"; keys: string[] }\n | null;\n\n/**\n * WAI-ARIA APG Tree View tuşları: ↑/↓ görünür düğümler, → aç ya da ilk\n * çocuğa in, ← kapa ya da ebeveyne çık, Home/End, `*` kardeşleri aç, harf ile\n * ada göre atla. Enter/Space bileşende (seçim/işaret) ele alınır.\n */\nconst focusTo = (entry: VisibleNode | undefined): TreeKeyAction => (entry ? { type: \"focus\", key: entry.node.key } : null);\n\n/** Harfle atlama: bulunduğu düğümden sonra, adı o harfle başlayan ilk görünür düğüm (döngülü). */\nfunction typeahead(visible: VisibleNode[], i: number, key: string): TreeKeyAction {\n if (key.length !== 1 || key === \" \") return null;\n const char = normalize(key);\n for (let step = 1; step <= visible.length; step++) {\n const candidate = visible[(i + step) % visible.length]!;\n if (normalize(nodeText(candidate.node)).startsWith(char)) return focusTo(candidate);\n }\n return null;\n}\n\nexport function getKeyAction(\n visible: VisibleNode[],\n currentKey: string,\n key: string,\n isOpen: (k: string) => boolean,\n canExpand: (node: TreeNode) => boolean\n): TreeKeyAction {\n const i = visible.findIndex((v) => v.node.key === currentKey);\n const current = visible[i];\n if (!current) return null;\n const open = canExpand(current.node) && isOpen(current.node.key);\n switch (key) {\n case \"ArrowDown\":\n return focusTo(visible[i + 1]);\n case \"ArrowUp\":\n return focusTo(visible[i - 1]);\n case \"Home\":\n return focusTo(visible[0]);\n case \"End\":\n return focusTo(visible[visible.length - 1]);\n case \"ArrowRight\":\n if (!canExpand(current.node)) return null;\n if (!open) return { type: \"expand\", key: current.node.key };\n return visible[i + 1]?.parentKey === current.node.key ? focusTo(visible[i + 1]) : null;\n case \"ArrowLeft\":\n if (open) return { type: \"collapse\", key: current.node.key };\n return current.parentKey === null ? null : { type: \"focus\", key: current.parentKey };\n case \"*\": {\n const siblings = visible.filter((v) => v.parentKey === current.parentKey && canExpand(v.node) && !isOpen(v.node.key)).map((v) => v.node.key);\n return siblings.length ? { type: \"expandSiblings\", keys: siblings } : null;\n }\n default:\n return typeahead(visible, i, key);\n }\n}\n","\"use client\";\n\nimport React, { useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { CheckIcon, ChevronRightIcon, Loader2Icon, MinusIcon } from \"lucide-react\";\nimport { cn, useControllableState } from \"@mari-ui/core\";\nimport { bgSolidClass, textSolidContrastClass } from \"../lib/colorClasses\";\nimport { skeletonBoxProps } from \"../lib/skeleton\";\nimport { SkeletonBlock } from \"../skeleton\";\nimport type { TreeNode, TreeProps } from \"./types\";\nimport {\n buildIndex,\n conductCheck,\n flattenVisible,\n getKeyAction,\n getParentKeys,\n isExpandable,\n searchTree,\n splitMatch,\n toggleCheck,\n type TreeIndex,\n type VisibleNode,\n} from \"./utils\";\n\nexport type { TreeProps, TreeNode };\n\nexport type CheckState = \"checked\" | \"mixed\" | \"unchecked\";\n\n/** TreeSelect de kullanır (aynı görsel kutu). */\nexport function CheckboxBox({ state, disabled, onClick }: Readonly<{ state: CheckState; disabled: boolean; onClick: (e: React.MouseEvent) => void }>) {\n const on = state !== \"unchecked\";\n return (\n // Görsel kutu: durum treeitem'in `aria-checked`ında; tıklama fare içindir, klavyede Space.\n <span\n aria-hidden\n onClick={disabled ? undefined : onClick}\n className={cn(\n \"mr-1 flex size-4 shrink-0 items-center justify-center rounded-sm border transition-colors\",\n on ? cn(\"border-transparent\", bgSolidClass.primary, textSolidContrastClass.primary) : \"border-mari-input bg-mari-surface\",\n disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"\n )}\n >\n {state === \"checked\" && <CheckIcon size={12} strokeWidth={3.5} />}\n {state === \"mixed\" && <MinusIcon size={12} strokeWidth={3.5} />}\n </span>\n );\n}\n\n/** Başlık + arama vurgusu — TreeSelect de kullanır. */\nexport function Title({ node, searchValue, titleRender }: Readonly<{ node: TreeNode; searchValue?: string; titleRender?: Exclude<TreeProps[\"titleRender\"], undefined> }>) {\n if (titleRender) return <>{titleRender(node)}</>;\n if (!searchValue || typeof node.title !== \"string\") return <>{node.title}</>;\n return (\n <>\n {splitMatch(node.title, searchValue).map((part, i) =>\n part.match ? (\n // Parçalar sabit sırada, yeniden sıralanmaz.\n <mark key={i} className=\"rounded-sm bg-mari-warning-subtle text-inherit\">\n {part.text}\n </mark>\n ) : (\n <React.Fragment key={i}>{part.text}</React.Fragment>\n )\n )}\n </>\n );\n}\n\ninterface RowProps {\n entry: VisibleNode;\n id: string;\n focused: boolean;\n open: boolean;\n expandable: boolean;\n loading: boolean;\n selected: boolean;\n selectable: boolean;\n checkState: CheckState | null;\n showLine: boolean;\n blockNode: boolean;\n searchValue?: string;\n titleRender?: Exclude<TreeProps[\"titleRender\"], undefined>;\n onToggle: () => void;\n onCheck: () => void;\n onActivate: () => void;\n onDoubleActivate: () => void;\n onFocus: () => void;\n skeleton: boolean;\n}\n\n/** Treeitem ARIA özellikleri; iskelette hiçbiri (satır erişilebilirlik ağacında değil). */\nfunction treeitemAria({ entry, focused, open, expandable, loading, selected, selectable, checkState, skeleton }: RowProps) {\n if (skeleton) return {};\n let checked: boolean | \"mixed\" | undefined;\n if (checkState === \"mixed\") checked = \"mixed\";\n else if (checkState) checked = checkState === \"checked\";\n return {\n role: \"treeitem\",\n tabIndex: focused ? 0 : -1,\n \"aria-level\": entry.level,\n \"aria-posinset\": entry.posinset,\n \"aria-setsize\": entry.setsize,\n \"aria-expanded\": expandable ? open : undefined,\n \"aria-selected\": selectable ? selected : undefined,\n \"aria-checked\": checked,\n \"aria-disabled\": entry.node.disabled || undefined,\n \"aria-busy\": loading || undefined,\n } as const;\n}\n\nexport function Switcher({ open, expandable, loading, skeleton, onToggle }: Readonly<Pick<RowProps, \"open\" | \"expandable\" | \"loading\" | \"skeleton\" | \"onToggle\">>) {\n let icon: React.ReactNode = null;\n if (loading) icon = <Loader2Icon size={14} className=\"animate-spin text-mari-muted motion-reduce:animate-none\" />;\n else if (expandable && skeleton) icon = <span {...skeletonBoxProps(\"size-3 rounded-sm\")} />;\n else if (expandable)\n icon = <ChevronRightIcon size={14} className={cn(\"text-mari-muted transition-transform duration-150 motion-reduce:transition-none\", open && \"rotate-90\")} />;\n return (\n // Fare için açma düğmesi; klavyede ←/→ (görsel, aria-hidden).\n <span\n aria-hidden\n onClick={(e) => {\n e.stopPropagation();\n if (expandable) onToggle();\n }}\n className={cn(\"mr-1 flex h-6 w-6 shrink-0 items-center justify-center self-center rounded-md\", expandable && \"cursor-pointer hover:bg-mari-surface-alt\")}\n >\n {icon}\n </span>\n );\n}\n\nexport function Indent({ level, showLine }: Readonly<{ level: number; showLine: boolean }>) {\n return (\n <>\n {Array.from({ length: level - 1 }, (_, i) => (\n <span\n // Girinti birimleri konumsal, sabit.\n key={i}\n aria-hidden\n className={cn(\n \"relative w-6 shrink-0\",\n // Kılavuz çizgisi satır aralığını da (py) kapsar → çizgiler kesintisiz.\n showLine && \"before:absolute before:-inset-y-0.5 before:left-1/2 before:border-l before:border-mari-border pointer-coarse:before:-inset-y-2.5\"\n )}\n />\n ))}\n </>\n );\n}\n\nfunction Row(props: Readonly<RowProps>) {\n const { entry, id, selected, checkState, showLine, blockNode, skeleton } = props;\n const { node, level } = entry;\n const disabled = Boolean(node.disabled);\n\n return (\n <div\n {...treeitemAria(props)}\n id={id}\n data-key={node.key}\n onFocus={props.onFocus}\n className=\"group relative flex items-stretch py-0.5 text-mari-foreground outline-none pointer-coarse:py-2.5\"\n >\n <Indent level={level} showLine={showLine} />\n <Switcher open={props.open} expandable={props.expandable} loading={props.loading} skeleton={skeleton} onToggle={props.onToggle} />\n {checkState && (\n <span className=\"flex items-center\">\n {skeleton ? (\n <span {...skeletonBoxProps(\"mr-1 size-4 rounded-sm\")} />\n ) : (\n <CheckboxBox\n state={checkState}\n disabled={disabled || Boolean(node.disableCheckbox)}\n onClick={(e) => {\n e.stopPropagation();\n props.onCheck();\n }}\n />\n )}\n </span>\n )}\n {/* Klavye karşılığı ağacın onKeyDown'unda (Enter/Space) — odak treeitem'de. */}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n <span\n onClick={disabled ? undefined : props.onActivate}\n onDoubleClick={disabled ? undefined : props.onDoubleActivate}\n className={cn(\n \"flex min-h-6 min-w-0 items-center gap-1.5 self-center rounded-md px-2 leading-6 transition-colors\",\n blockNode && \"flex-1\",\n disabled ? \"cursor-not-allowed text-mari-muted\" : \"cursor-pointer\",\n selected ? \"bg-mari-primary-subtle\" : !disabled && \"hover:bg-mari-surface-alt\",\n \"group-focus-visible:outline-2 group-focus-visible:outline-offset-0 group-focus-visible:outline-mari-ring\"\n )}\n >\n {node.icon && (\n <span aria-hidden className={cn(\"flex shrink-0 items-center [&_svg]:size-4\", !disabled && \"text-mari-muted\", skeleton && \"invisible\")}>\n {node.icon}\n </span>\n )}\n {skeleton ? (\n <span {...skeletonBoxProps(\"rounded-sm leading-4\")}>{typeof node.title === \"string\" ? node.title : \"…………\"}</span>\n ) : (\n <span className=\"min-w-0 break-words\">\n <Title node={node} searchValue={props.searchValue} titleRender={props.titleRender} />\n </span>\n )}\n </span>\n </div>\n );\n}\n\nconst PLACEHOLDER_LEVELS = [1, 2, 2, 2, 1, 1];\n\nfunction Placeholders() {\n return (\n <div aria-hidden data-skeleton=\"\" className=\"flex flex-col\">\n {PLACEHOLDER_LEVELS.map((level, i) => (\n <div key={i} className=\"flex h-7 items-center gap-1 pointer-coarse:h-11\" style={{ paddingInlineStart: `${(level - 1) * 1.5}rem` }}>\n <SkeletonBlock active width=\"1rem\" height=\"0.75rem\" radius=\"sm\" className=\"mx-1\" />\n <SkeletonBlock active width={`${40 + ((i * 23) % 50)}%`} height=\"0.875rem\" radius=\"sm\" />\n </div>\n ))}\n </div>\n );\n}\n\n/**\n * Tab durağı olan düğüm. Odaklı düğüm görünmez olduysa (ebeveyni kapandı,\n * arama) en yakın görünür atası; hiç odak yoksa ilk görünür seçili, o da yoksa ilk düğüm.\n */\nfunction resolveActiveKey(focusKey: string | null, visible: VisibleNode[], index: TreeIndex, selected: string[]): string | null {\n const visibleKeys = new Set(visible.map((v) => v.node.key));\n let key = focusKey;\n while (key !== null && !visibleKeys.has(key)) key = index.get(key)?.parentKey ?? null;\n return key ?? selected.find((k) => visibleKeys.has(k)) ?? visible[0]?.node.key ?? null;\n}\n\nfunction getCheckState(key: string, checked: ReadonlySet<string>, half: ReadonlySet<string>): CheckState {\n if (checked.has(key)) return \"checked\";\n return half.has(key) ? \"mixed\" : \"unchecked\";\n}\n\nfunction useTreeState(props: TreeProps) {\n const { treeData, checkStrictly = false } = props;\n const index = useMemo(() => buildIndex(treeData), [treeData]);\n const [expanded, setExpanded] = useControllableState<string[]>({\n value: props.expandedKeys,\n defaultValue: props.defaultExpandAll ? getParentKeys(buildIndex(treeData)) : (props.defaultExpandedKeys ?? []),\n });\n const [selected, setSelected] = useControllableState<string[]>({ value: props.selectedKeys, defaultValue: props.defaultSelectedKeys ?? [] });\n const [rawChecked, setRawChecked] = useControllableState<string[]>({ value: props.checkedKeys, defaultValue: props.defaultCheckedKeys ?? [] });\n const checkInfo = useMemo(() => (checkStrictly ? { checked: rawChecked, halfChecked: [] } : conductCheck(rawChecked, index)), [rawChecked, index, checkStrictly]);\n const search = useMemo(() => (props.searchValue ? searchTree(index, props.searchValue) : null), [index, props.searchValue]);\n const expandedSet = useMemo(() => new Set([...expanded, ...(search?.expand ?? [])]), [expanded, search]);\n const visible = useMemo(() => flattenVisible(treeData, expandedSet, search?.visible), [treeData, expandedSet, search]);\n return { index, expanded, setExpanded, selected, setSelected, checkInfo, setRawChecked, expandedSet, visible };\n}\n\n/*\n * yapı ant.design Tree'den (açma düğmesi, onay kutuları + üst/alt\n * yayılım + kısmi durum, `checkStrictly`, tekli/çoklu seçim, tembel yükleme,\n * kılavuz çizgileri, `blockNode`, arama + vurgu, `titleRender`), görünüm kendi\n * token'larımızdan. Düz (flat) çizim: görünür düğümler tek dizi — klavye ve\n * iskelet bunun üzerinde çalışır. Saf mantık `utils.ts`te (TreeSelect de kullanır).\n */\n/**\n * Erişilebilirlik (WAI-ARIA APG Tree View): `role=\"tree\"` + `treeitem`\n * (`aria-level`/`aria-posinset`/`aria-setsize`, açılabilirse `aria-expanded`,\n * seçilebilirse `aria-selected`, işaretlenebilirse `aria-checked` true/false/\n * mixed). Tek Tab durağı (roving tabindex). ↑/↓, →/←, Home/End, `*`, harfle\n * atlama; Enter seçer, Space (onay kutulu ağaçta) işaretler. Dokunmatikte\n * satırlar 44px.\n */\nexport function Tree(props: Readonly<TreeProps>) {\n const {\n selectable = true,\n multiple = false,\n checkable = false,\n checkStrictly = false,\n loadData,\n expandAction = false,\n showLine = false,\n blockNode = false,\n searchValue,\n titleRender,\n notFoundContent = \"Sonuç bulunamadı\",\n className,\n skeleton = false,\n } = props;\n const baseId = useId();\n const state = useTreeState(props);\n const { index, visible, expandedSet } = state;\n const [loadingKeys, setLoadingKeys] = useState<ReadonlySet<string>>(new Set());\n const [focusKey, setFocusKey] = useState<string | null>(null);\n const moveFocus = useRef(false);\n\n const lazy = Boolean(loadData);\n const canExpand = (node: TreeNode) => isExpandable(node, lazy);\n const domId = (key: string) => `${baseId}-${key}`;\n\n const activeKey = resolveActiveKey(focusKey, visible, index, state.selected);\n\n useEffect(() => {\n if (!moveFocus.current || !activeKey) return;\n moveFocus.current = false;\n document.getElementById(domId(activeKey))?.focus();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeKey]);\n\n const focusNode = (key: string) => {\n moveFocus.current = true;\n setFocusKey(key);\n };\n\n const setOpen = (node: TreeNode, open: boolean) => {\n const next = open ? [...new Set([...state.expanded, node.key])] : state.expanded.filter((k) => k !== node.key);\n state.setExpanded(next);\n props.onExpand?.(next, { node, expanded: open });\n if (open && loadData && node.children === undefined && !node.isLeaf && !loadingKeys.has(node.key)) {\n setLoadingKeys((s) => new Set(s).add(node.key));\n loadData(node)\n .catch(() => state.setExpanded(state.expanded.filter((k) => k !== node.key)))\n .finally(() =>\n setLoadingKeys((s) => {\n const n = new Set(s);\n n.delete(node.key);\n return n;\n })\n );\n }\n };\n\n const toggleOpen = (node: TreeNode) => setOpen(node, !expandedSet.has(node.key));\n\n const nodeSelectable = (node: TreeNode) => selectable && node.selectable !== false && !node.disabled;\n const nodeCheckable = (node: TreeNode) => checkable && node.checkable !== false;\n\n const select = (node: TreeNode) => {\n if (!nodeSelectable(node)) return;\n const isSelected = state.selected.includes(node.key);\n let next: string[];\n if (multiple) next = isSelected ? state.selected.filter((k) => k !== node.key) : [...state.selected, node.key];\n else next = isSelected ? [] : [node.key];\n state.setSelected(next);\n props.onSelect?.(next, { node, selected: !isSelected });\n };\n\n const check = (node: TreeNode) => {\n if (!nodeCheckable(node) || node.disabled || node.disableCheckbox) return;\n const checked = !state.checkInfo.checked.includes(node.key);\n const info = toggleCheck(state.checkInfo.checked, node.key, checked, index, checkStrictly);\n state.setRawChecked(info.checked);\n props.onCheck?.(info.checked, { node, checked, halfCheckedKeys: info.halfChecked });\n };\n\n const activate = (node: TreeNode) => {\n if (nodeSelectable(node)) select(node);\n else if (nodeCheckable(node)) check(node);\n if (expandAction === \"click\" && canExpand(node)) toggleOpen(node);\n };\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n // Durumdaki odak değil, olayın geldiği düğüm: odak ve tuş aynı karede gelirse state henüz güncellenmemiş olabilir.\n const currentKey = (event.target as HTMLElement).closest<HTMLElement>(\"[role=treeitem]\")?.dataset.key ?? activeKey;\n const node = currentKey ? index.get(currentKey)?.node : undefined;\n if (!currentKey || !node) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n if (event.key === \" \" && nodeCheckable(node)) check(node);\n else if (!node.disabled) activate(node);\n return;\n }\n const action = getKeyAction(visible, currentKey, event.key, (k) => expandedSet.has(k), canExpand);\n if (!action) return;\n event.preventDefault();\n if (action.type === \"focus\") focusNode(action.key);\n else if (action.type === \"expand\") setOpen(node, true);\n else if (action.type === \"collapse\") setOpen(node, false);\n else {\n const next = [...new Set([...state.expanded, ...action.keys])];\n state.setExpanded(next);\n props.onExpand?.(next, { node, expanded: true });\n }\n };\n\n const checkedSet = new Set(state.checkInfo.checked);\n const halfSet = new Set(state.checkInfo.halfChecked);\n\n if (skeleton && props.treeData.length === 0) return <Placeholders />;\n if (visible.length === 0) {\n return <div className={cn(\"px-2 py-3 text-sm text-mari-muted\", className)}>{searchValue ? notFoundContent : null}</div>;\n }\n\n return (\n // Tuşlar treeitem'lerden kabarcıklanır (APG: odak treeitem'de).\n <div\n role={skeleton ? undefined : \"tree\"}\n aria-label={skeleton ? undefined : props[\"aria-label\"]}\n aria-labelledby={skeleton ? undefined : props[\"aria-labelledby\"]}\n aria-multiselectable={!skeleton && selectable && multiple ? true : undefined}\n aria-hidden={skeleton || undefined}\n aria-busy={skeleton || undefined}\n data-skeleton={skeleton ? \"\" : undefined}\n onKeyDown={skeleton ? undefined : onKeyDown}\n className={cn(\"flex flex-col text-sm\", skeleton && \"pointer-events-none select-none\", className)}\n >\n {visible.map((entry) => {\n const { node } = entry;\n const checkState = nodeCheckable(node) ? getCheckState(node.key, checkedSet, halfSet) : null;\n return (\n <Row\n key={node.key}\n entry={entry}\n id={domId(node.key)}\n focused={node.key === activeKey}\n open={expandedSet.has(node.key)}\n expandable={canExpand(node)}\n loading={loadingKeys.has(node.key)}\n selected={state.selected.includes(node.key)}\n selectable={selectable && node.selectable !== false}\n checkState={checkState}\n showLine={showLine}\n blockNode={blockNode}\n searchValue={searchValue}\n titleRender={titleRender}\n skeleton={skeleton}\n onToggle={() => {\n focusNode(node.key);\n toggleOpen(node);\n }}\n onCheck={() => {\n focusNode(node.key);\n check(node);\n }}\n onActivate={() => {\n focusNode(node.key);\n activate(node);\n }}\n onDoubleActivate={() => {\n if (expandAction === \"doubleClick\" && canExpand(node)) toggleOpen(node);\n }}\n onFocus={() => setFocusKey(node.key)}\n />\n );\n })}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/loading/Loading.tsx","../src/loading/utils.ts"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn, type ColorRole, type Size } from \"@mari-ui/core\";\nimport type { LoadingProps } from \"./types\";\nimport { clampPercent, SPINNER_SIZE, SPINNER_VIEWBOX, STROKE_WIDTH, strokeClass, TIP_CLASS } from \"./utils\";\n\nexport type { LoadingProps };\n\n/**\n * Eski sürüm tek bir şey yapabiliyordu: `fixed inset-0` tam ekran bir spinner.\n * - Bir kartın/formun İÇİNDE kullanılamıyordu; örtü de yoktu — alttaki\n * sayfa yükleme sırasında tıklanabiliyordu.\n * - `role=\"status\"` yoktu (gizli \"Yükleniyor...\" metni hiç duyurulmuyordu);\n * boyut, açıklama, gecikme yoktu.\n *\n * Artık üç mod: satır içi (varsayılan), sarmalama (`children` — içerik yerinde\n * kalır, soluklaşır, `inert` olur; düzen kaymaz), tam ekran (`fullscreen`).\n * `delay` hızlı biten isteklerde yanıp sönmeyi önler; `percent` belirli ilerleme.\n *\n * Spinner boyutu rem (px kök fontla ölçeklenmiyordu); `aria-valuenow`\n * da sınırlanır (percent=150 → 150/100 duyuruluyordu); tam ekran `document.body`'ye\n * portal edilir (transform'lu bir atanın içinde `fixed` ekranı kaplamıyordu);\n * mod başına ayrık bileşenler (sonar cognitive-complexity).\n */\n\nfunction useDelayedVisible(spinning: boolean, delay: number): boolean {\n const [delayed, setDelayed] = useState(delay <= 0 && spinning);\n useEffect(() => {\n if (!spinning) {\n setDelayed(false);\n return;\n }\n if (delay <= 0) {\n setDelayed(true);\n return;\n }\n const timer = setTimeout(() => setDelayed(true), delay);\n return () => clearTimeout(timer);\n }, [spinning, delay]);\n return spinning && delayed;\n}\n\nfunction Spinner({ size, color, percent }: Readonly<{ size: Size; color: ColorRole; percent?: number }>) {\n const box = SPINNER_VIEWBOX[size];\n const stroke = STROKE_WIDTH[size];\n const radius = (box - stroke) / 2;\n const circumference = 2 * Math.PI * radius;\n const determinate = percent !== undefined;\n const dash = determinate ? (clampPercent(percent) / 100) * circumference : circumference * 0.28;\n\n return (\n <svg\n aria-hidden\n viewBox={`0 0 ${box} ${box}`}\n style={{ width: SPINNER_SIZE[size], height: SPINNER_SIZE[size] }}\n className={cn(\n \"shrink-0\",\n // Hareket azaltma tercihinde de döner (durum bilgisi taşıyor) ama yavaş.\n !determinate && \"animate-spin motion-reduce:animate-[spin_2s_linear_infinite]\",\n determinate && \"-rotate-90\"\n )}\n >\n <circle cx={box / 2} cy={box / 2} r={radius} fill=\"none\" strokeWidth={stroke} className=\"stroke-mari-border\" />\n <circle\n cx={box / 2}\n cy={box / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n strokeDasharray={`${dash} ${circumference}`}\n className={cn(strokeClass[color], determinate && \"transition-[stroke-dasharray] duration-300 motion-reduce:transition-none\")}\n />\n </svg>\n );\n}\n\ninterface IndicatorProps {\n size: Size;\n color: ColorRole;\n percent?: number;\n tip?: React.ReactNode;\n indicator?: React.ReactNode;\n /** Küçük satır içi gösterge yan yana, diğerleri alt alta. */\n row: boolean;\n}\n\nfunction IndicatorBlock({ size, color, percent, tip, indicator, row }: Readonly<IndicatorProps>) {\n const determinate = percent !== undefined;\n return (\n <div className={cn(\"flex items-center gap-2 text-mari-muted\", row ? \"flex-row\" : \"flex-col\")}>\n {indicator ?? <Spinner size={size} color={color} percent={percent} />}\n {(tip || determinate) && (\n <span className={cn(\"tabular-nums\", TIP_CLASS[size])}>\n {tip}\n {determinate && <span className={cn(tip ? \"ml-1.5\" : \"\", \"font-medium text-mari-foreground\")}>%{Math.round(clampPercent(percent))}</span>}\n </span>\n )}\n </div>\n );\n}\n\n/** Belirli ilerlemede progressbar, aksi halde canlı durum bölgesi. */\nfunction getA11yProps(label: string, percent: number | undefined): React.HTMLAttributes<HTMLDivElement> {\n if (percent === undefined) return { role: \"status\", \"aria-live\": \"polite\", \"aria-label\": label };\n return { role: \"progressbar\", \"aria-label\": label, \"aria-valuemin\": 0, \"aria-valuemax\": 100, \"aria-valuenow\": Math.round(clampPercent(percent)) };\n}\n\nfunction WrapperLoading({\n visible,\n label,\n a11yProps,\n determinate,\n className,\n children,\n indicator,\n}: Readonly<{\n visible: boolean;\n label: string;\n a11yProps: React.HTMLAttributes<HTMLDivElement>;\n determinate: boolean;\n className?: string;\n children: React.ReactNode;\n indicator: React.ReactNode;\n}>) {\n return (\n <div className={cn(\"relative\", className)} aria-busy={visible || undefined}>\n {/* Yüklenirken içerik etkileşime kapalı (inert) — formda çift gönderimi, listede yarım veriye tıklamayı önler. */}\n <div inert={visible || undefined} className={cn(\"transition-opacity duration-200 motion-reduce:transition-none\", visible && \"pointer-events-none select-none opacity-40\")}>\n {children}\n </div>\n {/* Canlı bölge HEP DOM'da, sadece metni değişir — yükleme başlayınca yeni\n eklenen bir role=status'u bazı ekran okuyucular duyurmuyor. */}\n {!determinate && (\n <span role=\"status\" aria-live=\"polite\" className=\"sr-only\">\n {visible ? label : \"\"}\n </span>\n )}\n {visible && (\n // Uzun içerikte spinner ilk 400px'in ortasında kalsın (ant.design) — sayfanın dibinde kaybolmasın.\n <div\n {...(determinate ? a11yProps : { \"aria-hidden\": true })}\n className=\"absolute inset-x-0 top-0 z-10 flex h-full max-h-[25rem] items-center justify-center transition-opacity duration-200 motion-reduce:transition-none starting:opacity-0\"\n >\n {/* Soluk içeriğin (grafik, metin) üstünde okunur kalsın diye yüzey kutusu. */}\n <div className=\"rounded-xl border border-mari-border bg-mari-surface/95 px-4 py-3 shadow-mari-md\">{indicator}</div>\n </div>\n )}\n </div>\n );\n}\n\nexport function Loading({\n spinning = true,\n size = \"md\",\n tip,\n delay = 0,\n percent,\n fullscreen = false,\n children,\n color = \"primary\",\n indicator,\n className,\n}: Readonly<LoadingProps>) {\n const visible = useDelayedVisible(spinning, delay);\n const label = typeof tip === \"string\" ? tip : \"Yükleniyor\";\n const a11yProps = getA11yProps(label, percent);\n const indicatorBlock = (\n <IndicatorBlock size={size} color={color} percent={percent} tip={tip} indicator={indicator} row={size === \"sm\" && !fullscreen} />\n );\n\n if (children !== undefined && !fullscreen) {\n return (\n <WrapperLoading visible={visible} label={label} a11yProps={a11yProps} determinate={percent !== undefined} className={className} indicator={indicatorBlock}>\n {children}\n </WrapperLoading>\n );\n }\n\n if (!visible) return null;\n\n if (fullscreen) {\n if (typeof document === \"undefined\") return null;\n return createPortal(\n <div\n {...a11yProps}\n className={cn(\n \"fixed inset-0 z-mari-modal flex items-center justify-center bg-mari-surface/80 backdrop-blur-sm\",\n \"transition-opacity duration-200 motion-reduce:transition-none starting:opacity-0\",\n className\n )}\n >\n {indicatorBlock}\n </div>,\n document.body\n );\n }\n\n return (\n <div {...a11yProps} className={cn(\"inline-flex\", className)}>\n {indicatorBlock}\n </div>\n );\n}\n","import type { ColorRole, Size } from \"@mari-ui/core\";\n\n/** SVG `stroke` rengi — Tailwind tarayıcısı için literal (bkz. lib/colorClasses). */\nexport const strokeClass: Record<ColorRole, string> = {\n primary: \"stroke-mari-primary\",\n accent: \"stroke-mari-accent\",\n success: \"stroke-mari-success\",\n error: \"stroke-mari-error\",\n warning: \"stroke-mari-warning\",\n info: \"stroke-mari-info\",\n neutral: \"stroke-mari-neutral\",\n};\n\n/*\n * SVG'nin iç koordinat sistemi (viewBox birimi) — ekrandaki boyut `SPINNER_SIZE`.\n * eskiden `width/height` bu sayılarla px'ti; kök font büyüyünce\n * (4K, erişilebilirlik yazı boyutu) spinner küçük kalıyordu (px yasak kuralı).\n */\nexport const SPINNER_VIEWBOX: Record<Size, number> = { sm: 16, md: 24, lg: 40 };\nexport const SPINNER_SIZE: Record<Size, string> = { sm: \"1rem\", md: \"1.5rem\", lg: \"2.5rem\" };\n/** Halka kalınlığı (viewBox birimi) çapla birlikte — küçükte ince çizgi kaybolmasın. */\nexport const STROKE_WIDTH: Record<Size, number> = { sm: 2, md: 2.5, lg: 3.5 };\nexport const TIP_CLASS: Record<Size, string> = { sm: \"text-xs\", md: \"text-sm\", lg: \"text-base\" };\n\nexport function clampPercent(percent: number | undefined): number {\n return Math.min(100, Math.max(0, percent ?? 0));\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
skeletonBoxProps
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-VKN374SD.js";
|
|
6
6
|
|
|
7
7
|
// src/lib/date/index.ts
|
|
8
8
|
var DEFAULT_LOCALE = "tr-TR";
|
|
@@ -446,4 +446,4 @@ export {
|
|
|
446
446
|
CellGrid,
|
|
447
447
|
DayGrid
|
|
448
448
|
};
|
|
449
|
-
//# sourceMappingURL=chunk-
|
|
449
|
+
//# sourceMappingURL=chunk-C3QWJFSE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/date/index.ts","../src/calendar/_components/CellGrid.tsx","../src/calendar/_components/DayGrid.tsx"],"sourcesContent":["/**\n * Calendar / DatePicker / TimePicker'ın ortak tarih motoru.\n * Bağımlılık yok: yerel `Date` + `Intl` (varsayılan yerel `tr-TR`). Tüm\n * hesaplar YEREL saatte; gün karşılaştırmaları saat bileşenini yok sayar.\n */\n\nexport const DEFAULT_LOCALE = \"tr-TR\";\n/** Haftanın ilk günü: 1 = Pazartesi (Türkiye), 0 = Pazar. */\nexport type WeekStart = 0 | 1;\n\nexport const startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\nexport const startOfMonth = (d: Date) => new Date(d.getFullYear(), d.getMonth(), 1);\nexport const daysInMonth = (year: number, month: number) => new Date(year, month + 1, 0).getDate();\n\nexport function addDays(d: Date, n: number): Date {\n const r = new Date(d);\n r.setDate(r.getDate() + n);\n return r;\n}\n\n/** Ay ekler; hedef ayda o gün yoksa ayın son gününe çeker (31 Ocak + 1 ay = 28/29 Şubat). */\nexport function addMonths(d: Date, n: number): Date {\n const total = d.getFullYear() * 12 + d.getMonth() + n;\n const year = Math.floor(total / 12);\n const month = total - year * 12;\n const day = Math.min(d.getDate(), daysInMonth(year, month));\n return new Date(year, month, day, d.getHours(), d.getMinutes(), d.getSeconds());\n}\n\nexport const addYears = (d: Date, n: number) => addMonths(d, n * 12);\n\nexport const isSameDay = (a: Date | null | undefined, b: Date | null | undefined) =>\n !!a && !!b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\nexport const isSameMonth = (a: Date | null | undefined, b: Date | null | undefined) =>\n !!a && !!b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\nexport const isSameYear = (a: Date | null | undefined, b: Date | null | undefined) => !!a && !!b && a.getFullYear() === b.getFullYear();\n\n/** Gün düzeyinde karşılaştırma: <0, 0, >0. */\nexport const compareDay = (a: Date, b: Date) => startOfDay(a).getTime() - startOfDay(b).getTime();\n\n/** `d`, `a` ile `b` arasında mı (gün düzeyinde, uçlar dahil, sıra fark etmez). */\nexport function isBetweenDays(d: Date, a: Date, b: Date): boolean {\n const [lo, hi] = compareDay(a, b) <= 0 ? [a, b] : [b, a];\n return compareDay(d, lo) >= 0 && compareDay(d, hi) <= 0;\n}\n\nexport function startOfWeek(d: Date, weekStart: WeekStart = 1): Date {\n const diff = (d.getDay() - weekStart + 7) % 7;\n return startOfDay(addDays(d, -diff));\n}\n\nexport const endOfWeek = (d: Date, weekStart: WeekStart = 1) => addDays(startOfWeek(d, weekStart), 6);\n\n/** Ay görünümü: her zaman 6 hafta × 7 gün (yükseklik aydan aya zıplamasın). */\nexport function getMonthGrid(year: number, month: number, weekStart: WeekStart = 1): Date[][] {\n const first = startOfWeek(new Date(year, month, 1), weekStart);\n return Array.from({ length: 6 }, (_, w) => Array.from({ length: 7 }, (_, i) => addDays(first, w * 7 + i)));\n}\n\n/** ISO 8601 hafta numarası (Pazartesi başlangıç; yılın ilk Perşembesini içeren hafta 1). */\nexport function getISOWeek(d: Date): number {\n const t = startOfDay(d);\n t.setDate(t.getDate() + 3 - ((t.getDay() + 6) % 7));\n const firstThursday = new Date(t.getFullYear(), 0, 4);\n return 1 + Math.round(((t.getTime() - firstThursday.getTime()) / 86400000 - 3 + ((firstThursday.getDay() + 6) % 7)) / 7);\n}\n\n/* ─────────────────────────── Yerel adlar ─────────────────────────── */\n\nexport function monthNames(locale = DEFAULT_LOCALE, width: \"long\" | \"short\" = \"long\"): string[] {\n const fmt = new Intl.DateTimeFormat(locale, { month: width });\n return Array.from({ length: 12 }, (_, m) => fmt.format(new Date(2024, m, 1)));\n}\n\n/** Haftanın günleri, `weekStart`tan başlayarak. */\nexport function weekdayNames(locale = DEFAULT_LOCALE, weekStart: WeekStart = 1, width: \"long\" | \"short\" | \"narrow\" = \"short\"): string[] {\n const fmt = new Intl.DateTimeFormat(locale, { weekday: width });\n // 2024-01-07 bir Pazar.\n return Array.from({ length: 7 }, (_, i) => fmt.format(new Date(2024, 0, 7 + ((i + weekStart) % 7))));\n}\n\n/** Ekran okuyucu için tam tarih: \"1 Ekim 2026 Perşembe\". */\nexport function fullDateLabel(d: Date, locale = DEFAULT_LOCALE): string {\n return new Intl.DateTimeFormat(locale, { day: \"numeric\", month: \"long\", year: \"numeric\", weekday: \"long\" }).format(d);\n}\n\n/* ─────────────────────────── Biçim / ayrıştırma ─────────────────────────── */\n\n/**\n * Desteklenen belirteçler: `yyyy`, `MM`, `M`, `dd`, `d`, `HH`, `H`, `mm`,\n * `ss`, `MMMM` (ay adı), `MMM` (kısa ay adı), `EEEE`/`EEE` (gün adı).\n * Diğer karakterler olduğu gibi yazılır.\n */\nconst TOKEN_RE = /yyyy|MMMM|MMM|MM|M|dd|d|HH|H|mm|ss|EEEE|EEE/g;\n\nconst pad = (n: number, len = 2) => String(n).padStart(len, \"0\");\n\nexport function formatDate(d: Date, pattern: string, locale = DEFAULT_LOCALE): string {\n return pattern.replace(TOKEN_RE, (token) => {\n switch (token) {\n case \"yyyy\":\n return pad(d.getFullYear(), 4);\n case \"MMMM\":\n return monthNames(locale, \"long\")[d.getMonth()]!;\n case \"MMM\":\n return monthNames(locale, \"short\")[d.getMonth()]!;\n case \"MM\":\n return pad(d.getMonth() + 1);\n case \"M\":\n return String(d.getMonth() + 1);\n case \"dd\":\n return pad(d.getDate());\n case \"d\":\n return String(d.getDate());\n case \"HH\":\n return pad(d.getHours());\n case \"H\":\n return String(d.getHours());\n case \"mm\":\n return pad(d.getMinutes());\n case \"ss\":\n return pad(d.getSeconds());\n case \"EEEE\":\n return new Intl.DateTimeFormat(locale, { weekday: \"long\" }).format(d);\n default:\n return new Intl.DateTimeFormat(locale, { weekday: \"short\" }).format(d);\n }\n });\n}\n\nconst NUMERIC: Record<string, string> = { yyyy: \"(\\\\d{4})\", MM: \"(\\\\d{1,2})\", M: \"(\\\\d{1,2})\", dd: \"(\\\\d{1,2})\", d: \"(\\\\d{1,2})\", HH: \"(\\\\d{1,2})\", H: \"(\\\\d{1,2})\", mm: \"(\\\\d{1,2})\", ss: \"(\\\\d{1,2})\" };\nconst escapeRe = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n/**\n * Sayısal desenle yazılmış metni çözer (ay/gün adı içeren desen çözülmez).\n * Kesin: 31.02.2026 gibi var olmayan tarih `null`. Desende olmayan alanlar\n * `reference`tan (varsayılan: bugün 00:00) alınır. Ayraç olarak `.`, `/`, `-`\n * birbirinin yerine kabul edilir; tek haneli gün/ay (1.2.2026) da olur.\n */\nexport function parseDate(text: string, pattern: string, reference: Date = startOfDay(new Date())): Date | null {\n const tokens: string[] = [];\n let re = \"\";\n let last = 0;\n for (const m of pattern.matchAll(TOKEN_RE)) {\n const literal = pattern.slice(last, m.index);\n re += escapeRe(literal).replace(/\\\\\\.|\\/|-/g, \"[./-]\");\n const group = NUMERIC[m[0]];\n if (!group) return null;\n re += group;\n tokens.push(m[0]);\n last = m.index! + m[0].length;\n }\n re += escapeRe(pattern.slice(last)).replace(/\\\\\\.|\\/|-/g, \"[./-]\");\n const match = new RegExp(`^\\\\s*${re}\\\\s*$`).exec(text);\n if (!match) return null;\n const parts = { y: reference.getFullYear(), M: reference.getMonth() + 1, d: reference.getDate(), H: reference.getHours(), m: reference.getMinutes(), s: reference.getSeconds() };\n tokens.forEach((t, i) => {\n const v = Number(match[i + 1]);\n if (t === \"yyyy\") parts.y = v;\n else if (t.startsWith(\"M\")) parts.M = v;\n else if (t.startsWith(\"d\")) parts.d = v;\n else if (t.startsWith(\"H\")) parts.H = v;\n else if (t === \"mm\") parts.m = v;\n else parts.s = v;\n });\n if (parts.M < 1 || parts.M > 12 || parts.d < 1 || parts.d > daysInMonth(parts.y, parts.M - 1)) return null;\n if (parts.H > 23 || parts.m > 59 || parts.s > 59) return null;\n return new Date(parts.y, parts.M - 1, parts.d, parts.H, parts.m, parts.s);\n}\n\n/* ─────────────────────────── Klavye (APG date grid) ─────────────────────────── */\n\n/**\n * ←/→ gün, ↑/↓ hafta, Home/End haftanın başı/sonu, PageUp/PageDown ay\n * (Shift ile yıl). Tanınmayan tuş → `null`.\n */\nexport function dayGridKeyStep(d: Date, key: string, shift: boolean, weekStart: WeekStart = 1): Date | null {\n switch (key) {\n case \"ArrowLeft\":\n return addDays(d, -1);\n case \"ArrowRight\":\n return addDays(d, 1);\n case \"ArrowUp\":\n return addDays(d, -7);\n case \"ArrowDown\":\n return addDays(d, 7);\n case \"Home\":\n return startOfWeek(d, weekStart);\n case \"End\":\n return endOfWeek(d, weekStart);\n case \"PageUp\":\n return shift ? addYears(d, -1) : addMonths(d, -1);\n case \"PageDown\":\n return shift ? addYears(d, 1) : addMonths(d, 1);\n default:\n return null;\n }\n}\n\n/** Ay/yıl ızgarası (3 sütun): ←/→ ±1, ↑/↓ ±3, Home/End satır başı/sonu. Değer bir indekstir. */\nexport function cellGridKeyStep(index: number, key: string, columns = 3): number | null {\n const map: Record<string, number> = { ArrowLeft: -1, ArrowRight: 1, ArrowUp: -columns, ArrowDown: columns };\n if (key in map) return index + map[key]!;\n if (key === \"Home\") return index - (index % columns);\n if (key === \"End\") return index - (index % columns) + columns - 1;\n return null;\n}\n\n/** Sınırlar içinde mi (gün düzeyinde). */\nexport function isWithin(d: Date, min?: Date | null, max?: Date | null): boolean {\n if (min && compareDay(d, min) < 0) return false;\n if (max && compareDay(d, max) > 0) return false;\n return true;\n}\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport { skeletonBoxProps } from \"../../lib/skeleton\";\nimport { cellGridKeyStep } from \"../../lib/date\";\n\nexport interface GridCell {\n key: string;\n /** Hücrede görünen (ör. \"Eki\", \"2026\"). */\n label: React.ReactNode;\n /** Ekran okuyucu adı (ör. \"Ekim 2026\"). */\n fullLabel: string;\n selected: boolean;\n current: boolean;\n disabled: boolean;\n /** Önceki/sonraki döneme ait (on yılın dışındaki yıllar). */\n outside?: boolean;\n}\n\nexport interface CellGridProps {\n cells: GridCell[];\n focusedIndex: number;\n /** Odak ızgara dışına taşarsa (ör. -1 ya da 12) kapsayıcı sayfayı değiştirir. */\n onFocusIndex: (index: number) => void;\n onSelect: (index: number) => void;\n label: string;\n columns?: number;\n variant?: \"compact\" | \"full\";\n /** Hücreye ek içerik (yalnız `full`). */\n cellRender?: (index: number) => React.ReactNode;\n takeFocus?: boolean;\n /** PageUp/PageDown: sayfa (yıl / on yıl) değiştir. */\n onPage?: (delta: -1 | 1) => void;\n skeleton?: boolean;\n}\n\nfunction GridCellView({ cell, focused, full, content, onClick }: Readonly<{ cell: GridCell; focused: boolean; full: boolean; content: React.ReactNode; onClick: () => void }>) {\n const solid = cell.selected && !full;\n return (\n <td\n role=\"gridcell\"\n tabIndex={focused ? 0 : -1}\n aria-label={full ? undefined : cell.fullLabel}\n aria-selected={cell.selected}\n aria-disabled={cell.disabled || undefined}\n aria-current={cell.current ? \"date\" : undefined}\n onClick={onClick}\n className={cn(\n \"group relative cursor-pointer p-1 outline-none\",\n cell.disabled && \"cursor-not-allowed\",\n \"[&:focus-visible>div]:outline-2 [&:focus-visible>div]:outline-offset-1 [&:focus-visible>div]:outline-mari-ring\"\n )}\n >\n <div\n className={cn(\n \"rounded-md transition-colors\",\n full ? \"flex h-24 flex-col gap-1 border-t-2 p-1.5 text-left max-sm:h-16\" : \"flex h-9 items-center justify-center pointer-coarse:h-11\",\n solid && \"bg-mari-primary-solid font-medium text-mari-primary-solid-contrast\",\n cell.selected && full && \"border-mari-primary bg-mari-primary-subtle\",\n !cell.selected && full && \"border-mari-border\",\n !cell.selected && !cell.disabled && \"group-hover:bg-mari-surface-alt\",\n !cell.selected && cell.current && !full && \"font-semibold text-mari-primary ring-1 ring-mari-primary ring-inset\",\n cell.outside && !cell.selected && \"text-mari-muted\",\n cell.disabled && \"text-mari-disabled line-through\"\n )}\n >\n {full ? (\n <>\n <span aria-hidden className={cn(\"self-end\", cell.current && \"font-semibold text-mari-primary\")}>\n {cell.label}\n </span>\n <span className=\"sr-only\">{cell.fullLabel}</span>\n {content && <div className=\"min-h-0 flex-1 overflow-hidden text-xs\">{content}</div>}\n </>\n ) : (\n cell.label\n )}\n </div>\n </td>\n );\n}\n\n/** Ay ve yıl seçimi için 3 sütunlu APG ızgarası (roving tabindex). */\nexport function CellGrid({ cells, focusedIndex, onFocusIndex, onSelect, label, columns = 3, variant = \"compact\", cellRender, takeFocus = false, onPage, skeleton = false }: Readonly<CellGridProps>) {\n const tableRef = useRef<HTMLTableElement>(null);\n const full = variant === \"full\";\n // Klavyeyle gezinince odak yeni hücreye taşınır — ay/sayfa değişince eski hücre DOM'dan\n // kalkar ve odak <body>'ye düşerdi, `contains(activeElement)` bunu yakalayamazdı.\n const navigating = useRef(false);\n useEffect(() => {\n const table = tableRef.current;\n if (!table) return;\n if (!takeFocus && !navigating.current && !table.contains(document.activeElement)) return;\n navigating.current = false;\n table.querySelector<HTMLElement>('[tabindex=\"0\"]')?.focus();\n }, [focusedIndex, takeFocus]);\n\n const rows: GridCell[][] = [];\n for (let i = 0; i < cells.length; i += columns) rows.push(cells.slice(i, i + columns));\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (!cells[focusedIndex]?.disabled) onSelect(focusedIndex);\n return;\n }\n if ((e.key === \"PageUp\" || e.key === \"PageDown\") && onPage) {\n e.preventDefault();\n navigating.current = true;\n onPage(e.key === \"PageUp\" ? -1 : 1);\n return;\n }\n const next = cellGridKeyStep(focusedIndex, e.key, columns);\n if (next === null) return;\n e.preventDefault();\n navigating.current = true;\n onFocusIndex(next);\n };\n\n return (\n <table\n ref={tableRef}\n role={skeleton ? undefined : \"grid\"}\n aria-label={skeleton ? undefined : label}\n aria-hidden={skeleton || undefined}\n onKeyDown={skeleton ? undefined : onKeyDown}\n className=\"w-full border-collapse text-sm\"\n >\n <tbody>\n {rows.map((row, r) => (\n // Satırlar konumsal ve sabit (3×4).\n <tr key={r}>\n {row.map((cell, c) => {\n const index = r * columns + c;\n if (skeleton) {\n return (\n <td key={cell.key} className=\"p-1\">\n <div className={cn(\"flex rounded-md\", full ? \"h-24 flex-col border-t-2 border-mari-border p-1.5\" : \"h-9 items-center justify-center\")}>\n <span {...skeletonBoxProps(cn(\"rounded-sm\", full && \"self-end\"))}>{cell.label}</span>\n </div>\n </td>\n );\n }\n return (\n <GridCellView\n key={cell.key}\n cell={cell}\n focused={index === focusedIndex}\n full={full}\n content={cellRender?.(index)}\n onClick={() => {\n onFocusIndex(index);\n if (!cell.disabled) onSelect(index);\n }}\n />\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport { skeletonBoxProps } from \"../../lib/skeleton\";\nimport {\n dayGridKeyStep,\n fullDateLabel,\n getISOWeek,\n getMonthGrid,\n isSameDay,\n isSameMonth,\n weekdayNames,\n type WeekStart,\n} from \"../../lib/date\";\n\nexport type RangePosition = \"start\" | \"end\" | \"middle\" | \"single\";\n\nexport interface DayCellInfo {\n date: Date;\n selected: boolean;\n today: boolean;\n disabled: boolean;\n outside: boolean;\n range: RangePosition | null;\n}\n\nexport interface DayGridProps {\n /** Gösterilen ay (gün önemsiz). */\n view: Date;\n /** Klavye odağının (roving tabindex) bulunduğu gün. */\n focused: Date;\n onFocusChange: (date: Date) => void;\n isSelected: (date: Date) => boolean;\n /** Aralık seçiminde günün konumu (vurgu için). */\n rangeOf?: (date: Date) => RangePosition | null;\n isDisabled: (date: Date) => boolean;\n onSelect: (date: Date) => void;\n /** Fareyle üzerine gelinen gün (aralık önizlemesi). */\n onHover?: (date: Date | null) => void;\n weekStart?: WeekStart;\n locale?: string;\n /** `full`: büyük hücreler, içerik alanı (Calendar fullscreen). */\n variant?: \"compact\" | \"full\";\n showWeek?: boolean;\n /** Hücreye ek içerik (yalnız `full`). */\n cellRender?: (info: DayCellInfo) => React.ReactNode;\n /** Izgaranın adı — ör. \"Ekim 2026\". */\n label: string;\n /** Odak ızgaradaysa ya da `true` ise odaklanan gün DOM odağını alır. */\n takeFocus?: boolean;\n /** Aynı ızgara, gün numaraları iskelet blok; etkileşim yok, erişilebilirlik ağacından gizli. */\n skeleton?: boolean;\n}\n\nconst RANGE_BG: Record<RangePosition, string> = {\n start: \"before:absolute before:inset-y-0.5 before:left-1/2 before:right-0 before:bg-mari-primary-subtle\",\n end: \"before:absolute before:inset-y-0.5 before:left-0 before:right-1/2 before:bg-mari-primary-subtle\",\n middle: \"before:absolute before:inset-y-0.5 before:inset-x-0 before:bg-mari-primary-subtle\",\n single: \"\",\n};\n\nfunction compactDayClass(info: DayCellInfo) {\n const strong = info.selected || info.range === \"start\" || info.range === \"end\" || info.range === \"single\";\n return cn(\n \"relative z-10 mx-auto flex size-8 items-center justify-center rounded-md tabular-nums transition-colors\",\n strong && \"bg-mari-primary-solid font-medium text-mari-primary-solid-contrast\",\n !strong && info.today && \"font-semibold text-mari-primary ring-1 ring-mari-primary ring-inset\",\n !strong && !info.disabled && \"group-hover:bg-mari-surface-alt\",\n info.outside && !strong && \"text-mari-muted\",\n info.disabled && \"text-mari-disabled line-through decoration-mari-disabled/60\"\n );\n}\n\n/**\n * Tam ekran hücre: numara + `cellRender` içeriği. Dar ekranda (< sm) 7 sütuna\n * içerik sığmaz → hücre kısalır, içerik görsel olarak bir noktaya iner ama\n * ekran okuyucu için DOM'da kalır (`sr-only`); ayrıntı gün seçilince\n * gösterilir (mobil takvim kalıbı).\n */\nfunction FullDayContent({ info, locale, cellRender }: Readonly<{ info: DayCellInfo; locale?: string; cellRender?: (info: DayCellInfo) => React.ReactNode }>) {\n const content = cellRender?.(info);\n const hasContent = content !== undefined && content !== null && content !== false && content !== \"\";\n return (\n <div\n className={cn(\n \"m-0.5 flex h-24 flex-col gap-1 overflow-hidden rounded-md border-t-2 p-1.5 text-left transition-colors max-sm:h-12 max-sm:items-center max-sm:gap-0.5 max-sm:p-1\",\n info.selected ? \"border-mari-primary bg-mari-primary-subtle\" : \"border-mari-border\",\n !info.selected && !info.disabled && \"group-hover:bg-mari-surface-alt\",\n info.outside && \"text-mari-muted\",\n info.disabled && \"bg-mari-surface-alt text-mari-disabled\"\n )}\n >\n <span aria-hidden className={cn(\"self-end text-sm tabular-nums max-sm:self-center\", info.today && \"rounded-sm bg-mari-primary-solid px-1 font-semibold text-mari-primary-solid-contrast\")}>\n {info.date.getDate()}\n </span>\n <span className=\"sr-only\">{fullDateLabel(info.date, locale)}</span>\n {/* Kaydırılmaz (hücre içi kaydırma klavyeyle erişilemezdi): içerik özet olmalı, fazlası \"+N\". */}\n {hasContent && <div className=\"min-h-0 flex-1 overflow-hidden text-xs max-sm:sr-only\">{content}</div>}\n {hasContent && <span aria-hidden className=\"size-1.5 rounded-full bg-mari-primary sm:hidden\" />}\n </div>\n );\n}\n\n/** İskelet gün hücresi: gerçek hücreyle aynı kutu, numara yerine blok. */\nfunction SkeletonDay({ date, full }: Readonly<{ date: Date; full: boolean }>) {\n if (full) {\n return (\n <td className=\"p-0 align-top\">\n <div className=\"m-0.5 flex h-24 flex-col rounded-md border-t-2 border-mari-border p-1.5 max-sm:h-12\">\n <span {...skeletonBoxProps(\"self-end rounded-sm text-sm tabular-nums\")}>{date.getDate()}</span>\n </div>\n </td>\n );\n }\n return (\n <td className=\"p-0\">\n <div className=\"py-0.5 pointer-coarse:py-1.5\">\n <span {...skeletonBoxProps(\"mx-auto flex size-8 items-center justify-center rounded-md tabular-nums\")}>{date.getDate()}</span>\n </div>\n </td>\n );\n}\n\n/**\n * APG \"date grid\": `<table role=\"grid\">`, sütun başlıkları gün\n * adları (tam adı `abbr`), hücreler roving tabindex (yalnız odaklı gün\n * sekme durağı). ←/→ gün, ↑/↓ hafta, Home/End hafta başı/sonu, PageUp/Down ay\n * (Shift ile yıl), Enter/Boşluk seçer. Ay dışına taşan odak `onFocusChange`\n * ile bildirilir — görünen ayı değiştirmek kapsayıcının işi.\n */\nexport function DayGrid({\n view,\n focused,\n onFocusChange,\n isSelected,\n rangeOf,\n isDisabled,\n onSelect,\n onHover,\n weekStart = 1,\n locale,\n variant = \"compact\",\n showWeek = false,\n cellRender,\n label,\n takeFocus = false,\n skeleton = false,\n}: Readonly<DayGridProps>) {\n const tableRef = useRef<HTMLTableElement>(null);\n const today = new Date();\n const weeks = getMonthGrid(view.getFullYear(), view.getMonth(), weekStart);\n // Türkçe dar adlar belirsiz (P/S/Ç/P/C/C/P — iki P, iki C) → her zaman kısa ad.\n const shortNames = weekdayNames(locale, weekStart, \"short\");\n const longNames = weekdayNames(locale, weekStart, \"long\");\n const full = variant === \"full\";\n\n // Odak ızgaranın içindeyken (klavye gezinmesi) ya da açılışta odaklı güne DOM odağı.\n // Klavyeyle gezinince odak yeni hücreye taşınır — ay/sayfa değişince eski hücre DOM'dan\n // kalkar ve odak <body>'ye düşerdi, `contains(activeElement)` bunu yakalayamazdı.\n const navigating = useRef(false);\n useEffect(() => {\n const table = tableRef.current;\n if (!table) return;\n if (!takeFocus && !navigating.current && !table.contains(document.activeElement)) return;\n navigating.current = false;\n table.querySelector<HTMLElement>('[tabindex=\"0\"]')?.focus();\n }, [focused, takeFocus]);\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (!isDisabled(focused)) onSelect(focused);\n return;\n }\n const next = dayGridKeyStep(focused, e.key, e.shiftKey, weekStart);\n if (!next) return;\n e.preventDefault();\n navigating.current = true;\n onFocusChange(next);\n };\n\n return (\n <table\n ref={tableRef}\n role={skeleton ? undefined : \"grid\"}\n aria-label={skeleton ? undefined : label}\n aria-hidden={skeleton || undefined}\n onKeyDown={skeleton ? undefined : onKeyDown}\n onMouseLeave={() => onHover?.(null)}\n className={cn(\"w-full border-collapse text-sm\", full ? \"table-fixed\" : \"\")}\n >\n <thead>\n <tr>\n {showWeek && (\n <th scope=\"col\" abbr=\"Hafta\" className=\"relative w-8 pb-1 text-xs font-normal text-mari-muted\">\n <span aria-hidden>Hf</span>\n <span className=\"sr-only\">Hafta</span>\n </th>\n )}\n {shortNames.map((name, i) => (\n <th key={longNames[i]} scope=\"col\" abbr={longNames[i]} className={cn(\"relative pb-1 text-xs font-normal text-mari-muted\", full ? \"pr-2 text-right\" : \"text-center\")}>\n <span aria-hidden>{name}</span>\n <span className=\"sr-only\">{longNames[i]}</span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeks.map((week) => (\n <tr key={week[0]!.toDateString()}>\n {showWeek && (\n <td className=\"relative text-center text-xs text-mari-muted tabular-nums\">\n {getISOWeek(week[3]!)}\n </td>\n )}\n {week.map((date) => {\n const info: DayCellInfo = {\n date,\n selected: isSelected(date),\n today: isSameDay(date, today),\n disabled: isDisabled(date),\n outside: !isSameMonth(date, view),\n range: rangeOf?.(date) ?? null,\n };\n const isFocused = !skeleton && isSameDay(date, focused);\n if (skeleton) return <SkeletonDay key={date.toDateString()} date={date} full={full} />;\n return (\n <td\n key={date.toDateString()}\n role=\"gridcell\"\n tabIndex={isFocused ? 0 : -1}\n // Kompakt hücrede ad = tam tarih. Tam ekranda aria-label hücre İÇERİĞİNİ (etkinlikler)\n // gizlerdi → ad içerikten: görünmez tam tarih + içerik.\n aria-label={full ? undefined : fullDateLabel(date, locale)}\n aria-selected={info.selected || info.range !== null}\n aria-disabled={info.disabled || undefined}\n aria-current={info.today ? \"date\" : undefined}\n onClick={() => {\n onFocusChange(date);\n if (!info.disabled) onSelect(date);\n }}\n onMouseEnter={() => onHover?.(date)}\n className={cn(\n \"group relative cursor-pointer p-0 outline-none\",\n info.disabled && \"cursor-not-allowed\",\n // Odak halkası hücrenin iç kutusunda (yuvarlak gün kutusu) görünsün.\n full\n ? \"[&:focus-visible>div]:outline-2 [&:focus-visible>div]:outline-offset-1 [&:focus-visible>div]:outline-mari-ring\"\n : \"[&:focus-visible>div>span]:outline-2 [&:focus-visible>div>span]:outline-offset-1 [&:focus-visible>div>span]:outline-mari-ring\",\n !full && info.range && RANGE_BG[info.range],\n full && \"align-top\"\n )}\n >\n {full ? (\n <FullDayContent info={info} locale={locale} cellRender={cellRender} />\n ) : (\n <div className=\"py-0.5 pointer-coarse:py-1.5\">\n <span className={compactDayClass(info)}>{date.getDate()}</span>\n </div>\n )}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n"],"mappings":"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","names":["_","useEffect","useRef","cn","jsx","jsxs","cn","useRef","useEffect"]}
|
|
@@ -4,26 +4,26 @@ import {
|
|
|
4
4
|
findAutofocus,
|
|
5
5
|
firstFocusable,
|
|
6
6
|
getFocusables
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-OYDG6C54.js";
|
|
8
8
|
import {
|
|
9
9
|
ContentSkeleton
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-RMNV2CE2.js";
|
|
11
11
|
import {
|
|
12
12
|
SkeletonBlock
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-TSFAAREV.js";
|
|
14
14
|
import {
|
|
15
15
|
FLOATING_ARROW_GAP_PX,
|
|
16
16
|
FLOATING_ARROW_INSET_PX,
|
|
17
17
|
FLOATING_EDGE_PX,
|
|
18
18
|
FLOATING_GAP_PX,
|
|
19
19
|
FloatingArrow
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-OAWUZIIN.js";
|
|
21
21
|
import {
|
|
22
22
|
useFloatingPosition
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-GTNCXOUL.js";
|
|
24
24
|
import {
|
|
25
25
|
elevationClass
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-MT4VH7QV.js";
|
|
27
27
|
|
|
28
28
|
// src/popover/Popover.tsx
|
|
29
29
|
import React, { isValidElement, useEffect, useId, useRef } from "react";
|
|
@@ -233,4 +233,4 @@ function PopoverPanel({
|
|
|
233
233
|
export {
|
|
234
234
|
Popover
|
|
235
235
|
};
|
|
236
|
-
//# sourceMappingURL=chunk-
|
|
236
|
+
//# sourceMappingURL=chunk-CNWRDTEW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/popover/Popover.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { isValidElement, useEffect, useId, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn, useControllableState } from \"@mari-ui/core\";\nimport { ContentSkeleton } from \"../lib/ContentSkeleton\";\nimport { elevationClass } from \"../lib/elevationClass\";\nimport { FLOATING_ARROW_GAP_PX, FLOATING_ARROW_INSET_PX, FLOATING_EDGE_PX, FLOATING_GAP_PX, FloatingArrow } from \"../lib/FloatingArrow\";\nimport { findAutofocus, firstFocusable, getFocusables } from \"../lib/overlay\";\nimport { useFloatingPosition } from \"../lib/useFloatingPosition\";\nimport { SkeletonBlock } from \"../skeleton\";\nimport type { PopoverProps } from \"./types\";\n\nexport type { PopoverProps };\n\nconst HOVER_OPEN_MS = 100;\nconst HOVER_CLOSE_MS = 150;\n\nconst PLACEHOLDER = (\n <div className=\"flex flex-col gap-2 py-0.5\">\n <SkeletonBlock active width=\"10rem\" height=\"0.875rem\" radius=\"sm\" />\n <SkeletonBlock active width=\"14rem\" height=\"0.75rem\" radius=\"sm\" />\n </div>\n);\n\ntype ElRef = React.RefObject<HTMLElement | null>;\n\n/** Sarmalayıcının içindeki gerçek tetikleyici (odak buraya döner). */\nconst triggerEl = (anchor: HTMLElement | null) => (anchor ? (firstFocusable(anchor) ?? anchor) : null);\n\n/**\n * Kapatma yolları: Escape (odak tetikleyiciye döner), dışarı tıklama (odağa\n * dokunmaz — kullanıcı başka bir yere tıkladı), panelin kenarından Tab ile\n * çıkma (odak tetikleyiciye döner, Tab doğal akışla SONRAKİ öğeye geçer;\n * Shift+Tab tetikleyicide kalır).\n */\nfunction useDismiss(open: boolean, anchorRef: ElRef, panelRef: ElRef, close: () => void) {\n const closeRef = useRef(close);\n closeRef.current = close;\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (e: PointerEvent) => {\n const target = e.target as Node;\n if (anchorRef.current?.contains(target) || panelRef.current?.contains(target)) return;\n closeRef.current();\n };\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n // Modal içinde: yalnız Popover kapansın (Modal `defaultPrevented`ı görür).\n e.preventDefault();\n const focusWasInside = panelRef.current?.contains(document.activeElement) || anchorRef.current?.contains(document.activeElement);\n closeRef.current();\n if (focusWasInside) triggerEl(anchorRef.current)?.focus();\n return;\n }\n const panel = panelRef.current;\n if (e.key !== \"Tab\" || !panel?.contains(document.activeElement)) return;\n const items = getFocusables(panel);\n const atEnd = e.shiftKey ? document.activeElement === (items[0] ?? null) || items.length === 0 : document.activeElement === (items.at(-1) ?? null) || items.length === 0;\n if (!atEnd) return;\n // Panel body'ye portal edildiğinden DOM sırası tetikleyiciden sonra değil: önce tetikleyiciye dön.\n triggerEl(anchorRef.current)?.focus();\n if (e.shiftKey) e.preventDefault();\n closeRef.current();\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown, true);\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown, true);\n };\n }, [open, anchorRef, panelRef]);\n}\n\n/** Tıklamayla açılınca odak panele: `data-autofocus` → ilk odaklanabilir → panelin kendisi. Konum ölçülene kadar beklenir (görünmez öğeye odak verilemez). */\nfunction useFocusOnOpen(open: boolean, positioned: boolean, moveFocus: boolean, panelRef: ElRef) {\n const done = useRef(false);\n useEffect(() => {\n if (!open) {\n done.current = false;\n return;\n }\n if (!moveFocus || !positioned || done.current) return;\n done.current = true;\n const panel = panelRef.current;\n if (panel) (findAutofocus(panel) ?? firstFocusable(panel) ?? panel).focus();\n }, [open, positioned, moveFocus, panelRef]);\n}\n\n/**\n * Panel, odak İÇİNDEYKEN kapanırsa (içindeki \"Vazgeç\"/\"Uygula\" gibi bir\n * düğmeyle ya da kontrollü `open` ile) odak tetikleyiciye döner — panel DOM'dan\n * kalkınca odak aksi halde `<body>`ye düşüyordu. Dışarı tıklamada odak zaten\n * tıklanan yere geçtiği için dokunulmaz.\n */\nfunction useReturnFocus(open: boolean, anchorRef: ElRef) {\n const focusInside = useRef(false);\n useEffect(() => {\n if (open || !focusInside.current) return;\n focusInside.current = false;\n triggerEl(anchorRef.current)?.focus();\n }, [open, anchorRef]);\n return {\n onFocus: () => (focusInside.current = true),\n onBlur: (e: React.FocusEvent) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node)) focusInside.current = false;\n },\n };\n}\n\n/** Üzerine gelme niyeti: açarken kısa gecikme, kapatırken tetikleyiciden panele geçecek kadar süre. */\nfunction useHoverIntent(setOpen: (open: boolean) => void) {\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(timer.current), []);\n const schedule = (next: boolean, ms: number) => {\n clearTimeout(timer.current);\n timer.current = setTimeout(() => setOpen(next), ms);\n };\n return { enter: () => schedule(true, HOVER_OPEN_MS), leave: () => schedule(false, HOVER_CLOSE_MS), cancel: () => clearTimeout(timer.current) };\n}\n\n/*\n * yapı ant.design Popover'dan: başlık + etkileşimli içerik taşıyan\n * yüzen panel. Tooltip'ten farkı: içinde düğme/form olabilir, bu yüzden\n * gerçek bir (modal olmayan) dialog. Panel, konum ve ok Dropdown ile ortak\n * (`useFloatingPosition`, `FloatingArrow`).\n */\n/**\n * Erişilebilirlik: tetikleyici `aria-expanded` + `aria-haspopup=\"dialog\"` +\n * (açıkken) `aria-controls`; panel `role=\"dialog\"`, başlık adıdır. Tıklamayla\n * açılınca odak panele geçer; Escape/dışarı tıklama/kenardan Tab kapatır.\n * `hover` modunda klavye odağı da açar (yalnız fareyle erişilen içerik olmasın).\n */\nexport function Popover({\n title,\n content,\n children,\n trigger = \"click\",\n placement = \"top\",\n arrow = true,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n role = \"dialog\",\n className,\n skeleton = false,\n}: Readonly<PopoverProps>) {\n const [open, setOpen] = useControllableState<boolean>({ value: openProp, defaultValue: defaultOpen, onChange: onOpenChange });\n const anchorRef = useRef<HTMLSpanElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const panelId = useId();\n const titleId = useId();\n const coords = useFloatingPosition(open, anchorRef, panelRef, {\n placement,\n gap: arrow ? FLOATING_ARROW_GAP_PX : FLOATING_GAP_PX,\n edge: FLOATING_EDGE_PX,\n arrow: arrow ? { inset: FLOATING_ARROW_INSET_PX, pointAtCenter: false } : undefined,\n });\n const hover = useHoverIntent(setOpen);\n\n useDismiss(open, anchorRef, panelRef, () => setOpen(false));\n useFocusOnOpen(open, coords !== null, trigger === \"click\", panelRef);\n const trackFocus = useReturnFocus(open, anchorRef);\n\n const decorated = isValidElement<Record<string, unknown>>(children)\n ? React.cloneElement(children, {\n \"aria-expanded\": open,\n \"aria-haspopup\": \"dialog\",\n \"aria-controls\": open ? panelId : undefined,\n })\n : children;\n\n const triggerHandlers = {\n click: { onClick: () => setOpen(!open) },\n hover: { onMouseEnter: hover.enter, onMouseLeave: hover.leave, onFocus: () => setOpen(true), onBlur: (e: React.FocusEvent) => !panelRef.current?.contains(e.relatedTarget as Node) && hover.leave() },\n focus: { onFocus: () => setOpen(true), onBlur: (e: React.FocusEvent) => !panelRef.current?.contains(e.relatedTarget as Node) && setOpen(false) },\n }[trigger];\n\n return (\n <>\n {/* Sarmalayıcı etkileşimli değil — olaylar içindeki gerçek tetikleyiciden kabarır. */}\n <span ref={anchorRef} className=\"inline-flex\" {...triggerHandlers}>\n {decorated}\n </span>\n {open && (\n <PopoverPanel\n panelRef={panelRef}\n id={panelId}\n titleId={titleId}\n title={title}\n content={content}\n ariaLabel={ariaLabel}\n ariaLabelledBy={ariaLabelledBy}\n ariaDescribedBy={ariaDescribedBy}\n role={role}\n focusTracking={trackFocus}\n coords={coords}\n arrow={arrow}\n skeleton={skeleton}\n hover={trigger === \"hover\" ? hover : undefined}\n className={className}\n />\n )}\n </>\n );\n}\n\ninterface PopoverPanelProps {\n panelRef: React.RefObject<HTMLDivElement | null>;\n id: string;\n titleId: string;\n title: React.ReactNode;\n content: React.ReactNode;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n role: \"dialog\" | \"alertdialog\";\n focusTracking: ReturnType<typeof useReturnFocus>;\n coords: ReturnType<typeof useFloatingPosition>;\n arrow: boolean;\n skeleton: boolean;\n /** Yalnız `hover` modunda: panelin üstüne gelmek kapanmayı iptal eder. */\n hover?: ReturnType<typeof useHoverIntent>;\n className?: string;\n}\n\nfunction PopoverPanel({\n panelRef,\n id,\n titleId,\n title,\n content,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n role,\n focusTracking,\n coords,\n arrow,\n skeleton,\n hover,\n className,\n}: PopoverPanelProps) {\n if (typeof document === \"undefined\") return null;\n const labelledBy = ariaLabelledBy ?? (title ? titleId : undefined);\n return createPortal(\n <div\n ref={panelRef}\n id={id}\n role={role}\n tabIndex={-1}\n aria-labelledby={labelledBy}\n aria-label={labelledBy ? undefined : ariaLabel}\n aria-describedby={ariaDescribedBy}\n aria-busy={skeleton || undefined}\n onFocus={focusTracking.onFocus}\n onBlur={focusTracking.onBlur}\n onMouseEnter={hover?.cancel}\n onMouseLeave={hover?.leave}\n className={cn(\n \"fixed z-mari-dropdown w-max max-w-[min(22rem,calc(100vw-1rem))] rounded-lg bg-mari-surface p-3 text-sm text-mari-foreground outline-none\",\n \"transition-opacity duration-150 starting:opacity-0 motion-reduce:transition-none\",\n elevationClass.md,\n !coords && \"invisible\",\n className\n )}\n style={{ top: coords?.top ?? 0, left: coords?.left ?? 0 }}\n >\n {arrow && coords && <FloatingArrow side={coords.side} offset={coords.arrowOffset} />}\n <ContentSkeleton on={skeleton} fallback={PLACEHOLDER}>\n <div>\n {title && (\n <p id={titleId} className=\"mb-1 font-semibold\">\n {title}\n </p>\n )}\n {content}\n </div>\n </ContentSkeleton>\n </div>,\n document.body\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -3,14 +3,14 @@ import {
|
|
|
3
3
|
sizeClass,
|
|
4
4
|
touchTargetClass,
|
|
5
5
|
touchTargetSquareClass
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-POBOJBNJ.js";
|
|
7
7
|
import {
|
|
8
8
|
bgSubtleHoverClass,
|
|
9
9
|
colorVariantToClassName
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-6AMBZXZJ.js";
|
|
11
11
|
import {
|
|
12
12
|
skeletonBoxProps
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-VKN374SD.js";
|
|
14
14
|
|
|
15
15
|
// src/button/Button.tsx
|
|
16
16
|
import { forwardRef } from "react";
|
|
@@ -144,4 +144,4 @@ Button.displayName = "Button";
|
|
|
144
144
|
export {
|
|
145
145
|
Button
|
|
146
146
|
};
|
|
147
|
-
//# sourceMappingURL=chunk-
|
|
147
|
+
//# sourceMappingURL=chunk-CVKAGR3D.js.map
|
|
@@ -6,17 +6,17 @@ import {
|
|
|
6
6
|
FIELD_MOBILE_TEXT_CLASS,
|
|
7
7
|
getShapeClasses,
|
|
8
8
|
getVariantClasses
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-NENNFQEY.js";
|
|
10
10
|
import {
|
|
11
11
|
useFieldControl
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-NPFMPRII.js";
|
|
13
13
|
import {
|
|
14
14
|
sizeClass,
|
|
15
15
|
touchTargetClass
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-POBOJBNJ.js";
|
|
17
17
|
import {
|
|
18
18
|
skeletonBoxProps
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-VKN374SD.js";
|
|
20
20
|
|
|
21
21
|
// src/input-number/InputNumber.tsx
|
|
22
22
|
import { forwardRef, useEffect, useRef, useState } from "react";
|
|
@@ -341,4 +341,4 @@ function InputNumberInner({
|
|
|
341
341
|
export {
|
|
342
342
|
InputNumber
|
|
343
343
|
};
|
|
344
|
-
//# sourceMappingURL=chunk-
|
|
344
|
+
//# sourceMappingURL=chunk-CXIWRNSP.js.map
|