@handijit/ui 0.0.0-stage → 2.0.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/LICENSE +21 -0
- package/README.md +786 -2
- package/build/base.css +1 -0
- package/build/charts.cjs +2 -0
- package/build/charts.cjs.map +1 -0
- package/build/charts.css +1 -0
- package/build/charts.js +1866 -0
- package/build/charts.js.map +1 -0
- package/build/chat.cjs +4 -0
- package/build/chat.cjs.map +1 -0
- package/build/chat.css +1 -0
- package/build/chat.js +1121 -0
- package/build/chat.js.map +1 -0
- package/build/components/Accordion/index.cjs +2 -0
- package/build/components/Accordion/index.cjs.map +1 -0
- package/build/components/Accordion/index.d.ts +29 -0
- package/build/components/Accordion/index.js +42 -0
- package/build/components/Accordion/index.js.map +1 -0
- package/build/components/Accordion/style.css +1 -0
- package/build/components/Alert/index.cjs +2 -0
- package/build/components/Alert/index.cjs.map +1 -0
- package/build/components/Alert/index.d.ts +15 -0
- package/build/components/Alert/index.js +30 -0
- package/build/components/Alert/index.js.map +1 -0
- package/build/components/Alert/style.css +1 -0
- package/build/components/Avatar/index.cjs +2 -0
- package/build/components/Avatar/index.cjs.map +1 -0
- package/build/components/Avatar/index.d.ts +26 -0
- package/build/components/Avatar/index.js +57 -0
- package/build/components/Avatar/index.js.map +1 -0
- package/build/components/Avatar/style.css +1 -0
- package/build/components/Badge/index.cjs +2 -0
- package/build/components/Badge/index.cjs.map +1 -0
- package/build/components/Badge/index.d.ts +21 -0
- package/build/components/Badge/index.js +26 -0
- package/build/components/Badge/index.js.map +1 -0
- package/build/components/Badge/style.css +1 -0
- package/build/components/BottomSheet/index.cjs +2 -0
- package/build/components/BottomSheet/index.cjs.map +1 -0
- package/build/components/BottomSheet/index.d.ts +21 -0
- package/build/components/BottomSheet/index.js +85 -0
- package/build/components/BottomSheet/index.js.map +1 -0
- package/build/components/BottomSheet/style.css +1 -0
- package/build/components/Breadcrumb/index.cjs +2 -0
- package/build/components/Breadcrumb/index.cjs.map +1 -0
- package/build/components/Breadcrumb/index.d.ts +20 -0
- package/build/components/Breadcrumb/index.js +31 -0
- package/build/components/Breadcrumb/index.js.map +1 -0
- package/build/components/Breadcrumb/style.css +1 -0
- package/build/components/Button/index.cjs +2 -0
- package/build/components/Button/index.cjs.map +1 -0
- package/build/components/Button/index.d.ts +32 -0
- package/build/components/Button/index.js +88 -0
- package/build/components/Button/index.js.map +1 -0
- package/build/components/Button/style.css +1 -0
- package/build/components/Card/index.cjs +2 -0
- package/build/components/Card/index.cjs.map +1 -0
- package/build/components/Card/index.d.ts +51 -0
- package/build/components/Card/index.js +58 -0
- package/build/components/Card/index.js.map +1 -0
- package/build/components/Card/style.css +1 -0
- package/build/components/Carousel/index.cjs +2 -0
- package/build/components/Carousel/index.cjs.map +1 -0
- package/build/components/Carousel/index.d.ts +24 -0
- package/build/components/Carousel/index.js +111 -0
- package/build/components/Carousel/index.js.map +1 -0
- package/build/components/Carousel/style.css +1 -0
- package/build/components/Checkbox/index.cjs +2 -0
- package/build/components/Checkbox/index.cjs.map +1 -0
- package/build/components/Checkbox/index.d.ts +10 -0
- package/build/components/Checkbox/index.js +33 -0
- package/build/components/Checkbox/index.js.map +1 -0
- package/build/components/Checkbox/style.css +1 -0
- package/build/components/Chip/index.cjs +2 -0
- package/build/components/Chip/index.cjs.map +1 -0
- package/build/components/Chip/index.d.ts +27 -0
- package/build/components/Chip/index.js +67 -0
- package/build/components/Chip/index.js.map +1 -0
- package/build/components/Chip/style.css +1 -0
- package/build/components/ChipGroup/index.cjs +2 -0
- package/build/components/ChipGroup/index.cjs.map +1 -0
- package/build/components/ChipGroup/index.d.ts +34 -0
- package/build/components/ChipGroup/index.js +64 -0
- package/build/components/ChipGroup/index.js.map +1 -0
- package/build/components/ChipGroup/style.css +1 -0
- package/build/components/CodeBadge/index.cjs +2 -0
- package/build/components/CodeBadge/index.cjs.map +1 -0
- package/build/components/CodeBadge/index.d.ts +36 -0
- package/build/components/CodeBadge/index.js +62 -0
- package/build/components/CodeBadge/index.js.map +1 -0
- package/build/components/CodeBadge/style.css +1 -0
- package/build/components/Combobox/index.cjs +2 -0
- package/build/components/Combobox/index.cjs.map +1 -0
- package/build/components/Combobox/index.d.ts +6 -0
- package/build/components/Combobox/index.js +302 -0
- package/build/components/Combobox/index.js.map +1 -0
- package/build/components/Combobox/style.css +1 -0
- package/build/components/CommandPalette/index.cjs +2 -0
- package/build/components/CommandPalette/index.cjs.map +1 -0
- package/build/components/CommandPalette/index.d.ts +37 -0
- package/build/components/CommandPalette/index.js +181 -0
- package/build/components/CommandPalette/index.js.map +1 -0
- package/build/components/CommandPalette/style.css +1 -0
- package/build/components/ConfirmDialog/index.cjs +2 -0
- package/build/components/ConfirmDialog/index.cjs.map +1 -0
- package/build/components/ConfirmDialog/index.d.ts +34 -0
- package/build/components/ConfirmDialog/index.js +85 -0
- package/build/components/ConfirmDialog/index.js.map +1 -0
- package/build/components/CopyField/index.cjs +2 -0
- package/build/components/CopyField/index.cjs.map +1 -0
- package/build/components/CopyField/index.d.ts +20 -0
- package/build/components/CopyField/index.js +44 -0
- package/build/components/CopyField/index.js.map +1 -0
- package/build/components/CopyField/style.css +1 -0
- package/build/components/DataTable/index.cjs +2 -0
- package/build/components/DataTable/index.cjs.map +1 -0
- package/build/components/DataTable/index.d.ts +60 -0
- package/build/components/DataTable/index.js +109 -0
- package/build/components/DataTable/index.js.map +1 -0
- package/build/components/DataTable/style.css +1 -0
- package/build/components/DateField/index.cjs +2 -0
- package/build/components/DateField/index.cjs.map +1 -0
- package/build/components/DateField/index.d.ts +44 -0
- package/build/components/DateField/index.js +79 -0
- package/build/components/DateField/index.js.map +1 -0
- package/build/components/DateField/style.css +1 -0
- package/build/components/Directory/index.cjs +2 -0
- package/build/components/Directory/index.cjs.map +1 -0
- package/build/components/Directory/index.d.ts +51 -0
- package/build/components/Directory/index.js +46 -0
- package/build/components/Directory/index.js.map +1 -0
- package/build/components/Directory/style.css +1 -0
- package/build/components/Disclosure/index.cjs +2 -0
- package/build/components/Disclosure/index.cjs.map +1 -0
- package/build/components/Disclosure/index.d.ts +34 -0
- package/build/components/Disclosure/index.js +64 -0
- package/build/components/Disclosure/index.js.map +1 -0
- package/build/components/Disclosure/style.css +1 -0
- package/build/components/Divider/index.cjs +2 -0
- package/build/components/Divider/index.cjs.map +1 -0
- package/build/components/Divider/index.d.ts +10 -0
- package/build/components/Divider/index.js +24 -0
- package/build/components/Divider/index.js.map +1 -0
- package/build/components/Divider/style.css +1 -0
- package/build/components/Drawer/index.cjs +2 -0
- package/build/components/Drawer/index.cjs.map +1 -0
- package/build/components/Drawer/index.d.ts +22 -0
- package/build/components/Drawer/index.js +88 -0
- package/build/components/Drawer/index.js.map +1 -0
- package/build/components/Drawer/style.css +1 -0
- package/build/components/EmptyState/index.cjs +2 -0
- package/build/components/EmptyState/index.cjs.map +1 -0
- package/build/components/EmptyState/index.d.ts +19 -0
- package/build/components/EmptyState/index.js +35 -0
- package/build/components/EmptyState/index.js.map +1 -0
- package/build/components/EmptyState/style.css +1 -0
- package/build/components/Field/index.cjs +2 -0
- package/build/components/Field/index.cjs.map +1 -0
- package/build/components/Field/index.d.ts +31 -0
- package/build/components/Field/index.js +52 -0
- package/build/components/Field/index.js.map +1 -0
- package/build/components/Field/style.css +1 -0
- package/build/components/FileUpload/index.cjs +2 -0
- package/build/components/FileUpload/index.cjs.map +1 -0
- package/build/components/FileUpload/index.d.ts +42 -0
- package/build/components/FileUpload/index.js +145 -0
- package/build/components/FileUpload/index.js.map +1 -0
- package/build/components/FileUpload/style.css +1 -0
- package/build/components/FilterBar/index.cjs +2 -0
- package/build/components/FilterBar/index.cjs.map +1 -0
- package/build/components/FilterBar/index.d.ts +28 -0
- package/build/components/FilterBar/index.js +35 -0
- package/build/components/FilterBar/index.js.map +1 -0
- package/build/components/FilterBar/style.css +1 -0
- package/build/components/IconButton/index.cjs +2 -0
- package/build/components/IconButton/index.cjs.map +1 -0
- package/build/components/IconButton/index.d.ts +22 -0
- package/build/components/IconButton/index.js +61 -0
- package/build/components/IconButton/index.js.map +1 -0
- package/build/components/IconButton/style.css +1 -0
- package/build/components/Input/index.cjs +2 -0
- package/build/components/Input/index.cjs.map +1 -0
- package/build/components/Input/index.d.ts +15 -0
- package/build/components/Input/index.js +52 -0
- package/build/components/Input/index.js.map +1 -0
- package/build/components/Input/style.css +1 -0
- package/build/components/Kbd/index.cjs +2 -0
- package/build/components/Kbd/index.cjs.map +1 -0
- package/build/components/Kbd/index.d.ts +12 -0
- package/build/components/Kbd/index.js +13 -0
- package/build/components/Kbd/index.js.map +1 -0
- package/build/components/Kbd/style.css +1 -0
- package/build/components/Link/index.cjs +2 -0
- package/build/components/Link/index.cjs.map +1 -0
- package/build/components/Link/index.d.ts +5 -0
- package/build/components/Link/index.js +11 -0
- package/build/components/Link/index.js.map +1 -0
- package/build/components/Menu/index.cjs +2 -0
- package/build/components/Menu/index.cjs.map +1 -0
- package/build/components/Menu/index.d.ts +46 -0
- package/build/components/Menu/index.js +241 -0
- package/build/components/Menu/index.js.map +1 -0
- package/build/components/Menu/style.css +1 -0
- package/build/components/Modal/index.cjs +2 -0
- package/build/components/Modal/index.cjs.map +1 -0
- package/build/components/Modal/index.d.ts +28 -0
- package/build/components/Modal/index.js +92 -0
- package/build/components/Modal/index.js.map +1 -0
- package/build/components/Modal/style.css +1 -0
- package/build/components/PageHeader/index.cjs +2 -0
- package/build/components/PageHeader/index.cjs.map +1 -0
- package/build/components/PageHeader/index.d.ts +24 -0
- package/build/components/PageHeader/index.js +34 -0
- package/build/components/PageHeader/index.js.map +1 -0
- package/build/components/PageHeader/style.css +1 -0
- package/build/components/Pagination/index.cjs +2 -0
- package/build/components/Pagination/index.cjs.map +1 -0
- package/build/components/Pagination/index.d.ts +39 -0
- package/build/components/Pagination/index.js +128 -0
- package/build/components/Pagination/index.js.map +1 -0
- package/build/components/Pagination/style.css +1 -0
- package/build/components/Panel/index.cjs +2 -0
- package/build/components/Panel/index.cjs.map +1 -0
- package/build/components/Panel/index.d.ts +43 -0
- package/build/components/Panel/index.js +55 -0
- package/build/components/Panel/index.js.map +1 -0
- package/build/components/Panel/style.css +1 -0
- package/build/components/PasswordInput/index.cjs +2 -0
- package/build/components/PasswordInput/index.cjs.map +1 -0
- package/build/components/PasswordInput/index.d.ts +14 -0
- package/build/components/PasswordInput/index.js +40 -0
- package/build/components/PasswordInput/index.js.map +1 -0
- package/build/components/PasswordInput/style.css +1 -0
- package/build/components/Popover/index.cjs +2 -0
- package/build/components/Popover/index.cjs.map +1 -0
- package/build/components/Popover/index.d.ts +20 -0
- package/build/components/Popover/index.js +91 -0
- package/build/components/Popover/index.js.map +1 -0
- package/build/components/Popover/style.css +1 -0
- package/build/components/Price/index.cjs +2 -0
- package/build/components/Price/index.cjs.map +1 -0
- package/build/components/Price/index.d.ts +22 -0
- package/build/components/Price/index.js +46 -0
- package/build/components/Price/index.js.map +1 -0
- package/build/components/Price/style.css +1 -0
- package/build/components/Progress/index.cjs +2 -0
- package/build/components/Progress/index.cjs.map +1 -0
- package/build/components/Progress/index.d.ts +49 -0
- package/build/components/Progress/index.js +120 -0
- package/build/components/Progress/index.js.map +1 -0
- package/build/components/Progress/style.css +1 -0
- package/build/components/PromptDialog/index.cjs +2 -0
- package/build/components/PromptDialog/index.cjs.map +1 -0
- package/build/components/PromptDialog/index.d.ts +36 -0
- package/build/components/PromptDialog/index.js +119 -0
- package/build/components/PromptDialog/index.js.map +1 -0
- package/build/components/PromptDialog/style.css +1 -0
- package/build/components/QuantityStepper/index.cjs +2 -0
- package/build/components/QuantityStepper/index.cjs.map +1 -0
- package/build/components/QuantityStepper/index.d.ts +21 -0
- package/build/components/QuantityStepper/index.js +106 -0
- package/build/components/QuantityStepper/index.js.map +1 -0
- package/build/components/QuantityStepper/style.css +1 -0
- package/build/components/Radio/index.cjs +2 -0
- package/build/components/Radio/index.cjs.map +1 -0
- package/build/components/Radio/index.d.ts +12 -0
- package/build/components/Radio/index.js +35 -0
- package/build/components/Radio/index.js.map +1 -0
- package/build/components/Radio/style.css +1 -0
- package/build/components/RadioCard/index.cjs +2 -0
- package/build/components/RadioCard/index.cjs.map +1 -0
- package/build/components/RadioCard/index.d.ts +16 -0
- package/build/components/RadioCard/index.js +48 -0
- package/build/components/RadioCard/index.js.map +1 -0
- package/build/components/RadioCard/style.css +1 -0
- package/build/components/RangeSlider/index.cjs +2 -0
- package/build/components/RangeSlider/index.cjs.map +1 -0
- package/build/components/RangeSlider/index.d.ts +26 -0
- package/build/components/RangeSlider/index.js +102 -0
- package/build/components/RangeSlider/index.js.map +1 -0
- package/build/components/RangeSlider/style.css +1 -0
- package/build/components/Rating/index.cjs +2 -0
- package/build/components/Rating/index.cjs.map +1 -0
- package/build/components/Rating/index.d.ts +16 -0
- package/build/components/Rating/index.js +29 -0
- package/build/components/Rating/index.js.map +1 -0
- package/build/components/Rating/style.css +1 -0
- package/build/components/RatingInput/index.cjs +2 -0
- package/build/components/RatingInput/index.cjs.map +1 -0
- package/build/components/RatingInput/index.d.ts +21 -0
- package/build/components/RatingInput/index.js +75 -0
- package/build/components/RatingInput/index.js.map +1 -0
- package/build/components/RatingInput/style.css +1 -0
- package/build/components/ScrollArea/index.cjs +2 -0
- package/build/components/ScrollArea/index.cjs.map +1 -0
- package/build/components/ScrollArea/index.d.ts +23 -0
- package/build/components/ScrollArea/index.js +65 -0
- package/build/components/ScrollArea/index.js.map +1 -0
- package/build/components/ScrollArea/style.css +1 -0
- package/build/components/SectionHeader/index.cjs +2 -0
- package/build/components/SectionHeader/index.cjs.map +1 -0
- package/build/components/SectionHeader/index.d.ts +17 -0
- package/build/components/SectionHeader/index.js +25 -0
- package/build/components/SectionHeader/index.js.map +1 -0
- package/build/components/SectionHeader/style.css +1 -0
- package/build/components/SegmentedControl/index.cjs +2 -0
- package/build/components/SegmentedControl/index.cjs.map +1 -0
- package/build/components/SegmentedControl/index.d.ts +24 -0
- package/build/components/SegmentedControl/index.js +69 -0
- package/build/components/SegmentedControl/index.js.map +1 -0
- package/build/components/SegmentedControl/style.css +1 -0
- package/build/components/Select/index.cjs +2 -0
- package/build/components/Select/index.cjs.map +1 -0
- package/build/components/Select/index.d.ts +39 -0
- package/build/components/Select/index.js +179 -0
- package/build/components/Select/index.js.map +1 -0
- package/build/components/Select/style.css +1 -0
- package/build/components/Skeleton/index.cjs +2 -0
- package/build/components/Skeleton/index.cjs.map +1 -0
- package/build/components/Skeleton/index.d.ts +25 -0
- package/build/components/Skeleton/index.js +50 -0
- package/build/components/Skeleton/index.js.map +1 -0
- package/build/components/Skeleton/style.css +1 -0
- package/build/components/Spinner/index.cjs +2 -0
- package/build/components/Spinner/index.cjs.map +1 -0
- package/build/components/Spinner/index.d.ts +11 -0
- package/build/components/Spinner/index.js +15 -0
- package/build/components/Spinner/index.js.map +1 -0
- package/build/components/Spinner/style.css +1 -0
- package/build/components/Stat/index.cjs +2 -0
- package/build/components/Stat/index.cjs.map +1 -0
- package/build/components/Stat/index.d.ts +34 -0
- package/build/components/Stat/index.js +72 -0
- package/build/components/Stat/index.js.map +1 -0
- package/build/components/Stat/style.css +1 -0
- package/build/components/StatusDot/index.cjs +2 -0
- package/build/components/StatusDot/index.cjs.map +1 -0
- package/build/components/StatusDot/index.d.ts +23 -0
- package/build/components/StatusDot/index.js +23 -0
- package/build/components/StatusDot/index.js.map +1 -0
- package/build/components/StatusDot/style.css +1 -0
- package/build/components/Steps/index.cjs +2 -0
- package/build/components/Steps/index.cjs.map +1 -0
- package/build/components/Steps/index.d.ts +23 -0
- package/build/components/Steps/index.js +69 -0
- package/build/components/Steps/index.js.map +1 -0
- package/build/components/Steps/style.css +1 -0
- package/build/components/SummaryCard/index.cjs +2 -0
- package/build/components/SummaryCard/index.cjs.map +1 -0
- package/build/components/SummaryCard/index.d.ts +24 -0
- package/build/components/SummaryCard/index.js +33 -0
- package/build/components/SummaryCard/index.js.map +1 -0
- package/build/components/SummaryCard/style.css +1 -0
- package/build/components/Switch/index.cjs +2 -0
- package/build/components/Switch/index.cjs.map +1 -0
- package/build/components/Switch/index.d.ts +16 -0
- package/build/components/Switch/index.js +42 -0
- package/build/components/Switch/index.js.map +1 -0
- package/build/components/Switch/style.css +1 -0
- package/build/components/Table/index.cjs +2 -0
- package/build/components/Table/index.cjs.map +1 -0
- package/build/components/Table/index.d.ts +28 -0
- package/build/components/Table/index.js +58 -0
- package/build/components/Table/index.js.map +1 -0
- package/build/components/Table/style.css +1 -0
- package/build/components/TableCheckbox/index.cjs +2 -0
- package/build/components/TableCheckbox/index.cjs.map +1 -0
- package/build/components/TableCheckbox/index.d.ts +15 -0
- package/build/components/TableCheckbox/index.js +31 -0
- package/build/components/TableCheckbox/index.js.map +1 -0
- package/build/components/TableCheckbox/style.css +1 -0
- package/build/components/Tabs/index.cjs +2 -0
- package/build/components/Tabs/index.cjs.map +1 -0
- package/build/components/Tabs/index.d.ts +27 -0
- package/build/components/Tabs/index.js +102 -0
- package/build/components/Tabs/index.js.map +1 -0
- package/build/components/Tabs/style.css +1 -0
- package/build/components/TagInput/index.cjs +2 -0
- package/build/components/TagInput/index.cjs.map +1 -0
- package/build/components/TagInput/index.d.ts +25 -0
- package/build/components/TagInput/index.js +124 -0
- package/build/components/TagInput/index.js.map +1 -0
- package/build/components/TagInput/style.css +1 -0
- package/build/components/TextLink/index.cjs +2 -0
- package/build/components/TextLink/index.cjs.map +1 -0
- package/build/components/TextLink/index.d.ts +16 -0
- package/build/components/TextLink/index.js +32 -0
- package/build/components/TextLink/index.js.map +1 -0
- package/build/components/TextLink/style.css +1 -0
- package/build/components/Textarea/index.cjs +2 -0
- package/build/components/Textarea/index.cjs.map +1 -0
- package/build/components/Textarea/index.d.ts +20 -0
- package/build/components/Textarea/index.js +68 -0
- package/build/components/Textarea/index.js.map +1 -0
- package/build/components/Textarea/style.css +1 -0
- package/build/components/Tile/index.cjs +2 -0
- package/build/components/Tile/index.cjs.map +1 -0
- package/build/components/Tile/index.d.ts +19 -0
- package/build/components/Tile/index.js +24 -0
- package/build/components/Tile/index.js.map +1 -0
- package/build/components/Tile/style.css +1 -0
- package/build/components/Timeline/index.cjs +2 -0
- package/build/components/Timeline/index.cjs.map +1 -0
- package/build/components/Timeline/index.d.ts +24 -0
- package/build/components/Timeline/index.js +56 -0
- package/build/components/Timeline/index.js.map +1 -0
- package/build/components/Timeline/style.css +1 -0
- package/build/components/Toast/index.cjs +2 -0
- package/build/components/Toast/index.cjs.map +1 -0
- package/build/components/Toast/index.d.ts +43 -0
- package/build/components/Toast/index.js +136 -0
- package/build/components/Toast/index.js.map +1 -0
- package/build/components/Toast/style.css +1 -0
- package/build/components/ToastPortal/index.cjs +2 -0
- package/build/components/ToastPortal/index.cjs.map +1 -0
- package/build/components/ToastPortal/index.d.ts +8 -0
- package/build/components/ToastPortal/index.js +15 -0
- package/build/components/ToastPortal/index.js.map +1 -0
- package/build/components/Tooltip/index.cjs +2 -0
- package/build/components/Tooltip/index.cjs.map +1 -0
- package/build/components/Tooltip/index.d.ts +23 -0
- package/build/components/Tooltip/index.js +116 -0
- package/build/components/Tooltip/index.js.map +1 -0
- package/build/components/Tooltip/style.css +1 -0
- package/build/constants/breakpoint.constants.cjs +2 -0
- package/build/constants/breakpoint.constants.cjs.map +1 -0
- package/build/constants/breakpoint.constants.d.ts +13 -0
- package/build/constants/breakpoint.constants.js +11 -0
- package/build/constants/breakpoint.constants.js.map +1 -0
- package/build/constants/combobox.constants.cjs +2 -0
- package/build/constants/combobox.constants.cjs.map +1 -0
- package/build/constants/combobox.constants.d.ts +11 -0
- package/build/constants/combobox.constants.js +7 -0
- package/build/constants/combobox.constants.js.map +1 -0
- package/build/constants/scroll.constants.cjs +2 -0
- package/build/constants/scroll.constants.cjs.map +1 -0
- package/build/constants/scroll.constants.d.ts +7 -0
- package/build/constants/scroll.constants.js +5 -0
- package/build/constants/scroll.constants.js.map +1 -0
- package/build/enums/ui-size.enum.cjs +2 -0
- package/build/enums/ui-size.enum.cjs.map +1 -0
- package/build/enums/ui-size.enum.d.ts +12 -0
- package/build/enums/ui-size.enum.js +5 -0
- package/build/enums/ui-size.enum.js.map +1 -0
- package/build/enums/ui-variant.enum.cjs +2 -0
- package/build/enums/ui-variant.enum.cjs.map +1 -0
- package/build/enums/ui-variant.enum.d.ts +20 -0
- package/build/enums/ui-variant.enum.js +5 -0
- package/build/enums/ui-variant.enum.js.map +1 -0
- package/build/helpers/class-name.helper.cjs +2 -0
- package/build/helpers/class-name.helper.cjs.map +1 -0
- package/build/helpers/class-name.helper.d.ts +3 -0
- package/build/helpers/class-name.helper.js +10 -0
- package/build/helpers/class-name.helper.js.map +1 -0
- package/build/helpers/component.helper.cjs +2 -0
- package/build/helpers/component.helper.cjs.map +1 -0
- package/build/helpers/component.helper.d.ts +13 -0
- package/build/helpers/component.helper.js +5 -0
- package/build/helpers/component.helper.js.map +1 -0
- package/build/helpers/focus.helper.cjs +2 -0
- package/build/helpers/focus.helper.cjs.map +1 -0
- package/build/helpers/focus.helper.d.ts +42 -0
- package/build/helpers/focus.helper.js +65 -0
- package/build/helpers/focus.helper.js.map +1 -0
- package/build/helpers/label.helper.cjs +2 -0
- package/build/helpers/label.helper.cjs.map +1 -0
- package/build/helpers/label.helper.d.ts +11 -0
- package/build/helpers/label.helper.js +11 -0
- package/build/helpers/label.helper.js.map +1 -0
- package/build/helpers/portal.helper.cjs +2 -0
- package/build/helpers/portal.helper.cjs.map +1 -0
- package/build/helpers/portal.helper.d.ts +28 -0
- package/build/helpers/portal.helper.js +36 -0
- package/build/helpers/portal.helper.js.map +1 -0
- package/build/helpers/scroll.helper.cjs +2 -0
- package/build/helpers/scroll.helper.cjs.map +1 -0
- package/build/helpers/scroll.helper.d.ts +8 -0
- package/build/helpers/scroll.helper.js +11 -0
- package/build/helpers/scroll.helper.js.map +1 -0
- package/build/helpers/text.helper.cjs +2 -0
- package/build/helpers/text.helper.cjs.map +1 -0
- package/build/helpers/text.helper.d.ts +5 -0
- package/build/helpers/text.helper.js +6 -0
- package/build/helpers/text.helper.js.map +1 -0
- package/build/helpers/theme.helper.cjs +2 -0
- package/build/helpers/theme.helper.cjs.map +1 -0
- package/build/helpers/theme.helper.d.ts +18 -0
- package/build/helpers/theme.helper.js +37 -0
- package/build/helpers/theme.helper.js.map +1 -0
- package/build/hooks/useAnnounce.cjs +2 -0
- package/build/hooks/useAnnounce.cjs.map +1 -0
- package/build/hooks/useAnnounce.d.ts +4 -0
- package/build/hooks/useAnnounce.js +23 -0
- package/build/hooks/useAnnounce.js.map +1 -0
- package/build/hooks/useAsyncSearch.cjs +2 -0
- package/build/hooks/useAsyncSearch.cjs.map +1 -0
- package/build/hooks/useAsyncSearch.d.ts +11 -0
- package/build/hooks/useAsyncSearch.js +17 -0
- package/build/hooks/useAsyncSearch.js.map +1 -0
- package/build/hooks/useCopyFeedback.cjs +2 -0
- package/build/hooks/useCopyFeedback.cjs.map +1 -0
- package/build/hooks/useCopyFeedback.d.ts +10 -0
- package/build/hooks/useCopyFeedback.js +25 -0
- package/build/hooks/useCopyFeedback.js.map +1 -0
- package/build/hooks/useDismissOnEscape.cjs +2 -0
- package/build/hooks/useDismissOnEscape.cjs.map +1 -0
- package/build/hooks/useDismissOnEscape.d.ts +12 -0
- package/build/hooks/useDismissOnEscape.js +18 -0
- package/build/hooks/useDismissOnEscape.js.map +1 -0
- package/build/hooks/useListboxNavigation.cjs +2 -0
- package/build/hooks/useListboxNavigation.cjs.map +1 -0
- package/build/hooks/useListboxNavigation.d.ts +7 -0
- package/build/hooks/useListboxNavigation.js +53 -0
- package/build/hooks/useListboxNavigation.js.map +1 -0
- package/build/hooks/usePortalSurface.cjs +2 -0
- package/build/hooks/usePortalSurface.cjs.map +1 -0
- package/build/hooks/usePortalSurface.d.ts +25 -0
- package/build/hooks/usePortalSurface.js +19 -0
- package/build/hooks/usePortalSurface.js.map +1 -0
- package/build/hooks/usePositioning.cjs +2 -0
- package/build/hooks/usePositioning.cjs.map +1 -0
- package/build/hooks/usePositioning.d.ts +13 -0
- package/build/hooks/usePositioning.js +74 -0
- package/build/hooks/usePositioning.js.map +1 -0
- package/build/hooks/useScrollLock.cjs +2 -0
- package/build/hooks/useScrollLock.cjs.map +1 -0
- package/build/hooks/useScrollLock.d.ts +2 -0
- package/build/hooks/useScrollLock.js +34 -0
- package/build/hooks/useScrollLock.js.map +1 -0
- package/build/hooks/useSheetViewport.cjs +2 -0
- package/build/hooks/useSheetViewport.cjs.map +1 -0
- package/build/hooks/useSheetViewport.d.ts +6 -0
- package/build/hooks/useSheetViewport.js +29 -0
- package/build/hooks/useSheetViewport.js.map +1 -0
- package/build/hooks/useStickToBottom.cjs +2 -0
- package/build/hooks/useStickToBottom.cjs.map +1 -0
- package/build/hooks/useStickToBottom.d.ts +12 -0
- package/build/hooks/useStickToBottom.js +39 -0
- package/build/hooks/useStickToBottom.js.map +1 -0
- package/build/hooks/useUiTheme.cjs +2 -0
- package/build/hooks/useUiTheme.cjs.map +1 -0
- package/build/hooks/useUiTheme.d.ts +10 -0
- package/build/hooks/useUiTheme.js +42 -0
- package/build/hooks/useUiTheme.js.map +1 -0
- package/build/hooks/useUiTokens.cjs +2 -0
- package/build/hooks/useUiTokens.cjs.map +1 -0
- package/build/hooks/useUiTokens.d.ts +11 -0
- package/build/hooks/useUiTokens.js +36 -0
- package/build/hooks/useUiTokens.js.map +1 -0
- package/build/hooks/useVirtualList.cjs +2 -0
- package/build/hooks/useVirtualList.cjs.map +1 -0
- package/build/hooks/useVirtualList.d.ts +13 -0
- package/build/hooks/useVirtualList.js +41 -0
- package/build/hooks/useVirtualList.js.map +1 -0
- package/build/index.cjs +2 -0
- package/build/index.cjs.map +1 -0
- package/build/index.d.ts +93 -0
- package/build/index.js +199 -0
- package/build/index.js.map +1 -0
- package/build/scss/_index.scss +7 -0
- package/build/scss/_mixins.scss +828 -0
- package/build/scss/_variables.scss +243 -0
- package/build/styles/base.d.ts +0 -0
- package/build/styles.css +133 -0
- package/build/theme/UiProvider.cjs +2 -0
- package/build/theme/UiProvider.cjs.map +1 -0
- package/build/theme/UiProvider.d.ts +23 -0
- package/build/theme/UiProvider.js +12 -0
- package/build/theme/UiProvider.js.map +1 -0
- package/build/theme/UiThemeScript.cjs +2 -0
- package/build/theme/UiThemeScript.cjs.map +1 -0
- package/build/theme/UiThemeScript.d.ts +22 -0
- package/build/theme/UiThemeScript.js +8 -0
- package/build/theme/UiThemeScript.js.map +1 -0
- package/build/theme/context.cjs +2 -0
- package/build/theme/context.cjs.map +1 -0
- package/build/theme/context.d.ts +5 -0
- package/build/theme/context.js +8 -0
- package/build/theme/context.js.map +1 -0
- package/build/types/charts/AreaChart/index.d.ts +14 -0
- package/build/types/charts/BarChart/index.d.ts +16 -0
- package/build/types/charts/BoxPlot/index.d.ts +43 -0
- package/build/types/charts/ComposedChart/index.d.ts +16 -0
- package/build/types/charts/Heatmap/index.d.ts +30 -0
- package/build/types/charts/Histogram/index.d.ts +29 -0
- package/build/types/charts/LineChart/index.d.ts +14 -0
- package/build/types/charts/PieChart/index.d.ts +36 -0
- package/build/types/charts/RadarChart/index.d.ts +40 -0
- package/build/types/charts/ScatterPlot/index.d.ts +41 -0
- package/build/types/charts/core/CartesianChart.d.ts +43 -0
- package/build/types/charts/core/ChartFrame.d.ts +55 -0
- package/build/types/charts/core/axes.d.ts +37 -0
- package/build/types/charts/core/cartesian.d.ts +80 -0
- package/build/types/charts/core/format.d.ts +19 -0
- package/build/types/charts/core/margins.d.ts +9 -0
- package/build/types/charts/core/palette.d.ts +11 -0
- package/build/types/charts/core/path.d.ts +24 -0
- package/build/types/charts/core/scale.d.ts +40 -0
- package/build/types/charts/core/series.d.ts +11 -0
- package/build/types/charts/core/spatial.d.ts +12 -0
- package/build/types/charts/core/stats.d.ts +34 -0
- package/build/types/charts/core/types.d.ts +31 -0
- package/build/types/charts/core/useChartWidth.d.ts +7 -0
- package/build/types/charts/index.d.ts +21 -0
- package/build/types/chat/ActionList/index.d.ts +46 -0
- package/build/types/chat/AppBar/index.d.ts +21 -0
- package/build/types/chat/ChatMessage/index.d.ts +24 -0
- package/build/types/chat/ChatThread/index.d.ts +24 -0
- package/build/types/chat/Citation/index.d.ts +15 -0
- package/build/types/chat/CodeBlock/format.d.ts +7 -0
- package/build/types/chat/CodeBlock/grammars.d.ts +44 -0
- package/build/types/chat/CodeBlock/highlight.d.ts +22 -0
- package/build/types/chat/CodeBlock/index.d.ts +33 -0
- package/build/types/chat/DescriptionList/index.d.ts +16 -0
- package/build/types/chat/Legend/index.d.ts +21 -0
- package/build/types/chat/MessageActions/index.d.ts +21 -0
- package/build/types/chat/PromptInput/index.d.ts +47 -0
- package/build/types/chat/PromptSuggestions/index.d.ts +25 -0
- package/build/types/chat/Prose/index.d.ts +15 -0
- package/build/types/chat/ReasoningBlock/index.d.ts +24 -0
- package/build/types/chat/ReasoningText/index.d.ts +14 -0
- package/build/types/chat/SegmentBar/index.d.ts +46 -0
- package/build/types/chat/SourceList/index.d.ts +25 -0
- package/build/types/chat/TerminalOutput/index.d.ts +25 -0
- package/build/types/chat/ToolCall/index.d.ts +41 -0
- package/build/types/chat/index.d.ts +26 -0
- package/build/types/combobox.type.d.ts +49 -0
- package/build/types/common-element-props.type.d.ts +8 -0
- package/build/types/helpers/class-name.helper.d.ts +3 -0
- package/build/types/helpers/component.helper.d.ts +13 -0
- package/build/types/helpers/label.helper.d.ts +12 -0
- package/build/types/hook.type.d.ts +36 -0
- package/build/types/link.type.d.ts +14 -0
- package/build/types/positioning.type.d.ts +38 -0
- package/build/types/theme.type.d.ts +181 -0
- package/build/types/types/common-element-props.type.d.ts +8 -0
- package/build/types/types/link.type.d.ts +14 -0
- package/build/types/types/theme.type.d.ts +181 -0
- package/package.json +487 -4
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ElementType, FC, ReactNode } from 'react';
|
|
2
|
+
import { UiLinkExtraProps } from '../../types/link.type';
|
|
3
|
+
type CardProps = {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
/** Kartın tamamı bir hedefe götürüyorsa hover geri bildirimi açılır. */
|
|
6
|
+
isInteractive?: boolean;
|
|
7
|
+
/** Semantik etiket: liste öğesi kartları `article` olmalı. */
|
|
8
|
+
as?: ElementType;
|
|
9
|
+
className?: string;
|
|
10
|
+
testId?: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Kart — medya + gövde + eylem şeridi.
|
|
14
|
+
* @example <Card as="article" isInteractive> <CardMedia href="/urun/x" ratio={1}>…
|
|
15
|
+
*/
|
|
16
|
+
declare const Card: FC<CardProps>;
|
|
17
|
+
/** Görselin çerçeveyi NASIL doldurduğu. */
|
|
18
|
+
export type CardMediaFit = 'cover' | 'contain' | 'inset';
|
|
19
|
+
type CardMediaProps = {
|
|
20
|
+
children: ReactNode;
|
|
21
|
+
/** Genişlik / yükseklik oranı. */
|
|
22
|
+
ratio?: number;
|
|
23
|
+
/** Medya alanı tıklanabilirse: görsel bağlantının içine alınır. */
|
|
24
|
+
href?: string;
|
|
25
|
+
/** Yönlendiriciye geçirilecek ek props. */
|
|
26
|
+
linkProps?: UiLinkExtraProps;
|
|
27
|
+
/** Görsel çerçeveyi nasıl doldurur — bkz. */
|
|
28
|
+
fit?: CardMediaFit;
|
|
29
|
+
/** @deprecated `fit` kullanın: `isContained` → `fit="contain"`, `isContained={false}` →… */
|
|
30
|
+
isContained?: boolean;
|
|
31
|
+
className?: string;
|
|
32
|
+
};
|
|
33
|
+
/** Kartın görsel alanı. */
|
|
34
|
+
export declare const CardMedia: FC<CardMediaProps>;
|
|
35
|
+
type CardOverlayProps = {
|
|
36
|
+
children: ReactNode;
|
|
37
|
+
position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
|
|
38
|
+
className?: string;
|
|
39
|
+
};
|
|
40
|
+
/** Görselin üzerine binen katman: rozetler ve hızlı eylemler. */
|
|
41
|
+
export declare const CardOverlay: FC<CardOverlayProps>;
|
|
42
|
+
type CardSectionProps = {
|
|
43
|
+
children: ReactNode;
|
|
44
|
+
className?: string;
|
|
45
|
+
};
|
|
46
|
+
/** Kartın metin gövdesi: başlık, açıklama, üstyazı. */
|
|
47
|
+
export declare const CardBody: FC<CardSectionProps>;
|
|
48
|
+
/** Eylem şeridi — tutar, düğmeler. */
|
|
49
|
+
export declare const CardFooter: FC<CardSectionProps>;
|
|
50
|
+
declare const _default: typeof Card;
|
|
51
|
+
export default _default;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { memo as s } from "react";
|
|
3
|
+
import { cx as d } from "../../helpers/class-name.helper.js";
|
|
4
|
+
import { named as i } from "../../helpers/component.helper.js";
|
|
5
|
+
import f from "../Link/index.js";
|
|
6
|
+
const r = {"card":"ui-card-CaHUG","card--interactive":"ui-card--interactive-C1pXZ","media__frame":"ui-media__frame-eBv-s","media":"ui-media-eggk5","media__link":"ui-media__link-ujyVV","media__frame--cover":"ui-media__frame--cover-ddl29","media__frame--contain":"ui-media__frame--contain-5gosS","media__frame--inset":"ui-media__frame--inset-oVQIn","overlay":"ui-overlay-AVMTX","overlay--top-left":"ui-overlay--top-left-td1xA","overlay--top-right":"ui-overlay--top-right-GqD9H","overlay--bottom-left":"ui-overlay--bottom-left-T5Quw","overlay--bottom-right":"ui-overlay--bottom-right-za3z3","body":"ui-body-DyI-6","footer":"ui-footer-2WNCZ"};
|
|
7
|
+
const p = ({ children: a, isInteractive: e, as: t = "div", className: m, testId: c }) => /* @__PURE__ */ o(
|
|
8
|
+
t,
|
|
9
|
+
{
|
|
10
|
+
className: d(r.card, e && r["card--interactive"], m),
|
|
11
|
+
"data-testid": c,
|
|
12
|
+
children: a
|
|
13
|
+
}
|
|
14
|
+
), y = (a, e) => a ?? (e === !1 ? "cover" : "contain"), b = /* @__PURE__ */ i(
|
|
15
|
+
/* @__PURE__ */ s(({ children: a, ratio: e = 1, href: t, linkProps: m, fit: c, isContained: l, className: v }) => {
|
|
16
|
+
const n = /* @__PURE__ */ o(
|
|
17
|
+
"span",
|
|
18
|
+
{
|
|
19
|
+
className: d(r.media__frame, r[`media__frame--${y(c, l)}`]),
|
|
20
|
+
style: { aspectRatio: e },
|
|
21
|
+
children: a
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
return /* @__PURE__ */ o("div", { className: d(r.media, v), children: t ? (
|
|
25
|
+
// `tabIndex={-1}` + `aria-hidden`: aynı hedefe giden başlık bağlantısı zaten sekme
|
|
26
|
+
// sırasında.
|
|
27
|
+
/* @__PURE__ */ o(
|
|
28
|
+
f,
|
|
29
|
+
{
|
|
30
|
+
href: t,
|
|
31
|
+
className: r.media__link,
|
|
32
|
+
tabIndex: -1,
|
|
33
|
+
"aria-hidden": !0,
|
|
34
|
+
...m,
|
|
35
|
+
children: n
|
|
36
|
+
}
|
|
37
|
+
)
|
|
38
|
+
) : n });
|
|
39
|
+
}),
|
|
40
|
+
"CardMedia"
|
|
41
|
+
), h = /* @__PURE__ */ i(
|
|
42
|
+
/* @__PURE__ */ s(({ children: a, position: e = "top-left", className: t }) => /* @__PURE__ */ o("div", { className: d(r.overlay, r[`overlay--${e}`], t), children: a })),
|
|
43
|
+
"CardOverlay"
|
|
44
|
+
), k = /* @__PURE__ */ i(
|
|
45
|
+
/* @__PURE__ */ s(({ children: a, className: e }) => /* @__PURE__ */ o("div", { className: d(r.body, e), children: a })),
|
|
46
|
+
"CardBody"
|
|
47
|
+
), B = /* @__PURE__ */ i(
|
|
48
|
+
/* @__PURE__ */ s(({ children: a, className: e }) => /* @__PURE__ */ o("div", { className: d(r.footer, e), children: a })),
|
|
49
|
+
"CardFooter"
|
|
50
|
+
), M = /* @__PURE__ */ s(p);
|
|
51
|
+
export {
|
|
52
|
+
k as CardBody,
|
|
53
|
+
B as CardFooter,
|
|
54
|
+
b as CardMedia,
|
|
55
|
+
h as CardOverlay,
|
|
56
|
+
M as default
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Card/index.tsx"],"sourcesContent":["import { type ElementType, type FC, memo, type ReactNode } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\nimport type { UiLinkExtraProps } from '../../types/link.type';\nimport UiLink from '../Link';\n\nimport styles from './index.module.scss';\n\ntype CardProps = {\n children: ReactNode;\n /** Kartın tamamı bir hedefe götürüyorsa hover geri bildirimi açılır. */\n isInteractive?: boolean;\n /** Semantik etiket: liste öğesi kartları `article` olmalı. */\n as?: ElementType;\n className?: string;\n testId?: string;\n};\n\n/**\n * Kart — medya + gövde + eylem şeridi.\n * @example <Card as=\"article\" isInteractive> <CardMedia href=\"/urun/x\" ratio={1}>…\n */\nconst Card: FC<CardProps> = ({ children, isInteractive, as: Tag = 'div', className, testId }) => (\n <Tag\n className={cx(styles.card, isInteractive && styles['card--interactive'], className)}\n data-testid={testId}\n >\n {children}\n </Tag>\n);\n\n/** Görselin çerçeveyi NASIL doldurduğu. */\nexport type CardMediaFit = 'cover' | 'contain' | 'inset';\n\ntype CardMediaProps = {\n children: ReactNode;\n /** Genişlik / yükseklik oranı. */\n ratio?: number;\n /** Medya alanı tıklanabilirse: görsel bağlantının içine alınır. */\n href?: string;\n /** Yönlendiriciye geçirilecek ek props. */\n linkProps?: UiLinkExtraProps;\n /** Görsel çerçeveyi nasıl doldurur — bkz. */\n fit?: CardMediaFit;\n /** @deprecated `fit` kullanın: `isContained` → `fit=\"contain\"`, `isContained={false}` →… */\n isContained?: boolean;\n className?: string;\n};\n\n/** `fit` ile eski `isContained` arasındaki köprü. */\nconst resolveFit = (\n fit: CardMediaFit | undefined,\n isContained: boolean | undefined,\n): CardMediaFit => fit ?? (isContained === false ? 'cover' : 'contain');\n\n/** Kartın görsel alanı. */\nexport const CardMedia: FC<CardMediaProps> = /*#__PURE__*/ named(\n /*#__PURE__*/ memo(({ children, ratio = 1, href, linkProps, fit, isContained, className }) => {\n const content = (\n <span\n className={cx(styles.media__frame, styles[`media__frame--${resolveFit(fit, isContained)}`])}\n style={{ aspectRatio: ratio }}\n >\n {children}\n </span>\n );\n\n return (\n <div className={cx(styles.media, className)}>\n {href ? (\n // `tabIndex={-1}` + `aria-hidden`: aynı hedefe giden başlık bağlantısı zaten sekme\n // sırasında.\n <UiLink\n href={href}\n className={styles.media__link}\n tabIndex={-1}\n aria-hidden\n {...linkProps}\n >\n {content}\n </UiLink>\n ) : (\n content\n )}\n </div>\n );\n }),\n 'CardMedia',\n);\n\ntype CardOverlayProps = {\n children: ReactNode;\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n className?: string;\n};\n\n/** Görselin üzerine binen katman: rozetler ve hızlı eylemler. */\nexport const CardOverlay: FC<CardOverlayProps> = /*#__PURE__*/ named(\n /*#__PURE__*/ memo(({ children, position = 'top-left', className }) => (\n <div className={cx(styles.overlay, styles[`overlay--${position}`], className)}>{children}</div>\n )),\n 'CardOverlay',\n);\n\ntype CardSectionProps = {\n children: ReactNode;\n className?: string;\n};\n\n/** Kartın metin gövdesi: başlık, açıklama, üstyazı. */\nexport const CardBody: FC<CardSectionProps> = /*#__PURE__*/ named(\n /*#__PURE__*/ memo(({ children, className }) => (\n <div className={cx(styles.body, className)}>{children}</div>\n )),\n 'CardBody',\n);\n\n/** Eylem şeridi — tutar, düğmeler. */\nexport const CardFooter: FC<CardSectionProps> = /*#__PURE__*/ named(\n /*#__PURE__*/ memo(({ children, className }) => (\n <div className={cx(styles.footer, className)}>{children}</div>\n )),\n 'CardFooter',\n);\n\nexport default /*#__PURE__*/ memo(Card) as typeof Card;\n"],"names":["Card","children","isInteractive","Tag","className","testId","jsx","cx","styles","resolveFit","fit","isContained","CardMedia","named","memo","ratio","href","linkProps","content","UiLink","CardOverlay","position","CardBody","CardFooter","index"],"mappings":";;;;;;AAuBA,MAAMA,IAAsB,CAAC,EAAE,UAAAC,GAAU,eAAAC,GAAe,IAAIC,IAAM,OAAO,WAAAC,GAAW,QAAAC,EAAA,MAClF,gBAAAC;AAAA,EAACH;AAAA,EAAA;AAAA,IACC,WAAWI,EAAGC,EAAO,MAAMN,KAAiBM,EAAO,mBAAmB,GAAGJ,CAAS;AAAA,IAClF,eAAaC;AAAA,IAEZ,UAAAJ;AAAA,EAAA;AACH,GAsBIQ,IAAa,CACjBC,GACAC,MACiBD,MAAQC,MAAgB,KAAQ,UAAU,YAGhDC,IAA8C,gBAAAC;AAAA,EAC3C,gBAAAC,EAAK,CAAC,EAAE,UAAAb,GAAU,OAAAc,IAAQ,GAAG,MAAAC,GAAM,WAAAC,GAAW,KAAAP,GAAK,aAAAC,GAAa,WAAAP,QAAgB;AAC5F,UAAMc,IACJ,gBAAAZ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWC,EAAGC,EAAO,cAAcA,EAAO,iBAAiBC,EAAWC,GAAKC,CAAW,CAAC,EAAE,CAAC;AAAA,QAC1F,OAAO,EAAE,aAAaI,EAAA;AAAA,QAErB,UAAAd;AAAA,MAAA;AAAA,IAAA;AAIL,6BACG,OAAA,EAAI,WAAWM,EAAGC,EAAO,OAAOJ,CAAS,GACvC,UAAAY;AAAA;AAAA;AAAA,MAGC,gBAAAV;AAAA,QAACa;AAAA,QAAA;AAAA,UACC,MAAAH;AAAA,UACA,WAAWR,EAAO;AAAA,UAClB,UAAU;AAAA,UACV,eAAW;AAAA,UACV,GAAGS;AAAA,UAEH,UAAAC;AAAA,QAAA;AAAA,MAAA;AAAA,QAGHA,GAEJ;AAAA,EAEJ,CAAC;AAAA,EACD;AACF,GASaE,IAAkD,gBAAAP;AAAA,EAC/C,gBAAAC,EAAK,CAAC,EAAE,UAAAb,GAAU,UAAAoB,IAAW,YAAY,WAAAjB,EAAA,MACrD,gBAAAE,EAAC,OAAA,EAAI,WAAWC,EAAGC,EAAO,SAASA,EAAO,YAAYa,CAAQ,EAAE,GAAGjB,CAAS,GAAI,UAAAH,EAAA,CAAS,CAC1F;AAAA,EACD;AACF,GAQaqB,IAA+C,gBAAAT;AAAA,EAC5C,gBAAAC,EAAK,CAAC,EAAE,UAAAb,GAAU,WAAAG,QAC9B,gBAAAE,EAAC,OAAA,EAAI,WAAWC,EAAGC,EAAO,MAAMJ,CAAS,GAAI,UAAAH,GAAS,CACvD;AAAA,EACD;AACF,GAGasB,IAAiD,gBAAAV;AAAA,EAC9C,gBAAAC,EAAK,CAAC,EAAE,UAAAb,GAAU,WAAAG,QAC9B,gBAAAE,EAAC,OAAA,EAAI,WAAWC,EAAGC,EAAO,QAAQJ,CAAS,GAAI,UAAAH,GAAS,CACzD;AAAA,EACD;AACF,GAEAuB,sBAAkCxB,CAAI;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-card-CaHUG{background-color:var(--hd-bg-surface);border:1px solid var(--hd-border);border-radius:var(--hd-radius-md)}@media (max-width: 640px){.ui-card-CaHUG{border-radius:var(--hd-radius-sm)}}.ui-card-CaHUG{position:relative;display:flex;flex-direction:column;overflow:hidden;height:100%}.ui-card--interactive-C1pXZ{transition:border-color var(--hd-duration-fast) var(--hd-ease-standard),box-shadow var(--hd-duration-fast) var(--hd-ease-standard),transform var(--hd-duration-fast) var(--hd-ease-standard)}.ui-card--interactive-C1pXZ:hover{border-color:var(--hd-border-strong);box-shadow:var(--hd-shadow-2);transform:translateY(-2px)}.ui-card--interactive-C1pXZ:active{transform:translateY(0);box-shadow:var(--hd-shadow-1)}.ui-card--interactive-C1pXZ:hover .ui-media__frame-eBv-s>img{transform:scale(1.04)}@media (prefers-reduced-motion: reduce){.ui-card--interactive-C1pXZ{transition:none}.ui-card--interactive-C1pXZ:hover,.ui-card--interactive-C1pXZ:active{transform:none}.ui-card--interactive-C1pXZ:hover .ui-media__frame-eBv-s>img{transform:none}}.ui-media-eggk5{position:relative}.ui-media__link-ujyVV{display:block}.ui-media__frame-eBv-s{display:block;position:relative;width:100%;overflow:hidden}.ui-media__frame-eBv-s>img{width:100%;height:100%;transition:transform var(--hd-duration-slow) var(--hd-ease-standard)}@media (prefers-reduced-motion: reduce){.ui-media__frame-eBv-s>img{transition:none}}.ui-media__frame--cover-ddl29>img{object-fit:cover}.ui-media__frame--contain-5gosS,.ui-media__frame--inset-oVQIn{padding:var(--hd-space-4)}.ui-media__frame--contain-5gosS>img,.ui-media__frame--inset-oVQIn>img{object-fit:contain}.ui-media__frame--inset-oVQIn{display:flex;align-items:center;justify-content:center}.ui-media__frame--inset-oVQIn>img{width:85%;height:85%}.ui-overlay-AVMTX{position:absolute;z-index:var(--hd-z-sticky);display:flex;flex-direction:column;gap:var(--hd-space-1);pointer-events:none}.ui-overlay-AVMTX>button,.ui-overlay-AVMTX>a{pointer-events:auto}.ui-overlay--top-left-td1xA{top:var(--hd-space-3);inset-inline-start:var(--hd-space-3);align-items:flex-start}.ui-overlay--top-right-GqD9H{top:var(--hd-space-3);inset-inline-end:var(--hd-space-3);align-items:flex-end}.ui-overlay--bottom-left-T5Quw{bottom:var(--hd-space-3);inset-inline-start:var(--hd-space-3);align-items:flex-start}.ui-overlay--bottom-right-za3z3{bottom:var(--hd-space-3);inset-inline-end:var(--hd-space-3);align-items:flex-end}.ui-body-DyI-6{display:flex;flex-direction:column;gap:var(--hd-space-2);padding:var(--hd-space-4) var(--hd-space-4) var(--hd-space-3);flex:1;min-width:0}.ui-footer-2WNCZ{display:flex;flex-direction:column;gap:var(--hd-space-2);padding:var(--hd-space-3) var(--hd-space-4) var(--hd-space-4);border-top:1px solid var(--hd-border);margin-top:auto}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("react/jsx-runtime"),r=require("react"),b=require("react-bootstrap-icons"),p=require("../../helpers/class-name.helper.cjs"),F=require("../../helpers/component.helper.cjs"),x=require("../IconButton/index.cjs"),s={default:{"carousel":"ui-carousel-GJXkW","carousel__controls":"ui-carousel__controls-hm5ij","carousel__arrowIcon":"ui-carousel__arrowIcon-adFey","carousel__track":"ui-carousel__track-mAux5","carousel__dots":"ui-carousel__dots-iU8RJ","carousel__dot":"ui-carousel__dot-JTLCB","carousel__dot--active":"ui-carousel__dot--active-riNMm"}},I=({children:d,label:f,previousLabel:S,nextLabel:C,formatDotLabel:m,itemWidth:j,itemMinWidth:g,className:k,testId:w})=>{const l=r.useRef(null),[y,N]=r.useState(!1),[q,B]=r.useState(!1),[h,M]=r.useState(0),[u,R]=r.useState(1),[i,z]=r.useState(!1),n=r.useCallback(()=>{const t=l.current;if(!t)return;const{scrollLeft:e,scrollWidth:o,clientWidth:c}=t;N(e>1),B(e+c<o-1),M(c>0?Math.round(e/c):0),R(c>0?Math.max(1,Math.ceil(o/c)):1),z(o>c&&t.querySelector("a, button, input, select, textarea, [tabindex]")===null)},[]);r.useEffect(()=>{const t=l.current;if(!t)return;n(),t.addEventListener("scroll",n,{passive:!0});const e=typeof ResizeObserver>"u"?null:new ResizeObserver(n);return e==null||e.observe(t),()=>{t.removeEventListener("scroll",n),e==null||e.disconnect()}},[n,d]);const _=()=>{var t;return typeof window<"u"&&((t=window.matchMedia)!=null&&t.call(window,"(prefers-reduced-motion: reduce)").matches)?"auto":"smooth"},v=t=>{var e;return(e=l.current)==null?void 0:e.scrollBy({left:t*l.current.clientWidth,behavior:_()})};return a.jsxs("section",{className:p.cx(s.default.carousel,k),"aria-label":f,"data-testid":w,children:[a.jsxs("div",{className:s.default.carousel__controls,children:[a.jsx(x.default,{icon:a.jsx(b.CaretLeftFill,{"aria-hidden":!0,className:s.default.carousel__arrowIcon}),label:S,variant:"outline",size:"sm",disabled:!y,onClick:()=>v(-1)}),a.jsx(x.default,{icon:a.jsx(b.CaretRightFill,{"aria-hidden":!0,className:s.default.carousel__arrowIcon}),label:C,variant:"outline",size:"sm",disabled:!q,onClick:()=>v(1)})]}),a.jsx("div",{ref:l,className:s.default.carousel__track,style:{"--ui-carousel-item-default":`${j??g??240}px`},tabIndex:i?0:void 0,role:i?"group":void 0,"aria-label":i?f:void 0,children:d}),m&&u>1&&a.jsx("div",{className:s.default.carousel__dots,children:Array.from({length:u},(t,e)=>a.jsx("button",{type:"button",className:p.cx(s.default.carousel__dot,e===h&&s.default["carousel__dot--active"]),"aria-label":m(e+1,u),"aria-current":e===h?"true":void 0,onClick:()=>{var o;return(o=l.current)==null?void 0:o.scrollTo({left:e*l.current.clientWidth,behavior:_()})}},e))})]})},P=r.memo(F.named(I,"Carousel"));exports.default=P;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Carousel/index.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, memo, type ReactNode, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { CaretLeftFill, CaretRightFill } from 'react-bootstrap-icons';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\nimport IconButton from '../IconButton';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n children: ReactNode;\n /** Şeridin erişilebilir adı (\"Öne çıkan ürünler\"). */\n label: string;\n /** Önceki/sonraki düğmelerinin erişilebilir adları. */\n previousLabel: string;\n nextLabel: string;\n /** Sayfa göstergesinin ad üreticisi (`index` 1 tabanlı). */\n formatDotLabel?: (index: number, total: number) => string;\n /** Bir kartın genişliği. Şerit her kartı bu genişlikte çizer. */\n itemWidth?: number;\n /**\n * @deprecated `itemWidth` kullanın. Ad bir ASGARİ genişlik vaat ediyordu ama şerit artık\n * kartları…\n */\n itemMinWidth?: number;\n className?: string;\n testId?: string;\n};\n\n/** Kaydırılabilir şerit (carousel). */\nconst Carousel: FC<Props> = ({\n children,\n label,\n previousLabel,\n nextLabel,\n formatDotLabel,\n itemWidth,\n itemMinWidth,\n className,\n testId,\n}) => {\n const trackRef = useRef<HTMLDivElement>(null);\n\n const [canScrollBack, setCanScrollBack] = useState(false);\n const [canScrollForward, setCanScrollForward] = useState(false);\n const [page, setPage] = useState(0);\n /*\n * Sayfa SAYISI da olculur: cocuk sayisindan hesaplamak, kac kartin yan yana sigdigini bilmeyi\n * gerektiriyor ve o sey yalnizca yerlesimden okunur.\n */\n const [pageCount, setPageCount] = useState(1);\n const [needsTabStop, setNeedsTabStop] = useState(false);\n\n /* DURUM SERIDIN KENDISINDEN OKUNUR, sayilmaz. */\n const measure = useCallback(() => {\n const track = trackRef.current;\n if (!track) return;\n\n const { scrollLeft, scrollWidth, clientWidth } = track;\n /* 1 px tolerans: alt piksel yuvarlama yuzunden uctaki dugme hicbir zaman pasiflesmiyordu. */\n setCanScrollBack(scrollLeft > 1);\n setCanScrollForward(scrollLeft + clientWidth < scrollWidth - 1);\n setPage(clientWidth > 0 ? Math.round(scrollLeft / clientWidth) : 0);\n setPageCount(clientWidth > 0 ? Math.max(1, Math.ceil(scrollWidth / clientWidth)) : 1);\n\n /* Odaklanabilir cocugu olan bir seride ek bir Tab duragi gereksiz. */\n setNeedsTabStop(\n scrollWidth > clientWidth &&\n track.querySelector('a, button, input, select, textarea, [tabindex]') === null,\n );\n }, []);\n\n useEffect(() => {\n const track = trackRef.current;\n if (!track) return;\n\n measure();\n track.addEventListener('scroll', measure, { passive: true });\n\n const observer = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(measure);\n observer?.observe(track);\n\n return () => {\n track.removeEventListener('scroll', measure);\n observer?.disconnect();\n };\n }, [measure, children]);\n\n /*\n * Bir GORUNUM genisligi kaydirir: sabit bir kart sayisi, farkli genislikteki kartlarda serit\n * ortasinda duruyordu.\n */\n /*\n * ⚠ HAREKET TERCİHİ JS TARAFINDA OKUNUR. `index.module.scss` içinde `@include reduced-motion {\n * scroll-behavior: auto }` vardı ama JS'in…\n */\n const scrollBehavior = (): ScrollBehavior =>\n typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches\n ? 'auto'\n : 'smooth';\n\n const scrollByPage = (direction: 1 | -1) =>\n trackRef.current?.scrollBy({\n left: direction * trackRef.current.clientWidth,\n behavior: scrollBehavior(),\n });\n\n return (\n <section className={cx(styles.carousel, className)} aria-label={label} data-testid={testId}>\n <div className={styles.carousel__controls}>\n <IconButton\n icon={<CaretLeftFill aria-hidden className={styles.carousel__arrowIcon} />}\n label={previousLabel}\n variant=\"outline\"\n size=\"sm\"\n disabled={!canScrollBack}\n onClick={() => scrollByPage(-1)}\n />\n <IconButton\n icon={<CaretRightFill aria-hidden className={styles.carousel__arrowIcon} />}\n label={nextLabel}\n variant=\"outline\"\n size=\"sm\"\n disabled={!canScrollForward}\n onClick={() => scrollByPage(1)}\n />\n </div>\n\n <div\n ref={trackRef}\n className={styles.carousel__track}\n /*\n * ⚠ Sutun genisligi SABIT, `1fr` DEGIL: `minmax(item, 1fr)` yalnizca serit DOLMADIGINDA\n * devreye giriyor ve kartlari gerdiriyordu\n */\n style={\n {\n '--ui-carousel-item-default': `${itemWidth ?? itemMinWidth ?? 240}px`,\n } as React.CSSProperties\n }\n /*\n * Yalnizca odaklanabilir cocugu OLMAYAN bir seride durak: aksi halde klavye kullanicisi\n * hicbir sey yapmayan bir durak geciyordu.\n */\n tabIndex={needsTabStop ? 0 : undefined}\n role={needsTabStop ? 'group' : undefined}\n aria-label={needsTabStop ? label : undefined}\n >\n {children}\n </div>\n\n {formatDotLabel && pageCount > 1 && (\n <div className={styles.carousel__dots}>\n {Array.from({ length: pageCount }, (_, index) => (\n <button\n key={index}\n type=\"button\"\n className={cx(\n styles.carousel__dot,\n index === page && styles['carousel__dot--active'],\n )}\n /*\n * Nokta ADSIZ birakilamaz: ekran okuyucuda \"dugme\" diye okunuyor ve kullanici nereye\n * gittigini bilmiyordu.\n */\n aria-label={formatDotLabel(index + 1, pageCount)}\n aria-current={index === page ? 'true' : undefined}\n onClick={() =>\n trackRef.current?.scrollTo({\n left: index * trackRef.current.clientWidth,\n behavior: scrollBehavior(),\n })\n }\n />\n ))}\n </div>\n )}\n </section>\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Carousel, 'Carousel')) as typeof Carousel;\n"],"names":["Carousel","children","label","previousLabel","nextLabel","formatDotLabel","itemWidth","itemMinWidth","className","testId","trackRef","useRef","canScrollBack","setCanScrollBack","useState","canScrollForward","setCanScrollForward","page","setPage","pageCount","setPageCount","needsTabStop","setNeedsTabStop","measure","useCallback","track","scrollLeft","scrollWidth","clientWidth","useEffect","observer","scrollBehavior","_a","scrollByPage","direction","jsxs","cx","styles","jsx","IconButton","CaretLeftFill","CaretRightFill","_","index","memo","named"],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
|
+
type Props = {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
/** Şeridin erişilebilir adı ("Öne çıkan ürünler"). */
|
|
5
|
+
label: string;
|
|
6
|
+
/** Önceki/sonraki düğmelerinin erişilebilir adları. */
|
|
7
|
+
previousLabel: string;
|
|
8
|
+
nextLabel: string;
|
|
9
|
+
/** Sayfa göstergesinin ad üreticisi (`index` 1 tabanlı). */
|
|
10
|
+
formatDotLabel?: (index: number, total: number) => string;
|
|
11
|
+
/** Bir kartın genişliği. Şerit her kartı bu genişlikte çizer. */
|
|
12
|
+
itemWidth?: number;
|
|
13
|
+
/**
|
|
14
|
+
* @deprecated `itemWidth` kullanın. Ad bir ASGARİ genişlik vaat ediyordu ama şerit artık
|
|
15
|
+
* kartları…
|
|
16
|
+
*/
|
|
17
|
+
itemMinWidth?: number;
|
|
18
|
+
className?: string;
|
|
19
|
+
testId?: string;
|
|
20
|
+
};
|
|
21
|
+
/** Kaydırılabilir şerit (carousel). */
|
|
22
|
+
declare const Carousel: FC<Props>;
|
|
23
|
+
declare const _default: typeof Carousel;
|
|
24
|
+
export default _default;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as b, jsx as a } from "react/jsx-runtime";
|
|
3
|
+
import { memo as W, useRef as E, useState as n, useCallback as L, useEffect as P } from "react";
|
|
4
|
+
import { CaretLeftFill as T, CaretRightFill as j } from "react-bootstrap-icons";
|
|
5
|
+
import { cx as _ } from "../../helpers/class-name.helper.js";
|
|
6
|
+
import { named as O } from "../../helpers/component.helper.js";
|
|
7
|
+
import C from "../IconButton/index.js";
|
|
8
|
+
const r = {"carousel":"ui-carousel-GJXkW","carousel__controls":"ui-carousel__controls-hm5ij","carousel__arrowIcon":"ui-carousel__arrowIcon-adFey","carousel__track":"ui-carousel__track-mAux5","carousel__dots":"ui-carousel__dots-iU8RJ","carousel__dot":"ui-carousel__dot-JTLCB","carousel__dot--active":"ui-carousel__dot--active-riNMm"};
|
|
9
|
+
const q = ({
|
|
10
|
+
children: d,
|
|
11
|
+
label: m,
|
|
12
|
+
previousLabel: k,
|
|
13
|
+
nextLabel: w,
|
|
14
|
+
formatDotLabel: f,
|
|
15
|
+
itemWidth: y,
|
|
16
|
+
itemMinWidth: g,
|
|
17
|
+
className: N,
|
|
18
|
+
testId: S
|
|
19
|
+
}) => {
|
|
20
|
+
const o = E(null), [x, B] = n(!1), [R, z] = n(!1), [p, F] = n(0), [i, I] = n(1), [u, M] = n(!1), c = L(() => {
|
|
21
|
+
const t = o.current;
|
|
22
|
+
if (!t) return;
|
|
23
|
+
const { scrollLeft: e, scrollWidth: s, clientWidth: l } = t;
|
|
24
|
+
B(e > 1), z(e + l < s - 1), F(l > 0 ? Math.round(e / l) : 0), I(l > 0 ? Math.max(1, Math.ceil(s / l)) : 1), M(
|
|
25
|
+
s > l && t.querySelector("a, button, input, select, textarea, [tabindex]") === null
|
|
26
|
+
);
|
|
27
|
+
}, []);
|
|
28
|
+
P(() => {
|
|
29
|
+
const t = o.current;
|
|
30
|
+
if (!t) return;
|
|
31
|
+
c(), t.addEventListener("scroll", c, { passive: !0 });
|
|
32
|
+
const e = typeof ResizeObserver > "u" ? null : new ResizeObserver(c);
|
|
33
|
+
return e == null || e.observe(t), () => {
|
|
34
|
+
t.removeEventListener("scroll", c), e == null || e.disconnect();
|
|
35
|
+
};
|
|
36
|
+
}, [c, d]);
|
|
37
|
+
const h = () => {
|
|
38
|
+
var t;
|
|
39
|
+
return typeof window < "u" && ((t = window.matchMedia) != null && t.call(window, "(prefers-reduced-motion: reduce)").matches) ? "auto" : "smooth";
|
|
40
|
+
}, v = (t) => {
|
|
41
|
+
var e;
|
|
42
|
+
return (e = o.current) == null ? void 0 : e.scrollBy({
|
|
43
|
+
left: t * o.current.clientWidth,
|
|
44
|
+
behavior: h()
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
return /* @__PURE__ */ b("section", { className: _(r.carousel, N), "aria-label": m, "data-testid": S, children: [
|
|
48
|
+
/* @__PURE__ */ b("div", { className: r.carousel__controls, children: [
|
|
49
|
+
/* @__PURE__ */ a(
|
|
50
|
+
C,
|
|
51
|
+
{
|
|
52
|
+
icon: /* @__PURE__ */ a(T, { "aria-hidden": !0, className: r.carousel__arrowIcon }),
|
|
53
|
+
label: k,
|
|
54
|
+
variant: "outline",
|
|
55
|
+
size: "sm",
|
|
56
|
+
disabled: !x,
|
|
57
|
+
onClick: () => v(-1)
|
|
58
|
+
}
|
|
59
|
+
),
|
|
60
|
+
/* @__PURE__ */ a(
|
|
61
|
+
C,
|
|
62
|
+
{
|
|
63
|
+
icon: /* @__PURE__ */ a(j, { "aria-hidden": !0, className: r.carousel__arrowIcon }),
|
|
64
|
+
label: w,
|
|
65
|
+
variant: "outline",
|
|
66
|
+
size: "sm",
|
|
67
|
+
disabled: !R,
|
|
68
|
+
onClick: () => v(1)
|
|
69
|
+
}
|
|
70
|
+
)
|
|
71
|
+
] }),
|
|
72
|
+
/* @__PURE__ */ a(
|
|
73
|
+
"div",
|
|
74
|
+
{
|
|
75
|
+
ref: o,
|
|
76
|
+
className: r.carousel__track,
|
|
77
|
+
style: {
|
|
78
|
+
"--ui-carousel-item-default": `${y ?? g ?? 240}px`
|
|
79
|
+
},
|
|
80
|
+
tabIndex: u ? 0 : void 0,
|
|
81
|
+
role: u ? "group" : void 0,
|
|
82
|
+
"aria-label": u ? m : void 0,
|
|
83
|
+
children: d
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
f && i > 1 && /* @__PURE__ */ a("div", { className: r.carousel__dots, children: Array.from({ length: i }, (t, e) => /* @__PURE__ */ a(
|
|
87
|
+
"button",
|
|
88
|
+
{
|
|
89
|
+
type: "button",
|
|
90
|
+
className: _(
|
|
91
|
+
r.carousel__dot,
|
|
92
|
+
e === p && r["carousel__dot--active"]
|
|
93
|
+
),
|
|
94
|
+
"aria-label": f(e + 1, i),
|
|
95
|
+
"aria-current": e === p ? "true" : void 0,
|
|
96
|
+
onClick: () => {
|
|
97
|
+
var s;
|
|
98
|
+
return (s = o.current) == null ? void 0 : s.scrollTo({
|
|
99
|
+
left: e * o.current.clientWidth,
|
|
100
|
+
behavior: h()
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
e
|
|
105
|
+
)) })
|
|
106
|
+
] });
|
|
107
|
+
}, U = /* @__PURE__ */ W(/* @__PURE__ */ O(q, "Carousel"));
|
|
108
|
+
export {
|
|
109
|
+
U as default
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Carousel/index.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, memo, type ReactNode, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { CaretLeftFill, CaretRightFill } from 'react-bootstrap-icons';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\nimport IconButton from '../IconButton';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n children: ReactNode;\n /** Şeridin erişilebilir adı (\"Öne çıkan ürünler\"). */\n label: string;\n /** Önceki/sonraki düğmelerinin erişilebilir adları. */\n previousLabel: string;\n nextLabel: string;\n /** Sayfa göstergesinin ad üreticisi (`index` 1 tabanlı). */\n formatDotLabel?: (index: number, total: number) => string;\n /** Bir kartın genişliği. Şerit her kartı bu genişlikte çizer. */\n itemWidth?: number;\n /**\n * @deprecated `itemWidth` kullanın. Ad bir ASGARİ genişlik vaat ediyordu ama şerit artık\n * kartları…\n */\n itemMinWidth?: number;\n className?: string;\n testId?: string;\n};\n\n/** Kaydırılabilir şerit (carousel). */\nconst Carousel: FC<Props> = ({\n children,\n label,\n previousLabel,\n nextLabel,\n formatDotLabel,\n itemWidth,\n itemMinWidth,\n className,\n testId,\n}) => {\n const trackRef = useRef<HTMLDivElement>(null);\n\n const [canScrollBack, setCanScrollBack] = useState(false);\n const [canScrollForward, setCanScrollForward] = useState(false);\n const [page, setPage] = useState(0);\n /*\n * Sayfa SAYISI da olculur: cocuk sayisindan hesaplamak, kac kartin yan yana sigdigini bilmeyi\n * gerektiriyor ve o sey yalnizca yerlesimden okunur.\n */\n const [pageCount, setPageCount] = useState(1);\n const [needsTabStop, setNeedsTabStop] = useState(false);\n\n /* DURUM SERIDIN KENDISINDEN OKUNUR, sayilmaz. */\n const measure = useCallback(() => {\n const track = trackRef.current;\n if (!track) return;\n\n const { scrollLeft, scrollWidth, clientWidth } = track;\n /* 1 px tolerans: alt piksel yuvarlama yuzunden uctaki dugme hicbir zaman pasiflesmiyordu. */\n setCanScrollBack(scrollLeft > 1);\n setCanScrollForward(scrollLeft + clientWidth < scrollWidth - 1);\n setPage(clientWidth > 0 ? Math.round(scrollLeft / clientWidth) : 0);\n setPageCount(clientWidth > 0 ? Math.max(1, Math.ceil(scrollWidth / clientWidth)) : 1);\n\n /* Odaklanabilir cocugu olan bir seride ek bir Tab duragi gereksiz. */\n setNeedsTabStop(\n scrollWidth > clientWidth &&\n track.querySelector('a, button, input, select, textarea, [tabindex]') === null,\n );\n }, []);\n\n useEffect(() => {\n const track = trackRef.current;\n if (!track) return;\n\n measure();\n track.addEventListener('scroll', measure, { passive: true });\n\n const observer = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(measure);\n observer?.observe(track);\n\n return () => {\n track.removeEventListener('scroll', measure);\n observer?.disconnect();\n };\n }, [measure, children]);\n\n /*\n * Bir GORUNUM genisligi kaydirir: sabit bir kart sayisi, farkli genislikteki kartlarda serit\n * ortasinda duruyordu.\n */\n /*\n * ⚠ HAREKET TERCİHİ JS TARAFINDA OKUNUR. `index.module.scss` içinde `@include reduced-motion {\n * scroll-behavior: auto }` vardı ama JS'in…\n */\n const scrollBehavior = (): ScrollBehavior =>\n typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches\n ? 'auto'\n : 'smooth';\n\n const scrollByPage = (direction: 1 | -1) =>\n trackRef.current?.scrollBy({\n left: direction * trackRef.current.clientWidth,\n behavior: scrollBehavior(),\n });\n\n return (\n <section className={cx(styles.carousel, className)} aria-label={label} data-testid={testId}>\n <div className={styles.carousel__controls}>\n <IconButton\n icon={<CaretLeftFill aria-hidden className={styles.carousel__arrowIcon} />}\n label={previousLabel}\n variant=\"outline\"\n size=\"sm\"\n disabled={!canScrollBack}\n onClick={() => scrollByPage(-1)}\n />\n <IconButton\n icon={<CaretRightFill aria-hidden className={styles.carousel__arrowIcon} />}\n label={nextLabel}\n variant=\"outline\"\n size=\"sm\"\n disabled={!canScrollForward}\n onClick={() => scrollByPage(1)}\n />\n </div>\n\n <div\n ref={trackRef}\n className={styles.carousel__track}\n /*\n * ⚠ Sutun genisligi SABIT, `1fr` DEGIL: `minmax(item, 1fr)` yalnizca serit DOLMADIGINDA\n * devreye giriyor ve kartlari gerdiriyordu\n */\n style={\n {\n '--ui-carousel-item-default': `${itemWidth ?? itemMinWidth ?? 240}px`,\n } as React.CSSProperties\n }\n /*\n * Yalnizca odaklanabilir cocugu OLMAYAN bir seride durak: aksi halde klavye kullanicisi\n * hicbir sey yapmayan bir durak geciyordu.\n */\n tabIndex={needsTabStop ? 0 : undefined}\n role={needsTabStop ? 'group' : undefined}\n aria-label={needsTabStop ? label : undefined}\n >\n {children}\n </div>\n\n {formatDotLabel && pageCount > 1 && (\n <div className={styles.carousel__dots}>\n {Array.from({ length: pageCount }, (_, index) => (\n <button\n key={index}\n type=\"button\"\n className={cx(\n styles.carousel__dot,\n index === page && styles['carousel__dot--active'],\n )}\n /*\n * Nokta ADSIZ birakilamaz: ekran okuyucuda \"dugme\" diye okunuyor ve kullanici nereye\n * gittigini bilmiyordu.\n */\n aria-label={formatDotLabel(index + 1, pageCount)}\n aria-current={index === page ? 'true' : undefined}\n onClick={() =>\n trackRef.current?.scrollTo({\n left: index * trackRef.current.clientWidth,\n behavior: scrollBehavior(),\n })\n }\n />\n ))}\n </div>\n )}\n </section>\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Carousel, 'Carousel')) as typeof Carousel;\n"],"names":["Carousel","children","label","previousLabel","nextLabel","formatDotLabel","itemWidth","itemMinWidth","className","testId","trackRef","useRef","canScrollBack","setCanScrollBack","useState","canScrollForward","setCanScrollForward","page","setPage","pageCount","setPageCount","needsTabStop","setNeedsTabStop","measure","useCallback","track","scrollLeft","scrollWidth","clientWidth","useEffect","observer","scrollBehavior","_a","scrollByPage","direction","jsxs","cx","styles","jsx","IconButton","CaretLeftFill","CaretRightFill","_","index","memo","named"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-carousel-GJXkW{position:relative}.ui-carousel__controls-hm5ij{display:flex;align-items:center;gap:var(--hd-space-1);justify-content:flex-end;margin-bottom:var(--hd-space-2)}[dir=rtl] .ui-carousel__arrowIcon-adFey{transform:scaleX(-1)}.ui-carousel__track-mAux5{display:grid;grid-auto-flow:column;grid-auto-columns:var(--ui-carousel-item, var(--ui-carousel-item-default, 240px));justify-content:start;gap:var(--hd-space-4);position:relative;overflow-x:auto;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;padding-block:var(--hd-space-1);scrollbar-width:thin;scrollbar-color:var(--hd-border-strong) transparent}.ui-carousel__track-mAux5::-webkit-scrollbar{width:8px;height:8px}.ui-carousel__track-mAux5::-webkit-scrollbar-track{background:transparent}.ui-carousel__track-mAux5::-webkit-scrollbar-thumb{background-color:var(--hd-border-strong);border-radius:var(--hd-radius-pill);border:2px solid transparent;background-clip:content-box}.ui-carousel__track-mAux5::-webkit-scrollbar-thumb:hover{background-color:var(--hd-text-3)}.ui-carousel__track-mAux5:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--hd-focus);outline-offset:var(--ui-ring-offset, -2px)}.ui-carousel__track-mAux5>*{scroll-snap-align:start}@media (prefers-reduced-motion: reduce){.ui-carousel__track-mAux5{scroll-behavior:auto}}.ui-carousel__dots-iU8RJ{display:flex;align-items:center;gap:var(--hd-space-1);justify-content:center;margin-top:var(--hd-space-3)}.ui-carousel__dot-JTLCB{position:relative}.ui-carousel__dot-JTLCB:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:max(100%,44px);height:max(100%,44px)}.ui-carousel__dot-JTLCB{width:8px;height:8px;padding:0;border:none;border-radius:var(--hd-radius-pill);background-color:var(--hd-border-strong);cursor:pointer;transition:background-color var(--hd-duration-fast) var(--hd-ease-standard),width var(--hd-duration-fast) var(--hd-ease-standard)}.ui-carousel__dot--active-riNMm{width:20px;background-color:var(--hd-primary)}.ui-carousel__dot-JTLCB:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--hd-focus);outline-offset:var(--ui-ring-offset, 2px)}@media (prefers-reduced-motion: reduce){.ui-carousel__dot-JTLCB{transition:none}}@media (forced-colors: active){.ui-carousel__dot-JTLCB{background-color:ButtonBorder}.ui-carousel__dot--active-riNMm{background-color:Highlight;forced-color-adjust:none}}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),l=require("react"),h=require("../../helpers/class-name.helper.cjs"),m=require("../../helpers/component.helper.cjs"),c={default:{"checkbox":"ui-checkbox-FaFCj","checkbox__input":"ui-checkbox__input-nTHne","checkbox__body":"ui-checkbox__body-VAEW2","checkbox__label":"ui-checkbox__label-sSNZY","checkbox__hint":"ui-checkbox__hint-ish-J"}},_=l.forwardRef(({label:r,hint:s,className:o,id:i,testId:u,...t},b)=>{const x=l.useId(),a=i??x,d=`${a}-label`,n=`${a}-hint`;return e.jsxs("label",{className:h.cx(c.default.checkbox,o),"data-testid":u,children:[e.jsx("input",{ref:b,type:"checkbox",id:a,className:c.default.checkbox__input,"aria-labelledby":d,"aria-describedby":s?n:t["aria-describedby"],...t}),e.jsxs("span",{className:c.default.checkbox__body,children:[e.jsx("span",{id:d,className:c.default.checkbox__label,children:r}),s&&e.jsx("span",{id:n,className:c.default.checkbox__hint,children:s})]})]})}),p=l.memo(m.named(_,"Checkbox"));exports.default=p;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Checkbox/index.tsx"],"sourcesContent":["'use client';\n\nimport { forwardRef, type InputHTMLAttributes, memo, type ReactNode, useId } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\n\nimport styles from './index.module.scss';\n\ntype Props = Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> & {\n label: ReactNode;\n /** Etiketin altındaki açıklama; `aria-describedby` ile bağlanır. */\n hint?: string;\n testId?: string;\n};\n\n/** Onay kutusu. */\nconst Checkbox = /*#__PURE__*/ forwardRef<HTMLInputElement, Props>(\n ({ label, hint, className, id, testId, ...rest }, ref) => {\n /* ⚠ İpucu ADA değil AÇIKLAMAYA bağlanır — gerekçe `Switch`te yazılı. */\n const generatedId = useId();\n const baseId = id ?? generatedId;\n const labelId = `${baseId}-label`;\n const hintId = `${baseId}-hint`;\n\n return (\n <label className={cx(styles.checkbox, className)} data-testid={testId}>\n <input\n ref={ref}\n type=\"checkbox\"\n id={baseId}\n className={styles.checkbox__input}\n aria-labelledby={labelId}\n aria-describedby={hint ? hintId : rest['aria-describedby']}\n {...rest}\n />\n <span className={styles.checkbox__body}>\n <span id={labelId} className={styles.checkbox__label}>\n {label}\n </span>\n {hint && (\n <span id={hintId} className={styles.checkbox__hint}>\n {hint}\n </span>\n )}\n </span>\n </label>\n );\n },\n);\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Checkbox, 'Checkbox')) as typeof Checkbox;\n"],"names":["Checkbox","forwardRef","label","hint","className","id","testId","rest","ref","generatedId","useId","baseId","labelId","hintId","jsxs","cx","styles","jsx","index","memo","named"],"mappings":"uTAgBMA,EAAyBC,EAAAA,WAC7B,CAAC,CAAE,MAAAC,EAAO,KAAAC,EAAM,UAAAC,EAAW,GAAAC,EAAI,OAAAC,EAAQ,GAAGC,CAAA,EAAQC,IAAQ,CAExD,MAAMC,EAAcC,EAAAA,MAAA,EACdC,EAASN,GAAMI,EACfG,EAAU,GAAGD,CAAM,SACnBE,EAAS,GAAGF,CAAM,QAExB,OACEG,OAAC,SAAM,UAAWC,EAAAA,GAAGC,EAAAA,QAAO,SAAUZ,CAAS,EAAG,cAAaE,EAC7D,SAAA,CAAAW,EAAAA,IAAC,QAAA,CACC,IAAAT,EACA,KAAK,WACL,GAAIG,EACJ,UAAWK,EAAAA,QAAO,gBAClB,kBAAiBJ,EACjB,mBAAkBT,EAAOU,EAASN,EAAK,kBAAkB,EACxD,GAAGA,CAAA,CAAA,EAENO,EAAAA,KAAC,OAAA,CAAK,UAAWE,EAAAA,QAAO,eACtB,SAAA,CAAAC,MAAC,QAAK,GAAIL,EAAS,UAAWI,EAAAA,QAAO,gBAClC,SAAAd,EACH,EACCC,SACE,OAAA,CAAK,GAAIU,EAAQ,UAAWG,UAAO,eACjC,SAAAb,CAAA,CACH,CAAA,CAAA,CAEJ,CAAA,EACF,CAEJ,CACF,EAEAe,EAA6BC,OAAmBC,EAAAA,MAAMpB,EAAU,UAAU,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { InputHTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
/** Onay kutusu. */
|
|
3
|
+
declare const Checkbox: import('react').ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "type"> & {
|
|
4
|
+
label: ReactNode;
|
|
5
|
+
/** Etiketin altındaki açıklama; `aria-describedby` ile bağlanır. */
|
|
6
|
+
hint?: string;
|
|
7
|
+
testId?: string;
|
|
8
|
+
} & import('react').RefAttributes<HTMLInputElement>>;
|
|
9
|
+
declare const _default: typeof Checkbox;
|
|
10
|
+
export default _default;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as i, jsx as s } from "react/jsx-runtime";
|
|
3
|
+
import { memo as x, forwardRef as p, useId as f } from "react";
|
|
4
|
+
import { cx as k } from "../../helpers/class-name.helper.js";
|
|
5
|
+
import { named as _ } from "../../helpers/component.helper.js";
|
|
6
|
+
const e = {"checkbox":"ui-checkbox-FaFCj","checkbox__input":"ui-checkbox__input-nTHne","checkbox__body":"ui-checkbox__body-VAEW2","checkbox__label":"ui-checkbox__label-sSNZY","checkbox__hint":"ui-checkbox__hint-ish-J"};
|
|
7
|
+
const u = /* @__PURE__ */ p(
|
|
8
|
+
({ label: l, hint: c, className: t, id: n, testId: b, ...o }, m) => {
|
|
9
|
+
const h = f(), a = n ?? h, d = `${a}-label`, r = `${a}-hint`;
|
|
10
|
+
return /* @__PURE__ */ i("label", { className: k(e.checkbox, t), "data-testid": b, children: [
|
|
11
|
+
/* @__PURE__ */ s(
|
|
12
|
+
"input",
|
|
13
|
+
{
|
|
14
|
+
ref: m,
|
|
15
|
+
type: "checkbox",
|
|
16
|
+
id: a,
|
|
17
|
+
className: e.checkbox__input,
|
|
18
|
+
"aria-labelledby": d,
|
|
19
|
+
"aria-describedby": c ? r : o["aria-describedby"],
|
|
20
|
+
...o
|
|
21
|
+
}
|
|
22
|
+
),
|
|
23
|
+
/* @__PURE__ */ i("span", { className: e.checkbox__body, children: [
|
|
24
|
+
/* @__PURE__ */ s("span", { id: d, className: e.checkbox__label, children: l }),
|
|
25
|
+
c && /* @__PURE__ */ s("span", { id: r, className: e.checkbox__hint, children: c })
|
|
26
|
+
] })
|
|
27
|
+
] });
|
|
28
|
+
}
|
|
29
|
+
), $ = /* @__PURE__ */ x(/* @__PURE__ */ _(u, "Checkbox"));
|
|
30
|
+
export {
|
|
31
|
+
$ as default
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Checkbox/index.tsx"],"sourcesContent":["'use client';\n\nimport { forwardRef, type InputHTMLAttributes, memo, type ReactNode, useId } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\n\nimport styles from './index.module.scss';\n\ntype Props = Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> & {\n label: ReactNode;\n /** Etiketin altındaki açıklama; `aria-describedby` ile bağlanır. */\n hint?: string;\n testId?: string;\n};\n\n/** Onay kutusu. */\nconst Checkbox = /*#__PURE__*/ forwardRef<HTMLInputElement, Props>(\n ({ label, hint, className, id, testId, ...rest }, ref) => {\n /* ⚠ İpucu ADA değil AÇIKLAMAYA bağlanır — gerekçe `Switch`te yazılı. */\n const generatedId = useId();\n const baseId = id ?? generatedId;\n const labelId = `${baseId}-label`;\n const hintId = `${baseId}-hint`;\n\n return (\n <label className={cx(styles.checkbox, className)} data-testid={testId}>\n <input\n ref={ref}\n type=\"checkbox\"\n id={baseId}\n className={styles.checkbox__input}\n aria-labelledby={labelId}\n aria-describedby={hint ? hintId : rest['aria-describedby']}\n {...rest}\n />\n <span className={styles.checkbox__body}>\n <span id={labelId} className={styles.checkbox__label}>\n {label}\n </span>\n {hint && (\n <span id={hintId} className={styles.checkbox__hint}>\n {hint}\n </span>\n )}\n </span>\n </label>\n );\n },\n);\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Checkbox, 'Checkbox')) as typeof Checkbox;\n"],"names":["Checkbox","forwardRef","label","hint","className","id","testId","rest","ref","generatedId","useId","baseId","labelId","hintId","jsxs","cx","styles","jsx","index","memo","named"],"mappings":";;;;;;AAgBA,MAAMA,IAAyB,gBAAAC;AAAA,EAC7B,CAAC,EAAE,OAAAC,GAAO,MAAAC,GAAM,WAAAC,GAAW,IAAAC,GAAI,QAAAC,GAAQ,GAAGC,EAAA,GAAQC,MAAQ;AAExD,UAAMC,IAAcC,EAAA,GACdC,IAASN,KAAMI,GACfG,IAAU,GAAGD,CAAM,UACnBE,IAAS,GAAGF,CAAM;AAExB,WACE,gBAAAG,EAAC,WAAM,WAAWC,EAAGC,EAAO,UAAUZ,CAAS,GAAG,eAAaE,GAC7D,UAAA;AAAA,MAAA,gBAAAW;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAAT;AAAA,UACA,MAAK;AAAA,UACL,IAAIG;AAAA,UACJ,WAAWK,EAAO;AAAA,UAClB,mBAAiBJ;AAAA,UACjB,oBAAkBT,IAAOU,IAASN,EAAK,kBAAkB;AAAA,UACxD,GAAGA;AAAA,QAAA;AAAA,MAAA;AAAA,MAEN,gBAAAO,EAAC,QAAA,EAAK,WAAWE,EAAO,gBACtB,UAAA;AAAA,QAAA,gBAAAC,EAAC,UAAK,IAAIL,GAAS,WAAWI,EAAO,iBAClC,UAAAd,GACH;AAAA,QACCC,uBACE,QAAA,EAAK,IAAIU,GAAQ,WAAWG,EAAO,gBACjC,UAAAb,EAAA,CACH;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,GACF;AAAA,EAEJ;AACF,GAEAe,IAA6B,gBAAAC,EAAmB,gBAAAC,EAAMpB,GAAU,UAAU,CAAC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-checkbox-FaFCj{display:flex;align-items:flex-start;gap:var(--hd-space-3);cursor:pointer}.ui-checkbox__input-nTHne{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-grid;place-content:center;flex-shrink:0;width:18px;height:18px;margin:0;border:1.5px solid var(--hd-text-3);border-radius:var(--hd-radius-xs);background-color:var(--hd-bg-surface);cursor:pointer;transition:background-color var(--hd-duration-fast) var(--hd-ease-standard),border-color var(--hd-duration-fast) var(--hd-ease-standard)}.ui-checkbox__input-nTHne:before{content:"";width:10px;height:10px;background-color:var(--hd-on-primary);scale:0;transition:scale var(--hd-duration-fast) var(--hd-ease-standard);clip-path:polygon(14% 44%,0 65%,50% 100%,100% 16%,80% 0%,43% 62%)}.ui-checkbox__input-nTHne:hover:not(:disabled){border-color:var(--hd-text-2)}.ui-checkbox__input-nTHne:checked,.ui-checkbox__input-nTHne:indeterminate{background-color:var(--hd-primary);border-color:var(--hd-primary)}.ui-checkbox__input-nTHne:checked:before,.ui-checkbox__input-nTHne:indeterminate:before{scale:1}.ui-checkbox__input-nTHne:checked:hover:not(:disabled),.ui-checkbox__input-nTHne:indeterminate:hover:not(:disabled){background-color:var(--hd-primary-hover);border-color:var(--hd-primary-hover)}.ui-checkbox__input-nTHne:indeterminate:before{clip-path:inset(40% 5%)}.ui-checkbox__input-nTHne:disabled{background-color:var(--hd-bg-disabled);border-color:var(--hd-border-strong);cursor:not-allowed}.ui-checkbox__input-nTHne:checked:disabled,.ui-checkbox__input-nTHne:indeterminate:disabled{background-color:var(--hd-text-disabled);border-color:transparent}.ui-checkbox__input-nTHne:checked:disabled:before,.ui-checkbox__input-nTHne:indeterminate:disabled:before{background-color:var(--hd-bg-surface)}@media (prefers-reduced-motion: reduce){.ui-checkbox__input-nTHne{transition:none}.ui-checkbox__input-nTHne:before{transition:none}}@media (forced-colors: active){.ui-checkbox__input-nTHne{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}.ui-checkbox__input-nTHne:before{display:none}}.ui-checkbox__input-nTHne{margin-top:2px}.ui-checkbox__input-nTHne:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--hd-focus);outline-offset:var(--ui-ring-offset, 2px)}.ui-checkbox__body-VAEW2{display:flex;flex-direction:column;gap:var(--hd-space-1);flex:1;min-width:0}.ui-checkbox__label-sSNZY{font-size:var(--hd-type-small-size);line-height:var(--hd-type-body-line-height);color:var(--hd-text)}.ui-checkbox__hint-ish-J{font-size:var(--hd-type-caption-size);color:var(--hd-text-2);line-height:var(--hd-type-body-line-height)}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),h=require("react"),q=require("@handijit/utils"),b=require("../../helpers/class-name.helper.cjs"),v=require("../../helpers/component.helper.cjs"),g=require("../Link/index.cjs"),a={default:{"chip":"ui-chip--NLgU","chip__icon":"ui-chip__icon-IjjSb","chip__count":"ui-chip__count-MBGO3","chip__label":"ui-chip__label-cT4hw","chip--sm":"ui-chip--sm-60H-S","chip--md":"ui-chip--md--yAlm","chip--iconOnly":"ui-chip--iconOnly-5LT1h","chip--selected":"ui-chip--selected-FdpCr"}},C=h.forwardRef(({children:s,icon:i,endIcon:r,count:n,isSelected:t,size:m="md",label:c,href:l,linkProps:f,className:_,type:x="button",role:u,testId:d,...j},N)=>{const o=b.cx(a.default.chip,a.default[`chip--${m}`],t&&a.default["chip--selected"],!s&&a.default["chip--iconOnly"],_),p=e.jsxs(e.Fragment,{children:[i&&e.jsx("span",{className:a.default.chip__icon,"aria-hidden":!0,children:i}),s&&e.jsx("span",{className:a.default.chip__label,children:s}),q.isDefined(n)&&e.jsx("span",{className:a.default.chip__count,children:n}),r&&e.jsx("span",{className:a.default.chip__icon,"aria-hidden":!0,children:r})]});return l?e.jsx(g.default,{href:l,className:o,"aria-label":s?void 0:c,"aria-current":t?"page":void 0,"data-testid":d,...f,children:p}):e.jsx("button",{ref:N,type:x,role:u,className:o,"aria-label":s?void 0:c,"data-testid":d,...u==="radio"?{"aria-checked":!!t}:{"aria-pressed":!!t},...j,children:p})}),y=h.memo(v.named(C,"Chip"));exports.default=y;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Chip/index.tsx"],"sourcesContent":["import { type ButtonHTMLAttributes, forwardRef, memo, type ReactNode } from 'react';\n\nimport { isDefined } from '@handijit/utils';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\nimport type { UiLinkExtraProps } from '../../types/link.type';\nimport UiLink from '../Link';\n\nimport styles from './index.module.scss';\n\nexport type ChipSize = 'sm' | 'md';\n\ntype Props = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> & {\n /** Görünen metin. */\n children?: ReactNode;\n /** Metnin solundaki ikon. */\n icon?: ReactNode;\n /** Metnin sağındaki ikon (ok, çarpı). */\n endIcon?: ReactNode;\n /** Sağda gösterilen sonuç adedi. */\n count?: number;\n isSelected?: boolean;\n size?: ChipSize;\n /** Erişilebilir ad. */\n label?: string;\n /** Verilirse çip bir bağlantı olarak çizilir. */\n href?: string;\n /** Yönlendiriciye geçirilecek ek props. */\n linkProps?: UiLinkExtraProps;\n /** Grup içindeki ARIA rolü. */\n role?: 'radio';\n testId?: string;\n};\n\n/** Çip — seçilebilir etiket. */\nconst Chip = /*#__PURE__*/ forwardRef<HTMLButtonElement, Props>(\n (\n {\n children,\n icon,\n endIcon,\n count,\n isSelected,\n size = 'md',\n label,\n href,\n linkProps,\n className,\n type = 'button',\n role,\n testId,\n ...rest\n },\n ref,\n ) => {\n const classNames = cx(\n styles.chip,\n styles[`chip--${size}`],\n isSelected && styles['chip--selected'],\n !children && styles['chip--iconOnly'],\n className,\n );\n\n const content = (\n <>\n {icon && (\n <span className={styles.chip__icon} aria-hidden>\n {icon}\n </span>\n )}\n {children && <span className={styles.chip__label}>{children}</span>}\n {isDefined(count) && <span className={styles.chip__count}>{count}</span>}\n {endIcon && (\n <span className={styles.chip__icon} aria-hidden>\n {endIcon}\n </span>\n )}\n </>\n );\n\n if (href)\n return (\n <UiLink\n href={href}\n className={classNames}\n aria-label={children ? undefined : label}\n aria-current={isSelected ? 'page' : undefined}\n data-testid={testId}\n {...linkProps}\n >\n {content}\n </UiLink>\n );\n\n return (\n <button\n ref={ref}\n type={type}\n role={role}\n className={classNames}\n aria-label={children ? undefined : label}\n data-testid={testId}\n // Tek seçimli grupta radyo semantiği, aksi halde basılı düğme.\n {...(role === 'radio'\n ? { 'aria-checked': Boolean(isSelected) }\n : { 'aria-pressed': Boolean(isSelected) })}\n {...rest}\n >\n {content}\n </button>\n );\n },\n);\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Chip, 'Chip')) as typeof Chip;\n"],"names":["Chip","forwardRef","children","icon","endIcon","count","isSelected","size","label","href","linkProps","className","type","role","testId","rest","ref","classNames","cx","styles","content","jsxs","Fragment","jsx","isDefined","UiLink","memo","named"],"mappings":"sWAoCMA,EAAqBC,EAAAA,WACzB,CACE,CACE,SAAAC,EACA,KAAAC,EACA,QAAAC,EACA,MAAAC,EACA,WAAAC,EACA,KAAAC,EAAO,KACP,MAAAC,EACA,KAAAC,EACA,UAAAC,EACA,UAAAC,EACA,KAAAC,EAAO,SACP,KAAAC,EACA,OAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,MAAMC,EAAaC,EAAAA,GACjBC,EAAAA,QAAO,KACPA,EAAAA,QAAO,SAASZ,CAAI,EAAE,EACtBD,GAAca,EAAAA,QAAO,gBAAgB,EACrC,CAACjB,GAAYiB,EAAAA,QAAO,gBAAgB,EACpCR,CAAA,EAGIS,EACJC,EAAAA,KAAAC,EAAAA,SAAA,CACG,SAAA,CAAAnB,SACE,OAAA,CAAK,UAAWgB,EAAAA,QAAO,WAAY,cAAW,GAC5C,SAAAhB,CAAA,CACH,EAEDD,GAAYqB,EAAAA,IAAC,OAAA,CAAK,UAAWJ,UAAO,YAAc,SAAAjB,EAAS,EAC3DsB,EAAAA,UAAUnB,CAAK,GAAKkB,EAAAA,IAAC,QAAK,UAAWJ,EAAAA,QAAO,YAAc,SAAAd,EAAM,EAChED,SACE,OAAA,CAAK,UAAWe,EAAAA,QAAO,WAAY,cAAW,GAC5C,SAAAf,CAAA,CACH,CAAA,EAEJ,EAGF,OAAIK,EAEAc,EAAAA,IAACE,EAAAA,QAAA,CACC,KAAAhB,EACA,UAAWQ,EACX,aAAYf,EAAW,OAAYM,EACnC,eAAcF,EAAa,OAAS,OACpC,cAAaQ,EACZ,GAAGJ,EAEH,SAAAU,CAAA,CAAA,EAKLG,EAAAA,IAAC,SAAA,CACC,IAAAP,EACA,KAAAJ,EACA,KAAAC,EACA,UAAWI,EACX,aAAYf,EAAW,OAAYM,EACnC,cAAaM,EAEZ,GAAID,IAAS,QACV,CAAE,eAAgB,EAAQP,CAAU,EACpC,CAAE,eAAgB,EAAQA,CAAU,EACvC,GAAGS,EAEH,SAAAK,CAAA,CAAA,CAGP,CACF,EAEApB,EAA6B0B,OAAmBC,EAAAA,MAAM3B,EAAM,MAAM,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ButtonHTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
import { UiLinkExtraProps } from '../../types/link.type';
|
|
3
|
+
export type ChipSize = 'sm' | 'md';
|
|
4
|
+
/** Çip — seçilebilir etiket. */
|
|
5
|
+
declare const Chip: import('react').ForwardRefExoticComponent<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> & {
|
|
6
|
+
/** Görünen metin. */
|
|
7
|
+
children?: ReactNode;
|
|
8
|
+
/** Metnin solundaki ikon. */
|
|
9
|
+
icon?: ReactNode;
|
|
10
|
+
/** Metnin sağındaki ikon (ok, çarpı). */
|
|
11
|
+
endIcon?: ReactNode;
|
|
12
|
+
/** Sağda gösterilen sonuç adedi. */
|
|
13
|
+
count?: number;
|
|
14
|
+
isSelected?: boolean;
|
|
15
|
+
size?: ChipSize;
|
|
16
|
+
/** Erişilebilir ad. */
|
|
17
|
+
label?: string;
|
|
18
|
+
/** Verilirse çip bir bağlantı olarak çizilir. */
|
|
19
|
+
href?: string;
|
|
20
|
+
/** Yönlendiriciye geçirilecek ek props. */
|
|
21
|
+
linkProps?: UiLinkExtraProps;
|
|
22
|
+
/** Grup içindeki ARIA rolü. */
|
|
23
|
+
role?: "radio";
|
|
24
|
+
testId?: string;
|
|
25
|
+
} & import('react').RefAttributes<HTMLButtonElement>>;
|
|
26
|
+
declare const _default: typeof Chip;
|
|
27
|
+
export default _default;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { jsxs as x, Fragment as v, jsx as i } from "react/jsx-runtime";
|
|
2
|
+
import { memo as C, forwardRef as g } from "react";
|
|
3
|
+
import { isDefined as j } from "@handijit/utils";
|
|
4
|
+
import { cx as k } from "../../helpers/class-name.helper.js";
|
|
5
|
+
import { named as y } from "../../helpers/component.helper.js";
|
|
6
|
+
import B from "../Link/index.js";
|
|
7
|
+
const a = {"chip":"ui-chip--NLgU","chip__icon":"ui-chip__icon-IjjSb","chip__count":"ui-chip__count-MBGO3","chip__label":"ui-chip__label-cT4hw","chip--sm":"ui-chip--sm-60H-S","chip--md":"ui-chip--md--yAlm","chip--iconOnly":"ui-chip--iconOnly-5LT1h","chip--selected":"ui-chip--selected-FdpCr"};
|
|
8
|
+
const $ = /* @__PURE__ */ g(
|
|
9
|
+
({
|
|
10
|
+
children: r,
|
|
11
|
+
icon: s,
|
|
12
|
+
endIcon: t,
|
|
13
|
+
count: e,
|
|
14
|
+
isSelected: o,
|
|
15
|
+
size: l = "md",
|
|
16
|
+
label: m,
|
|
17
|
+
href: n,
|
|
18
|
+
linkProps: f,
|
|
19
|
+
className: u,
|
|
20
|
+
type: _ = "button",
|
|
21
|
+
role: c,
|
|
22
|
+
testId: p,
|
|
23
|
+
...N
|
|
24
|
+
}, b) => {
|
|
25
|
+
const d = k(
|
|
26
|
+
a.chip,
|
|
27
|
+
a[`chip--${l}`],
|
|
28
|
+
o && a["chip--selected"],
|
|
29
|
+
!r && a["chip--iconOnly"],
|
|
30
|
+
u
|
|
31
|
+
), h = /* @__PURE__ */ x(v, { children: [
|
|
32
|
+
s && /* @__PURE__ */ i("span", { className: a.chip__icon, "aria-hidden": !0, children: s }),
|
|
33
|
+
r && /* @__PURE__ */ i("span", { className: a.chip__label, children: r }),
|
|
34
|
+
j(e) && /* @__PURE__ */ i("span", { className: a.chip__count, children: e }),
|
|
35
|
+
t && /* @__PURE__ */ i("span", { className: a.chip__icon, "aria-hidden": !0, children: t })
|
|
36
|
+
] });
|
|
37
|
+
return n ? /* @__PURE__ */ i(
|
|
38
|
+
B,
|
|
39
|
+
{
|
|
40
|
+
href: n,
|
|
41
|
+
className: d,
|
|
42
|
+
"aria-label": r ? void 0 : m,
|
|
43
|
+
"aria-current": o ? "page" : void 0,
|
|
44
|
+
"data-testid": p,
|
|
45
|
+
...f,
|
|
46
|
+
children: h
|
|
47
|
+
}
|
|
48
|
+
) : /* @__PURE__ */ i(
|
|
49
|
+
"button",
|
|
50
|
+
{
|
|
51
|
+
ref: b,
|
|
52
|
+
type: _,
|
|
53
|
+
role: c,
|
|
54
|
+
className: d,
|
|
55
|
+
"aria-label": r ? void 0 : m,
|
|
56
|
+
"data-testid": p,
|
|
57
|
+
...c === "radio" ? { "aria-checked": !!o } : { "aria-pressed": !!o },
|
|
58
|
+
...N,
|
|
59
|
+
children: h
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
), q = /* @__PURE__ */ C(/* @__PURE__ */ y($, "Chip"));
|
|
64
|
+
export {
|
|
65
|
+
q as default
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Chip/index.tsx"],"sourcesContent":["import { type ButtonHTMLAttributes, forwardRef, memo, type ReactNode } from 'react';\n\nimport { isDefined } from '@handijit/utils';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\nimport type { UiLinkExtraProps } from '../../types/link.type';\nimport UiLink from '../Link';\n\nimport styles from './index.module.scss';\n\nexport type ChipSize = 'sm' | 'md';\n\ntype Props = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> & {\n /** Görünen metin. */\n children?: ReactNode;\n /** Metnin solundaki ikon. */\n icon?: ReactNode;\n /** Metnin sağındaki ikon (ok, çarpı). */\n endIcon?: ReactNode;\n /** Sağda gösterilen sonuç adedi. */\n count?: number;\n isSelected?: boolean;\n size?: ChipSize;\n /** Erişilebilir ad. */\n label?: string;\n /** Verilirse çip bir bağlantı olarak çizilir. */\n href?: string;\n /** Yönlendiriciye geçirilecek ek props. */\n linkProps?: UiLinkExtraProps;\n /** Grup içindeki ARIA rolü. */\n role?: 'radio';\n testId?: string;\n};\n\n/** Çip — seçilebilir etiket. */\nconst Chip = /*#__PURE__*/ forwardRef<HTMLButtonElement, Props>(\n (\n {\n children,\n icon,\n endIcon,\n count,\n isSelected,\n size = 'md',\n label,\n href,\n linkProps,\n className,\n type = 'button',\n role,\n testId,\n ...rest\n },\n ref,\n ) => {\n const classNames = cx(\n styles.chip,\n styles[`chip--${size}`],\n isSelected && styles['chip--selected'],\n !children && styles['chip--iconOnly'],\n className,\n );\n\n const content = (\n <>\n {icon && (\n <span className={styles.chip__icon} aria-hidden>\n {icon}\n </span>\n )}\n {children && <span className={styles.chip__label}>{children}</span>}\n {isDefined(count) && <span className={styles.chip__count}>{count}</span>}\n {endIcon && (\n <span className={styles.chip__icon} aria-hidden>\n {endIcon}\n </span>\n )}\n </>\n );\n\n if (href)\n return (\n <UiLink\n href={href}\n className={classNames}\n aria-label={children ? undefined : label}\n aria-current={isSelected ? 'page' : undefined}\n data-testid={testId}\n {...linkProps}\n >\n {content}\n </UiLink>\n );\n\n return (\n <button\n ref={ref}\n type={type}\n role={role}\n className={classNames}\n aria-label={children ? undefined : label}\n data-testid={testId}\n // Tek seçimli grupta radyo semantiği, aksi halde basılı düğme.\n {...(role === 'radio'\n ? { 'aria-checked': Boolean(isSelected) }\n : { 'aria-pressed': Boolean(isSelected) })}\n {...rest}\n >\n {content}\n </button>\n );\n },\n);\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Chip, 'Chip')) as typeof Chip;\n"],"names":["Chip","forwardRef","children","icon","endIcon","count","isSelected","size","label","href","linkProps","className","type","role","testId","rest","ref","classNames","cx","styles","content","jsxs","Fragment","jsx","isDefined","UiLink","Chip$1","memo","named"],"mappings":";;;;;;;AAoCA,MAAMA,IAAqB,gBAAAC;AAAA,EACzB,CACE;AAAA,IACE,UAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,OAAAC;AAAA,IACA,MAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,MAAAC;AAAA,IACA,QAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAaC;AAAA,MACjBC,EAAO;AAAA,MACPA,EAAO,SAASZ,CAAI,EAAE;AAAA,MACtBD,KAAca,EAAO,gBAAgB;AAAA,MACrC,CAACjB,KAAYiB,EAAO,gBAAgB;AAAA,MACpCR;AAAA,IAAA,GAGIS,IACJ,gBAAAC,EAAAC,GAAA,EACG,UAAA;AAAA,MAAAnB,uBACE,QAAA,EAAK,WAAWgB,EAAO,YAAY,eAAW,IAC5C,UAAAhB,EAAA,CACH;AAAA,MAEDD,KAAY,gBAAAqB,EAAC,QAAA,EAAK,WAAWJ,EAAO,aAAc,UAAAjB,GAAS;AAAA,MAC3DsB,EAAUnB,CAAK,KAAK,gBAAAkB,EAAC,UAAK,WAAWJ,EAAO,aAAc,UAAAd,GAAM;AAAA,MAChED,uBACE,QAAA,EAAK,WAAWe,EAAO,YAAY,eAAW,IAC5C,UAAAf,EAAA,CACH;AAAA,IAAA,GAEJ;AAGF,WAAIK,IAEA,gBAAAc;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,MAAAhB;AAAA,QACA,WAAWQ;AAAA,QACX,cAAYf,IAAW,SAAYM;AAAA,QACnC,gBAAcF,IAAa,SAAS;AAAA,QACpC,eAAaQ;AAAA,QACZ,GAAGJ;AAAA,QAEH,UAAAU;AAAA,MAAA;AAAA,IAAA,IAKL,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAP;AAAA,QACA,MAAAJ;AAAA,QACA,MAAAC;AAAA,QACA,WAAWI;AAAA,QACX,cAAYf,IAAW,SAAYM;AAAA,QACnC,eAAaM;AAAA,QAEZ,GAAID,MAAS,UACV,EAAE,gBAAgB,EAAQP,EAAU,IACpC,EAAE,gBAAgB,EAAQA,EAAU;AAAA,QACvC,GAAGS;AAAA,QAEH,UAAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF,GAEAM,IAA6B,gBAAAC,EAAmB,gBAAAC,EAAM5B,GAAM,MAAM,CAAC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@charset "UTF-8";@layer ui{.ui-chip--NLgU{position:relative}.ui-chip--NLgU:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:max(100%,44px);height:max(100%,44px)}.ui-chip--NLgU{display:inline-flex;align-items:center;justify-content:center;gap:var(--hd-space-2);background-color:var(--ui-chip-bg, var(--hd-bg-surface));border:1px solid var(--ui-chip-line, var(--hd-border));border-radius:var(--ui-chip-radius, var(--hd-radius-sm));color:var(--ui-chip-fg, var(--hd-text-2));font-family:var(--hd-font-body);font-weight:var(--ui-chip-weight, var(--hd-font-weight-medium));line-height:1;white-space:nowrap;cursor:pointer;text-decoration:none;transition:border-color var(--hd-duration-fast) var(--hd-ease-standard),color var(--hd-duration-fast) var(--hd-ease-standard),background-color var(--hd-duration-fast) var(--hd-ease-standard)}.ui-chip--NLgU:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--hd-focus);outline-offset:var(--ui-ring-offset, 2px)}.ui-chip--NLgU:hover:not(:disabled){border-color:var(--hd-border-strong);color:var(--hd-text)}.ui-chip--NLgU:disabled{background-color:var(--hd-bg-raised);border-color:var(--hd-border);cursor:not-allowed;color:var(--hd-text-3)}@media (forced-colors: active){.ui-chip--NLgU:disabled{color:GrayText;border-color:GrayText}}.ui-chip--NLgU:disabled .ui-chip__icon-IjjSb,.ui-chip--NLgU:disabled .ui-chip__count-MBGO3{color:var(--hd-text-3)}@media (forced-colors: active){.ui-chip--NLgU:disabled .ui-chip__icon-IjjSb,.ui-chip--NLgU:disabled .ui-chip__count-MBGO3{color:GrayText}}@media (prefers-reduced-motion: reduce){.ui-chip--NLgU{transition:none}}.ui-chip__icon-IjjSb{display:inline-flex;align-items:center;flex-shrink:0;font-size:.92em;color:var(--hd-text-2);transition:color var(--hd-duration-fast) var(--hd-ease-standard)}@media (prefers-reduced-motion: reduce){.ui-chip__icon-IjjSb{transition:none}}.ui-chip__label-cT4hw{overflow:hidden;text-overflow:ellipsis}.ui-chip__count-MBGO3{font-size:var(--hd-type-caption-size);font-weight:var(--hd-font-weight-semibold);color:var(--hd-text-3);font-variant-numeric:tabular-nums;flex-shrink:0}.ui-chip--sm-60H-S{font-size:var(--hd-type-caption-size);padding:var(--hd-space-2) var(--hd-space-3);min-height:32px}.ui-chip--md--yAlm{font-size:var(--hd-type-small-size);padding:var(--hd-space-2) var(--hd-space-4);min-height:40px}.ui-chip--iconOnly-5LT1h{gap:0}.ui-chip--iconOnly-5LT1h.ui-chip--sm-60H-S{width:32px;padding:0}.ui-chip--iconOnly-5LT1h.ui-chip--md--yAlm{width:40px;padding:0}.ui-chip--iconOnly-5LT1h .ui-chip__icon-IjjSb{font-size:1em}.ui-chip--selected-FdpCr{border-color:var(--ui-chip-selected-line, var(--hd-primary));color:var(--ui-chip-selected-fg, var(--hd-primary-text));background-color:var(--ui-chip-selected-bg, var(--hd-primary-soft));font-weight:var(--ui-chip-selected-weight, var(--hd-font-weight-semibold))}.ui-chip--selected-FdpCr .ui-chip__icon-IjjSb,.ui-chip--selected-FdpCr .ui-chip__count-MBGO3{color:var(--ui-chip-selected-fg, var(--hd-primary-text))}.ui-chip--selected-FdpCr:hover:not(:disabled){border-color:var(--ui-chip-selected-line, var(--hd-primary-hover));color:var(--ui-chip-selected-fg, var(--hd-primary-text));background-color:var(--ui-chip-selected-bg, var(--hd-primary-soft-hover))}.ui-chip--selected-FdpCr:disabled{border-color:var(--hd-text-3)}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const f=require("react/jsx-runtime"),h=require("react"),D=require("../../helpers/class-name.helper.cjs"),q=require("../Chip/index.cjs"),o={default:{"group":"ui-group-0tnVf","group--scrollable":"ui-group--scrollable-PMu6V"}},S=({options:a,label:v,size:b="md",isScrollable:g,className:x,...l})=>{var t;const n=h.useRef(null),p=e=>l.isMultiple?l.value.includes(e):l.value===e,m=e=>{if(l.isMultiple){const r=l.value.includes(e)?l.value.filter(u=>u!==e):[...l.value,e];l.onChange(r);return}l.onChange(l.value===e?null:e)},M=e=>{var s,c;if(l.isMultiple)return;const r=e.key==="ArrowRight"||e.key==="ArrowDown"?1:e.key==="ArrowLeft"||e.key==="ArrowUp"?-1:0;if(r===0)return;e.preventDefault();const u=a.filter(d=>!d.isDisabled);if(u.length===0)return;const w=u.findIndex(d=>d.value===l.value),i=u[(w+r+u.length)%u.length];l.onChange(i.value),(c=(s=n.current)==null?void 0:s.querySelector(`[data-chip-value="${i.value}"]`))==null||c.focus()},y=l.isMultiple?null:l.value??((t=a.find(e=>!e.isDisabled))==null?void 0:t.value)??null;return f.jsx("div",{ref:n,className:D.cx(o.default.group,g&&o.default["group--scrollable"],x),role:l.isMultiple?"group":"radiogroup","aria-label":v,onKeyDown:M,children:a.map(e=>f.jsx(q.default,{size:b,icon:e.icon,count:e.count,isSelected:p(e.value),disabled:e.isDisabled,role:l.isMultiple?void 0:"radio",tabIndex:l.isMultiple||e.value===y?0:-1,"data-chip-value":e.value,onClick:()=>m(e.value),children:e.label},e.value))})},k=h.memo(S);exports.default=k;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/ChipGroup/index.tsx"],"sourcesContent":["'use client';\n\nimport { type KeyboardEvent, memo, type ReactNode, useRef } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport Chip, { type ChipSize } from '../Chip';\n\nimport styles from './index.module.scss';\n\nexport type ChipOption<T extends string = string> = {\n value: T;\n label: string;\n icon?: ReactNode;\n count?: number;\n isDisabled?: boolean;\n};\n\ntype BaseProps<T extends string> = {\n options: ChipOption<T>[];\n /** Grubun erişilebilir adı (\"Sıralama\", \"Kalite\"). */\n label: string;\n size?: ChipSize;\n /** Taşan çipleri alta sarmak yerine yatay kaydırır (mobil filtre şeridi). */\n isScrollable?: boolean;\n className?: string;\n};\n\ntype SingleProps<T extends string> = BaseProps<T> & {\n isMultiple?: false;\n value: T | null;\n /** Seçili çipe tekrar basılırsa `null` gelir — seçim geri alınabilir. */\n onChange: (value: T | null) => void;\n};\n\ntype MultipleProps<T extends string> = BaseProps<T> & {\n isMultiple: true;\n value: T[];\n onChange: (value: T[]) => void;\n};\n\ntype Props<T extends string> = SingleProps<T> | MultipleProps<T>;\n\n/** Çip grubu — açılır liste yerine tek dokunuşla seçim. */\nconst ChipGroup = <T extends string>({\n options,\n label,\n size = 'md',\n isScrollable,\n className,\n ...selection\n}: Props<T>) => {\n const listRef = useRef<HTMLDivElement>(null);\n\n const isSelected = (value: T) =>\n selection.isMultiple ? selection.value.includes(value) : selection.value === value;\n\n const handleSelect = (value: T) => {\n if (selection.isMultiple) {\n const next = selection.value.includes(value)\n ? selection.value.filter(item => item !== value)\n : [...selection.value, value];\n selection.onChange(next);\n return;\n }\n\n // Seçili çipe tekrar basmak seçimi kaldırır: \"hepsi\" seçeneği olmayan filtrelerde kullanıcının\n // geri dönebileceği tek yol bu.\n selection.onChange(selection.value === value ? null : value);\n };\n\n /** Ok tuşlarıyla gezinme; başta/sonda döner (yalnızca tek seçimde). */\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (selection.isMultiple) return;\n\n const offset =\n event.key === 'ArrowRight' || event.key === 'ArrowDown'\n ? 1\n : event.key === 'ArrowLeft' || event.key === 'ArrowUp'\n ? -1\n : 0;\n if (offset === 0) return;\n\n event.preventDefault();\n\n const enabled = options.filter(option => !option.isDisabled);\n if (enabled.length === 0) return;\n\n const currentIndex = enabled.findIndex(option => option.value === selection.value);\n const next = enabled[(currentIndex + offset + enabled.length) % enabled.length];\n\n selection.onChange(next.value);\n listRef.current?.querySelector<HTMLButtonElement>(`[data-chip-value=\"${next.value}\"]`)?.focus();\n };\n\n // Roving tabindex: seçili çip tabbable; hiçbiri seçili değilse ilki.\n const tabbableValue = selection.isMultiple\n ? null\n : (selection.value ?? options.find(option => !option.isDisabled)?.value ?? null);\n\n return (\n <div\n ref={listRef}\n className={cx(styles.group, isScrollable && styles['group--scrollable'], className)}\n role={selection.isMultiple ? 'group' : 'radiogroup'}\n aria-label={label}\n onKeyDown={handleKeyDown}\n >\n {options.map(option => (\n <Chip\n key={option.value}\n size={size}\n icon={option.icon}\n count={option.count}\n isSelected={isSelected(option.value)}\n disabled={option.isDisabled}\n role={selection.isMultiple ? undefined : 'radio'}\n tabIndex={selection.isMultiple || option.value === tabbableValue ? 0 : -1}\n data-chip-value={option.value}\n onClick={() => handleSelect(option.value)}\n >\n {option.label}\n </Chip>\n ))}\n </div>\n );\n};\n\nexport default /*#__PURE__*/ memo(ChipGroup) as typeof ChipGroup;\n"],"names":["ChipGroup","options","label","size","isScrollable","className","selection","listRef","useRef","isSelected","value","handleSelect","next","item","handleKeyDown","event","offset","enabled","option","currentIndex","_b","_a","tabbableValue","jsx","cx","styles","Chip","index"],"mappings":"sSA0CMA,EAAY,CAAmB,CACnC,QAAAC,EACA,MAAAC,EACA,KAAAC,EAAO,KACP,aAAAC,EACA,UAAAC,EACA,GAAGC,CACL,IAAgB,OACd,MAAMC,EAAUC,EAAAA,OAAuB,IAAI,EAErCC,EAAcC,GAClBJ,EAAU,WAAaA,EAAU,MAAM,SAASI,CAAK,EAAIJ,EAAU,QAAUI,EAEzEC,EAAgBD,GAAa,CACjC,GAAIJ,EAAU,WAAY,CACxB,MAAMM,EAAON,EAAU,MAAM,SAASI,CAAK,EACvCJ,EAAU,MAAM,OAAOO,GAAQA,IAASH,CAAK,EAC7C,CAAC,GAAGJ,EAAU,MAAOI,CAAK,EAC9BJ,EAAU,SAASM,CAAI,EACvB,MACF,CAIAN,EAAU,SAASA,EAAU,QAAUI,EAAQ,KAAOA,CAAK,CAC7D,EAGMI,EAAiBC,GAAyC,SAC9D,GAAIT,EAAU,WAAY,OAE1B,MAAMU,EACJD,EAAM,MAAQ,cAAgBA,EAAM,MAAQ,YACxC,EACAA,EAAM,MAAQ,aAAeA,EAAM,MAAQ,UACzC,GACA,EACR,GAAIC,IAAW,EAAG,OAElBD,EAAM,eAAA,EAEN,MAAME,EAAUhB,EAAQ,OAAOiB,GAAU,CAACA,EAAO,UAAU,EAC3D,GAAID,EAAQ,SAAW,EAAG,OAE1B,MAAME,EAAeF,EAAQ,aAAoBC,EAAO,QAAUZ,EAAU,KAAK,EAC3EM,EAAOK,GAASE,EAAeH,EAASC,EAAQ,QAAUA,EAAQ,MAAM,EAE9EX,EAAU,SAASM,EAAK,KAAK,GAC7BQ,GAAAC,EAAAd,EAAQ,UAAR,YAAAc,EAAiB,cAAiC,qBAAqBT,EAAK,KAAK,QAAjF,MAAAQ,EAAwF,OAC1F,EAGME,EAAgBhB,EAAU,WAC5B,KACCA,EAAU,SAASe,EAAApB,EAAQ,KAAKiB,GAAU,CAACA,EAAO,UAAU,IAAzC,YAAAG,EAA4C,QAAS,KAE7E,OACEE,EAAAA,IAAC,MAAA,CACC,IAAKhB,EACL,UAAWiB,EAAAA,GAAGC,EAAAA,QAAO,MAAOrB,GAAgBqB,UAAO,mBAAmB,EAAGpB,CAAS,EAClF,KAAMC,EAAU,WAAa,QAAU,aACvC,aAAYJ,EACZ,UAAWY,EAEV,SAAAb,EAAQ,IAAIiB,GACXK,EAAAA,IAACG,EAAAA,QAAA,CAEC,KAAAvB,EACA,KAAMe,EAAO,KACb,MAAOA,EAAO,MACd,WAAYT,EAAWS,EAAO,KAAK,EACnC,SAAUA,EAAO,WACjB,KAAMZ,EAAU,WAAa,OAAY,QACzC,SAAUA,EAAU,YAAcY,EAAO,QAAUI,EAAgB,EAAI,GACvE,kBAAiBJ,EAAO,MACxB,QAAS,IAAMP,EAAaO,EAAO,KAAK,EAEvC,SAAAA,EAAO,KAAA,EAXHA,EAAO,KAAA,CAaf,CAAA,CAAA,CAGP,EAEAS,SAAkC3B,CAAS"}
|