@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/pagination/Pagination.tsx","../src/pagination/utils.ts"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronsLeftIcon, ChevronsRightIcon, MoreHorizontalIcon } from \"lucide-react\";\nimport { cn, useControllableState, type ColorRole, type Size } from \"@mari-ui/core\";\nimport {\n bgSolidClass,\n bgSubtleClass,\n borderStrongColorClass,\n textClass,\n textSolidContrastClass,\n textSubtleContrastClass,\n} from \"../lib/colorClasses\";\nimport { touchTargetClass } from \"../lib/sizeClasses\";\nimport { skeletonFill } from \"../lib/skeleton\";\nimport { SkeletonSlot } from \"../lib/SkeletonSlot\";\nimport type { PaginationAlign, PaginationProps, PaginationVariant } from \"./types\";\nimport { clampPage, fitSiblingCount, getItemRange, getJumpSize, getPageAfterSizeChange, getPageItems, getTotalPages, resolvePageClickTarget } from \"./utils\";\n\n/**\n * Kapsayıcı genişliğini izleyip sığan komşu sayısını seçer (`-1` → `simple`).\n * Slot genişliği gerçek DOM'dan ölçülür (iki/üç basamaklı sayılar kareyi\n * genişletir) ve saklanır — `simple`e geçildiğinde de yeniden hesap yapılabilsin.\n * `ResizeObserver` yoksa (SSR, jsdom) istenen `siblingCount` aynen kullanılır.\n */\nfunction useFittedSiblings(rootRef: React.RefObject<HTMLDivElement | null>, navRef: React.RefObject<HTMLElement | null>, totalPages: number, siblingCount: number, size: Size): number {\n const [fitted, setFitted] = useState(siblingCount);\n const slotRef = useRef<{ width: number; gap: number } | null>(null);\n\n useEffect(() => {\n // Boyut değişince eski ölçü geçersiz.\n slotRef.current = null;\n setFitted(siblingCount);\n }, [siblingCount, size]);\n\n useEffect(() => {\n const root = rootRef.current;\n if (!root || typeof ResizeObserver === \"undefined\") return;\n const measure = () => {\n const list = navRef.current?.querySelector(\"ul\");\n if (list && list.children.length > 0) {\n const gap = Number.parseFloat(getComputedStyle(list).columnGap) || 0;\n slotRef.current = { width: (list.scrollWidth + gap) / list.children.length - gap, gap };\n }\n const slot = slotRef.current;\n if (!slot) return;\n setFitted(fitSiblingCount(root.clientWidth, slot.width, slot.gap, totalPages, siblingCount));\n };\n measure();\n const observer = new ResizeObserver(measure);\n observer.observe(root);\n return () => observer.disconnect();\n }, [rootRef, navRef, totalPages, siblingCount, size]);\n\n return fitted;\n}\n\nexport type { PaginationProps };\n\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100, 1000];\n\n/**\n * Yapı ant.design Pagination'dan (kare 32px öğeler, 8px aralık, \"…\" üzerine\n * gelince çift ok, hızlı atlama, simple mod), görünüm kendi token'larımızdan.\n * Öğeler `Button` yerine yerel bir `<button>` — Button'ın `px-*` dolgusu\n * sayı düğmelerini genişliğe göre farklı boyutlara itiyordu; burada her\n * öğe `min-w` = yükseklik olan bir karedir, iki basamaklı sayılar büyür.\n */\nconst itemSizeClass: Record<Size, string> = {\n sm: \"h-6 min-w-6 px-1 text-xs rounded-sm\",\n md: \"h-8 min-w-8 px-1.5 text-sm rounded-md\",\n lg: \"h-10 min-w-10 px-2 text-base rounded-md\",\n};\n\nconst gapClass: Record<Size, string> = {\n sm: \"gap-1\",\n md: \"gap-2\",\n lg: \"gap-2\",\n};\n\nconst textSizeClass: Record<Size, string> = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n};\n\nconst iconSize: Record<Size, number> = { sm: 14, md: 16, lg: 18 };\n\nconst alignClass: Record<PaginationAlign, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n};\n\nfunction activeClasses(color: ColorRole, variant: PaginationVariant): string {\n switch (variant) {\n case \"solid\":\n return cn(\"border-transparent\", bgSolidClass[color], textSolidContrastClass[color]);\n case \"soft\":\n return cn(\"border-transparent\", bgSubtleClass[color], textSubtleContrastClass[color]);\n default:\n return cn(\"bg-mari-surface\", borderStrongColorClass[color], textClass[color]);\n }\n}\n\nconst itemBaseClass =\n \"relative inline-flex shrink-0 items-center justify-center border tabular-nums select-none \" +\n \"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mari-ring\";\n/**\n * Dokunmatikte yalnızca DİKEY genişleme: öğeler arası 8px boşluk yatayda\n * 44px'e tamamlamaya yetmiyor, kare genişleme komşunun alanına binerdi.\n */\nconst itemTouchClass: Record<Size, string> = {\n sm: touchTargetClass.sm,\n md: touchTargetClass.md,\n lg: touchTargetClass.lg,\n};\n/** İskelette düğme: kendi kare kutusunda dolgu, içerik görünmez, etkileşimsiz. */\nconst skeletonItemClass = cn(\"pointer-events-none border-transparent text-transparent [&_svg]:invisible\", skeletonFill(true));\nconst idleItemClass = \"border-transparent text-mari-foreground hover:bg-mari-neutral-subtle cursor-pointer\";\n// Sadece ok/\"…\" düğmelerinde hover geçişi. Sayfa numaralarında BİLİNÇLİ\n// OLARAK geçiş yok: aktif vurgu bir slottan diğerine geçerken 150ms'lik\n// solma, eski kutu kaybolurken yenisinin geç belirmesi olarak görünüyordu.\nconst hoverTransitionClass = \"transition-colors duration-150\";\n// `disabled` yerine `aria-disabled`: son sayfaya ulaşınca \"Sonraki\" düğmesi\n// gerçekten `disabled` olursa odak `<body>`'ye düşer, klavye kullanıcısı\n// yerini kaybeder. `aria-disabled` odağı korur, tıklama no-op olur.\nconst disabledItemClass = \"aria-disabled:opacity-40 aria-disabled:cursor-not-allowed aria-disabled:hover:bg-transparent\";\n\nconst fieldClass =\n \"border border-mari-input bg-mari-surface text-mari-foreground transition-colors hover:border-mari-primary \" +\n \"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mari-ring\";\n\n/**\n * Faz 13.5'ten beri `TablePagination` bu component'i sarmalıyor — tek gerçek\n * sayfa-listesi mantığı burada (bkz. `utils.ts`).\n *\n * Faz 13.6 (kullanıcı bulgusu: \"yeni sayfaya geçince tuhaf davranıyor\"):\n * - Sayfa listesi artık SABİT sayıda slot üretir; genişlik zıplamaz.\n * - \"…\" asla tek bir sayfayı gizlemez.\n * - Sayfa aralık dışına düşerse (toplam azaldı, sayfa boyutu büyüdü) son\n * geçerli sayfaya çekilir; eskiden \"901-247 / 247 kayıt\" yazıyordu.\n * - Kayıt yokken \"Sonraki\" düğmesi `onPageChange(0)` çağırabiliyordu.\n * - Aktif sayfaya tekrar tıklamak `onPageChange`'i çağırmaz (gereksiz fetch).\n * - Controlled + uncontrolled (`defaultPage`/`defaultPageSize`).\n */\nexport function Pagination({\n currentPage,\n defaultPage = 1,\n pageSize: pageSizeProp,\n defaultPageSize = 10,\n totalItems,\n onPageChange,\n onPageSizeChange,\n showSizeChanger,\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n showTotal = false,\n showQuickJumper = false,\n simple = false,\n siblingCount = 1,\n size = \"md\",\n color = \"primary\",\n variant = \"outline\",\n disabled = false,\n hideOnSinglePage = false,\n align = \"between\",\n className,\n \"aria-label\": ariaLabel = \"Sayfalama\",\n skeleton = false,\n}: Readonly<PaginationProps>) {\n const [rawPage, setRawPage] = useControllableState<number>({ value: currentPage, defaultValue: defaultPage });\n const [pageSize, setPageSize] = useControllableState<number>({ value: pageSizeProp, defaultValue: defaultPageSize });\n\n const totalPages = getTotalPages(totalItems, pageSize);\n const page = clampPage(rawPage, totalPages);\n const rootRef = useRef<HTMLDivElement>(null);\n const navRef = useRef<HTMLElement>(null);\n // Dar kapsayıcıda komşu sayısı azalır; 0 komşu bile sığmazsa `simple` görünüme geçilir.\n const fitted = useFittedSiblings(rootRef, navRef, totalPages, siblingCount, size);\n const siblings = Math.max(0, fitted);\n const compact = simple || fitted < 0;\n\n const goTo = (target: number, nextPageSize = pageSize) => {\n // İskelette toplam henüz gerçek değil — hiçbir yol (programatik tıklama dahil) sayfa değiştirmez.\n if (skeleton) return;\n const next = clampPage(target, getTotalPages(totalItems, nextPageSize));\n if (next === page && nextPageSize === pageSize) return;\n setRawPage(next);\n onPageChange?.(next, nextPageSize);\n };\n\n // Toplam kayıt azalınca (filtre, silme) mevcut sayfa aralık dışına\n // düşebilir. Ekranda zaten `clampPage` ile düzeltilmiş sayfa gösteriliyor;\n // burada tüketiciye de bildiriyoruz ki verisini o sayfaya göre getirsin.\n useEffect(() => {\n if (rawPage !== page) {\n setRawPage(page);\n onPageChange?.(page, pageSize);\n }\n // `onPageChange`/`setRawPage` her render'da yeni referans olabilir —\n // sadece sayfa gerçekten aralık dışına düştüğünde çalışsın.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rawPage, page]);\n\n const handlePageSizeChange = (nextSize: number) => {\n const nextPage = getPageAfterSizeChange(page, pageSize, nextSize, totalItems);\n setPageSize(nextSize);\n // Önce sayfa, sonra boyut: `onPageSizeChange` içinde `setPage(1)` yapan\n // eski tüketicilerin açık tercihi son sözü söylesin.\n if (nextPage !== page) {\n setRawPage(nextPage);\n onPageChange?.(nextPage, nextSize);\n }\n onPageSizeChange?.(nextSize, nextPage);\n };\n\n if (hideOnSinglePage && totalPages <= 1) return null;\n\n const range = getItemRange(page, pageSize, totalItems);\n const isFirst = page <= 1;\n const isLast = page >= totalPages;\n const sizeChangerVisible = showSizeChanger ?? onPageSizeChange !== undefined;\n const icon = iconSize[size];\n // İskelette düğmeler yerinde kalır (aynı kare kutu) ama dolgu olur, Tab sırasından çıkar.\n const itemClass = (stateClass: string) => cn(itemBaseClass, itemSizeClass[size], itemTouchClass[size], skeleton ? skeletonItemClass : stateClass);\n const skeletonTab = skeleton ? -1 : undefined;\n const barPlaceholder = <span className={cn(\"block size-full min-h-[1lh] rounded-md\", skeletonFill(true))} />;\n\n const navButton = (direction: \"prev\" | \"next\") => {\n const isEdge = direction === \"prev\" ? isFirst : isLast;\n const Icon = direction === \"prev\" ? ChevronLeftIcon : ChevronRightIcon;\n return (\n <button\n type=\"button\"\n tabIndex={skeletonTab}\n className={itemClass(cn(hoverTransitionClass, idleItemClass, disabledItemClass))}\n aria-label={direction === \"prev\" ? \"Önceki sayfa\" : \"Sonraki sayfa\"}\n aria-disabled={isEdge || disabled || undefined}\n onClick={() => {\n if (!isEdge && !disabled) goTo(direction === \"prev\" ? page - 1 : page + 1);\n }}\n >\n <Icon size={icon} aria-hidden />\n </button>\n );\n };\n\n const totalNode =\n showTotal === false ? null : (\n // Slot da metnin yazı boyutunu taşır: yer tutucunun `1lh`'si o satır yüksekliğine eşit olsun (yoksa 2px kayar).\n <SkeletonSlot on={skeleton} placeholder={barPlaceholder} className={textSizeClass[size]}>\n <p className={cn(\"text-mari-muted tabular-nums\", textSizeClass[size])}>\n {typeof showTotal === \"function\" ? showTotal(totalItems, range) : `${range[0]}-${range[1]} / ${totalItems} kayıt`}\n </p>\n </SkeletonSlot>\n );\n\n const pager = compact ? (\n <nav ref={navRef} aria-label={ariaLabel} aria-hidden={skeleton || undefined} className={cn(\"flex items-center\", gapClass[size])}>\n {navButton(\"prev\")}\n <SkeletonSlot on={skeleton} placeholder={barPlaceholder}>\n <SimplePageInput page={page} totalPages={totalPages} size={size} disabled={disabled} onCommit={goTo} />\n </SkeletonSlot>\n {navButton(\"next\")}\n </nav>\n ) : (\n <nav ref={navRef} aria-label={ariaLabel} aria-hidden={skeleton || undefined}>\n <ul className={cn(\"flex items-center\", gapClass[size])}>\n <li>{navButton(\"prev\")}</li>\n {/*\n Anahtar = SLOT SIRASI (sayfa numarası değil). Slot sayısı sabit\n olduğu için ortadaki aktif slot aynı DOM düğmesi kalır, sadece\n metni değişir. Eskiden anahtar sayfa numarasıydı: \"Sonraki\"ye\n basınca React \"6\" düğmesini bir slot sola TAŞIYOR, \"7\"yi ortaya\n getiriyordu — numaralar kayıyor, vurgu sönüp yeniden yanıyordu\n (Faz 13.6 kullanıcı bulgusu: \"next/prev'de kayıyor gibi\").\n */}\n {getPageItems(totalPages, page, siblings).map((item, slot) => {\n if (typeof item === \"object\") {\n const jump = getJumpSize(siblings);\n const JumpIcon = item.direction === \"left\" ? ChevronsLeftIcon : ChevronsRightIcon;\n return (\n <li key={slot}>\n <button\n type=\"button\"\n tabIndex={skeletonTab}\n className={itemClass(cn(hoverTransitionClass, idleItemClass, \"group text-mari-muted hover:text-mari-primary focus-visible:text-mari-primary\"))}\n aria-label={item.direction === \"left\" ? `${jump} sayfa geri` : `${jump} sayfa ileri`}\n title={item.direction === \"left\" ? `Önceki ${jump} sayfa` : `Sonraki ${jump} sayfa`}\n aria-disabled={disabled || undefined}\n onClick={() => !disabled && goTo(resolvePageClickTarget(item, page, totalPages, siblings))}\n >\n <MoreHorizontalIcon size={icon} aria-hidden className=\"group-hover:hidden group-focus-visible:hidden\" />\n <JumpIcon size={icon} aria-hidden className=\"hidden group-hover:block group-focus-visible:block\" />\n </button>\n </li>\n );\n }\n\n const isActive = item === page;\n return (\n <li key={slot}>\n <button\n type=\"button\"\n tabIndex={skeletonTab}\n className={itemClass(isActive ? cn(\"font-semibold cursor-default\", activeClasses(color, variant)) : idleItemClass)}\n aria-label={`${item}. sayfa`}\n aria-current={isActive ? \"page\" : undefined}\n aria-disabled={disabled || undefined}\n onClick={() => !disabled && goTo(item)}\n >\n {item}\n </button>\n </li>\n );\n })}\n <li>{navButton(\"next\")}</li>\n </ul>\n </nav>\n );\n\n const controls = (\n <div className={cn(\"flex flex-wrap items-center gap-x-4 gap-y-2\", align !== \"between\" && alignClass[align])}>\n {pager}\n {!simple && sizeChangerVisible && (\n <SkeletonSlot on={skeleton} placeholder={barPlaceholder}>\n <SizeChanger value={pageSize} options={pageSizeOptions} size={size} disabled={disabled} onChange={handlePageSizeChange} />\n </SkeletonSlot>\n )}\n {!simple && showQuickJumper && (\n <SkeletonSlot on={skeleton} placeholder={barPlaceholder}>\n <QuickJumper totalPages={totalPages} size={size} disabled={disabled} onCommit={goTo} />\n </SkeletonSlot>\n )}\n </div>\n );\n\n return (\n <div\n ref={rootRef}\n aria-busy={skeleton || undefined}\n className={cn(\n \"flex flex-wrap items-center gap-x-4 gap-y-2\",\n alignClass[align],\n disabled && \"pointer-events-none opacity-60\",\n className\n )}\n >\n {totalNode}\n {controls}\n </div>\n );\n}\n\nconst fieldHeightClass: Record<Size, string> = {\n sm: \"h-6 rounded-sm text-xs\",\n md: \"h-8 rounded-md text-sm\",\n lg: \"h-10 rounded-md text-base\",\n};\n\nfunction SizeChanger({\n value,\n options,\n size,\n disabled,\n onChange,\n}: Readonly<{\n value: number;\n options: number[];\n size: Size;\n disabled: boolean;\n onChange: (size: number) => void;\n}>) {\n // Mevcut boyut listede yoksa (ör. controlled `pageSize={15}`) yine de\n // seçili görünsün — native `<select>` aksi halde ilk seçeneği gösterir.\n const allOptions = options.includes(value) ? options : [...options, value].sort((a, b) => a - b);\n return (\n <div className=\"relative inline-flex\">\n <select\n value={value}\n disabled={disabled}\n aria-label=\"Sayfa başına kayıt\"\n onChange={(e) => onChange(Number(e.target.value))}\n className={cn(fieldClass, fieldHeightClass[size], \"cursor-pointer appearance-none pl-3 pr-8 tabular-nums\")}\n >\n {allOptions.map((option) => (\n <option key={option} value={option}>\n {option} / sayfa\n </option>\n ))}\n </select>\n <ChevronDownIcon size={iconSize[size] - 2} aria-hidden className=\"pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-mari-muted\" />\n </div>\n );\n}\n\n/** Sadece rakam kabul eden, Enter/blur'da atlayan küçük alan. */\nfunction usePageDraft(onCommit: (page: number) => void, initial = \"\") {\n const [draft, setDraft] = useState(initial);\n const commit = () => {\n const parsed = Number.parseInt(draft, 10);\n if (Number.isFinite(parsed)) onCommit(parsed);\n return parsed;\n };\n return { draft, setDraft, commit };\n}\n\nfunction QuickJumper({ totalPages, size, disabled, onCommit }: Readonly<{ totalPages: number; size: Size; disabled: boolean; onCommit: (page: number) => void }>) {\n const { draft, setDraft, commit } = usePageDraft(onCommit);\n const submit = () => {\n commit();\n setDraft(\"\");\n };\n return (\n <label className={cn(\"flex items-center gap-2 text-mari-muted\", textSizeClass[size])}>\n Git\n <input\n type=\"text\"\n inputMode=\"numeric\"\n value={draft}\n disabled={disabled}\n aria-label={`Sayfaya git (1-${totalPages})`}\n onChange={(e) => setDraft(e.target.value.replace(/\\D/g, \"\"))}\n onKeyDown={(e) => e.key === \"Enter\" && submit()}\n onBlur={submit}\n className={cn(fieldClass, fieldHeightClass[size], \"w-14 px-2 text-center tabular-nums\")}\n />\n </label>\n );\n}\n\nfunction SimplePageInput({\n page,\n totalPages,\n size,\n disabled,\n onCommit,\n}: Readonly<{\n page: number;\n totalPages: number;\n size: Size;\n disabled: boolean;\n onCommit: (page: number) => void;\n}>) {\n const { draft, setDraft, commit } = usePageDraft(onCommit, String(page));\n // Dışarıdan (ok düğmeleri, controlled prop) sayfa değişince alanı eşitle.\n useEffect(() => setDraft(String(page)), [page, setDraft]);\n const submit = () => {\n commit();\n // Geçersiz/aralık dışı girişte gerçek sayfaya geri dön.\n setDraft(String(page));\n };\n return (\n <span className={cn(\"flex items-center gap-2 text-mari-muted tabular-nums\", textSizeClass[size])}>\n <input\n type=\"text\"\n inputMode=\"numeric\"\n value={draft}\n disabled={disabled}\n aria-label={`Sayfa (1-${totalPages})`}\n onChange={(e) => setDraft(e.target.value.replace(/\\D/g, \"\"))}\n onKeyDown={(e) => e.key === \"Enter\" && submit()}\n onBlur={submit}\n className={cn(fieldClass, fieldHeightClass[size], \"w-12 px-1 text-center\")}\n />\n <span aria-hidden>/</span>\n <span>{totalPages}</span>\n </span>\n );\n}\n","import type { PageItem } from \"./types\";\n\n/** Toplam sayfa sayısı. Hiç kayıt yokken bile 1 döner — \"0. sayfa\" diye bir durum yoktur. */\nexport function getTotalPages(totalItems: number, pageSize: number): number {\n if (pageSize <= 0) return 1;\n return Math.max(1, Math.ceil(totalItems / pageSize));\n}\n\nexport function clampPage(page: number, totalPages: number): number {\n if (!Number.isFinite(page)) return 1;\n return Math.min(Math.max(1, Math.trunc(page)), Math.max(1, totalPages));\n}\n\n/**\n * Görünür sayfa listesini üretir. Eski algoritma (`current ± 2`) iki soruna\n * yol açıyordu:\n *\n * 1. Düğme sayısı sayfadan sayfaya DEĞİŞİYORDU (1. sayfada 5, 5. sayfada 9\n * öğe) — tüm bileşenin genişliği her tıklamada zıplıyor, tıklanan\n * düğmeler imlecin altından kayıyordu (\"yeni sayfaya geçince tuhaf\n * davranıyor\" kullanıcı bulgusu).\n * 2. \"…\" bazen TEK bir sayfayı gizliyordu (10 sayfada 5. sayfa: `1 … 3`) —\n * o slota doğrudan \"2\" yazmak aynı yeri kaplar ve bir tıklama kazandırır.\n *\n * Yeni algoritma sabit sayıda slot üretir (`siblingCount * 2 + 5`): ilk ve\n * son sayfa her zaman görünür, aktif sayfanın iki yanında `siblingCount`\n * komşu, aradaki boşluklar ya \"…\" ya da (tek sayfa gizleyecekse) o sayfanın\n * kendisidir.\n */\nexport function getPageItems(totalPages: number, currentPage: number, siblingCount = 1): PageItem[] {\n const siblings = Math.max(0, Math.trunc(siblingCount));\n const totalSlots = siblings * 2 + 5;\n\n if (totalPages <= totalSlots) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const current = clampPage(currentPage, totalPages);\n // Kenarlara yakınken pencere kaydırılır — slot sayısı sabit kalsın diye.\n const windowStart = Math.max(Math.min(current - siblings, totalPages - siblings * 2 - 2), 3);\n const windowEnd = Math.min(Math.max(current + siblings, siblings * 2 + 3), totalPages - 2);\n\n const items: PageItem[] = [1];\n items.push(windowStart > 3 ? { type: \"ellipsis\", direction: \"left\" } : 2);\n for (let page = windowStart; page <= windowEnd; page++) items.push(page);\n items.push(windowEnd < totalPages - 2 ? { type: \"ellipsis\", direction: \"right\" } : totalPages - 1);\n items.push(totalPages);\n\n return items;\n}\n\n/**\n * Faz 15.5 — dar kapsayıcıda (375px telefon) sayfa listesi taşıyordu. Verilen\n * genişliğe sığan en büyük komşu sayısını (`maxSiblings`'ten 0'a) döner;\n * 0 komşu bile sığmıyorsa `-1` (→ `simple` görünüm). Slot sayısı\n * `getPageItems` ile aynı: `min(toplam, 2s+5)` + önceki/sonraki okları.\n */\nexport function fitSiblingCount(available: number, slotWidth: number, gap: number, totalPages: number, maxSiblings: number): number {\n for (let siblings = Math.max(0, Math.trunc(maxSiblings)); siblings >= 0; siblings--) {\n const slots = Math.min(totalPages, siblings * 2 + 5) + 2;\n if (slots * slotWidth + (slots - 1) * gap <= available) return siblings;\n }\n return -1;\n}\n\n/** \"…\" düğmesinin kaç sayfa atlayacağı — görünür pencere genişliği kadar (ant.design ile aynı: varsayılan 5). */\nexport function getJumpSize(siblingCount = 1): number {\n return Math.max(0, Math.trunc(siblingCount)) * 2 + 3;\n}\n\nexport function resolvePageClickTarget(page: PageItem, currentPage: number, totalPages: number, siblingCount = 1): number {\n if (typeof page === \"number\") return clampPage(page, totalPages);\n const jump = getJumpSize(siblingCount);\n return clampPage(page.direction === \"left\" ? currentPage - jump : currentPage + jump, totalPages);\n}\n\n/**\n * Sayfa boyutu değiştiğinde kullanıcının baktığı İLK kaydı görünür tutan\n * sayfayı bulur. Eskiden sayfa numarası olduğu gibi kalıyordu — 10/sayfa'da\n * 10. sayfadayken 100/sayfa'ya geçince \"10. sayfa / 3 sayfa\" gibi aralık\n * dışı bir duruma düşülüyor, \"901-247 / 247 kayıt\" yazıyordu.\n */\nexport function getPageAfterSizeChange(currentPage: number, oldPageSize: number, newPageSize: number, totalItems: number): number {\n const firstItemIndex = (Math.max(1, currentPage) - 1) * oldPageSize;\n return clampPage(Math.floor(firstItemIndex / newPageSize) + 1, getTotalPages(totalItems, newPageSize));\n}\n\n/** `[başlangıç, bitiş]` — 1 tabanlı, kapsayıcı. Kayıt yoksa `[0, 0]`. */\nexport function getItemRange(currentPage: number, pageSize: number, totalItems: number): [number, number] {\n if (totalItems <= 0) return [0, 0];\n return [(currentPage - 1) * pageSize + 1, Math.min(currentPage * pageSize, totalItems)];\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/ContentSkeleton.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useCallback, useLayoutEffect, useRef, useState } from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport { skeletonFill } from \"./skeleton\";\n\ninterface Block {\n left: number;\n top: number;\n width: number;\n height: number;\n radius: string;\n}\n\n/** Tek başına tek blok olan öğeler (içine inilmez). */\nconst CONTROL_SELECTOR =\n 'input:not([type=\"hidden\"]), textarea, select, button, img, svg, video, canvas, [role=\"button\"], [role=\"checkbox\"], [role=\"switch\"], [role=\"radio\"], [role=\"slider\"], [role=\"img\"]';\n\n/** Bundan küçük kutular (ör. `sr-only` native input'lar) atlanır. */\nconst MIN_SIZE = 4;\n\nfunction isTransparent(color: string): boolean {\n return color === \"transparent\" || /rgba?\\([^)]*,\\s*0\\)$/.test(color) || color.endsWith(\" / 0)\");\n}\n\n/**\n * Metinsiz ve dört kenarı çerçeveli (ya da dolgulu) kutu: Input'un kenarlıklı\n * sarmalayıcısı, Checkbox'ın kutusu gibi. İçindeki native input yerine bu\n * kutunun kendisi (radius'uyla) tek blok olur.\n */\nfunction isVisualBox(el: Element, style: CSSStyleDeclaration): boolean {\n if (el.textContent?.trim()) return false;\n const framed = [\"Top\", \"Right\", \"Bottom\", \"Left\"].every((side) => parseFloat(style.getPropertyValue(`border-${side.toLowerCase()}-width`)) > 0);\n return framed || !isTransparent(style.backgroundColor);\n}\n\nfunction measure(root: HTMLElement): Block[] {\n const origin = root.getBoundingClientRect();\n // `getBoundingClientRect` atalardaki transform'u içerir: Modal açılırken\n // `scale(0.98)`den başlar ve ölçüm o anda yapılır — bloklar %2 dar kalıyordu\n // (transform değişimi ResizeObserver'ı tetiklemez). Ölçek çarpanıyla\n // düzeltilir; bloklar transform'un İÇİNDE çizildiği için yerel px gerekir.\n const scale = root.offsetWidth > 0 && origin.width > 0 ? origin.width / root.offsetWidth : 1;\n const blocks: Block[] = [];\n /** Viewport koordinatlı kutu → bölgeye göreli, ölçeksiz blok. */\n const push = (x: number, y: number, w: number, h: number, radius: string) => {\n const left = Math.max(x - origin.left, 0) / scale;\n // `truncate`lı metnin satır kutusu kırpılan kısmı da kapsar — bölgeye sığdır.\n const width = Math.min(x + w - origin.left, origin.width) / scale - left;\n const height = h / scale;\n if (width < MIN_SIZE || height < MIN_SIZE) return;\n blocks.push({ left, top: (y - origin.top) / scale, width, height, radius });\n };\n\n /** Satır başına bir çubuk; yüksekliği yazı boyuna göre (satır aralığı değil). */\n const pushTextLines = (text: Node, parent: Element) => {\n if (!text.textContent?.trim()) return;\n const range = document.createRange();\n range.selectNodeContents(text);\n // jsdom'da yok → blok üretilmez, `fallback` devreye girer.\n if (typeof range.getClientRects !== \"function\") return;\n const fontSize = parseFloat(getComputedStyle(parent).fontSize) || 16;\n for (const line of Array.from(range.getClientRects())) {\n const height = Math.min(line.height, fontSize * 0.8);\n push(line.left, line.top + (line.height - height) / 2, line.width, height, \"0.25rem\");\n }\n };\n\n const walk = (el: Element) => {\n for (const node of Array.from(el.childNodes)) {\n if (node.nodeType === Node.TEXT_NODE) pushTextLines(node, el);\n else if (node instanceof Element) visit(node);\n }\n };\n\n const visit = (el: Element) => {\n const style = getComputedStyle(el);\n if (style.display === \"none\") return;\n // Yalnız ekran okuyucu için (sr-only: 1×1px kırpılmış kutu) — görünmeyen metnin\n // satır ölçüsü yine tam genişlik döner; iskelette fazladan çubuk çiziliyordu.\n const box = el.getBoundingClientRect();\n if (box.width <= 1 && box.height <= 1) return;\n if (!el.matches(CONTROL_SELECTOR) && !isVisualBox(el, style)) {\n walk(el);\n return;\n }\n const rect = el.getBoundingClientRect();\n // Kendi radius'u olmayan öğe (ikon SVG'si, düz img) keskin kare değil, metin çubukları gibi hafif yuvarlak.\n const radius = style.borderRadius && style.borderRadius !== \"0px\" ? style.borderRadius : \"0.25rem\";\n push(rect.left, rect.top, rect.width, rect.height, radius);\n };\n\n walk(root);\n return blocks;\n}\n\nexport interface ContentSkeletonProps {\n on: boolean;\n /** Ölçülecek içerik yoksa (veri henüz gelmedi) gösterilecek genel iskelet. */\n fallback: React.ReactNode;\n className?: string;\n children?: React.ReactNode;\n}\n\n/**\n * Faz 15.6 — serbest içeriğin (Drawer/Modal gövdesi) KENDİ şeklinde iskeleti.\n * Gerçek içerik görünmez olarak yerinde çizilir (yükseklik korunur, yüklenince\n * zıplama olmaz), sonra her metin satırının ve her kontrolün (input, düğme,\n * checkbox kutusu…) kutusu ölçülüp üstüne bir blok konur. Genel \"6 satır\n * paragraf\" iskeleti bir formun yanında yarım kalmış görünüyordu.\n *\n * Ölçülecek bir şey yoksa (içerik boş ya da jsdom gibi yerleşimsiz ortam)\n * `fallback` gösterilir. Boyut değişince (pencere, çekmece genişliği)\n * `ResizeObserver` ile yeniden ölçülür.\n */\nexport function ContentSkeleton({ on, fallback, className, children }: Readonly<ContentSkeletonProps>) {\n const contentRef = useRef<HTMLDivElement>(null);\n const [blocks, setBlocks] = useState<Block[] | null>(null);\n\n const remeasure = useCallback(() => {\n if (contentRef.current) setBlocks(measure(contentRef.current));\n }, []);\n\n useLayoutEffect(() => {\n if (!on) {\n setBlocks(null);\n return;\n }\n remeasure();\n const content = contentRef.current;\n if (!content || typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(remeasure);\n observer.observe(content);\n return () => observer.disconnect();\n }, [on, children, remeasure]);\n\n if (!on) return <>{children}</>;\n\n const empty = blocks !== null && blocks.length === 0;\n return (\n <div aria-hidden data-skeleton=\"\" className={cn(\"pointer-events-none relative select-none\", className)}>\n <div ref={contentRef} className={cn(\"invisible\", empty && \"absolute inset-x-0 top-0\")}>\n {children}\n </div>\n {empty\n ? fallback\n : blocks?.map((block, i) => (\n <span\n // Bloklar her ölçümde baştan üretilir; sıra kararlı.\n key={i}\n className={cn(\"absolute\", skeletonFill(true))}\n style={{ left: block.left, top: block.top, width: block.width, height: block.height, borderRadius: block.radius }}\n />\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;AAEA,SAAgB,aAAa,iBAAiB,QAAQ,gBAAgB;AACtE,SAAS,UAAU;AAqID,wBAId,YAJc;AAzHlB,IAAM,mBACJ;AAGF,IAAM,WAAW;AAEjB,SAAS,cAAc,OAAwB;AAC7C,SAAO,UAAU,iBAAiB,uBAAuB,KAAK,KAAK,KAAK,MAAM,SAAS,OAAO;AAChG;AAOA,SAAS,YAAY,IAAa,OAAqC;AACrE,MAAI,GAAG,aAAa,KAAK,EAAG,QAAO;AACnC,QAAM,SAAS,CAAC,OAAO,SAAS,UAAU,MAAM,EAAE,MAAM,CAAC,SAAS,WAAW,MAAM,iBAAiB,UAAU,KAAK,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC9I,SAAO,UAAU,CAAC,cAAc,MAAM,eAAe;AACvD;AAEA,SAAS,QAAQ,MAA4B;AAC3C,QAAM,SAAS,KAAK,sBAAsB;AAK1C,QAAM,QAAQ,KAAK,cAAc,KAAK,OAAO,QAAQ,IAAI,OAAO,QAAQ,KAAK,cAAc;AAC3F,QAAM,SAAkB,CAAC;AAEzB,QAAM,OAAO,CAAC,GAAW,GAAW,GAAW,GAAW,WAAmB;AAC3E,UAAM,OAAO,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI;AAE5C,UAAM,QAAQ,KAAK,IAAI,IAAI,IAAI,OAAO,MAAM,OAAO,KAAK,IAAI,QAAQ;AACpE,UAAM,SAAS,IAAI;AACnB,QAAI,QAAQ,YAAY,SAAS,SAAU;AAC3C,WAAO,KAAK,EAAE,MAAM,MAAM,IAAI,OAAO,OAAO,OAAO,OAAO,QAAQ,OAAO,CAAC;AAAA,EAC5E;AAGA,QAAM,gBAAgB,CAAC,MAAY,WAAoB;AACrD,QAAI,CAAC,KAAK,aAAa,KAAK,EAAG;AAC/B,UAAM,QAAQ,SAAS,YAAY;AACnC,UAAM,mBAAmB,IAAI;AAE7B,QAAI,OAAO,MAAM,mBAAmB,WAAY;AAChD,UAAM,WAAW,WAAW,iBAAiB,MAAM,EAAE,QAAQ,KAAK;AAClE,eAAW,QAAQ,MAAM,KAAK,MAAM,eAAe,CAAC,GAAG;AACrD,YAAM,SAAS,KAAK,IAAI,KAAK,QAAQ,WAAW,GAAG;AACnD,WAAK,KAAK,MAAM,KAAK,OAAO,KAAK,SAAS,UAAU,GAAG,KAAK,OAAO,QAAQ,SAAS;AAAA,IACtF;AAAA,EACF;AAEA,QAAM,OAAO,CAAC,OAAgB;AAC5B,eAAW,QAAQ,MAAM,KAAK,GAAG,UAAU,GAAG;AAC5C,UAAI,KAAK,aAAa,KAAK,UAAW,eAAc,MAAM,EAAE;AAAA,eACnD,gBAAgB,QAAS,OAAM,IAAI;AAAA,IAC9C;AAAA,EACF;AAEA,QAAM,QAAQ,CAAC,OAAgB;AAC7B,UAAM,QAAQ,iBAAiB,EAAE;AACjC,QAAI,MAAM,YAAY,OAAQ;AAG9B,UAAM,MAAM,GAAG,sBAAsB;AACrC,QAAI,IAAI,SAAS,KAAK,IAAI,UAAU,EAAG;AACvC,QAAI,CAAC,GAAG,QAAQ,gBAAgB,KAAK,CAAC,YAAY,IAAI,KAAK,GAAG;AAC5D,WAAK,EAAE;AACP;AAAA,IACF;AACA,UAAM,OAAO,GAAG,sBAAsB;AAEtC,UAAM,SAAS,MAAM,gBAAgB,MAAM,iBAAiB,QAAQ,MAAM,eAAe;AACzF,SAAK,KAAK,MAAM,KAAK,KAAK,KAAK,OAAO,KAAK,QAAQ,MAAM;AAAA,EAC3D;AAEA,OAAK,IAAI;AACT,SAAO;AACT;AAqBO,SAAS,gBAAgB,EAAE,IAAI,UAAU,WAAW,SAAS,GAAmC;AACrG,QAAM,aAAa,OAAuB,IAAI;AAC9C,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAyB,IAAI;AAEzD,QAAM,YAAY,YAAY,MAAM;AAClC,QAAI,WAAW,QAAS,WAAU,QAAQ,WAAW,OAAO,CAAC;AAAA,EAC/D,GAAG,CAAC,CAAC;AAEL,kBAAgB,MAAM;AACpB,QAAI,CAAC,IAAI;AACP,gBAAU,IAAI;AACd;AAAA,IACF;AACA,cAAU;AACV,UAAM,UAAU,WAAW;AAC3B,QAAI,CAAC,WAAW,OAAO,mBAAmB,YAAa;AACvD,UAAM,WAAW,IAAI,eAAe,SAAS;AAC7C,aAAS,QAAQ,OAAO;AACxB,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,IAAI,UAAU,SAAS,CAAC;AAE5B,MAAI,CAAC,GAAI,QAAO,gCAAG,UAAS;AAE5B,QAAM,QAAQ,WAAW,QAAQ,OAAO,WAAW;AACnD,SACE,qBAAC,SAAI,eAAW,MAAC,iBAAc,IAAG,WAAW,GAAG,4CAA4C,SAAS,GACnG;AAAA,wBAAC,SAAI,KAAK,YAAY,WAAW,GAAG,aAAa,SAAS,0BAA0B,GACjF,UACH;AAAA,IACC,QACG,WACA,QAAQ,IAAI,CAAC,OAAO,MAClB;AAAA,MAAC;AAAA;AAAA,QAGC,WAAW,GAAG,YAAY,aAAa,IAAI,CAAC;AAAA,QAC5C,OAAO,EAAE,MAAM,MAAM,MAAM,KAAK,MAAM,KAAK,OAAO,MAAM,OAAO,QAAQ,MAAM,QAAQ,cAAc,MAAM,OAAO;AAAA;AAAA,MAF3G;AAAA,IAGP,CACD;AAAA,KACP;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
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 * Faz 15: ilk + 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":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/autocomplete/utils.ts","../src/select/_components/SelectPanel.tsx","../src/select/utils.ts"],"sourcesContent":["import type { Option } from \"./types\";\n\n/**\n * Arama için katlama: Türkçe küçük harf + aksanları at + ı→i. Böylece\n * \"istanbul\" → \"İstanbul\", \"sehir\" → \"Şehir\", \"IĞDIR\" → \"Iğdır\" bulunur.\n * Eskiden düz `toLowerCase()` vardı: \"İstanbul\".toLowerCase() JS'te\n * \"i̇stanbul\" (i + birleşik nokta) verir ve \"istanbul\" ile HİÇ eşleşmezdi.\n * Karakter sayısını korur (NFC girişte her harf tek karaktere iner) — vurgu\n * aralıkları özgün metne aynı indekslerle uygulanabilir.\n */\nexport function foldForSearch(text: string): string {\n return text.toLocaleLowerCase(\"tr\").normalize(\"NFD\").replace(/\\p{M}/gu, \"\").replace(/ı/g, \"i\");\n}\n\nexport function getFilteredOption(options: Option[], searchText: string): Option[] {\n const query = foldForSearch(searchText.trim());\n if (!query) return options;\n return options.filter((option) => foldForSearch(option.value).includes(query));\n}\n\n/** Seçenek metnini [önce, eşleşen, sonra] olarak böler; eşleşme yoksa `null`. */\nexport function splitMatch(value: string, searchText: string): [string, string, string] | null {\n const query = foldForSearch(searchText.trim());\n const folded = foldForSearch(value);\n if (!query || folded.length !== value.length) return null;\n const start = folded.indexOf(query);\n if (start < 0) return null;\n const end = start + query.length;\n return [value.slice(0, start), value.slice(start, end), value.slice(end)];\n}\n","\"use client\";\n\nimport React, { forwardRef, useId } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { CheckIcon, Loader2Icon } from \"lucide-react\";\nimport { cn } from \"@mari-ui/core\";\nimport { elevationClass } from \"../../lib/elevationClass\";\nimport type { FloatingCoords } from \"../../lib/useFloatingPosition\";\nimport type { SelectOption, SelectProps } from \"../types\";\nimport { type SelectSection, valueKey } from \"../utils\";\n\ninterface SelectPanelProps {\n listboxId: string;\n coords: FloatingCoords | null;\n sections: SelectSection[];\n /** `sections`taki seçeneklerin düz sırası — aktif indeks buna göre. */\n flatOptions: SelectOption[];\n activeIndex: number;\n isSelected: (option: SelectOption) => boolean;\n multiple: boolean;\n loading: boolean;\n notFoundContent: React.ReactNode;\n listHeight: string;\n optionRender?: Exclude<SelectProps[\"optionRender\"], undefined>;\n labelledBy?: string;\n label?: string;\n onPick: (option: SelectOption) => void;\n onHover: (index: number) => void;\n}\n\nexport const optionDomId = (listboxId: string, option: SelectOption) => `${listboxId}-${valueKey(option.value).replace(/[^\\w-]/g, \"_\")}`;\n\nfunction OptionContent({ option, selected, multiple }: Readonly<{ option: SelectOption; selected: boolean; multiple: boolean }>) {\n return (\n <>\n {option.icon && <span className=\"flex shrink-0 items-center text-mari-muted [&>svg]:size-4\">{option.icon}</span>}\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate\">{option.label ?? option.value}</span>\n {option.description && <span className=\"block truncate text-xs text-mari-muted\">{option.description}</span>}\n </span>\n {/* Tekli seçimde seçili satır zeminle belli; çokluda onay işareti durumu taşır. */}\n {multiple && <CheckIcon size={16} aria-hidden className={cn(\"shrink-0 text-mari-primary\", !selected && \"invisible\")} />}\n </>\n );\n}\n\n/**\n * Faz 16.1 — Select'in listesi. `document.body`'ye portal edilir, konum\n * `useFloatingPosition`dan (Dropdown ile ortak); genişlik tetikleyicininki\n * (ant.design `popupMatchSelectWidth`). Odak listede DEĞİL tetikleyicide\n * kalır; aktif seçenek `aria-activedescendant` ile bildirilir (APG combobox).\n * Seçenekler `onMouseDown` ile `preventDefault` — tıklamak tetikleyicinin\n * odağını (dolayısıyla açık listeyi) kaybettirmesin.\n */\nexport const SelectPanel = forwardRef<HTMLDivElement, SelectPanelProps>(function SelectPanel(\n { listboxId, coords, sections, flatOptions, activeIndex, isSelected, multiple, loading, notFoundContent, listHeight, optionRender, labelledBy, label, onPick, onHover },\n ref\n) {\n const groupIdBase = useId();\n if (typeof document === \"undefined\") return null;\n const empty = flatOptions.length === 0;\n\n const renderOption = (option: SelectOption) => {\n const index = flatOptions.indexOf(option);\n const selected = isSelected(option);\n const active = index === activeIndex;\n return (\n // Klavye tetikleyicide (combobox) işlenir; seçenek odak almaz, `aria-activedescendant` ile gösterilir (APG).\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div\n key={valueKey(option.value)}\n id={optionDomId(listboxId, option)}\n role=\"option\"\n tabIndex={-1}\n aria-selected={selected}\n aria-disabled={option.disabled || undefined}\n onMouseDown={(e) => e.preventDefault()}\n onMouseMove={() => !active && !option.disabled && onHover(index)}\n onClick={() => !option.disabled && onPick(option)}\n className={cn(\n \"flex min-h-8 cursor-pointer items-center gap-2 rounded-md px-2.5 py-1.5 text-mari-foreground pointer-coarse:min-h-11\",\n active && \"bg-mari-surface-alt\",\n selected && !multiple && \"bg-mari-primary-subtle font-medium\",\n option.disabled && \"cursor-not-allowed opacity-50\"\n )}\n >\n {optionRender ? optionRender(option, { selected, active }) : <OptionContent option={option} selected={selected} multiple={multiple} />}\n </div>\n );\n };\n\n return createPortal(\n <div\n ref={ref}\n className={cn(\"fixed z-mari-dropdown max-w-[calc(100vw-1rem)] rounded-lg bg-mari-surface p-1 text-sm\", elevationClass.md, !coords && \"invisible\")}\n style={{ top: coords?.top ?? 0, left: coords?.left ?? 0, width: coords?.anchorWidth }}\n >\n <div\n id={listboxId}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-labelledby={labelledBy}\n aria-label={labelledBy ? undefined : label}\n aria-busy={loading || undefined}\n className=\"overflow-y-auto overscroll-contain\"\n style={{ maxHeight: listHeight }}\n >\n {sections.map((section) =>\n section.label === undefined ? (\n <React.Fragment key={section.key}>{section.options.map(renderOption)}</React.Fragment>\n ) : (\n <div key={section.key} role=\"group\" aria-labelledby={`${groupIdBase}-${section.key}`}>\n <div id={`${groupIdBase}-${section.key}`} role=\"presentation\" className=\"px-2.5 pb-1 pt-2 text-xs font-medium text-mari-muted\">\n {section.label}\n </div>\n {section.options.map(renderOption)}\n </div>\n )\n )}\n </div>\n {loading && (\n <div role=\"status\" className=\"flex items-center gap-2 px-2.5 py-2 text-mari-muted\">\n <Loader2Icon size={16} aria-hidden className=\"animate-spin motion-reduce:animate-[spin_2s_linear_infinite]\" />\n Yükleniyor\n </div>\n )}\n {!loading && empty && (\n <div role=\"status\" className=\"px-2.5 py-2 text-mari-muted\">\n {notFoundContent}\n </div>\n )}\n </div>,\n document.body\n );\n});\n","import type React from \"react\";\nimport { foldForSearch } from \"../autocomplete/utils\";\nimport type { SelectOption, SelectOptionGroup, SelectValue } from \"./types\";\n\n/**\n * Listede sırayla çizilen bölüm: başlıklı grup (`role=\"group\"`) ya da\n * başlıksız ardışık seçenekler. Gruplar DOM'da da iç içe olmalı — ekran\n * okuyucu seçeneği \"Meyveler grubu, Elma\" diye okusun.\n */\nexport interface SelectSection {\n key: string;\n label?: React.ReactNode;\n options: SelectOption[];\n}\n\nexport const isGroup = (item: SelectOption | SelectOptionGroup): item is SelectOptionGroup => \"options\" in item;\n\n/** Gruplar açılmış, düz seçenek listesi (değer arama, klavye gezinmesi için). */\nexport function flattenOptions(items: Array<SelectOption | SelectOptionGroup>): SelectOption[] {\n return items.flatMap((item) => (isGroup(item) ? item.options : [item]));\n}\n\n/** Aramada/harfle atlamada kullanılan düz metin: `searchText` → düz `label` → `value`. */\nexport function optionText(option: SelectOption): string {\n if (option.searchText !== undefined) return option.searchText;\n if (typeof option.label === \"string\" || typeof option.label === \"number\") return String(option.label);\n return String(option.value);\n}\n\n/** DOM id'si için değer anahtarı (sayı ile aynı yazılı string çakışmasın). */\nexport const valueKey = (value: SelectValue) => `${typeof value}:${value}`;\n\n/**\n * Aramaya göre süzülmüş bölümler; eşleşmesi kalmayan grup tamamen düşer.\n * Türkçe/aksansız eşleşme AutoComplete'le aynı (`foldForSearch`).\n */\nexport function buildSections(items: Array<SelectOption | SelectOptionGroup>, search: string): SelectSection[] {\n const query = foldForSearch(search.trim());\n const matches = (option: SelectOption) => !query || foldForSearch(optionText(option)).includes(query);\n const sections: SelectSection[] = [];\n items.forEach((item, index) => {\n if (isGroup(item)) {\n const visible = item.options.filter(matches);\n if (visible.length > 0) sections.push({ key: `group-${index}`, label: item.label, options: visible });\n return;\n }\n if (!matches(item)) return;\n const last = sections.at(-1);\n if (last && last.label === undefined) last.options.push(item);\n else sections.push({ key: `plain-${index}`, options: [item] });\n });\n return sections;\n}\n\n/**\n * Klavye gezinmesi: seçilebilir (disabled olmayan) seçenekler arasında\n * `from`dan `step` yönünde bir sonraki; kenarda durur (APG listbox — sarmaz).\n */\nexport function nextEnabled(options: SelectOption[], from: number, step: 1 | -1): number {\n for (let i = from + step; i >= 0 && i < options.length; i += step) {\n if (!options[i]!.disabled) return i;\n }\n return from;\n}\n\n/** İlk seçilebilir seçenek; yoksa -1. */\nexport function firstEnabled(options: SelectOption[]): number {\n return nextEnabledOrNone(options, -1, 1);\n}\n\n/** Son seçilebilir seçenek; yoksa -1. */\nexport function lastEnabled(options: SelectOption[]): number {\n return nextEnabledOrNone(options, options.length, -1);\n}\n\nfunction nextEnabledOrNone(options: SelectOption[], from: number, step: 1 | -1): number {\n const next = nextEnabled(options, from, step);\n return next === from ? -1 : next;\n}\n\n/**\n * Harfle atlama (type-ahead): art arda yazılan harfler birikir (\"is\" →\n * \"İstanbul\"); tek harf tekrarlanırsa o harfle başlayan sonrakine geçer.\n */\nexport function typeAheadMatch(options: SelectOption[], current: number, buffer: string): number {\n const query = foldForSearch(buffer);\n if (!query) return -1;\n const repeated = query.length > 1 && [...query].every((ch) => ch === query[0]);\n const needle = repeated ? query[0]! : query;\n const start = repeated || query.length === 1 ? current + 1 : current;\n for (let step = 0; step < options.length; step++) {\n const i = (Math.max(start, 0) + step) % options.length;\n const option = options[i]!;\n if (!option.disabled && foldForSearch(optionText(option)).startsWith(needle)) return i;\n }\n return -1;\n}\n"],"mappings":"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","names":["SelectPanel"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/badge/Badge.tsx"],"sourcesContent":["import React from \"react\";\nimport { cn, type ColorRole } from \"@mari-ui/core\";\nimport { bgSolidClass, textSolidContrastClass } from \"../lib/colorClasses\";\nimport { skeletonFill } from \"../lib/skeleton\";\nimport type { BadgeProps, StatusBadgeProps } from \"./types\";\n\nexport type { BadgeProps, StatusBadgeProps };\n\n/** Kabarcık boyutu rem (px yasak kuralı): sm 16 / md 20px, metin 10 / 12px. */\nconst BUBBLE_SIZE = { sm: \"h-4 min-w-4 px-1 text-[0.625rem]\", md: \"h-5 min-w-5 px-1.5 text-xs\" } as const;\nconst DOT_SIZE = { sm: \"size-1.5\", md: \"size-2\" } as const;\n\nconst toLength = (v: number | string) => (typeof v === \"number\" ? `${v}px` : v);\n\nfunction displayCount(count: BadgeProps[\"count\"], overflowCount: number): string | null {\n if (count == null || count === \"\") return null;\n if (typeof count === \"number\") return count > overflowCount ? `${overflowCount}+` : String(count);\n return count;\n}\n\n/**\n * Faz 16.2 — yapı ant.design Badge'den. Bir öğenin (bildirim zili, avatar)\n * köşesinde sayı ya da nokta; `children` yoksa satır içinde tek başına.\n *\n * Erişilebilirlik: kabarcık görseldir (`aria-hidden`) — sarılan düğmenin\n * yanında ayrı bir \"3\" okunması anlamsız olurdu. Sayı ya `label` ile gizli\n * metin olarak verilir ya da (daha iyisi) düğmenin kendi adına katılır.\n * Kabarcığın etrafında yüzey renginde halka: avatarın/ikonun üstünde ayrışsın.\n */\nexport function Badge({\n count,\n overflowCount = 99,\n showZero = false,\n dot = false,\n color = \"error\",\n size = \"md\",\n label,\n offset,\n children,\n className,\n skeleton = false,\n}: Readonly<BadgeProps>) {\n const text = displayCount(count, overflowCount);\n const hidden = !dot && (text === null || (count === 0 && !showZero));\n const standalone = children === undefined;\n\n const bubble = hidden ? null : (\n <span\n aria-hidden\n data-badge=\"\"\n className={cn(\n \"inline-flex shrink-0 items-center justify-center rounded-full font-semibold leading-none tabular-nums whitespace-nowrap\",\n dot ? DOT_SIZE[size] : BUBBLE_SIZE[size],\n skeleton ? cn(skeletonFill(true), \"text-transparent\") : cn(bgSolidClass[color], textSolidContrastClass[color]),\n !standalone && \"absolute right-0 top-0 z-10 translate-x-1/2 -translate-y-1/2 ring-2 ring-mari-surface\"\n )}\n style={offset ? { marginRight: `calc(${toLength(offset[0])} * -1)`, marginTop: toLength(offset[1]) } : undefined}\n >\n {dot ? null : text}\n </span>\n );\n\n const srText = label && !hidden && !skeleton ? <span className=\"sr-only\">{label}</span> : null;\n\n if (standalone) {\n return (\n <span className={cn(\"inline-flex\", className)}>\n {bubble}\n {srText}\n </span>\n );\n }\n return (\n <span className={cn(\"relative inline-flex\", className)}>\n {children}\n {bubble}\n {srText}\n </span>\n );\n}\n\nconst STATUS_DOT: Record<ColorRole, string> = bgSolidClass;\n\n/**\n * Durum rozeti: renkli nokta + metin (tablo satırında \"Aktif\", \"Beklemede\").\n * Renk tek başına anlam taşımaz (renk körlüğü) — metin her zaman görünür.\n */\nexport function StatusBadge({ color = \"neutral\", children, processing = false, className, skeleton = false }: Readonly<StatusBadgeProps>) {\n return (\n <span className={cn(\"inline-flex items-center gap-2 text-sm text-mari-foreground\", className)} aria-hidden={skeleton || undefined}>\n <span className=\"relative flex size-2 shrink-0\">\n {processing && !skeleton && (\n <span aria-hidden className={cn(\"absolute inset-0 animate-ping rounded-full opacity-60 motion-reduce:hidden\", STATUS_DOT[color])} />\n )}\n <span aria-hidden className={cn(\"relative size-2 rounded-full\", skeleton ? skeletonFill(true) : STATUS_DOT[color])} />\n </span>\n <span className={cn(skeleton && cn(\"rounded-sm text-transparent\", skeletonFill(true)))}>{children}</span>\n </span>\n );\n}\n"],"mappings":";;;;;;;;;AACA,SAAS,UAA0B;AA8C/B,cAmBE,YAnBF;AAtCJ,IAAM,cAAc,EAAE,IAAI,oCAAoC,IAAI,6BAA6B;AAC/F,IAAM,WAAW,EAAE,IAAI,YAAY,IAAI,SAAS;AAEhD,IAAM,WAAW,CAAC,MAAwB,OAAO,MAAM,WAAW,GAAG,CAAC,OAAO;AAE7E,SAAS,aAAa,OAA4B,eAAsC;AACtF,MAAI,SAAS,QAAQ,UAAU,GAAI,QAAO;AAC1C,MAAI,OAAO,UAAU,SAAU,QAAO,QAAQ,gBAAgB,GAAG,aAAa,MAAM,OAAO,KAAK;AAChG,SAAO;AACT;AAWO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAyB;AACvB,QAAM,OAAO,aAAa,OAAO,aAAa;AAC9C,QAAM,SAAS,CAAC,QAAQ,SAAS,QAAS,UAAU,KAAK,CAAC;AAC1D,QAAM,aAAa,aAAa;AAEhC,QAAM,SAAS,SAAS,OACtB;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,MACX,cAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA,MAAM,SAAS,IAAI,IAAI,YAAY,IAAI;AAAA,QACvC,WAAW,GAAG,aAAa,IAAI,GAAG,kBAAkB,IAAI,GAAG,aAAa,KAAK,GAAG,uBAAuB,KAAK,CAAC;AAAA,QAC7G,CAAC,cAAc;AAAA,MACjB;AAAA,MACA,OAAO,SAAS,EAAE,aAAa,QAAQ,SAAS,OAAO,CAAC,CAAC,CAAC,UAAU,WAAW,SAAS,OAAO,CAAC,CAAC,EAAE,IAAI;AAAA,MAEtG,gBAAM,OAAO;AAAA;AAAA,EAChB;AAGF,QAAM,SAAS,SAAS,CAAC,UAAU,CAAC,WAAW,oBAAC,UAAK,WAAU,WAAW,iBAAM,IAAU;AAE1F,MAAI,YAAY;AACd,WACE,qBAAC,UAAK,WAAW,GAAG,eAAe,SAAS,GACzC;AAAA;AAAA,MACA;AAAA,OACH;AAAA,EAEJ;AACA,SACE,qBAAC,UAAK,WAAW,GAAG,wBAAwB,SAAS,GAClD;AAAA;AAAA,IACA;AAAA,IACA;AAAA,KACH;AAEJ;AAEA,IAAM,aAAwC;AAMvC,SAAS,YAAY,EAAE,QAAQ,WAAW,UAAU,aAAa,OAAO,WAAW,WAAW,MAAM,GAA+B;AACxI,SACE,qBAAC,UAAK,WAAW,GAAG,+DAA+D,SAAS,GAAG,eAAa,YAAY,QACtH;AAAA,yBAAC,UAAK,WAAU,iCACb;AAAA,oBAAc,CAAC,YACd,oBAAC,UAAK,eAAW,MAAC,WAAW,GAAG,8EAA8E,WAAW,KAAK,CAAC,GAAG;AAAA,MAEpI,oBAAC,UAAK,eAAW,MAAC,WAAW,GAAG,gCAAgC,WAAW,aAAa,IAAI,IAAI,WAAW,KAAK,CAAC,GAAG;AAAA,OACtH;AAAA,IACA,oBAAC,UAAK,WAAW,GAAG,YAAY,GAAG,+BAA+B,aAAa,IAAI,CAAC,CAAC,GAAI,UAAS;AAAA,KACpG;AAEJ;","names":[]}
|
|
File without changes
|