@oxyhq/bloom 0.33.0 → 0.33.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.
@@ -13,6 +13,7 @@ var _index2 = require("../item/index.js");
13
13
  var _index3 = require("../kbd/index.js");
14
14
  var _index4 = require("../search-input/index.js");
15
15
  var _tokens = require("../styles/tokens.js");
16
+ var _context = require("../dialog/context.js");
16
17
  var _jsxRuntime = require("react/jsx-runtime");
17
18
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
18
19
  /** Centered command-palette max width (px). Matches the legacy palette card. */
@@ -34,6 +35,20 @@ function defaultFilter(item, query) {
34
35
  * `SearchInput`, an `Item` results list and `Kbd` shortcut hints. Items group
35
36
  * by their `group` field (ungrouped first). On web the list is
36
37
  * keyboard-navigable (Up/Down/Enter); on native, tap to select.
38
+ *
39
+ * Control mode — IMPERATIVE, not controlled. `Command` keeps its public
40
+ * *controlled* API (`visible` boolean + `onClose`) but internally bridges it
41
+ * onto the Dialog's imperative `useDialogControl()` handle, exactly like
42
+ * `AlertDialog`. This makes `Command` the LAST controlled-`open` `Dialog`
43
+ * consumer to move onto the imperative path every other surface uses
44
+ * (`alert()`, `confirm()`, native `Menu`/`Select`/`ContextMenu`, Mention's
45
+ * dialogs), so there is one code path across the ecosystem. It also guarantees
46
+ * the palette's exit animation on the dismiss path even for a consumer that
47
+ * unmounts the palette in response to `onClose` (`{open && <Command …/>}`): the
48
+ * imperative `close()` runs the exit animation FIRST and fires `onClose` only
49
+ * once it settles, whereas the controlled `open` path fires `onClose`
50
+ * synchronously — which, for an unmount-on-close consumer, would tear the
51
+ * surface down before it could animate out.
37
52
  */
38
53
  function createCommand(Dialog) {
39
54
  const Command = function Command({
@@ -50,6 +65,7 @@ function createCommand(Dialog) {
50
65
  testID
51
66
  }) {
52
67
  const theme = (0, _useTheme.useTheme)();
68
+ const control = (0, _context.useDialogControl)();
53
69
  const searchRef = (0, _react.useRef)(null);
54
70
  const [activeIndex, setActiveIndex] = (0, _react.useState)(0);
55
71
  const [query, setQuery] = (0, _useControllableState.useControllableState)({
@@ -129,6 +145,37 @@ function createCommand(Dialog) {
129
145
  onClose();
130
146
  }, [setQuery, onClose]);
131
147
 
148
+ // Bridge the public *controlled* `visible` prop onto the Dialog's imperative
149
+ // open/close (mirrors `AlertDialog`). `control` is referentially stable
150
+ // (memoised on its id), so this effect only re-runs when `visible` actually
151
+ // flips. Opening straight from an effect on mount matches bloom's own
152
+ // `AutoMountedDialog`. When a consumer flips `visible` to `false` (their own
153
+ // close, or after a select), we imperatively `close()` so the exit animation
154
+ // still plays.
155
+ const closingFromPropRef = (0, _react.useRef)(false);
156
+ (0, _react.useEffect)(() => {
157
+ if (visible) {
158
+ control.open();
159
+ return;
160
+ }
161
+ closingFromPropRef.current = true;
162
+ control.close();
163
+ }, [visible, control]);
164
+
165
+ // The Dialog fires `onClose` after the exit animation settles (imperative
166
+ // mode). Forward ONLY user-initiated dismissals (backdrop / Escape) to the
167
+ // consumer — a consumer-initiated close (they flipped `visible` to `false`,
168
+ // e.g. `select` already called `onClose`) must not re-enter `onClose`,
169
+ // preserving the previous controlled semantics where a programmatic close
170
+ // does not fire `onClose` a second time.
171
+ const handleClose = (0, _react.useCallback)(() => {
172
+ if (closingFromPropRef.current) {
173
+ closingFromPropRef.current = false;
174
+ return;
175
+ }
176
+ onClose();
177
+ }, [onClose]);
178
+
132
179
  // Web keyboard navigation on the search input.
133
180
  const webKeyHandler = _reactNative.Platform.OS === 'web' ? {
134
181
  onKeyDown: e => {
@@ -152,8 +199,8 @@ function createCommand(Dialog) {
152
199
  }
153
200
  } : {};
154
201
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Dialog, {
155
- open: visible,
156
- onClose: onClose,
202
+ control: control,
203
+ onClose: handleClose,
157
204
  placement: "center",
158
205
  dismissOnBackdrop: true,
159
206
  maxWidth: COMMAND_MAX_WIDTH,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_useControllableState","_index","_index2","_index3","_index4","_tokens","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","COMMAND_MAX_WIDTH","defaultFilter","item","query","q","trim","toLowerCase","label","includes","description","keywords","some","k","createCommand","Dialog","Command","visible","onClose","items","placeholder","emptyText","queryProp","onQueryChange","filter","maxListHeight","style","testID","theme","useTheme","searchRef","useRef","activeIndex","setActiveIndex","useState","setQuery","useControllableState","value","defaultValue","onChange","filtered","useMemo","it","entries","selectable","groups","Map","ungrouped","group","arr","push","flat","sel","pushItem","type","selectableIndex","length","prevQueryRef","current","prevVisibleRef","Platform","OS","requestAnimationFrame","focus","clampedActive","Math","min","max","select","useCallback","disabled","onSelect","webKeyHandler","onKeyDown","key","preventDefault","jsx","open","placement","dismissOnBackdrop","maxWidth","styles","panel","children","jsxs","View","searchWrap","borderBottomColor","colors","borderLight","SearchInput","ref","onChangeText","onClearText","autoFocus","empty","Text","color","textSecondary","fontSize","sm","ScrollView","maxHeight","contentContainerStyle","list","keyboardShouldPersistTaps","showsVerticalScrollIndicator","map","entry","groupHeader","textTertiary","Icon","icon","isActive","Item","title","subtitle","density","active","role","onPress","leading","size","fill","trailing","shortcut","Kbd","id","displayName","StyleSheet","create","paddingTop","paddingHorizontal","paddingBottom","space","xs","md","borderBottomWidth","hairlineWidth","fontWeight","textTransform","letterSpacing","lg","paddingVertical","_2xl","alignItems"],"sourceRoot":"../../../src","sources":["command/Command.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_useControllableState","_index","_index2","_index3","_index4","_tokens","_context","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","COMMAND_MAX_WIDTH","defaultFilter","item","query","q","trim","toLowerCase","label","includes","description","keywords","some","k","createCommand","Dialog","Command","visible","onClose","items","placeholder","emptyText","queryProp","onQueryChange","filter","maxListHeight","style","testID","theme","useTheme","control","useDialogControl","searchRef","useRef","activeIndex","setActiveIndex","useState","setQuery","useControllableState","value","defaultValue","onChange","filtered","useMemo","it","entries","selectable","groups","Map","ungrouped","group","arr","push","flat","sel","pushItem","type","selectableIndex","length","prevQueryRef","current","prevVisibleRef","Platform","OS","requestAnimationFrame","focus","clampedActive","Math","min","max","select","useCallback","disabled","onSelect","closingFromPropRef","useEffect","open","close","handleClose","webKeyHandler","onKeyDown","key","preventDefault","jsx","placement","dismissOnBackdrop","maxWidth","styles","panel","children","jsxs","View","searchWrap","borderBottomColor","colors","borderLight","SearchInput","ref","onChangeText","onClearText","autoFocus","empty","Text","color","textSecondary","fontSize","sm","ScrollView","maxHeight","contentContainerStyle","list","keyboardShouldPersistTaps","showsVerticalScrollIndicator","map","entry","groupHeader","textTertiary","Icon","icon","isActive","Item","title","subtitle","density","active","role","onPress","leading","size","fill","trailing","shortcut","Kbd","id","displayName","StyleSheet","create","paddingTop","paddingHorizontal","paddingBottom","space","xs","md","borderBottomWidth","hairlineWidth","fontWeight","textTransform","letterSpacing","lg","paddingVertical","_2xl","alignItems"],"sourceRoot":"../../../src","sources":["command/Command.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import React, { useCallback, useMemo, useRef, useState } from 'react';
3
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { Platform, ScrollView, StyleSheet, View } from 'react-native';
5
5
  import { useTheme } from "../theme/use-theme.js";
6
6
  import { useControllableState } from "../hooks/useControllableState.js";
@@ -9,6 +9,7 @@ import { Item } from "../item/index.js";
9
9
  import { Kbd } from "../kbd/index.js";
10
10
  import { SearchInput } from "../search-input/index.js";
11
11
  import { fontSize, space } from "../styles/tokens.js";
12
+ import { useDialogControl } from "../dialog/context.js";
12
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
14
  /** Centered command-palette max width (px). Matches the legacy palette card. */
14
15
  const COMMAND_MAX_WIDTH = 560;
@@ -29,6 +30,20 @@ function defaultFilter(item, query) {
29
30
  * `SearchInput`, an `Item` results list and `Kbd` shortcut hints. Items group
30
31
  * by their `group` field (ungrouped first). On web the list is
31
32
  * keyboard-navigable (Up/Down/Enter); on native, tap to select.
33
+ *
34
+ * Control mode — IMPERATIVE, not controlled. `Command` keeps its public
35
+ * *controlled* API (`visible` boolean + `onClose`) but internally bridges it
36
+ * onto the Dialog's imperative `useDialogControl()` handle, exactly like
37
+ * `AlertDialog`. This makes `Command` the LAST controlled-`open` `Dialog`
38
+ * consumer to move onto the imperative path every other surface uses
39
+ * (`alert()`, `confirm()`, native `Menu`/`Select`/`ContextMenu`, Mention's
40
+ * dialogs), so there is one code path across the ecosystem. It also guarantees
41
+ * the palette's exit animation on the dismiss path even for a consumer that
42
+ * unmounts the palette in response to `onClose` (`{open && <Command …/>}`): the
43
+ * imperative `close()` runs the exit animation FIRST and fires `onClose` only
44
+ * once it settles, whereas the controlled `open` path fires `onClose`
45
+ * synchronously — which, for an unmount-on-close consumer, would tear the
46
+ * surface down before it could animate out.
32
47
  */
33
48
  export function createCommand(Dialog) {
34
49
  const Command = function Command({
@@ -45,6 +60,7 @@ export function createCommand(Dialog) {
45
60
  testID
46
61
  }) {
47
62
  const theme = useTheme();
63
+ const control = useDialogControl();
48
64
  const searchRef = useRef(null);
49
65
  const [activeIndex, setActiveIndex] = useState(0);
50
66
  const [query, setQuery] = useControllableState({
@@ -124,6 +140,37 @@ export function createCommand(Dialog) {
124
140
  onClose();
125
141
  }, [setQuery, onClose]);
126
142
 
143
+ // Bridge the public *controlled* `visible` prop onto the Dialog's imperative
144
+ // open/close (mirrors `AlertDialog`). `control` is referentially stable
145
+ // (memoised on its id), so this effect only re-runs when `visible` actually
146
+ // flips. Opening straight from an effect on mount matches bloom's own
147
+ // `AutoMountedDialog`. When a consumer flips `visible` to `false` (their own
148
+ // close, or after a select), we imperatively `close()` so the exit animation
149
+ // still plays.
150
+ const closingFromPropRef = useRef(false);
151
+ useEffect(() => {
152
+ if (visible) {
153
+ control.open();
154
+ return;
155
+ }
156
+ closingFromPropRef.current = true;
157
+ control.close();
158
+ }, [visible, control]);
159
+
160
+ // The Dialog fires `onClose` after the exit animation settles (imperative
161
+ // mode). Forward ONLY user-initiated dismissals (backdrop / Escape) to the
162
+ // consumer — a consumer-initiated close (they flipped `visible` to `false`,
163
+ // e.g. `select` already called `onClose`) must not re-enter `onClose`,
164
+ // preserving the previous controlled semantics where a programmatic close
165
+ // does not fire `onClose` a second time.
166
+ const handleClose = useCallback(() => {
167
+ if (closingFromPropRef.current) {
168
+ closingFromPropRef.current = false;
169
+ return;
170
+ }
171
+ onClose();
172
+ }, [onClose]);
173
+
127
174
  // Web keyboard navigation on the search input.
128
175
  const webKeyHandler = Platform.OS === 'web' ? {
129
176
  onKeyDown: e => {
@@ -147,8 +194,8 @@ export function createCommand(Dialog) {
147
194
  }
148
195
  } : {};
149
196
  return /*#__PURE__*/_jsx(Dialog, {
150
- open: visible,
151
- onClose: onClose,
197
+ control: control,
198
+ onClose: handleClose,
152
199
  placement: "center",
153
200
  dismissOnBackdrop: true,
154
201
  maxWidth: COMMAND_MAX_WIDTH,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useMemo","useRef","useState","Platform","ScrollView","StyleSheet","View","useTheme","useControllableState","Text","Item","Kbd","SearchInput","fontSize","space","jsx","_jsx","jsxs","_jsxs","COMMAND_MAX_WIDTH","defaultFilter","item","query","q","trim","toLowerCase","label","includes","description","keywords","some","k","createCommand","Dialog","Command","visible","onClose","items","placeholder","emptyText","queryProp","onQueryChange","filter","maxListHeight","style","testID","theme","searchRef","activeIndex","setActiveIndex","setQuery","value","defaultValue","onChange","filtered","it","entries","selectable","groups","Map","ungrouped","group","arr","get","push","set","flat","sel","pushItem","type","selectableIndex","length","prevQueryRef","current","prevVisibleRef","OS","requestAnimationFrame","focus","clampedActive","Math","min","max","select","disabled","onSelect","webKeyHandler","onKeyDown","e","key","preventDefault","i","open","placement","dismissOnBackdrop","maxWidth","styles","panel","children","searchWrap","borderBottomColor","colors","borderLight","ref","onChangeText","onClearText","autoFocus","empty","color","textSecondary","sm","maxHeight","contentContainerStyle","list","keyboardShouldPersistTaps","showsVerticalScrollIndicator","map","entry","groupHeader","textTertiary","Icon","icon","isActive","title","subtitle","density","active","role","onPress","leading","size","fill","trailing","shortcut","id","displayName","create","paddingTop","paddingHorizontal","paddingBottom","xs","md","borderBottomWidth","hairlineWidth","fontWeight","textTransform","letterSpacing","lg","paddingVertical","_2xl","alignItems"],"sourceRoot":"../../../src","sources":["command/Command.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","Platform","ScrollView","StyleSheet","View","useTheme","useControllableState","Text","Item","Kbd","SearchInput","fontSize","space","useDialogControl","jsx","_jsx","jsxs","_jsxs","COMMAND_MAX_WIDTH","defaultFilter","item","query","q","trim","toLowerCase","label","includes","description","keywords","some","k","createCommand","Dialog","Command","visible","onClose","items","placeholder","emptyText","queryProp","onQueryChange","filter","maxListHeight","style","testID","theme","control","searchRef","activeIndex","setActiveIndex","setQuery","value","defaultValue","onChange","filtered","it","entries","selectable","groups","Map","ungrouped","group","arr","get","push","set","flat","sel","pushItem","type","selectableIndex","length","prevQueryRef","current","prevVisibleRef","OS","requestAnimationFrame","focus","clampedActive","Math","min","max","select","disabled","onSelect","closingFromPropRef","open","close","handleClose","webKeyHandler","onKeyDown","e","key","preventDefault","i","placement","dismissOnBackdrop","maxWidth","styles","panel","children","searchWrap","borderBottomColor","colors","borderLight","ref","onChangeText","onClearText","autoFocus","empty","color","textSecondary","sm","maxHeight","contentContainerStyle","list","keyboardShouldPersistTaps","showsVerticalScrollIndicator","map","entry","groupHeader","textTertiary","Icon","icon","isActive","title","subtitle","density","active","role","onPress","leading","size","fill","trailing","shortcut","id","displayName","create","paddingTop","paddingHorizontal","paddingBottom","xs","md","borderBottomWidth","hairlineWidth","fontWeight","textTransform","letterSpacing","lg","paddingVertical","_2xl","alignItems"],"sourceRoot":"../../../src","sources":["command/Command.tsx"],"mappings":"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","ignoreList":[]}
@@ -12,6 +12,20 @@ type DialogComponent = React.ComponentType<DialogProps>;
12
12
  * `SearchInput`, an `Item` results list and `Kbd` shortcut hints. Items group
13
13
  * by their `group` field (ungrouped first). On web the list is
14
14
  * keyboard-navigable (Up/Down/Enter); on native, tap to select.
15
+ *
16
+ * Control mode — IMPERATIVE, not controlled. `Command` keeps its public
17
+ * *controlled* API (`visible` boolean + `onClose`) but internally bridges it
18
+ * onto the Dialog's imperative `useDialogControl()` handle, exactly like
19
+ * `AlertDialog`. This makes `Command` the LAST controlled-`open` `Dialog`
20
+ * consumer to move onto the imperative path every other surface uses
21
+ * (`alert()`, `confirm()`, native `Menu`/`Select`/`ContextMenu`, Mention's
22
+ * dialogs), so there is one code path across the ecosystem. It also guarantees
23
+ * the palette's exit animation on the dismiss path even for a consumer that
24
+ * unmounts the palette in response to `onClose` (`{open && <Command …/>}`): the
25
+ * imperative `close()` runs the exit animation FIRST and fires `onClose` only
26
+ * once it settles, whereas the controlled `open` path fires `onClose`
27
+ * synchronously — which, for an unmount-on-close consumer, would tear the
28
+ * surface down before it could animate out.
15
29
  */
16
30
  export declare function createCommand(Dialog: DialogComponent): {
17
31
  ({ visible, onClose, items, placeholder, emptyText, query: queryProp, onQueryChange, filter, maxListHeight, style, testID, }: CommandProps): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../../src/command/Command.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAgBtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,SAAS,CAAC;AAEzD,KAAK,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AAqBxD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe;kIAahD,YAAY;;EA2LhB;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../../src/command/Command.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAgBjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,SAAS,CAAC;AAEzD,KAAK,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AAqBxD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe;kIAahD,YAAY;;EA2NhB;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -12,6 +12,20 @@ type DialogComponent = React.ComponentType<DialogProps>;
12
12
  * `SearchInput`, an `Item` results list and `Kbd` shortcut hints. Items group
13
13
  * by their `group` field (ungrouped first). On web the list is
14
14
  * keyboard-navigable (Up/Down/Enter); on native, tap to select.
15
+ *
16
+ * Control mode — IMPERATIVE, not controlled. `Command` keeps its public
17
+ * *controlled* API (`visible` boolean + `onClose`) but internally bridges it
18
+ * onto the Dialog's imperative `useDialogControl()` handle, exactly like
19
+ * `AlertDialog`. This makes `Command` the LAST controlled-`open` `Dialog`
20
+ * consumer to move onto the imperative path every other surface uses
21
+ * (`alert()`, `confirm()`, native `Menu`/`Select`/`ContextMenu`, Mention's
22
+ * dialogs), so there is one code path across the ecosystem. It also guarantees
23
+ * the palette's exit animation on the dismiss path even for a consumer that
24
+ * unmounts the palette in response to `onClose` (`{open && <Command …/>}`): the
25
+ * imperative `close()` runs the exit animation FIRST and fires `onClose` only
26
+ * once it settles, whereas the controlled `open` path fires `onClose`
27
+ * synchronously — which, for an unmount-on-close consumer, would tear the
28
+ * surface down before it could animate out.
15
29
  */
16
30
  export declare function createCommand(Dialog: DialogComponent): {
17
31
  ({ visible, onClose, items, placeholder, emptyText, query: queryProp, onQueryChange, filter, maxListHeight, style, testID, }: CommandProps): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../../src/command/Command.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAgBtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,SAAS,CAAC;AAEzD,KAAK,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AAqBxD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe;kIAahD,YAAY;;EA2LhB;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../../src/command/Command.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAgBjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,SAAS,CAAC;AAEzD,KAAK,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AAqBxD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe;kIAahD,YAAY;;EA2NhB;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxyhq/bloom",
3
- "version": "0.33.0",
3
+ "version": "0.33.1",
4
4
  "description": "Bloom UI — Oxy ecosystem component library for React Native + Expo + Web",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -1,8 +1,10 @@
1
- import React from 'react';
1
+ import React, { useImperativeHandle } from 'react';
2
2
  import { act, fireEvent, render } from '@testing-library/react-native';
3
3
 
4
4
  import { Command } from '../command';
5
+ import { createCommand } from '../command/Command';
5
6
  import type { CommandItem } from '../command';
7
+ import type { DialogProps } from '../dialog';
6
8
  import { BloomThemeProvider } from '../theme/BloomThemeProvider';
7
9
 
8
10
  function renderWithTheme(ui: React.ReactElement) {
@@ -104,4 +106,123 @@ describe('Command (built on Dialog)', () => {
104
106
  expect(onSelect).toHaveBeenCalledTimes(1);
105
107
  expect(onClose).toHaveBeenCalledTimes(1);
106
108
  });
109
+
110
+ // The migration off the controlled `open` prop onto the imperative `control`
111
+ // handle (making `Command` the last controlled-mode `Dialog` consumer to move
112
+ // over). These pin the fix at the prop boundary between `Command` and the
113
+ // underlying `Dialog`, using a prop-capturing mock `Dialog` so the assertions
114
+ // are deterministic and platform-agnostic — mirroring `AlertDialog`'s round.
115
+ describe('control-mode bridge', () => {
116
+ function captureDialogProps() {
117
+ const captured: { props?: DialogProps } = {};
118
+ const MockDialog = (props: DialogProps) => {
119
+ captured.props = props;
120
+ return null;
121
+ };
122
+ return { captured, MockDialog };
123
+ }
124
+
125
+ it('drives the underlying Dialog imperatively (control), never the controlled `open` prop', () => {
126
+ const { captured, MockDialog } = captureDialogProps();
127
+ const TestCommand = createCommand(MockDialog);
128
+ renderWithTheme(
129
+ <TestCommand visible onClose={() => {}} items={makeItems(() => {})} />,
130
+ );
131
+ // The whole point of the migration: `Command` must take the Dialog's
132
+ // imperative/uncontrolled branch (the one that plays the exit animation on
133
+ // dismiss), so an imperative `control` handle is passed and the controlled
134
+ // `open` boolean — which fires `onClose` synchronously — is never set.
135
+ expect(captured.props?.control).toBeDefined();
136
+ expect(captured.props?.open).toBeUndefined();
137
+ });
138
+
139
+ // A mock Dialog that registers the real imperative contract on `control.ref`
140
+ // (so `Command`'s `control.open()` / `control.close()` proxy through it) and
141
+ // fires `onClose` when imperatively closed — modelling the real Dialog,
142
+ // which invokes `onClose` only AFTER its exit animation settles.
143
+ function ImperativeMockDialog(props: DialogProps) {
144
+ const onCloseRef = React.useRef(props.onClose);
145
+ onCloseRef.current = props.onClose;
146
+ useImperativeHandle(
147
+ props.control?.ref,
148
+ () => ({
149
+ open: () => {},
150
+ // The real Dialog fires `onClose` post-exit-animation.
151
+ close: () => onCloseRef.current?.(),
152
+ }),
153
+ [],
154
+ );
155
+ return null;
156
+ }
157
+
158
+ it('opens the Dialog imperatively on mount when visible, and closes it when visible flips false', () => {
159
+ const spies = { open: jest.fn(), close: jest.fn() };
160
+ const MockDialog = (props: DialogProps) => {
161
+ useImperativeHandle(props.control?.ref, () => spies, []);
162
+ return null;
163
+ };
164
+ const TestCommand = createCommand(MockDialog);
165
+ const { rerender } = renderWithTheme(
166
+ <TestCommand visible onClose={() => {}} items={makeItems(() => {})} />,
167
+ );
168
+ expect(spies.open).toHaveBeenCalledTimes(1);
169
+ expect(spies.close).not.toHaveBeenCalled();
170
+
171
+ act(() => {
172
+ rerender(
173
+ <BloomThemeProvider mode="light" colorPreset="teal">
174
+ <TestCommand
175
+ visible={false}
176
+ onClose={() => {}}
177
+ items={makeItems(() => {})}
178
+ />
179
+ </BloomThemeProvider>,
180
+ );
181
+ });
182
+ expect(spies.close).toHaveBeenCalledTimes(1);
183
+ });
184
+
185
+ it('forwards a user dismissal (backdrop / Escape) through onClose', () => {
186
+ const spyRef: { fn?: () => void } = {};
187
+ const MockDialog = (props: DialogProps) => {
188
+ spyRef.fn = props.onClose;
189
+ return null;
190
+ };
191
+ const onClose = jest.fn();
192
+ const TestCommand = createCommand(MockDialog);
193
+ renderWithTheme(
194
+ <TestCommand visible onClose={onClose} items={makeItems(() => {})} />,
195
+ );
196
+ // The real Dialog fires `onClose` once its exit animation settles after a
197
+ // backdrop / Escape dismissal. `Command` must forward that to the consumer.
198
+ act(() => {
199
+ spyRef.fn?.();
200
+ });
201
+ expect(onClose).toHaveBeenCalledTimes(1);
202
+ });
203
+
204
+ it('does not re-enter onClose when the consumer closes it (visible → false)', () => {
205
+ const onClose = jest.fn();
206
+ const TestCommand = createCommand(ImperativeMockDialog);
207
+ const { rerender } = renderWithTheme(
208
+ <TestCommand visible onClose={onClose} items={makeItems(() => {})} />,
209
+ );
210
+ act(() => {
211
+ rerender(
212
+ <BloomThemeProvider mode="light" colorPreset="teal">
213
+ <TestCommand
214
+ visible={false}
215
+ onClose={onClose}
216
+ items={makeItems(() => {})}
217
+ />
218
+ </BloomThemeProvider>,
219
+ );
220
+ });
221
+ // A consumer-initiated close flips `visible` to false → `Command`
222
+ // imperatively `close()`s the Dialog (which fires its post-exit `onClose`).
223
+ // That programmatic close must NOT re-enter the consumer's `onClose`,
224
+ // preserving the previous controlled semantics.
225
+ expect(onClose).not.toHaveBeenCalled();
226
+ });
227
+ });
107
228
  });
@@ -1,4 +1,4 @@
1
- import React, { useCallback, useMemo, useRef, useState } from 'react';
1
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
2
  import {
3
3
  Platform,
4
4
  ScrollView,
@@ -15,6 +15,7 @@ import { Kbd } from '../kbd';
15
15
  import { SearchInput } from '../search-input';
16
16
  import { fontSize, space } from '../styles/tokens';
17
17
  import type { DialogProps } from '../dialog';
18
+ import { useDialogControl } from '../dialog/context';
18
19
  import type { CommandItem, CommandProps } from './types';
19
20
 
20
21
  type DialogComponent = React.ComponentType<DialogProps>;
@@ -48,6 +49,20 @@ interface FlatEntry {
48
49
  * `SearchInput`, an `Item` results list and `Kbd` shortcut hints. Items group
49
50
  * by their `group` field (ungrouped first). On web the list is
50
51
  * keyboard-navigable (Up/Down/Enter); on native, tap to select.
52
+ *
53
+ * Control mode — IMPERATIVE, not controlled. `Command` keeps its public
54
+ * *controlled* API (`visible` boolean + `onClose`) but internally bridges it
55
+ * onto the Dialog's imperative `useDialogControl()` handle, exactly like
56
+ * `AlertDialog`. This makes `Command` the LAST controlled-`open` `Dialog`
57
+ * consumer to move onto the imperative path every other surface uses
58
+ * (`alert()`, `confirm()`, native `Menu`/`Select`/`ContextMenu`, Mention's
59
+ * dialogs), so there is one code path across the ecosystem. It also guarantees
60
+ * the palette's exit animation on the dismiss path even for a consumer that
61
+ * unmounts the palette in response to `onClose` (`{open && <Command …/>}`): the
62
+ * imperative `close()` runs the exit animation FIRST and fires `onClose` only
63
+ * once it settles, whereas the controlled `open` path fires `onClose`
64
+ * synchronously — which, for an unmount-on-close consumer, would tear the
65
+ * surface down before it could animate out.
51
66
  */
52
67
  export function createCommand(Dialog: DialogComponent) {
53
68
  const Command = function Command({
@@ -64,6 +79,7 @@ export function createCommand(Dialog: DialogComponent) {
64
79
  testID,
65
80
  }: CommandProps) {
66
81
  const theme = useTheme();
82
+ const control = useDialogControl();
67
83
  const searchRef = useRef<TextInput>(null);
68
84
  const [activeIndex, setActiveIndex] = useState(0);
69
85
 
@@ -142,6 +158,37 @@ export function createCommand(Dialog: DialogComponent) {
142
158
  [setQuery, onClose],
143
159
  );
144
160
 
161
+ // Bridge the public *controlled* `visible` prop onto the Dialog's imperative
162
+ // open/close (mirrors `AlertDialog`). `control` is referentially stable
163
+ // (memoised on its id), so this effect only re-runs when `visible` actually
164
+ // flips. Opening straight from an effect on mount matches bloom's own
165
+ // `AutoMountedDialog`. When a consumer flips `visible` to `false` (their own
166
+ // close, or after a select), we imperatively `close()` so the exit animation
167
+ // still plays.
168
+ const closingFromPropRef = useRef(false);
169
+ useEffect(() => {
170
+ if (visible) {
171
+ control.open();
172
+ return;
173
+ }
174
+ closingFromPropRef.current = true;
175
+ control.close();
176
+ }, [visible, control]);
177
+
178
+ // The Dialog fires `onClose` after the exit animation settles (imperative
179
+ // mode). Forward ONLY user-initiated dismissals (backdrop / Escape) to the
180
+ // consumer — a consumer-initiated close (they flipped `visible` to `false`,
181
+ // e.g. `select` already called `onClose`) must not re-enter `onClose`,
182
+ // preserving the previous controlled semantics where a programmatic close
183
+ // does not fire `onClose` a second time.
184
+ const handleClose = useCallback(() => {
185
+ if (closingFromPropRef.current) {
186
+ closingFromPropRef.current = false;
187
+ return;
188
+ }
189
+ onClose();
190
+ }, [onClose]);
191
+
145
192
  // Web keyboard navigation on the search input.
146
193
  const webKeyHandler: Record<string, unknown> =
147
194
  Platform.OS === 'web'
@@ -172,8 +219,8 @@ export function createCommand(Dialog: DialogComponent) {
172
219
 
173
220
  return (
174
221
  <Dialog
175
- open={visible}
176
- onClose={onClose}
222
+ control={control}
223
+ onClose={handleClose}
177
224
  placement="center"
178
225
  dismissOnBackdrop
179
226
  maxWidth={COMMAND_MAX_WIDTH}