@handijit/ui 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +872 -2
- package/build/base.css +1 -0
- package/build/charts.cjs +2 -0
- package/build/charts.cjs.map +1 -0
- package/build/charts.css +1 -0
- package/build/charts.js +1865 -0
- package/build/charts.js.map +1 -0
- package/build/chat.cjs +4 -0
- package/build/chat.cjs.map +1 -0
- package/build/chat.css +1 -0
- package/build/chat.js +1120 -0
- package/build/chat.js.map +1 -0
- package/build/components/Accordion/index.cjs +2 -0
- package/build/components/Accordion/index.cjs.map +1 -0
- package/build/components/Accordion/index.d.ts +29 -0
- package/build/components/Accordion/index.js +42 -0
- package/build/components/Accordion/index.js.map +1 -0
- package/build/components/Accordion/style.css +1 -0
- package/build/components/Alert/index.cjs +2 -0
- package/build/components/Alert/index.cjs.map +1 -0
- package/build/components/Alert/index.d.ts +15 -0
- package/build/components/Alert/index.js +30 -0
- package/build/components/Alert/index.js.map +1 -0
- package/build/components/Alert/style.css +1 -0
- package/build/components/Avatar/index.cjs +2 -0
- package/build/components/Avatar/index.cjs.map +1 -0
- package/build/components/Avatar/index.d.ts +26 -0
- package/build/components/Avatar/index.js +57 -0
- package/build/components/Avatar/index.js.map +1 -0
- package/build/components/Avatar/style.css +1 -0
- package/build/components/Badge/index.cjs +2 -0
- package/build/components/Badge/index.cjs.map +1 -0
- package/build/components/Badge/index.d.ts +26 -0
- package/build/components/Badge/index.js +26 -0
- package/build/components/Badge/index.js.map +1 -0
- package/build/components/Badge/style.css +1 -0
- package/build/components/BottomSheet/index.cjs +2 -0
- package/build/components/BottomSheet/index.cjs.map +1 -0
- package/build/components/BottomSheet/index.d.ts +21 -0
- package/build/components/BottomSheet/index.js +85 -0
- package/build/components/BottomSheet/index.js.map +1 -0
- package/build/components/BottomSheet/style.css +1 -0
- package/build/components/Breadcrumb/index.cjs +2 -0
- package/build/components/Breadcrumb/index.cjs.map +1 -0
- package/build/components/Breadcrumb/index.d.ts +20 -0
- package/build/components/Breadcrumb/index.js +31 -0
- package/build/components/Breadcrumb/index.js.map +1 -0
- package/build/components/Breadcrumb/style.css +1 -0
- package/build/components/Button/index.cjs +2 -0
- package/build/components/Button/index.cjs.map +1 -0
- package/build/components/Button/index.d.ts +32 -0
- package/build/components/Button/index.js +88 -0
- package/build/components/Button/index.js.map +1 -0
- package/build/components/Button/style.css +1 -0
- package/build/components/Card/index.cjs +2 -0
- package/build/components/Card/index.cjs.map +1 -0
- package/build/components/Card/index.d.ts +51 -0
- package/build/components/Card/index.js +58 -0
- package/build/components/Card/index.js.map +1 -0
- package/build/components/Card/style.css +1 -0
- package/build/components/Carousel/index.cjs +2 -0
- package/build/components/Carousel/index.cjs.map +1 -0
- package/build/components/Carousel/index.d.ts +24 -0
- package/build/components/Carousel/index.js +111 -0
- package/build/components/Carousel/index.js.map +1 -0
- package/build/components/Carousel/style.css +1 -0
- package/build/components/Checkbox/index.cjs +2 -0
- package/build/components/Checkbox/index.cjs.map +1 -0
- package/build/components/Checkbox/index.d.ts +10 -0
- package/build/components/Checkbox/index.js +33 -0
- package/build/components/Checkbox/index.js.map +1 -0
- package/build/components/Checkbox/style.css +1 -0
- package/build/components/Chip/index.cjs +2 -0
- package/build/components/Chip/index.cjs.map +1 -0
- package/build/components/Chip/index.d.ts +27 -0
- package/build/components/Chip/index.js +67 -0
- package/build/components/Chip/index.js.map +1 -0
- package/build/components/Chip/style.css +1 -0
- package/build/components/ChipGroup/index.cjs +2 -0
- package/build/components/ChipGroup/index.cjs.map +1 -0
- package/build/components/ChipGroup/index.d.ts +34 -0
- package/build/components/ChipGroup/index.js +64 -0
- package/build/components/ChipGroup/index.js.map +1 -0
- package/build/components/ChipGroup/style.css +1 -0
- package/build/components/CodeBadge/index.cjs +2 -0
- package/build/components/CodeBadge/index.cjs.map +1 -0
- package/build/components/CodeBadge/index.d.ts +36 -0
- package/build/components/CodeBadge/index.js +62 -0
- package/build/components/CodeBadge/index.js.map +1 -0
- package/build/components/CodeBadge/style.css +1 -0
- package/build/components/Combobox/index.cjs +2 -0
- package/build/components/Combobox/index.cjs.map +1 -0
- package/build/components/Combobox/index.d.ts +6 -0
- package/build/components/Combobox/index.js +302 -0
- package/build/components/Combobox/index.js.map +1 -0
- package/build/components/Combobox/style.css +1 -0
- package/build/components/CommandPalette/index.cjs +2 -0
- package/build/components/CommandPalette/index.cjs.map +1 -0
- package/build/components/CommandPalette/index.d.ts +37 -0
- package/build/components/CommandPalette/index.js +181 -0
- package/build/components/CommandPalette/index.js.map +1 -0
- package/build/components/CommandPalette/style.css +1 -0
- package/build/components/ConfirmDialog/index.cjs +2 -0
- package/build/components/ConfirmDialog/index.cjs.map +1 -0
- package/build/components/ConfirmDialog/index.d.ts +34 -0
- package/build/components/ConfirmDialog/index.js +85 -0
- package/build/components/ConfirmDialog/index.js.map +1 -0
- package/build/components/CopyField/index.cjs +2 -0
- package/build/components/CopyField/index.cjs.map +1 -0
- package/build/components/CopyField/index.d.ts +20 -0
- package/build/components/CopyField/index.js +44 -0
- package/build/components/CopyField/index.js.map +1 -0
- package/build/components/CopyField/style.css +1 -0
- package/build/components/DataTable/index.cjs +2 -0
- package/build/components/DataTable/index.cjs.map +1 -0
- package/build/components/DataTable/index.d.ts +60 -0
- package/build/components/DataTable/index.js +109 -0
- package/build/components/DataTable/index.js.map +1 -0
- package/build/components/DataTable/style.css +1 -0
- package/build/components/DateField/index.cjs +2 -0
- package/build/components/DateField/index.cjs.map +1 -0
- package/build/components/DateField/index.d.ts +44 -0
- package/build/components/DateField/index.js +79 -0
- package/build/components/DateField/index.js.map +1 -0
- package/build/components/DateField/style.css +1 -0
- package/build/components/Directory/index.cjs +2 -0
- package/build/components/Directory/index.cjs.map +1 -0
- package/build/components/Directory/index.d.ts +51 -0
- package/build/components/Directory/index.js +46 -0
- package/build/components/Directory/index.js.map +1 -0
- package/build/components/Directory/style.css +1 -0
- package/build/components/Disclosure/index.cjs +2 -0
- package/build/components/Disclosure/index.cjs.map +1 -0
- package/build/components/Disclosure/index.d.ts +34 -0
- package/build/components/Disclosure/index.js +64 -0
- package/build/components/Disclosure/index.js.map +1 -0
- package/build/components/Disclosure/style.css +1 -0
- package/build/components/Divider/index.cjs +2 -0
- package/build/components/Divider/index.cjs.map +1 -0
- package/build/components/Divider/index.d.ts +10 -0
- package/build/components/Divider/index.js +24 -0
- package/build/components/Divider/index.js.map +1 -0
- package/build/components/Divider/style.css +1 -0
- package/build/components/Drawer/index.cjs +2 -0
- package/build/components/Drawer/index.cjs.map +1 -0
- package/build/components/Drawer/index.d.ts +22 -0
- package/build/components/Drawer/index.js +88 -0
- package/build/components/Drawer/index.js.map +1 -0
- package/build/components/Drawer/style.css +1 -0
- package/build/components/EmptyState/index.cjs +2 -0
- package/build/components/EmptyState/index.cjs.map +1 -0
- package/build/components/EmptyState/index.d.ts +19 -0
- package/build/components/EmptyState/index.js +35 -0
- package/build/components/EmptyState/index.js.map +1 -0
- package/build/components/EmptyState/style.css +1 -0
- package/build/components/Field/index.cjs +2 -0
- package/build/components/Field/index.cjs.map +1 -0
- package/build/components/Field/index.d.ts +31 -0
- package/build/components/Field/index.js +52 -0
- package/build/components/Field/index.js.map +1 -0
- package/build/components/Field/style.css +1 -0
- package/build/components/FileUpload/index.cjs +2 -0
- package/build/components/FileUpload/index.cjs.map +1 -0
- package/build/components/FileUpload/index.d.ts +42 -0
- package/build/components/FileUpload/index.js +145 -0
- package/build/components/FileUpload/index.js.map +1 -0
- package/build/components/FileUpload/style.css +1 -0
- package/build/components/FilterBar/index.cjs +2 -0
- package/build/components/FilterBar/index.cjs.map +1 -0
- package/build/components/FilterBar/index.d.ts +28 -0
- package/build/components/FilterBar/index.js +35 -0
- package/build/components/FilterBar/index.js.map +1 -0
- package/build/components/FilterBar/style.css +1 -0
- package/build/components/IconButton/index.cjs +2 -0
- package/build/components/IconButton/index.cjs.map +1 -0
- package/build/components/IconButton/index.d.ts +22 -0
- package/build/components/IconButton/index.js +61 -0
- package/build/components/IconButton/index.js.map +1 -0
- package/build/components/IconButton/style.css +1 -0
- package/build/components/Input/index.cjs +2 -0
- package/build/components/Input/index.cjs.map +1 -0
- package/build/components/Input/index.d.ts +15 -0
- package/build/components/Input/index.js +52 -0
- package/build/components/Input/index.js.map +1 -0
- package/build/components/Input/style.css +1 -0
- package/build/components/Kbd/index.cjs +2 -0
- package/build/components/Kbd/index.cjs.map +1 -0
- package/build/components/Kbd/index.d.ts +12 -0
- package/build/components/Kbd/index.js +13 -0
- package/build/components/Kbd/index.js.map +1 -0
- package/build/components/Kbd/style.css +1 -0
- package/build/components/Link/index.cjs +2 -0
- package/build/components/Link/index.cjs.map +1 -0
- package/build/components/Link/index.d.ts +5 -0
- package/build/components/Link/index.js +11 -0
- package/build/components/Link/index.js.map +1 -0
- package/build/components/Menu/index.cjs +2 -0
- package/build/components/Menu/index.cjs.map +1 -0
- package/build/components/Menu/index.d.ts +46 -0
- package/build/components/Menu/index.js +241 -0
- package/build/components/Menu/index.js.map +1 -0
- package/build/components/Menu/style.css +1 -0
- package/build/components/Modal/index.cjs +2 -0
- package/build/components/Modal/index.cjs.map +1 -0
- package/build/components/Modal/index.d.ts +28 -0
- package/build/components/Modal/index.js +92 -0
- package/build/components/Modal/index.js.map +1 -0
- package/build/components/Modal/style.css +1 -0
- package/build/components/PageHeader/index.cjs +2 -0
- package/build/components/PageHeader/index.cjs.map +1 -0
- package/build/components/PageHeader/index.d.ts +24 -0
- package/build/components/PageHeader/index.js +34 -0
- package/build/components/PageHeader/index.js.map +1 -0
- package/build/components/PageHeader/style.css +1 -0
- package/build/components/Pagination/index.cjs +2 -0
- package/build/components/Pagination/index.cjs.map +1 -0
- package/build/components/Pagination/index.d.ts +39 -0
- package/build/components/Pagination/index.js +128 -0
- package/build/components/Pagination/index.js.map +1 -0
- package/build/components/Pagination/style.css +1 -0
- package/build/components/Panel/index.cjs +2 -0
- package/build/components/Panel/index.cjs.map +1 -0
- package/build/components/Panel/index.d.ts +43 -0
- package/build/components/Panel/index.js +55 -0
- package/build/components/Panel/index.js.map +1 -0
- package/build/components/Panel/style.css +1 -0
- package/build/components/PasswordInput/index.cjs +2 -0
- package/build/components/PasswordInput/index.cjs.map +1 -0
- package/build/components/PasswordInput/index.d.ts +14 -0
- package/build/components/PasswordInput/index.js +40 -0
- package/build/components/PasswordInput/index.js.map +1 -0
- package/build/components/PasswordInput/style.css +1 -0
- package/build/components/Popover/index.cjs +2 -0
- package/build/components/Popover/index.cjs.map +1 -0
- package/build/components/Popover/index.d.ts +20 -0
- package/build/components/Popover/index.js +91 -0
- package/build/components/Popover/index.js.map +1 -0
- package/build/components/Popover/style.css +1 -0
- package/build/components/Price/index.cjs +2 -0
- package/build/components/Price/index.cjs.map +1 -0
- package/build/components/Price/index.d.ts +22 -0
- package/build/components/Price/index.js +46 -0
- package/build/components/Price/index.js.map +1 -0
- package/build/components/Price/style.css +1 -0
- package/build/components/Progress/index.cjs +2 -0
- package/build/components/Progress/index.cjs.map +1 -0
- package/build/components/Progress/index.d.ts +49 -0
- package/build/components/Progress/index.js +120 -0
- package/build/components/Progress/index.js.map +1 -0
- package/build/components/Progress/style.css +1 -0
- package/build/components/PromptDialog/index.cjs +2 -0
- package/build/components/PromptDialog/index.cjs.map +1 -0
- package/build/components/PromptDialog/index.d.ts +36 -0
- package/build/components/PromptDialog/index.js +119 -0
- package/build/components/PromptDialog/index.js.map +1 -0
- package/build/components/PromptDialog/style.css +1 -0
- package/build/components/QuantityStepper/index.cjs +2 -0
- package/build/components/QuantityStepper/index.cjs.map +1 -0
- package/build/components/QuantityStepper/index.d.ts +21 -0
- package/build/components/QuantityStepper/index.js +106 -0
- package/build/components/QuantityStepper/index.js.map +1 -0
- package/build/components/QuantityStepper/style.css +1 -0
- package/build/components/Radio/index.cjs +2 -0
- package/build/components/Radio/index.cjs.map +1 -0
- package/build/components/Radio/index.d.ts +12 -0
- package/build/components/Radio/index.js +35 -0
- package/build/components/Radio/index.js.map +1 -0
- package/build/components/Radio/style.css +1 -0
- package/build/components/RadioCard/index.cjs +2 -0
- package/build/components/RadioCard/index.cjs.map +1 -0
- package/build/components/RadioCard/index.d.ts +16 -0
- package/build/components/RadioCard/index.js +48 -0
- package/build/components/RadioCard/index.js.map +1 -0
- package/build/components/RadioCard/style.css +1 -0
- package/build/components/RangeSlider/index.cjs +2 -0
- package/build/components/RangeSlider/index.cjs.map +1 -0
- package/build/components/RangeSlider/index.d.ts +26 -0
- package/build/components/RangeSlider/index.js +102 -0
- package/build/components/RangeSlider/index.js.map +1 -0
- package/build/components/RangeSlider/style.css +1 -0
- package/build/components/Rating/index.cjs +2 -0
- package/build/components/Rating/index.cjs.map +1 -0
- package/build/components/Rating/index.d.ts +16 -0
- package/build/components/Rating/index.js +29 -0
- package/build/components/Rating/index.js.map +1 -0
- package/build/components/Rating/style.css +1 -0
- package/build/components/RatingInput/index.cjs +2 -0
- package/build/components/RatingInput/index.cjs.map +1 -0
- package/build/components/RatingInput/index.d.ts +21 -0
- package/build/components/RatingInput/index.js +75 -0
- package/build/components/RatingInput/index.js.map +1 -0
- package/build/components/RatingInput/style.css +1 -0
- package/build/components/ScrollArea/index.cjs +2 -0
- package/build/components/ScrollArea/index.cjs.map +1 -0
- package/build/components/ScrollArea/index.d.ts +23 -0
- package/build/components/ScrollArea/index.js +65 -0
- package/build/components/ScrollArea/index.js.map +1 -0
- package/build/components/ScrollArea/style.css +1 -0
- package/build/components/SectionHeader/index.cjs +2 -0
- package/build/components/SectionHeader/index.cjs.map +1 -0
- package/build/components/SectionHeader/index.d.ts +17 -0
- package/build/components/SectionHeader/index.js +25 -0
- package/build/components/SectionHeader/index.js.map +1 -0
- package/build/components/SectionHeader/style.css +1 -0
- package/build/components/SegmentedControl/index.cjs +2 -0
- package/build/components/SegmentedControl/index.cjs.map +1 -0
- package/build/components/SegmentedControl/index.d.ts +24 -0
- package/build/components/SegmentedControl/index.js +69 -0
- package/build/components/SegmentedControl/index.js.map +1 -0
- package/build/components/SegmentedControl/style.css +1 -0
- package/build/components/Select/index.cjs +2 -0
- package/build/components/Select/index.cjs.map +1 -0
- package/build/components/Select/index.d.ts +39 -0
- package/build/components/Select/index.js +179 -0
- package/build/components/Select/index.js.map +1 -0
- package/build/components/Select/style.css +1 -0
- package/build/components/Skeleton/index.cjs +2 -0
- package/build/components/Skeleton/index.cjs.map +1 -0
- package/build/components/Skeleton/index.d.ts +25 -0
- package/build/components/Skeleton/index.js +50 -0
- package/build/components/Skeleton/index.js.map +1 -0
- package/build/components/Skeleton/style.css +1 -0
- package/build/components/Spinner/index.cjs +2 -0
- package/build/components/Spinner/index.cjs.map +1 -0
- package/build/components/Spinner/index.d.ts +11 -0
- package/build/components/Spinner/index.js +15 -0
- package/build/components/Spinner/index.js.map +1 -0
- package/build/components/Spinner/style.css +1 -0
- package/build/components/Stat/index.cjs +2 -0
- package/build/components/Stat/index.cjs.map +1 -0
- package/build/components/Stat/index.d.ts +34 -0
- package/build/components/Stat/index.js +72 -0
- package/build/components/Stat/index.js.map +1 -0
- package/build/components/Stat/style.css +1 -0
- package/build/components/StatusDot/index.cjs +2 -0
- package/build/components/StatusDot/index.cjs.map +1 -0
- package/build/components/StatusDot/index.d.ts +23 -0
- package/build/components/StatusDot/index.js +23 -0
- package/build/components/StatusDot/index.js.map +1 -0
- package/build/components/StatusDot/style.css +1 -0
- package/build/components/Steps/index.cjs +2 -0
- package/build/components/Steps/index.cjs.map +1 -0
- package/build/components/Steps/index.d.ts +23 -0
- package/build/components/Steps/index.js +69 -0
- package/build/components/Steps/index.js.map +1 -0
- package/build/components/Steps/style.css +1 -0
- package/build/components/SummaryCard/index.cjs +2 -0
- package/build/components/SummaryCard/index.cjs.map +1 -0
- package/build/components/SummaryCard/index.d.ts +24 -0
- package/build/components/SummaryCard/index.js +33 -0
- package/build/components/SummaryCard/index.js.map +1 -0
- package/build/components/SummaryCard/style.css +1 -0
- package/build/components/Switch/index.cjs +2 -0
- package/build/components/Switch/index.cjs.map +1 -0
- package/build/components/Switch/index.d.ts +16 -0
- package/build/components/Switch/index.js +42 -0
- package/build/components/Switch/index.js.map +1 -0
- package/build/components/Switch/style.css +1 -0
- package/build/components/Table/index.cjs +2 -0
- package/build/components/Table/index.cjs.map +1 -0
- package/build/components/Table/index.d.ts +28 -0
- package/build/components/Table/index.js +58 -0
- package/build/components/Table/index.js.map +1 -0
- package/build/components/Table/style.css +1 -0
- package/build/components/TableCheckbox/index.cjs +2 -0
- package/build/components/TableCheckbox/index.cjs.map +1 -0
- package/build/components/TableCheckbox/index.d.ts +15 -0
- package/build/components/TableCheckbox/index.js +31 -0
- package/build/components/TableCheckbox/index.js.map +1 -0
- package/build/components/TableCheckbox/style.css +1 -0
- package/build/components/Tabs/index.cjs +2 -0
- package/build/components/Tabs/index.cjs.map +1 -0
- package/build/components/Tabs/index.d.ts +27 -0
- package/build/components/Tabs/index.js +102 -0
- package/build/components/Tabs/index.js.map +1 -0
- package/build/components/Tabs/style.css +1 -0
- package/build/components/TagInput/index.cjs +2 -0
- package/build/components/TagInput/index.cjs.map +1 -0
- package/build/components/TagInput/index.d.ts +25 -0
- package/build/components/TagInput/index.js +124 -0
- package/build/components/TagInput/index.js.map +1 -0
- package/build/components/TagInput/style.css +1 -0
- package/build/components/TextLink/index.cjs +2 -0
- package/build/components/TextLink/index.cjs.map +1 -0
- package/build/components/TextLink/index.d.ts +16 -0
- package/build/components/TextLink/index.js +32 -0
- package/build/components/TextLink/index.js.map +1 -0
- package/build/components/TextLink/style.css +1 -0
- package/build/components/Textarea/index.cjs +2 -0
- package/build/components/Textarea/index.cjs.map +1 -0
- package/build/components/Textarea/index.d.ts +20 -0
- package/build/components/Textarea/index.js +68 -0
- package/build/components/Textarea/index.js.map +1 -0
- package/build/components/Textarea/style.css +1 -0
- package/build/components/Tile/index.cjs +2 -0
- package/build/components/Tile/index.cjs.map +1 -0
- package/build/components/Tile/index.d.ts +19 -0
- package/build/components/Tile/index.js +24 -0
- package/build/components/Tile/index.js.map +1 -0
- package/build/components/Tile/style.css +1 -0
- package/build/components/Timeline/index.cjs +2 -0
- package/build/components/Timeline/index.cjs.map +1 -0
- package/build/components/Timeline/index.d.ts +24 -0
- package/build/components/Timeline/index.js +56 -0
- package/build/components/Timeline/index.js.map +1 -0
- package/build/components/Timeline/style.css +1 -0
- package/build/components/Toast/index.cjs +2 -0
- package/build/components/Toast/index.cjs.map +1 -0
- package/build/components/Toast/index.d.ts +43 -0
- package/build/components/Toast/index.js +136 -0
- package/build/components/Toast/index.js.map +1 -0
- package/build/components/Toast/style.css +1 -0
- package/build/components/ToastPortal/index.cjs +2 -0
- package/build/components/ToastPortal/index.cjs.map +1 -0
- package/build/components/ToastPortal/index.d.ts +8 -0
- package/build/components/ToastPortal/index.js +15 -0
- package/build/components/ToastPortal/index.js.map +1 -0
- package/build/components/Tooltip/index.cjs +2 -0
- package/build/components/Tooltip/index.cjs.map +1 -0
- package/build/components/Tooltip/index.d.ts +23 -0
- package/build/components/Tooltip/index.js +116 -0
- package/build/components/Tooltip/index.js.map +1 -0
- package/build/components/Tooltip/style.css +1 -0
- package/build/constants/breakpoint.constants.cjs +2 -0
- package/build/constants/breakpoint.constants.cjs.map +1 -0
- package/build/constants/breakpoint.constants.d.ts +8 -0
- package/build/constants/breakpoint.constants.js +9 -0
- package/build/constants/breakpoint.constants.js.map +1 -0
- package/build/constants/combobox.constants.cjs +2 -0
- package/build/constants/combobox.constants.cjs.map +1 -0
- package/build/constants/combobox.constants.d.ts +11 -0
- package/build/constants/combobox.constants.js +7 -0
- package/build/constants/combobox.constants.js.map +1 -0
- package/build/constants/scroll.constants.cjs +2 -0
- package/build/constants/scroll.constants.cjs.map +1 -0
- package/build/constants/scroll.constants.d.ts +7 -0
- package/build/constants/scroll.constants.js +5 -0
- package/build/constants/scroll.constants.js.map +1 -0
- package/build/enums/ui-size.enum.cjs +2 -0
- package/build/enums/ui-size.enum.cjs.map +1 -0
- package/build/enums/ui-size.enum.d.ts +9 -0
- package/build/enums/ui-size.enum.js +5 -0
- package/build/enums/ui-size.enum.js.map +1 -0
- package/build/enums/ui-variant.enum.cjs +2 -0
- package/build/enums/ui-variant.enum.cjs.map +1 -0
- package/build/enums/ui-variant.enum.d.ts +20 -0
- package/build/enums/ui-variant.enum.js +5 -0
- package/build/enums/ui-variant.enum.js.map +1 -0
- package/build/helpers/class-name.helper.cjs +2 -0
- package/build/helpers/class-name.helper.cjs.map +1 -0
- package/build/helpers/class-name.helper.d.ts +3 -0
- package/build/helpers/class-name.helper.js +10 -0
- package/build/helpers/class-name.helper.js.map +1 -0
- package/build/helpers/component.helper.cjs +2 -0
- package/build/helpers/component.helper.cjs.map +1 -0
- package/build/helpers/component.helper.d.ts +13 -0
- package/build/helpers/component.helper.js +5 -0
- package/build/helpers/component.helper.js.map +1 -0
- package/build/helpers/focus.helper.cjs +2 -0
- package/build/helpers/focus.helper.cjs.map +1 -0
- package/build/helpers/focus.helper.d.ts +42 -0
- package/build/helpers/focus.helper.js +65 -0
- package/build/helpers/focus.helper.js.map +1 -0
- package/build/helpers/label.helper.cjs +2 -0
- package/build/helpers/label.helper.cjs.map +1 -0
- package/build/helpers/label.helper.d.ts +11 -0
- package/build/helpers/label.helper.js +11 -0
- package/build/helpers/label.helper.js.map +1 -0
- package/build/helpers/portal.helper.cjs +2 -0
- package/build/helpers/portal.helper.cjs.map +1 -0
- package/build/helpers/portal.helper.d.ts +28 -0
- package/build/helpers/portal.helper.js +36 -0
- package/build/helpers/portal.helper.js.map +1 -0
- package/build/helpers/scroll.helper.cjs +2 -0
- package/build/helpers/scroll.helper.cjs.map +1 -0
- package/build/helpers/scroll.helper.d.ts +8 -0
- package/build/helpers/scroll.helper.js +11 -0
- package/build/helpers/scroll.helper.js.map +1 -0
- package/build/helpers/text.helper.cjs +2 -0
- package/build/helpers/text.helper.cjs.map +1 -0
- package/build/helpers/text.helper.d.ts +5 -0
- package/build/helpers/text.helper.js +6 -0
- package/build/helpers/text.helper.js.map +1 -0
- package/build/helpers/theme.helper.cjs +24 -0
- package/build/helpers/theme.helper.cjs.map +1 -0
- package/build/helpers/theme.helper.d.ts +49 -0
- package/build/helpers/theme.helper.js +75 -0
- package/build/helpers/theme.helper.js.map +1 -0
- package/build/hooks/useAnnounce.cjs +2 -0
- package/build/hooks/useAnnounce.cjs.map +1 -0
- package/build/hooks/useAnnounce.d.ts +4 -0
- package/build/hooks/useAnnounce.js +23 -0
- package/build/hooks/useAnnounce.js.map +1 -0
- package/build/hooks/useAsyncSearch.cjs +2 -0
- package/build/hooks/useAsyncSearch.cjs.map +1 -0
- package/build/hooks/useAsyncSearch.d.ts +11 -0
- package/build/hooks/useAsyncSearch.js +17 -0
- package/build/hooks/useAsyncSearch.js.map +1 -0
- package/build/hooks/useCopyFeedback.cjs +2 -0
- package/build/hooks/useCopyFeedback.cjs.map +1 -0
- package/build/hooks/useCopyFeedback.d.ts +10 -0
- package/build/hooks/useCopyFeedback.js +25 -0
- package/build/hooks/useCopyFeedback.js.map +1 -0
- package/build/hooks/useDismissOnEscape.cjs +2 -0
- package/build/hooks/useDismissOnEscape.cjs.map +1 -0
- package/build/hooks/useDismissOnEscape.d.ts +12 -0
- package/build/hooks/useDismissOnEscape.js +18 -0
- package/build/hooks/useDismissOnEscape.js.map +1 -0
- package/build/hooks/useListboxNavigation.cjs +2 -0
- package/build/hooks/useListboxNavigation.cjs.map +1 -0
- package/build/hooks/useListboxNavigation.d.ts +7 -0
- package/build/hooks/useListboxNavigation.js +53 -0
- package/build/hooks/useListboxNavigation.js.map +1 -0
- package/build/hooks/usePortalSurface.cjs +2 -0
- package/build/hooks/usePortalSurface.cjs.map +1 -0
- package/build/hooks/usePortalSurface.d.ts +25 -0
- package/build/hooks/usePortalSurface.js +19 -0
- package/build/hooks/usePortalSurface.js.map +1 -0
- package/build/hooks/usePositioning.cjs +2 -0
- package/build/hooks/usePositioning.cjs.map +1 -0
- package/build/hooks/usePositioning.d.ts +13 -0
- package/build/hooks/usePositioning.js +74 -0
- package/build/hooks/usePositioning.js.map +1 -0
- package/build/hooks/useScrollLock.cjs +2 -0
- package/build/hooks/useScrollLock.cjs.map +1 -0
- package/build/hooks/useScrollLock.d.ts +2 -0
- package/build/hooks/useScrollLock.js +34 -0
- package/build/hooks/useScrollLock.js.map +1 -0
- package/build/hooks/useSheetViewport.cjs +2 -0
- package/build/hooks/useSheetViewport.cjs.map +1 -0
- package/build/hooks/useSheetViewport.d.ts +6 -0
- package/build/hooks/useSheetViewport.js +29 -0
- package/build/hooks/useSheetViewport.js.map +1 -0
- package/build/hooks/useStickToBottom.cjs +2 -0
- package/build/hooks/useStickToBottom.cjs.map +1 -0
- package/build/hooks/useStickToBottom.d.ts +12 -0
- package/build/hooks/useStickToBottom.js +39 -0
- package/build/hooks/useStickToBottom.js.map +1 -0
- package/build/hooks/useUiTheme.cjs +2 -0
- package/build/hooks/useUiTheme.cjs.map +1 -0
- package/build/hooks/useUiTheme.d.ts +7 -0
- package/build/hooks/useUiTheme.js +36 -0
- package/build/hooks/useUiTheme.js.map +1 -0
- package/build/hooks/useUiTokens.cjs +2 -0
- package/build/hooks/useUiTokens.cjs.map +1 -0
- package/build/hooks/useUiTokens.d.ts +11 -0
- package/build/hooks/useUiTokens.js +39 -0
- package/build/hooks/useUiTokens.js.map +1 -0
- package/build/hooks/useVirtualList.cjs +2 -0
- package/build/hooks/useVirtualList.cjs.map +1 -0
- package/build/hooks/useVirtualList.d.ts +13 -0
- package/build/hooks/useVirtualList.js +41 -0
- package/build/hooks/useVirtualList.js.map +1 -0
- package/build/index.cjs +2 -0
- package/build/index.cjs.map +1 -0
- package/build/index.d.ts +95 -0
- package/build/index.js +207 -0
- package/build/index.js.map +1 -0
- package/build/scss/_colors.generated.scss +119 -0
- package/build/scss/_index.scss +6 -0
- package/build/scss/_metrics.generated.scss +49 -0
- package/build/scss/_mixins.scss +710 -0
- package/build/scss/_variables.scss +51 -0
- package/build/styles/base.d.ts +0 -0
- package/build/styles.css +133 -0
- package/build/theme/UiProvider.cjs +2 -0
- package/build/theme/UiProvider.cjs.map +1 -0
- package/build/theme/UiProvider.d.ts +22 -0
- package/build/theme/UiProvider.js +30 -0
- package/build/theme/UiProvider.js.map +1 -0
- package/build/theme/UiThemeScript.cjs +2 -0
- package/build/theme/UiThemeScript.cjs.map +1 -0
- package/build/theme/UiThemeScript.d.ts +19 -0
- package/build/theme/UiThemeScript.js +8 -0
- package/build/theme/UiThemeScript.js.map +1 -0
- package/build/theme/context.cjs +2 -0
- package/build/theme/context.cjs.map +1 -0
- package/build/theme/context.d.ts +5 -0
- package/build/theme/context.js +8 -0
- package/build/theme/context.js.map +1 -0
- package/build/theme/initUi.cjs +2 -0
- package/build/theme/initUi.cjs.map +1 -0
- package/build/theme/initUi.d.ts +7 -0
- package/build/theme/initUi.js +10 -0
- package/build/theme/initUi.js.map +1 -0
- package/build/theme/palette.cjs +2 -0
- package/build/theme/palette.cjs.map +1 -0
- package/build/theme/palette.d.ts +219 -0
- package/build/theme/palette.js +148 -0
- package/build/theme/palette.js.map +1 -0
- package/build/theme/tokens.cjs +2 -0
- package/build/theme/tokens.cjs.map +1 -0
- package/build/theme/tokens.d.ts +225 -0
- package/build/theme/tokens.js +384 -0
- package/build/theme/tokens.js.map +1 -0
- package/build/types/charts/AreaChart/index.d.ts +14 -0
- package/build/types/charts/BarChart/index.d.ts +16 -0
- package/build/types/charts/BoxPlot/index.d.ts +43 -0
- package/build/types/charts/ComposedChart/index.d.ts +16 -0
- package/build/types/charts/Heatmap/index.d.ts +30 -0
- package/build/types/charts/Histogram/index.d.ts +29 -0
- package/build/types/charts/LineChart/index.d.ts +14 -0
- package/build/types/charts/PieChart/index.d.ts +36 -0
- package/build/types/charts/RadarChart/index.d.ts +40 -0
- package/build/types/charts/ScatterPlot/index.d.ts +41 -0
- package/build/types/charts/core/CartesianChart.d.ts +43 -0
- package/build/types/charts/core/ChartFrame.d.ts +55 -0
- package/build/types/charts/core/axes.d.ts +37 -0
- package/build/types/charts/core/cartesian.d.ts +80 -0
- package/build/types/charts/core/format.d.ts +19 -0
- package/build/types/charts/core/margins.d.ts +9 -0
- package/build/types/charts/core/palette.d.ts +13 -0
- package/build/types/charts/core/path.d.ts +24 -0
- package/build/types/charts/core/scale.d.ts +40 -0
- package/build/types/charts/core/series.d.ts +11 -0
- package/build/types/charts/core/spatial.d.ts +12 -0
- package/build/types/charts/core/stats.d.ts +34 -0
- package/build/types/charts/core/types.d.ts +31 -0
- package/build/types/charts/core/useChartWidth.d.ts +7 -0
- package/build/types/charts/index.d.ts +21 -0
- package/build/types/chat/ActionList/index.d.ts +46 -0
- package/build/types/chat/AppBar/index.d.ts +21 -0
- package/build/types/chat/ChatMessage/index.d.ts +24 -0
- package/build/types/chat/ChatThread/index.d.ts +24 -0
- package/build/types/chat/Citation/index.d.ts +15 -0
- package/build/types/chat/CodeBlock/format.d.ts +7 -0
- package/build/types/chat/CodeBlock/grammars.d.ts +44 -0
- package/build/types/chat/CodeBlock/highlight.d.ts +22 -0
- package/build/types/chat/CodeBlock/index.d.ts +33 -0
- package/build/types/chat/DescriptionList/index.d.ts +16 -0
- package/build/types/chat/Legend/index.d.ts +20 -0
- package/build/types/chat/MessageActions/index.d.ts +21 -0
- package/build/types/chat/PromptInput/index.d.ts +47 -0
- package/build/types/chat/PromptSuggestions/index.d.ts +25 -0
- package/build/types/chat/Prose/index.d.ts +15 -0
- package/build/types/chat/ReasoningBlock/index.d.ts +24 -0
- package/build/types/chat/ReasoningText/index.d.ts +14 -0
- package/build/types/chat/SegmentBar/index.d.ts +46 -0
- package/build/types/chat/SourceList/index.d.ts +25 -0
- package/build/types/chat/TerminalOutput/index.d.ts +25 -0
- package/build/types/chat/ToolCall/index.d.ts +41 -0
- package/build/types/chat/index.d.ts +26 -0
- package/build/types/combobox.type.d.ts +49 -0
- package/build/types/common-element-props.type.d.ts +8 -0
- package/build/types/helpers/class-name.helper.d.ts +3 -0
- package/build/types/helpers/component.helper.d.ts +13 -0
- package/build/types/helpers/label.helper.d.ts +12 -0
- package/build/types/hook.type.d.ts +36 -0
- package/build/types/link.type.d.ts +14 -0
- package/build/types/positioning.type.d.ts +38 -0
- package/build/types/theme/palette.d.ts +219 -0
- package/build/types/theme/tokens.d.ts +225 -0
- package/build/types/theme.type.d.ts +223 -0
- package/build/types/types/common-element-props.type.d.ts +8 -0
- package/build/types/types/link.type.d.ts +14 -0
- package/build/types/types/theme.type.d.ts +223 -0
- package/package.json +487 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-switch-KLH29{display:flex;align-items:flex-start;gap:var(--ui-space-3);cursor:pointer;padding:var(--ui-space-2);margin-inline:calc(-1 * var(--ui-space-2));border-radius:var(--ui-radius-sm);transition:background-color var(--ui-duration-fast) var(--ui-ease-out)}.ui-switch-KLH29:hover{background-color:var(--ui-surface-2)}.ui-switch-KLH29:has(.ui-switch__input-Q2UQ4:focus-visible){outline:var(--ui-ring-width, 2px) solid var(--ui-ring-color);outline-offset:var(--ui-ring-offset, 2px)}@media (prefers-reduced-motion: reduce){.ui-switch-KLH29{transition:none}}.ui-switch--labelFirst-Grirk{flex-direction:row-reverse;justify-content:space-between}.ui-switch-KLH29:has(.ui-switch__input-Q2UQ4:disabled){cursor:not-allowed}.ui-switch-KLH29:has(.ui-switch__input-Q2UQ4:disabled) .ui-switch__label-gPZuO,.ui-switch-KLH29:has(.ui-switch__input-Q2UQ4:disabled) .ui-switch__hint-NRuzC{color:var(--ui-text-3)}@media (forced-colors: active){.ui-switch-KLH29:has(.ui-switch__input-Q2UQ4:disabled) .ui-switch__label-gPZuO,.ui-switch-KLH29:has(.ui-switch__input-Q2UQ4:disabled) .ui-switch__hint-NRuzC{color:GrayText}}.ui-switch-KLH29:has(.ui-switch__input-Q2UQ4:disabled):hover{background-color:transparent}.ui-switch__input-Q2UQ4{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.ui-switch__track-3417m{flex-shrink:0;width:40px;height:24px;border-radius:var(--ui-radius-pill);background-color:var(--ui-action-soft);border:1px solid transparent;transition:background-color var(--ui-duration-fast) var(--ui-ease-out),border-color var(--ui-duration-fast) var(--ui-ease-out);position:relative}.ui-switch__track-3417m:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:max(100%,44px);height:max(100%,44px)}@media (prefers-reduced-motion: reduce){.ui-switch__track-3417m{transition:none}}.ui-switch__thumb-1LHta{position:absolute;top:2px;inset-inline-start:2px;width:18px;height:18px;border-radius:var(--ui-radius-pill);background-color:var(--ui-surface);box-shadow:var(--ui-shadow-sm);transition:translate var(--ui-duration-fast) var(--ui-ease-out)}@media (prefers-reduced-motion: reduce){.ui-switch__thumb-1LHta{transition:none}}.ui-switch__input-Q2UQ4:checked+.ui-switch__track-3417m{background-color:var(--ui-selected)}.ui-switch__input-Q2UQ4:checked+.ui-switch__track-3417m .ui-switch__thumb-1LHta{translate:16px 0}[dir=rtl] .ui-switch__input-Q2UQ4:checked+.ui-switch__track-3417m .ui-switch__thumb-1LHta{translate:-16px 0}.ui-switch__input-Q2UQ4:disabled+.ui-switch__track-3417m{background-color:var(--ui-track);border-color:var(--ui-border)}.ui-switch__input-Q2UQ4:checked:disabled+.ui-switch__track-3417m{border-color:var(--ui-text-3)}@media (forced-colors: active){.ui-switch__track-3417m{border-color:ButtonBorder}.ui-switch__thumb-1LHta{background-color:ButtonText}.ui-switch__input-Q2UQ4:checked+.ui-switch__track-3417m{border-color:Highlight}.ui-switch__input-Q2UQ4:checked+.ui-switch__track-3417m .ui-switch__thumb-1LHta{background-color:Highlight}.ui-switch__input-Q2UQ4:disabled+.ui-switch__track-3417m{border-color:GrayText}.ui-switch__input-Q2UQ4:disabled+.ui-switch__track-3417m .ui-switch__thumb-1LHta{background-color:GrayText}}.ui-switch__text-32uMY{display:flex;flex-direction:column;gap:2px;min-width:0}.ui-switch__label-gPZuO{font-size:var(--ui-font-size-sm);color:var(--ui-text)}.ui-switch__hint-NRuzC{font-size:var(--ui-font-size-xs);color:var(--ui-text-2)}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const b=require("react/jsx-runtime"),l=require("react"),f=require("../../helpers/class-name.helper.cjs"),x=require("../../helpers/component.helper.cjs"),e={default:{"scroller":"ui-scroller-EtDmS","scroller--frame":"ui-scroller--frame-84zz6","table":"ui-table-uCv4q","table--compact":"ui-table--compact-4KCVl","table--regular":"ui-table--regular-hsA3-","table--spacious":"ui-table--spacious-BBUX-","table--sticky-head":"ui-table--sticky-head-FO2L4","table--row-hover":"ui-table--row-hover--MAoe"}},S=x.named(l.memo(({hasFrame:o=!0,label:a,className:c,children:t,...n})=>{const s=l.useRef(null),[u,m]=l.useState(!1);return l.useEffect(()=>{const r=s.current;if(!r||typeof ResizeObserver>"u")return;const d=()=>m(r.scrollWidth>r.clientWidth+1);d();const i=new ResizeObserver(d);i.observe(r);for(const v of r.children)i.observe(v);return()=>i.disconnect()},[t]),b.jsx("div",{ref:s,tabIndex:u?0:void 0,role:u?"region":void 0,"aria-label":u?a:void 0,className:f.cx(e.default.scroller,o&&e.default["scroller--frame"],c),...n,children:t})}),"TableScroller"),h=({density:o="regular",hasStickyHead:a,hasRowHover:c,className:t,children:n,...s})=>b.jsx("table",{className:f.cx(e.default.table,e.default[`table--${o}`],a&&e.default["table--sticky-head"],c&&e.default["table--row-hover"],t),...s,children:n}),p=l.memo(h);exports.TableScroller=S;exports.default=p;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Table/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n type FC,\n type HTMLAttributes,\n memo,\n type TableHTMLAttributes,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\n\nimport styles from './index.module.scss';\n\ntype ScrollerProps = HTMLAttributes<HTMLDivElement> & {\n /** Çerçeve (hairline + yarıçap + yüzey). */\n hasFrame?: boolean;\n /**\n * Kaydırma bölgesinin erişilebilir adı (\"Sipariş kalemleri\").\n * ⚠ ZORUNLU değil ama VERİLMELİ: kutu klavyeyle odaklanabilir bir `region` ve adsız bir bölge\n * ekran okuyucuda yalnızca \"bölge\" diye okunur\n */\n label?: string;\n};\n\n/**\n * Tablo kaydırma kutusu — \"tablo kendi kutusunda kayar, sayfa asla yatay kaymaz\" kuralının tek\n * uygulaması.\n */\nexport const TableScroller: FC<ScrollerProps> = /*#__PURE__*/ named(\n /*#__PURE__*/ memo(({ hasFrame = true, label, className, children, ...rest }) => {\n const ref = useRef<HTMLDivElement>(null);\n const [isScrollable, setIsScrollable] = useState(false);\n\n /*\n * Kutu `overflow: auto` taşıyor ve klavye kullanıcısı odaklanamadığı bir kutuyu KAYDIRAMAZ\n * (WCAG 2.1.1) — o yüzden kaydırılabilirken ikisi de ZORUNLU.\n * ⚠ `tabIndex` + `role` YALNIZCA GERÇEKTEN KAYABİLEN kutuda.\n */\n useEffect(() => {\n const node = ref.current;\n /* `ScrollArea` ile aynı koruma: jsdom `ResizeObserver` sağlamıyor. */\n if (!node || typeof ResizeObserver === 'undefined') return;\n\n const measure = () => setIsScrollable(node.scrollWidth > node.clientWidth + 1);\n\n measure();\n\n /* İçerik DE kutu DA değişebiliyor: ikisi de izleniyor. */\n const observer = new ResizeObserver(measure);\n observer.observe(node);\n for (const child of node.children) observer.observe(child);\n\n return () => observer.disconnect();\n }, [children]);\n\n return (\n <div\n ref={ref}\n tabIndex={isScrollable ? 0 : undefined}\n role={isScrollable ? 'region' : undefined}\n aria-label={isScrollable ? label : undefined}\n className={cx(styles.scroller, hasFrame && styles['scroller--frame'], className)}\n {...rest}\n >\n {children}\n </div>\n );\n }),\n 'TableScroller',\n);\n\ntype Props = TableHTMLAttributes<HTMLTableElement> &\n Partial<{\n /** Hücre dolgusu. */\n density: 'compact' | 'regular' | 'spacious';\n /** Başlık satırı `$surface-2` zeminle kutunun içinde YAPIŞKAN kalır. */\n hasStickyHead: boolean;\n /** Satır hover zemini: çok sütunlu tabloda göz satırını kaybediyor. */\n hasRowHover: boolean;\n }>;\n\n/** Temel tablo — hairline satır ayrımı, `$surface-2` başlık, yoğunluk ölçeği. */\nconst Table: FC<Props> = ({\n density = 'regular',\n hasStickyHead,\n hasRowHover,\n className,\n children,\n ...rest\n}) => (\n <table\n className={cx(\n styles.table,\n styles[`table--${density}`],\n hasStickyHead && styles['table--sticky-head'],\n hasRowHover && styles['table--row-hover'],\n className,\n )}\n {...rest}\n >\n {children}\n </table>\n);\n\nexport default /*#__PURE__*/ memo(Table) as typeof Table;\n"],"names":["TableScroller","named","memo","hasFrame","label","className","children","rest","ref","useRef","isScrollable","setIsScrollable","useState","useEffect","node","measure","observer","child","jsx","cx","styles","Table","density","hasStickyHead","hasRowHover","index"],"mappings":"uTA+BaA,EAAiDC,EAAAA,MAC9CC,OAAK,CAAC,CAAE,SAAAC,EAAW,GAAM,MAAAC,EAAO,UAAAC,EAAW,SAAAC,EAAU,GAAGC,KAAW,CAC/E,MAAMC,EAAMC,EAAAA,OAAuB,IAAI,EACjC,CAACC,EAAcC,CAAe,EAAIC,EAAAA,SAAS,EAAK,EAOtDC,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAON,EAAI,QAEjB,GAAI,CAACM,GAAQ,OAAO,eAAmB,IAAa,OAEpD,MAAMC,EAAU,IAAMJ,EAAgBG,EAAK,YAAcA,EAAK,YAAc,CAAC,EAE7EC,EAAA,EAGA,MAAMC,EAAW,IAAI,eAAeD,CAAO,EAC3CC,EAAS,QAAQF,CAAI,EACrB,UAAWG,KAASH,EAAK,SAAUE,EAAS,QAAQC,CAAK,EAEzD,MAAO,IAAMD,EAAS,WAAA,CACxB,EAAG,CAACV,CAAQ,CAAC,EAGXY,EAAAA,IAAC,MAAA,CACC,IAAAV,EACA,SAAUE,EAAe,EAAI,OAC7B,KAAMA,EAAe,SAAW,OAChC,aAAYA,EAAeN,EAAQ,OACnC,UAAWe,EAAAA,GAAGC,EAAAA,QAAO,SAAUjB,GAAYiB,UAAO,iBAAiB,EAAGf,CAAS,EAC9E,GAAGE,EAEH,SAAAD,CAAA,CAAA,CAGP,CAAC,EACD,eACF,EAaMe,EAAmB,CAAC,CACxB,QAAAC,EAAU,UACV,cAAAC,EACA,YAAAC,EACA,UAAAnB,EACA,SAAAC,EACA,GAAGC,CACL,IACEW,EAAAA,IAAC,QAAA,CACC,UAAWC,EAAAA,GACTC,EAAAA,QAAO,MACPA,EAAAA,QAAO,UAAUE,CAAO,EAAE,EAC1BC,GAAiBH,EAAAA,QAAO,oBAAoB,EAC5CI,GAAeJ,EAAAA,QAAO,kBAAkB,EACxCf,CAAA,EAED,GAAGE,EAEH,SAAAD,CAAA,CACH,EAGFmB,SAAkCJ,CAAK"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { FC, HTMLAttributes, TableHTMLAttributes } from 'react';
|
|
2
|
+
type ScrollerProps = HTMLAttributes<HTMLDivElement> & {
|
|
3
|
+
/** Çerçeve (hairline + yarıçap + yüzey). */
|
|
4
|
+
hasFrame?: boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Kaydırma bölgesinin erişilebilir adı ("Sipariş kalemleri").
|
|
7
|
+
* ⚠ ZORUNLU değil ama VERİLMELİ: kutu klavyeyle odaklanabilir bir `region` ve adsız bir bölge
|
|
8
|
+
* ekran okuyucuda yalnızca "bölge" diye okunur
|
|
9
|
+
*/
|
|
10
|
+
label?: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Tablo kaydırma kutusu — "tablo kendi kutusunda kayar, sayfa asla yatay kaymaz" kuralının tek
|
|
14
|
+
* uygulaması.
|
|
15
|
+
*/
|
|
16
|
+
export declare const TableScroller: FC<ScrollerProps>;
|
|
17
|
+
type Props = TableHTMLAttributes<HTMLTableElement> & Partial<{
|
|
18
|
+
/** Hücre dolgusu. */
|
|
19
|
+
density: 'compact' | 'regular' | 'spacious';
|
|
20
|
+
/** Başlık satırı `$surface-2` zeminle kutunun içinde YAPIŞKAN kalır. */
|
|
21
|
+
hasStickyHead: boolean;
|
|
22
|
+
/** Satır hover zemini: çok sütunlu tabloda göz satırını kaybediyor. */
|
|
23
|
+
hasRowHover: boolean;
|
|
24
|
+
}>;
|
|
25
|
+
/** Temel tablo — hairline satır ayrımı, `$surface-2` başlık, yoğunluk ölçeği. */
|
|
26
|
+
declare const Table: FC<Props>;
|
|
27
|
+
declare const _default: typeof Table;
|
|
28
|
+
export default _default;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as f } from "react/jsx-runtime";
|
|
3
|
+
import { memo as m, useRef as p, useState as h, useEffect as x } from "react";
|
|
4
|
+
import { cx as d } from "../../helpers/class-name.helper.js";
|
|
5
|
+
import { named as S } from "../../helpers/component.helper.js";
|
|
6
|
+
const e = {"scroller":"ui-scroller-EtDmS","scroller--frame":"ui-scroller--frame-84zz6","table":"ui-table-uCv4q","table--compact":"ui-table--compact-4KCVl","table--regular":"ui-table--regular-hsA3-","table--spacious":"ui-table--spacious-BBUX-","table--sticky-head":"ui-table--sticky-head-FO2L4","table--row-hover":"ui-table--row-hover--MAoe"};
|
|
7
|
+
const I = /* @__PURE__ */ S(
|
|
8
|
+
/* @__PURE__ */ m(({ hasFrame: l = !0, label: s, className: a, children: o, ...c }) => {
|
|
9
|
+
const t = p(null), [n, u] = h(!1);
|
|
10
|
+
return x(() => {
|
|
11
|
+
const r = t.current;
|
|
12
|
+
if (!r || typeof ResizeObserver > "u") return;
|
|
13
|
+
const b = () => u(r.scrollWidth > r.clientWidth + 1);
|
|
14
|
+
b();
|
|
15
|
+
const i = new ResizeObserver(b);
|
|
16
|
+
i.observe(r);
|
|
17
|
+
for (const v of r.children) i.observe(v);
|
|
18
|
+
return () => i.disconnect();
|
|
19
|
+
}, [o]), /* @__PURE__ */ f(
|
|
20
|
+
"div",
|
|
21
|
+
{
|
|
22
|
+
ref: t,
|
|
23
|
+
tabIndex: n ? 0 : void 0,
|
|
24
|
+
role: n ? "region" : void 0,
|
|
25
|
+
"aria-label": n ? s : void 0,
|
|
26
|
+
className: d(e.scroller, l && e["scroller--frame"], a),
|
|
27
|
+
...c,
|
|
28
|
+
children: o
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
}),
|
|
32
|
+
"TableScroller"
|
|
33
|
+
), y = ({
|
|
34
|
+
density: l = "regular",
|
|
35
|
+
hasStickyHead: s,
|
|
36
|
+
hasRowHover: a,
|
|
37
|
+
className: o,
|
|
38
|
+
children: c,
|
|
39
|
+
...t
|
|
40
|
+
}) => /* @__PURE__ */ f(
|
|
41
|
+
"table",
|
|
42
|
+
{
|
|
43
|
+
className: d(
|
|
44
|
+
e.table,
|
|
45
|
+
e[`table--${l}`],
|
|
46
|
+
s && e["table--sticky-head"],
|
|
47
|
+
a && e["table--row-hover"],
|
|
48
|
+
o
|
|
49
|
+
),
|
|
50
|
+
...t,
|
|
51
|
+
children: c
|
|
52
|
+
}
|
|
53
|
+
), N = /* @__PURE__ */ m(y);
|
|
54
|
+
export {
|
|
55
|
+
I as TableScroller,
|
|
56
|
+
N as default
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Table/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n type FC,\n type HTMLAttributes,\n memo,\n type TableHTMLAttributes,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\n\nimport styles from './index.module.scss';\n\ntype ScrollerProps = HTMLAttributes<HTMLDivElement> & {\n /** Çerçeve (hairline + yarıçap + yüzey). */\n hasFrame?: boolean;\n /**\n * Kaydırma bölgesinin erişilebilir adı (\"Sipariş kalemleri\").\n * ⚠ ZORUNLU değil ama VERİLMELİ: kutu klavyeyle odaklanabilir bir `region` ve adsız bir bölge\n * ekran okuyucuda yalnızca \"bölge\" diye okunur\n */\n label?: string;\n};\n\n/**\n * Tablo kaydırma kutusu — \"tablo kendi kutusunda kayar, sayfa asla yatay kaymaz\" kuralının tek\n * uygulaması.\n */\nexport const TableScroller: FC<ScrollerProps> = /*#__PURE__*/ named(\n /*#__PURE__*/ memo(({ hasFrame = true, label, className, children, ...rest }) => {\n const ref = useRef<HTMLDivElement>(null);\n const [isScrollable, setIsScrollable] = useState(false);\n\n /*\n * Kutu `overflow: auto` taşıyor ve klavye kullanıcısı odaklanamadığı bir kutuyu KAYDIRAMAZ\n * (WCAG 2.1.1) — o yüzden kaydırılabilirken ikisi de ZORUNLU.\n * ⚠ `tabIndex` + `role` YALNIZCA GERÇEKTEN KAYABİLEN kutuda.\n */\n useEffect(() => {\n const node = ref.current;\n /* `ScrollArea` ile aynı koruma: jsdom `ResizeObserver` sağlamıyor. */\n if (!node || typeof ResizeObserver === 'undefined') return;\n\n const measure = () => setIsScrollable(node.scrollWidth > node.clientWidth + 1);\n\n measure();\n\n /* İçerik DE kutu DA değişebiliyor: ikisi de izleniyor. */\n const observer = new ResizeObserver(measure);\n observer.observe(node);\n for (const child of node.children) observer.observe(child);\n\n return () => observer.disconnect();\n }, [children]);\n\n return (\n <div\n ref={ref}\n tabIndex={isScrollable ? 0 : undefined}\n role={isScrollable ? 'region' : undefined}\n aria-label={isScrollable ? label : undefined}\n className={cx(styles.scroller, hasFrame && styles['scroller--frame'], className)}\n {...rest}\n >\n {children}\n </div>\n );\n }),\n 'TableScroller',\n);\n\ntype Props = TableHTMLAttributes<HTMLTableElement> &\n Partial<{\n /** Hücre dolgusu. */\n density: 'compact' | 'regular' | 'spacious';\n /** Başlık satırı `$surface-2` zeminle kutunun içinde YAPIŞKAN kalır. */\n hasStickyHead: boolean;\n /** Satır hover zemini: çok sütunlu tabloda göz satırını kaybediyor. */\n hasRowHover: boolean;\n }>;\n\n/** Temel tablo — hairline satır ayrımı, `$surface-2` başlık, yoğunluk ölçeği. */\nconst Table: FC<Props> = ({\n density = 'regular',\n hasStickyHead,\n hasRowHover,\n className,\n children,\n ...rest\n}) => (\n <table\n className={cx(\n styles.table,\n styles[`table--${density}`],\n hasStickyHead && styles['table--sticky-head'],\n hasRowHover && styles['table--row-hover'],\n className,\n )}\n {...rest}\n >\n {children}\n </table>\n);\n\nexport default /*#__PURE__*/ memo(Table) as typeof Table;\n"],"names":["TableScroller","named","memo","hasFrame","label","className","children","rest","ref","useRef","isScrollable","setIsScrollable","useState","useEffect","node","measure","observer","child","jsx","cx","styles","Table","density","hasStickyHead","hasRowHover","index"],"mappings":";;;;;;AA+BO,MAAMA,IAAiD,gBAAAC;AAAA,EAC9C,gBAAAC,EAAK,CAAC,EAAE,UAAAC,IAAW,IAAM,OAAAC,GAAO,WAAAC,GAAW,UAAAC,GAAU,GAAGC,QAAW;AAC/E,UAAMC,IAAMC,EAAuB,IAAI,GACjC,CAACC,GAAcC,CAAe,IAAIC,EAAS,EAAK;AAOtD,WAAAC,EAAU,MAAM;AACd,YAAMC,IAAON,EAAI;AAEjB,UAAI,CAACM,KAAQ,OAAO,iBAAmB,IAAa;AAEpD,YAAMC,IAAU,MAAMJ,EAAgBG,EAAK,cAAcA,EAAK,cAAc,CAAC;AAE7E,MAAAC,EAAA;AAGA,YAAMC,IAAW,IAAI,eAAeD,CAAO;AAC3C,MAAAC,EAAS,QAAQF,CAAI;AACrB,iBAAWG,KAASH,EAAK,SAAU,CAAAE,EAAS,QAAQC,CAAK;AAEzD,aAAO,MAAMD,EAAS,WAAA;AAAA,IACxB,GAAG,CAACV,CAAQ,CAAC,GAGX,gBAAAY;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAV;AAAA,QACA,UAAUE,IAAe,IAAI;AAAA,QAC7B,MAAMA,IAAe,WAAW;AAAA,QAChC,cAAYA,IAAeN,IAAQ;AAAA,QACnC,WAAWe,EAAGC,EAAO,UAAUjB,KAAYiB,EAAO,iBAAiB,GAAGf,CAAS;AAAA,QAC9E,GAAGE;AAAA,QAEH,UAAAD;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP,CAAC;AAAA,EACD;AACF,GAaMe,IAAmB,CAAC;AAAA,EACxB,SAAAC,IAAU;AAAA,EACV,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAnB;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,MACE,gBAAAW;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACTC,EAAO;AAAA,MACPA,EAAO,UAAUE,CAAO,EAAE;AAAA,MAC1BC,KAAiBH,EAAO,oBAAoB;AAAA,MAC5CI,KAAeJ,EAAO,kBAAkB;AAAA,MACxCf;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,IAEH,UAAAD;AAAA,EAAA;AACH,GAGFmB,sBAAkCJ,CAAK;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-scroller-EtDmS{position:relative;overflow:auto;min-width:0;align-self:stretch;scrollbar-width:thin;scrollbar-color:var(--ui-border-strong) transparent}.ui-scroller-EtDmS::-webkit-scrollbar{width:8px;height:8px}.ui-scroller-EtDmS::-webkit-scrollbar-track{background:transparent}.ui-scroller-EtDmS::-webkit-scrollbar-thumb{background-color:var(--ui-border-strong);border-radius:var(--ui-radius-pill);border:2px solid transparent;background-clip:content-box}.ui-scroller-EtDmS::-webkit-scrollbar-thumb:hover{background-color:var(--ui-text-3)}.ui-scroller--frame-84zz6{border:1px solid var(--ui-border);border-radius:var(--ui-radius-lg);background-color:var(--ui-surface)}.ui-table-uCv4q{width:100%;border-collapse:collapse;font-size:var(--ui-font-size-sm)}.ui-table-uCv4q th,.ui-table-uCv4q td{text-align:start;border-bottom:1px solid var(--ui-border)}.ui-table-uCv4q tbody tr:last-child>*{border-bottom:none}.ui-table--compact-4KCVl th,.ui-table--compact-4KCVl td{padding:var(--ui-space-2) var(--ui-space-3)}.ui-table--regular-hsA3- th,.ui-table--regular-hsA3- td{padding:var(--ui-space-3)}.ui-table--spacious-BBUX- th,.ui-table--spacious-BBUX- td{padding:var(--ui-space-3) var(--ui-space-4)}.ui-table--sticky-head-FO2L4 thead th{position:sticky;top:0;z-index:1;background-color:var(--ui-surface-2);font-family:var(--ui-font-body);font-size:var(--ui-font-size-2xs);font-weight:600;text-transform:uppercase;letter-spacing:.045em;color:var(--ui-text-2);white-space:nowrap}.ui-table--row-hover--MAoe tbody tr:hover>td{background-color:var(--ui-surface-2)}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),e=require("react"),l=require("../../helpers/class-name.helper.cjs"),i=require("../../helpers/component.helper.cjs"),d={default:{"checkbox":"ui-checkbox--dvpB"}},f=e.forwardRef(({label:c,isIndeterminate:t=!1,className:u,testId:n,...a},o)=>{const r=e.useRef(null);return e.useImperativeHandle(o,()=>r.current,[]),e.useEffect(()=>{r.current&&(r.current.indeterminate=t)},[t]),s.jsx("input",{ref:r,type:"checkbox","aria-label":c,"aria-checked":t?"mixed":void 0,className:l.cx(d.default.checkbox,u),"data-testid":n,...a})}),m=e.memo(i.named(f,"TableCheckbox"));exports.default=m;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/TableCheckbox/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n forwardRef,\n type InputHTMLAttributes,\n memo,\n useEffect,\n useImperativeHandle,\n useRef,\n} from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\n\nimport styles from './index.module.scss';\n\ntype Props = Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'aria-label'> & {\n /** Erişilebilir ad — ZORUNLU. */\n label: string;\n /**\n * \"Bazı satırlar seçili\" — başlık kutusunun üçüncü durumu.\n * ⚠ Bu prop OLMADAN o durum İFADE EDİLEMİYORDU. `indeterminate` bir HTML niteliği değil, yalnızca\n * DOM ÖZELLİĞİ\n */\n isIndeterminate?: boolean;\n testId?: string;\n};\n\n/** Tablo hücresindeki toplu seçim kutusu. */\nconst TableCheckbox = /*#__PURE__*/ forwardRef<HTMLInputElement, Props>(\n ({ label, isIndeterminate = false, className, testId, ...rest }, ref) => {\n const innerRef = useRef<HTMLInputElement>(null);\n\n /*\n * Dışarıdan gelen `ref` ile içteki `ref` birleştirilir: bileşen kendi düğümüne erişmek ZORUNDA\n * (`indeterminate` yalnızca özellik olarak yazılabiliyor)…\n */\n useImperativeHandle(ref, () => innerRef.current as HTMLInputElement, []);\n\n useEffect(() => {\n if (innerRef.current) innerRef.current.indeterminate = isIndeterminate;\n }, [isIndeterminate]);\n\n return (\n <input\n ref={innerRef}\n type=\"checkbox\"\n aria-label={label}\n /*\n * ⚠ `aria-checked=\"mixed\"` AYRICA yazılır. `indeterminate` DOM özelliği görsel durumu\n * değiştirir ama erişilebilirlik ağacına bazı…\n */\n aria-checked={isIndeterminate ? 'mixed' : undefined}\n className={cx(styles.checkbox, className)}\n data-testid={testId}\n {...rest}\n />\n );\n },\n);\n\nexport default /*#__PURE__*/ memo(\n /*#__PURE__*/ named(TableCheckbox, 'TableCheckbox'),\n) as typeof TableCheckbox;\n"],"names":["TableCheckbox","forwardRef","label","isIndeterminate","className","testId","rest","ref","innerRef","useRef","useImperativeHandle","useEffect","jsx","cx","styles","index","memo","named"],"mappings":"uTA4BMA,EAA8BC,EAAAA,WAClC,CAAC,CAAE,MAAAC,EAAO,gBAAAC,EAAkB,GAAO,UAAAC,EAAW,OAAAC,EAAQ,GAAGC,CAAA,EAAQC,IAAQ,CACvE,MAAMC,EAAWC,EAAAA,OAAyB,IAAI,EAM9CC,OAAAA,EAAAA,oBAAoBH,EAAK,IAAMC,EAAS,QAA6B,CAAA,CAAE,EAEvEG,EAAAA,UAAU,IAAM,CACVH,EAAS,UAASA,EAAS,QAAQ,cAAgBL,EACzD,EAAG,CAACA,CAAe,CAAC,EAGlBS,EAAAA,IAAC,QAAA,CACC,IAAKJ,EACL,KAAK,WACL,aAAYN,EAKZ,eAAcC,EAAkB,QAAU,OAC1C,UAAWU,EAAAA,GAAGC,UAAO,SAAUV,CAAS,EACxC,cAAaC,EACZ,GAAGC,CAAA,CAAA,CAGV,CACF,EAEAS,EAA6BC,EAAAA,KACbC,EAAAA,MAAMjB,EAAe,eAAe,CACpD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { InputHTMLAttributes } from 'react';
|
|
2
|
+
/** Tablo hücresindeki toplu seçim kutusu. */
|
|
3
|
+
declare const TableCheckbox: import('react').ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "aria-label"> & {
|
|
4
|
+
/** Erişilebilir ad — ZORUNLU. */
|
|
5
|
+
label: string;
|
|
6
|
+
/**
|
|
7
|
+
* "Bazı satırlar seçili" — başlık kutusunun üçüncü durumu.
|
|
8
|
+
* ⚠ Bu prop OLMADAN o durum İFADE EDİLEMİYORDU. `indeterminate` bir HTML niteliği değil, yalnızca
|
|
9
|
+
* DOM ÖZELLİĞİ
|
|
10
|
+
*/
|
|
11
|
+
isIndeterminate?: boolean;
|
|
12
|
+
testId?: string;
|
|
13
|
+
} & import('react').RefAttributes<HTMLInputElement>>;
|
|
14
|
+
declare const _default: typeof TableCheckbox;
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as m } from "react/jsx-runtime";
|
|
3
|
+
import { memo as i, forwardRef as n, useRef as s, useImperativeHandle as l, useEffect as u } from "react";
|
|
4
|
+
import { cx as d } from "../../helpers/class-name.helper.js";
|
|
5
|
+
import { named as p } from "../../helpers/component.helper.js";
|
|
6
|
+
const x = {"checkbox":"ui-checkbox--dvpB"};
|
|
7
|
+
const b = /* @__PURE__ */ n(
|
|
8
|
+
({ label: o, isIndeterminate: r = !1, className: t, testId: c, ...a }, f) => {
|
|
9
|
+
const e = s(null);
|
|
10
|
+
return l(f, () => e.current, []), u(() => {
|
|
11
|
+
e.current && (e.current.indeterminate = r);
|
|
12
|
+
}, [r]), /* @__PURE__ */ m(
|
|
13
|
+
"input",
|
|
14
|
+
{
|
|
15
|
+
ref: e,
|
|
16
|
+
type: "checkbox",
|
|
17
|
+
"aria-label": o,
|
|
18
|
+
"aria-checked": r ? "mixed" : void 0,
|
|
19
|
+
className: d(x.checkbox, t),
|
|
20
|
+
"data-testid": c,
|
|
21
|
+
...a
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
), C = /* @__PURE__ */ i(
|
|
26
|
+
/* @__PURE__ */ p(b, "TableCheckbox")
|
|
27
|
+
);
|
|
28
|
+
export {
|
|
29
|
+
C as default
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/TableCheckbox/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n forwardRef,\n type InputHTMLAttributes,\n memo,\n useEffect,\n useImperativeHandle,\n useRef,\n} from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\n\nimport styles from './index.module.scss';\n\ntype Props = Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'aria-label'> & {\n /** Erişilebilir ad — ZORUNLU. */\n label: string;\n /**\n * \"Bazı satırlar seçili\" — başlık kutusunun üçüncü durumu.\n * ⚠ Bu prop OLMADAN o durum İFADE EDİLEMİYORDU. `indeterminate` bir HTML niteliği değil, yalnızca\n * DOM ÖZELLİĞİ\n */\n isIndeterminate?: boolean;\n testId?: string;\n};\n\n/** Tablo hücresindeki toplu seçim kutusu. */\nconst TableCheckbox = /*#__PURE__*/ forwardRef<HTMLInputElement, Props>(\n ({ label, isIndeterminate = false, className, testId, ...rest }, ref) => {\n const innerRef = useRef<HTMLInputElement>(null);\n\n /*\n * Dışarıdan gelen `ref` ile içteki `ref` birleştirilir: bileşen kendi düğümüne erişmek ZORUNDA\n * (`indeterminate` yalnızca özellik olarak yazılabiliyor)…\n */\n useImperativeHandle(ref, () => innerRef.current as HTMLInputElement, []);\n\n useEffect(() => {\n if (innerRef.current) innerRef.current.indeterminate = isIndeterminate;\n }, [isIndeterminate]);\n\n return (\n <input\n ref={innerRef}\n type=\"checkbox\"\n aria-label={label}\n /*\n * ⚠ `aria-checked=\"mixed\"` AYRICA yazılır. `indeterminate` DOM özelliği görsel durumu\n * değiştirir ama erişilebilirlik ağacına bazı…\n */\n aria-checked={isIndeterminate ? 'mixed' : undefined}\n className={cx(styles.checkbox, className)}\n data-testid={testId}\n {...rest}\n />\n );\n },\n);\n\nexport default /*#__PURE__*/ memo(\n /*#__PURE__*/ named(TableCheckbox, 'TableCheckbox'),\n) as typeof TableCheckbox;\n"],"names":["TableCheckbox","forwardRef","label","isIndeterminate","className","testId","rest","ref","innerRef","useRef","useImperativeHandle","useEffect","jsx","cx","styles","index","memo","named"],"mappings":";;;;;;AA4BA,MAAMA,IAA8B,gBAAAC;AAAA,EAClC,CAAC,EAAE,OAAAC,GAAO,iBAAAC,IAAkB,IAAO,WAAAC,GAAW,QAAAC,GAAQ,GAAGC,EAAA,GAAQC,MAAQ;AACvE,UAAMC,IAAWC,EAAyB,IAAI;AAM9C,WAAAC,EAAoBH,GAAK,MAAMC,EAAS,SAA6B,CAAA,CAAE,GAEvEG,EAAU,MAAM;AACd,MAAIH,EAAS,YAASA,EAAS,QAAQ,gBAAgBL;AAAA,IACzD,GAAG,CAACA,CAAe,CAAC,GAGlB,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKJ;AAAA,QACL,MAAK;AAAA,QACL,cAAYN;AAAA,QAKZ,gBAAcC,IAAkB,UAAU;AAAA,QAC1C,WAAWU,EAAGC,EAAO,UAAUV,CAAS;AAAA,QACxC,eAAaC;AAAA,QACZ,GAAGC;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF,GAEAS,IAA6B,gBAAAC;AAAA,EACb,gBAAAC,EAAMjB,GAAe,eAAe;AACpD;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-checkbox--dvpB{width:18px;height:18px;margin:0;display:block;accent-color:var(--ui-selected);cursor:pointer;position:relative}.ui-checkbox--dvpB:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:max(100%,44px);height:max(100%,44px)}.ui-checkbox--dvpB:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--ui-ring-color);outline-offset:var(--ui-ring-offset, 2px)}.ui-checkbox--dvpB:disabled{cursor:not-allowed}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("react/jsx-runtime"),n=require("react"),I=require("@handijit/utils"),R=require("../../helpers/class-name.helper.cjs"),K=require("../../helpers/scroll.helper.cjs"),a={default:{"tabs":"ui-tabs-l4dFE","tabs__list":"ui-tabs__list-HJvR8","tabs__tab":"ui-tabs__tab-7gDW7","tabs__tab--active":"ui-tabs__tab--active-riqNp","tabs__count":"ui-tabs__count-8JX8s","tabs__panel":"ui-tabs__panel-CPklY"}},T=({items:t,defaultTabId:w,activeId:_,onChange:i,ariaLabel:S,isManualActivation:u,className:g,testId:v})=>{var D;const d=n.useId(),[E,P]=n.useState(w??((D=t[0])==null?void 0:D.id)),h=I.isDefined(_),p=h?_:E,s=t.findIndex(e=>e.id===p),[f,y]=n.useState(s<0?0:s),$=n.useRef(null),l=t[s]??t[0],b=f>=0&&f<t.length?f:Math.max(s,0);n.useEffect(()=>{y(s<0?0:s)},[s]);const j=n.useRef(!1);n.useEffect(()=>{var e;if(!j.current){j.current=!0;return}K.scrollIntoViewIfPossible((e=$.current)==null?void 0:e.querySelector('[aria-selected="true"]'),{block:"nearest",inline:"nearest"})},[p]);const x=e=>{h||P(e),i==null||i(e)},F=e=>{var k;if(u&&(e.key==="Enter"||e.key===" ")){e.preventDefault();const N=t[b];N&&x(N.id);return}const r=e.key==="ArrowRight"?1:e.key==="ArrowLeft"?-1:0;if(r===0)return;e.preventDefault();const c=((u?b:s)+r+t.length)%t.length;y(c),u||x(t[c].id),(k=document.getElementById(`${d}-tab-${t[c].id}`))==null||k.focus()};if(t.length===0)return null;const q=I.isDefined(l==null?void 0:l.content);return o.jsxs("div",{className:R.cx(a.default.tabs,g),"data-testid":v,children:[o.jsx("div",{ref:$,className:a.default.tabs__list,role:"tablist","aria-label":S,onKeyDown:F,children:t.map(e=>{var c;const r=e.id===l.id;return o.jsxs("button",{id:`${d}-tab-${e.id}`,type:"button",role:"tab","aria-selected":r,"aria-controls":r&&q?`${d}-panel-${e.id}`:void 0,tabIndex:(u?((c=t[b])==null?void 0:c.id)===e.id:r)?0:-1,className:R.cx(a.default.tabs__tab,r&&a.default["tabs__tab--active"]),onClick:()=>x(e.id),children:[e.label,I.isDefined(e.count)&&o.jsx("span",{className:a.default.tabs__count,children:e.count})]},e.id)})}),q&&o.jsx("div",{id:`${d}-panel-${l.id}`,role:"tabpanel","aria-labelledby":`${d}-tab-${l.id}`,className:a.default.tabs__panel,tabIndex:0,children:l.content})]})},B=n.memo(T);exports.default=B;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Tabs/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n type FC,\n type KeyboardEvent,\n memo,\n type ReactNode,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { isDefined } from '@handijit/utils';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { scrollIntoViewIfPossible } from '../../helpers/scroll.helper';\n\nimport styles from './index.module.scss';\n\nexport type TabItem = {\n id: string;\n label: string;\n /** Etiketin yanında gösterilen sayı. */\n count?: number;\n /** Sekmenin paneli. */\n content?: ReactNode;\n};\n\ntype Props = {\n items: TabItem[];\n /** Kontrolsüz kullanımda açılışta seçili sekme. */\n defaultTabId?: string;\n /** Kontrollü kullanım: seçili sekme çağıranın durumunda. */\n activeId?: string;\n onChange?: (id: string) => void;\n /** Sekme çubuğunun erişilebilir adı. */\n ariaLabel?: string;\n /** Ok tuşu yalnızca ODAĞI taşır; seçim `Enter`/`Space` ile yapılır. */\n isManualActivation?: boolean;\n className?: string;\n testId?: string;\n};\n\n/** Sekmeler. */\nconst Tabs: FC<Props> = ({\n items,\n defaultTabId,\n activeId: controlledId,\n onChange,\n ariaLabel,\n isManualActivation,\n className,\n testId,\n}) => {\n const baseId = useId();\n const [uncontrolledId, setUncontrolledId] = useState(defaultTabId ?? items[0]?.id);\n\n const isControlled = isDefined(controlledId);\n const activeId = isControlled ? controlledId : uncontrolledId;\n\n const activeIndex = items.findIndex(item => item.id === activeId);\n /* Manuel kipte ODAKLANAN sekme ile SECILI sekme ayrisir. */\n const [focusIndex, setFocusIndex] = useState(activeIndex < 0 ? 0 : activeIndex);\n const listRef = useRef<HTMLDivElement>(null);\n const active = items[activeIndex] ?? items[0];\n\n /*\n * 1. COKME: `items` kisaldiginda indeks kirpilmiyordu.\n * ⚠ `focusIndex` HAM OKUNMAZ — iki ayri ariza uretiyordu.\n */\n const safeFocusIndex =\n focusIndex >= 0 && focusIndex < items.length ? focusIndex : Math.max(activeIndex, 0);\n\n useEffect(() => {\n /* Secim degistiginde odak da ona hizalanir. */\n setFocusIndex(activeIndex < 0 ? 0 : activeIndex);\n }, [activeIndex]);\n\n /*\n * SECILI SEKME GORUNURE KAYDIRILIR — ama MOUNT'ta DEGIL.\n * ⚠ Ilk kosu da kaydiriyordu ve `scrollIntoView` yalnizca serit kabini degil SAYFAYI da kaydirir:\n * serit ilk boyamada ekranin altindaysa (uzun…\n */\n const hasMountedRef = useRef(false);\n\n useEffect(() => {\n if (!hasMountedRef.current) {\n hasMountedRef.current = true;\n return;\n }\n\n scrollIntoViewIfPossible(listRef.current?.querySelector(`[aria-selected=\"true\"]`), {\n block: 'nearest',\n inline: 'nearest',\n });\n }, [activeId]);\n\n const select = (id: string) => {\n if (!isControlled) setUncontrolledId(id);\n onChange?.(id);\n };\n\n /** Ok tuşlarıyla gezinme; başta/sonda döner. */\n const handleKeyDown = (event: KeyboardEvent) => {\n if (isManualActivation && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n const focused = items[safeFocusIndex];\n if (focused) select(focused.id);\n return;\n }\n\n const offset = event.key === 'ArrowRight' ? 1 : event.key === 'ArrowLeft' ? -1 : 0;\n if (offset === 0) return;\n\n event.preventDefault();\n const next =\n ((isManualActivation ? safeFocusIndex : activeIndex) + offset + items.length) % items.length;\n\n setFocusIndex(next);\n if (!isManualActivation) select(items[next].id);\n\n /*\n * Odak HER IKI kipte de tasinir: manuel kipte seciliyle odaklanan sekme ayrisiyor ve `tabindex`\n * odaklanani izlemek zorunda.\n */\n document.getElementById(`${baseId}-tab-${items[next].id}`)?.focus();\n };\n\n if (items.length === 0) return null;\n\n /*\n * Panelsiz kullanimda `aria-controls` VERILMEZ: var olmayan bir kimligi isaret etmek ekran\n * okuyucuda kirik bir bag uretir.\n */\n const hasPanel = isDefined(active?.content);\n\n return (\n <div className={cx(styles.tabs, className)} data-testid={testId}>\n <div\n ref={listRef}\n className={styles.tabs__list}\n role=\"tablist\"\n aria-label={ariaLabel}\n onKeyDown={handleKeyDown}\n >\n {items.map(item => {\n const isActive = item.id === active.id;\n\n return (\n <button\n key={item.id}\n id={`${baseId}-tab-${item.id}`}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n /* ⚠ YALNIZCA SECILI SEKMEDE. */\n aria-controls={isActive && hasPanel ? `${baseId}-panel-${item.id}` : undefined}\n // Yalnızca seçili sekme sekme sırasında; gezinme ok tuşlarıyla.\n /*\n * Donen `tabindex` ODAKLANANI izler: manuel kipte secili sekme ile odaklanan sekme\n * ayri ve Tab'in geri donecegi yer odaklanan olmali.\n */\n tabIndex={\n (isManualActivation ? items[safeFocusIndex]?.id === item.id : isActive) ? 0 : -1\n }\n className={cx(styles.tabs__tab, isActive && styles['tabs__tab--active'])}\n onClick={() => select(item.id)}\n >\n {item.label}\n {isDefined(item.count) && <span className={styles.tabs__count}>{item.count}</span>}\n </button>\n );\n })}\n </div>\n\n {hasPanel && (\n <div\n id={`${baseId}-panel-${active.id}`}\n role=\"tabpanel\"\n aria-labelledby={`${baseId}-tab-${active.id}`}\n className={styles.tabs__panel}\n tabIndex={0}\n >\n {active.content}\n </div>\n )}\n </div>\n );\n};\n\nexport default /*#__PURE__*/ memo(Tabs) as typeof Tabs;\n"],"names":["Tabs","items","defaultTabId","controlledId","onChange","ariaLabel","isManualActivation","className","testId","baseId","useId","uncontrolledId","setUncontrolledId","useState","_a","isControlled","isDefined","activeId","activeIndex","item","focusIndex","setFocusIndex","listRef","useRef","active","safeFocusIndex","useEffect","hasMountedRef","scrollIntoViewIfPossible","select","id","handleKeyDown","event","focused","offset","next","hasPanel","jsxs","cx","styles","jsx","isActive","index"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
|
+
export type TabItem = {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
/** Etiketin yanında gösterilen sayı. */
|
|
6
|
+
count?: number;
|
|
7
|
+
/** Sekmenin paneli. */
|
|
8
|
+
content?: ReactNode;
|
|
9
|
+
};
|
|
10
|
+
type Props = {
|
|
11
|
+
items: TabItem[];
|
|
12
|
+
/** Kontrolsüz kullanımda açılışta seçili sekme. */
|
|
13
|
+
defaultTabId?: string;
|
|
14
|
+
/** Kontrollü kullanım: seçili sekme çağıranın durumunda. */
|
|
15
|
+
activeId?: string;
|
|
16
|
+
onChange?: (id: string) => void;
|
|
17
|
+
/** Sekme çubuğunun erişilebilir adı. */
|
|
18
|
+
ariaLabel?: string;
|
|
19
|
+
/** Ok tuşu yalnızca ODAĞI taşır; seçim `Enter`/`Space` ile yapılır. */
|
|
20
|
+
isManualActivation?: boolean;
|
|
21
|
+
className?: string;
|
|
22
|
+
testId?: string;
|
|
23
|
+
};
|
|
24
|
+
/** Sekmeler. */
|
|
25
|
+
declare const Tabs: FC<Props>;
|
|
26
|
+
declare const _default: typeof Tabs;
|
|
27
|
+
export default _default;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as R, jsx as b } from "react/jsx-runtime";
|
|
3
|
+
import { memo as L, useId as T, useState as m, useRef as E, useEffect as g } from "react";
|
|
4
|
+
import { isDefined as p } from "@handijit/utils";
|
|
5
|
+
import { cx as j } from "../../helpers/class-name.helper.js";
|
|
6
|
+
import { scrollIntoViewIfPossible as U } from "../../helpers/scroll.helper.js";
|
|
7
|
+
const c = {"tabs":"ui-tabs-l4dFE","tabs__list":"ui-tabs__list-HJvR8","tabs__tab":"ui-tabs__tab-7gDW7","tabs__tab--active":"ui-tabs__tab--active-riqNp","tabs__count":"ui-tabs__count-8JX8s","tabs__panel":"ui-tabs__panel-CPklY"};
|
|
8
|
+
const V = ({
|
|
9
|
+
items: t,
|
|
10
|
+
defaultTabId: v,
|
|
11
|
+
activeId: I,
|
|
12
|
+
onChange: d,
|
|
13
|
+
ariaLabel: F,
|
|
14
|
+
isManualActivation: a,
|
|
15
|
+
className: K,
|
|
16
|
+
testId: P
|
|
17
|
+
}) => {
|
|
18
|
+
var w;
|
|
19
|
+
const l = T(), [S, q] = m(v ?? ((w = t[0]) == null ? void 0 : w.id)), x = p(I), y = x ? I : S, n = t.findIndex((e) => e.id === y), [i, h] = m(n < 0 ? 0 : n), _ = E(null), o = t[n] ?? t[0], f = i >= 0 && i < t.length ? i : Math.max(n, 0);
|
|
20
|
+
g(() => {
|
|
21
|
+
h(n < 0 ? 0 : n);
|
|
22
|
+
}, [n]);
|
|
23
|
+
const $ = E(!1);
|
|
24
|
+
g(() => {
|
|
25
|
+
var e;
|
|
26
|
+
if (!$.current) {
|
|
27
|
+
$.current = !0;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
U((e = _.current) == null ? void 0 : e.querySelector('[aria-selected="true"]'), {
|
|
31
|
+
block: "nearest",
|
|
32
|
+
inline: "nearest"
|
|
33
|
+
});
|
|
34
|
+
}, [y]);
|
|
35
|
+
const u = (e) => {
|
|
36
|
+
x || q(e), d == null || d(e);
|
|
37
|
+
}, B = (e) => {
|
|
38
|
+
var D;
|
|
39
|
+
if (a && (e.key === "Enter" || e.key === " ")) {
|
|
40
|
+
e.preventDefault();
|
|
41
|
+
const N = t[f];
|
|
42
|
+
N && u(N.id);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const r = e.key === "ArrowRight" ? 1 : e.key === "ArrowLeft" ? -1 : 0;
|
|
46
|
+
if (r === 0) return;
|
|
47
|
+
e.preventDefault();
|
|
48
|
+
const s = ((a ? f : n) + r + t.length) % t.length;
|
|
49
|
+
h(s), a || u(t[s].id), (D = document.getElementById(`${l}-tab-${t[s].id}`)) == null || D.focus();
|
|
50
|
+
};
|
|
51
|
+
if (t.length === 0) return null;
|
|
52
|
+
const k = p(o == null ? void 0 : o.content);
|
|
53
|
+
return /* @__PURE__ */ R("div", { className: j(c.tabs, K), "data-testid": P, children: [
|
|
54
|
+
/* @__PURE__ */ b(
|
|
55
|
+
"div",
|
|
56
|
+
{
|
|
57
|
+
ref: _,
|
|
58
|
+
className: c.tabs__list,
|
|
59
|
+
role: "tablist",
|
|
60
|
+
"aria-label": F,
|
|
61
|
+
onKeyDown: B,
|
|
62
|
+
children: t.map((e) => {
|
|
63
|
+
var s;
|
|
64
|
+
const r = e.id === o.id;
|
|
65
|
+
return /* @__PURE__ */ R(
|
|
66
|
+
"button",
|
|
67
|
+
{
|
|
68
|
+
id: `${l}-tab-${e.id}`,
|
|
69
|
+
type: "button",
|
|
70
|
+
role: "tab",
|
|
71
|
+
"aria-selected": r,
|
|
72
|
+
"aria-controls": r && k ? `${l}-panel-${e.id}` : void 0,
|
|
73
|
+
tabIndex: (a ? ((s = t[f]) == null ? void 0 : s.id) === e.id : r) ? 0 : -1,
|
|
74
|
+
className: j(c.tabs__tab, r && c["tabs__tab--active"]),
|
|
75
|
+
onClick: () => u(e.id),
|
|
76
|
+
children: [
|
|
77
|
+
e.label,
|
|
78
|
+
p(e.count) && /* @__PURE__ */ b("span", { className: c.tabs__count, children: e.count })
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
e.id
|
|
82
|
+
);
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
k && /* @__PURE__ */ b(
|
|
87
|
+
"div",
|
|
88
|
+
{
|
|
89
|
+
id: `${l}-panel-${o.id}`,
|
|
90
|
+
role: "tabpanel",
|
|
91
|
+
"aria-labelledby": `${l}-tab-${o.id}`,
|
|
92
|
+
className: c.tabs__panel,
|
|
93
|
+
tabIndex: 0,
|
|
94
|
+
children: o.content
|
|
95
|
+
}
|
|
96
|
+
)
|
|
97
|
+
] });
|
|
98
|
+
}, Q = /* @__PURE__ */ L(V);
|
|
99
|
+
export {
|
|
100
|
+
Q as default
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Tabs/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n type FC,\n type KeyboardEvent,\n memo,\n type ReactNode,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { isDefined } from '@handijit/utils';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { scrollIntoViewIfPossible } from '../../helpers/scroll.helper';\n\nimport styles from './index.module.scss';\n\nexport type TabItem = {\n id: string;\n label: string;\n /** Etiketin yanında gösterilen sayı. */\n count?: number;\n /** Sekmenin paneli. */\n content?: ReactNode;\n};\n\ntype Props = {\n items: TabItem[];\n /** Kontrolsüz kullanımda açılışta seçili sekme. */\n defaultTabId?: string;\n /** Kontrollü kullanım: seçili sekme çağıranın durumunda. */\n activeId?: string;\n onChange?: (id: string) => void;\n /** Sekme çubuğunun erişilebilir adı. */\n ariaLabel?: string;\n /** Ok tuşu yalnızca ODAĞI taşır; seçim `Enter`/`Space` ile yapılır. */\n isManualActivation?: boolean;\n className?: string;\n testId?: string;\n};\n\n/** Sekmeler. */\nconst Tabs: FC<Props> = ({\n items,\n defaultTabId,\n activeId: controlledId,\n onChange,\n ariaLabel,\n isManualActivation,\n className,\n testId,\n}) => {\n const baseId = useId();\n const [uncontrolledId, setUncontrolledId] = useState(defaultTabId ?? items[0]?.id);\n\n const isControlled = isDefined(controlledId);\n const activeId = isControlled ? controlledId : uncontrolledId;\n\n const activeIndex = items.findIndex(item => item.id === activeId);\n /* Manuel kipte ODAKLANAN sekme ile SECILI sekme ayrisir. */\n const [focusIndex, setFocusIndex] = useState(activeIndex < 0 ? 0 : activeIndex);\n const listRef = useRef<HTMLDivElement>(null);\n const active = items[activeIndex] ?? items[0];\n\n /*\n * 1. COKME: `items` kisaldiginda indeks kirpilmiyordu.\n * ⚠ `focusIndex` HAM OKUNMAZ — iki ayri ariza uretiyordu.\n */\n const safeFocusIndex =\n focusIndex >= 0 && focusIndex < items.length ? focusIndex : Math.max(activeIndex, 0);\n\n useEffect(() => {\n /* Secim degistiginde odak da ona hizalanir. */\n setFocusIndex(activeIndex < 0 ? 0 : activeIndex);\n }, [activeIndex]);\n\n /*\n * SECILI SEKME GORUNURE KAYDIRILIR — ama MOUNT'ta DEGIL.\n * ⚠ Ilk kosu da kaydiriyordu ve `scrollIntoView` yalnizca serit kabini degil SAYFAYI da kaydirir:\n * serit ilk boyamada ekranin altindaysa (uzun…\n */\n const hasMountedRef = useRef(false);\n\n useEffect(() => {\n if (!hasMountedRef.current) {\n hasMountedRef.current = true;\n return;\n }\n\n scrollIntoViewIfPossible(listRef.current?.querySelector(`[aria-selected=\"true\"]`), {\n block: 'nearest',\n inline: 'nearest',\n });\n }, [activeId]);\n\n const select = (id: string) => {\n if (!isControlled) setUncontrolledId(id);\n onChange?.(id);\n };\n\n /** Ok tuşlarıyla gezinme; başta/sonda döner. */\n const handleKeyDown = (event: KeyboardEvent) => {\n if (isManualActivation && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n const focused = items[safeFocusIndex];\n if (focused) select(focused.id);\n return;\n }\n\n const offset = event.key === 'ArrowRight' ? 1 : event.key === 'ArrowLeft' ? -1 : 0;\n if (offset === 0) return;\n\n event.preventDefault();\n const next =\n ((isManualActivation ? safeFocusIndex : activeIndex) + offset + items.length) % items.length;\n\n setFocusIndex(next);\n if (!isManualActivation) select(items[next].id);\n\n /*\n * Odak HER IKI kipte de tasinir: manuel kipte seciliyle odaklanan sekme ayrisiyor ve `tabindex`\n * odaklanani izlemek zorunda.\n */\n document.getElementById(`${baseId}-tab-${items[next].id}`)?.focus();\n };\n\n if (items.length === 0) return null;\n\n /*\n * Panelsiz kullanimda `aria-controls` VERILMEZ: var olmayan bir kimligi isaret etmek ekran\n * okuyucuda kirik bir bag uretir.\n */\n const hasPanel = isDefined(active?.content);\n\n return (\n <div className={cx(styles.tabs, className)} data-testid={testId}>\n <div\n ref={listRef}\n className={styles.tabs__list}\n role=\"tablist\"\n aria-label={ariaLabel}\n onKeyDown={handleKeyDown}\n >\n {items.map(item => {\n const isActive = item.id === active.id;\n\n return (\n <button\n key={item.id}\n id={`${baseId}-tab-${item.id}`}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n /* ⚠ YALNIZCA SECILI SEKMEDE. */\n aria-controls={isActive && hasPanel ? `${baseId}-panel-${item.id}` : undefined}\n // Yalnızca seçili sekme sekme sırasında; gezinme ok tuşlarıyla.\n /*\n * Donen `tabindex` ODAKLANANI izler: manuel kipte secili sekme ile odaklanan sekme\n * ayri ve Tab'in geri donecegi yer odaklanan olmali.\n */\n tabIndex={\n (isManualActivation ? items[safeFocusIndex]?.id === item.id : isActive) ? 0 : -1\n }\n className={cx(styles.tabs__tab, isActive && styles['tabs__tab--active'])}\n onClick={() => select(item.id)}\n >\n {item.label}\n {isDefined(item.count) && <span className={styles.tabs__count}>{item.count}</span>}\n </button>\n );\n })}\n </div>\n\n {hasPanel && (\n <div\n id={`${baseId}-panel-${active.id}`}\n role=\"tabpanel\"\n aria-labelledby={`${baseId}-tab-${active.id}`}\n className={styles.tabs__panel}\n tabIndex={0}\n >\n {active.content}\n </div>\n )}\n </div>\n );\n};\n\nexport default /*#__PURE__*/ memo(Tabs) as typeof Tabs;\n"],"names":["Tabs","items","defaultTabId","controlledId","onChange","ariaLabel","isManualActivation","className","testId","baseId","useId","uncontrolledId","setUncontrolledId","useState","_a","isControlled","isDefined","activeId","activeIndex","item","focusIndex","setFocusIndex","listRef","useRef","active","safeFocusIndex","useEffect","hasMountedRef","scrollIntoViewIfPossible","select","id","handleKeyDown","event","focused","offset","next","hasPanel","jsxs","cx","styles","jsx","isActive","index"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-tabs-l4dFE{display:flex;flex-direction:column;gap:var(--ui-space-5)}.ui-tabs__list-HJvR8{display:flex;gap:var(--ui-space-1);position:relative;overflow-x:auto;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;padding-block:var(--ui-space-1) var(--ui-space-3);scrollbar-width:none;-ms-overflow-style:none}.ui-tabs__list-HJvR8::-webkit-scrollbar{display:none}.ui-tabs__list-HJvR8>*{scroll-snap-align:start;flex-shrink:0}.ui-tabs__list-HJvR8{border-bottom:1px solid var(--ui-border)}.ui-tabs__tab-7gDW7{position:relative}.ui-tabs__tab-7gDW7:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:max(100%,44px);height:max(100%,44px)}.ui-tabs__tab-7gDW7{display:inline-flex;align-items:center;gap:var(--ui-space-2);font-family:var(--ui-font-body);font-size:var(--ui-font-size-sm);font-weight:var(--ui-tab-weight, 500);color:var(--ui-text-2);background:none;border:none;padding:var(--ui-space-3) var(--ui-space-4);cursor:pointer;white-space:nowrap;position:relative;transition:color var(--ui-duration-fast) var(--ui-ease-out)}.ui-tabs__tab-7gDW7:hover{color:var(--ui-text)}.ui-tabs__tab-7gDW7:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--ui-ring-color);outline-offset:var(--ui-ring-offset, -2px)}.ui-tabs__tab-7gDW7:before{content:"";position:absolute;inset-inline:var(--ui-space-3);bottom:-1px;height:2px;background-color:transparent;border-radius:var(--ui-radius-xs) var(--ui-radius-xs) 0 0;transition:background-color var(--ui-duration-fast) var(--ui-ease-out)}.ui-tabs__tab--active-riqNp{color:var(--ui-text);font-weight:600}.ui-tabs__tab--active-riqNp:before{background-color:var(--ui-selected)}@media (prefers-reduced-motion: reduce){.ui-tabs__tab-7gDW7{transition:none}.ui-tabs__tab-7gDW7:before{transition:none}}.ui-tabs__count-8JX8s{font-size:var(--ui-font-size-2xs);font-weight:600;color:var(--ui-text-2);background-color:var(--ui-surface-3);border-radius:var(--ui-radius-pill);padding:1px var(--ui-space-2);font-variant-numeric:tabular-nums}.ui-tabs__panel-CPklY:focus-visible{outline:var(--ui-ring-width, 2px) solid var(--ui-ring-color);outline-offset:var(--ui-ring-offset, 4px);border-radius:var(--ui-radius-sm)}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("react/jsx-runtime"),a=require("react"),E=require("react-bootstrap-icons"),b=require("../../helpers/class-name.helper.cjs"),K=require("../../helpers/component.helper.cjs"),y=require("../../helpers/label.helper.cjs"),M=require("../../hooks/useAnnounce.cjs"),P=require("../../theme/context.cjs"),r={default:{"tagInput":"ui-tagInput-QraZR","tagInput__field":"ui-tagInput__field-HeWrC","tagInput--invalid":"ui-tagInput--invalid-NQogL","tagInput--disabled":"ui-tagInput--disabled--AJFF","tagInput__tag":"ui-tagInput__tag-D-ZWB","tagInput__tag--duplicate":"ui-tagInput__tag--duplicate-3-FMF","tagInput__remove":"ui-tagInput__remove-bpjGG"}},z=({values:n,onChange:f,label:w,placeholder:T,removeLabel:j,separators:v=["Enter",","],maxTags:m,isDisabled:s,id:k,required:N,className:R,testId:S,"aria-describedby":B,"aria-invalid":g})=>{const D=a.useId(),F=k??D,I=a.useRef(null),u=a.useRef(0);a.useEffect(()=>()=>{u.current&&window.clearTimeout(u.current)},[]);const{labels:i}=P.useUi(),l=M.default(),[c,p]=a.useState(""),[$,_]=a.useState(null),h=m!==void 0&&n.length>=m,x=e=>{var d;const t=e.trim();if(t!==""){if(n.includes(t)){_(t),u.current&&window.clearTimeout(u.current),u.current=window.setTimeout(()=>_(null),1e3),l(`${t} zaten ekli`,"assertive"),p("");return}h||(f([...n,t]),p(""),l(y.resolveFormatter("TagInput.added",(d=i==null?void 0:i.tagInput)==null?void 0:d.added,t)))}},q=e=>{var t;f(n.filter(d=>d!==e)),l(y.resolveFormatter("TagInput.removed",(t=i==null?void 0:i.tagInput)==null?void 0:t.removed,e))},C=e=>{if(v.includes(e.key)){e.preventDefault(),x(c);return}if(e.key==="Backspace"&&c===""){const t=n.at(-1);t!==void 0&&q(t)}};return o.jsxs("div",{className:b.cx(r.default.tagInput,s&&r.default["tagInput--disabled"],g&&r.default["tagInput--invalid"],R),"data-testid":S,onClick:()=>{var e;return(e=I.current)==null?void 0:e.focus()},children:[n.map(e=>o.jsxs("span",{className:b.cx(r.default.tagInput__tag,$===e&&r.default["tagInput__tag--duplicate"]),children:[e,o.jsx("button",{type:"button",className:r.default.tagInput__remove,"aria-label":`${e} — ${j}`,disabled:s,onClick:t=>{t.stopPropagation(),q(e)},children:o.jsx(E.XLg,{"aria-hidden":!0})})]},e)),o.jsx("input",{ref:I,id:F,type:"text",className:r.default.tagInput__field,value:c,placeholder:n.length===0?T:void 0,"aria-label":w,"aria-describedby":B,"aria-invalid":g,"aria-required":N||void 0,disabled:s||h,onChange:e=>p(e.target.value),onKeyDown:C,onBlur:()=>x(c)})]})},A=a.memo(K.named(z,"TagInput"));exports.default=A;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/TagInput/index.tsx"],"sourcesContent":["'use client';\n\nimport { type KeyboardEvent, memo, useEffect, useId, useRef, useState } from 'react';\n\nimport { XLg } from 'react-bootstrap-icons';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\nimport { resolveFormatter } from '../../helpers/label.helper';\nimport useAnnounce from '../../hooks/useAnnounce';\n\nimport { useUi } from '../../theme/context';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n values: string[];\n onChange: (values: string[]) => void;\n /** Alanın erişilebilir adı. */\n label: string;\n placeholder?: string;\n /** Her etiketin kaldırma düğmesinin ad öneki (\"Kaldır\"). */\n removeLabel: string;\n /** Etiketi bitiren tuşlar. */\n separators?: string[];\n /** En fazla kaç etiket. */\n maxTags?: number;\n isDisabled?: boolean;\n id?: string;\n /** Zorunluluk — `Field`in `FieldChildProps` sözleşmesi. */\n required?: boolean;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n className?: string;\n testId?: string;\n};\n\n/** Etiket girdisi — yazılan metni kaldırılabilir çiplere çevirir. */\nconst TagInput = ({\n values,\n onChange,\n label,\n placeholder,\n removeLabel,\n separators = ['Enter', ','],\n maxTags,\n isDisabled,\n id,\n required,\n className,\n testId,\n 'aria-describedby': describedBy,\n 'aria-invalid': isInvalid,\n}: Props) => {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const inputRef = useRef<HTMLInputElement>(null);\n\n /* ⚠ Yinelenen etiket uyarısının zamanlayıcısı REF'te tutulur ve unmount'ta temizlenir. */\n const duplicateTimerRef = useRef(0);\n\n useEffect(\n () => () => {\n if (duplicateTimerRef.current) window.clearTimeout(duplicateTimerRef.current);\n },\n [],\n );\n const { labels } = useUi();\n const announce = useAnnounce();\n\n const [draft, setDraft] = useState('');\n /* Yinelenen deger: var olan cip bir kare vurgulanir. */\n const [duplicate, setDuplicate] = useState<string | null>(null);\n\n const isFull = maxTags !== undefined && values.length >= maxTags;\n\n const commit = (raw: string) => {\n const value = raw.trim();\n if (value === '') return;\n\n if (values.includes(value)) {\n /* Sessizce yutmak yerine GOSTER: kullanici \"yazdim, kayboldu\" diyordu. */\n setDuplicate(value);\n if (duplicateTimerRef.current) window.clearTimeout(duplicateTimerRef.current);\n duplicateTimerRef.current = window.setTimeout(() => setDuplicate(null), 1_000);\n announce(`${value} zaten ekli`, 'assertive');\n setDraft('');\n return;\n }\n\n if (isFull) return;\n\n onChange([...values, value]);\n setDraft('');\n announce(resolveFormatter('TagInput.added', labels?.tagInput?.added, value));\n };\n\n const remove = (value: string) => {\n onChange(values.filter(item => item !== value));\n announce(resolveFormatter('TagInput.removed', labels?.tagInput?.removed, value));\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (separators.includes(event.key)) {\n event.preventDefault();\n commit(draft);\n return;\n }\n\n /* BOS girdide Backspace SON etiketi kaldirir — metin varken kaldirmaz. */\n if (event.key === 'Backspace' && draft === '') {\n const lastValue = values.at(-1);\n if (lastValue !== undefined) remove(lastValue);\n }\n };\n\n return (\n <div\n className={cx(\n styles.tagInput,\n isDisabled && styles['tagInput--disabled'],\n isInvalid && styles['tagInput--invalid'],\n className,\n )}\n data-testid={testId}\n /*\n * Kutunun herhangi bir yerine tiklamak girdiyi odaklar: cipler arasindaki bosluga tiklayan\n * kullanici hicbir sey olmadigini saniyordu.\n */\n onClick={() => inputRef.current?.focus()}\n >\n {values.map(value => (\n <span\n key={value}\n className={cx(\n styles.tagInput__tag,\n duplicate === value && styles['tagInput__tag--duplicate'],\n )}\n >\n {value}\n\n <button\n type=\"button\"\n className={styles.tagInput__remove}\n /*\n * Ad degeri ICERIR: on bes cipin hepsi \"Kaldir\" diye okundugunda hangisi oldugu belli\n * olmuyordu.\n */\n aria-label={`${value} — ${removeLabel}`}\n disabled={isDisabled}\n onClick={event => {\n event.stopPropagation();\n remove(value);\n }}\n >\n <XLg aria-hidden />\n </button>\n </span>\n ))}\n\n <input\n ref={inputRef}\n id={inputId}\n type=\"text\"\n className={styles.tagInput__field}\n value={draft}\n placeholder={values.length === 0 ? placeholder : undefined}\n aria-label={label}\n aria-describedby={describedBy}\n aria-invalid={isInvalid}\n /*\n * ⚠ Yerel `required` YAZILMAZ: alanin degeri etiket listesidir, girdi kutusu ise commit'ten\n * sonra BOSALIR.\n */\n aria-required={required || undefined}\n disabled={isDisabled || isFull}\n onChange={event => setDraft(event.target.value)}\n onKeyDown={handleKeyDown}\n /*\n * Alan terk edildiginde yazilan metin ETIKETE DONER: yarim kalmis bir metin kayboluyor ve\n * kullanici bunu ancak gonderdikten sonra fark ediyordu.\n */\n onBlur={() => commit(draft)}\n />\n </div>\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(TagInput, 'TagInput')) as typeof TagInput;\n"],"names":["TagInput","values","onChange","label","placeholder","removeLabel","separators","maxTags","isDisabled","id","required","className","testId","describedBy","isInvalid","generatedId","useId","inputId","inputRef","useRef","duplicateTimerRef","useEffect","labels","useUi","announce","useAnnounce","draft","setDraft","useState","duplicate","setDuplicate","isFull","commit","raw","value","resolveFormatter","_a","remove","item","handleKeyDown","event","lastValue","jsxs","cx","styles","jsx","XLg","index","memo","named"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
type Props = {
|
|
2
|
+
values: string[];
|
|
3
|
+
onChange: (values: string[]) => void;
|
|
4
|
+
/** Alanın erişilebilir adı. */
|
|
5
|
+
label: string;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
/** Her etiketin kaldırma düğmesinin ad öneki ("Kaldır"). */
|
|
8
|
+
removeLabel: string;
|
|
9
|
+
/** Etiketi bitiren tuşlar. */
|
|
10
|
+
separators?: string[];
|
|
11
|
+
/** En fazla kaç etiket. */
|
|
12
|
+
maxTags?: number;
|
|
13
|
+
isDisabled?: boolean;
|
|
14
|
+
id?: string;
|
|
15
|
+
/** Zorunluluk — `Field`in `FieldChildProps` sözleşmesi. */
|
|
16
|
+
required?: boolean;
|
|
17
|
+
'aria-describedby'?: string;
|
|
18
|
+
'aria-invalid'?: boolean;
|
|
19
|
+
className?: string;
|
|
20
|
+
testId?: string;
|
|
21
|
+
};
|
|
22
|
+
/** Etiket girdisi — yazılan metni kaldırılabilir çiplere çevirir. */
|
|
23
|
+
declare const TagInput: ({ values, onChange, label, placeholder, removeLabel, separators, maxTags, isDisabled, id, required, className, testId, "aria-describedby": describedBy, "aria-invalid": isInvalid, }: Props) => import("react").JSX.Element;
|
|
24
|
+
declare const _default: typeof TagInput;
|
|
25
|
+
export default _default;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as _, jsx as p } from "react/jsx-runtime";
|
|
3
|
+
import { memo as A, useId as L, useRef as T, useEffect as P, useState as b } from "react";
|
|
4
|
+
import { XLg as S } from "react-bootstrap-icons";
|
|
5
|
+
import { cx as k } from "../../helpers/class-name.helper.js";
|
|
6
|
+
import { named as U } from "../../helpers/component.helper.js";
|
|
7
|
+
import { resolveFormatter as x } from "../../helpers/label.helper.js";
|
|
8
|
+
import V from "../../hooks/useAnnounce.js";
|
|
9
|
+
import { useUi as X } from "../../theme/context.js";
|
|
10
|
+
const r = {"tagInput":"ui-tagInput-QraZR","tagInput__field":"ui-tagInput__field-HeWrC","tagInput--invalid":"ui-tagInput--invalid-NQogL","tagInput--disabled":"ui-tagInput--disabled--AJFF","tagInput__tag":"ui-tagInput__tag-D-ZWB","tagInput__tag--duplicate":"ui-tagInput__tag--duplicate-3-FMF","tagInput__remove":"ui-tagInput__remove-bpjGG"};
|
|
11
|
+
const G = ({
|
|
12
|
+
values: n,
|
|
13
|
+
onChange: m,
|
|
14
|
+
label: v,
|
|
15
|
+
placeholder: N,
|
|
16
|
+
removeLabel: D,
|
|
17
|
+
separators: R = ["Enter", ","],
|
|
18
|
+
maxTags: l,
|
|
19
|
+
isDisabled: d,
|
|
20
|
+
id: $,
|
|
21
|
+
required: j,
|
|
22
|
+
className: B,
|
|
23
|
+
testId: C,
|
|
24
|
+
"aria-describedby": E,
|
|
25
|
+
"aria-invalid": f
|
|
26
|
+
}) => {
|
|
27
|
+
const F = L(), K = $ ?? F, g = T(null), o = T(0);
|
|
28
|
+
P(
|
|
29
|
+
() => () => {
|
|
30
|
+
o.current && window.clearTimeout(o.current);
|
|
31
|
+
},
|
|
32
|
+
[]
|
|
33
|
+
);
|
|
34
|
+
const { labels: i } = X(), u = V(), [a, s] = b(""), [q, I] = b(null), y = l !== void 0 && n.length >= l, h = (t) => {
|
|
35
|
+
var c;
|
|
36
|
+
const e = t.trim();
|
|
37
|
+
if (e !== "") {
|
|
38
|
+
if (n.includes(e)) {
|
|
39
|
+
I(e), o.current && window.clearTimeout(o.current), o.current = window.setTimeout(() => I(null), 1e3), u(`${e} zaten ekli`, "assertive"), s("");
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
y || (m([...n, e]), s(""), u(x("TagInput.added", (c = i == null ? void 0 : i.tagInput) == null ? void 0 : c.added, e)));
|
|
43
|
+
}
|
|
44
|
+
}, w = (t) => {
|
|
45
|
+
var e;
|
|
46
|
+
m(n.filter((c) => c !== t)), u(x("TagInput.removed", (e = i == null ? void 0 : i.tagInput) == null ? void 0 : e.removed, t));
|
|
47
|
+
}, z = (t) => {
|
|
48
|
+
if (R.includes(t.key)) {
|
|
49
|
+
t.preventDefault(), h(a);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (t.key === "Backspace" && a === "") {
|
|
53
|
+
const e = n.at(-1);
|
|
54
|
+
e !== void 0 && w(e);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
return /* @__PURE__ */ _(
|
|
58
|
+
"div",
|
|
59
|
+
{
|
|
60
|
+
className: k(
|
|
61
|
+
r.tagInput,
|
|
62
|
+
d && r["tagInput--disabled"],
|
|
63
|
+
f && r["tagInput--invalid"],
|
|
64
|
+
B
|
|
65
|
+
),
|
|
66
|
+
"data-testid": C,
|
|
67
|
+
onClick: () => {
|
|
68
|
+
var t;
|
|
69
|
+
return (t = g.current) == null ? void 0 : t.focus();
|
|
70
|
+
},
|
|
71
|
+
children: [
|
|
72
|
+
n.map((t) => /* @__PURE__ */ _(
|
|
73
|
+
"span",
|
|
74
|
+
{
|
|
75
|
+
className: k(
|
|
76
|
+
r.tagInput__tag,
|
|
77
|
+
q === t && r["tagInput__tag--duplicate"]
|
|
78
|
+
),
|
|
79
|
+
children: [
|
|
80
|
+
t,
|
|
81
|
+
/* @__PURE__ */ p(
|
|
82
|
+
"button",
|
|
83
|
+
{
|
|
84
|
+
type: "button",
|
|
85
|
+
className: r.tagInput__remove,
|
|
86
|
+
"aria-label": `${t} — ${D}`,
|
|
87
|
+
disabled: d,
|
|
88
|
+
onClick: (e) => {
|
|
89
|
+
e.stopPropagation(), w(t);
|
|
90
|
+
},
|
|
91
|
+
children: /* @__PURE__ */ p(S, { "aria-hidden": !0 })
|
|
92
|
+
}
|
|
93
|
+
)
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
t
|
|
97
|
+
)),
|
|
98
|
+
/* @__PURE__ */ p(
|
|
99
|
+
"input",
|
|
100
|
+
{
|
|
101
|
+
ref: g,
|
|
102
|
+
id: K,
|
|
103
|
+
type: "text",
|
|
104
|
+
className: r.tagInput__field,
|
|
105
|
+
value: a,
|
|
106
|
+
placeholder: n.length === 0 ? N : void 0,
|
|
107
|
+
"aria-label": v,
|
|
108
|
+
"aria-describedby": E,
|
|
109
|
+
"aria-invalid": f,
|
|
110
|
+
"aria-required": j || void 0,
|
|
111
|
+
disabled: d || y,
|
|
112
|
+
onChange: (t) => s(t.target.value),
|
|
113
|
+
onKeyDown: z,
|
|
114
|
+
onBlur: () => h(a)
|
|
115
|
+
}
|
|
116
|
+
)
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
);
|
|
120
|
+
}, et = /* @__PURE__ */ A(/* @__PURE__ */ U(G, "TagInput"));
|
|
121
|
+
export {
|
|
122
|
+
et as default
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/TagInput/index.tsx"],"sourcesContent":["'use client';\n\nimport { type KeyboardEvent, memo, useEffect, useId, useRef, useState } from 'react';\n\nimport { XLg } from 'react-bootstrap-icons';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\nimport { resolveFormatter } from '../../helpers/label.helper';\nimport useAnnounce from '../../hooks/useAnnounce';\n\nimport { useUi } from '../../theme/context';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n values: string[];\n onChange: (values: string[]) => void;\n /** Alanın erişilebilir adı. */\n label: string;\n placeholder?: string;\n /** Her etiketin kaldırma düğmesinin ad öneki (\"Kaldır\"). */\n removeLabel: string;\n /** Etiketi bitiren tuşlar. */\n separators?: string[];\n /** En fazla kaç etiket. */\n maxTags?: number;\n isDisabled?: boolean;\n id?: string;\n /** Zorunluluk — `Field`in `FieldChildProps` sözleşmesi. */\n required?: boolean;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n className?: string;\n testId?: string;\n};\n\n/** Etiket girdisi — yazılan metni kaldırılabilir çiplere çevirir. */\nconst TagInput = ({\n values,\n onChange,\n label,\n placeholder,\n removeLabel,\n separators = ['Enter', ','],\n maxTags,\n isDisabled,\n id,\n required,\n className,\n testId,\n 'aria-describedby': describedBy,\n 'aria-invalid': isInvalid,\n}: Props) => {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const inputRef = useRef<HTMLInputElement>(null);\n\n /* ⚠ Yinelenen etiket uyarısının zamanlayıcısı REF'te tutulur ve unmount'ta temizlenir. */\n const duplicateTimerRef = useRef(0);\n\n useEffect(\n () => () => {\n if (duplicateTimerRef.current) window.clearTimeout(duplicateTimerRef.current);\n },\n [],\n );\n const { labels } = useUi();\n const announce = useAnnounce();\n\n const [draft, setDraft] = useState('');\n /* Yinelenen deger: var olan cip bir kare vurgulanir. */\n const [duplicate, setDuplicate] = useState<string | null>(null);\n\n const isFull = maxTags !== undefined && values.length >= maxTags;\n\n const commit = (raw: string) => {\n const value = raw.trim();\n if (value === '') return;\n\n if (values.includes(value)) {\n /* Sessizce yutmak yerine GOSTER: kullanici \"yazdim, kayboldu\" diyordu. */\n setDuplicate(value);\n if (duplicateTimerRef.current) window.clearTimeout(duplicateTimerRef.current);\n duplicateTimerRef.current = window.setTimeout(() => setDuplicate(null), 1_000);\n announce(`${value} zaten ekli`, 'assertive');\n setDraft('');\n return;\n }\n\n if (isFull) return;\n\n onChange([...values, value]);\n setDraft('');\n announce(resolveFormatter('TagInput.added', labels?.tagInput?.added, value));\n };\n\n const remove = (value: string) => {\n onChange(values.filter(item => item !== value));\n announce(resolveFormatter('TagInput.removed', labels?.tagInput?.removed, value));\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (separators.includes(event.key)) {\n event.preventDefault();\n commit(draft);\n return;\n }\n\n /* BOS girdide Backspace SON etiketi kaldirir — metin varken kaldirmaz. */\n if (event.key === 'Backspace' && draft === '') {\n const lastValue = values.at(-1);\n if (lastValue !== undefined) remove(lastValue);\n }\n };\n\n return (\n <div\n className={cx(\n styles.tagInput,\n isDisabled && styles['tagInput--disabled'],\n isInvalid && styles['tagInput--invalid'],\n className,\n )}\n data-testid={testId}\n /*\n * Kutunun herhangi bir yerine tiklamak girdiyi odaklar: cipler arasindaki bosluga tiklayan\n * kullanici hicbir sey olmadigini saniyordu.\n */\n onClick={() => inputRef.current?.focus()}\n >\n {values.map(value => (\n <span\n key={value}\n className={cx(\n styles.tagInput__tag,\n duplicate === value && styles['tagInput__tag--duplicate'],\n )}\n >\n {value}\n\n <button\n type=\"button\"\n className={styles.tagInput__remove}\n /*\n * Ad degeri ICERIR: on bes cipin hepsi \"Kaldir\" diye okundugunda hangisi oldugu belli\n * olmuyordu.\n */\n aria-label={`${value} — ${removeLabel}`}\n disabled={isDisabled}\n onClick={event => {\n event.stopPropagation();\n remove(value);\n }}\n >\n <XLg aria-hidden />\n </button>\n </span>\n ))}\n\n <input\n ref={inputRef}\n id={inputId}\n type=\"text\"\n className={styles.tagInput__field}\n value={draft}\n placeholder={values.length === 0 ? placeholder : undefined}\n aria-label={label}\n aria-describedby={describedBy}\n aria-invalid={isInvalid}\n /*\n * ⚠ Yerel `required` YAZILMAZ: alanin degeri etiket listesidir, girdi kutusu ise commit'ten\n * sonra BOSALIR.\n */\n aria-required={required || undefined}\n disabled={isDisabled || isFull}\n onChange={event => setDraft(event.target.value)}\n onKeyDown={handleKeyDown}\n /*\n * Alan terk edildiginde yazilan metin ETIKETE DONER: yarim kalmis bir metin kayboluyor ve\n * kullanici bunu ancak gonderdikten sonra fark ediyordu.\n */\n onBlur={() => commit(draft)}\n />\n </div>\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(TagInput, 'TagInput')) as typeof TagInput;\n"],"names":["TagInput","values","onChange","label","placeholder","removeLabel","separators","maxTags","isDisabled","id","required","className","testId","describedBy","isInvalid","generatedId","useId","inputId","inputRef","useRef","duplicateTimerRef","useEffect","labels","useUi","announce","useAnnounce","draft","setDraft","useState","duplicate","setDuplicate","isFull","commit","raw","value","resolveFormatter","_a","remove","item","handleKeyDown","event","lastValue","jsxs","cx","styles","jsx","XLg","index","memo","named"],"mappings":"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"}
|