@tooee/choose 0.7.3 → 0.9.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.
Files changed (62) hide show
  1. package/dist/choose-filter.d.ts +2 -11
  2. package/dist/choose-filter.d.ts.map +1 -1
  3. package/dist/choose-filter.js +1 -10
  4. package/dist/choose-filter.js.map +1 -1
  5. package/dist/choose-highlighted-text.d.ts +2 -8
  6. package/dist/choose-highlighted-text.d.ts.map +1 -1
  7. package/dist/choose-highlighted-text.js +1 -31
  8. package/dist/choose-highlighted-text.js.map +1 -1
  9. package/dist/choose-list.d.ts +2 -27
  10. package/dist/choose-list.d.ts.map +1 -1
  11. package/dist/choose-list.js +1 -56
  12. package/dist/choose-list.js.map +1 -1
  13. package/dist/choose-panel.d.ts +7 -9
  14. package/dist/choose-panel.d.ts.map +1 -1
  15. package/dist/choose-panel.js +5 -8
  16. package/dist/choose-panel.js.map +1 -1
  17. package/dist/choose-store.d.ts +3 -0
  18. package/dist/choose-store.d.ts.map +1 -0
  19. package/dist/choose-store.js +2 -0
  20. package/dist/choose-store.js.map +1 -0
  21. package/dist/choose.d.ts +3 -7
  22. package/dist/choose.d.ts.map +1 -1
  23. package/dist/choose.js +10 -12
  24. package/dist/choose.js.map +1 -1
  25. package/dist/choose.public-contract.typecheck.d.ts +11 -0
  26. package/dist/choose.public-contract.typecheck.d.ts.map +1 -0
  27. package/dist/choose.public-contract.typecheck.js +2 -0
  28. package/dist/choose.public-contract.typecheck.js.map +1 -0
  29. package/dist/fuzzy.d.ts +2 -8
  30. package/dist/fuzzy.d.ts.map +1 -1
  31. package/dist/fuzzy.js +1 -16
  32. package/dist/fuzzy.js.map +1 -1
  33. package/dist/launch.d.ts.map +1 -1
  34. package/dist/launch.js +2 -1
  35. package/dist/launch.js.map +1 -1
  36. package/dist/source.d.ts +1 -4
  37. package/dist/source.d.ts.map +1 -1
  38. package/dist/source.js +1 -13
  39. package/dist/source.js.map +1 -1
  40. package/dist/types.d.ts +1 -21
  41. package/dist/types.d.ts.map +1 -1
  42. package/dist/use-choose-dialog.d.ts.map +1 -1
  43. package/dist/use-choose-dialog.js +22 -84
  44. package/dist/use-choose-dialog.js.map +1 -1
  45. package/dist/use-choose.d.ts +2 -79
  46. package/dist/use-choose.d.ts.map +1 -1
  47. package/dist/use-choose.js +1 -402
  48. package/dist/use-choose.js.map +1 -1
  49. package/package.json +8 -7
  50. package/src/choose-filter.tsx +2 -47
  51. package/src/choose-highlighted-text.tsx +2 -49
  52. package/src/choose-list.tsx +2 -148
  53. package/src/choose-panel.tsx +18 -71
  54. package/src/choose-store.ts +12 -0
  55. package/src/choose.public-contract.typecheck.ts +12 -0
  56. package/src/choose.tsx +20 -24
  57. package/src/fuzzy.ts +2 -28
  58. package/src/launch.tsx +8 -2
  59. package/src/source.ts +1 -18
  60. package/src/types.ts +7 -28
  61. package/src/use-choose-dialog.tsx +30 -98
  62. package/src/use-choose.ts +9 -526
