@handijit/ui 0.0.0-stage → 1.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 +872 -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 +1865 -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 +1120 -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 +26 -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 +8 -0
- package/build/constants/breakpoint.constants.js +9 -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 +9 -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 +24 -0
- package/build/helpers/theme.helper.cjs.map +1 -0
- package/build/helpers/theme.helper.d.ts +49 -0
- package/build/helpers/theme.helper.js +75 -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 +7 -0
- package/build/hooks/useUiTheme.js +36 -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 +39 -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 +95 -0
- package/build/index.js +207 -0
- package/build/index.js.map +1 -0
- package/build/scss/_colors.generated.scss +119 -0
- package/build/scss/_index.scss +6 -0
- package/build/scss/_metrics.generated.scss +49 -0
- package/build/scss/_mixins.scss +710 -0
- package/build/scss/_variables.scss +51 -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 +22 -0
- package/build/theme/UiProvider.js +30 -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 +19 -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/theme/initUi.cjs +2 -0
- package/build/theme/initUi.cjs.map +1 -0
- package/build/theme/initUi.d.ts +7 -0
- package/build/theme/initUi.js +10 -0
- package/build/theme/initUi.js.map +1 -0
- package/build/theme/palette.cjs +2 -0
- package/build/theme/palette.cjs.map +1 -0
- package/build/theme/palette.d.ts +219 -0
- package/build/theme/palette.js +148 -0
- package/build/theme/palette.js.map +1 -0
- package/build/theme/tokens.cjs +2 -0
- package/build/theme/tokens.cjs.map +1 -0
- package/build/theme/tokens.d.ts +225 -0
- package/build/theme/tokens.js +384 -0
- package/build/theme/tokens.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 +13 -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 +20 -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/palette.d.ts +219 -0
- package/build/types/theme/tokens.d.ts +225 -0
- package/build/types/theme.type.d.ts +223 -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 +223 -0
- package/package.json +487 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Avatar/index.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, memo, type ReactNode } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\nimport { useUi } from '../../theme/context';\n\nimport styles from './index.module.scss';\n\nexport type AvatarShape = 'circle' | 'rounded';\n\n/**\n * `auto`: baş harf madalyonu addan SABİT bir kovaya boyanır. `brand`: marka madalyonu — çam zemin,\n * mint işaret, iki temada aynı (logo kuralı; asistanın avatarı, boş sohbetin karosu).\n */\nexport type AvatarTone = 'auto' | 'brand';\n\ntype Props = {\n /** Tam ad; baş harfler buradan üretilir ve her durumda okunan addır (`aria-label`). */\n name: string;\n /** Profil görseli. */\n imageUrl?: string;\n /** Baş harf yerine ikon (marka işareti, sistem kullanıcısı). Görselden önce gelmez. */\n icon?: ReactNode;\n shape?: AvatarShape;\n tone?: AvatarTone;\n /** Baş harfleri büyütürken kullanılacak dil etiketi (\"tr\", \"az\"). */\n locale?: string;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n testId?: string;\n};\n\n/** Baş harfleri üretir: \"Ahmet İlhan\" → \"Aİ\". */\nconst resolveInitials = (name: string, locale?: string): string => {\n const words = name.trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) return '?';\n\n const letters =\n words.length === 1 ? words[0].slice(0, 2) : `${words[0][0]}${words[words.length - 1][0]}`;\n\n return locale ? letters.toLocaleUpperCase(locale) : letters.toLocaleUpperCase();\n};\n\n/** Adı SABİT bir renk kovasına eşler. */\nconst resolveTone = (name: string, total: number): number => {\n let hash = 5381;\n for (let index = 0; index < name.length; index += 1) hash = (hash * 33) ^ name.charCodeAt(index);\n\n return Math.abs(hash) % total;\n};\n\n/** Madalyon tonlarının sayısı — `_module.scss` içindeki kova sayısıyla AYNI. */\nconst TONE_COUNT = 6;\n\n/** Avatar — kullanıcı madalyonu. */\nconst Avatar: FC<Props> = ({\n name,\n imageUrl,\n icon,\n locale,\n size = 'md',\n shape = 'circle',\n tone = 'auto',\n className,\n testId,\n}) => {\n const { labels } = useUi();\n\n return (\n <span\n className={cx(\n styles.avatar,\n styles[`avatar--${size}`],\n shape === 'rounded' && styles['avatar--rounded'],\n tone === 'brand' && styles['avatar--brand'],\n /*\n * Karma ton yalnizca BAS HARF madalyonunda: gorselin uzerine renk basmak fotografi bozuyordu,\n * ikon ise bir kisi degil.\n */\n tone === 'auto' &&\n !imageUrl &&\n !icon &&\n styles[`avatar--tone-${resolveTone(name, TONE_COUNT)}`],\n className,\n )}\n /*\n * Ad `role=\"img\"` + `aria-label` ile taşınır: baş harfler (\"AY\") görsel bir kısaltma,\n * okunması gereken şey tam ad.\n * ⚠ `aria-hidden` KALDIRILDI. Kök üzerindeki `aria-hidden` yalnızca madalyonu değil KİŞİNİN\n * ADINI da erişilebilirlik ağacından çıkarıyordu\n */\n role=\"img\"\n aria-label={name}\n data-testid={testId}\n >\n {imageUrl ? (\n /* `alt=\"\"`: ad zaten kökte `aria-label` ile duyuruluyor, iki kez okunmasın. */\n <img className={styles.avatar__image} src={imageUrl} alt=\"\" />\n ) : icon ? (\n <span className={styles.avatar__icon} aria-hidden>\n {icon}\n </span>\n ) : (\n resolveInitials(name, locale ?? labels?.locale)\n )}\n </span>\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Avatar, 'Avatar')) as typeof Avatar;\n"],"names":["resolveInitials","name","locale","words","letters","resolveTone","total","hash","index","TONE_COUNT","Avatar","imageUrl","icon","size","shape","tone","className","testId","labels","useUi","jsx","cx","styles","memo","named"],"mappings":";;;;;;;AAkCA,MAAMA,IAAkB,CAACC,GAAcC,MAA4B;AACjE,QAAMC,IAAQF,EAAK,KAAA,EAAO,MAAM,KAAK,EAAE,OAAO,OAAO;AACrD,MAAIE,EAAM,WAAW,EAAG,QAAO;AAE/B,QAAMC,IACJD,EAAM,WAAW,IAAIA,EAAM,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,GAAGA,EAAM,CAAC,EAAE,CAAC,CAAC,GAAGA,EAAMA,EAAM,SAAS,CAAC,EAAE,CAAC,CAAC;AAEzF,SAAOD,IAASE,EAAQ,kBAAkBF,CAAM,IAAIE,EAAQ,kBAAA;AAC9D,GAGMC,IAAc,CAACJ,GAAcK,MAA0B;AAC3D,MAAIC,IAAO;AACX,WAASC,IAAQ,GAAGA,IAAQP,EAAK,QAAQO,KAAS,EAAG,CAAAD,IAAQA,IAAO,KAAMN,EAAK,WAAWO,CAAK;AAE/F,SAAO,KAAK,IAAID,CAAI,IAAID;AAC1B,GAGMG,IAAa,GAGbC,IAAoB,CAAC;AAAA,EACzB,MAAAT;AAAA,EACA,UAAAU;AAAA,EACA,MAAAC;AAAA,EACA,QAAAV;AAAA,EACA,MAAAW,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,MAAAC,IAAO;AAAA,EACP,WAAAC;AAAA,EACA,QAAAC;AACF,MAAM;AACJ,QAAM,EAAE,QAAAC,EAAA,IAAWC,EAAA;AAEnB,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACTC,EAAO;AAAA,QACPA,EAAO,WAAWT,CAAI,EAAE;AAAA,QACxBC,MAAU,aAAaQ,EAAO,iBAAiB;AAAA,QAC/CP,MAAS,WAAWO,EAAO,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,QAK1CP,MAAS,UACP,CAACJ,KACD,CAACC,KACDU,EAAO,gBAAgBjB,EAAYJ,GAAMQ,CAAU,CAAC,EAAE;AAAA,QACxDO;AAAA,MAAA;AAAA,MAQF,MAAK;AAAA,MACL,cAAYf;AAAA,MACZ,eAAagB;AAAA,MAEZ,UAAAN;AAAA;AAAA,QAEC,gBAAAS,EAAC,SAAI,WAAWE,EAAO,eAAe,KAAKX,GAAU,KAAI,GAAA,CAAG;AAAA,UAC1DC,IACF,gBAAAQ,EAAC,QAAA,EAAK,WAAWE,EAAO,cAAc,eAAW,IAC9C,UAAAV,EAAA,CACH,IAEAZ,EAAgBC,GAAMC,MAAUgB,KAAA,gBAAAA,EAAQ,OAAM;AAAA,IAAA;AAAA,EAAA;AAItD,GAEAV,IAA6B,gBAAAe,EAAmB,gBAAAC,EAAMd,GAAQ,QAAQ,CAAC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-avatar-qoh3P{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:var(--ui-radius-pill);background-color:var(--ui-surface-3);color:var(--ui-text);font-family:var(--ui-font-heading);font-weight:600;letter-spacing:0;line-height:var(--ui-leading-none);-webkit-user-select:none;user-select:none;overflow:hidden}.ui-avatar__image-uAyAX{width:100%;height:100%;object-fit:cover}.ui-avatar__icon-CVOYs{display:inline-flex;font-size:var(--ui-icon-md)}.ui-avatar--sm-GGjU4 .ui-avatar__icon-CVOYs{font-size:var(--ui-icon-sm)}.ui-avatar--lg-ULP-r .ui-avatar__icon-CVOYs{font-size:var(--ui-icon-xl)}.ui-avatar--rounded-Sq2tv{border-radius:var(--ui-radius-md)}.ui-avatar--rounded-Sq2tv.ui-avatar--md-xhXnK{border-radius:var(--ui-radius-lg)}.ui-avatar--rounded-Sq2tv.ui-avatar--lg-ULP-r{border-radius:var(--ui-radius-xl)}.ui-avatar--brand-oJor6{background-color:var(--ui-band-bg);color:var(--ui-band-accent)}.ui-avatar--sm-GGjU4{width:32px;height:32px;font-size:var(--ui-font-size-xs)}.ui-avatar--md-xhXnK{width:44px;height:44px;font-size:var(--ui-font-size-base)}.ui-avatar--lg-ULP-r{width:56px;height:56px;font-size:var(--ui-font-size-lg)}.ui-avatar--tone-0-mvjdw{background-color:var(--ui-selected-tint);color:var(--ui-text)}.ui-avatar--tone-1-RYZOX{background-color:var(--ui-ok-bg);color:var(--ui-ok-fg)}.ui-avatar--tone-2-vP-CS{background-color:var(--ui-warn-bg);color:var(--ui-warn-fg)}.ui-avatar--tone-3-ivgnI{background-color:var(--ui-alt-bg);color:var(--ui-alt-fg)}.ui-avatar--tone-4-V57r3{background-color:var(--ui-off-bg);color:var(--ui-off-fg)}.ui-avatar--tone-5-65aPg{background-color:var(--ui-bad-bg);color:var(--ui-bad-fg)}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),n=require("react"),c=require("../../helpers/class-name.helper.cjs"),e={default:{"badge":"ui-badge-uLAaI","badge__icon":"ui-badge__icon-R2goZ","badge--neutral":"ui-badge--neutral-6kddt","badge--soft":"ui-badge--soft-gFeRF","badge--solid":"ui-badge--solid-rtdHI","badge--outline":"ui-badge--outline-QiAAz","badge--success":"ui-badge--success-Oj11F","badge--danger":"ui-badge--danger-X3nV0","badge--warning":"ui-badge--warning-vAsx2","badge--info":"ui-badge--info-mHOwk","badge--oem":"ui-badge--oem-Nl-VX","badge--alt":"ui-badge--alt-gQkww","badge--sale":"ui-badge--sale-Li1tG","badge--action":"ui-badge--action-7pUio","badge--link":"ui-badge--link-zcNJZ"}},i=({children:s,tone:d="neutral",variant:l="soft",icon:a,className:r,testId:u})=>t.jsxs("span",{className:c.cx(e.default.badge,e.default[`badge--${d}`],e.default[`badge--${l}`],r),"data-testid":u,children:[a&&t.jsx("span",{className:e.default.badge__icon,children:a}),s]}),o=n.memo(i);exports.default=o;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Badge/index.tsx"],"sourcesContent":["import { type FC, memo, type ReactNode } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\n\nimport styles from './index.module.scss';\n\nexport type BadgeTone =\n | 'neutral'\n | 'success'\n | 'danger'\n | 'warning'\n | 'info'\n /** Birincil sınıflandırma tinti (yeşil aile — örn. \"Orijinal\"). */\n | 'oem'\n /** İkincil sınıflandırma tinti (menekşe aile — örn. \"Muadil\"). */\n | 'alt'\n /** İndirim / olumlu değişim yüzdesi. Tutarın kendisi nötr kalır. */\n | 'sale'\n /** Miktar sayacı (sepet adedi, filtre sayısı) — dolu zemine izin verilir. */\n | 'action'\n /** Gezinme etiketi. */\n | 'link';\n\nexport type BadgeVariant = 'soft' | 'solid' | 'outline';\n\ntype Props = {\n children: ReactNode;\n tone?: BadgeTone;\n variant?: BadgeVariant;\n /** Küçük ikon; metnin solunda gösterilir. */\n icon?: ReactNode;\n className?: string;\n testId?: string;\n};\n\n/** Rozet — durum ve sınıflandırma etiketi. */\nconst Badge: FC<Props> = ({\n children,\n tone = 'neutral',\n variant = 'soft',\n icon,\n className,\n testId,\n}) => (\n <span\n className={cx(styles.badge, styles[`badge--${tone}`], styles[`badge--${variant}`], className)}\n data-testid={testId}\n >\n {icon && <span className={styles.badge__icon}>{icon}</span>}\n {children}\n </span>\n);\n\nexport default /*#__PURE__*/ memo(Badge) as typeof Badge;\n"],"names":["Badge","children","tone","variant","icon","className","testId","jsxs","cx","styles","jsx","index"],"mappings":"0PAoCMA,EAAmB,CAAC,CACxB,SAAAC,EACA,KAAAC,EAAO,UACP,QAAAC,EAAU,OACV,KAAAC,EACA,UAAAC,EACA,OAAAC,CACF,IACEC,EAAAA,KAAC,OAAA,CACC,UAAWC,EAAAA,GAAGC,EAAAA,QAAO,MAAOA,EAAAA,QAAO,UAAUP,CAAI,EAAE,EAAGO,EAAAA,QAAO,UAAUN,CAAO,EAAE,EAAGE,CAAS,EAC5F,cAAaC,EAEZ,SAAA,CAAAF,GAAQM,EAAAA,IAAC,OAAA,CAAK,UAAWD,EAAAA,QAAO,YAAc,SAAAL,EAAK,EACnDH,CAAA,CAAA,CACH,EAGFU,SAAkCX,CAAK"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
|
+
export type BadgeTone = 'neutral' | 'success' | 'danger' | 'warning' | 'info'
|
|
3
|
+
/** Birincil sınıflandırma tinti (yeşil aile — örn. "Orijinal"). */
|
|
4
|
+
| 'oem'
|
|
5
|
+
/** İkincil sınıflandırma tinti (menekşe aile — örn. "Muadil"). */
|
|
6
|
+
| 'alt'
|
|
7
|
+
/** İndirim / olumlu değişim yüzdesi. Tutarın kendisi nötr kalır. */
|
|
8
|
+
| 'sale'
|
|
9
|
+
/** Miktar sayacı (sepet adedi, filtre sayısı) — dolu zemine izin verilir. */
|
|
10
|
+
| 'action'
|
|
11
|
+
/** Gezinme etiketi. */
|
|
12
|
+
| 'link';
|
|
13
|
+
export type BadgeVariant = 'soft' | 'solid' | 'outline';
|
|
14
|
+
type Props = {
|
|
15
|
+
children: ReactNode;
|
|
16
|
+
tone?: BadgeTone;
|
|
17
|
+
variant?: BadgeVariant;
|
|
18
|
+
/** Küçük ikon; metnin solunda gösterilir. */
|
|
19
|
+
icon?: ReactNode;
|
|
20
|
+
className?: string;
|
|
21
|
+
testId?: string;
|
|
22
|
+
};
|
|
23
|
+
/** Rozet — durum ve sınıflandırma etiketi. */
|
|
24
|
+
declare const Badge: FC<Props>;
|
|
25
|
+
declare const _default: typeof Badge;
|
|
26
|
+
export default _default;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsxs as d, jsx as i } from "react/jsx-runtime";
|
|
2
|
+
import { memo as n } from "react";
|
|
3
|
+
import { cx as c } from "../../helpers/class-name.helper.js";
|
|
4
|
+
const a = {"badge":"ui-badge-uLAaI","badge__icon":"ui-badge__icon-R2goZ","badge--neutral":"ui-badge--neutral-6kddt","badge--soft":"ui-badge--soft-gFeRF","badge--solid":"ui-badge--solid-rtdHI","badge--outline":"ui-badge--outline-QiAAz","badge--success":"ui-badge--success-Oj11F","badge--danger":"ui-badge--danger-X3nV0","badge--warning":"ui-badge--warning-vAsx2","badge--info":"ui-badge--info-mHOwk","badge--oem":"ui-badge--oem-Nl-VX","badge--alt":"ui-badge--alt-gQkww","badge--sale":"ui-badge--sale-Li1tG","badge--action":"ui-badge--action-7pUio","badge--link":"ui-badge--link-zcNJZ"};
|
|
5
|
+
const l = ({
|
|
6
|
+
children: s,
|
|
7
|
+
tone: t = "neutral",
|
|
8
|
+
variant: o = "soft",
|
|
9
|
+
icon: e,
|
|
10
|
+
className: m,
|
|
11
|
+
testId: r
|
|
12
|
+
}) => /* @__PURE__ */ d(
|
|
13
|
+
"span",
|
|
14
|
+
{
|
|
15
|
+
className: c(a.badge, a[`badge--${t}`], a[`badge--${o}`], m),
|
|
16
|
+
"data-testid": r,
|
|
17
|
+
children: [
|
|
18
|
+
e && /* @__PURE__ */ i("span", { className: a.badge__icon, children: e }),
|
|
19
|
+
s
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
), b = /* @__PURE__ */ n(l);
|
|
23
|
+
export {
|
|
24
|
+
b as default
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Badge/index.tsx"],"sourcesContent":["import { type FC, memo, type ReactNode } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\n\nimport styles from './index.module.scss';\n\nexport type BadgeTone =\n | 'neutral'\n | 'success'\n | 'danger'\n | 'warning'\n | 'info'\n /** Birincil sınıflandırma tinti (yeşil aile — örn. \"Orijinal\"). */\n | 'oem'\n /** İkincil sınıflandırma tinti (menekşe aile — örn. \"Muadil\"). */\n | 'alt'\n /** İndirim / olumlu değişim yüzdesi. Tutarın kendisi nötr kalır. */\n | 'sale'\n /** Miktar sayacı (sepet adedi, filtre sayısı) — dolu zemine izin verilir. */\n | 'action'\n /** Gezinme etiketi. */\n | 'link';\n\nexport type BadgeVariant = 'soft' | 'solid' | 'outline';\n\ntype Props = {\n children: ReactNode;\n tone?: BadgeTone;\n variant?: BadgeVariant;\n /** Küçük ikon; metnin solunda gösterilir. */\n icon?: ReactNode;\n className?: string;\n testId?: string;\n};\n\n/** Rozet — durum ve sınıflandırma etiketi. */\nconst Badge: FC<Props> = ({\n children,\n tone = 'neutral',\n variant = 'soft',\n icon,\n className,\n testId,\n}) => (\n <span\n className={cx(styles.badge, styles[`badge--${tone}`], styles[`badge--${variant}`], className)}\n data-testid={testId}\n >\n {icon && <span className={styles.badge__icon}>{icon}</span>}\n {children}\n </span>\n);\n\nexport default /*#__PURE__*/ memo(Badge) as typeof Badge;\n"],"names":["Badge","children","tone","variant","icon","className","testId","jsxs","cx","styles","jsx","index"],"mappings":";;;;AAoCA,MAAMA,IAAmB,CAAC;AAAA,EACxB,UAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AACF,MACE,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC,EAAGC,EAAO,OAAOA,EAAO,UAAUP,CAAI,EAAE,GAAGO,EAAO,UAAUN,CAAO,EAAE,GAAGE,CAAS;AAAA,IAC5F,eAAaC;AAAA,IAEZ,UAAA;AAAA,MAAAF,KAAQ,gBAAAM,EAAC,QAAA,EAAK,WAAWD,EAAO,aAAc,UAAAL,GAAK;AAAA,MACnDH;AAAA,IAAA;AAAA,EAAA;AACH,GAGFU,sBAAkCX,CAAK;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-badge-uLAaI{display:inline-flex;align-items:center;gap:var(--ui-space-1);font-family:var(--ui-badge-font, var(--ui-font-body));font-size:var(--ui-font-size-xs);font-weight:var(--ui-badge-weight, 600);letter-spacing:var(--ui-badge-tracking, normal);text-transform:var(--ui-badge-transform, none);line-height:var(--ui-leading-none);white-space:nowrap;padding:5px var(--ui-space-2);border-radius:var(--ui-badge-radius, var(--ui-radius-sm));border:1px solid transparent}.ui-badge__icon-R2goZ{display:flex;font-size:.95em}.ui-badge--neutral-6kddt.ui-badge--soft-gFeRF,.ui-badge--neutral-6kddt.ui-badge--solid-rtdHI{background-color:var(--ui-badge-bg, var(--ui-off-bg));border:1px solid var(--ui-badge-line, var(--ui-off-line));color:var(--ui-badge-fg, var(--ui-off-fg))}.ui-badge--neutral-6kddt.ui-badge--outline-QiAAz{border-color:var(--ui-badge-line, var(--ui-border-strong));color:var(--ui-badge-fg, var(--ui-text-2))}.ui-badge--success-Oj11F.ui-badge--soft-gFeRF,.ui-badge--success-Oj11F.ui-badge--solid-rtdHI{background-color:var(--ui-ok-bg);border:1px solid var(--ui-ok-line);color:var(--ui-ok-fg)}.ui-badge--success-Oj11F.ui-badge--outline-QiAAz{border-color:var(--ui-ok-line);color:var(--ui-ok-fg)}.ui-badge--danger-X3nV0.ui-badge--soft-gFeRF,.ui-badge--danger-X3nV0.ui-badge--solid-rtdHI{background-color:var(--ui-bad-bg);border:1px solid var(--ui-bad-line);color:var(--ui-bad-fg)}.ui-badge--danger-X3nV0.ui-badge--outline-QiAAz{border-color:var(--ui-bad-line);color:var(--ui-bad-fg)}.ui-badge--warning-vAsx2.ui-badge--soft-gFeRF,.ui-badge--warning-vAsx2.ui-badge--solid-rtdHI{background-color:var(--ui-warn-bg);border:1px solid var(--ui-warn-line);color:var(--ui-warn-fg)}.ui-badge--warning-vAsx2.ui-badge--outline-QiAAz{border-color:var(--ui-warn-line);color:var(--ui-warn-fg)}.ui-badge--info-mHOwk.ui-badge--soft-gFeRF,.ui-badge--info-mHOwk.ui-badge--solid-rtdHI{background-color:var(--ui-selected-tint);border:1px solid var(--ui-border-strong);color:var(--ui-text)}.ui-badge--info-mHOwk.ui-badge--outline-QiAAz{border-color:var(--ui-border-strong);color:var(--ui-text)}.ui-badge--oem-Nl-VX.ui-badge--soft-gFeRF,.ui-badge--oem-Nl-VX.ui-badge--solid-rtdHI{background-color:var(--ui-oem-bg);border:1px solid var(--ui-oem-line);color:var(--ui-oem-fg)}.ui-badge--oem-Nl-VX.ui-badge--outline-QiAAz{border-color:var(--ui-oem-line);color:var(--ui-oem-fg)}.ui-badge--alt-gQkww.ui-badge--soft-gFeRF,.ui-badge--alt-gQkww.ui-badge--solid-rtdHI{background-color:var(--ui-alt-bg);border:1px solid var(--ui-alt-line);color:var(--ui-alt-fg)}.ui-badge--alt-gQkww.ui-badge--outline-QiAAz{border-color:var(--ui-alt-line);color:var(--ui-alt-fg)}.ui-badge--sale-Li1tG.ui-badge--soft-gFeRF,.ui-badge--sale-Li1tG.ui-badge--solid-rtdHI{background-color:var(--ui-sale-bg);border-color:var(--ui-sale-bg);color:var(--ui-sale-fg)}.ui-badge--sale-Li1tG.ui-badge--outline-QiAAz{border-color:var(--ui-sale-fg);color:var(--ui-sale-fg)}.ui-badge--action-7pUio.ui-badge--soft-gFeRF{background-color:var(--ui-surface-2);color:var(--ui-text)}.ui-badge--action-7pUio.ui-badge--solid-rtdHI{background-color:var(--ui-action);border-color:var(--ui-action-line);color:var(--ui-on-action)}.ui-badge--action-7pUio.ui-badge--outline-QiAAz{border-color:var(--ui-border-strong);color:var(--ui-text)}.ui-badge--link-zcNJZ.ui-badge--soft-gFeRF{background-color:var(--ui-surface-2);border-color:var(--ui-border);color:var(--ui-link)}.ui-badge--link-zcNJZ.ui-badge--solid-rtdHI{background-color:var(--ui-selected);border-color:var(--ui-selected);color:var(--ui-on-selected)}.ui-badge--link-zcNJZ.ui-badge--outline-QiAAz{border-color:var(--ui-link);color:var(--ui-link)}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),s=require("react"),j=require("react-dom"),k=require("@handijit/utils"),v=require("../../constants/breakpoint.constants.cjs"),M=require("react-bootstrap-icons"),E=require("../../helpers/class-name.helper.cjs"),c=require("../../helpers/focus.helper.cjs"),B=require("../../helpers/label.helper.cjs"),L=require("../../theme/context.cjs"),N=require("../../hooks/useScrollLock.cjs"),S=require("../../hooks/useSheetViewport.cjs"),y=require("../IconButton/index.cjs"),r={default:{"sheet":"ui-sheet-GEvdE","sheet__header":"ui-sheet__header-NJgw-","sheet__title":"ui-sheet__title-f-b07","sheet__toolbar":"ui-sheet__toolbar-eyhmW","sheet__body":"ui-sheet__body-eJ2KB","sheet__footer":"ui-sheet__footer-NpsY5"}},I=({title:_,closeLabel:m,onClose:a,children:p,toolbar:i,footer:d,closeAbove:h=v.ABOVE_MOBILE_MEDIA_QUERY,className:q,testId:b})=>{const{labels:l}=L.useUi(),f=s.useId(),n=s.useRef(null);S.default(),N.default(),s.useEffect(()=>{const e=c.captureFocus(),{token:u,pop:o}=c.pushModal();return n.current=u,()=>{o(),n.current=null,e()}},[]),s.useEffect(()=>{const e=window.matchMedia(h),u=o=>{o.matches&&a()};return e.addEventListener("change",u),()=>e.removeEventListener("change",u)},[h,a]);const x=s.useCallback(e=>{!e||e.open||(e.showModal(),c.focusFirstMeaningful(e,`.${r.default.sheet__header} button`),c.preventAutoKeyboard(e))},[]),g=s.useCallback(e=>{e.target===e.currentTarget&&a()},[a]);return k.isClient()?j.createPortal(t.jsxs("dialog",{ref:x,className:E.cx(r.default.sheet,q),"aria-labelledby":f,"data-testid":b,onCancel:e=>{e.preventDefault(),!(n.current&&!c.isTopModal(n.current))&&a()},onClick:g,children:[t.jsxs("header",{className:r.default.sheet__header,children:[t.jsx("h2",{id:f,className:r.default.sheet__title,children:_}),t.jsx(y.default,{icon:t.jsx(M.XLg,{"aria-hidden":!0}),label:B.resolveLabel("BottomSheet.closeLabel",m,l==null?void 0:l.close),variant:"ghost",size:"sm",onClick:a})]}),i&&t.jsx("div",{className:r.default.sheet__toolbar,children:i}),t.jsx("div",{className:r.default.sheet__body,children:p}),d&&t.jsx("div",{className:r.default.sheet__footer,children:d})]}),document.body):null},R=s.memo(I);exports.default=R;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/BottomSheet/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n memo,\n type MouseEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { isClient } from '@handijit/utils';\n\nimport { ABOVE_MOBILE_MEDIA_QUERY } from '../../constants/breakpoint.constants';\nimport { XLg } from 'react-bootstrap-icons';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport {\n captureFocus,\n focusFirstMeaningful,\n isTopModal,\n preventAutoKeyboard,\n pushModal,\n} from '../../helpers/focus.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\nimport useScrollLock from '../../hooks/useScrollLock';\nimport useSheetViewport from '../../hooks/useSheetViewport';\nimport IconButton from '../IconButton';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n title: string;\n /** Kapatma düğmesinin erişilebilir adı. */\n closeLabel?: string;\n onClose: () => void;\n children: ReactNode;\n /**\n * Başlığın altında duran, gövde kaydırılırken yerinde kalan şerit — `Combobox`ın arama kutusu\n * gibi.\n */\n toolbar?: ReactNode;\n /** Dipte duran eylem şeridi. */\n footer?: ReactNode;\n /** Panelin kendiliğinden kapandığı medya sorgusu. */\n closeAbove?: string;\n className?: string;\n testId?: string;\n};\n\n/** Alt sayfa (bottom sheet) — ekranın dibinden yükselen kipsel panel. */\nconst BottomSheet = ({\n title,\n closeLabel,\n onClose,\n children,\n toolbar,\n footer,\n closeAbove = ABOVE_MOBILE_MEDIA_QUERY,\n className,\n testId,\n}: Props) => {\n const { labels } = useUi();\n const titleId = useId();\n /* Yigindaki yerimiz: */\n const tokenRef = useRef<symbol | null>(null);\n\n /* Panel GORUNEN alana yaslanir: klavye ve adres cubugu altinda kalmaz. */\n useSheetViewport();\n\n /*\n * Arka plan kaydirmasi kilitlenir: `showModal()` arka plani etkilesime kapatir ama kaydirmayi her\n * tarayicida engellemiyor\n */\n useScrollLock();\n\n /* ODAK GERI DONUSU ve KIPSEL YIGIN. */\n useEffect(() => {\n const restoreFocus = captureFocus();\n const { token, pop } = pushModal();\n tokenRef.current = token;\n\n return () => {\n pop();\n tokenRef.current = null;\n restoreFocus();\n };\n }, []);\n\n useEffect(() => {\n const query = window.matchMedia(closeAbove);\n\n /* ⚠ YALNIZCA EŞİĞİN ÜSTÜNE ÇIKARKEN kapanır. */\n const handleChange = (event: MediaQueryListEvent) => {\n if (event.matches) onClose();\n };\n\n query.addEventListener('change', handleChange);\n return () => query.removeEventListener('change', handleChange);\n }, [closeAbove, onClose]);\n\n const setDialogRef = useCallback((node: HTMLDialogElement | null) => {\n if (!node || node.open) return;\n\n node.showModal();\n\n /*\n * Odak KAPATMA DUGMESINE degil ilk anlamli ogeye: ekran okuyucu paneli \"Kapat, dugme\" diye\n * aciyordu\n */\n focusFirstMeaningful(node, `.${styles.sheet__header} button`);\n\n /*\n * `showModal()` odagi panelin ILK odaklanabilir ogesine tasiyor; o oge bir metin alani\n * oldugunda telefonda klavye kendiliginden aciliyordu (bkz.…\n */\n preventAutoKeyboard(node);\n }, []);\n\n const handleBackdropClick = useCallback(\n (event: MouseEvent<HTMLDialogElement>) => {\n // Hedef dialog'un KENDISI ise perdeye tiklanmistir; icerik degil.\n if (event.target === event.currentTarget) onClose();\n },\n [onClose],\n );\n\n /* Portal `document.body`ye baglaniyor; sunucuda `document` yok. */\n if (!isClient()) return null;\n\n return createPortal(\n <dialog\n ref={setDialogRef}\n className={cx(styles.sheet, className)}\n aria-labelledby={titleId}\n data-testid={testId}\n /*\n * Escape'i tarayici isler ama React durumu haberdar olmuyor: yakalanmazsa panel kapanip durum\n * acik kaliyor ve kutu bir daha acilmiyordu.\n */\n onCancel={event => {\n event.preventDefault();\n /*\n * Yalnizca EN USTTEKI panel kapanir: ust uste iki kipsel yuzeyde tek bir Escape ikisini\n * birden kapatiyordu.\n */\n if (tokenRef.current && !isTopModal(tokenRef.current)) return;\n onClose();\n }}\n onClick={handleBackdropClick}\n >\n <header className={styles.sheet__header}>\n <h2 id={titleId} className={styles.sheet__title}>\n {title}\n </h2>\n <IconButton\n icon={<XLg aria-hidden />}\n label={resolveLabel('BottomSheet.closeLabel', closeLabel, labels?.close)}\n variant=\"ghost\"\n size=\"sm\"\n onClick={onClose}\n />\n </header>\n\n {toolbar && <div className={styles.sheet__toolbar}>{toolbar}</div>}\n\n <div className={styles.sheet__body}>{children}</div>\n\n {footer && <div className={styles.sheet__footer}>{footer}</div>}\n </dialog>,\n document.body,\n );\n};\n\nexport default /*#__PURE__*/ memo(BottomSheet);\n"],"names":["BottomSheet","title","closeLabel","onClose","children","toolbar","footer","closeAbove","ABOVE_MOBILE_MEDIA_QUERY","className","testId","labels","useUi","titleId","useId","tokenRef","useRef","useSheetViewport","useScrollLock","useEffect","restoreFocus","captureFocus","token","pop","pushModal","query","handleChange","event","setDialogRef","useCallback","node","focusFirstMeaningful","styles","preventAutoKeyboard","handleBackdropClick","isClient","createPortal","jsxs","cx","isTopModal","jsx","IconButton","XLg","resolveLabel"],"mappings":"+oBAqDMA,EAAc,CAAC,CACnB,MAAAC,EACA,WAAAC,EACA,QAAAC,EACA,SAAAC,EACA,QAAAC,EACA,OAAAC,EACA,WAAAC,EAAaC,EAAAA,yBACb,UAAAC,EACA,OAAAC,CACF,IAAa,CACX,KAAM,CAAE,OAAAC,CAAA,EAAWC,QAAA,EACbC,EAAUC,EAAAA,MAAA,EAEVC,EAAWC,EAAAA,OAAsB,IAAI,EAG3CC,UAAA,EAMAC,UAAA,EAGAC,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAeC,EAAAA,aAAA,EACf,CAAE,MAAAC,EAAO,IAAAC,CAAA,EAAQC,YAAA,EACvB,OAAAT,EAAS,QAAUO,EAEZ,IAAM,CACXC,EAAA,EACAR,EAAS,QAAU,KACnBK,EAAA,CACF,CACF,EAAG,CAAA,CAAE,EAELD,EAAAA,UAAU,IAAM,CACd,MAAMM,EAAQ,OAAO,WAAWlB,CAAU,EAGpCmB,EAAgBC,GAA+B,CAC/CA,EAAM,SAASxB,EAAA,CACrB,EAEA,OAAAsB,EAAM,iBAAiB,SAAUC,CAAY,EACtC,IAAMD,EAAM,oBAAoB,SAAUC,CAAY,CAC/D,EAAG,CAACnB,EAAYJ,CAAO,CAAC,EAExB,MAAMyB,EAAeC,cAAaC,GAAmC,CAC/D,CAACA,GAAQA,EAAK,OAElBA,EAAK,UAAA,EAMLC,EAAAA,qBAAqBD,EAAM,IAAIE,EAAAA,QAAO,aAAa,SAAS,EAM5DC,EAAAA,oBAAoBH,CAAI,EAC1B,EAAG,CAAA,CAAE,EAECI,EAAsBL,EAAAA,YACzBF,GAAyC,CAEpCA,EAAM,SAAWA,EAAM,eAAexB,EAAA,CAC5C,EACA,CAACA,CAAO,CAAA,EAIV,OAAKgC,EAAAA,SAAA,EAEEC,EAAAA,aACLC,EAAAA,KAAC,SAAA,CACC,IAAKT,EACL,UAAWU,EAAAA,GAAGN,UAAO,MAAOvB,CAAS,EACrC,kBAAiBI,EACjB,cAAaH,EAKb,SAAUiB,GAAS,CACjBA,EAAM,eAAA,EAKF,EAAAZ,EAAS,SAAW,CAACwB,EAAAA,WAAWxB,EAAS,OAAO,IACpDZ,EAAA,CACF,EACA,QAAS+B,EAET,SAAA,CAAAG,EAAAA,KAAC,SAAA,CAAO,UAAWL,EAAAA,QAAO,cACxB,SAAA,CAAAQ,MAAC,MAAG,GAAI3B,EAAS,UAAWmB,EAAAA,QAAO,aAChC,SAAA/B,EACH,EACAuC,EAAAA,IAACC,EAAAA,QAAA,CACC,KAAMD,EAAAA,IAACE,EAAAA,IAAA,CAAI,cAAW,EAAA,CAAC,EACvB,MAAOC,EAAAA,aAAa,yBAA0BzC,EAAYS,GAAA,YAAAA,EAAQ,KAAK,EACvE,QAAQ,QACR,KAAK,KACL,QAASR,CAAA,CAAA,CACX,EACF,EAECE,GAAWmC,EAAAA,IAAC,MAAA,CAAI,UAAWR,EAAAA,QAAO,eAAiB,SAAA3B,EAAQ,EAE5DmC,EAAAA,IAAC,MAAA,CAAI,UAAWR,EAAAA,QAAO,YAAc,SAAA5B,EAAS,EAE7CE,GAAUkC,EAAAA,IAAC,MAAA,CAAI,UAAWR,EAAAA,QAAO,cAAgB,SAAA1B,CAAA,CAAO,CAAA,CAAA,CAAA,EAE3D,SAAS,IAAA,EA1Ca,IA4C1B,EAEAN,SAAkCA,CAAW"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
type Props = {
|
|
3
|
+
title: string;
|
|
4
|
+
/** Kapatma düğmesinin erişilebilir adı. */
|
|
5
|
+
closeLabel?: string;
|
|
6
|
+
onClose: () => void;
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* Başlığın altında duran, gövde kaydırılırken yerinde kalan şerit — `Combobox`ın arama kutusu
|
|
10
|
+
* gibi.
|
|
11
|
+
*/
|
|
12
|
+
toolbar?: ReactNode;
|
|
13
|
+
/** Dipte duran eylem şeridi. */
|
|
14
|
+
footer?: ReactNode;
|
|
15
|
+
/** Panelin kendiliğinden kapandığı medya sorgusu. */
|
|
16
|
+
closeAbove?: string;
|
|
17
|
+
className?: string;
|
|
18
|
+
testId?: string;
|
|
19
|
+
};
|
|
20
|
+
declare const _default: import('react').MemoExoticComponent<({ title, closeLabel, onClose, children, toolbar, footer, closeAbove, className, testId, }: Props) => import('react').ReactPortal | null>;
|
|
21
|
+
export default _default;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as d, jsx as o } from "react/jsx-runtime";
|
|
3
|
+
import { memo as E, useId as L, useRef as M, useEffect as h, useCallback as f } from "react";
|
|
4
|
+
import { createPortal as y } from "react-dom";
|
|
5
|
+
import { isClient as N } from "@handijit/utils";
|
|
6
|
+
import { ABOVE_MOBILE_MEDIA_QUERY as I } from "../../constants/breakpoint.constants.js";
|
|
7
|
+
import { XLg as S } from "react-bootstrap-icons";
|
|
8
|
+
import { cx as w } from "../../helpers/class-name.helper.js";
|
|
9
|
+
import { focusFirstMeaningful as x, preventAutoKeyboard as R, isTopModal as D, pushModal as F, captureFocus as j } from "../../helpers/focus.helper.js";
|
|
10
|
+
import { resolveLabel as A } from "../../helpers/label.helper.js";
|
|
11
|
+
import { useUi as C } from "../../theme/context.js";
|
|
12
|
+
import O from "../../hooks/useScrollLock.js";
|
|
13
|
+
import T from "../../hooks/useSheetViewport.js";
|
|
14
|
+
import U from "../IconButton/index.js";
|
|
15
|
+
const t = {"sheet":"ui-sheet-GEvdE","sheet__header":"ui-sheet__header-NJgw-","sheet__title":"ui-sheet__title-f-b07","sheet__toolbar":"ui-sheet__toolbar-eyhmW","sheet__body":"ui-sheet__body-eJ2KB","sheet__footer":"ui-sheet__footer-NpsY5"};
|
|
16
|
+
const V = ({
|
|
17
|
+
title: p,
|
|
18
|
+
closeLabel: _,
|
|
19
|
+
onClose: r,
|
|
20
|
+
children: g,
|
|
21
|
+
toolbar: n,
|
|
22
|
+
footer: m,
|
|
23
|
+
closeAbove: l = I,
|
|
24
|
+
className: b,
|
|
25
|
+
testId: k
|
|
26
|
+
}) => {
|
|
27
|
+
const { labels: i } = C(), u = L(), s = M(null);
|
|
28
|
+
T(), O(), h(() => {
|
|
29
|
+
const e = j(), { token: a, pop: c } = F();
|
|
30
|
+
return s.current = a, () => {
|
|
31
|
+
c(), s.current = null, e();
|
|
32
|
+
};
|
|
33
|
+
}, []), h(() => {
|
|
34
|
+
const e = window.matchMedia(l), a = (c) => {
|
|
35
|
+
c.matches && r();
|
|
36
|
+
};
|
|
37
|
+
return e.addEventListener("change", a), () => e.removeEventListener("change", a);
|
|
38
|
+
}, [l, r]);
|
|
39
|
+
const v = f((e) => {
|
|
40
|
+
!e || e.open || (e.showModal(), x(e, `.${t.sheet__header} button`), R(e));
|
|
41
|
+
}, []), B = f(
|
|
42
|
+
(e) => {
|
|
43
|
+
e.target === e.currentTarget && r();
|
|
44
|
+
},
|
|
45
|
+
[r]
|
|
46
|
+
);
|
|
47
|
+
return N() ? y(
|
|
48
|
+
/* @__PURE__ */ d(
|
|
49
|
+
"dialog",
|
|
50
|
+
{
|
|
51
|
+
ref: v,
|
|
52
|
+
className: w(t.sheet, b),
|
|
53
|
+
"aria-labelledby": u,
|
|
54
|
+
"data-testid": k,
|
|
55
|
+
onCancel: (e) => {
|
|
56
|
+
e.preventDefault(), !(s.current && !D(s.current)) && r();
|
|
57
|
+
},
|
|
58
|
+
onClick: B,
|
|
59
|
+
children: [
|
|
60
|
+
/* @__PURE__ */ d("header", { className: t.sheet__header, children: [
|
|
61
|
+
/* @__PURE__ */ o("h2", { id: u, className: t.sheet__title, children: p }),
|
|
62
|
+
/* @__PURE__ */ o(
|
|
63
|
+
U,
|
|
64
|
+
{
|
|
65
|
+
icon: /* @__PURE__ */ o(S, { "aria-hidden": !0 }),
|
|
66
|
+
label: A("BottomSheet.closeLabel", _, i == null ? void 0 : i.close),
|
|
67
|
+
variant: "ghost",
|
|
68
|
+
size: "sm",
|
|
69
|
+
onClick: r
|
|
70
|
+
}
|
|
71
|
+
)
|
|
72
|
+
] }),
|
|
73
|
+
n && /* @__PURE__ */ o("div", { className: t.sheet__toolbar, children: n }),
|
|
74
|
+
/* @__PURE__ */ o("div", { className: t.sheet__body, children: g }),
|
|
75
|
+
m && /* @__PURE__ */ o("div", { className: t.sheet__footer, children: m })
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
),
|
|
79
|
+
document.body
|
|
80
|
+
) : null;
|
|
81
|
+
}, te = /* @__PURE__ */ E(V);
|
|
82
|
+
export {
|
|
83
|
+
te as default
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/BottomSheet/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n memo,\n type MouseEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { isClient } from '@handijit/utils';\n\nimport { ABOVE_MOBILE_MEDIA_QUERY } from '../../constants/breakpoint.constants';\nimport { XLg } from 'react-bootstrap-icons';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport {\n captureFocus,\n focusFirstMeaningful,\n isTopModal,\n preventAutoKeyboard,\n pushModal,\n} from '../../helpers/focus.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\nimport useScrollLock from '../../hooks/useScrollLock';\nimport useSheetViewport from '../../hooks/useSheetViewport';\nimport IconButton from '../IconButton';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n title: string;\n /** Kapatma düğmesinin erişilebilir adı. */\n closeLabel?: string;\n onClose: () => void;\n children: ReactNode;\n /**\n * Başlığın altında duran, gövde kaydırılırken yerinde kalan şerit — `Combobox`ın arama kutusu\n * gibi.\n */\n toolbar?: ReactNode;\n /** Dipte duran eylem şeridi. */\n footer?: ReactNode;\n /** Panelin kendiliğinden kapandığı medya sorgusu. */\n closeAbove?: string;\n className?: string;\n testId?: string;\n};\n\n/** Alt sayfa (bottom sheet) — ekranın dibinden yükselen kipsel panel. */\nconst BottomSheet = ({\n title,\n closeLabel,\n onClose,\n children,\n toolbar,\n footer,\n closeAbove = ABOVE_MOBILE_MEDIA_QUERY,\n className,\n testId,\n}: Props) => {\n const { labels } = useUi();\n const titleId = useId();\n /* Yigindaki yerimiz: */\n const tokenRef = useRef<symbol | null>(null);\n\n /* Panel GORUNEN alana yaslanir: klavye ve adres cubugu altinda kalmaz. */\n useSheetViewport();\n\n /*\n * Arka plan kaydirmasi kilitlenir: `showModal()` arka plani etkilesime kapatir ama kaydirmayi her\n * tarayicida engellemiyor\n */\n useScrollLock();\n\n /* ODAK GERI DONUSU ve KIPSEL YIGIN. */\n useEffect(() => {\n const restoreFocus = captureFocus();\n const { token, pop } = pushModal();\n tokenRef.current = token;\n\n return () => {\n pop();\n tokenRef.current = null;\n restoreFocus();\n };\n }, []);\n\n useEffect(() => {\n const query = window.matchMedia(closeAbove);\n\n /* ⚠ YALNIZCA EŞİĞİN ÜSTÜNE ÇIKARKEN kapanır. */\n const handleChange = (event: MediaQueryListEvent) => {\n if (event.matches) onClose();\n };\n\n query.addEventListener('change', handleChange);\n return () => query.removeEventListener('change', handleChange);\n }, [closeAbove, onClose]);\n\n const setDialogRef = useCallback((node: HTMLDialogElement | null) => {\n if (!node || node.open) return;\n\n node.showModal();\n\n /*\n * Odak KAPATMA DUGMESINE degil ilk anlamli ogeye: ekran okuyucu paneli \"Kapat, dugme\" diye\n * aciyordu\n */\n focusFirstMeaningful(node, `.${styles.sheet__header} button`);\n\n /*\n * `showModal()` odagi panelin ILK odaklanabilir ogesine tasiyor; o oge bir metin alani\n * oldugunda telefonda klavye kendiliginden aciliyordu (bkz.…\n */\n preventAutoKeyboard(node);\n }, []);\n\n const handleBackdropClick = useCallback(\n (event: MouseEvent<HTMLDialogElement>) => {\n // Hedef dialog'un KENDISI ise perdeye tiklanmistir; icerik degil.\n if (event.target === event.currentTarget) onClose();\n },\n [onClose],\n );\n\n /* Portal `document.body`ye baglaniyor; sunucuda `document` yok. */\n if (!isClient()) return null;\n\n return createPortal(\n <dialog\n ref={setDialogRef}\n className={cx(styles.sheet, className)}\n aria-labelledby={titleId}\n data-testid={testId}\n /*\n * Escape'i tarayici isler ama React durumu haberdar olmuyor: yakalanmazsa panel kapanip durum\n * acik kaliyor ve kutu bir daha acilmiyordu.\n */\n onCancel={event => {\n event.preventDefault();\n /*\n * Yalnizca EN USTTEKI panel kapanir: ust uste iki kipsel yuzeyde tek bir Escape ikisini\n * birden kapatiyordu.\n */\n if (tokenRef.current && !isTopModal(tokenRef.current)) return;\n onClose();\n }}\n onClick={handleBackdropClick}\n >\n <header className={styles.sheet__header}>\n <h2 id={titleId} className={styles.sheet__title}>\n {title}\n </h2>\n <IconButton\n icon={<XLg aria-hidden />}\n label={resolveLabel('BottomSheet.closeLabel', closeLabel, labels?.close)}\n variant=\"ghost\"\n size=\"sm\"\n onClick={onClose}\n />\n </header>\n\n {toolbar && <div className={styles.sheet__toolbar}>{toolbar}</div>}\n\n <div className={styles.sheet__body}>{children}</div>\n\n {footer && <div className={styles.sheet__footer}>{footer}</div>}\n </dialog>,\n document.body,\n );\n};\n\nexport default /*#__PURE__*/ memo(BottomSheet);\n"],"names":["BottomSheet","title","closeLabel","onClose","children","toolbar","footer","closeAbove","ABOVE_MOBILE_MEDIA_QUERY","className","testId","labels","useUi","titleId","useId","tokenRef","useRef","useSheetViewport","useScrollLock","useEffect","restoreFocus","captureFocus","token","pop","pushModal","query","handleChange","event","setDialogRef","useCallback","node","focusFirstMeaningful","styles","preventAutoKeyboard","handleBackdropClick","isClient","createPortal","jsxs","cx","isTopModal","jsx","IconButton","XLg","resolveLabel","BottomSheet$1"],"mappings":";;;;;;;;;;;;;;;AAqDA,MAAMA,IAAc,CAAC;AAAA,EACnB,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC,IAAaC;AAAA,EACb,WAAAC;AAAA,EACA,QAAAC;AACF,MAAa;AACX,QAAM,EAAE,QAAAC,EAAA,IAAWC,EAAA,GACbC,IAAUC,EAAA,GAEVC,IAAWC,EAAsB,IAAI;AAG3C,EAAAC,EAAA,GAMAC,EAAA,GAGAC,EAAU,MAAM;AACd,UAAMC,IAAeC,EAAA,GACf,EAAE,OAAAC,GAAO,KAAAC,EAAA,IAAQC,EAAA;AACvB,WAAAT,EAAS,UAAUO,GAEZ,MAAM;AACX,MAAAC,EAAA,GACAR,EAAS,UAAU,MACnBK,EAAA;AAAA,IACF;AAAA,EACF,GAAG,CAAA,CAAE,GAELD,EAAU,MAAM;AACd,UAAMM,IAAQ,OAAO,WAAWlB,CAAU,GAGpCmB,IAAe,CAACC,MAA+B;AACnD,MAAIA,EAAM,WAASxB,EAAA;AAAA,IACrB;AAEA,WAAAsB,EAAM,iBAAiB,UAAUC,CAAY,GACtC,MAAMD,EAAM,oBAAoB,UAAUC,CAAY;AAAA,EAC/D,GAAG,CAACnB,GAAYJ,CAAO,CAAC;AAExB,QAAMyB,IAAeC,EAAY,CAACC,MAAmC;AACnE,IAAI,CAACA,KAAQA,EAAK,SAElBA,EAAK,UAAA,GAMLC,EAAqBD,GAAM,IAAIE,EAAO,aAAa,SAAS,GAM5DC,EAAoBH,CAAI;AAAA,EAC1B,GAAG,CAAA,CAAE,GAECI,IAAsBL;AAAA,IAC1B,CAACF,MAAyC;AAExC,MAAIA,EAAM,WAAWA,EAAM,iBAAexB,EAAA;AAAA,IAC5C;AAAA,IACA,CAACA,CAAO;AAAA,EAAA;AAIV,SAAKgC,EAAA,IAEEC;AAAA,IACL,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKT;AAAA,QACL,WAAWU,EAAGN,EAAO,OAAOvB,CAAS;AAAA,QACrC,mBAAiBI;AAAA,QACjB,eAAaH;AAAA,QAKb,UAAU,CAAAiB,MAAS;AAMjB,UALAA,EAAM,eAAA,GAKF,EAAAZ,EAAS,WAAW,CAACwB,EAAWxB,EAAS,OAAO,MACpDZ,EAAA;AAAA,QACF;AAAA,QACA,SAAS+B;AAAA,QAET,UAAA;AAAA,UAAA,gBAAAG,EAAC,UAAA,EAAO,WAAWL,EAAO,eACxB,UAAA;AAAA,YAAA,gBAAAQ,EAAC,QAAG,IAAI3B,GAAS,WAAWmB,EAAO,cAChC,UAAA/B,GACH;AAAA,YACA,gBAAAuC;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,MAAM,gBAAAD,EAACE,GAAA,EAAI,eAAW,GAAA,CAAC;AAAA,gBACvB,OAAOC,EAAa,0BAA0BzC,GAAYS,KAAA,gBAAAA,EAAQ,KAAK;AAAA,gBACvE,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,SAASR;AAAA,cAAA;AAAA,YAAA;AAAA,UACX,GACF;AAAA,UAECE,KAAW,gBAAAmC,EAAC,OAAA,EAAI,WAAWR,EAAO,gBAAiB,UAAA3B,GAAQ;AAAA,UAE5D,gBAAAmC,EAAC,OAAA,EAAI,WAAWR,EAAO,aAAc,UAAA5B,GAAS;AAAA,UAE7CE,KAAU,gBAAAkC,EAAC,OAAA,EAAI,WAAWR,EAAO,eAAgB,UAAA1B,EAAA,CAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAE3D,SAAS;AAAA,EAAA,IA1Ca;AA4C1B,GAEAsC,uBAAkC5C,CAAW;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-sheet-GEvdE{display:none}.ui-sheet-GEvdE[open]{display:flex;flex-direction:column;position:fixed;inset:auto 0 max(env(safe-area-inset-bottom,0px),var(--ui-sheet-inset-bottom, 0px)) 0;width:100%;max-width:none;max-height:max(min(50dvh,320px),min(80dvh,var(--ui-sheet-height, 100dvh) - var(--ui-space-5) - env(safe-area-inset-top,0px)));margin:0;padding:0;border:none;border-radius:var(--ui-radius-xl) var(--ui-radius-xl) 0 0;background-color:var(--ui-surface);color:var(--ui-text);box-shadow:var(--ui-shadow-xl);overflow:hidden;animation:var(--ui-anim-slide-up) var(--ui-duration-normal) var(--ui-ease-out)}.ui-sheet-GEvdE[open]::backdrop{background-color:var(--ui-scrim);animation:var(--ui-anim-fade-in) var(--ui-duration-normal) var(--ui-ease-out)}@media (prefers-reduced-motion: reduce){.ui-sheet-GEvdE[open]{animation:none}.ui-sheet-GEvdE[open]::backdrop{animation:none}}.ui-sheet__header-NJgw-{display:flex;align-items:center;gap:var(--ui-space-3);justify-content:space-between;padding:var(--ui-space-3) var(--ui-space-4);border-bottom:1px solid var(--ui-border);flex-shrink:0;padding-left:max(var(--ui-space-4),env(safe-area-inset-left,0px));padding-right:max(var(--ui-space-4),env(safe-area-inset-right,0px))}.ui-sheet__title-f-b07{font-size:var(--ui-font-size-base);font-weight:600;line-height:var(--ui-leading-tight);color:var(--ui-text);font-family:var(--ui-font-body);line-height:var(--ui-leading-snug);letter-spacing:normal;margin:0}.ui-sheet__toolbar-eyhmW{padding:var(--ui-space-2) var(--ui-space-3);border-bottom:1px solid var(--ui-border);flex-shrink:0;padding-left:max(var(--ui-space-3),env(safe-area-inset-left,0px));padding-right:max(var(--ui-space-3),env(safe-area-inset-right,0px))}.ui-sheet__body-eJ2KB{flex:1 1 auto;min-height:0;position:relative;overflow-y:auto;overscroll-behavior:contain;padding:var(--ui-space-2) var(--ui-space-3);padding-left:max(var(--ui-space-3),env(safe-area-inset-left,0px));padding-right:max(var(--ui-space-3),env(safe-area-inset-right,0px));scrollbar-width:thin;scrollbar-color:var(--ui-border-strong) transparent}.ui-sheet__body-eJ2KB::-webkit-scrollbar{width:8px;height:8px}.ui-sheet__body-eJ2KB::-webkit-scrollbar-track{background:transparent}.ui-sheet__body-eJ2KB::-webkit-scrollbar-thumb{background-color:var(--ui-border-strong);border-radius:var(--ui-radius-pill);border:2px solid transparent;background-clip:content-box}.ui-sheet__body-eJ2KB::-webkit-scrollbar-thumb:hover{background-color:var(--ui-text-3)}.ui-sheet__body-eJ2KB:last-child{padding-bottom:max(var(--ui-space-3),env(safe-area-inset-bottom,0px) - max(env(safe-area-inset-bottom,0px),var(--ui-sheet-inset-bottom, 0px)))}.ui-sheet__footer-NpsY5{display:flex;align-items:center;gap:var(--ui-space-3);padding:var(--ui-space-3) var(--ui-space-4);padding-left:max(var(--ui-space-4),env(safe-area-inset-left,0px));padding-right:max(var(--ui-space-4),env(safe-area-inset-right,0px));padding-bottom:max(var(--ui-space-3),env(safe-area-inset-bottom,0px) - max(env(safe-area-inset-bottom,0px),var(--ui-sheet-inset-bottom, 0px)));border-top:1px solid var(--ui-border);flex-shrink:0}.ui-sheet__footer-NpsY5>*{flex:1}}
|
|
@@ -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"),o=require("react"),b=require("react-bootstrap-icons"),m=require("../../helpers/class-name.helper.cjs"),h=require("../../helpers/label.helper.cjs"),_=require("../../theme/context.cjs"),f=require("../Link/index.cjs"),a={default:{"breadcrumb":"ui-breadcrumb-amB9n","breadcrumb__item":"ui-breadcrumb__item-Icv1S","breadcrumb__link":"ui-breadcrumb__link-eVkPq","breadcrumb__current":"ui-breadcrumb__current-8XjhU","breadcrumb__separator":"ui-breadcrumb__separator-vvaUi"}},x=({items:s,label:u,linkProps:n,className:d,testId:i})=>{const{labels:l}=_.useUi();return e.jsx("nav",{className:d,"aria-label":h.resolveLabel("Breadcrumb.label",u,l==null?void 0:l.breadcrumb),"data-testid":i,children:e.jsx("ol",{className:m.cx(a.default.breadcrumb),children:s.map((r,t)=>{const c=t===s.length-1;return e.jsxs("li",{className:a.default.breadcrumb__item,children:[r.href&&!c?e.jsx(f.default,{href:r.href,className:a.default.breadcrumb__link,...n,children:r.label}):e.jsx("span",{className:a.default.breadcrumb__current,"aria-current":"page",children:r.label}),!c&&e.jsx(b.CaretRightFill,{"aria-hidden":!0,className:a.default.breadcrumb__separator})]},`${r.label}-${t}`)})})})},j=o.memo(x);exports.default=j;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Breadcrumb/index.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, memo } from 'react';\n\nimport { CaretRightFill } from 'react-bootstrap-icons';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\nimport type { UiLinkExtraProps } from '../../types/link.type';\nimport UiLink from '../Link';\n\nimport styles from './index.module.scss';\n\nexport type Crumb = {\n label: string;\n /** Son öğede verilmez: bulunduğumuz sayfa bağlantı olmaz. */\n href?: string;\n};\n\ntype Props = {\n items: Crumb[];\n /** Gezinme bölgesinin erişilebilir adı. */\n label?: string;\n /** Yönlendiriciye geçirilecek ek props. */\n linkProps?: UiLinkExtraProps;\n className?: string;\n testId?: string;\n};\n\n/** Kırıntı yolu. */\nconst Breadcrumb: FC<Props> = ({ items, label, linkProps, className, testId }) => {\n const { labels } = useUi();\n\n return (\n <nav\n className={className}\n aria-label={resolveLabel('Breadcrumb.label', label, labels?.breadcrumb)}\n data-testid={testId}\n >\n <ol className={cx(styles.breadcrumb)}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <li key={`${item.label}-${index}`} className={styles.breadcrumb__item}>\n {item.href && !isLast ? (\n <UiLink href={item.href} className={styles.breadcrumb__link} {...linkProps}>\n {item.label}\n </UiLink>\n ) : (\n <span className={styles.breadcrumb__current} aria-current=\"page\">\n {item.label}\n </span>\n )}\n\n {!isLast && <CaretRightFill aria-hidden className={styles.breadcrumb__separator} />}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n\nexport default /*#__PURE__*/ memo(Breadcrumb) as typeof Breadcrumb;\n"],"names":["Breadcrumb","items","label","linkProps","className","testId","labels","useUi","jsx","resolveLabel","cx","styles","item","index","isLast","jsxs","UiLink","CaretRightFill"],"mappings":"0ZA8BMA,EAAwB,CAAC,CAAE,MAAAC,EAAO,MAAAC,EAAO,UAAAC,EAAW,UAAAC,EAAW,OAAAC,KAAa,CAChF,KAAM,CAAE,OAAAC,CAAA,EAAWC,QAAA,EAEnB,OACEC,EAAAA,IAAC,MAAA,CACC,UAAAJ,EACA,aAAYK,EAAAA,aAAa,mBAAoBP,EAAOI,GAAA,YAAAA,EAAQ,UAAU,EACtE,cAAaD,EAEb,SAAAG,EAAAA,IAAC,KAAA,CAAG,UAAWE,EAAAA,GAAGC,EAAAA,QAAO,UAAU,EAChC,SAAAV,EAAM,IAAI,CAACW,EAAMC,IAAU,CAC1B,MAAMC,EAASD,IAAUZ,EAAM,OAAS,EAExC,OACEc,EAAAA,KAAC,KAAA,CAAkC,UAAWJ,EAAAA,QAAO,iBAClD,SAAA,CAAAC,EAAK,MAAQ,CAACE,EACbN,EAAAA,IAACQ,EAAAA,QAAA,CAAO,KAAMJ,EAAK,KAAM,UAAWD,EAAAA,QAAO,iBAAmB,GAAGR,EAC9D,SAAAS,EAAK,KAAA,CACR,EAEAJ,EAAAA,IAAC,OAAA,CAAK,UAAWG,EAAAA,QAAO,oBAAqB,eAAa,OACvD,SAAAC,EAAK,KAAA,CACR,EAGD,CAACE,GAAUN,EAAAA,IAACS,iBAAA,CAAe,cAAW,GAAC,UAAWN,EAAAA,QAAO,qBAAA,CAAuB,CAAA,CAAA,EAX1E,GAAGC,EAAK,KAAK,IAAIC,CAAK,EAY/B,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CAGN,EAEAA,SAAkCb,CAAU"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { UiLinkExtraProps } from '../../types/link.type';
|
|
3
|
+
export type Crumb = {
|
|
4
|
+
label: string;
|
|
5
|
+
/** Son öğede verilmez: bulunduğumuz sayfa bağlantı olmaz. */
|
|
6
|
+
href?: string;
|
|
7
|
+
};
|
|
8
|
+
type Props = {
|
|
9
|
+
items: Crumb[];
|
|
10
|
+
/** Gezinme bölgesinin erişilebilir adı. */
|
|
11
|
+
label?: string;
|
|
12
|
+
/** Yönlendiriciye geçirilecek ek props. */
|
|
13
|
+
linkProps?: UiLinkExtraProps;
|
|
14
|
+
className?: string;
|
|
15
|
+
testId?: string;
|
|
16
|
+
};
|
|
17
|
+
/** Kırıntı yolu. */
|
|
18
|
+
declare const Breadcrumb: FC<Props>;
|
|
19
|
+
declare const _default: typeof Breadcrumb;
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as e, jsxs as b } from "react/jsx-runtime";
|
|
3
|
+
import { memo as d } from "react";
|
|
4
|
+
import { CaretRightFill as u } from "react-bootstrap-icons";
|
|
5
|
+
import { cx as p } from "../../helpers/class-name.helper.js";
|
|
6
|
+
import { resolveLabel as f } from "../../helpers/label.helper.js";
|
|
7
|
+
import { useUi as h } from "../../theme/context.js";
|
|
8
|
+
import _ from "../Link/index.js";
|
|
9
|
+
const a = {"breadcrumb":"ui-breadcrumb-amB9n","breadcrumb__item":"ui-breadcrumb__item-Icv1S","breadcrumb__link":"ui-breadcrumb__link-eVkPq","breadcrumb__current":"ui-breadcrumb__current-8XjhU","breadcrumb__separator":"ui-breadcrumb__separator-vvaUi"};
|
|
10
|
+
const N = ({ items: m, label: o, linkProps: t, className: i, testId: n }) => {
|
|
11
|
+
const { labels: l } = h();
|
|
12
|
+
return /* @__PURE__ */ e(
|
|
13
|
+
"nav",
|
|
14
|
+
{
|
|
15
|
+
className: i,
|
|
16
|
+
"aria-label": f("Breadcrumb.label", o, l == null ? void 0 : l.breadcrumb),
|
|
17
|
+
"data-testid": n,
|
|
18
|
+
children: /* @__PURE__ */ e("ol", { className: p(a.breadcrumb), children: m.map((r, c) => {
|
|
19
|
+
const s = c === m.length - 1;
|
|
20
|
+
return /* @__PURE__ */ b("li", { className: a.breadcrumb__item, children: [
|
|
21
|
+
r.href && !s ? /* @__PURE__ */ e(_, { href: r.href, className: a.breadcrumb__link, ...t, children: r.label }) : /* @__PURE__ */ e("span", { className: a.breadcrumb__current, "aria-current": "page", children: r.label }),
|
|
22
|
+
!s && /* @__PURE__ */ e(u, { "aria-hidden": !0, className: a.breadcrumb__separator })
|
|
23
|
+
] }, `${r.label}-${c}`);
|
|
24
|
+
}) })
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
}, $ = /* @__PURE__ */ d(N);
|
|
28
|
+
export {
|
|
29
|
+
$ as default
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Breadcrumb/index.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, memo } from 'react';\n\nimport { CaretRightFill } from 'react-bootstrap-icons';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\nimport type { UiLinkExtraProps } from '../../types/link.type';\nimport UiLink from '../Link';\n\nimport styles from './index.module.scss';\n\nexport type Crumb = {\n label: string;\n /** Son öğede verilmez: bulunduğumuz sayfa bağlantı olmaz. */\n href?: string;\n};\n\ntype Props = {\n items: Crumb[];\n /** Gezinme bölgesinin erişilebilir adı. */\n label?: string;\n /** Yönlendiriciye geçirilecek ek props. */\n linkProps?: UiLinkExtraProps;\n className?: string;\n testId?: string;\n};\n\n/** Kırıntı yolu. */\nconst Breadcrumb: FC<Props> = ({ items, label, linkProps, className, testId }) => {\n const { labels } = useUi();\n\n return (\n <nav\n className={className}\n aria-label={resolveLabel('Breadcrumb.label', label, labels?.breadcrumb)}\n data-testid={testId}\n >\n <ol className={cx(styles.breadcrumb)}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <li key={`${item.label}-${index}`} className={styles.breadcrumb__item}>\n {item.href && !isLast ? (\n <UiLink href={item.href} className={styles.breadcrumb__link} {...linkProps}>\n {item.label}\n </UiLink>\n ) : (\n <span className={styles.breadcrumb__current} aria-current=\"page\">\n {item.label}\n </span>\n )}\n\n {!isLast && <CaretRightFill aria-hidden className={styles.breadcrumb__separator} />}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n\nexport default /*#__PURE__*/ memo(Breadcrumb) as typeof Breadcrumb;\n"],"names":["Breadcrumb","items","label","linkProps","className","testId","labels","useUi","jsx","resolveLabel","cx","styles","item","index","isLast","jsxs","UiLink","CaretRightFill"],"mappings":";;;;;;;;;AA8BA,MAAMA,IAAwB,CAAC,EAAE,OAAAC,GAAO,OAAAC,GAAO,WAAAC,GAAW,WAAAC,GAAW,QAAAC,QAAa;AAChF,QAAM,EAAE,QAAAC,EAAA,IAAWC,EAAA;AAEnB,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAAJ;AAAA,MACA,cAAYK,EAAa,oBAAoBP,GAAOI,KAAA,gBAAAA,EAAQ,UAAU;AAAA,MACtE,eAAaD;AAAA,MAEb,UAAA,gBAAAG,EAAC,MAAA,EAAG,WAAWE,EAAGC,EAAO,UAAU,GAChC,UAAAV,EAAM,IAAI,CAACW,GAAMC,MAAU;AAC1B,cAAMC,IAASD,MAAUZ,EAAM,SAAS;AAExC,eACE,gBAAAc,EAAC,MAAA,EAAkC,WAAWJ,EAAO,kBAClD,UAAA;AAAA,UAAAC,EAAK,QAAQ,CAACE,IACb,gBAAAN,EAACQ,GAAA,EAAO,MAAMJ,EAAK,MAAM,WAAWD,EAAO,kBAAmB,GAAGR,GAC9D,UAAAS,EAAK,MAAA,CACR,IAEA,gBAAAJ,EAAC,QAAA,EAAK,WAAWG,EAAO,qBAAqB,gBAAa,QACvD,UAAAC,EAAK,MAAA,CACR;AAAA,UAGD,CAACE,KAAU,gBAAAN,EAACS,GAAA,EAAe,eAAW,IAAC,WAAWN,EAAO,sBAAA,CAAuB;AAAA,QAAA,EAAA,GAX1E,GAAGC,EAAK,KAAK,IAAIC,CAAK,EAY/B;AAAA,MAEJ,CAAC,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAGN,GAEAA,sBAAkCb,CAAU;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-breadcrumb-amB9n{display:flex;align-items:center;flex-wrap:wrap;gap:var(--ui-space-1);list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-xs)}@media (max-width: 768px){.ui-breadcrumb-amB9n{display:flex;gap:var(--ui-space-1);position:relative;overflow-x:auto;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;padding-block:var(--ui-space-1) var(--ui-space-3);scrollbar-width:none;-ms-overflow-style:none}.ui-breadcrumb-amB9n::-webkit-scrollbar{display:none}.ui-breadcrumb-amB9n>*{scroll-snap-align:start;flex-shrink:0}.ui-breadcrumb-amB9n{flex-wrap:nowrap;padding-block:0}}.ui-breadcrumb__item-Icv1S{display:inline-flex;align-items:center;gap:var(--ui-space-1);white-space:nowrap}.ui-breadcrumb__link-eVkPq{color:var(--ui-text-2);text-decoration:none;transition:color var(--ui-duration-fast) var(--ui-ease-out)}.ui-breadcrumb__link-eVkPq:hover{color:var(--ui-link);text-decoration:underline}.ui-breadcrumb__link-eVkPq:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--ui-ring-color);outline-offset:var(--ui-ring-offset, 2px)}@media (prefers-reduced-motion: reduce){.ui-breadcrumb__link-eVkPq{transition:none}}.ui-breadcrumb__current-8XjhU{color:var(--ui-text-2);font-weight:500}[dir=rtl] .ui-breadcrumb__separator-vvaUi{transform:scaleX(-1)}.ui-breadcrumb__separator-vvaUi{color:var(--ui-text-3);font-size:var(--ui-icon-xs);flex-shrink:0}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),m=require("react"),h=require("../../helpers/class-name.helper.cjs"),k=require("../../helpers/component.helper.cjs"),v=require("../../enums/ui-size.enum.cjs"),C=require("../../enums/ui-variant.enum.cjs"),R=require("../Link/index.cjs"),$=require("../Spinner/index.cjs"),e={default:{"button":"ui-button-SRu4R","button__icon":"ui-button__icon-giom6","button__spinner":"ui-button__spinner-vexVG","button__label":"ui-button__label-qiMHm","button--inert":"ui-button--inert-iUGId","button--full":"ui-button--full-CwPHR","button--loading":"ui-button--loading-O-naJ","button--xsmall":"ui-button--xsmall-MmjpU","button--pill":"ui-button--pill-VFBYN","button--small":"ui-button--small-TF9Hz","button--medium":"ui-button--medium-JDjkH","button--large":"ui-button--large-btadu","button--primary":"ui-button--primary-ym7RJ","button--cart":"ui-button--cart-5DVmR","button--secondary":"ui-button--secondary-56m1d","button--outline":"ui-button--outline-ZI8sw","button--dark":"ui-button--dark-FGZgn","button--light":"ui-button--light-YzEPs","button--ghost":"ui-button--ghost-rijnZ","button--danger":"ui-button--danger-TNGd2"}},w=m.forwardRef(({variant:f=C.default.PRIMARY,size:_=v.default.MEDIUM,shape:x="rounded",isLoading:n,isFullWidth:p,startIcon:c,endIcon:d,className:j,children:q,disabled:i,href:a,isExternal:N,linkProps:B,testId:o,...u},M)=>{const l=!!i||!!n,s=h.cx(e.default.button,e.default[`button--${f.toLowerCase()}`],e.default[`button--${_.toLowerCase()}`],x==="pill"&&e.default["button--pill"],p&&e.default["button--full"],n&&e.default["button--loading"],a&&l&&e.default["button--inert"],j),r=t.jsxs(t.Fragment,{children:[n&&t.jsx($.default,{size:"sm",className:e.default.button__spinner,label:""}),!n&&c&&t.jsx("span",{className:e.default.button__icon,children:c}),t.jsx("span",{className:e.default.button__label,children:q}),d&&t.jsx("span",{className:e.default.button__icon,children:d})]}),b={"aria-busy":n,"aria-disabled":l||void 0,tabIndex:l?-1:u.tabIndex,onClick:l?void 0:u.onClick};return a&&N?t.jsx("a",{...u,...b,href:a,className:s,target:"_blank",rel:"noopener noreferrer","data-testid":o,children:r}):a?t.jsx(R.default,{...u,...b,href:a,className:s,"data-testid":o,...B,children:r}):t.jsx("button",{ref:M,className:s,disabled:i||n,"aria-busy":n,"data-testid":o,...u,children:r})}),y=m.memo(k.named(w,"Button"));exports.default=y;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Button/index.tsx"],"sourcesContent":["import {\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n forwardRef,\n memo,\n type MouseEventHandler,\n type ReactNode,\n} from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\nimport UISize from '../../enums/ui-size.enum';\nimport UIVariant from '../../enums/ui-variant.enum';\nimport type { CommonElementProps } from '../../types/common-element-props.type';\nimport type { UiLinkExtraProps } from '../../types/link.type';\nimport UiLink from '../Link';\nimport Spinner from '../Spinner';\n\nimport styles from './index.module.scss';\n\n/** Köşe biçimi. `pill` üst bant ve araç çubuğundaki hafif eylemler için; ölçü değişmez. */\nexport type ButtonShape = 'rounded' | 'pill';\n\ntype BaseProps = Partial<{\n variant: UIVariant;\n size: UISize;\n shape: ButtonShape;\n isLoading: boolean;\n isFullWidth: boolean;\n startIcon: ReactNode;\n endIcon: ReactNode;\n}> &\n CommonElementProps;\n\ntype Props = BaseProps &\n ButtonHTMLAttributes<HTMLButtonElement> & {\n /** Verilirse düğme bir bağlantı olarak çizilir. */\n href?: string;\n /** Uygulama dışına çıkan bağlantı: yeni sekmede açılır ve yönlendirici devreye girmez. */\n isExternal?: boolean;\n /** Yönlendiriciye geçirilecek ek props (`{ scroll: false }`, `{ replace: true }`). */\n linkProps?: UiLinkExtraProps;\n };\n\n/**\n * Düğme.\n * @example <Button variant={UIVariant.PRIMARY} isLoading={isSaving} onClick={save}> Kaydet…\n */\nconst Button = /*#__PURE__*/ forwardRef<HTMLButtonElement, Props>(\n (\n {\n variant = UIVariant.PRIMARY,\n size = UISize.MEDIUM,\n shape = 'rounded',\n isLoading,\n isFullWidth,\n startIcon,\n endIcon,\n className,\n children,\n disabled,\n href,\n isExternal,\n linkProps,\n testId,\n ...rest\n },\n ref,\n ) => {\n const isInert = Boolean(disabled) || Boolean(isLoading);\n\n const classNames = cx(\n styles.button,\n styles[`button--${variant.toLowerCase()}`],\n styles[`button--${size.toLowerCase()}`],\n shape === 'pill' && styles['button--pill'],\n isFullWidth && styles['button--full'],\n isLoading && styles['button--loading'],\n href && isInert && styles['button--inert'],\n className,\n );\n\n const content = (\n <>\n {isLoading && <Spinner size=\"sm\" className={styles.button__spinner} label=\"\" />}\n {!isLoading && startIcon && <span className={styles.button__icon}>{startIcon}</span>}\n <span className={styles.button__label}>{children}</span>\n {endIcon && <span className={styles.button__icon}>{endIcon}</span>}\n </>\n );\n\n /*\n * Olculen ariza: tip `ButtonHTMLAttributes` oldugu icin `onClick`, `aria-*`, `data-*`, `id`,\n * `title`, `onBlur` hepsi TIP DENETIMINDEN geciyordu ama…\n * ⚠ BAGLANTI DALLARI DA `...rest` YAYAR.\n *\n * 6.0: BAĞLANTI DALI İŞLEV PROP'U ÜRETMEZ. Bileşen `'use client'` taşımaz; sunucu bileşeninden\n * çizildiğinde `UiLink` (istemci) bir işlev alsaydı RSC serileştirmesi düşerdi (\"Functions\n * cannot be passed directly to Client Components\"). Pasif bağlantı (`disabled` / `isLoading`)\n * `aria-disabled` + `tabIndex=-1` + `pointer-events: none` (`button--inert`) ile durdurulur;\n * tüketicinin `onClick`i yalnızca etkinken ve verildiyse iletilir.\n */\n const linkGuards = {\n 'aria-busy': isLoading,\n 'aria-disabled': isInert || undefined,\n tabIndex: isInert ? -1 : rest.tabIndex,\n onClick: isInert\n ? undefined\n : (rest.onClick as unknown as MouseEventHandler<HTMLAnchorElement> | undefined),\n };\n\n if (href && isExternal)\n return (\n <a\n {...(rest as AnchorHTMLAttributes<HTMLAnchorElement>)}\n {...linkGuards}\n href={href}\n className={classNames}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-testid={testId}\n >\n {content}\n </a>\n );\n\n if (href)\n return (\n <UiLink\n {...(rest as AnchorHTMLAttributes<HTMLAnchorElement>)}\n {...linkGuards}\n href={href}\n className={classNames}\n data-testid={testId}\n {...linkProps}\n >\n {content}\n </UiLink>\n );\n\n return (\n <button\n ref={ref}\n className={classNames}\n disabled={disabled || isLoading}\n aria-busy={isLoading}\n data-testid={testId}\n {...rest}\n >\n {content}\n </button>\n );\n },\n);\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Button, 'Button')) as typeof Button;\n"],"names":["Button","forwardRef","variant","UIVariant","size","UISize","shape","isLoading","isFullWidth","startIcon","endIcon","className","children","disabled","href","isExternal","linkProps","testId","rest","ref","isInert","classNames","cx","styles","content","jsxs","Fragment","jsx","Spinner","linkGuards","UiLink","memo","named"],"mappings":"kcAgDMA,EAAuBC,EAAAA,WAC3B,CACE,CACE,QAAAC,EAAUC,EAAAA,QAAU,QACpB,KAAAC,EAAOC,EAAAA,QAAO,OACd,MAAAC,EAAQ,UACR,UAAAC,EACA,YAAAC,EACA,UAAAC,EACA,QAAAC,EACA,UAAAC,EACA,SAAAC,EACA,SAAAC,EACA,KAAAC,EACA,WAAAC,EACA,UAAAC,EACA,OAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,MAAMC,EAAU,EAAQP,GAAa,EAAQN,EAEvCc,EAAaC,EAAAA,GACjBC,EAAAA,QAAO,OACPA,EAAAA,QAAO,WAAWrB,EAAQ,YAAA,CAAa,EAAE,EACzCqB,EAAAA,QAAO,WAAWnB,EAAK,YAAA,CAAa,EAAE,EACtCE,IAAU,QAAUiB,EAAAA,QAAO,cAAc,EACzCf,GAAee,EAAAA,QAAO,cAAc,EACpChB,GAAagB,EAAAA,QAAO,iBAAiB,EACrCT,GAAQM,GAAWG,EAAAA,QAAO,eAAe,EACzCZ,CAAA,EAGIa,EACJC,EAAAA,KAAAC,EAAAA,SAAA,CACG,SAAA,CAAAnB,GAAaoB,EAAAA,IAACC,WAAQ,KAAK,KAAK,UAAWL,UAAO,gBAAiB,MAAM,EAAA,CAAG,EAC5E,CAAChB,GAAaE,GAAakB,EAAAA,IAAC,QAAK,UAAWJ,EAAAA,QAAO,aAAe,SAAAd,EAAU,EAC7EkB,EAAAA,IAAC,OAAA,CAAK,UAAWJ,EAAAA,QAAO,cAAgB,SAAAX,EAAS,EAChDF,GAAWiB,EAAAA,IAAC,OAAA,CAAK,UAAWJ,EAAAA,QAAO,aAAe,SAAAb,CAAA,CAAQ,CAAA,EAC7D,EAcImB,EAAa,CACjB,YAAatB,EACb,gBAAiBa,GAAW,OAC5B,SAAUA,EAAU,GAAKF,EAAK,SAC9B,QAASE,EACL,OACCF,EAAK,OAAA,EAGZ,OAAIJ,GAAQC,EAERY,EAAAA,IAAC,IAAA,CACE,GAAIT,EACJ,GAAGW,EACJ,KAAAf,EACA,UAAWO,EACX,OAAO,SACP,IAAI,sBACJ,cAAaJ,EAEZ,SAAAO,CAAA,CAAA,EAIHV,EAEAa,EAAAA,IAACG,EAAAA,QAAA,CACE,GAAIZ,EACJ,GAAGW,EACJ,KAAAf,EACA,UAAWO,EACX,cAAaJ,EACZ,GAAGD,EAEH,SAAAQ,CAAA,CAAA,EAKLG,EAAAA,IAAC,SAAA,CACC,IAAAR,EACA,UAAWE,EACX,SAAUR,GAAYN,EACtB,YAAWA,EACX,cAAaU,EACZ,GAAGC,EAEH,SAAAM,CAAA,CAAA,CAGP,CACF,EAEAxB,EAA6B+B,OAAmBC,EAAAA,MAAMhC,EAAQ,QAAQ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ButtonHTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
import { default as UISize } from '../../enums/ui-size.enum';
|
|
3
|
+
import { default as UIVariant } from '../../enums/ui-variant.enum';
|
|
4
|
+
import { UiLinkExtraProps } from '../../types/link.type';
|
|
5
|
+
/** Köşe biçimi. `pill` üst bant ve araç çubuğundaki hafif eylemler için; ölçü değişmez. */
|
|
6
|
+
export type ButtonShape = 'rounded' | 'pill';
|
|
7
|
+
/**
|
|
8
|
+
* Düğme.
|
|
9
|
+
* @example <Button variant={UIVariant.PRIMARY} isLoading={isSaving} onClick={save}> Kaydet…
|
|
10
|
+
*/
|
|
11
|
+
declare const Button: import('react').ForwardRefExoticComponent<Partial<{
|
|
12
|
+
variant: UIVariant;
|
|
13
|
+
size: UISize;
|
|
14
|
+
shape: ButtonShape;
|
|
15
|
+
isLoading: boolean;
|
|
16
|
+
isFullWidth: boolean;
|
|
17
|
+
startIcon: ReactNode;
|
|
18
|
+
endIcon: ReactNode;
|
|
19
|
+
}> & Partial<{
|
|
20
|
+
className: string;
|
|
21
|
+
id: string;
|
|
22
|
+
testId: string;
|
|
23
|
+
}> & ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
24
|
+
/** Verilirse düğme bir bağlantı olarak çizilir. */
|
|
25
|
+
href?: string;
|
|
26
|
+
/** Uygulama dışına çıkan bağlantı: yeni sekmede açılır ve yönlendirici devreye girmez. */
|
|
27
|
+
isExternal?: boolean;
|
|
28
|
+
/** Yönlendiriciye geçirilecek ek props (`{ scroll: false }`, `{ replace: true }`). */
|
|
29
|
+
linkProps?: UiLinkExtraProps;
|
|
30
|
+
} & import('react').RefAttributes<HTMLButtonElement>>;
|
|
31
|
+
declare const _default: typeof Button;
|
|
32
|
+
export default _default;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { jsx as n, jsxs as U, Fragment as w } from "react/jsx-runtime";
|
|
2
|
+
import { memo as y, forwardRef as I } from "react";
|
|
3
|
+
import { cx as M } from "../../helpers/class-name.helper.js";
|
|
4
|
+
import { named as R } from "../../helpers/component.helper.js";
|
|
5
|
+
import $ from "../../enums/ui-size.enum.js";
|
|
6
|
+
import h from "../../enums/ui-variant.enum.js";
|
|
7
|
+
import j from "../Link/index.js";
|
|
8
|
+
import v from "../Spinner/index.js";
|
|
9
|
+
const t = {"button":"ui-button-SRu4R","button__icon":"ui-button__icon-giom6","button__spinner":"ui-button__spinner-vexVG","button__label":"ui-button__label-qiMHm","button--inert":"ui-button--inert-iUGId","button--full":"ui-button--full-CwPHR","button--loading":"ui-button--loading-O-naJ","button--xsmall":"ui-button--xsmall-MmjpU","button--pill":"ui-button--pill-VFBYN","button--small":"ui-button--small-TF9Hz","button--medium":"ui-button--medium-JDjkH","button--large":"ui-button--large-btadu","button--primary":"ui-button--primary-ym7RJ","button--cart":"ui-button--cart-5DVmR","button--secondary":"ui-button--secondary-56m1d","button--outline":"ui-button--outline-ZI8sw","button--dark":"ui-button--dark-FGZgn","button--light":"ui-button--light-YzEPs","button--ghost":"ui-button--ghost-rijnZ","button--danger":"ui-button--danger-TNGd2"};
|
|
10
|
+
const z = /* @__PURE__ */ I(
|
|
11
|
+
({
|
|
12
|
+
variant: p = h.PRIMARY,
|
|
13
|
+
size: d = $.MEDIUM,
|
|
14
|
+
shape: f = "rounded",
|
|
15
|
+
isLoading: o,
|
|
16
|
+
isFullWidth: _,
|
|
17
|
+
startIcon: m,
|
|
18
|
+
endIcon: c,
|
|
19
|
+
className: N,
|
|
20
|
+
children: x,
|
|
21
|
+
disabled: u,
|
|
22
|
+
href: a,
|
|
23
|
+
isExternal: k,
|
|
24
|
+
linkProps: B,
|
|
25
|
+
testId: l,
|
|
26
|
+
...r
|
|
27
|
+
}, C) => {
|
|
28
|
+
const e = !!u || !!o, s = M(
|
|
29
|
+
t.button,
|
|
30
|
+
t[`button--${p.toLowerCase()}`],
|
|
31
|
+
t[`button--${d.toLowerCase()}`],
|
|
32
|
+
f === "pill" && t["button--pill"],
|
|
33
|
+
_ && t["button--full"],
|
|
34
|
+
o && t["button--loading"],
|
|
35
|
+
a && e && t["button--inert"],
|
|
36
|
+
N
|
|
37
|
+
), i = /* @__PURE__ */ U(w, { children: [
|
|
38
|
+
o && /* @__PURE__ */ n(v, { size: "sm", className: t.button__spinner, label: "" }),
|
|
39
|
+
!o && m && /* @__PURE__ */ n("span", { className: t.button__icon, children: m }),
|
|
40
|
+
/* @__PURE__ */ n("span", { className: t.button__label, children: x }),
|
|
41
|
+
c && /* @__PURE__ */ n("span", { className: t.button__icon, children: c })
|
|
42
|
+
] }), b = {
|
|
43
|
+
"aria-busy": o,
|
|
44
|
+
"aria-disabled": e || void 0,
|
|
45
|
+
tabIndex: e ? -1 : r.tabIndex,
|
|
46
|
+
onClick: e ? void 0 : r.onClick
|
|
47
|
+
};
|
|
48
|
+
return a && k ? /* @__PURE__ */ n(
|
|
49
|
+
"a",
|
|
50
|
+
{
|
|
51
|
+
...r,
|
|
52
|
+
...b,
|
|
53
|
+
href: a,
|
|
54
|
+
className: s,
|
|
55
|
+
target: "_blank",
|
|
56
|
+
rel: "noopener noreferrer",
|
|
57
|
+
"data-testid": l,
|
|
58
|
+
children: i
|
|
59
|
+
}
|
|
60
|
+
) : a ? /* @__PURE__ */ n(
|
|
61
|
+
j,
|
|
62
|
+
{
|
|
63
|
+
...r,
|
|
64
|
+
...b,
|
|
65
|
+
href: a,
|
|
66
|
+
className: s,
|
|
67
|
+
"data-testid": l,
|
|
68
|
+
...B,
|
|
69
|
+
children: i
|
|
70
|
+
}
|
|
71
|
+
) : /* @__PURE__ */ n(
|
|
72
|
+
"button",
|
|
73
|
+
{
|
|
74
|
+
ref: C,
|
|
75
|
+
className: s,
|
|
76
|
+
disabled: u || o,
|
|
77
|
+
"aria-busy": o,
|
|
78
|
+
"data-testid": l,
|
|
79
|
+
...r,
|
|
80
|
+
children: i
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
), q = /* @__PURE__ */ y(/* @__PURE__ */ R(z, "Button"));
|
|
85
|
+
export {
|
|
86
|
+
q as default
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Button/index.tsx"],"sourcesContent":["import {\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n forwardRef,\n memo,\n type MouseEventHandler,\n type ReactNode,\n} from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\nimport UISize from '../../enums/ui-size.enum';\nimport UIVariant from '../../enums/ui-variant.enum';\nimport type { CommonElementProps } from '../../types/common-element-props.type';\nimport type { UiLinkExtraProps } from '../../types/link.type';\nimport UiLink from '../Link';\nimport Spinner from '../Spinner';\n\nimport styles from './index.module.scss';\n\n/** Köşe biçimi. `pill` üst bant ve araç çubuğundaki hafif eylemler için; ölçü değişmez. */\nexport type ButtonShape = 'rounded' | 'pill';\n\ntype BaseProps = Partial<{\n variant: UIVariant;\n size: UISize;\n shape: ButtonShape;\n isLoading: boolean;\n isFullWidth: boolean;\n startIcon: ReactNode;\n endIcon: ReactNode;\n}> &\n CommonElementProps;\n\ntype Props = BaseProps &\n ButtonHTMLAttributes<HTMLButtonElement> & {\n /** Verilirse düğme bir bağlantı olarak çizilir. */\n href?: string;\n /** Uygulama dışına çıkan bağlantı: yeni sekmede açılır ve yönlendirici devreye girmez. */\n isExternal?: boolean;\n /** Yönlendiriciye geçirilecek ek props (`{ scroll: false }`, `{ replace: true }`). */\n linkProps?: UiLinkExtraProps;\n };\n\n/**\n * Düğme.\n * @example <Button variant={UIVariant.PRIMARY} isLoading={isSaving} onClick={save}> Kaydet…\n */\nconst Button = /*#__PURE__*/ forwardRef<HTMLButtonElement, Props>(\n (\n {\n variant = UIVariant.PRIMARY,\n size = UISize.MEDIUM,\n shape = 'rounded',\n isLoading,\n isFullWidth,\n startIcon,\n endIcon,\n className,\n children,\n disabled,\n href,\n isExternal,\n linkProps,\n testId,\n ...rest\n },\n ref,\n ) => {\n const isInert = Boolean(disabled) || Boolean(isLoading);\n\n const classNames = cx(\n styles.button,\n styles[`button--${variant.toLowerCase()}`],\n styles[`button--${size.toLowerCase()}`],\n shape === 'pill' && styles['button--pill'],\n isFullWidth && styles['button--full'],\n isLoading && styles['button--loading'],\n href && isInert && styles['button--inert'],\n className,\n );\n\n const content = (\n <>\n {isLoading && <Spinner size=\"sm\" className={styles.button__spinner} label=\"\" />}\n {!isLoading && startIcon && <span className={styles.button__icon}>{startIcon}</span>}\n <span className={styles.button__label}>{children}</span>\n {endIcon && <span className={styles.button__icon}>{endIcon}</span>}\n </>\n );\n\n /*\n * Olculen ariza: tip `ButtonHTMLAttributes` oldugu icin `onClick`, `aria-*`, `data-*`, `id`,\n * `title`, `onBlur` hepsi TIP DENETIMINDEN geciyordu ama…\n * ⚠ BAGLANTI DALLARI DA `...rest` YAYAR.\n *\n * 6.0: BAĞLANTI DALI İŞLEV PROP'U ÜRETMEZ. Bileşen `'use client'` taşımaz; sunucu bileşeninden\n * çizildiğinde `UiLink` (istemci) bir işlev alsaydı RSC serileştirmesi düşerdi (\"Functions\n * cannot be passed directly to Client Components\"). Pasif bağlantı (`disabled` / `isLoading`)\n * `aria-disabled` + `tabIndex=-1` + `pointer-events: none` (`button--inert`) ile durdurulur;\n * tüketicinin `onClick`i yalnızca etkinken ve verildiyse iletilir.\n */\n const linkGuards = {\n 'aria-busy': isLoading,\n 'aria-disabled': isInert || undefined,\n tabIndex: isInert ? -1 : rest.tabIndex,\n onClick: isInert\n ? undefined\n : (rest.onClick as unknown as MouseEventHandler<HTMLAnchorElement> | undefined),\n };\n\n if (href && isExternal)\n return (\n <a\n {...(rest as AnchorHTMLAttributes<HTMLAnchorElement>)}\n {...linkGuards}\n href={href}\n className={classNames}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-testid={testId}\n >\n {content}\n </a>\n );\n\n if (href)\n return (\n <UiLink\n {...(rest as AnchorHTMLAttributes<HTMLAnchorElement>)}\n {...linkGuards}\n href={href}\n className={classNames}\n data-testid={testId}\n {...linkProps}\n >\n {content}\n </UiLink>\n );\n\n return (\n <button\n ref={ref}\n className={classNames}\n disabled={disabled || isLoading}\n aria-busy={isLoading}\n data-testid={testId}\n {...rest}\n >\n {content}\n </button>\n );\n },\n);\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Button, 'Button')) as typeof Button;\n"],"names":["Button","forwardRef","variant","UIVariant","size","UISize","shape","isLoading","isFullWidth","startIcon","endIcon","className","children","disabled","href","isExternal","linkProps","testId","rest","ref","isInert","classNames","cx","styles","content","jsxs","Fragment","jsx","Spinner","linkGuards","UiLink","Button$1","memo","named"],"mappings":";;;;;;;;;AAgDA,MAAMA,IAAuB,gBAAAC;AAAA,EAC3B,CACE;AAAA,IACE,SAAAC,IAAUC,EAAU;AAAA,IACpB,MAAAC,IAAOC,EAAO;AAAA,IACd,OAAAC,IAAQ;AAAA,IACR,WAAAC;AAAA,IACA,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,SAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,MAAAC;AAAA,IACA,YAAAC;AAAA,IACA,WAAAC;AAAA,IACA,QAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAU,EAAQP,KAAa,EAAQN,GAEvCc,IAAaC;AAAA,MACjBC,EAAO;AAAA,MACPA,EAAO,WAAWrB,EAAQ,YAAA,CAAa,EAAE;AAAA,MACzCqB,EAAO,WAAWnB,EAAK,YAAA,CAAa,EAAE;AAAA,MACtCE,MAAU,UAAUiB,EAAO,cAAc;AAAA,MACzCf,KAAee,EAAO,cAAc;AAAA,MACpChB,KAAagB,EAAO,iBAAiB;AAAA,MACrCT,KAAQM,KAAWG,EAAO,eAAe;AAAA,MACzCZ;AAAA,IAAA,GAGIa,IACJ,gBAAAC,EAAAC,GAAA,EACG,UAAA;AAAA,MAAAnB,KAAa,gBAAAoB,EAACC,KAAQ,MAAK,MAAK,WAAWL,EAAO,iBAAiB,OAAM,GAAA,CAAG;AAAA,MAC5E,CAAChB,KAAaE,KAAa,gBAAAkB,EAAC,UAAK,WAAWJ,EAAO,cAAe,UAAAd,GAAU;AAAA,MAC7E,gBAAAkB,EAAC,QAAA,EAAK,WAAWJ,EAAO,eAAgB,UAAAX,GAAS;AAAA,MAChDF,KAAW,gBAAAiB,EAAC,QAAA,EAAK,WAAWJ,EAAO,cAAe,UAAAb,EAAA,CAAQ;AAAA,IAAA,GAC7D,GAcImB,IAAa;AAAA,MACjB,aAAatB;AAAA,MACb,iBAAiBa,KAAW;AAAA,MAC5B,UAAUA,IAAU,KAAKF,EAAK;AAAA,MAC9B,SAASE,IACL,SACCF,EAAK;AAAA,IAAA;AAGZ,WAAIJ,KAAQC,IAER,gBAAAY;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAIT;AAAA,QACJ,GAAGW;AAAA,QACJ,MAAAf;AAAA,QACA,WAAWO;AAAA,QACX,QAAO;AAAA,QACP,KAAI;AAAA,QACJ,eAAaJ;AAAA,QAEZ,UAAAO;AAAA,MAAA;AAAA,IAAA,IAIHV,IAEA,gBAAAa;AAAA,MAACG;AAAA,MAAA;AAAA,QACE,GAAIZ;AAAA,QACJ,GAAGW;AAAA,QACJ,MAAAf;AAAA,QACA,WAAWO;AAAA,QACX,eAAaJ;AAAA,QACZ,GAAGD;AAAA,QAEH,UAAAQ;AAAA,MAAA;AAAA,IAAA,IAKL,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAR;AAAA,QACA,WAAWE;AAAA,QACX,UAAUR,KAAYN;AAAA,QACtB,aAAWA;AAAA,QACX,eAAaU;AAAA,QACZ,GAAGC;AAAA,QAEH,UAAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF,GAEAO,IAA6B,gBAAAC,EAAmB,gBAAAC,EAAMjC,GAAQ,QAAQ,CAAC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-button-SRu4R{position:relative}.ui-button-SRu4R:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:max(100%,44px);height:max(100%,44px)}.ui-button-SRu4R{display:inline-flex;align-items:center;justify-content:center;gap:var(--ui-space-2);border:1px solid transparent;border-radius:var(--ui-button-radius, var(--ui-radius-md));font-family:var(--ui-font-body);font-weight:var(--ui-button-weight, 600);line-height:var(--ui-leading-none);letter-spacing:var(--ui-button-tracking, -.006em);white-space:var(--ui-button-wrap, nowrap);cursor:pointer;text-decoration:none;transition:background-color var(--ui-duration-fast) var(--ui-ease-out),border-color var(--ui-duration-fast) var(--ui-ease-out),color var(--ui-duration-fast) var(--ui-ease-out),box-shadow var(--ui-duration-fast) var(--ui-ease-out),transform var(--ui-duration-instant) var(--ui-ease-out)}.ui-button-SRu4R:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--ui-ring-color);outline-offset:var(--ui-ring-offset, 2px)}.ui-button-SRu4R:active:not(:disabled){transform:translateY(1px)}.ui-button-SRu4R:disabled{cursor:not-allowed;transform:none;box-shadow:none}@media (prefers-reduced-motion: reduce){.ui-button-SRu4R{transition:none}.ui-button-SRu4R:active:not(:disabled){transform:none}}.ui-button__icon-giom6{display:inline-flex;align-items:center;flex-shrink:0;font-size:var(--ui-icon-md)}.ui-button__spinner-vexVG{display:inline-flex;align-items:center;flex-shrink:0;font-size:1.05em}.ui-button__label-qiMHm{display:inline-flex;align-items:center}.ui-button--inert-iUGId{pointer-events:none}.ui-button--full-CwPHR{width:100%}.ui-button--loading-O-naJ{cursor:progress}.ui-button--xsmall-MmjpU{padding:var(--ui-space-1) var(--ui-space-3);font-size:var(--ui-font-size-xs);min-height:30px}.ui-button--xsmall-MmjpU .ui-button__icon-giom6{font-size:var(--ui-icon-xs)}.ui-button--pill-VFBYN{border-radius:var(--ui-radius-pill)}.ui-button--small-TF9Hz{padding:var(--ui-space-2) var(--ui-space-3);font-size:var(--ui-font-size-sm);min-height:36px}.ui-button--small-TF9Hz .ui-button__icon-giom6{font-size:var(--ui-icon-sm)}.ui-button--medium-JDjkH{padding:var(--ui-space-3) var(--ui-space-5);font-size:var(--ui-font-size-sm);min-height:44px}.ui-button--large-btadu{padding:var(--ui-space-4) var(--ui-space-6);font-size:var(--ui-font-size-base);min-height:52px}.ui-button--large-btadu .ui-button__icon-giom6{font-size:var(--ui-icon-lg)}.ui-button--primary-ym7RJ{background-color:var(--ui-action);border-color:var(--ui-action-line);color:var(--ui-on-action);box-shadow:var(--ui-shadow-xs)}.ui-button--primary-ym7RJ:hover:not(:disabled){background-color:var(--ui-action-hover);box-shadow:var(--ui-shadow-sm)}.ui-button--primary-ym7RJ:active:not(:disabled){background-color:var(--ui-action-active);box-shadow:var(--ui-shadow-xs)}.ui-button--primary-ym7RJ:disabled{background-color:var(--ui-action-soft);border-color:transparent;color:var(--ui-on-action-soft)}.ui-button--cart-5DVmR{background-color:var(--ui-cart);color:var(--ui-on-cart);box-shadow:var(--ui-shadow-xs)}.ui-button--cart-5DVmR:hover:not(:disabled){background-color:var(--ui-cart-hover);box-shadow:var(--ui-shadow-sm)}.ui-button--cart-5DVmR:active:not(:disabled){background-color:var(--ui-cart-active);box-shadow:var(--ui-shadow-xs)}.ui-button--cart-5DVmR:disabled{background-color:var(--ui-cart-soft);color:var(--ui-on-cart)}.ui-button--secondary-56m1d{background-color:var(--ui-surface);border-color:var(--ui-border-strong);color:var(--ui-text)}.ui-button--secondary-56m1d:hover:not(:disabled){border-color:var(--ui-text-3);background-color:var(--ui-surface-2)}.ui-button--secondary-56m1d:active:not(:disabled){background-color:var(--ui-surface-3)}.ui-button--secondary-56m1d:disabled{background-color:var(--ui-surface-2);border-color:var(--ui-border);color:var(--ui-text-3)}.ui-button--outline-ZI8sw{background-color:transparent;border-color:var(--ui-selected-line);color:var(--ui-text)}.ui-button--outline-ZI8sw:hover:not(:disabled){background-color:var(--ui-surface-2);border-color:var(--ui-selected-hover)}.ui-button--outline-ZI8sw:active:not(:disabled){background-color:var(--ui-surface-3);border-color:var(--ui-selected-active)}.ui-button--outline-ZI8sw:disabled{border-color:var(--ui-border);color:var(--ui-text-3)}.ui-button--dark-FGZgn{background-color:var(--ui-nav-bg-2);border-color:var(--ui-nav-line-strong);color:var(--ui-nav-fg)}.ui-button--dark-FGZgn:hover:not(:disabled){border-color:var(--ui-nav-fg-3);background-color:var(--ui-nav-hover)}.ui-button--dark-FGZgn:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--ui-ring-color);outline-offset:var(--ui-ring-offset, 2px)}.ui-button--dark-FGZgn:disabled{color:var(--ui-nav-fg-3)}.ui-button--light-YzEPs{background-color:var(--ui-surface-2);color:var(--ui-text)}.ui-button--light-YzEPs:hover:not(:disabled){background-color:var(--ui-surface-3)}.ui-button--light-YzEPs:disabled{color:var(--ui-text-3)}.ui-button--ghost-rijnZ{background-color:transparent;color:var(--ui-text-2)}.ui-button--ghost-rijnZ:hover:not(:disabled){background-color:var(--ui-surface-2);color:var(--ui-text)}.ui-button--ghost-rijnZ:active:not(:disabled){background-color:var(--ui-surface-3)}.ui-button--ghost-rijnZ:disabled{color:var(--ui-text-3)}.ui-button--danger-TNGd2{background-color:var(--ui-danger-solid);color:var(--ui-on-danger)}.ui-button--danger-TNGd2:hover:not(:disabled){background-color:var(--ui-danger-solid-hover)}.ui-button--danger-TNGd2:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--ui-danger-solid);outline-offset:var(--ui-ring-offset, 2px)}.ui-button--danger-TNGd2:disabled{background-color:var(--ui-off-bg);color:var(--ui-text-3)}.ui-button__spinner-vexVG{border-color:color-mix(in srgb,currentColor 28%,transparent);border-top-color:currentColor;width:1.15em;height:1.15em;border-width:2px}@media (prefers-reduced-motion: reduce){.ui-button__spinner-vexVG{border-top-color:currentColor}}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),o=require("react"),s=require("../../helpers/class-name.helper.cjs"),c=require("../../helpers/component.helper.cjs"),x=require("../Link/index.cjs"),d={default:{"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"}},f=({children:e,isInteractive:a,as:r="div",className:l,testId:n})=>t.jsx(r,{className:s.cx(d.default.card,a&&d.default["card--interactive"],l),"data-testid":n,children:e}),v=(e,a)=>e??(a===!1?"cover":"contain"),C=c.named(o.memo(({children:e,ratio:a=1,href:r,linkProps:l,fit:n,isContained:m,className:u})=>{const i=t.jsx("span",{className:s.cx(d.default.media__frame,d.default[`media__frame--${v(n,m)}`]),style:{aspectRatio:a},children:e});return t.jsx("div",{className:s.cx(d.default.media,u),children:r?t.jsx(x.default,{href:r,className:d.default.media__link,tabIndex:-1,"aria-hidden":!0,...l,children:i}):i})}),"CardMedia"),y=c.named(o.memo(({children:e,position:a="top-left",className:r})=>t.jsx("div",{className:s.cx(d.default.overlay,d.default[`overlay--${a}`],r),children:e})),"CardOverlay"),_=c.named(o.memo(({children:e,className:a})=>t.jsx("div",{className:s.cx(d.default.body,a),children:e})),"CardBody"),j=c.named(o.memo(({children:e,className:a})=>t.jsx("div",{className:s.cx(d.default.footer,a),children:e})),"CardFooter"),N=o.memo(f);exports.CardBody=_;exports.CardFooter=j;exports.CardMedia=C;exports.CardOverlay=y;exports.default=N;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","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":"yUAuBMA,EAAsB,CAAC,CAAE,SAAAC,EAAU,cAAAC,EAAe,GAAIC,EAAM,MAAO,UAAAC,EAAW,OAAAC,CAAA,IAClFC,EAAAA,IAACH,EAAA,CACC,UAAWI,EAAAA,GAAGC,EAAAA,QAAO,KAAMN,GAAiBM,UAAO,mBAAmB,EAAGJ,CAAS,EAClF,cAAaC,EAEZ,SAAAJ,CAAA,CACH,EAsBIQ,EAAa,CACjBC,EACAC,IACiBD,IAAQC,IAAgB,GAAQ,QAAU,WAGhDC,EAA8CC,EAAAA,MAC3CC,EAAAA,KAAK,CAAC,CAAE,SAAAb,EAAU,MAAAc,EAAQ,EAAG,KAAAC,EAAM,UAAAC,EAAW,IAAAP,EAAK,YAAAC,EAAa,UAAAP,KAAgB,CAC5F,MAAMc,EACJZ,EAAAA,IAAC,OAAA,CACC,UAAWC,EAAAA,GAAGC,UAAO,aAAcA,EAAAA,QAAO,iBAAiBC,EAAWC,EAAKC,CAAW,CAAC,EAAE,CAAC,EAC1F,MAAO,CAAE,YAAaI,CAAA,EAErB,SAAAd,CAAA,CAAA,EAIL,aACG,MAAA,CAAI,UAAWM,EAAAA,GAAGC,EAAAA,QAAO,MAAOJ,CAAS,EACvC,SAAAY,EAGCV,EAAAA,IAACa,EAAAA,QAAA,CACC,KAAAH,EACA,UAAWR,EAAAA,QAAO,YAClB,SAAU,GACV,cAAW,GACV,GAAGS,EAEH,SAAAC,CAAA,CAAA,EAGHA,EAEJ,CAEJ,CAAC,EACD,WACF,EASaE,EAAkDP,EAAAA,MAC/CC,OAAK,CAAC,CAAE,SAAAb,EAAU,SAAAoB,EAAW,WAAY,UAAAjB,CAAA,IACrDE,EAAAA,IAAC,MAAA,CAAI,UAAWC,EAAAA,GAAGC,EAAAA,QAAO,QAASA,UAAO,YAAYa,CAAQ,EAAE,EAAGjB,CAAS,EAAI,SAAAH,CAAA,CAAS,CAC1F,EACD,aACF,EAQaqB,EAA+CT,EAAAA,MAC5CC,EAAAA,KAAK,CAAC,CAAE,SAAAb,EAAU,UAAAG,KAC9BE,EAAAA,IAAC,MAAA,CAAI,UAAWC,EAAAA,GAAGC,EAAAA,QAAO,KAAMJ,CAAS,EAAI,SAAAH,EAAS,CACvD,EACD,UACF,EAGasB,EAAiDV,EAAAA,MAC9CC,EAAAA,KAAK,CAAC,CAAE,SAAAb,EAAU,UAAAG,KAC9BE,EAAAA,IAAC,MAAA,CAAI,UAAWC,EAAAA,GAAGC,EAAAA,QAAO,OAAQJ,CAAS,EAAI,SAAAH,EAAS,CACzD,EACD,YACF,EAEAuB,SAAkCxB,CAAI"}
|