@zaly/tui 0.1.0 → 0.1.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.
- package/dist/{actions-DEIKF2ts.mjs → actions-AY6avfEV.mjs} +2 -3
- package/dist/{actions-DEIKF2ts.mjs.map → actions-AY6avfEV.mjs.map} +1 -1
- package/dist/{actions--ODlgCQ5.d.mts → actions-B0yyZ-Ww.d.mts} +4 -6
- package/dist/actions-B0yyZ-Ww.d.mts.map +1 -0
- package/dist/{ansi-CMv71xVr.mjs → ansi-CxgRPLA2.mjs} +3 -4
- package/dist/{ansi-CMv71xVr.mjs.map → ansi-CxgRPLA2.mjs.map} +1 -1
- package/dist/ansi.d.mts +1 -3
- package/dist/ansi.d.mts.map +1 -1
- package/dist/ansi.mjs +1 -1
- package/dist/{autocomplete-CD30kSe_.d.mts → autocomplete-wgceuhLr.d.mts} +5 -7
- package/dist/autocomplete-wgceuhLr.d.mts.map +1 -0
- package/dist/{box-C_N_7ChP.mjs → box-DToDoXlU.mjs} +8 -10
- package/dist/{box-C_N_7ChP.mjs.map → box-DToDoXlU.mjs.map} +1 -1
- package/dist/{builder-Chwtk0nQ.mjs → builder-BdYlK1Ew.mjs} +5 -6
- package/dist/{builder-Chwtk0nQ.mjs.map → builder-BdYlK1Ew.mjs.map} +1 -1
- package/dist/{callbacks-DLecWn7G.mjs → callbacks-DW8XKYKy.mjs} +8 -12
- package/dist/{callbacks-DLecWn7G.mjs.map → callbacks-DW8XKYKy.mjs.map} +1 -1
- package/dist/{client-D7qz4TZt.mjs → client-BWm6dNZF.mjs} +4 -5
- package/dist/{client-D7qz4TZt.mjs.map → client-BWm6dNZF.mjs.map} +1 -1
- package/dist/client-C69qWhMG.mjs +1 -0
- package/dist/{clipboard-CNPBTX7j.mjs → clipboard-UEoX9sup.mjs} +2 -3
- package/dist/{clipboard-CNPBTX7j.mjs.map → clipboard-UEoX9sup.mjs.map} +1 -1
- package/dist/clipboard.d.mts +0 -2
- package/dist/clipboard.d.mts.map +1 -1
- package/dist/clipboard.mjs +1 -1
- package/dist/{color-DBMQLv4Y.mjs → color-Cr1VoL49.mjs} +2 -3
- package/dist/{color-DBMQLv4Y.mjs.map → color-Cr1VoL49.mjs.map} +1 -1
- package/dist/ctx-CYEzzH-7.mjs +1 -0
- package/dist/{ctx-BaQ2hP5u.mjs → ctx-DBeFcZt6.mjs} +4 -5
- package/dist/{ctx-BaQ2hP5u.mjs.map → ctx-DBeFcZt6.mjs.map} +1 -1
- package/dist/{divider-BlNNN2OS.mjs → divider-qEj5prKE.mjs} +3 -4
- package/dist/{divider-BlNNN2OS.mjs.map → divider-qEj5prKE.mjs.map} +1 -1
- package/dist/{files-BvThQpOf.mjs → files-C3ZnFpvq.mjs} +3 -4
- package/dist/{files-BvThQpOf.mjs.map → files-C3ZnFpvq.mjs.map} +1 -1
- package/dist/{files-B_5HDBPp.d.mts → files-CdiDnwA_.d.mts} +3 -5
- package/dist/files-CdiDnwA_.d.mts.map +1 -0
- package/dist/{flex-Bguo-fUe.mjs → flex-CYp4etqn.mjs} +3 -4
- package/dist/{flex-Bguo-fUe.mjs.map → flex-CYp4etqn.mjs.map} +1 -1
- package/dist/{github-Cy2hfWJ7.mjs → github-CLveT9mq.mjs} +2 -3
- package/dist/{github-Cy2hfWJ7.mjs.map → github-CLveT9mq.mjs.map} +1 -1
- package/dist/{github-CyRwUQ3y.d.mts → github-DC0XemKa.d.mts} +3 -5
- package/dist/github-DC0XemKa.d.mts.map +1 -0
- package/dist/{image-BLls2F4t.d.mts → image-DdRDv7q6.d.mts} +2 -4
- package/dist/image-DdRDv7q6.d.mts.map +1 -0
- package/dist/{image-Cqtj3yRA.mjs → image-M--Bw4bs.mjs} +6 -7
- package/dist/{image-Cqtj3yRA.mjs.map → image-M--Bw4bs.mjs.map} +1 -1
- package/dist/image.d.mts +1 -3
- package/dist/image.d.mts.map +1 -1
- package/dist/image.mjs +1 -1
- package/dist/index.d.mts +3 -15
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +11 -14
- package/dist/index.mjs.map +1 -1
- package/dist/{input-ET2YEMcl.mjs → input-BkE4EpBw.mjs} +6 -7
- package/dist/{input-ET2YEMcl.mjs.map → input-BkE4EpBw.mjs.map} +1 -1
- package/dist/{input-NuD8TH8N.d.mts → input-C3kfYoEJ.d.mts} +3 -5
- package/dist/input-C3kfYoEJ.d.mts.map +1 -0
- package/dist/{inspect-Cxzs-W0g.mjs → inspect-Cli1beu8.mjs} +3 -4
- package/dist/{inspect-Cxzs-W0g.mjs.map → inspect-Cli1beu8.mjs.map} +1 -1
- package/dist/{inspect-B1uXxdKC.d.mts → inspect-hSl3U2BD.d.mts} +2 -6
- package/dist/inspect-hSl3U2BD.d.mts.map +1 -0
- package/dist/kitty-0sJ8axU_.mjs +1 -0
- package/dist/{kitty-JbCJC0iQ.mjs → kitty-BH_eK6lz.mjs} +2 -3
- package/dist/{kitty-JbCJC0iQ.mjs.map → kitty-BH_eK6lz.mjs.map} +1 -1
- package/dist/{log-B4djzy2m.mjs → log-96b1_J6G.mjs} +6 -7
- package/dist/{log-B4djzy2m.mjs.map → log-96b1_J6G.mjs.map} +1 -1
- package/dist/{logger-CvJCITzP.mjs → logger-DwfXp8LF.mjs} +5 -6
- package/dist/{logger-CvJCITzP.mjs.map → logger-DwfXp8LF.mjs.map} +1 -1
- package/dist/{markdown-D3ZtRn6C.mjs → markdown-CgRZBhIX.mjs} +11 -12
- package/dist/{markdown-D3ZtRn6C.mjs.map → markdown-CgRZBhIX.mjs.map} +1 -1
- package/dist/markdown.d.mts +2 -4
- package/dist/markdown.d.mts.map +1 -1
- package/dist/markdown.mjs +1 -1
- package/dist/math-Dk8hxbmz.mjs +1 -0
- package/dist/{math-Dd7a1irv.mjs → math-VPuwFCid.mjs} +1 -2
- package/dist/{math-Dd7a1irv.mjs.map → math-VPuwFCid.mjs.map} +1 -1
- package/dist/md.bun.d.mts +1 -3
- package/dist/md.bun.d.mts.map +1 -1
- package/dist/md.bun.mjs +2 -3
- package/dist/md.node.d.mts +1 -3
- package/dist/md.node.d.mts.map +1 -1
- package/dist/md.node.mjs +2 -3
- package/dist/{node-BZ7f6HzU.mjs → node-CXNobGaP.mjs} +3 -4
- package/dist/{node-BZ7f6HzU.mjs.map → node-CXNobGaP.mjs.map} +1 -1
- package/dist/{oklch-Bsh5swbC.mjs → oklch-Boh4YHEc.mjs} +3 -4
- package/dist/{oklch-Bsh5swbC.mjs.map → oklch-Boh4YHEc.mjs.map} +1 -1
- package/dist/{overlay-LvOjG7kn.mjs → overlay-CevDWgSF.mjs} +3 -4
- package/dist/{overlay-LvOjG7kn.mjs.map → overlay-CevDWgSF.mjs.map} +1 -1
- package/dist/{picker-f6xjgACX.mjs → picker-D9WrE3zF.mjs} +11 -16
- package/dist/{picker-f6xjgACX.mjs.map → picker-D9WrE3zF.mjs.map} +1 -1
- package/dist/{picker-B-OxKKnD.d.mts → picker-DsB6--GN.d.mts} +6 -8
- package/dist/picker-DsB6--GN.d.mts.map +1 -0
- package/dist/{queries-BUkBxkuM.mjs → queries-BIniKnLL.mjs} +3 -5
- package/dist/{queries-BUkBxkuM.mjs.map → queries-BIniKnLL.mjs.map} +1 -1
- package/dist/{queries-C75-wG1B.d.mts → queries-Dmd3IjSd.d.mts} +3 -51
- package/dist/queries-Dmd3IjSd.d.mts.map +1 -0
- package/dist/{reactive-f7NpAi69.mjs → reactive-DkP75TPk.mjs} +2 -3
- package/dist/{reactive-f7NpAi69.mjs.map → reactive-DkP75TPk.mjs.map} +1 -1
- package/dist/{registry-DUWpSPoo.mjs → registry-CQU0VwpM.mjs} +9 -14
- package/dist/{registry-DUWpSPoo.mjs.map → registry-CQU0VwpM.mjs.map} +1 -1
- package/dist/{render-B7LfNM5K.mjs → render-Bp2N2i6J.mjs} +4 -5
- package/dist/{render-B7LfNM5K.mjs.map → render-Bp2N2i6J.mjs.map} +1 -1
- package/dist/{renderer-BLsd-wrG.mjs → renderer-B9sAMA10.mjs} +25 -38
- package/dist/{renderer-BLsd-wrG.mjs.map → renderer-B9sAMA10.mjs.map} +1 -1
- package/dist/{renderer-aAtkFgll.mjs → renderer-BYl2pbdx.mjs} +3 -4
- package/dist/{renderer-aAtkFgll.mjs.map → renderer-BYl2pbdx.mjs.map} +1 -1
- package/dist/renderer-Ctz0hv5o.mjs +1 -0
- package/dist/{search-FvGnswRl.d.mts → search-DsHzamic.d.mts} +1 -9
- package/dist/search-DsHzamic.d.mts.map +1 -0
- package/dist/{select-BKE5LzdN.d.mts → select-BZCFXdjp.d.mts} +3 -5
- package/dist/select-BZCFXdjp.d.mts.map +1 -0
- package/dist/{select-m7NE6Rwa.mjs → select-CUmAFKJh.mjs} +5 -6
- package/dist/{select-m7NE6Rwa.mjs.map → select-CUmAFKJh.mjs.map} +1 -1
- package/dist/services/logger.d.mts +1 -1
- package/dist/services/logger.mjs +1 -1
- package/dist/services/notifier.d.mts +1 -3
- package/dist/services/notifier.d.mts.map +1 -1
- package/dist/services/notifier.mjs +3 -4
- package/dist/services/picker.d.mts +5 -7
- package/dist/services/picker.d.mts.map +1 -1
- package/dist/services/picker.mjs +8 -9
- package/dist/services/prompt.d.mts +4 -6
- package/dist/services/prompt.d.mts.map +1 -1
- package/dist/services/prompt.mjs +7 -8
- package/dist/shiki/server.mjs +6 -8
- package/dist/shiki/server.mjs.map +1 -1
- package/dist/{shiki-CJauRusM.mjs → shiki-BAf9PdIc.mjs} +4 -5
- package/dist/{shiki-CJauRusM.mjs.map → shiki-BAf9PdIc.mjs.map} +1 -1
- package/dist/{shiki-B4U0s8jT.mjs → shiki-DUUAIE6f.mjs} +4 -7
- package/dist/{shiki-B4U0s8jT.mjs.map → shiki-DUUAIE6f.mjs.map} +1 -1
- package/dist/{show-DR2x1YFc.mjs → show-D5XNXgZf.mjs} +4 -5
- package/dist/{show-DR2x1YFc.mjs.map → show-D5XNXgZf.mjs.map} +1 -1
- package/dist/{size-D8JogYLy.mjs → size-BHRJuRk9.mjs} +2 -3
- package/dist/{size-D8JogYLy.mjs.map → size-BHRJuRk9.mjs.map} +1 -1
- package/dist/{style-DslRHzI4.mjs → style-Cw_EuszU.mjs} +5 -6
- package/dist/{style-DslRHzI4.mjs.map → style-Cw_EuszU.mjs.map} +1 -1
- package/dist/style.d.mts +2 -4
- package/dist/style.d.mts.map +1 -1
- package/dist/style.mjs +3 -3
- package/dist/{text-BoJdKXLU.mjs → text-4arC3odI.mjs} +3 -4
- package/dist/{text-BoJdKXLU.mjs.map → text-4arC3odI.mjs.map} +1 -1
- package/dist/{text-DPrhma4x.mjs → text-BArwVVkg.mjs} +5 -6
- package/dist/{text-DPrhma4x.mjs.map → text-BArwVVkg.mjs.map} +1 -1
- package/dist/{text-CmxbA8lk.d.mts → text-DdkJXgoC.d.mts} +3 -5
- package/dist/text-DdkJXgoC.d.mts.map +1 -0
- package/dist/text.d.mts +1 -1
- package/dist/text.mjs +1 -1
- package/dist/{theme-C8LkcoaK.mjs → theme-B8hb1lPU.mjs} +3 -4
- package/dist/{theme-C8LkcoaK.mjs.map → theme-B8hb1lPU.mjs.map} +1 -1
- package/dist/{theme-DVX8dvGG.mjs → theme-BeSaXGNY.mjs} +3 -5
- package/dist/{theme-DVX8dvGG.mjs.map → theme-BeSaXGNY.mjs.map} +1 -1
- package/dist/themes.d.mts +1 -7
- package/dist/themes.d.mts.map +1 -1
- package/dist/themes.mjs +1 -1
- package/dist/{tree-CTvSpF9b.d.mts → tree-Berzv8Rz.d.mts} +3 -5
- package/dist/tree-Berzv8Rz.d.mts.map +1 -0
- package/dist/{tree-Bo1afYhe.mjs → tree-D6NvMQx8.mjs} +5 -6
- package/dist/{tree-Bo1afYhe.mjs.map → tree-D6NvMQx8.mjs.map} +1 -1
- package/dist/{types-C9ceMsbJ.d.mts → types-ByMHEdCF.d.mts} +1 -7
- package/dist/types-ByMHEdCF.d.mts.map +1 -0
- package/dist/{types-D3jk1rtk.d.mts → types-CUVUJPz6.d.mts} +1 -3
- package/dist/types-CUVUJPz6.d.mts.map +1 -0
- package/dist/{utils-3M4D_AXZ.mjs → utils-DHXAegVW.mjs} +1 -2
- package/dist/{utils-3M4D_AXZ.mjs.map → utils-DHXAegVW.mjs.map} +1 -1
- package/dist/{widget-BkMwhY2p.mjs → widget-sFveyrZE.mjs} +3 -4
- package/dist/{widget-BkMwhY2p.mjs.map → widget-sFveyrZE.mjs.map} +1 -1
- package/dist/{widget-DlF32PRp.d.mts → widget-sPJaKVU2.d.mts} +2 -4
- package/dist/widget-sPJaKVU2.d.mts.map +1 -0
- package/dist/widgets/autocomplete.d.mts +1 -1
- package/dist/widgets/autocomplete.mjs +5 -6
- package/dist/widgets/box.d.mts +1 -1
- package/dist/widgets/box.mjs +1 -1
- package/dist/widgets/code.d.mts +3 -5
- package/dist/widgets/code.d.mts.map +1 -1
- package/dist/widgets/code.mjs +10 -11
- package/dist/widgets/completions/actions.d.mts +1 -1
- package/dist/widgets/completions/actions.mjs +1 -1
- package/dist/widgets/completions/files.d.mts +1 -1
- package/dist/widgets/completions/files.mjs +1 -1
- package/dist/widgets/completions/github.d.mts +1 -1
- package/dist/widgets/completions/github.mjs +1 -1
- package/dist/widgets/completions/index.d.mts +3 -3
- package/dist/widgets/completions/index.mjs +3 -3
- package/dist/widgets/diff.d.mts +2 -4
- package/dist/widgets/diff.d.mts.map +1 -1
- package/dist/widgets/diff.mjs +7 -8
- package/dist/widgets/divider.d.mts +2 -4
- package/dist/widgets/divider.d.mts.map +1 -1
- package/dist/widgets/divider.mjs +1 -1
- package/dist/widgets/image.d.mts +1 -1
- package/dist/widgets/image.mjs +5 -6
- package/dist/widgets/input.d.mts +1 -1
- package/dist/widgets/input.mjs +1 -1
- package/dist/widgets/log.d.mts +1 -1
- package/dist/widgets/log.mjs +1 -1
- package/dist/widgets/markdown.d.mts +5 -7
- package/dist/widgets/markdown.d.mts.map +1 -1
- package/dist/widgets/markdown.mjs +1 -1
- package/dist/widgets/overlay.d.mts +1 -1
- package/dist/widgets/overlay.mjs +1 -1
- package/dist/widgets/picker.d.mts +1 -1
- package/dist/widgets/picker.mjs +1 -1
- package/dist/widgets/progress.d.mts +2 -4
- package/dist/widgets/progress.d.mts.map +1 -1
- package/dist/widgets/progress.mjs +4 -5
- package/dist/widgets/select.d.mts +1 -1
- package/dist/widgets/select.mjs +1 -1
- package/dist/widgets/show.d.mts +1 -3
- package/dist/widgets/show.d.mts.map +1 -1
- package/dist/widgets/show.mjs +1 -1
- package/dist/widgets/spinner.d.mts +2 -4
- package/dist/widgets/spinner.d.mts.map +1 -1
- package/dist/widgets/spinner.mjs +3 -4
- package/dist/widgets/text.d.mts +1 -1
- package/dist/widgets/text.mjs +1 -1
- package/dist/widgets/tree.d.mts +1 -1
- package/dist/widgets/tree.mjs +1 -1
- package/dist/widgets/widget.d.mts +1 -1
- package/dist/widgets/widget.mjs +1 -1
- package/dist/{worker-T6SdPzUH.mjs → worker-CtEowucz.mjs} +2 -3
- package/dist/{worker-T6SdPzUH.mjs.map → worker-CtEowucz.mjs.map} +1 -1
- package/dist/worker-Mqi380Et.mjs +1 -0
- package/package.json +3 -3
- package/dist/actions--ODlgCQ5.d.mts.map +0 -1
- package/dist/autocomplete-CD30kSe_.d.mts.map +0 -1
- package/dist/client-CNGt-dOt.mjs +0 -1
- package/dist/ctx-CndlTp1T.mjs +0 -1
- package/dist/files-B_5HDBPp.d.mts.map +0 -1
- package/dist/github-CyRwUQ3y.d.mts.map +0 -1
- package/dist/image-BLls2F4t.d.mts.map +0 -1
- package/dist/input-NuD8TH8N.d.mts.map +0 -1
- package/dist/inspect-B1uXxdKC.d.mts.map +0 -1
- package/dist/kitty-DKQYsQfH.mjs +0 -1
- package/dist/math-CU0wmC9N.mjs +0 -1
- package/dist/picker-B-OxKKnD.d.mts.map +0 -1
- package/dist/queries-C75-wG1B.d.mts.map +0 -1
- package/dist/renderer-YHbR7JZ4.mjs +0 -1
- package/dist/search-FvGnswRl.d.mts.map +0 -1
- package/dist/select-BKE5LzdN.d.mts.map +0 -1
- package/dist/text-CmxbA8lk.d.mts.map +0 -1
- package/dist/tree-CTvSpF9b.d.mts.map +0 -1
- package/dist/types-C9ceMsbJ.d.mts.map +0 -1
- package/dist/types-D3jk1rtk.d.mts.map +0 -1
- package/dist/widget-DlF32PRp.d.mts.map +0 -1
- package/dist/worker-C01jK2Ip.mjs +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker-f6xjgACX.mjs","names":[],"sources":["../src/search/score.ts","../src/search/matcher.ts","../src/search/sort.ts","../src/search/search.ts","../src/widgets/picker.ts"],"sourcesContent":["export type ScoreOptions = {\n filenameBonus?: boolean\n historyBonus?: boolean\n}\n\nconst SCORE_MATCH = 16\nconst SCORE_GAP_START = -3\nconst SCORE_GAP_EXTENSION = -1\n\nconst BONUS_BOUNDARY = SCORE_MATCH / 2\nconst BONUS_NONWORD = SCORE_MATCH / 2\nconst BONUS_CAMEL_123 = BONUS_BOUNDARY - 1\nconst BONUS_CONSECUTIVE = -(SCORE_GAP_START + SCORE_GAP_EXTENSION)\nconst BONUS_FIRST_CHAR_MULTIPLIER = 2\nconst BONUS_NO_PATH_SEP = BONUS_BOUNDARY - 2\n\nconst CHAR_WHITE = 0\nconst CHAR_NONWORD = 1\nconst CHAR_DELIMITER = 2\nconst CHAR_LOWER = 3\nconst CHAR_UPPER = 4\nconst CHAR_LETTER = 5\nconst CHAR_NUMBER = 6\n\nconst PATH_SEPS = new Set([\"/\", \"\\\\\"])\n\nconst CHAR_CLASS = Array.from({ length: 256 }, (_, b) => {\n const ch = String.fromCharCode(b)\n if (/\\s/.test(ch)) return CHAR_WHITE\n if (String.raw`/\\,:;|`.includes(ch)) return CHAR_DELIMITER\n if (b >= 48 && b <= 57) return CHAR_NUMBER\n if (b >= 65 && b <= 90) return CHAR_UPPER\n if (b >= 97 && b <= 122) return CHAR_LOWER\n return CHAR_NONWORD\n})\n\nfunction charClass(str: string, pos: number): number {\n const code = str.charCodeAt(pos)\n return code <= 255 ? (CHAR_CLASS[code] ?? CHAR_NONWORD) : CHAR_LETTER\n}\n\nexport class Score {\n readonly #opts: ScoreOptions\n readonly #bonusMatrix: number[][] = []\n readonly #bonusBoundaryWhite: number\n readonly #bonusBoundaryDelimiter: number\n\n #consecutive = 0\n #firstBonus = 0\n #prev: number | undefined\n #prevClass = CHAR_WHITE\n #score = 0\n #str = \"\"\n\n isFile = false\n\n constructor(opts: ScoreOptions = {}) {\n this.#opts = opts\n this.#bonusBoundaryWhite = opts.historyBonus ? BONUS_BOUNDARY : BONUS_BOUNDARY + 2\n this.#bonusBoundaryDelimiter = opts.historyBonus ? BONUS_BOUNDARY : BONUS_BOUNDARY + 1\n for (let prev = 0; prev <= 6; prev++) {\n this.#bonusMatrix[prev] = []\n for (let curr = 0; curr <= 6; curr++) {\n this.#bonusMatrix[prev][curr] = this.#computeBonus(prev, curr)\n }\n }\n }\n\n get score(): number {\n return this.#score\n }\n\n isLeftBoundary(str: string, pos: number): boolean {\n return pos === 0 || charClass(str, pos - 1) < CHAR_LOWER\n }\n\n isRightBoundary(str: string, pos: number): boolean {\n return pos === str.length - 1 || charClass(str, pos + 1) < CHAR_LOWER\n }\n\n init(str: string, first: number): void {\n this.#str = str\n this.#score = 0\n this.#consecutive = 0\n this.#prevClass = first > 0 ? charClass(str, first - 1) : CHAR_WHITE\n this.#prev = undefined\n this.#firstBonus = 0\n\n if (this.isFile && this.#opts.filenameBonus && !hasPathSepAfter(str, first)) {\n this.#score += BONUS_NO_PATH_SEP\n }\n this.update(first)\n }\n\n update(pos: number): void {\n const cls = charClass(this.#str, pos)\n const gap = this.#prev === undefined ? 0 : pos - this.#prev - 1\n let bonus = 0\n\n if (gap > 0) {\n this.#prevClass = charClass(this.#str, pos - 1)\n bonus = this.#bonusMatrix[this.#prevClass]?.[cls] ?? 0\n this.#score += SCORE_GAP_START + (gap - 1) * SCORE_GAP_EXTENSION\n this.#consecutive = 0\n this.#firstBonus = 0\n } else {\n bonus = this.#bonusMatrix[this.#prevClass]?.[cls] ?? 0\n if (this.#consecutive === 0) {\n this.#firstBonus = bonus\n } else {\n if (bonus >= BONUS_BOUNDARY && bonus > this.#firstBonus) this.#firstBonus = bonus\n bonus = Math.max(bonus, this.#firstBonus, BONUS_CONSECUTIVE)\n }\n this.#consecutive++\n }\n\n if (this.#prev === undefined) bonus *= BONUS_FIRST_CHAR_MULTIPLIER\n this.#score += SCORE_MATCH + bonus\n this.#prevClass = cls\n this.#prev = pos\n }\n\n get(str: string, from: number, to: number): number {\n this.init(str, from)\n for (let i = from + 1; i <= to; i++) this.update(i)\n return this.#score\n }\n\n #computeBonus(prev: number, curr: number): number {\n if (curr > CHAR_NONWORD) {\n if (prev === CHAR_WHITE) return this.#bonusBoundaryWhite\n if (prev === CHAR_DELIMITER) return this.#bonusBoundaryDelimiter\n if (prev === CHAR_NONWORD) return BONUS_BOUNDARY\n }\n if (\n (prev === CHAR_LOWER && curr === CHAR_UPPER) ||\n (prev !== CHAR_NUMBER && curr === CHAR_NUMBER)\n ) {\n return BONUS_CAMEL_123\n }\n if (curr === CHAR_NONWORD || curr === CHAR_DELIMITER) return BONUS_NONWORD\n if (curr === CHAR_WHITE) return BONUS_BOUNDARY + 2\n return 0\n }\n}\n\nfunction hasPathSepAfter(str: string, first: number): boolean {\n for (let i = first + 1; i < str.length; i++) if (PATH_SEPS.has(str[i])) return true\n return false\n}\n","import type { ScoreOptions } from \"./score.ts\"\n\nimport { Score } from \"./score.ts\"\n\nexport type SearchItem = {\n idx?: number\n score?: number\n file?: string\n text: string\n}\n\nexport type ScoredItem<T extends SearchItem = SearchItem> = T & {\n score: number\n topk?: boolean\n}\n\nexport type MatcherOptions = ScoreOptions & {\n fuzzy?: boolean\n ignorecase?: boolean\n regex?: boolean\n smartcase?: boolean\n}\n\ntype Mod = {\n chars: string[]\n entropy: number\n exactPrefix?: boolean\n exactSuffix?: boolean\n field?: string\n fuzzy?: boolean\n ignorecase?: boolean\n inverse?: boolean\n pattern: string\n re?: RegExp\n regex?: boolean\n word?: boolean\n}\n\ntype Match = {\n from: number\n score: number\n search: string\n str: string\n to: number\n}\n\nexport class Matcher<T extends SearchItem = SearchItem> {\n readonly opts: Required<Pick<MatcherOptions, \"fuzzy\" | \"ignorecase\" | \"smartcase\">> &\n MatcherOptions\n readonly score: Score\n mods: Mod[][] = []\n one: Mod | undefined\n pattern = \"\"\n tick = 0\n\n constructor(opts: MatcherOptions = {}) {\n this.opts = {\n fuzzy: true,\n ignorecase: true,\n smartcase: true,\n ...opts,\n }\n this.score = new Score(opts)\n }\n\n empty(): boolean {\n return this.mods.length === 0\n }\n\n init(pattern: string): boolean {\n pattern = pattern.trim()\n if (pattern === this.pattern) return false\n\n this.pattern = pattern\n this.tick++\n this.mods = []\n this.one = undefined\n if (pattern === \"\") return true\n\n if (this.opts.regex) {\n this.mods = [[this.#prepare(pattern)]]\n } else {\n let isOr = false\n for (const part of pattern.split(/ +/)) {\n if (part === \"|\") {\n isOr = true\n continue\n }\n const mod = this.#prepare(part)\n if (mod.pattern === \"\") continue\n if (isOr && this.mods.length > 0) this.mods.at(-1)?.push(mod)\n else this.mods.push([mod])\n isOr = false\n }\n }\n\n this.mods = this.mods.map((ors) => ors.toSorted((a, b) => a.entropy - b.entropy))\n this.mods = this.mods.toSorted((a, b) => (b[0]?.entropy ?? 0) - (a[0]?.entropy ?? 0))\n if (this.mods.length === 1 && this.mods[0]?.length === 1) this.one = this.mods[0][0]\n return true\n }\n\n match(input: T | string): number {\n if (this.empty()) return 1000\n const item = typeof input === \"string\" ? { text: input } : input\n if (this.one) return this.#match(item, this.one)?.score ?? 0\n\n let score = 0\n for (const any of this.mods) {\n let match: Match | undefined\n for (const mod of any) {\n match = this.#match(item, mod)\n if (match) break\n }\n if (!match) return 0\n score += match.score\n }\n return score\n }\n\n update(item: T): ScoredItem<T> {\n const score = this.match(item)\n const it = item as ScoredItem<T>\n it.score = score\n return it\n }\n\n positions(input: T | string): number[] {\n if (this.empty()) return []\n const item = typeof input === \"string\" ? { text: input } : input\n const ret: number[] = []\n const all = this.mods.flat()\n for (const mod of all) {\n const match = this.#match(item, mod)\n if (!match) continue\n if (mod.fuzzy) ret.push(...this.#fuzzyPositions(match.search, mod.chars, match.from))\n else for (let i = match.from; i <= match.to; i++) ret.push(i)\n }\n return [...new Set(ret)].toSorted((a, b) => a - b)\n }\n\n fields(): string[] {\n const ret = new Set<string>()\n for (const mod of this.mods.flat()) ret.add(mod.field ?? \"text\")\n return [...ret]\n }\n\n #prepare(pattern: string): Mod {\n const mod: Mod = { chars: [], entropy: 0, pattern }\n\n if (this.opts.regex) {\n mod.regex = true\n const isLower = mod.pattern.toLowerCase() === mod.pattern\n mod.ignorecase = this.opts.smartcase ? isLower : this.opts.ignorecase\n try {\n mod.re = new RegExp(mod.pattern, mod.ignorecase ? \"i\" : undefined)\n } catch {\n mod.re = undefined\n }\n } else {\n const file = parseFilePattern(pattern)\n if (file) {\n mod.field = \"file\"\n mod.pattern = `${file}$`\n }\n\n const field = mod.pattern.match(/^([\\w_][\\w_]+):(.*)$/)\n if (field) {\n mod.field = field[1]\n mod.pattern = field[2]\n }\n\n mod.ignorecase = this.opts.ignorecase\n const isLower = mod.pattern.toLowerCase() === mod.pattern\n if (this.opts.smartcase) mod.ignorecase = isLower\n mod.fuzzy = this.opts.fuzzy\n if (!mod.fuzzy) mod.entropy += 10\n\n if (mod.pattern.startsWith(\"!\")) {\n mod.fuzzy = false\n mod.inverse = true\n mod.pattern = mod.pattern.slice(1)\n mod.entropy -= 1\n }\n if (mod.pattern.startsWith(\"'\")) {\n mod.fuzzy = false\n mod.pattern = mod.pattern.slice(1)\n mod.entropy += 10\n if (mod.pattern.endsWith(\"'\")) {\n mod.word = true\n mod.pattern = mod.pattern.slice(0, -1)\n mod.entropy += 10\n }\n } else if (mod.pattern.startsWith(\"^\")) {\n mod.fuzzy = false\n mod.exactPrefix = true\n mod.pattern = mod.pattern.slice(1)\n mod.entropy += 20\n }\n if (mod.pattern.endsWith(\"$\")) {\n mod.fuzzy = false\n mod.exactSuffix = true\n mod.pattern = mod.pattern.slice(0, -1)\n mod.entropy += 20\n }\n\n const rareChars = (mod.pattern.match(/[^\\w\\s]/g) ?? []).length\n mod.entropy += Math.min(mod.pattern.length, 20) + rareChars * 2\n if (!mod.ignorecase && !isLower) mod.entropy *= 2\n if (mod.ignorecase) mod.pattern = mod.pattern.toLowerCase()\n }\n\n // oxlint-disable-next-line typescript/no-misused-spread\n mod.chars = [...mod.pattern]\n return mod\n }\n\n #match(item: SearchItem, mod: Mod): Match | undefined {\n this.score.isFile = itemField(item, \"file\") !== undefined\n let str = item.text\n\n if (mod.field) {\n const value = itemField(item, mod.field)\n if (value === undefined)\n return mod.inverse ? { from: 0, score: 1000, search: str, str, to: 0 } : undefined\n str = value\n }\n\n const original = str\n if (mod.ignorecase) str = str.toLowerCase()\n\n if (mod.regex) return this.#regex(original, mod)\n if (mod.fuzzy) return this.#fuzzy(str, original, mod.chars)\n\n let from = -1\n let to = -1\n if (mod.exactPrefix) {\n if (str.startsWith(mod.pattern)) {\n from = 0\n to = mod.pattern.length - 1\n }\n } else if (mod.exactSuffix) {\n if (str.endsWith(mod.pattern)) {\n from = str.length - mod.pattern.length\n to = str.length - 1\n }\n } else {\n from = str.indexOf(mod.pattern)\n to = from + mod.pattern.length - 1\n while (mod.word && from >= 0) {\n if (this.score.isLeftBoundary(str, from) && this.score.isRightBoundary(str, to)) break\n from = str.indexOf(mod.pattern, to + 1)\n to = from + mod.pattern.length - 1\n }\n }\n\n if (mod.inverse)\n return from === -1 ? { from: 0, score: 1000, search: str, str: original, to: 0 } : undefined\n if (from >= 0)\n return { from, score: this.score.get(original, from, to), search: str, str: original, to }\n return undefined\n }\n\n #regex(str: string, mod: Mod): Match | undefined {\n const match = mod.re?.exec(str)\n if (!match?.[0]) return undefined\n const from = match.index\n const to = from + match[0].length - 1\n return { from, score: this.score.get(str, from, to), search: str, str, to }\n }\n\n #fuzzyFind(\n str: string,\n original: string,\n pattern: string[],\n init = 0\n ): Pick<Match, \"from\" | \"to\" | \"score\"> | undefined {\n const from = str.indexOf(pattern[0] ?? \"\", init)\n if (from === -1) return undefined\n this.score.init(original, from)\n let last = from\n for (let i = 1; i < pattern.length; i++) {\n last = str.indexOf(pattern[i], last + 1)\n // Bail before reading the score: a partial accumulation never\n // escapes this method, so `#fuzzy` only ever sees a score that\n // corresponds to a fully-matched window.\n if (last === -1) return undefined\n this.score.update(last)\n }\n return { from, score: this.score.score, to: last }\n }\n\n #fuzzy(str: string, original: string, pattern: string[]): Match | undefined {\n // Anchor on every occurrence of the first char and keep the\n // highest-scoring window. The score rides in the return value rather\n // than being read off the shared `this.score`, so there's no\n // \"is the accumulator aligned with `best` right now?\" invariant.\n let best = this.#fuzzyFind(str, original, pattern)\n if (!best) return undefined\n for (\n let next = this.#fuzzyFind(str, original, pattern, best.from + 1);\n next;\n next = this.#fuzzyFind(str, original, pattern, next.from + 1)\n ) {\n if (next.score > best.score) best = next\n }\n return { from: best.from, score: best.score, search: str, str: original, to: best.to }\n }\n\n #fuzzyPositions(str: string, pattern: string[], from: number): number[] {\n const ret = [from]\n let last = from\n for (let i = 1; i < pattern.length; i++) {\n last = str.indexOf(pattern[i], last + 1)\n if (last === -1) break\n ret.push(last)\n }\n return ret\n }\n}\n\nfunction itemField(item: SearchItem, field: string): string | undefined {\n const value = item[field as keyof SearchItem] as unknown\n if (value === undefined || value === null) return undefined\n if (typeof value === \"string\") return value\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\")\n return String(value)\n if (Array.isArray(value)) return value.join(\" \")\n return\n}\n\nfunction parseFilePattern(pattern: string): string | undefined {\n return (\n pattern.match(/^(.*[/\\\\].*):\\d*:?:?\\d*$/)?.[1] ??\n pattern.match(/^(.+\\.[a-z_]+):\\d*:?:?\\d*$/)?.[1]\n )\n}\n","import type { ScoredItem, SearchItem } from \"./matcher.ts\"\n\ntype SortKey<T extends SearchItem> = Extract<keyof (ScoredItem<T> & SearchItem), string>\n\nexport type SortField<T extends SearchItem = SearchItem> =\n | SortKey<T>\n | `#${SortKey<T>}`\n | `${SortKey<T>}:desc`\n\nexport type ParsedField<T extends SearchItem = SearchItem> = {\n desc?: boolean\n len?: boolean\n name: SortKey<T>\n}\n\nexport type Sorter<T extends SearchItem = SearchItem> = (\n a: ScoredItem<T>,\n b: ScoredItem<T>\n) => number\n\nfunction parse<T extends SearchItem>(field: SortField<T>): ParsedField<T> {\n const len = field.startsWith(\"#\")\n const desc = field.endsWith(\":desc\")\n const name = field.replace(/^#/, \"\").replace(/:desc$/, \"\") as SortKey<T>\n return { desc, len, name }\n}\n\nexport function sorter<T extends SearchItem>(\n fields: readonly SortField<T>[] = [\"score:desc\", \"#text\", \"idx\"]\n): Sorter<T> {\n const parsed: ParsedField<T>[] = fields.map(parse)\n return (a, b) => {\n for (const field of parsed) {\n let av: unknown = a[field.name]\n let bv: unknown = b[field.name]\n if (av === undefined || bv === undefined) continue\n if (field.len) {\n av = typeof av === \"string\" || Array.isArray(av) ? av.length : 0\n bv = typeof bv === \"string\" || Array.isArray(bv) ? bv.length : 0\n }\n if (av === bv) continue\n if (typeof av === \"boolean\" && typeof bv === \"boolean\") {\n av = av ? 0 : 1\n bv = bv ? 0 : 1\n }\n return compare(av, bv) * (field.desc ? -1 : 1)\n }\n return 0\n }\n}\n\nfunction compare(a: unknown, b: unknown): number {\n if (typeof a === \"number\" && typeof b === \"number\") return a - b\n if (typeof a === \"string\" && typeof b === \"string\") return a.localeCompare(b)\n return String(a).localeCompare(String(b))\n}\n","// oxlint-disable no-await-in-loop\nimport type { MaybePromise } from \"@zaly/shared\"\nimport type { MatcherOptions, ScoredItem, SearchItem } from \"./matcher.ts\"\nimport type { Sorter, SortField } from \"./sort.ts\"\n\nimport { TopK } from \"@zaly/shared/minheap\"\nimport { Matcher } from \"./matcher.ts\"\nimport { sorter } from \"./sort.ts\"\n\nexport type SearchOptions<T extends SearchItem = SearchItem> = MatcherOptions & {\n sort?: boolean | readonly SortField<T>[]\n filter?: boolean\n sortEmpty?: boolean\n frecency?: () => (file: string) => number\n limit?: number\n throttle?: number\n}\n\nexport type SearchFn<T extends SearchItem = SearchItem> = (\n query: string,\n match: Match<T>\n) => MaybePromise<ScoredItem<T>[]>\n\nexport type SearchItems<T extends SearchItem = SearchItem> = readonly T[] | SearchFn<T>\n\n/** Match function handed to `complete`. Returns `0` for no match,\n * positive integer otherwise — so both `match(s) > 0` and the\n * idiomatic `.filter(match(s))` work (0 is falsy). The magnitude is a\n * score the source can use to rank its own candidates when it cares\n * about order. */\nexport type Match<T extends SearchItem = SearchItem> = (s: string | T) => number\n\nconst BONUS_FRECENCY = 8\nconst SEARCH_LIMIT = 1000\nconst aborted = Symbol(\"search.aborted\")\n\nexport class Searcher<T extends SearchItem = SearchItem> {\n #opts: SearchOptions<T>\n #sorter?: Sorter<T>\n #matcher: Matcher<T>\n #ac?: AbortController\n\n constructor(opts: SearchOptions<T>) {\n this.#opts = opts\n const sortOpts = opts.sort === true ? undefined : opts.sort\n this.#sorter = sortOpts === false ? undefined : sorter(sortOpts)\n this.#matcher = new Matcher(opts)\n }\n\n /** Create a match function bound to the current pattern. If the\n * matcher has been updated since the search started, match will\n * return `0` to indicate no match, to prevent stale results */\n createMatch(opts: { signal: AbortSignal }): Match<T> {\n const m = this.#matcher\n return (s: string | T) => (opts.signal.aborted ? 0 : m.match(s))\n }\n\n async search(\n items: SearchItems<T>,\n query = \"\",\n opts: { progress?: (results: ScoredItem<T>[]) => MaybePromise } = {}\n ): Promise<ScoredItem<T>[]> {\n try {\n return await this.#search(items, query, opts)\n } catch (error) {\n if (error === aborted) return []\n throw error\n }\n }\n\n get limit(): number {\n return this.#opts.limit ?? (this.#sorter ? SEARCH_LIMIT : Infinity)\n }\n\n async #search(\n items: SearchItems<T>,\n query = \"\",\n opts: { progress?: (results: ScoredItem<T>[]) => MaybePromise } = {}\n ): Promise<ScoredItem<T>[]> {\n this.#ac?.abort(aborted)\n // oxlint-disable-next-line no-multi-assign\n const ac = (this.#ac = new AbortController())\n\n const m = this.#matcher\n m.init(query)\n const f = this.#opts.frecency?.()\n const s = this.#sorter\n const limit = this.limit\n const ret: ScoredItem<T>[] = []\n let match = (item: T) => this.#matcher.update(item)\n const topk =\n s && (this.#opts.sortEmpty || !m.empty())\n ? new TopK<ScoredItem<T>>(limit, (a, b) => -s(a, b))\n : undefined\n\n if (typeof items === \"function\") {\n match = (item: T) => item as ScoredItem<T>\n items = await items(query, this.createMatch({ signal: ac.signal }))\n ac.signal.throwIfAborted()\n }\n\n if (items.length === 0) return []\n\n const results = () => topk?.sorted() ?? ret\n\n // Process items in three phases, so that the results in the UI stabilize faster:\n // - previous topk results (topk)\n // - scored items (score)\n // - unscored items (rest)\n const todo: [T[], T[], T[]] = [[], [], []]\n let idx = 0\n if (!topk) todo[0] = items as T[]\n else {\n for (const item of items) {\n item.idx = idx++\n const it = item as ScoredItem<T>\n if (it.topk) todo[0].push(item)\n else if (it.score) todo[1].push(item)\n else todo[2].push(item)\n }\n }\n\n const doFilter = !m.empty() && (this.#opts.filter ?? true)\n\n let lastYield = performance.now()\n let dirty = false\n let count = 0\n\n loop: for (const todos of todo) {\n for (const item of todos) {\n ac.signal.throwIfAborted()\n if (count++ % 256 === 0) {\n const now = performance.now()\n if (now - lastYield >= (this.#opts.throttle ?? 16)) {\n lastYield = now\n await new Promise((r) => setImmediate(r))\n if (opts.progress && dirty) {\n dirty = false\n await opts.progress(results())\n }\n }\n }\n const si = match(item)\n if (si.file && si.score && f) {\n const frecency = f(si.file)\n si.score += (1 - 1 / (1 + frecency)) * BONUS_FRECENCY\n }\n if (doFilter && si.score === 0) continue\n if (topk) {\n si.topk = false\n const ta = topk.add(si)\n if (ta.added) {\n si.topk = true\n dirty = true\n if (ta.evicted) ta.evicted.topk = false\n }\n } else {\n ret.push(si)\n dirty = true\n if (ret.length >= limit) break loop\n }\n }\n }\n\n return results()\n }\n\n positions(s: string | T): number[] {\n return this.#matcher.positions(s)\n }\n}\n","import type { Reactive, Ref } from \"../core/reactive.ts\"\nimport type { State } from \"../core/state.ts\"\nimport type { NodeActionMap } from \"../input/actions.ts\"\nimport type { ScoredItem, SearchItem } from \"../search/matcher.ts\"\nimport type { SearchItems, SearchOptions } from \"../search/search.ts\"\nimport type { Option, Select, SelectState } from \"./select.ts\"\nimport type { TreeItem, TreeProps } from \"./tree.ts\"\n\nimport { sliceAnsi, stripAnsi } from \"@zaly/shared/ansi\"\nimport { createProgressive, effect, memo, untrack, unwrap } from \"../core/reactive.ts\"\nimport { Searcher } from \"../search/search.ts\"\nimport { Input } from \"./input.ts\"\nimport { select } from \"./select.ts\"\nimport { tree } from \"./tree.ts\"\nimport { widget } from \"./widget.ts\"\n\nexport type PickerItem = Option & SearchItem\nexport type PickerActions = keyof ReturnType<typeof picker>[\"actions\"]\n\ntype PickerBaseProps<T extends PickerItem = PickerItem> = SearchOptions<T> & {\n /** The `Input` to watch. Pass the node directly, or a `Ref<Input>`\n * populated by `node.ref(ref)` elsewhere in the tree — the latter\n * enables fully inline composition where the input doesn't need a\n * local binding. The ref is dereferenced on mount, so wiring is\n * type-safe and ordering-flexible (autocomplete can be constructed\n * before the Input is). */\n input?: Input | Ref<Input>\n pattern?: Reactive<string>\n reverse?: boolean\n actions?: NodeActionMap<Select<T>>\n}\n\nexport type PickerSelectProps<T extends PickerItem = PickerItem> = PickerBaseProps<T> &\n Omit<SelectState<T>, \"items\"> & {\n items: Reactive<SearchItems<T>>\n tree?: never\n }\n\nexport type PickerTreeProps<T extends TreeItem = TreeItem> = PickerBaseProps<T> &\n TreeProps<T> & {\n items?: never\n }\n\nfunction isTree<T extends Option = Option>(\n props: PickerTreeProps<T> | PickerSelectProps<T>\n): props is PickerTreeProps<T> {\n return \"tree\" in props\n}\n\nexport const picker = widget(\n <T extends PickerItem = PickerItem>(props: State<PickerSelectProps<T> | PickerTreeProps<T>>) => {\n const pattern = memo(() => {\n if (props.pattern !== undefined) return unwrap(props.pattern)\n const inp = props.input instanceof Input ? props.input : props.input?.()\n return inp?.state.value ?? \"\"\n })\n\n let node: Select<T>\n let items: Reactive<SearchItems<T>>\n if (isTree(props)) {\n props = { filter: false, fuzzy: false, sort: false, ...props }\n const t = tree(props)\n node = t\n items = t.items\n } else {\n node = select({ ...props, items: [] })\n items = props.items\n }\n const searcher = new Searcher<T>(props)\n\n node.extendRenderer((prev) => (item, ctx) => {\n let row = prev(item, ctx)\n if (!item.score) return row\n const stripped = stripAnsi(row)\n const positions = searcher.positions(stripped).toSorted((a, b) => b - a)\n while (positions.length > 0) {\n const from = positions.pop()!\n let to = from\n while (positions.length && positions.at(-1) === to + 1) to = positions.pop()!\n row =\n sliceAnsi(row, 0, from) +\n ctx.style.accent(stripped.slice(from, to + 1)) +\n sliceAnsi(row, to + 1)\n }\n return row\n })\n\n const results = createProgressive<ScoredItem<T>[]>(\n async ({ set }) =>\n await searcher.search(unwrap(items), pattern(), { progress: (r) => set(r) }),\n {\n initialValue: [],\n }\n )\n node.state.items = results\n if (props.input) node.bind(props.input)\n\n const matches = () =>\n unwrap(node.state.items)\n .map((item, i) => [item, i] as const)\n .filter(([item]) => item.score)\n .map(([, i]) => i)\n\n effect(() => {\n const m = matches()\n node.state.more = m.length >= searcher.limit\n if (m.length === 0 || pattern() === \"\") return\n untrack(() => {\n // When filtering, go to the first (best) match.\n // When not filtering, go to the first match that is at or after the current active index, or the first match if none are after.\n if (props.filter === false) {\n const active = node.active\n node.active = m.find((i) => i >= active) ?? m[0]\n } else node.active = 0\n })\n })\n\n return node.withActions({\n ...props.actions,\n \"picker.next\": () => {\n const active = node.active\n const m = matches()\n if (m.length === 0) return node.action(\"select.next\")\n node.active = node.state.reverse\n ? (m.toReversed().find((i) => i < active) ?? m.at(-1)!)\n : (m.find((i) => i > active) ?? m[0])\n },\n \"picker.prev\": () => {\n const active = node.active\n const m = matches()\n if (m.length === 0) return node.action(\"select.prev\")\n node.active = node.state.reverse\n ? (m.find((i) => i > active) ?? m[0])\n : (m.toReversed().find((i) => i < active) ?? m.at(-1)!)\n },\n })\n }\n)\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"picker-D9WrE3zF.mjs","names":[],"sources":["../src/search/score.ts","../src/search/matcher.ts","../src/search/sort.ts","../src/search/search.ts","../src/widgets/picker.ts"],"sourcesContent":["export type ScoreOptions = {\n filenameBonus?: boolean\n historyBonus?: boolean\n}\n\nconst SCORE_MATCH = 16\nconst SCORE_GAP_START = -3\nconst SCORE_GAP_EXTENSION = -1\n\nconst BONUS_BOUNDARY = SCORE_MATCH / 2\nconst BONUS_NONWORD = SCORE_MATCH / 2\nconst BONUS_CAMEL_123 = BONUS_BOUNDARY - 1\nconst BONUS_CONSECUTIVE = -(SCORE_GAP_START + SCORE_GAP_EXTENSION)\nconst BONUS_FIRST_CHAR_MULTIPLIER = 2\nconst BONUS_NO_PATH_SEP = BONUS_BOUNDARY - 2\n\nconst CHAR_WHITE = 0\nconst CHAR_NONWORD = 1\nconst CHAR_DELIMITER = 2\nconst CHAR_LOWER = 3\nconst CHAR_UPPER = 4\nconst CHAR_LETTER = 5\nconst CHAR_NUMBER = 6\n\nconst PATH_SEPS = new Set([\"/\", \"\\\\\"])\n\nconst CHAR_CLASS = Array.from({ length: 256 }, (_, b) => {\n const ch = String.fromCharCode(b)\n if (/\\s/.test(ch)) return CHAR_WHITE\n if (String.raw`/\\,:;|`.includes(ch)) return CHAR_DELIMITER\n if (b >= 48 && b <= 57) return CHAR_NUMBER\n if (b >= 65 && b <= 90) return CHAR_UPPER\n if (b >= 97 && b <= 122) return CHAR_LOWER\n return CHAR_NONWORD\n})\n\nfunction charClass(str: string, pos: number): number {\n const code = str.charCodeAt(pos)\n return code <= 255 ? (CHAR_CLASS[code] ?? CHAR_NONWORD) : CHAR_LETTER\n}\n\nexport class Score {\n readonly #opts: ScoreOptions\n readonly #bonusMatrix: number[][] = []\n readonly #bonusBoundaryWhite: number\n readonly #bonusBoundaryDelimiter: number\n\n #consecutive = 0\n #firstBonus = 0\n #prev: number | undefined\n #prevClass = CHAR_WHITE\n #score = 0\n #str = \"\"\n\n isFile = false\n\n constructor(opts: ScoreOptions = {}) {\n this.#opts = opts\n this.#bonusBoundaryWhite = opts.historyBonus ? BONUS_BOUNDARY : BONUS_BOUNDARY + 2\n this.#bonusBoundaryDelimiter = opts.historyBonus ? BONUS_BOUNDARY : BONUS_BOUNDARY + 1\n for (let prev = 0; prev <= 6; prev++) {\n this.#bonusMatrix[prev] = []\n for (let curr = 0; curr <= 6; curr++) {\n this.#bonusMatrix[prev][curr] = this.#computeBonus(prev, curr)\n }\n }\n }\n\n get score(): number {\n return this.#score\n }\n\n isLeftBoundary(str: string, pos: number): boolean {\n return pos === 0 || charClass(str, pos - 1) < CHAR_LOWER\n }\n\n isRightBoundary(str: string, pos: number): boolean {\n return pos === str.length - 1 || charClass(str, pos + 1) < CHAR_LOWER\n }\n\n init(str: string, first: number): void {\n this.#str = str\n this.#score = 0\n this.#consecutive = 0\n this.#prevClass = first > 0 ? charClass(str, first - 1) : CHAR_WHITE\n this.#prev = undefined\n this.#firstBonus = 0\n\n if (this.isFile && this.#opts.filenameBonus && !hasPathSepAfter(str, first)) {\n this.#score += BONUS_NO_PATH_SEP\n }\n this.update(first)\n }\n\n update(pos: number): void {\n const cls = charClass(this.#str, pos)\n const gap = this.#prev === undefined ? 0 : pos - this.#prev - 1\n let bonus = 0\n\n if (gap > 0) {\n this.#prevClass = charClass(this.#str, pos - 1)\n bonus = this.#bonusMatrix[this.#prevClass]?.[cls] ?? 0\n this.#score += SCORE_GAP_START + (gap - 1) * SCORE_GAP_EXTENSION\n this.#consecutive = 0\n this.#firstBonus = 0\n } else {\n bonus = this.#bonusMatrix[this.#prevClass]?.[cls] ?? 0\n if (this.#consecutive === 0) {\n this.#firstBonus = bonus\n } else {\n if (bonus >= BONUS_BOUNDARY && bonus > this.#firstBonus) this.#firstBonus = bonus\n bonus = Math.max(bonus, this.#firstBonus, BONUS_CONSECUTIVE)\n }\n this.#consecutive++\n }\n\n if (this.#prev === undefined) bonus *= BONUS_FIRST_CHAR_MULTIPLIER\n this.#score += SCORE_MATCH + bonus\n this.#prevClass = cls\n this.#prev = pos\n }\n\n get(str: string, from: number, to: number): number {\n this.init(str, from)\n for (let i = from + 1; i <= to; i++) this.update(i)\n return this.#score\n }\n\n #computeBonus(prev: number, curr: number): number {\n if (curr > CHAR_NONWORD) {\n if (prev === CHAR_WHITE) return this.#bonusBoundaryWhite\n if (prev === CHAR_DELIMITER) return this.#bonusBoundaryDelimiter\n if (prev === CHAR_NONWORD) return BONUS_BOUNDARY\n }\n if (\n (prev === CHAR_LOWER && curr === CHAR_UPPER) ||\n (prev !== CHAR_NUMBER && curr === CHAR_NUMBER)\n ) {\n return BONUS_CAMEL_123\n }\n if (curr === CHAR_NONWORD || curr === CHAR_DELIMITER) return BONUS_NONWORD\n if (curr === CHAR_WHITE) return BONUS_BOUNDARY + 2\n return 0\n }\n}\n\nfunction hasPathSepAfter(str: string, first: number): boolean {\n for (let i = first + 1; i < str.length; i++) if (PATH_SEPS.has(str[i])) return true\n return false\n}\n","import type { ScoreOptions } from \"./score.ts\"\n\nimport { Score } from \"./score.ts\"\n\nexport type SearchItem = {\n idx?: number\n score?: number\n file?: string\n text: string\n}\n\nexport type ScoredItem<T extends SearchItem = SearchItem> = T & {\n score: number\n topk?: boolean\n}\n\nexport type MatcherOptions = ScoreOptions & {\n fuzzy?: boolean\n ignorecase?: boolean\n regex?: boolean\n smartcase?: boolean\n}\n\ntype Mod = {\n chars: string[]\n entropy: number\n exactPrefix?: boolean\n exactSuffix?: boolean\n field?: string\n fuzzy?: boolean\n ignorecase?: boolean\n inverse?: boolean\n pattern: string\n re?: RegExp\n regex?: boolean\n word?: boolean\n}\n\ntype Match = {\n from: number\n score: number\n search: string\n str: string\n to: number\n}\n\nexport class Matcher<T extends SearchItem = SearchItem> {\n readonly opts: Required<Pick<MatcherOptions, \"fuzzy\" | \"ignorecase\" | \"smartcase\">> &\n MatcherOptions\n readonly score: Score\n mods: Mod[][] = []\n one: Mod | undefined\n pattern = \"\"\n tick = 0\n\n constructor(opts: MatcherOptions = {}) {\n this.opts = {\n fuzzy: true,\n ignorecase: true,\n smartcase: true,\n ...opts,\n }\n this.score = new Score(opts)\n }\n\n empty(): boolean {\n return this.mods.length === 0\n }\n\n init(pattern: string): boolean {\n pattern = pattern.trim()\n if (pattern === this.pattern) return false\n\n this.pattern = pattern\n this.tick++\n this.mods = []\n this.one = undefined\n if (pattern === \"\") return true\n\n if (this.opts.regex) {\n this.mods = [[this.#prepare(pattern)]]\n } else {\n let isOr = false\n for (const part of pattern.split(/ +/)) {\n if (part === \"|\") {\n isOr = true\n continue\n }\n const mod = this.#prepare(part)\n if (mod.pattern === \"\") continue\n if (isOr && this.mods.length > 0) this.mods.at(-1)?.push(mod)\n else this.mods.push([mod])\n isOr = false\n }\n }\n\n this.mods = this.mods.map((ors) => ors.toSorted((a, b) => a.entropy - b.entropy))\n this.mods = this.mods.toSorted((a, b) => (b[0]?.entropy ?? 0) - (a[0]?.entropy ?? 0))\n if (this.mods.length === 1 && this.mods[0]?.length === 1) this.one = this.mods[0][0]\n return true\n }\n\n match(input: T | string): number {\n if (this.empty()) return 1000\n const item = typeof input === \"string\" ? { text: input } : input\n if (this.one) return this.#match(item, this.one)?.score ?? 0\n\n let score = 0\n for (const any of this.mods) {\n let match: Match | undefined\n for (const mod of any) {\n match = this.#match(item, mod)\n if (match) break\n }\n if (!match) return 0\n score += match.score\n }\n return score\n }\n\n update(item: T): ScoredItem<T> {\n const score = this.match(item)\n const it = item as ScoredItem<T>\n it.score = score\n return it\n }\n\n positions(input: T | string): number[] {\n if (this.empty()) return []\n const item = typeof input === \"string\" ? { text: input } : input\n const ret: number[] = []\n const all = this.mods.flat()\n for (const mod of all) {\n const match = this.#match(item, mod)\n if (!match) continue\n if (mod.fuzzy) ret.push(...this.#fuzzyPositions(match.search, mod.chars, match.from))\n else for (let i = match.from; i <= match.to; i++) ret.push(i)\n }\n return [...new Set(ret)].toSorted((a, b) => a - b)\n }\n\n fields(): string[] {\n const ret = new Set<string>()\n for (const mod of this.mods.flat()) ret.add(mod.field ?? \"text\")\n return [...ret]\n }\n\n #prepare(pattern: string): Mod {\n const mod: Mod = { chars: [], entropy: 0, pattern }\n\n if (this.opts.regex) {\n mod.regex = true\n const isLower = mod.pattern.toLowerCase() === mod.pattern\n mod.ignorecase = this.opts.smartcase ? isLower : this.opts.ignorecase\n try {\n mod.re = new RegExp(mod.pattern, mod.ignorecase ? \"i\" : undefined)\n } catch {\n mod.re = undefined\n }\n } else {\n const file = parseFilePattern(pattern)\n if (file) {\n mod.field = \"file\"\n mod.pattern = `${file}$`\n }\n\n const field = mod.pattern.match(/^([\\w_][\\w_]+):(.*)$/)\n if (field) {\n mod.field = field[1]\n mod.pattern = field[2]\n }\n\n mod.ignorecase = this.opts.ignorecase\n const isLower = mod.pattern.toLowerCase() === mod.pattern\n if (this.opts.smartcase) mod.ignorecase = isLower\n mod.fuzzy = this.opts.fuzzy\n if (!mod.fuzzy) mod.entropy += 10\n\n if (mod.pattern.startsWith(\"!\")) {\n mod.fuzzy = false\n mod.inverse = true\n mod.pattern = mod.pattern.slice(1)\n mod.entropy -= 1\n }\n if (mod.pattern.startsWith(\"'\")) {\n mod.fuzzy = false\n mod.pattern = mod.pattern.slice(1)\n mod.entropy += 10\n if (mod.pattern.endsWith(\"'\")) {\n mod.word = true\n mod.pattern = mod.pattern.slice(0, -1)\n mod.entropy += 10\n }\n } else if (mod.pattern.startsWith(\"^\")) {\n mod.fuzzy = false\n mod.exactPrefix = true\n mod.pattern = mod.pattern.slice(1)\n mod.entropy += 20\n }\n if (mod.pattern.endsWith(\"$\")) {\n mod.fuzzy = false\n mod.exactSuffix = true\n mod.pattern = mod.pattern.slice(0, -1)\n mod.entropy += 20\n }\n\n const rareChars = (mod.pattern.match(/[^\\w\\s]/g) ?? []).length\n mod.entropy += Math.min(mod.pattern.length, 20) + rareChars * 2\n if (!mod.ignorecase && !isLower) mod.entropy *= 2\n if (mod.ignorecase) mod.pattern = mod.pattern.toLowerCase()\n }\n\n // oxlint-disable-next-line typescript/no-misused-spread\n mod.chars = [...mod.pattern]\n return mod\n }\n\n #match(item: SearchItem, mod: Mod): Match | undefined {\n this.score.isFile = itemField(item, \"file\") !== undefined\n let str = item.text\n\n if (mod.field) {\n const value = itemField(item, mod.field)\n if (value === undefined)\n return mod.inverse ? { from: 0, score: 1000, search: str, str, to: 0 } : undefined\n str = value\n }\n\n const original = str\n if (mod.ignorecase) str = str.toLowerCase()\n\n if (mod.regex) return this.#regex(original, mod)\n if (mod.fuzzy) return this.#fuzzy(str, original, mod.chars)\n\n let from = -1\n let to = -1\n if (mod.exactPrefix) {\n if (str.startsWith(mod.pattern)) {\n from = 0\n to = mod.pattern.length - 1\n }\n } else if (mod.exactSuffix) {\n if (str.endsWith(mod.pattern)) {\n from = str.length - mod.pattern.length\n to = str.length - 1\n }\n } else {\n from = str.indexOf(mod.pattern)\n to = from + mod.pattern.length - 1\n while (mod.word && from >= 0) {\n if (this.score.isLeftBoundary(str, from) && this.score.isRightBoundary(str, to)) break\n from = str.indexOf(mod.pattern, to + 1)\n to = from + mod.pattern.length - 1\n }\n }\n\n if (mod.inverse)\n return from === -1 ? { from: 0, score: 1000, search: str, str: original, to: 0 } : undefined\n if (from >= 0)\n return { from, score: this.score.get(original, from, to), search: str, str: original, to }\n return undefined\n }\n\n #regex(str: string, mod: Mod): Match | undefined {\n const match = mod.re?.exec(str)\n if (!match?.[0]) return undefined\n const from = match.index\n const to = from + match[0].length - 1\n return { from, score: this.score.get(str, from, to), search: str, str, to }\n }\n\n #fuzzyFind(\n str: string,\n original: string,\n pattern: string[],\n init = 0\n ): Pick<Match, \"from\" | \"to\" | \"score\"> | undefined {\n const from = str.indexOf(pattern[0] ?? \"\", init)\n if (from === -1) return undefined\n this.score.init(original, from)\n let last = from\n for (let i = 1; i < pattern.length; i++) {\n last = str.indexOf(pattern[i], last + 1)\n // Bail before reading the score: a partial accumulation never\n // escapes this method, so `#fuzzy` only ever sees a score that\n // corresponds to a fully-matched window.\n if (last === -1) return undefined\n this.score.update(last)\n }\n return { from, score: this.score.score, to: last }\n }\n\n #fuzzy(str: string, original: string, pattern: string[]): Match | undefined {\n // Anchor on every occurrence of the first char and keep the\n // highest-scoring window. The score rides in the return value rather\n // than being read off the shared `this.score`, so there's no\n // \"is the accumulator aligned with `best` right now?\" invariant.\n let best = this.#fuzzyFind(str, original, pattern)\n if (!best) return undefined\n for (\n let next = this.#fuzzyFind(str, original, pattern, best.from + 1);\n next;\n next = this.#fuzzyFind(str, original, pattern, next.from + 1)\n ) {\n if (next.score > best.score) best = next\n }\n return { from: best.from, score: best.score, search: str, str: original, to: best.to }\n }\n\n #fuzzyPositions(str: string, pattern: string[], from: number): number[] {\n const ret = [from]\n let last = from\n for (let i = 1; i < pattern.length; i++) {\n last = str.indexOf(pattern[i], last + 1)\n if (last === -1) break\n ret.push(last)\n }\n return ret\n }\n}\n\nfunction itemField(item: SearchItem, field: string): string | undefined {\n const value = item[field as keyof SearchItem] as unknown\n if (value === undefined || value === null) return undefined\n if (typeof value === \"string\") return value\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\")\n return String(value)\n if (Array.isArray(value)) return value.join(\" \")\n return\n}\n\nfunction parseFilePattern(pattern: string): string | undefined {\n return (\n pattern.match(/^(.*[/\\\\].*):\\d*:?:?\\d*$/)?.[1] ??\n pattern.match(/^(.+\\.[a-z_]+):\\d*:?:?\\d*$/)?.[1]\n )\n}\n","import type { ScoredItem, SearchItem } from \"./matcher.ts\"\n\ntype SortKey<T extends SearchItem> = Extract<keyof (ScoredItem<T> & SearchItem), string>\n\nexport type SortField<T extends SearchItem = SearchItem> =\n | SortKey<T>\n | `#${SortKey<T>}`\n | `${SortKey<T>}:desc`\n\nexport type ParsedField<T extends SearchItem = SearchItem> = {\n desc?: boolean\n len?: boolean\n name: SortKey<T>\n}\n\nexport type Sorter<T extends SearchItem = SearchItem> = (\n a: ScoredItem<T>,\n b: ScoredItem<T>\n) => number\n\nfunction parse<T extends SearchItem>(field: SortField<T>): ParsedField<T> {\n const len = field.startsWith(\"#\")\n const desc = field.endsWith(\":desc\")\n const name = field.replace(/^#/, \"\").replace(/:desc$/, \"\") as SortKey<T>\n return { desc, len, name }\n}\n\nexport function sorter<T extends SearchItem>(\n fields: readonly SortField<T>[] = [\"score:desc\", \"#text\", \"idx\"]\n): Sorter<T> {\n const parsed: ParsedField<T>[] = fields.map(parse)\n return (a, b) => {\n for (const field of parsed) {\n let av: unknown = a[field.name]\n let bv: unknown = b[field.name]\n if (av === undefined || bv === undefined) continue\n if (field.len) {\n av = typeof av === \"string\" || Array.isArray(av) ? av.length : 0\n bv = typeof bv === \"string\" || Array.isArray(bv) ? bv.length : 0\n }\n if (av === bv) continue\n if (typeof av === \"boolean\" && typeof bv === \"boolean\") {\n av = av ? 0 : 1\n bv = bv ? 0 : 1\n }\n return compare(av, bv) * (field.desc ? -1 : 1)\n }\n return 0\n }\n}\n\nfunction compare(a: unknown, b: unknown): number {\n if (typeof a === \"number\" && typeof b === \"number\") return a - b\n if (typeof a === \"string\" && typeof b === \"string\") return a.localeCompare(b)\n return String(a).localeCompare(String(b))\n}\n","// oxlint-disable no-await-in-loop\nimport type { MaybePromise } from \"@zaly/shared\"\nimport type { MatcherOptions, ScoredItem, SearchItem } from \"./matcher.ts\"\nimport type { Sorter, SortField } from \"./sort.ts\"\n\nimport { TopK } from \"@zaly/shared/minheap\"\nimport { Matcher } from \"./matcher.ts\"\nimport { sorter } from \"./sort.ts\"\n\nexport type SearchOptions<T extends SearchItem = SearchItem> = MatcherOptions & {\n sort?: boolean | readonly SortField<T>[]\n filter?: boolean\n sortEmpty?: boolean\n frecency?: () => (file: string) => number\n limit?: number\n throttle?: number\n}\n\nexport type SearchFn<T extends SearchItem = SearchItem> = (\n query: string,\n match: Match<T>\n) => MaybePromise<ScoredItem<T>[]>\n\nexport type SearchItems<T extends SearchItem = SearchItem> = readonly T[] | SearchFn<T>\n\n/** Match function handed to `complete`. Returns `0` for no match,\n * positive integer otherwise — so both `match(s) > 0` and the\n * idiomatic `.filter(match(s))` work (0 is falsy). The magnitude is a\n * score the source can use to rank its own candidates when it cares\n * about order. */\nexport type Match<T extends SearchItem = SearchItem> = (s: string | T) => number\n\nconst BONUS_FRECENCY = 8\nconst SEARCH_LIMIT = 1000\nconst aborted = Symbol(\"search.aborted\")\n\nexport class Searcher<T extends SearchItem = SearchItem> {\n #opts: SearchOptions<T>\n #sorter?: Sorter<T>\n #matcher: Matcher<T>\n #ac?: AbortController\n\n constructor(opts: SearchOptions<T>) {\n this.#opts = opts\n const sortOpts = opts.sort === true ? undefined : opts.sort\n this.#sorter = sortOpts === false ? undefined : sorter(sortOpts)\n this.#matcher = new Matcher(opts)\n }\n\n /** Create a match function bound to the current pattern. If the\n * matcher has been updated since the search started, match will\n * return `0` to indicate no match, to prevent stale results */\n createMatch(opts: { signal: AbortSignal }): Match<T> {\n const m = this.#matcher\n return (s: string | T) => (opts.signal.aborted ? 0 : m.match(s))\n }\n\n async search(\n items: SearchItems<T>,\n query = \"\",\n opts: { progress?: (results: ScoredItem<T>[]) => MaybePromise } = {}\n ): Promise<ScoredItem<T>[]> {\n try {\n return await this.#search(items, query, opts)\n } catch (error) {\n if (error === aborted) return []\n throw error\n }\n }\n\n get limit(): number {\n return this.#opts.limit ?? (this.#sorter ? SEARCH_LIMIT : Infinity)\n }\n\n async #search(\n items: SearchItems<T>,\n query = \"\",\n opts: { progress?: (results: ScoredItem<T>[]) => MaybePromise } = {}\n ): Promise<ScoredItem<T>[]> {\n this.#ac?.abort(aborted)\n // oxlint-disable-next-line no-multi-assign\n const ac = (this.#ac = new AbortController())\n\n const m = this.#matcher\n m.init(query)\n const f = this.#opts.frecency?.()\n const s = this.#sorter\n const limit = this.limit\n const ret: ScoredItem<T>[] = []\n let match = (item: T) => this.#matcher.update(item)\n const topk =\n s && (this.#opts.sortEmpty || !m.empty())\n ? new TopK<ScoredItem<T>>(limit, (a, b) => -s(a, b))\n : undefined\n\n if (typeof items === \"function\") {\n match = (item: T) => item as ScoredItem<T>\n items = await items(query, this.createMatch({ signal: ac.signal }))\n ac.signal.throwIfAborted()\n }\n\n if (items.length === 0) return []\n\n const results = () => topk?.sorted() ?? ret\n\n // Process items in three phases, so that the results in the UI stabilize faster:\n // - previous topk results (topk)\n // - scored items (score)\n // - unscored items (rest)\n const todo: [T[], T[], T[]] = [[], [], []]\n let idx = 0\n if (!topk) todo[0] = items as T[]\n else {\n for (const item of items) {\n item.idx = idx++\n const it = item as ScoredItem<T>\n if (it.topk) todo[0].push(item)\n else if (it.score) todo[1].push(item)\n else todo[2].push(item)\n }\n }\n\n const doFilter = !m.empty() && (this.#opts.filter ?? true)\n\n let lastYield = performance.now()\n let dirty = false\n let count = 0\n\n loop: for (const todos of todo) {\n for (const item of todos) {\n ac.signal.throwIfAborted()\n if (count++ % 256 === 0) {\n const now = performance.now()\n if (now - lastYield >= (this.#opts.throttle ?? 16)) {\n lastYield = now\n await new Promise((r) => setImmediate(r))\n if (opts.progress && dirty) {\n dirty = false\n await opts.progress(results())\n }\n }\n }\n const si = match(item)\n if (si.file && si.score && f) {\n const frecency = f(si.file)\n si.score += (1 - 1 / (1 + frecency)) * BONUS_FRECENCY\n }\n if (doFilter && si.score === 0) continue\n if (topk) {\n si.topk = false\n const ta = topk.add(si)\n if (ta.added) {\n si.topk = true\n dirty = true\n if (ta.evicted) ta.evicted.topk = false\n }\n } else {\n ret.push(si)\n dirty = true\n if (ret.length >= limit) break loop\n }\n }\n }\n\n return results()\n }\n\n positions(s: string | T): number[] {\n return this.#matcher.positions(s)\n }\n}\n","import type { Reactive, Ref } from \"../core/reactive.ts\"\nimport type { State } from \"../core/state.ts\"\nimport type { NodeActionMap } from \"../input/actions.ts\"\nimport type { ScoredItem, SearchItem } from \"../search/matcher.ts\"\nimport type { SearchItems, SearchOptions } from \"../search/search.ts\"\nimport type { Option, Select, SelectState } from \"./select.ts\"\nimport type { TreeItem, TreeProps } from \"./tree.ts\"\n\nimport { sliceAnsi, stripAnsi } from \"@zaly/shared/ansi\"\nimport { createProgressive, effect, memo, untrack, unwrap } from \"../core/reactive.ts\"\nimport { Searcher } from \"../search/search.ts\"\nimport { Input } from \"./input.ts\"\nimport { select } from \"./select.ts\"\nimport { tree } from \"./tree.ts\"\nimport { widget } from \"./widget.ts\"\n\nexport type PickerItem = Option & SearchItem\nexport type PickerActions = keyof ReturnType<typeof picker>[\"actions\"]\n\ntype PickerBaseProps<T extends PickerItem = PickerItem> = SearchOptions<T> & {\n /** The `Input` to watch. Pass the node directly, or a `Ref<Input>`\n * populated by `node.ref(ref)` elsewhere in the tree — the latter\n * enables fully inline composition where the input doesn't need a\n * local binding. The ref is dereferenced on mount, so wiring is\n * type-safe and ordering-flexible (autocomplete can be constructed\n * before the Input is). */\n input?: Input | Ref<Input>\n pattern?: Reactive<string>\n reverse?: boolean\n actions?: NodeActionMap<Select<T>>\n}\n\nexport type PickerSelectProps<T extends PickerItem = PickerItem> = PickerBaseProps<T> &\n Omit<SelectState<T>, \"items\"> & {\n items: Reactive<SearchItems<T>>\n tree?: never\n }\n\nexport type PickerTreeProps<T extends TreeItem = TreeItem> = PickerBaseProps<T> &\n TreeProps<T> & {\n items?: never\n }\n\nfunction isTree<T extends Option = Option>(\n props: PickerTreeProps<T> | PickerSelectProps<T>\n): props is PickerTreeProps<T> {\n return \"tree\" in props\n}\n\nexport const picker = widget(\n <T extends PickerItem = PickerItem>(props: State<PickerSelectProps<T> | PickerTreeProps<T>>) => {\n const pattern = memo(() => {\n if (props.pattern !== undefined) return unwrap(props.pattern)\n const inp = props.input instanceof Input ? props.input : props.input?.()\n return inp?.state.value ?? \"\"\n })\n\n let node: Select<T>\n let items: Reactive<SearchItems<T>>\n if (isTree(props)) {\n props = { filter: false, fuzzy: false, sort: false, ...props }\n const t = tree(props)\n node = t\n items = t.items\n } else {\n node = select({ ...props, items: [] })\n items = props.items\n }\n const searcher = new Searcher<T>(props)\n\n node.extendRenderer((prev) => (item, ctx) => {\n let row = prev(item, ctx)\n if (!item.score) return row\n const stripped = stripAnsi(row)\n const positions = searcher.positions(stripped).toSorted((a, b) => b - a)\n while (positions.length > 0) {\n const from = positions.pop()!\n let to = from\n while (positions.length && positions.at(-1) === to + 1) to = positions.pop()!\n row =\n sliceAnsi(row, 0, from) +\n ctx.style.accent(stripped.slice(from, to + 1)) +\n sliceAnsi(row, to + 1)\n }\n return row\n })\n\n const results = createProgressive<ScoredItem<T>[]>(\n async ({ set }) =>\n await searcher.search(unwrap(items), pattern(), { progress: (r) => set(r) }),\n {\n initialValue: [],\n }\n )\n node.state.items = results\n if (props.input) node.bind(props.input)\n\n const matches = () =>\n unwrap(node.state.items)\n .map((item, i) => [item, i] as const)\n .filter(([item]) => item.score)\n .map(([, i]) => i)\n\n effect(() => {\n const m = matches()\n node.state.more = m.length >= searcher.limit\n if (m.length === 0 || pattern() === \"\") return\n untrack(() => {\n // When filtering, go to the first (best) match.\n // When not filtering, go to the first match that is at or after the current active index, or the first match if none are after.\n if (props.filter === false) {\n const active = node.active\n node.active = m.find((i) => i >= active) ?? m[0]\n } else node.active = 0\n })\n })\n\n return node.withActions({\n ...props.actions,\n \"picker.next\": () => {\n const active = node.active\n const m = matches()\n if (m.length === 0) return node.action(\"select.next\")\n node.active = node.state.reverse\n ? (m.toReversed().find((i) => i < active) ?? m.at(-1)!)\n : (m.find((i) => i > active) ?? m[0])\n },\n \"picker.prev\": () => {\n const active = node.active\n const m = matches()\n if (m.length === 0) return node.action(\"select.prev\")\n node.active = node.state.reverse\n ? (m.find((i) => i > active) ?? m[0])\n : (m.toReversed().find((i) => i < active) ?? m.at(-1)!)\n },\n })\n }\n)\n"],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { Gt as NodeActionMap, Q as State, at as Ref, it as Reactive } from "./queries-
|
|
2
|
-
import { t as Input } from "./input-
|
|
3
|
-
import { n as SearchOptions, r as SearchItem, t as SearchItems } from "./search-
|
|
4
|
-
import { i as Select, o as SelectState, t as Option } from "./select-
|
|
5
|
-
import { r as TreeProps, t as TreeItem } from "./tree-
|
|
6
|
-
//#region src/widgets/picker.d.ts
|
|
1
|
+
import { Gt as NodeActionMap, Q as State, at as Ref, it as Reactive } from "./queries-Dmd3IjSd.mjs";
|
|
2
|
+
import { t as Input } from "./input-C3kfYoEJ.mjs";
|
|
3
|
+
import { n as SearchOptions, r as SearchItem, t as SearchItems } from "./search-DsHzamic.mjs";
|
|
4
|
+
import { i as Select, o as SelectState, t as Option } from "./select-BZCFXdjp.mjs";
|
|
5
|
+
import { r as TreeProps, t as TreeItem } from "./tree-Berzv8Rz.mjs";
|
|
7
6
|
type PickerItem = Option & SearchItem;
|
|
8
7
|
type PickerActions = keyof ReturnType<typeof picker>["actions"];
|
|
9
8
|
type PickerBaseProps<T extends PickerItem = PickerItem> = SearchOptions<T> & {
|
|
@@ -31,6 +30,5 @@ declare const picker: <T extends PickerItem = PickerItem>(props: State<PickerSel
|
|
|
31
30
|
"picker.prev": () => boolean | undefined;
|
|
32
31
|
};
|
|
33
32
|
};
|
|
34
|
-
//#endregion
|
|
35
33
|
export { picker as a, PickerTreeProps as i, PickerItem as n, PickerSelectProps as r, PickerActions as t };
|
|
36
|
-
//# sourceMappingURL=picker-
|
|
34
|
+
//# sourceMappingURL=picker-DsB6--GN.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"picker-DsB6--GN.d.mts","names":[],"sources":["../src/widgets/picker.ts"],"mappings":";;;;;KAgBY,aAAa,SAAS;KACtB,sBAAsB,kBAAkB;KAE/C,gBAAgB,UAAU,aAAa,cAAc,cAAc;;;;;;;EAOtE,QAAQ,QAAQ,IAAI;EACpB,UAAU;EACV;EACA,UAAU,cAAc,OAAO;;KAGrB,kBAAkB,UAAU,aAAa,cAAc,gBAAgB,KACjF,KAAK,YAAY;EACf,OAAO,SAAS,YAAY;EAC5B;;KAGQ,gBAAgB,UAAU,WAAW,YAAY,gBAAgB,KAC3E,UAAU;EACR;;cASS,SACV,UAAU,aAAU,YAAA,OAAsB,MAAM,kBAAkB,KAAK,gBAAgB,QAAG,OAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/input/keys.ts
|
|
2
2
|
const MOD_NAMES = /* @__PURE__ */ new Set([
|
|
3
3
|
"ctrl",
|
|
4
4
|
"alt",
|
|
@@ -126,8 +126,7 @@ function keyMatches(ev, pattern) {
|
|
|
126
126
|
const e = normalizeKey(ev);
|
|
127
127
|
return e.name === p.name && e.ctrl === p.ctrl && e.alt === p.alt && e.shift === p.shift && e.meta === p.meta;
|
|
128
128
|
}
|
|
129
|
-
|
|
130
|
-
//#region src/input/queries.ts
|
|
129
|
+
// src/input/queries.ts
|
|
131
130
|
var TerminalQueries = class {
|
|
132
131
|
#router;
|
|
133
132
|
#terminal;
|
|
@@ -257,7 +256,6 @@ function parseTerminalColor(value) {
|
|
|
257
256
|
function parseAttrs(params) {
|
|
258
257
|
return params.slice(1).split(";").map((n) => Number.parseInt(n, 10)).filter(Number.isFinite);
|
|
259
258
|
}
|
|
260
|
-
//#endregion
|
|
261
259
|
export { canonical as a, KeyPatternError as i, parseAttrs as n, isKeyPattern as o, parseTerminalColor as r, keyMatches as s, TerminalQueries as t };
|
|
262
260
|
|
|
263
|
-
//# sourceMappingURL=queries-
|
|
261
|
+
//# sourceMappingURL=queries-BIniKnLL.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries-BUkBxkuM.mjs","names":[],"sources":["../src/input/keys.ts","../src/input/queries.ts"],"sourcesContent":["/**\n * Keyboard event shape + pattern-based matcher.\n *\n * `KeyEvent.name` is a canonical name:\n * - Single characters for printable keys: `\"a\"`, `\"A\"`, `\" \"`, `\"!\"`. The\n * `name` reflects the raw character the decoder produced — so `Shift+A`\n * arrives as `{ name: \"A\", shift: true }` (terminals already fold\n * shift into the uppercase byte for letters).\n * - Named constants for non-printing keys: `\"enter\"`, `\"tab\"`, `\"esc\"`,\n * `\"backspace\"`, `\"delete\"`, `\"space\"`, arrows `\"up\"/\"down\"/\"left\"/\n * \"right\"`, navigation `\"home\"/\"end\"/\"pageup\"/\"pagedown\"/\"insert\"`,\n * function keys `\"f1\"` .. `\"f12\"`.\n *\n * Patterns for `keyMatches` are dash-separated modifier prefixes plus the\n * name: `\"a\"`, `\"ctrl-c\"`, `\"shift-tab\"`, `\"ctrl-shift-x\"`. Unknown\n * prefixes are treated as literal characters in the name, so\n * `\"something-foo\"` is interpreted as the name `\"something-foo\"` rather\n * than a missing-modifier error.\n *\n * Modifier prefixes (order-independent):\n * - `ctrl-`\n * - `alt-`\n * - `shift-`\n * - `meta-` (a.k.a. super / cmd)\n */\n\nexport interface KeyEvent {\n /** Canonical key name — raw character or one of the named constants above. */\n name: string\n /**\n * The literal text the keystroke would insert, when that makes sense.\n * For printable chars this is the char itself; for Enter, Tab, etc. it's\n * undefined. Widgets use this to decide whether to insert content vs.\n * treat the key as a command.\n */\n text?: string\n ctrl: boolean\n alt: boolean\n shift: boolean\n meta: boolean\n}\n\n/** Canonical modifier names used in `KeyPattern`. */\nexport type KeyModifier = \"ctrl\" | \"alt\" | \"shift\" | \"meta\"\n\n/**\n * Named keys the decoder emits for non-printable keystrokes. Bindings\n * reference these directly (`\"enter\"`, `\"f5\"`, `\"pageup\"`, …).\n */\nexport type SpecialKeyName = (typeof specialKeys)[number]\n\ndeclare const KeyPatternBrand: unique symbol\n\n/** A validated, canonical key binding string. */\nexport type KeyPattern = string & { readonly [KeyPatternBrand]: true }\n\nconst MOD_NAMES = new Set<string>([\"ctrl\", \"alt\", \"shift\", \"meta\"])\nconst specialKeys = [\n \"enter\",\n \"tab\",\n \"backspace\",\n \"delete\",\n \"space\",\n \"esc\",\n \"up\",\n \"down\",\n \"left\",\n \"right\",\n \"home\",\n \"end\",\n \"pageup\",\n \"pagedown\",\n \"insert\",\n \"f1\",\n \"f2\",\n \"f3\",\n \"f4\",\n \"f5\",\n \"f6\",\n \"f7\",\n \"f8\",\n \"f9\",\n \"f10\",\n \"f11\",\n \"f12\",\n] as const\nconst SPECIAL_KEY_NAMES = new Set<string>(specialKeys)\n\ninterface ParsedPattern {\n name: string\n ctrl: boolean\n alt: boolean\n shift: boolean\n meta: boolean\n}\n\nexport class KeyPatternError extends Error {\n constructor(pattern: string, reason: string) {\n super(`invalid key pattern ${JSON.stringify(pattern)}: ${reason}`)\n this.name = \"KeyPatternError\"\n }\n}\n\nfunction parsePattern(pattern: string): ParsedPattern {\n const mods = { alt: false, ctrl: false, meta: false, shift: false }\n let name = pattern\n while (name.length > 0) {\n const dash = name.indexOf(\"-\")\n if (dash <= 0) break\n const mod = name.slice(0, dash)\n if (!MOD_NAMES.has(mod)) throw new KeyPatternError(pattern, `unknown modifier: ${mod}`)\n if (mods[mod as KeyModifier]) throw new KeyPatternError(pattern, `duplicate modifier: ${mod}`)\n mods[mod as KeyModifier] = true\n name = name.slice(dash + 1)\n }\n\n const ret = normalizeKey({ ...mods, name })\n name = ret.name\n if (name === \"\") throw new KeyPatternError(pattern, \"missing key name\")\n if (name.includes(\"-\") && name !== \"-\") throw new KeyPatternError(pattern, \"too many keys\")\n if (!isPrintableKeyName(name)) throw new KeyPatternError(pattern, `unknown key name: ${name}`)\n if (mods.shift && !canUseShiftModifier(name)) {\n throw new KeyPatternError(\n pattern,\n `shift-${name} will not trigger; bind the shifted character instead`\n )\n }\n return ret\n}\n\nfunction normalizeKey(p: ParsedPattern): ParsedPattern {\n if (/^[A-Z]$/.test(p.name)) return { ...p, name: p.name.toLowerCase(), shift: true }\n if (p.name === \" \") return { ...p, name: \"space\" }\n return p\n}\n\nfunction isPrintableKeyName(s: string): boolean {\n // oxlint-disable-next-line typescript/no-misused-spread\n return SPECIAL_KEY_NAMES.has(s) || ([...s].length === 1 && !/[\\p{C}]/u.test(s))\n}\n\nfunction canUseShiftModifier(name: string): boolean {\n return /^[a-zA-Z]$/.test(name) || SPECIAL_KEY_NAMES.has(name)\n}\n\nexport function isKeyPattern(s: string): s is KeyPattern {\n try {\n canonical(s)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Canonical string form of a pattern or event — modifiers in a fixed\n * alphabetical order, then the key name, joined by `-`. Used by the\n * router to build a pattern index whose keys match regardless of how\n * the user spelled the modifier order (`\"ctrl-shift-a\"` and\n * `\"shift-ctrl-a\"` both canonicalize to `\"ctrl-shift-a\"`).\n */\nexport function canonical(patternOrEvent: string | KeyEvent): KeyPattern {\n const p =\n typeof patternOrEvent === \"string\" ? parsePattern(patternOrEvent) : normalizeKey(patternOrEvent)\n const parts: string[] = []\n if (p.alt) parts.push(\"alt\")\n if (p.ctrl) parts.push(\"ctrl\")\n if (p.meta) parts.push(\"meta\")\n if (p.shift) parts.push(\"shift\")\n parts.push(p.name)\n return parts.join(\"-\") as KeyPattern\n}\n\n/**\n * Test whether an event matches a pattern (or any of a list of patterns).\n * Unspecified modifiers in the pattern must be *absent* on the event —\n * matching is strict, not inclusive, so `\"a\"` only matches a bare `a`\n * (no ctrl/alt/etc.).\n */\nexport function keyMatches(ev: KeyEvent, pattern: string | readonly string[]): boolean {\n if (Array.isArray(pattern)) {\n for (const p of pattern) if (keyMatches(ev, p)) return true\n return false\n }\n const p = parsePattern(pattern as string)\n const e = normalizeKey(ev)\n return (\n e.name === p.name &&\n e.ctrl === p.ctrl &&\n e.alt === p.alt &&\n e.shift === p.shift &&\n e.meta === p.meta\n )\n}\n","import type { HexColor } from \"../style/types.ts\"\nimport type { TerminalResponseEvent } from \"./decoder.ts\"\nimport type { InputRouter } from \"./router.ts\"\n\nexport type TerminalQuery<T = TerminalResponseEvent> = TerminalQueryOpts & {\n request: string\n match: (event: TerminalResponseEvent) => T | undefined\n}\n\nexport type TerminalQueryOpts = {\n signal?: AbortSignal\n timeout?: number\n wrap?: (seq: string) => string\n}\n\ntype TerminalQueryWriter = {\n write: (seq: string) => void\n}\n\nexport class TerminalQueries {\n readonly #router: InputRouter\n readonly #terminal: TerminalQueryWriter\n\n constructor(router: InputRouter, terminal: TerminalQueryWriter) {\n this.#router = router\n this.#terminal = terminal\n }\n\n query<T>(query: TerminalQuery<T>): Promise<T | undefined> {\n if (query.signal?.aborted) return Promise.resolve(undefined)\n const timeout = query.timeout ?? 200\n const ac = new AbortController()\n return new Promise((resolve) => {\n const finish = (value?: T) => {\n if (ac.signal.aborted) return\n ac.abort()\n clearTimeout(timer)\n query.signal?.removeEventListener(\"abort\", cancel)\n resolve(value)\n }\n const cancel = () => finish()\n const timer = setTimeout(cancel, timeout)\n timer.unref()\n this.#router.on(\n \"term-response\",\n ({ event }) => {\n const value = query.match(event)\n if (value !== undefined) finish(value)\n },\n { signal: ac.signal }\n )\n query.signal?.addEventListener(\"abort\", cancel, { once: true })\n this.#terminal.write(query.wrap?.(query.request) ?? query.request)\n })\n }\n\n color(index: number | \"fg\" | \"bg\" | \"selectionBg\" | \"selectionFg\", opts: TerminalQueryOpts = {}) {\n if (typeof index === \"number\" && (!Number.isInteger(index) || index < 0 || index > 255)) {\n throw new RangeError(\"Palette index must be an integer between 0 and 255\")\n }\n const dynamic = { bg: 11, fg: 10, selectionBg: 17, selectionFg: 19 }\n const prefix = typeof index === \"number\" ? `4;${index};` : `${dynamic[index]};`\n return this.query<HexColor>({\n ...opts,\n match: (event) => {\n if (event.kind !== \"osc\") return\n if (typeof index === \"number\" && event.payload.startsWith(\"4;\")) {\n const parts = event.payload.slice(2).split(\";\")\n for (let i = 0; i + 1 < parts.length; i += 2) {\n if (parts[i] === String(index)) return parseTerminalColor(parts[i + 1])\n }\n return\n }\n if (event.payload.startsWith(prefix))\n return parseTerminalColor(event.payload.slice(prefix.length))\n },\n request: `\\x1b]${prefix}?\\x1b\\\\`,\n })\n }\n\n colorScheme(opts: TerminalQueryOpts = {}) {\n return this.query<\"dark\" | \"light\">({\n ...opts,\n match: (event) => {\n if (event.kind !== \"csi\" || event.final !== \"n\") return\n if (event.params === \"?997;1\") return \"dark\"\n if (event.params === \"?997;2\") return \"light\"\n },\n request: \"\\x1b[?996n\",\n })\n }\n\n async palette(opts: TerminalQueryOpts = {}): Promise<TerminalPaletteSnapshot> {\n const colorOpts = { ...opts, timeout: opts.timeout ?? 100 }\n const [ansi, fg, bg] = await Promise.all([\n Promise.all(Array.from({ length: 16 }, (_, i) => this.color(i, colorOpts))),\n this.color(\"fg\", colorOpts),\n this.color(\"bg\", colorOpts),\n ])\n return { ansi, bg, fg }\n }\n\n primaryDeviceAttributes(opts: TerminalQueryOpts = {}) {\n return this.query<TerminalResponseEvent & { attrs: number[] }>({\n match: (ev) =>\n ev.kind === \"csi\" && ev.final === \"c\" && ev.params.startsWith(\"?\")\n ? { ...ev, attrs: parseAttrs(ev.params) }\n : undefined,\n request: \"\\x1b[c\",\n ...opts,\n })\n }\n\n secondaryDeviceAttributes(opts: TerminalQueryOpts = {}) {\n return this.query<TerminalResponseEvent & { attrs: number[] }>({\n match: (ev) =>\n ev.kind === \"csi\" && ev.final === \"c\" && ev.params.startsWith(\">\")\n ? { ...ev, attrs: parseAttrs(ev.params) }\n : undefined,\n request: \"\\x1b[>c\",\n ...opts,\n })\n }\n\n xtVersion(opts: TerminalQueryOpts = {}) {\n return this.query<TerminalResponseEvent & { name: string; version?: string }>({\n match: (ev) => {\n if (ev.kind !== \"dcs\" || !ev.payload.startsWith(\">|\")) return\n const payload = ev.payload.slice(2)\n const m = payload.match(/^([^\\s]+)\\(([^\\s]+)\\)$/) ?? payload.match(/^([^\\s]+)\\s+([^\\s]+)$/)\n return { ...ev, name: m?.[1] ?? payload, version: m?.[2] }\n },\n request: \"\\x1b[>q\",\n ...opts,\n })\n }\n}\n\nexport interface TerminalPaletteSnapshot {\n ansi: (HexColor | undefined)[]\n bg?: HexColor\n fg?: HexColor\n selectionBg?: HexColor\n selectionFg?: HexColor\n}\n\n/** OSC replies use X11 rgb components, with one to four hex digits per channel. */\nexport function parseTerminalColor(value: string): HexColor | undefined {\n let parts = /^rgb:([\\da-f]{1,4})\\/([\\da-f]{1,4})\\/([\\da-f]{1,4})$/i.exec(value)?.slice(1)\n if (!parts && /^#(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{9}|[\\da-f]{12})$/i.test(value)) {\n const size = (value.length - 1) / 3\n parts = Array.from({ length: 3 }, (_, i) => value.slice(1 + i * size, 1 + (i + 1) * size))\n }\n if (!parts) return\n return `#${parts\n .map((part) =>\n Math.round((Number.parseInt(part, 16) / (16 ** part.length - 1)) * 255)\n .toString(16)\n .padStart(2, \"0\")\n )\n .join(\"\")}`\n}\n\nexport function parseAttrs(params: string): number[] {\n return params\n .slice(1)\n .split(\";\")\n .map((n) => Number.parseInt(n, 10))\n .filter(Number.isFinite)\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"queries-BIniKnLL.mjs","names":[],"sources":["../src/input/keys.ts","../src/input/queries.ts"],"sourcesContent":["/**\n * Keyboard event shape + pattern-based matcher.\n *\n * `KeyEvent.name` is a canonical name:\n * - Single characters for printable keys: `\"a\"`, `\"A\"`, `\" \"`, `\"!\"`. The\n * `name` reflects the raw character the decoder produced — so `Shift+A`\n * arrives as `{ name: \"A\", shift: true }` (terminals already fold\n * shift into the uppercase byte for letters).\n * - Named constants for non-printing keys: `\"enter\"`, `\"tab\"`, `\"esc\"`,\n * `\"backspace\"`, `\"delete\"`, `\"space\"`, arrows `\"up\"/\"down\"/\"left\"/\n * \"right\"`, navigation `\"home\"/\"end\"/\"pageup\"/\"pagedown\"/\"insert\"`,\n * function keys `\"f1\"` .. `\"f12\"`.\n *\n * Patterns for `keyMatches` are dash-separated modifier prefixes plus the\n * name: `\"a\"`, `\"ctrl-c\"`, `\"shift-tab\"`, `\"ctrl-shift-x\"`. Unknown\n * prefixes are treated as literal characters in the name, so\n * `\"something-foo\"` is interpreted as the name `\"something-foo\"` rather\n * than a missing-modifier error.\n *\n * Modifier prefixes (order-independent):\n * - `ctrl-`\n * - `alt-`\n * - `shift-`\n * - `meta-` (a.k.a. super / cmd)\n */\n\nexport interface KeyEvent {\n /** Canonical key name — raw character or one of the named constants above. */\n name: string\n /**\n * The literal text the keystroke would insert, when that makes sense.\n * For printable chars this is the char itself; for Enter, Tab, etc. it's\n * undefined. Widgets use this to decide whether to insert content vs.\n * treat the key as a command.\n */\n text?: string\n ctrl: boolean\n alt: boolean\n shift: boolean\n meta: boolean\n}\n\n/** Canonical modifier names used in `KeyPattern`. */\nexport type KeyModifier = \"ctrl\" | \"alt\" | \"shift\" | \"meta\"\n\n/**\n * Named keys the decoder emits for non-printable keystrokes. Bindings\n * reference these directly (`\"enter\"`, `\"f5\"`, `\"pageup\"`, …).\n */\nexport type SpecialKeyName = (typeof specialKeys)[number]\n\ndeclare const KeyPatternBrand: unique symbol\n\n/** A validated, canonical key binding string. */\nexport type KeyPattern = string & { readonly [KeyPatternBrand]: true }\n\nconst MOD_NAMES = new Set<string>([\"ctrl\", \"alt\", \"shift\", \"meta\"])\nconst specialKeys = [\n \"enter\",\n \"tab\",\n \"backspace\",\n \"delete\",\n \"space\",\n \"esc\",\n \"up\",\n \"down\",\n \"left\",\n \"right\",\n \"home\",\n \"end\",\n \"pageup\",\n \"pagedown\",\n \"insert\",\n \"f1\",\n \"f2\",\n \"f3\",\n \"f4\",\n \"f5\",\n \"f6\",\n \"f7\",\n \"f8\",\n \"f9\",\n \"f10\",\n \"f11\",\n \"f12\",\n] as const\nconst SPECIAL_KEY_NAMES = new Set<string>(specialKeys)\n\ninterface ParsedPattern {\n name: string\n ctrl: boolean\n alt: boolean\n shift: boolean\n meta: boolean\n}\n\nexport class KeyPatternError extends Error {\n constructor(pattern: string, reason: string) {\n super(`invalid key pattern ${JSON.stringify(pattern)}: ${reason}`)\n this.name = \"KeyPatternError\"\n }\n}\n\nfunction parsePattern(pattern: string): ParsedPattern {\n const mods = { alt: false, ctrl: false, meta: false, shift: false }\n let name = pattern\n while (name.length > 0) {\n const dash = name.indexOf(\"-\")\n if (dash <= 0) break\n const mod = name.slice(0, dash)\n if (!MOD_NAMES.has(mod)) throw new KeyPatternError(pattern, `unknown modifier: ${mod}`)\n if (mods[mod as KeyModifier]) throw new KeyPatternError(pattern, `duplicate modifier: ${mod}`)\n mods[mod as KeyModifier] = true\n name = name.slice(dash + 1)\n }\n\n const ret = normalizeKey({ ...mods, name })\n name = ret.name\n if (name === \"\") throw new KeyPatternError(pattern, \"missing key name\")\n if (name.includes(\"-\") && name !== \"-\") throw new KeyPatternError(pattern, \"too many keys\")\n if (!isPrintableKeyName(name)) throw new KeyPatternError(pattern, `unknown key name: ${name}`)\n if (mods.shift && !canUseShiftModifier(name)) {\n throw new KeyPatternError(\n pattern,\n `shift-${name} will not trigger; bind the shifted character instead`\n )\n }\n return ret\n}\n\nfunction normalizeKey(p: ParsedPattern): ParsedPattern {\n if (/^[A-Z]$/.test(p.name)) return { ...p, name: p.name.toLowerCase(), shift: true }\n if (p.name === \" \") return { ...p, name: \"space\" }\n return p\n}\n\nfunction isPrintableKeyName(s: string): boolean {\n // oxlint-disable-next-line typescript/no-misused-spread\n return SPECIAL_KEY_NAMES.has(s) || ([...s].length === 1 && !/[\\p{C}]/u.test(s))\n}\n\nfunction canUseShiftModifier(name: string): boolean {\n return /^[a-zA-Z]$/.test(name) || SPECIAL_KEY_NAMES.has(name)\n}\n\nexport function isKeyPattern(s: string): s is KeyPattern {\n try {\n canonical(s)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Canonical string form of a pattern or event — modifiers in a fixed\n * alphabetical order, then the key name, joined by `-`. Used by the\n * router to build a pattern index whose keys match regardless of how\n * the user spelled the modifier order (`\"ctrl-shift-a\"` and\n * `\"shift-ctrl-a\"` both canonicalize to `\"ctrl-shift-a\"`).\n */\nexport function canonical(patternOrEvent: string | KeyEvent): KeyPattern {\n const p =\n typeof patternOrEvent === \"string\" ? parsePattern(patternOrEvent) : normalizeKey(patternOrEvent)\n const parts: string[] = []\n if (p.alt) parts.push(\"alt\")\n if (p.ctrl) parts.push(\"ctrl\")\n if (p.meta) parts.push(\"meta\")\n if (p.shift) parts.push(\"shift\")\n parts.push(p.name)\n return parts.join(\"-\") as KeyPattern\n}\n\n/**\n * Test whether an event matches a pattern (or any of a list of patterns).\n * Unspecified modifiers in the pattern must be *absent* on the event —\n * matching is strict, not inclusive, so `\"a\"` only matches a bare `a`\n * (no ctrl/alt/etc.).\n */\nexport function keyMatches(ev: KeyEvent, pattern: string | readonly string[]): boolean {\n if (Array.isArray(pattern)) {\n for (const p of pattern) if (keyMatches(ev, p)) return true\n return false\n }\n const p = parsePattern(pattern as string)\n const e = normalizeKey(ev)\n return (\n e.name === p.name &&\n e.ctrl === p.ctrl &&\n e.alt === p.alt &&\n e.shift === p.shift &&\n e.meta === p.meta\n )\n}\n","import type { HexColor } from \"../style/types.ts\"\nimport type { TerminalResponseEvent } from \"./decoder.ts\"\nimport type { InputRouter } from \"./router.ts\"\n\nexport type TerminalQuery<T = TerminalResponseEvent> = TerminalQueryOpts & {\n request: string\n match: (event: TerminalResponseEvent) => T | undefined\n}\n\nexport type TerminalQueryOpts = {\n signal?: AbortSignal\n timeout?: number\n wrap?: (seq: string) => string\n}\n\ntype TerminalQueryWriter = {\n write: (seq: string) => void\n}\n\nexport class TerminalQueries {\n readonly #router: InputRouter\n readonly #terminal: TerminalQueryWriter\n\n constructor(router: InputRouter, terminal: TerminalQueryWriter) {\n this.#router = router\n this.#terminal = terminal\n }\n\n query<T>(query: TerminalQuery<T>): Promise<T | undefined> {\n if (query.signal?.aborted) return Promise.resolve(undefined)\n const timeout = query.timeout ?? 200\n const ac = new AbortController()\n return new Promise((resolve) => {\n const finish = (value?: T) => {\n if (ac.signal.aborted) return\n ac.abort()\n clearTimeout(timer)\n query.signal?.removeEventListener(\"abort\", cancel)\n resolve(value)\n }\n const cancel = () => finish()\n const timer = setTimeout(cancel, timeout)\n timer.unref()\n this.#router.on(\n \"term-response\",\n ({ event }) => {\n const value = query.match(event)\n if (value !== undefined) finish(value)\n },\n { signal: ac.signal }\n )\n query.signal?.addEventListener(\"abort\", cancel, { once: true })\n this.#terminal.write(query.wrap?.(query.request) ?? query.request)\n })\n }\n\n color(index: number | \"fg\" | \"bg\" | \"selectionBg\" | \"selectionFg\", opts: TerminalQueryOpts = {}) {\n if (typeof index === \"number\" && (!Number.isInteger(index) || index < 0 || index > 255)) {\n throw new RangeError(\"Palette index must be an integer between 0 and 255\")\n }\n const dynamic = { bg: 11, fg: 10, selectionBg: 17, selectionFg: 19 }\n const prefix = typeof index === \"number\" ? `4;${index};` : `${dynamic[index]};`\n return this.query<HexColor>({\n ...opts,\n match: (event) => {\n if (event.kind !== \"osc\") return\n if (typeof index === \"number\" && event.payload.startsWith(\"4;\")) {\n const parts = event.payload.slice(2).split(\";\")\n for (let i = 0; i + 1 < parts.length; i += 2) {\n if (parts[i] === String(index)) return parseTerminalColor(parts[i + 1])\n }\n return\n }\n if (event.payload.startsWith(prefix))\n return parseTerminalColor(event.payload.slice(prefix.length))\n },\n request: `\\x1b]${prefix}?\\x1b\\\\`,\n })\n }\n\n colorScheme(opts: TerminalQueryOpts = {}) {\n return this.query<\"dark\" | \"light\">({\n ...opts,\n match: (event) => {\n if (event.kind !== \"csi\" || event.final !== \"n\") return\n if (event.params === \"?997;1\") return \"dark\"\n if (event.params === \"?997;2\") return \"light\"\n },\n request: \"\\x1b[?996n\",\n })\n }\n\n async palette(opts: TerminalQueryOpts = {}): Promise<TerminalPaletteSnapshot> {\n const colorOpts = { ...opts, timeout: opts.timeout ?? 100 }\n const [ansi, fg, bg] = await Promise.all([\n Promise.all(Array.from({ length: 16 }, (_, i) => this.color(i, colorOpts))),\n this.color(\"fg\", colorOpts),\n this.color(\"bg\", colorOpts),\n ])\n return { ansi, bg, fg }\n }\n\n primaryDeviceAttributes(opts: TerminalQueryOpts = {}) {\n return this.query<TerminalResponseEvent & { attrs: number[] }>({\n match: (ev) =>\n ev.kind === \"csi\" && ev.final === \"c\" && ev.params.startsWith(\"?\")\n ? { ...ev, attrs: parseAttrs(ev.params) }\n : undefined,\n request: \"\\x1b[c\",\n ...opts,\n })\n }\n\n secondaryDeviceAttributes(opts: TerminalQueryOpts = {}) {\n return this.query<TerminalResponseEvent & { attrs: number[] }>({\n match: (ev) =>\n ev.kind === \"csi\" && ev.final === \"c\" && ev.params.startsWith(\">\")\n ? { ...ev, attrs: parseAttrs(ev.params) }\n : undefined,\n request: \"\\x1b[>c\",\n ...opts,\n })\n }\n\n xtVersion(opts: TerminalQueryOpts = {}) {\n return this.query<TerminalResponseEvent & { name: string; version?: string }>({\n match: (ev) => {\n if (ev.kind !== \"dcs\" || !ev.payload.startsWith(\">|\")) return\n const payload = ev.payload.slice(2)\n const m = payload.match(/^([^\\s]+)\\(([^\\s]+)\\)$/) ?? payload.match(/^([^\\s]+)\\s+([^\\s]+)$/)\n return { ...ev, name: m?.[1] ?? payload, version: m?.[2] }\n },\n request: \"\\x1b[>q\",\n ...opts,\n })\n }\n}\n\nexport interface TerminalPaletteSnapshot {\n ansi: (HexColor | undefined)[]\n bg?: HexColor\n fg?: HexColor\n selectionBg?: HexColor\n selectionFg?: HexColor\n}\n\n/** OSC replies use X11 rgb components, with one to four hex digits per channel. */\nexport function parseTerminalColor(value: string): HexColor | undefined {\n let parts = /^rgb:([\\da-f]{1,4})\\/([\\da-f]{1,4})\\/([\\da-f]{1,4})$/i.exec(value)?.slice(1)\n if (!parts && /^#(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{9}|[\\da-f]{12})$/i.test(value)) {\n const size = (value.length - 1) / 3\n parts = Array.from({ length: 3 }, (_, i) => value.slice(1 + i * size, 1 + (i + 1) * size))\n }\n if (!parts) return\n return `#${parts\n .map((part) =>\n Math.round((Number.parseInt(part, 16) / (16 ** part.length - 1)) * 255)\n .toString(16)\n .padStart(2, \"0\")\n )\n .join(\"\")}`\n}\n\nexport function parseAttrs(params: string): number[] {\n return params\n .slice(1)\n .split(\";\")\n .map((n) => Number.parseInt(n, 10))\n .filter(Number.isFinite)\n}\n"],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { c as HexColor, f as Theme, i as AnyStyle, o as Color, u as Style, x as ShikiSelection } from "./types-
|
|
2
|
-
import { a as StyleBuilder, t as InspectOpts } from "./inspect-
|
|
1
|
+
import { c as HexColor, f as Theme, i as AnyStyle, o as Color, u as Style, x as ShikiSelection } from "./types-ByMHEdCF.mjs";
|
|
2
|
+
import { a as StyleBuilder, t as InspectOpts } from "./inspect-hSl3U2BD.mjs";
|
|
3
3
|
import { Emitter, MaybePromise } from "@zaly/shared";
|
|
4
4
|
import { LogEntry, LogLevel, LogReporter, Logger, TryResult } from "@zaly/shared/logger";
|
|
5
5
|
import { ArgsOpts, ArgsResult } from "@zaly/shared/args";
|
|
6
|
-
//#region src/input/keys.d.ts
|
|
7
6
|
/**
|
|
8
7
|
* Keyboard event shape + pattern-based matcher.
|
|
9
8
|
*
|
|
@@ -76,8 +75,6 @@ declare function canonical(patternOrEvent: string | KeyEvent): KeyPattern;
|
|
|
76
75
|
* (no ctrl/alt/etc.).
|
|
77
76
|
*/
|
|
78
77
|
declare function keyMatches(ev: KeyEvent, pattern: string | readonly string[]): boolean;
|
|
79
|
-
//#endregion
|
|
80
|
-
//#region src/input/decoder.d.ts
|
|
81
78
|
/**
|
|
82
79
|
* Decoder — bytes (as a string, after the caller UTF-8 decodes them) in,
|
|
83
80
|
* structured `InputEvent`s out. Holds partial state across `feed()` calls
|
|
@@ -126,8 +123,6 @@ type InputEvent = {
|
|
|
126
123
|
type: "focus";
|
|
127
124
|
gained: boolean;
|
|
128
125
|
} | TerminalResponseEvent | MouseEvent;
|
|
129
|
-
//#endregion
|
|
130
|
-
//#region src/input/actions.d.ts
|
|
131
126
|
/**
|
|
132
127
|
* Context handed to every action handler. Whether the action was
|
|
133
128
|
* fired by a key, programmatic dispatch, command palette, or a plugin,
|
|
@@ -276,8 +271,6 @@ declare class Actions extends Emitter<ActionEvents> {
|
|
|
276
271
|
keys: string[];
|
|
277
272
|
})[];
|
|
278
273
|
}
|
|
279
|
-
//#endregion
|
|
280
|
-
//#region src/layout/size.d.ts
|
|
281
274
|
/** Percentage string like `'50%'`, resolved against the parent's content axis. */
|
|
282
275
|
type Pct = `${number}%`;
|
|
283
276
|
/**
|
|
@@ -290,8 +283,6 @@ type Pct = `${number}%`;
|
|
|
290
283
|
* with `'fill'` — `fill` grows, `fit` shrinks.
|
|
291
284
|
*/
|
|
292
285
|
type Size = number | Pct | "fill" | "fit";
|
|
293
|
-
//#endregion
|
|
294
|
-
//#region src/core/reactive.d.ts
|
|
295
286
|
/** Run `fn` outside any tracking scope. Signal reads inside don't
|
|
296
287
|
* subscribe the surrounding render, and async work started inside
|
|
297
288
|
* (timers, promises, intervals) doesn't capture the current ctx —
|
|
@@ -749,8 +740,6 @@ interface Ref<T> {
|
|
|
749
740
|
declare function createRef<T>(value?: T, opts?: {
|
|
750
741
|
onSet?: (value: T, prev: T | undefined) => void | (() => void);
|
|
751
742
|
}): Ref<T>;
|
|
752
|
-
//#endregion
|
|
753
|
-
//#region src/core/state.d.ts
|
|
754
743
|
/**
|
|
755
744
|
* Fields every Node reads off its state. Widget state types should
|
|
756
745
|
* extend this (directly or transitively via `Style`, which extends
|
|
@@ -806,8 +795,6 @@ interface Layout {
|
|
|
806
795
|
width: number;
|
|
807
796
|
minWidth: number;
|
|
808
797
|
}
|
|
809
|
-
//#endregion
|
|
810
|
-
//#region src/layout/border.d.ts
|
|
811
798
|
/**
|
|
812
799
|
* Border-character glyphs for drawing a box outline. Any single-cell string
|
|
813
800
|
* is allowed (including multi-byte glyphs like rounded corners).
|
|
@@ -822,8 +809,6 @@ interface BorderChars {
|
|
|
822
809
|
}
|
|
823
810
|
type BorderSpec = boolean | "single" | "double" | "rounded" | BorderChars;
|
|
824
811
|
type TitleAlign = "left" | "center" | "right";
|
|
825
|
-
//#endregion
|
|
826
|
-
//#region src/widgets/text.d.ts
|
|
827
812
|
/**
|
|
828
813
|
* Text content — three forms, resolved at render time:
|
|
829
814
|
*
|
|
@@ -867,8 +852,6 @@ declare function textContent(content: TextContent | undefined, ctx: RenderCtx):
|
|
|
867
852
|
*/
|
|
868
853
|
declare function text(content: TextContent, style?: Omit<State<TextStyle>, "content">): Text;
|
|
869
854
|
declare function text(style: State<TextStyle>): Text;
|
|
870
|
-
//#endregion
|
|
871
|
-
//#region src/widgets/box.d.ts
|
|
872
855
|
type Padding = number | readonly [v: number, h: number] | readonly [t: number, r: number, b: number, l: number];
|
|
873
856
|
interface BoxStyle extends Style {
|
|
874
857
|
flexDirection?: "row" | "column";
|
|
@@ -939,8 +922,6 @@ type Child = Node | false | null | undefined;
|
|
|
939
922
|
* conditional JSX-like composition: `box({}, cond && child)`.
|
|
940
923
|
*/
|
|
941
924
|
declare function box(style: State<BoxStyle>, ...children: Child[]): Box;
|
|
942
|
-
//#endregion
|
|
943
|
-
//#region src/widgets/overlay.d.ts
|
|
944
925
|
interface OverlayState {
|
|
945
926
|
/** Absolute column (1-based) of the overlay's left edge. */
|
|
946
927
|
x: number;
|
|
@@ -963,8 +944,6 @@ type Overlay<T extends Node[] = Node[]> = Box<OverlayState> & {
|
|
|
963
944
|
children: T;
|
|
964
945
|
} & Emitter<OverlayEvents>;
|
|
965
946
|
declare function overlay<T extends Node[] = Node[]>(state: State<OverlayState & BoxStyle>, ...children: T): Overlay<T>;
|
|
966
|
-
//#endregion
|
|
967
|
-
//#region src/core/ctx.d.ts
|
|
968
947
|
/**
|
|
969
948
|
* Passed to every `render(ctx)` call. Width flows in; height emerges from
|
|
970
949
|
* the returned row count. Theme is ambient — children share the parent's.
|
|
@@ -1036,8 +1015,6 @@ interface MountCtx {
|
|
|
1036
1015
|
readonly findNode: (match: string | ((n: Node) => boolean)) => Node[];
|
|
1037
1016
|
logger: Logger;
|
|
1038
1017
|
}
|
|
1039
|
-
//#endregion
|
|
1040
|
-
//#region src/widgets/log.d.ts
|
|
1041
1018
|
type LogStyle = "badge" | "icon" | "prompt" | "title" | "text" | "notif";
|
|
1042
1019
|
interface LogState {
|
|
1043
1020
|
level: LogLevel;
|
|
@@ -1066,8 +1043,6 @@ interface LogState {
|
|
|
1066
1043
|
* ```
|
|
1067
1044
|
*/
|
|
1068
1045
|
declare const log: (state: State<LogState>, ...children: Node[]) => Box<{}>;
|
|
1069
|
-
//#endregion
|
|
1070
|
-
//#region src/services/logger.d.ts
|
|
1071
1046
|
/** Minimal stream surface the logger needs. Stream satisfies this. */
|
|
1072
1047
|
interface LoggerStream {
|
|
1073
1048
|
append: (node: () => Node) => unknown;
|
|
@@ -1094,8 +1069,6 @@ declare class TuiReporter implements LogReporter {
|
|
|
1094
1069
|
detach(): this;
|
|
1095
1070
|
$log({ level, msg }: LogEntry): void;
|
|
1096
1071
|
}
|
|
1097
|
-
//#endregion
|
|
1098
|
-
//#region src/renderer/terminal.d.ts
|
|
1099
1072
|
/**
|
|
1100
1073
|
* Terminal primitive — owns stdin raw mode, stdout writes, and the
|
|
1101
1074
|
* standard set of control modes we flip for a direct-mode renderer:
|
|
@@ -1210,8 +1183,6 @@ declare class Terminal {
|
|
|
1210
1183
|
sync(fn: () => void): void;
|
|
1211
1184
|
onResize(fn: ResizeListener): () => void;
|
|
1212
1185
|
}
|
|
1213
|
-
//#endregion
|
|
1214
|
-
//#region src/renderer/frame.d.ts
|
|
1215
1186
|
type FrameOp = (terminal: Terminal) => void;
|
|
1216
1187
|
type LineSlice = {
|
|
1217
1188
|
from: number;
|
|
@@ -1257,8 +1228,6 @@ declare class RenderFrame {
|
|
|
1257
1228
|
ops: number;
|
|
1258
1229
|
};
|
|
1259
1230
|
}
|
|
1260
|
-
//#endregion
|
|
1261
|
-
//#region src/renderer/surface.d.ts
|
|
1262
1231
|
/**
|
|
1263
1232
|
* Base event map for renderer surfaces. Surfaces usually schedule work
|
|
1264
1233
|
* through their owning `Renderer`; subclasses may extend this with their
|
|
@@ -1322,8 +1291,6 @@ declare abstract class Surface<E extends {} = never> extends Emitter<SurfaceEven
|
|
|
1322
1291
|
abstract _render(frame: RenderFrame): Promise<void>;
|
|
1323
1292
|
render(frame?: RenderFrame): Promise<void>;
|
|
1324
1293
|
}
|
|
1325
|
-
//#endregion
|
|
1326
|
-
//#region src/renderer/overlay.d.ts
|
|
1327
1294
|
type OverlayRenderState = {
|
|
1328
1295
|
x: number;
|
|
1329
1296
|
y: number;
|
|
@@ -1384,8 +1351,6 @@ declare class OverlaySurface extends Surface<OverlaySurfaceEvents> {
|
|
|
1384
1351
|
*/
|
|
1385
1352
|
_render(frame: RenderFrame): Promise<void>;
|
|
1386
1353
|
}
|
|
1387
|
-
//#endregion
|
|
1388
|
-
//#region src/renderer/selection.d.ts
|
|
1389
1354
|
type SelectionSurface = "stream" | "screen";
|
|
1390
1355
|
type Selection = {
|
|
1391
1356
|
dragging: boolean;
|
|
@@ -1419,8 +1384,6 @@ declare class SelectionLayer extends Emitter<SelectionEvents> {
|
|
|
1419
1384
|
renderScreen(frame: RenderFrame, ctx: RenderCtx): void;
|
|
1420
1385
|
render(frame: RenderFrame, ctx: RenderCtx): void;
|
|
1421
1386
|
}
|
|
1422
|
-
//#endregion
|
|
1423
|
-
//#region src/renderer/stream.d.ts
|
|
1424
1387
|
type StreamEvents = {
|
|
1425
1388
|
idle: void;
|
|
1426
1389
|
scroll: {
|
|
@@ -1504,8 +1467,6 @@ declare class Stream extends Surface<StreamEvents> {
|
|
|
1504
1467
|
protected mountAll(ctx: MountCtx): void;
|
|
1505
1468
|
protected unmountAll(): void;
|
|
1506
1469
|
}
|
|
1507
|
-
//#endregion
|
|
1508
|
-
//#region src/renderer/ui.d.ts
|
|
1509
1470
|
/**
|
|
1510
1471
|
* UI surface — the sticky footer. Renders a single Box tree at the
|
|
1511
1472
|
* bottom of the terminal, inside the rows reserved by `Terminal`'s
|
|
@@ -1570,8 +1531,6 @@ declare class UI extends Surface {
|
|
|
1570
1531
|
bottom: number;
|
|
1571
1532
|
};
|
|
1572
1533
|
}
|
|
1573
|
-
//#endregion
|
|
1574
|
-
//#region src/renderer/renderer.d.ts
|
|
1575
1534
|
interface RendererOptions {
|
|
1576
1535
|
stdin?: TerminalReader;
|
|
1577
1536
|
stdout?: TerminalWriter;
|
|
@@ -1716,8 +1675,6 @@ declare class Renderer extends Emitter<RenderEvents> {
|
|
|
1716
1675
|
* paints are queued. */
|
|
1717
1676
|
render(): Promise<void>;
|
|
1718
1677
|
}
|
|
1719
|
-
//#endregion
|
|
1720
|
-
//#region src/core/node.d.ts
|
|
1721
1678
|
/** Minimum event map every node carries. Custom event maps intersect
|
|
1722
1679
|
* this with their own events via `&`. */
|
|
1723
1680
|
type BaseEvents = {
|
|
@@ -1853,8 +1810,6 @@ declare abstract class Node<T extends object = object, E extends {} = {}> extend
|
|
|
1853
1810
|
*
|
|
1854
1811
|
* @internal*/
|
|
1855
1812
|
declare function isNode(x: unknown): x is Node;
|
|
1856
|
-
//#endregion
|
|
1857
|
-
//#region src/input/router.d.ts
|
|
1858
1813
|
type KeyPatterns = KeyPattern | readonly KeyPattern[];
|
|
1859
1814
|
type KeyHandler = (ev: KeyEvent) => boolean | void;
|
|
1860
1815
|
/** A keymap entry is either an action id (string) or a direct key
|
|
@@ -1947,8 +1902,6 @@ declare class InputRouter extends Emitter<InputRouterEvents> {
|
|
|
1947
1902
|
*/
|
|
1948
1903
|
dispatch(ev: InputEvent): boolean;
|
|
1949
1904
|
}
|
|
1950
|
-
//#endregion
|
|
1951
|
-
//#region src/input/queries.d.ts
|
|
1952
1905
|
type TerminalQuery<T = TerminalResponseEvent> = TerminalQueryOpts & {
|
|
1953
1906
|
request: string;
|
|
1954
1907
|
match: (event: TerminalResponseEvent) => T | undefined;
|
|
@@ -1989,6 +1942,5 @@ interface TerminalPaletteSnapshot {
|
|
|
1989
1942
|
/** OSC replies use X11 rgb components, with one to four hex digits per channel. */
|
|
1990
1943
|
declare function parseTerminalColor(value: string): HexColor | undefined;
|
|
1991
1944
|
declare function parseAttrs(params: string): number[];
|
|
1992
|
-
//#endregion
|
|
1993
1945
|
export { StyleState as $, keyMatches as $t, TuiReporter as A, unwrap as At, Box as B, ActionFn as Bt, UI as C, memo as Ct, LogEntryFactory as D, signal as Dt, Terminal as E, provideContext as Et, MountCtx as F, Size as Ft, TextContent as G, NodeActionMap as Gt, Padding as H, Actions as Ht, RenderCtx as I, Action as It, textContent as J, KeyPattern as Jt, TextStyle as K, KeyEvent as Kt, Overlay as L, ActionCtx as Lt, LogState as M, useContext as Mt, LogStyle as N, withActiveNode as Nt, LogStyleOverride as O, toAccessor as Ot, log as P, withOwner as Pt, State as Q, isKeyPattern as Qt, OverlayState as R, ActionDef as Rt, SurfaceType as S, isAccessor as St, OverlaySurface as T, peek as Tt, box as U, KeyBinding as Ut, BoxStyle as V, ActionMap as Vt, Text as W, NodeAction as Wt, Layout as X, SpecialKeyName as Xt, FlexState as Y, KeyPatternError as Yt, LayoutState as Z, canonical as Zt, NodeVisitor as _, createRoot as _t, parseAttrs as a, Ref as at, Renderer as b, effect as bt, InputRouterEvents as c, SignalStore as ct, KeymapEntry as d, createAsync as dt, Accessor as et, RoutedKey as f, createContext as ft, isNode as g, createRef as gt, Node as h, createProgressive as ht, TerminalQueryOpts as i, Reactive as it, TuiReporterOpts as j, useActiveOwner as jt, LoggerStream as k, untrack as kt, KeyHandler as l, SuspenseBoundary as lt, BaseEvents as m, createNode as mt, TerminalQueries as n, Owner as nt, parseTerminalColor as o, Setter as ot, RoutedPaste as p, createIterable as pt, text as q, KeyModifier as qt, TerminalQuery as r, Progressive as rt, InputRouter as s, Signal as st, TerminalPaletteSnapshot as t, Context as tt, KeyPatterns as u, SuspenseContext as ut, RenderEvents as v, createStore as vt, Stream as w, onCleanup as wt, RendererOptions as x, inRenderContextOf as xt, RenderStats as y, createSuspenseBoundary as yt, overlay as z, ActionFilter as zt };
|
|
1994
|
-
//# sourceMappingURL=queries-
|
|
1946
|
+
//# sourceMappingURL=queries-Dmd3IjSd.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries-Dmd3IjSd.d.mts","names":["_$___core_state_ts0.Layout","_$__box_ts0.Box","_$__terminal_ts0.Terminal"],"sources":["../src/input/keys.ts","../src/input/decoder.ts","../src/input/actions.ts","../src/layout/size.ts","../src/core/reactive.ts","../src/core/state.ts","../src/layout/border.ts","../src/widgets/text.ts","../src/widgets/box.ts","../src/widgets/overlay.ts","../src/core/ctx.ts","../src/widgets/log.ts","../src/services/logger.ts","../src/renderer/terminal.ts","../src/renderer/frame.ts","../src/renderer/surface.ts","../src/renderer/overlay.ts","../src/renderer/selection.ts","../src/renderer/stream.ts","../src/renderer/ui.ts","../src/renderer/renderer.ts","../src/core/node.ts","../src/input/router.ts","../src/input/queries.ts"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
-
|
|
2
|
+
// src/core/reactive.ts
|
|
3
3
|
const activeCtx = new AsyncLocalStorage();
|
|
4
4
|
function withTracking(ctx, fn) {
|
|
5
5
|
return activeCtx.run(ctx, fn);
|
|
@@ -617,7 +617,6 @@ function createRef(value, opts = {}) {
|
|
|
617
617
|
});
|
|
618
618
|
return get;
|
|
619
619
|
}
|
|
620
|
-
//#endregion
|
|
621
620
|
export { useActiveOwner as C, withOwner as E, unwrap as S, withActiveNode as T, peek as _, createIterable as a, toAccessor as b, createRef as c, createSuspenseBoundary as d, effect as f, onCleanup as g, memo as h, createContext as i, createRoot as l, isAccessor as m, SuspenseContext as n, createNode as o, inRenderContextOf as p, createAsync as r, createProgressive as s, Owner as t, createStore as u, provideContext as v, useContext as w, untrack as x, signal as y };
|
|
622
621
|
|
|
623
|
-
//# sourceMappingURL=reactive-
|
|
622
|
+
//# sourceMappingURL=reactive-DkP75TPk.mjs.map
|