@handijit/ui 0.0.0-stage → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +786 -2
- package/build/base.css +1 -0
- package/build/charts.cjs +2 -0
- package/build/charts.cjs.map +1 -0
- package/build/charts.css +1 -0
- package/build/charts.js +1866 -0
- package/build/charts.js.map +1 -0
- package/build/chat.cjs +4 -0
- package/build/chat.cjs.map +1 -0
- package/build/chat.css +1 -0
- package/build/chat.js +1121 -0
- package/build/chat.js.map +1 -0
- package/build/components/Accordion/index.cjs +2 -0
- package/build/components/Accordion/index.cjs.map +1 -0
- package/build/components/Accordion/index.d.ts +29 -0
- package/build/components/Accordion/index.js +42 -0
- package/build/components/Accordion/index.js.map +1 -0
- package/build/components/Accordion/style.css +1 -0
- package/build/components/Alert/index.cjs +2 -0
- package/build/components/Alert/index.cjs.map +1 -0
- package/build/components/Alert/index.d.ts +15 -0
- package/build/components/Alert/index.js +30 -0
- package/build/components/Alert/index.js.map +1 -0
- package/build/components/Alert/style.css +1 -0
- package/build/components/Avatar/index.cjs +2 -0
- package/build/components/Avatar/index.cjs.map +1 -0
- package/build/components/Avatar/index.d.ts +26 -0
- package/build/components/Avatar/index.js +57 -0
- package/build/components/Avatar/index.js.map +1 -0
- package/build/components/Avatar/style.css +1 -0
- package/build/components/Badge/index.cjs +2 -0
- package/build/components/Badge/index.cjs.map +1 -0
- package/build/components/Badge/index.d.ts +21 -0
- package/build/components/Badge/index.js +26 -0
- package/build/components/Badge/index.js.map +1 -0
- package/build/components/Badge/style.css +1 -0
- package/build/components/BottomSheet/index.cjs +2 -0
- package/build/components/BottomSheet/index.cjs.map +1 -0
- package/build/components/BottomSheet/index.d.ts +21 -0
- package/build/components/BottomSheet/index.js +85 -0
- package/build/components/BottomSheet/index.js.map +1 -0
- package/build/components/BottomSheet/style.css +1 -0
- package/build/components/Breadcrumb/index.cjs +2 -0
- package/build/components/Breadcrumb/index.cjs.map +1 -0
- package/build/components/Breadcrumb/index.d.ts +20 -0
- package/build/components/Breadcrumb/index.js +31 -0
- package/build/components/Breadcrumb/index.js.map +1 -0
- package/build/components/Breadcrumb/style.css +1 -0
- package/build/components/Button/index.cjs +2 -0
- package/build/components/Button/index.cjs.map +1 -0
- package/build/components/Button/index.d.ts +32 -0
- package/build/components/Button/index.js +88 -0
- package/build/components/Button/index.js.map +1 -0
- package/build/components/Button/style.css +1 -0
- package/build/components/Card/index.cjs +2 -0
- package/build/components/Card/index.cjs.map +1 -0
- package/build/components/Card/index.d.ts +51 -0
- package/build/components/Card/index.js +58 -0
- package/build/components/Card/index.js.map +1 -0
- package/build/components/Card/style.css +1 -0
- package/build/components/Carousel/index.cjs +2 -0
- package/build/components/Carousel/index.cjs.map +1 -0
- package/build/components/Carousel/index.d.ts +24 -0
- package/build/components/Carousel/index.js +111 -0
- package/build/components/Carousel/index.js.map +1 -0
- package/build/components/Carousel/style.css +1 -0
- package/build/components/Checkbox/index.cjs +2 -0
- package/build/components/Checkbox/index.cjs.map +1 -0
- package/build/components/Checkbox/index.d.ts +10 -0
- package/build/components/Checkbox/index.js +33 -0
- package/build/components/Checkbox/index.js.map +1 -0
- package/build/components/Checkbox/style.css +1 -0
- package/build/components/Chip/index.cjs +2 -0
- package/build/components/Chip/index.cjs.map +1 -0
- package/build/components/Chip/index.d.ts +27 -0
- package/build/components/Chip/index.js +67 -0
- package/build/components/Chip/index.js.map +1 -0
- package/build/components/Chip/style.css +1 -0
- package/build/components/ChipGroup/index.cjs +2 -0
- package/build/components/ChipGroup/index.cjs.map +1 -0
- package/build/components/ChipGroup/index.d.ts +34 -0
- package/build/components/ChipGroup/index.js +64 -0
- package/build/components/ChipGroup/index.js.map +1 -0
- package/build/components/ChipGroup/style.css +1 -0
- package/build/components/CodeBadge/index.cjs +2 -0
- package/build/components/CodeBadge/index.cjs.map +1 -0
- package/build/components/CodeBadge/index.d.ts +36 -0
- package/build/components/CodeBadge/index.js +62 -0
- package/build/components/CodeBadge/index.js.map +1 -0
- package/build/components/CodeBadge/style.css +1 -0
- package/build/components/Combobox/index.cjs +2 -0
- package/build/components/Combobox/index.cjs.map +1 -0
- package/build/components/Combobox/index.d.ts +6 -0
- package/build/components/Combobox/index.js +302 -0
- package/build/components/Combobox/index.js.map +1 -0
- package/build/components/Combobox/style.css +1 -0
- package/build/components/CommandPalette/index.cjs +2 -0
- package/build/components/CommandPalette/index.cjs.map +1 -0
- package/build/components/CommandPalette/index.d.ts +37 -0
- package/build/components/CommandPalette/index.js +181 -0
- package/build/components/CommandPalette/index.js.map +1 -0
- package/build/components/CommandPalette/style.css +1 -0
- package/build/components/ConfirmDialog/index.cjs +2 -0
- package/build/components/ConfirmDialog/index.cjs.map +1 -0
- package/build/components/ConfirmDialog/index.d.ts +34 -0
- package/build/components/ConfirmDialog/index.js +85 -0
- package/build/components/ConfirmDialog/index.js.map +1 -0
- package/build/components/CopyField/index.cjs +2 -0
- package/build/components/CopyField/index.cjs.map +1 -0
- package/build/components/CopyField/index.d.ts +20 -0
- package/build/components/CopyField/index.js +44 -0
- package/build/components/CopyField/index.js.map +1 -0
- package/build/components/CopyField/style.css +1 -0
- package/build/components/DataTable/index.cjs +2 -0
- package/build/components/DataTable/index.cjs.map +1 -0
- package/build/components/DataTable/index.d.ts +60 -0
- package/build/components/DataTable/index.js +109 -0
- package/build/components/DataTable/index.js.map +1 -0
- package/build/components/DataTable/style.css +1 -0
- package/build/components/DateField/index.cjs +2 -0
- package/build/components/DateField/index.cjs.map +1 -0
- package/build/components/DateField/index.d.ts +44 -0
- package/build/components/DateField/index.js +79 -0
- package/build/components/DateField/index.js.map +1 -0
- package/build/components/DateField/style.css +1 -0
- package/build/components/Directory/index.cjs +2 -0
- package/build/components/Directory/index.cjs.map +1 -0
- package/build/components/Directory/index.d.ts +51 -0
- package/build/components/Directory/index.js +46 -0
- package/build/components/Directory/index.js.map +1 -0
- package/build/components/Directory/style.css +1 -0
- package/build/components/Disclosure/index.cjs +2 -0
- package/build/components/Disclosure/index.cjs.map +1 -0
- package/build/components/Disclosure/index.d.ts +34 -0
- package/build/components/Disclosure/index.js +64 -0
- package/build/components/Disclosure/index.js.map +1 -0
- package/build/components/Disclosure/style.css +1 -0
- package/build/components/Divider/index.cjs +2 -0
- package/build/components/Divider/index.cjs.map +1 -0
- package/build/components/Divider/index.d.ts +10 -0
- package/build/components/Divider/index.js +24 -0
- package/build/components/Divider/index.js.map +1 -0
- package/build/components/Divider/style.css +1 -0
- package/build/components/Drawer/index.cjs +2 -0
- package/build/components/Drawer/index.cjs.map +1 -0
- package/build/components/Drawer/index.d.ts +22 -0
- package/build/components/Drawer/index.js +88 -0
- package/build/components/Drawer/index.js.map +1 -0
- package/build/components/Drawer/style.css +1 -0
- package/build/components/EmptyState/index.cjs +2 -0
- package/build/components/EmptyState/index.cjs.map +1 -0
- package/build/components/EmptyState/index.d.ts +19 -0
- package/build/components/EmptyState/index.js +35 -0
- package/build/components/EmptyState/index.js.map +1 -0
- package/build/components/EmptyState/style.css +1 -0
- package/build/components/Field/index.cjs +2 -0
- package/build/components/Field/index.cjs.map +1 -0
- package/build/components/Field/index.d.ts +31 -0
- package/build/components/Field/index.js +52 -0
- package/build/components/Field/index.js.map +1 -0
- package/build/components/Field/style.css +1 -0
- package/build/components/FileUpload/index.cjs +2 -0
- package/build/components/FileUpload/index.cjs.map +1 -0
- package/build/components/FileUpload/index.d.ts +42 -0
- package/build/components/FileUpload/index.js +145 -0
- package/build/components/FileUpload/index.js.map +1 -0
- package/build/components/FileUpload/style.css +1 -0
- package/build/components/FilterBar/index.cjs +2 -0
- package/build/components/FilterBar/index.cjs.map +1 -0
- package/build/components/FilterBar/index.d.ts +28 -0
- package/build/components/FilterBar/index.js +35 -0
- package/build/components/FilterBar/index.js.map +1 -0
- package/build/components/FilterBar/style.css +1 -0
- package/build/components/IconButton/index.cjs +2 -0
- package/build/components/IconButton/index.cjs.map +1 -0
- package/build/components/IconButton/index.d.ts +22 -0
- package/build/components/IconButton/index.js +61 -0
- package/build/components/IconButton/index.js.map +1 -0
- package/build/components/IconButton/style.css +1 -0
- package/build/components/Input/index.cjs +2 -0
- package/build/components/Input/index.cjs.map +1 -0
- package/build/components/Input/index.d.ts +15 -0
- package/build/components/Input/index.js +52 -0
- package/build/components/Input/index.js.map +1 -0
- package/build/components/Input/style.css +1 -0
- package/build/components/Kbd/index.cjs +2 -0
- package/build/components/Kbd/index.cjs.map +1 -0
- package/build/components/Kbd/index.d.ts +12 -0
- package/build/components/Kbd/index.js +13 -0
- package/build/components/Kbd/index.js.map +1 -0
- package/build/components/Kbd/style.css +1 -0
- package/build/components/Link/index.cjs +2 -0
- package/build/components/Link/index.cjs.map +1 -0
- package/build/components/Link/index.d.ts +5 -0
- package/build/components/Link/index.js +11 -0
- package/build/components/Link/index.js.map +1 -0
- package/build/components/Menu/index.cjs +2 -0
- package/build/components/Menu/index.cjs.map +1 -0
- package/build/components/Menu/index.d.ts +46 -0
- package/build/components/Menu/index.js +241 -0
- package/build/components/Menu/index.js.map +1 -0
- package/build/components/Menu/style.css +1 -0
- package/build/components/Modal/index.cjs +2 -0
- package/build/components/Modal/index.cjs.map +1 -0
- package/build/components/Modal/index.d.ts +28 -0
- package/build/components/Modal/index.js +92 -0
- package/build/components/Modal/index.js.map +1 -0
- package/build/components/Modal/style.css +1 -0
- package/build/components/PageHeader/index.cjs +2 -0
- package/build/components/PageHeader/index.cjs.map +1 -0
- package/build/components/PageHeader/index.d.ts +24 -0
- package/build/components/PageHeader/index.js +34 -0
- package/build/components/PageHeader/index.js.map +1 -0
- package/build/components/PageHeader/style.css +1 -0
- package/build/components/Pagination/index.cjs +2 -0
- package/build/components/Pagination/index.cjs.map +1 -0
- package/build/components/Pagination/index.d.ts +39 -0
- package/build/components/Pagination/index.js +128 -0
- package/build/components/Pagination/index.js.map +1 -0
- package/build/components/Pagination/style.css +1 -0
- package/build/components/Panel/index.cjs +2 -0
- package/build/components/Panel/index.cjs.map +1 -0
- package/build/components/Panel/index.d.ts +43 -0
- package/build/components/Panel/index.js +55 -0
- package/build/components/Panel/index.js.map +1 -0
- package/build/components/Panel/style.css +1 -0
- package/build/components/PasswordInput/index.cjs +2 -0
- package/build/components/PasswordInput/index.cjs.map +1 -0
- package/build/components/PasswordInput/index.d.ts +14 -0
- package/build/components/PasswordInput/index.js +40 -0
- package/build/components/PasswordInput/index.js.map +1 -0
- package/build/components/PasswordInput/style.css +1 -0
- package/build/components/Popover/index.cjs +2 -0
- package/build/components/Popover/index.cjs.map +1 -0
- package/build/components/Popover/index.d.ts +20 -0
- package/build/components/Popover/index.js +91 -0
- package/build/components/Popover/index.js.map +1 -0
- package/build/components/Popover/style.css +1 -0
- package/build/components/Price/index.cjs +2 -0
- package/build/components/Price/index.cjs.map +1 -0
- package/build/components/Price/index.d.ts +22 -0
- package/build/components/Price/index.js +46 -0
- package/build/components/Price/index.js.map +1 -0
- package/build/components/Price/style.css +1 -0
- package/build/components/Progress/index.cjs +2 -0
- package/build/components/Progress/index.cjs.map +1 -0
- package/build/components/Progress/index.d.ts +49 -0
- package/build/components/Progress/index.js +120 -0
- package/build/components/Progress/index.js.map +1 -0
- package/build/components/Progress/style.css +1 -0
- package/build/components/PromptDialog/index.cjs +2 -0
- package/build/components/PromptDialog/index.cjs.map +1 -0
- package/build/components/PromptDialog/index.d.ts +36 -0
- package/build/components/PromptDialog/index.js +119 -0
- package/build/components/PromptDialog/index.js.map +1 -0
- package/build/components/PromptDialog/style.css +1 -0
- package/build/components/QuantityStepper/index.cjs +2 -0
- package/build/components/QuantityStepper/index.cjs.map +1 -0
- package/build/components/QuantityStepper/index.d.ts +21 -0
- package/build/components/QuantityStepper/index.js +106 -0
- package/build/components/QuantityStepper/index.js.map +1 -0
- package/build/components/QuantityStepper/style.css +1 -0
- package/build/components/Radio/index.cjs +2 -0
- package/build/components/Radio/index.cjs.map +1 -0
- package/build/components/Radio/index.d.ts +12 -0
- package/build/components/Radio/index.js +35 -0
- package/build/components/Radio/index.js.map +1 -0
- package/build/components/Radio/style.css +1 -0
- package/build/components/RadioCard/index.cjs +2 -0
- package/build/components/RadioCard/index.cjs.map +1 -0
- package/build/components/RadioCard/index.d.ts +16 -0
- package/build/components/RadioCard/index.js +48 -0
- package/build/components/RadioCard/index.js.map +1 -0
- package/build/components/RadioCard/style.css +1 -0
- package/build/components/RangeSlider/index.cjs +2 -0
- package/build/components/RangeSlider/index.cjs.map +1 -0
- package/build/components/RangeSlider/index.d.ts +26 -0
- package/build/components/RangeSlider/index.js +102 -0
- package/build/components/RangeSlider/index.js.map +1 -0
- package/build/components/RangeSlider/style.css +1 -0
- package/build/components/Rating/index.cjs +2 -0
- package/build/components/Rating/index.cjs.map +1 -0
- package/build/components/Rating/index.d.ts +16 -0
- package/build/components/Rating/index.js +29 -0
- package/build/components/Rating/index.js.map +1 -0
- package/build/components/Rating/style.css +1 -0
- package/build/components/RatingInput/index.cjs +2 -0
- package/build/components/RatingInput/index.cjs.map +1 -0
- package/build/components/RatingInput/index.d.ts +21 -0
- package/build/components/RatingInput/index.js +75 -0
- package/build/components/RatingInput/index.js.map +1 -0
- package/build/components/RatingInput/style.css +1 -0
- package/build/components/ScrollArea/index.cjs +2 -0
- package/build/components/ScrollArea/index.cjs.map +1 -0
- package/build/components/ScrollArea/index.d.ts +23 -0
- package/build/components/ScrollArea/index.js +65 -0
- package/build/components/ScrollArea/index.js.map +1 -0
- package/build/components/ScrollArea/style.css +1 -0
- package/build/components/SectionHeader/index.cjs +2 -0
- package/build/components/SectionHeader/index.cjs.map +1 -0
- package/build/components/SectionHeader/index.d.ts +17 -0
- package/build/components/SectionHeader/index.js +25 -0
- package/build/components/SectionHeader/index.js.map +1 -0
- package/build/components/SectionHeader/style.css +1 -0
- package/build/components/SegmentedControl/index.cjs +2 -0
- package/build/components/SegmentedControl/index.cjs.map +1 -0
- package/build/components/SegmentedControl/index.d.ts +24 -0
- package/build/components/SegmentedControl/index.js +69 -0
- package/build/components/SegmentedControl/index.js.map +1 -0
- package/build/components/SegmentedControl/style.css +1 -0
- package/build/components/Select/index.cjs +2 -0
- package/build/components/Select/index.cjs.map +1 -0
- package/build/components/Select/index.d.ts +39 -0
- package/build/components/Select/index.js +179 -0
- package/build/components/Select/index.js.map +1 -0
- package/build/components/Select/style.css +1 -0
- package/build/components/Skeleton/index.cjs +2 -0
- package/build/components/Skeleton/index.cjs.map +1 -0
- package/build/components/Skeleton/index.d.ts +25 -0
- package/build/components/Skeleton/index.js +50 -0
- package/build/components/Skeleton/index.js.map +1 -0
- package/build/components/Skeleton/style.css +1 -0
- package/build/components/Spinner/index.cjs +2 -0
- package/build/components/Spinner/index.cjs.map +1 -0
- package/build/components/Spinner/index.d.ts +11 -0
- package/build/components/Spinner/index.js +15 -0
- package/build/components/Spinner/index.js.map +1 -0
- package/build/components/Spinner/style.css +1 -0
- package/build/components/Stat/index.cjs +2 -0
- package/build/components/Stat/index.cjs.map +1 -0
- package/build/components/Stat/index.d.ts +34 -0
- package/build/components/Stat/index.js +72 -0
- package/build/components/Stat/index.js.map +1 -0
- package/build/components/Stat/style.css +1 -0
- package/build/components/StatusDot/index.cjs +2 -0
- package/build/components/StatusDot/index.cjs.map +1 -0
- package/build/components/StatusDot/index.d.ts +23 -0
- package/build/components/StatusDot/index.js +23 -0
- package/build/components/StatusDot/index.js.map +1 -0
- package/build/components/StatusDot/style.css +1 -0
- package/build/components/Steps/index.cjs +2 -0
- package/build/components/Steps/index.cjs.map +1 -0
- package/build/components/Steps/index.d.ts +23 -0
- package/build/components/Steps/index.js +69 -0
- package/build/components/Steps/index.js.map +1 -0
- package/build/components/Steps/style.css +1 -0
- package/build/components/SummaryCard/index.cjs +2 -0
- package/build/components/SummaryCard/index.cjs.map +1 -0
- package/build/components/SummaryCard/index.d.ts +24 -0
- package/build/components/SummaryCard/index.js +33 -0
- package/build/components/SummaryCard/index.js.map +1 -0
- package/build/components/SummaryCard/style.css +1 -0
- package/build/components/Switch/index.cjs +2 -0
- package/build/components/Switch/index.cjs.map +1 -0
- package/build/components/Switch/index.d.ts +16 -0
- package/build/components/Switch/index.js +42 -0
- package/build/components/Switch/index.js.map +1 -0
- package/build/components/Switch/style.css +1 -0
- package/build/components/Table/index.cjs +2 -0
- package/build/components/Table/index.cjs.map +1 -0
- package/build/components/Table/index.d.ts +28 -0
- package/build/components/Table/index.js +58 -0
- package/build/components/Table/index.js.map +1 -0
- package/build/components/Table/style.css +1 -0
- package/build/components/TableCheckbox/index.cjs +2 -0
- package/build/components/TableCheckbox/index.cjs.map +1 -0
- package/build/components/TableCheckbox/index.d.ts +15 -0
- package/build/components/TableCheckbox/index.js +31 -0
- package/build/components/TableCheckbox/index.js.map +1 -0
- package/build/components/TableCheckbox/style.css +1 -0
- package/build/components/Tabs/index.cjs +2 -0
- package/build/components/Tabs/index.cjs.map +1 -0
- package/build/components/Tabs/index.d.ts +27 -0
- package/build/components/Tabs/index.js +102 -0
- package/build/components/Tabs/index.js.map +1 -0
- package/build/components/Tabs/style.css +1 -0
- package/build/components/TagInput/index.cjs +2 -0
- package/build/components/TagInput/index.cjs.map +1 -0
- package/build/components/TagInput/index.d.ts +25 -0
- package/build/components/TagInput/index.js +124 -0
- package/build/components/TagInput/index.js.map +1 -0
- package/build/components/TagInput/style.css +1 -0
- package/build/components/TextLink/index.cjs +2 -0
- package/build/components/TextLink/index.cjs.map +1 -0
- package/build/components/TextLink/index.d.ts +16 -0
- package/build/components/TextLink/index.js +32 -0
- package/build/components/TextLink/index.js.map +1 -0
- package/build/components/TextLink/style.css +1 -0
- package/build/components/Textarea/index.cjs +2 -0
- package/build/components/Textarea/index.cjs.map +1 -0
- package/build/components/Textarea/index.d.ts +20 -0
- package/build/components/Textarea/index.js +68 -0
- package/build/components/Textarea/index.js.map +1 -0
- package/build/components/Textarea/style.css +1 -0
- package/build/components/Tile/index.cjs +2 -0
- package/build/components/Tile/index.cjs.map +1 -0
- package/build/components/Tile/index.d.ts +19 -0
- package/build/components/Tile/index.js +24 -0
- package/build/components/Tile/index.js.map +1 -0
- package/build/components/Tile/style.css +1 -0
- package/build/components/Timeline/index.cjs +2 -0
- package/build/components/Timeline/index.cjs.map +1 -0
- package/build/components/Timeline/index.d.ts +24 -0
- package/build/components/Timeline/index.js +56 -0
- package/build/components/Timeline/index.js.map +1 -0
- package/build/components/Timeline/style.css +1 -0
- package/build/components/Toast/index.cjs +2 -0
- package/build/components/Toast/index.cjs.map +1 -0
- package/build/components/Toast/index.d.ts +43 -0
- package/build/components/Toast/index.js +136 -0
- package/build/components/Toast/index.js.map +1 -0
- package/build/components/Toast/style.css +1 -0
- package/build/components/ToastPortal/index.cjs +2 -0
- package/build/components/ToastPortal/index.cjs.map +1 -0
- package/build/components/ToastPortal/index.d.ts +8 -0
- package/build/components/ToastPortal/index.js +15 -0
- package/build/components/ToastPortal/index.js.map +1 -0
- package/build/components/Tooltip/index.cjs +2 -0
- package/build/components/Tooltip/index.cjs.map +1 -0
- package/build/components/Tooltip/index.d.ts +23 -0
- package/build/components/Tooltip/index.js +116 -0
- package/build/components/Tooltip/index.js.map +1 -0
- package/build/components/Tooltip/style.css +1 -0
- package/build/constants/breakpoint.constants.cjs +2 -0
- package/build/constants/breakpoint.constants.cjs.map +1 -0
- package/build/constants/breakpoint.constants.d.ts +13 -0
- package/build/constants/breakpoint.constants.js +11 -0
- package/build/constants/breakpoint.constants.js.map +1 -0
- package/build/constants/combobox.constants.cjs +2 -0
- package/build/constants/combobox.constants.cjs.map +1 -0
- package/build/constants/combobox.constants.d.ts +11 -0
- package/build/constants/combobox.constants.js +7 -0
- package/build/constants/combobox.constants.js.map +1 -0
- package/build/constants/scroll.constants.cjs +2 -0
- package/build/constants/scroll.constants.cjs.map +1 -0
- package/build/constants/scroll.constants.d.ts +7 -0
- package/build/constants/scroll.constants.js +5 -0
- package/build/constants/scroll.constants.js.map +1 -0
- package/build/enums/ui-size.enum.cjs +2 -0
- package/build/enums/ui-size.enum.cjs.map +1 -0
- package/build/enums/ui-size.enum.d.ts +12 -0
- package/build/enums/ui-size.enum.js +5 -0
- package/build/enums/ui-size.enum.js.map +1 -0
- package/build/enums/ui-variant.enum.cjs +2 -0
- package/build/enums/ui-variant.enum.cjs.map +1 -0
- package/build/enums/ui-variant.enum.d.ts +20 -0
- package/build/enums/ui-variant.enum.js +5 -0
- package/build/enums/ui-variant.enum.js.map +1 -0
- package/build/helpers/class-name.helper.cjs +2 -0
- package/build/helpers/class-name.helper.cjs.map +1 -0
- package/build/helpers/class-name.helper.d.ts +3 -0
- package/build/helpers/class-name.helper.js +10 -0
- package/build/helpers/class-name.helper.js.map +1 -0
- package/build/helpers/component.helper.cjs +2 -0
- package/build/helpers/component.helper.cjs.map +1 -0
- package/build/helpers/component.helper.d.ts +13 -0
- package/build/helpers/component.helper.js +5 -0
- package/build/helpers/component.helper.js.map +1 -0
- package/build/helpers/focus.helper.cjs +2 -0
- package/build/helpers/focus.helper.cjs.map +1 -0
- package/build/helpers/focus.helper.d.ts +42 -0
- package/build/helpers/focus.helper.js +65 -0
- package/build/helpers/focus.helper.js.map +1 -0
- package/build/helpers/label.helper.cjs +2 -0
- package/build/helpers/label.helper.cjs.map +1 -0
- package/build/helpers/label.helper.d.ts +11 -0
- package/build/helpers/label.helper.js +11 -0
- package/build/helpers/label.helper.js.map +1 -0
- package/build/helpers/portal.helper.cjs +2 -0
- package/build/helpers/portal.helper.cjs.map +1 -0
- package/build/helpers/portal.helper.d.ts +28 -0
- package/build/helpers/portal.helper.js +36 -0
- package/build/helpers/portal.helper.js.map +1 -0
- package/build/helpers/scroll.helper.cjs +2 -0
- package/build/helpers/scroll.helper.cjs.map +1 -0
- package/build/helpers/scroll.helper.d.ts +8 -0
- package/build/helpers/scroll.helper.js +11 -0
- package/build/helpers/scroll.helper.js.map +1 -0
- package/build/helpers/text.helper.cjs +2 -0
- package/build/helpers/text.helper.cjs.map +1 -0
- package/build/helpers/text.helper.d.ts +5 -0
- package/build/helpers/text.helper.js +6 -0
- package/build/helpers/text.helper.js.map +1 -0
- package/build/helpers/theme.helper.cjs +2 -0
- package/build/helpers/theme.helper.cjs.map +1 -0
- package/build/helpers/theme.helper.d.ts +18 -0
- package/build/helpers/theme.helper.js +37 -0
- package/build/helpers/theme.helper.js.map +1 -0
- package/build/hooks/useAnnounce.cjs +2 -0
- package/build/hooks/useAnnounce.cjs.map +1 -0
- package/build/hooks/useAnnounce.d.ts +4 -0
- package/build/hooks/useAnnounce.js +23 -0
- package/build/hooks/useAnnounce.js.map +1 -0
- package/build/hooks/useAsyncSearch.cjs +2 -0
- package/build/hooks/useAsyncSearch.cjs.map +1 -0
- package/build/hooks/useAsyncSearch.d.ts +11 -0
- package/build/hooks/useAsyncSearch.js +17 -0
- package/build/hooks/useAsyncSearch.js.map +1 -0
- package/build/hooks/useCopyFeedback.cjs +2 -0
- package/build/hooks/useCopyFeedback.cjs.map +1 -0
- package/build/hooks/useCopyFeedback.d.ts +10 -0
- package/build/hooks/useCopyFeedback.js +25 -0
- package/build/hooks/useCopyFeedback.js.map +1 -0
- package/build/hooks/useDismissOnEscape.cjs +2 -0
- package/build/hooks/useDismissOnEscape.cjs.map +1 -0
- package/build/hooks/useDismissOnEscape.d.ts +12 -0
- package/build/hooks/useDismissOnEscape.js +18 -0
- package/build/hooks/useDismissOnEscape.js.map +1 -0
- package/build/hooks/useListboxNavigation.cjs +2 -0
- package/build/hooks/useListboxNavigation.cjs.map +1 -0
- package/build/hooks/useListboxNavigation.d.ts +7 -0
- package/build/hooks/useListboxNavigation.js +53 -0
- package/build/hooks/useListboxNavigation.js.map +1 -0
- package/build/hooks/usePortalSurface.cjs +2 -0
- package/build/hooks/usePortalSurface.cjs.map +1 -0
- package/build/hooks/usePortalSurface.d.ts +25 -0
- package/build/hooks/usePortalSurface.js +19 -0
- package/build/hooks/usePortalSurface.js.map +1 -0
- package/build/hooks/usePositioning.cjs +2 -0
- package/build/hooks/usePositioning.cjs.map +1 -0
- package/build/hooks/usePositioning.d.ts +13 -0
- package/build/hooks/usePositioning.js +74 -0
- package/build/hooks/usePositioning.js.map +1 -0
- package/build/hooks/useScrollLock.cjs +2 -0
- package/build/hooks/useScrollLock.cjs.map +1 -0
- package/build/hooks/useScrollLock.d.ts +2 -0
- package/build/hooks/useScrollLock.js +34 -0
- package/build/hooks/useScrollLock.js.map +1 -0
- package/build/hooks/useSheetViewport.cjs +2 -0
- package/build/hooks/useSheetViewport.cjs.map +1 -0
- package/build/hooks/useSheetViewport.d.ts +6 -0
- package/build/hooks/useSheetViewport.js +29 -0
- package/build/hooks/useSheetViewport.js.map +1 -0
- package/build/hooks/useStickToBottom.cjs +2 -0
- package/build/hooks/useStickToBottom.cjs.map +1 -0
- package/build/hooks/useStickToBottom.d.ts +12 -0
- package/build/hooks/useStickToBottom.js +39 -0
- package/build/hooks/useStickToBottom.js.map +1 -0
- package/build/hooks/useUiTheme.cjs +2 -0
- package/build/hooks/useUiTheme.cjs.map +1 -0
- package/build/hooks/useUiTheme.d.ts +10 -0
- package/build/hooks/useUiTheme.js +42 -0
- package/build/hooks/useUiTheme.js.map +1 -0
- package/build/hooks/useUiTokens.cjs +2 -0
- package/build/hooks/useUiTokens.cjs.map +1 -0
- package/build/hooks/useUiTokens.d.ts +11 -0
- package/build/hooks/useUiTokens.js +36 -0
- package/build/hooks/useUiTokens.js.map +1 -0
- package/build/hooks/useVirtualList.cjs +2 -0
- package/build/hooks/useVirtualList.cjs.map +1 -0
- package/build/hooks/useVirtualList.d.ts +13 -0
- package/build/hooks/useVirtualList.js +41 -0
- package/build/hooks/useVirtualList.js.map +1 -0
- package/build/index.cjs +2 -0
- package/build/index.cjs.map +1 -0
- package/build/index.d.ts +93 -0
- package/build/index.js +199 -0
- package/build/index.js.map +1 -0
- package/build/scss/_index.scss +7 -0
- package/build/scss/_mixins.scss +828 -0
- package/build/scss/_variables.scss +243 -0
- package/build/styles/base.d.ts +0 -0
- package/build/styles.css +133 -0
- package/build/theme/UiProvider.cjs +2 -0
- package/build/theme/UiProvider.cjs.map +1 -0
- package/build/theme/UiProvider.d.ts +23 -0
- package/build/theme/UiProvider.js +12 -0
- package/build/theme/UiProvider.js.map +1 -0
- package/build/theme/UiThemeScript.cjs +2 -0
- package/build/theme/UiThemeScript.cjs.map +1 -0
- package/build/theme/UiThemeScript.d.ts +22 -0
- package/build/theme/UiThemeScript.js +8 -0
- package/build/theme/UiThemeScript.js.map +1 -0
- package/build/theme/context.cjs +2 -0
- package/build/theme/context.cjs.map +1 -0
- package/build/theme/context.d.ts +5 -0
- package/build/theme/context.js +8 -0
- package/build/theme/context.js.map +1 -0
- package/build/types/charts/AreaChart/index.d.ts +14 -0
- package/build/types/charts/BarChart/index.d.ts +16 -0
- package/build/types/charts/BoxPlot/index.d.ts +43 -0
- package/build/types/charts/ComposedChart/index.d.ts +16 -0
- package/build/types/charts/Heatmap/index.d.ts +30 -0
- package/build/types/charts/Histogram/index.d.ts +29 -0
- package/build/types/charts/LineChart/index.d.ts +14 -0
- package/build/types/charts/PieChart/index.d.ts +36 -0
- package/build/types/charts/RadarChart/index.d.ts +40 -0
- package/build/types/charts/ScatterPlot/index.d.ts +41 -0
- package/build/types/charts/core/CartesianChart.d.ts +43 -0
- package/build/types/charts/core/ChartFrame.d.ts +55 -0
- package/build/types/charts/core/axes.d.ts +37 -0
- package/build/types/charts/core/cartesian.d.ts +80 -0
- package/build/types/charts/core/format.d.ts +19 -0
- package/build/types/charts/core/margins.d.ts +9 -0
- package/build/types/charts/core/palette.d.ts +11 -0
- package/build/types/charts/core/path.d.ts +24 -0
- package/build/types/charts/core/scale.d.ts +40 -0
- package/build/types/charts/core/series.d.ts +11 -0
- package/build/types/charts/core/spatial.d.ts +12 -0
- package/build/types/charts/core/stats.d.ts +34 -0
- package/build/types/charts/core/types.d.ts +31 -0
- package/build/types/charts/core/useChartWidth.d.ts +7 -0
- package/build/types/charts/index.d.ts +21 -0
- package/build/types/chat/ActionList/index.d.ts +46 -0
- package/build/types/chat/AppBar/index.d.ts +21 -0
- package/build/types/chat/ChatMessage/index.d.ts +24 -0
- package/build/types/chat/ChatThread/index.d.ts +24 -0
- package/build/types/chat/Citation/index.d.ts +15 -0
- package/build/types/chat/CodeBlock/format.d.ts +7 -0
- package/build/types/chat/CodeBlock/grammars.d.ts +44 -0
- package/build/types/chat/CodeBlock/highlight.d.ts +22 -0
- package/build/types/chat/CodeBlock/index.d.ts +33 -0
- package/build/types/chat/DescriptionList/index.d.ts +16 -0
- package/build/types/chat/Legend/index.d.ts +21 -0
- package/build/types/chat/MessageActions/index.d.ts +21 -0
- package/build/types/chat/PromptInput/index.d.ts +47 -0
- package/build/types/chat/PromptSuggestions/index.d.ts +25 -0
- package/build/types/chat/Prose/index.d.ts +15 -0
- package/build/types/chat/ReasoningBlock/index.d.ts +24 -0
- package/build/types/chat/ReasoningText/index.d.ts +14 -0
- package/build/types/chat/SegmentBar/index.d.ts +46 -0
- package/build/types/chat/SourceList/index.d.ts +25 -0
- package/build/types/chat/TerminalOutput/index.d.ts +25 -0
- package/build/types/chat/ToolCall/index.d.ts +41 -0
- package/build/types/chat/index.d.ts +26 -0
- package/build/types/combobox.type.d.ts +49 -0
- package/build/types/common-element-props.type.d.ts +8 -0
- package/build/types/helpers/class-name.helper.d.ts +3 -0
- package/build/types/helpers/component.helper.d.ts +13 -0
- package/build/types/helpers/label.helper.d.ts +12 -0
- package/build/types/hook.type.d.ts +36 -0
- package/build/types/link.type.d.ts +14 -0
- package/build/types/positioning.type.d.ts +38 -0
- package/build/types/theme.type.d.ts +181 -0
- package/build/types/types/common-element-props.type.d.ts +8 -0
- package/build/types/types/link.type.d.ts +14 -0
- package/build/types/types/theme.type.d.ts +181 -0
- package/package.json +487 -4
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export type SegmentOption<T extends string = string> = {
|
|
3
|
+
value: T;
|
|
4
|
+
label: string;
|
|
5
|
+
/** Yalnızca ikon gösterilecekse `label` erişilebilir ad olarak kalır. */
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
isDisabled?: boolean;
|
|
8
|
+
};
|
|
9
|
+
type Props<T extends string> = {
|
|
10
|
+
options: SegmentOption<T>[];
|
|
11
|
+
value: T;
|
|
12
|
+
onChange: (value: T) => void;
|
|
13
|
+
/** Grubun erişilebilir adı ("Görünüm"). */
|
|
14
|
+
label: string;
|
|
15
|
+
/** Etiketler gizlenir, yalnızca ikon çizilir. `label` yine okunur. */
|
|
16
|
+
isIconOnly?: boolean;
|
|
17
|
+
size?: 'sm' | 'md';
|
|
18
|
+
className?: string;
|
|
19
|
+
testId?: string;
|
|
20
|
+
};
|
|
21
|
+
/** Bölmeli denetim — görünüm değiştirme. */
|
|
22
|
+
declare const SegmentedControl: <T extends string>({ options, value, onChange, label, isIconOnly, size, className, testId, }: Props<T>) => import("react").JSX.Element;
|
|
23
|
+
declare const _default: typeof SegmentedControl;
|
|
24
|
+
export default _default;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as s, jsxs as w } from "react/jsx-runtime";
|
|
3
|
+
import { memo as k, useRef as D } from "react";
|
|
4
|
+
import { cx as b } from "../../helpers/class-name.helper.js";
|
|
5
|
+
import { named as p } from "../../helpers/component.helper.js";
|
|
6
|
+
const l = {"segmented":"ui-segmented-qo2Bw","segmented--sm":"ui-segmented--sm-7tUry","segmented--md":"ui-segmented--md-PiSqt","segmented__item":"ui-segmented__item-mqRNZ","segmented__item--selected":"ui-segmented__item--selected-r7CLj","segmented__icon":"ui-segmented__icon-C9CT-","segmented__label":"ui-segmented__label-NVXBv"};
|
|
7
|
+
const S = ({
|
|
8
|
+
options: n,
|
|
9
|
+
value: d,
|
|
10
|
+
onChange: c,
|
|
11
|
+
label: g,
|
|
12
|
+
isIconOnly: i,
|
|
13
|
+
size: h = "md",
|
|
14
|
+
className: v,
|
|
15
|
+
testId: x
|
|
16
|
+
}) => {
|
|
17
|
+
const m = D(null), y = (e) => {
|
|
18
|
+
var u, f;
|
|
19
|
+
const r = e.key === "ArrowRight" || e.key === "ArrowDown" ? 1 : e.key === "ArrowLeft" || e.key === "ArrowUp" ? -1 : 0;
|
|
20
|
+
if (r === 0) return;
|
|
21
|
+
e.preventDefault();
|
|
22
|
+
const t = n.filter((a) => !a.isDisabled);
|
|
23
|
+
if (t.length === 0) return;
|
|
24
|
+
const _ = t.findIndex((a) => a.value === d), o = t[(_ + r + t.length) % t.length];
|
|
25
|
+
c(o.value), (f = (u = m.current) == null ? void 0 : u.querySelector(`[data-value="${o.value}"]`)) == null || f.focus({ preventScroll: !0 });
|
|
26
|
+
};
|
|
27
|
+
return /* @__PURE__ */ s(
|
|
28
|
+
"div",
|
|
29
|
+
{
|
|
30
|
+
ref: m,
|
|
31
|
+
role: "radiogroup",
|
|
32
|
+
"aria-label": g,
|
|
33
|
+
className: b(l.segmented, l[`segmented--${h}`], v),
|
|
34
|
+
"data-testid": x,
|
|
35
|
+
onKeyDown: y,
|
|
36
|
+
children: n.map((e) => {
|
|
37
|
+
const r = e.value === d;
|
|
38
|
+
return /* @__PURE__ */ w(
|
|
39
|
+
"button",
|
|
40
|
+
{
|
|
41
|
+
type: "button",
|
|
42
|
+
role: "radio",
|
|
43
|
+
"aria-checked": r,
|
|
44
|
+
"aria-label": i ? e.label : void 0,
|
|
45
|
+
"data-value": e.value,
|
|
46
|
+
disabled: e.isDisabled,
|
|
47
|
+
tabIndex: r ? 0 : -1,
|
|
48
|
+
className: b(
|
|
49
|
+
l.segmented__item,
|
|
50
|
+
r && l["segmented__item--selected"]
|
|
51
|
+
),
|
|
52
|
+
onClick: () => !r && c(e.value),
|
|
53
|
+
children: [
|
|
54
|
+
e.icon && /* @__PURE__ */ s("span", { className: l.segmented__icon, "aria-hidden": !0, children: e.icon }),
|
|
55
|
+
!i && /* @__PURE__ */ s("span", { className: l.segmented__label, children: e.label })
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
e.value
|
|
59
|
+
);
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
}, K = /* @__PURE__ */ k(
|
|
64
|
+
/* @__PURE__ */ p(S, "SegmentedControl")
|
|
65
|
+
);
|
|
66
|
+
export {
|
|
67
|
+
K as default
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/SegmentedControl/index.tsx"],"sourcesContent":["'use client';\n\nimport { type KeyboardEvent, memo, type ReactNode, useRef } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\n\nimport styles from './index.module.scss';\n\nexport type SegmentOption<T extends string = string> = {\n value: T;\n label: string;\n /** Yalnızca ikon gösterilecekse `label` erişilebilir ad olarak kalır. */\n icon?: ReactNode;\n isDisabled?: boolean;\n};\n\ntype Props<T extends string> = {\n options: SegmentOption<T>[];\n value: T;\n onChange: (value: T) => void;\n /** Grubun erişilebilir adı (\"Görünüm\"). */\n label: string;\n /** Etiketler gizlenir, yalnızca ikon çizilir. `label` yine okunur. */\n isIconOnly?: boolean;\n size?: 'sm' | 'md';\n className?: string;\n testId?: string;\n};\n\n/** Bölmeli denetim — görünüm değiştirme. */\nconst SegmentedControl = <T extends string>({\n options,\n value,\n onChange,\n label,\n isIconOnly,\n size = 'md',\n className,\n testId,\n}: Props<T>) => {\n const listRef = useRef<HTMLDivElement>(null);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const offset =\n event.key === 'ArrowRight' || event.key === 'ArrowDown'\n ? 1\n : event.key === 'ArrowLeft' || event.key === 'ArrowUp'\n ? -1\n : 0;\n\n if (offset === 0) return;\n event.preventDefault();\n\n const enabled = options.filter(option => !option.isDisabled);\n if (enabled.length === 0) return;\n\n const current = enabled.findIndex(option => option.value === value);\n const next = enabled[(current + offset + enabled.length) % enabled.length];\n\n onChange(next.value);\n listRef.current\n ?.querySelector<HTMLButtonElement>(`[data-value=\"${next.value}\"]`)\n ?.focus({ preventScroll: true });\n };\n\n return (\n <div\n ref={listRef}\n role=\"radiogroup\"\n aria-label={label}\n className={cx(styles.segmented, styles[`segmented--${size}`], className)}\n data-testid={testId}\n onKeyDown={handleKeyDown}\n >\n {options.map(option => {\n const isSelected = option.value === value;\n\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n aria-label={isIconOnly ? option.label : undefined}\n data-value={option.value}\n disabled={option.isDisabled}\n /* Donen `tabindex`: grup Tab sirasinda TEK durak. */\n tabIndex={isSelected ? 0 : -1}\n className={cx(\n styles.segmented__item,\n isSelected && styles['segmented__item--selected'],\n )}\n /*\n * Secili ogeye ikinci kez basmak HICBIR SEY yapmaz: gorunum anahtarinda \"hicbiri\" diye\n * bir hal yok. `ChipGroup`ta ayni hareket secimi kaldiriyor ve iki…\n */\n onClick={() => !isSelected && onChange(option.value)}\n >\n {option.icon && (\n <span className={styles.segmented__icon} aria-hidden>\n {option.icon}\n </span>\n )}\n {!isIconOnly && <span className={styles.segmented__label}>{option.label}</span>}\n </button>\n );\n })}\n </div>\n );\n};\n\nexport default /*#__PURE__*/ memo(\n /*#__PURE__*/ named(SegmentedControl, 'SegmentedControl'),\n) as typeof SegmentedControl;\n"],"names":["SegmentedControl","options","value","onChange","label","isIconOnly","size","className","testId","listRef","useRef","handleKeyDown","event","offset","enabled","option","current","next","_b","_a","jsx","cx","styles","isSelected","jsxs","index","memo","named"],"mappings":";;;;;;AA8BA,MAAMA,IAAmB,CAAmB;AAAA,EAC1C,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAC;AAAA,EACA,QAAAC;AACF,MAAgB;AACd,QAAMC,IAAUC,EAAuB,IAAI,GAErCC,IAAgB,CAACC,MAAyC;;AAC9D,UAAMC,IACJD,EAAM,QAAQ,gBAAgBA,EAAM,QAAQ,cACxC,IACAA,EAAM,QAAQ,eAAeA,EAAM,QAAQ,YACzC,KACA;AAER,QAAIC,MAAW,EAAG;AAClB,IAAAD,EAAM,eAAA;AAEN,UAAME,IAAUb,EAAQ,OAAO,CAAAc,MAAU,CAACA,EAAO,UAAU;AAC3D,QAAID,EAAQ,WAAW,EAAG;AAE1B,UAAME,IAAUF,EAAQ,UAAU,CAAAC,MAAUA,EAAO,UAAUb,CAAK,GAC5De,IAAOH,GAASE,IAAUH,IAASC,EAAQ,UAAUA,EAAQ,MAAM;AAEzE,IAAAX,EAASc,EAAK,KAAK,IACnBC,KAAAC,IAAAV,EAAQ,YAAR,gBAAAU,EACI,cAAiC,gBAAgBF,EAAK,KAAK,UAD/D,QAAAC,EAEI,MAAM,EAAE,eAAe,GAAA;AAAA,EAC7B;AAEA,SACE,gBAAAE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKX;AAAA,MACL,MAAK;AAAA,MACL,cAAYL;AAAA,MACZ,WAAWiB,EAAGC,EAAO,WAAWA,EAAO,cAAchB,CAAI,EAAE,GAAGC,CAAS;AAAA,MACvE,eAAaC;AAAA,MACb,WAAWG;AAAA,MAEV,UAAAV,EAAQ,IAAI,CAAAc,MAAU;AACrB,cAAMQ,IAAaR,EAAO,UAAUb;AAEpC,eACE,gBAAAsB;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,MAAK;AAAA,YACL,MAAK;AAAA,YACL,gBAAcD;AAAA,YACd,cAAYlB,IAAaU,EAAO,QAAQ;AAAA,YACxC,cAAYA,EAAO;AAAA,YACnB,UAAUA,EAAO;AAAA,YAEjB,UAAUQ,IAAa,IAAI;AAAA,YAC3B,WAAWF;AAAA,cACTC,EAAO;AAAA,cACPC,KAAcD,EAAO,2BAA2B;AAAA,YAAA;AAAA,YAMlD,SAAS,MAAM,CAACC,KAAcpB,EAASY,EAAO,KAAK;AAAA,YAElD,UAAA;AAAA,cAAAA,EAAO,0BACL,QAAA,EAAK,WAAWO,EAAO,iBAAiB,eAAW,IACjD,UAAAP,EAAO,KAAA,CACV;AAAA,cAED,CAACV,KAAc,gBAAAe,EAAC,QAAA,EAAK,WAAWE,EAAO,kBAAmB,YAAO,MAAA,CAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAxBnEP,EAAO;AAAA,QAAA;AAAA,MA2BlB,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP,GAEAU,IAA6B,gBAAAC;AAAA,EACb,gBAAAC,EAAM3B,GAAkB,kBAAkB;AAC1D;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-segmented-qo2Bw{display:inline-flex;padding:3px;border-radius:var(--hd-radius-sm);background-color:var(--hd-bg-raised);border:1px solid var(--hd-border)}.ui-segmented--sm-7tUry{font-size:var(--hd-type-caption-size)}.ui-segmented--md-PiSqt{font-size:var(--hd-type-small-size)}.ui-segmented__item-mqRNZ{display:flex;align-items:center;gap:var(--hd-space-2);position:relative}.ui-segmented__item-mqRNZ:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:max(100%,44px);height:max(100%,44px)}.ui-segmented__item-mqRNZ{justify-content:center;min-width:0;padding:var(--hd-space-2) var(--hd-space-3);border:none;border-radius:calc(var(--hd-radius-sm) - 3px);background:none;cursor:pointer;font-family:var(--hd-font-body);font-size:inherit;font-weight:var(--hd-font-weight-medium);color:var(--hd-text-2);white-space:nowrap;transition:background-color var(--hd-duration-fast) var(--hd-ease-standard),color var(--hd-duration-fast) var(--hd-ease-standard)}.ui-segmented--sm-7tUry .ui-segmented__item-mqRNZ{padding:var(--hd-space-1) var(--hd-space-2)}.ui-segmented__item-mqRNZ:hover:not(:disabled):not(.ui-segmented__item--selected-r7CLj){color:var(--hd-text)}.ui-segmented__item-mqRNZ:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--hd-focus);outline-offset:var(--ui-ring-offset, -1px)}.ui-segmented__item--selected-r7CLj{background-color:var(--hd-bg-surface);color:var(--hd-text);box-shadow:var(--hd-shadow-1)}.ui-segmented__item-mqRNZ:disabled{color:var(--hd-text-3);cursor:not-allowed}@media (prefers-reduced-motion: reduce){.ui-segmented__item-mqRNZ{transition:none}}.ui-segmented__icon-C9CT-{display:inline-flex;flex-shrink:0;font-size:16px}.ui-segmented__label-NVXBv{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),n=require("react"),X=require("react-dom"),O=require("react-bootstrap-icons"),Z=require("../../hooks/useListboxNavigation.cjs"),ee=require("../../hooks/usePortalSurface.cjs"),te=require("../../hooks/usePositioning.cjs"),re=require("../../constants/breakpoint.constants.cjs"),m=require("../../helpers/class-name.helper.cjs"),ne=require("../../helpers/label.helper.cjs"),ae=require("../../theme/context.cjs"),se=require("../BottomSheet/index.cjs"),t={default:{"select":"ui-select-tiiPL","trigger":"ui-trigger-rHQJz","trigger--empty":"ui-trigger--empty-cuinb","trigger--open":"ui-trigger--open-1nsvu","trigger--invalid":"ui-trigger--invalid-NtP0W","trigger--sm":"ui-trigger--sm-Xnu1C","trigger__icon":"ui-trigger__icon-apCcx","trigger__srName":"ui-trigger__srName-XLCxt","trigger__value":"ui-trigger__value-ioH7K","trigger__chevron":"ui-trigger__chevron-FtsIZ","trigger__chevron--open":"ui-trigger__chevron--open-1P2P-","panel":"ui-panel-rGOOd","list":"ui-list-SOKf8","list--sheet":"ui-list--sheet-BIjCb","option":"ui-option-ZDPef","option--active":"ui-option--active-R4lLF","option--selected":"ui-option--selected-glQMj","option--disabled":"ui-option--disabled-h4rdd","option__label":"ui-option__label-SsoYB","option__check":"ui-option__check-8CPSG"}},ie=({options:l,value:w,onChange:A,label:_,placeholder:K,closeLabel:T,icon:I,size:U="md",align:W="start",isDisabled:y,id:B,className:F,testId:H,required:Q,"aria-describedby":Y,"aria-invalid":E})=>{const{labels:d}=ae.useUi(),z=ne.resolveLabel("Select.placeholder",K,d==null?void 0:d.selectPlaceholder),G=n.useId(),o=B??G,R=`${o}-listbox`,j=e=>`${o}-option-${e}`,D=n.useRef(null),h=n.useRef(null),g=n.useRef(null),[s,$]=n.useState(null),q=te.default(h,g,{side:"bottom",align:W,isOpen:s==="popover"}),x=ee.default(s==="popover",h,g),i=s!==null,b=l.findIndex(e=>e.value===w),p=b>=0?l[b]:null,u=n.useCallback(()=>$(null),[]),C=n.useCallback(()=>{y||l.length===0||$(window.matchMedia(re.SHEET_MEDIA_QUERY).matches?"sheet":"popover")},[y,l.length]),k=e=>{e.isDisabled||(A(e.value),u())},L=n.useRef(!1);n.useEffect(()=>{var e;L.current&&!i&&((e=h.current)==null||e.focus()),L.current=i},[i]),n.useEffect(()=>{if(s!=="popover")return;const e=a=>{var f,S;const c=a.target;(f=D.current)!=null&&f.contains(c)||(S=g.current)!=null&&S.contains(c)||u()};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[s,u]);const{activeIndex:v,setActiveIndex:J,listRef:N,handleKeyDown:V}=Z.default({count:l.length,isOpen:i,initialIndex:b>=0?b:0,onSelect:e=>{const a=l[e];a&&k(a)},onClose:u});n.useEffect(()=>{var e;s==="sheet"&&((e=N.current)==null||e.focus({preventScroll:!0}))},[s,N]);const M=e=>{if(!i){["ArrowDown","ArrowUp","Enter"," "].includes(e.key)&&(e.preventDefault(),C());return}V(e)},P=e=>r.jsx("ul",{ref:N,id:R,role:"listbox","aria-label":_,"aria-activedescendant":e&&l[v]?j(v):void 0,tabIndex:e?0:-1,className:m.cx(t.default.list,e&&t.default["list--sheet"]),onKeyDown:e?M:void 0,children:l.map((a,c)=>{const f=a.value===w;return r.jsxs("li",{id:j(c),role:"option","data-index":c,"aria-selected":f,"aria-disabled":a.isDisabled,className:m.cx(t.default.option,c===v&&t.default["option--active"],f&&t.default["option--selected"],a.isDisabled&&t.default["option--disabled"]),onMouseEnter:()=>J(c),onClick:()=>k(a),children:[r.jsx("span",{className:t.default.option__label,children:a.label}),f&&r.jsx(O.CheckLg,{"aria-hidden":!0,className:t.default.option__check})]},a.value)})});return r.jsxs("span",{ref:D,className:m.cx(t.default.select,F),"data-testid":H,children:[r.jsxs("button",{ref:h,id:o,type:"button",role:"combobox",className:m.cx(t.default.trigger,t.default[`trigger--${U}`],!p&&t.default["trigger--empty"],i&&t.default["trigger--open"],E&&t.default["trigger--invalid"]),disabled:y,"aria-haspopup":"listbox","aria-expanded":i,"aria-controls":i?R:void 0,"aria-activedescendant":s==="popover"&&l[v]?j(v):void 0,"aria-labelledby":p?`${o}-name ${o}-value`:`${o}-name`,"aria-describedby":Y,"aria-invalid":E,"aria-required":Q||void 0,onClick:()=>i?u():C(),onKeyDown:M,children:[I&&r.jsx("span",{className:t.default.trigger__icon,"aria-hidden":!0,children:I}),r.jsx("span",{id:`${o}-name`,className:t.default.trigger__srName,children:_}),r.jsx("span",{id:`${o}-value`,className:t.default.trigger__value,children:(p==null?void 0:p.label)??z}),r.jsx(O.CaretDownFill,{"aria-hidden":!0,className:m.cx(t.default.trigger__chevron,i&&t.default["trigger__chevron--open"])})]}),s==="popover"&&x.container&&X.createPortal(r.jsx("div",{ref:g,className:t.default.panel,...x.attributes,style:{...q.style,...x.style,minWidth:q.anchorWidth||void 0,visibility:q.isPositioned?void 0:"hidden"},children:P(!1)}),x.container),s==="sheet"&&r.jsx(se.default,{title:_,closeLabel:T??(d==null?void 0:d.close),onClose:u,children:P(!0)})]})},le=n.memo(ie);exports.default=le;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n type KeyboardEvent,\n memo,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\nimport { CaretDownFill, CheckLg } from 'react-bootstrap-icons';\n\nimport useListboxNavigation from '../../hooks/useListboxNavigation';\nimport usePortalSurface from '../../hooks/usePortalSurface';\nimport usePositioning from '../../hooks/usePositioning';\n\nimport { SHEET_MEDIA_QUERY } from '../../constants/breakpoint.constants';\nimport { cx } from '../../helpers/class-name.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\nimport BottomSheet from '../BottomSheet';\n\nimport styles from './index.module.scss';\n\nexport type SelectOption<T extends string = string> = {\n value: T;\n label: string;\n isDisabled?: boolean;\n};\n\n/** Seçenek listesinin nerede açıldığı. */\ntype OpenMode = 'popover' | 'sheet';\n\ntype Props<T extends string> = {\n options: SelectOption<T>[];\n value: T;\n onChange: (value: T) => void;\n /** Alanın adı. */\n label: string;\n /** Seçim yokken tetikleyicide görünen metin. */\n placeholder?: string;\n /** Alt sayfanın kapatma düğmesinin erişilebilir adı. */\n closeLabel?: string;\n /** Tetikleyicinin solundaki ikon. */\n icon?: ReactNode;\n /** `sm` yoğun şeritler içindir (araç çubuğu); varsayılan form ölçüsü `md`. */\n size?: 'sm' | 'md';\n /** Panelin hangi kenardan hizalanacağı. */\n align?: 'start' | 'end';\n isDisabled?: boolean;\n id?: string;\n /**\n * Zorunluluk — `Field`in `FieldChildProps` sözleşmesinden gelir.\n * ⚠ Bileşen `...rest` YAYMIYOR, yani `Props`ta bildirilmeyen her alan sessizce buharlaşır.\n * `required` bir dönem tam olarak öyleydi: `<Field…\n */\n required?: boolean;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n className?: string;\n testId?: string;\n};\n\n/** Seçim kutusu. */\nconst Select = <T extends string>({\n options,\n value,\n onChange,\n label,\n placeholder,\n closeLabel,\n icon,\n size = 'md',\n align = 'start',\n isDisabled,\n id,\n className,\n testId,\n required,\n 'aria-describedby': describedBy,\n 'aria-invalid': isInvalid,\n}: Props<T>) => {\n const { labels } = useUi();\n const emptyText = resolveLabel('Select.placeholder', placeholder, labels?.selectPlaceholder);\n const generatedId = useId();\n const baseId = id ?? generatedId;\n const listboxId = `${baseId}-listbox`;\n const optionId = (index: number) => `${baseId}-option-${index}`;\n\n const rootRef = useRef<HTMLSpanElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const [openMode, setOpenMode] = useState<OpenMode | null>(null);\n\n /* PANEL SABIT KONUMLU, MUTLAK DEGIL — gerekce SCSS'te (`.panel`). */\n const positioning = usePositioning(triggerRef, panelRef, {\n side: 'bottom',\n align,\n isOpen: openMode === 'popover',\n });\n\n /*\n * Panel BODY'e (ya da icinde bulundugu acik `<dialog>`a) portallanir; gerekce\n * `hooks/usePortalSurface.ts`.\n */\n const portal = usePortalSurface(openMode === 'popover', triggerRef, panelRef);\n\n const isOpen = openMode !== null;\n const selectedIndex = options.findIndex(option => option.value === value);\n const selectedOption = selectedIndex >= 0 ? options[selectedIndex] : null;\n\n const close = useCallback(() => setOpenMode(null), []);\n\n const open = useCallback(() => {\n if (isDisabled || options.length === 0) return;\n\n /*\n * Etkin secenek SECILI olandan baslar (kancanin `initialIndex`i); kullanici listeyi bastan\n * taramaz.\n */\n /* A sheet only on a narrow TOUCH screen; a desktop window gets the dropdown at any width. */\n setOpenMode(window.matchMedia(SHEET_MEDIA_QUERY).matches ? 'sheet' : 'popover');\n }, [isDisabled, options.length]);\n\n const selectOption = (option: SelectOption<T>) => {\n if (option.isDisabled) return;\n onChange(option.value);\n close();\n };\n\n /* Kapaninca odak TETIKLEYICIYE doner. */\n const wasOpenRef = useRef(false);\n useEffect(() => {\n if (wasOpenRef.current && !isOpen) triggerRef.current?.focus();\n wasOpenRef.current = isOpen;\n }, [isOpen]);\n\n /*\n * Disari tiklamada panel kapanir.\n * ⚠ PANEL ARTIK KOKUN ICINDE DEGIL — portallandi. `rootRef` tek basina bakilsaydi panelin ICINE\n * yapilan `mousedown` \"disari\" sayilir ve panel…\n */\n useEffect(() => {\n if (openMode !== 'popover') return;\n\n const handlePointerDown = (event: globalThis.MouseEvent) => {\n const target = event.target as Node;\n if (rootRef.current?.contains(target) || panelRef.current?.contains(target)) return;\n close();\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n return () => document.removeEventListener('mousedown', handlePointerDown);\n }, [openMode, close]);\n\n /* KLAVYE MODELI `useListboxNavigation`da — `Combobox`la AYNI kanca. */\n const { activeIndex, setActiveIndex, listRef, handleKeyDown } =\n useListboxNavigation<HTMLUListElement>({\n count: options.length,\n isOpen,\n initialIndex: selectedIndex >= 0 ? selectedIndex : 0,\n onSelect: index => {\n const option = options[index];\n if (option) selectOption(option);\n },\n onClose: close,\n });\n\n /* Alt sayfada odak listenin kendisine gecer: ok tuslari orada isler. */\n useEffect(() => {\n if (openMode === 'sheet') listRef.current?.focus({ preventScroll: true });\n /* `listRef` kancadan geliyor ve `useRef` kimligi SABIT; bagimlilikta\n olmasi etkiyi yeniden calistirmaz, denetci ise kancadan gelen bir\n degerin referans oldugunu kanitlayamiyor. */\n }, [openMode, listRef]);\n\n /* KAPALIYKEN ok/Enter/Space paneli ACAR. */\n const onKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (!isOpen) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n open();\n }\n return;\n }\n\n handleKeyDown(event);\n };\n\n const renderList = (isSheet: boolean) => (\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n /*\n * Alt sayfada baslik `BottomSheet`in icinde ve kimligi bize kapali; listenin adi dogrudan\n * yazilir.\n */\n aria-label={label}\n /*\n * Odak alt sayfada listede, panelde tetikleyicide: etkin seçeneği bildiren öznitelik odağın\n * olduğu öğede durmak zorunda.\n */\n aria-activedescendant={isSheet && options[activeIndex] ? optionId(activeIndex) : undefined}\n tabIndex={isSheet ? 0 : -1}\n className={cx(styles.list, isSheet && styles['list--sheet'])}\n onKeyDown={isSheet ? onKeyDown : undefined}\n >\n {options.map((option, index) => {\n const isChosen = option.value === value;\n\n return (\n <li\n key={option.value}\n id={optionId(index)}\n role=\"option\"\n data-index={index}\n aria-selected={isChosen}\n aria-disabled={option.isDisabled}\n className={cx(\n styles.option,\n index === activeIndex && styles['option--active'],\n isChosen && styles['option--selected'],\n option.isDisabled && styles['option--disabled'],\n )}\n // Fare imleci seçeneğin üstündeyken etkin seçenek de oraya taşınır; iki ayrı vurgu\n // kullanıcıyı şaşırtıyordu.\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => selectOption(option)}\n >\n <span className={styles.option__label}>{option.label}</span>\n {isChosen && <CheckLg aria-hidden className={styles.option__check} />}\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <span ref={rootRef} className={cx(styles.select, className)} data-testid={testId}>\n <button\n ref={triggerRef}\n id={baseId}\n type=\"button\"\n role=\"combobox\"\n className={cx(\n styles.trigger,\n styles[`trigger--${size}`],\n !selectedOption && styles['trigger--empty'],\n isOpen && styles['trigger--open'],\n isInvalid && styles['trigger--invalid'],\n )}\n disabled={isDisabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? listboxId : undefined}\n aria-activedescendant={\n openMode === 'popover' && options[activeIndex] ? optionId(activeIndex) : undefined\n }\n /* ⚠ `aria-label` KULLANILMAZ — SECILI DEGERI MASKELIYORDU. */\n aria-labelledby={selectedOption ? `${baseId}-name ${baseId}-value` : `${baseId}-name`}\n aria-describedby={describedBy}\n aria-invalid={isInvalid}\n /* Tetikleyici bir `<button>`; yerel `required` yok, karsiligi bu. */\n aria-required={required || undefined}\n onClick={() => (isOpen ? close() : open())}\n onKeyDown={onKeyDown}\n >\n {icon && (\n <span className={styles.trigger__icon} aria-hidden>\n {icon}\n </span>\n )}\n\n {/* Kontrolün adı — yalnızca erişilebilirlik ağacında. */}\n <span id={`${baseId}-name`} className={styles.trigger__srName}>\n {label}\n </span>\n\n <span id={`${baseId}-value`} className={styles.trigger__value}>\n {selectedOption?.label ?? emptyText}\n </span>\n\n {/*\n * Ok DOLU CARET: ince chevron, kutunun sag ucunda `$text-2` tonunda\n * iki hairline cizgiye iniyor ve kutunun acilir oldugu uzaktan\n * okunmuyordu. Acikken 180° donuyor — yon hâlâ durumu bildiriyor.\n */}\n <CaretDownFill\n aria-hidden\n className={cx(styles.trigger__chevron, isOpen && styles['trigger__chevron--open'])}\n />\n </button>\n\n {openMode === 'popover' &&\n portal.container &&\n createPortal(\n <div\n ref={panelRef}\n className={styles.panel}\n {...portal.attributes}\n style={{\n ...positioning.style,\n ...portal.style,\n /* Panel tetikleyiciyle EN AZ ayni genislikte. */\n minWidth: positioning.anchorWidth || undefined,\n /* Ilk karede olcu yok; yanlis yerde bir kare parlamasin. */\n visibility: positioning.isPositioned ? undefined : 'hidden',\n }}\n >\n {renderList(false)}\n </div>,\n portal.container,\n )}\n\n {/* Dar ekranda liste alt sayfada acilir; panel klavye acilinca sikisiyor\n ve alt ucu ekranin disinda kaliyordu (bkz. `BottomSheet`). */}\n {openMode === 'sheet' && (\n <BottomSheet title={label} closeLabel={closeLabel ?? labels?.close} onClose={close}>\n {renderList(true)}\n </BottomSheet>\n )}\n </span>\n );\n};\n\nexport default /*#__PURE__*/ memo(Select) as typeof Select;\n"],"names":["Select","options","value","onChange","label","placeholder","closeLabel","icon","size","align","isDisabled","id","className","testId","required","describedBy","isInvalid","labels","useUi","emptyText","resolveLabel","generatedId","useId","baseId","listboxId","optionId","index","rootRef","useRef","triggerRef","panelRef","openMode","setOpenMode","useState","positioning","usePositioning","portal","usePortalSurface","isOpen","selectedIndex","option","selectedOption","close","useCallback","open","SHEET_MEDIA_QUERY","selectOption","wasOpenRef","useEffect","_a","handlePointerDown","event","target","_b","activeIndex","setActiveIndex","listRef","handleKeyDown","useListboxNavigation","onKeyDown","renderList","isSheet","jsx","cx","styles","isChosen","jsxs","CheckLg","CaretDownFill","createPortal","BottomSheet"],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export type SelectOption<T extends string = string> = {
|
|
3
|
+
value: T;
|
|
4
|
+
label: string;
|
|
5
|
+
isDisabled?: boolean;
|
|
6
|
+
};
|
|
7
|
+
type Props<T extends string> = {
|
|
8
|
+
options: SelectOption<T>[];
|
|
9
|
+
value: T;
|
|
10
|
+
onChange: (value: T) => void;
|
|
11
|
+
/** Alanın adı. */
|
|
12
|
+
label: string;
|
|
13
|
+
/** Seçim yokken tetikleyicide görünen metin. */
|
|
14
|
+
placeholder?: string;
|
|
15
|
+
/** Alt sayfanın kapatma düğmesinin erişilebilir adı. */
|
|
16
|
+
closeLabel?: string;
|
|
17
|
+
/** Tetikleyicinin solundaki ikon. */
|
|
18
|
+
icon?: ReactNode;
|
|
19
|
+
/** `sm` yoğun şeritler içindir (araç çubuğu); varsayılan form ölçüsü `md`. */
|
|
20
|
+
size?: 'sm' | 'md';
|
|
21
|
+
/** Panelin hangi kenardan hizalanacağı. */
|
|
22
|
+
align?: 'start' | 'end';
|
|
23
|
+
isDisabled?: boolean;
|
|
24
|
+
id?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Zorunluluk — `Field`in `FieldChildProps` sözleşmesinden gelir.
|
|
27
|
+
* ⚠ Bileşen `...rest` YAYMIYOR, yani `Props`ta bildirilmeyen her alan sessizce buharlaşır.
|
|
28
|
+
* `required` bir dönem tam olarak öyleydi: `<Field…
|
|
29
|
+
*/
|
|
30
|
+
required?: boolean;
|
|
31
|
+
'aria-describedby'?: string;
|
|
32
|
+
'aria-invalid'?: boolean;
|
|
33
|
+
className?: string;
|
|
34
|
+
testId?: string;
|
|
35
|
+
};
|
|
36
|
+
/** Seçim kutusu. */
|
|
37
|
+
declare const Select: <T extends string>({ options, value, onChange, label, placeholder, closeLabel, icon, size, align, isDisabled, id, className, testId, required, "aria-describedby": describedBy, "aria-invalid": isInvalid, }: Props<T>) => import("react").JSX.Element;
|
|
38
|
+
declare const _default: typeof Select;
|
|
39
|
+
export default _default;
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as D, jsx as a } from "react/jsx-runtime";
|
|
3
|
+
import { memo as ee, useId as te, useRef as x, useState as re, useCallback as j, useEffect as E } from "react";
|
|
4
|
+
import { createPortal as oe } from "react-dom";
|
|
5
|
+
import { CaretDownFill as ne, CheckLg as ie } from "react-bootstrap-icons";
|
|
6
|
+
import ae from "../../hooks/useListboxNavigation.js";
|
|
7
|
+
import se from "../../hooks/usePortalSurface.js";
|
|
8
|
+
import le from "../../hooks/usePositioning.js";
|
|
9
|
+
import { SHEET_MEDIA_QUERY as ce } from "../../constants/breakpoint.constants.js";
|
|
10
|
+
import { cx as f } from "../../helpers/class-name.helper.js";
|
|
11
|
+
import { resolveLabel as de } from "../../helpers/label.helper.js";
|
|
12
|
+
import { useUi as ue } from "../../theme/context.js";
|
|
13
|
+
import me from "../BottomSheet/index.js";
|
|
14
|
+
const t = {"select":"ui-select-tiiPL","trigger":"ui-trigger-rHQJz","trigger--empty":"ui-trigger--empty-cuinb","trigger--open":"ui-trigger--open-1nsvu","trigger--invalid":"ui-trigger--invalid-NtP0W","trigger--sm":"ui-trigger--sm-Xnu1C","trigger__icon":"ui-trigger__icon-apCcx","trigger__srName":"ui-trigger__srName-XLCxt","trigger__value":"ui-trigger__value-ioH7K","trigger__chevron":"ui-trigger__chevron-FtsIZ","trigger__chevron--open":"ui-trigger__chevron--open-1P2P-","panel":"ui-panel-rGOOd","list":"ui-list-SOKf8","list--sheet":"ui-list--sheet-BIjCb","option":"ui-option-ZDPef","option--active":"ui-option--active-R4lLF","option--selected":"ui-option--selected-glQMj","option--disabled":"ui-option--disabled-h4rdd","option__label":"ui-option__label-SsoYB","option__check":"ui-option__check-8CPSG"};
|
|
15
|
+
const pe = ({
|
|
16
|
+
options: i,
|
|
17
|
+
value: $,
|
|
18
|
+
onChange: T,
|
|
19
|
+
label: _,
|
|
20
|
+
placeholder: W,
|
|
21
|
+
closeLabel: q,
|
|
22
|
+
icon: C,
|
|
23
|
+
size: B = "md",
|
|
24
|
+
align: F = "start",
|
|
25
|
+
isDisabled: y,
|
|
26
|
+
id: H,
|
|
27
|
+
className: Q,
|
|
28
|
+
testId: Y,
|
|
29
|
+
required: z,
|
|
30
|
+
"aria-describedby": G,
|
|
31
|
+
"aria-invalid": L
|
|
32
|
+
}) => {
|
|
33
|
+
const { labels: c } = ue(), J = de("Select.placeholder", W, c == null ? void 0 : c.selectPlaceholder), V = te(), s = H ?? V, R = `${s}-listbox`, w = (e) => `${s}-option-${e}`, k = x(null), v = x(null), h = x(null), [o, P] = re(null), N = le(v, h, {
|
|
34
|
+
side: "bottom",
|
|
35
|
+
align: F,
|
|
36
|
+
isOpen: o === "popover"
|
|
37
|
+
}), g = se(o === "popover", v, h), n = o !== null, b = i.findIndex((e) => e.value === $), m = b >= 0 ? i[b] : null, d = j(() => P(null), []), M = j(() => {
|
|
38
|
+
y || i.length === 0 || P(window.matchMedia(ce).matches ? "sheet" : "popover");
|
|
39
|
+
}, [y, i.length]), S = (e) => {
|
|
40
|
+
e.isDisabled || (T(e.value), d());
|
|
41
|
+
}, A = x(!1);
|
|
42
|
+
E(() => {
|
|
43
|
+
var e;
|
|
44
|
+
A.current && !n && ((e = v.current) == null || e.focus()), A.current = n;
|
|
45
|
+
}, [n]), E(() => {
|
|
46
|
+
if (o !== "popover") return;
|
|
47
|
+
const e = (r) => {
|
|
48
|
+
var u, U;
|
|
49
|
+
const l = r.target;
|
|
50
|
+
(u = k.current) != null && u.contains(l) || (U = h.current) != null && U.contains(l) || d();
|
|
51
|
+
};
|
|
52
|
+
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
53
|
+
}, [o, d]);
|
|
54
|
+
const { activeIndex: p, setActiveIndex: X, listRef: I, handleKeyDown: Z } = ae({
|
|
55
|
+
count: i.length,
|
|
56
|
+
isOpen: n,
|
|
57
|
+
initialIndex: b >= 0 ? b : 0,
|
|
58
|
+
onSelect: (e) => {
|
|
59
|
+
const r = i[e];
|
|
60
|
+
r && S(r);
|
|
61
|
+
},
|
|
62
|
+
onClose: d
|
|
63
|
+
});
|
|
64
|
+
E(() => {
|
|
65
|
+
var e;
|
|
66
|
+
o === "sheet" && ((e = I.current) == null || e.focus({ preventScroll: !0 }));
|
|
67
|
+
}, [o, I]);
|
|
68
|
+
const O = (e) => {
|
|
69
|
+
if (!n) {
|
|
70
|
+
["ArrowDown", "ArrowUp", "Enter", " "].includes(e.key) && (e.preventDefault(), M());
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
Z(e);
|
|
74
|
+
}, K = (e) => /* @__PURE__ */ a(
|
|
75
|
+
"ul",
|
|
76
|
+
{
|
|
77
|
+
ref: I,
|
|
78
|
+
id: R,
|
|
79
|
+
role: "listbox",
|
|
80
|
+
"aria-label": _,
|
|
81
|
+
"aria-activedescendant": e && i[p] ? w(p) : void 0,
|
|
82
|
+
tabIndex: e ? 0 : -1,
|
|
83
|
+
className: f(t.list, e && t["list--sheet"]),
|
|
84
|
+
onKeyDown: e ? O : void 0,
|
|
85
|
+
children: i.map((r, l) => {
|
|
86
|
+
const u = r.value === $;
|
|
87
|
+
return /* @__PURE__ */ D(
|
|
88
|
+
"li",
|
|
89
|
+
{
|
|
90
|
+
id: w(l),
|
|
91
|
+
role: "option",
|
|
92
|
+
"data-index": l,
|
|
93
|
+
"aria-selected": u,
|
|
94
|
+
"aria-disabled": r.isDisabled,
|
|
95
|
+
className: f(
|
|
96
|
+
t.option,
|
|
97
|
+
l === p && t["option--active"],
|
|
98
|
+
u && t["option--selected"],
|
|
99
|
+
r.isDisabled && t["option--disabled"]
|
|
100
|
+
),
|
|
101
|
+
onMouseEnter: () => X(l),
|
|
102
|
+
onClick: () => S(r),
|
|
103
|
+
children: [
|
|
104
|
+
/* @__PURE__ */ a("span", { className: t.option__label, children: r.label }),
|
|
105
|
+
u && /* @__PURE__ */ a(ie, { "aria-hidden": !0, className: t.option__check })
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
r.value
|
|
109
|
+
);
|
|
110
|
+
})
|
|
111
|
+
}
|
|
112
|
+
);
|
|
113
|
+
return /* @__PURE__ */ D("span", { ref: k, className: f(t.select, Q), "data-testid": Y, children: [
|
|
114
|
+
/* @__PURE__ */ D(
|
|
115
|
+
"button",
|
|
116
|
+
{
|
|
117
|
+
ref: v,
|
|
118
|
+
id: s,
|
|
119
|
+
type: "button",
|
|
120
|
+
role: "combobox",
|
|
121
|
+
className: f(
|
|
122
|
+
t.trigger,
|
|
123
|
+
t[`trigger--${B}`],
|
|
124
|
+
!m && t["trigger--empty"],
|
|
125
|
+
n && t["trigger--open"],
|
|
126
|
+
L && t["trigger--invalid"]
|
|
127
|
+
),
|
|
128
|
+
disabled: y,
|
|
129
|
+
"aria-haspopup": "listbox",
|
|
130
|
+
"aria-expanded": n,
|
|
131
|
+
"aria-controls": n ? R : void 0,
|
|
132
|
+
"aria-activedescendant": o === "popover" && i[p] ? w(p) : void 0,
|
|
133
|
+
"aria-labelledby": m ? `${s}-name ${s}-value` : `${s}-name`,
|
|
134
|
+
"aria-describedby": G,
|
|
135
|
+
"aria-invalid": L,
|
|
136
|
+
"aria-required": z || void 0,
|
|
137
|
+
onClick: () => n ? d() : M(),
|
|
138
|
+
onKeyDown: O,
|
|
139
|
+
children: [
|
|
140
|
+
C && /* @__PURE__ */ a("span", { className: t.trigger__icon, "aria-hidden": !0, children: C }),
|
|
141
|
+
/* @__PURE__ */ a("span", { id: `${s}-name`, className: t.trigger__srName, children: _ }),
|
|
142
|
+
/* @__PURE__ */ a("span", { id: `${s}-value`, className: t.trigger__value, children: (m == null ? void 0 : m.label) ?? J }),
|
|
143
|
+
/* @__PURE__ */ a(
|
|
144
|
+
ne,
|
|
145
|
+
{
|
|
146
|
+
"aria-hidden": !0,
|
|
147
|
+
className: f(t.trigger__chevron, n && t["trigger__chevron--open"])
|
|
148
|
+
}
|
|
149
|
+
)
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
),
|
|
153
|
+
o === "popover" && g.container && oe(
|
|
154
|
+
/* @__PURE__ */ a(
|
|
155
|
+
"div",
|
|
156
|
+
{
|
|
157
|
+
ref: h,
|
|
158
|
+
className: t.panel,
|
|
159
|
+
...g.attributes,
|
|
160
|
+
style: {
|
|
161
|
+
...N.style,
|
|
162
|
+
...g.style,
|
|
163
|
+
/* Panel tetikleyiciyle EN AZ ayni genislikte. */
|
|
164
|
+
minWidth: N.anchorWidth || void 0,
|
|
165
|
+
/* Ilk karede olcu yok; yanlis yerde bir kare parlamasin. */
|
|
166
|
+
visibility: N.isPositioned ? void 0 : "hidden"
|
|
167
|
+
},
|
|
168
|
+
children: K(!1)
|
|
169
|
+
}
|
|
170
|
+
),
|
|
171
|
+
g.container
|
|
172
|
+
),
|
|
173
|
+
o === "sheet" && /* @__PURE__ */ a(me, { title: _, closeLabel: q ?? (c == null ? void 0 : c.close), onClose: d, children: K(!0) })
|
|
174
|
+
] });
|
|
175
|
+
}, $e = /* @__PURE__ */ ee(pe);
|
|
176
|
+
export {
|
|
177
|
+
$e as default
|
|
178
|
+
};
|
|
179
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n type KeyboardEvent,\n memo,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\nimport { CaretDownFill, CheckLg } from 'react-bootstrap-icons';\n\nimport useListboxNavigation from '../../hooks/useListboxNavigation';\nimport usePortalSurface from '../../hooks/usePortalSurface';\nimport usePositioning from '../../hooks/usePositioning';\n\nimport { SHEET_MEDIA_QUERY } from '../../constants/breakpoint.constants';\nimport { cx } from '../../helpers/class-name.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\nimport BottomSheet from '../BottomSheet';\n\nimport styles from './index.module.scss';\n\nexport type SelectOption<T extends string = string> = {\n value: T;\n label: string;\n isDisabled?: boolean;\n};\n\n/** Seçenek listesinin nerede açıldığı. */\ntype OpenMode = 'popover' | 'sheet';\n\ntype Props<T extends string> = {\n options: SelectOption<T>[];\n value: T;\n onChange: (value: T) => void;\n /** Alanın adı. */\n label: string;\n /** Seçim yokken tetikleyicide görünen metin. */\n placeholder?: string;\n /** Alt sayfanın kapatma düğmesinin erişilebilir adı. */\n closeLabel?: string;\n /** Tetikleyicinin solundaki ikon. */\n icon?: ReactNode;\n /** `sm` yoğun şeritler içindir (araç çubuğu); varsayılan form ölçüsü `md`. */\n size?: 'sm' | 'md';\n /** Panelin hangi kenardan hizalanacağı. */\n align?: 'start' | 'end';\n isDisabled?: boolean;\n id?: string;\n /**\n * Zorunluluk — `Field`in `FieldChildProps` sözleşmesinden gelir.\n * ⚠ Bileşen `...rest` YAYMIYOR, yani `Props`ta bildirilmeyen her alan sessizce buharlaşır.\n * `required` bir dönem tam olarak öyleydi: `<Field…\n */\n required?: boolean;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n className?: string;\n testId?: string;\n};\n\n/** Seçim kutusu. */\nconst Select = <T extends string>({\n options,\n value,\n onChange,\n label,\n placeholder,\n closeLabel,\n icon,\n size = 'md',\n align = 'start',\n isDisabled,\n id,\n className,\n testId,\n required,\n 'aria-describedby': describedBy,\n 'aria-invalid': isInvalid,\n}: Props<T>) => {\n const { labels } = useUi();\n const emptyText = resolveLabel('Select.placeholder', placeholder, labels?.selectPlaceholder);\n const generatedId = useId();\n const baseId = id ?? generatedId;\n const listboxId = `${baseId}-listbox`;\n const optionId = (index: number) => `${baseId}-option-${index}`;\n\n const rootRef = useRef<HTMLSpanElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const [openMode, setOpenMode] = useState<OpenMode | null>(null);\n\n /* PANEL SABIT KONUMLU, MUTLAK DEGIL — gerekce SCSS'te (`.panel`). */\n const positioning = usePositioning(triggerRef, panelRef, {\n side: 'bottom',\n align,\n isOpen: openMode === 'popover',\n });\n\n /*\n * Panel BODY'e (ya da icinde bulundugu acik `<dialog>`a) portallanir; gerekce\n * `hooks/usePortalSurface.ts`.\n */\n const portal = usePortalSurface(openMode === 'popover', triggerRef, panelRef);\n\n const isOpen = openMode !== null;\n const selectedIndex = options.findIndex(option => option.value === value);\n const selectedOption = selectedIndex >= 0 ? options[selectedIndex] : null;\n\n const close = useCallback(() => setOpenMode(null), []);\n\n const open = useCallback(() => {\n if (isDisabled || options.length === 0) return;\n\n /*\n * Etkin secenek SECILI olandan baslar (kancanin `initialIndex`i); kullanici listeyi bastan\n * taramaz.\n */\n /* A sheet only on a narrow TOUCH screen; a desktop window gets the dropdown at any width. */\n setOpenMode(window.matchMedia(SHEET_MEDIA_QUERY).matches ? 'sheet' : 'popover');\n }, [isDisabled, options.length]);\n\n const selectOption = (option: SelectOption<T>) => {\n if (option.isDisabled) return;\n onChange(option.value);\n close();\n };\n\n /* Kapaninca odak TETIKLEYICIYE doner. */\n const wasOpenRef = useRef(false);\n useEffect(() => {\n if (wasOpenRef.current && !isOpen) triggerRef.current?.focus();\n wasOpenRef.current = isOpen;\n }, [isOpen]);\n\n /*\n * Disari tiklamada panel kapanir.\n * ⚠ PANEL ARTIK KOKUN ICINDE DEGIL — portallandi. `rootRef` tek basina bakilsaydi panelin ICINE\n * yapilan `mousedown` \"disari\" sayilir ve panel…\n */\n useEffect(() => {\n if (openMode !== 'popover') return;\n\n const handlePointerDown = (event: globalThis.MouseEvent) => {\n const target = event.target as Node;\n if (rootRef.current?.contains(target) || panelRef.current?.contains(target)) return;\n close();\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n return () => document.removeEventListener('mousedown', handlePointerDown);\n }, [openMode, close]);\n\n /* KLAVYE MODELI `useListboxNavigation`da — `Combobox`la AYNI kanca. */\n const { activeIndex, setActiveIndex, listRef, handleKeyDown } =\n useListboxNavigation<HTMLUListElement>({\n count: options.length,\n isOpen,\n initialIndex: selectedIndex >= 0 ? selectedIndex : 0,\n onSelect: index => {\n const option = options[index];\n if (option) selectOption(option);\n },\n onClose: close,\n });\n\n /* Alt sayfada odak listenin kendisine gecer: ok tuslari orada isler. */\n useEffect(() => {\n if (openMode === 'sheet') listRef.current?.focus({ preventScroll: true });\n /* `listRef` kancadan geliyor ve `useRef` kimligi SABIT; bagimlilikta\n olmasi etkiyi yeniden calistirmaz, denetci ise kancadan gelen bir\n degerin referans oldugunu kanitlayamiyor. */\n }, [openMode, listRef]);\n\n /* KAPALIYKEN ok/Enter/Space paneli ACAR. */\n const onKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (!isOpen) {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n open();\n }\n return;\n }\n\n handleKeyDown(event);\n };\n\n const renderList = (isSheet: boolean) => (\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n /*\n * Alt sayfada baslik `BottomSheet`in icinde ve kimligi bize kapali; listenin adi dogrudan\n * yazilir.\n */\n aria-label={label}\n /*\n * Odak alt sayfada listede, panelde tetikleyicide: etkin seçeneği bildiren öznitelik odağın\n * olduğu öğede durmak zorunda.\n */\n aria-activedescendant={isSheet && options[activeIndex] ? optionId(activeIndex) : undefined}\n tabIndex={isSheet ? 0 : -1}\n className={cx(styles.list, isSheet && styles['list--sheet'])}\n onKeyDown={isSheet ? onKeyDown : undefined}\n >\n {options.map((option, index) => {\n const isChosen = option.value === value;\n\n return (\n <li\n key={option.value}\n id={optionId(index)}\n role=\"option\"\n data-index={index}\n aria-selected={isChosen}\n aria-disabled={option.isDisabled}\n className={cx(\n styles.option,\n index === activeIndex && styles['option--active'],\n isChosen && styles['option--selected'],\n option.isDisabled && styles['option--disabled'],\n )}\n // Fare imleci seçeneğin üstündeyken etkin seçenek de oraya taşınır; iki ayrı vurgu\n // kullanıcıyı şaşırtıyordu.\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => selectOption(option)}\n >\n <span className={styles.option__label}>{option.label}</span>\n {isChosen && <CheckLg aria-hidden className={styles.option__check} />}\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <span ref={rootRef} className={cx(styles.select, className)} data-testid={testId}>\n <button\n ref={triggerRef}\n id={baseId}\n type=\"button\"\n role=\"combobox\"\n className={cx(\n styles.trigger,\n styles[`trigger--${size}`],\n !selectedOption && styles['trigger--empty'],\n isOpen && styles['trigger--open'],\n isInvalid && styles['trigger--invalid'],\n )}\n disabled={isDisabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? listboxId : undefined}\n aria-activedescendant={\n openMode === 'popover' && options[activeIndex] ? optionId(activeIndex) : undefined\n }\n /* ⚠ `aria-label` KULLANILMAZ — SECILI DEGERI MASKELIYORDU. */\n aria-labelledby={selectedOption ? `${baseId}-name ${baseId}-value` : `${baseId}-name`}\n aria-describedby={describedBy}\n aria-invalid={isInvalid}\n /* Tetikleyici bir `<button>`; yerel `required` yok, karsiligi bu. */\n aria-required={required || undefined}\n onClick={() => (isOpen ? close() : open())}\n onKeyDown={onKeyDown}\n >\n {icon && (\n <span className={styles.trigger__icon} aria-hidden>\n {icon}\n </span>\n )}\n\n {/* Kontrolün adı — yalnızca erişilebilirlik ağacında. */}\n <span id={`${baseId}-name`} className={styles.trigger__srName}>\n {label}\n </span>\n\n <span id={`${baseId}-value`} className={styles.trigger__value}>\n {selectedOption?.label ?? emptyText}\n </span>\n\n {/*\n * Ok DOLU CARET: ince chevron, kutunun sag ucunda `$text-2` tonunda\n * iki hairline cizgiye iniyor ve kutunun acilir oldugu uzaktan\n * okunmuyordu. Acikken 180° donuyor — yon hâlâ durumu bildiriyor.\n */}\n <CaretDownFill\n aria-hidden\n className={cx(styles.trigger__chevron, isOpen && styles['trigger__chevron--open'])}\n />\n </button>\n\n {openMode === 'popover' &&\n portal.container &&\n createPortal(\n <div\n ref={panelRef}\n className={styles.panel}\n {...portal.attributes}\n style={{\n ...positioning.style,\n ...portal.style,\n /* Panel tetikleyiciyle EN AZ ayni genislikte. */\n minWidth: positioning.anchorWidth || undefined,\n /* Ilk karede olcu yok; yanlis yerde bir kare parlamasin. */\n visibility: positioning.isPositioned ? undefined : 'hidden',\n }}\n >\n {renderList(false)}\n </div>,\n portal.container,\n )}\n\n {/* Dar ekranda liste alt sayfada acilir; panel klavye acilinca sikisiyor\n ve alt ucu ekranin disinda kaliyordu (bkz. `BottomSheet`). */}\n {openMode === 'sheet' && (\n <BottomSheet title={label} closeLabel={closeLabel ?? labels?.close} onClose={close}>\n {renderList(true)}\n </BottomSheet>\n )}\n </span>\n );\n};\n\nexport default /*#__PURE__*/ memo(Select) as typeof Select;\n"],"names":["Select","options","value","onChange","label","placeholder","closeLabel","icon","size","align","isDisabled","id","className","testId","required","describedBy","isInvalid","labels","useUi","emptyText","resolveLabel","generatedId","useId","baseId","listboxId","optionId","index","rootRef","useRef","triggerRef","panelRef","openMode","setOpenMode","useState","positioning","usePositioning","portal","usePortalSurface","isOpen","selectedIndex","option","selectedOption","close","useCallback","open","SHEET_MEDIA_QUERY","selectOption","wasOpenRef","useEffect","_a","handlePointerDown","event","target","_b","activeIndex","setActiveIndex","listRef","handleKeyDown","useListboxNavigation","onKeyDown","renderList","isSheet","jsx","cx","styles","isChosen","jsxs","CheckLg","CaretDownFill","createPortal","BottomSheet"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-select-tiiPL{position:relative;display:block;width:100%}.ui-trigger-rHQJz{width:100%;font-family:var(--hd-font-body);font-size:var(--hd-type-body-size);line-height:var(--hd-type-h4-line-height);color:var(--hd-text);background-color:var(--hd-bg-surface);border:1px solid var(--hd-border-strong);border-radius:var(--hd-radius-sm);padding:var(--hd-space-2) var(--hd-space-3);min-height:40px}@media (max-width: 640px){.ui-trigger-rHQJz{min-height:44px;font-size:max(16px,var(--hd-type-body-size))}}@media (hover: none) and (pointer: coarse){.ui-trigger-rHQJz{min-height:44px;font-size:max(16px,var(--hd-type-body-size))}}.ui-trigger-rHQJz{transition:border-color var(--hd-duration-fast) var(--hd-ease-standard),box-shadow var(--hd-duration-fast) var(--hd-ease-standard)}.ui-trigger-rHQJz::placeholder{color:var(--ui-placeholder, var(--hd-text-3))}.ui-trigger-rHQJz:hover:not(:disabled):not([aria-invalid=true]){border-color:color-mix(in oklab,var(--hd-border-strong),var(--hd-text) 30%)}.ui-trigger-rHQJz:focus{outline:none;border-color:var(--hd-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--hd-focus) 32%,transparent)}.ui-trigger-rHQJz:disabled{background-color:var(--hd-bg-raised);border-color:var(--hd-border);cursor:not-allowed;color:var(--hd-text-3)}@media (forced-colors: active){.ui-trigger-rHQJz:disabled{color:GrayText;border-color:GrayText}}.ui-trigger-rHQJz[aria-invalid=true]{border-color:var(--hd-danger-solid)}.ui-trigger-rHQJz[aria-invalid=true]:focus{box-shadow:0 0 0 3px color-mix(in srgb,var(--hd-danger-solid) 28%,transparent)}@media (prefers-reduced-motion: reduce){.ui-trigger-rHQJz{transition:none}}.ui-trigger-rHQJz{display:flex;align-items:center;gap:var(--hd-space-2);text-align:start;cursor:pointer}.ui-trigger--empty-cuinb{color:var(--hd-text-3)}.ui-trigger--open-1nsvu{border-color:var(--hd-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--hd-focus) 32%,transparent)}.ui-trigger--invalid-NtP0W{border-color:var(--hd-danger-solid)}.ui-trigger--sm-Xnu1C{min-height:32px;padding-block:0;padding-inline:var(--hd-space-3);font-size:var(--hd-type-small-size)}@media (max-width: 640px){.ui-trigger--sm-Xnu1C{min-height:32px;font-size:var(--hd-type-small-size)}}@media (hover: none) and (pointer: coarse){.ui-trigger--sm-Xnu1C{min-height:32px;font-size:var(--hd-type-small-size)}}.ui-trigger--sm-Xnu1C{position:relative}.ui-trigger--sm-Xnu1C:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:max(100%,44px);height:max(100%,44px)}.ui-trigger--sm-Xnu1C{font-weight:var(--hd-font-weight-medium)}.ui-trigger__icon-apCcx{display:inline-flex;color:var(--hd-text-2);flex-shrink:0;font-size:18px}.ui-trigger__srName-XLCxt{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.ui-trigger__value-ioH7K{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.ui-trigger__chevron-FtsIZ{color:var(--hd-text-2);flex-shrink:0;font-size:14px;transition:transform var(--hd-duration-fast) var(--hd-ease-standard)}.ui-trigger__chevron--open-1P2P-{transform:rotate(180deg)}@media (prefers-reduced-motion: reduce){.ui-trigger__chevron-FtsIZ{transition:none}}.ui-panel-rGOOd{position:fixed;z-index:var(--hd-z-popover);min-width:200px;background-color:var(--hd-bg-overlay);border:1px solid var(--hd-border);border-radius:var(--hd-radius-md);box-shadow:var(--hd-shadow-2);overflow:hidden;animation:var(--ui-anim-fade-in-up) var(--hd-duration-fast) var(--hd-ease-standard)}@media (prefers-reduced-motion: reduce){.ui-panel-rGOOd{animation:none}}.ui-list-SOKf8{position:relative;max-height:280px;overflow-y:auto;padding:var(--hd-space-1);margin:0;list-style:none;scrollbar-width:thin;scrollbar-color:var(--hd-border-strong) transparent}.ui-list-SOKf8::-webkit-scrollbar{width:8px;height:8px}.ui-list-SOKf8::-webkit-scrollbar-track{background:transparent}.ui-list-SOKf8::-webkit-scrollbar-thumb{background-color:var(--hd-border-strong);border-radius:var(--hd-radius-pill);border:2px solid transparent;background-clip:content-box}.ui-list-SOKf8::-webkit-scrollbar-thumb:hover{background-color:var(--hd-text-3)}.ui-list-SOKf8:focus{outline:none}.ui-list--sheet-BIjCb{max-height:none;overflow:visible;padding:0}.ui-list--sheet-BIjCb .ui-option-ZDPef{min-height:48px;font-size:var(--hd-type-body-size);border-radius:var(--hd-radius-sm)}.ui-option-ZDPef{display:flex;align-items:center;gap:var(--hd-space-2);justify-content:space-between;padding:var(--hd-space-2) var(--hd-space-3);border-radius:var(--hd-radius-xs);font-size:var(--hd-type-small-size);color:var(--hd-text);cursor:pointer;transition:background-color var(--hd-duration-fast) var(--hd-ease-standard)}.ui-option--active-R4lLF{background-color:color-mix(in srgb,var(--hd-text) 8%,transparent)}.ui-option--selected-glQMj{background-color:var(--hd-primary-soft);color:var(--hd-text);font-weight:var(--hd-font-weight-semibold)}.ui-option--disabled-h4rdd{color:var(--hd-text-3);cursor:not-allowed}.ui-option--disabled-h4rdd:hover{background-color:transparent}.ui-option__label-SsoYB{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.ui-option__check-8CPSG{color:var(--hd-text);flex-shrink:0;font-size:18px}@media (prefers-reduced-motion: reduce){.ui-option-ZDPef{transition:none}}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),i=require("react"),h=require("@handijit/utils"),d=require("../../helpers/class-name.helper.cjs"),c=require("../../helpers/component.helper.cjs"),t={default:{"skeleton":"ui-skeleton-n92if","skeleton--block":"ui-skeleton--block-tOZ-a","skeleton--text":"ui-skeleton--text-k-ROi","skeleton--circle":"ui-skeleton--circle-x-mX3","group":"ui-group-YMfwa","card":"ui-card-XQs-Q","card__media":"ui-card__media-YLJDv","card__body":"ui-card__body-msRvB","rows":"ui-rows-EZ9Am","row":"ui-row-se56N","row__text":"ui-row__text-TD4iS","table":"ui-table-L328g","table__row":"ui-table__row-rSJTK"}},l=({width:a,height:r,variant:n="block",lines:s=1,className:o})=>{const u={width:h.isNumber(a)?`${a}px`:a,height:h.isNumber(r)?`${r}px`:r};return n==="text"&&s>1?e.jsx("span",{className:d.cx(t.default.group,o),"aria-hidden":!0,children:Array.from({length:s},(x,m)=>e.jsx("span",{className:d.cx(t.default.skeleton,t.default["skeleton--text"]),style:m===s-1?{width:"60%"}:void 0},m))}):e.jsx("span",{className:d.cx(t.default.skeleton,t.default[`skeleton--${n}`],o),style:u,"aria-hidden":!0})},f=i.memo(l),j=({count:a=1,className:r})=>e.jsx(e.Fragment,{children:Array.from({length:a},(n,s)=>e.jsxs("div",{className:d.cx(t.default.card,r),"aria-hidden":!0,children:[e.jsx(l,{className:t.default.card__media}),e.jsxs("div",{className:t.default.card__body,children:[e.jsx(l,{variant:"text",width:"70%"}),e.jsx(l,{variant:"text",width:"40%"})]})]},s))}),_=({count:a=3,className:r})=>e.jsx("div",{className:d.cx(t.default.rows,r),"aria-hidden":!0,children:Array.from({length:a},(n,s)=>e.jsxs("div",{className:t.default.row,children:[e.jsx(l,{variant:"circle",width:36,height:36}),e.jsxs("div",{className:t.default.row__text,children:[e.jsx(l,{variant:"text",width:"45%"}),e.jsx(l,{variant:"text",width:"25%"})]})]},s))}),k=({count:a=5,columns:r=4,className:n})=>e.jsx("div",{className:d.cx(t.default.table,n),"aria-hidden":!0,children:Array.from({length:a},(s,o)=>e.jsx("div",{className:t.default.table__row,children:Array.from({length:r},(u,x)=>e.jsx(l,{variant:"text"},x))},o))}),v=c.named(i.memo(j),"SkeletonCard"),S=c.named(i.memo(_),"SkeletonRows"),p=c.named(i.memo(k),"SkeletonTable");exports.SkeletonCard=v;exports.SkeletonRows=S;exports.SkeletonTable=p;exports.default=f;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Skeleton/index.tsx"],"sourcesContent":["import { type CSSProperties, type FC, memo } from 'react';\n\nimport { isNumber } from '@handijit/utils';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n /** Genişlik: sayı px, dize doğrudan CSS değeri. */\n width?: number | string;\n height?: number | string;\n /** Metin satırı görünümü: yuvarlatılmış, satır yüksekliğinde. */\n variant?: 'block' | 'text' | 'circle';\n /** Kaç satır çizilecek (`text` için). */\n lines?: number;\n className?: string;\n};\n\n/** Yükleme iskeleti. */\nconst Skeleton: FC<Props> = ({ width, height, variant = 'block', lines = 1, className }) => {\n const style: CSSProperties = {\n width: isNumber(width) ? `${width}px` : width,\n height: isNumber(height) ? `${height}px` : height,\n };\n\n if (variant === 'text' && lines > 1)\n return (\n <span className={cx(styles.group, className)} aria-hidden>\n {Array.from({ length: lines }, (_, index) => (\n <span\n key={index}\n className={cx(styles.skeleton, styles['skeleton--text'])}\n // Son satır kısa: gerçek paragraflar tam genişlikte bitmez.\n style={index === lines - 1 ? { width: '60%' } : undefined}\n />\n ))}\n </span>\n );\n\n return (\n <span\n className={cx(styles.skeleton, styles[`skeleton--${variant}`], className)}\n style={style}\n aria-hidden\n />\n );\n};\n\nexport default /*#__PURE__*/ memo(Skeleton) as typeof Skeleton;\n\ntype ShapeProps = {\n /** Kaç kopya çizilecek — bir listenin bilinen satır sayısı. */\n count?: number;\n className?: string;\n};\n\n/** KART iskeleti — `Card` + `CardMedia` + iki satır metnin ölçüsü. */\nconst CardShape: FC<ShapeProps> = ({ count = 1, className }) => (\n <>\n {Array.from({ length: count }, (_, index) => (\n <div key={index} className={cx(styles.card, className)} aria-hidden>\n <Skeleton className={styles.card__media} />\n <div className={styles.card__body}>\n <Skeleton variant=\"text\" width=\"70%\" />\n <Skeleton variant=\"text\" width=\"40%\" />\n </div>\n </div>\n ))}\n </>\n);\n\n/** SATIR iskeleti — avatar + iki metin satırı; liste satırlarının ölçüsü. */\nconst RowShape: FC<ShapeProps> = ({ count = 3, className }) => (\n <div className={cx(styles.rows, className)} aria-hidden>\n {Array.from({ length: count }, (_, index) => (\n <div key={index} className={styles.row}>\n <Skeleton variant=\"circle\" width={36} height={36} />\n <div className={styles.row__text}>\n <Skeleton variant=\"text\" width=\"45%\" />\n <Skeleton variant=\"text\" width=\"25%\" />\n </div>\n </div>\n ))}\n </div>\n);\n\n/** TABLO iskeleti — `DataTable`ın satır yüksekliğinde. */\nconst TableShape: FC<ShapeProps & { columns?: number }> = ({\n count = 5,\n columns = 4,\n className,\n}) => (\n <div className={cx(styles.table, className)} aria-hidden>\n {Array.from({ length: count }, (_, rowIndex) => (\n <div key={rowIndex} className={styles.table__row}>\n {Array.from({ length: columns }, (_, columnIndex) => (\n <Skeleton key={columnIndex} variant=\"text\" />\n ))}\n </div>\n ))}\n </div>\n);\n\nexport const SkeletonCard = /*#__PURE__*/ named(/*#__PURE__*/ memo(CardShape), 'SkeletonCard');\nexport const SkeletonRows = /*#__PURE__*/ named(/*#__PURE__*/ memo(RowShape), 'SkeletonRows');\nexport const SkeletonTable = /*#__PURE__*/ named(/*#__PURE__*/ memo(TableShape), 'SkeletonTable');\n"],"names":["Skeleton","width","height","variant","lines","className","style","isNumber","cx","styles","_","index","jsx","CardShape","count","Fragment","jsxs","RowShape","TableShape","columns","rowIndex","columnIndex","SkeletonCard","named","memo","SkeletonRows","SkeletonTable"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
type Props = {
|
|
3
|
+
/** Genişlik: sayı px, dize doğrudan CSS değeri. */
|
|
4
|
+
width?: number | string;
|
|
5
|
+
height?: number | string;
|
|
6
|
+
/** Metin satırı görünümü: yuvarlatılmış, satır yüksekliğinde. */
|
|
7
|
+
variant?: 'block' | 'text' | 'circle';
|
|
8
|
+
/** Kaç satır çizilecek (`text` için). */
|
|
9
|
+
lines?: number;
|
|
10
|
+
className?: string;
|
|
11
|
+
};
|
|
12
|
+
/** Yükleme iskeleti. */
|
|
13
|
+
declare const Skeleton: FC<Props>;
|
|
14
|
+
declare const _default: typeof Skeleton;
|
|
15
|
+
export default _default;
|
|
16
|
+
type ShapeProps = {
|
|
17
|
+
/** Kaç kopya çizilecek — bir listenin bilinen satır sayısı. */
|
|
18
|
+
count?: number;
|
|
19
|
+
className?: string;
|
|
20
|
+
};
|
|
21
|
+
export declare const SkeletonCard: import('react').NamedExoticComponent<ShapeProps>;
|
|
22
|
+
export declare const SkeletonRows: import('react').NamedExoticComponent<ShapeProps>;
|
|
23
|
+
export declare const SkeletonTable: import('react').NamedExoticComponent<ShapeProps & {
|
|
24
|
+
columns?: number;
|
|
25
|
+
}>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx as e, Fragment as v, jsxs as d } from "react/jsx-runtime";
|
|
2
|
+
import { memo as c } from "react";
|
|
3
|
+
import { isNumber as f } from "@handijit/utils";
|
|
4
|
+
import { cx as i } from "../../helpers/class-name.helper.js";
|
|
5
|
+
import { named as m } from "../../helpers/component.helper.js";
|
|
6
|
+
const t = {"skeleton":"ui-skeleton-n92if","skeleton--block":"ui-skeleton--block-tOZ-a","skeleton--text":"ui-skeleton--text-k-ROi","skeleton--circle":"ui-skeleton--circle-x-mX3","group":"ui-group-YMfwa","card":"ui-card-XQs-Q","card__media":"ui-card__media-YLJDv","card__body":"ui-card__body-msRvB","rows":"ui-rows-EZ9Am","row":"ui-row-se56N","row__text":"ui-row__text-TD4iS","table":"ui-table-L328g","table__row":"ui-table__row-rSJTK"};
|
|
7
|
+
const n = ({ width: r, height: a, variant: s = "block", lines: o = 1, className: l }) => {
|
|
8
|
+
const h = {
|
|
9
|
+
width: f(r) ? `${r}px` : r,
|
|
10
|
+
height: f(a) ? `${a}px` : a
|
|
11
|
+
};
|
|
12
|
+
return s === "text" && o > 1 ? /* @__PURE__ */ e("span", { className: i(t.group, l), "aria-hidden": !0, children: Array.from({ length: o }, (p, x) => /* @__PURE__ */ e(
|
|
13
|
+
"span",
|
|
14
|
+
{
|
|
15
|
+
className: i(t.skeleton, t["skeleton--text"]),
|
|
16
|
+
style: x === o - 1 ? { width: "60%" } : void 0
|
|
17
|
+
},
|
|
18
|
+
x
|
|
19
|
+
)) }) : /* @__PURE__ */ e(
|
|
20
|
+
"span",
|
|
21
|
+
{
|
|
22
|
+
className: i(t.skeleton, t[`skeleton--${s}`], l),
|
|
23
|
+
style: h,
|
|
24
|
+
"aria-hidden": !0
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
}, A = /* @__PURE__ */ c(n), _ = ({ count: r = 1, className: a }) => /* @__PURE__ */ e(v, { children: Array.from({ length: r }, (s, o) => /* @__PURE__ */ d("div", { className: i(t.card, a), "aria-hidden": !0, children: [
|
|
28
|
+
/* @__PURE__ */ e(n, { className: t.card__media }),
|
|
29
|
+
/* @__PURE__ */ d("div", { className: t.card__body, children: [
|
|
30
|
+
/* @__PURE__ */ e(n, { variant: "text", width: "70%" }),
|
|
31
|
+
/* @__PURE__ */ e(n, { variant: "text", width: "40%" })
|
|
32
|
+
] })
|
|
33
|
+
] }, o)) }), k = ({ count: r = 3, className: a }) => /* @__PURE__ */ e("div", { className: i(t.rows, a), "aria-hidden": !0, children: Array.from({ length: r }, (s, o) => /* @__PURE__ */ d("div", { className: t.row, children: [
|
|
34
|
+
/* @__PURE__ */ e(n, { variant: "circle", width: 36, height: 36 }),
|
|
35
|
+
/* @__PURE__ */ d("div", { className: t.row__text, children: [
|
|
36
|
+
/* @__PURE__ */ e(n, { variant: "text", width: "45%" }),
|
|
37
|
+
/* @__PURE__ */ e(n, { variant: "text", width: "25%" })
|
|
38
|
+
] })
|
|
39
|
+
] }, o)) }), w = ({
|
|
40
|
+
count: r = 5,
|
|
41
|
+
columns: a = 4,
|
|
42
|
+
className: s
|
|
43
|
+
}) => /* @__PURE__ */ e("div", { className: i(t.table, s), "aria-hidden": !0, children: Array.from({ length: r }, (o, l) => /* @__PURE__ */ e("div", { className: t.table__row, children: Array.from({ length: a }, (h, p) => /* @__PURE__ */ e(n, { variant: "text" }, p)) }, l)) }), C = /* @__PURE__ */ m(/* @__PURE__ */ c(_), "SkeletonCard"), R = /* @__PURE__ */ m(/* @__PURE__ */ c(k), "SkeletonRows"), T = /* @__PURE__ */ m(/* @__PURE__ */ c(w), "SkeletonTable");
|
|
44
|
+
export {
|
|
45
|
+
C as SkeletonCard,
|
|
46
|
+
R as SkeletonRows,
|
|
47
|
+
T as SkeletonTable,
|
|
48
|
+
A as default
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Skeleton/index.tsx"],"sourcesContent":["import { type CSSProperties, type FC, memo } from 'react';\n\nimport { isNumber } from '@handijit/utils';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n /** Genişlik: sayı px, dize doğrudan CSS değeri. */\n width?: number | string;\n height?: number | string;\n /** Metin satırı görünümü: yuvarlatılmış, satır yüksekliğinde. */\n variant?: 'block' | 'text' | 'circle';\n /** Kaç satır çizilecek (`text` için). */\n lines?: number;\n className?: string;\n};\n\n/** Yükleme iskeleti. */\nconst Skeleton: FC<Props> = ({ width, height, variant = 'block', lines = 1, className }) => {\n const style: CSSProperties = {\n width: isNumber(width) ? `${width}px` : width,\n height: isNumber(height) ? `${height}px` : height,\n };\n\n if (variant === 'text' && lines > 1)\n return (\n <span className={cx(styles.group, className)} aria-hidden>\n {Array.from({ length: lines }, (_, index) => (\n <span\n key={index}\n className={cx(styles.skeleton, styles['skeleton--text'])}\n // Son satır kısa: gerçek paragraflar tam genişlikte bitmez.\n style={index === lines - 1 ? { width: '60%' } : undefined}\n />\n ))}\n </span>\n );\n\n return (\n <span\n className={cx(styles.skeleton, styles[`skeleton--${variant}`], className)}\n style={style}\n aria-hidden\n />\n );\n};\n\nexport default /*#__PURE__*/ memo(Skeleton) as typeof Skeleton;\n\ntype ShapeProps = {\n /** Kaç kopya çizilecek — bir listenin bilinen satır sayısı. */\n count?: number;\n className?: string;\n};\n\n/** KART iskeleti — `Card` + `CardMedia` + iki satır metnin ölçüsü. */\nconst CardShape: FC<ShapeProps> = ({ count = 1, className }) => (\n <>\n {Array.from({ length: count }, (_, index) => (\n <div key={index} className={cx(styles.card, className)} aria-hidden>\n <Skeleton className={styles.card__media} />\n <div className={styles.card__body}>\n <Skeleton variant=\"text\" width=\"70%\" />\n <Skeleton variant=\"text\" width=\"40%\" />\n </div>\n </div>\n ))}\n </>\n);\n\n/** SATIR iskeleti — avatar + iki metin satırı; liste satırlarının ölçüsü. */\nconst RowShape: FC<ShapeProps> = ({ count = 3, className }) => (\n <div className={cx(styles.rows, className)} aria-hidden>\n {Array.from({ length: count }, (_, index) => (\n <div key={index} className={styles.row}>\n <Skeleton variant=\"circle\" width={36} height={36} />\n <div className={styles.row__text}>\n <Skeleton variant=\"text\" width=\"45%\" />\n <Skeleton variant=\"text\" width=\"25%\" />\n </div>\n </div>\n ))}\n </div>\n);\n\n/** TABLO iskeleti — `DataTable`ın satır yüksekliğinde. */\nconst TableShape: FC<ShapeProps & { columns?: number }> = ({\n count = 5,\n columns = 4,\n className,\n}) => (\n <div className={cx(styles.table, className)} aria-hidden>\n {Array.from({ length: count }, (_, rowIndex) => (\n <div key={rowIndex} className={styles.table__row}>\n {Array.from({ length: columns }, (_, columnIndex) => (\n <Skeleton key={columnIndex} variant=\"text\" />\n ))}\n </div>\n ))}\n </div>\n);\n\nexport const SkeletonCard = /*#__PURE__*/ named(/*#__PURE__*/ memo(CardShape), 'SkeletonCard');\nexport const SkeletonRows = /*#__PURE__*/ named(/*#__PURE__*/ memo(RowShape), 'SkeletonRows');\nexport const SkeletonTable = /*#__PURE__*/ named(/*#__PURE__*/ memo(TableShape), 'SkeletonTable');\n"],"names":["Skeleton","width","height","variant","lines","className","style","isNumber","cx","styles","_","index","jsx","CardShape","count","Fragment","jsxs","RowShape","TableShape","columns","rowIndex","columnIndex","SkeletonCard","named","memo","SkeletonRows","SkeletonTable"],"mappings":";;;;;;AAqBA,MAAMA,IAAsB,CAAC,EAAE,OAAAC,GAAO,QAAAC,GAAQ,SAAAC,IAAU,SAAS,OAAAC,IAAQ,GAAG,WAAAC,QAAgB;AAC1F,QAAMC,IAAuB;AAAA,IAC3B,OAAOC,EAASN,CAAK,IAAI,GAAGA,CAAK,OAAOA;AAAA,IACxC,QAAQM,EAASL,CAAM,IAAI,GAAGA,CAAM,OAAOA;AAAA,EAAA;AAG7C,SAAIC,MAAY,UAAUC,IAAQ,sBAE7B,QAAA,EAAK,WAAWI,EAAGC,EAAO,OAAOJ,CAAS,GAAG,eAAW,IACtD,UAAA,MAAM,KAAK,EAAE,QAAQD,KAAS,CAACM,GAAGC,MACjC,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,WAAWJ,EAAGC,EAAO,UAAUA,EAAO,gBAAgB,CAAC;AAAA,MAEvD,OAAOE,MAAUP,IAAQ,IAAI,EAAE,OAAO,UAAU;AAAA,IAAA;AAAA,IAH3CO;AAAA,EAAA,CAKR,GACH,IAIF,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWJ,EAAGC,EAAO,UAAUA,EAAO,aAAaN,CAAO,EAAE,GAAGE,CAAS;AAAA,MACxE,OAAAC;AAAA,MACA,eAAW;AAAA,IAAA;AAAA,EAAA;AAGjB,GAEAK,sBAAkCX,CAAQ,GASpCa,IAA4B,CAAC,EAAE,OAAAC,IAAQ,GAAG,WAAAT,EAAA,MAC9C,gBAAAO,EAAAG,GAAA,EACG,UAAA,MAAM,KAAK,EAAE,QAAQD,EAAA,GAAS,CAACJ,GAAGC,MACjC,gBAAAK,EAAC,OAAA,EAAgB,WAAWR,EAAGC,EAAO,MAAMJ,CAAS,GAAG,eAAW,IACjE,UAAA;AAAA,EAAA,gBAAAO,EAACZ,GAAA,EAAS,WAAWS,EAAO,YAAA,CAAa;AAAA,EACzC,gBAAAO,EAAC,OAAA,EAAI,WAAWP,EAAO,YACrB,UAAA;AAAA,IAAA,gBAAAG,EAACZ,GAAA,EAAS,SAAQ,QAAO,OAAM,OAAM;AAAA,IACrC,gBAAAY,EAACZ,GAAA,EAAS,SAAQ,QAAO,OAAM,MAAA,CAAM;AAAA,EAAA,EAAA,CACvC;AAAA,KALQW,CAMV,CACD,GACH,GAIIM,IAA2B,CAAC,EAAE,OAAAH,IAAQ,GAAG,WAAAT,EAAA,MAC7C,gBAAAO,EAAC,OAAA,EAAI,WAAWJ,EAAGC,EAAO,MAAMJ,CAAS,GAAG,eAAW,IACpD,UAAA,MAAM,KAAK,EAAE,QAAQS,EAAA,GAAS,CAACJ,GAAGC,MACjC,gBAAAK,EAAC,OAAA,EAAgB,WAAWP,EAAO,KACjC,UAAA;AAAA,EAAA,gBAAAG,EAACZ,KAAS,SAAQ,UAAS,OAAO,IAAI,QAAQ,IAAI;AAAA,EAClD,gBAAAgB,EAAC,OAAA,EAAI,WAAWP,EAAO,WACrB,UAAA;AAAA,IAAA,gBAAAG,EAACZ,GAAA,EAAS,SAAQ,QAAO,OAAM,OAAM;AAAA,IACrC,gBAAAY,EAACZ,GAAA,EAAS,SAAQ,QAAO,OAAM,MAAA,CAAM;AAAA,EAAA,EAAA,CACvC;AAAA,KALQW,CAMV,CACD,GACH,GAIIO,IAAoD,CAAC;AAAA,EACzD,OAAAJ,IAAQ;AAAA,EACR,SAAAK,IAAU;AAAA,EACV,WAAAd;AACF,wBACG,OAAA,EAAI,WAAWG,EAAGC,EAAO,OAAOJ,CAAS,GAAG,eAAW,IACrD,UAAA,MAAM,KAAK,EAAE,QAAQS,EAAA,GAAS,CAACJ,GAAGU,MACjC,gBAAAR,EAAC,OAAA,EAAmB,WAAWH,EAAO,YACnC,UAAA,MAAM,KAAK,EAAE,QAAQU,EAAA,GAAW,CAACT,GAAGW,MACnC,gBAAAT,EAACZ,GAAA,EAA2B,SAAQ,OAAA,GAArBqB,CAA4B,CAC5C,EAAA,GAHOD,CAIV,CACD,GACH,GAGWE,IAA6B,gBAAAC,EAAoB,gBAAAC,EAAKX,CAAS,GAAG,cAAc,GAChFY,IAA6B,gBAAAF,EAAoB,gBAAAC,EAAKP,CAAQ,GAAG,cAAc,GAC/ES,IAA8B,gBAAAH,EAAoB,gBAAAC,EAAKN,CAAU,GAAG,eAAe;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-skeleton-n92if{background:linear-gradient(90deg,var(--hd-bg-disabled) 0%,var(--hd-border) 50%,var(--hd-bg-disabled) 100%);background-size:200% 100%;animation:var(--ui-anim-shimmer) 1.4s ease-in-out infinite;border-radius:var(--hd-radius-xs)}@media (prefers-reduced-motion: reduce){.ui-skeleton-n92if{animation:none}}.ui-skeleton-n92if{display:block}.ui-skeleton--block-tOZ-a{width:100%;height:100%}.ui-skeleton--text-k-ROi{height:1em;border-radius:var(--hd-radius-xs)}.ui-skeleton--circle-x-mX3{border-radius:var(--hd-radius-pill);aspect-ratio:1}.ui-group-YMfwa{display:flex;flex-direction:column;gap:var(--hd-space-2)}.ui-card-XQs-Q{border:1px solid var(--hd-border);border-radius:var(--hd-radius-md);background-color:var(--hd-bg-surface);overflow:hidden}.ui-card__media-YLJDv{aspect-ratio:1.4;width:100%;height:auto;border-radius:0}.ui-card__body-msRvB{display:flex;flex-direction:column;gap:var(--hd-space-2);padding:var(--hd-space-3)}.ui-rows-EZ9Am{display:flex;flex-direction:column;gap:var(--hd-space-3)}.ui-row-se56N{display:flex;align-items:center;gap:var(--hd-space-3)}.ui-row__text-TD4iS{display:flex;flex-direction:column;gap:var(--hd-space-1);flex:1;min-width:0}.ui-table-L328g{display:flex;flex-direction:column;gap:var(--hd-space-3);padding:var(--hd-space-3);border:1px solid var(--hd-border);border-radius:var(--hd-radius-md);background-color:var(--hd-bg-surface)}.ui-table__row-rSJTK{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:var(--hd-space-3);align-items:center;min-height:40px}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),i=require("react"),u=require("../../helpers/class-name.helper.cjs"),a=require("../../helpers/label.helper.cjs"),c=require("../../theme/context.cjs"),n={default:{"spinner":"ui-spinner-7pXwf","spinner__label":"ui-spinner__label-sZvSq","spinner--sm":"ui-spinner--sm-uI0wH","spinner--md":"ui-spinner--md--VmFK","spinner--lg":"ui-spinner--lg-K9k-Z"}},o=({size:s="md",label:t,className:l})=>{const{labels:e}=c.useUi();return r.jsx("span",{className:u.cx(n.default.spinner,n.default[`spinner--${s}`],l),role:"status",children:r.jsx("span",{className:n.default.spinner__label,children:t??a.resolveLabel("Spinner.label",e==null?void 0:e.loading)})})},d=i.memo(o);exports.default=d;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Spinner/index.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, memo } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n size?: 'sm' | 'md' | 'lg';\n /** Ekran okuyucuya okunacak metin; görsel olarak gizli. */\n label?: string;\n className?: string;\n};\n\n/** Yükleme göstergesi. */\nconst Spinner: FC<Props> = ({ size = 'md', label, className }) => {\n const { labels } = useUi();\n\n return (\n <span className={cx(styles.spinner, styles[`spinner--${size}`], className)} role=\"status\">\n <span className={styles.spinner__label}>\n {label ?? resolveLabel('Spinner.label', labels?.loading)}\n </span>\n </span>\n );\n};\n\nexport default /*#__PURE__*/ memo(Spinner) as typeof Spinner;\n"],"names":["Spinner","size","label","className","labels","useUi","jsx","cx","styles","resolveLabel"],"mappings":"wVAiBMA,EAAqB,CAAC,CAAE,KAAAC,EAAO,KAAM,MAAAC,EAAO,UAAAC,KAAgB,CAChE,KAAM,CAAE,OAAAC,CAAA,EAAWC,QAAA,EAEnB,OACEC,EAAAA,IAAC,OAAA,CAAK,UAAWC,EAAAA,GAAGC,EAAAA,QAAO,QAASA,EAAAA,QAAO,YAAYP,CAAI,EAAE,EAAGE,CAAS,EAAG,KAAK,SAC/E,SAAAG,EAAAA,IAAC,OAAA,CAAK,UAAWE,EAAAA,QAAO,eACrB,SAAAN,GAASO,EAAAA,aAAa,gBAAiBL,GAAA,YAAAA,EAAQ,OAAO,CAAA,CACzD,CAAA,CACF,CAEJ,EAEAJ,SAAkCA,CAAO"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
type Props = {
|
|
3
|
+
size?: 'sm' | 'md' | 'lg';
|
|
4
|
+
/** Ekran okuyucuya okunacak metin; görsel olarak gizli. */
|
|
5
|
+
label?: string;
|
|
6
|
+
className?: string;
|
|
7
|
+
};
|
|
8
|
+
/** Yükleme göstergesi. */
|
|
9
|
+
declare const Spinner: FC<Props>;
|
|
10
|
+
declare const _default: typeof Spinner;
|
|
11
|
+
export default _default;
|