@handijit/ui 0.0.0-stage → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +786 -2
- package/build/base.css +1 -0
- package/build/charts.cjs +2 -0
- package/build/charts.cjs.map +1 -0
- package/build/charts.css +1 -0
- package/build/charts.js +1866 -0
- package/build/charts.js.map +1 -0
- package/build/chat.cjs +4 -0
- package/build/chat.cjs.map +1 -0
- package/build/chat.css +1 -0
- package/build/chat.js +1121 -0
- package/build/chat.js.map +1 -0
- package/build/components/Accordion/index.cjs +2 -0
- package/build/components/Accordion/index.cjs.map +1 -0
- package/build/components/Accordion/index.d.ts +29 -0
- package/build/components/Accordion/index.js +42 -0
- package/build/components/Accordion/index.js.map +1 -0
- package/build/components/Accordion/style.css +1 -0
- package/build/components/Alert/index.cjs +2 -0
- package/build/components/Alert/index.cjs.map +1 -0
- package/build/components/Alert/index.d.ts +15 -0
- package/build/components/Alert/index.js +30 -0
- package/build/components/Alert/index.js.map +1 -0
- package/build/components/Alert/style.css +1 -0
- package/build/components/Avatar/index.cjs +2 -0
- package/build/components/Avatar/index.cjs.map +1 -0
- package/build/components/Avatar/index.d.ts +26 -0
- package/build/components/Avatar/index.js +57 -0
- package/build/components/Avatar/index.js.map +1 -0
- package/build/components/Avatar/style.css +1 -0
- package/build/components/Badge/index.cjs +2 -0
- package/build/components/Badge/index.cjs.map +1 -0
- package/build/components/Badge/index.d.ts +21 -0
- package/build/components/Badge/index.js +26 -0
- package/build/components/Badge/index.js.map +1 -0
- package/build/components/Badge/style.css +1 -0
- package/build/components/BottomSheet/index.cjs +2 -0
- package/build/components/BottomSheet/index.cjs.map +1 -0
- package/build/components/BottomSheet/index.d.ts +21 -0
- package/build/components/BottomSheet/index.js +85 -0
- package/build/components/BottomSheet/index.js.map +1 -0
- package/build/components/BottomSheet/style.css +1 -0
- package/build/components/Breadcrumb/index.cjs +2 -0
- package/build/components/Breadcrumb/index.cjs.map +1 -0
- package/build/components/Breadcrumb/index.d.ts +20 -0
- package/build/components/Breadcrumb/index.js +31 -0
- package/build/components/Breadcrumb/index.js.map +1 -0
- package/build/components/Breadcrumb/style.css +1 -0
- package/build/components/Button/index.cjs +2 -0
- package/build/components/Button/index.cjs.map +1 -0
- package/build/components/Button/index.d.ts +32 -0
- package/build/components/Button/index.js +88 -0
- package/build/components/Button/index.js.map +1 -0
- package/build/components/Button/style.css +1 -0
- package/build/components/Card/index.cjs +2 -0
- package/build/components/Card/index.cjs.map +1 -0
- package/build/components/Card/index.d.ts +51 -0
- package/build/components/Card/index.js +58 -0
- package/build/components/Card/index.js.map +1 -0
- package/build/components/Card/style.css +1 -0
- package/build/components/Carousel/index.cjs +2 -0
- package/build/components/Carousel/index.cjs.map +1 -0
- package/build/components/Carousel/index.d.ts +24 -0
- package/build/components/Carousel/index.js +111 -0
- package/build/components/Carousel/index.js.map +1 -0
- package/build/components/Carousel/style.css +1 -0
- package/build/components/Checkbox/index.cjs +2 -0
- package/build/components/Checkbox/index.cjs.map +1 -0
- package/build/components/Checkbox/index.d.ts +10 -0
- package/build/components/Checkbox/index.js +33 -0
- package/build/components/Checkbox/index.js.map +1 -0
- package/build/components/Checkbox/style.css +1 -0
- package/build/components/Chip/index.cjs +2 -0
- package/build/components/Chip/index.cjs.map +1 -0
- package/build/components/Chip/index.d.ts +27 -0
- package/build/components/Chip/index.js +67 -0
- package/build/components/Chip/index.js.map +1 -0
- package/build/components/Chip/style.css +1 -0
- package/build/components/ChipGroup/index.cjs +2 -0
- package/build/components/ChipGroup/index.cjs.map +1 -0
- package/build/components/ChipGroup/index.d.ts +34 -0
- package/build/components/ChipGroup/index.js +64 -0
- package/build/components/ChipGroup/index.js.map +1 -0
- package/build/components/ChipGroup/style.css +1 -0
- package/build/components/CodeBadge/index.cjs +2 -0
- package/build/components/CodeBadge/index.cjs.map +1 -0
- package/build/components/CodeBadge/index.d.ts +36 -0
- package/build/components/CodeBadge/index.js +62 -0
- package/build/components/CodeBadge/index.js.map +1 -0
- package/build/components/CodeBadge/style.css +1 -0
- package/build/components/Combobox/index.cjs +2 -0
- package/build/components/Combobox/index.cjs.map +1 -0
- package/build/components/Combobox/index.d.ts +6 -0
- package/build/components/Combobox/index.js +302 -0
- package/build/components/Combobox/index.js.map +1 -0
- package/build/components/Combobox/style.css +1 -0
- package/build/components/CommandPalette/index.cjs +2 -0
- package/build/components/CommandPalette/index.cjs.map +1 -0
- package/build/components/CommandPalette/index.d.ts +37 -0
- package/build/components/CommandPalette/index.js +181 -0
- package/build/components/CommandPalette/index.js.map +1 -0
- package/build/components/CommandPalette/style.css +1 -0
- package/build/components/ConfirmDialog/index.cjs +2 -0
- package/build/components/ConfirmDialog/index.cjs.map +1 -0
- package/build/components/ConfirmDialog/index.d.ts +34 -0
- package/build/components/ConfirmDialog/index.js +85 -0
- package/build/components/ConfirmDialog/index.js.map +1 -0
- package/build/components/CopyField/index.cjs +2 -0
- package/build/components/CopyField/index.cjs.map +1 -0
- package/build/components/CopyField/index.d.ts +20 -0
- package/build/components/CopyField/index.js +44 -0
- package/build/components/CopyField/index.js.map +1 -0
- package/build/components/CopyField/style.css +1 -0
- package/build/components/DataTable/index.cjs +2 -0
- package/build/components/DataTable/index.cjs.map +1 -0
- package/build/components/DataTable/index.d.ts +60 -0
- package/build/components/DataTable/index.js +109 -0
- package/build/components/DataTable/index.js.map +1 -0
- package/build/components/DataTable/style.css +1 -0
- package/build/components/DateField/index.cjs +2 -0
- package/build/components/DateField/index.cjs.map +1 -0
- package/build/components/DateField/index.d.ts +44 -0
- package/build/components/DateField/index.js +79 -0
- package/build/components/DateField/index.js.map +1 -0
- package/build/components/DateField/style.css +1 -0
- package/build/components/Directory/index.cjs +2 -0
- package/build/components/Directory/index.cjs.map +1 -0
- package/build/components/Directory/index.d.ts +51 -0
- package/build/components/Directory/index.js +46 -0
- package/build/components/Directory/index.js.map +1 -0
- package/build/components/Directory/style.css +1 -0
- package/build/components/Disclosure/index.cjs +2 -0
- package/build/components/Disclosure/index.cjs.map +1 -0
- package/build/components/Disclosure/index.d.ts +34 -0
- package/build/components/Disclosure/index.js +64 -0
- package/build/components/Disclosure/index.js.map +1 -0
- package/build/components/Disclosure/style.css +1 -0
- package/build/components/Divider/index.cjs +2 -0
- package/build/components/Divider/index.cjs.map +1 -0
- package/build/components/Divider/index.d.ts +10 -0
- package/build/components/Divider/index.js +24 -0
- package/build/components/Divider/index.js.map +1 -0
- package/build/components/Divider/style.css +1 -0
- package/build/components/Drawer/index.cjs +2 -0
- package/build/components/Drawer/index.cjs.map +1 -0
- package/build/components/Drawer/index.d.ts +22 -0
- package/build/components/Drawer/index.js +88 -0
- package/build/components/Drawer/index.js.map +1 -0
- package/build/components/Drawer/style.css +1 -0
- package/build/components/EmptyState/index.cjs +2 -0
- package/build/components/EmptyState/index.cjs.map +1 -0
- package/build/components/EmptyState/index.d.ts +19 -0
- package/build/components/EmptyState/index.js +35 -0
- package/build/components/EmptyState/index.js.map +1 -0
- package/build/components/EmptyState/style.css +1 -0
- package/build/components/Field/index.cjs +2 -0
- package/build/components/Field/index.cjs.map +1 -0
- package/build/components/Field/index.d.ts +31 -0
- package/build/components/Field/index.js +52 -0
- package/build/components/Field/index.js.map +1 -0
- package/build/components/Field/style.css +1 -0
- package/build/components/FileUpload/index.cjs +2 -0
- package/build/components/FileUpload/index.cjs.map +1 -0
- package/build/components/FileUpload/index.d.ts +42 -0
- package/build/components/FileUpload/index.js +145 -0
- package/build/components/FileUpload/index.js.map +1 -0
- package/build/components/FileUpload/style.css +1 -0
- package/build/components/FilterBar/index.cjs +2 -0
- package/build/components/FilterBar/index.cjs.map +1 -0
- package/build/components/FilterBar/index.d.ts +28 -0
- package/build/components/FilterBar/index.js +35 -0
- package/build/components/FilterBar/index.js.map +1 -0
- package/build/components/FilterBar/style.css +1 -0
- package/build/components/IconButton/index.cjs +2 -0
- package/build/components/IconButton/index.cjs.map +1 -0
- package/build/components/IconButton/index.d.ts +22 -0
- package/build/components/IconButton/index.js +61 -0
- package/build/components/IconButton/index.js.map +1 -0
- package/build/components/IconButton/style.css +1 -0
- package/build/components/Input/index.cjs +2 -0
- package/build/components/Input/index.cjs.map +1 -0
- package/build/components/Input/index.d.ts +15 -0
- package/build/components/Input/index.js +52 -0
- package/build/components/Input/index.js.map +1 -0
- package/build/components/Input/style.css +1 -0
- package/build/components/Kbd/index.cjs +2 -0
- package/build/components/Kbd/index.cjs.map +1 -0
- package/build/components/Kbd/index.d.ts +12 -0
- package/build/components/Kbd/index.js +13 -0
- package/build/components/Kbd/index.js.map +1 -0
- package/build/components/Kbd/style.css +1 -0
- package/build/components/Link/index.cjs +2 -0
- package/build/components/Link/index.cjs.map +1 -0
- package/build/components/Link/index.d.ts +5 -0
- package/build/components/Link/index.js +11 -0
- package/build/components/Link/index.js.map +1 -0
- package/build/components/Menu/index.cjs +2 -0
- package/build/components/Menu/index.cjs.map +1 -0
- package/build/components/Menu/index.d.ts +46 -0
- package/build/components/Menu/index.js +241 -0
- package/build/components/Menu/index.js.map +1 -0
- package/build/components/Menu/style.css +1 -0
- package/build/components/Modal/index.cjs +2 -0
- package/build/components/Modal/index.cjs.map +1 -0
- package/build/components/Modal/index.d.ts +28 -0
- package/build/components/Modal/index.js +92 -0
- package/build/components/Modal/index.js.map +1 -0
- package/build/components/Modal/style.css +1 -0
- package/build/components/PageHeader/index.cjs +2 -0
- package/build/components/PageHeader/index.cjs.map +1 -0
- package/build/components/PageHeader/index.d.ts +24 -0
- package/build/components/PageHeader/index.js +34 -0
- package/build/components/PageHeader/index.js.map +1 -0
- package/build/components/PageHeader/style.css +1 -0
- package/build/components/Pagination/index.cjs +2 -0
- package/build/components/Pagination/index.cjs.map +1 -0
- package/build/components/Pagination/index.d.ts +39 -0
- package/build/components/Pagination/index.js +128 -0
- package/build/components/Pagination/index.js.map +1 -0
- package/build/components/Pagination/style.css +1 -0
- package/build/components/Panel/index.cjs +2 -0
- package/build/components/Panel/index.cjs.map +1 -0
- package/build/components/Panel/index.d.ts +43 -0
- package/build/components/Panel/index.js +55 -0
- package/build/components/Panel/index.js.map +1 -0
- package/build/components/Panel/style.css +1 -0
- package/build/components/PasswordInput/index.cjs +2 -0
- package/build/components/PasswordInput/index.cjs.map +1 -0
- package/build/components/PasswordInput/index.d.ts +14 -0
- package/build/components/PasswordInput/index.js +40 -0
- package/build/components/PasswordInput/index.js.map +1 -0
- package/build/components/PasswordInput/style.css +1 -0
- package/build/components/Popover/index.cjs +2 -0
- package/build/components/Popover/index.cjs.map +1 -0
- package/build/components/Popover/index.d.ts +20 -0
- package/build/components/Popover/index.js +91 -0
- package/build/components/Popover/index.js.map +1 -0
- package/build/components/Popover/style.css +1 -0
- package/build/components/Price/index.cjs +2 -0
- package/build/components/Price/index.cjs.map +1 -0
- package/build/components/Price/index.d.ts +22 -0
- package/build/components/Price/index.js +46 -0
- package/build/components/Price/index.js.map +1 -0
- package/build/components/Price/style.css +1 -0
- package/build/components/Progress/index.cjs +2 -0
- package/build/components/Progress/index.cjs.map +1 -0
- package/build/components/Progress/index.d.ts +49 -0
- package/build/components/Progress/index.js +120 -0
- package/build/components/Progress/index.js.map +1 -0
- package/build/components/Progress/style.css +1 -0
- package/build/components/PromptDialog/index.cjs +2 -0
- package/build/components/PromptDialog/index.cjs.map +1 -0
- package/build/components/PromptDialog/index.d.ts +36 -0
- package/build/components/PromptDialog/index.js +119 -0
- package/build/components/PromptDialog/index.js.map +1 -0
- package/build/components/PromptDialog/style.css +1 -0
- package/build/components/QuantityStepper/index.cjs +2 -0
- package/build/components/QuantityStepper/index.cjs.map +1 -0
- package/build/components/QuantityStepper/index.d.ts +21 -0
- package/build/components/QuantityStepper/index.js +106 -0
- package/build/components/QuantityStepper/index.js.map +1 -0
- package/build/components/QuantityStepper/style.css +1 -0
- package/build/components/Radio/index.cjs +2 -0
- package/build/components/Radio/index.cjs.map +1 -0
- package/build/components/Radio/index.d.ts +12 -0
- package/build/components/Radio/index.js +35 -0
- package/build/components/Radio/index.js.map +1 -0
- package/build/components/Radio/style.css +1 -0
- package/build/components/RadioCard/index.cjs +2 -0
- package/build/components/RadioCard/index.cjs.map +1 -0
- package/build/components/RadioCard/index.d.ts +16 -0
- package/build/components/RadioCard/index.js +48 -0
- package/build/components/RadioCard/index.js.map +1 -0
- package/build/components/RadioCard/style.css +1 -0
- package/build/components/RangeSlider/index.cjs +2 -0
- package/build/components/RangeSlider/index.cjs.map +1 -0
- package/build/components/RangeSlider/index.d.ts +26 -0
- package/build/components/RangeSlider/index.js +102 -0
- package/build/components/RangeSlider/index.js.map +1 -0
- package/build/components/RangeSlider/style.css +1 -0
- package/build/components/Rating/index.cjs +2 -0
- package/build/components/Rating/index.cjs.map +1 -0
- package/build/components/Rating/index.d.ts +16 -0
- package/build/components/Rating/index.js +29 -0
- package/build/components/Rating/index.js.map +1 -0
- package/build/components/Rating/style.css +1 -0
- package/build/components/RatingInput/index.cjs +2 -0
- package/build/components/RatingInput/index.cjs.map +1 -0
- package/build/components/RatingInput/index.d.ts +21 -0
- package/build/components/RatingInput/index.js +75 -0
- package/build/components/RatingInput/index.js.map +1 -0
- package/build/components/RatingInput/style.css +1 -0
- package/build/components/ScrollArea/index.cjs +2 -0
- package/build/components/ScrollArea/index.cjs.map +1 -0
- package/build/components/ScrollArea/index.d.ts +23 -0
- package/build/components/ScrollArea/index.js +65 -0
- package/build/components/ScrollArea/index.js.map +1 -0
- package/build/components/ScrollArea/style.css +1 -0
- package/build/components/SectionHeader/index.cjs +2 -0
- package/build/components/SectionHeader/index.cjs.map +1 -0
- package/build/components/SectionHeader/index.d.ts +17 -0
- package/build/components/SectionHeader/index.js +25 -0
- package/build/components/SectionHeader/index.js.map +1 -0
- package/build/components/SectionHeader/style.css +1 -0
- package/build/components/SegmentedControl/index.cjs +2 -0
- package/build/components/SegmentedControl/index.cjs.map +1 -0
- package/build/components/SegmentedControl/index.d.ts +24 -0
- package/build/components/SegmentedControl/index.js +69 -0
- package/build/components/SegmentedControl/index.js.map +1 -0
- package/build/components/SegmentedControl/style.css +1 -0
- package/build/components/Select/index.cjs +2 -0
- package/build/components/Select/index.cjs.map +1 -0
- package/build/components/Select/index.d.ts +39 -0
- package/build/components/Select/index.js +179 -0
- package/build/components/Select/index.js.map +1 -0
- package/build/components/Select/style.css +1 -0
- package/build/components/Skeleton/index.cjs +2 -0
- package/build/components/Skeleton/index.cjs.map +1 -0
- package/build/components/Skeleton/index.d.ts +25 -0
- package/build/components/Skeleton/index.js +50 -0
- package/build/components/Skeleton/index.js.map +1 -0
- package/build/components/Skeleton/style.css +1 -0
- package/build/components/Spinner/index.cjs +2 -0
- package/build/components/Spinner/index.cjs.map +1 -0
- package/build/components/Spinner/index.d.ts +11 -0
- package/build/components/Spinner/index.js +15 -0
- package/build/components/Spinner/index.js.map +1 -0
- package/build/components/Spinner/style.css +1 -0
- package/build/components/Stat/index.cjs +2 -0
- package/build/components/Stat/index.cjs.map +1 -0
- package/build/components/Stat/index.d.ts +34 -0
- package/build/components/Stat/index.js +72 -0
- package/build/components/Stat/index.js.map +1 -0
- package/build/components/Stat/style.css +1 -0
- package/build/components/StatusDot/index.cjs +2 -0
- package/build/components/StatusDot/index.cjs.map +1 -0
- package/build/components/StatusDot/index.d.ts +23 -0
- package/build/components/StatusDot/index.js +23 -0
- package/build/components/StatusDot/index.js.map +1 -0
- package/build/components/StatusDot/style.css +1 -0
- package/build/components/Steps/index.cjs +2 -0
- package/build/components/Steps/index.cjs.map +1 -0
- package/build/components/Steps/index.d.ts +23 -0
- package/build/components/Steps/index.js +69 -0
- package/build/components/Steps/index.js.map +1 -0
- package/build/components/Steps/style.css +1 -0
- package/build/components/SummaryCard/index.cjs +2 -0
- package/build/components/SummaryCard/index.cjs.map +1 -0
- package/build/components/SummaryCard/index.d.ts +24 -0
- package/build/components/SummaryCard/index.js +33 -0
- package/build/components/SummaryCard/index.js.map +1 -0
- package/build/components/SummaryCard/style.css +1 -0
- package/build/components/Switch/index.cjs +2 -0
- package/build/components/Switch/index.cjs.map +1 -0
- package/build/components/Switch/index.d.ts +16 -0
- package/build/components/Switch/index.js +42 -0
- package/build/components/Switch/index.js.map +1 -0
- package/build/components/Switch/style.css +1 -0
- package/build/components/Table/index.cjs +2 -0
- package/build/components/Table/index.cjs.map +1 -0
- package/build/components/Table/index.d.ts +28 -0
- package/build/components/Table/index.js +58 -0
- package/build/components/Table/index.js.map +1 -0
- package/build/components/Table/style.css +1 -0
- package/build/components/TableCheckbox/index.cjs +2 -0
- package/build/components/TableCheckbox/index.cjs.map +1 -0
- package/build/components/TableCheckbox/index.d.ts +15 -0
- package/build/components/TableCheckbox/index.js +31 -0
- package/build/components/TableCheckbox/index.js.map +1 -0
- package/build/components/TableCheckbox/style.css +1 -0
- package/build/components/Tabs/index.cjs +2 -0
- package/build/components/Tabs/index.cjs.map +1 -0
- package/build/components/Tabs/index.d.ts +27 -0
- package/build/components/Tabs/index.js +102 -0
- package/build/components/Tabs/index.js.map +1 -0
- package/build/components/Tabs/style.css +1 -0
- package/build/components/TagInput/index.cjs +2 -0
- package/build/components/TagInput/index.cjs.map +1 -0
- package/build/components/TagInput/index.d.ts +25 -0
- package/build/components/TagInput/index.js +124 -0
- package/build/components/TagInput/index.js.map +1 -0
- package/build/components/TagInput/style.css +1 -0
- package/build/components/TextLink/index.cjs +2 -0
- package/build/components/TextLink/index.cjs.map +1 -0
- package/build/components/TextLink/index.d.ts +16 -0
- package/build/components/TextLink/index.js +32 -0
- package/build/components/TextLink/index.js.map +1 -0
- package/build/components/TextLink/style.css +1 -0
- package/build/components/Textarea/index.cjs +2 -0
- package/build/components/Textarea/index.cjs.map +1 -0
- package/build/components/Textarea/index.d.ts +20 -0
- package/build/components/Textarea/index.js +68 -0
- package/build/components/Textarea/index.js.map +1 -0
- package/build/components/Textarea/style.css +1 -0
- package/build/components/Tile/index.cjs +2 -0
- package/build/components/Tile/index.cjs.map +1 -0
- package/build/components/Tile/index.d.ts +19 -0
- package/build/components/Tile/index.js +24 -0
- package/build/components/Tile/index.js.map +1 -0
- package/build/components/Tile/style.css +1 -0
- package/build/components/Timeline/index.cjs +2 -0
- package/build/components/Timeline/index.cjs.map +1 -0
- package/build/components/Timeline/index.d.ts +24 -0
- package/build/components/Timeline/index.js +56 -0
- package/build/components/Timeline/index.js.map +1 -0
- package/build/components/Timeline/style.css +1 -0
- package/build/components/Toast/index.cjs +2 -0
- package/build/components/Toast/index.cjs.map +1 -0
- package/build/components/Toast/index.d.ts +43 -0
- package/build/components/Toast/index.js +136 -0
- package/build/components/Toast/index.js.map +1 -0
- package/build/components/Toast/style.css +1 -0
- package/build/components/ToastPortal/index.cjs +2 -0
- package/build/components/ToastPortal/index.cjs.map +1 -0
- package/build/components/ToastPortal/index.d.ts +8 -0
- package/build/components/ToastPortal/index.js +15 -0
- package/build/components/ToastPortal/index.js.map +1 -0
- package/build/components/Tooltip/index.cjs +2 -0
- package/build/components/Tooltip/index.cjs.map +1 -0
- package/build/components/Tooltip/index.d.ts +23 -0
- package/build/components/Tooltip/index.js +116 -0
- package/build/components/Tooltip/index.js.map +1 -0
- package/build/components/Tooltip/style.css +1 -0
- package/build/constants/breakpoint.constants.cjs +2 -0
- package/build/constants/breakpoint.constants.cjs.map +1 -0
- package/build/constants/breakpoint.constants.d.ts +13 -0
- package/build/constants/breakpoint.constants.js +11 -0
- package/build/constants/breakpoint.constants.js.map +1 -0
- package/build/constants/combobox.constants.cjs +2 -0
- package/build/constants/combobox.constants.cjs.map +1 -0
- package/build/constants/combobox.constants.d.ts +11 -0
- package/build/constants/combobox.constants.js +7 -0
- package/build/constants/combobox.constants.js.map +1 -0
- package/build/constants/scroll.constants.cjs +2 -0
- package/build/constants/scroll.constants.cjs.map +1 -0
- package/build/constants/scroll.constants.d.ts +7 -0
- package/build/constants/scroll.constants.js +5 -0
- package/build/constants/scroll.constants.js.map +1 -0
- package/build/enums/ui-size.enum.cjs +2 -0
- package/build/enums/ui-size.enum.cjs.map +1 -0
- package/build/enums/ui-size.enum.d.ts +12 -0
- package/build/enums/ui-size.enum.js +5 -0
- package/build/enums/ui-size.enum.js.map +1 -0
- package/build/enums/ui-variant.enum.cjs +2 -0
- package/build/enums/ui-variant.enum.cjs.map +1 -0
- package/build/enums/ui-variant.enum.d.ts +20 -0
- package/build/enums/ui-variant.enum.js +5 -0
- package/build/enums/ui-variant.enum.js.map +1 -0
- package/build/helpers/class-name.helper.cjs +2 -0
- package/build/helpers/class-name.helper.cjs.map +1 -0
- package/build/helpers/class-name.helper.d.ts +3 -0
- package/build/helpers/class-name.helper.js +10 -0
- package/build/helpers/class-name.helper.js.map +1 -0
- package/build/helpers/component.helper.cjs +2 -0
- package/build/helpers/component.helper.cjs.map +1 -0
- package/build/helpers/component.helper.d.ts +13 -0
- package/build/helpers/component.helper.js +5 -0
- package/build/helpers/component.helper.js.map +1 -0
- package/build/helpers/focus.helper.cjs +2 -0
- package/build/helpers/focus.helper.cjs.map +1 -0
- package/build/helpers/focus.helper.d.ts +42 -0
- package/build/helpers/focus.helper.js +65 -0
- package/build/helpers/focus.helper.js.map +1 -0
- package/build/helpers/label.helper.cjs +2 -0
- package/build/helpers/label.helper.cjs.map +1 -0
- package/build/helpers/label.helper.d.ts +11 -0
- package/build/helpers/label.helper.js +11 -0
- package/build/helpers/label.helper.js.map +1 -0
- package/build/helpers/portal.helper.cjs +2 -0
- package/build/helpers/portal.helper.cjs.map +1 -0
- package/build/helpers/portal.helper.d.ts +28 -0
- package/build/helpers/portal.helper.js +36 -0
- package/build/helpers/portal.helper.js.map +1 -0
- package/build/helpers/scroll.helper.cjs +2 -0
- package/build/helpers/scroll.helper.cjs.map +1 -0
- package/build/helpers/scroll.helper.d.ts +8 -0
- package/build/helpers/scroll.helper.js +11 -0
- package/build/helpers/scroll.helper.js.map +1 -0
- package/build/helpers/text.helper.cjs +2 -0
- package/build/helpers/text.helper.cjs.map +1 -0
- package/build/helpers/text.helper.d.ts +5 -0
- package/build/helpers/text.helper.js +6 -0
- package/build/helpers/text.helper.js.map +1 -0
- package/build/helpers/theme.helper.cjs +2 -0
- package/build/helpers/theme.helper.cjs.map +1 -0
- package/build/helpers/theme.helper.d.ts +18 -0
- package/build/helpers/theme.helper.js +37 -0
- package/build/helpers/theme.helper.js.map +1 -0
- package/build/hooks/useAnnounce.cjs +2 -0
- package/build/hooks/useAnnounce.cjs.map +1 -0
- package/build/hooks/useAnnounce.d.ts +4 -0
- package/build/hooks/useAnnounce.js +23 -0
- package/build/hooks/useAnnounce.js.map +1 -0
- package/build/hooks/useAsyncSearch.cjs +2 -0
- package/build/hooks/useAsyncSearch.cjs.map +1 -0
- package/build/hooks/useAsyncSearch.d.ts +11 -0
- package/build/hooks/useAsyncSearch.js +17 -0
- package/build/hooks/useAsyncSearch.js.map +1 -0
- package/build/hooks/useCopyFeedback.cjs +2 -0
- package/build/hooks/useCopyFeedback.cjs.map +1 -0
- package/build/hooks/useCopyFeedback.d.ts +10 -0
- package/build/hooks/useCopyFeedback.js +25 -0
- package/build/hooks/useCopyFeedback.js.map +1 -0
- package/build/hooks/useDismissOnEscape.cjs +2 -0
- package/build/hooks/useDismissOnEscape.cjs.map +1 -0
- package/build/hooks/useDismissOnEscape.d.ts +12 -0
- package/build/hooks/useDismissOnEscape.js +18 -0
- package/build/hooks/useDismissOnEscape.js.map +1 -0
- package/build/hooks/useListboxNavigation.cjs +2 -0
- package/build/hooks/useListboxNavigation.cjs.map +1 -0
- package/build/hooks/useListboxNavigation.d.ts +7 -0
- package/build/hooks/useListboxNavigation.js +53 -0
- package/build/hooks/useListboxNavigation.js.map +1 -0
- package/build/hooks/usePortalSurface.cjs +2 -0
- package/build/hooks/usePortalSurface.cjs.map +1 -0
- package/build/hooks/usePortalSurface.d.ts +25 -0
- package/build/hooks/usePortalSurface.js +19 -0
- package/build/hooks/usePortalSurface.js.map +1 -0
- package/build/hooks/usePositioning.cjs +2 -0
- package/build/hooks/usePositioning.cjs.map +1 -0
- package/build/hooks/usePositioning.d.ts +13 -0
- package/build/hooks/usePositioning.js +74 -0
- package/build/hooks/usePositioning.js.map +1 -0
- package/build/hooks/useScrollLock.cjs +2 -0
- package/build/hooks/useScrollLock.cjs.map +1 -0
- package/build/hooks/useScrollLock.d.ts +2 -0
- package/build/hooks/useScrollLock.js +34 -0
- package/build/hooks/useScrollLock.js.map +1 -0
- package/build/hooks/useSheetViewport.cjs +2 -0
- package/build/hooks/useSheetViewport.cjs.map +1 -0
- package/build/hooks/useSheetViewport.d.ts +6 -0
- package/build/hooks/useSheetViewport.js +29 -0
- package/build/hooks/useSheetViewport.js.map +1 -0
- package/build/hooks/useStickToBottom.cjs +2 -0
- package/build/hooks/useStickToBottom.cjs.map +1 -0
- package/build/hooks/useStickToBottom.d.ts +12 -0
- package/build/hooks/useStickToBottom.js +39 -0
- package/build/hooks/useStickToBottom.js.map +1 -0
- package/build/hooks/useUiTheme.cjs +2 -0
- package/build/hooks/useUiTheme.cjs.map +1 -0
- package/build/hooks/useUiTheme.d.ts +10 -0
- package/build/hooks/useUiTheme.js +42 -0
- package/build/hooks/useUiTheme.js.map +1 -0
- package/build/hooks/useUiTokens.cjs +2 -0
- package/build/hooks/useUiTokens.cjs.map +1 -0
- package/build/hooks/useUiTokens.d.ts +11 -0
- package/build/hooks/useUiTokens.js +36 -0
- package/build/hooks/useUiTokens.js.map +1 -0
- package/build/hooks/useVirtualList.cjs +2 -0
- package/build/hooks/useVirtualList.cjs.map +1 -0
- package/build/hooks/useVirtualList.d.ts +13 -0
- package/build/hooks/useVirtualList.js +41 -0
- package/build/hooks/useVirtualList.js.map +1 -0
- package/build/index.cjs +2 -0
- package/build/index.cjs.map +1 -0
- package/build/index.d.ts +93 -0
- package/build/index.js +199 -0
- package/build/index.js.map +1 -0
- package/build/scss/_index.scss +7 -0
- package/build/scss/_mixins.scss +828 -0
- package/build/scss/_variables.scss +243 -0
- package/build/styles/base.d.ts +0 -0
- package/build/styles.css +133 -0
- package/build/theme/UiProvider.cjs +2 -0
- package/build/theme/UiProvider.cjs.map +1 -0
- package/build/theme/UiProvider.d.ts +23 -0
- package/build/theme/UiProvider.js +12 -0
- package/build/theme/UiProvider.js.map +1 -0
- package/build/theme/UiThemeScript.cjs +2 -0
- package/build/theme/UiThemeScript.cjs.map +1 -0
- package/build/theme/UiThemeScript.d.ts +22 -0
- package/build/theme/UiThemeScript.js +8 -0
- package/build/theme/UiThemeScript.js.map +1 -0
- package/build/theme/context.cjs +2 -0
- package/build/theme/context.cjs.map +1 -0
- package/build/theme/context.d.ts +5 -0
- package/build/theme/context.js +8 -0
- package/build/theme/context.js.map +1 -0
- package/build/types/charts/AreaChart/index.d.ts +14 -0
- package/build/types/charts/BarChart/index.d.ts +16 -0
- package/build/types/charts/BoxPlot/index.d.ts +43 -0
- package/build/types/charts/ComposedChart/index.d.ts +16 -0
- package/build/types/charts/Heatmap/index.d.ts +30 -0
- package/build/types/charts/Histogram/index.d.ts +29 -0
- package/build/types/charts/LineChart/index.d.ts +14 -0
- package/build/types/charts/PieChart/index.d.ts +36 -0
- package/build/types/charts/RadarChart/index.d.ts +40 -0
- package/build/types/charts/ScatterPlot/index.d.ts +41 -0
- package/build/types/charts/core/CartesianChart.d.ts +43 -0
- package/build/types/charts/core/ChartFrame.d.ts +55 -0
- package/build/types/charts/core/axes.d.ts +37 -0
- package/build/types/charts/core/cartesian.d.ts +80 -0
- package/build/types/charts/core/format.d.ts +19 -0
- package/build/types/charts/core/margins.d.ts +9 -0
- package/build/types/charts/core/palette.d.ts +11 -0
- package/build/types/charts/core/path.d.ts +24 -0
- package/build/types/charts/core/scale.d.ts +40 -0
- package/build/types/charts/core/series.d.ts +11 -0
- package/build/types/charts/core/spatial.d.ts +12 -0
- package/build/types/charts/core/stats.d.ts +34 -0
- package/build/types/charts/core/types.d.ts +31 -0
- package/build/types/charts/core/useChartWidth.d.ts +7 -0
- package/build/types/charts/index.d.ts +21 -0
- package/build/types/chat/ActionList/index.d.ts +46 -0
- package/build/types/chat/AppBar/index.d.ts +21 -0
- package/build/types/chat/ChatMessage/index.d.ts +24 -0
- package/build/types/chat/ChatThread/index.d.ts +24 -0
- package/build/types/chat/Citation/index.d.ts +15 -0
- package/build/types/chat/CodeBlock/format.d.ts +7 -0
- package/build/types/chat/CodeBlock/grammars.d.ts +44 -0
- package/build/types/chat/CodeBlock/highlight.d.ts +22 -0
- package/build/types/chat/CodeBlock/index.d.ts +33 -0
- package/build/types/chat/DescriptionList/index.d.ts +16 -0
- package/build/types/chat/Legend/index.d.ts +21 -0
- package/build/types/chat/MessageActions/index.d.ts +21 -0
- package/build/types/chat/PromptInput/index.d.ts +47 -0
- package/build/types/chat/PromptSuggestions/index.d.ts +25 -0
- package/build/types/chat/Prose/index.d.ts +15 -0
- package/build/types/chat/ReasoningBlock/index.d.ts +24 -0
- package/build/types/chat/ReasoningText/index.d.ts +14 -0
- package/build/types/chat/SegmentBar/index.d.ts +46 -0
- package/build/types/chat/SourceList/index.d.ts +25 -0
- package/build/types/chat/TerminalOutput/index.d.ts +25 -0
- package/build/types/chat/ToolCall/index.d.ts +41 -0
- package/build/types/chat/index.d.ts +26 -0
- package/build/types/combobox.type.d.ts +49 -0
- package/build/types/common-element-props.type.d.ts +8 -0
- package/build/types/helpers/class-name.helper.d.ts +3 -0
- package/build/types/helpers/component.helper.d.ts +13 -0
- package/build/types/helpers/label.helper.d.ts +12 -0
- package/build/types/hook.type.d.ts +36 -0
- package/build/types/link.type.d.ts +14 -0
- package/build/types/positioning.type.d.ts +38 -0
- package/build/types/theme.type.d.ts +181 -0
- package/build/types/types/common-element-props.type.d.ts +8 -0
- package/build/types/types/link.type.d.ts +14 -0
- package/build/types/types/theme.type.d.ts +181 -0
- package/package.json +487 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Popover/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n cloneElement,\n isValidElement,\n memo,\n type ReactElement,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\nimport useDismissOnEscape from '../../hooks/useDismissOnEscape';\nimport { captureFocus, focusFirstMeaningful } from '../../helpers/focus.helper';\nimport usePortalSurface from '../../hooks/usePortalSurface';\nimport usePositioning from '../../hooks/usePositioning';\n\nimport styles from './index.module.scss';\nimport type { PositionAlign, PositionSide } from '@/types/positioning.type';\n\ntype Props = {\n /** Tetikleyici. */\n trigger: ReactElement;\n children: ReactNode;\n /** Yüzeyin erişilebilir adı. */\n label: string;\n side?: PositionSide;\n align?: PositionAlign;\n /** Kontrollü kullanım. */\n isOpen?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n className?: string;\n testId?: string;\n};\n\n/** Popover — eylem taşıyabilen, odaklanabilir yüzey. */\nconst Popover = ({\n trigger,\n children,\n label,\n side = 'bottom',\n align = 'start',\n isOpen: controlledOpen,\n onOpenChange,\n className,\n testId,\n}: Props) => {\n const id = useId();\n const anchorRef = useRef<HTMLElement>(null);\n const surfaceRef = useRef<HTMLDivElement>(null);\n const restoreRef = useRef<(() => void) | null>(null);\n\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n\n const positioning = usePositioning(anchorRef, surfaceRef, { side, align, isOpen });\n\n const portal = usePortalSurface(isOpen, anchorRef, surfaceRef);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n /* Acilista odak ICERI girer, kapanista TETIKLEYICIYE doner. */\n useEffect(() => {\n if (!isOpen) return;\n\n restoreRef.current = captureFocus();\n const surface = surfaceRef.current;\n if (surface) focusFirstMeaningful(surface);\n\n return () => {\n restoreRef.current?.();\n restoreRef.current = null;\n };\n }, [isOpen]);\n\n const close = useCallback(() => setOpen(false), [setOpen]);\n useDismissOnEscape(isOpen, close);\n\n /*\n * DISARI tiklama da belge duzeyinde: odak yuzeyin icinde olmayabilir (fareyle acilmis bir\n * popover).\n */\n useEffect(() => {\n if (!isOpen) return;\n\n const handlePointerDown = (event: globalThis.MouseEvent) => {\n const target = event.target as Node;\n if (surfaceRef.current?.contains(target)) return;\n if (anchorRef.current?.contains(target)) return;\n setOpen(false);\n };\n\n /* `mousedown`: `click` beklerken kullanici surukleyerek secim yaparsa yuzey kapanmiyordu. */\n document.addEventListener('mousedown', handlePointerDown);\n\n return () => document.removeEventListener('mousedown', handlePointerDown);\n }, [isOpen, setOpen]);\n\n if (!isValidElement(trigger)) return null;\n\n const triggerProps = trigger.props as Record<string, unknown>;\n\n const anchor = cloneElement(trigger as ReactElement<Record<string, unknown>>, {\n ref: anchorRef,\n 'aria-expanded': isOpen,\n 'aria-haspopup': 'dialog',\n 'aria-controls': isOpen ? id : undefined,\n onClick: (event: React.MouseEvent) => {\n (triggerProps.onClick as ((event: React.MouseEvent) => void) | undefined)?.(event);\n setOpen(!isOpen);\n },\n });\n\n return (\n <>\n {anchor}\n\n {isOpen &&\n portal.container &&\n createPortal(\n <div\n ref={surfaceRef}\n id={id}\n /* ⚠ Modal içinden açıldığında üst katman ZORUNLU — `portal.helper`. */\n {...portal.attributes}\n /*\n * `role=\"dialog\"` ama `aria-modal` YOK: yuzey kipsel degil ve `aria-modal=\"true\"`\n * yazmak ekran okuyucuya sayfanin geri kalaninin erisilemez oldugunu…\n */\n role=\"dialog\"\n aria-label={label}\n className={cx(styles.popover, styles[`popover--${positioning.side}`], className)}\n style={{\n ...positioning.style,\n ...portal.style,\n visibility: positioning.isPositioned ? 'visible' : 'hidden',\n }}\n data-testid={testId}\n /*\n * Odak yuzeyin DISINA ciktiginda kapanir: kipsel olmayan bir yuzeyde odagi hapsetmek\n * kullaniciyi sayfadan koparirdi.\n * ⚠ AMA \"DISI\" DOM AGACIYLA OLCULEMEZ.\n */\n onBlur={event => {\n const next = event.relatedTarget as HTMLElement | null;\n if (!next) return;\n if (event.currentTarget.contains(next)) return;\n if (anchorRef.current?.contains(next)) return;\n\n /*\n * Bu yuzeyden PORTALLANMIS bir katman mi? `Menu`/`Select`/ `Combobox` panelleri\n * `aria-controls`/`id` zinciriyle degil, acildiklari an odagi tasiyarak…\n */\n if (next.closest('[role=\"listbox\"],[role=\"menu\"],[role=\"dialog\"]')) return;\n\n setOpen(false);\n }}\n >\n {children}\n </div>,\n portal.container,\n )}\n </>\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Popover, 'Popover')) as typeof Popover;\n"],"names":["Popover","trigger","children","label","side","align","controlledOpen","onOpenChange","className","testId","id","useId","anchorRef","useRef","surfaceRef","restoreRef","uncontrolledOpen","setUncontrolledOpen","useState","isControlled","isOpen","positioning","usePositioning","portal","usePortalSurface","setOpen","useCallback","next","useEffect","captureFocus","surface","_a","close","useDismissOnEscape","handlePointerDown","event","target","_b","isValidElement","triggerProps","anchor","cloneElement","jsxs","Fragment","createPortal","jsx","cx","styles","index","memo","named"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ReactElement, ReactNode } from 'react';
|
|
2
|
+
import { PositionAlign, PositionSide } from '../../types/positioning.type';
|
|
3
|
+
type Props = {
|
|
4
|
+
/** Tetikleyici. */
|
|
5
|
+
trigger: ReactElement;
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
/** Yüzeyin erişilebilir adı. */
|
|
8
|
+
label: string;
|
|
9
|
+
side?: PositionSide;
|
|
10
|
+
align?: PositionAlign;
|
|
11
|
+
/** Kontrollü kullanım. */
|
|
12
|
+
isOpen?: boolean;
|
|
13
|
+
onOpenChange?: (isOpen: boolean) => void;
|
|
14
|
+
className?: string;
|
|
15
|
+
testId?: string;
|
|
16
|
+
};
|
|
17
|
+
/** Popover — eylem taşıyabilen, odaklanabilir yüzey. */
|
|
18
|
+
declare const Popover: ({ trigger, children, label, side, align, isOpen: controlledOpen, onOpenChange, className, testId, }: Props) => import("react").JSX.Element | null;
|
|
19
|
+
declare const _default: typeof Popover;
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as I, Fragment as M, jsx as N } from "react/jsx-runtime";
|
|
3
|
+
import { memo as U, useId as V, useRef as p, useState as $, useCallback as P, useEffect as y, isValidElement as g, cloneElement as q } from "react";
|
|
4
|
+
import { createPortal as z } from "react-dom";
|
|
5
|
+
import { cx as A } from "../../helpers/class-name.helper.js";
|
|
6
|
+
import { named as G } from "../../helpers/component.helper.js";
|
|
7
|
+
import H from "../../hooks/useDismissOnEscape.js";
|
|
8
|
+
import { captureFocus as J, focusFirstMeaningful as K } from "../../helpers/focus.helper.js";
|
|
9
|
+
import O from "../../hooks/usePortalSurface.js";
|
|
10
|
+
import Q from "../../hooks/usePositioning.js";
|
|
11
|
+
const k = {"popover":"ui-popover-VxgiK","popover--top":"ui-popover--top-OUYwo","popover--bottom":"ui-popover--bottom-Q1K4X","popover--left":"ui-popover--left-9Rsjx","popover--right":"ui-popover--right-0TJeo"};
|
|
12
|
+
const W = ({
|
|
13
|
+
trigger: u,
|
|
14
|
+
children: w,
|
|
15
|
+
label: F,
|
|
16
|
+
side: j = "bottom",
|
|
17
|
+
align: D = "start",
|
|
18
|
+
isOpen: v,
|
|
19
|
+
onOpenChange: l,
|
|
20
|
+
className: L,
|
|
21
|
+
testId: R
|
|
22
|
+
}) => {
|
|
23
|
+
const b = V(), n = p(null), s = p(null), i = p(null), [S, T] = $(!1), f = v !== void 0, r = f ? v : S, m = Q(n, s, { side: j, align: D, isOpen: r }), a = O(r, n, s), o = P(
|
|
24
|
+
(t) => {
|
|
25
|
+
f || T(t), l == null || l(t);
|
|
26
|
+
},
|
|
27
|
+
[f, l]
|
|
28
|
+
);
|
|
29
|
+
y(() => {
|
|
30
|
+
if (!r) return;
|
|
31
|
+
i.current = J();
|
|
32
|
+
const t = s.current;
|
|
33
|
+
return t && K(t), () => {
|
|
34
|
+
var e;
|
|
35
|
+
(e = i.current) == null || e.call(i), i.current = null;
|
|
36
|
+
};
|
|
37
|
+
}, [r]);
|
|
38
|
+
const h = P(() => o(!1), [o]);
|
|
39
|
+
if (H(r, h), y(() => {
|
|
40
|
+
if (!r) return;
|
|
41
|
+
const t = (e) => {
|
|
42
|
+
var x, E;
|
|
43
|
+
const c = e.target;
|
|
44
|
+
(x = s.current) != null && x.contains(c) || (E = n.current) != null && E.contains(c) || o(!1);
|
|
45
|
+
};
|
|
46
|
+
return document.addEventListener("mousedown", t), () => document.removeEventListener("mousedown", t);
|
|
47
|
+
}, [r, o]), !g(u)) return null;
|
|
48
|
+
const d = u.props, B = q(u, {
|
|
49
|
+
ref: n,
|
|
50
|
+
"aria-expanded": r,
|
|
51
|
+
"aria-haspopup": "dialog",
|
|
52
|
+
"aria-controls": r ? b : void 0,
|
|
53
|
+
onClick: (t) => {
|
|
54
|
+
var e;
|
|
55
|
+
(e = d.onClick) == null || e.call(d, t), o(!r);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return /* @__PURE__ */ I(M, { children: [
|
|
59
|
+
B,
|
|
60
|
+
r && a.container && z(
|
|
61
|
+
/* @__PURE__ */ N(
|
|
62
|
+
"div",
|
|
63
|
+
{
|
|
64
|
+
ref: s,
|
|
65
|
+
id: b,
|
|
66
|
+
...a.attributes,
|
|
67
|
+
role: "dialog",
|
|
68
|
+
"aria-label": F,
|
|
69
|
+
className: A(k.popover, k[`popover--${m.side}`], L),
|
|
70
|
+
style: {
|
|
71
|
+
...m.style,
|
|
72
|
+
...a.style,
|
|
73
|
+
visibility: m.isPositioned ? "visible" : "hidden"
|
|
74
|
+
},
|
|
75
|
+
"data-testid": R,
|
|
76
|
+
onBlur: (t) => {
|
|
77
|
+
var c;
|
|
78
|
+
const e = t.relatedTarget;
|
|
79
|
+
e && (t.currentTarget.contains(e) || (c = n.current) != null && c.contains(e) || e.closest('[role="listbox"],[role="menu"],[role="dialog"]') || o(!1));
|
|
80
|
+
},
|
|
81
|
+
children: w
|
|
82
|
+
}
|
|
83
|
+
),
|
|
84
|
+
a.container
|
|
85
|
+
)
|
|
86
|
+
] });
|
|
87
|
+
}, st = /* @__PURE__ */ U(/* @__PURE__ */ G(W, "Popover"));
|
|
88
|
+
export {
|
|
89
|
+
st as default
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Popover/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n cloneElement,\n isValidElement,\n memo,\n type ReactElement,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\nimport useDismissOnEscape from '../../hooks/useDismissOnEscape';\nimport { captureFocus, focusFirstMeaningful } from '../../helpers/focus.helper';\nimport usePortalSurface from '../../hooks/usePortalSurface';\nimport usePositioning from '../../hooks/usePositioning';\n\nimport styles from './index.module.scss';\nimport type { PositionAlign, PositionSide } from '@/types/positioning.type';\n\ntype Props = {\n /** Tetikleyici. */\n trigger: ReactElement;\n children: ReactNode;\n /** Yüzeyin erişilebilir adı. */\n label: string;\n side?: PositionSide;\n align?: PositionAlign;\n /** Kontrollü kullanım. */\n isOpen?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n className?: string;\n testId?: string;\n};\n\n/** Popover — eylem taşıyabilen, odaklanabilir yüzey. */\nconst Popover = ({\n trigger,\n children,\n label,\n side = 'bottom',\n align = 'start',\n isOpen: controlledOpen,\n onOpenChange,\n className,\n testId,\n}: Props) => {\n const id = useId();\n const anchorRef = useRef<HTMLElement>(null);\n const surfaceRef = useRef<HTMLDivElement>(null);\n const restoreRef = useRef<(() => void) | null>(null);\n\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n\n const positioning = usePositioning(anchorRef, surfaceRef, { side, align, isOpen });\n\n const portal = usePortalSurface(isOpen, anchorRef, surfaceRef);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n /* Acilista odak ICERI girer, kapanista TETIKLEYICIYE doner. */\n useEffect(() => {\n if (!isOpen) return;\n\n restoreRef.current = captureFocus();\n const surface = surfaceRef.current;\n if (surface) focusFirstMeaningful(surface);\n\n return () => {\n restoreRef.current?.();\n restoreRef.current = null;\n };\n }, [isOpen]);\n\n const close = useCallback(() => setOpen(false), [setOpen]);\n useDismissOnEscape(isOpen, close);\n\n /*\n * DISARI tiklama da belge duzeyinde: odak yuzeyin icinde olmayabilir (fareyle acilmis bir\n * popover).\n */\n useEffect(() => {\n if (!isOpen) return;\n\n const handlePointerDown = (event: globalThis.MouseEvent) => {\n const target = event.target as Node;\n if (surfaceRef.current?.contains(target)) return;\n if (anchorRef.current?.contains(target)) return;\n setOpen(false);\n };\n\n /* `mousedown`: `click` beklerken kullanici surukleyerek secim yaparsa yuzey kapanmiyordu. */\n document.addEventListener('mousedown', handlePointerDown);\n\n return () => document.removeEventListener('mousedown', handlePointerDown);\n }, [isOpen, setOpen]);\n\n if (!isValidElement(trigger)) return null;\n\n const triggerProps = trigger.props as Record<string, unknown>;\n\n const anchor = cloneElement(trigger as ReactElement<Record<string, unknown>>, {\n ref: anchorRef,\n 'aria-expanded': isOpen,\n 'aria-haspopup': 'dialog',\n 'aria-controls': isOpen ? id : undefined,\n onClick: (event: React.MouseEvent) => {\n (triggerProps.onClick as ((event: React.MouseEvent) => void) | undefined)?.(event);\n setOpen(!isOpen);\n },\n });\n\n return (\n <>\n {anchor}\n\n {isOpen &&\n portal.container &&\n createPortal(\n <div\n ref={surfaceRef}\n id={id}\n /* ⚠ Modal içinden açıldığında üst katman ZORUNLU — `portal.helper`. */\n {...portal.attributes}\n /*\n * `role=\"dialog\"` ama `aria-modal` YOK: yuzey kipsel degil ve `aria-modal=\"true\"`\n * yazmak ekran okuyucuya sayfanin geri kalaninin erisilemez oldugunu…\n */\n role=\"dialog\"\n aria-label={label}\n className={cx(styles.popover, styles[`popover--${positioning.side}`], className)}\n style={{\n ...positioning.style,\n ...portal.style,\n visibility: positioning.isPositioned ? 'visible' : 'hidden',\n }}\n data-testid={testId}\n /*\n * Odak yuzeyin DISINA ciktiginda kapanir: kipsel olmayan bir yuzeyde odagi hapsetmek\n * kullaniciyi sayfadan koparirdi.\n * ⚠ AMA \"DISI\" DOM AGACIYLA OLCULEMEZ.\n */\n onBlur={event => {\n const next = event.relatedTarget as HTMLElement | null;\n if (!next) return;\n if (event.currentTarget.contains(next)) return;\n if (anchorRef.current?.contains(next)) return;\n\n /*\n * Bu yuzeyden PORTALLANMIS bir katman mi? `Menu`/`Select`/ `Combobox` panelleri\n * `aria-controls`/`id` zinciriyle degil, acildiklari an odagi tasiyarak…\n */\n if (next.closest('[role=\"listbox\"],[role=\"menu\"],[role=\"dialog\"]')) return;\n\n setOpen(false);\n }}\n >\n {children}\n </div>,\n portal.container,\n )}\n </>\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Popover, 'Popover')) as typeof Popover;\n"],"names":["Popover","trigger","children","label","side","align","controlledOpen","onOpenChange","className","testId","id","useId","anchorRef","useRef","surfaceRef","restoreRef","uncontrolledOpen","setUncontrolledOpen","useState","isControlled","isOpen","positioning","usePositioning","portal","usePortalSurface","setOpen","useCallback","next","useEffect","captureFocus","surface","_a","close","useDismissOnEscape","handlePointerDown","event","target","_b","isValidElement","triggerProps","anchor","cloneElement","jsxs","Fragment","createPortal","jsx","cx","styles","index","memo","named"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-popover-VxgiK{z-index:var(--hd-z-popover);min-width:200px;max-width:min(360px,100vw - var(--hd-space-6));padding:var(--hd-space-3);border-radius:var(--hd-radius-md);background-color:var(--hd-bg-overlay);border:1px solid var(--hd-border);box-shadow:var(--hd-shadow-2);color:var(--hd-text);font-size:var(--hd-type-small-size);line-height:var(--hd-type-body-line-height);text-align:start}.ui-popover--top-OUYwo{animation:var(--ui-anim-fade-in-up) var(--hd-duration-fast) var(--hd-ease-standard)}.ui-popover--bottom-Q1K4X{animation:var(--ui-anim-fade-in-down) var(--hd-duration-fast) var(--hd-ease-standard)}.ui-popover--left-9Rsjx,.ui-popover--right-0TJeo{animation:var(--ui-anim-fade-in) var(--hd-duration-fast) var(--hd-ease-standard)}@media (prefers-reduced-motion: reduce){.ui-popover-VxgiK{animation:none}}@media (forced-colors: active){.ui-popover-VxgiK{border-color:CanvasText}}}
|
|
@@ -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"),x=require("react"),N=require("../../helpers/class-name.helper.cjs"),h=require("../../helpers/label.helper.cjs"),j=require("../../theme/context.cjs"),r={default:{"price":"ui-price-Oc5Nr","price__current":"ui-price__current-2Xup2","price__currency":"ui-price__currency-32NLN","price__list":"ui-price__list-MlQgT","price__discount":"ui-price__discount-5Yc6W","price--sm":"ui-price--sm-Hd8Oe","price--md":"ui-price--md-JMxlK","price--lg":"ui-price--lg-TFqIF","price--xl":"ui-price--xl-EJBYq"}},y=({value:a,currency:o,listValue:n,discountPercent:t,formatDiscount:d=e=>`%${e}`,isFormatted:m,size:p="md",className:_,testId:f})=>{const{labels:e}=j.useUi(),i=h.resolveLabel("Price.currency",o,e==null?void 0:e.currency),u=c=>{if(!m||!(e!=null&&e.locale)||!/\d/.test(c))return c;const l=Number(c.replace(/[^\d.,-]/g,"").replace(/\.(?=\d{3}\b)/g,"").replace(",","."));if(!Number.isFinite(l))return c;try{return new Intl.NumberFormat(e.locale).format(l)}catch{return c}};return s.jsxs("span",{className:N.cx(r.default.price,r.default[`price--${p}`],_),"data-testid":f,children:[s.jsxs("span",{className:r.default.price__current,children:[u(a),s.jsx("span",{className:r.default.price__currency,children:i})]}),n&&s.jsxs("s",{className:r.default.price__list,children:[u(n),s.jsx("span",{className:r.default.price__currency,children:i})]}),t!==void 0&&t>0&&s.jsx("span",{className:r.default.price__discount,children:d(t)})]})},b=x.memo(y);exports.default=b;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Price/index.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, memo } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n /** BİÇİMLENMİŞ tutar: \"1.299,90\". */\n value: string;\n /** Para birimi simgesi ya da kodu. */\n currency?: string;\n /** Değeri `Intl.NumberFormat` ile biçimlendirir. */\n isFormatted?: boolean;\n /** Üstü çizili liste fiyatı; indirim varsa verilir (biçimlenmiş). */\n listValue?: string;\n /** İndirim oranı (tam sayı yüzde). */\n discountPercent?: number;\n /** İndirim rozetinin metnini üretir (\"%20\", \"-20%\"). */\n formatDiscount?: (percent: number) => string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n className?: string;\n testId?: string;\n};\n\n/** Tutar gösterimi. */\nconst Price: FC<Props> = ({\n value,\n currency,\n listValue,\n discountPercent,\n formatDiscount = percent => `%${percent}`,\n isFormatted,\n size = 'md',\n className,\n testId,\n}) => {\n const { labels } = useUi();\n const symbol = resolveLabel('Price.currency', currency, labels?.currency);\n\n /* BICIMLENDIRME OPSIYONEL ve yerel ayara BAGLI. */\n const format = (raw: string): string => {\n if (!isFormatted || !labels?.locale) return raw;\n\n /* RAKAM ICERMEYEN deger biciMLENDIRILMEZ. */\n if (!/\\d/.test(raw)) return raw;\n\n const numeric = Number(\n raw\n .replace(/[^\\d.,-]/g, '')\n .replace(/\\.(?=\\d{3}\\b)/g, '')\n .replace(',', '.'),\n );\n if (!Number.isFinite(numeric)) return raw;\n\n try {\n return new Intl.NumberFormat(labels.locale).format(numeric);\n } catch {\n return raw;\n }\n };\n\n return (\n <span className={cx(styles.price, styles[`price--${size}`], className)} data-testid={testId}>\n <span className={styles.price__current}>\n {format(value)}\n <span className={styles.price__currency}>{symbol}</span>\n </span>\n\n {listValue && (\n <s className={styles.price__list}>\n {format(listValue)}\n <span className={styles.price__currency}>{symbol}</span>\n </s>\n )}\n\n {/* `isDefined` DEGIL acik karsilastirma: handy-utils'in koruyucusu\n `Exclude<any, …>` donuyor ve TypeScript'te daraltma uretmiyor. */}\n {discountPercent !== undefined && discountPercent > 0 && (\n <span className={styles.price__discount}>{formatDiscount(discountPercent)}</span>\n )}\n </span>\n );\n};\n\nexport default /*#__PURE__*/ memo(Price) as typeof Price;\n"],"names":["Price","value","currency","listValue","discountPercent","formatDiscount","percent","isFormatted","size","className","testId","labels","useUi","symbol","resolveLabel","format","raw","numeric","jsxs","cx","styles","jsx","index"],"mappings":"wVA4BMA,EAAmB,CAAC,CACxB,MAAAC,EACA,SAAAC,EACA,UAAAC,EACA,gBAAAC,EACA,eAAAC,EAAiBC,GAAW,IAAIA,CAAO,GACvC,YAAAC,EACA,KAAAC,EAAO,KACP,UAAAC,EACA,OAAAC,CACF,IAAM,CACJ,KAAM,CAAE,OAAAC,CAAA,EAAWC,QAAA,EACbC,EAASC,EAAAA,aAAa,iBAAkBZ,EAAUS,GAAA,YAAAA,EAAQ,QAAQ,EAGlEI,EAAUC,GAAwB,CAItC,GAHI,CAACT,GAAe,EAACI,GAAA,MAAAA,EAAQ,SAGzB,CAAC,KAAK,KAAKK,CAAG,EAAG,OAAOA,EAE5B,MAAMC,EAAU,OACdD,EACG,QAAQ,YAAa,EAAE,EACvB,QAAQ,iBAAkB,EAAE,EAC5B,QAAQ,IAAK,GAAG,CAAA,EAErB,GAAI,CAAC,OAAO,SAASC,CAAO,EAAG,OAAOD,EAEtC,GAAI,CACF,OAAO,IAAI,KAAK,aAAaL,EAAO,MAAM,EAAE,OAAOM,CAAO,CAC5D,MAAQ,CACN,OAAOD,CACT,CACF,EAEA,OACEE,EAAAA,KAAC,OAAA,CAAK,UAAWC,EAAAA,GAAGC,EAAAA,QAAO,MAAOA,EAAAA,QAAO,UAAUZ,CAAI,EAAE,EAAGC,CAAS,EAAG,cAAaC,EACnF,SAAA,CAAAQ,EAAAA,KAAC,OAAA,CAAK,UAAWE,EAAAA,QAAO,eACrB,SAAA,CAAAL,EAAOd,CAAK,EACboB,EAAAA,IAAC,OAAA,CAAK,UAAWD,EAAAA,QAAO,gBAAkB,SAAAP,CAAA,CAAO,CAAA,EACnD,EAECV,GACCe,EAAAA,KAAC,IAAA,CAAE,UAAWE,EAAAA,QAAO,YAClB,SAAA,CAAAL,EAAOZ,CAAS,EACjBkB,EAAAA,IAAC,OAAA,CAAK,UAAWD,EAAAA,QAAO,gBAAkB,SAAAP,CAAA,CAAO,CAAA,EACnD,EAKDT,IAAoB,QAAaA,EAAkB,GAClDiB,EAAAA,IAAC,OAAA,CAAK,UAAWD,EAAAA,QAAO,gBAAkB,SAAAf,EAAeD,CAAe,CAAA,CAAE,CAAA,EAE9E,CAEJ,EAEAkB,SAAkCtB,CAAK"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
type Props = {
|
|
3
|
+
/** BİÇİMLENMİŞ tutar: "1.299,90". */
|
|
4
|
+
value: string;
|
|
5
|
+
/** Para birimi simgesi ya da kodu. */
|
|
6
|
+
currency?: string;
|
|
7
|
+
/** Değeri `Intl.NumberFormat` ile biçimlendirir. */
|
|
8
|
+
isFormatted?: boolean;
|
|
9
|
+
/** Üstü çizili liste fiyatı; indirim varsa verilir (biçimlenmiş). */
|
|
10
|
+
listValue?: string;
|
|
11
|
+
/** İndirim oranı (tam sayı yüzde). */
|
|
12
|
+
discountPercent?: number;
|
|
13
|
+
/** İndirim rozetinin metnini üretir ("%20", "-20%"). */
|
|
14
|
+
formatDiscount?: (percent: number) => string;
|
|
15
|
+
size?: 'sm' | 'md' | 'lg' | 'xl';
|
|
16
|
+
className?: string;
|
|
17
|
+
testId?: string;
|
|
18
|
+
};
|
|
19
|
+
/** Tutar gösterimi. */
|
|
20
|
+
declare const Price: FC<Props>;
|
|
21
|
+
declare const _default: typeof Price;
|
|
22
|
+
export default _default;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as i, jsx as t } from "react/jsx-runtime";
|
|
3
|
+
import { memo as h } from "react";
|
|
4
|
+
import { cx as y } from "../../helpers/class-name.helper.js";
|
|
5
|
+
import { resolveLabel as x } from "../../helpers/label.helper.js";
|
|
6
|
+
import { useUi as b } from "../../theme/context.js";
|
|
7
|
+
const e = {"price":"ui-price-Oc5Nr","price__current":"ui-price__current-2Xup2","price__currency":"ui-price__currency-32NLN","price__list":"ui-price__list-MlQgT","price__discount":"ui-price__discount-5Yc6W","price--sm":"ui-price--sm-Hd8Oe","price--md":"ui-price--md-JMxlK","price--lg":"ui-price--lg-TFqIF","price--xl":"ui-price--xl-EJBYq"};
|
|
8
|
+
const g = ({
|
|
9
|
+
value: p,
|
|
10
|
+
currency: l,
|
|
11
|
+
listValue: n,
|
|
12
|
+
discountPercent: s,
|
|
13
|
+
formatDiscount: u = (r) => `%${r}`,
|
|
14
|
+
isFormatted: d,
|
|
15
|
+
size: f = "md",
|
|
16
|
+
className: _,
|
|
17
|
+
testId: N
|
|
18
|
+
}) => {
|
|
19
|
+
const { labels: r } = b(), m = x("Price.currency", l, r == null ? void 0 : r.currency), o = (c) => {
|
|
20
|
+
if (!d || !(r != null && r.locale) || !/\d/.test(c)) return c;
|
|
21
|
+
const a = Number(
|
|
22
|
+
c.replace(/[^\d.,-]/g, "").replace(/\.(?=\d{3}\b)/g, "").replace(",", ".")
|
|
23
|
+
);
|
|
24
|
+
if (!Number.isFinite(a)) return c;
|
|
25
|
+
try {
|
|
26
|
+
return new Intl.NumberFormat(r.locale).format(a);
|
|
27
|
+
} catch {
|
|
28
|
+
return c;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
return /* @__PURE__ */ i("span", { className: y(e.price, e[`price--${f}`], _), "data-testid": N, children: [
|
|
32
|
+
/* @__PURE__ */ i("span", { className: e.price__current, children: [
|
|
33
|
+
o(p),
|
|
34
|
+
/* @__PURE__ */ t("span", { className: e.price__currency, children: m })
|
|
35
|
+
] }),
|
|
36
|
+
n && /* @__PURE__ */ i("s", { className: e.price__list, children: [
|
|
37
|
+
o(n),
|
|
38
|
+
/* @__PURE__ */ t("span", { className: e.price__currency, children: m })
|
|
39
|
+
] }),
|
|
40
|
+
s !== void 0 && s > 0 && /* @__PURE__ */ t("span", { className: e.price__discount, children: u(s) })
|
|
41
|
+
] });
|
|
42
|
+
}, U = /* @__PURE__ */ h(g);
|
|
43
|
+
export {
|
|
44
|
+
U as default
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Price/index.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, memo } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n /** BİÇİMLENMİŞ tutar: \"1.299,90\". */\n value: string;\n /** Para birimi simgesi ya da kodu. */\n currency?: string;\n /** Değeri `Intl.NumberFormat` ile biçimlendirir. */\n isFormatted?: boolean;\n /** Üstü çizili liste fiyatı; indirim varsa verilir (biçimlenmiş). */\n listValue?: string;\n /** İndirim oranı (tam sayı yüzde). */\n discountPercent?: number;\n /** İndirim rozetinin metnini üretir (\"%20\", \"-20%\"). */\n formatDiscount?: (percent: number) => string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n className?: string;\n testId?: string;\n};\n\n/** Tutar gösterimi. */\nconst Price: FC<Props> = ({\n value,\n currency,\n listValue,\n discountPercent,\n formatDiscount = percent => `%${percent}`,\n isFormatted,\n size = 'md',\n className,\n testId,\n}) => {\n const { labels } = useUi();\n const symbol = resolveLabel('Price.currency', currency, labels?.currency);\n\n /* BICIMLENDIRME OPSIYONEL ve yerel ayara BAGLI. */\n const format = (raw: string): string => {\n if (!isFormatted || !labels?.locale) return raw;\n\n /* RAKAM ICERMEYEN deger biciMLENDIRILMEZ. */\n if (!/\\d/.test(raw)) return raw;\n\n const numeric = Number(\n raw\n .replace(/[^\\d.,-]/g, '')\n .replace(/\\.(?=\\d{3}\\b)/g, '')\n .replace(',', '.'),\n );\n if (!Number.isFinite(numeric)) return raw;\n\n try {\n return new Intl.NumberFormat(labels.locale).format(numeric);\n } catch {\n return raw;\n }\n };\n\n return (\n <span className={cx(styles.price, styles[`price--${size}`], className)} data-testid={testId}>\n <span className={styles.price__current}>\n {format(value)}\n <span className={styles.price__currency}>{symbol}</span>\n </span>\n\n {listValue && (\n <s className={styles.price__list}>\n {format(listValue)}\n <span className={styles.price__currency}>{symbol}</span>\n </s>\n )}\n\n {/* `isDefined` DEGIL acik karsilastirma: handy-utils'in koruyucusu\n `Exclude<any, …>` donuyor ve TypeScript'te daraltma uretmiyor. */}\n {discountPercent !== undefined && discountPercent > 0 && (\n <span className={styles.price__discount}>{formatDiscount(discountPercent)}</span>\n )}\n </span>\n );\n};\n\nexport default /*#__PURE__*/ memo(Price) as typeof Price;\n"],"names":["Price","value","currency","listValue","discountPercent","formatDiscount","percent","isFormatted","size","className","testId","labels","useUi","symbol","resolveLabel","format","raw","numeric","jsxs","cx","styles","jsx","index"],"mappings":";;;;;;;AA4BA,MAAMA,IAAmB,CAAC;AAAA,EACxB,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,gBAAAC,IAAiB,CAAAC,MAAW,IAAIA,CAAO;AAAA,EACvC,aAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAC;AAAA,EACA,QAAAC;AACF,MAAM;AACJ,QAAM,EAAE,QAAAC,EAAA,IAAWC,EAAA,GACbC,IAASC,EAAa,kBAAkBZ,GAAUS,KAAA,gBAAAA,EAAQ,QAAQ,GAGlEI,IAAS,CAACC,MAAwB;AAItC,QAHI,CAACT,KAAe,EAACI,KAAA,QAAAA,EAAQ,WAGzB,CAAC,KAAK,KAAKK,CAAG,EAAG,QAAOA;AAE5B,UAAMC,IAAU;AAAA,MACdD,EACG,QAAQ,aAAa,EAAE,EACvB,QAAQ,kBAAkB,EAAE,EAC5B,QAAQ,KAAK,GAAG;AAAA,IAAA;AAErB,QAAI,CAAC,OAAO,SAASC,CAAO,EAAG,QAAOD;AAEtC,QAAI;AACF,aAAO,IAAI,KAAK,aAAaL,EAAO,MAAM,EAAE,OAAOM,CAAO;AAAA,IAC5D,QAAQ;AACN,aAAOD;AAAA,IACT;AAAA,EACF;AAEA,SACE,gBAAAE,EAAC,QAAA,EAAK,WAAWC,EAAGC,EAAO,OAAOA,EAAO,UAAUZ,CAAI,EAAE,GAAGC,CAAS,GAAG,eAAaC,GACnF,UAAA;AAAA,IAAA,gBAAAQ,EAAC,QAAA,EAAK,WAAWE,EAAO,gBACrB,UAAA;AAAA,MAAAL,EAAOd,CAAK;AAAA,MACb,gBAAAoB,EAAC,QAAA,EAAK,WAAWD,EAAO,iBAAkB,UAAAP,EAAA,CAAO;AAAA,IAAA,GACnD;AAAA,IAECV,KACC,gBAAAe,EAAC,KAAA,EAAE,WAAWE,EAAO,aAClB,UAAA;AAAA,MAAAL,EAAOZ,CAAS;AAAA,MACjB,gBAAAkB,EAAC,QAAA,EAAK,WAAWD,EAAO,iBAAkB,UAAAP,EAAA,CAAO;AAAA,IAAA,GACnD;AAAA,IAKDT,MAAoB,UAAaA,IAAkB,KAClD,gBAAAiB,EAAC,QAAA,EAAK,WAAWD,EAAO,iBAAkB,UAAAf,EAAeD,CAAe,EAAA,CAAE;AAAA,EAAA,GAE9E;AAEJ,GAEAkB,sBAAkCtB,CAAK;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-price-Oc5Nr{display:inline-flex;align-items:baseline;flex-wrap:wrap;gap:var(--hd-space-2)}.ui-price__current-2Xup2{font-family:var(--hd-font-display);font-size:var(--hd-type-h4-size);font-weight:var(--hd-font-weight-bold);font-variant-numeric:tabular-nums;letter-spacing:var(--hd-type-h2-letter-spacing);white-space:nowrap;color:var(--hd-text)}.ui-price__currency-32NLN{font-size:.75em;font-weight:var(--hd-font-weight-semibold);margin-inline-start:2px}.ui-price__list-MlQgT{font-size:var(--hd-type-small-size);color:var(--hd-text-3);font-variant-numeric:tabular-nums;text-decoration-thickness:1px}.ui-price__discount-5Yc6W{font-size:var(--hd-type-caption-size);font-weight:var(--hd-font-weight-bold);color:var(--hd-danger-on-solid);background-color:var(--hd-danger-solid);border-radius:var(--hd-radius-xs);padding:2px var(--hd-space-1);line-height:1}.ui-price--sm-Hd8Oe .ui-price__current-2Xup2{font-size:var(--hd-type-body-size)}.ui-price--md-JMxlK .ui-price__current-2Xup2{font-size:var(--hd-type-h4-size)}.ui-price--lg-TFqIF .ui-price__current-2Xup2,.ui-price--xl-EJBYq .ui-price__current-2Xup2{font-size:var(--hd-type-h2-size)}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),g=require("react"),o=require("../../helpers/class-name.helper.cjs"),x=require("../../helpers/component.helper.cjs"),a={default:{"progress":"ui-progress-99MrX","progress__track":"ui-progress__track-Qbp9t","progress__track--xs":"ui-progress__track--xs-CgHUU","progress__track--sm":"ui-progress__track--sm-dbHZq","progress__track--md":"ui-progress__track--md-v1GdW","progress__track--indeterminate":"ui-progress__track--indeterminate-8fMxl","progress__fill":"ui-progress__fill-Bam55","progress__fill--success":"ui-progress__fill--success-IFuI5","progress__fill--warning":"ui-progress__fill--warning-wIhgi","progress__fill--danger":"ui-progress__fill--danger-cuqj0","progress__value":"ui-progress__value-3FYxj","circle":"ui-circle-9cn2w","circle__svg":"ui-circle__svg-0IwkR","circle__track":"ui-circle__track-zY2qc","circle__fill":"ui-circle__fill-Jbde6","circle__fill--success":"ui-circle__fill--success-HTr0m","circle__fill--warning":"ui-circle__fill--warning-Fkgj2","circle__fill--danger":"ui-circle__fill--danger-4E3Z8","circle--indeterminate":"ui-circle--indeterminate-cITY6","circle__label":"ui-circle__label-A3nJB"}},p=(t,i)=>!Number.isFinite(t)||!Number.isFinite(i)||i<=0?0:Math.min(100,Math.max(0,t/i*100)),N=({value:t,max:i=100,label:n,valueText:c,isValueVisible:d,tone:u="brand",size:r="md",className:m,testId:h})=>{const e=t===void 0,l=e?0:p(t,i);return s.jsxs("div",{className:o.cx(a.default.progress,m),"data-testid":h,children:[s.jsx("div",{role:"progressbar","aria-label":n,"aria-valuenow":e?void 0:Math.round(l),"aria-valuemin":e?void 0:0,"aria-valuemax":e?void 0:100,"aria-valuetext":e?void 0:c,className:o.cx(a.default.progress__track,a.default[`progress__track--${r}`],e&&a.default["progress__track--indeterminate"]),children:s.jsx("span",{className:o.cx(a.default.progress__fill,a.default[`progress__fill--${u}`]),style:e?void 0:{inlineSize:`${l}%`}})}),d&&!e&&s.jsx("span",{className:a.default.progress__value,"aria-hidden":!0,children:c??`%${Math.round(l)}`})]})},b=g.memo(x.named(N,"Progress")),j=({value:t,max:i=100,label:n,valueText:c,isValueVisible:d,tone:u="brand",size:r=44,className:m,testId:h})=>{const e=t===void 0,l=e?25:p(t,i),_=Math.max(3,Math.round(r*.1)),f=(r-_)/2,v=2*Math.PI*f;return s.jsxs("div",{className:o.cx(a.default.circle,e&&a.default["circle--indeterminate"],m),style:{width:r,height:r},"data-testid":h,children:[s.jsxs("svg",{className:a.default.circle__svg,width:r,height:r,viewBox:`0 0 ${r} ${r}`,role:"progressbar","aria-label":n,"aria-valuenow":e?void 0:Math.round(l),"aria-valuemin":e?void 0:0,"aria-valuemax":e?void 0:100,"aria-valuetext":e?void 0:c,children:[s.jsx("circle",{className:a.default.circle__track,cx:r/2,cy:r/2,r:f,fill:"none",strokeWidth:_}),s.jsx("circle",{className:o.cx(a.default.circle__fill,a.default[`circle__fill--${u}`]),cx:r/2,cy:r/2,r:f,fill:"none",strokeWidth:_,strokeDasharray:v,strokeDashoffset:v*(1-l/100)})]}),d&&!e&&s.jsx("span",{className:a.default.circle__label,"aria-hidden":!0,children:c??`%${Math.round(l)}`})]})},M=x.named(g.memo(j),"ProgressCircle");exports.ProgressCircle=M;exports.default=b;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Progress/index.tsx"],"sourcesContent":["import { memo } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\n\nimport styles from './index.module.scss';\n\n/** Yüzdeyi 0-100 aralığına kırpar; ölçek sıfır genişlikteyse 0 döner. */\nconst toPercent = (value: number, max: number): number => {\n if (!Number.isFinite(value) || !Number.isFinite(max) || max <= 0) return 0;\n return Math.min(100, Math.max(0, (value / max) * 100));\n};\n\ntype Props = {\n /**\n * Tamamlanan miktar. `undefined` → BELİRSİZ ilerleme (sonu bilinmiyor); çubuk kendi kendine akar.\n */\n value?: number;\n /** Ölçeğin üst ucu. */\n max?: number;\n /** Çubuğun erişilebilir adı (\"Yükleme\", \"Ödeme adımı\"). */\n label: string;\n /** Ekran okuyucuya okunan METİN karşılığı (\"3 / 5 dosya\"). */\n valueText?: string;\n /** Yüzdeyi çubuğun yanında GÖRÜNÜR olarak yazar. */\n isValueVisible?: boolean;\n /**\n * ⚠ `brand` 5.0'dan beri MÜREKKEP çizer (`selected` — ilerleme bir seçim göstergesi), yeşil\n * DEĞİL: yeşil yalnızca eylem, bağlantı ve odakta. Ad 4.x'ten kaldı; değiştirmek her çağrıyı\n * kırardı ve kazancı yalnızca isim olurdu.\n */\n tone?: 'brand' | 'success' | 'warning' | 'danger';\n /** `xs` 2 px — satır içi gösterge (bağlam doluluğu); etiket yanında okunur. */\n size?: 'xs' | 'sm' | 'md';\n className?: string;\n testId?: string;\n};\n\n/** İlerleme çubuğu — ölçülebilir bekleme. */\nconst Progress = ({\n value,\n max = 100,\n label,\n valueText,\n isValueVisible,\n tone = 'brand',\n size = 'md',\n className,\n testId,\n}: Props) => {\n const isIndeterminate = value === undefined;\n const percent = isIndeterminate ? 0 : toPercent(value, max);\n\n return (\n <div className={cx(styles.progress, className)} data-testid={testId}>\n <div\n role=\"progressbar\"\n aria-label={label}\n /* BELIRSIZ kipte `aria-valuenow` YAZILMAZ. */\n aria-valuenow={isIndeterminate ? undefined : Math.round(percent)}\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : 100}\n aria-valuetext={isIndeterminate ? undefined : valueText}\n className={cx(\n styles.progress__track,\n styles[`progress__track--${size}`],\n isIndeterminate && styles['progress__track--indeterminate'],\n )}\n >\n <span\n className={cx(styles.progress__fill, styles[`progress__fill--${tone}`])}\n style={isIndeterminate ? undefined : { inlineSize: `${percent}%` }}\n />\n </div>\n\n {isValueVisible && !isIndeterminate && (\n /*\n * Gorsel yuzde `aria-hidden`: ayni bilgi zaten `progressbar`in degerinde ve iki kez\n * duyurulmasi gurultu.\n */\n <span className={styles.progress__value} aria-hidden>\n {valueText ?? `%${Math.round(percent)}`}\n </span>\n )}\n </div>\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Progress, 'Progress')) as typeof Progress;\n\ntype CircleProps = {\n /** Tamamlanan miktar. `undefined` → BELİRSİZ; çember döner. */\n value?: number;\n max?: number;\n /** Erişilebilir ad. */\n label: string;\n valueText?: string;\n /** Yüzdeyi çemberin ortasına yazar. */\n isValueVisible?: boolean;\n /**\n * ⚠ `brand` 5.0'dan beri MÜREKKEP çizer (`selected` — ilerleme bir seçim göstergesi), yeşil\n * DEĞİL: yeşil yalnızca eylem, bağlantı ve odakta. Ad 4.x'ten kaldı; değiştirmek her çağrıyı\n * kırardı ve kazancı yalnızca isim olurdu.\n */\n tone?: 'brand' | 'success' | 'warning' | 'danger';\n /** Dış çap (px). */\n size?: number;\n className?: string;\n testId?: string;\n};\n\n/** Dairesel ilerleme. */\nconst ProgressCircleBase = ({\n value,\n max = 100,\n label,\n valueText,\n isValueVisible,\n tone = 'brand',\n size = 44,\n className,\n testId,\n}: CircleProps) => {\n const isIndeterminate = value === undefined;\n const percent = isIndeterminate ? 25 : toPercent(value, max);\n\n /*\n * Cizgi kalinligi capin ~%10'u: sabit bir kalinlik kucuk cemberde kutuyu dolduruyor, buyugunde\n * sac teline donuyordu.\n */\n const stroke = Math.max(3, Math.round(size * 0.1));\n const radius = (size - stroke) / 2;\n const circumference = 2 * Math.PI * radius;\n\n return (\n <div\n className={cx(styles.circle, isIndeterminate && styles['circle--indeterminate'], className)}\n style={{ width: size, height: size }}\n data-testid={testId}\n >\n <svg\n className={styles.circle__svg}\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n role=\"progressbar\"\n aria-label={label}\n aria-valuenow={isIndeterminate ? undefined : Math.round(percent)}\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : 100}\n aria-valuetext={isIndeterminate ? undefined : valueText}\n >\n <circle\n className={styles.circle__track}\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n />\n <circle\n className={cx(styles.circle__fill, styles[`circle__fill--${tone}`])}\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeDasharray={circumference}\n strokeDashoffset={circumference * (1 - percent / 100)}\n />\n </svg>\n\n {isValueVisible && !isIndeterminate && (\n <span className={styles.circle__label} aria-hidden>\n {valueText ?? `%${Math.round(percent)}`}\n </span>\n )}\n </div>\n );\n};\n\nexport const ProgressCircle = /*#__PURE__*/ named(\n /*#__PURE__*/ memo(ProgressCircleBase),\n 'ProgressCircle',\n);\n"],"names":["toPercent","value","max","Progress","label","valueText","isValueVisible","tone","size","className","testId","isIndeterminate","percent","jsxs","cx","styles","jsx","memo","named","ProgressCircleBase","stroke","radius","circumference","ProgressCircle"],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
type Props = {
|
|
2
|
+
/**
|
|
3
|
+
* Tamamlanan miktar. `undefined` → BELİRSİZ ilerleme (sonu bilinmiyor); çubuk kendi kendine akar.
|
|
4
|
+
*/
|
|
5
|
+
value?: number;
|
|
6
|
+
/** Ölçeğin üst ucu. */
|
|
7
|
+
max?: number;
|
|
8
|
+
/** Çubuğun erişilebilir adı ("Yükleme", "Ödeme adımı"). */
|
|
9
|
+
label: string;
|
|
10
|
+
/** Ekran okuyucuya okunan METİN karşılığı ("3 / 5 dosya"). */
|
|
11
|
+
valueText?: string;
|
|
12
|
+
/** Yüzdeyi çubuğun yanında GÖRÜNÜR olarak yazar. */
|
|
13
|
+
isValueVisible?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* ⚠ `brand` 5.0'dan beri MÜREKKEP çizer (`selected` — ilerleme bir seçim göstergesi), yeşil
|
|
16
|
+
* DEĞİL: yeşil yalnızca eylem, bağlantı ve odakta. Ad 4.x'ten kaldı; değiştirmek her çağrıyı
|
|
17
|
+
* kırardı ve kazancı yalnızca isim olurdu.
|
|
18
|
+
*/
|
|
19
|
+
tone?: 'brand' | 'success' | 'warning' | 'danger';
|
|
20
|
+
/** `xs` 2 px — satır içi gösterge (bağlam doluluğu); etiket yanında okunur. */
|
|
21
|
+
size?: 'xs' | 'sm' | 'md';
|
|
22
|
+
className?: string;
|
|
23
|
+
testId?: string;
|
|
24
|
+
};
|
|
25
|
+
/** İlerleme çubuğu — ölçülebilir bekleme. */
|
|
26
|
+
declare const Progress: ({ value, max, label, valueText, isValueVisible, tone, size, className, testId, }: Props) => import("react").JSX.Element;
|
|
27
|
+
declare const _default: typeof Progress;
|
|
28
|
+
export default _default;
|
|
29
|
+
type CircleProps = {
|
|
30
|
+
/** Tamamlanan miktar. `undefined` → BELİRSİZ; çember döner. */
|
|
31
|
+
value?: number;
|
|
32
|
+
max?: number;
|
|
33
|
+
/** Erişilebilir ad. */
|
|
34
|
+
label: string;
|
|
35
|
+
valueText?: string;
|
|
36
|
+
/** Yüzdeyi çemberin ortasına yazar. */
|
|
37
|
+
isValueVisible?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* ⚠ `brand` 5.0'dan beri MÜREKKEP çizer (`selected` — ilerleme bir seçim göstergesi), yeşil
|
|
40
|
+
* DEĞİL: yeşil yalnızca eylem, bağlantı ve odakta. Ad 4.x'ten kaldı; değiştirmek her çağrıyı
|
|
41
|
+
* kırardı ve kazancı yalnızca isim olurdu.
|
|
42
|
+
*/
|
|
43
|
+
tone?: 'brand' | 'success' | 'warning' | 'danger';
|
|
44
|
+
/** Dış çap (px). */
|
|
45
|
+
size?: number;
|
|
46
|
+
className?: string;
|
|
47
|
+
testId?: string;
|
|
48
|
+
};
|
|
49
|
+
export declare const ProgressCircle: import('react').MemoExoticComponent<({ value, max, label, valueText, isValueVisible, tone, size, className, testId, }: CircleProps) => import("react").JSX.Element>;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { jsxs as u, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { memo as f } from "react";
|
|
3
|
+
import { cx as n } from "../../helpers/class-name.helper.js";
|
|
4
|
+
import { named as N } from "../../helpers/component.helper.js";
|
|
5
|
+
const a = {"progress":"ui-progress-99MrX","progress__track":"ui-progress__track-Qbp9t","progress__track--xs":"ui-progress__track--xs-CgHUU","progress__track--sm":"ui-progress__track--sm-dbHZq","progress__track--md":"ui-progress__track--md-v1GdW","progress__track--indeterminate":"ui-progress__track--indeterminate-8fMxl","progress__fill":"ui-progress__fill-Bam55","progress__fill--success":"ui-progress__fill--success-IFuI5","progress__fill--warning":"ui-progress__fill--warning-wIhgi","progress__fill--danger":"ui-progress__fill--danger-cuqj0","progress__value":"ui-progress__value-3FYxj","circle":"ui-circle-9cn2w","circle__svg":"ui-circle__svg-0IwkR","circle__track":"ui-circle__track-zY2qc","circle__fill":"ui-circle__fill-Jbde6","circle__fill--success":"ui-circle__fill--success-HTr0m","circle__fill--warning":"ui-circle__fill--warning-Fkgj2","circle__fill--danger":"ui-circle__fill--danger-4E3Z8","circle--indeterminate":"ui-circle--indeterminate-cITY6","circle__label":"ui-circle__label-A3nJB"};
|
|
6
|
+
const b = (i, s) => !Number.isFinite(i) || !Number.isFinite(s) || s <= 0 ? 0 : Math.min(100, Math.max(0, i / s * 100)), k = ({
|
|
7
|
+
value: i,
|
|
8
|
+
max: s = 100,
|
|
9
|
+
label: l,
|
|
10
|
+
valueText: c,
|
|
11
|
+
isValueVisible: d,
|
|
12
|
+
tone: m = "brand",
|
|
13
|
+
size: e = "md",
|
|
14
|
+
className: h,
|
|
15
|
+
testId: _
|
|
16
|
+
}) => {
|
|
17
|
+
const r = i === void 0, t = r ? 0 : b(i, s);
|
|
18
|
+
return /* @__PURE__ */ u("div", { className: n(a.progress, h), "data-testid": _, children: [
|
|
19
|
+
/* @__PURE__ */ o(
|
|
20
|
+
"div",
|
|
21
|
+
{
|
|
22
|
+
role: "progressbar",
|
|
23
|
+
"aria-label": l,
|
|
24
|
+
"aria-valuenow": r ? void 0 : Math.round(t),
|
|
25
|
+
"aria-valuemin": r ? void 0 : 0,
|
|
26
|
+
"aria-valuemax": r ? void 0 : 100,
|
|
27
|
+
"aria-valuetext": r ? void 0 : c,
|
|
28
|
+
className: n(
|
|
29
|
+
a.progress__track,
|
|
30
|
+
a[`progress__track--${e}`],
|
|
31
|
+
r && a["progress__track--indeterminate"]
|
|
32
|
+
),
|
|
33
|
+
children: /* @__PURE__ */ o(
|
|
34
|
+
"span",
|
|
35
|
+
{
|
|
36
|
+
className: n(a.progress__fill, a[`progress__fill--${m}`]),
|
|
37
|
+
style: r ? void 0 : { inlineSize: `${t}%` }
|
|
38
|
+
}
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
),
|
|
42
|
+
d && !r && /*
|
|
43
|
+
* Gorsel yuzde `aria-hidden`: ayni bilgi zaten `progressbar`in degerinde ve iki kez
|
|
44
|
+
* duyurulmasi gurultu.
|
|
45
|
+
*/
|
|
46
|
+
/* @__PURE__ */ o("span", { className: a.progress__value, "aria-hidden": !0, children: c ?? `%${Math.round(t)}` })
|
|
47
|
+
] });
|
|
48
|
+
}, C = /* @__PURE__ */ f(/* @__PURE__ */ N(k, "Progress")), x = ({
|
|
49
|
+
value: i,
|
|
50
|
+
max: s = 100,
|
|
51
|
+
label: l,
|
|
52
|
+
valueText: c,
|
|
53
|
+
isValueVisible: d,
|
|
54
|
+
tone: m = "brand",
|
|
55
|
+
size: e = 44,
|
|
56
|
+
className: h,
|
|
57
|
+
testId: _
|
|
58
|
+
}) => {
|
|
59
|
+
const r = i === void 0, t = r ? 25 : b(i, s), v = Math.max(3, Math.round(e * 0.1)), p = (e - v) / 2, g = 2 * Math.PI * p;
|
|
60
|
+
return /* @__PURE__ */ u(
|
|
61
|
+
"div",
|
|
62
|
+
{
|
|
63
|
+
className: n(a.circle, r && a["circle--indeterminate"], h),
|
|
64
|
+
style: { width: e, height: e },
|
|
65
|
+
"data-testid": _,
|
|
66
|
+
children: [
|
|
67
|
+
/* @__PURE__ */ u(
|
|
68
|
+
"svg",
|
|
69
|
+
{
|
|
70
|
+
className: a.circle__svg,
|
|
71
|
+
width: e,
|
|
72
|
+
height: e,
|
|
73
|
+
viewBox: `0 0 ${e} ${e}`,
|
|
74
|
+
role: "progressbar",
|
|
75
|
+
"aria-label": l,
|
|
76
|
+
"aria-valuenow": r ? void 0 : Math.round(t),
|
|
77
|
+
"aria-valuemin": r ? void 0 : 0,
|
|
78
|
+
"aria-valuemax": r ? void 0 : 100,
|
|
79
|
+
"aria-valuetext": r ? void 0 : c,
|
|
80
|
+
children: [
|
|
81
|
+
/* @__PURE__ */ o(
|
|
82
|
+
"circle",
|
|
83
|
+
{
|
|
84
|
+
className: a.circle__track,
|
|
85
|
+
cx: e / 2,
|
|
86
|
+
cy: e / 2,
|
|
87
|
+
r: p,
|
|
88
|
+
fill: "none",
|
|
89
|
+
strokeWidth: v
|
|
90
|
+
}
|
|
91
|
+
),
|
|
92
|
+
/* @__PURE__ */ o(
|
|
93
|
+
"circle",
|
|
94
|
+
{
|
|
95
|
+
className: n(a.circle__fill, a[`circle__fill--${m}`]),
|
|
96
|
+
cx: e / 2,
|
|
97
|
+
cy: e / 2,
|
|
98
|
+
r: p,
|
|
99
|
+
fill: "none",
|
|
100
|
+
strokeWidth: v,
|
|
101
|
+
strokeDasharray: g,
|
|
102
|
+
strokeDashoffset: g * (1 - t / 100)
|
|
103
|
+
}
|
|
104
|
+
)
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
),
|
|
108
|
+
d && !r && /* @__PURE__ */ o("span", { className: a.circle__label, "aria-hidden": !0, children: c ?? `%${Math.round(t)}` })
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
);
|
|
112
|
+
}, I = /* @__PURE__ */ N(
|
|
113
|
+
/* @__PURE__ */ f(x),
|
|
114
|
+
"ProgressCircle"
|
|
115
|
+
);
|
|
116
|
+
export {
|
|
117
|
+
I as ProgressCircle,
|
|
118
|
+
C as default
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Progress/index.tsx"],"sourcesContent":["import { memo } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\n\nimport styles from './index.module.scss';\n\n/** Yüzdeyi 0-100 aralığına kırpar; ölçek sıfır genişlikteyse 0 döner. */\nconst toPercent = (value: number, max: number): number => {\n if (!Number.isFinite(value) || !Number.isFinite(max) || max <= 0) return 0;\n return Math.min(100, Math.max(0, (value / max) * 100));\n};\n\ntype Props = {\n /**\n * Tamamlanan miktar. `undefined` → BELİRSİZ ilerleme (sonu bilinmiyor); çubuk kendi kendine akar.\n */\n value?: number;\n /** Ölçeğin üst ucu. */\n max?: number;\n /** Çubuğun erişilebilir adı (\"Yükleme\", \"Ödeme adımı\"). */\n label: string;\n /** Ekran okuyucuya okunan METİN karşılığı (\"3 / 5 dosya\"). */\n valueText?: string;\n /** Yüzdeyi çubuğun yanında GÖRÜNÜR olarak yazar. */\n isValueVisible?: boolean;\n /**\n * ⚠ `brand` 5.0'dan beri MÜREKKEP çizer (`selected` — ilerleme bir seçim göstergesi), yeşil\n * DEĞİL: yeşil yalnızca eylem, bağlantı ve odakta. Ad 4.x'ten kaldı; değiştirmek her çağrıyı\n * kırardı ve kazancı yalnızca isim olurdu.\n */\n tone?: 'brand' | 'success' | 'warning' | 'danger';\n /** `xs` 2 px — satır içi gösterge (bağlam doluluğu); etiket yanında okunur. */\n size?: 'xs' | 'sm' | 'md';\n className?: string;\n testId?: string;\n};\n\n/** İlerleme çubuğu — ölçülebilir bekleme. */\nconst Progress = ({\n value,\n max = 100,\n label,\n valueText,\n isValueVisible,\n tone = 'brand',\n size = 'md',\n className,\n testId,\n}: Props) => {\n const isIndeterminate = value === undefined;\n const percent = isIndeterminate ? 0 : toPercent(value, max);\n\n return (\n <div className={cx(styles.progress, className)} data-testid={testId}>\n <div\n role=\"progressbar\"\n aria-label={label}\n /* BELIRSIZ kipte `aria-valuenow` YAZILMAZ. */\n aria-valuenow={isIndeterminate ? undefined : Math.round(percent)}\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : 100}\n aria-valuetext={isIndeterminate ? undefined : valueText}\n className={cx(\n styles.progress__track,\n styles[`progress__track--${size}`],\n isIndeterminate && styles['progress__track--indeterminate'],\n )}\n >\n <span\n className={cx(styles.progress__fill, styles[`progress__fill--${tone}`])}\n style={isIndeterminate ? undefined : { inlineSize: `${percent}%` }}\n />\n </div>\n\n {isValueVisible && !isIndeterminate && (\n /*\n * Gorsel yuzde `aria-hidden`: ayni bilgi zaten `progressbar`in degerinde ve iki kez\n * duyurulmasi gurultu.\n */\n <span className={styles.progress__value} aria-hidden>\n {valueText ?? `%${Math.round(percent)}`}\n </span>\n )}\n </div>\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Progress, 'Progress')) as typeof Progress;\n\ntype CircleProps = {\n /** Tamamlanan miktar. `undefined` → BELİRSİZ; çember döner. */\n value?: number;\n max?: number;\n /** Erişilebilir ad. */\n label: string;\n valueText?: string;\n /** Yüzdeyi çemberin ortasına yazar. */\n isValueVisible?: boolean;\n /**\n * ⚠ `brand` 5.0'dan beri MÜREKKEP çizer (`selected` — ilerleme bir seçim göstergesi), yeşil\n * DEĞİL: yeşil yalnızca eylem, bağlantı ve odakta. Ad 4.x'ten kaldı; değiştirmek her çağrıyı\n * kırardı ve kazancı yalnızca isim olurdu.\n */\n tone?: 'brand' | 'success' | 'warning' | 'danger';\n /** Dış çap (px). */\n size?: number;\n className?: string;\n testId?: string;\n};\n\n/** Dairesel ilerleme. */\nconst ProgressCircleBase = ({\n value,\n max = 100,\n label,\n valueText,\n isValueVisible,\n tone = 'brand',\n size = 44,\n className,\n testId,\n}: CircleProps) => {\n const isIndeterminate = value === undefined;\n const percent = isIndeterminate ? 25 : toPercent(value, max);\n\n /*\n * Cizgi kalinligi capin ~%10'u: sabit bir kalinlik kucuk cemberde kutuyu dolduruyor, buyugunde\n * sac teline donuyordu.\n */\n const stroke = Math.max(3, Math.round(size * 0.1));\n const radius = (size - stroke) / 2;\n const circumference = 2 * Math.PI * radius;\n\n return (\n <div\n className={cx(styles.circle, isIndeterminate && styles['circle--indeterminate'], className)}\n style={{ width: size, height: size }}\n data-testid={testId}\n >\n <svg\n className={styles.circle__svg}\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n role=\"progressbar\"\n aria-label={label}\n aria-valuenow={isIndeterminate ? undefined : Math.round(percent)}\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : 100}\n aria-valuetext={isIndeterminate ? undefined : valueText}\n >\n <circle\n className={styles.circle__track}\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n />\n <circle\n className={cx(styles.circle__fill, styles[`circle__fill--${tone}`])}\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeDasharray={circumference}\n strokeDashoffset={circumference * (1 - percent / 100)}\n />\n </svg>\n\n {isValueVisible && !isIndeterminate && (\n <span className={styles.circle__label} aria-hidden>\n {valueText ?? `%${Math.round(percent)}`}\n </span>\n )}\n </div>\n );\n};\n\nexport const ProgressCircle = /*#__PURE__*/ named(\n /*#__PURE__*/ memo(ProgressCircleBase),\n 'ProgressCircle',\n);\n"],"names":["toPercent","value","max","Progress","label","valueText","isValueVisible","tone","size","className","testId","isIndeterminate","percent","jsxs","cx","styles","jsx","Progress$1","memo","named","ProgressCircleBase","stroke","radius","circumference","ProgressCircle"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer ui{.ui-progress-99MrX{display:flex;align-items:center;gap:var(--hd-space-3);width:100%}.ui-progress__track-Qbp9t{position:relative;flex:1;min-width:0;border-radius:var(--hd-radius-pill);background-color:var(--hd-border);overflow:hidden}.ui-progress__track--xs-CgHUU{height:2px}.ui-progress__track--sm-dbHZq{height:4px}.ui-progress__track--md-v1GdW{height:8px}.ui-progress__track--indeterminate-8fMxl .ui-progress__fill-Bam55{inline-size:40%;animation:var(--ui-anim-progress-slide) 1.4s var(--hd-ease-standard) infinite}@media (prefers-reduced-motion: reduce){.ui-progress__track--indeterminate-8fMxl .ui-progress__fill-Bam55{animation:none;inline-size:50%}}.ui-progress__fill-Bam55{display:block;height:100%;border-radius:var(--hd-radius-pill);background-color:var(--hd-primary);transition:inline-size var(--hd-duration-base) var(--hd-ease-standard)}.ui-progress__fill--success-IFuI5{background-color:var(--hd-success-solid)}.ui-progress__fill--warning-wIhgi{background-color:var(--hd-warning-solid)}.ui-progress__fill--danger-cuqj0{background-color:var(--hd-danger-solid)}@media (prefers-reduced-motion: reduce){.ui-progress__fill-Bam55{transition:none}}@media (forced-colors: active){.ui-progress__fill-Bam55{background-color:Highlight;forced-color-adjust:none}}.ui-progress__value-3FYxj{font-family:var(--hd-font-mono);font-size:var(--hd-type-caption-size);letter-spacing:.02em;flex-shrink:0;color:var(--hd-text-2);font-variant-numeric:tabular-nums}.ui-circle-9cn2w{display:inline-flex;position:relative;flex-shrink:0}.ui-circle__svg-0IwkR{rotate:-90deg}.ui-circle__track-zY2qc{stroke:var(--hd-border)}.ui-circle__fill-Jbde6{stroke:var(--hd-primary);stroke-linecap:round;transition:stroke-dashoffset var(--hd-duration-base) var(--hd-ease-standard)}.ui-circle__fill--success-HTr0m{stroke:var(--hd-success-solid)}.ui-circle__fill--warning-Fkgj2{stroke:var(--hd-warning-solid)}.ui-circle__fill--danger-4E3Z8{stroke:var(--hd-danger-solid)}@media (prefers-reduced-motion: reduce){.ui-circle__fill-Jbde6{transition:none}}@media (forced-colors: active){.ui-circle__fill-Jbde6{stroke:Highlight;forced-color-adjust:none}}.ui-circle--indeterminate-cITY6 .ui-circle__svg-0IwkR{animation:var(--ui-anim-spin) .7s linear infinite}@media (prefers-reduced-motion: reduce){.ui-circle--indeterminate-cITY6 .ui-circle__svg-0IwkR{animation:none}}.ui-circle__label-A3nJB{font-family:var(--hd-font-mono);font-size:var(--hd-type-caption-size);letter-spacing:.02em;position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:var(--hd-text);font-variant-numeric:tabular-nums}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),r=require("react"),h=require("../../helpers/label.helper.cjs"),p=require("../../theme/context.cjs"),D=require("../../enums/ui-size.enum.cjs"),S=require("../../enums/ui-variant.enum.cjs"),y=require("../Button/index.cjs"),w=require("../Field/index.cjs"),A=require("../Input/index.cjs"),N=require("../Modal/index.cjs"),Y=require("../Textarea/index.cjs"),k={default:{"form":"ui-form-zpZn4"}},F=({isOpen:s,onClose:u,onSubmit:I,title:M,label:_,submitLabel:L,cancelLabel:P,closeLabel:R,description:$,hint:z,placeholder:d,defaultValue:a="",isRequired:m,requiredLabel:E,inputMode:f="text",maxLength:x,rows:B=4})=>{const{labels:e}=p.useUi(),b=r.useId(),[o,c]=r.useState(a),[i,q]=r.useState(!1),g=r.useRef(!1);r.useEffect(()=>{s&&!g.current&&c(a),g.current=s},[s,a]);const j=o.trim(),v=!!m&&j==="",C=n=>f==="multiline"?t.jsx(Y.default,{...n,value:o,onChange:l=>c(l.target.value),placeholder:d,maxLength:x,rows:B}):t.jsx(A.default,{...n,type:f==="number"?"number":"text",value:o,onChange:l=>c(l.target.value),placeholder:d,maxLength:x}),U=async()=>{if(!(v||i)){q(!0);try{await I(j),u()}catch{}finally{q(!1)}}};return t.jsx(N.default,{isOpen:s,onClose:u,title:M,closeLabel:R??(e==null?void 0:e.close),description:$,size:"sm",isDismissable:!i,footer:t.jsxs(t.Fragment,{children:[t.jsx(y.default,{variant:S.default.SECONDARY,size:D.default.MEDIUM,onClick:u,disabled:i,children:h.resolveLabel("PromptDialog.cancelLabel",P,e==null?void 0:e.cancel)}),t.jsx(y.default,{type:"submit",form:b,variant:S.default.PRIMARY,size:D.default.MEDIUM,disabled:v,isLoading:i,children:h.resolveLabel("PromptDialog.submitLabel",L,e==null?void 0:e.submit)})]}),children:t.jsx("form",{id:b,className:k.default.form,onSubmit:n=>{n.preventDefault(),U()},children:t.jsx(w.default,{label:_,hint:z,isRequired:m,requiredLabel:E,children:C})})})},T=r.memo(F);exports.default=T;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/PromptDialog/index.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, memo, type ReactNode, useEffect, useId, useRef, useState } from 'react';\n\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\nimport UISize from '../../enums/ui-size.enum';\nimport UIVariant from '../../enums/ui-variant.enum';\nimport Button from '../Button';\nimport Field, { type FieldChildProps } from '../Field';\nimport Input from '../Input';\nimport Modal from '../Modal';\nimport Textarea from '../Textarea';\n\nimport styles from './index.module.scss';\n\ntype BaseProps = {\n isOpen: boolean;\n /** Vazgeçme ve perde/Escape kapanışı. */\n onClose: () => void;\n /** Girilen değerle çalışır (değer kırpılmış gönderilir). */\n onSubmit: (value: string) => void | Promise<void>;\n title: string;\n /** Girdi alanının etiketi. */\n label: string;\n /** Verilmezse `labels.submit`. */\n submitLabel?: string;\n /** Verilmezse `labels.cancel`. */\n cancelLabel?: string;\n /** Kapatma düğmesinin erişilebilir adı. */\n closeLabel?: string;\n /** Başlığın altındaki bir cümlelik bağlam. */\n description?: ReactNode;\n hint?: string;\n placeholder?: string;\n defaultValue?: string;\n /** `text` tek satır, `multiline` gerekçe gibi uzun metin, `number` adet/fark gibi sayılar. */\n inputMode?: 'text' | 'multiline' | 'number';\n maxLength?: number;\n rows?: number;\n};\n\ntype Props = BaseProps & {\n /** Boş (yalnızca boşluk dahil) değer gönderilemez. */\n isRequired?: boolean;\n /** Zorunluluk yıldızının ekran okuyucu karşılığı (\"(zorunlu)\"). */\n requiredLabel?: string;\n};\n\n/** Metin isteyen pencere — `window.prompt()` yerine. */\nconst PromptDialog: FC<Props> = ({\n isOpen,\n onClose,\n onSubmit,\n title,\n label,\n submitLabel,\n cancelLabel,\n closeLabel,\n description,\n hint,\n placeholder,\n defaultValue = '',\n isRequired,\n requiredLabel,\n inputMode = 'text',\n maxLength,\n rows = 4,\n}) => {\n const { labels } = useUi();\n const formId = useId();\n const [value, setValue] = useState(defaultValue);\n const [isBusy, setIsBusy] = useState(false);\n\n /*\n * Deger yalnizca ACILIS kenarinda tazelenir. `isOpen`'a bagli duz bir etki, pencere acikken gelen\n * her ust render'da yazilani ezebilirdi\n */\n const wasOpenRef = useRef(false);\n useEffect(() => {\n if (isOpen && !wasOpenRef.current) setValue(defaultValue);\n wasOpenRef.current = isOpen;\n }, [isOpen, defaultValue]);\n\n const trimmed = value.trim();\n const isSubmitDisabled = Boolean(isRequired) && trimmed === '';\n\n /** Girdi, `Field`in urettigi erisilebilirlik baglariyla cizilir. */\n const renderControl = (props: FieldChildProps) =>\n inputMode === 'multiline' ? (\n <Textarea\n {...props}\n value={value}\n onChange={event => setValue(event.target.value)}\n placeholder={placeholder}\n maxLength={maxLength}\n rows={rows}\n />\n ) : (\n <Input\n {...props}\n type={inputMode === 'number' ? 'number' : 'text'}\n value={value}\n onChange={event => setValue(event.target.value)}\n placeholder={placeholder}\n maxLength={maxLength}\n />\n );\n\n const handleSubmit = async () => {\n if (isSubmitDisabled || isBusy) return;\n\n setIsBusy(true);\n try {\n await onSubmit(trimmed);\n // Yalnizca basarida: hata durumunda pencere acik, metin yerinde kalir.\n onClose();\n } catch {\n // Bildirim cagiranin isi; burada yalnizca pencere acik tutulur.\n } finally {\n setIsBusy(false);\n }\n };\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n closeLabel={closeLabel ?? labels?.close}\n description={description}\n size=\"sm\"\n // Istek surerken kapanmaz: kapanis \"islem iptal oldu\" gibi gorunuyordu.\n isDismissable={!isBusy}\n footer={\n <>\n <Button\n variant={UIVariant.SECONDARY}\n size={UISize.MEDIUM}\n onClick={onClose}\n disabled={isBusy}\n >\n {resolveLabel('PromptDialog.cancelLabel', cancelLabel, labels?.cancel)}\n </Button>\n <Button\n type=\"submit\"\n form={formId}\n variant={UIVariant.PRIMARY}\n size={UISize.MEDIUM}\n disabled={isSubmitDisabled}\n isLoading={isBusy}\n >\n {resolveLabel('PromptDialog.submitLabel', submitLabel, labels?.submit)}\n </Button>\n </>\n }\n >\n <form\n id={formId}\n className={styles.form}\n onSubmit={event => {\n event.preventDefault();\n handleSubmit();\n }}\n >\n <Field label={label} hint={hint} isRequired={isRequired} requiredLabel={requiredLabel}>\n {renderControl}\n </Field>\n </form>\n </Modal>\n );\n};\n\nexport default /*#__PURE__*/ memo(PromptDialog) as typeof PromptDialog;\n"],"names":["PromptDialog","isOpen","onClose","onSubmit","title","label","submitLabel","cancelLabel","closeLabel","description","hint","placeholder","defaultValue","isRequired","requiredLabel","inputMode","maxLength","rows","labels","useUi","formId","useId","value","setValue","useState","isBusy","setIsBusy","wasOpenRef","useRef","useEffect","trimmed","isSubmitDisabled","renderControl","props","jsx","Textarea","event","Input","handleSubmit","Modal","jsxs","Fragment","Button","UIVariant","UISize","resolveLabel","styles","Field","index"],"mappings":"kiBAiDMA,EAA0B,CAAC,CAC/B,OAAAC,EACA,QAAAC,EACA,SAAAC,EACA,MAAAC,EACA,MAAAC,EACA,YAAAC,EACA,YAAAC,EACA,WAAAC,EACA,YAAAC,EACA,KAAAC,EACA,YAAAC,EACA,aAAAC,EAAe,GACf,WAAAC,EACA,cAAAC,EACA,UAAAC,EAAY,OACZ,UAAAC,EACA,KAAAC,EAAO,CACT,IAAM,CACJ,KAAM,CAAE,OAAAC,CAAA,EAAWC,QAAA,EACbC,EAASC,EAAAA,MAAA,EACT,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAASZ,CAAY,EACzC,CAACa,EAAQC,CAAS,EAAIF,EAAAA,SAAS,EAAK,EAMpCG,EAAaC,EAAAA,OAAO,EAAK,EAC/BC,EAAAA,UAAU,IAAM,CACV5B,GAAU,CAAC0B,EAAW,WAAkBf,CAAY,EACxDe,EAAW,QAAU1B,CACvB,EAAG,CAACA,EAAQW,CAAY,CAAC,EAEzB,MAAMkB,EAAUR,EAAM,KAAA,EAChBS,EAAmB,EAAQlB,GAAeiB,IAAY,GAGtDE,EAAiBC,GACrBlB,IAAc,YACZmB,EAAAA,IAACC,EAAAA,QAAA,CACE,GAAGF,EACJ,MAAAX,EACA,SAAUc,GAASb,EAASa,EAAM,OAAO,KAAK,EAC9C,YAAAzB,EACA,UAAAK,EACA,KAAAC,CAAA,CAAA,EAGFiB,EAAAA,IAACG,EAAAA,QAAA,CACE,GAAGJ,EACJ,KAAMlB,IAAc,SAAW,SAAW,OAC1C,MAAAO,EACA,SAAUc,GAASb,EAASa,EAAM,OAAO,KAAK,EAC9C,YAAAzB,EACA,UAAAK,CAAA,CAAA,EAIAsB,EAAe,SAAY,CAC/B,GAAI,EAAAP,GAAoBN,GAExB,CAAAC,EAAU,EAAI,EACd,GAAI,CACF,MAAMvB,EAAS2B,CAAO,EAEtB5B,EAAA,CACF,MAAQ,CAER,QAAA,CACEwB,EAAU,EAAK,CACjB,EACF,EAEA,OACEQ,EAAAA,IAACK,EAAAA,QAAA,CACC,OAAAtC,EACA,QAAAC,EACA,MAAAE,EACA,WAAYI,IAAcU,GAAA,YAAAA,EAAQ,OAClC,YAAAT,EACA,KAAK,KAEL,cAAe,CAACgB,EAChB,OACEe,EAAAA,KAAAC,WAAA,CACE,SAAA,CAAAP,EAAAA,IAACQ,EAAAA,QAAA,CACC,QAASC,EAAAA,QAAU,UACnB,KAAMC,EAAAA,QAAO,OACb,QAAS1C,EACT,SAAUuB,EAET,SAAAoB,EAAAA,aAAa,2BAA4BtC,EAAaW,GAAA,YAAAA,EAAQ,MAAM,CAAA,CAAA,EAEvEgB,EAAAA,IAACQ,EAAAA,QAAA,CACC,KAAK,SACL,KAAMtB,EACN,QAASuB,EAAAA,QAAU,QACnB,KAAMC,EAAAA,QAAO,OACb,SAAUb,EACV,UAAWN,EAEV,SAAAoB,EAAAA,aAAa,2BAA4BvC,EAAaY,GAAA,YAAAA,EAAQ,MAAM,CAAA,CAAA,CACvE,EACF,EAGF,SAAAgB,EAAAA,IAAC,OAAA,CACC,GAAId,EACJ,UAAW0B,EAAAA,QAAO,KAClB,SAAUV,GAAS,CACjBA,EAAM,eAAA,EACNE,EAAA,CACF,EAEA,eAACS,EAAAA,QAAA,CAAM,MAAA1C,EAAc,KAAAK,EAAY,WAAAG,EAAwB,cAAAC,EACtD,SAAAkB,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAGN,EAEAgB,SAAkChD,CAAY"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
|
+
type BaseProps = {
|
|
3
|
+
isOpen: boolean;
|
|
4
|
+
/** Vazgeçme ve perde/Escape kapanışı. */
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
/** Girilen değerle çalışır (değer kırpılmış gönderilir). */
|
|
7
|
+
onSubmit: (value: string) => void | Promise<void>;
|
|
8
|
+
title: string;
|
|
9
|
+
/** Girdi alanının etiketi. */
|
|
10
|
+
label: string;
|
|
11
|
+
/** Verilmezse `labels.submit`. */
|
|
12
|
+
submitLabel?: string;
|
|
13
|
+
/** Verilmezse `labels.cancel`. */
|
|
14
|
+
cancelLabel?: string;
|
|
15
|
+
/** Kapatma düğmesinin erişilebilir adı. */
|
|
16
|
+
closeLabel?: string;
|
|
17
|
+
/** Başlığın altındaki bir cümlelik bağlam. */
|
|
18
|
+
description?: ReactNode;
|
|
19
|
+
hint?: string;
|
|
20
|
+
placeholder?: string;
|
|
21
|
+
defaultValue?: string;
|
|
22
|
+
/** `text` tek satır, `multiline` gerekçe gibi uzun metin, `number` adet/fark gibi sayılar. */
|
|
23
|
+
inputMode?: 'text' | 'multiline' | 'number';
|
|
24
|
+
maxLength?: number;
|
|
25
|
+
rows?: number;
|
|
26
|
+
};
|
|
27
|
+
type Props = BaseProps & {
|
|
28
|
+
/** Boş (yalnızca boşluk dahil) değer gönderilemez. */
|
|
29
|
+
isRequired?: boolean;
|
|
30
|
+
/** Zorunluluk yıldızının ekran okuyucu karşılığı ("(zorunlu)"). */
|
|
31
|
+
requiredLabel?: string;
|
|
32
|
+
};
|
|
33
|
+
/** Metin isteyen pencere — `window.prompt()` yerine. */
|
|
34
|
+
declare const PromptDialog: FC<Props>;
|
|
35
|
+
declare const _default: typeof PromptDialog;
|
|
36
|
+
export default _default;
|