@gnome-ui/react 1.36.2 → 1.36.4
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/README.md +16 -2
- package/dist/components/AboutDialog/AboutDialog.cjs +2 -0
- package/dist/components/AboutDialog/AboutDialog.cjs.map +1 -0
- package/dist/components/AboutDialog/AboutDialog.js +185 -0
- package/dist/components/AboutDialog/AboutDialog.js.map +1 -0
- package/dist/components/AboutDialog/AboutDialog.module.css.cjs +2 -0
- package/dist/components/AboutDialog/AboutDialog.module.css.cjs.map +1 -0
- package/dist/components/AboutDialog/AboutDialog.module.css.js +35 -0
- package/dist/components/AboutDialog/AboutDialog.module.css.js.map +1 -0
- package/dist/components/AboutDialog.cjs +1 -0
- package/dist/components/AboutDialog.d.ts +2 -0
- package/dist/components/AboutDialog.js +2 -0
- package/dist/components/ActionRow/ActionRow.cjs +2 -0
- package/dist/components/ActionRow/ActionRow.cjs.map +1 -0
- package/dist/components/ActionRow/ActionRow.js +39 -0
- package/dist/components/ActionRow/ActionRow.js.map +1 -0
- package/dist/components/ActionRow/ActionRow.module.css.cjs +2 -0
- package/dist/components/ActionRow/ActionRow.module.css.cjs.map +1 -0
- package/dist/components/ActionRow/ActionRow.module.css.js +15 -0
- package/dist/components/ActionRow/ActionRow.module.css.js.map +1 -0
- package/dist/components/ActionRow.cjs +1 -0
- package/dist/components/ActionRow.d.ts +2 -0
- package/dist/components/ActionRow.js +2 -0
- package/dist/components/Avatar/Avatar.cjs +2 -0
- package/dist/components/Avatar/Avatar.cjs.map +1 -0
- package/dist/components/Avatar/Avatar.js +50 -0
- package/dist/components/Avatar/Avatar.js.map +1 -0
- package/dist/components/Avatar/Avatar.module.css.cjs +2 -0
- package/dist/components/Avatar/Avatar.module.css.cjs.map +1 -0
- package/dist/components/Avatar/Avatar.module.css.js +22 -0
- package/dist/components/Avatar/Avatar.module.css.js.map +1 -0
- package/dist/components/Avatar.cjs +1 -0
- package/dist/components/Avatar.d.ts +2 -0
- package/dist/components/Avatar.js +2 -0
- package/dist/components/Badge/Badge.cjs +2 -0
- package/dist/components/Badge/Badge.cjs.map +1 -0
- package/dist/components/Badge/Badge.js +24 -0
- package/dist/components/Badge/Badge.js.map +1 -0
- package/dist/components/Badge/Badge.module.css.cjs +2 -0
- package/dist/components/Badge/Badge.module.css.cjs.map +1 -0
- package/dist/components/Badge/Badge.module.css.js +15 -0
- package/dist/components/Badge/Badge.module.css.js.map +1 -0
- package/dist/components/Badge.cjs +1 -0
- package/dist/components/Badge.d.ts +2 -0
- package/dist/components/Badge.js +2 -0
- package/dist/components/Banner/Banner.cjs +2 -0
- package/dist/components/Banner/Banner.cjs.map +1 -0
- package/dist/components/Banner/Banner.js +44 -0
- package/dist/components/Banner/Banner.js.map +1 -0
- package/dist/components/Banner/Banner.module.css.cjs +2 -0
- package/dist/components/Banner/Banner.module.css.cjs.map +1 -0
- package/dist/components/Banner/Banner.module.css.js +20 -0
- package/dist/components/Banner/Banner.module.css.js.map +1 -0
- package/dist/components/Banner.cjs +1 -0
- package/dist/components/Banner.d.ts +2 -0
- package/dist/components/Banner.js +2 -0
- package/dist/components/Bin/Bin.cjs +2 -0
- package/dist/components/Bin/Bin.cjs.map +1 -0
- package/dist/components/Bin/Bin.js +12 -0
- package/dist/components/Bin/Bin.js.map +1 -0
- package/dist/components/Bin.cjs +1 -0
- package/dist/components/Bin.d.ts +2 -0
- package/dist/components/Bin.js +2 -0
- package/dist/components/Blockquote/Blockquote.cjs +2 -0
- package/dist/components/Blockquote/Blockquote.cjs.map +1 -0
- package/dist/components/Blockquote/Blockquote.js +34 -0
- package/dist/components/Blockquote/Blockquote.js.map +1 -0
- package/dist/components/Blockquote/Blockquote.module.css.cjs +2 -0
- package/dist/components/Blockquote/Blockquote.module.css.cjs.map +1 -0
- package/dist/components/Blockquote/Blockquote.module.css.js +17 -0
- package/dist/components/Blockquote/Blockquote.module.css.js.map +1 -0
- package/dist/components/Blockquote.cjs +1 -0
- package/dist/components/Blockquote.d.ts +2 -0
- package/dist/components/Blockquote.js +2 -0
- package/dist/components/BottomSheet/BottomSheet.cjs +2 -0
- package/dist/components/BottomSheet/BottomSheet.cjs.map +1 -0
- package/dist/components/BottomSheet/BottomSheet.js +60 -0
- package/dist/components/BottomSheet/BottomSheet.js.map +1 -0
- package/dist/components/BottomSheet/BottomSheet.module.css.cjs +2 -0
- package/dist/components/BottomSheet/BottomSheet.module.css.cjs.map +1 -0
- package/dist/components/BottomSheet/BottomSheet.module.css.js +15 -0
- package/dist/components/BottomSheet/BottomSheet.module.css.js.map +1 -0
- package/dist/components/BottomSheet.cjs +1 -0
- package/dist/components/BottomSheet.d.ts +2 -0
- package/dist/components/BottomSheet.js +2 -0
- package/dist/components/Box/Box.cjs +2 -0
- package/dist/components/Box/Box.cjs.map +1 -0
- package/dist/components/Box/Box.js +22 -0
- package/dist/components/Box/Box.js.map +1 -0
- package/dist/components/Box.cjs +1 -0
- package/dist/components/Box.d.ts +2 -0
- package/dist/components/Box.js +2 -0
- package/dist/components/BoxedList/BoxedList.cjs +2 -0
- package/dist/components/BoxedList/BoxedList.cjs.map +1 -0
- package/dist/components/BoxedList/BoxedList.js +25 -0
- package/dist/components/BoxedList/BoxedList.js.map +1 -0
- package/dist/components/BoxedList/BoxedList.module.css.cjs +2 -0
- package/dist/components/BoxedList/BoxedList.module.css.cjs.map +1 -0
- package/dist/components/BoxedList/BoxedList.module.css.js +11 -0
- package/dist/components/BoxedList/BoxedList.module.css.js.map +1 -0
- package/dist/components/BoxedList.cjs +1 -0
- package/dist/components/BoxedList.d.ts +2 -0
- package/dist/components/BoxedList.js +2 -0
- package/dist/components/BreakpointBin/BreakpointBin.cjs +2 -0
- package/dist/components/BreakpointBin/BreakpointBin.cjs.map +1 -0
- package/dist/components/BreakpointBin/BreakpointBin.js +37 -0
- package/dist/components/BreakpointBin/BreakpointBin.js.map +1 -0
- package/dist/components/BreakpointBin.cjs +1 -0
- package/dist/components/BreakpointBin.d.ts +2 -0
- package/dist/components/BreakpointBin.js +2 -0
- package/dist/components/Button/Button.cjs +2 -0
- package/dist/components/Button/Button.cjs.map +1 -0
- package/dist/components/Button/Button.js +25 -0
- package/dist/components/Button/Button.js.map +1 -0
- package/dist/components/Button/Button.module.css.cjs +2 -0
- package/dist/components/Button/Button.module.css.cjs.map +1 -0
- package/dist/components/Button/Button.module.css.js +17 -0
- package/dist/components/Button/Button.module.css.js.map +1 -0
- package/dist/components/Button.cjs +1 -0
- package/dist/components/Button.d.ts +2 -0
- package/dist/components/Button.js +2 -0
- package/dist/components/ButtonContent/ButtonContent.cjs +2 -0
- package/dist/components/ButtonContent/ButtonContent.cjs.map +1 -0
- package/dist/components/ButtonContent/ButtonContent.js +33 -0
- package/dist/components/ButtonContent/ButtonContent.js.map +1 -0
- package/dist/components/ButtonContent/ButtonContent.module.css.cjs +2 -0
- package/dist/components/ButtonContent/ButtonContent.module.css.cjs.map +1 -0
- package/dist/components/ButtonContent/ButtonContent.module.css.js +9 -0
- package/dist/components/ButtonContent/ButtonContent.module.css.js.map +1 -0
- package/dist/components/ButtonContent.cjs +1 -0
- package/dist/components/ButtonContent.d.ts +2 -0
- package/dist/components/ButtonContent.js +2 -0
- package/dist/components/ButtonRow/ButtonRow.cjs +2 -0
- package/dist/components/ButtonRow/ButtonRow.cjs.map +1 -0
- package/dist/components/ButtonRow/ButtonRow.js +31 -0
- package/dist/components/ButtonRow/ButtonRow.js.map +1 -0
- package/dist/components/ButtonRow/ButtonRow.module.css.cjs +2 -0
- package/dist/components/ButtonRow/ButtonRow.module.css.cjs.map +1 -0
- package/dist/components/ButtonRow/ButtonRow.module.css.js +13 -0
- package/dist/components/ButtonRow/ButtonRow.module.css.js.map +1 -0
- package/dist/components/ButtonRow.cjs +1 -0
- package/dist/components/ButtonRow.d.ts +2 -0
- package/dist/components/ButtonRow.js +2 -0
- package/dist/components/Card/Card.cjs +2 -0
- package/dist/components/Card/Card.cjs.map +1 -0
- package/dist/components/Card/Card.js +19 -0
- package/dist/components/Card/Card.js.map +1 -0
- package/dist/components/Card/Card.module.css.cjs +2 -0
- package/dist/components/Card/Card.module.css.cjs.map +1 -0
- package/dist/components/Card/Card.module.css.js +13 -0
- package/dist/components/Card/Card.module.css.js.map +1 -0
- package/dist/components/Card.cjs +1 -0
- package/dist/components/Card.d.ts +2 -0
- package/dist/components/Card.js +2 -0
- package/dist/components/Carousel/Carousel.cjs +2 -0
- package/dist/components/Carousel/Carousel.cjs.map +1 -0
- package/dist/components/Carousel/Carousel.js +112 -0
- package/dist/components/Carousel/Carousel.js.map +1 -0
- package/dist/components/Carousel/Carousel.module.css.cjs +2 -0
- package/dist/components/Carousel/Carousel.module.css.cjs.map +1 -0
- package/dist/components/Carousel/Carousel.module.css.js +16 -0
- package/dist/components/Carousel/Carousel.module.css.js.map +1 -0
- package/dist/components/Carousel.cjs +1 -0
- package/dist/components/Carousel.d.ts +2 -0
- package/dist/components/Carousel.js +2 -0
- package/dist/components/CheckRow/CheckRow.cjs +2 -0
- package/dist/components/CheckRow/CheckRow.cjs.map +1 -0
- package/dist/components/CheckRow/CheckRow.js +66 -0
- package/dist/components/CheckRow/CheckRow.js.map +1 -0
- package/dist/components/CheckRow/CheckRow.module.css.cjs +2 -0
- package/dist/components/CheckRow/CheckRow.module.css.cjs.map +1 -0
- package/dist/components/CheckRow/CheckRow.module.css.js +16 -0
- package/dist/components/CheckRow/CheckRow.module.css.js.map +1 -0
- package/dist/components/CheckRow.cjs +1 -0
- package/dist/components/CheckRow.d.ts +2 -0
- package/dist/components/CheckRow.js +2 -0
- package/dist/components/Checkbox/Checkbox.cjs +2 -0
- package/dist/components/Checkbox/Checkbox.cjs.map +1 -0
- package/dist/components/Checkbox/Checkbox.js +19 -0
- package/dist/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.module.css.cjs +2 -0
- package/dist/components/Checkbox/Checkbox.module.css.cjs.map +1 -0
- package/dist/components/Checkbox/Checkbox.module.css.js +5 -0
- package/dist/components/Checkbox/Checkbox.module.css.js.map +1 -0
- package/dist/components/Checkbox.cjs +1 -0
- package/dist/components/Checkbox.d.ts +2 -0
- package/dist/components/Checkbox.js +2 -0
- package/dist/components/Chip/Chip.cjs +2 -0
- package/dist/components/Chip/Chip.cjs.map +1 -0
- package/dist/components/Chip/Chip.js +61 -0
- package/dist/components/Chip/Chip.js.map +1 -0
- package/dist/components/Chip/Chip.module.css.cjs +2 -0
- package/dist/components/Chip/Chip.module.css.cjs.map +1 -0
- package/dist/components/Chip/Chip.module.css.js +13 -0
- package/dist/components/Chip/Chip.module.css.js.map +1 -0
- package/dist/components/Chip.cjs +1 -0
- package/dist/components/Chip.d.ts +2 -0
- package/dist/components/Chip.js +2 -0
- package/dist/components/Clamp/Clamp.cjs +2 -0
- package/dist/components/Clamp/Clamp.cjs.map +1 -0
- package/dist/components/Clamp/Clamp.js +18 -0
- package/dist/components/Clamp/Clamp.js.map +1 -0
- package/dist/components/Clamp/Clamp.module.css.cjs +2 -0
- package/dist/components/Clamp/Clamp.module.css.cjs.map +1 -0
- package/dist/components/Clamp/Clamp.module.css.js +5 -0
- package/dist/components/Clamp/Clamp.module.css.js.map +1 -0
- package/dist/components/Clamp.cjs +1 -0
- package/dist/components/Clamp.d.ts +2 -0
- package/dist/components/Clamp.js +2 -0
- package/dist/components/ColorPicker/ColorPicker.cjs +2 -0
- package/dist/components/ColorPicker/ColorPicker.cjs.map +1 -0
- package/dist/components/ColorPicker/ColorPicker.js +152 -0
- package/dist/components/ColorPicker/ColorPicker.js.map +1 -0
- package/dist/components/ColorPicker/ColorPicker.module.css.cjs +2 -0
- package/dist/components/ColorPicker/ColorPicker.module.css.cjs.map +1 -0
- package/dist/components/ColorPicker/ColorPicker.module.css.js +17 -0
- package/dist/components/ColorPicker/ColorPicker.module.css.js.map +1 -0
- package/dist/components/ColorPicker.cjs +1 -0
- package/dist/components/ColorPicker.d.ts +2 -0
- package/dist/components/ColorPicker.js +2 -0
- package/dist/components/ColumnView/ColumnView.cjs +2 -0
- package/dist/components/ColumnView/ColumnView.cjs.map +1 -0
- package/dist/components/ColumnView/ColumnView.js +153 -0
- package/dist/components/ColumnView/ColumnView.js.map +1 -0
- package/dist/components/ColumnView/ColumnView.module.css.cjs +2 -0
- package/dist/components/ColumnView/ColumnView.module.css.cjs.map +1 -0
- package/dist/components/ColumnView/ColumnView.module.css.js +28 -0
- package/dist/components/ColumnView/ColumnView.module.css.js.map +1 -0
- package/dist/components/ColumnView.cjs +1 -0
- package/dist/components/ColumnView.d.ts +2 -0
- package/dist/components/ColumnView.js +2 -0
- package/dist/components/ComboRow/ComboRow.cjs +2 -0
- package/dist/components/ComboRow/ComboRow.cjs.map +1 -0
- package/dist/components/ComboRow/ComboRow.js +197 -0
- package/dist/components/ComboRow/ComboRow.js.map +1 -0
- package/dist/components/ComboRow/ComboRow.module.css.cjs +2 -0
- package/dist/components/ComboRow/ComboRow.module.css.cjs.map +1 -0
- package/dist/components/ComboRow/ComboRow.module.css.js +31 -0
- package/dist/components/ComboRow/ComboRow.module.css.js.map +1 -0
- package/dist/components/ComboRow.cjs +1 -0
- package/dist/components/ComboRow.d.ts +2 -0
- package/dist/components/ComboRow.js +2 -0
- package/dist/components/ContributionGraph/ContributionGraph.cjs +2 -0
- package/dist/components/ContributionGraph/ContributionGraph.cjs.map +1 -0
- package/dist/components/ContributionGraph/ContributionGraph.js +248 -0
- package/dist/components/ContributionGraph/ContributionGraph.js.map +1 -0
- package/dist/components/ContributionGraph/ContributionGraph.module.css.cjs +2 -0
- package/dist/components/ContributionGraph/ContributionGraph.module.css.cjs.map +1 -0
- package/dist/components/ContributionGraph/ContributionGraph.module.css.js +14 -0
- package/dist/components/ContributionGraph/ContributionGraph.module.css.js.map +1 -0
- package/dist/components/ContributionGraph.cjs +1 -0
- package/dist/components/ContributionGraph.d.ts +2 -0
- package/dist/components/ContributionGraph.js +2 -0
- package/dist/components/CountDownTimer/CountDownTimer.cjs +2 -0
- package/dist/components/CountDownTimer/CountDownTimer.cjs.map +1 -0
- package/dist/components/CountDownTimer/CountDownTimer.js +57 -0
- package/dist/components/CountDownTimer/CountDownTimer.js.map +1 -0
- package/dist/components/CountDownTimer/CountDownTimer.module.css.cjs +2 -0
- package/dist/components/CountDownTimer/CountDownTimer.module.css.cjs.map +1 -0
- package/dist/components/CountDownTimer/CountDownTimer.module.css.js +13 -0
- package/dist/components/CountDownTimer/CountDownTimer.module.css.js.map +1 -0
- package/dist/components/CountDownTimer.cjs +1 -0
- package/dist/components/CountDownTimer.d.ts +2 -0
- package/dist/components/CountDownTimer.js +2 -0
- package/dist/components/Dialog/Dialog.cjs +2 -0
- package/dist/components/Dialog/Dialog.cjs.map +1 -0
- package/dist/components/Dialog/Dialog.js +78 -0
- package/dist/components/Dialog/Dialog.js.map +1 -0
- package/dist/components/Dialog/Dialog.module.css.cjs +2 -0
- package/dist/components/Dialog/Dialog.module.css.cjs.map +1 -0
- package/dist/components/Dialog/Dialog.module.css.js +18 -0
- package/dist/components/Dialog/Dialog.module.css.js.map +1 -0
- package/dist/components/Dialog/dialogUtils.cjs +2 -0
- package/dist/components/Dialog/dialogUtils.cjs.map +1 -0
- package/dist/components/Dialog/dialogUtils.js +33 -0
- package/dist/components/Dialog/dialogUtils.js.map +1 -0
- package/dist/components/Dialog.cjs +1 -0
- package/dist/components/Dialog.d.ts +2 -0
- package/dist/components/Dialog.js +2 -0
- package/dist/components/Dropdown/Dropdown.cjs +2 -0
- package/dist/components/Dropdown/Dropdown.cjs.map +1 -0
- package/dist/components/Dropdown/Dropdown.js +159 -0
- package/dist/components/Dropdown/Dropdown.js.map +1 -0
- package/dist/components/Dropdown/Dropdown.module.css.cjs +2 -0
- package/dist/components/Dropdown/Dropdown.module.css.cjs.map +1 -0
- package/dist/components/Dropdown/Dropdown.module.css.js +27 -0
- package/dist/components/Dropdown/Dropdown.module.css.js.map +1 -0
- package/dist/components/Dropdown.cjs +1 -0
- package/dist/components/Dropdown.d.ts +2 -0
- package/dist/components/Dropdown.js +2 -0
- package/dist/components/EntryRow/EntryRow.cjs +2 -0
- package/dist/components/EntryRow/EntryRow.cjs.map +1 -0
- package/dist/components/EntryRow/EntryRow.js +50 -0
- package/dist/components/EntryRow/EntryRow.js.map +1 -0
- package/dist/components/EntryRow/EntryRow.module.css.cjs +2 -0
- package/dist/components/EntryRow/EntryRow.module.css.cjs.map +1 -0
- package/dist/components/EntryRow/EntryRow.module.css.js +16 -0
- package/dist/components/EntryRow/EntryRow.module.css.js.map +1 -0
- package/dist/components/EntryRow.cjs +1 -0
- package/dist/components/EntryRow.d.ts +2 -0
- package/dist/components/EntryRow.js +2 -0
- package/dist/components/ExpanderRow/ExpanderRow.cjs +2 -0
- package/dist/components/ExpanderRow/ExpanderRow.cjs.map +1 -0
- package/dist/components/ExpanderRow/ExpanderRow.js +81 -0
- package/dist/components/ExpanderRow/ExpanderRow.js.map +1 -0
- package/dist/components/ExpanderRow/ExpanderRow.module.css.cjs +2 -0
- package/dist/components/ExpanderRow/ExpanderRow.module.css.cjs.map +1 -0
- package/dist/components/ExpanderRow/ExpanderRow.module.css.js +20 -0
- package/dist/components/ExpanderRow/ExpanderRow.module.css.js.map +1 -0
- package/dist/components/ExpanderRow.cjs +1 -0
- package/dist/components/ExpanderRow.d.ts +2 -0
- package/dist/components/ExpanderRow.js +2 -0
- package/dist/components/Footer/Footer.cjs +2 -0
- package/dist/components/Footer/Footer.cjs.map +1 -0
- package/dist/components/Footer/Footer.js +31 -0
- package/dist/components/Footer/Footer.js.map +1 -0
- package/dist/components/Footer/Footer.module.css.cjs +2 -0
- package/dist/components/Footer/Footer.module.css.cjs.map +1 -0
- package/dist/components/Footer/Footer.module.css.js +11 -0
- package/dist/components/Footer/Footer.module.css.js.map +1 -0
- package/dist/components/Footer.cjs +1 -0
- package/dist/components/Footer.d.ts +2 -0
- package/dist/components/Footer.js +2 -0
- package/dist/components/Frame/Frame.cjs +2 -0
- package/dist/components/Frame/Frame.cjs.map +1 -0
- package/dist/components/Frame/Frame.js +14 -0
- package/dist/components/Frame/Frame.js.map +1 -0
- package/dist/components/Frame/Frame.module.css.cjs +2 -0
- package/dist/components/Frame/Frame.module.css.cjs.map +1 -0
- package/dist/components/Frame/Frame.module.css.js +5 -0
- package/dist/components/Frame/Frame.module.css.js.map +1 -0
- package/dist/components/Frame.cjs +1 -0
- package/dist/components/Frame.d.ts +2 -0
- package/dist/components/Frame.js +2 -0
- package/dist/components/HeaderBar/HeaderBar.cjs +2 -0
- package/dist/components/HeaderBar/HeaderBar.cjs.map +1 -0
- package/dist/components/HeaderBar/HeaderBar.js +35 -0
- package/dist/components/HeaderBar/HeaderBar.js.map +1 -0
- package/dist/components/HeaderBar/HeaderBar.module.css.cjs +2 -0
- package/dist/components/HeaderBar/HeaderBar.module.css.cjs.map +1 -0
- package/dist/components/HeaderBar/HeaderBar.module.css.js +12 -0
- package/dist/components/HeaderBar/HeaderBar.module.css.js.map +1 -0
- package/dist/components/HeaderBar.cjs +1 -0
- package/dist/components/HeaderBar.d.ts +2 -0
- package/dist/components/HeaderBar.js +2 -0
- package/dist/components/Icon/Icon.cjs +2 -0
- package/dist/components/Icon/Icon.cjs.map +1 -0
- package/dist/components/Icon/Icon.js +31 -0
- package/dist/components/Icon/Icon.js.map +1 -0
- package/dist/components/Icon.cjs +1 -0
- package/dist/components/Icon.d.ts +2 -0
- package/dist/components/Icon.js +2 -0
- package/dist/components/InlineViewSwitcher/InlineViewSwitcher.cjs +2 -0
- package/dist/components/InlineViewSwitcher/InlineViewSwitcher.cjs.map +1 -0
- package/dist/components/InlineViewSwitcher/InlineViewSwitcher.js +47 -0
- package/dist/components/InlineViewSwitcher/InlineViewSwitcher.js.map +1 -0
- package/dist/components/InlineViewSwitcher/InlineViewSwitcher.module.css.cjs +2 -0
- package/dist/components/InlineViewSwitcher/InlineViewSwitcher.module.css.cjs.map +1 -0
- package/dist/components/InlineViewSwitcher/InlineViewSwitcher.module.css.js +16 -0
- package/dist/components/InlineViewSwitcher/InlineViewSwitcher.module.css.js.map +1 -0
- package/dist/components/InlineViewSwitcher/InlineViewSwitcherItem.cjs +2 -0
- package/dist/components/InlineViewSwitcher/InlineViewSwitcherItem.cjs.map +1 -0
- package/dist/components/InlineViewSwitcher/InlineViewSwitcherItem.js +38 -0
- package/dist/components/InlineViewSwitcher/InlineViewSwitcherItem.js.map +1 -0
- package/dist/components/InlineViewSwitcher.cjs +1 -0
- package/dist/components/InlineViewSwitcher.d.ts +2 -0
- package/dist/components/InlineViewSwitcher.js +3 -0
- package/dist/components/Link/Link.cjs +2 -0
- package/dist/components/Link/Link.cjs.map +1 -0
- package/dist/components/Link/Link.js +21 -0
- package/dist/components/Link/Link.js.map +1 -0
- package/dist/components/Link/Link.module.css.cjs +2 -0
- package/dist/components/Link/Link.module.css.cjs.map +1 -0
- package/dist/components/Link/Link.module.css.js +8 -0
- package/dist/components/Link/Link.module.css.js.map +1 -0
- package/dist/components/Link.cjs +1 -0
- package/dist/components/Link.d.ts +2 -0
- package/dist/components/Link.js +2 -0
- package/dist/components/LinkedGroup/LinkedGroup.cjs +2 -0
- package/dist/components/LinkedGroup/LinkedGroup.cjs.map +1 -0
- package/dist/components/LinkedGroup/LinkedGroup.js +18 -0
- package/dist/components/LinkedGroup/LinkedGroup.js.map +1 -0
- package/dist/components/LinkedGroup/LinkedGroup.module.css.cjs +2 -0
- package/dist/components/LinkedGroup/LinkedGroup.module.css.cjs.map +1 -0
- package/dist/components/LinkedGroup/LinkedGroup.module.css.js +8 -0
- package/dist/components/LinkedGroup/LinkedGroup.module.css.js.map +1 -0
- package/dist/components/LinkedGroup.cjs +1 -0
- package/dist/components/LinkedGroup.d.ts +2 -0
- package/dist/components/LinkedGroup.js +2 -0
- package/dist/components/NavigationSplitView/NavigationSplitView.cjs +2 -0
- package/dist/components/NavigationSplitView/NavigationSplitView.cjs.map +1 -0
- package/dist/components/NavigationSplitView/NavigationSplitView.js +39 -0
- package/dist/components/NavigationSplitView/NavigationSplitView.js.map +1 -0
- package/dist/components/NavigationSplitView/NavigationSplitView.module.css.cjs +2 -0
- package/dist/components/NavigationSplitView/NavigationSplitView.module.css.cjs.map +1 -0
- package/dist/components/NavigationSplitView/NavigationSplitView.module.css.js +14 -0
- package/dist/components/NavigationSplitView/NavigationSplitView.module.css.js.map +1 -0
- package/dist/components/NavigationSplitView.cjs +1 -0
- package/dist/components/NavigationSplitView.d.ts +2 -0
- package/dist/components/NavigationSplitView.js +2 -0
- package/dist/components/NavigationView/NavigationView.cjs +2 -0
- package/dist/components/NavigationView/NavigationView.cjs.map +1 -0
- package/dist/components/NavigationView/NavigationView.js +60 -0
- package/dist/components/NavigationView/NavigationView.js.map +1 -0
- package/dist/components/NavigationView/NavigationView.module.css.cjs +2 -0
- package/dist/components/NavigationView/NavigationView.module.css.cjs.map +1 -0
- package/dist/components/NavigationView/NavigationView.module.css.js +16 -0
- package/dist/components/NavigationView/NavigationView.module.css.js.map +1 -0
- package/dist/components/NavigationView.cjs +1 -0
- package/dist/components/NavigationView.d.ts +2 -0
- package/dist/components/NavigationView.js +2 -0
- package/dist/components/OverlaySplitView/OverlaySplitView.cjs +2 -0
- package/dist/components/OverlaySplitView/OverlaySplitView.cjs.map +1 -0
- package/dist/components/OverlaySplitView/OverlaySplitView.js +75 -0
- package/dist/components/OverlaySplitView/OverlaySplitView.js.map +1 -0
- package/dist/components/OverlaySplitView/OverlaySplitView.module.css.cjs +2 -0
- package/dist/components/OverlaySplitView/OverlaySplitView.module.css.cjs.map +1 -0
- package/dist/components/OverlaySplitView/OverlaySplitView.module.css.js +18 -0
- package/dist/components/OverlaySplitView/OverlaySplitView.module.css.js.map +1 -0
- package/dist/components/OverlaySplitView.cjs +1 -0
- package/dist/components/OverlaySplitView.d.ts +2 -0
- package/dist/components/OverlaySplitView.js +2 -0
- package/dist/components/PasswordEntryRow/PasswordEntryRow.cjs +2 -0
- package/dist/components/PasswordEntryRow/PasswordEntryRow.cjs.map +1 -0
- package/dist/components/PasswordEntryRow/PasswordEntryRow.js +35 -0
- package/dist/components/PasswordEntryRow/PasswordEntryRow.js.map +1 -0
- package/dist/components/PasswordEntryRow/PasswordEntryRow.module.css.cjs +2 -0
- package/dist/components/PasswordEntryRow/PasswordEntryRow.module.css.cjs.map +1 -0
- package/dist/components/PasswordEntryRow/PasswordEntryRow.module.css.js +5 -0
- package/dist/components/PasswordEntryRow/PasswordEntryRow.module.css.js.map +1 -0
- package/dist/components/PasswordEntryRow.cjs +1 -0
- package/dist/components/PasswordEntryRow.d.ts +2 -0
- package/dist/components/PasswordEntryRow.js +2 -0
- package/dist/components/PathBar/PathBar.cjs +2 -0
- package/dist/components/PathBar/PathBar.cjs.map +1 -0
- package/dist/components/PathBar/PathBar.js +59 -0
- package/dist/components/PathBar/PathBar.js.map +1 -0
- package/dist/components/PathBar/PathBar.module.css.cjs +2 -0
- package/dist/components/PathBar/PathBar.module.css.cjs.map +1 -0
- package/dist/components/PathBar/PathBar.module.css.js +13 -0
- package/dist/components/PathBar/PathBar.module.css.js.map +1 -0
- package/dist/components/PathBar.cjs +1 -0
- package/dist/components/PathBar.d.ts +2 -0
- package/dist/components/PathBar.js +2 -0
- package/dist/components/Popover/Popover.cjs +2 -0
- package/dist/components/Popover/Popover.cjs.map +1 -0
- package/dist/components/Popover/Popover.js +157 -0
- package/dist/components/Popover/Popover.js.map +1 -0
- package/dist/components/Popover/Popover.module.css.cjs +2 -0
- package/dist/components/Popover/Popover.module.css.cjs.map +1 -0
- package/dist/components/Popover/Popover.module.css.js +13 -0
- package/dist/components/Popover/Popover.module.css.js.map +1 -0
- package/dist/components/Popover.cjs +1 -0
- package/dist/components/Popover.d.ts +2 -0
- package/dist/components/Popover.js +2 -0
- package/dist/components/PreferencesDialog/PreferencesDialog.cjs +2 -0
- package/dist/components/PreferencesDialog/PreferencesDialog.cjs.map +1 -0
- package/dist/components/PreferencesDialog/PreferencesDialog.js +119 -0
- package/dist/components/PreferencesDialog/PreferencesDialog.js.map +1 -0
- package/dist/components/PreferencesDialog/PreferencesDialog.module.css.cjs +2 -0
- package/dist/components/PreferencesDialog/PreferencesDialog.module.css.cjs.map +1 -0
- package/dist/components/PreferencesDialog/PreferencesDialog.module.css.js +25 -0
- package/dist/components/PreferencesDialog/PreferencesDialog.module.css.js.map +1 -0
- package/dist/components/PreferencesDialog.cjs +1 -0
- package/dist/components/PreferencesDialog.d.ts +2 -0
- package/dist/components/PreferencesDialog.js +2 -0
- package/dist/components/PreferencesGroup/PreferencesGroup.cjs +2 -0
- package/dist/components/PreferencesGroup/PreferencesGroup.cjs.map +1 -0
- package/dist/components/PreferencesGroup/PreferencesGroup.js +33 -0
- package/dist/components/PreferencesGroup/PreferencesGroup.js.map +1 -0
- package/dist/components/PreferencesGroup/PreferencesGroup.module.css.cjs +2 -0
- package/dist/components/PreferencesGroup/PreferencesGroup.module.css.cjs.map +1 -0
- package/dist/components/PreferencesGroup/PreferencesGroup.module.css.js +13 -0
- package/dist/components/PreferencesGroup/PreferencesGroup.module.css.js.map +1 -0
- package/dist/components/PreferencesGroup.cjs +1 -0
- package/dist/components/PreferencesGroup.d.ts +2 -0
- package/dist/components/PreferencesGroup.js +2 -0
- package/dist/components/PreferencesPage/PreferencesPage.cjs +2 -0
- package/dist/components/PreferencesPage/PreferencesPage.cjs.map +1 -0
- package/dist/components/PreferencesPage/PreferencesPage.js +18 -0
- package/dist/components/PreferencesPage/PreferencesPage.js.map +1 -0
- package/dist/components/PreferencesPage/PreferencesPage.module.css.cjs +2 -0
- package/dist/components/PreferencesPage/PreferencesPage.module.css.cjs.map +1 -0
- package/dist/components/PreferencesPage/PreferencesPage.module.css.js +8 -0
- package/dist/components/PreferencesPage/PreferencesPage.module.css.js.map +1 -0
- package/dist/components/PreferencesPage.cjs +1 -0
- package/dist/components/PreferencesPage.d.ts +2 -0
- package/dist/components/PreferencesPage.js +2 -0
- package/dist/components/ProgressBar/ProgressBar.cjs +2 -0
- package/dist/components/ProgressBar/ProgressBar.cjs.map +1 -0
- package/dist/components/ProgressBar/ProgressBar.js +28 -0
- package/dist/components/ProgressBar/ProgressBar.js.map +1 -0
- package/dist/components/ProgressBar/ProgressBar.module.css.cjs +2 -0
- package/dist/components/ProgressBar/ProgressBar.module.css.cjs.map +1 -0
- package/dist/components/ProgressBar/ProgressBar.module.css.js +14 -0
- package/dist/components/ProgressBar/ProgressBar.module.css.js.map +1 -0
- package/dist/components/ProgressBar.cjs +1 -0
- package/dist/components/ProgressBar.d.ts +2 -0
- package/dist/components/ProgressBar.js +2 -0
- package/dist/components/RadioButton/RadioButton.cjs +2 -0
- package/dist/components/RadioButton/RadioButton.cjs.map +1 -0
- package/dist/components/RadioButton/RadioButton.js +14 -0
- package/dist/components/RadioButton/RadioButton.js.map +1 -0
- package/dist/components/RadioButton/RadioButton.module.css.cjs +2 -0
- package/dist/components/RadioButton/RadioButton.module.css.cjs.map +1 -0
- package/dist/components/RadioButton/RadioButton.module.css.js +5 -0
- package/dist/components/RadioButton/RadioButton.module.css.js.map +1 -0
- package/dist/components/RadioButton.cjs +1 -0
- package/dist/components/RadioButton.d.ts +2 -0
- package/dist/components/RadioButton.js +2 -0
- package/dist/components/SearchBar/SearchBar.cjs +2 -0
- package/dist/components/SearchBar/SearchBar.cjs.map +1 -0
- package/dist/components/SearchBar/SearchBar.js +160 -0
- package/dist/components/SearchBar/SearchBar.js.map +1 -0
- package/dist/components/SearchBar/SearchBar.module.css.cjs +2 -0
- package/dist/components/SearchBar/SearchBar.module.css.cjs.map +1 -0
- package/dist/components/SearchBar/SearchBar.module.css.js +19 -0
- package/dist/components/SearchBar/SearchBar.module.css.js.map +1 -0
- package/dist/components/SearchBar.cjs +1 -0
- package/dist/components/SearchBar.d.ts +2 -0
- package/dist/components/SearchBar.js +2 -0
- package/dist/components/Separator/Separator.cjs +2 -0
- package/dist/components/Separator/Separator.cjs.map +1 -0
- package/dist/components/Separator/Separator.js +23 -0
- package/dist/components/Separator/Separator.js.map +1 -0
- package/dist/components/Separator/Separator.module.css.cjs +2 -0
- package/dist/components/Separator/Separator.module.css.cjs.map +1 -0
- package/dist/components/Separator/Separator.module.css.js +9 -0
- package/dist/components/Separator/Separator.module.css.js.map +1 -0
- package/dist/components/Separator.cjs +1 -0
- package/dist/components/Separator.d.ts +2 -0
- package/dist/components/Separator.js +2 -0
- package/dist/components/ShortcutLabel/ShortcutLabel.cjs +2 -0
- package/dist/components/ShortcutLabel/ShortcutLabel.cjs.map +1 -0
- package/dist/components/ShortcutLabel/ShortcutLabel.js +50 -0
- package/dist/components/ShortcutLabel/ShortcutLabel.js.map +1 -0
- package/dist/components/ShortcutLabel/ShortcutLabel.module.css.cjs +2 -0
- package/dist/components/ShortcutLabel/ShortcutLabel.module.css.cjs.map +1 -0
- package/dist/components/ShortcutLabel/ShortcutLabel.module.css.js +8 -0
- package/dist/components/ShortcutLabel/ShortcutLabel.module.css.js.map +1 -0
- package/dist/components/ShortcutLabel.cjs +1 -0
- package/dist/components/ShortcutLabel.d.ts +2 -0
- package/dist/components/ShortcutLabel.js +2 -0
- package/dist/components/ShortcutsDialog/ShortcutsDialog.cjs +2 -0
- package/dist/components/ShortcutsDialog/ShortcutsDialog.cjs.map +1 -0
- package/dist/components/ShortcutsDialog/ShortcutsDialog.js +129 -0
- package/dist/components/ShortcutsDialog/ShortcutsDialog.js.map +1 -0
- package/dist/components/ShortcutsDialog/ShortcutsDialog.module.css.cjs +2 -0
- package/dist/components/ShortcutsDialog/ShortcutsDialog.module.css.cjs.map +1 -0
- package/dist/components/ShortcutsDialog/ShortcutsDialog.module.css.js +28 -0
- package/dist/components/ShortcutsDialog/ShortcutsDialog.module.css.js.map +1 -0
- package/dist/components/ShortcutsDialog.cjs +1 -0
- package/dist/components/ShortcutsDialog.d.ts +2 -0
- package/dist/components/ShortcutsDialog.js +2 -0
- package/dist/components/Sidebar/Sidebar.cjs +2 -0
- package/dist/components/Sidebar/Sidebar.cjs.map +1 -0
- package/dist/components/Sidebar/Sidebar.js +69 -0
- package/dist/components/Sidebar/Sidebar.js.map +1 -0
- package/dist/components/Sidebar/Sidebar.module.css.cjs +2 -0
- package/dist/components/Sidebar/Sidebar.module.css.cjs.map +1 -0
- package/dist/components/Sidebar/Sidebar.module.css.js +39 -0
- package/dist/components/Sidebar/Sidebar.module.css.js.map +1 -0
- package/dist/components/Sidebar/SidebarItem.cjs +2 -0
- package/dist/components/Sidebar/SidebarItem.cjs.map +1 -0
- package/dist/components/Sidebar/SidebarItem.js +105 -0
- package/dist/components/Sidebar/SidebarItem.js.map +1 -0
- package/dist/components/Sidebar/SidebarSection.cjs +2 -0
- package/dist/components/Sidebar/SidebarSection.cjs.map +1 -0
- package/dist/components/Sidebar/SidebarSection.js +89 -0
- package/dist/components/Sidebar/SidebarSection.js.map +1 -0
- package/dist/components/Sidebar.cjs +1 -0
- package/dist/components/Sidebar.d.ts +2 -0
- package/dist/components/Sidebar.js +4 -0
- package/dist/components/Slider/Slider.cjs +2 -0
- package/dist/components/Slider/Slider.cjs.map +1 -0
- package/dist/components/Slider/Slider.js +122 -0
- package/dist/components/Slider/Slider.js.map +1 -0
- package/dist/components/Slider/Slider.module.css.cjs +2 -0
- package/dist/components/Slider/Slider.module.css.cjs.map +1 -0
- package/dist/components/Slider/Slider.module.css.js +15 -0
- package/dist/components/Slider/Slider.module.css.js.map +1 -0
- package/dist/components/Slider.cjs +1 -0
- package/dist/components/Slider.d.ts +2 -0
- package/dist/components/Slider.js +2 -0
- package/dist/components/SpinButton/SpinButton.cjs +2 -0
- package/dist/components/SpinButton/SpinButton.cjs.map +1 -0
- package/dist/components/SpinButton/SpinButton.js +92 -0
- package/dist/components/SpinButton/SpinButton.js.map +1 -0
- package/dist/components/SpinButton/SpinButton.module.css.cjs +2 -0
- package/dist/components/SpinButton/SpinButton.module.css.cjs.map +1 -0
- package/dist/components/SpinButton/SpinButton.module.css.js +10 -0
- package/dist/components/SpinButton/SpinButton.module.css.js.map +1 -0
- package/dist/components/SpinButton.cjs +1 -0
- package/dist/components/SpinButton.d.ts +2 -0
- package/dist/components/SpinButton.js +2 -0
- package/dist/components/SpinRow/SpinRow.cjs +2 -0
- package/dist/components/SpinRow/SpinRow.cjs.map +1 -0
- package/dist/components/SpinRow/SpinRow.js +119 -0
- package/dist/components/SpinRow/SpinRow.js.map +1 -0
- package/dist/components/SpinRow/SpinRow.module.css.cjs +2 -0
- package/dist/components/SpinRow/SpinRow.module.css.cjs.map +1 -0
- package/dist/components/SpinRow/SpinRow.module.css.js +15 -0
- package/dist/components/SpinRow/SpinRow.module.css.js.map +1 -0
- package/dist/components/SpinRow.cjs +1 -0
- package/dist/components/SpinRow.d.ts +2 -0
- package/dist/components/SpinRow.js +2 -0
- package/dist/components/Spinner/Spinner.cjs +2 -0
- package/dist/components/Spinner/Spinner.cjs.map +1 -0
- package/dist/components/Spinner/Spinner.js +21 -0
- package/dist/components/Spinner/Spinner.js.map +1 -0
- package/dist/components/Spinner/Spinner.module.css.cjs +2 -0
- package/dist/components/Spinner/Spinner.module.css.cjs.map +1 -0
- package/dist/components/Spinner/Spinner.module.css.js +11 -0
- package/dist/components/Spinner/Spinner.module.css.js.map +1 -0
- package/dist/components/Spinner.cjs +1 -0
- package/dist/components/Spinner.d.ts +2 -0
- package/dist/components/Spinner.js +2 -0
- package/dist/components/SplitButton/SplitButton.cjs +2 -0
- package/dist/components/SplitButton/SplitButton.cjs.map +1 -0
- package/dist/components/SplitButton/SplitButton.js +104 -0
- package/dist/components/SplitButton/SplitButton.js.map +1 -0
- package/dist/components/SplitButton/SplitButton.module.css.cjs +2 -0
- package/dist/components/SplitButton/SplitButton.module.css.cjs.map +1 -0
- package/dist/components/SplitButton/SplitButton.module.css.js +16 -0
- package/dist/components/SplitButton/SplitButton.module.css.js.map +1 -0
- package/dist/components/SplitButton.cjs +1 -0
- package/dist/components/SplitButton.d.ts +2 -0
- package/dist/components/SplitButton.js +2 -0
- package/dist/components/StatusBadge/StatusBadge.cjs +2 -0
- package/dist/components/StatusBadge/StatusBadge.cjs.map +1 -0
- package/dist/components/StatusBadge/StatusBadge.js +18 -0
- package/dist/components/StatusBadge/StatusBadge.js.map +1 -0
- package/dist/components/StatusBadge/StatusBadge.module.css.cjs +2 -0
- package/dist/components/StatusBadge/StatusBadge.module.css.cjs.map +1 -0
- package/dist/components/StatusBadge/StatusBadge.module.css.js +13 -0
- package/dist/components/StatusBadge/StatusBadge.module.css.js.map +1 -0
- package/dist/components/StatusBadge.cjs +1 -0
- package/dist/components/StatusBadge.d.ts +2 -0
- package/dist/components/StatusBadge.js +2 -0
- package/dist/components/StatusPage/StatusPage.cjs +2 -0
- package/dist/components/StatusPage/StatusPage.cjs.map +1 -0
- package/dist/components/StatusPage/StatusPage.js +43 -0
- package/dist/components/StatusPage/StatusPage.js.map +1 -0
- package/dist/components/StatusPage/StatusPage.module.css.cjs +2 -0
- package/dist/components/StatusPage/StatusPage.module.css.cjs.map +1 -0
- package/dist/components/StatusPage/StatusPage.module.css.js +12 -0
- package/dist/components/StatusPage/StatusPage.module.css.js.map +1 -0
- package/dist/components/StatusPage.cjs +1 -0
- package/dist/components/StatusPage.d.ts +2 -0
- package/dist/components/StatusPage.js +2 -0
- package/dist/components/Switch/Switch.cjs +2 -0
- package/dist/components/Switch/Switch.cjs.map +1 -0
- package/dist/components/Switch/Switch.js +15 -0
- package/dist/components/Switch/Switch.js.map +1 -0
- package/dist/components/Switch/Switch.module.css.cjs +2 -0
- package/dist/components/Switch/Switch.module.css.cjs.map +1 -0
- package/dist/components/Switch/Switch.module.css.js +6 -0
- package/dist/components/Switch/Switch.module.css.js.map +1 -0
- package/dist/components/Switch.cjs +1 -0
- package/dist/components/Switch.d.ts +2 -0
- package/dist/components/Switch.js +2 -0
- package/dist/components/SwitchRow/SwitchRow.cjs +2 -0
- package/dist/components/SwitchRow/SwitchRow.cjs.map +1 -0
- package/dist/components/SwitchRow/SwitchRow.js +49 -0
- package/dist/components/SwitchRow/SwitchRow.js.map +1 -0
- package/dist/components/SwitchRow/SwitchRow.module.css.cjs +2 -0
- package/dist/components/SwitchRow/SwitchRow.module.css.cjs.map +1 -0
- package/dist/components/SwitchRow/SwitchRow.module.css.js +15 -0
- package/dist/components/SwitchRow/SwitchRow.module.css.js.map +1 -0
- package/dist/components/SwitchRow.cjs +1 -0
- package/dist/components/SwitchRow.d.ts +2 -0
- package/dist/components/SwitchRow.js +2 -0
- package/dist/components/Tabs/TabBar.cjs +2 -0
- package/dist/components/Tabs/TabBar.cjs.map +1 -0
- package/dist/components/Tabs/TabBar.js +38 -0
- package/dist/components/Tabs/TabBar.js.map +1 -0
- package/dist/components/Tabs/TabItem.cjs +2 -0
- package/dist/components/Tabs/TabItem.cjs.map +1 -0
- package/dist/components/Tabs/TabItem.js +52 -0
- package/dist/components/Tabs/TabItem.js.map +1 -0
- package/dist/components/Tabs/TabPanel.cjs +2 -0
- package/dist/components/Tabs/TabPanel.cjs.map +1 -0
- package/dist/components/Tabs/TabPanel.js +18 -0
- package/dist/components/Tabs/TabPanel.js.map +1 -0
- package/dist/components/Tabs/Tabs.module.css.cjs +2 -0
- package/dist/components/Tabs/Tabs.module.css.cjs.map +1 -0
- package/dist/components/Tabs/Tabs.module.css.js +15 -0
- package/dist/components/Tabs/Tabs.module.css.js.map +1 -0
- package/dist/components/Tabs.cjs +1 -0
- package/dist/components/Tabs.d.ts +2 -0
- package/dist/components/Tabs.js +4 -0
- package/dist/components/TerminalView/TerminalView.cjs +2 -0
- package/dist/components/TerminalView/TerminalView.cjs.map +1 -0
- package/dist/components/TerminalView/TerminalView.js +28 -0
- package/dist/components/TerminalView/TerminalView.js.map +1 -0
- package/dist/components/TerminalView/TerminalView.module.css.cjs +2 -0
- package/dist/components/TerminalView/TerminalView.module.css.cjs.map +1 -0
- package/dist/components/TerminalView/TerminalView.module.css.js +12 -0
- package/dist/components/TerminalView/TerminalView.module.css.js.map +1 -0
- package/dist/components/TerminalView.cjs +1 -0
- package/dist/components/TerminalView.d.ts +2 -0
- package/dist/components/TerminalView.js +2 -0
- package/dist/components/Text/Text.cjs +2 -0
- package/dist/components/Text/Text.cjs.map +1 -0
- package/dist/components/Text/Text.js +33 -0
- package/dist/components/Text/Text.js.map +1 -0
- package/dist/components/Text/Text.module.css.cjs +2 -0
- package/dist/components/Text/Text.module.css.cjs.map +1 -0
- package/dist/components/Text/Text.module.css.js +27 -0
- package/dist/components/Text/Text.module.css.js.map +1 -0
- package/dist/components/Text.cjs +1 -0
- package/dist/components/Text.d.ts +2 -0
- package/dist/components/Text.js +2 -0
- package/dist/components/TextField/TextField.cjs +2 -0
- package/dist/components/TextField/TextField.cjs.map +1 -0
- package/dist/components/TextField/TextField.js +38 -0
- package/dist/components/TextField/TextField.js.map +1 -0
- package/dist/components/TextField/TextField.module.css.cjs +2 -0
- package/dist/components/TextField/TextField.module.css.cjs.map +1 -0
- package/dist/components/TextField/TextField.module.css.js +13 -0
- package/dist/components/TextField/TextField.module.css.js.map +1 -0
- package/dist/components/TextField.cjs +1 -0
- package/dist/components/TextField.d.ts +2 -0
- package/dist/components/TextField.js +2 -0
- package/dist/components/Timeline/Timeline.cjs +2 -0
- package/dist/components/Timeline/Timeline.cjs.map +1 -0
- package/dist/components/Timeline/Timeline.js +71 -0
- package/dist/components/Timeline/Timeline.js.map +1 -0
- package/dist/components/Timeline/Timeline.module.css.cjs +2 -0
- package/dist/components/Timeline/Timeline.module.css.cjs.map +1 -0
- package/dist/components/Timeline/Timeline.module.css.js +19 -0
- package/dist/components/Timeline/Timeline.module.css.js.map +1 -0
- package/dist/components/Timeline.cjs +1 -0
- package/dist/components/Timeline.d.ts +2 -0
- package/dist/components/Timeline.js +2 -0
- package/dist/components/Toast/Toast.cjs +2 -0
- package/dist/components/Toast/Toast.cjs.map +1 -0
- package/dist/components/Toast/Toast.js +63 -0
- package/dist/components/Toast/Toast.js.map +1 -0
- package/dist/components/Toast/Toast.module.css.cjs +2 -0
- package/dist/components/Toast/Toast.module.css.cjs.map +1 -0
- package/dist/components/Toast/Toast.module.css.js +16 -0
- package/dist/components/Toast/Toast.module.css.js.map +1 -0
- package/dist/components/Toast/Toaster.cjs +2 -0
- package/dist/components/Toast/Toaster.cjs.map +1 -0
- package/dist/components/Toast/Toaster.js +21 -0
- package/dist/components/Toast/Toaster.js.map +1 -0
- package/dist/components/Toast.cjs +1 -0
- package/dist/components/Toast.d.ts +2 -0
- package/dist/components/Toast.js +3 -0
- package/dist/components/ToggleGroup/ToggleGroup.cjs +2 -0
- package/dist/components/ToggleGroup/ToggleGroup.cjs.map +1 -0
- package/dist/components/ToggleGroup/ToggleGroup.js +43 -0
- package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -0
- package/dist/components/ToggleGroup/ToggleGroup.module.css.cjs +2 -0
- package/dist/components/ToggleGroup/ToggleGroup.module.css.cjs.map +1 -0
- package/dist/components/ToggleGroup/ToggleGroup.module.css.js +12 -0
- package/dist/components/ToggleGroup/ToggleGroup.module.css.js.map +1 -0
- package/dist/components/ToggleGroup/ToggleGroupItem.cjs +2 -0
- package/dist/components/ToggleGroup/ToggleGroupItem.cjs.map +1 -0
- package/dist/components/ToggleGroup/ToggleGroupItem.js +38 -0
- package/dist/components/ToggleGroup/ToggleGroupItem.js.map +1 -0
- package/dist/components/ToggleGroup.cjs +1 -0
- package/dist/components/ToggleGroup.d.ts +2 -0
- package/dist/components/ToggleGroup.js +3 -0
- package/dist/components/Toolbar/Spacer.cjs +2 -0
- package/dist/components/Toolbar/Spacer.cjs.map +1 -0
- package/dist/components/Toolbar/Spacer.js +14 -0
- package/dist/components/Toolbar/Spacer.js.map +1 -0
- package/dist/components/Toolbar/Toolbar.cjs +2 -0
- package/dist/components/Toolbar/Toolbar.cjs.map +1 -0
- package/dist/components/Toolbar/Toolbar.js +14 -0
- package/dist/components/Toolbar/Toolbar.js.map +1 -0
- package/dist/components/Toolbar/Toolbar.module.css.cjs +2 -0
- package/dist/components/Toolbar/Toolbar.module.css.cjs.map +1 -0
- package/dist/components/Toolbar/Toolbar.module.css.js +8 -0
- package/dist/components/Toolbar/Toolbar.module.css.js.map +1 -0
- package/dist/components/Toolbar.cjs +1 -0
- package/dist/components/Toolbar.d.ts +2 -0
- package/dist/components/Toolbar.js +3 -0
- package/dist/components/ToolbarView/ToolbarView.cjs +2 -0
- package/dist/components/ToolbarView/ToolbarView.cjs.map +1 -0
- package/dist/components/ToolbarView/ToolbarView.js +27 -0
- package/dist/components/ToolbarView/ToolbarView.js.map +1 -0
- package/dist/components/ToolbarView/ToolbarView.module.css.cjs +2 -0
- package/dist/components/ToolbarView/ToolbarView.module.css.cjs.map +1 -0
- package/dist/components/ToolbarView/ToolbarView.module.css.js +10 -0
- package/dist/components/ToolbarView/ToolbarView.module.css.js.map +1 -0
- package/dist/components/ToolbarView.cjs +1 -0
- package/dist/components/ToolbarView.d.ts +2 -0
- package/dist/components/ToolbarView.js +2 -0
- package/dist/components/Tooltip/Tooltip.cjs +2 -0
- package/dist/components/Tooltip/Tooltip.cjs.map +1 -0
- package/dist/components/Tooltip/Tooltip.js +100 -0
- package/dist/components/Tooltip/Tooltip.js.map +1 -0
- package/dist/components/Tooltip/Tooltip.module.css.cjs +2 -0
- package/dist/components/Tooltip/Tooltip.module.css.cjs.map +1 -0
- package/dist/components/Tooltip/Tooltip.module.css.js +12 -0
- package/dist/components/Tooltip/Tooltip.module.css.js.map +1 -0
- package/dist/components/Tooltip.cjs +1 -0
- package/dist/components/Tooltip.d.ts +2 -0
- package/dist/components/Tooltip.js +2 -0
- package/dist/components/ViewSwitcher/ViewSwitcher.cjs +2 -0
- package/dist/components/ViewSwitcher/ViewSwitcher.cjs.map +1 -0
- package/dist/components/ViewSwitcher/ViewSwitcher.js +31 -0
- package/dist/components/ViewSwitcher/ViewSwitcher.js.map +1 -0
- package/dist/components/ViewSwitcher/ViewSwitcher.module.css.cjs +2 -0
- package/dist/components/ViewSwitcher/ViewSwitcher.module.css.cjs.map +1 -0
- package/dist/components/ViewSwitcher/ViewSwitcher.module.css.js +11 -0
- package/dist/components/ViewSwitcher/ViewSwitcher.module.css.js.map +1 -0
- package/dist/components/ViewSwitcher/ViewSwitcherItem.cjs +2 -0
- package/dist/components/ViewSwitcher/ViewSwitcherItem.cjs.map +1 -0
- package/dist/components/ViewSwitcher/ViewSwitcherItem.js +34 -0
- package/dist/components/ViewSwitcher/ViewSwitcherItem.js.map +1 -0
- package/dist/components/ViewSwitcher.cjs +1 -0
- package/dist/components/ViewSwitcher.d.ts +2 -0
- package/dist/components/ViewSwitcher.js +3 -0
- package/dist/components/ViewSwitcherBar/ViewSwitcherBar.cjs +2 -0
- package/dist/components/ViewSwitcherBar/ViewSwitcherBar.cjs.map +1 -0
- package/dist/components/ViewSwitcherBar/ViewSwitcherBar.js +16 -0
- package/dist/components/ViewSwitcherBar/ViewSwitcherBar.js.map +1 -0
- package/dist/components/ViewSwitcherBar/ViewSwitcherBar.module.css.cjs +2 -0
- package/dist/components/ViewSwitcherBar/ViewSwitcherBar.module.css.cjs.map +1 -0
- package/dist/components/ViewSwitcherBar/ViewSwitcherBar.module.css.js +5 -0
- package/dist/components/ViewSwitcherBar/ViewSwitcherBar.module.css.js.map +1 -0
- package/dist/components/ViewSwitcherBar.cjs +1 -0
- package/dist/components/ViewSwitcherBar.d.ts +2 -0
- package/dist/components/ViewSwitcherBar.js +2 -0
- package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.cjs +2 -0
- package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.cjs.map +1 -0
- package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.js +61 -0
- package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.js.map +1 -0
- package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.module.css.cjs +2 -0
- package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.module.css.cjs.map +1 -0
- package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.module.css.js +18 -0
- package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.module.css.js.map +1 -0
- package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebarItem.cjs +2 -0
- package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebarItem.cjs.map +1 -0
- package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebarItem.js +50 -0
- package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebarItem.js.map +1 -0
- package/dist/components/ViewSwitcherSidebar.cjs +1 -0
- package/dist/components/ViewSwitcherSidebar.d.ts +2 -0
- package/dist/components/ViewSwitcherSidebar.js +3 -0
- package/dist/components/WindowTitle/WindowTitle.cjs +2 -0
- package/dist/components/WindowTitle/WindowTitle.cjs.map +1 -0
- package/dist/components/WindowTitle/WindowTitle.js +20 -0
- package/dist/components/WindowTitle/WindowTitle.js.map +1 -0
- package/dist/components/WindowTitle/WindowTitle.module.css.cjs +2 -0
- package/dist/components/WindowTitle/WindowTitle.module.css.cjs.map +1 -0
- package/dist/components/WindowTitle/WindowTitle.module.css.js +9 -0
- package/dist/components/WindowTitle/WindowTitle.module.css.js.map +1 -0
- package/dist/components/WindowTitle.cjs +1 -0
- package/dist/components/WindowTitle.d.ts +2 -0
- package/dist/components/WindowTitle.js +2 -0
- package/dist/components/WrapBox/WrapBox.cjs +2 -0
- package/dist/components/WrapBox/WrapBox.cjs.map +1 -0
- package/dist/components/WrapBox/WrapBox.js +26 -0
- package/dist/components/WrapBox/WrapBox.js.map +1 -0
- package/dist/components/WrapBox/WrapBox.module.css.cjs +2 -0
- package/dist/components/WrapBox/WrapBox.module.css.cjs.map +1 -0
- package/dist/components/WrapBox/WrapBox.module.css.js +8 -0
- package/dist/components/WrapBox/WrapBox.module.css.js.map +1 -0
- package/dist/components/WrapBox.cjs +1 -0
- package/dist/components/WrapBox.d.ts +2 -0
- package/dist/components/WrapBox.js +2 -0
- package/dist/hooks/useBreakpoint.cjs +2 -0
- package/dist/hooks/useBreakpoint.cjs.map +1 -0
- package/dist/hooks/useBreakpoint.js +26 -0
- package/dist/hooks/useBreakpoint.js.map +1 -0
- package/dist/hooks.cjs +1 -0
- package/dist/hooks.d.ts +2 -0
- package/dist/hooks.js +2 -0
- package/dist/icons/dist/icons/Check.cjs +2 -0
- package/dist/icons/dist/icons/Check.cjs.map +1 -0
- package/dist/icons/dist/icons/Check.js +12 -0
- package/dist/icons/dist/icons/Check.js.map +1 -0
- package/dist/icons/dist/icons/Close.cjs +2 -0
- package/dist/icons/dist/icons/Close.cjs.map +1 -0
- package/dist/icons/dist/icons/Close.js +12 -0
- package/dist/icons/dist/icons/Close.js.map +1 -0
- package/dist/icons/dist/icons/PanDown.cjs +2 -0
- package/dist/icons/dist/icons/PanDown.cjs.map +1 -0
- package/dist/icons/dist/icons/PanDown.js +12 -0
- package/dist/icons/dist/icons/PanDown.js.map +1 -0
- package/dist/icons/dist/icons/PanUp.cjs +2 -0
- package/dist/icons/dist/icons/PanUp.cjs.map +1 -0
- package/dist/icons/dist/icons/PanUp.js +12 -0
- package/dist/icons/dist/icons/PanUp.js.map +1 -0
- package/dist/icons/dist/icons/Search.cjs +2 -0
- package/dist/icons/dist/icons/Search.cjs.map +1 -0
- package/dist/icons/dist/icons/Search.js +12 -0
- package/dist/icons/dist/icons/Search.js.map +1 -0
- package/dist/icons/dist/icons/ViewConceal.cjs +2 -0
- package/dist/icons/dist/icons/ViewConceal.cjs.map +1 -0
- package/dist/icons/dist/icons/ViewConceal.js +12 -0
- package/dist/icons/dist/icons/ViewConceal.js.map +1 -0
- package/dist/icons/dist/icons/ViewReveal.cjs +2 -0
- package/dist/icons/dist/icons/ViewReveal.cjs.map +1 -0
- package/dist/icons/dist/icons/ViewReveal.js +12 -0
- package/dist/icons/dist/icons/ViewReveal.js.map +1 -0
- package/dist/index.cjs +1 -2
- package/dist/index.js +87 -5166
- package/dist/style.css +1 -1
- package/package.json +391 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/test/setup.d.ts +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`./ContributionGraph.module.css.cjs`);let t=require(`react`),n=require(`react/jsx-runtime`);var r=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],i=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],a=28,o=20,s=[`var(--gnome-card-shade-color, rgba(0,0,0,0.07))`,`var(--gnome-green-1, #8ff0a4)`,`var(--gnome-green-2, #57e389)`,`var(--gnome-green-4, #2ec27e)`,`var(--gnome-green-5, #26a269)`];function c(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function l(e){let[t,n,r]=e.split(`-`).map(Number);return new Date(t,n-1,r)}function u(e){return l(e).toLocaleDateString(`en-US`,{weekday:`long`,year:`numeric`,month:`long`,day:`numeric`})}function d({data:l,maxLevel:d=4,colorScale:f,cellSize:p=12,cellGap:m=3,weekStartDay:h=1,showMonthLabels:g=!0,showDayLabels:_=!0,showLegend:v=!0,weeks:y=52,ariaLabel:b=`Contribution graph`,onDayClick:x,tooltipContent:S,className:C}){let w=p+m,T=(0,t.useRef)(null),E=(0,t.useRef)(null),D=f??s,[O,k]=(0,t.useState)({col:0,row:0}),[A,j]=(0,t.useState)(null),M=(0,t.useMemo)(()=>{let e=new Map;for(let t of l)e.set(t.date,t.count);return e},[l]),N=(0,t.useMemo)(()=>Math.max(1,...l.map(e=>e.count)),[l]),{grid:P,monthLabels:F}=(0,t.useMemo)(()=>{let e=new Date;e.setHours(0,0,0,0);let t=(e.getDay()-h+7)%7,n=new Date(e);n.setDate(e.getDate()-t);let i=new Date(n);i.setDate(n.getDate()-(y-1)*7);let a=[],o=[],s=-1;for(let t=0;t<y;t++){let n=new Date(i);n.setDate(i.getDate()+t*7),n.getMonth()!==s&&(o.push({col:t,month:r[n.getMonth()]}),s=n.getMonth());let l=[];for(let n=0;n<7;n++){let r=new Date(i);r.setDate(i.getDate()+t*7+n);let a=r>e,o=c(r),s=a?0:M.get(o)??0,u=s===0?0:Math.min(d,Math.ceil(s/N*d));l.push({iso:o,count:s,level:u,future:a})}a.push(l)}return{grid:a,monthLabels:o}},[M,N,d,y,h]),I=(0,t.useMemo)(()=>[1,3,5].map(e=>({row:(e-h+7)%7,label:i[e]})),[h]),L=_?a:0,R=g?o:0,z=L+y*w-m,B=R+7*w-m,V=Math.min(4,Math.floor(p/3));function H(e,t){let n=Math.max(0,Math.min(y-1,e)),r=Math.max(0,Math.min(6,t));k({col:n,row:r}),T.current?.querySelector(`[data-col="${n}"][data-row="${r}"]`)?.focus()}function U(e,t,n){let r={ArrowRight:[t+1,n],ArrowLeft:[t-1,n],ArrowDown:[t,n+1],ArrowUp:[t,n-1]};if(r[e.key])e.preventDefault(),H(...r[e.key]);else if(e.key===`Enter`||e.key===` `){e.preventDefault();let r=P[t]?.[n];r&&!r.future&&x?.({date:r.iso,count:r.count})}}function W(e,t){let n=E.current;if(!n)return;let r=n.getBoundingClientRect(),i=e.currentTarget.getBoundingClientRect();j({x:i.left-r.left+p/2,y:i.top-r.top,text:t})}function G(e){return e.future?D[0]:D[Math.min(e.level,D.length-1)]??D[D.length-1]}function K(e){return e.future?u(e.iso):S?.({date:e.iso,count:e.count})??`${e.count} contribution${e.count===1?``:`s`} on ${u(e.iso)}`}return(0,n.jsxs)(`div`,{ref:E,className:[e.default.wrapper,C].filter(Boolean).join(` `),children:[(0,n.jsxs)(`svg`,{ref:T,width:z,height:B,className:e.default.svg,"aria-label":b,role:`img`,children:[g&&F.map(({col:t,month:r})=>(0,n.jsx)(`text`,{x:L+t*w,y:12,className:e.default.label,children:r},`m-${t}`)),_&&I.map(({row:t,label:r})=>(0,n.jsx)(`text`,{x:0,y:R+t*w+p-1,className:e.default.label,children:r},`d-${t}`)),(0,n.jsx)(`g`,{role:`grid`,"aria-label":b,children:P.map((t,r)=>(0,n.jsx)(`g`,{role:`row`,children:t.map((t,i)=>{let a=K(t),o=O.col===r&&O.row===i;return(0,n.jsx)(`rect`,{"data-col":r,"data-row":i,x:L+r*w,y:R+i*w,width:p,height:p,rx:V,fill:G(t),opacity:t.future?.35:1,className:e.default.cell,role:`gridcell`,"aria-label":a,"aria-disabled":t.future||void 0,tabIndex:o?0:-1,onClick:()=>!t.future&&x?.({date:t.iso,count:t.count}),onKeyDown:e=>U(e,r,i),onFocus:()=>k({col:r,row:i}),onMouseEnter:e=>W(e,a),onMouseLeave:()=>j(null)},`${r}-${i}`)})},r))})]}),A&&(0,n.jsx)(`div`,{className:e.default.tooltip,style:{left:A.x,top:A.y},role:`tooltip`,children:A.text}),v&&(0,n.jsxs)(`div`,{className:e.default.legend,children:[(0,n.jsx)(`span`,{className:e.default.legendLabel,children:`Less`}),Array.from({length:d+1},(t,r)=>(0,n.jsx)(`svg`,{width:p,height:p,"aria-hidden":`true`,className:e.default.legendCell,children:(0,n.jsx)(`rect`,{width:p,height:p,rx:V,fill:D[Math.min(r,D.length-1)]})},r)),(0,n.jsx)(`span`,{className:e.default.legendLabel,children:`More`})]})]})}exports.ContributionGraph=d;
|
|
2
|
+
//# sourceMappingURL=ContributionGraph.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContributionGraph.cjs","names":[],"sources":["../../../src/components/ContributionGraph/ContributionGraph.tsx"],"sourcesContent":["import { useMemo, useRef, useState } from \"react\";\nimport type { KeyboardEvent } from \"react\";\nimport styles from \"./ContributionGraph.module.css\";\n\nexport interface ContributionDay {\n /** ISO 8601 date — \"YYYY-MM-DD\". */\n date: string;\n /** Non-negative activity count. */\n count: number;\n}\n\nexport interface ContributionGraphProps {\n /** Activity data. Days absent from the array are treated as count = 0. */\n data: ContributionDay[];\n /**\n * Number of intensity levels (excluding 0).\n * @default 4\n */\n maxLevel?: number;\n /**\n * Colour scale — length must be maxLevel + 1 (index 0 = empty).\n * Defaults to the Adwaita green palette.\n */\n colorScale?: string[];\n /** Cell side length in pixels. @default 12 */\n cellSize?: number;\n /** Gap between cells in pixels. @default 3 */\n cellGap?: number;\n /** 0 = Sunday · 1 = Monday (GNOME locale default). @default 1 */\n weekStartDay?: 0 | 1;\n /** @default true */\n showMonthLabels?: boolean;\n /** @default true */\n showDayLabels?: boolean;\n /** @default true */\n showLegend?: boolean;\n /** Number of week columns to display. @default 52 */\n weeks?: number;\n /** @default \"Contribution graph\" */\n ariaLabel?: string;\n onDayClick?: (day: ContributionDay) => void;\n /** Returns a plain-text tooltip string for a day. */\n tooltipContent?: (day: ContributionDay) => string;\n className?: string;\n}\n\nconst SHORT_MONTHS = [\n \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n];\n// 0=Sun … 6=Sat\nconst SHORT_DAYS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\nconst DAY_LABEL_WIDTH = 28;\nconst MONTH_LABEL_HEIGHT = 20;\n\nconst DEFAULT_COLORS = [\n \"var(--gnome-card-shade-color, rgba(0,0,0,0.07))\",\n \"var(--gnome-green-1, #8ff0a4)\",\n \"var(--gnome-green-2, #57e389)\",\n \"var(--gnome-green-4, #2ec27e)\",\n \"var(--gnome-green-5, #26a269)\",\n];\n\nfunction dateToIso(date: Date): string {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, \"0\");\n const d = String(date.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n}\n\nfunction isoToLocal(iso: string): Date {\n const [y, m, d] = iso.split(\"-\").map(Number);\n return new Date(y, m - 1, d);\n}\n\nfunction fullDateLabel(iso: string): string {\n return isoToLocal(iso).toLocaleDateString(\"en-US\", {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n });\n}\n\ninterface GridCell {\n iso: string;\n count: number;\n level: number;\n future: boolean;\n}\n\nexport function ContributionGraph({\n data,\n maxLevel = 4,\n colorScale,\n cellSize = 12,\n cellGap = 3,\n weekStartDay = 1,\n showMonthLabels = true,\n showDayLabels = true,\n showLegend = true,\n weeks = 52,\n ariaLabel = \"Contribution graph\",\n onDayClick,\n tooltipContent,\n className,\n}: ContributionGraphProps) {\n const stride = cellSize + cellGap;\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const colors = colorScale ?? DEFAULT_COLORS;\n\n const [focusedCell, setFocusedCell] = useState({ col: 0, row: 0 });\n const [tooltip, setTooltip] = useState<{\n x: number;\n y: number;\n text: string;\n } | null>(null);\n\n const countMap = useMemo(() => {\n const map = new Map<string, number>();\n for (const d of data) map.set(d.date, d.count);\n return map;\n }, [data]);\n\n const maxCount = useMemo(\n () => Math.max(1, ...data.map((d) => d.count)),\n [data],\n );\n\n const { grid, monthLabels } = useMemo(() => {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n // Align to start of current week\n const daysFromWeekStart = (today.getDay() - weekStartDay + 7) % 7;\n const lastWeekStart = new Date(today);\n lastWeekStart.setDate(today.getDate() - daysFromWeekStart);\n\n const firstDay = new Date(lastWeekStart);\n firstDay.setDate(lastWeekStart.getDate() - (weeks - 1) * 7);\n\n const gridResult: GridCell[][] = [];\n const labels: { col: number; month: string }[] = [];\n let lastMonth = -1;\n\n for (let col = 0; col < weeks; col++) {\n const colStart = new Date(firstDay);\n colStart.setDate(firstDay.getDate() + col * 7);\n\n // Month label when the column starts a new month\n if (colStart.getMonth() !== lastMonth) {\n labels.push({ col, month: SHORT_MONTHS[colStart.getMonth()] });\n lastMonth = colStart.getMonth();\n }\n\n const column: GridCell[] = [];\n for (let row = 0; row < 7; row++) {\n const date = new Date(firstDay);\n date.setDate(firstDay.getDate() + col * 7 + row);\n const future = date > today;\n const iso = dateToIso(date);\n const count = future ? 0 : (countMap.get(iso) ?? 0);\n const level =\n count === 0\n ? 0\n : Math.min(maxLevel, Math.ceil((count / maxCount) * maxLevel));\n column.push({ iso, count, level, future });\n }\n gridResult.push(column);\n }\n\n return { grid: gridResult, monthLabels: labels };\n }, [countMap, maxCount, maxLevel, weeks, weekStartDay]);\n\n // Always label Mon(1), Wed(3), Fri(5) — rows shift with weekStartDay\n const labelRows = useMemo(\n () =>\n [1, 3, 5].map((dayIndex) => ({\n row: (dayIndex - weekStartDay + 7) % 7,\n label: SHORT_DAYS[dayIndex],\n })),\n [weekStartDay],\n );\n\n const dayLabelW = showDayLabels ? DAY_LABEL_WIDTH : 0;\n const monthLabelH = showMonthLabels ? MONTH_LABEL_HEIGHT : 0;\n const svgWidth = dayLabelW + weeks * stride - cellGap;\n const svgHeight = monthLabelH + 7 * stride - cellGap;\n const cellRx = Math.min(4, Math.floor(cellSize / 3));\n\n function focusCell(col: number, row: number) {\n const c = Math.max(0, Math.min(weeks - 1, col));\n const r = Math.max(0, Math.min(6, row));\n setFocusedCell({ col: c, row: r });\n svgRef.current\n ?.querySelector<SVGRectElement>(`[data-col=\"${c}\"][data-row=\"${r}\"]`)\n ?.focus();\n }\n\n function handleCellKey(e: KeyboardEvent, col: number, row: number) {\n const moves: Record<string, [number, number]> = {\n ArrowRight: [col + 1, row],\n ArrowLeft: [col - 1, row],\n ArrowDown: [col, row + 1],\n ArrowUp: [col, row - 1],\n };\n if (moves[e.key]) {\n e.preventDefault();\n focusCell(...moves[e.key]);\n } else if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n const cell = grid[col]?.[row];\n if (cell && !cell.future) onDayClick?.({ date: cell.iso, count: cell.count });\n }\n }\n\n function handleMouseEnter(\n e: React.MouseEvent<SVGRectElement>,\n text: string,\n ) {\n const wrapper = wrapperRef.current;\n if (!wrapper) return;\n const wRect = wrapper.getBoundingClientRect();\n const rRect = (e.currentTarget as Element).getBoundingClientRect();\n setTooltip({\n x: rRect.left - wRect.left + cellSize / 2,\n y: rRect.top - wRect.top,\n text,\n });\n }\n\n function cellColor(cell: GridCell): string {\n if (cell.future) return colors[0];\n return colors[Math.min(cell.level, colors.length - 1)] ?? colors[colors.length - 1];\n }\n\n function cellTooltip(cell: GridCell): string {\n if (cell.future) return fullDateLabel(cell.iso);\n return (\n tooltipContent?.({ date: cell.iso, count: cell.count }) ??\n `${cell.count} contribution${cell.count !== 1 ? \"s\" : \"\"} on ${fullDateLabel(cell.iso)}`\n );\n }\n\n return (\n <div\n ref={wrapperRef}\n className={[styles.wrapper, className].filter(Boolean).join(\" \")}\n >\n <svg\n ref={svgRef}\n width={svgWidth}\n height={svgHeight}\n className={styles.svg}\n aria-label={ariaLabel}\n role=\"img\"\n >\n {/* Month labels */}\n {showMonthLabels &&\n monthLabels.map(({ col, month }) => (\n <text\n key={`m-${col}`}\n x={dayLabelW + col * stride}\n y={12}\n className={styles.label}\n >\n {month}\n </text>\n ))}\n\n {/* Day-of-week labels: Mon, Wed, Fri */}\n {showDayLabels &&\n labelRows.map(({ row, label }) => (\n <text\n key={`d-${row}`}\n x={0}\n y={monthLabelH + row * stride + cellSize - 1}\n className={styles.label}\n >\n {label}\n </text>\n ))}\n\n {/* Activity grid */}\n <g role=\"grid\" aria-label={ariaLabel}>\n {grid.map((column, col) => (\n <g key={col} role=\"row\">\n {column.map((cell, row) => {\n const tipText = cellTooltip(cell);\n const isFocused =\n focusedCell.col === col && focusedCell.row === row;\n\n return (\n <rect\n key={`${col}-${row}`}\n data-col={col}\n data-row={row}\n x={dayLabelW + col * stride}\n y={monthLabelH + row * stride}\n width={cellSize}\n height={cellSize}\n rx={cellRx}\n fill={cellColor(cell)}\n opacity={cell.future ? 0.35 : 1}\n className={styles.cell}\n role=\"gridcell\"\n aria-label={tipText}\n aria-disabled={cell.future || undefined}\n tabIndex={isFocused ? 0 : -1}\n onClick={() => !cell.future && onDayClick?.({ date: cell.iso, count: cell.count })}\n onKeyDown={(e) => handleCellKey(e, col, row)}\n onFocus={() => setFocusedCell({ col, row })}\n onMouseEnter={(e) => handleMouseEnter(e, tipText)}\n onMouseLeave={() => setTooltip(null)}\n />\n );\n })}\n </g>\n ))}\n </g>\n </svg>\n\n {tooltip && (\n <div\n className={styles.tooltip}\n style={{ left: tooltip.x, top: tooltip.y }}\n role=\"tooltip\"\n >\n {tooltip.text}\n </div>\n )}\n\n {showLegend && (\n <div className={styles.legend}>\n <span className={styles.legendLabel}>Less</span>\n {Array.from({ length: maxLevel + 1 }, (_, i) => (\n <svg\n key={i}\n width={cellSize}\n height={cellSize}\n aria-hidden=\"true\"\n className={styles.legendCell}\n >\n <rect\n width={cellSize}\n height={cellSize}\n rx={cellRx}\n fill={colors[Math.min(i, colors.length - 1)]}\n />\n </svg>\n ))}\n <span className={styles.legendLabel}>More</span>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import e from "./ContributionGraph.module.css.js";
|
|
2
|
+
import { useMemo as t, useRef as n, useState as r } from "react";
|
|
3
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/ContributionGraph/ContributionGraph.tsx
|
|
5
|
+
var o = [
|
|
6
|
+
"Jan",
|
|
7
|
+
"Feb",
|
|
8
|
+
"Mar",
|
|
9
|
+
"Apr",
|
|
10
|
+
"May",
|
|
11
|
+
"Jun",
|
|
12
|
+
"Jul",
|
|
13
|
+
"Aug",
|
|
14
|
+
"Sep",
|
|
15
|
+
"Oct",
|
|
16
|
+
"Nov",
|
|
17
|
+
"Dec"
|
|
18
|
+
], s = [
|
|
19
|
+
"Sun",
|
|
20
|
+
"Mon",
|
|
21
|
+
"Tue",
|
|
22
|
+
"Wed",
|
|
23
|
+
"Thu",
|
|
24
|
+
"Fri",
|
|
25
|
+
"Sat"
|
|
26
|
+
], c = 28, l = 20, u = [
|
|
27
|
+
"var(--gnome-card-shade-color, rgba(0,0,0,0.07))",
|
|
28
|
+
"var(--gnome-green-1, #8ff0a4)",
|
|
29
|
+
"var(--gnome-green-2, #57e389)",
|
|
30
|
+
"var(--gnome-green-4, #2ec27e)",
|
|
31
|
+
"var(--gnome-green-5, #26a269)"
|
|
32
|
+
];
|
|
33
|
+
function d(e) {
|
|
34
|
+
return `${e.getFullYear()}-${String(e.getMonth() + 1).padStart(2, "0")}-${String(e.getDate()).padStart(2, "0")}`;
|
|
35
|
+
}
|
|
36
|
+
function f(e) {
|
|
37
|
+
let [t, n, r] = e.split("-").map(Number);
|
|
38
|
+
return new Date(t, n - 1, r);
|
|
39
|
+
}
|
|
40
|
+
function p(e) {
|
|
41
|
+
return f(e).toLocaleDateString("en-US", {
|
|
42
|
+
weekday: "long",
|
|
43
|
+
year: "numeric",
|
|
44
|
+
month: "long",
|
|
45
|
+
day: "numeric"
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function m({ data: f, maxLevel: m = 4, colorScale: h, cellSize: g = 12, cellGap: _ = 3, weekStartDay: v = 1, showMonthLabels: y = !0, showDayLabels: b = !0, showLegend: x = !0, weeks: S = 52, ariaLabel: C = "Contribution graph", onDayClick: w, tooltipContent: T, className: E }) {
|
|
49
|
+
let D = g + _, O = n(null), k = n(null), A = h ?? u, [j, M] = r({
|
|
50
|
+
col: 0,
|
|
51
|
+
row: 0
|
|
52
|
+
}), [N, P] = r(null), F = t(() => {
|
|
53
|
+
let e = /* @__PURE__ */ new Map();
|
|
54
|
+
for (let t of f) e.set(t.date, t.count);
|
|
55
|
+
return e;
|
|
56
|
+
}, [f]), I = t(() => Math.max(1, ...f.map((e) => e.count)), [f]), { grid: L, monthLabels: R } = t(() => {
|
|
57
|
+
let e = /* @__PURE__ */ new Date();
|
|
58
|
+
e.setHours(0, 0, 0, 0);
|
|
59
|
+
let t = (e.getDay() - v + 7) % 7, n = new Date(e);
|
|
60
|
+
n.setDate(e.getDate() - t);
|
|
61
|
+
let r = new Date(n);
|
|
62
|
+
r.setDate(n.getDate() - (S - 1) * 7);
|
|
63
|
+
let i = [], a = [], s = -1;
|
|
64
|
+
for (let t = 0; t < S; t++) {
|
|
65
|
+
let n = new Date(r);
|
|
66
|
+
n.setDate(r.getDate() + t * 7), n.getMonth() !== s && (a.push({
|
|
67
|
+
col: t,
|
|
68
|
+
month: o[n.getMonth()]
|
|
69
|
+
}), s = n.getMonth());
|
|
70
|
+
let c = [];
|
|
71
|
+
for (let n = 0; n < 7; n++) {
|
|
72
|
+
let i = new Date(r);
|
|
73
|
+
i.setDate(r.getDate() + t * 7 + n);
|
|
74
|
+
let a = i > e, o = d(i), s = a ? 0 : F.get(o) ?? 0, l = s === 0 ? 0 : Math.min(m, Math.ceil(s / I * m));
|
|
75
|
+
c.push({
|
|
76
|
+
iso: o,
|
|
77
|
+
count: s,
|
|
78
|
+
level: l,
|
|
79
|
+
future: a
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
i.push(c);
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
grid: i,
|
|
86
|
+
monthLabels: a
|
|
87
|
+
};
|
|
88
|
+
}, [
|
|
89
|
+
F,
|
|
90
|
+
I,
|
|
91
|
+
m,
|
|
92
|
+
S,
|
|
93
|
+
v
|
|
94
|
+
]), z = t(() => [
|
|
95
|
+
1,
|
|
96
|
+
3,
|
|
97
|
+
5
|
|
98
|
+
].map((e) => ({
|
|
99
|
+
row: (e - v + 7) % 7,
|
|
100
|
+
label: s[e]
|
|
101
|
+
})), [v]), B = b ? c : 0, V = y ? l : 0, H = B + S * D - _, U = V + 7 * D - _, W = Math.min(4, Math.floor(g / 3));
|
|
102
|
+
function G(e, t) {
|
|
103
|
+
let n = Math.max(0, Math.min(S - 1, e)), r = Math.max(0, Math.min(6, t));
|
|
104
|
+
M({
|
|
105
|
+
col: n,
|
|
106
|
+
row: r
|
|
107
|
+
}), O.current?.querySelector(`[data-col="${n}"][data-row="${r}"]`)?.focus();
|
|
108
|
+
}
|
|
109
|
+
function K(e, t, n) {
|
|
110
|
+
let r = {
|
|
111
|
+
ArrowRight: [t + 1, n],
|
|
112
|
+
ArrowLeft: [t - 1, n],
|
|
113
|
+
ArrowDown: [t, n + 1],
|
|
114
|
+
ArrowUp: [t, n - 1]
|
|
115
|
+
};
|
|
116
|
+
if (r[e.key]) e.preventDefault(), G(...r[e.key]);
|
|
117
|
+
else if (e.key === "Enter" || e.key === " ") {
|
|
118
|
+
e.preventDefault();
|
|
119
|
+
let r = L[t]?.[n];
|
|
120
|
+
r && !r.future && w?.({
|
|
121
|
+
date: r.iso,
|
|
122
|
+
count: r.count
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function q(e, t) {
|
|
127
|
+
let n = k.current;
|
|
128
|
+
if (!n) return;
|
|
129
|
+
let r = n.getBoundingClientRect(), i = e.currentTarget.getBoundingClientRect();
|
|
130
|
+
P({
|
|
131
|
+
x: i.left - r.left + g / 2,
|
|
132
|
+
y: i.top - r.top,
|
|
133
|
+
text: t
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
function J(e) {
|
|
137
|
+
return e.future ? A[0] : A[Math.min(e.level, A.length - 1)] ?? A[A.length - 1];
|
|
138
|
+
}
|
|
139
|
+
function Y(e) {
|
|
140
|
+
return e.future ? p(e.iso) : T?.({
|
|
141
|
+
date: e.iso,
|
|
142
|
+
count: e.count
|
|
143
|
+
}) ?? `${e.count} contribution${e.count === 1 ? "" : "s"} on ${p(e.iso)}`;
|
|
144
|
+
}
|
|
145
|
+
return /* @__PURE__ */ a("div", {
|
|
146
|
+
ref: k,
|
|
147
|
+
className: [e.wrapper, E].filter(Boolean).join(" "),
|
|
148
|
+
children: [
|
|
149
|
+
/* @__PURE__ */ a("svg", {
|
|
150
|
+
ref: O,
|
|
151
|
+
width: H,
|
|
152
|
+
height: U,
|
|
153
|
+
className: e.svg,
|
|
154
|
+
"aria-label": C,
|
|
155
|
+
role: "img",
|
|
156
|
+
children: [
|
|
157
|
+
y && R.map(({ col: t, month: n }) => /* @__PURE__ */ i("text", {
|
|
158
|
+
x: B + t * D,
|
|
159
|
+
y: 12,
|
|
160
|
+
className: e.label,
|
|
161
|
+
children: n
|
|
162
|
+
}, `m-${t}`)),
|
|
163
|
+
b && z.map(({ row: t, label: n }) => /* @__PURE__ */ i("text", {
|
|
164
|
+
x: 0,
|
|
165
|
+
y: V + t * D + g - 1,
|
|
166
|
+
className: e.label,
|
|
167
|
+
children: n
|
|
168
|
+
}, `d-${t}`)),
|
|
169
|
+
/* @__PURE__ */ i("g", {
|
|
170
|
+
role: "grid",
|
|
171
|
+
"aria-label": C,
|
|
172
|
+
children: L.map((t, n) => /* @__PURE__ */ i("g", {
|
|
173
|
+
role: "row",
|
|
174
|
+
children: t.map((t, r) => {
|
|
175
|
+
let a = Y(t), o = j.col === n && j.row === r;
|
|
176
|
+
return /* @__PURE__ */ i("rect", {
|
|
177
|
+
"data-col": n,
|
|
178
|
+
"data-row": r,
|
|
179
|
+
x: B + n * D,
|
|
180
|
+
y: V + r * D,
|
|
181
|
+
width: g,
|
|
182
|
+
height: g,
|
|
183
|
+
rx: W,
|
|
184
|
+
fill: J(t),
|
|
185
|
+
opacity: t.future ? .35 : 1,
|
|
186
|
+
className: e.cell,
|
|
187
|
+
role: "gridcell",
|
|
188
|
+
"aria-label": a,
|
|
189
|
+
"aria-disabled": t.future || void 0,
|
|
190
|
+
tabIndex: o ? 0 : -1,
|
|
191
|
+
onClick: () => !t.future && w?.({
|
|
192
|
+
date: t.iso,
|
|
193
|
+
count: t.count
|
|
194
|
+
}),
|
|
195
|
+
onKeyDown: (e) => K(e, n, r),
|
|
196
|
+
onFocus: () => M({
|
|
197
|
+
col: n,
|
|
198
|
+
row: r
|
|
199
|
+
}),
|
|
200
|
+
onMouseEnter: (e) => q(e, a),
|
|
201
|
+
onMouseLeave: () => P(null)
|
|
202
|
+
}, `${n}-${r}`);
|
|
203
|
+
})
|
|
204
|
+
}, n))
|
|
205
|
+
})
|
|
206
|
+
]
|
|
207
|
+
}),
|
|
208
|
+
N && /* @__PURE__ */ i("div", {
|
|
209
|
+
className: e.tooltip,
|
|
210
|
+
style: {
|
|
211
|
+
left: N.x,
|
|
212
|
+
top: N.y
|
|
213
|
+
},
|
|
214
|
+
role: "tooltip",
|
|
215
|
+
children: N.text
|
|
216
|
+
}),
|
|
217
|
+
x && /* @__PURE__ */ a("div", {
|
|
218
|
+
className: e.legend,
|
|
219
|
+
children: [
|
|
220
|
+
/* @__PURE__ */ i("span", {
|
|
221
|
+
className: e.legendLabel,
|
|
222
|
+
children: "Less"
|
|
223
|
+
}),
|
|
224
|
+
Array.from({ length: m + 1 }, (t, n) => /* @__PURE__ */ i("svg", {
|
|
225
|
+
width: g,
|
|
226
|
+
height: g,
|
|
227
|
+
"aria-hidden": "true",
|
|
228
|
+
className: e.legendCell,
|
|
229
|
+
children: /* @__PURE__ */ i("rect", {
|
|
230
|
+
width: g,
|
|
231
|
+
height: g,
|
|
232
|
+
rx: W,
|
|
233
|
+
fill: A[Math.min(n, A.length - 1)]
|
|
234
|
+
})
|
|
235
|
+
}, n)),
|
|
236
|
+
/* @__PURE__ */ i("span", {
|
|
237
|
+
className: e.legendLabel,
|
|
238
|
+
children: "More"
|
|
239
|
+
})
|
|
240
|
+
]
|
|
241
|
+
})
|
|
242
|
+
]
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
//#endregion
|
|
246
|
+
export { m as ContributionGraph };
|
|
247
|
+
|
|
248
|
+
//# sourceMappingURL=ContributionGraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContributionGraph.js","names":[],"sources":["../../../src/components/ContributionGraph/ContributionGraph.tsx"],"sourcesContent":["import { useMemo, useRef, useState } from \"react\";\nimport type { KeyboardEvent } from \"react\";\nimport styles from \"./ContributionGraph.module.css\";\n\nexport interface ContributionDay {\n /** ISO 8601 date — \"YYYY-MM-DD\". */\n date: string;\n /** Non-negative activity count. */\n count: number;\n}\n\nexport interface ContributionGraphProps {\n /** Activity data. Days absent from the array are treated as count = 0. */\n data: ContributionDay[];\n /**\n * Number of intensity levels (excluding 0).\n * @default 4\n */\n maxLevel?: number;\n /**\n * Colour scale — length must be maxLevel + 1 (index 0 = empty).\n * Defaults to the Adwaita green palette.\n */\n colorScale?: string[];\n /** Cell side length in pixels. @default 12 */\n cellSize?: number;\n /** Gap between cells in pixels. @default 3 */\n cellGap?: number;\n /** 0 = Sunday · 1 = Monday (GNOME locale default). @default 1 */\n weekStartDay?: 0 | 1;\n /** @default true */\n showMonthLabels?: boolean;\n /** @default true */\n showDayLabels?: boolean;\n /** @default true */\n showLegend?: boolean;\n /** Number of week columns to display. @default 52 */\n weeks?: number;\n /** @default \"Contribution graph\" */\n ariaLabel?: string;\n onDayClick?: (day: ContributionDay) => void;\n /** Returns a plain-text tooltip string for a day. */\n tooltipContent?: (day: ContributionDay) => string;\n className?: string;\n}\n\nconst SHORT_MONTHS = [\n \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n];\n// 0=Sun … 6=Sat\nconst SHORT_DAYS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\nconst DAY_LABEL_WIDTH = 28;\nconst MONTH_LABEL_HEIGHT = 20;\n\nconst DEFAULT_COLORS = [\n \"var(--gnome-card-shade-color, rgba(0,0,0,0.07))\",\n \"var(--gnome-green-1, #8ff0a4)\",\n \"var(--gnome-green-2, #57e389)\",\n \"var(--gnome-green-4, #2ec27e)\",\n \"var(--gnome-green-5, #26a269)\",\n];\n\nfunction dateToIso(date: Date): string {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, \"0\");\n const d = String(date.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n}\n\nfunction isoToLocal(iso: string): Date {\n const [y, m, d] = iso.split(\"-\").map(Number);\n return new Date(y, m - 1, d);\n}\n\nfunction fullDateLabel(iso: string): string {\n return isoToLocal(iso).toLocaleDateString(\"en-US\", {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n });\n}\n\ninterface GridCell {\n iso: string;\n count: number;\n level: number;\n future: boolean;\n}\n\nexport function ContributionGraph({\n data,\n maxLevel = 4,\n colorScale,\n cellSize = 12,\n cellGap = 3,\n weekStartDay = 1,\n showMonthLabels = true,\n showDayLabels = true,\n showLegend = true,\n weeks = 52,\n ariaLabel = \"Contribution graph\",\n onDayClick,\n tooltipContent,\n className,\n}: ContributionGraphProps) {\n const stride = cellSize + cellGap;\n const svgRef = useRef<SVGSVGElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const colors = colorScale ?? DEFAULT_COLORS;\n\n const [focusedCell, setFocusedCell] = useState({ col: 0, row: 0 });\n const [tooltip, setTooltip] = useState<{\n x: number;\n y: number;\n text: string;\n } | null>(null);\n\n const countMap = useMemo(() => {\n const map = new Map<string, number>();\n for (const d of data) map.set(d.date, d.count);\n return map;\n }, [data]);\n\n const maxCount = useMemo(\n () => Math.max(1, ...data.map((d) => d.count)),\n [data],\n );\n\n const { grid, monthLabels } = useMemo(() => {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n // Align to start of current week\n const daysFromWeekStart = (today.getDay() - weekStartDay + 7) % 7;\n const lastWeekStart = new Date(today);\n lastWeekStart.setDate(today.getDate() - daysFromWeekStart);\n\n const firstDay = new Date(lastWeekStart);\n firstDay.setDate(lastWeekStart.getDate() - (weeks - 1) * 7);\n\n const gridResult: GridCell[][] = [];\n const labels: { col: number; month: string }[] = [];\n let lastMonth = -1;\n\n for (let col = 0; col < weeks; col++) {\n const colStart = new Date(firstDay);\n colStart.setDate(firstDay.getDate() + col * 7);\n\n // Month label when the column starts a new month\n if (colStart.getMonth() !== lastMonth) {\n labels.push({ col, month: SHORT_MONTHS[colStart.getMonth()] });\n lastMonth = colStart.getMonth();\n }\n\n const column: GridCell[] = [];\n for (let row = 0; row < 7; row++) {\n const date = new Date(firstDay);\n date.setDate(firstDay.getDate() + col * 7 + row);\n const future = date > today;\n const iso = dateToIso(date);\n const count = future ? 0 : (countMap.get(iso) ?? 0);\n const level =\n count === 0\n ? 0\n : Math.min(maxLevel, Math.ceil((count / maxCount) * maxLevel));\n column.push({ iso, count, level, future });\n }\n gridResult.push(column);\n }\n\n return { grid: gridResult, monthLabels: labels };\n }, [countMap, maxCount, maxLevel, weeks, weekStartDay]);\n\n // Always label Mon(1), Wed(3), Fri(5) — rows shift with weekStartDay\n const labelRows = useMemo(\n () =>\n [1, 3, 5].map((dayIndex) => ({\n row: (dayIndex - weekStartDay + 7) % 7,\n label: SHORT_DAYS[dayIndex],\n })),\n [weekStartDay],\n );\n\n const dayLabelW = showDayLabels ? DAY_LABEL_WIDTH : 0;\n const monthLabelH = showMonthLabels ? MONTH_LABEL_HEIGHT : 0;\n const svgWidth = dayLabelW + weeks * stride - cellGap;\n const svgHeight = monthLabelH + 7 * stride - cellGap;\n const cellRx = Math.min(4, Math.floor(cellSize / 3));\n\n function focusCell(col: number, row: number) {\n const c = Math.max(0, Math.min(weeks - 1, col));\n const r = Math.max(0, Math.min(6, row));\n setFocusedCell({ col: c, row: r });\n svgRef.current\n ?.querySelector<SVGRectElement>(`[data-col=\"${c}\"][data-row=\"${r}\"]`)\n ?.focus();\n }\n\n function handleCellKey(e: KeyboardEvent, col: number, row: number) {\n const moves: Record<string, [number, number]> = {\n ArrowRight: [col + 1, row],\n ArrowLeft: [col - 1, row],\n ArrowDown: [col, row + 1],\n ArrowUp: [col, row - 1],\n };\n if (moves[e.key]) {\n e.preventDefault();\n focusCell(...moves[e.key]);\n } else if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n const cell = grid[col]?.[row];\n if (cell && !cell.future) onDayClick?.({ date: cell.iso, count: cell.count });\n }\n }\n\n function handleMouseEnter(\n e: React.MouseEvent<SVGRectElement>,\n text: string,\n ) {\n const wrapper = wrapperRef.current;\n if (!wrapper) return;\n const wRect = wrapper.getBoundingClientRect();\n const rRect = (e.currentTarget as Element).getBoundingClientRect();\n setTooltip({\n x: rRect.left - wRect.left + cellSize / 2,\n y: rRect.top - wRect.top,\n text,\n });\n }\n\n function cellColor(cell: GridCell): string {\n if (cell.future) return colors[0];\n return colors[Math.min(cell.level, colors.length - 1)] ?? colors[colors.length - 1];\n }\n\n function cellTooltip(cell: GridCell): string {\n if (cell.future) return fullDateLabel(cell.iso);\n return (\n tooltipContent?.({ date: cell.iso, count: cell.count }) ??\n `${cell.count} contribution${cell.count !== 1 ? \"s\" : \"\"} on ${fullDateLabel(cell.iso)}`\n );\n }\n\n return (\n <div\n ref={wrapperRef}\n className={[styles.wrapper, className].filter(Boolean).join(\" \")}\n >\n <svg\n ref={svgRef}\n width={svgWidth}\n height={svgHeight}\n className={styles.svg}\n aria-label={ariaLabel}\n role=\"img\"\n >\n {/* Month labels */}\n {showMonthLabels &&\n monthLabels.map(({ col, month }) => (\n <text\n key={`m-${col}`}\n x={dayLabelW + col * stride}\n y={12}\n className={styles.label}\n >\n {month}\n </text>\n ))}\n\n {/* Day-of-week labels: Mon, Wed, Fri */}\n {showDayLabels &&\n labelRows.map(({ row, label }) => (\n <text\n key={`d-${row}`}\n x={0}\n y={monthLabelH + row * stride + cellSize - 1}\n className={styles.label}\n >\n {label}\n </text>\n ))}\n\n {/* Activity grid */}\n <g role=\"grid\" aria-label={ariaLabel}>\n {grid.map((column, col) => (\n <g key={col} role=\"row\">\n {column.map((cell, row) => {\n const tipText = cellTooltip(cell);\n const isFocused =\n focusedCell.col === col && focusedCell.row === row;\n\n return (\n <rect\n key={`${col}-${row}`}\n data-col={col}\n data-row={row}\n x={dayLabelW + col * stride}\n y={monthLabelH + row * stride}\n width={cellSize}\n height={cellSize}\n rx={cellRx}\n fill={cellColor(cell)}\n opacity={cell.future ? 0.35 : 1}\n className={styles.cell}\n role=\"gridcell\"\n aria-label={tipText}\n aria-disabled={cell.future || undefined}\n tabIndex={isFocused ? 0 : -1}\n onClick={() => !cell.future && onDayClick?.({ date: cell.iso, count: cell.count })}\n onKeyDown={(e) => handleCellKey(e, col, row)}\n onFocus={() => setFocusedCell({ col, row })}\n onMouseEnter={(e) => handleMouseEnter(e, tipText)}\n onMouseLeave={() => setTooltip(null)}\n />\n );\n })}\n </g>\n ))}\n </g>\n </svg>\n\n {tooltip && (\n <div\n className={styles.tooltip}\n style={{ left: tooltip.x, top: tooltip.y }}\n role=\"tooltip\"\n >\n {tooltip.text}\n </div>\n )}\n\n {showLegend && (\n <div className={styles.legend}>\n <span className={styles.legendLabel}>Less</span>\n {Array.from({ length: maxLevel + 1 }, (_, i) => (\n <svg\n key={i}\n width={cellSize}\n height={cellSize}\n aria-hidden=\"true\"\n className={styles.legendCell}\n >\n <rect\n width={cellSize}\n height={cellSize}\n rx={cellRx}\n fill={colors[Math.min(i, colors.length - 1)]}\n />\n </svg>\n ))}\n <span className={styles.legendLabel}>More</span>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={wrapper:`_wrapper_1upmq_1`,svg:`_svg_1upmq_10`,label:`_label_1upmq_15`,cell:`_cell_1upmq_23`,tooltip:`_tooltip_1upmq_58`,legend:`_legend_1upmq_74`,legendLabel:`_legendLabel_1upmq_81`,legendCell:`_legendCell_1upmq_89`};exports.default=e;
|
|
2
|
+
//# sourceMappingURL=ContributionGraph.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContributionGraph.module.css.cjs","names":[],"sources":["../../../src/components/ContributionGraph/ContributionGraph.module.css"],"sourcesContent":[".wrapper {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n gap: var(--gnome-space-1, 6px);\n overflow-x: auto;\n max-width: 100%;\n}\n\n.svg {\n display: block;\n flex-shrink: 0;\n}\n\n.label {\n font-family: var(--gnome-font-family, system-ui);\n font-size: 11px;\n fill: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n opacity: 0.6;\n user-select: none;\n}\n\n.cell {\n cursor: default;\n transition: transform var(--gnome-transition-fast, 100ms) ease;\n transform-box: fill-box;\n transform-origin: center;\n outline: none;\n}\n\n.cell:not([aria-disabled=\"true\"]):hover {\n transform: scale(1.2);\n}\n\n.cell:not([aria-disabled=\"true\"]) {\n cursor: pointer;\n}\n\n.cell:focus-visible {\n outline: 2px solid var(--gnome-accent-color, #3584e4);\n outline-offset: 1px;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .cell {\n transition: none;\n }\n}\n\n@media (prefers-contrast: more) {\n .cell {\n stroke: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n stroke-width: 0.5;\n stroke-opacity: 0.3;\n }\n}\n\n.tooltip {\n position: absolute;\n transform: translate(-50%, calc(-100% - 6px));\n background: var(--gnome-popover-bg-color, #fff);\n border: 1px solid var(--gnome-light-3, #deddda);\n border-radius: var(--gnome-radius-md, 8px);\n padding: 4px 8px;\n font-family: var(--gnome-font-family, system-ui);\n font-size: 12px;\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n box-shadow: var(--gnome-shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.12));\n pointer-events: none;\n white-space: nowrap;\n z-index: 10;\n}\n\n.legend {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--gnome-space-1, 6px);\n}\n\n.legendLabel {\n font-family: var(--gnome-font-family, system-ui);\n font-size: 11px;\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n opacity: 0.6;\n user-select: none;\n}\n\n.legendCell {\n display: block;\n flex-shrink: 0;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
var e = {
|
|
2
|
+
wrapper: "_wrapper_1upmq_1",
|
|
3
|
+
svg: "_svg_1upmq_10",
|
|
4
|
+
label: "_label_1upmq_15",
|
|
5
|
+
cell: "_cell_1upmq_23",
|
|
6
|
+
tooltip: "_tooltip_1upmq_58",
|
|
7
|
+
legend: "_legend_1upmq_74",
|
|
8
|
+
legendLabel: "_legendLabel_1upmq_81",
|
|
9
|
+
legendCell: "_legendCell_1upmq_89"
|
|
10
|
+
};
|
|
11
|
+
//#endregion
|
|
12
|
+
export { e as default };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=ContributionGraph.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContributionGraph.module.css.js","names":[],"sources":["../../../src/components/ContributionGraph/ContributionGraph.module.css"],"sourcesContent":[".wrapper {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n gap: var(--gnome-space-1, 6px);\n overflow-x: auto;\n max-width: 100%;\n}\n\n.svg {\n display: block;\n flex-shrink: 0;\n}\n\n.label {\n font-family: var(--gnome-font-family, system-ui);\n font-size: 11px;\n fill: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n opacity: 0.6;\n user-select: none;\n}\n\n.cell {\n cursor: default;\n transition: transform var(--gnome-transition-fast, 100ms) ease;\n transform-box: fill-box;\n transform-origin: center;\n outline: none;\n}\n\n.cell:not([aria-disabled=\"true\"]):hover {\n transform: scale(1.2);\n}\n\n.cell:not([aria-disabled=\"true\"]) {\n cursor: pointer;\n}\n\n.cell:focus-visible {\n outline: 2px solid var(--gnome-accent-color, #3584e4);\n outline-offset: 1px;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .cell {\n transition: none;\n }\n}\n\n@media (prefers-contrast: more) {\n .cell {\n stroke: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n stroke-width: 0.5;\n stroke-opacity: 0.3;\n }\n}\n\n.tooltip {\n position: absolute;\n transform: translate(-50%, calc(-100% - 6px));\n background: var(--gnome-popover-bg-color, #fff);\n border: 1px solid var(--gnome-light-3, #deddda);\n border-radius: var(--gnome-radius-md, 8px);\n padding: 4px 8px;\n font-family: var(--gnome-font-family, system-ui);\n font-size: 12px;\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n box-shadow: var(--gnome-shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.12));\n pointer-events: none;\n white-space: nowrap;\n z-index: 10;\n}\n\n.legend {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--gnome-space-1, 6px);\n}\n\n.legendLabel {\n font-family: var(--gnome-font-family, system-ui);\n font-size: 11px;\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n opacity: 0.6;\n user-select: none;\n}\n\n.legendCell {\n display: block;\n flex-shrink: 0;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./ContributionGraph/ContributionGraph.cjs`);exports.ContributionGraph=e.ContributionGraph;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`./CountDownTimer.module.css.cjs`);let t=require(`react`),n=require(`react/jsx-runtime`);function r({start:r,end:i,format:a=`time`,variant:o=`accent`,action:s,className:c,...l}){let[u,d]=(0,t.useState)(null),[f,p]=(0,t.useState)(!1);if((0,t.useEffect)(()=>{let e=()=>{let e=new Date,t=new Date(i).getTime()-e.getTime();return t<=0?{days:0,hours:0,minutes:0,seconds:0,isFinished:!0}:{days:Math.floor(t/(1e3*60*60*24)),hours:Math.floor(t/(1e3*60*60)%24),minutes:Math.floor(t/1e3/60%60),seconds:Math.floor(t/1e3%60),isFinished:!1}};d(e());let t=setInterval(()=>{let t=e();d(t),t.isFinished&&!f&&(s?.(),p(!0))},1e3);return()=>clearInterval(t)},[i,s,f]),!u)return null;let m=()=>{if(a===`date`)return new Date(i).toLocaleDateString();let{days:e,hours:t,minutes:n,seconds:r,isFinished:o}=u;return o?`00:00:00`:a===`datetime`?`${new Date(i).toLocaleDateString()} ${`${String(t).padStart(2,`0`)}:${String(n).padStart(2,`0`)}:${String(r).padStart(2,`0`)}`}`:e>0?`${e}d ${String(t).padStart(2,`0`)}h ${String(n).padStart(2,`0`)}m`:`${String(t).padStart(2,`0`)}:${String(n).padStart(2,`0`)}:${String(r).padStart(2,`0`)}`},h=u.isFinished?`destructive`:o;return(0,n.jsx)(`div`,{className:[e.default.countdownTimer,e.default[h],u.isFinished?e.default.finished:null,c].filter(Boolean).join(` `),...l,children:(0,n.jsx)(`span`,{className:e.default.value,children:m()})})}exports.CountDownTimer=r;
|
|
2
|
+
//# sourceMappingURL=CountDownTimer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CountDownTimer.cjs","names":[],"sources":["../../../src/components/CountDownTimer/CountDownTimer.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport styles from \"./CountDownTimer.module.css\";\n\nexport type CountDownVariant = \"accent\" | \"destructive\" | \"success\" | \"warning\";\n\nexport interface CountDownTimerProps extends HTMLAttributes<HTMLDivElement> {\n /** Start date for the countdown */\n start: Date;\n /** End date for the countdown */\n end: Date;\n /** Format to display: \"date\", \"time\", or \"datetime\" */\n format?: \"date\" | \"time\" | \"datetime\";\n /** Visual style variant. Defaults to `\"accent\"`. */\n variant?: CountDownVariant;\n /** Callback action to execute when countdown reaches zero */\n action?: () => void;\n}\n\ninterface TimeRemaining {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n isFinished: boolean;\n}\n\n/**\n * CountDown timer component that displays remaining time and executes an action when time runs out.\n *\n * @see https://developer.gnome.org/hig/patterns/\n */\nexport function CountDownTimer({\n start,\n end,\n format = \"time\",\n variant = \"accent\",\n action,\n className,\n ...props\n}: CountDownTimerProps) {\n const [timeRemaining, setTimeRemaining] = useState<TimeRemaining | null>(null);\n const [hasExecutedAction, setHasExecutedAction] = useState(false);\n\n useEffect(() => {\n const calculateTimeRemaining = (): TimeRemaining => {\n const now = new Date();\n const endTime = new Date(end).getTime();\n const nowTime = now.getTime();\n const difference = endTime - nowTime;\n\n if (difference <= 0) {\n return {\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n isFinished: true,\n };\n }\n\n const days = Math.floor(difference / (1000 * 60 * 60 * 24));\n const hours = Math.floor((difference / (1000 * 60 * 60)) % 24);\n const minutes = Math.floor((difference / 1000 / 60) % 60);\n const seconds = Math.floor((difference / 1000) % 60);\n\n return {\n days,\n hours,\n minutes,\n seconds,\n isFinished: false,\n };\n };\n\n // Initial calculation\n setTimeRemaining(calculateTimeRemaining());\n\n // Update every second\n const interval = setInterval(() => {\n const remaining = calculateTimeRemaining();\n setTimeRemaining(remaining);\n\n // Execute action when countdown finishes\n if (remaining.isFinished && !hasExecutedAction) {\n action?.();\n setHasExecutedAction(true);\n }\n }, 1000);\n\n return () => clearInterval(interval);\n }, [end, action, hasExecutedAction]);\n\n if (!timeRemaining) {\n return null;\n }\n\n const formatTime = (): string => {\n if (format === \"date\") {\n const endDate = new Date(end);\n return endDate.toLocaleDateString();\n }\n\n const { days, hours, minutes, seconds, isFinished } = timeRemaining;\n\n if (isFinished) {\n return \"00:00:00\";\n }\n\n if (format === \"datetime\") {\n const endDate = new Date(end);\n const dateString = endDate.toLocaleDateString();\n const timeString = `${String(hours).padStart(2, \"0\")}:${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n return `${dateString} ${timeString}`;\n }\n\n if (days > 0) {\n return `${days}d ${String(hours).padStart(2, \"0\")}h ${String(minutes).padStart(2, \"0\")}m`;\n }\n\n return `${String(hours).padStart(2, \"0\")}:${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n };\n\n const displayVariant = timeRemaining.isFinished ? \"destructive\" : variant;\n\n return (\n <div\n className={[\n styles.countdownTimer,\n styles[displayVariant],\n timeRemaining.isFinished ? styles.finished : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n {...props}\n >\n <span className={styles.value}>{formatTime()}</span>\n </div>\n );\n}\n"],"mappings":"yGAgCA,SAAgB,EAAe,CAC3B,QACA,MACA,SAAS,OACT,UAAU,SACV,SACA,YACA,GAAG,GACiB,CACpB,GAAM,CAAC,EAAe,IAAA,EAAA,EAAA,UAAmD,KAAK,CACxE,CAAC,EAAmB,IAAA,EAAA,EAAA,UAAiC,GAAM,CAmDjE,IAjDA,EAAA,EAAA,eAAgB,CACZ,IAAM,MAA8C,CAChD,IAAM,EAAM,IAAI,KAGV,EAFU,IAAI,KAAK,EAAI,CAAC,SAAS,CACvB,EAAI,SAAS,CAkB7B,OAfI,GAAc,EACP,CACH,KAAM,EACN,MAAO,EACP,QAAS,EACT,QAAS,EACT,WAAY,GACf,CAQE,CACH,KANS,KAAK,MAAM,GAAc,IAAO,GAAK,GAAK,IAAI,CAOvD,MANU,KAAK,MAAO,GAAc,IAAO,GAAK,IAAO,GAAG,CAO1D,QANY,KAAK,MAAO,EAAa,IAAO,GAAM,GAAG,CAOrD,QANY,KAAK,MAAO,EAAa,IAAQ,GAAG,CAOhD,WAAY,GACf,EAIL,EAAiB,GAAwB,CAAC,CAG1C,IAAM,EAAW,gBAAkB,CAC/B,IAAM,EAAY,GAAwB,CAC1C,EAAiB,EAAU,CAGvB,EAAU,YAAc,CAAC,IACzB,KAAU,CACV,EAAqB,GAAK,GAE/B,IAAK,CAER,UAAa,cAAc,EAAS,EACrC,CAAC,EAAK,EAAQ,EAAkB,CAAC,CAEhC,CAAC,EACD,OAAO,KAGX,IAAM,MAA2B,CAC7B,GAAI,IAAW,OAEX,OADgB,IAAI,KAAK,EAAI,CACd,oBAAoB,CAGvC,GAAM,CAAE,OAAM,QAAO,UAAS,UAAS,cAAe,EAiBtD,OAfI,EACO,WAGP,IAAW,WAIJ,GAHS,IAAI,KAAK,EAAI,CACF,oBAAoB,CAE1B,GADF,GAAG,OAAO,EAAM,CAAC,SAAS,EAAG,IAAI,CAAC,GAAG,OAAO,EAAQ,CAAC,SAAS,EAAG,IAAI,CAAC,GAAG,OAAO,EAAQ,CAAC,SAAS,EAAG,IAAI,KAI5H,EAAO,EACA,GAAG,EAAK,IAAI,OAAO,EAAM,CAAC,SAAS,EAAG,IAAI,CAAC,IAAI,OAAO,EAAQ,CAAC,SAAS,EAAG,IAAI,CAAC,GAGpF,GAAG,OAAO,EAAM,CAAC,SAAS,EAAG,IAAI,CAAC,GAAG,OAAO,EAAQ,CAAC,SAAS,EAAG,IAAI,CAAC,GAAG,OAAO,EAAQ,CAAC,SAAS,EAAG,IAAI,IAG9G,EAAiB,EAAc,WAAa,cAAgB,EAElE,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,CACP,EAAA,QAAO,eACP,EAAA,QAAO,GACP,EAAc,WAAa,EAAA,QAAO,SAAW,KAC7C,EACH,CACI,OAAO,QAAQ,CACf,KAAK,IAAI,CACd,GAAI,YAEJ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,QAAO,eAAQ,GAAY,CAAQ,CAAA,CAClD,CAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import e from "./CountDownTimer.module.css.js";
|
|
2
|
+
import { useEffect as t, useState as n } from "react";
|
|
3
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/CountDownTimer/CountDownTimer.tsx
|
|
5
|
+
function i({ start: i, end: a, format: o = "time", variant: s = "accent", action: c, className: l, ...u }) {
|
|
6
|
+
let [d, f] = n(null), [p, m] = n(!1);
|
|
7
|
+
if (t(() => {
|
|
8
|
+
let e = () => {
|
|
9
|
+
let e = /* @__PURE__ */ new Date(), t = new Date(a).getTime() - e.getTime();
|
|
10
|
+
return t <= 0 ? {
|
|
11
|
+
days: 0,
|
|
12
|
+
hours: 0,
|
|
13
|
+
minutes: 0,
|
|
14
|
+
seconds: 0,
|
|
15
|
+
isFinished: !0
|
|
16
|
+
} : {
|
|
17
|
+
days: Math.floor(t / (1e3 * 60 * 60 * 24)),
|
|
18
|
+
hours: Math.floor(t / (1e3 * 60 * 60) % 24),
|
|
19
|
+
minutes: Math.floor(t / 1e3 / 60 % 60),
|
|
20
|
+
seconds: Math.floor(t / 1e3 % 60),
|
|
21
|
+
isFinished: !1
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
f(e());
|
|
25
|
+
let t = setInterval(() => {
|
|
26
|
+
let t = e();
|
|
27
|
+
f(t), t.isFinished && !p && (c?.(), m(!0));
|
|
28
|
+
}, 1e3);
|
|
29
|
+
return () => clearInterval(t);
|
|
30
|
+
}, [
|
|
31
|
+
a,
|
|
32
|
+
c,
|
|
33
|
+
p
|
|
34
|
+
]), !d) return null;
|
|
35
|
+
let h = () => {
|
|
36
|
+
if (o === "date") return new Date(a).toLocaleDateString();
|
|
37
|
+
let { days: e, hours: t, minutes: n, seconds: r, isFinished: i } = d;
|
|
38
|
+
return i ? "00:00:00" : o === "datetime" ? `${new Date(a).toLocaleDateString()} ${`${String(t).padStart(2, "0")}:${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`}` : e > 0 ? `${e}d ${String(t).padStart(2, "0")}h ${String(n).padStart(2, "0")}m` : `${String(t).padStart(2, "0")}:${String(n).padStart(2, "0")}:${String(r).padStart(2, "0")}`;
|
|
39
|
+
}, g = d.isFinished ? "destructive" : s;
|
|
40
|
+
return /* @__PURE__ */ r("div", {
|
|
41
|
+
className: [
|
|
42
|
+
e.countdownTimer,
|
|
43
|
+
e[g],
|
|
44
|
+
d.isFinished ? e.finished : null,
|
|
45
|
+
l
|
|
46
|
+
].filter(Boolean).join(" "),
|
|
47
|
+
...u,
|
|
48
|
+
children: /* @__PURE__ */ r("span", {
|
|
49
|
+
className: e.value,
|
|
50
|
+
children: h()
|
|
51
|
+
})
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//#endregion
|
|
55
|
+
export { i as CountDownTimer };
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=CountDownTimer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CountDownTimer.js","names":[],"sources":["../../../src/components/CountDownTimer/CountDownTimer.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport styles from \"./CountDownTimer.module.css\";\n\nexport type CountDownVariant = \"accent\" | \"destructive\" | \"success\" | \"warning\";\n\nexport interface CountDownTimerProps extends HTMLAttributes<HTMLDivElement> {\n /** Start date for the countdown */\n start: Date;\n /** End date for the countdown */\n end: Date;\n /** Format to display: \"date\", \"time\", or \"datetime\" */\n format?: \"date\" | \"time\" | \"datetime\";\n /** Visual style variant. Defaults to `\"accent\"`. */\n variant?: CountDownVariant;\n /** Callback action to execute when countdown reaches zero */\n action?: () => void;\n}\n\ninterface TimeRemaining {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n isFinished: boolean;\n}\n\n/**\n * CountDown timer component that displays remaining time and executes an action when time runs out.\n *\n * @see https://developer.gnome.org/hig/patterns/\n */\nexport function CountDownTimer({\n start,\n end,\n format = \"time\",\n variant = \"accent\",\n action,\n className,\n ...props\n}: CountDownTimerProps) {\n const [timeRemaining, setTimeRemaining] = useState<TimeRemaining | null>(null);\n const [hasExecutedAction, setHasExecutedAction] = useState(false);\n\n useEffect(() => {\n const calculateTimeRemaining = (): TimeRemaining => {\n const now = new Date();\n const endTime = new Date(end).getTime();\n const nowTime = now.getTime();\n const difference = endTime - nowTime;\n\n if (difference <= 0) {\n return {\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n isFinished: true,\n };\n }\n\n const days = Math.floor(difference / (1000 * 60 * 60 * 24));\n const hours = Math.floor((difference / (1000 * 60 * 60)) % 24);\n const minutes = Math.floor((difference / 1000 / 60) % 60);\n const seconds = Math.floor((difference / 1000) % 60);\n\n return {\n days,\n hours,\n minutes,\n seconds,\n isFinished: false,\n };\n };\n\n // Initial calculation\n setTimeRemaining(calculateTimeRemaining());\n\n // Update every second\n const interval = setInterval(() => {\n const remaining = calculateTimeRemaining();\n setTimeRemaining(remaining);\n\n // Execute action when countdown finishes\n if (remaining.isFinished && !hasExecutedAction) {\n action?.();\n setHasExecutedAction(true);\n }\n }, 1000);\n\n return () => clearInterval(interval);\n }, [end, action, hasExecutedAction]);\n\n if (!timeRemaining) {\n return null;\n }\n\n const formatTime = (): string => {\n if (format === \"date\") {\n const endDate = new Date(end);\n return endDate.toLocaleDateString();\n }\n\n const { days, hours, minutes, seconds, isFinished } = timeRemaining;\n\n if (isFinished) {\n return \"00:00:00\";\n }\n\n if (format === \"datetime\") {\n const endDate = new Date(end);\n const dateString = endDate.toLocaleDateString();\n const timeString = `${String(hours).padStart(2, \"0\")}:${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n return `${dateString} ${timeString}`;\n }\n\n if (days > 0) {\n return `${days}d ${String(hours).padStart(2, \"0\")}h ${String(minutes).padStart(2, \"0\")}m`;\n }\n\n return `${String(hours).padStart(2, \"0\")}:${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n };\n\n const displayVariant = timeRemaining.isFinished ? \"destructive\" : variant;\n\n return (\n <div\n className={[\n styles.countdownTimer,\n styles[displayVariant],\n timeRemaining.isFinished ? styles.finished : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n {...props}\n >\n <span className={styles.value}>{formatTime()}</span>\n </div>\n );\n}\n"],"mappings":";;;;AAgCA,SAAgB,EAAe,EAC3B,UACA,QACA,YAAS,QACT,aAAU,UACV,WACA,cACA,GAAG,KACiB;CACpB,IAAM,CAAC,GAAe,KAAoB,EAA+B,KAAK,EACxE,CAAC,GAAmB,KAAwB,EAAS,GAAM;AAmDjE,KAjDA,QAAgB;EACZ,IAAM,UAA8C;GAChD,IAAM,oBAAM,IAAI,MAAM,EAGhB,IAFU,IAAI,KAAK,EAAI,CAAC,SAAS,GACvB,EAAI,SAAS;AAkB7B,UAfI,KAAc,IACP;IACH,MAAM;IACN,OAAO;IACP,SAAS;IACT,SAAS;IACT,YAAY;IACf,GAQE;IACH,MANS,KAAK,MAAM,KAAc,MAAO,KAAK,KAAK,IAAI;IAOvD,OANU,KAAK,MAAO,KAAc,MAAO,KAAK,MAAO,GAAG;IAO1D,SANY,KAAK,MAAO,IAAa,MAAO,KAAM,GAAG;IAOrD,SANY,KAAK,MAAO,IAAa,MAAQ,GAAG;IAOhD,YAAY;IACf;;AAIL,IAAiB,GAAwB,CAAC;EAG1C,IAAM,IAAW,kBAAkB;GAC/B,IAAM,IAAY,GAAwB;AAI1C,GAHA,EAAiB,EAAU,EAGvB,EAAU,cAAc,CAAC,MACzB,KAAU,EACV,EAAqB,GAAK;KAE/B,IAAK;AAER,eAAa,cAAc,EAAS;IACrC;EAAC;EAAK;EAAQ;EAAkB,CAAC,EAEhC,CAAC,EACD,QAAO;CAGX,IAAM,UAA2B;AAC7B,MAAI,MAAW,OAEX,QADgB,IAAI,KAAK,EAAI,CACd,oBAAoB;EAGvC,IAAM,EAAE,SAAM,UAAO,YAAS,YAAS,kBAAe;AAiBtD,SAfI,IACO,aAGP,MAAW,aAIJ,GAHS,IAAI,KAAK,EAAI,CACF,oBAAoB,CAE1B,GADF,GAAG,OAAO,EAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,OAAO,EAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,OAAO,EAAQ,CAAC,SAAS,GAAG,IAAI,OAI5H,IAAO,IACA,GAAG,EAAK,IAAI,OAAO,EAAM,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,OAAO,EAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,KAGpF,GAAG,OAAO,EAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,OAAO,EAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,OAAO,EAAQ,CAAC,SAAS,GAAG,IAAI;IAG9G,IAAiB,EAAc,aAAa,gBAAgB;AAElE,QACI,kBAAC,OAAD;EACI,WAAW;GACP,EAAO;GACP,EAAO;GACP,EAAc,aAAa,EAAO,WAAW;GAC7C;GACH,CACI,OAAO,QAAQ,CACf,KAAK,IAAI;EACd,GAAI;YAEJ,kBAAC,QAAD;GAAM,WAAW,EAAO;aAAQ,GAAY;GAAQ,CAAA;EAClD,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={countdownTimer:`_countdownTimer_twhbs_3`,value:`_value_twhbs_25`,accent:`_accent_twhbs_34`,success:`_success_twhbs_46`,warning:`_warning_twhbs_58`,destructive:`_destructive_twhbs_70`,finished:`_finished_twhbs_82`};exports.default=e;
|
|
2
|
+
//# sourceMappingURL=CountDownTimer.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CountDownTimer.module.css.cjs","names":[],"sources":["../../../src/components/CountDownTimer/CountDownTimer.module.css"],"sourcesContent":["/* ─── Base container ──────────────────────────────────────────────────────── */\n\n.countdownTimer {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n\n padding: 0.5rem 1rem;\n border-radius: var(--gnome-radius-default, 6px);\n background-color: var(--gnome-view-bg-color, #f6f5f4);\n\n font-family: var(--gnome-font-family);\n font-size: 1rem;\n font-weight: var(--gnome-font-weight-medium, 500);\n line-height: 1.5;\n letter-spacing: 0.02em;\n\n user-select: none;\n transition: all 200ms ease-out;\n}\n\n/* ─── Value display ────────────────────────────────────────────────────────── */\n\n.value {\n font-family: \"Fira Mono\", monospace;\n font-size: 1.125rem;\n font-weight: 600;\n letter-spacing: 0.025em;\n}\n\n/* ─── Variant: accent (default) ────────────────────────────────────────────── */\n\n.accent {\n background-color: rgba(53, 132, 228, 0.1);\n color: #3584e4;\n border: 1px solid rgba(53, 132, 228, 0.2);\n}\n\n.accent .value {\n color: #3584e4;\n}\n\n/* ─── Variant: success ─────────────────────────────────────────────────────── */\n\n.success {\n background-color: rgba(51, 209, 122, 0.1);\n color: #33d17a;\n border: 1px solid rgba(51, 209, 122, 0.2);\n}\n\n.success .value {\n color: #33d17a;\n}\n\n/* ─── Variant: warning ─────────────────────────────────────────────────────── */\n\n.warning {\n background-color: rgba(255, 190, 0, 0.1);\n color: #f8e45c;\n border: 1px solid rgba(255, 190, 0, 0.2);\n}\n\n.warning .value {\n color: #f8e45c;\n}\n\n/* ─── Variant: destructive ────────────────────────────────────────────────── */\n\n.destructive {\n background-color: rgba(225, 59, 59, 0.1);\n color: #e13b3b;\n border: 1px solid rgba(225, 59, 59, 0.2);\n}\n\n.destructive .value {\n color: #e13b3b;\n}\n\n/* ─── Finished state ───────────────────────────────────────────────────────── */\n\n.finished {\n opacity: 0.7;\n}\n\n@media (prefers-color-scheme: dark) {\n .countdownTimer {\n background-color: var(--gnome-view-bg-color, #3d3846);\n }\n\n .accent {\n background-color: rgba(53, 132, 228, 0.15);\n border-color: rgba(53, 132, 228, 0.3);\n }\n\n .success {\n background-color: rgba(51, 209, 122, 0.15);\n border-color: rgba(51, 209, 122, 0.3);\n }\n\n .warning {\n background-color: rgba(255, 190, 0, 0.15);\n border-color: rgba(255, 190, 0, 0.3);\n }\n\n .destructive {\n background-color: rgba(225, 59, 59, 0.15);\n border-color: rgba(225, 59, 59, 0.3);\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
var e = {
|
|
2
|
+
countdownTimer: "_countdownTimer_twhbs_3",
|
|
3
|
+
value: "_value_twhbs_25",
|
|
4
|
+
accent: "_accent_twhbs_34",
|
|
5
|
+
success: "_success_twhbs_46",
|
|
6
|
+
warning: "_warning_twhbs_58",
|
|
7
|
+
destructive: "_destructive_twhbs_70",
|
|
8
|
+
finished: "_finished_twhbs_82"
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
11
|
+
export { e as default };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=CountDownTimer.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CountDownTimer.module.css.js","names":[],"sources":["../../../src/components/CountDownTimer/CountDownTimer.module.css"],"sourcesContent":["/* ─── Base container ──────────────────────────────────────────────────────── */\n\n.countdownTimer {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n\n padding: 0.5rem 1rem;\n border-radius: var(--gnome-radius-default, 6px);\n background-color: var(--gnome-view-bg-color, #f6f5f4);\n\n font-family: var(--gnome-font-family);\n font-size: 1rem;\n font-weight: var(--gnome-font-weight-medium, 500);\n line-height: 1.5;\n letter-spacing: 0.02em;\n\n user-select: none;\n transition: all 200ms ease-out;\n}\n\n/* ─── Value display ────────────────────────────────────────────────────────── */\n\n.value {\n font-family: \"Fira Mono\", monospace;\n font-size: 1.125rem;\n font-weight: 600;\n letter-spacing: 0.025em;\n}\n\n/* ─── Variant: accent (default) ────────────────────────────────────────────── */\n\n.accent {\n background-color: rgba(53, 132, 228, 0.1);\n color: #3584e4;\n border: 1px solid rgba(53, 132, 228, 0.2);\n}\n\n.accent .value {\n color: #3584e4;\n}\n\n/* ─── Variant: success ─────────────────────────────────────────────────────── */\n\n.success {\n background-color: rgba(51, 209, 122, 0.1);\n color: #33d17a;\n border: 1px solid rgba(51, 209, 122, 0.2);\n}\n\n.success .value {\n color: #33d17a;\n}\n\n/* ─── Variant: warning ─────────────────────────────────────────────────────── */\n\n.warning {\n background-color: rgba(255, 190, 0, 0.1);\n color: #f8e45c;\n border: 1px solid rgba(255, 190, 0, 0.2);\n}\n\n.warning .value {\n color: #f8e45c;\n}\n\n/* ─── Variant: destructive ────────────────────────────────────────────────── */\n\n.destructive {\n background-color: rgba(225, 59, 59, 0.1);\n color: #e13b3b;\n border: 1px solid rgba(225, 59, 59, 0.2);\n}\n\n.destructive .value {\n color: #e13b3b;\n}\n\n/* ─── Finished state ───────────────────────────────────────────────────────── */\n\n.finished {\n opacity: 0.7;\n}\n\n@media (prefers-color-scheme: dark) {\n .countdownTimer {\n background-color: var(--gnome-view-bg-color, #3d3846);\n }\n\n .accent {\n background-color: rgba(53, 132, 228, 0.15);\n border-color: rgba(53, 132, 228, 0.3);\n }\n\n .success {\n background-color: rgba(51, 209, 122, 0.15);\n border-color: rgba(51, 209, 122, 0.3);\n }\n\n .warning {\n background-color: rgba(255, 190, 0, 0.15);\n border-color: rgba(255, 190, 0, 0.3);\n }\n\n .destructive {\n background-color: rgba(225, 59, 59, 0.15);\n border-color: rgba(225, 59, 59, 0.3);\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./CountDownTimer/CountDownTimer.cjs`);exports.CountDownTimer=e.CountDownTimer;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`./dialogUtils.cjs`),t=require(`./Dialog.module.css.cjs`);let n=require(`react`),r=require(`react-dom`),i=require(`react/jsx-runtime`);function a({open:a,title:o,children:s,buttons:c=[],onClose:l,closeOnBackdrop:u=!0,role:d=`dialog`,responses:f,onResponse:p,className:m,...h}){let g=(0,n.useRef)(null),_=(0,n.useId)(),v=(0,n.useRef)(null),y=!!f,b=e.useVisualViewport();(0,n.useEffect)(()=>{a?(v.current=document.activeElement,(g.current?.querySelector(e.FOCUSABLE))?.focus()):v.current?.focus()},[a]);let x=(0,n.useCallback)(()=>{let e=f?.find(e=>e.variant!==`destructive`&&!e.disabled);e&&p?.(e.id)},[f,p]),S=y?x:u?l:void 0,C=(0,n.useCallback)(t=>{if(t.key===`Escape`){t.preventDefault(),y?x():l?.();return}e.trapFocus(t,g)},[y,x,l]);if(!a)return null;let w=()=>y&&f?(0,i.jsx)(`div`,{className:t.default.footer,children:f.map(e=>(0,i.jsx)(`button`,{type:`button`,disabled:e.disabled,className:[t.default.btn,t.default[`btn-${e.variant??`default`}`]].filter(Boolean).join(` `),onClick:()=>p?.(e.id),children:e.label},e.id))}):c.length>0?(0,i.jsx)(`div`,{className:t.default.footer,children:c.map(e=>(0,i.jsx)(`button`,{type:`button`,disabled:e.disabled,className:[t.default.btn,t.default[`btn-${e.variant??`default`}`]].filter(Boolean).join(` `),onClick:e.onClick,children:e.label},e.label))}):null,T=(0,i.jsx)(`div`,{className:t.default.backdrop,style:b,onClick:S,"aria-hidden":`true`,children:(0,i.jsxs)(`div`,{ref:g,role:d,"aria-modal":`true`,"aria-labelledby":_,className:[t.default.dialog,m].filter(Boolean).join(` `),onKeyDown:C,onClick:e=>e.stopPropagation(),...h,children:[o&&(0,i.jsx)(`div`,{id:_,className:t.default.title,children:o}),s&&(0,i.jsx)(`div`,{className:t.default.body,children:s}),w()]})});return typeof document>`u`?T:(0,r.createPortal)(T,document.body)}exports.Dialog=a;
|
|
2
|
+
//# sourceMappingURL=Dialog.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dialog.cjs","names":[],"sources":["../../../src/components/Dialog/Dialog.tsx"],"sourcesContent":["import {\n useEffect,\n useRef,\n useCallback,\n useId,\n type KeyboardEvent,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { trapFocus, FOCUSABLE, useVisualViewport } from \"./dialogUtils\";\nimport styles from \"./Dialog.module.css\";\n\n// ─── AlertDialog types ────────────────────────────────────────────────────────\n\nexport type AlertDialogResponseVariant = \"default\" | \"suggested\" | \"destructive\";\n\nexport interface AlertDialogResponse {\n /**\n * Unique identifier returned via `onResponse`.\n * Use `\"cancel\"` by convention for the dismissive action.\n */\n id: string;\n /** Button label. */\n label: string;\n /** Visual emphasis. Defaults to `\"default\"`. */\n variant?: AlertDialogResponseVariant;\n /** Disables the button. */\n disabled?: boolean;\n}\n\n// ─── Dialog ───────────────────────────────────────────────────────────────────\n\nexport interface DialogButton {\n /** Button label. */\n label: string;\n /** Visual variant. Defaults to `\"default\"`. */\n variant?: \"default\" | \"suggested\" | \"destructive\";\n /** Called when the button is clicked. */\n onClick: () => void;\n /** Whether the button is disabled. */\n disabled?: boolean;\n}\n\nexport interface DialogProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Whether the dialog is visible. */\n open: boolean;\n\n // ── Standard dialog ──────────────────────────────────────────────────────\n\n /** Dialog heading. */\n title?: ReactNode;\n /** Body content. */\n children?: ReactNode;\n /** Action buttons (standard dialog API). */\n buttons?: DialogButton[];\n /** Called on Escape or backdrop click. */\n onClose?: () => void;\n /** Whether clicking the backdrop closes the dialog. Defaults to `true`. */\n closeOnBackdrop?: boolean;\n\n // ── AlertDialog extension ─────────────────────────────────────────────────\n\n /**\n * ARIA role. Use `\"alertdialog\"` for confirmations and destructive warnings —\n * screen readers announce it immediately. Defaults to `\"dialog\"`.\n *\n * When using `role=\"alertdialog\"`, prefer the `responses`/`onResponse` API\n * over `buttons`/`onClick` for semantic clarity.\n */\n role?: \"dialog\" | \"alertdialog\";\n\n /**\n * Response buttons (AlertDialog API). Alternative to `buttons` — each\n * response has a semantic `id` returned via `onResponse`.\n * Escape and backdrop click fire the first non-destructive response.\n */\n responses?: AlertDialogResponse[];\n\n /**\n * Called with the `id` of the response button clicked.\n * Required when `responses` is provided.\n */\n onResponse?: (id: string) => void;\n}\n\n/**\n * Blocking modal dialog following the Adwaita pattern.\n *\n * **Standard** — `title` + `children` + `buttons[]`.\n *\n * **Alert** — add `role=\"alertdialog\"` + `responses[]` + `onResponse`.\n * Uses a semantic response id instead of per-button `onClick`.\n * Escape / backdrop fire the first non-destructive response.\n * Mirrors `AdwAlertDialog`.\n *\n * For the app-info dialog, use `<AboutDialog />` instead.\n *\n * @see https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.Dialog.html\n * @see https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.AlertDialog.html\n */\nexport function Dialog({\n open,\n title,\n children,\n buttons = [],\n onClose,\n closeOnBackdrop = true,\n role = \"dialog\",\n responses,\n onResponse,\n className,\n ...props\n}: DialogProps) {\n const dialogRef = useRef<HTMLDivElement>(null);\n const titleId = useId();\n const previouslyFocused = useRef<Element | null>(null);\n\n const isAlert = !!responses;\n const viewportStyle = useVisualViewport();\n\n // ── Focus management ───────────────────────────────────────────────────────\n useEffect(() => {\n if (open) {\n previouslyFocused.current = document.activeElement;\n const el = dialogRef.current?.querySelector<HTMLElement>(FOCUSABLE);\n el?.focus();\n } else {\n (previouslyFocused.current as HTMLElement | null)?.focus();\n }\n }, [open]);\n\n // ── Dismiss helpers ────────────────────────────────────────────────────────\n const dismissAlert = useCallback(() => {\n const cancel = responses?.find((r) => r.variant !== \"destructive\" && !r.disabled);\n if (cancel) onResponse?.(cancel.id);\n }, [responses, onResponse]);\n\n const handleBackdrop = isAlert ? dismissAlert : closeOnBackdrop ? onClose : undefined;\n\n // ── Keyboard ───────────────────────────────────────────────────────────────\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n if (isAlert) dismissAlert();\n else onClose?.();\n return;\n }\n trapFocus(e, dialogRef);\n },\n [isAlert, dismissAlert, onClose]\n );\n\n if (!open) return null;\n\n // ── Render buttons (standard or alert) ────────────────────────────────────\n const renderButtons = () => {\n if (isAlert && responses) {\n return (\n <div className={styles.footer}>\n {responses.map((r) => (\n <button\n key={r.id}\n type=\"button\"\n disabled={r.disabled}\n className={[styles.btn, styles[`btn-${r.variant ?? \"default\"}`]].filter(Boolean).join(\" \")}\n onClick={() => onResponse?.(r.id)}\n >\n {r.label}\n </button>\n ))}\n </div>\n );\n }\n if (buttons.length > 0) {\n return (\n <div className={styles.footer}>\n {buttons.map((btn) => (\n <button\n key={btn.label}\n type=\"button\"\n disabled={btn.disabled}\n className={[styles.btn, styles[`btn-${btn.variant ?? \"default\"}`]].filter(Boolean).join(\" \")}\n onClick={btn.onClick}\n >\n {btn.label}\n </button>\n ))}\n </div>\n );\n }\n return null;\n };\n\n const node = (\n <div\n className={styles.backdrop}\n style={viewportStyle}\n onClick={handleBackdrop}\n aria-hidden=\"true\"\n >\n <div\n ref={dialogRef}\n role={role}\n aria-modal=\"true\"\n aria-labelledby={titleId}\n className={[styles.dialog, className].filter(Boolean).join(\" \")}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n {...props}\n >\n {title && <div id={titleId} className={styles.title}>{title}</div>}\n {children && <div className={styles.body}>{children}</div>}\n {renderButtons()}\n </div>\n </div>\n );\n\n if (typeof document === \"undefined\") return node;\n return createPortal(node, document.body);\n}\n"],"mappings":"uJAqGA,SAAgB,EAAO,CACrB,OACA,QACA,WACA,UAAU,EAAE,CACZ,UACA,kBAAkB,GAClB,OAAO,SACP,YACA,aACA,YACA,GAAG,GACW,CACd,IAAM,GAAA,EAAA,EAAA,QAAmC,KAAK,CACxC,GAAA,EAAA,EAAA,QAAiB,CACjB,GAAA,EAAA,EAAA,QAA2C,KAAK,CAEhD,EAAU,CAAC,CAAC,EACZ,EAAgB,EAAA,mBAAmB,EAGzC,EAAA,EAAA,eAAgB,CACV,GACF,EAAkB,QAAU,SAAS,eAC1B,EAAU,SAAS,cAA2B,EAAA,UAAU,GAC/D,OAAO,EAEV,EAAkB,SAAgC,OAAO,EAE3D,CAAC,EAAK,CAAC,CAGV,IAAM,GAAA,EAAA,EAAA,iBAAiC,CACrC,IAAM,EAAS,GAAW,KAAM,GAAM,EAAE,UAAY,eAAiB,CAAC,EAAE,SAAS,CAC7E,GAAQ,IAAa,EAAO,GAAG,EAClC,CAAC,EAAW,EAAW,CAAC,CAErB,EAAiB,EAAU,EAAe,EAAkB,EAAU,IAAA,GAGtE,GAAA,EAAA,EAAA,aACH,GAAqC,CACpC,GAAI,EAAE,MAAQ,SAAU,CACtB,EAAE,gBAAgB,CACd,EAAS,GAAc,CACtB,KAAW,CAChB,OAEF,EAAA,UAAU,EAAG,EAAU,EAEzB,CAAC,EAAS,EAAc,EAAQ,CACjC,CAED,GAAI,CAAC,EAAM,OAAO,KAGlB,IAAM,MACA,GAAW,GAEX,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,QAAO,gBACpB,EAAU,IAAK,IACd,EAAA,EAAA,KAAC,SAAD,CAEE,KAAK,SACL,SAAU,EAAE,SACZ,UAAW,CAAC,EAAA,QAAO,IAAK,EAAA,QAAO,OAAO,EAAE,SAAW,aAAa,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI,CAC1F,YAAe,IAAa,EAAE,GAAG,UAEhC,EAAE,MACI,CAPF,EAAE,GAOA,CACT,CACE,CAAA,CAGN,EAAQ,OAAS,GAEjB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,QAAO,gBACpB,EAAQ,IAAK,IACZ,EAAA,EAAA,KAAC,SAAD,CAEE,KAAK,SACL,SAAU,EAAI,SACd,UAAW,CAAC,EAAA,QAAO,IAAK,EAAA,QAAO,OAAO,EAAI,SAAW,aAAa,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI,CAC5F,QAAS,EAAI,iBAEZ,EAAI,MACE,CAPF,EAAI,MAOF,CACT,CACE,CAAA,CAGH,KAGH,GACJ,EAAA,EAAA,KAAC,MAAD,CACE,UAAW,EAAA,QAAO,SAClB,MAAO,EACP,QAAS,EACT,cAAY,iBAEZ,EAAA,EAAA,MAAC,MAAD,CACE,IAAK,EACC,OACN,aAAW,OACX,kBAAiB,EACjB,UAAW,CAAC,EAAA,QAAO,OAAQ,EAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI,CAC/D,UAAW,EACX,QAAU,GAAM,EAAE,iBAAiB,CACnC,GAAI,WARN,CAUG,IAAS,EAAA,EAAA,KAAC,MAAD,CAAK,GAAI,EAAS,UAAW,EAAA,QAAO,eAAQ,EAAY,CAAA,CACjE,IAAY,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,QAAO,KAAO,WAAe,CAAA,CACzD,GAAe,CACZ,GACF,CAAA,CAIR,OADI,OAAO,SAAa,IAAoB,GAC5C,EAAA,EAAA,cAAoB,EAAM,SAAS,KAAK"}
|