{"id":38054263,"url":"https://github.com/40ants/reblocks-typeahead","last_synced_at":"2026-01-16T20:21:48.214Z","repository":{"id":143093011,"uuid":"463724208","full_name":"40ants/reblocks-typeahead","owner":"40ants","description":"A Typeahead widget for Reblocks Common Lisp framework.","archived":false,"fork":false,"pushed_at":"2025-06-17T14:16:48.000Z","size":131,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-17T15:27:26.834Z","etag":null,"topics":["common-lisp","extention","reblocks","web-framework"],"latest_commit_sha":null,"homepage":"https://40ants.com/reblocks-typeahead/","language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/40ants.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-02-26T01:34:57.000Z","updated_at":"2025-06-17T14:16:51.000Z","dependencies_parsed_at":"2025-02-26T12:27:31.209Z","dependency_job_id":"8933586e-7c5b-44ed-a257-8379c2536dc2","html_url":"https://github.com/40ants/reblocks-typeahead","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/40ants/reblocks-typeahead","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/40ants%2Freblocks-typeahead","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/40ants%2Freblocks-typeahead/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/40ants%2Freblocks-typeahead/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/40ants%2Freblocks-typeahead/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/40ants","download_url":"https://codeload.github.com/40ants/reblocks-typeahead/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/40ants%2Freblocks-typeahead/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28482267,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["common-lisp","extention","reblocks","web-framework"],"created_at":"2026-01-16T20:21:47.230Z","updated_at":"2026-01-16T20:21:48.201Z","avatar_url":"https://github.com/40ants.png","language":"Common Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-DOCS-2FINDEX-3A-40README-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n# reblocks-typeahead - A Reblocks widget implementing typeahead search.\n\n\u003ca id=\"reblocks-typeahead-asdf-system-details\"\u003e\u003c/a\u003e\n\n## REBLOCKS-TYPEAHEAD ASDF System Details\n\n* Description: A Reblocks widget implementing typeahead search.\n* Licence: Unlicense\n* Author: Alexander Artemenko \u003csvetlyak.40wt@gmail.com\u003e\n* Homepage: [https://40ants.com/reblocks-typeahead/][784a]\n* Bug tracker: [https://github.com/40ants/reblocks-typeahead/issues][8267]\n* Source control: [GIT][91a7]\n* Depends on: [parenscript][7921], [reblocks][184b], [reblocks-lass][28e0], [reblocks-parenscript][c07c], [reblocks-ui][4376]\n\n[![](https://github-actions.40ants.com/40ants/reblocks-typeahead/matrix.svg?only=ci.run-tests)][f8ea]\n\n![](http://quickdocs.org/badge/reblocks-typeahead.svg)\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-DOCS-2FINDEX-3A-3A-40INSTALLATION-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n## Installation\n\nYou can install this library from Quicklisp, but you want to receive updates quickly, then install it from Ultralisp.org:\n\n```\n(ql-dist:install-dist \"http://dist.ultralisp.org/\"\n                      :prompt nil)\n(ql:quickload :reblocks-typeahead)\n```\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-DOCS-2FINDEX-3A-3A-40USAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n## Usage\n\n![](https://storage.yandexcloud.net/40ants-blog-images/reblocks-typeahead-example.gif)\n\nTo use this library, you need to inherit your widget from [`reblocks-typeahead:typeahead-widget`][9e7b]\nand to provide at least two methods:\n\n* [`reblocks-typeahead:execute-query`][c957] which will respond with data for dropdown\n* [`reblocks-typeahead:on-select`][0a41] which will be executed when user has choosen an item from dropdown menu.\n\nSee [this example application's code][3c58]\nto learn how these methods can be implemented.\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-DOCS-2FINDEX-3A-3A-40API-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n## API\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-DOCS-2FINDEX-3A-3A-40REBLOCKS-TYPEAHEAD-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n### REBLOCKS-TYPEAHEAD\n\n\u003ca id=\"x-28-23A-28-2818-29-20BASE-CHAR-20-2E-20-22REBLOCKS-TYPEAHEAD-22-29-20PACKAGE-29\"\u003e\u003c/a\u003e\n\n#### [package](e97e) `reblocks-typeahead`\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-TYPEAHEAD-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n#### Classes\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-DOCS-2FINDEX-3A-3A-40REBLOCKS-TYPEAHEAD-24TYPEAHEAD-RESULTS-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n##### TYPEAHEAD-RESULTS\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3ATYPEAHEAD-RESULTS-20CLASS-29\"\u003e\u003c/a\u003e\n\n###### [class](f0f1) `reblocks-typeahead:typeahead-results` (ui-widget)\n\n**Readers**\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3ARESULTS-ITEMS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-TYPEAHEAD-3ATYPEAHEAD-RESULTS-29-29\"\u003e\u003c/a\u003e\n\n###### [reader](d505) `reblocks-typeahead:results-items` (typeahead-results) (= nil)\n\n**Accessors**\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3ARESULTS-ITEMS-20-2840ANTS-DOC-2FLOCATIVES-3AACCESSOR-20REBLOCKS-TYPEAHEAD-3ATYPEAHEAD-RESULTS-29-29\"\u003e\u003c/a\u003e\n\n###### [accessor](d505) `reblocks-typeahead:results-items` (typeahead-results) (= nil)\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-DOCS-2FINDEX-3A-3A-40REBLOCKS-TYPEAHEAD-24TYPEAHEAD-WIDGET-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n##### TYPEAHEAD-WIDGET\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3ATYPEAHEAD-WIDGET-20CLASS-29\"\u003e\u003c/a\u003e\n\n###### [class](d3cb) `reblocks-typeahead:typeahead-widget` (ui-widget)\n\nBase class for custom typeahead widgets.\n\nDefine you own widget class based on the [`typeahead-widget`][9e7b]\nand also define methods for following generic-functions.\n\nMandatory:\n\n* [`execute-query`][c957]\n\nOptional:\n\n* [`on-select`][0a41]\n* [`on-empty-selection`][d21f]\n* [`process-typeahead-choice`][12c7]\n* [`update-results`][607c]\n* [`hide-results`][7fcf]\n\n**Readers**\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3AINPUT-VALUE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-TYPEAHEAD-3ATYPEAHEAD-WIDGET-29-29\"\u003e\u003c/a\u003e\n\n###### [reader](2b98) `reblocks-typeahead:input-value` (typeahead-widget) (:value = nil)\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3APLACEHOLDER-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-TYPEAHEAD-3ATYPEAHEAD-WIDGET-29-29\"\u003e\u003c/a\u003e\n\n###### [reader](a3b1) `reblocks-typeahead:placeholder` (typeahead-widget) (:placeholder = nil)\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3ATYPEAHEAD-RESULTS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-TYPEAHEAD-3ATYPEAHEAD-WIDGET-29-29\"\u003e\u003c/a\u003e\n\n###### [reader](7800) `reblocks-typeahead:typeahead-results` (typeahead-widget) (= (make-instance 'typeahead-results))\n\n**Accessors**\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3AINPUT-VALUE-20-2840ANTS-DOC-2FLOCATIVES-3AACCESSOR-20REBLOCKS-TYPEAHEAD-3ATYPEAHEAD-WIDGET-29-29\"\u003e\u003c/a\u003e\n\n###### [accessor](2b98) `reblocks-typeahead:input-value` (typeahead-widget) (:value = nil)\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3APLACEHOLDER-20-2840ANTS-DOC-2FLOCATIVES-3AACCESSOR-20REBLOCKS-TYPEAHEAD-3ATYPEAHEAD-WIDGET-29-29\"\u003e\u003c/a\u003e\n\n###### [accessor](a3b1) `reblocks-typeahead:placeholder` (typeahead-widget) (:placeholder = nil)\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-TYPEAHEAD-3FGenerics-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n#### Generics\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3AEXECUTE-QUERY-20GENERIC-FUNCTION-29\"\u003e\u003c/a\u003e\n\n##### [generic-function](04bc) `reblocks-typeahead:execute-query` widget query\n\nA method for this generic-function should return a list of widgets to be shown in reponse to the given text query.\nThis method should return a list of widgets.\nTo make simple widgets out of strings, you can use\n[`reblocks/widgets/string-widget:make-string-widget`][e603] function.\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3AHIDE-RESULTS-20GENERIC-FUNCTION-29\"\u003e\u003c/a\u003e\n\n##### [generic-function](c968) `reblocks-typeahead:hide-results` widget\n\nHides dropdown widget. Call this method from a custom [`on-select`][0a41] or [`on-empty-selection`][d21f] methods.\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3AON-EMPTY-SELECTION-20GENERIC-FUNCTION-29\"\u003e\u003c/a\u003e\n\n##### [generic-function](80ad) `reblocks-typeahead:on-empty-selection` widget query\n\nCalled when user entered some query but didn't selected any item, just pressed Enter.\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3AON-SELECT-20GENERIC-FUNCTION-29\"\u003e\u003c/a\u003e\n\n##### [generic-function](e9ab) `reblocks-typeahead:on-select` widget item\n\nCalled when user selected an item in the typeahead results.\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3APROCESS-TYPEAHEAD-CHOICE-20GENERIC-FUNCTION-29\"\u003e\u003c/a\u003e\n\n##### [generic-function](e1d6) `reblocks-typeahead:process-typeahead-choice` widget query selected-item-idx\n\nCalls either [`on-select`][0a41] or [`on-empty-selection`][d21f] depending on if user has choosen an item from the dropdown.\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3AUPDATE-RESULTS-20GENERIC-FUNCTION-29\"\u003e\u003c/a\u003e\n\n##### [generic-function](fc72) `reblocks-typeahead:update-results` widget query\n\nCalls [`execute-query`][c957] generic-function and updates the dropdown widget.\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-TYPEAHEAD-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29\"\u003e\u003c/a\u003e\n\n#### Functions\n\n\u003ca id=\"x-28REBLOCKS-TYPEAHEAD-3AFOCUS-IN-20FUNCTION-29\"\u003e\u003c/a\u003e\n\n##### [function](566a) `reblocks-typeahead:focus-in` widget\n\n\n[784a]: https://40ants.com/reblocks-typeahead/\n[c957]: https://40ants.com/reblocks-typeahead/#x-28REBLOCKS-TYPEAHEAD-3AEXECUTE-QUERY-20GENERIC-FUNCTION-29\n[7fcf]: https://40ants.com/reblocks-typeahead/#x-28REBLOCKS-TYPEAHEAD-3AHIDE-RESULTS-20GENERIC-FUNCTION-29\n[d21f]: https://40ants.com/reblocks-typeahead/#x-28REBLOCKS-TYPEAHEAD-3AON-EMPTY-SELECTION-20GENERIC-FUNCTION-29\n[0a41]: https://40ants.com/reblocks-typeahead/#x-28REBLOCKS-TYPEAHEAD-3AON-SELECT-20GENERIC-FUNCTION-29\n[12c7]: https://40ants.com/reblocks-typeahead/#x-28REBLOCKS-TYPEAHEAD-3APROCESS-TYPEAHEAD-CHOICE-20GENERIC-FUNCTION-29\n[9e7b]: https://40ants.com/reblocks-typeahead/#x-28REBLOCKS-TYPEAHEAD-3ATYPEAHEAD-WIDGET-20CLASS-29\n[607c]: https://40ants.com/reblocks-typeahead/#x-28REBLOCKS-TYPEAHEAD-3AUPDATE-RESULTS-20GENERIC-FUNCTION-29\n[e603]: https://40ants.com/reblocks/api/#x-28REBLOCKS-2FWIDGETS-2FSTRING-WIDGET-3AMAKE-STRING-WIDGET-20FUNCTION-29\n[91a7]: https://github.com/40ants/reblocks-typeahead\n[f8ea]: https://github.com/40ants/reblocks-typeahead/actions\n[e97e]: https://github.com/40ants/reblocks-typeahead/blob/862510c42b6f62eca39d21b4d3c828b4efbd0d36/src/core.lisp#L1\n[c968]: https://github.com/40ants/reblocks-typeahead/blob/862510c42b6f62eca39d21b4d3c828b4efbd0d36/src/core.lisp#L104\n[04bc]: https://github.com/40ants/reblocks-typeahead/blob/862510c42b6f62eca39d21b4d3c828b4efbd0d36/src/core.lisp#L115\n[566a]: https://github.com/40ants/reblocks-typeahead/blob/862510c42b6f62eca39d21b4d3c828b4efbd0d36/src/core.lisp#L163\n[f0f1]: https://github.com/40ants/reblocks-typeahead/blob/862510c42b6f62eca39d21b4d3c828b4efbd0d36/src/core.lisp#L29\n[d505]: https://github.com/40ants/reblocks-typeahead/blob/862510c42b6f62eca39d21b4d3c828b4efbd0d36/src/core.lisp#L30\n[d3cb]: https://github.com/40ants/reblocks-typeahead/blob/862510c42b6f62eca39d21b4d3c828b4efbd0d36/src/core.lisp#L34\n[7800]: https://github.com/40ants/reblocks-typeahead/blob/862510c42b6f62eca39d21b4d3c828b4efbd0d36/src/core.lisp#L35\n[a3b1]: https://github.com/40ants/reblocks-typeahead/blob/862510c42b6f62eca39d21b4d3c828b4efbd0d36/src/core.lisp#L37\n[2b98]: https://github.com/40ants/reblocks-typeahead/blob/862510c42b6f62eca39d21b4d3c828b4efbd0d36/src/core.lisp#L40\n[e9ab]: https://github.com/40ants/reblocks-typeahead/blob/862510c42b6f62eca39d21b4d3c828b4efbd0d36/src/core.lisp#L61\n[80ad]: https://github.com/40ants/reblocks-typeahead/blob/862510c42b6f62eca39d21b4d3c828b4efbd0d36/src/core.lisp#L70\n[e1d6]: https://github.com/40ants/reblocks-typeahead/blob/862510c42b6f62eca39d21b4d3c828b4efbd0d36/src/core.lisp#L78\n[fc72]: https://github.com/40ants/reblocks-typeahead/blob/862510c42b6f62eca39d21b4d3c828b4efbd0d36/src/core.lisp#L93\n[8267]: https://github.com/40ants/reblocks-typeahead/issues\n[3c58]: https://github.com/40ants/reblocks-typeahead/tree/master/example\n[7921]: https://quickdocs.org/parenscript\n[184b]: https://quickdocs.org/reblocks\n[28e0]: https://quickdocs.org/reblocks-lass\n[c07c]: https://quickdocs.org/reblocks-parenscript\n[4376]: https://quickdocs.org/reblocks-ui\n\n* * *\n###### [generated by [40ANTS-DOC](https://40ants.com/doc/)]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F40ants%2Freblocks-typeahead","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F40ants%2Freblocks-typeahead","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F40ants%2Freblocks-typeahead/lists"}