@oxy.so/bloom 4.22.1 → 4.23.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/docs/composer-panel.mdx +10 -0
- package/docs/sidebar.mdx +2 -2
- package/lib/commonjs/chat-composer/ChatComposer.js +10 -12
- package/lib/commonjs/chat-composer/ChatComposer.js.map +1 -1
- package/lib/commonjs/composer-panel/ComposerPanelBase.js +9 -11
- package/lib/commonjs/composer-panel/ComposerPanelBase.js.map +1 -1
- package/lib/commonjs/composer-panel/ComposerPillBase.js +24 -2
- package/lib/commonjs/composer-panel/ComposerPillBase.js.map +1 -1
- package/lib/commonjs/hooks/use-textarea-autosize.js +103 -0
- package/lib/commonjs/hooks/use-textarea-autosize.js.map +1 -0
- package/lib/commonjs/sidebar/Sidebar.js +17 -6
- package/lib/commonjs/sidebar/Sidebar.js.map +1 -1
- package/lib/commonjs/sidebar/SidebarItem.js +28 -3
- package/lib/commonjs/sidebar/SidebarItem.js.map +1 -1
- package/lib/module/chat-composer/ChatComposer.js +11 -13
- package/lib/module/chat-composer/ChatComposer.js.map +1 -1
- package/lib/module/composer-panel/ComposerPanelBase.js +10 -12
- package/lib/module/composer-panel/ComposerPanelBase.js.map +1 -1
- package/lib/module/composer-panel/ComposerPillBase.js +24 -2
- package/lib/module/composer-panel/ComposerPillBase.js.map +1 -1
- package/lib/module/hooks/use-textarea-autosize.js +98 -0
- package/lib/module/hooks/use-textarea-autosize.js.map +1 -0
- package/lib/module/sidebar/Sidebar.js +17 -6
- package/lib/module/sidebar/Sidebar.js.map +1 -1
- package/lib/module/sidebar/SidebarItem.js +28 -3
- package/lib/module/sidebar/SidebarItem.js.map +1 -1
- package/lib/typescript/commonjs/chat-composer/ChatComposer.d.ts.map +1 -1
- package/lib/typescript/commonjs/composer-panel/ComposerPanelBase.d.ts.map +1 -1
- package/lib/typescript/commonjs/composer-panel/ComposerPillBase.d.ts.map +1 -1
- package/lib/typescript/commonjs/hooks/use-textarea-autosize.d.ts +61 -0
- package/lib/typescript/commonjs/hooks/use-textarea-autosize.d.ts.map +1 -0
- package/lib/typescript/commonjs/sidebar/Sidebar.d.ts.map +1 -1
- package/lib/typescript/commonjs/sidebar/SidebarItem.d.ts.map +1 -1
- package/lib/typescript/commonjs/sidebar/types.d.ts +7 -0
- package/lib/typescript/commonjs/sidebar/types.d.ts.map +1 -1
- package/lib/typescript/module/chat-composer/ChatComposer.d.ts.map +1 -1
- package/lib/typescript/module/composer-panel/ComposerPanelBase.d.ts.map +1 -1
- package/lib/typescript/module/composer-panel/ComposerPillBase.d.ts.map +1 -1
- package/lib/typescript/module/hooks/use-textarea-autosize.d.ts +61 -0
- package/lib/typescript/module/hooks/use-textarea-autosize.d.ts.map +1 -0
- package/lib/typescript/module/sidebar/Sidebar.d.ts.map +1 -1
- package/lib/typescript/module/sidebar/SidebarItem.d.ts.map +1 -1
- package/lib/typescript/module/sidebar/types.d.ts +7 -0
- package/lib/typescript/module/sidebar/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/chat-composer/ChatComposer.tsx +11 -13
- package/src/composer-panel/ComposerPanelBase.tsx +10 -12
- package/src/composer-panel/ComposerPillBase.tsx +28 -2
- package/src/hooks/use-textarea-autosize.ts +106 -0
- package/src/sidebar/Sidebar.tsx +9 -5
- package/src/sidebar/SidebarItem.tsx +23 -3
- package/src/sidebar/types.ts +7 -0
|
@@ -24,7 +24,9 @@ import type { SidebarItemProps } from './types';
|
|
|
24
24
|
* gradient, ring or top highlight
|
|
25
25
|
*
|
|
26
26
|
* The label and badge sit in collapse slots, so the icon stays pinned while the
|
|
27
|
-
* rail morphs.
|
|
27
|
+
* rail morphs. Collapsed, the badge (or `collapsedBadge`) fades in off the
|
|
28
|
+
* square's top-end corner instead, so the count survives the collapse. With
|
|
29
|
+
* `href` the row is a link (a real anchor on web).
|
|
28
30
|
*/
|
|
29
31
|
const AnimatedPressable = Animated.createAnimatedComponent(Pressable);
|
|
30
32
|
|
|
@@ -34,6 +36,7 @@ const SidebarItemComponent: React.FC<SidebarItemProps> = ({
|
|
|
34
36
|
size,
|
|
35
37
|
href,
|
|
36
38
|
badge,
|
|
39
|
+
collapsedBadge,
|
|
37
40
|
selected = false,
|
|
38
41
|
collapsed = false,
|
|
39
42
|
onPress,
|
|
@@ -54,13 +57,16 @@ const SidebarItemComponent: React.FC<SidebarItemProps> = ({
|
|
|
54
57
|
}, [progress, lane, metrics.row.square]);
|
|
55
58
|
const itemGap = metrics.row.gap;
|
|
56
59
|
const contentStyle = useAnimatedStyle(() => ({ gap: itemGap * (1 - progress.value) }), [progress, itemGap]);
|
|
60
|
+
const collapsedBadgeStyle = useAnimatedStyle(() => ({ opacity: progress.value }), [progress]);
|
|
57
61
|
const foreground = selected ? palette.selectedForeground : palette.textSecondary;
|
|
58
62
|
|
|
59
63
|
const rowStyle: WebCssStyle = {
|
|
60
64
|
flexDirection: 'row',
|
|
61
65
|
alignItems: 'center',
|
|
62
66
|
justifyContent: 'space-between',
|
|
63
|
-
|
|
67
|
+
// Not clipped: the collapsed badge hangs off the square's top-end corner.
|
|
68
|
+
// The content clips itself instead, so the label can't spill mid-morph.
|
|
69
|
+
overflow: 'visible',
|
|
64
70
|
height: metrics.row.square,
|
|
65
71
|
paddingLeft: metrics.row.padding,
|
|
66
72
|
paddingRight: metrics.row.padding,
|
|
@@ -103,7 +109,7 @@ const SidebarItemComponent: React.FC<SidebarItemProps> = ({
|
|
|
103
109
|
style={[rowStyle, horizontalInset, style]}
|
|
104
110
|
testID={testID}
|
|
105
111
|
>
|
|
106
|
-
<Animated.View style={[{ flexDirection: 'row', alignItems: 'center', minWidth: 0, flexShrink: 1 }, contentStyle]}>
|
|
112
|
+
<Animated.View style={[{ flexDirection: 'row', alignItems: 'center', minWidth: 0, flexShrink: 1, overflow: 'hidden' }, contentStyle]}>
|
|
107
113
|
<View style={{ flexShrink: 0 }}>
|
|
108
114
|
<Icon width={metrics.row.icon} height={metrics.row.icon} fill={foreground} />
|
|
109
115
|
</View>
|
|
@@ -114,6 +120,20 @@ const SidebarItemComponent: React.FC<SidebarItemProps> = ({
|
|
|
114
120
|
</Collapsible>
|
|
115
121
|
</Animated.View>
|
|
116
122
|
{badge != null ? <Collapsible collapsed={collapsed}>{badge}</Collapsible> : null}
|
|
123
|
+
{badge != null || collapsedBadge != null ? (
|
|
124
|
+
// Hangs off the square's top-end corner, over the icon's edge. The
|
|
125
|
+
// expanded slot already carries the count to assistive tech.
|
|
126
|
+
<Animated.View
|
|
127
|
+
pointerEvents="none"
|
|
128
|
+
aria-hidden
|
|
129
|
+
accessibilityElementsHidden
|
|
130
|
+
importantForAccessibility="no-hide-descendants"
|
|
131
|
+
style={[{ position: 'absolute', top: -4, insetInlineEnd: -6 }, collapsedBadgeStyle]}
|
|
132
|
+
testID={testID ? `${testID}-collapsed-badge` : undefined}
|
|
133
|
+
>
|
|
134
|
+
{collapsedBadge ?? badge}
|
|
135
|
+
</Animated.View>
|
|
136
|
+
) : null}
|
|
117
137
|
</AnimatedPressable>
|
|
118
138
|
);
|
|
119
139
|
};
|
package/src/sidebar/types.ts
CHANGED
|
@@ -70,7 +70,14 @@ export interface SidebarItemProps {
|
|
|
70
70
|
*/
|
|
71
71
|
size?: SidebarSize;
|
|
72
72
|
href?: string;
|
|
73
|
+
/** Sits at the row's end while expanded; over the icon's top-end corner while collapsed. */
|
|
73
74
|
badge?: ReactNode;
|
|
75
|
+
/**
|
|
76
|
+
* The badge shown over the icon while collapsed, when it should differ from
|
|
77
|
+
* `badge` — e.g. a capped count (`max={99}`) that fits the square. Defaults
|
|
78
|
+
* to `badge`.
|
|
79
|
+
*/
|
|
80
|
+
collapsedBadge?: ReactNode;
|
|
74
81
|
selected?: boolean;
|
|
75
82
|
/** Icon-only square matching the sidebar size (40px for md). */
|
|
76
83
|
collapsed?: boolean;
|