@dst0/p-tui 0.4.41 → 5.0.2
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/autocomplete.d.ts.map +1 -1
- package/dist/autocomplete.js.map +1 -1
- package/dist/components/box.d.ts +3 -1
- package/dist/components/box.d.ts.map +1 -1
- package/dist/components/box.js +19 -10
- package/dist/components/box.js.map +1 -1
- package/dist/components/cancellable-loader.d.ts.map +1 -1
- package/dist/components/cancellable-loader.js.map +1 -1
- package/dist/components/editor/constants.d.ts +9 -0
- package/dist/components/editor/constants.d.ts.map +1 -0
- package/dist/components/editor/constants.js +12 -0
- package/dist/components/editor/constants.js.map +1 -0
- package/dist/components/editor/editor-methods/autocomplete-matching.d.ts +29 -0
- package/dist/components/editor/editor-methods/autocomplete-matching.d.ts.map +1 -0
- package/dist/components/editor/editor-methods/autocomplete-matching.js +104 -0
- package/dist/components/editor/editor-methods/autocomplete-matching.js.map +1 -0
- package/dist/components/editor/editor-methods/autocomplete-request.d.ts +14 -0
- package/dist/components/editor/editor-methods/autocomplete-request.d.ts.map +1 -0
- package/dist/components/editor/editor-methods/autocomplete-request.js +72 -0
- package/dist/components/editor/editor-methods/autocomplete-request.js.map +1 -0
- package/dist/components/editor/editor-methods/backspace-cursor.d.ts +9 -0
- package/dist/components/editor/editor-methods/backspace-cursor.d.ts.map +1 -0
- package/dist/components/editor/editor-methods/backspace-cursor.js +122 -0
- package/dist/components/editor/editor-methods/backspace-cursor.js.map +1 -0
- package/dist/components/editor/editor-methods/configuration.d.ts +17 -0
- package/dist/components/editor/editor-methods/configuration.d.ts.map +1 -0
- package/dist/components/editor/editor-methods/configuration.js +107 -0
- package/dist/components/editor/editor-methods/configuration.js.map +1 -0
- package/dist/components/editor/editor-methods/cursor-movement.d.ts +7 -0
- package/dist/components/editor/editor-methods/cursor-movement.d.ts.map +1 -0
- package/dist/components/editor/editor-methods/cursor-movement.js +112 -0
- package/dist/components/editor/editor-methods/cursor-movement.js.map +1 -0
- package/dist/components/editor/editor-methods/input-handling.d.ts +3 -0
- package/dist/components/editor/editor-methods/input-handling.d.ts.map +1 -0
- package/dist/components/editor/editor-methods/input-handling.js +257 -0
- package/dist/components/editor/editor-methods/input-handling.js.map +1 -0
- package/dist/components/editor/editor-methods/paste-submit.d.ts +7 -0
- package/dist/components/editor/editor-methods/paste-submit.d.ts.map +1 -0
- package/dist/components/editor/editor-methods/paste-submit.js +105 -0
- package/dist/components/editor/editor-methods/paste-submit.js.map +1 -0
- package/dist/components/editor/editor-methods/render.d.ts +3 -0
- package/dist/components/editor/editor-methods/render.d.ts.map +1 -0
- package/dist/components/editor/editor-methods/render.js +114 -0
- package/dist/components/editor/editor-methods/render.js.map +1 -0
- package/dist/components/editor/editor-methods/text-insertion.d.ts +4 -0
- package/dist/components/editor/editor-methods/text-insertion.d.ts.map +1 -0
- package/dist/components/editor/editor-methods/text-insertion.js +91 -0
- package/dist/components/editor/editor-methods/text-insertion.js.map +1 -0
- package/dist/components/editor/editor-methods/text-layout.d.ts +15 -0
- package/dist/components/editor/editor-methods/text-layout.d.ts.map +1 -0
- package/dist/components/editor/editor-methods/text-layout.js +129 -0
- package/dist/components/editor/editor-methods/text-layout.js.map +1 -0
- package/dist/components/editor/editor-methods/vertical-movement.d.ts +8 -0
- package/dist/components/editor/editor-methods/vertical-movement.d.ts.map +1 -0
- package/dist/components/editor/editor-methods/vertical-movement.js +123 -0
- package/dist/components/editor/editor-methods/vertical-movement.js.map +1 -0
- package/dist/components/editor/editor-methods/word-operations.d.ts +19 -0
- package/dist/components/editor/editor-methods/word-operations.d.ts.map +1 -0
- package/dist/components/editor/editor-methods/word-operations.js +122 -0
- package/dist/components/editor/editor-methods/word-operations.js.map +1 -0
- package/dist/components/editor/editor-methods/yank-undo.d.ts +11 -0
- package/dist/components/editor/editor-methods/yank-undo.d.ts.map +1 -0
- package/dist/components/editor/editor-methods/yank-undo.js +132 -0
- package/dist/components/editor/editor-methods/yank-undo.js.map +1 -0
- package/dist/components/editor/editor.d.ts +67 -0
- package/dist/components/editor/editor.d.ts.map +1 -0
- package/dist/components/editor/editor.js +93 -0
- package/dist/components/editor/editor.js.map +1 -0
- package/dist/components/editor/helpers.d.ts +3 -0
- package/dist/components/editor/helpers.d.ts.map +1 -0
- package/dist/components/editor/helpers.js +3 -0
- package/dist/components/editor/helpers.js.map +1 -0
- package/dist/components/editor/index.d.ts +4 -0
- package/dist/components/editor/index.d.ts.map +1 -0
- package/dist/components/editor/index.js +3 -0
- package/dist/components/editor/index.js.map +1 -0
- package/dist/components/editor/paste-marker.d.ts +5 -0
- package/dist/components/editor/paste-marker.d.ts.map +1 -0
- package/dist/components/editor/paste-marker.js +134 -0
- package/dist/components/editor/paste-marker.js.map +1 -0
- package/dist/components/editor/trigger-patterns.d.ts +4 -0
- package/dist/components/editor/trigger-patterns.d.ts.map +1 -0
- package/dist/components/editor/trigger-patterns.js +11 -0
- package/dist/components/editor/trigger-patterns.js.map +1 -0
- package/dist/components/editor/types.d.ts +25 -0
- package/dist/components/editor/types.d.ts.map +1 -0
- package/dist/components/editor/types.js +2 -0
- package/dist/components/editor/types.js.map +1 -0
- package/dist/components/editor.d.ts +1 -253
- package/dist/components/editor.d.ts.map +1 -1
- package/dist/components/editor.js +1 -1915
- package/dist/components/editor.js.map +1 -1
- package/dist/components/image.d.ts.map +1 -1
- package/dist/components/image.js.map +1 -1
- package/dist/components/input/constants.d.ts +2 -0
- package/dist/components/input/constants.d.ts.map +1 -0
- package/dist/components/input/constants.js +3 -0
- package/dist/components/input/constants.js.map +1 -0
- package/dist/components/input/index.d.ts +2 -0
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/components/input/index.js +2 -0
- package/dist/components/input/index.js.map +1 -0
- package/dist/components/input/input-methods/input-handling.d.ts +3 -0
- package/dist/components/input/input-methods/input-handling.d.ts.map +1 -0
- package/dist/components/input/input-methods/input-handling.js +145 -0
- package/dist/components/input/input-methods/input-handling.js.map +1 -0
- package/dist/components/input/input-methods/render.d.ts +3 -0
- package/dist/components/input/input-methods/render.d.ts.map +1 -0
- package/dist/components/input/input-methods/render.js +62 -0
- package/dist/components/input/input-methods/render.js.map +1 -0
- package/dist/components/input/input-methods/text-editing.d.ts +17 -0
- package/dist/components/input/input-methods/text-editing.d.ts.map +1 -0
- package/dist/components/input/input-methods/text-editing.js +145 -0
- package/dist/components/input/input-methods/text-editing.js.map +1 -0
- package/dist/components/input/input-methods/value-access.d.ts +4 -0
- package/dist/components/input/input-methods/value-access.d.ts.map +1 -0
- package/dist/components/input/input-methods/value-access.js +20 -0
- package/dist/components/input/input-methods/value-access.js.map +1 -0
- package/dist/components/input/input.d.ts +37 -0
- package/dist/components/input/input.d.ts.map +1 -0
- package/dist/components/input/input.js +77 -0
- package/dist/components/input/input.js.map +1 -0
- package/dist/components/input/types.d.ts +5 -0
- package/dist/components/input/types.d.ts.map +1 -0
- package/dist/components/input/types.js +2 -0
- package/dist/components/input/types.js.map +1 -0
- package/dist/components/input.d.ts +1 -36
- package/dist/components/input.d.ts.map +1 -1
- package/dist/components/input.js +1 -377
- package/dist/components/input.js.map +1 -1
- package/dist/components/loader.d.ts.map +1 -1
- package/dist/components/loader.js.map +1 -1
- package/dist/components/markdown/constants.d.ts +4 -0
- package/dist/components/markdown/constants.d.ts.map +1 -0
- package/dist/components/markdown/constants.js +8 -0
- package/dist/components/markdown/constants.js.map +1 -0
- package/dist/components/markdown/index.d.ts +3 -0
- package/dist/components/markdown/index.d.ts.map +1 -0
- package/dist/components/markdown/index.js +2 -0
- package/dist/components/markdown/index.js.map +1 -0
- package/dist/components/markdown/markdown-methods/inline-rendering.d.ts +7 -0
- package/dist/components/markdown/markdown-methods/inline-rendering.d.ts.map +1 -0
- package/dist/components/markdown/markdown-methods/inline-rendering.js +95 -0
- package/dist/components/markdown/markdown-methods/inline-rendering.js.map +1 -0
- package/dist/components/markdown/markdown-methods/list-table-helpers.d.ts +7 -0
- package/dist/components/markdown/markdown-methods/list-table-helpers.d.ts.map +1 -0
- package/dist/components/markdown/markdown-methods/list-table-helpers.js +61 -0
- package/dist/components/markdown/markdown-methods/list-table-helpers.js.map +1 -0
- package/dist/components/markdown/markdown-methods/table-rendering.d.ts +5 -0
- package/dist/components/markdown/markdown-methods/table-rendering.d.ts.map +1 -0
- package/dist/components/markdown/markdown-methods/table-rendering.js +146 -0
- package/dist/components/markdown/markdown-methods/table-rendering.js.map +1 -0
- package/dist/components/markdown/markdown-methods/text-rendering.d.ts +6 -0
- package/dist/components/markdown/markdown-methods/text-rendering.d.ts.map +1 -0
- package/dist/components/markdown/markdown-methods/text-rendering.js +115 -0
- package/dist/components/markdown/markdown-methods/text-rendering.js.map +1 -0
- package/dist/components/markdown/markdown-methods/theming.d.ts +6 -0
- package/dist/components/markdown/markdown-methods/theming.d.ts.map +1 -0
- package/dist/components/markdown/markdown-methods/theming.js +41 -0
- package/dist/components/markdown/markdown-methods/theming.js.map +1 -0
- package/dist/components/markdown/markdown-methods/token-rendering.d.ts +5 -0
- package/dist/components/markdown/markdown-methods/token-rendering.d.ts.map +1 -0
- package/dist/components/markdown/markdown-methods/token-rendering.js +142 -0
- package/dist/components/markdown/markdown-methods/token-rendering.js.map +1 -0
- package/dist/components/markdown/markdown.d.ts +32 -0
- package/dist/components/markdown/markdown.d.ts.map +1 -0
- package/dist/components/markdown/markdown.js +72 -0
- package/dist/components/markdown/markdown.js.map +1 -0
- package/dist/components/markdown/strictstrikethroughtokenizer.d.ts +6 -0
- package/dist/components/markdown/strictstrikethroughtokenizer.d.ts.map +1 -0
- package/dist/components/markdown/strictstrikethroughtokenizer.js +18 -0
- package/dist/components/markdown/strictstrikethroughtokenizer.js.map +1 -0
- package/dist/components/markdown/types.d.ts +42 -0
- package/dist/components/markdown/types.d.ts.map +1 -0
- package/dist/components/markdown/types.js +2 -0
- package/dist/components/markdown/types.js.map +1 -0
- package/dist/components/markdown.d.ts +1 -96
- package/dist/components/markdown.d.ts.map +1 -1
- package/dist/components/markdown.js +1 -653
- package/dist/components/markdown.js.map +1 -1
- package/dist/components/select-list.d.ts.map +1 -1
- package/dist/components/select-list.js +8 -3
- package/dist/components/select-list.js.map +1 -1
- package/dist/components/settings-list.d.ts.map +1 -1
- package/dist/components/settings-list.js +2 -6
- package/dist/components/settings-list.js.map +1 -1
- package/dist/components/spacer.d.ts.map +1 -1
- package/dist/components/spacer.js.map +1 -1
- package/dist/components/text.d.ts.map +1 -1
- package/dist/components/text.js +2 -2
- package/dist/components/text.js.map +1 -1
- package/dist/components/truncated-text.d.ts.map +1 -1
- package/dist/components/truncated-text.js.map +1 -1
- package/dist/editor-component.d.ts.map +1 -1
- package/dist/editor-component.js.map +1 -1
- package/dist/fuzzy.d.ts.map +1 -1
- package/dist/fuzzy.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/keybindings.d.ts.map +1 -1
- package/dist/keybindings.js.map +1 -1
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js +145 -14
- package/dist/keys.js.map +1 -1
- package/dist/kill-ring.d.ts.map +1 -1
- package/dist/kill-ring.js.map +1 -1
- package/dist/native-modifiers.d.ts +9 -0
- package/dist/native-modifiers.d.ts.map +1 -1
- package/dist/native-modifiers.js +5 -0
- package/dist/native-modifiers.js.map +1 -1
- package/dist/stdin-buffer.d.ts +3 -0
- package/dist/stdin-buffer.d.ts.map +1 -1
- package/dist/stdin-buffer.js +24 -21
- package/dist/stdin-buffer.js.map +1 -1
- package/dist/terminal/constants.d.ts +9 -0
- package/dist/terminal/constants.d.ts.map +1 -0
- package/dist/terminal/constants.js +10 -0
- package/dist/terminal/constants.js.map +1 -0
- package/dist/terminal/helpers.d.ts +6 -0
- package/dist/terminal/helpers.d.ts.map +1 -0
- package/dist/terminal/helpers.js +23 -0
- package/dist/terminal/helpers.js.map +1 -0
- package/dist/terminal/index.d.ts +4 -0
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/index.js +3 -0
- package/dist/terminal/index.js.map +1 -0
- package/dist/terminal/processterminal-methods/cursor-screen.d.ts +11 -0
- package/dist/terminal/processterminal-methods/cursor-screen.d.ts.map +1 -0
- package/dist/terminal/processterminal-methods/cursor-screen.js +50 -0
- package/dist/terminal/processterminal-methods/cursor-screen.js.map +1 -0
- package/dist/terminal/processterminal-methods/keyboard-protocol.d.ts +14 -0
- package/dist/terminal/processterminal-methods/keyboard-protocol.d.ts.map +1 -0
- package/dist/terminal/processterminal-methods/keyboard-protocol.js +147 -0
- package/dist/terminal/processterminal-methods/keyboard-protocol.js.map +1 -0
- package/dist/terminal/processterminal-methods/terminal-io.d.ts +9 -0
- package/dist/terminal/processterminal-methods/terminal-io.d.ts.map +1 -0
- package/dist/terminal/processterminal-methods/terminal-io.js +153 -0
- package/dist/terminal/processterminal-methods/terminal-io.js.map +1 -0
- package/dist/terminal/processterminal.d.ts +49 -0
- package/dist/terminal/processterminal.d.ts.map +1 -0
- package/dist/terminal/processterminal.js +129 -0
- package/dist/terminal/processterminal.js.map +1 -0
- package/dist/terminal/types.d.ts +31 -0
- package/dist/terminal/types.d.ts.map +1 -0
- package/dist/terminal/types.js +2 -0
- package/dist/terminal/types.js.map +1 -0
- package/dist/terminal-colors.d.ts +2 -0
- package/dist/terminal-colors.d.ts.map +1 -1
- package/dist/terminal-colors.js +17 -5
- package/dist/terminal-colors.js.map +1 -1
- package/dist/terminal-image.d.ts.map +1 -1
- package/dist/terminal-image.js.map +1 -1
- package/dist/terminal.d.ts +1 -109
- package/dist/terminal.d.ts.map +1 -1
- package/dist/terminal.js +1 -432
- package/dist/terminal.js.map +1 -1
- package/dist/tui/constants.d.ts +3 -0
- package/dist/tui/constants.d.ts.map +1 -0
- package/dist/tui/constants.js +3 -0
- package/dist/tui/constants.js.map +1 -0
- package/dist/tui/container.d.ts +10 -0
- package/dist/tui/container.d.ts.map +1 -0
- package/dist/tui/container.js +31 -0
- package/dist/tui/container.js.map +1 -0
- package/dist/tui/helpers.d.ts +8 -0
- package/dist/tui/helpers.d.ts.map +1 -0
- package/dist/tui/helpers.js +53 -0
- package/dist/tui/helpers.js.map +1 -0
- package/dist/tui/index.d.ts +6 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +5 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/tui-methods/configuration.d.ts +20 -0
- package/dist/tui/tui-methods/configuration.d.ts.map +1 -0
- package/dist/tui/tui-methods/configuration.js +131 -0
- package/dist/tui/tui-methods/configuration.js.map +1 -0
- package/dist/tui/tui-methods/cursor-background.d.ts +10 -0
- package/dist/tui/tui-methods/cursor-background.d.ts.map +1 -0
- package/dist/tui/tui-methods/cursor-background.js +52 -0
- package/dist/tui/tui-methods/cursor-background.js.map +1 -0
- package/dist/tui/tui-methods/incremental-render.d.ts +17 -0
- package/dist/tui/tui-methods/incremental-render.d.ts.map +1 -0
- package/dist/tui/tui-methods/incremental-render.js +259 -0
- package/dist/tui/tui-methods/incremental-render.js.map +1 -0
- package/dist/tui/tui-methods/input-handling.d.ts +5 -0
- package/dist/tui/tui-methods/input-handling.d.ts.map +1 -0
- package/dist/tui/tui-methods/input-handling.js +111 -0
- package/dist/tui/tui-methods/input-handling.js.map +1 -0
- package/dist/tui/tui-methods/line-compositing.d.ts +7 -0
- package/dist/tui/tui-methods/line-compositing.d.ts.map +1 -0
- package/dist/tui/tui-methods/line-compositing.js +61 -0
- package/dist/tui/tui-methods/line-compositing.js.map +1 -0
- package/dist/tui/tui-methods/overlay-compositing.d.ts +12 -0
- package/dist/tui/tui-methods/overlay-compositing.d.ts.map +1 -0
- package/dist/tui/tui-methods/overlay-compositing.js +123 -0
- package/dist/tui/tui-methods/overlay-compositing.js.map +1 -0
- package/dist/tui/tui-methods/overlay-layout.d.ts +11 -0
- package/dist/tui/tui-methods/overlay-layout.d.ts.map +1 -0
- package/dist/tui/tui-methods/overlay-layout.js +124 -0
- package/dist/tui/tui-methods/overlay-layout.js.map +1 -0
- package/dist/tui/tui-methods/overlay-management.d.ts +11 -0
- package/dist/tui/tui-methods/overlay-management.d.ts.map +1 -0
- package/dist/tui/tui-methods/overlay-management.js +152 -0
- package/dist/tui/tui-methods/overlay-management.js.map +1 -0
- package/dist/tui/tui-methods/render-pipeline.d.ts +3 -0
- package/dist/tui/tui-methods/render-pipeline.d.ts.map +1 -0
- package/dist/tui/tui-methods/render-pipeline.js +176 -0
- package/dist/tui/tui-methods/render-pipeline.js.map +1 -0
- package/dist/tui/tui-methods/render-width-error.d.ts +3 -0
- package/dist/tui/tui-methods/render-width-error.d.ts.map +1 -0
- package/dist/tui/tui-methods/render-width-error.js +28 -0
- package/dist/tui/tui-methods/render-width-error.js.map +1 -0
- package/dist/tui/tui-methods/terminal-control.d.ts +8 -0
- package/dist/tui/tui-methods/terminal-control.d.ts.map +1 -0
- package/dist/tui/tui-methods/terminal-control.js +101 -0
- package/dist/tui/tui-methods/terminal-control.js.map +1 -0
- package/dist/tui/tui.d.ts +59 -0
- package/dist/tui/tui.d.ts.map +1 -0
- package/dist/tui/tui.js +78 -0
- package/dist/tui/tui.js.map +1 -0
- package/dist/tui/types.d.ts +124 -0
- package/dist/tui/types.d.ts.map +1 -0
- package/dist/tui/types.js +2 -0
- package/dist/tui/types.js.map +1 -0
- package/dist/tui.d.ts +1 -254
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +1 -1344
- package/dist/tui.js.map +1 -1
- package/dist/undo-stack.d.ts.map +1 -1
- package/dist/undo-stack.js.map +1 -1
- package/dist/utils/ansi-wrapping.d.ts +5 -0
- package/dist/utils/ansi-wrapping.d.ts.map +1 -0
- package/dist/utils/ansi-wrapping.js +52 -0
- package/dist/utils/ansi-wrapping.js.map +1 -0
- package/dist/utils/ansicodetracker.d.ts +27 -0
- package/dist/utils/ansicodetracker.d.ts.map +1 -0
- package/dist/utils/ansicodetracker.js +222 -0
- package/dist/utils/ansicodetracker.js.map +1 -0
- package/dist/utils/column-slicing.d.ts +12 -0
- package/dist/utils/column-slicing.d.ts.map +1 -0
- package/dist/utils/column-slicing.js +111 -0
- package/dist/utils/column-slicing.js.map +1 -0
- package/dist/utils/column-truncation.d.ts +2 -0
- package/dist/utils/column-truncation.d.ts.map +1 -0
- package/dist/utils/column-truncation.js +129 -0
- package/dist/utils/column-truncation.js.map +1 -0
- package/dist/utils/constants.d.ts +12 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +12 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/install-delegated-methods.d.ts +5 -0
- package/dist/utils/install-delegated-methods.d.ts.map +1 -0
- package/dist/utils/install-delegated-methods.js +27 -0
- package/dist/utils/install-delegated-methods.js.map +1 -0
- package/dist/utils/segmentation.d.ts +10 -0
- package/dist/utils/segmentation.d.ts.map +1 -0
- package/dist/utils/segmentation.js +111 -0
- package/dist/utils/segmentation.js.map +1 -0
- package/dist/utils/terminal-output.d.ts +10 -0
- package/dist/utils/terminal-output.d.ts.map +1 -0
- package/dist/utils/terminal-output.js +122 -0
- package/dist/utils/terminal-output.js.map +1 -0
- package/dist/utils/types.d.ts +7 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +2 -0
- package/dist/utils/types.js.map +1 -0
- package/dist/utils/width-truncation.d.ts +6 -0
- package/dist/utils/width-truncation.d.ts.map +1 -0
- package/dist/utils/width-truncation.js +121 -0
- package/dist/utils/width-truncation.js.map +1 -0
- package/dist/utils/word-wrapping.d.ts +4 -0
- package/dist/utils/word-wrapping.d.ts.map +1 -0
- package/dist/utils/word-wrapping.js +139 -0
- package/dist/utils/word-wrapping.js.map +1 -0
- package/dist/utils.d.ts +1 -84
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -1059
- package/dist/utils.js.map +1 -1
- package/dist/word-navigation.d.ts.map +1 -1
- package/dist/word-navigation.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { getKeybindings } from "../../../keybindings.js";
|
|
2
|
+
import { decodeKittyPrintable } from "../../../keys.js";
|
|
3
|
+
import { segmenter } from "../constants.js";
|
|
4
|
+
export function do_handleInput(self, data) {
|
|
5
|
+
// Handle bracketed paste mode
|
|
6
|
+
// Start of paste: \x1b[200~
|
|
7
|
+
// End of paste: \x1b[201~
|
|
8
|
+
// Check if we're starting a bracketed paste
|
|
9
|
+
if (data.includes("\x1b[200~")) {
|
|
10
|
+
self.isInPaste = true;
|
|
11
|
+
self.pasteBuffer = "";
|
|
12
|
+
data = data.replace("\x1b[200~", "");
|
|
13
|
+
}
|
|
14
|
+
// If we're in a paste, buffer the data
|
|
15
|
+
if (self.isInPaste) {
|
|
16
|
+
// Check if self chunk contains the end marker
|
|
17
|
+
self.pasteBuffer += data;
|
|
18
|
+
const endIndex = self.pasteBuffer.indexOf("\x1b[201~");
|
|
19
|
+
if (endIndex !== -1) {
|
|
20
|
+
// Extract the pasted content
|
|
21
|
+
const pasteContent = self.pasteBuffer.substring(0, endIndex);
|
|
22
|
+
// Process the complete paste
|
|
23
|
+
self.handlePaste(pasteContent);
|
|
24
|
+
// Reset paste state
|
|
25
|
+
self.isInPaste = false;
|
|
26
|
+
// Handle any remaining input after the paste marker
|
|
27
|
+
const remaining = self.pasteBuffer.substring(endIndex + 6); // 6 = length of \x1b[201~
|
|
28
|
+
self.pasteBuffer = "";
|
|
29
|
+
if (remaining) {
|
|
30
|
+
self.handleInput(remaining);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const kb = getKeybindings();
|
|
36
|
+
// Escape/Cancel
|
|
37
|
+
if (kb.matches(data, "tui.select.cancel")) {
|
|
38
|
+
if (self.onEscape)
|
|
39
|
+
self.onEscape();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// Undo
|
|
43
|
+
if (kb.matches(data, "tui.editor.undo")) {
|
|
44
|
+
self.undo();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Submit
|
|
48
|
+
if (kb.matches(data, "tui.input.submit") || data === "\n") {
|
|
49
|
+
if (self.onSubmit)
|
|
50
|
+
self.onSubmit(self.value);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// Deletion
|
|
54
|
+
if (kb.matches(data, "tui.editor.deleteCharBackward")) {
|
|
55
|
+
self.handleBackspace();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (kb.matches(data, "tui.editor.deleteCharForward")) {
|
|
59
|
+
self.handleForwardDelete();
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (kb.matches(data, "tui.editor.deleteWordBackward")) {
|
|
63
|
+
self.deleteWordBackwards();
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (kb.matches(data, "tui.editor.deleteWordForward")) {
|
|
67
|
+
self.deleteWordForward();
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (kb.matches(data, "tui.editor.deleteToLineStart")) {
|
|
71
|
+
self.deleteToLineStart();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (kb.matches(data, "tui.editor.deleteToLineEnd")) {
|
|
75
|
+
self.deleteToLineEnd();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
// Kill ring actions
|
|
79
|
+
if (kb.matches(data, "tui.editor.yank")) {
|
|
80
|
+
self.yank();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (kb.matches(data, "tui.editor.yankPop")) {
|
|
84
|
+
self.yankPop();
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
// Cursor movement
|
|
88
|
+
if (kb.matches(data, "tui.editor.cursorLeft")) {
|
|
89
|
+
self.lastAction = null;
|
|
90
|
+
if (self.cursor > 0) {
|
|
91
|
+
const beforeCursor = self.value.slice(0, self.cursor);
|
|
92
|
+
const graphemes = [...segmenter.segment(beforeCursor)];
|
|
93
|
+
const lastGrapheme = graphemes[graphemes.length - 1];
|
|
94
|
+
self.cursor -= lastGrapheme ? lastGrapheme.segment.length : 1;
|
|
95
|
+
}
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (kb.matches(data, "tui.editor.cursorRight")) {
|
|
99
|
+
self.lastAction = null;
|
|
100
|
+
if (self.cursor < self.value.length) {
|
|
101
|
+
const afterCursor = self.value.slice(self.cursor);
|
|
102
|
+
const graphemes = [...segmenter.segment(afterCursor)];
|
|
103
|
+
const firstGrapheme = graphemes[0];
|
|
104
|
+
self.cursor += firstGrapheme ? firstGrapheme.segment.length : 1;
|
|
105
|
+
}
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (kb.matches(data, "tui.editor.cursorLineStart")) {
|
|
109
|
+
self.lastAction = null;
|
|
110
|
+
self.cursor = 0;
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (kb.matches(data, "tui.editor.cursorLineEnd")) {
|
|
114
|
+
self.lastAction = null;
|
|
115
|
+
self.cursor = self.value.length;
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (kb.matches(data, "tui.editor.cursorWordLeft")) {
|
|
119
|
+
self.moveWordBackwards();
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (kb.matches(data, "tui.editor.cursorWordRight")) {
|
|
123
|
+
self.moveWordForwards();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// Kitty CSI-u printable character (e.g. \x1b[97u for 'a').
|
|
127
|
+
// Terminals with Kitty protocol flag 1 (disambiguate) send CSI-u for all keys,
|
|
128
|
+
// including plain printable characters. Decode before the control-char check
|
|
129
|
+
// since CSI-u sequences contain \x1b which would be rejected.
|
|
130
|
+
const kittyPrintable = decodeKittyPrintable(data);
|
|
131
|
+
if (kittyPrintable !== undefined) {
|
|
132
|
+
self.insertCharacter(kittyPrintable);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
// Regular character input - accept printable characters including Unicode,
|
|
136
|
+
// but reject control characters (C0: 0x00-0x1F, DEL: 0x7F, C1: 0x80-0x9F)
|
|
137
|
+
const hasControlChars = [...data].some((ch) => {
|
|
138
|
+
const code = ch.charCodeAt(0);
|
|
139
|
+
return code < 32 || code === 0x7f || (code >= 0x80 && code <= 0x9f);
|
|
140
|
+
});
|
|
141
|
+
if (!hasControlChars) {
|
|
142
|
+
self.insertCharacter(data);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=input-handling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-handling.js","sourceRoot":"","sources":["../../../../src/components/input/input-methods/input-handling.ts"],"names":[],"mappings":"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","sourcesContent":["import { getKeybindings } from \"../../../keybindings.ts\";\nimport { decodeKittyPrintable } from \"../../../keys.ts\";\nimport { segmenter } from \"../constants.ts\";\nimport type { Input } from \"../input.ts\";\n\nexport function do_handleInput(self: Input, data: string): void {\n // Handle bracketed paste mode\n // Start of paste: \\x1b[200~\n // End of paste: \\x1b[201~\n\n // Check if we're starting a bracketed paste\n if (data.includes(\"\\x1b[200~\")) {\n self.isInPaste = true;\n self.pasteBuffer = \"\";\n data = data.replace(\"\\x1b[200~\", \"\");\n }\n\n // If we're in a paste, buffer the data\n if (self.isInPaste) {\n // Check if self chunk contains the end marker\n self.pasteBuffer += data;\n\n const endIndex = self.pasteBuffer.indexOf(\"\\x1b[201~\");\n if (endIndex !== -1) {\n // Extract the pasted content\n const pasteContent = self.pasteBuffer.substring(0, endIndex);\n\n // Process the complete paste\n self.handlePaste(pasteContent);\n\n // Reset paste state\n self.isInPaste = false;\n\n // Handle any remaining input after the paste marker\n const remaining = self.pasteBuffer.substring(endIndex + 6); // 6 = length of \\x1b[201~\n self.pasteBuffer = \"\";\n if (remaining) {\n self.handleInput(remaining);\n }\n }\n return;\n }\n\n const kb = getKeybindings();\n\n // Escape/Cancel\n if (kb.matches(data, \"tui.select.cancel\")) {\n if (self.onEscape) self.onEscape();\n return;\n }\n\n // Undo\n if (kb.matches(data, \"tui.editor.undo\")) {\n self.undo();\n return;\n }\n\n // Submit\n if (kb.matches(data, \"tui.input.submit\") || data === \"\\n\") {\n if (self.onSubmit) self.onSubmit(self.value);\n return;\n }\n\n // Deletion\n if (kb.matches(data, \"tui.editor.deleteCharBackward\")) {\n self.handleBackspace();\n return;\n }\n\n if (kb.matches(data, \"tui.editor.deleteCharForward\")) {\n self.handleForwardDelete();\n return;\n }\n\n if (kb.matches(data, \"tui.editor.deleteWordBackward\")) {\n self.deleteWordBackwards();\n return;\n }\n\n if (kb.matches(data, \"tui.editor.deleteWordForward\")) {\n self.deleteWordForward();\n return;\n }\n\n if (kb.matches(data, \"tui.editor.deleteToLineStart\")) {\n self.deleteToLineStart();\n return;\n }\n\n if (kb.matches(data, \"tui.editor.deleteToLineEnd\")) {\n self.deleteToLineEnd();\n return;\n }\n\n // Kill ring actions\n if (kb.matches(data, \"tui.editor.yank\")) {\n self.yank();\n return;\n }\n if (kb.matches(data, \"tui.editor.yankPop\")) {\n self.yankPop();\n return;\n }\n\n // Cursor movement\n if (kb.matches(data, \"tui.editor.cursorLeft\")) {\n self.lastAction = null;\n if (self.cursor > 0) {\n const beforeCursor = self.value.slice(0, self.cursor);\n const graphemes = [...segmenter.segment(beforeCursor)];\n const lastGrapheme = graphemes[graphemes.length - 1];\n self.cursor -= lastGrapheme ? lastGrapheme.segment.length : 1;\n }\n return;\n }\n\n if (kb.matches(data, \"tui.editor.cursorRight\")) {\n self.lastAction = null;\n if (self.cursor < self.value.length) {\n const afterCursor = self.value.slice(self.cursor);\n const graphemes = [...segmenter.segment(afterCursor)];\n const firstGrapheme = graphemes[0];\n self.cursor += firstGrapheme ? firstGrapheme.segment.length : 1;\n }\n return;\n }\n\n if (kb.matches(data, \"tui.editor.cursorLineStart\")) {\n self.lastAction = null;\n self.cursor = 0;\n return;\n }\n\n if (kb.matches(data, \"tui.editor.cursorLineEnd\")) {\n self.lastAction = null;\n self.cursor = self.value.length;\n return;\n }\n\n if (kb.matches(data, \"tui.editor.cursorWordLeft\")) {\n self.moveWordBackwards();\n return;\n }\n\n if (kb.matches(data, \"tui.editor.cursorWordRight\")) {\n self.moveWordForwards();\n return;\n }\n\n // Kitty CSI-u printable character (e.g. \\x1b[97u for 'a').\n // Terminals with Kitty protocol flag 1 (disambiguate) send CSI-u for all keys,\n // including plain printable characters. Decode before the control-char check\n // since CSI-u sequences contain \\x1b which would be rejected.\n const kittyPrintable = decodeKittyPrintable(data);\n if (kittyPrintable !== undefined) {\n self.insertCharacter(kittyPrintable);\n return;\n }\n\n // Regular character input - accept printable characters including Unicode,\n // but reject control characters (C0: 0x00-0x1F, DEL: 0x7F, C1: 0x80-0x9F)\n const hasControlChars = [...data].some((ch) => {\n const code = ch.charCodeAt(0);\n return code < 32 || code === 0x7f || (code >= 0x80 && code <= 0x9f);\n });\n if (!hasControlChars) {\n self.insertCharacter(data);\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../src/components/input/input-methods/render.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,wBAAgB,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAsE9D","sourcesContent":["import { CURSOR_MARKER } from \"../../../tui.ts\";\nimport { sliceByColumn, visibleWidth } from \"../../../utils.ts\";\nimport { segmenter } from \"../constants.ts\";\nimport type { Input } from \"../input.ts\";\n\nexport function do_render(self: Input, width: number): string[] {\n // Calculate visible window\n const prompt = \"> \";\n const availableWidth = width - prompt.length;\n\n if (availableWidth <= 0) {\n return [prompt];\n }\n\n let visibleText = \"\";\n let cursorDisplay = self.cursor;\n const totalWidth = visibleWidth(self.value);\n\n if (totalWidth < availableWidth) {\n // Everything fits (leave room for cursor at end)\n visibleText = self.value;\n } else {\n // Need horizontal scrolling - use edge-based scrolling to avoid jitter\n const scrollWidth = self.cursor === self.value.length ? availableWidth - 1 : availableWidth;\n const cursorCol = visibleWidth(self.value.slice(0, self.cursor));\n const scrollMargin = Math.min(5, Math.floor(scrollWidth / 4));\n\n if (scrollWidth > 0) {\n // Adjust scroll offset only when cursor would go off-screen\n if (cursorCol < self.scrollOffset + scrollMargin) {\n // Cursor too far left — scroll left\n self.scrollOffset = Math.max(0, cursorCol - scrollMargin);\n } else if (cursorCol >= self.scrollOffset + scrollWidth - scrollMargin) {\n // Cursor too far right — scroll right\n self.scrollOffset = Math.max(0, cursorCol - scrollWidth + scrollMargin + 1);\n }\n // Clamp scroll offset to valid range\n self.scrollOffset = Math.min(self.scrollOffset, Math.max(0, totalWidth - scrollWidth));\n\n visibleText = sliceByColumn(self.value, self.scrollOffset, scrollWidth, true);\n const beforeCursor = sliceByColumn(\n self.value,\n self.scrollOffset,\n Math.max(0, cursorCol - self.scrollOffset),\n true,\n );\n cursorDisplay = beforeCursor.length;\n } else {\n visibleText = \"\";\n cursorDisplay = 0;\n }\n }\n\n // Build line with fake cursor\n // Insert cursor character at cursor position\n const graphemes = [...segmenter.segment(visibleText.slice(cursorDisplay))];\n const cursorGrapheme = graphemes[0];\n\n const beforeCursor = visibleText.slice(0, cursorDisplay);\n const atCursor = cursorGrapheme?.segment ?? \" \"; // Character at cursor, or space if at end\n const afterCursor = visibleText.slice(cursorDisplay + atCursor.length);\n\n // Hardware cursor marker (zero-width, emitted before fake cursor for IME positioning)\n const marker = self.focused ? CURSOR_MARKER : \"\";\n\n // Use inverse video to show cursor\n const cursorChar = `\\x1b[7m${atCursor}\\x1b[27m`; // ESC[7m = reverse video, ESC[27m = normal\n const textWithCursor = beforeCursor + marker + cursorChar + afterCursor;\n\n // Calculate visual width\n const visualLength = visibleWidth(textWithCursor);\n const padding = \" \".repeat(Math.max(0, availableWidth - visualLength));\n const line = prompt + textWithCursor + padding;\n\n return [line];\n}\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { CURSOR_MARKER } from "../../../tui.js";
|
|
2
|
+
import { sliceByColumn, visibleWidth } from "../../../utils.js";
|
|
3
|
+
import { segmenter } from "../constants.js";
|
|
4
|
+
export function do_render(self, width) {
|
|
5
|
+
// Calculate visible window
|
|
6
|
+
const prompt = "> ";
|
|
7
|
+
const availableWidth = width - prompt.length;
|
|
8
|
+
if (availableWidth <= 0) {
|
|
9
|
+
return [prompt];
|
|
10
|
+
}
|
|
11
|
+
let visibleText = "";
|
|
12
|
+
let cursorDisplay = self.cursor;
|
|
13
|
+
const totalWidth = visibleWidth(self.value);
|
|
14
|
+
if (totalWidth < availableWidth) {
|
|
15
|
+
// Everything fits (leave room for cursor at end)
|
|
16
|
+
visibleText = self.value;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
// Need horizontal scrolling - use edge-based scrolling to avoid jitter
|
|
20
|
+
const scrollWidth = self.cursor === self.value.length ? availableWidth - 1 : availableWidth;
|
|
21
|
+
const cursorCol = visibleWidth(self.value.slice(0, self.cursor));
|
|
22
|
+
const scrollMargin = Math.min(5, Math.floor(scrollWidth / 4));
|
|
23
|
+
if (scrollWidth > 0) {
|
|
24
|
+
// Adjust scroll offset only when cursor would go off-screen
|
|
25
|
+
if (cursorCol < self.scrollOffset + scrollMargin) {
|
|
26
|
+
// Cursor too far left — scroll left
|
|
27
|
+
self.scrollOffset = Math.max(0, cursorCol - scrollMargin);
|
|
28
|
+
}
|
|
29
|
+
else if (cursorCol >= self.scrollOffset + scrollWidth - scrollMargin) {
|
|
30
|
+
// Cursor too far right — scroll right
|
|
31
|
+
self.scrollOffset = Math.max(0, cursorCol - scrollWidth + scrollMargin + 1);
|
|
32
|
+
}
|
|
33
|
+
// Clamp scroll offset to valid range
|
|
34
|
+
self.scrollOffset = Math.min(self.scrollOffset, Math.max(0, totalWidth - scrollWidth));
|
|
35
|
+
visibleText = sliceByColumn(self.value, self.scrollOffset, scrollWidth, true);
|
|
36
|
+
const beforeCursor = sliceByColumn(self.value, self.scrollOffset, Math.max(0, cursorCol - self.scrollOffset), true);
|
|
37
|
+
cursorDisplay = beforeCursor.length;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
visibleText = "";
|
|
41
|
+
cursorDisplay = 0;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Build line with fake cursor
|
|
45
|
+
// Insert cursor character at cursor position
|
|
46
|
+
const graphemes = [...segmenter.segment(visibleText.slice(cursorDisplay))];
|
|
47
|
+
const cursorGrapheme = graphemes[0];
|
|
48
|
+
const beforeCursor = visibleText.slice(0, cursorDisplay);
|
|
49
|
+
const atCursor = cursorGrapheme?.segment ?? " "; // Character at cursor, or space if at end
|
|
50
|
+
const afterCursor = visibleText.slice(cursorDisplay + atCursor.length);
|
|
51
|
+
// Hardware cursor marker (zero-width, emitted before fake cursor for IME positioning)
|
|
52
|
+
const marker = self.focused ? CURSOR_MARKER : "";
|
|
53
|
+
// Use inverse video to show cursor
|
|
54
|
+
const cursorChar = `\x1b[7m${atCursor}\x1b[27m`; // ESC[7m = reverse video, ESC[27m = normal
|
|
55
|
+
const textWithCursor = beforeCursor + marker + cursorChar + afterCursor;
|
|
56
|
+
// Calculate visual width
|
|
57
|
+
const visualLength = visibleWidth(textWithCursor);
|
|
58
|
+
const padding = " ".repeat(Math.max(0, availableWidth - visualLength));
|
|
59
|
+
const line = prompt + textWithCursor + padding;
|
|
60
|
+
return [line];
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../../src/components/input/input-methods/render.ts"],"names":[],"mappings":"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","sourcesContent":["import { CURSOR_MARKER } from \"../../../tui.ts\";\nimport { sliceByColumn, visibleWidth } from \"../../../utils.ts\";\nimport { segmenter } from \"../constants.ts\";\nimport type { Input } from \"../input.ts\";\n\nexport function do_render(self: Input, width: number): string[] {\n // Calculate visible window\n const prompt = \"> \";\n const availableWidth = width - prompt.length;\n\n if (availableWidth <= 0) {\n return [prompt];\n }\n\n let visibleText = \"\";\n let cursorDisplay = self.cursor;\n const totalWidth = visibleWidth(self.value);\n\n if (totalWidth < availableWidth) {\n // Everything fits (leave room for cursor at end)\n visibleText = self.value;\n } else {\n // Need horizontal scrolling - use edge-based scrolling to avoid jitter\n const scrollWidth = self.cursor === self.value.length ? availableWidth - 1 : availableWidth;\n const cursorCol = visibleWidth(self.value.slice(0, self.cursor));\n const scrollMargin = Math.min(5, Math.floor(scrollWidth / 4));\n\n if (scrollWidth > 0) {\n // Adjust scroll offset only when cursor would go off-screen\n if (cursorCol < self.scrollOffset + scrollMargin) {\n // Cursor too far left — scroll left\n self.scrollOffset = Math.max(0, cursorCol - scrollMargin);\n } else if (cursorCol >= self.scrollOffset + scrollWidth - scrollMargin) {\n // Cursor too far right — scroll right\n self.scrollOffset = Math.max(0, cursorCol - scrollWidth + scrollMargin + 1);\n }\n // Clamp scroll offset to valid range\n self.scrollOffset = Math.min(self.scrollOffset, Math.max(0, totalWidth - scrollWidth));\n\n visibleText = sliceByColumn(self.value, self.scrollOffset, scrollWidth, true);\n const beforeCursor = sliceByColumn(\n self.value,\n self.scrollOffset,\n Math.max(0, cursorCol - self.scrollOffset),\n true,\n );\n cursorDisplay = beforeCursor.length;\n } else {\n visibleText = \"\";\n cursorDisplay = 0;\n }\n }\n\n // Build line with fake cursor\n // Insert cursor character at cursor position\n const graphemes = [...segmenter.segment(visibleText.slice(cursorDisplay))];\n const cursorGrapheme = graphemes[0];\n\n const beforeCursor = visibleText.slice(0, cursorDisplay);\n const atCursor = cursorGrapheme?.segment ?? \" \"; // Character at cursor, or space if at end\n const afterCursor = visibleText.slice(cursorDisplay + atCursor.length);\n\n // Hardware cursor marker (zero-width, emitted before fake cursor for IME positioning)\n const marker = self.focused ? CURSOR_MARKER : \"\";\n\n // Use inverse video to show cursor\n const cursorChar = `\\x1b[7m${atCursor}\\x1b[27m`; // ESC[7m = reverse video, ESC[27m = normal\n const textWithCursor = beforeCursor + marker + cursorChar + afterCursor;\n\n // Calculate visual width\n const visualLength = visibleWidth(textWithCursor);\n const padding = \" \".repeat(Math.max(0, availableWidth - visualLength));\n const line = prompt + textWithCursor + padding;\n\n return [line];\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Input } from "../input.ts";
|
|
2
|
+
export declare function do_insertCharacter(self: Input, char: string): void;
|
|
3
|
+
export declare function do_handleBackspace(self: Input): void;
|
|
4
|
+
export declare function do_handleForwardDelete(self: Input): void;
|
|
5
|
+
export declare function do_deleteToLineStart(self: Input): void;
|
|
6
|
+
export declare function do_deleteToLineEnd(self: Input): void;
|
|
7
|
+
export declare function do_deleteWordBackwards(self: Input): void;
|
|
8
|
+
export declare function do_deleteWordForward(self: Input): void;
|
|
9
|
+
export declare function do_yank(self: Input): void;
|
|
10
|
+
export declare function do_yankPop(self: Input): void;
|
|
11
|
+
export declare function do_pushUndo(self: Input): void;
|
|
12
|
+
export declare function do_undo(self: Input): void;
|
|
13
|
+
export declare function do_moveWordBackwards(self: Input): void;
|
|
14
|
+
export declare function do_moveWordForwards(self: Input): void;
|
|
15
|
+
export declare function do_handlePaste(self: Input, pastedText: string): void;
|
|
16
|
+
export declare function do_invalidate(_self: Input): void;
|
|
17
|
+
//# sourceMappingURL=text-editing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-editing.d.ts","sourceRoot":"","sources":["../../../../src/components/input/input-methods/text-editing.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CASlE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAWpD;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAUxD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAQtD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAOpD;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAmBxD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAkBtD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CASzC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAgB5C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAE7C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAMzC;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAItD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAIrD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAUpE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAEhD","sourcesContent":["import { isWhitespaceChar } from \"../../../utils.ts\";\nimport { findWordBackward, findWordForward } from \"../../../word-navigation.ts\";\nimport { segmenter } from \"../constants.ts\";\nimport type { Input } from \"../input.ts\";\n\nexport function do_insertCharacter(self: Input, char: string): void {\n // Undo coalescing: consecutive word chars coalesce into one undo unit\n if (isWhitespaceChar(char) || self.lastAction !== \"type-word\") {\n self.pushUndo();\n }\n self.lastAction = \"type-word\";\n\n self.value = self.value.slice(0, self.cursor) + char + self.value.slice(self.cursor);\n self.cursor += char.length;\n}\n\nexport function do_handleBackspace(self: Input): void {\n self.lastAction = null;\n if (self.cursor > 0) {\n self.pushUndo();\n const beforeCursor = self.value.slice(0, self.cursor);\n const graphemes = [...segmenter.segment(beforeCursor)];\n const lastGrapheme = graphemes[graphemes.length - 1];\n const graphemeLength = lastGrapheme ? lastGrapheme.segment.length : 1;\n self.value = self.value.slice(0, self.cursor - graphemeLength) + self.value.slice(self.cursor);\n self.cursor -= graphemeLength;\n }\n}\n\nexport function do_handleForwardDelete(self: Input): void {\n self.lastAction = null;\n if (self.cursor < self.value.length) {\n self.pushUndo();\n const afterCursor = self.value.slice(self.cursor);\n const graphemes = [...segmenter.segment(afterCursor)];\n const firstGrapheme = graphemes[0];\n const graphemeLength = firstGrapheme ? firstGrapheme.segment.length : 1;\n self.value = self.value.slice(0, self.cursor) + self.value.slice(self.cursor + graphemeLength);\n }\n}\n\nexport function do_deleteToLineStart(self: Input): void {\n if (self.cursor === 0) return;\n self.pushUndo();\n const deletedText = self.value.slice(0, self.cursor);\n self.killRing.push(deletedText, { prepend: true, accumulate: self.lastAction === \"kill\" });\n self.lastAction = \"kill\";\n self.value = self.value.slice(self.cursor);\n self.cursor = 0;\n}\n\nexport function do_deleteToLineEnd(self: Input): void {\n if (self.cursor >= self.value.length) return;\n self.pushUndo();\n const deletedText = self.value.slice(self.cursor);\n self.killRing.push(deletedText, { prepend: false, accumulate: self.lastAction === \"kill\" });\n self.lastAction = \"kill\";\n self.value = self.value.slice(0, self.cursor);\n}\n\nexport function do_deleteWordBackwards(self: Input): void {\n if (self.cursor === 0) return;\n\n // Save lastAction before cursor movement (moveWordBackwards resets it)\n const wasKill = self.lastAction === \"kill\";\n\n self.pushUndo();\n\n const oldCursor = self.cursor;\n self.moveWordBackwards();\n const deleteFrom = self.cursor;\n self.cursor = oldCursor;\n\n const deletedText = self.value.slice(deleteFrom, self.cursor);\n self.killRing.push(deletedText, { prepend: true, accumulate: wasKill });\n self.lastAction = \"kill\";\n\n self.value = self.value.slice(0, deleteFrom) + self.value.slice(self.cursor);\n self.cursor = deleteFrom;\n}\n\nexport function do_deleteWordForward(self: Input): void {\n if (self.cursor >= self.value.length) return;\n\n // Save lastAction before cursor movement (moveWordForwards resets it)\n const wasKill = self.lastAction === \"kill\";\n\n self.pushUndo();\n\n const oldCursor = self.cursor;\n self.moveWordForwards();\n const deleteTo = self.cursor;\n self.cursor = oldCursor;\n\n const deletedText = self.value.slice(self.cursor, deleteTo);\n self.killRing.push(deletedText, { prepend: false, accumulate: wasKill });\n self.lastAction = \"kill\";\n\n self.value = self.value.slice(0, self.cursor) + self.value.slice(deleteTo);\n}\n\nexport function do_yank(self: Input): void {\n const text = self.killRing.peek();\n if (!text) return;\n\n self.pushUndo();\n\n self.value = self.value.slice(0, self.cursor) + text + self.value.slice(self.cursor);\n self.cursor += text.length;\n self.lastAction = \"yank\";\n}\n\nexport function do_yankPop(self: Input): void {\n if (self.lastAction !== \"yank\" || self.killRing.length <= 1) return;\n\n self.pushUndo();\n\n // Delete the previously yanked text (still at end of ring before rotation)\n const prevText = self.killRing.peek() || \"\";\n self.value = self.value.slice(0, self.cursor - prevText.length) + self.value.slice(self.cursor);\n self.cursor -= prevText.length;\n\n // Rotate and insert new entry\n self.killRing.rotate();\n const text = self.killRing.peek() || \"\";\n self.value = self.value.slice(0, self.cursor) + text + self.value.slice(self.cursor);\n self.cursor += text.length;\n self.lastAction = \"yank\";\n}\n\nexport function do_pushUndo(self: Input): void {\n self.undoStack.push({ value: self.value, cursor: self.cursor });\n}\n\nexport function do_undo(self: Input): void {\n const snapshot = self.undoStack.pop();\n if (!snapshot) return;\n self.value = snapshot.value;\n self.cursor = snapshot.cursor;\n self.lastAction = null;\n}\n\nexport function do_moveWordBackwards(self: Input): void {\n if (self.cursor === 0) return;\n self.lastAction = null;\n self.cursor = findWordBackward(self.value, self.cursor);\n}\n\nexport function do_moveWordForwards(self: Input): void {\n if (self.cursor >= self.value.length) return;\n self.lastAction = null;\n self.cursor = findWordForward(self.value, self.cursor);\n}\n\nexport function do_handlePaste(self: Input, pastedText: string): void {\n self.lastAction = null;\n self.pushUndo();\n\n // Clean the pasted text - remove newlines and carriage returns\n const cleanText = pastedText.replace(/\\r\\n/g, \"\").replace(/\\r/g, \"\").replace(/\\n/g, \"\").replace(/\\t/g, \" \");\n\n // Insert at cursor position\n self.value = self.value.slice(0, self.cursor) + cleanText + self.value.slice(self.cursor);\n self.cursor += cleanText.length;\n}\n\nexport function do_invalidate(_self: Input): void {\n // No cached state to invalidate currently\n}\n"]}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { isWhitespaceChar } from "../../../utils.js";
|
|
2
|
+
import { findWordBackward, findWordForward } from "../../../word-navigation.js";
|
|
3
|
+
import { segmenter } from "../constants.js";
|
|
4
|
+
export function do_insertCharacter(self, char) {
|
|
5
|
+
// Undo coalescing: consecutive word chars coalesce into one undo unit
|
|
6
|
+
if (isWhitespaceChar(char) || self.lastAction !== "type-word") {
|
|
7
|
+
self.pushUndo();
|
|
8
|
+
}
|
|
9
|
+
self.lastAction = "type-word";
|
|
10
|
+
self.value = self.value.slice(0, self.cursor) + char + self.value.slice(self.cursor);
|
|
11
|
+
self.cursor += char.length;
|
|
12
|
+
}
|
|
13
|
+
export function do_handleBackspace(self) {
|
|
14
|
+
self.lastAction = null;
|
|
15
|
+
if (self.cursor > 0) {
|
|
16
|
+
self.pushUndo();
|
|
17
|
+
const beforeCursor = self.value.slice(0, self.cursor);
|
|
18
|
+
const graphemes = [...segmenter.segment(beforeCursor)];
|
|
19
|
+
const lastGrapheme = graphemes[graphemes.length - 1];
|
|
20
|
+
const graphemeLength = lastGrapheme ? lastGrapheme.segment.length : 1;
|
|
21
|
+
self.value = self.value.slice(0, self.cursor - graphemeLength) + self.value.slice(self.cursor);
|
|
22
|
+
self.cursor -= graphemeLength;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function do_handleForwardDelete(self) {
|
|
26
|
+
self.lastAction = null;
|
|
27
|
+
if (self.cursor < self.value.length) {
|
|
28
|
+
self.pushUndo();
|
|
29
|
+
const afterCursor = self.value.slice(self.cursor);
|
|
30
|
+
const graphemes = [...segmenter.segment(afterCursor)];
|
|
31
|
+
const firstGrapheme = graphemes[0];
|
|
32
|
+
const graphemeLength = firstGrapheme ? firstGrapheme.segment.length : 1;
|
|
33
|
+
self.value = self.value.slice(0, self.cursor) + self.value.slice(self.cursor + graphemeLength);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function do_deleteToLineStart(self) {
|
|
37
|
+
if (self.cursor === 0)
|
|
38
|
+
return;
|
|
39
|
+
self.pushUndo();
|
|
40
|
+
const deletedText = self.value.slice(0, self.cursor);
|
|
41
|
+
self.killRing.push(deletedText, { prepend: true, accumulate: self.lastAction === "kill" });
|
|
42
|
+
self.lastAction = "kill";
|
|
43
|
+
self.value = self.value.slice(self.cursor);
|
|
44
|
+
self.cursor = 0;
|
|
45
|
+
}
|
|
46
|
+
export function do_deleteToLineEnd(self) {
|
|
47
|
+
if (self.cursor >= self.value.length)
|
|
48
|
+
return;
|
|
49
|
+
self.pushUndo();
|
|
50
|
+
const deletedText = self.value.slice(self.cursor);
|
|
51
|
+
self.killRing.push(deletedText, { prepend: false, accumulate: self.lastAction === "kill" });
|
|
52
|
+
self.lastAction = "kill";
|
|
53
|
+
self.value = self.value.slice(0, self.cursor);
|
|
54
|
+
}
|
|
55
|
+
export function do_deleteWordBackwards(self) {
|
|
56
|
+
if (self.cursor === 0)
|
|
57
|
+
return;
|
|
58
|
+
// Save lastAction before cursor movement (moveWordBackwards resets it)
|
|
59
|
+
const wasKill = self.lastAction === "kill";
|
|
60
|
+
self.pushUndo();
|
|
61
|
+
const oldCursor = self.cursor;
|
|
62
|
+
self.moveWordBackwards();
|
|
63
|
+
const deleteFrom = self.cursor;
|
|
64
|
+
self.cursor = oldCursor;
|
|
65
|
+
const deletedText = self.value.slice(deleteFrom, self.cursor);
|
|
66
|
+
self.killRing.push(deletedText, { prepend: true, accumulate: wasKill });
|
|
67
|
+
self.lastAction = "kill";
|
|
68
|
+
self.value = self.value.slice(0, deleteFrom) + self.value.slice(self.cursor);
|
|
69
|
+
self.cursor = deleteFrom;
|
|
70
|
+
}
|
|
71
|
+
export function do_deleteWordForward(self) {
|
|
72
|
+
if (self.cursor >= self.value.length)
|
|
73
|
+
return;
|
|
74
|
+
// Save lastAction before cursor movement (moveWordForwards resets it)
|
|
75
|
+
const wasKill = self.lastAction === "kill";
|
|
76
|
+
self.pushUndo();
|
|
77
|
+
const oldCursor = self.cursor;
|
|
78
|
+
self.moveWordForwards();
|
|
79
|
+
const deleteTo = self.cursor;
|
|
80
|
+
self.cursor = oldCursor;
|
|
81
|
+
const deletedText = self.value.slice(self.cursor, deleteTo);
|
|
82
|
+
self.killRing.push(deletedText, { prepend: false, accumulate: wasKill });
|
|
83
|
+
self.lastAction = "kill";
|
|
84
|
+
self.value = self.value.slice(0, self.cursor) + self.value.slice(deleteTo);
|
|
85
|
+
}
|
|
86
|
+
export function do_yank(self) {
|
|
87
|
+
const text = self.killRing.peek();
|
|
88
|
+
if (!text)
|
|
89
|
+
return;
|
|
90
|
+
self.pushUndo();
|
|
91
|
+
self.value = self.value.slice(0, self.cursor) + text + self.value.slice(self.cursor);
|
|
92
|
+
self.cursor += text.length;
|
|
93
|
+
self.lastAction = "yank";
|
|
94
|
+
}
|
|
95
|
+
export function do_yankPop(self) {
|
|
96
|
+
if (self.lastAction !== "yank" || self.killRing.length <= 1)
|
|
97
|
+
return;
|
|
98
|
+
self.pushUndo();
|
|
99
|
+
// Delete the previously yanked text (still at end of ring before rotation)
|
|
100
|
+
const prevText = self.killRing.peek() || "";
|
|
101
|
+
self.value = self.value.slice(0, self.cursor - prevText.length) + self.value.slice(self.cursor);
|
|
102
|
+
self.cursor -= prevText.length;
|
|
103
|
+
// Rotate and insert new entry
|
|
104
|
+
self.killRing.rotate();
|
|
105
|
+
const text = self.killRing.peek() || "";
|
|
106
|
+
self.value = self.value.slice(0, self.cursor) + text + self.value.slice(self.cursor);
|
|
107
|
+
self.cursor += text.length;
|
|
108
|
+
self.lastAction = "yank";
|
|
109
|
+
}
|
|
110
|
+
export function do_pushUndo(self) {
|
|
111
|
+
self.undoStack.push({ value: self.value, cursor: self.cursor });
|
|
112
|
+
}
|
|
113
|
+
export function do_undo(self) {
|
|
114
|
+
const snapshot = self.undoStack.pop();
|
|
115
|
+
if (!snapshot)
|
|
116
|
+
return;
|
|
117
|
+
self.value = snapshot.value;
|
|
118
|
+
self.cursor = snapshot.cursor;
|
|
119
|
+
self.lastAction = null;
|
|
120
|
+
}
|
|
121
|
+
export function do_moveWordBackwards(self) {
|
|
122
|
+
if (self.cursor === 0)
|
|
123
|
+
return;
|
|
124
|
+
self.lastAction = null;
|
|
125
|
+
self.cursor = findWordBackward(self.value, self.cursor);
|
|
126
|
+
}
|
|
127
|
+
export function do_moveWordForwards(self) {
|
|
128
|
+
if (self.cursor >= self.value.length)
|
|
129
|
+
return;
|
|
130
|
+
self.lastAction = null;
|
|
131
|
+
self.cursor = findWordForward(self.value, self.cursor);
|
|
132
|
+
}
|
|
133
|
+
export function do_handlePaste(self, pastedText) {
|
|
134
|
+
self.lastAction = null;
|
|
135
|
+
self.pushUndo();
|
|
136
|
+
// Clean the pasted text - remove newlines and carriage returns
|
|
137
|
+
const cleanText = pastedText.replace(/\r\n/g, "").replace(/\r/g, "").replace(/\n/g, "").replace(/\t/g, " ");
|
|
138
|
+
// Insert at cursor position
|
|
139
|
+
self.value = self.value.slice(0, self.cursor) + cleanText + self.value.slice(self.cursor);
|
|
140
|
+
self.cursor += cleanText.length;
|
|
141
|
+
}
|
|
142
|
+
export function do_invalidate(_self) {
|
|
143
|
+
// No cached state to invalidate currently
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=text-editing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-editing.js","sourceRoot":"","sources":["../../../../src/components/input/input-methods/text-editing.ts"],"names":[],"mappings":"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","sourcesContent":["import { isWhitespaceChar } from \"../../../utils.ts\";\nimport { findWordBackward, findWordForward } from \"../../../word-navigation.ts\";\nimport { segmenter } from \"../constants.ts\";\nimport type { Input } from \"../input.ts\";\n\nexport function do_insertCharacter(self: Input, char: string): void {\n // Undo coalescing: consecutive word chars coalesce into one undo unit\n if (isWhitespaceChar(char) || self.lastAction !== \"type-word\") {\n self.pushUndo();\n }\n self.lastAction = \"type-word\";\n\n self.value = self.value.slice(0, self.cursor) + char + self.value.slice(self.cursor);\n self.cursor += char.length;\n}\n\nexport function do_handleBackspace(self: Input): void {\n self.lastAction = null;\n if (self.cursor > 0) {\n self.pushUndo();\n const beforeCursor = self.value.slice(0, self.cursor);\n const graphemes = [...segmenter.segment(beforeCursor)];\n const lastGrapheme = graphemes[graphemes.length - 1];\n const graphemeLength = lastGrapheme ? lastGrapheme.segment.length : 1;\n self.value = self.value.slice(0, self.cursor - graphemeLength) + self.value.slice(self.cursor);\n self.cursor -= graphemeLength;\n }\n}\n\nexport function do_handleForwardDelete(self: Input): void {\n self.lastAction = null;\n if (self.cursor < self.value.length) {\n self.pushUndo();\n const afterCursor = self.value.slice(self.cursor);\n const graphemes = [...segmenter.segment(afterCursor)];\n const firstGrapheme = graphemes[0];\n const graphemeLength = firstGrapheme ? firstGrapheme.segment.length : 1;\n self.value = self.value.slice(0, self.cursor) + self.value.slice(self.cursor + graphemeLength);\n }\n}\n\nexport function do_deleteToLineStart(self: Input): void {\n if (self.cursor === 0) return;\n self.pushUndo();\n const deletedText = self.value.slice(0, self.cursor);\n self.killRing.push(deletedText, { prepend: true, accumulate: self.lastAction === \"kill\" });\n self.lastAction = \"kill\";\n self.value = self.value.slice(self.cursor);\n self.cursor = 0;\n}\n\nexport function do_deleteToLineEnd(self: Input): void {\n if (self.cursor >= self.value.length) return;\n self.pushUndo();\n const deletedText = self.value.slice(self.cursor);\n self.killRing.push(deletedText, { prepend: false, accumulate: self.lastAction === \"kill\" });\n self.lastAction = \"kill\";\n self.value = self.value.slice(0, self.cursor);\n}\n\nexport function do_deleteWordBackwards(self: Input): void {\n if (self.cursor === 0) return;\n\n // Save lastAction before cursor movement (moveWordBackwards resets it)\n const wasKill = self.lastAction === \"kill\";\n\n self.pushUndo();\n\n const oldCursor = self.cursor;\n self.moveWordBackwards();\n const deleteFrom = self.cursor;\n self.cursor = oldCursor;\n\n const deletedText = self.value.slice(deleteFrom, self.cursor);\n self.killRing.push(deletedText, { prepend: true, accumulate: wasKill });\n self.lastAction = \"kill\";\n\n self.value = self.value.slice(0, deleteFrom) + self.value.slice(self.cursor);\n self.cursor = deleteFrom;\n}\n\nexport function do_deleteWordForward(self: Input): void {\n if (self.cursor >= self.value.length) return;\n\n // Save lastAction before cursor movement (moveWordForwards resets it)\n const wasKill = self.lastAction === \"kill\";\n\n self.pushUndo();\n\n const oldCursor = self.cursor;\n self.moveWordForwards();\n const deleteTo = self.cursor;\n self.cursor = oldCursor;\n\n const deletedText = self.value.slice(self.cursor, deleteTo);\n self.killRing.push(deletedText, { prepend: false, accumulate: wasKill });\n self.lastAction = \"kill\";\n\n self.value = self.value.slice(0, self.cursor) + self.value.slice(deleteTo);\n}\n\nexport function do_yank(self: Input): void {\n const text = self.killRing.peek();\n if (!text) return;\n\n self.pushUndo();\n\n self.value = self.value.slice(0, self.cursor) + text + self.value.slice(self.cursor);\n self.cursor += text.length;\n self.lastAction = \"yank\";\n}\n\nexport function do_yankPop(self: Input): void {\n if (self.lastAction !== \"yank\" || self.killRing.length <= 1) return;\n\n self.pushUndo();\n\n // Delete the previously yanked text (still at end of ring before rotation)\n const prevText = self.killRing.peek() || \"\";\n self.value = self.value.slice(0, self.cursor - prevText.length) + self.value.slice(self.cursor);\n self.cursor -= prevText.length;\n\n // Rotate and insert new entry\n self.killRing.rotate();\n const text = self.killRing.peek() || \"\";\n self.value = self.value.slice(0, self.cursor) + text + self.value.slice(self.cursor);\n self.cursor += text.length;\n self.lastAction = \"yank\";\n}\n\nexport function do_pushUndo(self: Input): void {\n self.undoStack.push({ value: self.value, cursor: self.cursor });\n}\n\nexport function do_undo(self: Input): void {\n const snapshot = self.undoStack.pop();\n if (!snapshot) return;\n self.value = snapshot.value;\n self.cursor = snapshot.cursor;\n self.lastAction = null;\n}\n\nexport function do_moveWordBackwards(self: Input): void {\n if (self.cursor === 0) return;\n self.lastAction = null;\n self.cursor = findWordBackward(self.value, self.cursor);\n}\n\nexport function do_moveWordForwards(self: Input): void {\n if (self.cursor >= self.value.length) return;\n self.lastAction = null;\n self.cursor = findWordForward(self.value, self.cursor);\n}\n\nexport function do_handlePaste(self: Input, pastedText: string): void {\n self.lastAction = null;\n self.pushUndo();\n\n // Clean the pasted text - remove newlines and carriage returns\n const cleanText = pastedText.replace(/\\r\\n/g, \"\").replace(/\\r/g, \"\").replace(/\\n/g, \"\").replace(/\\t/g, \" \");\n\n // Insert at cursor position\n self.value = self.value.slice(0, self.cursor) + cleanText + self.value.slice(self.cursor);\n self.cursor += cleanText.length;\n}\n\nexport function do_invalidate(_self: Input): void {\n // No cached state to invalidate currently\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-access.d.ts","sourceRoot":"","sources":["../../../../src/components/input/input-methods/value-access.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAc5D","sourcesContent":["import { segmenter } from \"../constants.ts\";\nimport type { Input } from \"../input.ts\";\n\nexport function do_getValue(self: Input): string {\n return self.value;\n}\n\nexport function do_setValue(self: Input, value: string): void {\n self.value = value;\n self.cursor = Math.min(self.cursor, value.length);\n self.scrollOffset = 0;\n if (self.cursor > 0 && self.cursor < value.length) {\n let pos = 0;\n for (const { segment } of segmenter.segment(value)) {\n if (pos + segment.length > self.cursor) {\n self.cursor = pos;\n break;\n }\n pos += segment.length;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { segmenter } from "../constants.js";
|
|
2
|
+
export function do_getValue(self) {
|
|
3
|
+
return self.value;
|
|
4
|
+
}
|
|
5
|
+
export function do_setValue(self, value) {
|
|
6
|
+
self.value = value;
|
|
7
|
+
self.cursor = Math.min(self.cursor, value.length);
|
|
8
|
+
self.scrollOffset = 0;
|
|
9
|
+
if (self.cursor > 0 && self.cursor < value.length) {
|
|
10
|
+
let pos = 0;
|
|
11
|
+
for (const { segment } of segmenter.segment(value)) {
|
|
12
|
+
if (pos + segment.length > self.cursor) {
|
|
13
|
+
self.cursor = pos;
|
|
14
|
+
break;
|
|
15
|
+
}
|
|
16
|
+
pos += segment.length;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=value-access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-access.js","sourceRoot":"","sources":["../../../../src/components/input/input-methods/value-access.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,UAAU,WAAW,CAAC,IAAW,EAAU;IAC/C,OAAO,IAAI,CAAC,KAAK,CAAC;AAAA,CACnB;AAED,MAAM,UAAU,WAAW,CAAC,IAAW,EAAE,KAAa,EAAQ;IAC5D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACtB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAClD,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;gBAClB,MAAM;YACR,CAAC;YACD,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;QACxB,CAAC;IACH,CAAC;AAAA,CACF","sourcesContent":["import { segmenter } from \"../constants.ts\";\nimport type { Input } from \"../input.ts\";\n\nexport function do_getValue(self: Input): string {\n return self.value;\n}\n\nexport function do_setValue(self: Input, value: string): void {\n self.value = value;\n self.cursor = Math.min(self.cursor, value.length);\n self.scrollOffset = 0;\n if (self.cursor > 0 && self.cursor < value.length) {\n let pos = 0;\n for (const { segment } of segmenter.segment(value)) {\n if (pos + segment.length > self.cursor) {\n self.cursor = pos;\n break;\n }\n pos += segment.length;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { KillRing } from "../../kill-ring.ts";
|
|
2
|
+
import type { Component, Focusable } from "../../tui.ts";
|
|
3
|
+
import { UndoStack } from "../../undo-stack.ts";
|
|
4
|
+
import type { InputState } from "./types.ts";
|
|
5
|
+
export declare class Input implements Component, Focusable {
|
|
6
|
+
value: string;
|
|
7
|
+
cursor: number;
|
|
8
|
+
scrollOffset: number;
|
|
9
|
+
onSubmit?: (value: string) => void;
|
|
10
|
+
onEscape?: () => void;
|
|
11
|
+
focused: boolean;
|
|
12
|
+
pasteBuffer: string;
|
|
13
|
+
isInPaste: boolean;
|
|
14
|
+
killRing: KillRing;
|
|
15
|
+
lastAction: "kill" | "yank" | "type-word" | null;
|
|
16
|
+
undoStack: UndoStack<InputState>;
|
|
17
|
+
getValue(): string;
|
|
18
|
+
setValue(value: string): void;
|
|
19
|
+
handleInput(data: string): void;
|
|
20
|
+
insertCharacter(char: string): void;
|
|
21
|
+
handleBackspace(): void;
|
|
22
|
+
handleForwardDelete(): void;
|
|
23
|
+
deleteToLineStart(): void;
|
|
24
|
+
deleteToLineEnd(): void;
|
|
25
|
+
deleteWordBackwards(): void;
|
|
26
|
+
deleteWordForward(): void;
|
|
27
|
+
yank(): void;
|
|
28
|
+
yankPop(): void;
|
|
29
|
+
pushUndo(): void;
|
|
30
|
+
undo(): void;
|
|
31
|
+
moveWordBackwards(): void;
|
|
32
|
+
moveWordForwards(): void;
|
|
33
|
+
handlePaste(pastedText: string): void;
|
|
34
|
+
invalidate(): void;
|
|
35
|
+
render(width: number): string[];
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/components/input/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAqBhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,qBAAa,KAAM,YAAW,SAAS,EAAE,SAAS;IACzC,KAAK,EAAE,MAAM,CAAM;IAEnB,MAAM,EAAE,MAAM,CAAK;IAEnB,YAAY,EAAE,MAAM,CAAK;IAEzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAE7B,OAAO,EAAE,OAAO,CAAS;IAElB,WAAW,EAAE,MAAM,CAAM;IAEzB,SAAS,EAAE,OAAO,CAAS;IAE3B,QAAQ,WAAkB;IAE1B,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,CAAQ;IAExD,SAAS,wBAA+B;IAE/C,QAAQ,IAAI,MAAM,CAEjB;IAED,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE5B;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE9B;IAED,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAElC;IAED,eAAe,IAAI,IAAI,CAEtB;IAED,mBAAmB,IAAI,IAAI,CAE1B;IAED,iBAAiB,IAAI,IAAI,CAExB;IAED,eAAe,IAAI,IAAI,CAEtB;IAED,mBAAmB,IAAI,IAAI,CAE1B;IAED,iBAAiB,IAAI,IAAI,CAExB;IAED,IAAI,IAAI,IAAI,CAEX;IAED,OAAO,IAAI,IAAI,CAEd;IAED,QAAQ,IAAI,IAAI,CAEf;IAED,IAAI,IAAI,IAAI,CAEX;IAED,iBAAiB,IAAI,IAAI,CAExB;IAED,gBAAgB,IAAI,IAAI,CAEvB;IAED,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAEpC;IAED,UAAU,IAAI,IAAI,CAEjB;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9B;CACF","sourcesContent":["import { KillRing } from \"../../kill-ring.ts\";\nimport type { Component, Focusable } from \"../../tui.ts\";\nimport { UndoStack } from \"../../undo-stack.ts\";\nimport { do_handleInput } from \"./input-methods/input-handling.ts\";\nimport { do_render } from \"./input-methods/render.ts\";\nimport {\n do_deleteToLineEnd,\n do_deleteToLineStart,\n do_deleteWordBackwards,\n do_deleteWordForward,\n do_handleBackspace,\n do_handleForwardDelete,\n do_handlePaste,\n do_insertCharacter,\n do_invalidate,\n do_moveWordBackwards,\n do_moveWordForwards,\n do_pushUndo,\n do_undo,\n do_yank,\n do_yankPop,\n} from \"./input-methods/text-editing.ts\";\nimport { do_getValue, do_setValue } from \"./input-methods/value-access.ts\";\nimport type { InputState } from \"./types.ts\";\n\nexport class Input implements Component, Focusable {\n public value: string = \"\";\n\n public cursor: number = 0;\n\n public scrollOffset: number = 0;\n\n public onSubmit?: (value: string) => void;\n\n public onEscape?: () => void;\n\n focused: boolean = false;\n\n public pasteBuffer: string = \"\";\n\n public isInPaste: boolean = false;\n\n public killRing = new KillRing();\n\n public lastAction: \"kill\" | \"yank\" | \"type-word\" | null = null;\n\n public undoStack = new UndoStack<InputState>();\n\n getValue(): string {\n return do_getValue(this);\n }\n\n setValue(value: string): void {\n do_setValue(this, value);\n }\n\n handleInput(data: string): void {\n do_handleInput(this, data);\n }\n\n insertCharacter(char: string): void {\n do_insertCharacter(this, char);\n }\n\n handleBackspace(): void {\n do_handleBackspace(this);\n }\n\n handleForwardDelete(): void {\n do_handleForwardDelete(this);\n }\n\n deleteToLineStart(): void {\n do_deleteToLineStart(this);\n }\n\n deleteToLineEnd(): void {\n do_deleteToLineEnd(this);\n }\n\n deleteWordBackwards(): void {\n do_deleteWordBackwards(this);\n }\n\n deleteWordForward(): void {\n do_deleteWordForward(this);\n }\n\n yank(): void {\n do_yank(this);\n }\n\n yankPop(): void {\n do_yankPop(this);\n }\n\n pushUndo(): void {\n do_pushUndo(this);\n }\n\n undo(): void {\n do_undo(this);\n }\n\n moveWordBackwards(): void {\n do_moveWordBackwards(this);\n }\n\n moveWordForwards(): void {\n do_moveWordForwards(this);\n }\n\n handlePaste(pastedText: string): void {\n do_handlePaste(this, pastedText);\n }\n\n invalidate(): void {\n do_invalidate(this);\n }\n\n render(width: number): string[] {\n return do_render(this, width);\n }\n}\n"]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { KillRing } from "../../kill-ring.js";
|
|
2
|
+
import { UndoStack } from "../../undo-stack.js";
|
|
3
|
+
import { do_handleInput } from "./input-methods/input-handling.js";
|
|
4
|
+
import { do_render } from "./input-methods/render.js";
|
|
5
|
+
import { do_deleteToLineEnd, do_deleteToLineStart, do_deleteWordBackwards, do_deleteWordForward, do_handleBackspace, do_handleForwardDelete, do_handlePaste, do_insertCharacter, do_invalidate, do_moveWordBackwards, do_moveWordForwards, do_pushUndo, do_undo, do_yank, do_yankPop, } from "./input-methods/text-editing.js";
|
|
6
|
+
import { do_getValue, do_setValue } from "./input-methods/value-access.js";
|
|
7
|
+
export class Input {
|
|
8
|
+
value = "";
|
|
9
|
+
cursor = 0;
|
|
10
|
+
scrollOffset = 0;
|
|
11
|
+
onSubmit;
|
|
12
|
+
onEscape;
|
|
13
|
+
focused = false;
|
|
14
|
+
pasteBuffer = "";
|
|
15
|
+
isInPaste = false;
|
|
16
|
+
killRing = new KillRing();
|
|
17
|
+
lastAction = null;
|
|
18
|
+
undoStack = new UndoStack();
|
|
19
|
+
getValue() {
|
|
20
|
+
return do_getValue(this);
|
|
21
|
+
}
|
|
22
|
+
setValue(value) {
|
|
23
|
+
do_setValue(this, value);
|
|
24
|
+
}
|
|
25
|
+
handleInput(data) {
|
|
26
|
+
do_handleInput(this, data);
|
|
27
|
+
}
|
|
28
|
+
insertCharacter(char) {
|
|
29
|
+
do_insertCharacter(this, char);
|
|
30
|
+
}
|
|
31
|
+
handleBackspace() {
|
|
32
|
+
do_handleBackspace(this);
|
|
33
|
+
}
|
|
34
|
+
handleForwardDelete() {
|
|
35
|
+
do_handleForwardDelete(this);
|
|
36
|
+
}
|
|
37
|
+
deleteToLineStart() {
|
|
38
|
+
do_deleteToLineStart(this);
|
|
39
|
+
}
|
|
40
|
+
deleteToLineEnd() {
|
|
41
|
+
do_deleteToLineEnd(this);
|
|
42
|
+
}
|
|
43
|
+
deleteWordBackwards() {
|
|
44
|
+
do_deleteWordBackwards(this);
|
|
45
|
+
}
|
|
46
|
+
deleteWordForward() {
|
|
47
|
+
do_deleteWordForward(this);
|
|
48
|
+
}
|
|
49
|
+
yank() {
|
|
50
|
+
do_yank(this);
|
|
51
|
+
}
|
|
52
|
+
yankPop() {
|
|
53
|
+
do_yankPop(this);
|
|
54
|
+
}
|
|
55
|
+
pushUndo() {
|
|
56
|
+
do_pushUndo(this);
|
|
57
|
+
}
|
|
58
|
+
undo() {
|
|
59
|
+
do_undo(this);
|
|
60
|
+
}
|
|
61
|
+
moveWordBackwards() {
|
|
62
|
+
do_moveWordBackwards(this);
|
|
63
|
+
}
|
|
64
|
+
moveWordForwards() {
|
|
65
|
+
do_moveWordForwards(this);
|
|
66
|
+
}
|
|
67
|
+
handlePaste(pastedText) {
|
|
68
|
+
do_handlePaste(this, pastedText);
|
|
69
|
+
}
|
|
70
|
+
invalidate() {
|
|
71
|
+
do_invalidate(this);
|
|
72
|
+
}
|
|
73
|
+
render(width) {
|
|
74
|
+
return do_render(this, width);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=input.js.map
|