@kushagradhawan/kookie-ui 0.1.28 → 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 +4742 -2680
- 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 +22 -0
- package/dist/cjs/components/accordion.d.ts.map +1 -0
- package/dist/cjs/components/accordion.js +2 -0
- package/dist/cjs/components/accordion.js.map +7 -0
- package/dist/cjs/components/accordion.props.d.ts +97 -0
- package/dist/cjs/components/accordion.props.d.ts.map +1 -0
- package/dist/cjs/components/accordion.props.js +2 -0
- package/dist/cjs/components/accordion.props.js.map +7 -0
- 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 +6 -1
- 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/index.d.ts +1 -0
- package/dist/cjs/components/index.d.ts.map +1 -1
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/index.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/helpers/extract-margin-props.d.ts +7 -7
- 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 +22 -0
- package/dist/esm/components/accordion.d.ts.map +1 -0
- package/dist/esm/components/accordion.js +2 -0
- package/dist/esm/components/accordion.js.map +7 -0
- package/dist/esm/components/accordion.props.d.ts +97 -0
- package/dist/esm/components/accordion.props.d.ts.map +1 -0
- package/dist/esm/components/accordion.props.js +2 -0
- package/dist/esm/components/accordion.props.js.map +7 -0
- 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 +6 -1
- 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/index.d.ts +1 -0
- package/dist/esm/components/index.d.ts.map +1 -1
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/index.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/helpers/extract-margin-props.d.ts +7 -7
- 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-sidebar-menu.css +223 -0
- package/src/components/_internal/base-sidebar.css +141 -0
- package/src/components/_internal/base-tab-list.css +16 -0
- package/src/components/accordion.css +657 -0
- package/src/components/accordion.props.tsx +90 -0
- package/src/components/accordion.tsx +209 -0
- 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/index.css +1 -0
- package/src/components/index.tsx +1 -0
- 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 +186 -630
- 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 +11129 -8945
- package/tokens/base.css +127 -49
- package/tokens.css +158 -114
- package/utilities.css +72 -0
package/src/components/image.tsx
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
1
|
import * as React from 'react';
|
|
4
2
|
import classNames from 'classnames';
|
|
5
3
|
|
|
@@ -10,7 +8,7 @@ import { widthPropDefs } from '../props/width.props.js';
|
|
|
10
8
|
import { heightPropDefs } from '../props/height.props.js';
|
|
11
9
|
import { layoutPropDefs } from '../props/layout.props.js';
|
|
12
10
|
import { Skeleton } from './skeleton.js';
|
|
13
|
-
import {
|
|
11
|
+
import { Slot } from './slot.js';
|
|
14
12
|
|
|
15
13
|
import type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';
|
|
16
14
|
import type { MarginProps } from '../props/margin.props.js';
|
|
@@ -20,35 +18,81 @@ import type { LayoutProps } from '../props/layout.props.js';
|
|
|
20
18
|
import type { GetPropDefTypes } from '../props/prop-def.js';
|
|
21
19
|
|
|
22
20
|
type ImageElement = React.ElementRef<'img'>;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Core Image props that extend the base image prop definitions
|
|
24
|
+
* These props provide enhanced functionality beyond standard HTML img attributes
|
|
25
|
+
*/
|
|
23
26
|
type ImageOwnProps = GetPropDefTypes<typeof imagePropDefs> & {
|
|
27
|
+
/**
|
|
28
|
+
* Native loading behavior for the image
|
|
29
|
+
* 'lazy' defers loading until the image is near the viewport
|
|
30
|
+
* 'eager' loads the image immediately
|
|
31
|
+
*/
|
|
24
32
|
loading?: 'eager' | 'lazy';
|
|
25
33
|
/**
|
|
26
|
-
* Placeholder image URL to show while the main image is loading
|
|
27
|
-
*
|
|
34
|
+
* Placeholder image URL to show while the main image is loading
|
|
35
|
+
*
|
|
36
|
+
* Best practices:
|
|
37
|
+
* - Use a low-quality/blurred version of the main image
|
|
38
|
+
* - Keep file size small (under 10KB recommended)
|
|
39
|
+
* - Use same aspect ratio as main image
|
|
40
|
+
* - Consider using base64 data URLs for inline placeholders
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```tsx
|
|
44
|
+
* <Image
|
|
45
|
+
* src="/high-res-image.jpg"
|
|
46
|
+
* placeholder="/low-res-placeholder.jpg"
|
|
47
|
+
* alt="Product photo"
|
|
48
|
+
* />
|
|
49
|
+
* ```
|
|
28
50
|
*/
|
|
29
51
|
placeholder?: string;
|
|
30
52
|
/**
|
|
31
|
-
* Shows a skeleton placeholder while loading instead of a blank space
|
|
53
|
+
* Shows a skeleton placeholder while loading instead of a blank space
|
|
54
|
+
*
|
|
55
|
+
* Use this when:
|
|
56
|
+
* - You don't have a placeholder image
|
|
57
|
+
* - You want consistent loading states across your interface
|
|
58
|
+
* - The image is part of a content layout that needs stable dimensions
|
|
32
59
|
*/
|
|
33
60
|
showSkeleton?: boolean;
|
|
34
61
|
/**
|
|
35
|
-
* Whether the image should fade in when loaded
|
|
62
|
+
* Whether the image should fade in when loaded
|
|
63
|
+
*
|
|
64
|
+
* Set to false for:
|
|
65
|
+
* - Background images where immediate visibility is important
|
|
66
|
+
* - Images that need to appear instantly for UX reasons
|
|
67
|
+
* - When you're implementing custom loading animations
|
|
36
68
|
*/
|
|
37
69
|
fadeIn?: boolean;
|
|
38
70
|
/**
|
|
39
|
-
* Callback fired when the image successfully loads
|
|
71
|
+
* Callback fired when the image successfully loads
|
|
72
|
+
*
|
|
73
|
+
* Use this to:
|
|
74
|
+
* - Track image loading performance
|
|
75
|
+
* - Trigger layout adjustments after load
|
|
76
|
+
* - Implement custom loading state management
|
|
40
77
|
*/
|
|
41
78
|
onLoad?: (event: React.SyntheticEvent<HTMLImageElement>) => void;
|
|
42
79
|
/**
|
|
43
|
-
* Callback fired when the image fails to load
|
|
80
|
+
* Callback fired when the image fails to load
|
|
81
|
+
*
|
|
82
|
+
* Use this to:
|
|
83
|
+
* - Log errors for monitoring
|
|
84
|
+
* - Show fallback content
|
|
85
|
+
* - Implement retry logic
|
|
44
86
|
*/
|
|
45
87
|
onError?: (event: React.SyntheticEvent<HTMLImageElement>) => void;
|
|
46
|
-
/**
|
|
47
|
-
* Style object to apply to the wrapper container. Useful for overriding display, width, height, etc.
|
|
48
|
-
*/
|
|
49
|
-
wrapperStyle?: React.CSSProperties;
|
|
50
88
|
};
|
|
51
89
|
|
|
90
|
+
/**
|
|
91
|
+
* Complete Image component props interface
|
|
92
|
+
*
|
|
93
|
+
* Combines HTML img attributes with design system props and enhanced functionality.
|
|
94
|
+
* Excludes conflicting props like 'color', 'width', 'height' that are handled by the design system.
|
|
95
|
+
*/
|
|
52
96
|
interface ImageProps
|
|
53
97
|
extends ComponentPropsWithout<'img', RemovedProps | 'color' | 'width' | 'height' | 'alt'>,
|
|
54
98
|
MarginProps,
|
|
@@ -57,31 +101,108 @@ interface ImageProps
|
|
|
57
101
|
LayoutProps,
|
|
58
102
|
ImageOwnProps {
|
|
59
103
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
104
|
+
* Alternative text for the image
|
|
105
|
+
*
|
|
106
|
+
* Required for accessibility when not using asChild pattern.
|
|
107
|
+
* Describes the image content for screen readers and when images fail to load.
|
|
108
|
+
*
|
|
109
|
+
* Guidelines:
|
|
110
|
+
* - Be descriptive but concise
|
|
111
|
+
* - Don't include "image of" or "picture of"
|
|
112
|
+
* - Use empty string ("") for purely decorative images
|
|
113
|
+
* - Describe the content and context, not just what you see
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```tsx
|
|
117
|
+
* // Good alt text
|
|
118
|
+
* <Image src="/chart.png" alt="Sales increased 25% from Q1 to Q2" />
|
|
119
|
+
*
|
|
120
|
+
* // Decorative image
|
|
121
|
+
* <Image src="/decoration.png" alt="" />
|
|
122
|
+
*
|
|
123
|
+
* // Avoid generic descriptions
|
|
124
|
+
* <Image src="/photo.jpg" alt="A photo" /> // ❌ Too generic
|
|
125
|
+
* <Image src="/photo.jpg" alt="Team celebrating project launch" /> // ✅ Descriptive
|
|
126
|
+
* ```
|
|
62
127
|
*/
|
|
63
128
|
alt: string;
|
|
64
129
|
}
|
|
65
130
|
|
|
131
|
+
/**
|
|
132
|
+
* Image component for displaying images with enhanced loading states and accessibility
|
|
133
|
+
*
|
|
134
|
+
* The Image component extends the standard HTML img element with advanced features
|
|
135
|
+
* including placeholder images, skeleton loading states, fade-in animations, and
|
|
136
|
+
* comprehensive accessibility support. It integrates seamlessly with the design
|
|
137
|
+
* system's layout, spacing, and theming capabilities.
|
|
138
|
+
*
|
|
139
|
+
* Key features:
|
|
140
|
+
* - Progressive loading with placeholder and skeleton states
|
|
141
|
+
* - Fade-in animations with reduced motion support
|
|
142
|
+
* - Comprehensive accessibility with ARIA attributes
|
|
143
|
+
* - Object-fit control for responsive image scaling
|
|
144
|
+
* - Caption support for additional context
|
|
145
|
+
* - AsChild pattern for flexible composition
|
|
146
|
+
* - Error handling with fallback states
|
|
147
|
+
* - Performance optimizations for cached images
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* ```tsx
|
|
151
|
+
* // Basic usage
|
|
152
|
+
* <Image src="/photo.jpg" alt="Team photo" />
|
|
153
|
+
*
|
|
154
|
+
* // With placeholder and skeleton
|
|
155
|
+
* <Image
|
|
156
|
+
* src="/high-res.jpg"
|
|
157
|
+
* placeholder="/low-res.jpg"
|
|
158
|
+
* showSkeleton
|
|
159
|
+
* alt="Product showcase"
|
|
160
|
+
* />
|
|
161
|
+
*
|
|
162
|
+
* // With caption and custom fit
|
|
163
|
+
* <Image
|
|
164
|
+
* src="/chart.png"
|
|
165
|
+
* alt="Sales data visualization"
|
|
166
|
+
* caption="Q3 2024 Sales Performance"
|
|
167
|
+
* fit="contain"
|
|
168
|
+
* width="400px"
|
|
169
|
+
* height="300px"
|
|
170
|
+
* />
|
|
171
|
+
*
|
|
172
|
+
* // As clickable element
|
|
173
|
+
* <Image
|
|
174
|
+
* asChild
|
|
175
|
+
* src="/thumbnail.jpg"
|
|
176
|
+
* alt="View full gallery"
|
|
177
|
+
* >
|
|
178
|
+
* <a href="/gallery">
|
|
179
|
+
* View Gallery
|
|
180
|
+
* </a>
|
|
181
|
+
* </Image>
|
|
182
|
+
* ```
|
|
183
|
+
*/
|
|
66
184
|
const Image = React.forwardRef<ImageElement, ImageProps>((props, forwardedRef) => {
|
|
67
|
-
|
|
185
|
+
// Extract and organize props for different purposes
|
|
68
186
|
const {
|
|
69
187
|
asChild,
|
|
70
188
|
className,
|
|
71
|
-
radius,
|
|
72
189
|
style,
|
|
73
|
-
loading = 'lazy',
|
|
190
|
+
loading = 'lazy', // Default to lazy loading for performance
|
|
74
191
|
alt,
|
|
75
192
|
src,
|
|
76
193
|
placeholder,
|
|
77
|
-
showSkeleton = false,
|
|
78
|
-
fadeIn = true,
|
|
194
|
+
showSkeleton = false, // Default to no skeleton for simpler UX
|
|
195
|
+
fadeIn = true, // Default to fade-in for smooth loading experience
|
|
196
|
+
|
|
197
|
+
errorAriaLabel = 'Failed to load image',
|
|
198
|
+
radius,
|
|
199
|
+
caption,
|
|
79
200
|
onLoad: userOnLoad,
|
|
80
201
|
onError: userOnError,
|
|
81
202
|
children,
|
|
82
203
|
...wrapperProps
|
|
83
204
|
} = extractProps(
|
|
84
|
-
|
|
205
|
+
props,
|
|
85
206
|
imagePropDefs,
|
|
86
207
|
marginPropDefs,
|
|
87
208
|
widthPropDefs,
|
|
@@ -89,47 +210,52 @@ const Image = React.forwardRef<ImageElement, ImageProps>((props, forwardedRef) =
|
|
|
89
210
|
layoutPropDefs,
|
|
90
211
|
);
|
|
91
212
|
|
|
92
|
-
//
|
|
93
|
-
const [
|
|
94
|
-
const [imageError, setImageError] = React.useState(false);
|
|
213
|
+
// State management for loading, error, and placeholder states
|
|
214
|
+
const [loadingState, setLoadingState] = React.useState<'loading' | 'loaded' | 'error'>('loading');
|
|
95
215
|
const [showPlaceholder, setShowPlaceholder] = React.useState(!!placeholder);
|
|
96
|
-
|
|
97
|
-
// Ref to check if image is already loaded (for cached images)
|
|
98
216
|
const imgRef = React.useRef<HTMLImageElement>(null);
|
|
99
217
|
|
|
100
|
-
|
|
218
|
+
/**
|
|
219
|
+
* Handle successful image load
|
|
220
|
+
* Updates state and triggers user callback for load event
|
|
221
|
+
*/
|
|
101
222
|
const handleLoad = React.useCallback(
|
|
102
223
|
(event: React.SyntheticEvent<HTMLImageElement>) => {
|
|
103
|
-
|
|
104
|
-
setImageError(false);
|
|
224
|
+
setLoadingState('loaded');
|
|
105
225
|
setShowPlaceholder(false);
|
|
226
|
+
// Call user's onLoad handler if provided
|
|
106
227
|
userOnLoad?.(event);
|
|
107
228
|
},
|
|
108
229
|
[userOnLoad],
|
|
109
230
|
);
|
|
110
231
|
|
|
111
|
-
|
|
232
|
+
/**
|
|
233
|
+
* Handle image load error
|
|
234
|
+
* Updates state and triggers user callback for error event
|
|
235
|
+
*/
|
|
112
236
|
const handleError = React.useCallback(
|
|
113
237
|
(event: React.SyntheticEvent<HTMLImageElement>) => {
|
|
114
|
-
|
|
115
|
-
setImageError(true);
|
|
238
|
+
setLoadingState('error');
|
|
116
239
|
setShowPlaceholder(false);
|
|
240
|
+
// Call user's onError handler if provided
|
|
117
241
|
userOnError?.(event);
|
|
118
242
|
},
|
|
119
243
|
[userOnError],
|
|
120
244
|
);
|
|
121
245
|
|
|
122
|
-
|
|
246
|
+
/**
|
|
247
|
+
* Check if image is already loaded (optimization for cached images)
|
|
248
|
+
* This prevents unnecessary loading states for images that are already available
|
|
249
|
+
*/
|
|
123
250
|
React.useEffect(() => {
|
|
124
251
|
const img = imgRef.current;
|
|
125
252
|
if (img && img.complete && img.naturalWidth > 0) {
|
|
126
|
-
|
|
127
|
-
setImageError(false);
|
|
253
|
+
setLoadingState('loaded');
|
|
128
254
|
setShowPlaceholder(false);
|
|
129
255
|
}
|
|
130
256
|
}, [src]);
|
|
131
257
|
|
|
132
|
-
// Validate required props
|
|
258
|
+
// Validate required props and provide helpful development warnings
|
|
133
259
|
if (!src) {
|
|
134
260
|
console.warn('Image component: src prop is required');
|
|
135
261
|
return null;
|
|
@@ -139,200 +265,98 @@ const Image = React.forwardRef<ImageElement, ImageProps>((props, forwardedRef) =
|
|
|
139
265
|
console.warn('Image component: alt prop is required for accessibility when not using asChild');
|
|
140
266
|
}
|
|
141
267
|
|
|
142
|
-
//
|
|
268
|
+
// Derive loading state flags for cleaner conditional rendering
|
|
269
|
+
const isLoading = loadingState === 'loading';
|
|
270
|
+
const isError = loadingState === 'error';
|
|
271
|
+
const isLoaded = loadingState === 'loaded';
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* ARIA attributes for comprehensive accessibility support
|
|
275
|
+
* These attributes help screen readers understand the image state
|
|
276
|
+
*/
|
|
277
|
+
const ariaProps = {
|
|
278
|
+
'aria-busy': isLoading,
|
|
279
|
+
'aria-invalid': isError,
|
|
280
|
+
'aria-describedby': isError ? 'image-error' : undefined,
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Image styling that handles fade-in animation and responsive behavior
|
|
285
|
+
* Respects user's motion preferences through CSS media queries
|
|
286
|
+
*/
|
|
143
287
|
const imgStyle: React.CSSProperties = {
|
|
144
288
|
width: '100%',
|
|
145
289
|
height: '100%',
|
|
146
290
|
display: 'block',
|
|
147
|
-
|
|
291
|
+
// Conditional opacity for fade-in effect
|
|
292
|
+
opacity: fadeIn ? (isLoaded ? 1 : 0) : 1,
|
|
293
|
+
// Smooth transition for fade-in, respects reduced motion preferences
|
|
148
294
|
transition: fadeIn ? 'opacity 0.3s ease-out' : 'none',
|
|
149
|
-
...style, // Allow style overrides for the image
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
// Wrapper styles that get all the sizing and positioning
|
|
153
|
-
const wrapperStyleFinal: React.CSSProperties = {
|
|
154
|
-
position: 'relative',
|
|
155
|
-
display: 'block', // Use block instead of inline-block to work better with AspectRatio
|
|
156
|
-
...wrapperStyle,
|
|
157
295
|
};
|
|
158
296
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
) : null;
|
|
171
|
-
|
|
172
|
-
// Create placeholder image element
|
|
173
|
-
const placeholderElement =
|
|
174
|
-
placeholder && showPlaceholder ? (
|
|
175
|
-
<img
|
|
176
|
-
data-radius={radius}
|
|
297
|
+
/**
|
|
298
|
+
* Create the complete image content structure
|
|
299
|
+
* This includes the main image, placeholder, skeleton, caption, and error states
|
|
300
|
+
*/
|
|
301
|
+
const imageContent = (
|
|
302
|
+
<>
|
|
303
|
+
{/*
|
|
304
|
+
* Image container - handles layout and positioning
|
|
305
|
+
* Uses flex layout when caption is present for proper space distribution
|
|
306
|
+
*/}
|
|
307
|
+
<div
|
|
177
308
|
style={{
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
309
|
+
position: 'relative',
|
|
310
|
+
flex: caption ? '1 1 0%' : undefined,
|
|
311
|
+
height: caption ? undefined : '100%',
|
|
312
|
+
minHeight: 0, // Important for flex shrinking in constrained layouts
|
|
182
313
|
}}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
314
|
+
>
|
|
315
|
+
{/*
|
|
316
|
+
* Error message for screen readers
|
|
317
|
+
* Hidden visually but announced by assistive technology
|
|
318
|
+
*/}
|
|
319
|
+
{isError && (
|
|
320
|
+
<div id="image-error" className="rt-sr-only" aria-live="polite">
|
|
321
|
+
{errorAriaLabel}
|
|
322
|
+
</div>
|
|
323
|
+
)}
|
|
188
324
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
325
|
+
{/*
|
|
326
|
+
* Skeleton placeholder during loading
|
|
327
|
+
* Provides visual feedback and prevents layout shift
|
|
328
|
+
*/}
|
|
329
|
+
{showSkeleton && isLoading && (
|
|
330
|
+
<Skeleton width="100%" height="100%" style={{ position: 'absolute', inset: 0 }} />
|
|
331
|
+
)}
|
|
192
332
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
<img
|
|
213
|
-
data-radius={radius}
|
|
214
|
-
loading={loading}
|
|
215
|
-
style={{
|
|
216
|
-
position: 'absolute',
|
|
217
|
-
top: '0',
|
|
218
|
-
left: '0',
|
|
219
|
-
width: '105%',
|
|
220
|
-
height: '105%',
|
|
221
|
-
transform: 'translate(-2.5%, -2.5%)',
|
|
222
|
-
filter: 'blur(16px) saturate(1.5)',
|
|
223
|
-
opacity: 0.5,
|
|
224
|
-
zIndex: -1,
|
|
225
|
-
}}
|
|
226
|
-
className={classNames('rt-reset', 'rt-Image', 'rt-Image--blur-bg', className)}
|
|
227
|
-
alt=""
|
|
228
|
-
src={src}
|
|
229
|
-
/>
|
|
230
|
-
{/* Foreground image */}
|
|
231
|
-
<img
|
|
232
|
-
data-radius={radius}
|
|
233
|
-
loading={loading}
|
|
234
|
-
style={imgStyle}
|
|
235
|
-
className={classNames('rt-reset', 'rt-Image', 'rt-Image--blur', className)}
|
|
236
|
-
alt={alt}
|
|
237
|
-
src={src}
|
|
238
|
-
onLoad={handleLoad}
|
|
239
|
-
onError={handleError}
|
|
240
|
-
ref={(node) => {
|
|
241
|
-
imgRef.current = node;
|
|
242
|
-
if (typeof forwardedRef === 'function') {
|
|
243
|
-
forwardedRef(node);
|
|
244
|
-
} else if (forwardedRef) {
|
|
245
|
-
forwardedRef.current = node;
|
|
246
|
-
}
|
|
247
|
-
}}
|
|
248
|
-
/>
|
|
249
|
-
</>
|
|
250
|
-
),
|
|
251
|
-
});
|
|
252
|
-
} else {
|
|
253
|
-
// For surface variant with asChild
|
|
254
|
-
return React.cloneElement(child, {
|
|
255
|
-
className: classNames(child.props?.className),
|
|
256
|
-
style: {
|
|
257
|
-
textDecoration: 'none',
|
|
258
|
-
color: 'inherit',
|
|
259
|
-
border: 'none',
|
|
260
|
-
background: 'none',
|
|
261
|
-
padding: 0,
|
|
262
|
-
font: 'inherit',
|
|
263
|
-
cursor: 'pointer',
|
|
264
|
-
...wrapperStyleFinal,
|
|
265
|
-
...child.props?.style,
|
|
266
|
-
},
|
|
267
|
-
children: (
|
|
268
|
-
<>
|
|
269
|
-
{skeletonElement}
|
|
270
|
-
{placeholderElement}
|
|
271
|
-
<img
|
|
272
|
-
data-radius={radius}
|
|
273
|
-
loading={loading}
|
|
274
|
-
style={imgStyle}
|
|
275
|
-
className={classNames('rt-reset', 'rt-Image', className)}
|
|
276
|
-
alt={alt}
|
|
277
|
-
src={src}
|
|
278
|
-
onLoad={handleLoad}
|
|
279
|
-
onError={handleError}
|
|
280
|
-
ref={(node) => {
|
|
281
|
-
imgRef.current = node;
|
|
282
|
-
if (typeof forwardedRef === 'function') {
|
|
283
|
-
forwardedRef(node);
|
|
284
|
-
} else if (forwardedRef) {
|
|
285
|
-
forwardedRef.current = node;
|
|
286
|
-
}
|
|
287
|
-
}}
|
|
288
|
-
/>
|
|
289
|
-
</>
|
|
290
|
-
),
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
}
|
|
333
|
+
{/*
|
|
334
|
+
* Placeholder image with blur effect
|
|
335
|
+
* Shows a low-quality version while the main image loads
|
|
336
|
+
*/}
|
|
337
|
+
{placeholder && showPlaceholder && (
|
|
338
|
+
<img
|
|
339
|
+
style={{
|
|
340
|
+
...imgStyle,
|
|
341
|
+
position: 'absolute',
|
|
342
|
+
inset: 0,
|
|
343
|
+
filter: 'blur(4px)', // Creates the blur effect for LQIP (Low Quality Image Placeholder)
|
|
344
|
+
opacity: 0.7, // Subtle opacity to indicate it's a placeholder
|
|
345
|
+
zIndex: 0, // Behind the main image
|
|
346
|
+
}}
|
|
347
|
+
className={classNames('rt-reset', 'rt-Image', 'rt-Image--placeholder')}
|
|
348
|
+
alt="" // Decorative placeholder, no alt text needed
|
|
349
|
+
src={placeholder}
|
|
350
|
+
/>
|
|
351
|
+
)}
|
|
294
352
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
className={classNames('rt-variant-blur', className)}
|
|
300
|
-
style={{
|
|
301
|
-
...style, // Include the width/height styles from extractProps
|
|
302
|
-
...wrapperStyleFinal,
|
|
303
|
-
}}
|
|
304
|
-
{...wrapperProps} // Apply other props to wrapper
|
|
305
|
-
>
|
|
306
|
-
{/* Background blurred image */}
|
|
307
|
-
<img
|
|
308
|
-
data-radius={radius}
|
|
309
|
-
loading={loading}
|
|
310
|
-
style={{
|
|
311
|
-
position: 'absolute',
|
|
312
|
-
top: '0',
|
|
313
|
-
left: '0',
|
|
314
|
-
width: '105%',
|
|
315
|
-
height: '105%',
|
|
316
|
-
transform: 'translate(-2.5%, -2.5%)',
|
|
317
|
-
filter: 'blur(16px) saturate(1.5)',
|
|
318
|
-
opacity: 0.5,
|
|
319
|
-
zIndex: -1,
|
|
320
|
-
}}
|
|
321
|
-
className={classNames('rt-reset', 'rt-Image', 'rt-Image--blur-bg', className)}
|
|
322
|
-
alt=""
|
|
323
|
-
src={src}
|
|
324
|
-
/>
|
|
325
|
-
{/* Foreground image */}
|
|
353
|
+
{/*
|
|
354
|
+
* Main image element
|
|
355
|
+
* Handles all the core functionality and user interactions
|
|
356
|
+
*/}
|
|
326
357
|
<img
|
|
327
|
-
data-radius={radius}
|
|
328
|
-
loading={loading}
|
|
329
|
-
style={imgStyle}
|
|
330
|
-
className={classNames('rt-reset', 'rt-Image', 'rt-Image--blur', className)}
|
|
331
|
-
alt={alt}
|
|
332
|
-
src={src}
|
|
333
|
-
onLoad={handleLoad}
|
|
334
|
-
onError={handleError}
|
|
335
358
|
ref={(node) => {
|
|
359
|
+
// Handle both internal ref and forwarded ref
|
|
336
360
|
imgRef.current = node;
|
|
337
361
|
if (typeof forwardedRef === 'function') {
|
|
338
362
|
forwardedRef(node);
|
|
@@ -340,42 +364,61 @@ const Image = React.forwardRef<ImageElement, ImageProps>((props, forwardedRef) =
|
|
|
340
364
|
forwardedRef.current = node;
|
|
341
365
|
}
|
|
342
366
|
}}
|
|
367
|
+
loading={loading}
|
|
368
|
+
style={{ ...imgStyle, position: 'relative', zIndex: 1 }}
|
|
369
|
+
className={classNames('rt-reset', 'rt-Image', className)}
|
|
370
|
+
alt={alt}
|
|
371
|
+
src={src}
|
|
372
|
+
data-radius={radius}
|
|
373
|
+
onLoad={handleLoad}
|
|
374
|
+
onError={handleError}
|
|
375
|
+
{...ariaProps}
|
|
343
376
|
/>
|
|
344
|
-
</
|
|
377
|
+
</div>
|
|
378
|
+
|
|
379
|
+
{/*
|
|
380
|
+
* Caption element - positioned below the image
|
|
381
|
+
* Takes only the space it needs, doesn't interfere with image sizing
|
|
382
|
+
*/}
|
|
383
|
+
{caption && (
|
|
384
|
+
<div className="rt-Image-caption" style={{ flex: '0 0 auto' }}>
|
|
385
|
+
{caption}
|
|
386
|
+
</div>
|
|
387
|
+
)}
|
|
388
|
+
</>
|
|
389
|
+
);
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Container styling that adapts based on caption presence
|
|
393
|
+
* Uses flexbox when caption is present for proper layout control
|
|
394
|
+
*/
|
|
395
|
+
const containerStyle: React.CSSProperties = {
|
|
396
|
+
display: caption ? 'flex' : 'block',
|
|
397
|
+
flexDirection: caption ? 'column' : undefined,
|
|
398
|
+
...style, // Allow user styles to override defaults
|
|
399
|
+
};
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Render with asChild pattern for composition
|
|
403
|
+
* This allows the Image to be rendered as a child of another element
|
|
404
|
+
* while maintaining all its functionality and styling
|
|
405
|
+
*/
|
|
406
|
+
if (asChild) {
|
|
407
|
+
return (
|
|
408
|
+
<Slot className={className} style={containerStyle} {...wrapperProps}>
|
|
409
|
+
{React.cloneElement(children as React.ReactElement, {}, imageContent)}
|
|
410
|
+
</Slot>
|
|
345
411
|
);
|
|
346
412
|
}
|
|
347
413
|
|
|
348
|
-
|
|
414
|
+
/**
|
|
415
|
+
* Regular rendering as a standalone div container
|
|
416
|
+
* This is the default rendering mode for most use cases
|
|
417
|
+
*/
|
|
349
418
|
return (
|
|
350
|
-
<
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
...style, // Include the width/height styles from extractProps
|
|
354
|
-
...wrapperStyleFinal,
|
|
355
|
-
}}
|
|
356
|
-
{...wrapperProps} // Apply other props to wrapper
|
|
357
|
-
>
|
|
358
|
-
{skeletonElement}
|
|
359
|
-
{placeholderElement}
|
|
360
|
-
<img
|
|
361
|
-
data-radius={radius}
|
|
362
|
-
loading={loading}
|
|
363
|
-
style={imgStyle}
|
|
364
|
-
className={classNames('rt-reset', 'rt-Image', className)}
|
|
365
|
-
alt={alt}
|
|
366
|
-
src={src}
|
|
367
|
-
onLoad={handleLoad}
|
|
368
|
-
onError={handleError}
|
|
369
|
-
ref={(node) => {
|
|
370
|
-
imgRef.current = node;
|
|
371
|
-
if (typeof forwardedRef === 'function') {
|
|
372
|
-
forwardedRef(node);
|
|
373
|
-
} else if (forwardedRef) {
|
|
374
|
-
forwardedRef.current = node;
|
|
375
|
-
}
|
|
376
|
-
}}
|
|
377
|
-
/>
|
|
378
|
-
</Box>
|
|
419
|
+
<div className={className} style={containerStyle} {...wrapperProps}>
|
|
420
|
+
{imageContent}
|
|
421
|
+
</div>
|
|
379
422
|
);
|
|
380
423
|
});
|
|
381
424
|
|
package/src/components/index.css
CHANGED
package/src/components/index.tsx
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { AccessibleIcon, type AccessibleIconProps } from './accessible-icon.js';
|
|
2
|
+
export * as Accordion from './accordion.js';
|
|
2
3
|
export * as AlertDialog from './alert-dialog.js';
|
|
3
4
|
export { AspectRatio, type AspectRatioProps } from './aspect-ratio.js';
|
|
4
5
|
export { Avatar, type AvatarProps } from './avatar.js';
|