@tooee/choose 0.2.4 → 0.3.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/README.md +2 -2
- package/dist/{ChooseFilter.d.ts → choose-filter.d.ts} +2 -2
- package/dist/choose-filter.d.ts.map +1 -0
- package/dist/choose-filter.js +11 -0
- package/dist/choose-filter.js.map +1 -0
- package/dist/choose-highlighted-text.d.ts +9 -0
- package/dist/choose-highlighted-text.d.ts.map +1 -0
- package/dist/{ChooseHighlightedText.js → choose-highlighted-text.js} +10 -8
- package/dist/choose-highlighted-text.js.map +1 -0
- package/dist/{ChooseList.d.ts → choose-list.d.ts} +3 -3
- package/dist/choose-list.d.ts.map +1 -0
- package/dist/{ChooseList.js → choose-list.js} +20 -15
- package/dist/choose-list.js.map +1 -0
- package/dist/{ChooseOverlay.d.ts → choose-overlay.d.ts} +6 -6
- package/dist/choose-overlay.d.ts.map +1 -0
- package/dist/{ChooseOverlay.js → choose-overlay.js} +15 -13
- package/dist/choose-overlay.js.map +1 -0
- package/dist/{ChoosePanel.d.ts → choose-panel.d.ts} +5 -5
- package/dist/choose-panel.d.ts.map +1 -0
- package/dist/choose-panel.js +31 -0
- package/dist/choose-panel.js.map +1 -0
- package/dist/choose.d.ts +28 -0
- package/dist/choose.d.ts.map +1 -0
- package/dist/{Choose.js → choose.js} +25 -18
- package/dist/choose.js.map +1 -0
- package/dist/default-provider.d.ts +2 -2
- package/dist/default-provider.d.ts.map +1 -1
- package/dist/default-provider.js +4 -4
- package/dist/default-provider.js.map +1 -1
- package/dist/fuzzy.d.ts +1 -1
- package/dist/fuzzy.d.ts.map +1 -1
- package/dist/fuzzy.js +5 -5
- package/dist/fuzzy.js.map +1 -1
- package/dist/index.d.ts +12 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/launch.d.ts +1 -1
- package/dist/launch.d.ts.map +1 -1
- package/dist/launch.js +5 -4
- package/dist/launch.js.map +1 -1
- package/dist/source.d.ts +2 -2
- package/dist/source.d.ts.map +1 -1
- package/dist/source.js +8 -6
- package/dist/source.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/use-choose-dialog.d.ts +12 -10
- package/dist/use-choose-dialog.d.ts.map +1 -1
- package/dist/use-choose-dialog.js +98 -77
- package/dist/use-choose-dialog.js.map +1 -1
- package/dist/use-choose-dialog.typecheck.d.ts +1 -1
- package/dist/use-choose-dialog.typecheck.d.ts.map +1 -1
- package/dist/use-choose-dialog.typecheck.js +5 -5
- package/dist/use-choose-dialog.typecheck.js.map +1 -1
- package/dist/use-choose.d.ts +16 -16
- package/dist/use-choose.d.ts.map +1 -1
- package/dist/use-choose.js +176 -138
- package/dist/use-choose.js.map +1 -1
- package/package.json +7 -7
- package/src/{ChooseFilter.tsx → choose-filter.tsx} +18 -16
- package/src/choose-highlighted-text.tsx +49 -0
- package/src/{ChooseList.tsx → choose-list.tsx} +73 -60
- package/src/choose-overlay.tsx +96 -0
- package/src/{ChoosePanel.tsx → choose-panel.tsx} +41 -34
- package/src/choose.tsx +142 -0
- package/src/default-provider.ts +18 -15
- package/src/fuzzy.ts +16 -16
- package/src/index.ts +23 -23
- package/src/launch.tsx +15 -12
- package/src/source.ts +15 -9
- package/src/types.ts +12 -12
- package/src/use-choose-dialog.tsx +168 -139
- package/src/use-choose-dialog.typecheck.ts +19 -18
- package/src/use-choose.ts +349 -302
- package/dist/Choose.d.ts +0 -21
- package/dist/Choose.d.ts.map +0 -1
- package/dist/Choose.js.map +0 -1
- package/dist/ChooseFilter.d.ts.map +0 -1
- package/dist/ChooseFilter.js +0 -9
- package/dist/ChooseFilter.js.map +0 -1
- package/dist/ChooseHighlightedText.d.ts +0 -9
- package/dist/ChooseHighlightedText.d.ts.map +0 -1
- package/dist/ChooseHighlightedText.js.map +0 -1
- package/dist/ChooseList.d.ts.map +0 -1
- package/dist/ChooseList.js.map +0 -1
- package/dist/ChooseOverlay.d.ts.map +0 -1
- package/dist/ChooseOverlay.js.map +0 -1
- package/dist/ChoosePanel.d.ts.map +0 -1
- package/dist/ChoosePanel.js +0 -25
- package/dist/ChoosePanel.js.map +0 -1
- package/src/Choose.tsx +0 -126
- package/src/ChooseHighlightedText.tsx +0 -42
- package/src/ChooseOverlay.tsx +0 -88
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,YAAY,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,YAAY,EACV,UAAU,EACV,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { Choose } from "./
|
|
2
|
-
export { ChooseOverlay } from "./
|
|
3
|
-
export { ChoosePanel, buildChooseHints } from "./
|
|
4
|
-
export { ChooseFilter } from "./
|
|
5
|
-
export { ChooseList } from "./
|
|
6
|
-
export { ChooseHighlightedText } from "./
|
|
1
|
+
export { Choose } from "./choose.js";
|
|
2
|
+
export { ChooseOverlay } from "./choose-overlay.js";
|
|
3
|
+
export { ChoosePanel, buildChooseHints } from "./choose-panel.js";
|
|
4
|
+
export { ChooseFilter } from "./choose-filter.js";
|
|
5
|
+
export { ChooseList } from "./choose-list.js";
|
|
6
|
+
export { ChooseHighlightedText } from "./choose-highlighted-text.js";
|
|
7
7
|
export { useChoose } from "./use-choose.js";
|
|
8
8
|
export { useChooseDialog } from "./use-choose-dialog.js";
|
|
9
9
|
export { loadChooseSource } from "./source.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAS5C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/launch.d.ts
CHANGED
|
@@ -5,5 +5,5 @@ export interface ChooseLaunchOptions {
|
|
|
5
5
|
options?: ChooseOptions;
|
|
6
6
|
actions?: ActionDefinition[];
|
|
7
7
|
}
|
|
8
|
-
export declare
|
|
8
|
+
export declare const launch: (opts: ChooseLaunchOptions) => Promise<ChooseResult | null>;
|
|
9
9
|
//# sourceMappingURL=launch.d.ts.map
|
package/dist/launch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../src/launch.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../src/launch.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAErF,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,qBAAqB,CAAC;IACvC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,MAAM,GACjB,MAAM,mBAAmB,KACxB,OAAO,CAAC,YAAY,GAAG,IAAI,CAkB7B,CAAC"}
|
package/dist/launch.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx } from "@opentui/react/jsx-runtime";
|
|
2
2
|
import { runCliSession } from "@tooee/shell";
|
|
3
|
-
import { Choose } from "./
|
|
4
|
-
export async function launch(opts) {
|
|
5
|
-
|
|
3
|
+
import { Choose } from "./choose.js";
|
|
4
|
+
export const launch = async function launch(opts) {
|
|
5
|
+
const result = await runCliSession(({ resolve, cancel }) => (_jsx(Choose, { contentProvider: opts.contentProvider, options: opts.options, actions: opts.actions, onConfirm: resolve, onCancel: cancel })), {
|
|
6
6
|
exitOnCtrlC: false,
|
|
7
7
|
provider: { initialMode: "insert" },
|
|
8
8
|
stdinPolicy: "tty-if-piped",
|
|
9
9
|
});
|
|
10
|
-
|
|
10
|
+
return result;
|
|
11
|
+
};
|
|
11
12
|
//# sourceMappingURL=launch.js.map
|
package/dist/launch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../src/launch.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../src/launch.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AASrC,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,UAAU,MAAM,CACzC,IAAyB;IAEzB,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAmB,EAAE,CAAC,CACxC,KAAC,MAAM,IACL,eAAe,EAAE,IAAI,CAAC,eAAe,EACrC,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE,MAAM,GAChB,CACH,EACD;QACE,WAAW,EAAE,KAAK;QAClB,QAAQ,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE;QACnC,WAAW,EAAE,cAAc;KAC5B,CACF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
package/dist/source.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ChooseItem, ChooseSource } from "./types.js";
|
|
2
2
|
/** Resolve every public Choose source shape through one compatibility boundary. */
|
|
3
|
-
export declare
|
|
4
|
-
export declare
|
|
3
|
+
export declare const loadChooseSource: (source: ChooseSource) => ChooseItem[] | Promise<ChooseItem[]>;
|
|
4
|
+
export declare const chooseSourceError: (error: unknown) => string;
|
|
5
5
|
//# sourceMappingURL=source.d.ts.map
|
package/dist/source.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3D,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,YAAY,KACnB,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAQrC,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAA8B,OAAO,OAAO,KAAG,MAE5E,CAAC"}
|
package/dist/source.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/** Resolve every public Choose source shape through one compatibility boundary. */
|
|
2
|
-
export function loadChooseSource(source) {
|
|
3
|
-
if (Array.isArray(source))
|
|
2
|
+
export const loadChooseSource = function loadChooseSource(source) {
|
|
3
|
+
if (Array.isArray(source)) {
|
|
4
4
|
return source;
|
|
5
|
-
|
|
5
|
+
}
|
|
6
|
+
if (typeof source === "function") {
|
|
6
7
|
return source();
|
|
8
|
+
}
|
|
7
9
|
return source.load();
|
|
8
|
-
}
|
|
9
|
-
export function chooseSourceError(error) {
|
|
10
|
+
};
|
|
11
|
+
export const chooseSourceError = function chooseSourceError(error) {
|
|
10
12
|
return error instanceof Error ? error.message : String(error);
|
|
11
|
-
}
|
|
13
|
+
};
|
|
12
14
|
//# sourceMappingURL=source.js.map
|
package/dist/source.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,MAAM,
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,gBAAgB,CACvD,MAAoB;IAEpB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,MAAM,EAAE,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,iBAAiB,CAAC,KAAc;IACxE,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export interface ChooseItem {
|
|
|
5
5
|
description?: string;
|
|
6
6
|
}
|
|
7
7
|
export interface ChooseContentProvider {
|
|
8
|
-
load()
|
|
8
|
+
load: () => Promise<ChooseItem[]> | ChooseItem[];
|
|
9
9
|
}
|
|
10
10
|
/** Any item source accepted by the shared chooser core. */
|
|
11
11
|
export type ChooseSource = ChooseItem[] | ChooseContentProvider | (() => ChooseItem[] | Promise<ChooseItem[]>);
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC;CAClD;AAED,2DAA2D;AAC3D,MAAM,MAAM,YAAY,GACpB,UAAU,EAAE,GACZ,qBAAqB,GACrB,CAAC,MAAM,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
2
|
import type { ActionDefinition } from "@tooee/commands";
|
|
3
|
-
import type { ChooseListProps } from "./
|
|
4
|
-
import type { ChoosePanelProps } from "./
|
|
3
|
+
import type { ChooseListProps } from "./choose-list.js";
|
|
4
|
+
import type { ChoosePanelProps } from "./choose-panel.js";
|
|
5
5
|
import type { ChooseItem } from "./types.js";
|
|
6
6
|
/** Typed item source: a fixed list, or a loader invoked when the dialog opens. */
|
|
7
7
|
export type ChooseDialogItems<T> = readonly T[] | (() => readonly T[] | Promise<readonly T[]>);
|
|
@@ -44,12 +44,14 @@ export interface ChooseDialogHandle<T> {
|
|
|
44
44
|
* resolves the confirmed item; multi-select resolves the toggled items
|
|
45
45
|
* (falling back to the active item when nothing is toggled).
|
|
46
46
|
*/
|
|
47
|
-
open
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
open: {
|
|
48
|
+
(options: ChooseDialogOptions<T> & {
|
|
49
|
+
multi: true;
|
|
50
|
+
}): Promise<T[] | null>;
|
|
51
|
+
(options: ChooseDialogOptions<T> & {
|
|
52
|
+
multi?: false;
|
|
53
|
+
}): Promise<T | null>;
|
|
54
|
+
};
|
|
53
55
|
}
|
|
54
56
|
/**
|
|
55
57
|
* Promise-based modal chooser dialog on the overlay stack.
|
|
@@ -65,5 +67,5 @@ export interface ChooseDialogHandle<T> {
|
|
|
65
67
|
* (`AppLayout` does this automatically; custom hosts render
|
|
66
68
|
* `useCurrentOverlay()`).
|
|
67
69
|
*/
|
|
68
|
-
export declare
|
|
70
|
+
export declare const useChooseDialog: <T>() => ChooseDialogHandle<T>;
|
|
69
71
|
//# sourceMappingURL=use-choose-dialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-choose-dialog.d.ts","sourceRoot":"","sources":["../src/use-choose-dialog.tsx"],"names":[],"mappings":"
|
|
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,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "@opentui/react/jsx-runtime";
|
|
2
2
|
import { useEffect, useRef } from "react";
|
|
3
3
|
import { useOverlay } from "@tooee/overlays";
|
|
4
|
-
import { ChooseOverlay } from "./
|
|
4
|
+
import { ChooseOverlay } from "./choose-overlay.js";
|
|
5
5
|
/**
|
|
6
6
|
* Per-open unique overlay id. A module-level sequence guarantees that
|
|
7
7
|
* concurrent dialogs — including dialogs opened from separate providers in the
|
|
@@ -23,7 +23,7 @@ let chooseDialogSequence = 0;
|
|
|
23
23
|
* (`AppLayout` does this automatically; custom hosts render
|
|
24
24
|
* `useCurrentOverlay()`).
|
|
25
25
|
*/
|
|
26
|
-
export function useChooseDialog() {
|
|
26
|
+
export const useChooseDialog = function useChooseDialog() {
|
|
27
27
|
const overlay = useOverlay();
|
|
28
28
|
const overlayRef = useRef(overlay);
|
|
29
29
|
overlayRef.current = overlay;
|
|
@@ -38,95 +38,116 @@ export function useChooseDialog() {
|
|
|
38
38
|
unmountedRef.current = true;
|
|
39
39
|
// Map iteration tolerates deletion: settle() removes entries as each
|
|
40
40
|
// close lands.
|
|
41
|
-
for (const handle of handles.values())
|
|
41
|
+
for (const handle of handles.values()) {
|
|
42
42
|
handle.close("unmounted");
|
|
43
|
+
}
|
|
43
44
|
handles.clear();
|
|
44
45
|
};
|
|
45
46
|
}, []);
|
|
46
47
|
// Stable identity so command handlers and effects can capture the handle.
|
|
47
48
|
const handleRef = useRef(null);
|
|
48
49
|
if (handleRef.current === null) {
|
|
49
|
-
const open = (options) => {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
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) {
|
|
53
61
|
return;
|
|
54
62
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
rowToValue.
|
|
73
|
-
return
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
const shared = {
|
|
90
|
-
items: source,
|
|
91
|
-
prompt: options.prompt,
|
|
92
|
-
placeholder: options.placeholder,
|
|
93
|
-
emptyMessage: options.emptyMessage,
|
|
94
|
-
commands: options.commands,
|
|
95
|
-
renderItem: options.renderItem,
|
|
96
|
-
hints: options.hints,
|
|
97
|
-
statusRight: options.statusRight,
|
|
98
|
-
footer: options.footer,
|
|
99
|
-
inset: options.inset,
|
|
63
|
+
settled = true;
|
|
64
|
+
openHandlesRef.current.delete(id);
|
|
65
|
+
resolve(value);
|
|
66
|
+
};
|
|
67
|
+
// Displayed rows map back to typed items by identity: every mapped
|
|
68
|
+
// row is a fresh object (spread copy), so duplicates in `items` and
|
|
69
|
+
// `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);
|
|
75
|
+
const rowToValue = new Map();
|
|
76
|
+
const mapValues = (values) => {
|
|
77
|
+
rowToValue.clear();
|
|
78
|
+
return values.map((value) => {
|
|
79
|
+
const row = { ...toItem(value) };
|
|
80
|
+
rowToValue.set(row, value);
|
|
81
|
+
return row;
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
// Created once per open() so the source identity is stable across
|
|
85
|
+
// overlay re-renders (a fresh source each render would reload forever).
|
|
86
|
+
const { items } = options;
|
|
87
|
+
const source = Array.isArray(items)
|
|
88
|
+
? mapValues(items)
|
|
89
|
+
: () => {
|
|
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
|
+
const loaded = items();
|
|
93
|
+
if (loaded instanceof Promise) {
|
|
94
|
+
return (async () => mapValues(await loaded))();
|
|
95
|
+
}
|
|
96
|
+
return mapValues(loaded);
|
|
100
97
|
};
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
98
|
+
const multi = options.multi === true;
|
|
99
|
+
const shared = {
|
|
100
|
+
commands: options.commands,
|
|
101
|
+
emptyMessage: options.emptyMessage,
|
|
102
|
+
footer: options.footer,
|
|
103
|
+
hints: options.hints,
|
|
104
|
+
inset: options.inset,
|
|
105
|
+
items: source,
|
|
106
|
+
placeholder: options.placeholder,
|
|
107
|
+
prompt: options.prompt,
|
|
108
|
+
renderItem: options.renderItem,
|
|
109
|
+
statusRight: options.statusRight,
|
|
110
|
+
};
|
|
111
|
+
const handle = overlayRef.current.open(id, () => multi ? (_jsx(ChooseOverlay, { ...shared, multi: true, onSubmit: (result) => {
|
|
112
|
+
if (settled) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const values = result.items.flatMap((row) => {
|
|
113
116
|
const value = rowToValue.get(row);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
117
|
+
return value === undefined ? [] : [value];
|
|
118
|
+
});
|
|
119
|
+
settle(values);
|
|
120
|
+
handle.close("close");
|
|
121
|
+
}, onCancel: () => {
|
|
122
|
+
handle.close("escape");
|
|
123
|
+
} })) : (_jsx(ChooseOverlay, { ...shared, onSelect: (row) => {
|
|
124
|
+
if (settled) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const value = rowToValue.get(row);
|
|
128
|
+
settle(value ?? null);
|
|
129
|
+
handle.close("close");
|
|
130
|
+
}, 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
|
+
settle(null);
|
|
138
|
+
},
|
|
139
|
+
ownCommands: true,
|
|
140
|
+
role: "modal",
|
|
141
|
+
surfaceMode: "insert",
|
|
126
142
|
});
|
|
143
|
+
openHandlesRef.current.set(id, handle);
|
|
144
|
+
const result = await promise;
|
|
145
|
+
return result;
|
|
127
146
|
};
|
|
147
|
+
// Deferred(lint-sweep): replace the conditional generic API boundary with schema-safe overload implementation typing.
|
|
148
|
+
// oxlint-disable-next-line typescript/no-unsafe-type-assertion -- implementation preserves the public overloaded handle contract
|
|
128
149
|
handleRef.current = { open: open };
|
|
129
150
|
}
|
|
130
151
|
return handleRef.current;
|
|
131
|
-
}
|
|
152
|
+
};
|
|
132
153
|
//# 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,
|
|
1
|
+
{"version":3,"file":"use-choose-dialog.js","sourceRoot":"","sources":["../src/use-choose-dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare
|
|
1
|
+
export declare const chooseDialogTypeChecks: () => Promise<void>;
|
|
2
2
|
//# sourceMappingURL=use-choose-dialog.typecheck.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-choose-dialog.typecheck.d.ts","sourceRoot":"","sources":["../src/use-choose-dialog.typecheck.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-choose-dialog.typecheck.d.ts","sourceRoot":"","sources":["../src/use-choose-dialog.typecheck.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,sBAAsB,QAA4C,OAAO,CAAC,IAAI,CAkC1F,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// Never called; exists only to be typechecked.
|
|
2
|
-
export async function chooseDialogTypeChecks() {
|
|
2
|
+
export const chooseDialogTypeChecks = async function chooseDialogTypeChecks() {
|
|
3
3
|
// --- Single select resolves T | null, cast-free ---------------------------
|
|
4
4
|
const single = await modelDialog.open({
|
|
5
5
|
items: [{ id: "a", label: "A" }],
|
|
6
6
|
toItem: (model) => ({ text: model.label }),
|
|
7
7
|
});
|
|
8
8
|
if (single !== null) {
|
|
9
|
-
|
|
9
|
+
expectString(single.id);
|
|
10
10
|
}
|
|
11
11
|
// --- Multi select resolves T[] | null, cast-free ---------------------------
|
|
12
12
|
const multi = await modelDialog.open({
|
|
@@ -15,12 +15,12 @@ export async function chooseDialogTypeChecks() {
|
|
|
15
15
|
toItem: (model) => ({ text: model.label }),
|
|
16
16
|
});
|
|
17
17
|
if (multi !== null) {
|
|
18
|
-
|
|
18
|
+
expectStrings(multi.map((model) => model.id));
|
|
19
19
|
}
|
|
20
20
|
// --- toItem may be omitted only when T is a ChooseItem ---------------------
|
|
21
21
|
const row = await rowDialog.open({ items: [{ text: "one" }] });
|
|
22
22
|
if (row !== null) {
|
|
23
|
-
|
|
23
|
+
expectString(row.text);
|
|
24
24
|
}
|
|
25
25
|
// @ts-expect-error toItem is required when T is not a ChooseItem
|
|
26
26
|
await modelDialog.open({ items: [{ id: "a", label: "A" }] });
|
|
@@ -28,5 +28,5 @@ export async function chooseDialogTypeChecks() {
|
|
|
28
28
|
await modelDialog.open({ items: [{ id: "a", label: "A" }], toItem: (model) => model });
|
|
29
29
|
// @ts-expect-error items must be T, not ChooseItem
|
|
30
30
|
await modelDialog.open({ items: [{ text: "raw" }], toItem: (model) => ({ text: model.label }) });
|
|
31
|
-
}
|
|
31
|
+
};
|
|
32
32
|
//# sourceMappingURL=use-choose-dialog.typecheck.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-choose-dialog.typecheck.js","sourceRoot":"","sources":["../src/use-choose-dialog.typecheck.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-choose-dialog.typecheck.js","sourceRoot":"","sources":["../src/use-choose-dialog.typecheck.ts"],"names":[],"mappings":"AAwBA,+CAA+C;AAC/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,UAAU,sBAAsB;IACzE,6EAA6E;IAC7E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC;QACpC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAChC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;KAC3C,CAAC,CAAC;IACH,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,8EAA8E;IAC9E,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC;QACnC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAChC,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;KAC3C,CAAC,CAAC;IACH,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,8EAA8E;IAC9E,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/D,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,iEAAiE;IACjE,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAE7D,mDAAmD;IACnD,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IAEvF,mDAAmD;IACnD,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AACnG,CAAC,CAAC"}
|
package/dist/use-choose.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { InputRenderable, KeyEvent } from "@opentui/core";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import type { ActionDefinition, Mode } from "@tooee/commands";
|
|
3
|
+
import type { FuzzyMatch } from "./fuzzy.js";
|
|
4
4
|
import type { ChooseItem, ChooseResult, ChooseSource } from "./types.js";
|
|
5
5
|
declare module "@tooee/commands" {
|
|
6
6
|
interface CommandContext {
|
|
@@ -28,20 +28,20 @@ export interface UseChooseOptions {
|
|
|
28
28
|
suspended?: boolean;
|
|
29
29
|
}
|
|
30
30
|
export interface ChooseController {
|
|
31
|
-
getFilter()
|
|
32
|
-
setFilter(query: string)
|
|
33
|
-
clearFilter()
|
|
34
|
-
moveUp()
|
|
35
|
-
moveDown()
|
|
36
|
-
setActiveIndex(index: number)
|
|
37
|
-
getActiveItem()
|
|
38
|
-
getSelectedItems()
|
|
39
|
-
toggleActive()
|
|
40
|
-
submit()
|
|
41
|
-
cancel()
|
|
42
|
-
reload()
|
|
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
43
|
readonly mode: Mode;
|
|
44
|
-
setMode(mode: Mode)
|
|
44
|
+
setMode: (mode: Mode) => void;
|
|
45
45
|
}
|
|
46
46
|
export interface ChooseState {
|
|
47
47
|
items: ChooseItem[];
|
|
@@ -76,5 +76,5 @@ export interface UseChooseResult {
|
|
|
76
76
|
* Shared headless chooser: source lifecycle, fuzzy matches, selection,
|
|
77
77
|
* command context, controller, and all built-in keyboard commands.
|
|
78
78
|
*/
|
|
79
|
-
export declare
|
|
79
|
+
export declare const useChoose: (options: UseChooseOptions) => UseChooseResult;
|
|
80
80
|
//# sourceMappingURL=use-choose.d.ts.map
|
package/dist/use-choose.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-choose.d.ts","sourceRoot":"","sources":["../src/use-choose.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"use-choose.d.ts","sourceRoot":"","sources":["../src/use-choose.ts"],"names":[],"mappings":"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"}
|