@@ -1 +1 @@
1
- {"version":3,"file":"use-choose-dialog.d.ts","sourceRoot":"","sources":["../src/use-choose-dialog.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAIxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAU3D,kFAAkF;AAClF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/F,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACxC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC5B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,gDAAgD;IAChD,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,GACxD;IAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,UAAU,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,UAAU,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,uBAAuB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAExF,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC;;;;;;OAMG;IACH,IAAI,EAAE;QACJ,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG;YAAE,KAAK,EAAE,IAAI,CAAA;SAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACzE,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG;YAAE,KAAK,CAAC,EAAE,KAAK,CAAA;SAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;KAC1E,CAAC;CACH;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,eAAe,GAA4B,CAAC,OAAK,kBAAkB,CAAC,CAAC,CA6JjF,CAAC"}
1
+ {"version":3,"file":"use-choose-dialog.d.ts","sourceRoot":"","sources":["../src/use-choose-dialog.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAE3D,kFAAkF;AAClF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/F,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACxC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC5B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,gDAAgD;IAChD,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,GACxD;IAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,UAAU,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,UAAU,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,uBAAuB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAExF,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC;;;;;;OAMG;IACH,IAAI,EAAE;QACJ,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG;YAAE,KAAK,EAAE,IAAI,CAAA;SAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACzE,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG;YAAE,KAAK,CAAC,EAAE,KAAK,CAAA;SAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;KAC1E,CAAC;CACH;AAeD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,eAAe,GAA4B,CAAC,OAAK,kBAAkB,CAAC,CAAC,CAqFjF,CAAC"}
@@ -1,14 +1,16 @@
1
1
  import { jsx as _jsx } from "@opentui/react/jsx-runtime";
2
- import { useEffect, useRef } from "react";
3
- import { useOverlay } from "@tooee/overlays";
2
+ import { useMemo } from "react";
3
+ import { useOverlayDialog } from "@tooee/overlays";
4
4
  import { ChooseOverlay } from "./choose-overlay.js";
5
- /**
6
- * Per-open unique overlay id. A module-level sequence guarantees that
7
- * concurrent dialogs — including dialogs opened from separate providers in the
8
- * same process — never share an overlay id, so one dialog can never displace
9
- * another through same-id replacement.
10
- */
11
- let chooseDialogSequence = 0;
5
+ const isDialogItemArray = function isDialogItemArray(items) {
6
+ return Array.isArray(items);
7
+ };
8
+ // oxlint-disable-next-line typescript/no-unnecessary-type-parameters -- T carries the conditional public option evidence for an omitted mapper
9
+ const defaultDialogItem = function defaultDialogItem(item) {
10
+ // SAFETY: ChooseDialogToItem permits an omitted mapper only when T extends ChooseItem.
11
+ // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- conditional public options enforce the ChooseItem arm
12
+ return item;
13
+ };
12
14
  /**
13
15
  * Promise-based modal chooser dialog on the overlay stack.
14
16
  *
@@ -24,54 +26,13 @@ let chooseDialogSequence = 0;
24
26
  * `useCurrentOverlay()`).
25
27
  */
26
28
  export const useChooseDialog = function useChooseDialog() {
27
- const overlay = useOverlay();
28
- const overlayRef = useRef(overlay);
29
- overlayRef.current = overlay;
30
- // Open dialogs by overlay id, so unmounting the owner closes (and thereby
31
- // settles) every dialog it opened.
32
- const openHandlesRef = useRef(new Map());
33
- const unmountedRef = useRef(false);
34
- useEffect(() => {
35
- unmountedRef.current = false;
36
- const handles = openHandlesRef.current;
37
- return () => {
38
- unmountedRef.current = true;
39
- // Map iteration tolerates deletion: settle() removes entries as each
40
- // close lands.
41
- for (const handle of handles.values()) {
42
- handle.close("unmounted");
43
- }
44
- handles.clear();
45
- };
46
- }, []);
47
- // Stable identity so command handlers and effects can capture the handle.
48
- const handleRef = useRef(null);
49
- if (handleRef.current === null) {
29
+ const dialog = useOverlayDialog();
30
+ return useMemo(() => {
50
31
  const open = async (options) => {
51
- const { promise, resolve } = Promise.withResolvers();
52
- if (unmountedRef.current) {
53
- resolve(null);
54
- return null;
55
- }
56
- chooseDialogSequence += 1;
57
- const id = `choose-dialog-${chooseDialogSequence}`;
58
- let settled = false;
59
- const settle = (value) => {
60
- if (settled) {
61
- return;
62
- }
63
- settled = true;
64
- openHandlesRef.current.delete(id);
65
- resolve(value);
66
- };
67
32
  // Displayed rows map back to typed items by identity: every mapped
68
33
  // row is a fresh object (spread copy), so duplicates in `items` and
69
34
  // `toItem` results that share references stay unambiguous.
70
- // Safe default: `toItem` may only be omitted when T is a ChooseItem
71
- // (enforced by ChooseDialogToItem).
72
- // Deferred(lint-sweep): replace the conditional generic API boundary with schema-safe overload implementation typing.
73
- // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- default mapper is enforced by ChooseDialogToItem's public type
74
- const toItem = options.toItem ?? ((item) => item);
35
+ const toItem = options.toItem ?? defaultDialogItem;
75
36
  const rowToValue = new Map();
76
37
  const mapValues = (values) => {
77
38
  rowToValue.clear();
@@ -84,11 +45,9 @@ export const useChooseDialog = function useChooseDialog() {
84
45
  // Created once per open() so the source identity is stable across
85
46
  // overlay re-renders (a fresh source each render would reload forever).
86
47
  const { items } = options;
87
- const source = Array.isArray(items)
48
+ const source = isDialogItemArray(items)
88
49
  ? mapValues(items)
89
50
  : () => {
90
- // Deferred(lint-sweep): replace the conditional generic API boundary with schema-safe overload implementation typing.
91
- // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- implementation narrows the public source union after the branch
92
51
  const loaded = items();
93
52
  if (loaded instanceof Promise) {
94
53
  return (async () => mapValues(await loaded))();
@@ -108,46 +67,25 @@ export const useChooseDialog = function useChooseDialog() {
108
67
  renderItem: options.renderItem,
109
68
  statusRight: options.statusRight,
110
69
  };
111
- const handle = overlayRef.current.open(id, () => multi ? (_jsx(ChooseOverlay, { ...shared, multi: true, onSubmit: (result) => {
112
- if (settled) {
113
- return;
114
- }
70
+ return await dialog.open("choose-dialog", (settle) => multi ? (_jsx(ChooseOverlay, { ...shared, multi: true, onSubmit: (result) => {
115
71
  const values = result.items.flatMap((row) => {
116
72
  const value = rowToValue.get(row);
117
73
  return value === undefined ? [] : [value];
118
74
  });
119
75
  settle(values);
120
- handle.close("close");
121
76
  }, onCancel: () => {
122
- handle.close("escape");
77
+ settle(null);
123
78
  } })) : (_jsx(ChooseOverlay, { ...shared, onSelect: (row) => {
124
- if (settled) {
125
- return;
126
- }
127
79
  const value = rowToValue.get(row);
128
80
  settle(value ?? null);
129
- handle.close("close");
130
81
  }, onCancel: () => {
131
- handle.close("escape");
132
- } })), undefined, {
133
- // Single settlement funnel: every close path (cancel, escape,
134
- // replacement, unmount, external closeTop) lands here. Select and
135
- // submit settle first, making this a no-op.
136
- onClose: () => {
137
82
  settle(null);
138
- },
139
- ownCommands: true,
140
- role: "modal",
141
- surfaceMode: "insert",
142
- });
143
- openHandlesRef.current.set(id, handle);
144
- const result = await promise;
145
- return result;
83
+ } })));
146
84
  };
147
- // Deferred(lint-sweep): replace the conditional generic API boundary with schema-safe overload implementation typing.
85
+ // SAFETY: The implementation returns the single or multi result selected by the same options.multi
86
+ // discriminator as the public overloads.
148
87
  // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- implementation preserves the public overloaded handle contract
149
- handleRef.current = { open: open };
150
- }
151
- return handleRef.current;
88
+ return { open: open };
89
+ }, [dialog]);
152
90
  };
153
91
  //# sourceMappingURL=use-choose-dialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-choose-dialog.js","sourceRoot":"","sources":["../src/use-choose-dialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKpD;;;;;GAKG;AACH,IAAI,oBAAoB,GAAG,CAAC,CAAC;AAmD7B;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,eAAe;IACrD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,0EAA0E;IAC1E,mCAAmC;IACnC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,GAAG,EAAoC,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;QAC7B,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;QACvC,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;YAC5B,qEAAqE;YACrE,eAAe;YACf,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACtC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC5B,CAAC;YACD,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,0EAA0E;IAC1E,MAAM,SAAS,GAAG,MAAM,CAA+B,IAAI,CAAC,CAAC;IAC7D,IAAI,SAAS,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,KAAK,EAChB,OAA0E,EACjD,EAAE;YAC3B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,EAAkB,CAAC;YACrE,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO,IAAI,CAAC;YACd,CAAC;YAED,oBAAoB,IAAI,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,iBAAiB,oBAAoB,EAAE,CAAC;YACnD,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,MAAM,GAAG,CAAC,KAAqB,EAAE,EAAE;gBACvC,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO;gBACT,CAAC;gBACD,OAAO,GAAG,IAAI,CAAC;gBACf,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAClC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC;YAEF,mEAAmE;YACnE,oEAAoE;YACpE,2DAA2D;YAC3D,oEAAoE;YACpE,oCAAoC;YACpC,sHAAsH;YACtH,iIAAiI;YACjI,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,IAAO,EAAE,EAAE,CAAC,IAA6B,CAAC,CAAC;YAC9E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAiB,CAAC;YAC5C,MAAM,SAAS,GAAG,CAAC,MAAoB,EAAgB,EAAE;gBACvD,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC1B,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC3B,OAAO,GAAG,CAAC;gBACb,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YAEF,kEAAkE;YAClE,wEAAwE;YACxE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;YAC1B,MAAM,MAAM,GAAiB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC/C,CAAC,CAAC,SAAS,CAAC,KAAqB,CAAC;gBAClC,CAAC,CAAC,GAAyC,EAAE;oBACzC,sHAAsH;oBACtH,kIAAkI;oBAClI,MAAM,MAAM,GAAI,KAAoD,EAAE,CAAC;oBACvE,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;wBAC9B,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC;oBACjD,CAAC;oBACD,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC3B,CAAC,CAAC;YAEN,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;YACrC,MAAM,MAAM,GAAG;gBACb,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC;YAEF,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CACpC,EAAE,EACF,GAAc,EAAE,CACd,KAAK,CAAC,CAAC,CAAC,CACN,KAAC,aAAa,OACR,MAAM,EACV,KAAK,QACL,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;oBACnB,IAAI,OAAO,EAAE,CAAC;wBACZ,OAAO;oBACT,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;wBAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAClC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAC5C,CAAC,CAAC,CAAC;oBACH,MAAM,CAAC,MAAM,CAAC,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACxB,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE;oBACb,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC,GACD,CACH,CAAC,CAAC,CAAC,CACF,KAAC,aAAa,OACR,MAAM,EACV,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;oBAChB,IAAI,OAAO,EAAE,CAAC;wBACZ,OAAO;oBACT,CAAC;oBACD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAClC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;oBACtB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACxB,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE;oBACb,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC,GACD,CACH,EACH,SAAS,EACT;gBACE,8DAA8D;gBAC9D,kEAAkE;gBAClE,4CAA4C;gBAC5C,OAAO,EAAE,GAAG,EAAE;oBACZ,MAAM,CAAC,IAAI,CAAC,CAAC;gBACf,CAAC;gBACD,WAAW,EAAE,IAAI;gBACjB,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,QAAQ;aACtB,CACF,CAAC;YACF,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC7B,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,sHAAsH;QACtH,iIAAiI;QACjI,SAAS,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,IAAqC,EAAE,CAAC;IACtE,CAAC;IAED,OAAO,SAAS,CAAC,OAAO,CAAC;AAC3B,CAAC,CAAC"}
1
+ {"version":3,"file":"use-choose-dialog.js","sourceRoot":"","sources":["../src/use-choose-dialog.tsx"],"names":[],"mappings":"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"}
@@ -1,80 +1,3 @@
1
- import type { InputRenderable, KeyEvent } from "@opentui/core";
2
- import type { ActionDefinition, Mode } from "@tooee/commands";
3
- import type { FuzzyMatch } from "./fuzzy.js";
4
- import type { ChooseItem, ChooseResult, ChooseSource } from "./types.js";
5
- declare module "@tooee/commands" {
6
- interface CommandContext {
7
- /** Contributed by chooser primitives: current filtering and selection state. */
8
- choose: {
9
- activeItem: ChooseItem | undefined;
10
- selectedItems: ChooseItem[];
11
- filterQuery: string;
12
- };
13
- }
14
- }
15
- export type ChooseCommandGroup = "navigation" | "mode" | "submit" | "cancel" | "multi-select";
16
- export interface UseChooseOptions {
17
- source: ChooseSource;
18
- multi?: boolean;
19
- initialFilter?: string;
20
- onSubmit: (result: ChooseResult) => void | Promise<void>;
21
- onCancel?: () => void;
22
- commands?: ActionDefinition[];
23
- /** Prefix for built-in command ids (default `choose`). */
24
- commandScope?: string;
25
- /** Disable a built-in command group when a host owns those keys. */
26
- disable?: ChooseCommandGroup[];
27
- /** Explicitly blur/disable mouse views while a legacy covering surface is open. */
28
- suspended?: boolean;
29
- }
30
- export interface ChooseController {
31
- getFilter: () => string;
32
- setFilter: (query: string) => void;
33
- clearFilter: () => void;
34
- moveUp: () => void;
35
- moveDown: () => void;
36
- setActiveIndex: (index: number) => void;
37
- getActiveItem: () => ChooseItem | undefined;
38
- getSelectedItems: () => ChooseItem[];
39
- toggleActive: () => void;
40
- submit: () => void;
41
- cancel: () => void;
42
- reload: () => void;
43
- readonly mode: Mode;
44
- setMode: (mode: Mode) => void;
45
- }
46
- export interface ChooseState {
47
- items: ChooseItem[];
48
- matches: FuzzyMatch[];
49
- filterQuery: string;
50
- activeIndex: number;
51
- activeItem: ChooseItem | undefined;
52
- selectedOriginalIndices: ReadonlySet<number>;
53
- selectedItems: ChooseItem[];
54
- loading: boolean;
55
- error: string | null;
56
- multi: boolean;
57
- }
58
- export interface ChooseViewModel {
59
- filterRef: {
60
- current: InputRenderable | null;
61
- };
62
- mode: Mode;
63
- /** True while another modal surface (or an explicit host guard) owns interaction. */
64
- suspended: boolean;
65
- filterFocused: boolean;
66
- onFilterInput: (query: string) => void;
67
- /** Input-level Tab bridge; OpenTUI consumes Tab before global dispatch. */
68
- onFilterKeyDown: (event: KeyEvent) => void;
69
- }
70
- export interface UseChooseResult {
71
- controller: ChooseController;
72
- state: ChooseState;
73
- view: ChooseViewModel;
74
- }
75
- /**
76
- * Shared headless chooser: source lifecycle, fuzzy matches, selection,
77
- * command context, controller, and all built-in keyboard commands.
78
- */
79
- export declare const useChoose: (options: UseChooseOptions) => UseChooseResult;
1
+ export { useChoose } from "@tooee/renderers";
2
+ export type { ChooseCommandGroup, ChooseController, ChooseState, ChooseViewModel, UseChooseOptions, UseChooseResult, } from "@tooee/renderers";
80
3
  //# sourceMappingURL=use-choose.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-choose.d.ts","sourceRoot":"","sources":["../src/use-choose.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-choose.d.ts","sourceRoot":"","sources":["../src/use-choose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAC"}