@kushagradhawan/kookie-ui 0.1.29 → 0.1.30
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/components.css +4083 -2224
- package/dist/cjs/components/_internal/base-button.d.ts +36 -0
- package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-button.js +1 -1
- package/dist/cjs/components/_internal/base-button.js.map +3 -3
- package/dist/cjs/components/_internal/base-button.props.d.ts +61 -0
- package/dist/cjs/components/_internal/base-button.props.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-button.props.js +1 -1
- package/dist/cjs/components/_internal/base-button.props.js.map +3 -3
- package/dist/cjs/components/_internal/base-checkbox.props.d.ts +6 -1
- package/dist/cjs/components/_internal/base-checkbox.props.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-checkbox.props.js +1 -1
- package/dist/cjs/components/_internal/base-checkbox.props.js.map +3 -3
- package/dist/cjs/components/_internal/base-menu.props.d.ts +8 -0
- package/dist/cjs/components/_internal/base-menu.props.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-menu.props.js +1 -1
- package/dist/cjs/components/_internal/base-menu.props.js.map +3 -3
- package/dist/cjs/components/_internal/base-radio.props.d.ts +6 -1
- package/dist/cjs/components/_internal/base-radio.props.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-radio.props.js +1 -1
- package/dist/cjs/components/_internal/base-radio.props.js.map +3 -3
- package/dist/cjs/components/accordion.d.ts.map +1 -1
- package/dist/cjs/components/accordion.js +1 -1
- package/dist/cjs/components/accordion.js.map +3 -3
- package/dist/cjs/components/accordion.props.d.ts +9 -0
- package/dist/cjs/components/accordion.props.d.ts.map +1 -1
- package/dist/cjs/components/accordion.props.js +1 -1
- package/dist/cjs/components/accordion.props.js.map +2 -2
- package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
- package/dist/cjs/components/alert-dialog.js +1 -1
- package/dist/cjs/components/alert-dialog.js.map +3 -3
- package/dist/cjs/components/alert-dialog.props.d.ts +69 -2
- package/dist/cjs/components/alert-dialog.props.d.ts.map +1 -1
- package/dist/cjs/components/alert-dialog.props.js +1 -1
- package/dist/cjs/components/alert-dialog.props.js.map +3 -3
- package/dist/cjs/components/avatar.d.ts.map +1 -1
- package/dist/cjs/components/avatar.js +1 -1
- package/dist/cjs/components/avatar.js.map +3 -3
- package/dist/cjs/components/avatar.props.d.ts +9 -1
- package/dist/cjs/components/avatar.props.d.ts.map +1 -1
- package/dist/cjs/components/avatar.props.js +1 -1
- package/dist/cjs/components/avatar.props.js.map +3 -3
- package/dist/cjs/components/badge.d.ts +8 -1
- package/dist/cjs/components/badge.d.ts.map +1 -1
- package/dist/cjs/components/badge.js +1 -1
- package/dist/cjs/components/badge.js.map +3 -3
- package/dist/cjs/components/badge.props.d.ts +14 -6
- package/dist/cjs/components/badge.props.d.ts.map +1 -1
- package/dist/cjs/components/badge.props.js +1 -1
- package/dist/cjs/components/badge.props.js.map +3 -3
- package/dist/cjs/components/blockquote.props.d.ts +1 -1
- package/dist/cjs/components/button.d.ts +53 -1
- package/dist/cjs/components/button.d.ts.map +1 -1
- package/dist/cjs/components/button.js +1 -1
- package/dist/cjs/components/button.js.map +3 -3
- package/dist/cjs/components/button.props.d.ts +17 -0
- package/dist/cjs/components/button.props.d.ts.map +1 -1
- package/dist/cjs/components/button.props.js.map +2 -2
- package/dist/cjs/components/callout.d.ts +4 -0
- package/dist/cjs/components/callout.d.ts.map +1 -1
- package/dist/cjs/components/callout.js +1 -1
- package/dist/cjs/components/callout.js.map +3 -3
- package/dist/cjs/components/callout.props.d.ts +9 -1
- package/dist/cjs/components/callout.props.d.ts.map +1 -1
- package/dist/cjs/components/callout.props.js +1 -1
- package/dist/cjs/components/callout.props.js.map +3 -3
- package/dist/cjs/components/card.d.ts.map +1 -1
- package/dist/cjs/components/card.js +1 -1
- package/dist/cjs/components/card.js.map +3 -3
- package/dist/cjs/components/card.props.d.ts +5 -0
- package/dist/cjs/components/card.props.d.ts.map +1 -1
- package/dist/cjs/components/card.props.js +1 -1
- package/dist/cjs/components/card.props.js.map +3 -3
- package/dist/cjs/components/checkbox-cards.d.ts.map +1 -1
- package/dist/cjs/components/checkbox-cards.js +1 -1
- package/dist/cjs/components/checkbox-cards.js.map +3 -3
- package/dist/cjs/components/checkbox-cards.props.d.ts +2 -2
- package/dist/cjs/components/checkbox-cards.props.js +1 -1
- package/dist/cjs/components/checkbox-cards.props.js.map +2 -2
- package/dist/cjs/components/checkbox-group.props.d.ts +6 -1
- package/dist/cjs/components/checkbox-group.props.d.ts.map +1 -1
- package/dist/cjs/components/checkbox.d.ts.map +1 -1
- package/dist/cjs/components/checkbox.js +1 -1
- package/dist/cjs/components/checkbox.js.map +3 -3
- package/dist/cjs/components/code.js.map +1 -1
- package/dist/cjs/components/code.props.d.ts +1 -1
- package/dist/cjs/components/context-menu.d.ts +1 -1
- package/dist/cjs/components/context-menu.d.ts.map +1 -1
- package/dist/cjs/components/context-menu.js +1 -1
- package/dist/cjs/components/context-menu.js.map +3 -3
- package/dist/cjs/components/dialog.d.ts.map +1 -1
- package/dist/cjs/components/dialog.js +1 -1
- package/dist/cjs/components/dialog.js.map +3 -3
- package/dist/cjs/components/dialog.props.d.ts +5 -0
- package/dist/cjs/components/dialog.props.d.ts.map +1 -1
- package/dist/cjs/components/dialog.props.js +1 -1
- package/dist/cjs/components/dialog.props.js.map +3 -3
- package/dist/cjs/components/dropdown-menu.d.ts +1 -1
- package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
- package/dist/cjs/components/dropdown-menu.js +1 -1
- package/dist/cjs/components/dropdown-menu.js.map +3 -3
- package/dist/cjs/components/heading.props.d.ts +1 -1
- package/dist/cjs/components/icon-button.d.ts +79 -1
- package/dist/cjs/components/icon-button.d.ts.map +1 -1
- package/dist/cjs/components/icon-button.js +4 -1
- package/dist/cjs/components/icon-button.js.map +3 -3
- package/dist/cjs/components/image.d.ts +131 -12
- package/dist/cjs/components/image.d.ts.map +1 -1
- package/dist/cjs/components/image.js +1 -1
- package/dist/cjs/components/image.js.map +3 -3
- package/dist/cjs/components/image.props.d.ts +136 -21
- package/dist/cjs/components/image.props.d.ts.map +1 -1
- package/dist/cjs/components/image.props.js +1 -1
- package/dist/cjs/components/image.props.js.map +3 -3
- package/dist/cjs/components/link.props.d.ts +1 -1
- package/dist/cjs/components/progress.props.d.ts +2 -2
- package/dist/cjs/components/progress.props.js +1 -1
- package/dist/cjs/components/progress.props.js.map +2 -2
- package/dist/cjs/components/radio-cards.d.ts.map +1 -1
- package/dist/cjs/components/radio-cards.js +1 -1
- package/dist/cjs/components/radio-cards.js.map +3 -3
- package/dist/cjs/components/radio-cards.props.d.ts +2 -2
- package/dist/cjs/components/radio-cards.props.js +1 -1
- package/dist/cjs/components/radio-cards.props.js.map +2 -2
- package/dist/cjs/components/radio.d.ts.map +1 -1
- package/dist/cjs/components/radio.js +1 -1
- package/dist/cjs/components/radio.js.map +3 -3
- package/dist/cjs/components/segmented-control.props.d.ts +3 -3
- package/dist/cjs/components/segmented-control.props.js +1 -1
- package/dist/cjs/components/segmented-control.props.js.map +2 -2
- package/dist/cjs/components/select.d.ts.map +1 -1
- package/dist/cjs/components/select.js +1 -1
- package/dist/cjs/components/select.js.map +3 -3
- package/dist/cjs/components/select.props.d.ts +12 -0
- package/dist/cjs/components/select.props.d.ts.map +1 -1
- package/dist/cjs/components/select.props.js +1 -1
- package/dist/cjs/components/select.props.js.map +2 -2
- package/dist/cjs/components/sidebar.d.ts +5 -0
- package/dist/cjs/components/sidebar.d.ts.map +1 -1
- package/dist/cjs/components/sidebar.js +1 -1
- package/dist/cjs/components/sidebar.js.map +3 -3
- package/dist/cjs/components/slider.d.ts +5 -0
- package/dist/cjs/components/slider.d.ts.map +1 -1
- package/dist/cjs/components/slider.js +1 -1
- package/dist/cjs/components/slider.js.map +3 -3
- package/dist/cjs/components/slider.props.d.ts +10 -2
- package/dist/cjs/components/slider.props.d.ts.map +1 -1
- package/dist/cjs/components/slider.props.js +1 -1
- package/dist/cjs/components/slider.props.js.map +2 -2
- package/dist/cjs/components/switch.d.ts.map +1 -1
- package/dist/cjs/components/switch.js +1 -1
- package/dist/cjs/components/switch.js.map +3 -3
- package/dist/cjs/components/switch.props.d.ts +17 -4
- package/dist/cjs/components/switch.props.d.ts.map +1 -1
- package/dist/cjs/components/switch.props.js +1 -1
- package/dist/cjs/components/switch.props.js.map +3 -3
- package/dist/cjs/components/tab-nav.d.ts.map +1 -1
- package/dist/cjs/components/tab-nav.js +1 -1
- package/dist/cjs/components/tab-nav.js.map +3 -3
- package/dist/cjs/components/tabs.d.ts.map +1 -1
- package/dist/cjs/components/tabs.js +1 -1
- package/dist/cjs/components/tabs.js.map +2 -2
- package/dist/cjs/components/text-area.d.ts.map +1 -1
- package/dist/cjs/components/text-area.js +1 -1
- package/dist/cjs/components/text-area.js.map +3 -3
- package/dist/cjs/components/text-area.props.d.ts +29 -0
- package/dist/cjs/components/text-area.props.d.ts.map +1 -1
- package/dist/cjs/components/text-area.props.js +1 -1
- package/dist/cjs/components/text-area.props.js.map +3 -3
- package/dist/cjs/components/text-field.d.ts.map +1 -1
- package/dist/cjs/components/text-field.js +4 -4
- package/dist/cjs/components/text-field.js.map +3 -3
- package/dist/cjs/components/text-field.props.d.ts +29 -0
- package/dist/cjs/components/text-field.props.d.ts.map +1 -1
- package/dist/cjs/components/text-field.props.js +1 -1
- package/dist/cjs/components/text-field.props.js.map +3 -3
- package/dist/cjs/components/text.props.d.ts +1 -1
- package/dist/cjs/components/theme.d.ts +3 -0
- package/dist/cjs/components/theme.d.ts.map +1 -1
- package/dist/cjs/components/theme.js +1 -1
- package/dist/cjs/components/theme.js.map +3 -3
- package/dist/cjs/components/theme.props.d.ts +14 -0
- package/dist/cjs/components/theme.props.d.ts.map +1 -1
- package/dist/cjs/components/theme.props.js +1 -1
- package/dist/cjs/components/theme.props.js.map +3 -3
- package/dist/cjs/components/toggle-button.d.ts +52 -0
- package/dist/cjs/components/toggle-button.d.ts.map +1 -1
- package/dist/cjs/components/toggle-button.js +1 -1
- package/dist/cjs/components/toggle-button.js.map +3 -3
- package/dist/cjs/components/toggle-icon-button.d.ts +84 -2
- package/dist/cjs/components/toggle-icon-button.d.ts.map +1 -1
- package/dist/cjs/components/toggle-icon-button.js +1 -1
- package/dist/cjs/components/toggle-icon-button.js.map +3 -3
- package/dist/cjs/hooks/index.d.ts +2 -0
- package/dist/cjs/hooks/index.d.ts.map +1 -0
- package/dist/cjs/hooks/index.js +2 -0
- package/dist/cjs/hooks/index.js.map +7 -0
- package/dist/cjs/hooks/use-live-announcer.d.ts +6 -0
- package/dist/cjs/hooks/use-live-announcer.d.ts.map +1 -0
- package/dist/cjs/hooks/use-live-announcer.js +10 -0
- package/dist/cjs/hooks/use-live-announcer.js.map +7 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/props/weight.prop.d.ts +1 -1
- package/dist/cjs/props/weight.prop.js +1 -1
- package/dist/cjs/props/weight.prop.js.map +2 -2
- package/dist/esm/components/_internal/base-button.d.ts +36 -0
- package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-button.js +1 -1
- package/dist/esm/components/_internal/base-button.js.map +3 -3
- package/dist/esm/components/_internal/base-button.props.d.ts +61 -0
- package/dist/esm/components/_internal/base-button.props.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-button.props.js +1 -1
- package/dist/esm/components/_internal/base-button.props.js.map +3 -3
- package/dist/esm/components/_internal/base-checkbox.props.d.ts +6 -1
- package/dist/esm/components/_internal/base-checkbox.props.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-checkbox.props.js +1 -1
- package/dist/esm/components/_internal/base-checkbox.props.js.map +3 -3
- package/dist/esm/components/_internal/base-menu.props.d.ts +8 -0
- package/dist/esm/components/_internal/base-menu.props.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-menu.props.js +1 -1
- package/dist/esm/components/_internal/base-menu.props.js.map +3 -3
- package/dist/esm/components/_internal/base-radio.props.d.ts +6 -1
- package/dist/esm/components/_internal/base-radio.props.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-radio.props.js +1 -1
- package/dist/esm/components/_internal/base-radio.props.js.map +3 -3
- package/dist/esm/components/accordion.d.ts.map +1 -1
- package/dist/esm/components/accordion.js +1 -1
- package/dist/esm/components/accordion.js.map +3 -3
- package/dist/esm/components/accordion.props.d.ts +9 -0
- package/dist/esm/components/accordion.props.d.ts.map +1 -1
- package/dist/esm/components/accordion.props.js +1 -1
- package/dist/esm/components/accordion.props.js.map +2 -2
- package/dist/esm/components/alert-dialog.d.ts.map +1 -1
- package/dist/esm/components/alert-dialog.js +1 -1
- package/dist/esm/components/alert-dialog.js.map +3 -3
- package/dist/esm/components/alert-dialog.props.d.ts +69 -2
- package/dist/esm/components/alert-dialog.props.d.ts.map +1 -1
- package/dist/esm/components/alert-dialog.props.js +1 -1
- package/dist/esm/components/alert-dialog.props.js.map +3 -3
- package/dist/esm/components/avatar.d.ts.map +1 -1
- package/dist/esm/components/avatar.js +1 -1
- package/dist/esm/components/avatar.js.map +3 -3
- package/dist/esm/components/avatar.props.d.ts +9 -1
- package/dist/esm/components/avatar.props.d.ts.map +1 -1
- package/dist/esm/components/avatar.props.js +1 -1
- package/dist/esm/components/avatar.props.js.map +3 -3
- package/dist/esm/components/badge.d.ts +8 -1
- package/dist/esm/components/badge.d.ts.map +1 -1
- package/dist/esm/components/badge.js +1 -1
- package/dist/esm/components/badge.js.map +3 -3
- package/dist/esm/components/badge.props.d.ts +14 -6
- package/dist/esm/components/badge.props.d.ts.map +1 -1
- package/dist/esm/components/badge.props.js +1 -1
- package/dist/esm/components/badge.props.js.map +3 -3
- package/dist/esm/components/blockquote.props.d.ts +1 -1
- package/dist/esm/components/button.d.ts +53 -1
- package/dist/esm/components/button.d.ts.map +1 -1
- package/dist/esm/components/button.js +1 -1
- package/dist/esm/components/button.js.map +3 -3
- package/dist/esm/components/button.props.d.ts +17 -0
- package/dist/esm/components/button.props.d.ts.map +1 -1
- package/dist/esm/components/button.props.js.map +2 -2
- package/dist/esm/components/callout.d.ts +4 -0
- package/dist/esm/components/callout.d.ts.map +1 -1
- package/dist/esm/components/callout.js +1 -1
- package/dist/esm/components/callout.js.map +3 -3
- package/dist/esm/components/callout.props.d.ts +9 -1
- package/dist/esm/components/callout.props.d.ts.map +1 -1
- package/dist/esm/components/callout.props.js +1 -1
- package/dist/esm/components/callout.props.js.map +3 -3
- package/dist/esm/components/card.d.ts.map +1 -1
- package/dist/esm/components/card.js +1 -1
- package/dist/esm/components/card.js.map +3 -3
- package/dist/esm/components/card.props.d.ts +5 -0
- package/dist/esm/components/card.props.d.ts.map +1 -1
- package/dist/esm/components/card.props.js +1 -1
- package/dist/esm/components/card.props.js.map +3 -3
- package/dist/esm/components/checkbox-cards.d.ts.map +1 -1
- package/dist/esm/components/checkbox-cards.js +1 -1
- package/dist/esm/components/checkbox-cards.js.map +3 -3
- package/dist/esm/components/checkbox-cards.props.d.ts +2 -2
- package/dist/esm/components/checkbox-cards.props.js +1 -1
- package/dist/esm/components/checkbox-cards.props.js.map +2 -2
- package/dist/esm/components/checkbox-group.props.d.ts +6 -1
- package/dist/esm/components/checkbox-group.props.d.ts.map +1 -1
- package/dist/esm/components/checkbox.d.ts.map +1 -1
- package/dist/esm/components/checkbox.js +1 -1
- package/dist/esm/components/checkbox.js.map +3 -3
- package/dist/esm/components/code.js.map +1 -1
- package/dist/esm/components/code.props.d.ts +1 -1
- package/dist/esm/components/context-menu.d.ts +1 -1
- package/dist/esm/components/context-menu.d.ts.map +1 -1
- package/dist/esm/components/context-menu.js +1 -1
- package/dist/esm/components/context-menu.js.map +3 -3
- package/dist/esm/components/dialog.d.ts.map +1 -1
- package/dist/esm/components/dialog.js +1 -1
- package/dist/esm/components/dialog.js.map +3 -3
- package/dist/esm/components/dialog.props.d.ts +5 -0
- package/dist/esm/components/dialog.props.d.ts.map +1 -1
- package/dist/esm/components/dialog.props.js +1 -1
- package/dist/esm/components/dialog.props.js.map +3 -3
- package/dist/esm/components/dropdown-menu.d.ts +1 -1
- package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
- package/dist/esm/components/dropdown-menu.js +1 -1
- package/dist/esm/components/dropdown-menu.js.map +3 -3
- package/dist/esm/components/heading.props.d.ts +1 -1
- package/dist/esm/components/icon-button.d.ts +79 -1
- package/dist/esm/components/icon-button.d.ts.map +1 -1
- package/dist/esm/components/icon-button.js +4 -1
- package/dist/esm/components/icon-button.js.map +3 -3
- package/dist/esm/components/image.d.ts +131 -12
- package/dist/esm/components/image.d.ts.map +1 -1
- package/dist/esm/components/image.js +1 -1
- package/dist/esm/components/image.js.map +3 -3
- package/dist/esm/components/image.props.d.ts +136 -21
- package/dist/esm/components/image.props.d.ts.map +1 -1
- package/dist/esm/components/image.props.js +1 -1
- package/dist/esm/components/image.props.js.map +3 -3
- package/dist/esm/components/link.props.d.ts +1 -1
- package/dist/esm/components/progress.props.d.ts +2 -2
- package/dist/esm/components/progress.props.js +1 -1
- package/dist/esm/components/progress.props.js.map +2 -2
- package/dist/esm/components/radio-cards.d.ts.map +1 -1
- package/dist/esm/components/radio-cards.js +1 -1
- package/dist/esm/components/radio-cards.js.map +3 -3
- package/dist/esm/components/radio-cards.props.d.ts +2 -2
- package/dist/esm/components/radio-cards.props.js +1 -1
- package/dist/esm/components/radio-cards.props.js.map +2 -2
- package/dist/esm/components/radio.d.ts.map +1 -1
- package/dist/esm/components/radio.js +1 -1
- package/dist/esm/components/radio.js.map +3 -3
- package/dist/esm/components/segmented-control.props.d.ts +3 -3
- package/dist/esm/components/segmented-control.props.js +1 -1
- package/dist/esm/components/segmented-control.props.js.map +2 -2
- package/dist/esm/components/select.d.ts.map +1 -1
- package/dist/esm/components/select.js +1 -1
- package/dist/esm/components/select.js.map +3 -3
- package/dist/esm/components/select.props.d.ts +12 -0
- package/dist/esm/components/select.props.d.ts.map +1 -1
- package/dist/esm/components/select.props.js +1 -1
- package/dist/esm/components/select.props.js.map +2 -2
- package/dist/esm/components/sidebar.d.ts +5 -0
- package/dist/esm/components/sidebar.d.ts.map +1 -1
- package/dist/esm/components/sidebar.js +1 -1
- package/dist/esm/components/sidebar.js.map +3 -3
- package/dist/esm/components/slider.d.ts +5 -0
- package/dist/esm/components/slider.d.ts.map +1 -1
- package/dist/esm/components/slider.js +1 -1
- package/dist/esm/components/slider.js.map +3 -3
- package/dist/esm/components/slider.props.d.ts +10 -2
- package/dist/esm/components/slider.props.d.ts.map +1 -1
- package/dist/esm/components/slider.props.js +1 -1
- package/dist/esm/components/slider.props.js.map +2 -2
- package/dist/esm/components/switch.d.ts.map +1 -1
- package/dist/esm/components/switch.js +1 -1
- package/dist/esm/components/switch.js.map +3 -3
- package/dist/esm/components/switch.props.d.ts +17 -4
- package/dist/esm/components/switch.props.d.ts.map +1 -1
- package/dist/esm/components/switch.props.js +1 -1
- package/dist/esm/components/switch.props.js.map +3 -3
- package/dist/esm/components/tab-nav.d.ts.map +1 -1
- package/dist/esm/components/tab-nav.js +1 -1
- package/dist/esm/components/tab-nav.js.map +3 -3
- package/dist/esm/components/tabs.d.ts.map +1 -1
- package/dist/esm/components/tabs.js +1 -1
- package/dist/esm/components/tabs.js.map +2 -2
- package/dist/esm/components/text-area.d.ts.map +1 -1
- package/dist/esm/components/text-area.js +1 -1
- package/dist/esm/components/text-area.js.map +3 -3
- package/dist/esm/components/text-area.props.d.ts +29 -0
- package/dist/esm/components/text-area.props.d.ts.map +1 -1
- package/dist/esm/components/text-area.props.js +1 -1
- package/dist/esm/components/text-area.props.js.map +3 -3
- package/dist/esm/components/text-field.d.ts.map +1 -1
- package/dist/esm/components/text-field.js +4 -4
- package/dist/esm/components/text-field.js.map +3 -3
- package/dist/esm/components/text-field.props.d.ts +29 -0
- package/dist/esm/components/text-field.props.d.ts.map +1 -1
- package/dist/esm/components/text-field.props.js +1 -1
- package/dist/esm/components/text-field.props.js.map +3 -3
- package/dist/esm/components/text.props.d.ts +1 -1
- package/dist/esm/components/theme.d.ts +3 -0
- package/dist/esm/components/theme.d.ts.map +1 -1
- package/dist/esm/components/theme.js +1 -1
- package/dist/esm/components/theme.js.map +3 -3
- package/dist/esm/components/theme.props.d.ts +14 -0
- package/dist/esm/components/theme.props.d.ts.map +1 -1
- package/dist/esm/components/theme.props.js +1 -1
- package/dist/esm/components/theme.props.js.map +3 -3
- package/dist/esm/components/toggle-button.d.ts +52 -0
- package/dist/esm/components/toggle-button.d.ts.map +1 -1
- package/dist/esm/components/toggle-button.js +1 -1
- package/dist/esm/components/toggle-button.js.map +3 -3
- package/dist/esm/components/toggle-icon-button.d.ts +84 -2
- package/dist/esm/components/toggle-icon-button.d.ts.map +1 -1
- package/dist/esm/components/toggle-icon-button.js +1 -1
- package/dist/esm/components/toggle-icon-button.js.map +3 -3
- package/dist/esm/hooks/index.d.ts +2 -0
- package/dist/esm/hooks/index.d.ts.map +1 -0
- package/dist/esm/hooks/index.js +2 -0
- package/dist/esm/hooks/index.js.map +7 -0
- package/dist/esm/hooks/use-live-announcer.d.ts +6 -0
- package/dist/esm/hooks/use-live-announcer.d.ts.map +1 -0
- package/dist/esm/hooks/use-live-announcer.js +10 -0
- package/dist/esm/hooks/use-live-announcer.js.map +7 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/props/weight.prop.d.ts +1 -1
- package/dist/esm/props/weight.prop.js +1 -1
- package/dist/esm/props/weight.prop.js.map +2 -2
- package/layout/components.css +1 -0
- package/layout.css +1 -0
- package/package.json +2 -1
- package/src/components/_internal/base-button.css +483 -284
- package/src/components/_internal/base-button.props.ts +87 -0
- package/src/components/_internal/base-button.tsx +127 -10
- package/src/components/_internal/base-card.css +866 -83
- package/src/components/_internal/base-checkbox.css +252 -52
- package/src/components/_internal/base-checkbox.props.ts +4 -1
- package/src/components/_internal/base-dialog.css +39 -8
- package/src/components/_internal/base-menu.css +55 -32
- package/src/components/_internal/base-menu.props.ts +10 -0
- package/src/components/_internal/base-radio.css +222 -52
- package/src/components/_internal/base-radio.props.ts +4 -1
- package/src/components/_internal/base-tab-list.css +16 -0
- package/src/components/accordion.css +465 -62
- package/src/components/accordion.props.tsx +6 -0
- package/src/components/accordion.tsx +54 -7
- package/src/components/alert-dialog.props.tsx +22 -2
- package/src/components/alert-dialog.tsx +94 -3
- package/src/components/avatar.css +294 -152
- package/src/components/avatar.props.tsx +7 -1
- package/src/components/avatar.tsx +12 -2
- package/src/components/badge.css +160 -138
- package/src/components/badge.props.tsx +10 -3
- package/src/components/badge.tsx +71 -9
- package/src/components/button.css +88 -0
- package/src/components/button.props.tsx +17 -0
- package/src/components/button.tsx +107 -5
- package/src/components/callout.css +122 -35
- package/src/components/callout.props.tsx +7 -1
- package/src/components/callout.tsx +32 -9
- package/src/components/card.css +0 -597
- package/src/components/card.props.tsx +3 -0
- package/src/components/card.tsx +4 -2
- package/src/components/checkbox-cards.css +27 -104
- package/src/components/checkbox-cards.props.tsx +2 -2
- package/src/components/checkbox-cards.tsx +21 -3
- package/src/components/checkbox.tsx +2 -0
- package/src/components/code.css +1 -1
- package/src/components/code.tsx +1 -1
- package/src/components/container.css +1 -0
- package/src/components/context-menu.tsx +54 -12
- package/src/components/dialog.props.tsx +3 -0
- package/src/components/dialog.tsx +93 -3
- package/src/components/dropdown-menu.tsx +49 -12
- package/src/components/icon-button.css +73 -4
- package/src/components/icon-button.tsx +125 -19
- package/src/components/image.css +160 -91
- package/src/components/image.props.ts +152 -15
- package/src/components/image.tsx +290 -247
- package/src/components/kbd.css +23 -44
- package/src/components/progress.css +130 -149
- package/src/components/progress.props.tsx +2 -2
- package/src/components/radio-cards.css +23 -113
- package/src/components/radio-cards.props.tsx +2 -2
- package/src/components/radio-cards.tsx +45 -18
- package/src/components/radio.tsx +4 -3
- package/src/components/scroll-area.css +1 -1
- package/src/components/segmented-control.css +83 -64
- package/src/components/segmented-control.props.tsx +3 -3
- package/src/components/select.css +502 -224
- package/src/components/select.props.tsx +8 -0
- package/src/components/select.tsx +45 -2
- package/src/components/sidebar.css +17 -6
- package/src/components/sidebar.tsx +61 -5
- package/src/components/slider.css +228 -88
- package/src/components/slider.props.tsx +6 -2
- package/src/components/slider.tsx +201 -24
- package/src/components/spinner.css +12 -0
- package/src/components/switch.css +135 -216
- package/src/components/switch.props.tsx +16 -4
- package/src/components/switch.tsx +5 -3
- package/src/components/tab-nav.tsx +6 -3
- package/src/components/tabs.tsx +2 -0
- package/src/components/text-area.css +222 -140
- package/src/components/text-area.props.tsx +18 -1
- package/src/components/text-area.tsx +58 -7
- package/src/components/text-field.css +214 -131
- package/src/components/text-field.props.tsx +17 -0
- package/src/components/text-field.tsx +79 -28
- package/src/components/theme.props.tsx +12 -0
- package/src/components/theme.tsx +31 -1
- package/src/components/toggle-button.tsx +102 -3
- package/src/components/toggle-icon-button.tsx +150 -7
- package/src/components/tooltip.css +3 -3
- package/src/hooks/index.ts +1 -0
- package/src/hooks/use-live-announcer.ts +52 -0
- package/src/index.ts +1 -0
- package/src/props/weight.prop.ts +1 -1
- package/src/styles/fonts.css +27 -13
- package/src/styles/index.css +1 -1
- package/src/styles/tokens/base.css +2 -0
- package/src/styles/tokens/blur.css +32 -0
- package/src/styles/tokens/color.css +9 -9
- package/src/styles/tokens/constants.css +88 -140
- package/src/styles/tokens/index.css +2 -0
- package/src/styles/tokens/opacity.css +32 -0
- package/src/styles/tokens/radius.css +6 -10
- package/src/styles/tokens/shadow.css +25 -25
- package/src/styles/tokens/transition.css +49 -13
- package/src/styles/tokens/typography.css +7 -3
- package/src/styles/utilities/font-weight.css +16 -0
- package/styles.css +10689 -8708
- package/tokens/base.css +127 -49
- package/tokens.css +158 -114
- package/utilities.css +72 -0
|
@@ -52,11 +52,34 @@ interface DropdownMenuContentProps
|
|
|
52
52
|
const DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, DropdownMenuContentProps>(
|
|
53
53
|
(props, forwardedRef) => {
|
|
54
54
|
const themeContext = useThemeContext();
|
|
55
|
+
|
|
56
|
+
// Show deprecation warning for panelBackground when used
|
|
57
|
+
React.useEffect(() => {
|
|
58
|
+
if (props.panelBackground !== undefined) {
|
|
59
|
+
console.warn(
|
|
60
|
+
'Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.',
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
}, [props.panelBackground]);
|
|
64
|
+
|
|
65
|
+
// Material takes precedence over panelBackground
|
|
66
|
+
const effectiveMaterial =
|
|
67
|
+
props.material ?? props.panelBackground ?? themeContext.panelBackground;
|
|
68
|
+
|
|
69
|
+
// Memoize theme context values to prevent unnecessary re-renders
|
|
70
|
+
const memoizedThemeContext = React.useMemo(
|
|
71
|
+
() => ({
|
|
72
|
+
material: effectiveMaterial,
|
|
73
|
+
accentColor: themeContext.accentColor,
|
|
74
|
+
}),
|
|
75
|
+
[effectiveMaterial, themeContext.accentColor],
|
|
76
|
+
);
|
|
77
|
+
|
|
55
78
|
const {
|
|
56
79
|
size = dropdownMenuContentPropDefs.size.default,
|
|
57
80
|
variant = dropdownMenuContentPropDefs.variant.default,
|
|
58
81
|
highContrast = dropdownMenuContentPropDefs.highContrast.default,
|
|
59
|
-
|
|
82
|
+
material = memoizedThemeContext.material,
|
|
60
83
|
} = props;
|
|
61
84
|
const {
|
|
62
85
|
className,
|
|
@@ -64,16 +87,23 @@ const DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, Dropdow
|
|
|
64
87
|
color,
|
|
65
88
|
container,
|
|
66
89
|
forceMount,
|
|
67
|
-
|
|
90
|
+
material: _,
|
|
91
|
+
panelBackground: __,
|
|
68
92
|
...contentProps
|
|
69
93
|
} = extractProps(props, dropdownMenuContentPropDefs);
|
|
70
|
-
|
|
94
|
+
|
|
95
|
+
// Memoize color resolution to prevent unnecessary re-renders
|
|
96
|
+
const resolvedColor = React.useMemo(
|
|
97
|
+
() => color || memoizedThemeContext.accentColor,
|
|
98
|
+
[color, memoizedThemeContext.accentColor],
|
|
99
|
+
);
|
|
71
100
|
return (
|
|
72
101
|
<DropdownMenuPrimitive.Portal container={container} forceMount={forceMount}>
|
|
73
102
|
<Theme asChild>
|
|
74
103
|
<DropdownMenuPrimitive.Content
|
|
75
104
|
data-accent-color={resolvedColor}
|
|
76
|
-
data-
|
|
105
|
+
data-material={material}
|
|
106
|
+
data-panel-background={material}
|
|
77
107
|
align="start"
|
|
78
108
|
sideOffset={4}
|
|
79
109
|
collisionPadding={10}
|
|
@@ -91,8 +121,8 @@ const DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, Dropdow
|
|
|
91
121
|
<div className={classNames('rt-BaseMenuViewport', 'rt-DropdownMenuViewport')}>
|
|
92
122
|
<DropdownMenuContentContext.Provider
|
|
93
123
|
value={React.useMemo(
|
|
94
|
-
() => ({ size, variant, color: resolvedColor, highContrast,
|
|
95
|
-
[size, variant, resolvedColor, highContrast,
|
|
124
|
+
() => ({ size, variant, color: resolvedColor, highContrast, material }),
|
|
125
|
+
[size, variant, resolvedColor, highContrast, material],
|
|
96
126
|
)}
|
|
97
127
|
>
|
|
98
128
|
{children}
|
|
@@ -307,25 +337,31 @@ DropdownMenuSubTrigger.displayName = 'DropdownMenu.SubTrigger';
|
|
|
307
337
|
|
|
308
338
|
type DropdownMenuSubContentElement = React.ElementRef<typeof DropdownMenuPrimitive.SubContent>;
|
|
309
339
|
interface DropdownMenuSubContentProps
|
|
310
|
-
extends ComponentPropsWithout<typeof DropdownMenuPrimitive.SubContent, RemovedProps
|
|
340
|
+
extends ComponentPropsWithout<typeof DropdownMenuPrimitive.SubContent, RemovedProps>,
|
|
341
|
+
DropdownMenuContentContextValue {
|
|
311
342
|
container?: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Portal>['container'];
|
|
312
343
|
}
|
|
313
344
|
const DropdownMenuSubContent = React.forwardRef<
|
|
314
345
|
DropdownMenuSubContentElement,
|
|
315
346
|
DropdownMenuSubContentProps
|
|
316
347
|
>((props, forwardedRef) => {
|
|
317
|
-
|
|
318
|
-
|
|
348
|
+
// Memoize context consumption to prevent unnecessary re-renders
|
|
349
|
+
const contextValue = React.useContext(DropdownMenuContentContext);
|
|
350
|
+
const { size, variant, color, highContrast, material } = React.useMemo(
|
|
351
|
+
() => contextValue,
|
|
352
|
+
[contextValue],
|
|
319
353
|
);
|
|
354
|
+
|
|
320
355
|
const {
|
|
321
356
|
className,
|
|
322
357
|
children,
|
|
323
358
|
container,
|
|
324
359
|
forceMount,
|
|
325
|
-
|
|
360
|
+
material: _,
|
|
361
|
+
panelBackground: __,
|
|
326
362
|
...subContentProps
|
|
327
363
|
} = extractProps(
|
|
328
|
-
{ size, variant, color, highContrast,
|
|
364
|
+
{ size, variant, color, highContrast, material, ...props },
|
|
329
365
|
dropdownMenuContentPropDefs,
|
|
330
366
|
);
|
|
331
367
|
return (
|
|
@@ -333,7 +369,8 @@ const DropdownMenuSubContent = React.forwardRef<
|
|
|
333
369
|
<Theme asChild>
|
|
334
370
|
<DropdownMenuPrimitive.SubContent
|
|
335
371
|
data-accent-color={color}
|
|
336
|
-
data-
|
|
372
|
+
data-material={material}
|
|
373
|
+
data-panel-background={material}
|
|
337
374
|
alignOffset={-Number(size) * 4}
|
|
338
375
|
// Side offset accounts for the outer solid box-shadow
|
|
339
376
|
sideOffset={1}
|
|
@@ -1,11 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IconButton Component Styles
|
|
3
|
+
*
|
|
4
|
+
* This file contains the core styling for the IconButton component, which
|
|
5
|
+
* extends the base button with specialized behavior for icon-only interactions.
|
|
6
|
+
* Icon buttons maintain square aspect ratios and provide consistent icon sizing
|
|
7
|
+
* across all variants and sizes.
|
|
8
|
+
*
|
|
9
|
+
* Key features:
|
|
10
|
+
* - Square aspect ratios for consistent visual alignment
|
|
11
|
+
* - Automatic icon sizing based on button size
|
|
12
|
+
* - Specialized flush behavior for ghost variants
|
|
13
|
+
* - Responsive design with mobile-first approach
|
|
14
|
+
* - Seamless text integration with negative margins
|
|
15
|
+
*/
|
|
16
|
+
|
|
1
17
|
@import './_internal/base-button.css';
|
|
2
18
|
|
|
3
19
|
/***************************************************************************************************
|
|
4
20
|
* *
|
|
5
21
|
* SIZES *
|
|
6
22
|
* *
|
|
23
|
+
* Icon button sizes maintain square aspect ratios for consistent visual alignment.
|
|
24
|
+
* Each size corresponds to the same dimensions as regular buttons but ensures
|
|
25
|
+
* perfect squares for optimal icon display and touch targets.
|
|
26
|
+
* *
|
|
7
27
|
***************************************************************************************************/
|
|
8
28
|
|
|
29
|
+
/*
|
|
30
|
+
* Base icon button styling that ensures square aspect ratios
|
|
31
|
+
* Uses the same height as base buttons but sets width to match
|
|
32
|
+
*/
|
|
9
33
|
.rt-IconButton {
|
|
10
34
|
height: var(--base-button-height);
|
|
11
35
|
width: var(--base-button-height);
|
|
@@ -13,28 +37,54 @@
|
|
|
13
37
|
|
|
14
38
|
@breakpoints {
|
|
15
39
|
.rt-IconButton {
|
|
40
|
+
/*
|
|
41
|
+
* Size 1: Compact (24px x 24px)
|
|
42
|
+
* Designed for toolbars and dense interfaces
|
|
43
|
+
*/
|
|
16
44
|
&:where(.rt-r-size-1) {
|
|
45
|
+
/*
|
|
46
|
+
* Icon sizing for size 1
|
|
47
|
+
* Icons are automatically sized to match the button's scale
|
|
48
|
+
*/
|
|
17
49
|
/* stylelint-disable-next-line selector-max-type */
|
|
18
50
|
& :where(svg) {
|
|
19
51
|
width: var(--content-icon-size-1);
|
|
20
52
|
height: var(--content-icon-size-1);
|
|
21
53
|
}
|
|
22
54
|
}
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
* Size 2: Standard (32px x 32px)
|
|
58
|
+
* Default size for most interface contexts
|
|
59
|
+
*/
|
|
23
60
|
&:where(.rt-r-size-2) {
|
|
61
|
+
/* Icon sizing for size 2 */
|
|
24
62
|
/* stylelint-disable-next-line selector-max-type */
|
|
25
63
|
& :where(svg) {
|
|
26
64
|
width: var(--content-icon-size-2);
|
|
27
65
|
height: var(--content-icon-size-2);
|
|
28
66
|
}
|
|
29
67
|
}
|
|
68
|
+
|
|
69
|
+
/*
|
|
70
|
+
* Size 3: Large (40px x 40px)
|
|
71
|
+
* Recommended for important actions and mobile touch targets
|
|
72
|
+
*/
|
|
30
73
|
&:where(.rt-r-size-3) {
|
|
74
|
+
/* Icon sizing for size 3 */
|
|
31
75
|
/* stylelint-disable-next-line selector-max-type */
|
|
32
76
|
& :where(svg) {
|
|
33
77
|
width: var(--content-icon-size-3);
|
|
34
78
|
height: var(--content-icon-size-3);
|
|
35
79
|
}
|
|
36
80
|
}
|
|
81
|
+
|
|
82
|
+
/*
|
|
83
|
+
* Size 4: Extra Large (48px x 48px)
|
|
84
|
+
* Designed for hero sections and maximum visual impact
|
|
85
|
+
*/
|
|
37
86
|
&:where(.rt-r-size-4) {
|
|
87
|
+
/* Icon sizing for size 4 */
|
|
38
88
|
/* stylelint-disable-next-line selector-max-type */
|
|
39
89
|
& :where(svg) {
|
|
40
90
|
width: var(--content-icon-size-4);
|
|
@@ -43,27 +93,42 @@
|
|
|
43
93
|
}
|
|
44
94
|
}
|
|
45
95
|
|
|
96
|
+
/*
|
|
97
|
+
* Specialized flush behavior for ghost variant icon buttons
|
|
98
|
+
* This creates seamless text integration by using negative margins
|
|
99
|
+
* to compensate for the button's padding
|
|
100
|
+
*/
|
|
46
101
|
.rt-IconButton:where(.rt-variant-ghost) {
|
|
47
102
|
&:where([data-flush='true']) {
|
|
48
|
-
/*
|
|
49
|
-
|
|
103
|
+
/*
|
|
104
|
+
* Reset defined margin variables to avoid inheriting from higher components
|
|
105
|
+
* If a margin IS defined on the component itself, the utility class will win and reset it
|
|
106
|
+
*/
|
|
50
107
|
--margin-top: 0px;
|
|
51
108
|
--margin-right: 0px;
|
|
52
109
|
--margin-bottom: 0px;
|
|
53
110
|
--margin-left: 0px;
|
|
54
111
|
|
|
55
|
-
/*
|
|
112
|
+
/*
|
|
113
|
+
* Define overrides to incorporate negative margins using ghost padding
|
|
114
|
+
* This creates the seamless integration effect by pulling the button
|
|
115
|
+
* closer to surrounding text
|
|
116
|
+
*/
|
|
56
117
|
--margin-top-override: calc(var(--margin-top) - var(--icon-button-ghost-padding));
|
|
57
118
|
--margin-right-override: calc(var(--margin-right) - var(--icon-button-ghost-padding));
|
|
58
119
|
--margin-bottom-override: calc(var(--margin-bottom) - var(--icon-button-ghost-padding));
|
|
59
120
|
--margin-left-override: calc(var(--margin-left) - var(--icon-button-ghost-padding));
|
|
60
121
|
|
|
122
|
+
/* Apply the calculated negative margins */
|
|
61
123
|
margin-top: var(--margin-top-override);
|
|
62
124
|
margin-right: var(--margin-right-override);
|
|
63
125
|
margin-bottom: var(--margin-bottom-override);
|
|
64
126
|
margin-left: var(--margin-left-override);
|
|
65
127
|
|
|
66
|
-
/*
|
|
128
|
+
/*
|
|
129
|
+
* Reset the overrides on direct children
|
|
130
|
+
* This prevents the negative margins from affecting child elements
|
|
131
|
+
*/
|
|
67
132
|
:where(&) > * {
|
|
68
133
|
--margin-top-override: initial;
|
|
69
134
|
--margin-right-override: initial;
|
|
@@ -72,6 +137,10 @@
|
|
|
72
137
|
}
|
|
73
138
|
}
|
|
74
139
|
|
|
140
|
+
/*
|
|
141
|
+
* Ghost padding values for different sizes
|
|
142
|
+
* These determine the amount of negative margin applied in flush mode
|
|
143
|
+
*/
|
|
75
144
|
&:where(.rt-r-size-1) {
|
|
76
145
|
--icon-button-ghost-padding: var(--space-1);
|
|
77
146
|
}
|
|
@@ -2,55 +2,161 @@ import * as React from 'react';
|
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
|
|
4
4
|
import { BaseButton } from './_internal/base-button.js';
|
|
5
|
+
import { Tooltip } from './tooltip.js';
|
|
5
6
|
import type { BaseButtonProps } from './_internal/base-button.js';
|
|
6
7
|
|
|
7
8
|
type IconButtonElement = React.ElementRef<typeof BaseButton>;
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Required accessibility props for icon buttons
|
|
12
|
+
* Icon buttons must have an accessible name to meet WCAG guidelines
|
|
13
|
+
*
|
|
14
|
+
* Three ways to provide accessibility:
|
|
15
|
+
* 1. aria-label: Direct descriptive text
|
|
16
|
+
* 2. aria-labelledby: Reference to a label element
|
|
17
|
+
* 3. children: Visible text content (fallback)
|
|
18
|
+
*/
|
|
10
19
|
type AccessibilityProps =
|
|
11
20
|
| { 'aria-label': string; 'aria-labelledby'?: never }
|
|
12
21
|
| { 'aria-label'?: never; 'aria-labelledby': string }
|
|
13
22
|
| { 'aria-label'?: never; 'aria-labelledby'?: never; children: React.ReactNode };
|
|
14
23
|
|
|
15
|
-
|
|
16
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Tooltip configuration props that can be passed to IconButton
|
|
26
|
+
* These props are forwarded to the underlying Tooltip component
|
|
27
|
+
*/
|
|
28
|
+
interface IconButtonTooltipProps {
|
|
29
|
+
/** Content to display in the tooltip on hover/focus */
|
|
30
|
+
tooltip?: React.ReactNode;
|
|
31
|
+
/** Side of the button where the tooltip should appear */
|
|
32
|
+
tooltipSide?: 'top' | 'right' | 'bottom' | 'left';
|
|
33
|
+
/** Alignment of the tooltip relative to the button */
|
|
34
|
+
tooltipAlign?: 'start' | 'center' | 'end';
|
|
35
|
+
/** Delay before showing the tooltip (in milliseconds) */
|
|
36
|
+
tooltipDelayDuration?: number;
|
|
37
|
+
/** Whether to disable hoverable content behavior */
|
|
38
|
+
tooltipDisableHoverableContent?: boolean;
|
|
39
|
+
}
|
|
17
40
|
|
|
41
|
+
/**
|
|
42
|
+
* Core IconButton props excluding the 'as' prop for polymorphic behavior
|
|
43
|
+
* Combines BaseButton props with accessibility requirements and tooltip functionality
|
|
44
|
+
*/
|
|
45
|
+
type IconButtonOwnProps = Omit<BaseButtonProps, 'as'> & AccessibilityProps & IconButtonTooltipProps;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Polymorphic IconButton props that support rendering as different HTML elements
|
|
49
|
+
* @template C - The element type to render as (defaults to 'button')
|
|
50
|
+
*/
|
|
18
51
|
type IconButtonProps<C extends React.ElementType = 'button'> = IconButtonOwnProps & {
|
|
52
|
+
/** Element type to render as (e.g., 'a', 'span', etc.) */
|
|
19
53
|
as?: C;
|
|
20
54
|
} & Omit<React.ComponentPropsWithoutRef<C>, keyof IconButtonOwnProps>;
|
|
21
55
|
|
|
56
|
+
/**
|
|
57
|
+
* IconButton component type that supports polymorphic rendering
|
|
58
|
+
* @template C - The element type to render as
|
|
59
|
+
*/
|
|
22
60
|
type IconButtonComponent = <C extends React.ElementType = 'button'>(
|
|
23
61
|
props: IconButtonProps<C> & { ref?: React.ForwardedRef<IconButtonElement> },
|
|
24
62
|
) => React.ReactElement | null;
|
|
25
63
|
|
|
64
|
+
/**
|
|
65
|
+
* IconButton component for compact, accessible icon-only interactions
|
|
66
|
+
*
|
|
67
|
+
* The IconButton component extends Button with specialized behavior for visual symbols.
|
|
68
|
+
* It enforces accessibility requirements, provides automatic square sizing, and includes
|
|
69
|
+
* built-in tooltip integration. Icon buttons are essential for space-efficient interfaces
|
|
70
|
+
* while maintaining accessibility compliance.
|
|
71
|
+
*
|
|
72
|
+
* Key features:
|
|
73
|
+
* - Enforced accessibility requirements (aria-label, aria-labelledby, or children)
|
|
74
|
+
* - Automatic square aspect ratios for consistent visual alignment
|
|
75
|
+
* - Built-in tooltip support for context and guidance
|
|
76
|
+
* - Same variant and size system as Button for consistency
|
|
77
|
+
* - Runtime validation for accessibility compliance
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```tsx
|
|
81
|
+
* // Basic icon button with aria-label
|
|
82
|
+
* <IconButton aria-label="Settings">
|
|
83
|
+
* <Settings />
|
|
84
|
+
* </IconButton>
|
|
85
|
+
*
|
|
86
|
+
* // Icon button with tooltip
|
|
87
|
+
* <IconButton aria-label="Save" tooltip="Save your progress">
|
|
88
|
+
* <Save />
|
|
89
|
+
* </IconButton>
|
|
90
|
+
*
|
|
91
|
+
* // Icon button with aria-labelledby
|
|
92
|
+
* <IconButton aria-labelledby="settings-label">
|
|
93
|
+
* <Settings />
|
|
94
|
+
* </IconButton>
|
|
95
|
+
* <span id="settings-label">Open settings panel</span>
|
|
96
|
+
*
|
|
97
|
+
* // Icon button with visible text (fallback)
|
|
98
|
+
* <IconButton>
|
|
99
|
+
* <Settings />
|
|
100
|
+
* Settings
|
|
101
|
+
* </IconButton>
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
26
104
|
const IconButton = React.forwardRef(
|
|
27
105
|
(
|
|
28
|
-
{
|
|
106
|
+
{
|
|
107
|
+
className,
|
|
108
|
+
tooltip,
|
|
109
|
+
tooltipSide = 'top',
|
|
110
|
+
tooltipAlign = 'center',
|
|
111
|
+
tooltipDelayDuration,
|
|
112
|
+
tooltipDisableHoverableContent,
|
|
113
|
+
...props
|
|
114
|
+
}: IconButtonProps,
|
|
29
115
|
forwardedRef: React.ForwardedRef<IconButtonElement>,
|
|
30
116
|
) => {
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
117
|
+
// Runtime accessibility validation to ensure WCAG compliance
|
|
118
|
+
// This helps catch accessibility issues during development
|
|
119
|
+
const hasAriaLabel = 'aria-label' in props && props['aria-label'];
|
|
120
|
+
const hasAriaLabelledBy = 'aria-labelledby' in props && props['aria-labelledby'];
|
|
121
|
+
const hasChildren = 'children' in props && props.children;
|
|
122
|
+
|
|
123
|
+
// Throw descriptive error if no accessible name is provided
|
|
124
|
+
if (!hasAriaLabel && !hasAriaLabelledBy && !hasChildren) {
|
|
125
|
+
throw new Error(
|
|
126
|
+
'IconButton: Icon buttons must have an accessible name. Please provide either:' +
|
|
127
|
+
'\n- aria-label prop with descriptive text' +
|
|
128
|
+
'\n- aria-labelledby prop referencing a label element' +
|
|
129
|
+
'\n- or visible text children',
|
|
130
|
+
);
|
|
45
131
|
}
|
|
46
132
|
|
|
47
|
-
|
|
133
|
+
// Create the base icon button element with accessibility props
|
|
134
|
+
const iconButton = (
|
|
48
135
|
<BaseButton
|
|
49
136
|
{...props}
|
|
50
137
|
ref={forwardedRef}
|
|
51
138
|
className={classNames('rt-IconButton', className)}
|
|
52
139
|
/>
|
|
53
140
|
);
|
|
141
|
+
|
|
142
|
+
// If no tooltip is provided, return the icon button as-is for better performance
|
|
143
|
+
if (!tooltip) {
|
|
144
|
+
return iconButton;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Wrap with Tooltip when tooltip content is provided
|
|
148
|
+
// This creates a compound component that handles both button and tooltip functionality
|
|
149
|
+
return (
|
|
150
|
+
<Tooltip
|
|
151
|
+
content={tooltip}
|
|
152
|
+
side={tooltipSide}
|
|
153
|
+
align={tooltipAlign}
|
|
154
|
+
delayDuration={tooltipDelayDuration}
|
|
155
|
+
disableHoverableContent={tooltipDisableHoverableContent}
|
|
156
|
+
>
|
|
157
|
+
{iconButton}
|
|
158
|
+
</Tooltip>
|
|
159
|
+
);
|
|
54
160
|
},
|
|
55
161
|
) as IconButtonComponent & { displayName?: string };
|
|
56
162
|
|