@oxy.so/bloom 4.25.0 → 4.25.1

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.
Files changed (54) hide show
  1. package/lib/commonjs/ai-chat/AiChatCodePanel.js +2 -2
  2. package/lib/commonjs/ai-chat/AiChatCodePanel.js.map +1 -1
  3. package/lib/commonjs/ai-chat/AiChatShell.js +3 -3
  4. package/lib/commonjs/ai-chat/AiChatShell.js.map +1 -1
  5. package/lib/commonjs/composer-panel/ComposerPanelStatusTab.js +2 -2
  6. package/lib/commonjs/composer-panel/ComposerPanelStatusTab.js.map +1 -1
  7. package/lib/commonjs/composer-panel/ComposerPillBase.js +3 -1
  8. package/lib/commonjs/composer-panel/ComposerPillBase.js.map +1 -1
  9. package/lib/commonjs/composer-panel/ComposerStatusBarBase.js +3 -3
  10. package/lib/commonjs/composer-panel/ComposerStatusBarBase.js.map +1 -1
  11. package/lib/commonjs/composer-panel/ModelPickerBase.js +3 -2
  12. package/lib/commonjs/composer-panel/ModelPickerBase.js.map +1 -1
  13. package/lib/commonjs/composer-panel/PermissionMenu.js +19 -3
  14. package/lib/commonjs/composer-panel/PermissionMenu.js.map +1 -1
  15. package/lib/module/ai-chat/AiChatCodePanel.js +2 -2
  16. package/lib/module/ai-chat/AiChatCodePanel.js.map +1 -1
  17. package/lib/module/ai-chat/AiChatShell.js +3 -3
  18. package/lib/module/ai-chat/AiChatShell.js.map +1 -1
  19. package/lib/module/composer-panel/ComposerPanelStatusTab.js +2 -2
  20. package/lib/module/composer-panel/ComposerPanelStatusTab.js.map +1 -1
  21. package/lib/module/composer-panel/ComposerPillBase.js +3 -1
  22. package/lib/module/composer-panel/ComposerPillBase.js.map +1 -1
  23. package/lib/module/composer-panel/ComposerStatusBarBase.js +3 -3
  24. package/lib/module/composer-panel/ComposerStatusBarBase.js.map +1 -1
  25. package/lib/module/composer-panel/ModelPickerBase.js +3 -2
  26. package/lib/module/composer-panel/ModelPickerBase.js.map +1 -1
  27. package/lib/module/composer-panel/PermissionMenu.js +19 -3
  28. package/lib/module/composer-panel/PermissionMenu.js.map +1 -1
  29. package/lib/typescript/commonjs/ai-chat/AiChatCodePanel.d.ts +1 -1
  30. package/lib/typescript/commonjs/ai-chat/AiChatShell.d.ts +1 -1
  31. package/lib/typescript/commonjs/composer-panel/ComposerPanelStatusTab.d.ts +1 -1
  32. package/lib/typescript/commonjs/composer-panel/ComposerPillBase.d.ts.map +1 -1
  33. package/lib/typescript/commonjs/composer-panel/ComposerStatusBarBase.d.ts +2 -2
  34. package/lib/typescript/commonjs/composer-panel/ModelPickerBase.d.ts +1 -1
  35. package/lib/typescript/commonjs/composer-panel/ModelPickerBase.d.ts.map +1 -1
  36. package/lib/typescript/commonjs/composer-panel/PermissionMenu.d.ts +3 -1
  37. package/lib/typescript/commonjs/composer-panel/PermissionMenu.d.ts.map +1 -1
  38. package/lib/typescript/module/ai-chat/AiChatCodePanel.d.ts +1 -1
  39. package/lib/typescript/module/ai-chat/AiChatShell.d.ts +1 -1
  40. package/lib/typescript/module/composer-panel/ComposerPanelStatusTab.d.ts +1 -1
  41. package/lib/typescript/module/composer-panel/ComposerPillBase.d.ts.map +1 -1
  42. package/lib/typescript/module/composer-panel/ComposerStatusBarBase.d.ts +2 -2
  43. package/lib/typescript/module/composer-panel/ModelPickerBase.d.ts +1 -1
  44. package/lib/typescript/module/composer-panel/ModelPickerBase.d.ts.map +1 -1
  45. package/lib/typescript/module/composer-panel/PermissionMenu.d.ts +3 -1
  46. package/lib/typescript/module/composer-panel/PermissionMenu.d.ts.map +1 -1
  47. package/package.json +1 -1
  48. package/src/ai-chat/AiChatCodePanel.tsx +2 -2
  49. package/src/ai-chat/AiChatShell.tsx +3 -3
  50. package/src/composer-panel/ComposerPanelStatusTab.tsx +2 -2
  51. package/src/composer-panel/ComposerPillBase.tsx +3 -1
  52. package/src/composer-panel/ComposerStatusBarBase.tsx +3 -3
  53. package/src/composer-panel/ModelPickerBase.tsx +3 -2
  54. package/src/composer-panel/PermissionMenu.tsx +17 -4
