@cognite/aura 0.3.4 → 1.46104.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +264 -0
- package/DESIGN.md +638 -281
- package/LICENSE +21 -0
- package/README.md +48 -13
- package/dist/colors-deprecated.css +587 -0
- package/dist/colors.css +803 -830
- package/dist/components/index.d.ts +63 -57
- package/dist/components/index.js +62 -59
- package/dist/components/index.js.map +1 -0
- package/dist/components/ui/core/accordion/accordion.d.ts +19 -18
- package/dist/components/ui/core/accordion/accordion.js +99 -78
- package/dist/components/ui/core/accordion/accordion.js.map +1 -0
- package/dist/components/ui/core/action-toolbar/action-toolbar-motion.d.ts +8 -0
- package/dist/components/ui/core/action-toolbar/action-toolbar-motion.js +125 -0
- package/dist/components/ui/core/action-toolbar/action-toolbar-motion.js.map +1 -0
- package/dist/components/ui/core/action-toolbar/action-toolbar.d.ts +31 -31
- package/dist/components/ui/core/action-toolbar/action-toolbar.js +156 -106
- package/dist/components/ui/core/action-toolbar/action-toolbar.js.map +1 -0
- package/dist/components/ui/core/alert/alert.d.ts +25 -25
- package/dist/components/ui/core/alert/alert.js +181 -152
- package/dist/components/ui/core/alert/alert.js.map +1 -0
- package/dist/components/ui/core/avatar/avatar.d.ts +10 -9
- package/dist/components/ui/core/avatar/avatar.js +75 -65
- package/dist/components/ui/core/avatar/avatar.js.map +1 -0
- package/dist/components/ui/core/badge/badge.d.ts +13 -12
- package/dist/components/ui/core/badge/badge.js +88 -72
- package/dist/components/ui/core/badge/badge.js.map +1 -0
- package/dist/components/ui/core/banner/banner.d.ts +18 -18
- package/dist/components/ui/core/banner/banner.js +179 -142
- package/dist/components/ui/core/banner/banner.js.map +1 -0
- package/dist/components/ui/core/breadcrumb/breadcrumb.d.ts +12 -12
- package/dist/components/ui/core/breadcrumb/breadcrumb.js +139 -104
- package/dist/components/ui/core/breadcrumb/breadcrumb.js.map +1 -0
- package/dist/components/ui/core/button/button.d.ts +7 -7
- package/dist/components/ui/core/button/button.gallery.d.ts +2 -0
- package/dist/components/ui/core/button/button.gallery.js +76 -0
- package/dist/components/ui/core/button/button.gallery.js.map +1 -0
- package/dist/components/ui/core/button/button.js +57 -47
- package/dist/components/ui/core/button/button.js.map +1 -0
- package/dist/components/ui/core/button-group/button-group.d.ts +9 -9
- package/dist/components/ui/core/button-group/button-group.js +50 -40
- package/dist/components/ui/core/button-group/button-group.js.map +1 -0
- package/dist/components/ui/core/calendar/calendar-header.d.ts +7 -7
- package/dist/components/ui/core/calendar/calendar-header.js +102 -63
- package/dist/components/ui/core/calendar/calendar-header.js.map +1 -0
- package/dist/components/ui/core/calendar/calendar-utils.d.ts +30 -30
- package/dist/components/ui/core/calendar/calendar-utils.js +116 -39
- package/dist/components/ui/core/calendar/calendar-utils.js.map +1 -0
- package/dist/components/ui/core/calendar/calendar.d.ts +10 -10
- package/dist/components/ui/core/calendar/calendar.js +95 -66
- package/dist/components/ui/core/calendar/calendar.js.map +1 -0
- package/dist/components/ui/core/calendar/constants.js +3 -0
- package/dist/components/ui/core/calendar/constants.js.map +1 -0
- package/dist/components/ui/core/card/card.d.ts +20 -20
- package/dist/components/ui/core/card/card.js +133 -104
- package/dist/components/ui/core/card/card.js.map +1 -0
- package/dist/components/ui/core/chart/chart.d.ts +55 -53
- package/dist/components/ui/core/chart/chart.js +196 -116
- package/dist/components/ui/core/chart/chart.js.map +1 -0
- package/dist/components/ui/core/chart/index.d.ts +2 -2
- package/dist/components/ui/core/chart/index.js +3 -2
- package/dist/components/ui/core/chart/index.js.map +1 -0
- package/dist/components/ui/core/checkbox/checkbox.d.ts +9 -9
- package/dist/components/ui/core/checkbox/checkbox.js +88 -68
- package/dist/components/ui/core/checkbox/checkbox.js.map +1 -0
- package/dist/components/ui/core/checkbox/checkbox.metadata.d.ts +1 -1
- package/dist/components/ui/core/checkbox/checkbox.metadata.js +6 -7
- package/dist/components/ui/core/checkbox/checkbox.metadata.js.map +1 -0
- package/dist/components/ui/core/code-block/code-block.d.ts +19 -19
- package/dist/components/ui/core/code-block/code-block.js +259 -175
- package/dist/components/ui/core/code-block/code-block.js.map +1 -0
- package/dist/components/ui/core/collapsible/collapsible.d.ts +5 -5
- package/dist/components/ui/core/collapsible/collapsible.js +36 -30
- package/dist/components/ui/core/collapsible/collapsible.js.map +1 -0
- package/dist/components/ui/core/combobox/combobox.d.ts +13 -13
- package/dist/components/ui/core/combobox/combobox.js +89 -40
- package/dist/components/ui/core/combobox/combobox.js.map +1 -0
- package/dist/components/ui/core/command/command.d.ts +20 -18
- package/dist/components/ui/core/command/command.js +137 -85
- package/dist/components/ui/core/command/command.js.map +1 -0
- package/dist/components/ui/core/conversation/conversation.d.ts +14 -0
- package/dist/components/ui/core/conversation/conversation.js +51 -0
- package/dist/components/ui/core/conversation/conversation.js.map +1 -0
- package/dist/components/ui/core/count/count.d.ts +8 -6
- package/dist/components/ui/core/count/count.js +51 -21
- package/dist/components/ui/core/count/count.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid-cell.d.ts +7 -7
- package/dist/components/ui/core/data-grid/data-grid-cell.js +23 -0
- package/dist/components/ui/core/data-grid/data-grid-cell.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid-filter-clauses.d.ts +14 -0
- package/dist/components/ui/core/data-grid/data-grid-filter-clauses.js +36 -0
- package/dist/components/ui/core/data-grid/data-grid-filter-clauses.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid-filter-panel.d.ts +41 -0
- package/dist/components/ui/core/data-grid/data-grid-filter-panel.js +273 -0
- package/dist/components/ui/core/data-grid/data-grid-filter-panel.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid-footer.d.ts +6 -0
- package/dist/components/ui/core/data-grid/data-grid-footer.js +34 -0
- package/dist/components/ui/core/data-grid/data-grid-footer.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid-header-row.d.ts +10 -10
- package/dist/components/ui/core/data-grid/data-grid-header-row.js +70 -0
- package/dist/components/ui/core/data-grid/data-grid-header-row.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid-header.d.ts +11 -0
- package/dist/components/ui/core/data-grid/data-grid-header.js +67 -0
- package/dist/components/ui/core/data-grid/data-grid-header.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid-row.d.ts +15 -15
- package/dist/components/ui/core/data-grid/data-grid-row.js +105 -0
- package/dist/components/ui/core/data-grid/data-grid-row.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid.d.ts +85 -35
- package/dist/components/ui/core/data-grid/data-grid.fixtures.d.ts +7 -7
- package/dist/components/ui/core/data-grid/data-grid.fixtures.js +139 -0
- package/dist/components/ui/core/data-grid/data-grid.fixtures.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid.js +404 -0
- package/dist/components/ui/core/data-grid/data-grid.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid.utils.d.ts +3 -3
- package/dist/components/ui/core/data-grid/data-grid.utils.js +51 -0
- package/dist/components/ui/core/data-grid/data-grid.utils.js.map +1 -0
- package/dist/components/ui/core/data-grid/index.d.ts +4 -0
- package/dist/components/ui/core/data-grid/index.js +5 -0
- package/dist/components/ui/core/data-grid/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-picker/date-picker.d.ts +11 -13
- package/dist/components/ui/core/date-time-pickers/date-picker/date-picker.js +85 -61
- package/dist/components/ui/core/date-time-pickers/date-picker/date-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-picker/index.d.ts +3 -3
- package/dist/components/ui/core/date-time-pickers/date-picker/index.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-picker/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-picker/types.d.ts +14 -14
- package/dist/components/ui/core/date-time-pickers/date-picker/types.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-picker/types.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-picker/use-date-picker.d.ts +2 -2
- package/dist/components/ui/core/date-time-pickers/date-picker/use-date-picker.js +51 -36
- package/dist/components/ui/core/date-time-pickers/date-picker/use-date-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-range-picker/date-range-picker.d.ts +11 -13
- package/dist/components/ui/core/date-time-pickers/date-range-picker/date-range-picker.js +89 -64
- package/dist/components/ui/core/date-time-pickers/date-range-picker/date-range-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-range-picker/index.d.ts +3 -3
- package/dist/components/ui/core/date-time-pickers/date-range-picker/index.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-range-picker/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-range-picker/types.d.ts +20 -20
- package/dist/components/ui/core/date-time-pickers/date-range-picker/types.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-range-picker/types.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-range-picker/use-date-range-picker.d.ts +4 -4
- package/dist/components/ui/core/date-time-pickers/date-range-picker/use-date-range-picker.js +95 -60
- package/dist/components/ui/core/date-time-pickers/date-range-picker/use-date-range-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/date-time-picker.d.ts +15 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/date-time-picker.js +120 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/date-time-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/index.d.ts +3 -1
- package/dist/components/ui/core/date-time-pickers/date-time-picker/index.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/types.d.ts +25 -32
- package/dist/components/ui/core/date-time-pickers/date-time-picker/types.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/types.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/use-date-time-picker.d.ts +2 -2
- package/dist/components/ui/core/date-time-pickers/date-time-picker/use-date-time-picker.js +78 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/use-date-time-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/date-time-range-picker.d.ts +13 -15
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/date-time-range-picker.js +165 -119
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/date-time-range-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/index.d.ts +3 -3
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/index.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/types.d.ts +37 -37
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/types.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/types.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/use-date-time-range-picker.d.ts +3 -3
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/use-date-time-range-picker.js +163 -104
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/use-date-time-range-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/index.d.ts +17 -12
- package/dist/components/ui/core/date-time-pickers/index.js +10 -6
- package/dist/components/ui/core/date-time-pickers/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/am-pm-scroll/am-pm-scroll.d.ts +5 -5
- package/dist/components/ui/core/date-time-pickers/shared/am-pm-scroll/am-pm-scroll.js +52 -42
- package/dist/components/ui/core/date-time-pickers/shared/am-pm-scroll/am-pm-scroll.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/constants.d.ts +6 -1
- package/dist/components/ui/core/date-time-pickers/shared/constants.js +23 -0
- package/dist/components/ui/core/date-time-pickers/shared/constants.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/date-time-input/date-time-input.d.ts +16 -15
- package/dist/components/ui/core/date-time-pickers/shared/date-time-input/date-time-input.js +87 -64
- package/dist/components/ui/core/date-time-pickers/shared/date-time-input/date-time-input.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/date-time-input/range-input-display.d.ts +10 -9
- package/dist/components/ui/core/date-time-pickers/shared/date-time-input/range-input-display.js +89 -38
- package/dist/components/ui/core/date-time-pickers/shared/date-time-input/range-input-display.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-popover-state.d.ts +5 -5
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-popover-state.js +34 -23
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-popover-state.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-date-state.d.ts +23 -23
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-date-state.js +95 -52
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-date-state.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-step-manager.d.ts +5 -5
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-step-manager.js +22 -18
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-step-manager.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-single-date-state.d.ts +19 -19
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-single-date-state.js +41 -24
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-single-date-state.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-time-state.d.ts +13 -13
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-time-state.js +33 -24
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-time-state.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/scroll-cell-classes.d.ts +5 -5
- package/dist/components/ui/core/date-time-pickers/shared/scroll-cell-classes.js +9 -4
- package/dist/components/ui/core/date-time-pickers/shared/scroll-cell-classes.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/shortcuts-panel/shortcuts-panel.d.ts +13 -9
- package/dist/components/ui/core/date-time-pickers/shared/shortcuts-panel/shortcuts-panel.js +22 -17
- package/dist/components/ui/core/date-time-pickers/shared/shortcuts-panel/shortcuts-panel.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/index.d.ts +2 -2
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/index.js +3 -0
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/time-picker-panel.d.ts +13 -13
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/time-picker-panel.js +49 -40
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/time-picker-panel.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-scroll/time-picker-scroll.d.ts +7 -7
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-scroll/time-picker-scroll.js +41 -34
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-scroll/time-picker-scroll.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-picker/index.d.ts +3 -3
- package/dist/components/ui/core/date-time-pickers/time-picker/index.js +3 -0
- package/dist/components/ui/core/date-time-pickers/time-picker/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-picker/time-picker.d.ts +12 -14
- package/dist/components/ui/core/date-time-pickers/time-picker/time-picker.js +99 -79
- package/dist/components/ui/core/date-time-pickers/time-picker/time-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-picker/types.d.ts +20 -20
- package/dist/components/ui/core/date-time-pickers/time-picker/types.js +3 -0
- package/dist/components/ui/core/date-time-pickers/time-picker/types.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-picker/use-time-picker.d.ts +2 -2
- package/dist/components/ui/core/date-time-pickers/time-picker/use-time-picker.js +63 -41
- package/dist/components/ui/core/date-time-pickers/time-picker/use-time-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/index.d.ts +3 -1
- package/dist/components/ui/core/date-time-pickers/time-range-picker/index.js +3 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/time-range-picker.d.ts +14 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/time-range-picker.js +115 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/time-range-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/types.d.ts +30 -36
- package/dist/components/ui/core/date-time-pickers/time-range-picker/types.js +3 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/types.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/use-time-range-picker.d.ts +2 -2
- package/dist/components/ui/core/date-time-pickers/time-range-picker/use-time-range-picker.js +145 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/use-time-range-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/utils/date-input.d.ts +56 -0
- package/dist/components/ui/core/date-time-pickers/utils/date-input.js +67 -0
- package/dist/components/ui/core/date-time-pickers/utils/date-input.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/utils/date-range-utils.d.ts +18 -18
- package/dist/components/ui/core/date-time-pickers/utils/date-range-utils.js +42 -0
- package/dist/components/ui/core/date-time-pickers/utils/date-range-utils.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/utils/format-utils.d.ts +31 -29
- package/dist/components/ui/core/date-time-pickers/utils/format-utils.js +56 -0
- package/dist/components/ui/core/date-time-pickers/utils/format-utils.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/utils/segment-utils.d.ts +21 -21
- package/dist/components/ui/core/date-time-pickers/utils/segment-utils.js +170 -0
- package/dist/components/ui/core/date-time-pickers/utils/segment-utils.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/utils/time-utils.d.ts +28 -28
- package/dist/components/ui/core/date-time-pickers/utils/time-utils.js +88 -7
- package/dist/components/ui/core/date-time-pickers/utils/time-utils.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/utils/time-validation.d.ts +17 -17
- package/dist/components/ui/core/date-time-pickers/utils/time-validation.js +43 -0
- package/dist/components/ui/core/date-time-pickers/utils/time-validation.js.map +1 -0
- package/dist/components/ui/core/dialog/dialog.d.ts +12 -9
- package/dist/components/ui/core/dialog/dialog.js +90 -82
- package/dist/components/ui/core/dialog/dialog.js.map +1 -0
- package/dist/components/ui/core/dropdown-menu/dropdown-menu.d.ts +22 -19
- package/dist/components/ui/core/dropdown-menu/dropdown-menu.js +204 -149
- package/dist/components/ui/core/dropdown-menu/dropdown-menu.js.map +1 -0
- package/dist/components/ui/core/empty-state/empty-state.context.d.ts +4 -4
- package/dist/components/ui/core/empty-state/empty-state.context.js +8 -5
- package/dist/components/ui/core/empty-state/empty-state.context.js.map +1 -0
- package/dist/components/ui/core/empty-state/empty-state.d.ts +14 -14
- package/dist/components/ui/core/empty-state/empty-state.js +96 -82
- package/dist/components/ui/core/empty-state/empty-state.js.map +1 -0
- package/dist/components/ui/core/helper-text/helper-text.d.ts +7 -7
- package/dist/components/ui/core/helper-text/helper-text.js +55 -36
- package/dist/components/ui/core/helper-text/helper-text.js.map +1 -0
- package/dist/components/ui/core/hover-card/hover-card.d.ts +7 -6
- package/dist/components/ui/core/hover-card/hover-card.js +56 -52
- package/dist/components/ui/core/hover-card/hover-card.js.map +1 -0
- package/dist/components/ui/core/inline-citation/inline-citation.d.ts +26 -25
- package/dist/components/ui/core/inline-citation/inline-citation.js +121 -97
- package/dist/components/ui/core/inline-citation/inline-citation.js.map +1 -0
- package/dist/components/ui/core/input/input.d.ts +2 -2
- package/dist/components/ui/core/input/input.js +15 -13
- package/dist/components/ui/core/input/input.js.map +1 -0
- package/dist/components/ui/core/input-group/input-group.d.ts +25 -14
- package/dist/components/ui/core/input-group/input-group.js +149 -76
- package/dist/components/ui/core/input-group/input-group.js.map +1 -0
- package/dist/components/ui/core/item/item.d.ts +20 -0
- package/dist/components/ui/core/item/item.js +93 -0
- package/dist/components/ui/core/item/item.js.map +1 -0
- package/dist/components/ui/core/kbd/kbd.d.ts +3 -3
- package/dist/components/ui/core/kbd/kbd.js +24 -20
- package/dist/components/ui/core/kbd/kbd.js.map +1 -0
- package/dist/components/ui/core/label/label.d.ts +3 -3
- package/dist/components/ui/core/label/label.js +33 -26
- package/dist/components/ui/core/label/label.js.map +1 -0
- package/dist/components/ui/core/loader/loader.d.ts +6 -6
- package/dist/components/ui/core/loader/loader.js +97 -80
- package/dist/components/ui/core/loader/loader.js.map +1 -0
- package/dist/components/ui/core/message/message-response-default-streamdown-controls.d.ts +9 -9
- package/dist/components/ui/core/message/message-response-default-streamdown-controls.js +19 -12
- package/dist/components/ui/core/message/message-response-default-streamdown-controls.js.map +1 -0
- package/dist/components/ui/core/message/message-response-math-plugin.d.ts +3 -0
- package/dist/components/ui/core/message/message-response-math-plugin.js +6 -0
- package/dist/components/ui/core/message/message-response-math-plugin.js.map +1 -0
- package/dist/components/ui/core/message/message.d.ts +27 -23
- package/dist/components/ui/core/message/message.js +453 -316
- package/dist/components/ui/core/message/message.js.map +1 -0
- package/dist/components/ui/core/overflow-list/overflow-list.d.ts +21 -0
- package/dist/components/ui/core/overflow-list/overflow-list.js +197 -0
- package/dist/components/ui/core/overflow-list/overflow-list.js.map +1 -0
- package/dist/components/ui/core/overflow-list/overflow-list.utils.d.ts +37 -35
- package/dist/components/ui/core/overflow-list/overflow-list.utils.js +206 -0
- package/dist/components/ui/core/overflow-list/overflow-list.utils.js.map +1 -0
- package/dist/components/ui/core/pagination/pagination-size-context.d.ts +2 -2
- package/dist/components/ui/core/pagination/pagination-size-context.js +6 -5
- package/dist/components/ui/core/pagination/pagination-size-context.js.map +1 -0
- package/dist/components/ui/core/pagination/pagination-teleport.d.ts +9 -9
- package/dist/components/ui/core/pagination/pagination-teleport.js +127 -84
- package/dist/components/ui/core/pagination/pagination-teleport.js.map +1 -0
- package/dist/components/ui/core/pagination/pagination-teleport.utils.js +6 -6
- package/dist/components/ui/core/pagination/pagination-teleport.utils.js.map +1 -0
- package/dist/components/ui/core/pagination/pagination.d.ts +39 -39
- package/dist/components/ui/core/pagination/pagination.js +294 -234
- package/dist/components/ui/core/pagination/pagination.js.map +1 -0
- package/dist/components/ui/core/popover/popover.d.ts +12 -11
- package/dist/components/ui/core/popover/popover.js +104 -89
- package/dist/components/ui/core/popover/popover.js.map +1 -0
- package/dist/components/ui/core/progress/progress.d.ts +9 -8
- package/dist/components/ui/core/progress/progress.js +50 -35
- package/dist/components/ui/core/progress/progress.js.map +1 -0
- package/dist/components/ui/core/prompt-input/prompt-input.d.ts +27 -27
- package/dist/components/ui/core/prompt-input/prompt-input.js +342 -271
- package/dist/components/ui/core/prompt-input/prompt-input.js.map +1 -0
- package/dist/components/ui/core/radio-group/radio-group.d.ts +12 -12
- package/dist/components/ui/core/radio-group/radio-group.js +88 -58
- package/dist/components/ui/core/radio-group/radio-group.js.map +1 -0
- package/dist/components/ui/core/reasoning/reasoning.d.ts +7 -7
- package/dist/components/ui/core/reasoning/reasoning.js +68 -56
- package/dist/components/ui/core/reasoning/reasoning.js.map +1 -0
- package/dist/components/ui/core/scroll-area/scroll-area.d.ts +4 -4
- package/dist/components/ui/core/scroll-area/scroll-area.js +50 -40
- package/dist/components/ui/core/scroll-area/scroll-area.js.map +1 -0
- package/dist/components/ui/core/search/search.d.ts +8 -8
- package/dist/components/ui/core/search/search.js +122 -76
- package/dist/components/ui/core/search/search.js.map +1 -0
- package/dist/components/ui/core/segmented-control/segmented-control.d.ts +17 -11
- package/dist/components/ui/core/segmented-control/segmented-control.js +204 -108
- package/dist/components/ui/core/segmented-control/segmented-control.js.map +1 -0
- package/dist/components/ui/core/select/select.d.ts +27 -26
- package/dist/components/ui/core/select/select.js +213 -168
- package/dist/components/ui/core/select/select.js.map +1 -0
- package/dist/components/ui/core/separator/separator.d.ts +2 -2
- package/dist/components/ui/core/separator/separator.js +13 -13
- package/dist/components/ui/core/separator/separator.js.map +1 -0
- package/dist/components/ui/core/shimmer/shimmer.d.ts +8 -8
- package/dist/components/ui/core/shimmer/shimmer.js +64 -40
- package/dist/components/ui/core/shimmer/shimmer.js.map +1 -0
- package/dist/components/ui/core/skeleton/skeleton.d.ts +2 -2
- package/dist/components/ui/core/skeleton/skeleton.js +13 -13
- package/dist/components/ui/core/skeleton/skeleton.js.map +1 -0
- package/dist/components/ui/core/slider/slider.d.ts +7 -7
- package/dist/components/ui/core/slider/slider.js +51 -39
- package/dist/components/ui/core/slider/slider.js.map +1 -0
- package/dist/components/ui/core/sonner-toast/sonner-toast.d.ts +2 -2
- package/dist/components/ui/core/sonner-toast/sonner-toast.js +67 -54
- package/dist/components/ui/core/sonner-toast/sonner-toast.js.map +1 -0
- package/dist/components/ui/core/sources/sources.d.ts +12 -12
- package/dist/components/ui/core/sources/sources.js +87 -58
- package/dist/components/ui/core/sources/sources.js.map +1 -0
- package/dist/components/ui/core/switch/switch.d.ts +9 -9
- package/dist/components/ui/core/switch/switch.js +83 -61
- package/dist/components/ui/core/switch/switch.js.map +1 -0
- package/dist/components/ui/core/switch/switch.metadata.d.ts +1 -1
- package/dist/components/ui/core/switch/switch.metadata.js +8 -0
- package/dist/components/ui/core/switch/switch.metadata.js.map +1 -0
- package/dist/components/ui/core/tabs/tabs.d.ts +20 -18
- package/dist/components/ui/core/tabs/tabs.js +176 -147
- package/dist/components/ui/core/tabs/tabs.js.map +1 -0
- package/dist/components/ui/core/tabs/tabs.utils.d.ts +1 -1
- package/dist/components/ui/core/tabs/tabs.utils.js +10 -6
- package/dist/components/ui/core/tabs/tabs.utils.js.map +1 -0
- package/dist/components/ui/core/textarea/textarea.d.ts +2 -2
- package/dist/components/ui/core/textarea/textarea.js +13 -13
- package/dist/components/ui/core/textarea/textarea.js.map +1 -0
- package/dist/components/ui/core/toggle/toggle.d.ts +9 -9
- package/dist/components/ui/core/toggle/toggle.js +60 -54
- package/dist/components/ui/core/toggle/toggle.js.map +1 -0
- package/dist/components/ui/core/tool/tool.d.ts +18 -18
- package/dist/components/ui/core/tool/tool.js +167 -126
- package/dist/components/ui/core/tool/tool.js.map +1 -0
- package/dist/components/ui/core/toolbar/toolbar.d.ts +37 -0
- package/dist/components/ui/core/toolbar/toolbar.js +171 -0
- package/dist/components/ui/core/toolbar/toolbar.js.map +1 -0
- package/dist/components/ui/core/tooltip/tooltip.d.ts +8 -7
- package/dist/components/ui/core/tooltip/tooltip.js +53 -46
- package/dist/components/ui/core/tooltip/tooltip.js.map +1 -0
- package/dist/components/ui/core/topbar/topbar.d.ts +26 -26
- package/dist/components/ui/core/topbar/topbar.js +160 -105
- package/dist/components/ui/core/topbar/topbar.js.map +1 -0
- package/dist/components/ui/core/tree/tree.d.ts +20 -0
- package/dist/components/ui/core/tree/tree.js +100 -0
- package/dist/components/ui/core/tree/tree.js.map +1 -0
- package/dist/eslint/index.d.ts +5 -5
- package/dist/eslint/index.js +9 -5
- package/dist/eslint/index.js.map +1 -0
- package/dist/eslint/no-overriding-styles.d.ts +1 -1
- package/dist/eslint/no-overriding-styles.js +341 -201
- package/dist/eslint/no-overriding-styles.js.map +1 -0
- package/dist/icons/index.d.ts +1 -1
- package/dist/icons/index.js +2 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/ai/types.d.ts +43 -43
- package/dist/lib/ai/types.js +3 -0
- package/dist/lib/ai/types.js.map +1 -0
- package/dist/lib/decorative-variant-classes.d.ts +53 -0
- package/dist/lib/decorative-variant-classes.js +58 -0
- package/dist/lib/decorative-variant-classes.js.map +1 -0
- package/dist/lib/highlight-code.d.ts +11 -8
- package/dist/lib/highlight-code.js +58 -40
- package/dist/lib/highlight-code.js.map +1 -0
- package/dist/lib/portal-container-context.d.ts +1 -1
- package/dist/lib/portal-container-context.js +8 -8
- package/dist/lib/portal-container-context.js.map +1 -0
- package/dist/lib/shared-theme-from-url.d.ts +13 -0
- package/dist/lib/shared-theme-from-url.js +61 -0
- package/dist/lib/shared-theme-from-url.js.map +1 -0
- package/dist/lib/style-scope.d.ts +2 -2
- package/dist/lib/style-scope.js +6 -6
- package/dist/lib/style-scope.js.map +1 -0
- package/dist/lib/theme-share-url.d.ts +31 -0
- package/dist/lib/theme-share-url.js +116 -0
- package/dist/lib/theme-share-url.js.map +1 -0
- package/dist/lib/types.d.ts +39 -39
- package/dist/lib/types.js +3 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/use-controllable-state.d.ts +4 -7
- package/dist/lib/use-controllable-state.js +34 -21
- package/dist/lib/use-controllable-state.js.map +1 -0
- package/dist/lib/utils.d.ts +63 -34
- package/dist/lib/utils.js +134 -32
- package/dist/lib/utils.js.map +1 -0
- package/dist/styles.css +2 -1
- package/dist/styles.source.css +24 -12
- package/dist/utils/assign-ref.d.ts +3 -0
- package/dist/utils/assign-ref.js +13 -0
- package/dist/utils/assign-ref.js.map +1 -0
- package/package.json +50 -11
- package/src/components/ui/core/button/button.md +93 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/ui/core/message/message.tsx"],"sourcesContent":["import type {\n ComponentProps,\n HTMLAttributes,\n ReactElement,\n ReactNode,\n} from 'react';\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport { mermaid as mermaidPlugin } from '@streamdown/mermaid';\nimport {\n IconChevronLeft,\n IconChevronRight,\n IconPaperclip,\n IconX,\n} from '@tabler/icons-react';\nimport type { JSX } from 'react/jsx-runtime';\nimport type { Components, ExtraProps } from 'streamdown';\nimport { Streamdown } from 'streamdown';\n\nimport type { FileUIPart, UIMessage } from '../../../../lib/ai/types';\nimport { cn, getInitials } from '../../../../lib/utils';\nimport {\n Avatar,\n AvatarFallback,\n AvatarIcon,\n AvatarImage,\n} from '../avatar/avatar';\nimport { Button } from '../button/button';\nimport { ButtonGroup, ButtonGroupText } from '../button-group/button-group';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip/tooltip';\n\nimport { MESSAGE_RESPONSE_DEFAULT_STREAMDOWN_CONTROLS } from './message-response-default-streamdown-controls';\n\ntype MessageProps = HTMLAttributes<HTMLDivElement> & {\n isResponse?: boolean;\n};\n\nconst Message = ({\n className,\n isResponse = false,\n ...props\n}: MessageProps): ReactNode => (\n <div\n data-slot=\"message\"\n className={cn(\n 'group flex w-full items-start justify-start gap-3 mb-0 py-3',\n isResponse ? 'is-assistant items-start' : 'is-user flex-row-reverse',\n className\n )}\n {...props}\n />\n);\n\ntype MessageContentProps = HTMLAttributes<HTMLDivElement>;\n\nconst MessageContent = ({\n children,\n className,\n ...props\n}: MessageContentProps): ReactNode => (\n <div\n data-slot=\"message-content\"\n className={cn(\n 'is-user:dark flex flex-col gap-4 rounded-md text-base leading-tight tracking-tightest',\n 'max-w-4/5',\n 'group-[.is-user]:overflow-hidden group-[.is-user]:bg-medium-background group-[.is-user]:p-2 group-[.is-user]:text-base-foreground',\n 'group-[.is-assistant]:text-base-foreground group-[.is-assistant]:pt-1',\n className\n )}\n {...props}\n >\n {children}\n </div>\n);\n\ntype MessageAvatarProps = ComponentProps<typeof Avatar> & {\n avatarUrl?: string;\n name?: string;\n};\n\nconst MessageAvatar = ({\n avatarUrl,\n name,\n className,\n children,\n variant,\n sizes,\n ...props\n}: MessageAvatarProps): ReactNode => {\n const fallbackText = name ? getInitials(name) : 'ME';\n\n return (\n <Avatar\n data-slot=\"message-avatar\"\n className={cn('size-7 group-[.is-user]:mt-1', className)}\n variant={variant}\n sizes={sizes}\n {...props}\n >\n {children || (\n <>\n {avatarUrl && (\n <AvatarImage\n alt={name || ''}\n className=\"mt-0 mb-0\"\n src={avatarUrl}\n />\n )}\n <AvatarFallback>{fallbackText}</AvatarFallback>\n </>\n )}\n </Avatar>\n );\n};\n\ntype MessageAvatarIconProps = ComponentProps<typeof AvatarIcon>;\n\nconst MessageAvatarIcon = (props: MessageAvatarIconProps): ReactNode => (\n <AvatarIcon data-slot=\"message-avatar-icon\" {...props} />\n);\n\ntype MessageActionsProps = ComponentProps<'div'>;\n\nconst MessageActions = ({\n className,\n children,\n ...props\n}: MessageActionsProps): ReactNode => (\n <div\n data-slot=\"message-actions\"\n className={cn('flex items-center gap-2 pt-2', className)}\n {...props}\n >\n {children}\n </div>\n);\n\ntype MessageActionProps = ComponentProps<typeof Button> & {\n tooltip?: string;\n label?: string;\n};\n\nconst MessageAction = ({\n tooltip,\n children,\n label,\n className,\n variant = 'ghost',\n size = 'sm',\n ...props\n}: MessageActionProps): ReactNode => {\n const button = (\n <Button\n data-slot=\"message-action\"\n className={cn(\n 'relative icon-sm text-muted-foreground hover:text-base-foreground',\n className\n )}\n size={size}\n type=\"button\"\n variant={variant}\n {...props}\n >\n {children}\n <span className=\"sr-only\">{label || tooltip}</span>\n </Button>\n );\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger render={button} />\n <TooltipContent>\n <p>{tooltip}</p>\n </TooltipContent>\n </Tooltip>\n );\n }\n\n return button;\n};\n\ntype MessageBranchContextType = {\n currentBranch: number;\n totalBranches: number;\n goToPrevious: () => void;\n goToNext: () => void;\n branches: ReactElement[];\n setBranches: (branches: ReactElement[]) => void;\n};\n\nconst MessageBranchContext = createContext<MessageBranchContextType | null>(\n null\n);\n\nconst useMessageBranch = () => {\n const context = useContext(MessageBranchContext);\n\n if (!context) {\n throw new Error(\n 'MessageBranch components must be used within MessageBranch'\n );\n }\n\n return context;\n};\n\ntype MessageBranchProps = HTMLAttributes<HTMLDivElement> & {\n defaultBranch?: number;\n onBranchChange?: (branchIndex: number) => void;\n};\n\nconst MessageBranch = ({\n defaultBranch = 0,\n onBranchChange,\n className,\n ...props\n}: MessageBranchProps): ReactNode => {\n const [currentBranch, setCurrentBranch] = useState(defaultBranch);\n const [branches, setBranches] = useState<ReactElement[]>([]);\n\n const goToPrevious = useCallback(() => {\n setCurrentBranch((prev) => {\n const newBranch = prev > 0 ? prev - 1 : branches.length - 1;\n onBranchChange?.(newBranch);\n return newBranch;\n });\n }, [branches.length, onBranchChange]);\n\n const goToNext = useCallback(() => {\n setCurrentBranch((prev) => {\n const newBranch = prev < branches.length - 1 ? prev + 1 : 0;\n onBranchChange?.(newBranch);\n return newBranch;\n });\n }, [branches.length, onBranchChange]);\n\n const contextValue = useMemo<MessageBranchContextType>(\n () => ({\n currentBranch,\n totalBranches: branches.length,\n goToPrevious,\n goToNext,\n branches,\n setBranches,\n }),\n [currentBranch, branches, goToPrevious, goToNext, setBranches]\n );\n\n return (\n <MessageBranchContext.Provider value={contextValue}>\n <div\n data-slot=\"message-branch\"\n className={cn('grid w-full gap-2 [&>div]:pb-0', className)}\n {...props}\n />\n </MessageBranchContext.Provider>\n );\n};\n\ntype MessageBranchContentProps = HTMLAttributes<HTMLDivElement>;\n\nconst MessageBranchContent = ({\n children,\n ...props\n}: MessageBranchContentProps): ReactNode[] => {\n const { currentBranch, setBranches, branches } = useMessageBranch();\n const childrenArray = useMemo(\n () => (Array.isArray(children) ? children : [children]),\n [children]\n );\n\n useEffect(() => {\n if (branches.length !== childrenArray.length) {\n setBranches(childrenArray);\n }\n }, [childrenArray, branches, setBranches]);\n\n return childrenArray.map((branch, index) => (\n <div\n data-slot=\"message-branch-content\"\n className={cn(\n 'grid gap-2 overflow-hidden [&>div]:pb-0',\n index === currentBranch ? 'block' : 'hidden'\n )}\n key={branch.key}\n {...props}\n >\n {branch}\n </div>\n ));\n};\n\ntype MessageBranchSelectorProps = HTMLAttributes<HTMLDivElement> & {\n from: UIMessage['role'];\n};\n\nconst MessageBranchSelector = ({\n ...props\n}: MessageBranchSelectorProps): ReactNode => {\n const { totalBranches } = useMessageBranch();\n\n if (totalBranches <= 1) {\n return null;\n }\n\n return (\n <ButtonGroup\n data-slot=\"message-branch-selector\"\n className=\"[&>*:not(:first-child)]:rounded-l-md [&>*:not(:last-child)]:rounded-r-md\"\n orientation=\"horizontal\"\n {...props}\n />\n );\n};\n\ntype MessageBranchPreviousProps = ComponentProps<typeof Button>;\n\nconst MessageBranchPrevious = ({\n children,\n ...props\n}: MessageBranchPreviousProps): ReactNode => {\n const { goToPrevious, totalBranches } = useMessageBranch();\n\n return (\n <Button\n data-slot=\"message-branch-previous\"\n aria-label=\"Previous branch\"\n disabled={totalBranches <= 1}\n onClick={goToPrevious}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <IconChevronLeft size={14} />}\n </Button>\n );\n};\n\ntype MessageBranchNextProps = ComponentProps<typeof Button>;\n\nconst MessageBranchNext = ({\n children,\n ...props\n}: MessageBranchNextProps): ReactNode => {\n const { goToNext, totalBranches } = useMessageBranch();\n\n return (\n <Button\n data-slot=\"message-branch-next\"\n aria-label=\"Next branch\"\n disabled={totalBranches <= 1}\n onClick={goToNext}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <IconChevronRight size={14} />}\n </Button>\n );\n};\n\ntype MessageBranchPageProps = HTMLAttributes<HTMLSpanElement>;\n\nconst MessageBranchPage = ({\n className,\n ...props\n}: MessageBranchPageProps): ReactNode => {\n const { currentBranch, totalBranches } = useMessageBranch();\n\n return (\n <ButtonGroupText\n data-slot=\"message-branch-page\"\n className={cn(\n 'border-none bg-transparent text-muted-foreground shadow-none px-2',\n className\n )}\n {...props}\n >\n {currentBranch + 1}/{totalBranches}\n </ButtonGroupText>\n );\n};\n\n/** Streamdown discards unrecognised props, so these go on a wrapper instead. */\ntype MessageResponseHostProps = Pick<\n HTMLAttributes<HTMLDivElement>,\n 'id' | 'role' | 'aria-label' | 'aria-labelledby' | 'aria-describedby'\n> & {\n 'data-testid'?: string;\n};\n\ntype MessageResponseProps = ComponentProps<typeof Streamdown> &\n MessageResponseHostProps;\n\ntype MarkdownComponentProps<T extends keyof JSX.IntrinsicElements> =\n JSX.IntrinsicElements[T] & ExtraProps;\n\nconst messageResponseComponents: Components = {\n h1: ({ children }: MarkdownComponentProps<'h1'>) => (\n <h1 className=\"mt-0 mb-2 scroll-m-20 text-xl font-medium tracking-tightest\">\n {children}\n </h1>\n ),\n h2: ({ children }: MarkdownComponentProps<'h2'>) => (\n <h2 className=\"mt-4 mb-1 scroll-m-20 text-lg font-medium tracking-tightest\">\n {children}\n </h2>\n ),\n h3: ({ children }: MarkdownComponentProps<'h3'>) => (\n <h3 className=\"mt-4 mb-1 scroll-m-20 text-base font-medium tracking-tighter\">\n {children}\n </h3>\n ),\n h4: ({ children }: MarkdownComponentProps<'h4'>) => (\n <h4 className=\"mt-2 mb-0 scroll-m-20 text-sm font-medium tracking-normal\">\n {children}\n </h4>\n ),\n h5: ({ children }: MarkdownComponentProps<'h5'>) => (\n <h5 className=\"mt-0 mb-0 scroll-m-20 text-xs font-medium tracking-tighter\">\n {children}\n </h5>\n ),\n h6: ({ children }: MarkdownComponentProps<'h6'>) => (\n <h6 className=\"mt-0 mb-0 scroll-m-20 text-2xs font-medium tracking-tighter\">\n {children}\n </h6>\n ),\n p: ({ children }: MarkdownComponentProps<'p'>) => (\n <p className=\"mt-2 mb-3 text-base font-normal leading-5 tracking-tightest\">\n {children}\n </p>\n ),\n strong: ({ children }: MarkdownComponentProps<'strong'>) => (\n <strong className=\"font-medium\">{children}</strong>\n ),\n em: ({ children }: MarkdownComponentProps<'em'>) => (\n <em className=\"italic\">{children}</em>\n ),\n b: ({ children }: MarkdownComponentProps<'b'>) => (\n <b className=\"font-medium\">{children}</b>\n ),\n i: ({ children }: MarkdownComponentProps<'i'>) => (\n <i className=\"italic\">{children}</i>\n ),\n ul: ({ children }: MarkdownComponentProps<'ul'>) => (\n <ul className=\"ml-8.25 mb-3 pt-2 pl-0 pb-0 list-disc text-base font-normal tracking-tightest\">\n {children}\n </ul>\n ),\n ol: ({ children }: MarkdownComponentProps<'ol'>) => (\n <ol className=\"ml-8.25 mb-3 pt-2 pl-0 pb-0 list-decimal text-base font-normal tracking-tightest\">\n {children}\n </ol>\n ),\n li: ({ children }: MarkdownComponentProps<'li'>) => (\n <li className=\"py-0\">{children}</li>\n ),\n blockquote: ({ children }: MarkdownComponentProps<'blockquote'>) => (\n <blockquote className=\"my-3 pr-2 pl-2 border-l border-l-default text-sm text-muted-foreground font-normal tracking-tight not-italic\">\n {children}\n </blockquote>\n ),\n hr: () => <hr className=\"my-4 border-default\" />,\n a: ({ children, href, ...props }: MarkdownComponentProps<'a'>) => (\n <a\n className=\"text-link-foreground no-underline hover:underline underline-offset-4\"\n href={href}\n {...props}\n >\n {children}\n </a>\n ),\n table: ({ children }: MarkdownComponentProps<'table'>) => (\n <div\n className=\"my-6 overflow-x-auto\"\n tabIndex={0}\n role=\"group\"\n aria-label=\"Atlas AI Chat Table\"\n >\n <table className=\"w-full\">{children}</table>\n </div>\n ),\n thead: ({ children }: MarkdownComponentProps<'thead'>) => (\n <thead>{children}</thead>\n ),\n tbody: ({ children }: MarkdownComponentProps<'tbody'>) => (\n <tbody>{children}</tbody>\n ),\n tr: ({ children }: MarkdownComponentProps<'tr'>) => (\n <tr className=\"m-0 border-t p-0 even:bg-muted-background\">{children}</tr>\n ),\n th: ({ children }: MarkdownComponentProps<'th'>) => (\n <th className=\"border px-4 py-2 text-left font-bold\">{children}</th>\n ),\n td: ({ children }: MarkdownComponentProps<'td'>) => (\n <td className=\"border px-4 py-2 text-left\">{children}</td>\n ),\n};\n\nconst MessageResponseMarkdown = ({\n className,\n components,\n plugins,\n controls,\n ...props\n}: ComponentProps<typeof Streamdown>): JSX.Element => (\n <Streamdown\n className={cn(\n 'size-full',\n // Blockquote paragraph overrides\n '[&_blockquote_p]:text-sm',\n '[&_blockquote_p]:tracking-tight',\n // Inline code\n '[&_code]:relative',\n '[&_code]:rounded',\n '[&_code]:bg-muted-background',\n '[&_code]:px-[0.3rem]',\n '[&_code]:py-[0.2rem]',\n '[&_code]:font-mono',\n '[&_code]:text-sm',\n '[&_code]:font-semibold',\n // Code blocks (Streamdown container)\n '[&_div[data-streamdown=\"code-block\"]]:my-4',\n '[&_div[data-streamdown=\"code-block\"]]:w-full',\n '[&_div[data-streamdown=\"code-block\"]]:overflow-hidden',\n '[&_div[data-streamdown=\"code-block\"]]:rounded-xl',\n '[&_div[data-streamdown=\"code-block\"]]:border',\n '[&_div[data-streamdown=\"code-block\"]]:border-default',\n // Code block header\n '[&_div[data-streamdown=\"code-block-header\"]]:flex',\n '[&_div[data-streamdown=\"code-block-header\"]]:items-center',\n '[&_div[data-streamdown=\"code-block-header\"]]:justify-between',\n '[&_div[data-streamdown=\"code-block-header\"]]:bg-muted-background/80',\n '[&_div[data-streamdown=\"code-block-header\"]]:px-4',\n '[&_div[data-streamdown=\"code-block-header\"]]:py-3',\n '[&_div[data-streamdown=\"code-block-header\"]]:text-xs',\n '[&_div[data-streamdown=\"code-block-header\"]]:text-muted-foreground',\n // Pre element inside code block\n '[&_div[data-streamdown=\"code-block\"]_pre]:m-0',\n '[&_div[data-streamdown=\"code-block\"]_pre]:overflow-x-auto',\n '[&_div[data-streamdown=\"code-block\"]_pre]:border-t',\n '[&_div[data-streamdown=\"code-block\"]_pre]:border-default',\n '[&_div[data-streamdown=\"code-block\"]_pre]:bg-card-background!',\n '[&_div[data-streamdown=\"code-block\"]_pre]:p-4',\n '[&_div[data-streamdown=\"code-block\"]_pre]:text-sm',\n '[&_div[data-streamdown=\"code-block\"]_pre]:text-medium-foreground!',\n // Code element inside pre\n '[&_div[data-streamdown=\"code-block\"]_pre_code]:static',\n '[&_div[data-streamdown=\"code-block\"]_pre_code]:rounded-none',\n '[&_div[data-streamdown=\"code-block\"]_pre_code]:bg-transparent',\n '[&_div[data-streamdown=\"code-block\"]_pre_code]:p-0',\n '[&_div[data-streamdown=\"code-block\"]_pre_code]:font-mono',\n '[&_div[data-streamdown=\"code-block\"]_pre_code]:text-sm',\n '[&_div[data-streamdown=\"code-block\"]_pre_code]:font-normal',\n // Code block buttons\n '[&_button[data-streamdown=\"code-block-copy-button\"]]:cursor-pointer',\n '[&_button[data-streamdown=\"code-block-copy-button\"]]:p-1',\n '[&_button[data-streamdown=\"code-block-copy-button\"]]:text-muted-foreground',\n '[&_button[data-streamdown=\"code-block-copy-button\"]]:transition-all',\n '[&_button[data-streamdown=\"code-block-copy-button\"]]:hover:text-base-foreground',\n '[&_button[data-streamdown=\"code-block-download-button\"]]:cursor-pointer',\n '[&_button[data-streamdown=\"code-block-download-button\"]]:p-1',\n '[&_button[data-streamdown=\"code-block-download-button\"]]:text-muted-foreground',\n '[&_button[data-streamdown=\"code-block-download-button\"]]:transition-all',\n '[&_button[data-streamdown=\"code-block-download-button\"]]:hover:text-base-foreground',\n // Regular pre blocks (not in Streamdown code blocks)\n '[&_pre:not([data-streamdown])]:my-3',\n '[&_pre:not([data-streamdown])]:mx-0',\n '[&_pre:not([data-streamdown])]:overflow-x-auto',\n '[&_pre:not([data-streamdown])]:rounded-md',\n '[&_pre:not([data-streamdown])]:border',\n '[&_pre:not([data-streamdown])]:bg-card-background',\n '[&_pre:not([data-streamdown])]:p-4',\n '[&_pre:not([data-streamdown])]:text-medium-foreground',\n '[&_pre:not([data-streamdown])]:text-sm',\n '[&_pre:not([data-streamdown])_code]:static',\n '[&_pre:not([data-streamdown])_code]:rounded-none',\n '[&_pre:not([data-streamdown])_code]:bg-transparent',\n '[&_pre:not([data-streamdown])_code]:px-0',\n '[&_pre:not([data-streamdown])_code]:py-0',\n '[&_pre:not([data-streamdown])_code]:font-mono',\n '[&_pre:not([data-streamdown])_code]:text-sm',\n '[&_pre:not([data-streamdown])_code]:font-normal',\n // Mermaid diagram blocks\n '[&_div[data-streamdown=\"mermaid-block\"]]:bg-card-background',\n '[&_div[data-streamdown=\"mermaid-block\"]]:text-base-foreground',\n '[&_div[data-streamdown=\"mermaid-block\"]]:flex',\n '[&_div[data-streamdown=\"mermaid-block\"]]:flex-col',\n '[&_div[data-streamdown=\"mermaid-block\"]]:rounded-lg',\n '[&_div[data-streamdown=\"mermaid-block\"]]:hover:bg-base-background-hover',\n '[&_div[data-streamdown=\"mermaid-block\"]]:border-0',\n // Positioning context for the action strip (see below)\n '[&_div[data-streamdown=\"mermaid-block\"]]:relative',\n // Nested scroll + sticky + pointer-events breaks hit-testing on Mermaid Copy/Download\n // (same class of issue as github.com/vercel/streamdown/issues/494). Force absolute strip.\n '[&_div[data-streamdown=\"mermaid-block\"]>div:has([data-streamdown=\"mermaid-block-actions\"])]:!absolute',\n '[&_div[data-streamdown=\"mermaid-block\"]>div:has([data-streamdown=\"mermaid-block-actions\"])]:!top-2',\n '[&_div[data-streamdown=\"mermaid-block\"]>div:has([data-streamdown=\"mermaid-block-actions\"])]:!right-2',\n '[&_div[data-streamdown=\"mermaid-block\"]>div:has([data-streamdown=\"mermaid-block-actions\"])]:!z-10',\n '[&_div[data-streamdown=\"mermaid-block\"]>div:has([data-streamdown=\"mermaid-block-actions\"])]:!mt-0',\n '[&_div[data-streamdown=\"mermaid-block\"]>div:has([data-streamdown=\"mermaid-block-actions\"])]:!pointer-events-auto',\n // Ensure mermaid container is tall enough for the toolbar (pan/zoom + actions)\n '[&_div[data-streamdown=\"mermaid-block\"]_.relative.w-full]:!min-h-28',\n // KaTeX sizing (overflow rules live in styles.source.css)\n '[&_.katex-display]:my-3',\n '[&_.katex]:text-[1em]',\n // First and last child margin resets\n '[&>*:first-child]:mt-0',\n '[&>*:last-child]:mb-0',\n className\n )}\n components={{ ...messageResponseComponents, ...components }}\n controls={controls ?? MESSAGE_RESPONSE_DEFAULT_STREAMDOWN_CONTROLS}\n plugins={{ ...plugins, mermaid: mermaidPlugin }}\n {...props}\n />\n);\n\nconst MessageResponse = ({\n id,\n role,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n 'data-testid': dataTestId,\n ...props\n}: MessageResponseProps): JSX.Element => (\n <div\n data-slot=\"message-response\"\n id={id}\n role={role}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n data-testid={dataTestId}\n >\n <MessageResponseMarkdown {...props} />\n </div>\n);\n\ntype MessageAttachmentProps = HTMLAttributes<HTMLDivElement> & {\n data: FileUIPart;\n className?: string;\n onRemove?: () => void;\n};\n\nfunction MessageAttachment({\n data,\n className,\n onRemove,\n ...props\n}: MessageAttachmentProps): ReactNode {\n const filename = data.filename || '';\n const mediaType =\n data.mediaType?.startsWith('image/') && data.url ? 'image' : 'file';\n const isImage = mediaType === 'image';\n const attachmentLabel = filename || (isImage ? 'Image' : 'Attachment');\n\n return (\n <div\n data-slot=\"message-attachment\"\n className={cn(\n 'group relative size-24 overflow-hidden rounded-lg',\n className\n )}\n {...props}\n >\n {isImage ? (\n <>\n <img\n alt={filename || 'attachment'}\n className=\"size-full object-cover\"\n height={100}\n src={data.url}\n width={100}\n />\n {onRemove && (\n <Button\n aria-label=\"Remove attachment\"\n className=\"absolute top-2 right-2 size-6 rounded-full bg-card-background/80 p-0 opacity-0 backdrop-blur-sm transition-opacity hover:bg-card-background group-hover:opacity-100 [&>svg]:size-3\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n type=\"button\"\n variant=\"ghost\"\n >\n <IconX />\n <span className=\"sr-only\">Remove</span>\n </Button>\n )}\n </>\n ) : (\n <>\n <Tooltip>\n <TooltipTrigger\n render={\n <div className=\"flex size-full shrink-0 items-center justify-center rounded-lg bg-muted-background text-muted-foreground\">\n <IconPaperclip className=\"size-4\" />\n </div>\n }\n />\n <TooltipContent>\n <p>{attachmentLabel}</p>\n </TooltipContent>\n </Tooltip>\n {onRemove && (\n <Button\n aria-label=\"Remove attachment\"\n className=\"size-6 shrink-0 rounded-full p-0 opacity-0 transition-opacity hover:bg-base-background-hover group-hover:opacity-100 [&>svg]:size-3\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n type=\"button\"\n variant=\"ghost\"\n >\n <IconX />\n <span className=\"sr-only\">Remove</span>\n </Button>\n )}\n </>\n )}\n </div>\n );\n}\n\ntype MessageAttachmentsProps = ComponentProps<'div'>;\n\nfunction MessageAttachments({\n children,\n className,\n ...props\n}: MessageAttachmentsProps): ReactNode {\n if (!children) {\n return null;\n }\n\n return (\n <div\n data-slot=\"message-attachments\"\n className={cn(\n 'ml-auto flex w-fit flex-wrap items-start gap-2',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\ntype MessageToolbarProps = ComponentProps<'div'>;\n\nconst MessageToolbar = ({\n className,\n children,\n ...props\n}: MessageToolbarProps): ReactNode => (\n <div\n data-slot=\"message-toolbar\"\n className={cn(\n 'mt-4 flex w-full items-center justify-between gap-4',\n className\n )}\n {...props}\n >\n {children}\n </div>\n);\n\nexport {\n Message,\n MessageAction,\n MessageActions,\n MessageAttachment,\n MessageAttachments,\n MessageAvatar,\n MessageAvatarIcon,\n MessageBranch,\n MessageBranchContent,\n MessageBranchNext,\n MessageBranchPage,\n MessageBranchPrevious,\n MessageBranchSelector,\n MessageContent,\n MessageResponse,\n MessageToolbar,\n};\n"],"names":["createContext","useCallback","useContext","useEffect","useMemo","useState","mermaid","mermaidPlugin","IconChevronLeft","IconChevronRight","IconPaperclip","IconX","Streamdown","cn","getInitials","Avatar","AvatarFallback","AvatarIcon","AvatarImage","Button","ButtonGroup","ButtonGroupText","Tooltip","TooltipContent","TooltipTrigger","MESSAGE_RESPONSE_DEFAULT_STREAMDOWN_CONTROLS","Message","className","isResponse","props","div","data-slot","MessageContent","children","MessageAvatar","avatarUrl","name","variant","sizes","fallbackText","alt","src","MessageAvatarIcon","MessageActions","MessageAction","tooltip","label","size","button","type","span","render","p","MessageBranchContext","useMessageBranch","context","Error","MessageBranch","defaultBranch","onBranchChange","currentBranch","setCurrentBranch","branches","setBranches","goToPrevious","prev","newBranch","length","goToNext","contextValue","totalBranches","Provider","value","MessageBranchContent","childrenArray","Array","isArray","map","branch","index","key","MessageBranchSelector","orientation","MessageBranchPrevious","aria-label","disabled","onClick","MessageBranchNext","MessageBranchPage","messageResponseComponents","h1","h2","h3","h4","h5","h6","strong","em","b","i","ul","ol","li","blockquote","hr","a","href","table","tabIndex","role","thead","tbody","tr","th","td","MessageResponseMarkdown","components","plugins","controls","MessageResponse","id","ariaLabel","ariaLabelledBy","ariaDescribedBy","dataTestId","aria-labelledby","aria-describedby","data-testid","MessageAttachment","data","onRemove","filename","mediaType","startsWith","url","isImage","attachmentLabel","img","height","width","e","stopPropagation","MessageAttachments","MessageToolbar"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ComponentRef, type ForwardRefExoticComponent, type JSX, type ReactNode, type RefAttributes } from "react";
|
|
2
|
+
import { type CollapseStrategy, type CollapseUnit, type OverflowComponent } from "./overflow-list.utils";
|
|
3
|
+
type OverflowMeasurement = {
|
|
4
|
+
size: number;
|
|
5
|
+
collapsedSize: number;
|
|
6
|
+
};
|
|
7
|
+
type OverflowListProps = {
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
separator?: ReactNode;
|
|
10
|
+
collapseOrder: CollapseUnit[] | CollapseStrategy;
|
|
11
|
+
overflowComponent: OverflowComponent;
|
|
12
|
+
overflowPosition?: "auto" | "end";
|
|
13
|
+
orientation?: "horizontal" | "vertical";
|
|
14
|
+
as?: keyof JSX.IntrinsicElements;
|
|
15
|
+
lastItemMinVisibleRem?: number;
|
|
16
|
+
lastItemFlexibleSelector?: string;
|
|
17
|
+
className?: string;
|
|
18
|
+
onMeasure?: (measurement: OverflowMeasurement) => void;
|
|
19
|
+
};
|
|
20
|
+
declare const OverflowList: ForwardRefExoticComponent<OverflowListProps & RefAttributes<ComponentRef<"div">>>;
|
|
21
|
+
export { OverflowList, type OverflowListProps, type OverflowMeasurement };
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Children, createElement, forwardRef, Fragment, isValidElement, useCallback, useLayoutEffect, useRef, useState } from "react";
|
|
3
|
+
import { cn } from "../../../../lib/utils.js";
|
|
4
|
+
import { assignRef } from "../../../../utils/assign-ref.js";
|
|
5
|
+
import { buildVisibleTokens, collapseStatesEqual, computeCollapsedMinWidth, computeCollapseState, getMeasurements, INITIAL_STATE, renderOverflow, resolveCollapseOrder, resolveInjectedElement } from "./overflow-list.utils.js";
|
|
6
|
+
function toValidElements(children) {
|
|
7
|
+
// eslint-disable-next-line @eslint-react/no-children-to-array -- OverflowList needs a stable, flattened array of elements to index into for collapse/resize math; Children.toArray is the only API that flattens fragments and assigns stable keys
|
|
8
|
+
return Children.toArray(children).filter((child)=>/*#__PURE__*/ isValidElement(child));
|
|
9
|
+
}
|
|
10
|
+
const OverflowList = /*#__PURE__*/ forwardRef(function OverflowList({ children, separator, collapseOrder, overflowComponent: Overflow, overflowPosition = 'auto', orientation = 'horizontal', as: ContentElement = 'div', lastItemMinVisibleRem, lastItemFlexibleSelector, className, onMeasure }, ref) {
|
|
11
|
+
const containerRef = useRef(null);
|
|
12
|
+
const setContainerRef = useCallback((el)=>{
|
|
13
|
+
assignRef(containerRef, el);
|
|
14
|
+
assignRef(ref, el);
|
|
15
|
+
}, [
|
|
16
|
+
ref
|
|
17
|
+
]);
|
|
18
|
+
const measureRef = useRef(null);
|
|
19
|
+
const overflowMeasureRef = useRef(null);
|
|
20
|
+
const measurementsRef = useRef(null);
|
|
21
|
+
const [collapseState, setCollapseState] = useState(INITIAL_STATE);
|
|
22
|
+
const [minSize, setMinSize] = useState(0);
|
|
23
|
+
const minSizeRef = useRef(0);
|
|
24
|
+
const lastSizeRef = useRef(0);
|
|
25
|
+
const separatorRef = useRef(separator);
|
|
26
|
+
const orientationRef = useRef(orientation);
|
|
27
|
+
const onMeasureRef = useRef(onMeasure);
|
|
28
|
+
const lastItemMinVisibleRemRef = useRef(lastItemMinVisibleRem);
|
|
29
|
+
const lastItemFlexibleSelectorRef = useRef(lastItemFlexibleSelector);
|
|
30
|
+
const items = toValidElements(children);
|
|
31
|
+
const itemCount = items.length;
|
|
32
|
+
const resolvedOrder = resolveCollapseOrder(collapseOrder, itemCount);
|
|
33
|
+
const itemCountRef = useRef(itemCount);
|
|
34
|
+
const collapseOrderRef = useRef(resolvedOrder);
|
|
35
|
+
const collapseOrderKey = resolvedOrder.join(',');
|
|
36
|
+
useLayoutEffect(()=>{
|
|
37
|
+
separatorRef.current = separator;
|
|
38
|
+
itemCountRef.current = itemCount;
|
|
39
|
+
collapseOrderRef.current = resolvedOrder;
|
|
40
|
+
orientationRef.current = orientation;
|
|
41
|
+
onMeasureRef.current = onMeasure;
|
|
42
|
+
lastItemMinVisibleRemRef.current = lastItemMinVisibleRem;
|
|
43
|
+
lastItemFlexibleSelectorRef.current = lastItemFlexibleSelector;
|
|
44
|
+
});
|
|
45
|
+
// eslint-disable-next-line react-hooks/preserve-manual-memoization -- stable ref-based callback required for ResizeObserver; React Compiler cannot preserve this memoization
|
|
46
|
+
const measure = useCallback(()=>{
|
|
47
|
+
const measureEl = measureRef.current;
|
|
48
|
+
const overflowEl = overflowMeasureRef.current;
|
|
49
|
+
if (!measureEl || !overflowEl || itemCountRef.current === 0) {
|
|
50
|
+
measurementsRef.current = null;
|
|
51
|
+
setMinSize(0);
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
const measurements = getMeasurements(measureEl, overflowEl, !!separatorRef.current, orientationRef.current, lastItemFlexibleSelectorRef.current);
|
|
55
|
+
measurementsRef.current = measurements;
|
|
56
|
+
const collapsedMinWidth = Math.ceil(computeCollapsedMinWidth({
|
|
57
|
+
...measurements,
|
|
58
|
+
collapseOrder: collapseOrderRef.current,
|
|
59
|
+
lastItemMinVisible: lastItemMinVisibleRemRef.current != null ? lastItemMinVisibleRemRef.current * parseFloat(getComputedStyle(document.documentElement).fontSize) : undefined
|
|
60
|
+
}));
|
|
61
|
+
minSizeRef.current = collapsedMinWidth;
|
|
62
|
+
setMinSize((prev)=>prev === collapsedMinWidth ? prev : collapsedMinWidth);
|
|
63
|
+
return measurements;
|
|
64
|
+
}, []);
|
|
65
|
+
// eslint-disable-next-line react-hooks/preserve-manual-memoization -- stable ref-based callback required for ResizeObserver; React Compiler cannot preserve this memoization
|
|
66
|
+
const recalculate = useCallback(()=>{
|
|
67
|
+
const container = containerRef.current;
|
|
68
|
+
if (!container) return;
|
|
69
|
+
const containerSize = orientationRef.current === 'vertical' ? container.getBoundingClientRect().height : container.getBoundingClientRect().width;
|
|
70
|
+
if (containerSize === 0 || containerSize === lastSizeRef.current) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
lastSizeRef.current = containerSize;
|
|
74
|
+
if (itemCountRef.current === 0) {
|
|
75
|
+
setCollapseState(INITIAL_STATE);
|
|
76
|
+
onMeasureRef.current?.({
|
|
77
|
+
size: containerSize,
|
|
78
|
+
collapsedSize: 0
|
|
79
|
+
});
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const measurements = measurementsRef.current ?? measure();
|
|
83
|
+
if (!measurements) return;
|
|
84
|
+
const newState = computeCollapseState({
|
|
85
|
+
containerSize,
|
|
86
|
+
...measurements,
|
|
87
|
+
collapseOrder: collapseOrderRef.current
|
|
88
|
+
});
|
|
89
|
+
setCollapseState((prev)=>collapseStatesEqual(prev, newState) ? prev : newState);
|
|
90
|
+
onMeasureRef.current?.({
|
|
91
|
+
size: containerSize,
|
|
92
|
+
collapsedSize: minSizeRef.current
|
|
93
|
+
});
|
|
94
|
+
}, [
|
|
95
|
+
measure
|
|
96
|
+
]);
|
|
97
|
+
useLayoutEffect(()=>{
|
|
98
|
+
const container = containerRef.current;
|
|
99
|
+
const measureEl = measureRef.current;
|
|
100
|
+
const overflowEl = overflowMeasureRef.current;
|
|
101
|
+
if (!container) return;
|
|
102
|
+
const observer = new ResizeObserver((entries)=>{
|
|
103
|
+
const itemsChanged = entries.some((entry)=>entry.target === measureEl || entry.target === overflowEl);
|
|
104
|
+
if (itemsChanged) {
|
|
105
|
+
measure();
|
|
106
|
+
lastSizeRef.current = 0;
|
|
107
|
+
}
|
|
108
|
+
recalculate();
|
|
109
|
+
});
|
|
110
|
+
observer.observe(container);
|
|
111
|
+
if (measureEl) observer.observe(measureEl);
|
|
112
|
+
if (overflowEl) observer.observe(overflowEl);
|
|
113
|
+
// eslint-disable-next-line react-hooks/set-state-in-effect -- intentional: useLayoutEffect + synchronous setState is the correct DOM measurement pattern; avoids paint flash
|
|
114
|
+
measure();
|
|
115
|
+
recalculate();
|
|
116
|
+
return ()=>observer.disconnect();
|
|
117
|
+
}, [
|
|
118
|
+
measure,
|
|
119
|
+
recalculate,
|
|
120
|
+
ContentElement
|
|
121
|
+
]);
|
|
122
|
+
useLayoutEffect(()=>{
|
|
123
|
+
measurementsRef.current = null;
|
|
124
|
+
lastSizeRef.current = 0;
|
|
125
|
+
// eslint-disable-next-line react-hooks/set-state-in-effect -- intentional: useLayoutEffect + synchronous setState is the correct DOM measurement pattern; avoids paint flash
|
|
126
|
+
measure();
|
|
127
|
+
recalculate();
|
|
128
|
+
}, [
|
|
129
|
+
itemCount,
|
|
130
|
+
collapseOrderKey,
|
|
131
|
+
orientation,
|
|
132
|
+
measure,
|
|
133
|
+
recalculate,
|
|
134
|
+
ContentElement
|
|
135
|
+
]);
|
|
136
|
+
if (itemCount === 0) return null;
|
|
137
|
+
const hiddenSet = new Set(collapseState.hiddenIndices);
|
|
138
|
+
const hiddenItems = items.filter((item, i)=>item != null && hiddenSet.has(i));
|
|
139
|
+
const SeparatorElement = resolveInjectedElement(ContentElement);
|
|
140
|
+
const overflowWrapper = SeparatorElement === 'li' ? 'li' : null;
|
|
141
|
+
const tokens = buildVisibleTokens(items, hiddenSet, overflowPosition === 'end' ? items.length : collapseState.overflowAt, hiddenItems, Overflow, overflowWrapper);
|
|
142
|
+
const isVertical = orientation === 'vertical';
|
|
143
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
144
|
+
ref: setContainerRef,
|
|
145
|
+
"data-slot": "overflow-list",
|
|
146
|
+
className: cn('relative overflow-hidden', isVertical ? 'min-h-0' : 'min-w-0', className),
|
|
147
|
+
style: {
|
|
148
|
+
[isVertical ? 'minHeight' : 'minWidth']: minSize || undefined
|
|
149
|
+
},
|
|
150
|
+
children: [
|
|
151
|
+
/*#__PURE__*/ createElement(ContentElement, {
|
|
152
|
+
ref: measureRef,
|
|
153
|
+
'aria-hidden': true,
|
|
154
|
+
className: cn(isVertical ? 'pointer-events-none invisible absolute left-0 top-0 flex flex-col list-none flex-nowrap text-sm tracking-tight *:shrink-0' : 'pointer-events-none invisible flex list-none flex-nowrap items-center text-sm tracking-tight *:shrink-0', 'p-0 m-0', className, isVertical ? 'h-max' : 'h-0 w-max')
|
|
155
|
+
}, items.map((child, i)=>/*#__PURE__*/ _jsxs(Fragment, {
|
|
156
|
+
children: [
|
|
157
|
+
i > 0 && separator != null && /*#__PURE__*/ _jsx(SeparatorElement, {
|
|
158
|
+
"data-slot": "separator",
|
|
159
|
+
"aria-hidden": true,
|
|
160
|
+
children: separator
|
|
161
|
+
}),
|
|
162
|
+
child
|
|
163
|
+
]
|
|
164
|
+
}, child.key ?? i))),
|
|
165
|
+
/*#__PURE__*/ createElement(ContentElement, {
|
|
166
|
+
ref: overflowMeasureRef,
|
|
167
|
+
'aria-hidden': true,
|
|
168
|
+
className: cn(isVertical ? 'pointer-events-none invisible absolute left-0 top-0 flex flex-col list-none flex-nowrap text-sm tracking-tight *:shrink-0' : 'pointer-events-none invisible absolute left-0 top-0 flex list-none flex-nowrap items-center text-sm tracking-tight *:shrink-0', 'p-0 m-0', className, isVertical ? 'h-max' : undefined)
|
|
169
|
+
}, /*#__PURE__*/ createElement(SeparatorElement, {
|
|
170
|
+
'aria-hidden': true,
|
|
171
|
+
className: 'size-0'
|
|
172
|
+
}), separator != null && /*#__PURE__*/ createElement(SeparatorElement, {
|
|
173
|
+
'data-slot': 'separator',
|
|
174
|
+
'aria-hidden': true
|
|
175
|
+
}, separator), renderOverflow(Overflow, items, overflowWrapper)),
|
|
176
|
+
/*#__PURE__*/ _jsx(ContentElement, {
|
|
177
|
+
"data-slot": "overflow-list-content",
|
|
178
|
+
"data-truncated": !!hiddenItems.length || undefined,
|
|
179
|
+
className: cn(isVertical ? 'flex flex-col list-none flex-nowrap text-sm tracking-tight *:shrink-0' : 'flex list-none flex-nowrap items-center text-sm tracking-tight *:shrink-0', 'p-0 m-0 h-auto w-auto', className),
|
|
180
|
+
children: tokens.map((token, index)=>/*#__PURE__*/ _jsxs(Fragment, {
|
|
181
|
+
children: [
|
|
182
|
+
index > 0 && separator != null && /*#__PURE__*/ _jsx(SeparatorElement, {
|
|
183
|
+
"data-slot": "separator",
|
|
184
|
+
"aria-hidden": true,
|
|
185
|
+
children: separator
|
|
186
|
+
}),
|
|
187
|
+
token.node
|
|
188
|
+
]
|
|
189
|
+
}, token.key))
|
|
190
|
+
})
|
|
191
|
+
]
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
OverflowList.displayName = 'OverflowList';
|
|
195
|
+
export { OverflowList };
|
|
196
|
+
|
|
197
|
+
//# sourceMappingURL=overflow-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/ui/core/overflow-list/overflow-list.tsx"],"sourcesContent":["import {\n Children,\n createElement,\n forwardRef,\n Fragment,\n isValidElement,\n useCallback,\n useLayoutEffect,\n useRef,\n useState,\n type ComponentRef,\n type ForwardRefExoticComponent,\n type JSX,\n type ReactNode,\n type Ref,\n type RefAttributes,\n} from 'react';\n\nimport { cn } from '../../../../lib/utils';\nimport { assignRef } from '../../../../utils/assign-ref';\n\nimport {\n buildVisibleTokens,\n collapseStatesEqual,\n computeCollapsedMinWidth,\n computeCollapseState,\n getMeasurements,\n INITIAL_STATE,\n renderOverflow,\n resolveCollapseOrder,\n resolveInjectedElement,\n type CollapseState,\n type CollapseStrategy,\n type CollapseUnit,\n type ItemElement,\n type OverflowComponent,\n} from './overflow-list.utils';\n\nfunction toValidElements(children: ReactNode): ItemElement[] {\n // eslint-disable-next-line @eslint-react/no-children-to-array -- OverflowList needs a stable, flattened array of elements to index into for collapse/resize math; Children.toArray is the only API that flattens fragments and assigns stable keys\n return Children.toArray(children).filter((child): child is ItemElement =>\n isValidElement(child)\n );\n}\n\ntype OverflowMeasurement = {\n size: number;\n collapsedSize: number;\n};\n\ntype OverflowListProps = {\n children: ReactNode;\n separator?: ReactNode;\n collapseOrder: CollapseUnit[] | CollapseStrategy;\n overflowComponent: OverflowComponent;\n overflowPosition?: 'auto' | 'end';\n orientation?: 'horizontal' | 'vertical';\n as?: keyof JSX.IntrinsicElements;\n lastItemMinVisibleRem?: number;\n lastItemFlexibleSelector?: string;\n className?: string;\n onMeasure?: (measurement: OverflowMeasurement) => void;\n};\n\nconst OverflowList: ForwardRefExoticComponent<\n OverflowListProps & RefAttributes<ComponentRef<'div'>>\n> = forwardRef<ComponentRef<'div'>, OverflowListProps>(function OverflowList(\n {\n children,\n separator,\n collapseOrder,\n overflowComponent: Overflow,\n overflowPosition = 'auto',\n orientation = 'horizontal',\n as: ContentElement = 'div',\n lastItemMinVisibleRem,\n lastItemFlexibleSelector,\n className,\n onMeasure,\n }: OverflowListProps,\n ref: Ref<ComponentRef<'div'>>\n) {\n const containerRef = useRef<HTMLDivElement>(null);\n const setContainerRef = useCallback(\n (el: HTMLDivElement | null) => {\n assignRef(containerRef, el);\n assignRef(ref, el);\n },\n [ref]\n );\n\n const measureRef = useRef<HTMLElement>(null);\n const overflowMeasureRef = useRef<HTMLElement>(null);\n const measurementsRef = useRef<{\n itemWidths: number[];\n gap: number;\n overflowWidth: number;\n outerMarginLeft: number;\n outerMarginRight: number;\n lastItemFlexibleWidth?: number;\n } | null>(null);\n const [collapseState, setCollapseState] =\n useState<CollapseState>(INITIAL_STATE);\n const [minSize, setMinSize] = useState(0);\n const minSizeRef = useRef(0);\n const lastSizeRef = useRef(0);\n\n const separatorRef = useRef(separator);\n const orientationRef = useRef(orientation);\n const onMeasureRef = useRef(onMeasure);\n const lastItemMinVisibleRemRef = useRef(lastItemMinVisibleRem);\n const lastItemFlexibleSelectorRef = useRef(lastItemFlexibleSelector);\n const items = toValidElements(children);\n const itemCount = items.length;\n\n const resolvedOrder = resolveCollapseOrder(collapseOrder, itemCount);\n\n const itemCountRef = useRef(itemCount);\n const collapseOrderRef = useRef(resolvedOrder);\n const collapseOrderKey = resolvedOrder.join(',');\n\n useLayoutEffect(() => {\n separatorRef.current = separator;\n itemCountRef.current = itemCount;\n collapseOrderRef.current = resolvedOrder;\n orientationRef.current = orientation;\n onMeasureRef.current = onMeasure;\n lastItemMinVisibleRemRef.current = lastItemMinVisibleRem;\n lastItemFlexibleSelectorRef.current = lastItemFlexibleSelector;\n });\n\n // eslint-disable-next-line react-hooks/preserve-manual-memoization -- stable ref-based callback required for ResizeObserver; React Compiler cannot preserve this memoization\n const measure = useCallback(() => {\n const measureEl = measureRef.current;\n const overflowEl = overflowMeasureRef.current;\n if (!measureEl || !overflowEl || itemCountRef.current === 0) {\n measurementsRef.current = null;\n setMinSize(0);\n return null;\n }\n\n const measurements = getMeasurements(\n measureEl,\n overflowEl,\n !!separatorRef.current,\n orientationRef.current,\n lastItemFlexibleSelectorRef.current\n );\n measurementsRef.current = measurements;\n\n const collapsedMinWidth = Math.ceil(\n computeCollapsedMinWidth({\n ...measurements,\n collapseOrder: collapseOrderRef.current,\n lastItemMinVisible:\n lastItemMinVisibleRemRef.current != null\n ? lastItemMinVisibleRemRef.current *\n parseFloat(getComputedStyle(document.documentElement).fontSize)\n : undefined,\n })\n );\n minSizeRef.current = collapsedMinWidth;\n setMinSize((prev) =>\n prev === collapsedMinWidth ? prev : collapsedMinWidth\n );\n\n return measurements;\n }, []);\n\n // eslint-disable-next-line react-hooks/preserve-manual-memoization -- stable ref-based callback required for ResizeObserver; React Compiler cannot preserve this memoization\n const recalculate = useCallback(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const containerSize =\n orientationRef.current === 'vertical'\n ? container.getBoundingClientRect().height\n : container.getBoundingClientRect().width;\n\n if (containerSize === 0 || containerSize === lastSizeRef.current) {\n return;\n }\n lastSizeRef.current = containerSize;\n\n if (itemCountRef.current === 0) {\n setCollapseState(INITIAL_STATE);\n onMeasureRef.current?.({ size: containerSize, collapsedSize: 0 });\n return;\n }\n\n const measurements = measurementsRef.current ?? measure();\n if (!measurements) return;\n\n const newState = computeCollapseState({\n containerSize,\n ...measurements,\n collapseOrder: collapseOrderRef.current,\n });\n\n setCollapseState((prev) =>\n collapseStatesEqual(prev, newState) ? prev : newState\n );\n onMeasureRef.current?.({\n size: containerSize,\n collapsedSize: minSizeRef.current,\n });\n }, [measure]);\n\n useLayoutEffect(() => {\n const container = containerRef.current;\n const measureEl = measureRef.current;\n const overflowEl = overflowMeasureRef.current;\n if (!container) return;\n\n const observer = new ResizeObserver((entries) => {\n const itemsChanged = entries.some(\n (entry) => entry.target === measureEl || entry.target === overflowEl\n );\n if (itemsChanged) {\n measure();\n lastSizeRef.current = 0;\n }\n recalculate();\n });\n\n observer.observe(container);\n if (measureEl) observer.observe(measureEl);\n if (overflowEl) observer.observe(overflowEl);\n // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional: useLayoutEffect + synchronous setState is the correct DOM measurement pattern; avoids paint flash\n measure();\n recalculate();\n\n return () => observer.disconnect();\n }, [measure, recalculate, ContentElement]);\n\n useLayoutEffect(() => {\n measurementsRef.current = null;\n lastSizeRef.current = 0;\n // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional: useLayoutEffect + synchronous setState is the correct DOM measurement pattern; avoids paint flash\n measure();\n recalculate();\n }, [\n itemCount,\n collapseOrderKey,\n orientation,\n measure,\n recalculate,\n ContentElement,\n ]);\n\n if (itemCount === 0) return null;\n\n const hiddenSet = new Set(collapseState.hiddenIndices);\n const hiddenItems = items.filter(\n (item, i) => item != null && hiddenSet.has(i)\n );\n\n const SeparatorElement = resolveInjectedElement(ContentElement);\n const overflowWrapper = SeparatorElement === 'li' ? 'li' : null;\n\n const tokens = buildVisibleTokens(\n items,\n hiddenSet,\n overflowPosition === 'end' ? items.length : collapseState.overflowAt,\n hiddenItems,\n Overflow,\n overflowWrapper\n );\n\n const isVertical = orientation === 'vertical';\n\n return (\n <div\n ref={setContainerRef}\n data-slot=\"overflow-list\"\n className={cn(\n 'relative overflow-hidden',\n isVertical ? 'min-h-0' : 'min-w-0',\n className\n )}\n style={{\n [isVertical ? 'minHeight' : 'minWidth']: minSize || undefined,\n }}\n >\n {createElement(\n ContentElement,\n {\n ref: measureRef,\n 'aria-hidden': true,\n className: cn(\n isVertical\n ? 'pointer-events-none invisible absolute left-0 top-0 flex flex-col list-none flex-nowrap text-sm tracking-tight *:shrink-0'\n : 'pointer-events-none invisible flex list-none flex-nowrap items-center text-sm tracking-tight *:shrink-0',\n 'p-0 m-0',\n className,\n isVertical ? 'h-max' : 'h-0 w-max'\n ),\n },\n items.map((child, i) => (\n <Fragment key={child.key ?? i}>\n {i > 0 && separator != null && (\n <SeparatorElement data-slot=\"separator\" aria-hidden>\n {separator}\n </SeparatorElement>\n )}\n {child}\n </Fragment>\n ))\n )}\n\n {createElement(\n ContentElement,\n {\n ref: overflowMeasureRef,\n 'aria-hidden': true,\n className: cn(\n isVertical\n ? 'pointer-events-none invisible absolute left-0 top-0 flex flex-col list-none flex-nowrap text-sm tracking-tight *:shrink-0'\n : 'pointer-events-none invisible absolute left-0 top-0 flex list-none flex-nowrap items-center text-sm tracking-tight *:shrink-0',\n 'p-0 m-0',\n className,\n isVertical ? 'h-max' : undefined\n ),\n },\n createElement(SeparatorElement, {\n 'aria-hidden': true,\n className: 'size-0',\n }),\n separator != null &&\n createElement(\n SeparatorElement,\n { 'data-slot': 'separator', 'aria-hidden': true },\n separator\n ),\n renderOverflow(Overflow, items, overflowWrapper)\n )}\n\n <ContentElement\n data-slot=\"overflow-list-content\"\n data-truncated={!!hiddenItems.length || undefined}\n className={cn(\n isVertical\n ? 'flex flex-col list-none flex-nowrap text-sm tracking-tight *:shrink-0'\n : 'flex list-none flex-nowrap items-center text-sm tracking-tight *:shrink-0',\n 'p-0 m-0 h-auto w-auto',\n className\n )}\n >\n {tokens.map((token, index) => (\n <Fragment key={token.key}>\n {index > 0 && separator != null && (\n <SeparatorElement data-slot=\"separator\" aria-hidden>\n {separator}\n </SeparatorElement>\n )}\n {token.node}\n </Fragment>\n ))}\n </ContentElement>\n </div>\n );\n});\nOverflowList.displayName = 'OverflowList';\n\nexport { OverflowList, type OverflowListProps, type OverflowMeasurement };\n"],"names":["Children","createElement","forwardRef","Fragment","isValidElement","useCallback","useLayoutEffect","useRef","useState","cn","assignRef","buildVisibleTokens","collapseStatesEqual","computeCollapsedMinWidth","computeCollapseState","getMeasurements","INITIAL_STATE","renderOverflow","resolveCollapseOrder","resolveInjectedElement","toValidElements","children","toArray","filter","child","OverflowList","separator","collapseOrder","overflowComponent","Overflow","overflowPosition","orientation","as","ContentElement","lastItemMinVisibleRem","lastItemFlexibleSelector","className","onMeasure","ref","containerRef","setContainerRef","el","measureRef","overflowMeasureRef","measurementsRef","collapseState","setCollapseState","minSize","setMinSize","minSizeRef","lastSizeRef","separatorRef","orientationRef","onMeasureRef","lastItemMinVisibleRemRef","lastItemFlexibleSelectorRef","items","itemCount","length","resolvedOrder","itemCountRef","collapseOrderRef","collapseOrderKey","join","current","measure","measureEl","overflowEl","measurements","collapsedMinWidth","Math","ceil","lastItemMinVisible","parseFloat","getComputedStyle","document","documentElement","fontSize","undefined","prev","recalculate","container","containerSize","getBoundingClientRect","height","width","size","collapsedSize","newState","observer","ResizeObserver","entries","itemsChanged","some","entry","target","observe","disconnect","hiddenSet","Set","hiddenIndices","hiddenItems","item","i","has","SeparatorElement","overflowWrapper","tokens","overflowAt","isVertical","div","data-slot","style","map","aria-hidden","key","data-truncated","token","index","node","displayName"],"mappings":"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"}
|
|
@@ -1,52 +1,54 @@
|
|
|
1
|
-
import { ComponentType, ReactElement, ReactNode } from
|
|
1
|
+
import { type ComponentType, type ReactElement, type ReactNode } from "react";
|
|
2
2
|
export type OverflowComponent = ComponentType<{
|
|
3
|
-
|
|
3
|
+
items: ReactElement[];
|
|
4
4
|
}>;
|
|
5
5
|
export type ItemElement = ReactElement<Record<string, unknown>>;
|
|
6
|
-
export
|
|
6
|
+
export declare function resolveInjectedElement(as: unknown): "li" | "span";
|
|
7
|
+
export type CollapseStrategy = "asc" | "desc" | "innerAscFirstKeepLast" | "innerDescFirstKeepLast";
|
|
7
8
|
export type CollapseUnit = number | number[];
|
|
8
9
|
export declare function resolveCollapseOrder(order: CollapseUnit[] | CollapseStrategy, itemCount: number): CollapseUnit[];
|
|
9
10
|
export type CollapseState = {
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
hiddenIndices: number[];
|
|
12
|
+
overflowAt: number;
|
|
12
13
|
};
|
|
13
14
|
export declare const INITIAL_STATE: CollapseState;
|
|
14
15
|
export declare function arraysEqual(a: number[], b: number[]): boolean;
|
|
15
16
|
export declare function totalWidth(itemWidths: number[], gap: number): number;
|
|
16
|
-
export declare const FIT_EPSILON =
|
|
17
|
-
export declare function getMeasurements(measureEl: HTMLElement, overflowEl: HTMLElement, hasSep: boolean, orientation?:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
export declare const FIT_EPSILON = .5;
|
|
18
|
+
export declare function getMeasurements(measureEl: HTMLElement, overflowEl: HTMLElement, hasSep: boolean, orientation?: "horizontal" | "vertical", lastItemFlexibleSelector?: string): {
|
|
19
|
+
itemWidths: number[];
|
|
20
|
+
gap: number;
|
|
21
|
+
overflowWidth: number;
|
|
22
|
+
outerMarginLeft: number;
|
|
23
|
+
outerMarginRight: number;
|
|
24
|
+
lastItemFlexibleWidth?: number;
|
|
24
25
|
};
|
|
25
26
|
export declare function hideUntilFit(total: number, itemWidths: number[], gap: number, overflowCost: number, hideOrder: CollapseUnit[], containerWidth: number): {
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
hidden: Set<number>;
|
|
28
|
+
firstHidden: number | null;
|
|
28
29
|
};
|
|
29
|
-
export declare function computeCollapseState({ containerSize, itemWidths, gap, overflowWidth, outerMarginLeft, outerMarginRight, collapseOrder
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
export declare function computeCollapseState({ containerSize, itemWidths, gap, overflowWidth, outerMarginLeft, outerMarginRight, collapseOrder }: {
|
|
31
|
+
containerSize: number;
|
|
32
|
+
itemWidths: number[];
|
|
33
|
+
gap: number;
|
|
34
|
+
overflowWidth: number;
|
|
35
|
+
outerMarginLeft?: number;
|
|
36
|
+
outerMarginRight?: number;
|
|
37
|
+
collapseOrder: CollapseUnit[];
|
|
37
38
|
}): CollapseState;
|
|
38
|
-
export declare function computeCollapsedMinWidth({ itemWidths, gap, overflowWidth, outerMarginLeft, outerMarginRight, collapseOrder, lastItemMinVisible, lastItemFlexibleWidth
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
39
|
+
export declare function computeCollapsedMinWidth({ itemWidths, gap, overflowWidth, outerMarginLeft, outerMarginRight, collapseOrder, lastItemMinVisible, lastItemFlexibleWidth }: {
|
|
40
|
+
itemWidths: number[];
|
|
41
|
+
gap: number;
|
|
42
|
+
overflowWidth: number;
|
|
43
|
+
outerMarginLeft?: number;
|
|
44
|
+
outerMarginRight?: number;
|
|
45
|
+
collapseOrder: CollapseUnit[];
|
|
46
|
+
lastItemMinVisible?: number;
|
|
47
|
+
lastItemFlexibleWidth?: number;
|
|
47
48
|
}): number;
|
|
48
49
|
export declare function collapseStatesEqual(a: CollapseState, b: CollapseState): boolean;
|
|
49
|
-
export declare function
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
export declare function renderOverflow(Overflow: OverflowComponent, items: ReactElement[], wrapper: "li" | null): ReactNode;
|
|
51
|
+
export declare function buildVisibleTokens(items: ReactElement[], hiddenSet: Set<number>, overflowAt: number, hiddenItems: ReactElement[], Overflow: OverflowComponent, overflowWrapper?: "li" | null): Array<{
|
|
52
|
+
key: string | number;
|
|
53
|
+
node: ReactNode;
|
|
52
54
|
}>;
|