@anglr/select 17.2.0 → 17.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/changelog.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## Version 17.3.0 (2026-09-22)
4
+
5
+ ### Bug Fixes
6
+
7
+ - fixed `SelectEdit` directive
8
+ - now properly unblocks *space* character when select is editable, so space could be written as input
9
+
10
+ ### Features
11
+
12
+ - updated `SimpleKeyboardHandlerOptions` interface
13
+ - **new properties**
14
+ - `openPopupOnSpace` indication whether space key should trigger opening select popup
15
+
3
16
  ## Version 17.2.0 (2026-08-04)
4
17
 
5
18
  ### Bug Fixes
@@ -17,6 +17,7 @@ export class SelectEdit {
17
17
  options: {
18
18
  alphanumericSearch: false,
19
19
  liveSearchEvents: true,
20
+ openPopupOnSpace: false,
20
21
  },
21
22
  },
22
23
  },
@@ -1 +1 @@
1
- {"version":3,"file":"selectEdit.directive.js","sourceRoot":"","sources":["../../../../src/directives/selectEdit/selectEdit.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAC,qBAAqB,EAAE,sBAAsB,EAAC,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAC,cAAc,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAC,MAAM,EAAC,MAAM,0CAA0C,CAAC;;;AAGhE;;GAEG;AAUH,MAAM,OAAO,UAAU;IAEnB,iEAAiE;IACjE,YAAY,MAAoC;QAE5C,MAAM,CAAC,aAAa;YACpB;gBACI,OAAO,EACP;oBACI,eAAe,EACf;wBACI,OAAO,EACP;4BACI,kBAAkB,EAAE,KAAK;4BACzB,gBAAgB,EAAE,IAAI;yBACzB;qBACJ;iBACJ;aACmC,CAAC;IAC7C,CAAC;8GAnBQ,UAAU;kGAAV,UAAU,8DALnB;YACI,sBAAsB,CAAC,eAAe,CAAC;YACvC,qBAAqB,CAAC,cAAc,CAAC;SACxC;;2FAEQ,UAAU;kBATtB,SAAS;mBACV;oBACI,QAAQ,EAAE,iBAAiB;oBAC3B,SAAS,EACT;wBACI,sBAAsB,CAAC,eAAe,CAAC;wBACvC,qBAAqB,CAAC,cAAc,CAAC;qBACxC;iBACJ","sourcesContent":["import {Directive} from '@angular/core';\nimport {RecursivePartial} from '@jscrpt/common';\n\nimport {provideLiveSearchType, provideNormalStateType} from '../../misc/providers';\nimport {EditLiveSearch, EditNormalState} from '../../plugins';\nimport {Select} from '../../components/select/select.component';\nimport {SelectOptions, SimpleKeyboardHandlerOptions} from '../../interfaces';\n\n/**\n * Directive that applies options for Select which switch it to edit mode.\n */\n@Directive(\n{\n selector: 'ng-select[edit]',\n providers:\n [\n provideNormalStateType(EditNormalState),\n provideLiveSearchType(EditLiveSearch),\n ],\n})\nexport class SelectEdit<TValue = unknown, TPublicValue = TValue>\n{\n //######################### constructor #########################\n constructor(select: Select<TValue, TPublicValue>)\n {\n select.selectOptions =\n {\n plugins:\n {\n keyboardHandler:\n {\n options: <RecursivePartial<SimpleKeyboardHandlerOptions>>\n {\n alphanumericSearch: false,\n liveSearchEvents: true,\n },\n },\n },\n } as SelectOptions<TValue, TPublicValue>;\n }\n}\n"]}
1
+ {"version":3,"file":"selectEdit.directive.js","sourceRoot":"","sources":["../../../../src/directives/selectEdit/selectEdit.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAC,qBAAqB,EAAE,sBAAsB,EAAC,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAC,cAAc,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAC,MAAM,EAAC,MAAM,0CAA0C,CAAC;;;AAGhE;;GAEG;AAUH,MAAM,OAAO,UAAU;IAEnB,iEAAiE;IACjE,YAAY,MAAoC;QAE5C,MAAM,CAAC,aAAa;YACpB;gBACI,OAAO,EACP;oBACI,eAAe,EACf;wBACI,OAAO,EACP;4BACI,kBAAkB,EAAE,KAAK;4BACzB,gBAAgB,EAAE,IAAI;4BACtB,gBAAgB,EAAE,KAAK;yBAC1B;qBACJ;iBACJ;aACmC,CAAC;IAC7C,CAAC;8GApBQ,UAAU;kGAAV,UAAU,8DALnB;YACI,sBAAsB,CAAC,eAAe,CAAC;YACvC,qBAAqB,CAAC,cAAc,CAAC;SACxC;;2FAEQ,UAAU;kBATtB,SAAS;mBACV;oBACI,QAAQ,EAAE,iBAAiB;oBAC3B,SAAS,EACT;wBACI,sBAAsB,CAAC,eAAe,CAAC;wBACvC,qBAAqB,CAAC,cAAc,CAAC;qBACxC;iBACJ","sourcesContent":["import {Directive} from '@angular/core';\nimport {RecursivePartial} from '@jscrpt/common';\n\nimport {provideLiveSearchType, provideNormalStateType} from '../../misc/providers';\nimport {EditLiveSearch, EditNormalState} from '../../plugins';\nimport {Select} from '../../components/select/select.component';\nimport {SelectOptions, SimpleKeyboardHandlerOptions} from '../../interfaces';\n\n/**\n * Directive that applies options for Select which switch it to edit mode.\n */\n@Directive(\n{\n selector: 'ng-select[edit]',\n providers:\n [\n provideNormalStateType(EditNormalState),\n provideLiveSearchType(EditLiveSearch),\n ],\n})\nexport class SelectEdit<TValue = unknown, TPublicValue = TValue>\n{\n //######################### constructor #########################\n constructor(select: Select<TValue, TPublicValue>)\n {\n select.selectOptions =\n {\n plugins:\n {\n keyboardHandler:\n {\n options: <RecursivePartial<SimpleKeyboardHandlerOptions>>\n {\n alphanumericSearch: false,\n liveSearchEvents: true,\n openPopupOnSpace: false,\n },\n },\n },\n } as SelectOptions<TValue, TPublicValue>;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"simpleKeyboardHandler.interface.js","sourceRoot":"","sources":["../../../../../src/interfaces/plugins/keyboardHandler/simpleKeyboardHandler.interface.ts"],"names":[],"mappings":"","sourcesContent":["import {KeyboardHandlerOptions} from './keyboardHandler.interface';\n\n/**\n * Options for simple keyboard handler plugin\n */\nexport interface SimpleKeyboardHandlerOptions extends KeyboardHandlerOptions\n{\n //######################### properties #########################\n\n /**\n * Debounce timeout for selecting first option when typing\n */\n selectFirstDebounceTimeout: number;\n\n /**\n * Indication whether is alphanumeric search enabled, meaning that when user types alphanumeric keys (outside of live search), select will try to find option starting with searched text and select it\n */\n alphanumericSearch: boolean;\n\n /**\n * Indication whether live search events should be processed\n */\n liveSearchEvents: boolean;\n}\n"]}
1
+ {"version":3,"file":"simpleKeyboardHandler.interface.js","sourceRoot":"","sources":["../../../../../src/interfaces/plugins/keyboardHandler/simpleKeyboardHandler.interface.ts"],"names":[],"mappings":"","sourcesContent":["import {KeyboardHandlerOptions} from './keyboardHandler.interface';\n\n/**\n * Options for simple keyboard handler plugin\n */\nexport interface SimpleKeyboardHandlerOptions extends KeyboardHandlerOptions\n{\n //######################### properties #########################\n\n /**\n * Debounce timeout for selecting first option when typing\n */\n selectFirstDebounceTimeout: number;\n\n /**\n * Indication whether is alphanumeric search enabled, meaning that when user types alphanumeric keys (outside of live search), select will try to find option starting with searched text and select it\n */\n alphanumericSearch: boolean;\n\n /**\n * Indication whether space key should trigger opening select popup\n */\n openPopupOnSpace: boolean;\n\n /**\n * Indication whether live search events should be processed\n */\n liveSearchEvents: boolean;\n}\n"]}
@@ -9,6 +9,7 @@ import { KEYBOARD_HANDLER_OPTIONS } from '../../../misc/tokens';
9
9
  import * as i0 from "@angular/core";
10
10
  const defaultOptions = {
11
11
  selectFirstDebounceTimeout: 300,
12
+ openPopupOnSpace: true,
12
13
  alphanumericSearch: true,
13
14
  liveSearchEvents: false,
14
15
  };
@@ -141,7 +142,7 @@ export class SimpleKeyboardHandler {
141
142
  data: null,
142
143
  });
143
144
  }
144
- if (event.key == ' ') {
145
+ if (this.options.openPopupOnSpace && event.key == ' ') {
145
146
  this.logger.verbose('Select: Keyboard handler: handling Space');
146
147
  this.selectBus.showPopup.next({
147
148
  source: this,
@@ -1 +1 @@
1
- {"version":3,"file":"simpleKeyboardHandler.component.js","sourceRoot":"","sources":["../../../../../src/plugins/keyboardHandler/simpleKeyboardHandler/simpleKeyboardHandler.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {Component, effect, ElementRef, Inject, inject, OnDestroy, Optional} from '@angular/core';\nimport {LOGGER, Logger} from '@anglr/common';\nimport {BindThis, isPresent, RecursivePartial} from '@jscrpt/common';\nimport {deepCopyWithArrayOverride} from '@jscrpt/common/lodash';\n\nimport {KeyboardHandler, SimpleKeyboardHandlerOptions, SelectFirstKeyboardAction, SelectPlugin, SelectActiveKeyboardAction, RemoveLastSelectedValueKeyboardAction} from '../../../interfaces';\nimport {SelectPluginInstances, SelectBus} from '../../../misc/classes';\nimport {CopyOptionsAsSignal} from '../../../decorators';\nimport {KEYBOARD_HANDLER_OPTIONS} from '../../../misc/tokens';\nimport {SimpleKeyboardActionTypes} from '../../../misc/types';\n\nconst defaultOptions: SimpleKeyboardHandlerOptions =\n{\n selectFirstDebounceTimeout: 300,\n alphanumericSearch: true,\n liveSearchEvents: false,\n};\n\n/**\n * Simple keyboard handler, handling basic keyboard actions\n */\n@Component(\n{\n selector: 'simple-keyboard-handler',\n template: '',\n})\nexport class SimpleKeyboardHandler<TValue = unknown, TPublicValue = TValue> implements KeyboardHandler<TValue, TPublicValue, SimpleKeyboardHandlerOptions, SimpleKeyboardActionTypes>, OnDestroy\n{\n //######################### protected fields #########################\n\n /**\n * Searched text\n */\n protected search: string = '';\n\n /**\n * Debounce timeout for search\n */\n protected searchDebounceTimeout: number|undefined|null;\n\n /**\n * Instance of logger for logging purposes\n */\n protected logger: Logger = inject(LOGGER);\n\n //######################### public properties - implementation of SelectPlugin #########################\n\n /**\n * @inheritdoc\n */\n @CopyOptionsAsSignal()\n public options: SimpleKeyboardHandlerOptions;\n\n /**\n * @inheritdoc\n */\n public selectPlugins: SelectPluginInstances<TValue, TPublicValue> = inject(SelectPluginInstances);\n\n /**\n * @inheritdoc\n */\n public pluginElement: ElementRef<HTMLElement> = inject(ElementRef);\n\n /**\n * @inheritdoc\n */\n public selectBus: SelectBus<TValue, TPublicValue, SimpleKeyboardActionTypes> = inject(SelectBus) as SelectBus<TValue, TPublicValue, SimpleKeyboardActionTypes>;\n\n //######################### constructor #########################\n constructor(@Inject(KEYBOARD_HANDLER_OPTIONS) @Optional() options?: RecursivePartial<SimpleKeyboardHandlerOptions>|null,)\n {\n this.options = deepCopyWithArrayOverride(defaultOptions as SimpleKeyboardHandlerOptions,\n options);\n\n effect(() =>\n {\n this.logger.verbose('Select: Keyboard handler: registering keyboard \"keydown\" event listener');\n\n this.selectBus.selectElement().nativeElement.removeEventListener('keydown', this.handleKeyboardEvents);\n this.selectBus.selectElement().nativeElement.addEventListener('keydown', this.handleKeyboardEvents);\n });\n\n effect(() =>\n {\n const liveSearch = this.selectPlugins.liveSearch();\n\n if(this.options.liveSearchEvents && liveSearch)\n {\n liveSearch.pluginElement.nativeElement.removeEventListener('keydown', this.handleLiveSearchKeyboardEvents);\n liveSearch.pluginElement.nativeElement.addEventListener('keydown', this.handleLiveSearchKeyboardEvents);\n }\n });\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n\n /**\n * @inheritdoc\n */\n public ngOnDestroy(): void\n {\n this.logger.verbose('Select: Keyboard handler: destroying, removing keyboard \"keydown\" event listener, clearing search debounce timeout');\n this.selectBus.selectElement().nativeElement.removeEventListener('keydown', this.handleKeyboardEvents);\n\n if(isPresent(this.searchDebounceTimeout))\n {\n clearTimeout(this.searchDebounceTimeout);\n }\n }\n\n //######################### protected methods #########################\n\n /**\n * Handles live search keyboard events\n * @param event - Keyboard event that occured\n */\n @BindThis\n protected handleLiveSearchKeyboardEvents(event: KeyboardEvent): void\n {\n if(event.key == 'Backspace' && this.selectPlugins.liveSearch()?.emptyInput())\n {\n this.selectBus.keyboardAction.next(\n {\n source: this as SelectPlugin,\n sourceElement: this.selectBus.selectElement().nativeElement,\n data: <RemoveLastSelectedValueKeyboardAction>{type: 'REMOVE_LAST_SELECTED_VALUE'},\n });\n }\n }\n\n /**\n * Handles keyboard events\n * @param event - Keyboard event that occured\n */\n @BindThis\n protected handleKeyboardEvents(event: KeyboardEvent): void\n {\n const options = this.selectPlugins.OptionsHandler.listOptions();\n\n if(event.key == 'ArrowDown' || event.key == 'ArrowUp')\n {\n const activeOption = options?.find(itm => itm.active());\n this.logger.verbose('Select: Keyboard handler: handling ArrowDown, ArrowUp');\n\n if(activeOption && options)\n {\n let index = options.indexOf(activeOption);\n\n //move down cursor\n if(event.key == 'ArrowDown')\n {\n index += 1;\n }\n //move up cursor\n else\n {\n index -= 1;\n }\n\n if(index < 0)\n {\n index = options.length - 1;\n }\n\n index = index % options.length;\n\n this.logger.verbose('Select: Keyboard handler: selecting option with index {{index}}', {index});\n\n this.selectBus.markOption.next(\n {\n source: this as SelectPlugin,\n sourceElement: this.selectBus.selectElement().nativeElement,\n data: options[index],\n });\n }\n //none active before\n else if(options?.length)\n {\n this.logger.verbose('Select: Keyboard handler: selecting option with index {{index}}', {index: 0});\n\n this.selectBus.markOption.next(\n {\n source: this as SelectPlugin,\n sourceElement: this.selectBus.selectElement().nativeElement,\n data: options[0],\n });\n }\n\n event.preventDefault();\n }\n\n //prevent enter if popup is opened\n if(event.key == 'Enter' && this.selectBus.popupVisible())\n {\n const activeOption = options?.find(itm => itm.active());\n this.logger.verbose('Select: Keyboard handler: handling Enter');\n\n if(activeOption)\n {\n this.logger.verbose('Select: Keyboard handler: selecting active option');\n\n this.selectBus.keyboardAction.next(\n {\n source: this as SelectPlugin,\n sourceElement: this.selectBus.selectElement().nativeElement,\n data: <SelectActiveKeyboardAction>{type: 'SELECT_ACTIVE'},\n });\n }\n\n event.preventDefault();\n }\n\n if(event.key == 'Tab' || event.key == 'Escape')\n {\n this.logger.verbose('Select: Keyboard handler: handling Tab, Escape');\n\n this.selectBus.hidePopup.next(\n {\n source: this as SelectPlugin,\n sourceElement: this.selectBus.selectElement().nativeElement,\n data: null,\n });\n }\n\n if(event.key == ' ')\n {\n this.logger.verbose('Select: Keyboard handler: handling Space');\n\n this.selectBus.showPopup.next(\n {\n source: this as SelectPlugin,\n sourceElement: this.selectBus.selectElement().nativeElement,\n data: null,\n });\n\n event.preventDefault();\n }\n\n if(this.options.alphanumericSearch && event.key.match(/^[a-z0-9]$/i))\n {\n this.logger.verbose('Select: Keyboard handler: handling alphanumeric key');\n\n this.search += event.key;\n\n if(isPresent(this.searchDebounceTimeout))\n {\n clearTimeout(this.searchDebounceTimeout);\n }\n\n this.searchDebounceTimeout = setTimeout(() =>\n {\n this.logger.verbose('Select: Keyboard handler: seinding SELECT_FIRST keyboard action with search \"{{search}}\"', {search: this.search});\n\n this.selectBus.keyboardAction.next(\n {\n source: this as SelectPlugin,\n sourceElement: this.selectBus.selectElement().nativeElement,\n data: <SelectFirstKeyboardAction>{type: 'SELECT_FIRST', search: this.search},\n });\n\n this.search = '';\n }, this.options.selectFirstDebounceTimeout) as unknown as number;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"simpleKeyboardHandler.component.js","sourceRoot":"","sources":["../../../../../src/plugins/keyboardHandler/simpleKeyboardHandler/simpleKeyboardHandler.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {Component, effect, ElementRef, Inject, inject, OnDestroy, Optional} from '@angular/core';\nimport {LOGGER, Logger} from '@anglr/common';\nimport {BindThis, isPresent, RecursivePartial} from '@jscrpt/common';\nimport {deepCopyWithArrayOverride} from '@jscrpt/common/lodash';\n\nimport {KeyboardHandler, SimpleKeyboardHandlerOptions, SelectFirstKeyboardAction, SelectPlugin, SelectActiveKeyboardAction, RemoveLastSelectedValueKeyboardAction} from '../../../interfaces';\nimport {SelectPluginInstances, SelectBus} from '../../../misc/classes';\nimport {CopyOptionsAsSignal} from '../../../decorators';\nimport {KEYBOARD_HANDLER_OPTIONS} from '../../../misc/tokens';\nimport {SimpleKeyboardActionTypes} from '../../../misc/types';\n\nconst defaultOptions: SimpleKeyboardHandlerOptions =\n{\n selectFirstDebounceTimeout: 300,\n openPopupOnSpace: true,\n alphanumericSearch: true,\n liveSearchEvents: false,\n};\n\n/**\n * Simple keyboard handler, handling basic keyboard actions\n */\n@Component(\n{\n selector: 'simple-keyboard-handler',\n template: '',\n})\nexport class SimpleKeyboardHandler<TValue = unknown, TPublicValue = TValue> implements KeyboardHandler<TValue, TPublicValue, SimpleKeyboardHandlerOptions, SimpleKeyboardActionTypes>, OnDestroy\n{\n //######################### protected fields #########################\n\n /**\n * Searched text\n */\n protected search: string = '';\n\n /**\n * Debounce timeout for search\n */\n protected searchDebounceTimeout: number|undefined|null;\n\n /**\n * Instance of logger for logging purposes\n */\n protected logger: Logger = inject(LOGGER);\n\n //######################### public properties - implementation of SelectPlugin #########################\n\n /**\n * @inheritdoc\n */\n @CopyOptionsAsSignal()\n public options: SimpleKeyboardHandlerOptions;\n\n /**\n * @inheritdoc\n */\n public selectPlugins: SelectPluginInstances<TValue, TPublicValue> = inject(SelectPluginInstances);\n\n /**\n * @inheritdoc\n */\n public pluginElement: ElementRef<HTMLElement> = inject(ElementRef);\n\n /**\n * @inheritdoc\n */\n public selectBus: SelectBus<TValue, TPublicValue, SimpleKeyboardActionTypes> = inject(SelectBus) as SelectBus<TValue, TPublicValue, SimpleKeyboardActionTypes>;\n\n //######################### constructor #########################\n constructor(@Inject(KEYBOARD_HANDLER_OPTIONS) @Optional() options?: RecursivePartial<SimpleKeyboardHandlerOptions>|null,)\n {\n this.options = deepCopyWithArrayOverride(defaultOptions as SimpleKeyboardHandlerOptions,\n options);\n\n effect(() =>\n {\n this.logger.verbose('Select: Keyboard handler: registering keyboard \"keydown\" event listener');\n\n this.selectBus.selectElement().nativeElement.removeEventListener('keydown', this.handleKeyboardEvents);\n this.selectBus.selectElement().nativeElement.addEventListener('keydown', this.handleKeyboardEvents);\n });\n\n effect(() =>\n {\n const liveSearch = this.selectPlugins.liveSearch();\n\n if(this.options.liveSearchEvents && liveSearch)\n {\n liveSearch.pluginElement.nativeElement.removeEventListener('keydown', this.handleLiveSearchKeyboardEvents);\n liveSearch.pluginElement.nativeElement.addEventListener('keydown', this.handleLiveSearchKeyboardEvents);\n }\n });\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n\n /**\n * @inheritdoc\n */\n public ngOnDestroy(): void\n {\n this.logger.verbose('Select: Keyboard handler: destroying, removing keyboard \"keydown\" event listener, clearing search debounce timeout');\n this.selectBus.selectElement().nativeElement.removeEventListener('keydown', this.handleKeyboardEvents);\n\n if(isPresent(this.searchDebounceTimeout))\n {\n clearTimeout(this.searchDebounceTimeout);\n }\n }\n\n //######################### protected methods #########################\n\n /**\n * Handles live search keyboard events\n * @param event - Keyboard event that occured\n */\n @BindThis\n protected handleLiveSearchKeyboardEvents(event: KeyboardEvent): void\n {\n if(event.key == 'Backspace' && this.selectPlugins.liveSearch()?.emptyInput())\n {\n this.selectBus.keyboardAction.next(\n {\n source: this as SelectPlugin,\n sourceElement: this.selectBus.selectElement().nativeElement,\n data: <RemoveLastSelectedValueKeyboardAction>{type: 'REMOVE_LAST_SELECTED_VALUE'},\n });\n }\n }\n\n /**\n * Handles keyboard events\n * @param event - Keyboard event that occured\n */\n @BindThis\n protected handleKeyboardEvents(event: KeyboardEvent): void\n {\n const options = this.selectPlugins.OptionsHandler.listOptions();\n\n if(event.key == 'ArrowDown' || event.key == 'ArrowUp')\n {\n const activeOption = options?.find(itm => itm.active());\n this.logger.verbose('Select: Keyboard handler: handling ArrowDown, ArrowUp');\n\n if(activeOption && options)\n {\n let index = options.indexOf(activeOption);\n\n //move down cursor\n if(event.key == 'ArrowDown')\n {\n index += 1;\n }\n //move up cursor\n else\n {\n index -= 1;\n }\n\n if(index < 0)\n {\n index = options.length - 1;\n }\n\n index = index % options.length;\n\n this.logger.verbose('Select: Keyboard handler: selecting option with index {{index}}', {index});\n\n this.selectBus.markOption.next(\n {\n source: this as SelectPlugin,\n sourceElement: this.selectBus.selectElement().nativeElement,\n data: options[index],\n });\n }\n //none active before\n else if(options?.length)\n {\n this.logger.verbose('Select: Keyboard handler: selecting option with index {{index}}', {index: 0});\n\n this.selectBus.markOption.next(\n {\n source: this as SelectPlugin,\n sourceElement: this.selectBus.selectElement().nativeElement,\n data: options[0],\n });\n }\n\n event.preventDefault();\n }\n\n //prevent enter if popup is opened\n if(event.key == 'Enter' && this.selectBus.popupVisible())\n {\n const activeOption = options?.find(itm => itm.active());\n this.logger.verbose('Select: Keyboard handler: handling Enter');\n\n if(activeOption)\n {\n this.logger.verbose('Select: Keyboard handler: selecting active option');\n\n this.selectBus.keyboardAction.next(\n {\n source: this as SelectPlugin,\n sourceElement: this.selectBus.selectElement().nativeElement,\n data: <SelectActiveKeyboardAction>{type: 'SELECT_ACTIVE'},\n });\n }\n\n event.preventDefault();\n }\n\n if(event.key == 'Tab' || event.key == 'Escape')\n {\n this.logger.verbose('Select: Keyboard handler: handling Tab, Escape');\n\n this.selectBus.hidePopup.next(\n {\n source: this as SelectPlugin,\n sourceElement: this.selectBus.selectElement().nativeElement,\n data: null,\n });\n }\n\n if(this.options.openPopupOnSpace && event.key == ' ')\n {\n this.logger.verbose('Select: Keyboard handler: handling Space');\n\n this.selectBus.showPopup.next(\n {\n source: this as SelectPlugin,\n sourceElement: this.selectBus.selectElement().nativeElement,\n data: null,\n });\n\n event.preventDefault();\n }\n\n if(this.options.alphanumericSearch && event.key.match(/^[a-z0-9]$/i))\n {\n this.logger.verbose('Select: Keyboard handler: handling alphanumeric key');\n\n this.search += event.key;\n\n if(isPresent(this.searchDebounceTimeout))\n {\n clearTimeout(this.searchDebounceTimeout);\n }\n\n this.searchDebounceTimeout = setTimeout(() =>\n {\n this.logger.verbose('Select: Keyboard handler: seinding SELECT_FIRST keyboard action with search \"{{search}}\"', {search: this.search});\n\n this.selectBus.keyboardAction.next(\n {\n source: this as SelectPlugin,\n sourceElement: this.selectBus.selectElement().nativeElement,\n data: <SelectFirstKeyboardAction>{type: 'SELECT_FIRST', search: this.search},\n });\n\n this.search = '';\n }, this.options.selectFirstDebounceTimeout) as unknown as number;\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anglr/select",
3
- "version": "17.2.0",
3
+ "version": "17.3.0",
4
4
  "description": "Angular component representing html select",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -1 +1 @@
1
- {"version":3,"file":"selectEdit.directive.d.ts","sourceRoot":"","sources":["selectEdit.directive.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,MAAM,EAAC,MAAM,0CAA0C,CAAC;;AAGhE;;GAEG;AACH,qBASa,UAAU,CAAC,MAAM,GAAG,OAAO,EAAE,YAAY,GAAG,MAAM;gBAG/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;yCAHvC,UAAU;2CAAV,UAAU;CAoBtB"}
1
+ {"version":3,"file":"selectEdit.directive.d.ts","sourceRoot":"","sources":["selectEdit.directive.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,MAAM,EAAC,MAAM,0CAA0C,CAAC;;AAGhE;;GAEG;AACH,qBASa,UAAU,CAAC,MAAM,GAAG,OAAO,EAAE,YAAY,GAAG,MAAM;gBAG/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;yCAHvC,UAAU;2CAAV,UAAU;CAqBtB"}
@@ -11,6 +11,10 @@ export interface SimpleKeyboardHandlerOptions extends KeyboardHandlerOptions {
11
11
  * Indication whether is alphanumeric search enabled, meaning that when user types alphanumeric keys (outside of live search), select will try to find option starting with searched text and select it
12
12
  */
13
13
  alphanumericSearch: boolean;
14
+ /**
15
+ * Indication whether space key should trigger opening select popup
16
+ */
17
+ openPopupOnSpace: boolean;
14
18
  /**
15
19
  * Indication whether live search events should be processed
16
20
  */
@@ -1 +1 @@
1
- {"version":3,"file":"simpleKeyboardHandler.interface.d.ts","sourceRoot":"","sources":["simpleKeyboardHandler.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,EAAC,MAAM,6BAA6B,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,4BAA6B,SAAQ,sBAAsB;IAIxE;;OAEG;IACH,0BAA0B,EAAE,MAAM,CAAC;IAEnC;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,gBAAgB,EAAE,OAAO,CAAC;CAC7B"}
1
+ {"version":3,"file":"simpleKeyboardHandler.interface.d.ts","sourceRoot":"","sources":["simpleKeyboardHandler.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,sBAAsB,EAAC,MAAM,6BAA6B,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,4BAA6B,SAAQ,sBAAsB;IAIxE;;OAEG;IACH,0BAA0B,EAAE,MAAM,CAAC;IAEnC;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,gBAAgB,EAAE,OAAO,CAAC;CAC7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"simpleKeyboardHandler.component.d.ts","sourceRoot":"","sources":["simpleKeyboardHandler.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,UAAU,EAAkB,SAAS,EAAW,MAAM,eAAe,CAAC;AACjG,OAAO,EAAS,MAAM,EAAC,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAsB,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAGrE,OAAO,EAAC,eAAe,EAAE,4BAA4B,EAA6G,MAAM,qBAAqB,CAAC;AAC9L,OAAO,EAAC,qBAAqB,EAAE,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAGvE,OAAO,EAAC,yBAAyB,EAAC,MAAM,qBAAqB,CAAC;;AAS9D;;GAEG;AACH,qBAKa,qBAAqB,CAAC,MAAM,GAAG,OAAO,EAAE,YAAY,GAAG,MAAM,CAAE,YAAW,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,4BAA4B,EAAE,yBAAyB,CAAC,EAAE,SAAS;IAI5L;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,CAAM;IAE9B;;OAEG;IACH,SAAS,CAAC,qBAAqB,EAAE,MAAM,GAAC,SAAS,GAAC,IAAI,CAAC;IAEvD;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,CAAkB;IAI1C;;OAEG;IAEI,OAAO,EAAE,4BAA4B,CAAC;IAE7C;;OAEG;IACI,aAAa,EAAE,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAiC;IAElG;;OAEG;IACI,aAAa,EAAE,UAAU,CAAC,WAAW,CAAC,CAAsB;IAEnE;;OAEG;IACI,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,yBAAyB,CAAC,CAAmF;gBAGrG,OAAO,CAAC,EAAE,gBAAgB,CAAC,4BAA4B,CAAC,GAAC,IAAI;IA2BvH;;OAEG;IACI,WAAW,IAAI,IAAI;IAa1B;;;OAGG;IAEH,SAAS,CAAC,8BAA8B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAapE;;;OAGG;IAEH,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;yCA7GjD,qBAAqB;2CAArB,qBAAqB;CA8OjC"}
1
+ {"version":3,"file":"simpleKeyboardHandler.component.d.ts","sourceRoot":"","sources":["simpleKeyboardHandler.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,UAAU,EAAkB,SAAS,EAAW,MAAM,eAAe,CAAC;AACjG,OAAO,EAAS,MAAM,EAAC,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAsB,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAGrE,OAAO,EAAC,eAAe,EAAE,4BAA4B,EAA6G,MAAM,qBAAqB,CAAC;AAC9L,OAAO,EAAC,qBAAqB,EAAE,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAGvE,OAAO,EAAC,yBAAyB,EAAC,MAAM,qBAAqB,CAAC;;AAU9D;;GAEG;AACH,qBAKa,qBAAqB,CAAC,MAAM,GAAG,OAAO,EAAE,YAAY,GAAG,MAAM,CAAE,YAAW,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,4BAA4B,EAAE,yBAAyB,CAAC,EAAE,SAAS;IAI5L;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,CAAM;IAE9B;;OAEG;IACH,SAAS,CAAC,qBAAqB,EAAE,MAAM,GAAC,SAAS,GAAC,IAAI,CAAC;IAEvD;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,CAAkB;IAI1C;;OAEG;IAEI,OAAO,EAAE,4BAA4B,CAAC;IAE7C;;OAEG;IACI,aAAa,EAAE,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAiC;IAElG;;OAEG;IACI,aAAa,EAAE,UAAU,CAAC,WAAW,CAAC,CAAsB;IAEnE;;OAEG;IACI,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,yBAAyB,CAAC,CAAmF;gBAGrG,OAAO,CAAC,EAAE,gBAAgB,CAAC,4BAA4B,CAAC,GAAC,IAAI;IA2BvH;;OAEG;IACI,WAAW,IAAI,IAAI;IAa1B;;;OAGG;IAEH,SAAS,CAAC,8BAA8B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAapE;;;OAGG;IAEH,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;yCA7GjD,qBAAqB;2CAArB,qBAAqB;CA8OjC"}
package/version.bak CHANGED
@@ -1 +1 @@
1
- 17.2.0
1
+ 17.3.0