termcast 1.3.21 → 1.3.24
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/ai.d.ts +104 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +135 -0
- package/dist/ai.js.map +1 -0
- package/dist/apis/browser-extension.d.ts +18 -0
- package/dist/apis/browser-extension.d.ts.map +1 -0
- package/dist/apis/browser-extension.js +14 -0
- package/dist/apis/browser-extension.js.map +1 -0
- package/dist/apis/localstorage.d.ts.map +1 -1
- package/dist/apis/localstorage.js +4 -7
- package/dist/apis/localstorage.js.map +1 -1
- package/dist/apis/oauth.d.ts.map +1 -1
- package/dist/apis/oauth.js +5 -1
- package/dist/apis/oauth.js.map +1 -1
- package/dist/apis/preferences.d.ts.map +1 -1
- package/dist/apis/preferences.js +38 -19
- package/dist/apis/preferences.js.map +1 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +2 -1
- package/dist/build.js.map +1 -1
- package/dist/cache.d.ts +32 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +205 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +67 -31
- package/dist/cli.js.map +1 -1
- package/dist/clipboard.d.ts +36 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +154 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +22 -5
- package/dist/compile.js.map +1 -1
- package/dist/components/actions.d.ts.map +1 -1
- package/dist/components/actions.js +56 -30
- package/dist/components/actions.js.map +1 -1
- package/dist/components/detail.d.ts.map +1 -1
- package/dist/components/detail.js +4 -0
- package/dist/components/detail.js.map +1 -1
- package/dist/components/dropdown.d.ts.map +1 -1
- package/dist/components/dropdown.js +38 -15
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/extension-preferences.d.ts.map +1 -1
- package/dist/components/extension-preferences.js +40 -13
- package/dist/components/extension-preferences.js.map +1 -1
- package/dist/components/form/checkbox.d.ts.map +1 -1
- package/dist/components/form/checkbox.js +5 -3
- package/dist/components/form/checkbox.js.map +1 -1
- package/dist/components/form/date-picker.d.ts.map +1 -1
- package/dist/components/form/date-picker.js +5 -3
- package/dist/components/form/date-picker.js.map +1 -1
- package/dist/components/form/description.d.ts.map +1 -1
- package/dist/components/form/description.js +2 -2
- package/dist/components/form/description.js.map +1 -1
- package/dist/components/form/dropdown.d.ts.map +1 -1
- package/dist/components/form/dropdown.js +84 -80
- package/dist/components/form/dropdown.js.map +1 -1
- package/dist/components/form/file-autocomplete.d.ts +3 -6
- package/dist/components/form/file-autocomplete.d.ts.map +1 -1
- package/dist/components/form/file-autocomplete.js +61 -66
- package/dist/components/form/file-autocomplete.js.map +1 -1
- package/dist/components/form/file-picker.d.ts.map +1 -1
- package/dist/components/form/file-picker.js +33 -30
- package/dist/components/form/file-picker.js.map +1 -1
- package/dist/components/form/form-end.d.ts.map +1 -1
- package/dist/components/form/form-end.js +21 -1
- package/dist/components/form/form-end.js.map +1 -1
- package/dist/components/form/form-type-only.d.ts +174 -0
- package/dist/components/form/form-type-only.d.ts.map +1 -0
- package/dist/components/form/form-type-only.js +2 -0
- package/dist/components/form/form-type-only.js.map +1 -0
- package/dist/components/form/index.d.ts +3 -1
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/form/index.js +100 -28
- package/dist/components/form/index.js.map +1 -1
- package/dist/components/form/password-field.d.ts.map +1 -1
- package/dist/components/form/password-field.js +5 -3
- package/dist/components/form/password-field.js.map +1 -1
- package/dist/components/form/text-area.d.ts.map +1 -1
- package/dist/components/form/text-area.js +5 -3
- package/dist/components/form/text-area.js.map +1 -1
- package/dist/components/form/text-field.d.ts.map +1 -1
- package/dist/components/form/text-field.js +6 -4
- package/dist/components/form/text-field.js.map +1 -1
- package/dist/components/form/types.d.ts +5 -0
- package/dist/components/form/types.d.ts.map +1 -1
- package/dist/components/form/use-form-handling.d.ts +4 -0
- package/dist/components/form/use-form-handling.d.ts.map +1 -0
- package/dist/components/form/use-form-handling.js +37 -0
- package/dist/components/form/use-form-handling.js.map +1 -0
- package/dist/components/form/with-left-border.d.ts +2 -1
- package/dist/components/form/with-left-border.d.ts.map +1 -1
- package/dist/components/form/with-left-border.js +27 -3
- package/dist/components/form/with-left-border.js.map +1 -1
- package/dist/components/icon.d.ts +1 -0
- package/dist/components/icon.d.ts.map +1 -1
- package/dist/components/icon.js +24 -8
- package/dist/components/icon.js.map +1 -1
- package/dist/components/list.d.ts +2 -2
- package/dist/components/list.d.ts.map +1 -1
- package/dist/components/list.js +140 -62
- package/dist/components/list.js.map +1 -1
- package/dist/components/loading-bar.d.ts.map +1 -1
- package/dist/components/loading-bar.js +2 -2
- package/dist/components/loading-bar.js.map +1 -1
- package/dist/components/loading-text.d.ts +8 -0
- package/dist/components/loading-text.d.ts.map +1 -0
- package/dist/components/loading-text.js +58 -0
- package/dist/components/loading-text.js.map +1 -0
- package/dist/descendants.js +1 -1
- package/dist/descendants.js.map +1 -1
- package/dist/dev-ui.d.ts +7 -0
- package/dist/dev-ui.d.ts.map +1 -0
- package/dist/dev-ui.js +118 -0
- package/dist/dev-ui.js.map +1 -0
- package/dist/environment.d.ts +63 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +189 -0
- package/dist/environment.js.map +1 -0
- package/dist/examples/datepicker.d.ts +2 -0
- package/dist/examples/datepicker.d.ts.map +1 -0
- package/dist/examples/datepicker.js +344 -0
- package/dist/examples/datepicker.js.map +1 -0
- package/dist/examples/file-autocomplete.vitest.d.ts +2 -0
- package/dist/examples/file-autocomplete.vitest.d.ts.map +1 -0
- package/dist/examples/file-autocomplete.vitest.js +223 -0
- package/dist/examples/file-autocomplete.vitest.js.map +1 -0
- package/dist/examples/form-basic-arrow-keys.vitest.d.ts +2 -0
- package/dist/examples/form-basic-arrow-keys.vitest.d.ts.map +1 -0
- package/dist/examples/form-basic-arrow-keys.vitest.js +46 -0
- package/dist/examples/form-basic-arrow-keys.vitest.js.map +1 -0
- package/dist/examples/form-basic.vitest.d.ts +2 -0
- package/dist/examples/form-basic.vitest.d.ts.map +1 -0
- package/dist/examples/form-basic.vitest.js +630 -0
- package/dist/examples/form-basic.vitest.js.map +1 -0
- package/dist/examples/form-dropdown-with-sections.d.ts +2 -0
- package/dist/examples/form-dropdown-with-sections.d.ts.map +1 -0
- package/dist/examples/form-dropdown-with-sections.js +13 -0
- package/dist/examples/form-dropdown-with-sections.js.map +1 -0
- package/dist/examples/form-dropdown-with-sections.vitest.d.ts +2 -0
- package/dist/examples/form-dropdown-with-sections.vitest.d.ts.map +1 -0
- package/dist/examples/form-dropdown-with-sections.vitest.js +75 -0
- package/dist/examples/form-dropdown-with-sections.vitest.js.map +1 -0
- package/dist/examples/form-dropdown.vitest.d.ts +2 -0
- package/dist/examples/form-dropdown.vitest.d.ts.map +1 -0
- package/dist/examples/form-dropdown.vitest.js +854 -0
- package/dist/examples/form-dropdown.vitest.js.map +1 -0
- package/dist/examples/form-multiselect-dropdown.d.ts +2 -0
- package/dist/examples/form-multiselect-dropdown.d.ts.map +1 -0
- package/dist/examples/form-multiselect-dropdown.js +13 -0
- package/dist/examples/form-multiselect-dropdown.js.map +1 -0
- package/dist/examples/form-scroll.d.ts.map +1 -1
- package/dist/examples/form-scroll.js +7 -1
- package/dist/examples/form-scroll.js.map +1 -1
- package/dist/examples/form-scroll.vitest.d.ts +2 -0
- package/dist/examples/form-scroll.vitest.d.ts.map +1 -0
- package/dist/examples/form-scroll.vitest.js +211 -0
- package/dist/examples/form-scroll.vitest.js.map +1 -0
- package/dist/examples/form-tagpicker.vitest.d.ts +2 -0
- package/dist/examples/form-tagpicker.vitest.d.ts.map +1 -0
- package/dist/examples/form-tagpicker.vitest.js +736 -0
- package/dist/examples/form-tagpicker.vitest.js.map +1 -0
- package/dist/examples/internal/descendants-filtering.js +1 -1
- package/dist/examples/internal/descendants-filtering.js.map +1 -1
- package/dist/examples/internal/descendants.js +1 -1
- package/dist/examples/internal/descendants.js.map +1 -1
- package/dist/examples/internal/nested-boxes.d.ts +2 -0
- package/dist/examples/internal/nested-boxes.d.ts.map +1 -0
- package/dist/examples/internal/nested-boxes.js +7 -0
- package/dist/examples/internal/nested-boxes.js.map +1 -0
- package/dist/examples/internal/rhf-custom-ref.js +2 -2
- package/dist/examples/internal/rhf-custom-ref.js.map +1 -1
- package/dist/examples/internal/scrollbox-demo.js +3 -22
- package/dist/examples/internal/scrollbox-demo.js.map +1 -1
- package/dist/examples/internal/scrollbox-descendants.d.ts +2 -0
- package/dist/examples/internal/scrollbox-descendants.d.ts.map +1 -0
- package/dist/examples/internal/scrollbox-descendants.js +83 -0
- package/dist/examples/internal/scrollbox-descendants.js.map +1 -0
- package/dist/examples/internal/scrollbox-with-descendants.js +4 -8
- package/dist/examples/internal/scrollbox-with-descendants.js.map +1 -1
- package/dist/examples/internal/simple-scrollbox.vitest.d.ts +2 -0
- package/dist/examples/internal/simple-scrollbox.vitest.d.ts.map +1 -0
- package/dist/examples/internal/simple-scrollbox.vitest.js +96 -0
- package/dist/examples/internal/simple-scrollbox.vitest.js.map +1 -0
- package/dist/examples/internal/unicode-square-repro.d.ts +2 -0
- package/dist/examples/internal/unicode-square-repro.d.ts.map +1 -0
- package/dist/examples/internal/unicode-square-repro.js +7 -0
- package/dist/examples/internal/unicode-square-repro.js.map +1 -0
- package/dist/examples/list-detail-metadata.d.ts +2 -0
- package/dist/examples/list-detail-metadata.d.ts.map +1 -0
- package/dist/examples/list-detail-metadata.js +8 -0
- package/dist/examples/list-detail-metadata.js.map +1 -0
- package/dist/examples/list-dropdown-default.vitest.d.ts +2 -0
- package/dist/examples/list-dropdown-default.vitest.d.ts.map +1 -0
- package/dist/examples/list-dropdown-default.vitest.js +234 -0
- package/dist/examples/list-dropdown-default.vitest.js.map +1 -0
- package/dist/examples/list-fetch-data.vitest.d.ts +2 -0
- package/dist/examples/list-fetch-data.vitest.d.ts.map +1 -0
- package/dist/examples/list-fetch-data.vitest.js +111 -0
- package/dist/examples/list-fetch-data.vitest.js.map +1 -0
- package/dist/examples/list-filter-navigation.d.ts +2 -0
- package/dist/examples/list-filter-navigation.d.ts.map +1 -0
- package/dist/examples/list-filter-navigation.js +8 -0
- package/dist/examples/list-filter-navigation.js.map +1 -0
- package/dist/examples/list-scrollbox.vitest.d.ts +2 -0
- package/dist/examples/list-scrollbox.vitest.d.ts.map +1 -0
- package/dist/examples/list-scrollbox.vitest.js +93 -0
- package/dist/examples/list-scrollbox.vitest.js.map +1 -0
- package/dist/examples/list-with-detail-long.d.ts +2 -0
- package/dist/examples/list-with-detail-long.d.ts.map +1 -0
- package/dist/examples/list-with-detail-long.js +53 -0
- package/dist/examples/list-with-detail-long.js.map +1 -0
- package/dist/examples/list-with-detail.vitest.d.ts +2 -0
- package/dist/examples/list-with-detail.vitest.d.ts.map +1 -0
- package/dist/examples/list-with-detail.vitest.js +434 -0
- package/dist/examples/list-with-detail.vitest.js.map +1 -0
- package/dist/examples/list-with-dropdown.vitest.d.ts +2 -0
- package/dist/examples/list-with-dropdown.vitest.d.ts.map +1 -0
- package/dist/examples/list-with-dropdown.vitest.js +337 -0
- package/dist/examples/list-with-dropdown.vitest.js.map +1 -0
- package/dist/examples/list-with-sections.js +5 -1
- package/dist/examples/list-with-sections.js.map +1 -1
- package/dist/examples/list-with-sections.vitest.d.ts +2 -0
- package/dist/examples/list-with-sections.vitest.d.ts.map +1 -0
- package/dist/examples/list-with-sections.vitest.js +601 -0
- package/dist/examples/list-with-sections.vitest.js.map +1 -0
- package/dist/examples/scrollbox-vertical-centering.d.ts +6 -0
- package/dist/examples/scrollbox-vertical-centering.d.ts.map +1 -0
- package/dist/examples/scrollbox-vertical-centering.js +17 -0
- package/dist/examples/scrollbox-vertical-centering.js.map +1 -0
- package/dist/examples/simple-file-picker.vitest.d.ts +2 -0
- package/dist/examples/simple-file-picker.vitest.d.ts.map +1 -0
- package/dist/examples/simple-file-picker.vitest.js +678 -0
- package/dist/examples/simple-file-picker.vitest.js.map +1 -0
- package/dist/examples/simple-grid.vitest.d.ts +2 -0
- package/dist/examples/simple-grid.vitest.d.ts.map +1 -0
- package/dist/examples/simple-grid.vitest.js +521 -0
- package/dist/examples/simple-grid.vitest.js.map +1 -0
- package/dist/examples/simple-navigation.js +10 -4
- package/dist/examples/simple-navigation.js.map +1 -1
- package/dist/examples/simple-navigation.vitest.d.ts +2 -0
- package/dist/examples/simple-navigation.vitest.d.ts.map +1 -0
- package/dist/examples/simple-navigation.vitest.js +718 -0
- package/dist/examples/simple-navigation.vitest.js.map +1 -0
- package/dist/examples/store.vitest.d.ts +2 -0
- package/dist/examples/store.vitest.d.ts.map +1 -0
- package/dist/examples/store.vitest.js +69 -0
- package/dist/examples/store.vitest.js.map +1 -0
- package/dist/extensions/dev.d.ts +4 -2
- package/dist/extensions/dev.d.ts.map +1 -1
- package/dist/extensions/dev.js +61 -10
- package/dist/extensions/dev.js.map +1 -1
- package/dist/extensions/dev.vitest.d.ts +2 -0
- package/dist/extensions/dev.vitest.d.ts.map +1 -0
- package/dist/extensions/dev.vitest.js +197 -0
- package/dist/extensions/dev.vitest.js.map +1 -0
- package/dist/extensions/home.d.ts.map +1 -1
- package/dist/extensions/home.js +3 -0
- package/dist/extensions/home.js.map +1 -1
- package/dist/home-command.d.ts +8 -0
- package/dist/home-command.d.ts.map +1 -0
- package/dist/home-command.js +181 -0
- package/dist/home-command.js.map +1 -0
- package/dist/hover-repro.d.ts +2 -0
- package/dist/hover-repro.d.ts.map +1 -0
- package/dist/hover-repro.js +20 -0
- package/dist/hover-repro.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/dialog.d.ts +1 -0
- package/dist/internal/dialog.d.ts.map +1 -1
- package/dist/internal/dialog.js +27 -18
- package/dist/internal/dialog.js.map +1 -1
- package/dist/internal/navigation.d.ts +9 -1
- package/dist/internal/navigation.d.ts.map +1 -1
- package/dist/internal/navigation.js +5 -5
- package/dist/internal/navigation.js.map +1 -1
- package/dist/internal/offscreen.d.ts +6 -0
- package/dist/internal/offscreen.d.ts.map +1 -0
- package/dist/internal/offscreen.js +10 -0
- package/dist/internal/offscreen.js.map +1 -0
- package/dist/internal/providers.d.ts.map +1 -1
- package/dist/internal/providers.js +2 -2
- package/dist/internal/providers.js.map +1 -1
- package/dist/internal/scrollbox.d.ts +1 -10
- package/dist/internal/scrollbox.d.ts.map +1 -1
- package/dist/internal/scrollbox.js +2 -1
- package/dist/internal/scrollbox.js.map +1 -1
- package/dist/localstorage.d.ts +13 -0
- package/dist/localstorage.d.ts.map +1 -0
- package/dist/localstorage.js +190 -0
- package/dist/localstorage.js.map +1 -0
- package/dist/oauth.d.ts +142 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +551 -0
- package/dist/oauth.js.map +1 -0
- package/dist/preferences.d.ts +23 -0
- package/dist/preferences.d.ts.map +1 -0
- package/dist/preferences.js +105 -0
- package/dist/preferences.js.map +1 -0
- package/dist/state.d.ts +2 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +3 -0
- package/dist/state.js.map +1 -1
- package/dist/store.d.ts +21 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +84 -0
- package/dist/store.js.map +1 -0
- package/dist/swift-loader.d.ts +3 -0
- package/dist/swift-loader.d.ts.map +1 -0
- package/dist/swift-loader.js +193 -0
- package/dist/swift-loader.js.map +1 -0
- package/dist/swift-runtime.d.ts +2 -0
- package/dist/swift-runtime.d.ts.map +1 -0
- package/dist/swift-runtime.js +27 -0
- package/dist/swift-runtime.js.map +1 -0
- package/dist/toast.d.ts +44 -0
- package/dist/toast.d.ts.map +1 -0
- package/dist/toast.js +221 -0
- package/dist/toast.js.map +1 -0
- package/dist/utils/file-system.d.ts +9 -0
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +49 -0
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils/run-command.d.ts +25 -1
- package/dist/utils/run-command.d.ts.map +1 -1
- package/dist/utils/run-command.js +47 -4
- package/dist/utils/run-command.js.map +1 -1
- package/dist/window.d.ts +12 -0
- package/dist/window.d.ts.map +1 -0
- package/dist/window.js +48 -0
- package/dist/window.js.map +1 -0
- package/package.json +12 -10
- package/src/apis/browser-extension.tsx +29 -0
- package/src/apis/localstorage.test.ts +14 -6
- package/src/apis/localstorage.tsx +8 -5
- package/src/apis/oauth.tsx +5 -1
- package/src/apis/preferences.tsx +48 -22
- package/src/build.test.tsx +52 -0
- package/src/build.tsx +2 -1
- package/src/cli.tsx +78 -37
- package/src/compile.tsx +22 -5
- package/src/components/actions.tsx +94 -32
- package/src/components/detail.tsx +4 -0
- package/src/components/dropdown.tsx +47 -14
- package/src/components/extension-preferences.tsx +44 -16
- package/src/components/form/checkbox.tsx +12 -6
- package/src/components/form/date-picker.tsx +12 -6
- package/src/components/form/description.tsx +7 -2
- package/src/components/form/dropdown.tsx +131 -119
- package/src/components/form/file-autocomplete.tsx +90 -108
- package/src/components/form/file-picker.tsx +54 -43
- package/src/components/form/form-end.tsx +23 -2
- package/src/components/form/index.tsx +152 -34
- package/src/components/form/password-field.tsx +12 -6
- package/src/components/form/text-area.tsx +13 -6
- package/src/components/form/text-field.tsx +13 -6
- package/src/components/form/types.tsx +6 -0
- package/src/components/form/with-left-border.tsx +41 -8
- package/src/components/icon.tsx +27 -8
- package/src/components/list.tsx +193 -74
- package/src/components/loading-bar.tsx +3 -2
- package/src/components/loading-text.tsx +79 -0
- package/src/descendants.tsx +1 -0
- package/src/examples/file-autocomplete.vitest.tsx +130 -125
- package/src/examples/form-basic.vitest.tsx +376 -176
- package/src/examples/form-dropdown.vitest.tsx +126 -126
- package/src/examples/form-scroll.tsx +2 -0
- package/src/examples/form-scroll.vitest.tsx +58 -58
- package/src/examples/form-tagpicker.vitest.tsx +99 -99
- package/src/examples/internal/descendants-filtering.tsx +1 -0
- package/src/examples/internal/descendants.tsx +1 -0
- package/src/examples/internal/rhf-custom-ref.tsx +2 -0
- package/src/examples/internal/scrollbox-demo.tsx +3 -27
- package/src/examples/internal/scrollbox-with-descendants.tsx +4 -7
- package/src/examples/internal/simple-scrollbox.vitest.tsx +7 -5
- package/src/examples/list-detail-metadata.tsx +49 -0
- package/src/examples/list-detail-metadata.vitest.tsx +88 -0
- package/src/examples/list-dropdown-default.vitest.tsx +51 -51
- package/src/examples/list-fetch-data.vitest.tsx +4 -4
- package/src/examples/list-scrollbox.vitest.tsx +73 -14
- package/src/examples/list-with-detail-long.tsx +70 -0
- package/src/examples/list-with-detail.vitest.tsx +198 -92
- package/src/examples/list-with-dropdown.vitest.tsx +53 -53
- package/src/examples/list-with-sections.tsx +1 -0
- package/src/examples/list-with-sections.vitest.tsx +213 -89
- package/src/examples/list-with-toast.vitest.tsx +4 -4
- package/src/examples/simple-file-picker.vitest.tsx +61 -471
- package/src/examples/simple-grid.vitest.tsx +238 -233
- package/src/examples/simple-navigation.tsx +15 -7
- package/src/examples/simple-navigation.vitest.tsx +121 -210
- package/src/examples/store.vitest.tsx +1 -1
- package/src/examples/swift-extension.vitest.tsx +148 -0
- package/src/examples/synonyms.vitest.tsx +159 -0
- package/src/extensions/dev.tsx +74 -7
- package/src/extensions/dev.vitest.tsx +97 -31
- package/src/extensions/home.tsx +6 -0
- package/src/index.tsx +3 -0
- package/src/internal/dialog.tsx +43 -30
- package/src/internal/navigation.tsx +3 -1
- package/src/internal/offscreen.tsx +15 -0
- package/src/internal/providers.tsx +4 -2
- package/src/internal/scrollbox.tsx +4 -8
- package/src/keyboard.test.tsx +69 -0
- package/src/state.tsx +7 -0
- package/src/swift-loader.tsx +239 -0
- package/src/swift-runtime.tsx +36 -0
- package/src/utils/file-system.ts +61 -0
- package/src/utils/run-command.tsx +75 -6
|
@@ -16,7 +16,7 @@ afterEach(() => {
|
|
|
16
16
|
session?.close()
|
|
17
17
|
})
|
|
18
18
|
|
|
19
|
-
test('file picker
|
|
19
|
+
test('file picker shows form fields', async () => {
|
|
20
20
|
const initialSnapshot = await session.text({
|
|
21
21
|
waitFor: (text) => {
|
|
22
22
|
return (
|
|
@@ -44,8 +44,8 @@ test('file picker with autocomplete', async () => {
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
◆ Your Name
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
│ John Doe
|
|
48
|
+
│
|
|
49
49
|
◇ Select Files
|
|
50
50
|
│ Enter file path...
|
|
51
51
|
│
|
|
@@ -76,18 +76,24 @@ test('file picker with autocomplete', async () => {
|
|
|
76
76
|
|
|
77
77
|
|
|
78
78
|
|
|
79
|
-
ctrl ↵ submit
|
|
79
|
+
ctrl ↵ submit tab navigate ^k actions"
|
|
80
80
|
`)
|
|
81
|
+
}, 10000)
|
|
82
|
+
|
|
83
|
+
test('typing opens autocomplete dialog with file list', async () => {
|
|
84
|
+
await session.text({
|
|
85
|
+
waitFor: (text) => /Your Name/i.test(text),
|
|
86
|
+
})
|
|
81
87
|
|
|
82
|
-
// Tab to
|
|
88
|
+
// Tab to file picker field
|
|
83
89
|
await session.press('tab')
|
|
84
90
|
await session.press('tab')
|
|
85
91
|
|
|
86
|
-
// Type
|
|
87
|
-
await session.type('
|
|
92
|
+
// Type to trigger autocomplete
|
|
93
|
+
await session.type('s')
|
|
88
94
|
|
|
89
95
|
const autocompleteSnapshot = await session.text({
|
|
90
|
-
waitFor: (text) => text.includes('
|
|
96
|
+
waitFor: (text) => text.includes('Filter:') && text.includes('📁'),
|
|
91
97
|
})
|
|
92
98
|
expect(autocompleteSnapshot).toMatchInlineSnapshot(`
|
|
93
99
|
"
|
|
@@ -105,200 +111,23 @@ test('file picker with autocomplete', async () => {
|
|
|
105
111
|
|
|
106
112
|
|
|
107
113
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
│
|
|
126
|
-
└
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
ctrl ↵ submit ↑↓ navigate ^k actions"
|
|
142
|
-
`)
|
|
143
|
-
|
|
144
|
-
// Navigate down in autocomplete
|
|
145
|
-
await session.press('down')
|
|
146
|
-
|
|
147
|
-
const afterDownSnapshot = await session.text({
|
|
148
|
-
waitFor: (text) => text.includes('📁 src'),
|
|
149
|
-
})
|
|
150
|
-
expect(afterDownSnapshot).toMatchInlineSnapshot(`
|
|
151
|
-
"
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
◇ Your Name
|
|
167
|
-
│ John Doe
|
|
168
|
-
│
|
|
169
|
-
◇ Select Files
|
|
170
|
-
│ Enter file path...
|
|
171
|
-
│ ┌────────────────────────────────────────────────────────────┐
|
|
172
|
-
│ │ 📁 src │
|
|
173
|
-
│ │ ↑↓ navigate ⏎ open folder → select folder esc close │
|
|
174
|
-
◆ └────────────────────────────────────────────────────────────┘
|
|
175
|
-
┃ src
|
|
176
|
-
┃
|
|
177
|
-
┃ Choose a folder for output
|
|
178
|
-
┃
|
|
179
|
-
◇ Select Single File
|
|
180
|
-
│ Enter file path...
|
|
181
|
-
│
|
|
182
|
-
│ Choose exactly one file
|
|
183
|
-
│
|
|
184
|
-
└
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
ctrl ↵ submit ↑↓ navigate ^k actions"
|
|
200
|
-
`)
|
|
201
|
-
|
|
202
|
-
// Select item with Enter
|
|
203
|
-
await session.press('enter')
|
|
204
|
-
|
|
205
|
-
const afterSelectSnapshot = await session.text({
|
|
206
|
-
waitFor: (text) => text.includes('src/') && text.includes('📁 apis'),
|
|
207
|
-
})
|
|
208
|
-
expect(afterSelectSnapshot).toMatchInlineSnapshot(`
|
|
209
|
-
"
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
┌────────────────────────────────────────────────────────────┐
|
|
223
|
-
│ 📁 apis │
|
|
224
|
-
◇ │ 📁 components │
|
|
225
|
-
│ │ 📁 examples │
|
|
226
|
-
│ │ 📁 extensions │
|
|
227
|
-
◇ │ 📁 hooks │
|
|
228
|
-
│ │ 📁 internal │
|
|
229
|
-
│ │ 📁 store-api │
|
|
230
|
-
│ │ 📁 utils │
|
|
231
|
-
│ │ ↑↓ navigate ⏎ open folder → select folder esc close │
|
|
232
|
-
◆ └────────────────────────────────────────────────────────────┘
|
|
233
|
-
┃ src/
|
|
234
|
-
┃
|
|
235
|
-
┃ Choose a folder for output
|
|
236
|
-
┃
|
|
237
|
-
◇ Select Single File
|
|
238
|
-
│ Enter file path...
|
|
239
|
-
│
|
|
240
|
-
│ Choose exactly one file
|
|
241
|
-
│
|
|
242
|
-
└
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
ctrl ↵ submit ↑↓ navigate ^k actions"
|
|
258
|
-
`)
|
|
259
|
-
|
|
260
|
-
// Clear and test absolute path
|
|
261
|
-
await session.press('backspace')
|
|
262
|
-
await session.press('backspace')
|
|
263
|
-
await session.press('backspace')
|
|
264
|
-
await session.type('/tmp')
|
|
265
|
-
|
|
266
|
-
const absolutePathSnapshot = await session.text({
|
|
267
|
-
waitFor: (text) => text.includes('/tmp'),
|
|
268
|
-
})
|
|
269
|
-
expect(absolutePathSnapshot).toMatchInlineSnapshot(`
|
|
270
|
-
"
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
◇ Your Name
|
|
286
|
-
│ John Doe
|
|
287
|
-
│
|
|
288
|
-
◇ Select Files
|
|
289
|
-
│ Enter file path...
|
|
290
|
-
│
|
|
291
|
-
│ Choose one or more files to upload
|
|
292
|
-
│
|
|
293
|
-
◆ Select Folder
|
|
294
|
-
┃ s/tmp
|
|
295
|
-
┃
|
|
296
|
-
┃ Choose a folder for output
|
|
297
|
-
┃
|
|
298
|
-
◇ Select Single File
|
|
299
|
-
│ Enter file path...
|
|
300
|
-
│
|
|
301
|
-
│ Choose exactly one file
|
|
114
|
+
◇┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
115
|
+
│┃
|
|
116
|
+
│┃ Filter: s
|
|
117
|
+
◇┃
|
|
118
|
+
│┃ 📁 extensions/
|
|
119
|
+
│┃ 📁 extensions/messages/
|
|
120
|
+
│┃ 📁 extensions/messages/assets/
|
|
121
|
+
│┃ 📁 extensions/messages/metadata/
|
|
122
|
+
◆┃ 📁 extensions/messages/src/
|
|
123
|
+
│┃ 📁 extensions/messages/src/api/
|
|
124
|
+
│┃ 📁 extensions/messages/src/components/
|
|
125
|
+
│┃ 📁 extensions/messages/src/hooks/
|
|
126
|
+
│┃ 📁 extensions/messages/src/tools/
|
|
127
|
+
◇┃ 📁 extensions/messages/swift/
|
|
128
|
+
│┃
|
|
129
|
+
│┃ ↑↓ navigate ⏎/tab select esc close
|
|
130
|
+
│━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
302
131
|
│
|
|
303
132
|
└
|
|
304
133
|
|
|
@@ -315,146 +144,32 @@ test('file picker with autocomplete', async () => {
|
|
|
315
144
|
|
|
316
145
|
|
|
317
146
|
|
|
318
|
-
ctrl ↵ submit
|
|
319
|
-
`)
|
|
320
|
-
|
|
321
|
-
// Test ~ home directory expansion
|
|
322
|
-
await session.press('backspace')
|
|
323
|
-
await session.press('backspace')
|
|
324
|
-
await session.press('backspace')
|
|
325
|
-
await session.press('backspace')
|
|
326
|
-
await session.type('~/')
|
|
327
|
-
|
|
328
|
-
const homeDirectorySnapshot = await session.text({
|
|
329
|
-
waitFor: (text) => text.includes('~/'),
|
|
330
|
-
})
|
|
331
|
-
expect(homeDirectorySnapshot).toMatchInlineSnapshot(`
|
|
332
|
-
"
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
◇ Your Name
|
|
348
|
-
│ John Doe
|
|
349
|
-
│
|
|
350
|
-
◇ Select Files
|
|
351
|
-
│ Enter file path...
|
|
352
|
-
│
|
|
353
|
-
│ Choose one or more files to upload
|
|
354
|
-
│
|
|
355
|
-
◆ Select Folder
|
|
356
|
-
┃ s~/
|
|
357
|
-
┃
|
|
358
|
-
┃ Choose a folder for output
|
|
359
|
-
┃
|
|
360
|
-
◇ Select Single File
|
|
361
|
-
│ Enter file path...
|
|
362
|
-
│
|
|
363
|
-
│ Choose exactly one file
|
|
364
|
-
│
|
|
365
|
-
└
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
ctrl ↵ submit ↑↓ navigate ^k actions"
|
|
147
|
+
ctrl ↵ submit tab navigate ^k actions"
|
|
381
148
|
`)
|
|
382
149
|
}, 15000)
|
|
383
150
|
|
|
384
|
-
test('
|
|
151
|
+
test('escape closes autocomplete without going back', async () => {
|
|
385
152
|
await session.text({
|
|
386
|
-
waitFor: (text) =>
|
|
387
|
-
return /Your Name/i.test(text)
|
|
388
|
-
},
|
|
153
|
+
waitFor: (text) => /Your Name/i.test(text),
|
|
389
154
|
})
|
|
390
155
|
|
|
391
|
-
// Tab to file picker
|
|
156
|
+
// Tab to file picker field
|
|
392
157
|
await session.press('tab')
|
|
393
158
|
await session.press('tab')
|
|
394
159
|
|
|
395
160
|
// Type to trigger autocomplete
|
|
396
|
-
await session.type('
|
|
161
|
+
await session.type('s')
|
|
397
162
|
|
|
398
|
-
|
|
399
|
-
waitFor: (text) => text.includes('
|
|
163
|
+
await session.text({
|
|
164
|
+
waitFor: (text) => text.includes('Filter:'),
|
|
400
165
|
})
|
|
401
|
-
expect(withDotSnapshot).toMatchInlineSnapshot(`
|
|
402
|
-
"
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
166
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
◇ Your Name
|
|
418
|
-
│ John Doe
|
|
419
|
-
│
|
|
420
|
-
◇ Select Files
|
|
421
|
-
│ Enter file path...
|
|
422
|
-
│ ┌────────────────────────────────────────────────────────────┐
|
|
423
|
-
│ │ 📁 .termcast-bundle │
|
|
424
|
-
│ │ ↑↓ navigate ⏎ open folder → select folder esc close │
|
|
425
|
-
◆ └────────────────────────────────────────────────────────────┘
|
|
426
|
-
┃ .
|
|
427
|
-
┃
|
|
428
|
-
┃ Choose a folder for output
|
|
429
|
-
┃
|
|
430
|
-
◇ Select Single File
|
|
431
|
-
│ Enter file path...
|
|
432
|
-
│
|
|
433
|
-
│ Choose exactly one file
|
|
434
|
-
│
|
|
435
|
-
└
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
ctrl ↵ submit ↑↓ navigate ^k actions"
|
|
451
|
-
`)
|
|
452
|
-
|
|
453
|
-
// Test escape key to close autocomplete
|
|
167
|
+
// Press escape to close autocomplete
|
|
454
168
|
await session.press('esc')
|
|
455
169
|
|
|
170
|
+
// Verify form is still visible (didn't navigate away)
|
|
456
171
|
const afterEscapeSnapshot = await session.text({
|
|
457
|
-
waitFor: (text) => text.includes('Select Folder') && !text.includes('
|
|
172
|
+
waitFor: (text) => text.includes('Select Folder') && !text.includes('Filter:'),
|
|
458
173
|
})
|
|
459
174
|
expect(afterEscapeSnapshot).toMatchInlineSnapshot(`
|
|
460
175
|
"
|
|
@@ -481,77 +196,10 @@ test('file picker keyboard navigation', async () => {
|
|
|
481
196
|
│ Choose one or more files to upload
|
|
482
197
|
│
|
|
483
198
|
◆ Select Folder
|
|
484
|
-
|
|
485
|
-
┃
|
|
486
|
-
┃ Choose a folder for output
|
|
487
|
-
┃
|
|
488
|
-
◇ Select Single File
|
|
489
|
-
│ Enter file path...
|
|
490
|
-
│
|
|
491
|
-
│ Choose exactly one file
|
|
199
|
+
│ s
|
|
492
200
|
│
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
ctrl ↵ submit ↑↓ navigate ^k actions"
|
|
509
|
-
`)
|
|
510
|
-
|
|
511
|
-
// Type again and navigate with arrows
|
|
512
|
-
await session.type('s')
|
|
513
|
-
|
|
514
|
-
await session.text({
|
|
515
|
-
waitFor: (text) => text.includes('.s'),
|
|
516
|
-
})
|
|
517
|
-
|
|
518
|
-
// Navigate down multiple times
|
|
519
|
-
await session.press('down')
|
|
520
|
-
await session.press('down')
|
|
521
|
-
await session.press('up')
|
|
522
|
-
|
|
523
|
-
const afterNavigationSnapshot = await session.text({
|
|
524
|
-
waitFor: (text) => text.includes('.s') && text.includes('Select Folder'),
|
|
525
|
-
})
|
|
526
|
-
expect(afterNavigationSnapshot).toMatchInlineSnapshot(`
|
|
527
|
-
"
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
◇ Your Name
|
|
543
|
-
│ John Doe
|
|
544
|
-
│
|
|
545
|
-
◇ Select Files
|
|
546
|
-
│ Enter file path...
|
|
547
|
-
│
|
|
548
|
-
│ Choose one or more files to upload
|
|
201
|
+
│ Choose a folder for output
|
|
549
202
|
│
|
|
550
|
-
◆ Select Folder
|
|
551
|
-
┃ .s
|
|
552
|
-
┃
|
|
553
|
-
┃ Choose a folder for output
|
|
554
|
-
┃
|
|
555
203
|
◇ Select Single File
|
|
556
204
|
│ Enter file path...
|
|
557
205
|
│
|
|
@@ -572,35 +220,35 @@ test('file picker keyboard navigation', async () => {
|
|
|
572
220
|
|
|
573
221
|
|
|
574
222
|
|
|
575
|
-
ctrl ↵ submit
|
|
223
|
+
ctrl ↵ submit tab navigate ^k actions"
|
|
576
224
|
`)
|
|
577
|
-
},
|
|
225
|
+
}, 15000)
|
|
578
226
|
|
|
579
|
-
test('
|
|
227
|
+
test('selecting first item with enter adds it to the list', async () => {
|
|
580
228
|
await session.text({
|
|
581
|
-
waitFor: (text) =>
|
|
582
|
-
return /Your Name/i.test(text)
|
|
583
|
-
},
|
|
229
|
+
waitFor: (text) => /Your Name/i.test(text),
|
|
584
230
|
})
|
|
585
231
|
|
|
586
|
-
// Tab to
|
|
232
|
+
// Tab to folder picker field (which shows directories)
|
|
587
233
|
await session.press('tab')
|
|
588
234
|
await session.press('tab')
|
|
589
235
|
|
|
590
236
|
// Type to trigger autocomplete
|
|
591
|
-
await session.type('
|
|
237
|
+
await session.type('s')
|
|
592
238
|
|
|
239
|
+
// Wait for dialog to appear with folders
|
|
593
240
|
await session.text({
|
|
594
|
-
waitFor: (text) => text.includes('📁
|
|
241
|
+
waitFor: (text) => text.includes('📁'),
|
|
595
242
|
})
|
|
596
243
|
|
|
597
|
-
//
|
|
598
|
-
await session.press('
|
|
244
|
+
// Press enter to select first match
|
|
245
|
+
await session.press('enter')
|
|
599
246
|
|
|
600
|
-
|
|
601
|
-
|
|
247
|
+
// Verify file was added
|
|
248
|
+
const afterSelectSnapshot = await session.text({
|
|
249
|
+
waitFor: (text) => text.includes('Selected files:'),
|
|
602
250
|
})
|
|
603
|
-
expect(
|
|
251
|
+
expect(afterSelectSnapshot).toMatchInlineSnapshot(`
|
|
604
252
|
"
|
|
605
253
|
|
|
606
254
|
|
|
@@ -624,69 +272,13 @@ test('right arrow selects item and left arrow removes last selection', async ()
|
|
|
624
272
|
│ Choose one or more files to upload
|
|
625
273
|
│
|
|
626
274
|
◆ Select Folder
|
|
627
|
-
┃ Enter file path...
|
|
628
|
-
┃
|
|
629
|
-
┃ Selected files:
|
|
630
|
-
┃ • src
|
|
631
|
-
┃
|
|
632
|
-
┃ Choose a folder for output
|
|
633
|
-
┃
|
|
634
|
-
◇ Select Single File
|
|
635
275
|
│ Enter file path...
|
|
636
276
|
│
|
|
637
|
-
│
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
ctrl ↵ submit ↑↓ navigate ^k actions"
|
|
653
|
-
`)
|
|
654
|
-
|
|
655
|
-
// Use left arrow to remove the selection (input should be empty)
|
|
656
|
-
await session.press('left')
|
|
657
|
-
|
|
658
|
-
const afterLeftArrowSnapshot = await session.text({
|
|
659
|
-
waitFor: (text) => !text.includes('Selected files:'),
|
|
660
|
-
})
|
|
661
|
-
expect(afterLeftArrowSnapshot).toMatchInlineSnapshot(`
|
|
662
|
-
"
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
◇ Your Name
|
|
678
|
-
│ John Doe
|
|
679
|
-
│
|
|
680
|
-
◇ Select Files
|
|
681
|
-
│ Enter file path...
|
|
277
|
+
│ Selected files:
|
|
278
|
+
│ • extensions
|
|
682
279
|
│
|
|
683
|
-
│ Choose
|
|
280
|
+
│ Choose a folder for output
|
|
684
281
|
│
|
|
685
|
-
◆ Select Folder
|
|
686
|
-
┃ Enter file path...
|
|
687
|
-
┃
|
|
688
|
-
┃ Choose a folder for output
|
|
689
|
-
┃
|
|
690
282
|
◇ Select Single File
|
|
691
283
|
│ Enter file path...
|
|
692
284
|
│
|
|
@@ -705,8 +297,6 @@ test('right arrow selects item and left arrow removes last selection', async ()
|
|
|
705
297
|
|
|
706
298
|
|
|
707
299
|
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
ctrl ↵ submit ↑↓ navigate ^k actions"
|
|
300
|
+
ctrl ↵ submit tab navigate ^k actions"
|
|
711
301
|
`)
|
|
712
302
|
}, 15000)
|