@@ -8,7 +8,7 @@ export declare function ContextRing({ pct, palette }: {
8
8
  }): import("react/jsx-runtime").JSX.Element;
9
9
  /**
10
10
  * The status tab: the grey tab hanging off the Composer Panel's
11
- * top edge — 34 tall, inset 28 each side, radius 16 on the top corners only,
11
+ * top edge — at least 34 tall, inset 28 each side, radius 16 on the top corners only,
12
12
  * px 8 / py 4. Branch (mirrored merge glyph) and project folder on the left, 12
13
13
  * apart; the context meter on the right (py 4, pl 6 / pr 8, gap 4).
14
14
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerPillBase.d.ts","sourceRoot":"","sources":["../../../../src/composer-panel/ComposerPillBase.tsx"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAsB,iBAAiB,EAAoB,MAAM,SAAS,CAAC;AAkVvF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,YAAiB,EACjB,aAAa,EACb,QAAQ,EACR,MAAM,EACN,IAAY,EACZ,QAAgB,EAChB,WAA+B,EAC/B,kBAA6B,EAC7B,OAAiC,EACjC,eAAe,EACf,MAAM,EACN,KAAK,EACL,YAAY,EACZ,aAAa,EACb,MAAM,EACN,aAA8B,EAC9B,cAAc,EACd,YAAyC,EACzC,SAAS,EACT,gBAAwB,EACxB,iBAAiB,EACjB,OAAc,EACd,KAAa,EACb,QAAQ,EACR,MAAM,EAAE,cAAc,EACtB,KAAK,EACL,QAAY,EACZ,WAAW,EACX,UAAU,EAAE,cAAc,EAC1B,MAAM,GACP,EAAE,iBAAiB,2CAwRnB"}
1
+ {"version":3,"file":"ComposerPillBase.d.ts","sourceRoot":"","sources":["../../../../src/composer-panel/ComposerPillBase.tsx"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAsB,iBAAiB,EAAoB,MAAM,SAAS,CAAC;AAoVvF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,YAAiB,EACjB,aAAa,EACb,QAAQ,EACR,MAAM,EACN,IAAY,EACZ,QAAgB,EAChB,WAA+B,EAC/B,kBAA6B,EAC7B,OAAiC,EACjC,eAAe,EACf,MAAM,EACN,KAAK,EACL,YAAY,EACZ,aAAa,EACb,MAAM,EACN,aAA8B,EAC9B,cAAc,EACd,YAAyC,EACzC,SAAS,EACT,gBAAwB,EACxB,iBAAiB,EACjB,OAAc,EACd,KAAa,EACb,QAAQ,EACR,MAAM,EAAE,cAAc,EACtB,KAAK,EACL,QAAY,EACZ,WAAW,EACX,UAAU,EAAE,cAAc,EAC1B,MAAM,GACP,EAAE,iBAAiB,2CAwRnB"}
@@ -1,7 +1,7 @@
1
1
  import type { ComposerStatusBarProps } from './types';
2
2
  /**
3
- * The line under the AI chat's pill composer (the reference's `StatusBar`): 26
4
- * tall, space-between.
3
+ * The line under the AI chat's pill composer (the reference's `StatusBar`): at
4
+ * least 26 tall (it grows with the system font), space-between.
5
5
  *
6
6
  * left gap 12: the branch (mirrored merge glyph) and the project folder —
7
7
  * its caret turns over while the "Local Folders" panel is open
@@ -10,7 +10,7 @@ import type { ModelPickerProps } from './types';
10
10
  * mark in view (instantly on open, smoothly after)
11
11
  * column top 8 / right 8 / left 52: a 20px header ("Models" + a 50%-opacity
12
12
  * "Quick Search" hint, or the search field), then the list 4 below
13
- * rows 36 tall, radius 10, px 8: 16px mark, 6, name (+ provider while
13
+ * rows min 36 tall, radius 10, px 8: 16px mark, 6, name (+ provider while
14
14
  * searching), the effort chip on the selected row, 12, 14px radio;
15
15
  * 4 apart, pb 4, soft top edge once scrolled
16
16
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ModelPickerBase.d.ts","sourceRoot":"","sources":["../../../../src/composer-panel/ModelPickerBase.tsx"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAuC,gBAAgB,EAAuB,MAAM,SAAS,CAAC;AAyX1G;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,KAAK,EACL,YAAY,EACZ,aAAa,EACb,MAAM,EACN,aAA8B,EAC9B,cAAc,EACd,YAAyC,EACzC,MAAM,EAAE,cAAc,EACtB,KAAK,EACL,MAAM,GACP,EAAE,gBAAgB,2CAiUlB"}
1
+ {"version":3,"file":"ModelPickerBase.d.ts","sourceRoot":"","sources":["../../../../src/composer-panel/ModelPickerBase.tsx"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAuC,gBAAgB,EAAuB,MAAM,SAAS,CAAC;AA0X1G;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,KAAK,EACL,YAAY,EACZ,aAAa,EACb,MAAM,EACN,aAA8B,EAC9B,cAAc,EACd,YAAyC,EACzC,MAAM,EAAE,cAAc,EACtB,KAAK,EACL,MAAM,GACP,EAAE,gBAAgB,2CAiUlB"}
@@ -15,7 +15,9 @@ interface PermissionMenuProps {
15
15
  * press or while its menu is open, and a 323px panel of radio rows that opens
16
16
  * upward.
17
17
  *
18
- * trigger h 30, pl 8 / pr 10, gap 4, icon 16, body-medium secondary
18
+ * trigger min-h 30 (grows with the system font), max-w 160 then the
19
+ * label ellipsizes, pl 8 / pr 10, gap 4, icon 16, body-medium
20
+ * secondary
19
21
  * panel w 323, radius 20, border, p 6, shadow-dropdown
20
22
  * body pt 4, header→rows 6; header px 8 gap 10, body-medium tertiary
21
23
  * row p 8, radius 14, gap 8, icon 20, label body-medium secondary,
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionMenu.d.ts","sourceRoot":"","sources":["../../../../src/composer-panel/PermissionMenu.tsx"],"names":[],"mappings":"AAOA,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAKlF,UAAU,mBAAmB;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,EAAE,aAAa,CAAC,6BAA6B,CAAC,CAAC;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,WAAW,EACX,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,MAAM,EACN,MAAM,GACP,EAAE,mBAAmB,kDAuGrB"}
1
+ {"version":3,"file":"PermissionMenu.d.ts","sourceRoot":"","sources":["../../../../src/composer-panel/PermissionMenu.tsx"],"names":[],"mappings":"AAOA,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAOlF,UAAU,mBAAmB;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,EAAE,aAAa,CAAC,6BAA6B,CAAC,CAAC;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,WAAW,EACX,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,MAAM,EACN,MAAM,GACP,EAAE,mBAAmB,kDAgHrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxy.so/bloom",
3
- "version": "4.25.0",
3
+ "version": "4.25.1",
4
4
  "packageManager": "bun@1.3.14",
5
5
  "description": "Bloom UI — Oxy ecosystem component library for React Native + Expo + Web",
6
6
  "main": "lib/commonjs/index.js",
@@ -17,7 +17,7 @@ import type { AiChatCodePanelProps, AiChatPanelAction, AiChatPanelTab } from './
17
17
 
18
18
  /**
19
19
  * The header row both right-hand panels share: the `PillTabList` (blue
20
- * pills, 20px glyphs) on the left and the panel actions on the right, 30 tall.
20
+ * pills, 20px glyphs) on the left and the panel actions on the right, at least 30 tall.
21
21
  */
22
22
  export function PanelHeader({
23
23
  tabs,
@@ -33,7 +33,7 @@ export function PanelHeader({
33
33
  children: React.ReactNode;
34
34
  }) {
35
35
  return (
36
- <View style={{ width: '100%', height: 30, flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between' }}>
36
+ <View style={{ width: '100%', minHeight: 30, flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between' }}>
37
37
  <View accessibilityLabel={label} style={{ flexShrink: 1, minWidth: 0 }}>
38
38
  <Tabs variant="pill" value={value} onValueChange={onValueChange}>
39
39
  {tabs.map((tab) => (
@@ -236,7 +236,7 @@ export function AiChatResizeHandle({
236
236
  // ---------------------------------------------------------------------------
237
237
 
238
238
  /**
239
- * The in-container header below `xl`: 48 tall, px 12 / pt 11. The menu
239
+ * The in-container header below `xl`: at least 48 tall, px 12 / pt 11. The menu
240
240
  * button (below `lg`, where the sidebar is a drawer) and the chat's name in
241
241
  * headline-medium on the left; the button opening the panel drawer on the right.
242
242
  * Both are 36px secondary icon buttons. Renders nothing outside an
@@ -251,7 +251,7 @@ export function AiChatMobileHeader({ title, style, testID }: AiChatMobileHeaderP
251
251
  testID={testID}
252
252
  style={[
253
253
  {
254
- height: 48,
254
+ minHeight: 48,
255
255
  flexShrink: 0,
256
256
  flexDirection: 'row',
257
257
  alignItems: 'center',
@@ -738,7 +738,7 @@ export function AiChatShell({
738
738
  ]}>
739
739
  <View
740
740
  style={{
741
- height: 40,
741
+ minHeight: 40,
742
742
  flexShrink: 0,
743
743
  flexDirection: 'row',
744
744
  alignItems: 'center',
@@ -44,7 +44,7 @@ function StatusItem({ icon, label, palette }: { icon: React.ReactNode; label: st
44
44
 
45
45
  /**
46
46
  * The status tab: the grey tab hanging off the Composer Panel's
47
- * top edge — 34 tall, inset 28 each side, radius 16 on the top corners only,
47
+ * top edge — at least 34 tall, inset 28 each side, radius 16 on the top corners only,
48
48
  * px 8 / py 4. Branch (mirrored merge glyph) and project folder on the left, 12
49
49
  * apart; the context meter on the right (py 4, pl 6 / pr 8, gap 4).
50
50
  */
@@ -58,7 +58,7 @@ function ComposerPanelStatusTabComponent({ branch, project, context, style, test
58
58
  {
59
59
  marginLeft: TAB_INSET,
60
60
  marginRight: TAB_INSET,
61
- height: TAB_HEIGHT,
61
+ minHeight: TAB_HEIGHT,
62
62
  flexDirection: 'row',
63
63
  alignItems: 'center',
64
64
  justifyContent: 'space-between',
@@ -251,7 +251,9 @@ function ModelMenu({
251
251
  const modelName = models.find((entry) => entry.id === modelId)?.name ?? modelId;
252
252
  const hasEffort = levels.length > 0;
253
253
  const triggerStyle: WebCssStyle = {
254
- height: 32,
254
+ // At least 32, never exactly: a fixed height clips the name at the largest
255
+ // system font.
256
+ minHeight: 32,
255
257
  flexShrink: 0,
256
258
  flexDirection: 'row',
257
259
  alignItems: 'center',
@@ -142,8 +142,8 @@ function FolderRow({
142
142
  }
143
143
 
144
144
  /**
145
- * The line under the AI chat's pill composer (the reference's `StatusBar`): 26
146
- * tall, space-between.
145
+ * The line under the AI chat's pill composer (the reference's `StatusBar`): at
146
+ * least 26 tall (it grows with the system font), space-between.
147
147
  *
148
148
  * left gap 12: the branch (mirrored merge glyph) and the project folder —
149
149
  * its caret turns over while the "Local Folders" panel is open
@@ -188,7 +188,7 @@ export function ComposerStatusBarBase({
188
188
  return (
189
189
  <View
190
190
  testID={testID}
191
- style={[{ width: '100%', height: 26, flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between' }, style]}>
191
+ style={[{ width: '100%', minHeight: 26, flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between' }, style]}>
192
192
  <View style={{ flexDirection: 'row', alignItems: 'center', gap: 12 }}>
193
193
  {branch !== undefined ? (
194
194
  <StatusItem
@@ -369,7 +369,8 @@ function ModelRow({
369
369
  <View
370
370
  style={{
371
371
  position: 'relative',
372
- height: ROW_HEIGHT,
372
+ // A floor, not a height: the name grows with the system font.
373
+ minHeight: ROW_HEIGHT,
373
374
  width: '100%',
374
375
  flexShrink: 0,
375
376
  flexDirection: 'row',
@@ -424,7 +425,7 @@ function ModelRow({
424
425
  * mark in view (instantly on open, smoothly after)
425
426
  * column top 8 / right 8 / left 52: a 20px header ("Models" + a 50%-opacity
426
427
  * "Quick Search" hint, or the search field), then the list 4 below
427
- * rows 36 tall, radius 10, px 8: 16px mark, 6, name (+ provider while
428
+ * rows min 36 tall, radius 10, px 8: 16px mark, 6, name (+ provider while
428
429
  * searching), the effort chip on the selected row, 12, 14px radio;
429
430
  * 4 apart, pb 4, soft top edge once scrolled
430
431
  *
@@ -10,6 +10,8 @@ import type { ComposerPanelLabels, ComposerPanelPermissionOption } from './types
10
10
  import { dataHook } from './web-hooks';
11
11
 
12
12
  const FLIP: ViewStyle = { transform: [{ scaleY: -1 }] };
13
+ /** The permission chip's widest: past this a mode's name truncates. */
14
+ const PERMISSION_TRIGGER_MAX_WIDTH = 160;
13
15
 
14
16
  interface PermissionMenuProps {
15
17
  palette: ComposerPalette;
@@ -27,7 +29,9 @@ interface PermissionMenuProps {
27
29
  * press or while its menu is open, and a 323px panel of radio rows that opens
28
30
  * upward.
29
31
  *
30
- * trigger h 30, pl 8 / pr 10, gap 4, icon 16, body-medium secondary
32
+ * trigger min-h 30 (grows with the system font), max-w 160 then the
33
+ * label ellipsizes, pl 8 / pr 10, gap 4, icon 16, body-medium
34
+ * secondary
31
35
  * panel w 323, radius 20, border, p 6, shadow-dropdown
32
36
  * body pt 4, header→rows 6; header px 8 gap 10, body-medium tertiary
33
37
  * row p 8, radius 14, gap 8, icon 20, label body-medium secondary,
@@ -82,7 +86,12 @@ export function PermissionMenu({
82
86
  onHoverOut={() => setHovered(false)}
83
87
  style={({ pressed }) => {
84
88
  const trigger: WebCssStyle = {
85
- height: 30,
89
+ // At least 30, never exactly: at the largest system font the label
90
+ // is taller than 30 and a fixed height clipped it top and bottom.
91
+ // A long mode name truncates at a width that still reads as a chip.
92
+ minHeight: 30,
93
+ minWidth: 0,
94
+ maxWidth: PERMISSION_TRIGGER_MAX_WIDTH,
86
95
  flexShrink: 0,
87
96
  flexDirection: 'row',
88
97
  alignItems: 'center',
@@ -98,10 +107,14 @@ export function PermissionMenu({
98
107
  };
99
108
  return trigger;
100
109
  }}>
101
- <View style={current.flip ? FLIP : undefined}>
110
+ <View style={current.flip ? [FLIP, { flexShrink: 0 }] : { flexShrink: 0 }}>
102
111
  <CurrentIcon width={16} height={16} fill={palette.iconSecondary} />
103
112
  </View>
104
- <Text variant="body-medium" numberOfLines={1} style={{ color: palette.textSecondary }}>
113
+ <Text
114
+ variant="body-medium"
115
+ numberOfLines={1}
116
+ ellipsizeMode="tail"
117
+ style={{ flexShrink: 1, minWidth: 0, color: palette.textSecondary }}>
105
118
  {current.label}
106
119
  </Text>
107
120
  </Pressable>